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.
- package/CHANGELOG.md +44 -0
- package/LICENSE +34 -34
- package/README.md +71 -58
- package/astralkit-theme-v4.css +618 -612
- package/astralkit-theme.css +618 -610
- package/astralkit-utilities.css +543 -543
- package/lib/utils.js +28 -28
- package/package.json +53 -45
- package/palettes.css +299 -299
- package/primitives/accounts.css +435 -435
- package/primitives/animations.css +136 -136
- package/primitives/avatar.css +410 -410
- package/primitives/badges.css +231 -231
- package/primitives/effects.css +388 -388
- package/primitives/focus.css +25 -25
- package/primitives/forms.css +2155 -2155
- package/primitives/icons.css +90 -90
- package/primitives/layout.css +217 -217
- package/primitives/mobile.css +557 -557
- package/primitives/navigation.css +1057 -1057
- package/primitives/sidebar.css +1819 -1819
- package/primitives/typography.css +324 -324
- package/tailwind.cjs +416 -416
- package/tailwind.js +491 -491
package/primitives/effects.css
CHANGED
|
@@ -1,388 +1,388 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/* Effects primitives — mesh gradients, noise, glow, glass, borders */
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/* ══════════════════════════════════════════════
|
|
7
|
-
Mesh Gradient Backgrounds
|
|
8
|
-
Usage: <section class="ak-mesh-dark">
|
|
9
|
-
Override colors via --ak-mesh-color-* vars.
|
|
10
|
-
══════════════════════════════════════════════ */
|
|
11
|
-
|
|
12
|
-
.ak-mesh-dark {
|
|
13
|
-
--ak-mesh-color-1: hsla(265, 90%, 55%, 0.55);
|
|
14
|
-
--ak-mesh-color-2: hsla(220, 85%, 60%, 0.40);
|
|
15
|
-
--ak-mesh-color-3: hsla(185, 80%, 50%, 0.30);
|
|
16
|
-
--ak-mesh-color-4: hsla(300, 70%, 55%, 0.25);
|
|
17
|
-
--ak-mesh-base: #0a0a0f;
|
|
18
|
-
|
|
19
|
-
background-color: var(--ak-mesh-base);
|
|
20
|
-
background-image:
|
|
21
|
-
radial-gradient(ellipse 80% 60% at 20% 10%, var(--ak-mesh-color-1) 0%, transparent 70%),
|
|
22
|
-
radial-gradient(ellipse 60% 50% at 80% 20%, var(--ak-mesh-color-2) 0%, transparent 65%),
|
|
23
|
-
radial-gradient(ellipse 70% 60% at 50% 80%, var(--ak-mesh-color-3) 0%, transparent 65%),
|
|
24
|
-
radial-gradient(ellipse 50% 40% at 90% 70%, var(--ak-mesh-color-4) 0%, transparent 60%);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ak-mesh-light {
|
|
28
|
-
--ak-mesh-color-1: hsla(265, 80%, 70%, 0.18);
|
|
29
|
-
--ak-mesh-color-2: hsla(210, 90%, 65%, 0.15);
|
|
30
|
-
--ak-mesh-color-3: hsla(320, 70%, 75%, 0.12);
|
|
31
|
-
--ak-mesh-color-4: hsla(175, 70%, 60%, 0.10);
|
|
32
|
-
--ak-mesh-base: #fafafa;
|
|
33
|
-
|
|
34
|
-
background-color: var(--ak-mesh-base);
|
|
35
|
-
background-image:
|
|
36
|
-
radial-gradient(ellipse 70% 50% at 20% 15%, var(--ak-mesh-color-1) 0%, transparent 65%),
|
|
37
|
-
radial-gradient(ellipse 60% 45% at 80% 10%, var(--ak-mesh-color-2) 0%, transparent 60%),
|
|
38
|
-
radial-gradient(ellipse 80% 50% at 50% 90%, var(--ak-mesh-color-3) 0%, transparent 65%),
|
|
39
|
-
radial-gradient(ellipse 55% 40% at 85% 75%, var(--ak-mesh-color-4) 0%, transparent 55%);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/* AstralKit branded mesh (violet/blue/teal on deep purple) */
|
|
43
|
-
.ak-mesh-astral {
|
|
44
|
-
--ak-mesh-base: #0D0622;
|
|
45
|
-
background-color: var(--ak-mesh-base);
|
|
46
|
-
background-image:
|
|
47
|
-
radial-gradient(ellipse 80% 55% at 15% 15%, hsla(258, 100%, 60%, 0.60) 0%, transparent 70%),
|
|
48
|
-
radial-gradient(ellipse 65% 50% at 82% 18%, hsla(220, 90%, 58%, 0.40) 0%, transparent 65%),
|
|
49
|
-
radial-gradient(ellipse 70% 55% at 50% 85%, hsla(195, 85%, 50%, 0.32) 0%, transparent 65%),
|
|
50
|
-
radial-gradient(ellipse 55% 40% at 90% 72%, hsla(280, 75%, 55%, 0.28) 0%, transparent 60%);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
/* ══════════════════════════════════════════════
|
|
55
|
-
Noise / Grain Overlay
|
|
56
|
-
Usage: <section class="ak-mesh-dark ak-noise">
|
|
57
|
-
Adds film grain via ::before pseudo-element.
|
|
58
|
-
══════════════════════════════════════════════ */
|
|
59
|
-
|
|
60
|
-
.ak-noise {
|
|
61
|
-
position: relative;
|
|
62
|
-
}
|
|
63
|
-
.ak-noise::before {
|
|
64
|
-
content: "";
|
|
65
|
-
position: absolute;
|
|
66
|
-
inset: 0;
|
|
67
|
-
border-radius: inherit;
|
|
68
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
69
|
-
background-repeat: repeat;
|
|
70
|
-
background-size: 200px 200px;
|
|
71
|
-
opacity: 0.05;
|
|
72
|
-
mix-blend-mode: overlay;
|
|
73
|
-
pointer-events: none;
|
|
74
|
-
z-index: 1;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/* Light mode: stronger noise, multiply blend */
|
|
78
|
-
.ak-noise-light {
|
|
79
|
-
position: relative;
|
|
80
|
-
}
|
|
81
|
-
.ak-noise-light::before {
|
|
82
|
-
content: "";
|
|
83
|
-
position: absolute;
|
|
84
|
-
inset: 0;
|
|
85
|
-
border-radius: inherit;
|
|
86
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
87
|
-
background-repeat: repeat;
|
|
88
|
-
background-size: 200px 200px;
|
|
89
|
-
opacity: 0.10;
|
|
90
|
-
mix-blend-mode: multiply;
|
|
91
|
-
pointer-events: none;
|
|
92
|
-
z-index: 1;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
/* ══════════════════════════════════════════════
|
|
97
|
-
Card Glow on Hover
|
|
98
|
-
Usage: <div class="ak-card-shell ak-card-glow">
|
|
99
|
-
══════════════════════════════════════════════ */
|
|
100
|
-
|
|
101
|
-
.ak-card-glow {
|
|
102
|
-
transition: box-shadow var(--duration-ak-base, 150ms) var(--ease-ak-default, ease);
|
|
103
|
-
}
|
|
104
|
-
.ak-card-glow:hover {
|
|
105
|
-
box-shadow:
|
|
106
|
-
0 0 0 1px hsla(265, 90%, 60%, 0.20),
|
|
107
|
-
0 8px 32px -4px hsla(265, 90%, 60%, 0.25),
|
|
108
|
-
0 0 48px -8px hsla(265, 90%, 60%, 0.15);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/* Neutral glow (no accent color) — works on any theme */
|
|
112
|
-
.ak-card-glow-neutral {
|
|
113
|
-
transition: box-shadow var(--duration-ak-base, 150ms) var(--ease-ak-default, ease);
|
|
114
|
-
}
|
|
115
|
-
.ak-card-glow-neutral:hover {
|
|
116
|
-
box-shadow:
|
|
117
|
-
0 0 0 1px rgba(255, 255, 255, 0.12),
|
|
118
|
-
0 8px 32px -4px rgba(0, 0, 0, 0.4),
|
|
119
|
-
0 0 60px -12px rgba(255, 255, 255, 0.06);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
/* ══════════════════════════════════════════════
|
|
124
|
-
Text Glow (dark backgrounds only)
|
|
125
|
-
Usage: <h1 class="ak-text-glow">
|
|
126
|
-
══════════════════════════════════════════════ */
|
|
127
|
-
|
|
128
|
-
.ak-text-glow {
|
|
129
|
-
text-shadow:
|
|
130
|
-
0 0 20px rgba(129, 140, 248, 0.6),
|
|
131
|
-
0 0 60px rgba(129, 140, 248, 0.25);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/* Intense neon — use on single accent words, not full paragraphs */
|
|
135
|
-
.ak-text-glow-intense {
|
|
136
|
-
color: #a5b4fc;
|
|
137
|
-
text-shadow:
|
|
138
|
-
0 0 4px rgba(165, 180, 252, 0.9),
|
|
139
|
-
0 0 16px rgba(165, 180, 252, 0.6),
|
|
140
|
-
0 0 40px rgba(129, 140, 248, 0.4),
|
|
141
|
-
0 0 80px rgba(99, 102, 241, 0.2);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/* ══════════════════════════════════════════════
|
|
146
|
-
Section Spotlight
|
|
147
|
-
Radial glow behind section content.
|
|
148
|
-
Usage: <section class="ak-spotlight-section">
|
|
149
|
-
══════════════════════════════════════════════ */
|
|
150
|
-
|
|
151
|
-
.ak-spotlight-section {
|
|
152
|
-
position: relative;
|
|
153
|
-
isolation: isolate;
|
|
154
|
-
}
|
|
155
|
-
.ak-spotlight-section::before {
|
|
156
|
-
content: "";
|
|
157
|
-
position: absolute;
|
|
158
|
-
inset: 0;
|
|
159
|
-
background: radial-gradient(
|
|
160
|
-
ellipse 60% 50% at 50% 0%,
|
|
161
|
-
hsla(258, 80%, 70%, 0.15) 0%,
|
|
162
|
-
transparent 70%
|
|
163
|
-
);
|
|
164
|
-
pointer-events: none;
|
|
165
|
-
z-index: -1;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
/* ══════════════════════════════════════════════
|
|
170
|
-
Section Fade Divider
|
|
171
|
-
Gradient transition between sections.
|
|
172
|
-
Usage: <div class="ak-section-fade">
|
|
173
|
-
══════════════════════════════════════════════ */
|
|
174
|
-
|
|
175
|
-
.ak-section-fade {
|
|
176
|
-
background: linear-gradient(
|
|
177
|
-
to bottom,
|
|
178
|
-
var(--color-ak-bg) 0%,
|
|
179
|
-
var(--color-ak-surface-2) 100%
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.ak-section-fade-reverse {
|
|
184
|
-
background: linear-gradient(
|
|
185
|
-
to bottom,
|
|
186
|
-
var(--color-ak-surface-2) 0%,
|
|
187
|
-
var(--color-ak-bg) 100%
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
/* ══════════════════════════════════════════════
|
|
193
|
-
Gradient Border (Static)
|
|
194
|
-
Conic-gradient border on cards.
|
|
195
|
-
Usage: <div class="ak-gradient-border">
|
|
196
|
-
══════════════════════════════════════════════ */
|
|
197
|
-
|
|
198
|
-
.ak-gradient-border {
|
|
199
|
-
--ak-gb-width: 1px;
|
|
200
|
-
--ak-gb-radius: var(--radius-ak-lg, 0.75rem);
|
|
201
|
-
--ak-gb-bg: var(--color-ak-surface, #ffffff);
|
|
202
|
-
|
|
203
|
-
position: relative;
|
|
204
|
-
border-radius: var(--ak-gb-radius);
|
|
205
|
-
background: var(--ak-gb-bg);
|
|
206
|
-
background-clip: padding-box;
|
|
207
|
-
border: var(--ak-gb-width) solid transparent;
|
|
208
|
-
}
|
|
209
|
-
.ak-gradient-border::before {
|
|
210
|
-
content: "";
|
|
211
|
-
position: absolute;
|
|
212
|
-
inset: calc(var(--ak-gb-width) * -1);
|
|
213
|
-
border-radius: inherit;
|
|
214
|
-
z-index: -1;
|
|
215
|
-
background: conic-gradient(
|
|
216
|
-
from 180deg at 50% 50%,
|
|
217
|
-
hsla(265, 80%, 65%, 0.8),
|
|
218
|
-
hsla(220, 90%, 60%, 0.6),
|
|
219
|
-
hsla(195, 85%, 55%, 0.5),
|
|
220
|
-
hsla(265, 80%, 65%, 0.8)
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.dark .ak-gradient-border {
|
|
225
|
-
--ak-gb-bg: var(--color-ak-surface, #18191b);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
/* ══════════════════════════════════════════════
|
|
230
|
-
Animated Gradient Border (Rotating)
|
|
231
|
-
Requires @property — Chrome/Edge, Safari 16.4+, Firefox 128+.
|
|
232
|
-
Usage: <div class="ak-animated-border">
|
|
233
|
-
══════════════════════════════════════════════ */
|
|
234
|
-
|
|
235
|
-
@property --ak-border-angle {
|
|
236
|
-
syntax: "<angle>";
|
|
237
|
-
inherits: false;
|
|
238
|
-
initial-value: 0deg;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.ak-animated-border {
|
|
242
|
-
--ak-ab-width: 1px;
|
|
243
|
-
--ak-ab-radius: var(--radius-ak-lg, 0.75rem);
|
|
244
|
-
--ak-ab-bg: var(--color-ak-surface, #18191b);
|
|
245
|
-
|
|
246
|
-
position: relative;
|
|
247
|
-
border-radius: var(--ak-ab-radius);
|
|
248
|
-
background: var(--ak-ab-bg);
|
|
249
|
-
background-clip: padding-box;
|
|
250
|
-
border: var(--ak-ab-width) solid transparent;
|
|
251
|
-
animation: ak-border-spin 4s linear infinite;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/* Glow layer (blurred behind) */
|
|
255
|
-
.ak-animated-border::before {
|
|
256
|
-
content: "";
|
|
257
|
-
position: absolute;
|
|
258
|
-
inset: calc(var(--ak-ab-width) * -1 - 4px);
|
|
259
|
-
border-radius: calc(var(--ak-ab-radius) + 4px);
|
|
260
|
-
z-index: -2;
|
|
261
|
-
background: conic-gradient(
|
|
262
|
-
from var(--ak-border-angle),
|
|
263
|
-
transparent 20%,
|
|
264
|
-
hsla(265, 90%, 60%, 0.6) 40%,
|
|
265
|
-
hsla(220, 85%, 60%, 0.4) 55%,
|
|
266
|
-
transparent 70%
|
|
267
|
-
);
|
|
268
|
-
filter: blur(12px);
|
|
269
|
-
opacity: 0.8;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/* Border layer */
|
|
273
|
-
.ak-animated-border::after {
|
|
274
|
-
content: "";
|
|
275
|
-
position: absolute;
|
|
276
|
-
inset: calc(var(--ak-ab-width) * -1);
|
|
277
|
-
border-radius: inherit;
|
|
278
|
-
z-index: -1;
|
|
279
|
-
background: conic-gradient(
|
|
280
|
-
from var(--ak-border-angle),
|
|
281
|
-
transparent 20%,
|
|
282
|
-
hsla(265, 90%, 65%, 1) 40%,
|
|
283
|
-
hsla(220, 85%, 65%, 0.8) 55%,
|
|
284
|
-
transparent 70%
|
|
285
|
-
);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
@keyframes ak-border-spin {
|
|
289
|
-
to { --ak-border-angle: 360deg; }
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
/* ══════════════════════════════════════════════
|
|
294
|
-
Ambient Glow Behind Images
|
|
295
|
-
Usage: <div class="ak-ambient-glow"><img ...></div>
|
|
296
|
-
══════════════════════════════════════════════ */
|
|
297
|
-
|
|
298
|
-
.ak-ambient-glow {
|
|
299
|
-
position: relative;
|
|
300
|
-
display: inline-block;
|
|
301
|
-
}
|
|
302
|
-
.ak-ambient-glow::before {
|
|
303
|
-
content: "";
|
|
304
|
-
position: absolute;
|
|
305
|
-
inset: -20% -15%;
|
|
306
|
-
background: radial-gradient(
|
|
307
|
-
ellipse at center,
|
|
308
|
-
hsla(265, 90%, 60%, 0.35) 0%,
|
|
309
|
-
hsla(220, 80%, 55%, 0.15) 45%,
|
|
310
|
-
transparent 70%
|
|
311
|
-
);
|
|
312
|
-
filter: blur(40px);
|
|
313
|
-
z-index: -1;
|
|
314
|
-
pointer-events: none;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
/* ══════════════════════════════════════════════
|
|
319
|
-
Frosted Nav Bar
|
|
320
|
-
Usage: <nav class="ak-nav-frosted">
|
|
321
|
-
══════════════════════════════════════════════ */
|
|
322
|
-
|
|
323
|
-
.ak-nav-frosted {
|
|
324
|
-
background: rgba(255, 255, 255, 0.6);
|
|
325
|
-
backdrop-filter: blur(16px) saturate(140%);
|
|
326
|
-
-webkit-backdrop-filter: blur(16px) saturate(140%);
|
|
327
|
-
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
.dark .ak-nav-frosted {
|
|
331
|
-
background: rgba(17, 17, 19, 0.70);
|
|
332
|
-
backdrop-filter: blur(16px) saturate(160%);
|
|
333
|
-
-webkit-backdrop-filter: blur(16px) saturate(160%);
|
|
334
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
/* ══════════════════════════════════════════════
|
|
339
|
-
Button Neon Glow (dark backgrounds)
|
|
340
|
-
Usage: <button class="ak-btn-neon">
|
|
341
|
-
══════════════════════════════════════════════ */
|
|
342
|
-
|
|
343
|
-
.ak-btn-neon {
|
|
344
|
-
transition:
|
|
345
|
-
box-shadow var(--duration-ak-fast, 110ms) var(--ease-ak-default, ease),
|
|
346
|
-
transform var(--duration-ak-fast, 110ms) var(--ease-ak-default, ease);
|
|
347
|
-
}
|
|
348
|
-
.ak-btn-neon:hover {
|
|
349
|
-
transform: translateY(-1px);
|
|
350
|
-
box-shadow:
|
|
351
|
-
0 0 8px 2px hsla(258, 100%, 60%, 0.50),
|
|
352
|
-
0 0 24px 4px hsla(258, 100%, 60%, 0.30),
|
|
353
|
-
0 0 48px 8px hsla(258, 100%, 60%, 0.15);
|
|
354
|
-
}
|
|
355
|
-
.ak-btn-neon:active {
|
|
356
|
-
transform: translateY(0);
|
|
357
|
-
box-shadow: 0 0 12px 2px hsla(258, 100%, 60%, 0.40);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
/* ══════════════════════════════════════════════
|
|
362
|
-
Spotlight Card (cursor-following glow)
|
|
363
|
-
Requires minimal JS to set --ak-spotlight-x/y.
|
|
364
|
-
Usage: <div class="ak-spotlight-card">
|
|
365
|
-
══════════════════════════════════════════════ */
|
|
366
|
-
|
|
367
|
-
.ak-spotlight-card {
|
|
368
|
-
position: relative;
|
|
369
|
-
overflow: hidden;
|
|
370
|
-
}
|
|
371
|
-
.ak-spotlight-card::before {
|
|
372
|
-
content: "";
|
|
373
|
-
position: absolute;
|
|
374
|
-
inset: 0;
|
|
375
|
-
background: radial-gradient(
|
|
376
|
-
circle 200px at var(--ak-spotlight-x, 50%) var(--ak-spotlight-y, 50%),
|
|
377
|
-
rgba(129, 140, 248, 0.12) 0%,
|
|
378
|
-
transparent 100%
|
|
379
|
-
);
|
|
380
|
-
pointer-events: none;
|
|
381
|
-
opacity: 0;
|
|
382
|
-
transition: opacity 300ms ease;
|
|
383
|
-
z-index: 1;
|
|
384
|
-
}
|
|
385
|
-
.ak-spotlight-card:hover::before {
|
|
386
|
-
opacity: 1;
|
|
387
|
-
}
|
|
388
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/* Effects primitives — mesh gradients, noise, glow, glass, borders */
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/* ══════════════════════════════════════════════
|
|
7
|
+
Mesh Gradient Backgrounds
|
|
8
|
+
Usage: <section class="ak-mesh-dark">
|
|
9
|
+
Override colors via --ak-mesh-color-* vars.
|
|
10
|
+
══════════════════════════════════════════════ */
|
|
11
|
+
|
|
12
|
+
.ak-mesh-dark {
|
|
13
|
+
--ak-mesh-color-1: hsla(265, 90%, 55%, 0.55);
|
|
14
|
+
--ak-mesh-color-2: hsla(220, 85%, 60%, 0.40);
|
|
15
|
+
--ak-mesh-color-3: hsla(185, 80%, 50%, 0.30);
|
|
16
|
+
--ak-mesh-color-4: hsla(300, 70%, 55%, 0.25);
|
|
17
|
+
--ak-mesh-base: #0a0a0f;
|
|
18
|
+
|
|
19
|
+
background-color: var(--ak-mesh-base);
|
|
20
|
+
background-image:
|
|
21
|
+
radial-gradient(ellipse 80% 60% at 20% 10%, var(--ak-mesh-color-1) 0%, transparent 70%),
|
|
22
|
+
radial-gradient(ellipse 60% 50% at 80% 20%, var(--ak-mesh-color-2) 0%, transparent 65%),
|
|
23
|
+
radial-gradient(ellipse 70% 60% at 50% 80%, var(--ak-mesh-color-3) 0%, transparent 65%),
|
|
24
|
+
radial-gradient(ellipse 50% 40% at 90% 70%, var(--ak-mesh-color-4) 0%, transparent 60%);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ak-mesh-light {
|
|
28
|
+
--ak-mesh-color-1: hsla(265, 80%, 70%, 0.18);
|
|
29
|
+
--ak-mesh-color-2: hsla(210, 90%, 65%, 0.15);
|
|
30
|
+
--ak-mesh-color-3: hsla(320, 70%, 75%, 0.12);
|
|
31
|
+
--ak-mesh-color-4: hsla(175, 70%, 60%, 0.10);
|
|
32
|
+
--ak-mesh-base: #fafafa;
|
|
33
|
+
|
|
34
|
+
background-color: var(--ak-mesh-base);
|
|
35
|
+
background-image:
|
|
36
|
+
radial-gradient(ellipse 70% 50% at 20% 15%, var(--ak-mesh-color-1) 0%, transparent 65%),
|
|
37
|
+
radial-gradient(ellipse 60% 45% at 80% 10%, var(--ak-mesh-color-2) 0%, transparent 60%),
|
|
38
|
+
radial-gradient(ellipse 80% 50% at 50% 90%, var(--ak-mesh-color-3) 0%, transparent 65%),
|
|
39
|
+
radial-gradient(ellipse 55% 40% at 85% 75%, var(--ak-mesh-color-4) 0%, transparent 55%);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* AstralKit branded mesh (violet/blue/teal on deep purple) */
|
|
43
|
+
.ak-mesh-astral {
|
|
44
|
+
--ak-mesh-base: #0D0622;
|
|
45
|
+
background-color: var(--ak-mesh-base);
|
|
46
|
+
background-image:
|
|
47
|
+
radial-gradient(ellipse 80% 55% at 15% 15%, hsla(258, 100%, 60%, 0.60) 0%, transparent 70%),
|
|
48
|
+
radial-gradient(ellipse 65% 50% at 82% 18%, hsla(220, 90%, 58%, 0.40) 0%, transparent 65%),
|
|
49
|
+
radial-gradient(ellipse 70% 55% at 50% 85%, hsla(195, 85%, 50%, 0.32) 0%, transparent 65%),
|
|
50
|
+
radial-gradient(ellipse 55% 40% at 90% 72%, hsla(280, 75%, 55%, 0.28) 0%, transparent 60%);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/* ══════════════════════════════════════════════
|
|
55
|
+
Noise / Grain Overlay
|
|
56
|
+
Usage: <section class="ak-mesh-dark ak-noise">
|
|
57
|
+
Adds film grain via ::before pseudo-element.
|
|
58
|
+
══════════════════════════════════════════════ */
|
|
59
|
+
|
|
60
|
+
.ak-noise {
|
|
61
|
+
position: relative;
|
|
62
|
+
}
|
|
63
|
+
.ak-noise::before {
|
|
64
|
+
content: "";
|
|
65
|
+
position: absolute;
|
|
66
|
+
inset: 0;
|
|
67
|
+
border-radius: inherit;
|
|
68
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
69
|
+
background-repeat: repeat;
|
|
70
|
+
background-size: 200px 200px;
|
|
71
|
+
opacity: 0.05;
|
|
72
|
+
mix-blend-mode: overlay;
|
|
73
|
+
pointer-events: none;
|
|
74
|
+
z-index: 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Light mode: stronger noise, multiply blend */
|
|
78
|
+
.ak-noise-light {
|
|
79
|
+
position: relative;
|
|
80
|
+
}
|
|
81
|
+
.ak-noise-light::before {
|
|
82
|
+
content: "";
|
|
83
|
+
position: absolute;
|
|
84
|
+
inset: 0;
|
|
85
|
+
border-radius: inherit;
|
|
86
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
87
|
+
background-repeat: repeat;
|
|
88
|
+
background-size: 200px 200px;
|
|
89
|
+
opacity: 0.10;
|
|
90
|
+
mix-blend-mode: multiply;
|
|
91
|
+
pointer-events: none;
|
|
92
|
+
z-index: 1;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
/* ══════════════════════════════════════════════
|
|
97
|
+
Card Glow on Hover
|
|
98
|
+
Usage: <div class="ak-card-shell ak-card-glow">
|
|
99
|
+
══════════════════════════════════════════════ */
|
|
100
|
+
|
|
101
|
+
.ak-card-glow {
|
|
102
|
+
transition: box-shadow var(--duration-ak-base, 150ms) var(--ease-ak-default, ease);
|
|
103
|
+
}
|
|
104
|
+
.ak-card-glow:hover {
|
|
105
|
+
box-shadow:
|
|
106
|
+
0 0 0 1px hsla(265, 90%, 60%, 0.20),
|
|
107
|
+
0 8px 32px -4px hsla(265, 90%, 60%, 0.25),
|
|
108
|
+
0 0 48px -8px hsla(265, 90%, 60%, 0.15);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Neutral glow (no accent color) — works on any theme */
|
|
112
|
+
.ak-card-glow-neutral {
|
|
113
|
+
transition: box-shadow var(--duration-ak-base, 150ms) var(--ease-ak-default, ease);
|
|
114
|
+
}
|
|
115
|
+
.ak-card-glow-neutral:hover {
|
|
116
|
+
box-shadow:
|
|
117
|
+
0 0 0 1px rgba(255, 255, 255, 0.12),
|
|
118
|
+
0 8px 32px -4px rgba(0, 0, 0, 0.4),
|
|
119
|
+
0 0 60px -12px rgba(255, 255, 255, 0.06);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
/* ══════════════════════════════════════════════
|
|
124
|
+
Text Glow (dark backgrounds only)
|
|
125
|
+
Usage: <h1 class="ak-text-glow">
|
|
126
|
+
══════════════════════════════════════════════ */
|
|
127
|
+
|
|
128
|
+
.ak-text-glow {
|
|
129
|
+
text-shadow:
|
|
130
|
+
0 0 20px rgba(129, 140, 248, 0.6),
|
|
131
|
+
0 0 60px rgba(129, 140, 248, 0.25);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Intense neon — use on single accent words, not full paragraphs */
|
|
135
|
+
.ak-text-glow-intense {
|
|
136
|
+
color: #a5b4fc;
|
|
137
|
+
text-shadow:
|
|
138
|
+
0 0 4px rgba(165, 180, 252, 0.9),
|
|
139
|
+
0 0 16px rgba(165, 180, 252, 0.6),
|
|
140
|
+
0 0 40px rgba(129, 140, 248, 0.4),
|
|
141
|
+
0 0 80px rgba(99, 102, 241, 0.2);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
/* ══════════════════════════════════════════════
|
|
146
|
+
Section Spotlight
|
|
147
|
+
Radial glow behind section content.
|
|
148
|
+
Usage: <section class="ak-spotlight-section">
|
|
149
|
+
══════════════════════════════════════════════ */
|
|
150
|
+
|
|
151
|
+
.ak-spotlight-section {
|
|
152
|
+
position: relative;
|
|
153
|
+
isolation: isolate;
|
|
154
|
+
}
|
|
155
|
+
.ak-spotlight-section::before {
|
|
156
|
+
content: "";
|
|
157
|
+
position: absolute;
|
|
158
|
+
inset: 0;
|
|
159
|
+
background: radial-gradient(
|
|
160
|
+
ellipse 60% 50% at 50% 0%,
|
|
161
|
+
hsla(258, 80%, 70%, 0.15) 0%,
|
|
162
|
+
transparent 70%
|
|
163
|
+
);
|
|
164
|
+
pointer-events: none;
|
|
165
|
+
z-index: -1;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
/* ══════════════════════════════════════════════
|
|
170
|
+
Section Fade Divider
|
|
171
|
+
Gradient transition between sections.
|
|
172
|
+
Usage: <div class="ak-section-fade">
|
|
173
|
+
══════════════════════════════════════════════ */
|
|
174
|
+
|
|
175
|
+
.ak-section-fade {
|
|
176
|
+
background: linear-gradient(
|
|
177
|
+
to bottom,
|
|
178
|
+
var(--color-ak-bg) 0%,
|
|
179
|
+
var(--color-ak-surface-2) 100%
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.ak-section-fade-reverse {
|
|
184
|
+
background: linear-gradient(
|
|
185
|
+
to bottom,
|
|
186
|
+
var(--color-ak-surface-2) 0%,
|
|
187
|
+
var(--color-ak-bg) 100%
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
/* ══════════════════════════════════════════════
|
|
193
|
+
Gradient Border (Static)
|
|
194
|
+
Conic-gradient border on cards.
|
|
195
|
+
Usage: <div class="ak-gradient-border">
|
|
196
|
+
══════════════════════════════════════════════ */
|
|
197
|
+
|
|
198
|
+
.ak-gradient-border {
|
|
199
|
+
--ak-gb-width: 1px;
|
|
200
|
+
--ak-gb-radius: var(--radius-ak-lg, 0.75rem);
|
|
201
|
+
--ak-gb-bg: var(--color-ak-surface, #ffffff);
|
|
202
|
+
|
|
203
|
+
position: relative;
|
|
204
|
+
border-radius: var(--ak-gb-radius);
|
|
205
|
+
background: var(--ak-gb-bg);
|
|
206
|
+
background-clip: padding-box;
|
|
207
|
+
border: var(--ak-gb-width) solid transparent;
|
|
208
|
+
}
|
|
209
|
+
.ak-gradient-border::before {
|
|
210
|
+
content: "";
|
|
211
|
+
position: absolute;
|
|
212
|
+
inset: calc(var(--ak-gb-width) * -1);
|
|
213
|
+
border-radius: inherit;
|
|
214
|
+
z-index: -1;
|
|
215
|
+
background: conic-gradient(
|
|
216
|
+
from 180deg at 50% 50%,
|
|
217
|
+
hsla(265, 80%, 65%, 0.8),
|
|
218
|
+
hsla(220, 90%, 60%, 0.6),
|
|
219
|
+
hsla(195, 85%, 55%, 0.5),
|
|
220
|
+
hsla(265, 80%, 65%, 0.8)
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.dark .ak-gradient-border {
|
|
225
|
+
--ak-gb-bg: var(--color-ak-surface, #18191b);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
/* ══════════════════════════════════════════════
|
|
230
|
+
Animated Gradient Border (Rotating)
|
|
231
|
+
Requires @property — Chrome/Edge, Safari 16.4+, Firefox 128+.
|
|
232
|
+
Usage: <div class="ak-animated-border">
|
|
233
|
+
══════════════════════════════════════════════ */
|
|
234
|
+
|
|
235
|
+
@property --ak-border-angle {
|
|
236
|
+
syntax: "<angle>";
|
|
237
|
+
inherits: false;
|
|
238
|
+
initial-value: 0deg;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.ak-animated-border {
|
|
242
|
+
--ak-ab-width: 1px;
|
|
243
|
+
--ak-ab-radius: var(--radius-ak-lg, 0.75rem);
|
|
244
|
+
--ak-ab-bg: var(--color-ak-surface, #18191b);
|
|
245
|
+
|
|
246
|
+
position: relative;
|
|
247
|
+
border-radius: var(--ak-ab-radius);
|
|
248
|
+
background: var(--ak-ab-bg);
|
|
249
|
+
background-clip: padding-box;
|
|
250
|
+
border: var(--ak-ab-width) solid transparent;
|
|
251
|
+
animation: ak-border-spin 4s linear infinite;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* Glow layer (blurred behind) */
|
|
255
|
+
.ak-animated-border::before {
|
|
256
|
+
content: "";
|
|
257
|
+
position: absolute;
|
|
258
|
+
inset: calc(var(--ak-ab-width) * -1 - 4px);
|
|
259
|
+
border-radius: calc(var(--ak-ab-radius) + 4px);
|
|
260
|
+
z-index: -2;
|
|
261
|
+
background: conic-gradient(
|
|
262
|
+
from var(--ak-border-angle),
|
|
263
|
+
transparent 20%,
|
|
264
|
+
hsla(265, 90%, 60%, 0.6) 40%,
|
|
265
|
+
hsla(220, 85%, 60%, 0.4) 55%,
|
|
266
|
+
transparent 70%
|
|
267
|
+
);
|
|
268
|
+
filter: blur(12px);
|
|
269
|
+
opacity: 0.8;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Border layer */
|
|
273
|
+
.ak-animated-border::after {
|
|
274
|
+
content: "";
|
|
275
|
+
position: absolute;
|
|
276
|
+
inset: calc(var(--ak-ab-width) * -1);
|
|
277
|
+
border-radius: inherit;
|
|
278
|
+
z-index: -1;
|
|
279
|
+
background: conic-gradient(
|
|
280
|
+
from var(--ak-border-angle),
|
|
281
|
+
transparent 20%,
|
|
282
|
+
hsla(265, 90%, 65%, 1) 40%,
|
|
283
|
+
hsla(220, 85%, 65%, 0.8) 55%,
|
|
284
|
+
transparent 70%
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
@keyframes ak-border-spin {
|
|
289
|
+
to { --ak-border-angle: 360deg; }
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
/* ══════════════════════════════════════════════
|
|
294
|
+
Ambient Glow Behind Images
|
|
295
|
+
Usage: <div class="ak-ambient-glow"><img ...></div>
|
|
296
|
+
══════════════════════════════════════════════ */
|
|
297
|
+
|
|
298
|
+
.ak-ambient-glow {
|
|
299
|
+
position: relative;
|
|
300
|
+
display: inline-block;
|
|
301
|
+
}
|
|
302
|
+
.ak-ambient-glow::before {
|
|
303
|
+
content: "";
|
|
304
|
+
position: absolute;
|
|
305
|
+
inset: -20% -15%;
|
|
306
|
+
background: radial-gradient(
|
|
307
|
+
ellipse at center,
|
|
308
|
+
hsla(265, 90%, 60%, 0.35) 0%,
|
|
309
|
+
hsla(220, 80%, 55%, 0.15) 45%,
|
|
310
|
+
transparent 70%
|
|
311
|
+
);
|
|
312
|
+
filter: blur(40px);
|
|
313
|
+
z-index: -1;
|
|
314
|
+
pointer-events: none;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
/* ══════════════════════════════════════════════
|
|
319
|
+
Frosted Nav Bar
|
|
320
|
+
Usage: <nav class="ak-nav-frosted">
|
|
321
|
+
══════════════════════════════════════════════ */
|
|
322
|
+
|
|
323
|
+
.ak-nav-frosted {
|
|
324
|
+
background: rgba(255, 255, 255, 0.6);
|
|
325
|
+
backdrop-filter: blur(16px) saturate(140%);
|
|
326
|
+
-webkit-backdrop-filter: blur(16px) saturate(140%);
|
|
327
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.dark .ak-nav-frosted {
|
|
331
|
+
background: rgba(17, 17, 19, 0.70);
|
|
332
|
+
backdrop-filter: blur(16px) saturate(160%);
|
|
333
|
+
-webkit-backdrop-filter: blur(16px) saturate(160%);
|
|
334
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
/* ══════════════════════════════════════════════
|
|
339
|
+
Button Neon Glow (dark backgrounds)
|
|
340
|
+
Usage: <button class="ak-btn-neon">
|
|
341
|
+
══════════════════════════════════════════════ */
|
|
342
|
+
|
|
343
|
+
.ak-btn-neon {
|
|
344
|
+
transition:
|
|
345
|
+
box-shadow var(--duration-ak-fast, 110ms) var(--ease-ak-default, ease),
|
|
346
|
+
transform var(--duration-ak-fast, 110ms) var(--ease-ak-default, ease);
|
|
347
|
+
}
|
|
348
|
+
.ak-btn-neon:hover {
|
|
349
|
+
transform: translateY(-1px);
|
|
350
|
+
box-shadow:
|
|
351
|
+
0 0 8px 2px hsla(258, 100%, 60%, 0.50),
|
|
352
|
+
0 0 24px 4px hsla(258, 100%, 60%, 0.30),
|
|
353
|
+
0 0 48px 8px hsla(258, 100%, 60%, 0.15);
|
|
354
|
+
}
|
|
355
|
+
.ak-btn-neon:active {
|
|
356
|
+
transform: translateY(0);
|
|
357
|
+
box-shadow: 0 0 12px 2px hsla(258, 100%, 60%, 0.40);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
/* ══════════════════════════════════════════════
|
|
362
|
+
Spotlight Card (cursor-following glow)
|
|
363
|
+
Requires minimal JS to set --ak-spotlight-x/y.
|
|
364
|
+
Usage: <div class="ak-spotlight-card">
|
|
365
|
+
══════════════════════════════════════════════ */
|
|
366
|
+
|
|
367
|
+
.ak-spotlight-card {
|
|
368
|
+
position: relative;
|
|
369
|
+
overflow: hidden;
|
|
370
|
+
}
|
|
371
|
+
.ak-spotlight-card::before {
|
|
372
|
+
content: "";
|
|
373
|
+
position: absolute;
|
|
374
|
+
inset: 0;
|
|
375
|
+
background: radial-gradient(
|
|
376
|
+
circle 200px at var(--ak-spotlight-x, 50%) var(--ak-spotlight-y, 50%),
|
|
377
|
+
rgba(129, 140, 248, 0.12) 0%,
|
|
378
|
+
transparent 100%
|
|
379
|
+
);
|
|
380
|
+
pointer-events: none;
|
|
381
|
+
opacity: 0;
|
|
382
|
+
transition: opacity 300ms ease;
|
|
383
|
+
z-index: 1;
|
|
384
|
+
}
|
|
385
|
+
.ak-spotlight-card:hover::before {
|
|
386
|
+
opacity: 1;
|
|
387
|
+
}
|
|
388
|
+
|