astro-component-kit 0.2.2 → 0.3.1
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/README.md +141 -177
- package/package.json +11 -9
- package/src/components/index.ts +12 -9
- package/src/components/lib/AnimatedGalaxy.astro +4 -2
- package/src/components/lib/Galaxy3D.astro +237 -185
- package/src/components/lib/LogoWithGalaxy.astro +2 -2
- package/src/components/lib/buttons/index.ts +4 -1
- package/src/components/lib/cards/index.ts +3 -0
- package/src/components/lib/charts/DonutChart.astro +1 -1
- package/src/components/lib/charts/index.ts +3 -0
- package/src/components/lib/data/index.ts +3 -0
- package/src/components/lib/feedback/index.ts +3 -0
- package/src/components/lib/forms/index.ts +3 -0
- package/src/components/lib/index.ts +17 -6
- package/src/components/lib/layout/BentoGrid3.astro +79 -9
- package/src/components/lib/layout/CenterFixedBox.astro +52 -2
- package/src/components/lib/layout/CenteredContainer.astro +44 -5
- package/src/components/lib/layout/ClusterHorizontal.astro +36 -2
- package/src/components/lib/layout/FeatureHero.astro +119 -50
- package/src/components/lib/layout/FooterCenteredMinimal.astro +57 -9
- package/src/components/lib/layout/FullBleedSection.astro +44 -2
- package/src/components/lib/layout/GalleryGrid4.astro +35 -3
- package/src/components/lib/layout/GlassCardGrid.astro +24 -2
- package/src/components/lib/layout/GlassSectionHeader.astro +72 -11
- package/src/components/lib/layout/LandingSectionSplit.astro +83 -8
- package/src/components/lib/layout/MasonryGrid.astro +42 -3
- package/src/components/lib/layout/MinimalFooterGrid.astro +83 -11
- package/src/components/lib/layout/ScrollSnapSection.astro +37 -3
- package/src/components/lib/layout/SectionDividerText.astro +44 -4
- package/src/components/lib/layout/SidebarLayoutWrapper.astro +62 -7
- package/src/components/lib/layout/SplitScreenLayout.astro +62 -6
- package/src/components/lib/layout/StepLayoutVertical.astro +83 -10
- package/src/components/lib/layout/StickySidebarWrapper.astro +69 -6
- package/src/components/lib/layout/VerticalStack.astro +35 -5
- package/src/components/lib/layout/index.ts +17 -14
- package/src/components/lib/navigation/index.ts +3 -0
- package/src/components/lib/overlays/index.ts +3 -0
- package/src/components/lib/sections/ContactGlassForm.astro +361 -0
- package/src/components/lib/sections/CtaAppDownload.astro +258 -0
- package/src/components/lib/sections/CtaGlowBanner.astro +267 -0
- package/src/components/lib/sections/FaqAccordionSection.astro +349 -0
- package/src/components/lib/sections/FeatureBentoGrid.astro +449 -0
- package/src/components/lib/sections/FeatureTimelineFlow.astro +254 -0
- package/src/components/lib/sections/PricingComparisonMatrix.astro +468 -0
- package/src/components/lib/sections/PricingTierCards.astro +256 -0
- package/src/components/lib/sections/StatsMetricShowcase.astro +332 -0
- package/src/components/lib/sections/TeamGridSection.astro +333 -0
- package/src/components/lib/sections/TestimonialWallGlass.astro +406 -0
- package/src/components/lib/sections/index.ts +22 -0
- package/src/components/lib/typography/index.ts +3 -0
- package/src/components/lib/AnimatedInput.astro +0 -82
- package/src/components/lib/Badge.astro +0 -52
- package/src/components/lib/GlassButton.astro +0 -87
- package/src/components/lib/GlassCard.astro +0 -72
- package/src/components/lib/GlassNavbar.astro +0 -67
- package/src/components/lib/GlowButton.astro +0 -60
- /package/src/components/lib/buttons/{3dPushButton.astro → ThreeDPushButton.astro} +0 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* FeatureBentoGrid — Full-page modern Bento-Grid features section with interactive widgets and metric cards.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} badge - Eyebrow badge text.
|
|
6
|
+
* @param {string} title - Main section heading.
|
|
7
|
+
* @param {string} subtitle - Supporting description text.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
badge?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
badge = "Core Capabilities",
|
|
18
|
+
title = "Engineered for Extreme Performance",
|
|
19
|
+
subtitle = "Everything you need to build next-generation Astro applications with zero runtime overhead.",
|
|
20
|
+
className = ""
|
|
21
|
+
} = Astro.props;
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<section class={`bento-section ${className}`} aria-labelledby="bento-title">
|
|
25
|
+
<div class="bento-bg" aria-hidden="true">
|
|
26
|
+
<div class="bento-glow bento-glow--1"></div>
|
|
27
|
+
<div class="bento-glow bento-glow--2"></div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div class="container">
|
|
31
|
+
<!-- Header -->
|
|
32
|
+
<div class="section-header">
|
|
33
|
+
{badge && <span class="section-badge">{badge}</span>}
|
|
34
|
+
<h2 id="bento-title" class="section-title">{title}</h2>
|
|
35
|
+
<p class="section-subtitle">{subtitle}</p>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Bento Grid Container -->
|
|
39
|
+
<div class="bento-grid">
|
|
40
|
+
<!-- Slot 1: Large Highlight (Span 2 col) -->
|
|
41
|
+
<article class="bento-card bento-card--wide">
|
|
42
|
+
<div class="bento-card__content">
|
|
43
|
+
<div class="bento-card__icon bento-card__icon--primary">
|
|
44
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m18 16 4-4-4-4"/><path d="m6 8-4 4 4 4"/><path d="m14.5 4-5 16"/></svg>
|
|
45
|
+
</div>
|
|
46
|
+
<span class="bento-tag">Zero Runtime JS</span>
|
|
47
|
+
<h3 class="bento-card__title">Pure Static Architecture</h3>
|
|
48
|
+
<p class="bento-card__desc">
|
|
49
|
+
Components ship zero client-side JavaScript by default, delivering perfect 100/100 Lighthouse performance scores out of the box.
|
|
50
|
+
</p>
|
|
51
|
+
<div class="bento-speed-stat">
|
|
52
|
+
<div class="speed-score">
|
|
53
|
+
<span class="score-number">100</span>
|
|
54
|
+
<span class="score-label">Lighthouse Score</span>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="speed-bars">
|
|
57
|
+
<div class="speed-bar"><span class="bar-fill" style="width: 100%;"></span><span class="bar-name">Performance</span></div>
|
|
58
|
+
<div class="speed-bar"><span class="bar-fill" style="width: 100%;"></span><span class="bar-name">Accessibility</span></div>
|
|
59
|
+
<div class="speed-bar"><span class="bar-fill" style="width: 100%;"></span><span class="bar-name">Best Practices</span></div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</article>
|
|
64
|
+
|
|
65
|
+
<!-- Slot 2: Security & Accessibility (Tall) -->
|
|
66
|
+
<article class="bento-card bento-card--tall">
|
|
67
|
+
<div class="bento-card__content">
|
|
68
|
+
<div class="bento-card__icon bento-card__icon--gold">
|
|
69
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10"/><path d="m9 12 2 2 4-4"/></svg>
|
|
70
|
+
</div>
|
|
71
|
+
<span class="bento-tag">WCAG 2.1 AA</span>
|
|
72
|
+
<h3 class="bento-card__title">Accessible & Tested</h3>
|
|
73
|
+
<p class="bento-card__desc">
|
|
74
|
+
Every button, input, and modal conforms strictly to WCAG AA guidelines with keyboard navigation and ARIA attributes.
|
|
75
|
+
</p>
|
|
76
|
+
<div class="a11y-pill-list">
|
|
77
|
+
<div class="a11y-pill">✓ Focus Rings Built-in</div>
|
|
78
|
+
<div class="a11y-pill">✓ Keyboard Nav (Tab/Esc)</div>
|
|
79
|
+
<div class="a11y-pill">✓ Contrast Ratio ≥ 4.5:1</div>
|
|
80
|
+
<div class="a11y-pill">✓ Screen Reader Ready</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</article>
|
|
84
|
+
|
|
85
|
+
<!-- Slot 3: Design Tokens & Theming -->
|
|
86
|
+
<article class="bento-card">
|
|
87
|
+
<div class="bento-card__content">
|
|
88
|
+
<div class="bento-card__icon bento-card__icon--cyan">
|
|
89
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"/></svg>
|
|
90
|
+
</div>
|
|
91
|
+
<span class="bento-tag">CSS Tokens</span>
|
|
92
|
+
<h3 class="bento-card__title">Fluid Design Tokens</h3>
|
|
93
|
+
<p class="bento-card__desc">
|
|
94
|
+
Seamless global variables for colors, typography scales, glass blurs, and border radiuses.
|
|
95
|
+
</p>
|
|
96
|
+
<div class="tokens-preview">
|
|
97
|
+
<span class="color-dot color-dot--gold"></span>
|
|
98
|
+
<span class="color-dot color-dot--indigo"></span>
|
|
99
|
+
<span class="color-dot color-dot--emerald"></span>
|
|
100
|
+
<span class="color-dot color-dot--rose"></span>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</article>
|
|
104
|
+
|
|
105
|
+
<!-- Slot 4: TypeScript Strict -->
|
|
106
|
+
<article class="bento-card">
|
|
107
|
+
<div class="bento-card__content">
|
|
108
|
+
<div class="bento-card__icon bento-card__icon--blue">
|
|
109
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M7 7h10"/><path d="M12 7v10"/></svg>
|
|
110
|
+
</div>
|
|
111
|
+
<span class="bento-tag">TypeScript 5.x</span>
|
|
112
|
+
<h3 class="bento-card__title">Strict Type Safety</h3>
|
|
113
|
+
<p class="bento-card__desc">
|
|
114
|
+
Full TypeScript IntelliSense with prop auto-completion and compile-time validation in your IDE.
|
|
115
|
+
</p>
|
|
116
|
+
<div class="code-snippet-mini">
|
|
117
|
+
<code>interface Props { variant: 'glass' | 'glow' }</code>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</article>
|
|
121
|
+
|
|
122
|
+
<!-- Slot 5: 3D & Particle Shaders (Wide) -->
|
|
123
|
+
<article class="bento-card bento-card--wide">
|
|
124
|
+
<div class="bento-card__content">
|
|
125
|
+
<div class="bento-card__icon bento-card__icon--purple">
|
|
126
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>
|
|
127
|
+
</div>
|
|
128
|
+
<span class="bento-tag">Three.js & WebGL</span>
|
|
129
|
+
<h3 class="bento-card__title">Interactive 3D Galaxy & Visuals</h3>
|
|
130
|
+
<p class="bento-card__desc">
|
|
131
|
+
GPU-accelerated particle galaxy backgrounds with smooth physics, mouse-follow damping, and hardware-accelerated shaders.
|
|
132
|
+
</p>
|
|
133
|
+
<div class="live-pill">
|
|
134
|
+
<span class="live-dot"></span>
|
|
135
|
+
<span>60 FPS Fluid Physics Engine</span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</article>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</section>
|
|
142
|
+
|
|
143
|
+
<style>
|
|
144
|
+
.bento-section {
|
|
145
|
+
position: relative;
|
|
146
|
+
padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
|
|
147
|
+
background: var(--c-bg-primary, #030712);
|
|
148
|
+
overflow: hidden;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.bento-bg {
|
|
152
|
+
position: absolute;
|
|
153
|
+
inset: 0;
|
|
154
|
+
pointer-events: none;
|
|
155
|
+
z-index: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.bento-glow {
|
|
159
|
+
position: absolute;
|
|
160
|
+
border-radius: 50%;
|
|
161
|
+
filter: blur(120px);
|
|
162
|
+
opacity: 0.25;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.bento-glow--1 {
|
|
166
|
+
top: 10%;
|
|
167
|
+
left: 15%;
|
|
168
|
+
width: 400px;
|
|
169
|
+
height: 400px;
|
|
170
|
+
background: radial-gradient(circle, #6366f1, transparent 70%);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.bento-glow--2 {
|
|
174
|
+
bottom: 10%;
|
|
175
|
+
right: 15%;
|
|
176
|
+
width: 450px;
|
|
177
|
+
height: 450px;
|
|
178
|
+
background: radial-gradient(circle, #d97706, transparent 70%);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.container {
|
|
182
|
+
position: relative;
|
|
183
|
+
z-index: 1;
|
|
184
|
+
max-width: 1200px;
|
|
185
|
+
margin: 0 auto;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.section-header {
|
|
189
|
+
text-align: center;
|
|
190
|
+
max-width: 760px;
|
|
191
|
+
margin: 0 auto var(--sp-12, 3rem);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.section-badge {
|
|
195
|
+
display: inline-flex;
|
|
196
|
+
padding: 0.35rem 0.9rem;
|
|
197
|
+
border-radius: 9999px;
|
|
198
|
+
font-size: 0.78rem;
|
|
199
|
+
font-weight: 700;
|
|
200
|
+
letter-spacing: 0.06em;
|
|
201
|
+
text-transform: uppercase;
|
|
202
|
+
background: rgba(184, 134, 11, 0.12);
|
|
203
|
+
color: #eab308;
|
|
204
|
+
border: 1px solid rgba(234, 179, 8, 0.25);
|
|
205
|
+
margin-bottom: var(--sp-4, 1rem);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.section-title {
|
|
209
|
+
font-size: clamp(2rem, 4vw, 3rem);
|
|
210
|
+
font-weight: 900;
|
|
211
|
+
color: #fff;
|
|
212
|
+
line-height: 1.15;
|
|
213
|
+
letter-spacing: -0.02em;
|
|
214
|
+
margin: 0 0 var(--sp-4, 1rem);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.section-subtitle {
|
|
218
|
+
font-size: 1.1rem;
|
|
219
|
+
color: #94a3b8;
|
|
220
|
+
line-height: 1.6;
|
|
221
|
+
margin: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Bento Grid */
|
|
225
|
+
.bento-grid {
|
|
226
|
+
display: grid;
|
|
227
|
+
grid-template-columns: repeat(3, 1fr);
|
|
228
|
+
gap: 1.5rem;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.bento-card {
|
|
232
|
+
position: relative;
|
|
233
|
+
background: rgba(15, 23, 42, 0.6);
|
|
234
|
+
backdrop-filter: blur(20px);
|
|
235
|
+
-webkit-backdrop-filter: blur(20px);
|
|
236
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
237
|
+
border-radius: var(--r-xl, 20px);
|
|
238
|
+
padding: 2rem;
|
|
239
|
+
display: flex;
|
|
240
|
+
flex-direction: column;
|
|
241
|
+
justify-content: space-between;
|
|
242
|
+
transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
|
|
243
|
+
overflow: hidden;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.bento-card:hover {
|
|
247
|
+
transform: translateY(-4px);
|
|
248
|
+
border-color: rgba(255, 255, 255, 0.18);
|
|
249
|
+
box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.6);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.bento-card--wide {
|
|
253
|
+
grid-column: span 2;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.bento-card--tall {
|
|
257
|
+
grid-row: span 2;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.bento-card__icon {
|
|
261
|
+
width: 48px;
|
|
262
|
+
height: 48px;
|
|
263
|
+
border-radius: 12px;
|
|
264
|
+
display: flex;
|
|
265
|
+
align-items: center;
|
|
266
|
+
justify-content: center;
|
|
267
|
+
margin-bottom: 1.25rem;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.bento-card__icon--primary { background: rgba(99, 102, 241, 0.15); color: #818cf8; }
|
|
271
|
+
.bento-card__icon--gold { background: rgba(234, 179, 8, 0.15); color: #facc15; }
|
|
272
|
+
.bento-card__icon--cyan { background: rgba(6, 182, 212, 0.15); color: #22d3ee; }
|
|
273
|
+
.bento-card__icon--blue { background: rgba(59, 130, 246, 0.15); color: #60a5fa; }
|
|
274
|
+
.bento-card__icon--purple { background: rgba(168, 85, 247, 0.15); color: #c084fc; }
|
|
275
|
+
|
|
276
|
+
.bento-tag {
|
|
277
|
+
display: inline-block;
|
|
278
|
+
font-size: 0.75rem;
|
|
279
|
+
font-weight: 700;
|
|
280
|
+
text-transform: uppercase;
|
|
281
|
+
letter-spacing: 0.05em;
|
|
282
|
+
color: #64748b;
|
|
283
|
+
margin-bottom: 0.5rem;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.bento-card__title {
|
|
287
|
+
font-size: 1.35rem;
|
|
288
|
+
font-weight: 800;
|
|
289
|
+
color: #fff;
|
|
290
|
+
margin: 0 0 0.75rem;
|
|
291
|
+
line-height: 1.3;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.bento-card__desc {
|
|
295
|
+
font-size: 0.95rem;
|
|
296
|
+
color: #94a3b8;
|
|
297
|
+
line-height: 1.6;
|
|
298
|
+
margin: 0 0 1.5rem;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/* Internal mini-widgets */
|
|
302
|
+
.bento-speed-stat {
|
|
303
|
+
display: flex;
|
|
304
|
+
align-items: center;
|
|
305
|
+
gap: 2rem;
|
|
306
|
+
padding: 1rem;
|
|
307
|
+
background: rgba(0, 0, 0, 0.3);
|
|
308
|
+
border-radius: 12px;
|
|
309
|
+
border: 1px solid rgba(255, 255, 255, 0.05);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.speed-score {
|
|
313
|
+
text-align: center;
|
|
314
|
+
padding-right: 1.5rem;
|
|
315
|
+
border-right: 1px solid rgba(255, 255, 255, 0.1);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.score-number {
|
|
319
|
+
display: block;
|
|
320
|
+
font-size: 2.2rem;
|
|
321
|
+
font-weight: 900;
|
|
322
|
+
color: #10b981;
|
|
323
|
+
line-height: 1;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.score-label {
|
|
327
|
+
font-size: 0.7rem;
|
|
328
|
+
color: #64748b;
|
|
329
|
+
font-weight: 600;
|
|
330
|
+
text-transform: uppercase;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.speed-bars {
|
|
334
|
+
flex: 1;
|
|
335
|
+
display: flex;
|
|
336
|
+
flex-direction: column;
|
|
337
|
+
gap: 0.5rem;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.speed-bar {
|
|
341
|
+
display: flex;
|
|
342
|
+
align-items: center;
|
|
343
|
+
gap: 0.75rem;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.bar-fill {
|
|
347
|
+
height: 6px;
|
|
348
|
+
background: #10b981;
|
|
349
|
+
border-radius: 999px;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.bar-name {
|
|
353
|
+
font-size: 0.75rem;
|
|
354
|
+
color: #cbd5e1;
|
|
355
|
+
font-weight: 600;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.a11y-pill-list {
|
|
359
|
+
display: flex;
|
|
360
|
+
flex-direction: column;
|
|
361
|
+
gap: 0.6rem;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.a11y-pill {
|
|
365
|
+
padding: 0.6rem 0.85rem;
|
|
366
|
+
background: rgba(0, 0, 0, 0.3);
|
|
367
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
368
|
+
border-radius: 8px;
|
|
369
|
+
font-size: 0.82rem;
|
|
370
|
+
color: #cbd5e1;
|
|
371
|
+
font-weight: 500;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.tokens-preview {
|
|
375
|
+
display: flex;
|
|
376
|
+
gap: 0.5rem;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.color-dot {
|
|
380
|
+
width: 22px;
|
|
381
|
+
height: 22px;
|
|
382
|
+
border-radius: 50%;
|
|
383
|
+
border: 2px solid rgba(255, 255, 255, 0.2);
|
|
384
|
+
}
|
|
385
|
+
.color-dot--gold { background: #eab308; }
|
|
386
|
+
.color-dot--indigo { background: #6366f1; }
|
|
387
|
+
.color-dot--emerald { background: #10b981; }
|
|
388
|
+
.color-dot--rose { background: #f43f5e; }
|
|
389
|
+
|
|
390
|
+
.code-snippet-mini {
|
|
391
|
+
padding: 0.75rem;
|
|
392
|
+
background: rgba(0, 0, 0, 0.5);
|
|
393
|
+
border-radius: 8px;
|
|
394
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
395
|
+
font-size: 0.8rem;
|
|
396
|
+
color: #93c5fd;
|
|
397
|
+
font-family: var(--font-mono, monospace);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.live-pill {
|
|
401
|
+
display: inline-flex;
|
|
402
|
+
align-items: center;
|
|
403
|
+
gap: 0.6rem;
|
|
404
|
+
padding: 0.5rem 1rem;
|
|
405
|
+
background: rgba(168, 85, 247, 0.1);
|
|
406
|
+
border: 1px solid rgba(168, 85, 247, 0.25);
|
|
407
|
+
border-radius: 9999px;
|
|
408
|
+
font-size: 0.82rem;
|
|
409
|
+
color: #d8b4fe;
|
|
410
|
+
font-weight: 600;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
.live-dot {
|
|
414
|
+
width: 8px;
|
|
415
|
+
height: 8px;
|
|
416
|
+
border-radius: 50%;
|
|
417
|
+
background: #a855f7;
|
|
418
|
+
box-shadow: 0 0 10px #a855f7;
|
|
419
|
+
animation: pulse 2s infinite ease-in-out;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
@keyframes pulse {
|
|
423
|
+
0%, 100% { transform: scale(1); opacity: 1; }
|
|
424
|
+
50% { transform: scale(1.4); opacity: 0.6; }
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
@media (max-width: 960px) {
|
|
428
|
+
.bento-grid {
|
|
429
|
+
grid-template-columns: 1fr;
|
|
430
|
+
}
|
|
431
|
+
.bento-card--wide, .bento-card--tall {
|
|
432
|
+
grid-column: span 1;
|
|
433
|
+
grid-row: span 1;
|
|
434
|
+
}
|
|
435
|
+
.bento-speed-stat {
|
|
436
|
+
flex-direction: column;
|
|
437
|
+
align-items: flex-start;
|
|
438
|
+
gap: 1rem;
|
|
439
|
+
}
|
|
440
|
+
.speed-score {
|
|
441
|
+
border-right: none;
|
|
442
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
443
|
+
padding-right: 0;
|
|
444
|
+
padding-bottom: 0.75rem;
|
|
445
|
+
width: 100%;
|
|
446
|
+
text-align: left;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
</style>
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* FeatureTimelineFlow — Full-page step-by-step product architecture and workflow section with glowing nodes.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} badge - Eyebrow badge text.
|
|
6
|
+
* @param {string} title - Section main heading.
|
|
7
|
+
* @param {string} subtitle - Description text.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
badge?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
badge = "Step-by-Step Workflow",
|
|
18
|
+
title = "From Idea to Production in 3 Simple Steps",
|
|
19
|
+
subtitle = "Streamline your frontend engineering lifecycle with an intuitive, pre-tested architecture.",
|
|
20
|
+
className = ""
|
|
21
|
+
} = Astro.props;
|
|
22
|
+
|
|
23
|
+
const steps = [
|
|
24
|
+
{
|
|
25
|
+
number: "01",
|
|
26
|
+
tag: "Install & Setup",
|
|
27
|
+
title: "One Command Installation",
|
|
28
|
+
desc: "Add astro-component-kit to your Astro project with npm. Zero complex configuration files or build tool plugins required.",
|
|
29
|
+
code: "npm install astro-component-kit",
|
|
30
|
+
color: "#6366f1"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
number: "02",
|
|
34
|
+
tag: "Compose & Theme",
|
|
35
|
+
title: "Import Modular Components",
|
|
36
|
+
desc: "Import accessible cards, navigation bars, interactive inputs, and 3D scenes directly into your Astro frontmatter with strict TypeScript typings.",
|
|
37
|
+
code: "import { GlassCard, StatCard } from 'astro-component-kit';",
|
|
38
|
+
color: "#eab308"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
number: "03",
|
|
42
|
+
tag: "Build & Deploy",
|
|
43
|
+
title: "Deploy Anywhere at 100/100 Speed",
|
|
44
|
+
desc: "Generate static pre-rendered HTML with zero runtime JavaScript. Deploy effortlessly to Coolify, Vercel, Cloudflare Pages, or Docker.",
|
|
45
|
+
code: "npm run build && coolify deploy",
|
|
46
|
+
color: "#10b981"
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
<section class={`timeline-section ${className}`} aria-labelledby="timeline-title">
|
|
52
|
+
<div class="timeline-bg" aria-hidden="true">
|
|
53
|
+
<div class="timeline-glow"></div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<div class="container">
|
|
57
|
+
<!-- Header -->
|
|
58
|
+
<div class="section-header">
|
|
59
|
+
{badge && <span class="section-badge">{badge}</span>}
|
|
60
|
+
<h2 id="timeline-title" class="section-title">{title}</h2>
|
|
61
|
+
<p class="section-subtitle">{subtitle}</p>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<!-- Timeline Steps -->
|
|
65
|
+
<div class="steps-flow">
|
|
66
|
+
<div class="flow-line" aria-hidden="true"></div>
|
|
67
|
+
|
|
68
|
+
{steps.map((step) => (
|
|
69
|
+
<div class="step-card">
|
|
70
|
+
<div class="step-badge-circle" style={`--step-color: ${step.color};`}>
|
|
71
|
+
<span>{step.number}</span>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="step-card__body">
|
|
74
|
+
<span class="step-tag" style={`color: ${step.color};`}>{step.tag}</span>
|
|
75
|
+
<h3 class="step-title">{step.title}</h3>
|
|
76
|
+
<p class="step-desc">{step.desc}</p>
|
|
77
|
+
<div class="step-code">
|
|
78
|
+
<code>{step.code}</code>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
))}
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</section>
|
|
86
|
+
|
|
87
|
+
<style>
|
|
88
|
+
.timeline-section {
|
|
89
|
+
position: relative;
|
|
90
|
+
padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
|
|
91
|
+
background: var(--c-bg-primary, #030712);
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.timeline-bg {
|
|
96
|
+
position: absolute;
|
|
97
|
+
inset: 0;
|
|
98
|
+
pointer-events: none;
|
|
99
|
+
z-index: 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.timeline-glow {
|
|
103
|
+
position: absolute;
|
|
104
|
+
top: 30%;
|
|
105
|
+
left: 50%;
|
|
106
|
+
transform: translateX(-50%);
|
|
107
|
+
width: 600px;
|
|
108
|
+
height: 500px;
|
|
109
|
+
background: radial-gradient(circle, rgba(99, 102, 241, 0.1), transparent 70%);
|
|
110
|
+
filter: blur(120px);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.container {
|
|
114
|
+
position: relative;
|
|
115
|
+
z-index: 1;
|
|
116
|
+
max-width: 1000px;
|
|
117
|
+
margin: 0 auto;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.section-header {
|
|
121
|
+
text-align: center;
|
|
122
|
+
max-width: 780px;
|
|
123
|
+
margin: 0 auto 4rem;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.section-badge {
|
|
127
|
+
display: inline-flex;
|
|
128
|
+
padding: 0.35rem 0.9rem;
|
|
129
|
+
border-radius: 9999px;
|
|
130
|
+
font-size: 0.78rem;
|
|
131
|
+
font-weight: 700;
|
|
132
|
+
letter-spacing: 0.06em;
|
|
133
|
+
text-transform: uppercase;
|
|
134
|
+
background: rgba(184, 134, 11, 0.12);
|
|
135
|
+
color: #eab308;
|
|
136
|
+
border: 1px solid rgba(234, 179, 8, 0.25);
|
|
137
|
+
margin-bottom: var(--sp-4, 1rem);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.section-title {
|
|
141
|
+
font-size: clamp(2rem, 4vw, 3rem);
|
|
142
|
+
font-weight: 900;
|
|
143
|
+
color: #fff;
|
|
144
|
+
line-height: 1.15;
|
|
145
|
+
letter-spacing: -0.02em;
|
|
146
|
+
margin: 0 0 var(--sp-4, 1rem);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.section-subtitle {
|
|
150
|
+
font-size: 1.1rem;
|
|
151
|
+
color: #94a3b8;
|
|
152
|
+
line-height: 1.6;
|
|
153
|
+
margin: 0;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Steps Flow */
|
|
157
|
+
.steps-flow {
|
|
158
|
+
position: relative;
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
gap: 2.5rem;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.flow-line {
|
|
165
|
+
position: absolute;
|
|
166
|
+
top: 30px;
|
|
167
|
+
bottom: 30px;
|
|
168
|
+
left: 27px;
|
|
169
|
+
width: 2px;
|
|
170
|
+
background: linear-gradient(180deg, #6366f1, #eab308, #10b981);
|
|
171
|
+
opacity: 0.3;
|
|
172
|
+
z-index: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.step-card {
|
|
176
|
+
position: relative;
|
|
177
|
+
display: flex;
|
|
178
|
+
gap: 2rem;
|
|
179
|
+
align-items: flex-start;
|
|
180
|
+
z-index: 1;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.step-badge-circle {
|
|
184
|
+
width: 56px;
|
|
185
|
+
height: 56px;
|
|
186
|
+
border-radius: 50%;
|
|
187
|
+
background: #0f172a;
|
|
188
|
+
border: 2px solid var(--step-color, #6366f1);
|
|
189
|
+
box-shadow: 0 0 20px -3px var(--step-color, #6366f1);
|
|
190
|
+
display: grid;
|
|
191
|
+
place-items: center;
|
|
192
|
+
font-size: 1.1rem;
|
|
193
|
+
font-weight: 900;
|
|
194
|
+
color: #fff;
|
|
195
|
+
flex-shrink: 0;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.step-card__body {
|
|
199
|
+
flex: 1;
|
|
200
|
+
background: rgba(15, 23, 42, 0.6);
|
|
201
|
+
backdrop-filter: blur(20px);
|
|
202
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
203
|
+
border-radius: 20px;
|
|
204
|
+
padding: 2rem;
|
|
205
|
+
transition: transform 0.3s ease, border-color 0.3s ease;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.step-card__body:hover {
|
|
209
|
+
transform: translateX(4px);
|
|
210
|
+
border-color: rgba(255, 255, 255, 0.18);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.step-tag {
|
|
214
|
+
font-size: 0.78rem;
|
|
215
|
+
font-weight: 700;
|
|
216
|
+
text-transform: uppercase;
|
|
217
|
+
letter-spacing: 0.05em;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.step-title {
|
|
221
|
+
font-size: 1.35rem;
|
|
222
|
+
font-weight: 800;
|
|
223
|
+
color: #fff;
|
|
224
|
+
margin: 0.4rem 0 0.6rem;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.step-desc {
|
|
228
|
+
font-size: 0.95rem;
|
|
229
|
+
color: #94a3b8;
|
|
230
|
+
line-height: 1.6;
|
|
231
|
+
margin: 0 0 1.25rem;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.step-code {
|
|
235
|
+
padding: 0.75rem 1rem;
|
|
236
|
+
background: rgba(0, 0, 0, 0.5);
|
|
237
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
238
|
+
border-radius: 10px;
|
|
239
|
+
font-family: var(--font-mono, monospace);
|
|
240
|
+
font-size: 0.85rem;
|
|
241
|
+
color: #93c5fd;
|
|
242
|
+
overflow-x: auto;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
@media (max-width: 640px) {
|
|
246
|
+
.flow-line {
|
|
247
|
+
display: none;
|
|
248
|
+
}
|
|
249
|
+
.step-card {
|
|
250
|
+
flex-direction: column;
|
|
251
|
+
gap: 1rem;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
</style>
|