@tsparticles/template-landing 4.1.3 → 4.2.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +3 -0
  3. package/package.json +4 -3
  4. package/template/angular/package.json +34 -0
  5. package/template/angular/src/app/app.component.css +265 -0
  6. package/template/angular/src/app/app.component.html +72 -0
  7. package/template/angular/src/app/app.component.ts +57 -0
  8. package/template/angular-confetti/package.json +36 -0
  9. package/template/angular-confetti/src/app/app.component.css +259 -0
  10. package/template/angular-confetti/src/app/app.component.html +66 -0
  11. package/template/angular-confetti/src/app/app.component.ts +49 -0
  12. package/template/angular-fireworks/package.json +36 -0
  13. package/template/angular-fireworks/src/app/app.component.css +259 -0
  14. package/template/angular-fireworks/src/app/app.component.html +66 -0
  15. package/template/angular-fireworks/src/app/app.component.ts +49 -0
  16. package/template/astro/package.json +21 -0
  17. package/template/astro/src/pages/index.astro +143 -0
  18. package/template/ember/app/templates/application.hbs +75 -0
  19. package/template/ember/package.json +19 -0
  20. package/template/inferno/package.json +23 -0
  21. package/template/inferno/src/App.css +259 -0
  22. package/template/inferno/src/App.tsx +126 -0
  23. package/template/jquery/package.json +23 -0
  24. package/template/jquery/src/main.ts +161 -0
  25. package/template/jquery/src/style.css +259 -0
  26. package/template/lit/package.json +22 -0
  27. package/template/lit/src/my-app.ts +146 -0
  28. package/template/nextjs/package.json +19 -0
  29. package/template/nextjs/src/app/page.tsx +155 -0
  30. package/template/nextjs/src/app/providers.tsx +15 -0
  31. package/template/nuxt2/package.json +17 -0
  32. package/template/nuxt2/pages/index.vue +375 -0
  33. package/template/nuxt3/app.vue +374 -0
  34. package/template/nuxt3/package.json +18 -0
  35. package/template/nuxt4/app.vue +374 -0
  36. package/template/nuxt4/package.json +18 -0
  37. package/template/preact/package.json +23 -0
  38. package/template/preact/src/App.css +259 -0
  39. package/template/preact/src/App.tsx +152 -0
  40. package/template/qwik/package.json +22 -0
  41. package/template/qwik/src/App.tsx +150 -0
  42. package/template/react/package.json +19 -0
  43. package/template/react/src/App.css +265 -0
  44. package/template/react/src/App.tsx +114 -0
  45. package/template/riot/package.json +22 -0
  46. package/template/riot/src/app.riot +123 -0
  47. package/template/solid/package.json +18 -0
  48. package/template/solid/src/App.tsx +170 -0
  49. package/template/solid/src/index.css +259 -0
  50. package/template/solid/src/main.tsx +9 -0
  51. package/template/stencil/package.json +16 -0
  52. package/template/stencil/src/components/app-home/app-home.tsx +135 -0
  53. package/template/svelte/package.json +20 -0
  54. package/template/svelte/src/App.svelte +424 -0
  55. package/template/svelte/src/main.ts +12 -0
  56. package/template/vanilla/LICENSE +21 -0
  57. package/template/vanilla/package.json +1 -1
  58. package/template/vue2/package.json +21 -0
  59. package/template/vue2/src/App.vue +376 -0
  60. package/template/vue3/package.json +19 -0
  61. package/template/vue3/src/App.vue +372 -0
  62. package/template/vue3/src/main.ts +14 -0
  63. package/template/webcomponents/package.json +21 -0
  64. package/template/webcomponents/src/main.ts +160 -0
  65. package/template/webcomponents/src/style.css +259 -0
@@ -0,0 +1,259 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
9
+ color: #fff;
10
+ background: #080818;
11
+ overflow-x: hidden;
12
+ }
13
+
14
+ .section {
15
+ min-height: 100vh;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ padding: 4rem 1rem;
20
+ position: relative;
21
+ }
22
+
23
+ .container {
24
+ max-width: 1100px;
25
+ width: 100%;
26
+ margin: 0 auto;
27
+ text-align: center;
28
+ }
29
+
30
+ h2 {
31
+ font-size: 2.5em;
32
+ margin-bottom: 3rem;
33
+ background: linear-gradient(135deg, #6c5ce7, #00cec9);
34
+ -webkit-background-clip: text;
35
+ -webkit-text-fill-color: transparent;
36
+ background-clip: text;
37
+ }
38
+
39
+ #hero {
40
+ min-height: 100vh;
41
+ position: relative;
42
+ }
43
+
44
+ .hero-content {
45
+ text-align: center;
46
+ z-index: 10;
47
+ padding: 2rem;
48
+ }
49
+
50
+ .hero-content h1 {
51
+ font-size: 4em;
52
+ line-height: 1.1;
53
+ margin-bottom: 1rem;
54
+ }
55
+
56
+ .gradient-text {
57
+ background: linear-gradient(135deg, #6c5ce7, #fd79a8);
58
+ -webkit-background-clip: text;
59
+ -webkit-text-fill-color: transparent;
60
+ background-clip: text;
61
+ }
62
+
63
+ .hero-subtitle {
64
+ font-size: 1.3em;
65
+ opacity: 0.7;
66
+ margin-bottom: 2rem;
67
+ max-width: 600px;
68
+ margin-left: auto;
69
+ margin-right: auto;
70
+ }
71
+
72
+ .hero-cta {
73
+ display: flex;
74
+ gap: 1rem;
75
+ justify-content: center;
76
+ flex-wrap: wrap;
77
+ }
78
+
79
+ .btn {
80
+ padding: 0.8em 2em;
81
+ font-size: 1.1em;
82
+ font-weight: 600;
83
+ border-radius: 8px;
84
+ text-decoration: none;
85
+ transition: transform 0.2s, box-shadow 0.2s;
86
+ display: inline-block;
87
+ }
88
+
89
+ .btn:hover {
90
+ transform: translateY(-2px);
91
+ box-shadow: 0 4px 20px rgba(108, 92, 231, 0.4);
92
+ }
93
+
94
+ .btn-primary {
95
+ background: linear-gradient(135deg, #6c5ce7, #a29bfe);
96
+ color: #fff;
97
+ }
98
+
99
+ .btn-secondary {
100
+ background: rgba(255, 255, 255, 0.1);
101
+ color: #fff;
102
+ border: 1px solid rgba(255, 255, 255, 0.2);
103
+ }
104
+
105
+ .btn-large {
106
+ padding: 1em 3em;
107
+ font-size: 1.2em;
108
+ }
109
+
110
+ .features-grid {
111
+ display: grid;
112
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
113
+ gap: 2rem;
114
+ }
115
+
116
+ .feature-card {
117
+ background: rgba(255, 255, 255, 0.03);
118
+ border: 1px solid rgba(255, 255, 255, 0.08);
119
+ border-radius: 16px;
120
+ padding: 2rem;
121
+ text-align: center;
122
+ transition: transform 0.3s, border-color 0.3s;
123
+ }
124
+
125
+ .feature-card:hover {
126
+ transform: translateY(-6px);
127
+ border-color: #6c5ce7;
128
+ }
129
+
130
+ .feature-icon {
131
+ font-size: 2.5em;
132
+ margin-bottom: 1rem;
133
+ }
134
+
135
+ .feature-card h3 {
136
+ margin-bottom: 0.5rem;
137
+ }
138
+
139
+ .feature-card p {
140
+ opacity: 0.7;
141
+ font-size: 0.95em;
142
+ }
143
+
144
+ .pricing-grid {
145
+ display: grid;
146
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
147
+ gap: 2rem;
148
+ align-items: center;
149
+ }
150
+
151
+ .pricing-card {
152
+ background: rgba(255, 255, 255, 0.03);
153
+ border: 1px solid rgba(255, 255, 255, 0.08);
154
+ border-radius: 16px;
155
+ padding: 2.5rem 2rem;
156
+ text-align: center;
157
+ }
158
+
159
+ .pricing-card.featured {
160
+ border-color: #6c5ce7;
161
+ background: rgba(108, 92, 231, 0.08);
162
+ transform: scale(1.05);
163
+ }
164
+
165
+ .price {
166
+ font-size: 3em;
167
+ font-weight: 700;
168
+ margin: 1rem 0;
169
+ }
170
+
171
+ .price span {
172
+ font-size: 0.4em;
173
+ opacity: 0.5;
174
+ font-weight: 400;
175
+ }
176
+
177
+ .pricing-card ul {
178
+ list-style: none;
179
+ margin: 1.5rem 0;
180
+ }
181
+
182
+ .pricing-card li {
183
+ padding: 0.4em 0;
184
+ opacity: 0.8;
185
+ }
186
+
187
+ .pricing-card li::before {
188
+ content: "✓ ";
189
+ color: #00cec9;
190
+ }
191
+
192
+ .testimonial-grid {
193
+ display: grid;
194
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
195
+ gap: 2rem;
196
+ }
197
+
198
+ .testimonial-card {
199
+ background: rgba(255, 255, 255, 0.03);
200
+ border: 1px solid rgba(255, 255, 255, 0.08);
201
+ border-radius: 16px;
202
+ padding: 2rem;
203
+ text-align: left;
204
+ }
205
+
206
+ .testimonial-card p {
207
+ font-style: italic;
208
+ font-size: 1.1em;
209
+ line-height: 1.6;
210
+ margin-bottom: 1rem;
211
+ }
212
+
213
+ .author {
214
+ opacity: 0.6;
215
+ font-size: 0.9em;
216
+ }
217
+
218
+ .cta-content h2 {
219
+ margin-bottom: 1rem;
220
+ }
221
+
222
+ .cta-content p {
223
+ font-size: 1.2em;
224
+ opacity: 0.7;
225
+ margin-bottom: 2rem;
226
+ }
227
+
228
+ #footer {
229
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
230
+ padding: 2rem 1rem;
231
+ }
232
+
233
+ .footer-content {
234
+ display: flex;
235
+ justify-content: space-between;
236
+ align-items: center;
237
+ flex-wrap: wrap;
238
+ gap: 1rem;
239
+ }
240
+
241
+ .footer-content p {
242
+ opacity: 0.5;
243
+ font-size: 0.9em;
244
+ }
245
+
246
+ .footer-links {
247
+ display: flex;
248
+ gap: 1.5rem;
249
+ }
250
+
251
+ .footer-links a {
252
+ color: rgba(255, 255, 255, 0.6);
253
+ text-decoration: none;
254
+ font-size: 0.9em;
255
+ }
256
+
257
+ .footer-links a:hover {
258
+ color: #6c5ce7;
259
+ }
@@ -0,0 +1,66 @@
1
+ <ngx-confetti id="tsparticles" [options]="options"></ngx-confetti>
2
+ <section id="hero" class="section">
3
+ <div class="hero-content">
4
+ <h1>Build Faster.<br /><span class="gradient-text">Go Further.</span></h1>
5
+ <p class="hero-subtitle">The platform that helps teams ship products at the speed of light.</p>
6
+ <div class="hero-cta">
7
+ <a href="#features" class="btn btn-primary">Learn More</a>
8
+ <a href="#cta" class="btn btn-secondary">Get Started</a>
9
+ </div>
10
+ </div>
11
+ </section>
12
+ <section id="features" class="section">
13
+ <div class="container">
14
+ <h2>Features</h2>
15
+ <div class="features-grid">
16
+ <div *ngFor="let f of features" class="feature-card">
17
+ <div class="feature-icon">{{ f.icon }}</div>
18
+ <h3>{{ f.title }}</h3>
19
+ <p>{{ f.desc }}</p>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </section>
24
+ <section id="pricing" class="section">
25
+ <div class="container">
26
+ <h2>Pricing</h2>
27
+ <div class="pricing-grid">
28
+ <div *ngFor="let p of pricingPlans" [class]="'pricing-card' + (p.featured ? ' featured' : '')">
29
+ <h3>{{ p.plan }}</h3>
30
+ <p class="price">{{ p.price }}<span>/mo</span></p>
31
+ <ul>
32
+ <li *ngFor="let f of p.features">{{ f }}</li>
33
+ </ul>
34
+ <a href="#" [class]="'btn ' + (p.featured ? 'btn-primary' : 'btn-secondary')">{{ p.plan === 'Enterprise' ? 'Contact Sales' : 'Choose Plan' }}</a>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </section>
39
+ <section id="testimonials" class="section">
40
+ <div class="container">
41
+ <h2>What Our Users Say</h2>
42
+ <div class="testimonial-grid">
43
+ <div *ngFor="let t of testimonials" class="testimonial-card">
44
+ <p>"{{ t.text }}"</p>
45
+ <span class="author">— {{ t.author }}</span>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </section>
50
+ <section id="cta" class="section">
51
+ <div class="container cta-content">
52
+ <h2>Ready to Get Started?</h2>
53
+ <p>Join thousands of teams already building with us.</p>
54
+ <a href="#" class="btn btn-primary btn-large">Start Free Trial</a>
55
+ </div>
56
+ </section>
57
+ <footer id="footer">
58
+ <div class="container footer-content">
59
+ <p>&copy; 2026 {{projectName}}. All rights reserved.</p>
60
+ <div class="footer-links">
61
+ <a href="#">Privacy</a>
62
+ <a href="#">Terms</a>
63
+ <a href="#">Contact</a>
64
+ </div>
65
+ </div>
66
+ </footer>
@@ -0,0 +1,49 @@
1
+ import { Component } from "@angular/core";
2
+ import type { ISourceOptions } from "@tsparticles/engine";
3
+
4
+ @Component({
5
+ selector: "app-root",
6
+ templateUrl: "./app.component.html",
7
+ styleUrls: ["./app.component.css"],
8
+ })
9
+ export class AppComponent {
10
+ title = "{{projectName}}";
11
+
12
+ options: ISourceOptions = {
13
+ fullScreen: { enable: true, zIndex: -1 },
14
+ background: { color: { value: "#080818" } },
15
+ fpsLimit: 60,
16
+ particles: {
17
+ number: { value: 100, density: { enable: true } },
18
+ color: { value: ["#6c5ce7", "#00cec9", "#fd79a8", "#ffeaa7"] },
19
+ shape: { type: "circle" },
20
+ opacity: { value: 0.4, random: true },
21
+ size: { value: { min: 1, max: 4 }, random: true },
22
+ links: { enable: true, distance: 150, color: "#6c5ce7", opacity: 0.15, width: 1 },
23
+ move: { enable: true, speed: 1.5, direction: "none", random: true, straight: false, outModes: { default: "out" } },
24
+ },
25
+ interactivity: {
26
+ events: { onHover: { enable: true, mode: "grab" } },
27
+ modes: { grab: { distance: 200, links: { opacity: 0.5 } } },
28
+ },
29
+ detectRetina: true,
30
+ };
31
+
32
+ features = [
33
+ { icon: "⚡", title: "Blazing Fast", desc: "Optimized for performance from the ground up." },
34
+ { icon: "🔒", title: "Secure", desc: "Enterprise-grade security built into every layer." },
35
+ { icon: "🌍", title: "Global Scale", desc: "Deploy anywhere with our global infrastructure." },
36
+ { icon: "🎨", title: "Customizable", desc: "Tailor every aspect to your brand and needs." },
37
+ ];
38
+
39
+ pricingPlans = [
40
+ { plan: "Starter", price: "$9", features: ["Up to 5 projects", "Basic analytics", "Email support"], featured: false },
41
+ { plan: "Pro", price: "$29", features: ["Unlimited projects", "Advanced analytics", "Priority support", "Custom integrations"], featured: true },
42
+ { plan: "Enterprise", price: "$99", features: ["Everything in Pro", "Dedicated support", "SLA guarantee", "Custom deployment"], featured: false },
43
+ ];
44
+
45
+ testimonials = [
46
+ { text: "This platform transformed how our team ships features. Absolutely love it.", author: "Sarah K., CTO" },
47
+ { text: "The best investment we made this year. The performance gains are incredible.", author: "Michael R., Developer" },
48
+ ];
49
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "{{packageName}}",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "scripts": {
6
+ "ng": "ng",
7
+ "start": "ng serve",
8
+ "dev": "ng serve",
9
+ "build": "ng build",
10
+ "preview": "ng serve",
11
+ "watch": "ng build --watch --configuration development"
12
+ },
13
+ "dependencies": {
14
+ "@angular/animations": "~22.0.1",
15
+ "@angular/common": "~22.0.1",
16
+ "@angular/compiler": "~22.0.1",
17
+ "@angular/core": "~22.0.0",
18
+ "@angular/forms": "~22.0.0",
19
+ "@angular/platform-browser": "~22.0.0",
20
+ "@angular/platform-browser-dynamic": "~22.0.0",
21
+ "@angular/router": "~22.0.0",
22
+ "@tsparticles/engine": "^4.1.3",
23
+ "@tsparticles/slim": "^4.1.3",
24
+ "@tsparticles/configs": "^4.1.3",
25
+ "angular-fireworks": "^4.1.3",
26
+ "rxjs": "~7.8.2",
27
+ "tslib": "^2.8.1",
28
+ "zone.js": "~0.16.2"
29
+ },
30
+ "devDependencies": {
31
+ "@angular-devkit/build-angular": "~22.0.0",
32
+ "@angular/cli": "~22.0.0",
33
+ "@angular/compiler-cli": "~22.0.0",
34
+ "typescript": "~6.0.3"
35
+ }
36
+ }
@@ -0,0 +1,259 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
9
+ color: #fff;
10
+ background: #080818;
11
+ overflow-x: hidden;
12
+ }
13
+
14
+ .section {
15
+ min-height: 100vh;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ padding: 4rem 1rem;
20
+ position: relative;
21
+ }
22
+
23
+ .container {
24
+ max-width: 1100px;
25
+ width: 100%;
26
+ margin: 0 auto;
27
+ text-align: center;
28
+ }
29
+
30
+ h2 {
31
+ font-size: 2.5em;
32
+ margin-bottom: 3rem;
33
+ background: linear-gradient(135deg, #6c5ce7, #00cec9);
34
+ -webkit-background-clip: text;
35
+ -webkit-text-fill-color: transparent;
36
+ background-clip: text;
37
+ }
38
+
39
+ #hero {
40
+ min-height: 100vh;
41
+ position: relative;
42
+ }
43
+
44
+ .hero-content {
45
+ text-align: center;
46
+ z-index: 10;
47
+ padding: 2rem;
48
+ }
49
+
50
+ .hero-content h1 {
51
+ font-size: 4em;
52
+ line-height: 1.1;
53
+ margin-bottom: 1rem;
54
+ }
55
+
56
+ .gradient-text {
57
+ background: linear-gradient(135deg, #6c5ce7, #fd79a8);
58
+ -webkit-background-clip: text;
59
+ -webkit-text-fill-color: transparent;
60
+ background-clip: text;
61
+ }
62
+
63
+ .hero-subtitle {
64
+ font-size: 1.3em;
65
+ opacity: 0.7;
66
+ margin-bottom: 2rem;
67
+ max-width: 600px;
68
+ margin-left: auto;
69
+ margin-right: auto;
70
+ }
71
+
72
+ .hero-cta {
73
+ display: flex;
74
+ gap: 1rem;
75
+ justify-content: center;
76
+ flex-wrap: wrap;
77
+ }
78
+
79
+ .btn {
80
+ padding: 0.8em 2em;
81
+ font-size: 1.1em;
82
+ font-weight: 600;
83
+ border-radius: 8px;
84
+ text-decoration: none;
85
+ transition: transform 0.2s, box-shadow 0.2s;
86
+ display: inline-block;
87
+ }
88
+
89
+ .btn:hover {
90
+ transform: translateY(-2px);
91
+ box-shadow: 0 4px 20px rgba(108, 92, 231, 0.4);
92
+ }
93
+
94
+ .btn-primary {
95
+ background: linear-gradient(135deg, #6c5ce7, #a29bfe);
96
+ color: #fff;
97
+ }
98
+
99
+ .btn-secondary {
100
+ background: rgba(255, 255, 255, 0.1);
101
+ color: #fff;
102
+ border: 1px solid rgba(255, 255, 255, 0.2);
103
+ }
104
+
105
+ .btn-large {
106
+ padding: 1em 3em;
107
+ font-size: 1.2em;
108
+ }
109
+
110
+ .features-grid {
111
+ display: grid;
112
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
113
+ gap: 2rem;
114
+ }
115
+
116
+ .feature-card {
117
+ background: rgba(255, 255, 255, 0.03);
118
+ border: 1px solid rgba(255, 255, 255, 0.08);
119
+ border-radius: 16px;
120
+ padding: 2rem;
121
+ text-align: center;
122
+ transition: transform 0.3s, border-color 0.3s;
123
+ }
124
+
125
+ .feature-card:hover {
126
+ transform: translateY(-6px);
127
+ border-color: #6c5ce7;
128
+ }
129
+
130
+ .feature-icon {
131
+ font-size: 2.5em;
132
+ margin-bottom: 1rem;
133
+ }
134
+
135
+ .feature-card h3 {
136
+ margin-bottom: 0.5rem;
137
+ }
138
+
139
+ .feature-card p {
140
+ opacity: 0.7;
141
+ font-size: 0.95em;
142
+ }
143
+
144
+ .pricing-grid {
145
+ display: grid;
146
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
147
+ gap: 2rem;
148
+ align-items: center;
149
+ }
150
+
151
+ .pricing-card {
152
+ background: rgba(255, 255, 255, 0.03);
153
+ border: 1px solid rgba(255, 255, 255, 0.08);
154
+ border-radius: 16px;
155
+ padding: 2.5rem 2rem;
156
+ text-align: center;
157
+ }
158
+
159
+ .pricing-card.featured {
160
+ border-color: #6c5ce7;
161
+ background: rgba(108, 92, 231, 0.08);
162
+ transform: scale(1.05);
163
+ }
164
+
165
+ .price {
166
+ font-size: 3em;
167
+ font-weight: 700;
168
+ margin: 1rem 0;
169
+ }
170
+
171
+ .price span {
172
+ font-size: 0.4em;
173
+ opacity: 0.5;
174
+ font-weight: 400;
175
+ }
176
+
177
+ .pricing-card ul {
178
+ list-style: none;
179
+ margin: 1.5rem 0;
180
+ }
181
+
182
+ .pricing-card li {
183
+ padding: 0.4em 0;
184
+ opacity: 0.8;
185
+ }
186
+
187
+ .pricing-card li::before {
188
+ content: "✓ ";
189
+ color: #00cec9;
190
+ }
191
+
192
+ .testimonial-grid {
193
+ display: grid;
194
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
195
+ gap: 2rem;
196
+ }
197
+
198
+ .testimonial-card {
199
+ background: rgba(255, 255, 255, 0.03);
200
+ border: 1px solid rgba(255, 255, 255, 0.08);
201
+ border-radius: 16px;
202
+ padding: 2rem;
203
+ text-align: left;
204
+ }
205
+
206
+ .testimonial-card p {
207
+ font-style: italic;
208
+ font-size: 1.1em;
209
+ line-height: 1.6;
210
+ margin-bottom: 1rem;
211
+ }
212
+
213
+ .author {
214
+ opacity: 0.6;
215
+ font-size: 0.9em;
216
+ }
217
+
218
+ .cta-content h2 {
219
+ margin-bottom: 1rem;
220
+ }
221
+
222
+ .cta-content p {
223
+ font-size: 1.2em;
224
+ opacity: 0.7;
225
+ margin-bottom: 2rem;
226
+ }
227
+
228
+ #footer {
229
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
230
+ padding: 2rem 1rem;
231
+ }
232
+
233
+ .footer-content {
234
+ display: flex;
235
+ justify-content: space-between;
236
+ align-items: center;
237
+ flex-wrap: wrap;
238
+ gap: 1rem;
239
+ }
240
+
241
+ .footer-content p {
242
+ opacity: 0.5;
243
+ font-size: 0.9em;
244
+ }
245
+
246
+ .footer-links {
247
+ display: flex;
248
+ gap: 1.5rem;
249
+ }
250
+
251
+ .footer-links a {
252
+ color: rgba(255, 255, 255, 0.6);
253
+ text-decoration: none;
254
+ font-size: 0.9em;
255
+ }
256
+
257
+ .footer-links a:hover {
258
+ color: #6c5ce7;
259
+ }