@xenterprises/nuxt-x-marketing 0.0.23 → 1.0.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.
Files changed (115) hide show
  1. package/.claude/settings.local.json +22 -0
  2. package/.playground/app.config.ts +44 -45
  3. package/.playground/app.vue +263 -0
  4. package/.playground/components/AppFooter.vue +103 -0
  5. package/.playground/components/AppHeader.vue +41 -0
  6. package/.playground/components/CodeExample.vue +70 -0
  7. package/.playground/components/ComponentPlayground.vue +117 -0
  8. package/.playground/components/DocsHeader.vue +19 -0
  9. package/.playground/layouts/default.vue +13 -3
  10. package/.playground/layouts/docs-layout.vue +161 -0
  11. package/.playground/layouts/docs.vue +11 -0
  12. package/.playground/package-lock.json +6 -0
  13. package/.playground/pages/blog/author.vue +145 -0
  14. package/.playground/pages/blog/card.vue +149 -0
  15. package/.playground/pages/blog/cta.vue +131 -0
  16. package/.playground/pages/blog/detail.vue +379 -0
  17. package/.playground/pages/blog/list.vue +261 -0
  18. package/.playground/pages/blog/navigation.vue +228 -0
  19. package/.playground/pages/blog/sidebar.vue +279 -0
  20. package/.playground/pages/config.vue +289 -0
  21. package/.playground/pages/content/comparison.vue +253 -0
  22. package/.playground/pages/content/cta.vue +245 -0
  23. package/.playground/pages/content/features.vue +217 -0
  24. package/.playground/pages/content/newsletter-section.vue +260 -0
  25. package/.playground/pages/content/newsletter.vue +200 -0
  26. package/.playground/pages/content/pricing.vue +335 -0
  27. package/.playground/pages/content/testimonials.vue +188 -0
  28. package/.playground/pages/hero.vue +257 -0
  29. package/.playground/pages/index.vue +379 -2
  30. package/.playground/pages/layout/footer.vue +210 -0
  31. package/.playground/pages/layout/legal-footer.vue +121 -0
  32. package/.playground/pages/layout/navbar.vue +285 -0
  33. package/.playground/pages/layout/section.vue +266 -0
  34. package/.playground/pages/layout/x-legal.vue +199 -0
  35. package/.playground/pages/modals/feature-modal.vue +320 -0
  36. package/.playground/pages/modals/image-lightbox.vue +277 -0
  37. package/.playground/pages/modals/video-modal.vue +222 -0
  38. package/.playground/pages/notifications/announcement-bar.vue +164 -0
  39. package/.playground/pages/notifications/cookie-banner.vue +210 -0
  40. package/.playground/pages/notifications/cookie-toast.vue +143 -0
  41. package/.playground/pages/notifications/gdpr.vue +276 -0
  42. package/.playground/pages/notifications/social-proof-toast.vue +255 -0
  43. package/.playground/pages/ui/badge.vue +161 -0
  44. package/.playground/pages/ui/bg-pattern.vue +177 -0
  45. package/.playground/pages/ui/glass-card.vue +179 -0
  46. package/.playground/pages/ui/glow-divider.vue +179 -0
  47. package/.playground/pages/ui/promo-card.vue +259 -0
  48. package/.playground/pages/ui/section-stitch.vue +411 -0
  49. package/.playground/pages/utilities/back-to-top.vue +153 -0
  50. package/.playground/pages/utilities/popup-chat.vue +224 -0
  51. package/README.md +799 -164
  52. package/app/app.config.ts +88 -2
  53. package/app/app.vue +106 -11
  54. package/app/assets/css/x-marketing.css +668 -0
  55. package/app/components/X/Footer/XLegal/index.vue +63 -26
  56. package/app/components/X/Footer/index.vue +89 -89
  57. package/app/components/X/Header/App.vue +63 -0
  58. package/app/components/X/Mark/Blog/Author.vue +170 -0
  59. package/app/components/X/Mark/Blog/CTANewsletter.vue +197 -0
  60. package/app/components/X/Mark/Blog/Card.vue +117 -0
  61. package/app/components/X/Mark/Blog/Detail.vue +240 -0
  62. package/app/components/X/Mark/Blog/List.vue +156 -0
  63. package/app/components/X/Mark/Blog/Navigation.vue +100 -0
  64. package/app/components/X/Mark/Blog/Sidebar.vue +160 -0
  65. package/app/components/X/Mark/Button/BackToTop.vue +99 -0
  66. package/app/components/X/Mark/CTA/index.vue +294 -0
  67. package/app/components/X/Mark/Card/Glass.vue +64 -0
  68. package/app/components/X/Mark/Card/Promo.vue +164 -0
  69. package/app/components/X/Mark/Divider/Glow.vue +113 -0
  70. package/app/components/X/Mark/Features/index.vue +194 -0
  71. package/app/components/X/Mark/Hero/index.vue +217 -0
  72. package/app/components/X/Mark/Layout/AnnouncementBar.vue +139 -0
  73. package/app/components/X/Mark/Layout/Footer.vue +160 -0
  74. package/app/components/X/Mark/Layout/FooterLegal.vue +42 -0
  75. package/app/components/X/Mark/Layout/Navbar.vue +267 -0
  76. package/app/components/X/Mark/Modal/Chat.vue +151 -0
  77. package/app/components/X/Mark/Modal/Feature.vue +197 -0
  78. package/app/components/X/Mark/Modal/Image.vue +226 -0
  79. package/app/components/X/Mark/Modal/Video.vue +203 -0
  80. package/app/components/X/Mark/Modal/index.vue +133 -0
  81. package/app/components/X/Mark/Newsletter/Form.vue +174 -0
  82. package/app/components/X/Mark/Pattern/Bg.vue +86 -0
  83. package/app/components/X/Mark/Pricing/Comparison.vue +126 -0
  84. package/app/components/X/Mark/Pricing/Plans.vue +181 -0
  85. package/app/components/X/Mark/Privacy/CookieBanner.vue +112 -0
  86. package/app/components/X/Mark/Privacy/CookieToast.vue +43 -0
  87. package/app/components/X/Mark/Privacy/GDPR.vue +245 -0
  88. package/app/components/X/Mark/Section/Newsletter.vue +183 -0
  89. package/app/components/X/Mark/Section/Stitch.vue +156 -0
  90. package/app/components/X/Mark/Section/index.vue +151 -0
  91. package/app/components/X/Mark/SocialProof/Badge.vue +102 -0
  92. package/app/components/X/Mark/SocialProof/Testimonials.vue +326 -0
  93. package/app/components/X/Mark/SocialProof/Toast.vue +136 -0
  94. package/app/components/X/Mark/_archive/Pattern/Background.vue +83 -0
  95. package/app/components/X/Mark/_archive/Pattern/CheckBg.vue +35 -0
  96. package/app/components/X/Mark/_archive/Pattern/CircuitBg.vue +41 -0
  97. package/app/components/X/Mark/_archive/Pattern/DotsBg.vue +35 -0
  98. package/app/components/X/Mark/_archive/Pattern/GlowDivider.vue +86 -0
  99. package/app/components/X/Mark/_archive/Pattern/HexBg.vue +35 -0
  100. package/app/components/X/Mark/_archive/Pattern/PlaidBg.vue +47 -0
  101. package/app/components/X/Mark/_archive/Pattern/SectionStitch.vue +168 -0
  102. package/app/components/X/Mark/_archive/Pattern/WaveBg.vue +41 -0
  103. package/app/components/X/_archive/Newsletter/Form.vue +123 -0
  104. package/app/components/X/_archive/Newsletter/Section.vue +131 -0
  105. package/app/composables/useParallax.ts +124 -0
  106. package/app/composables/useScrollReveal.ts +92 -0
  107. package/app/pages/index.vue +210 -0
  108. package/app/plugins/marketing.client.ts +13 -0
  109. package/app/types/marketing.d.ts +268 -0
  110. package/componentList.json +511 -0
  111. package/nuxt.config.ts +6 -13
  112. package/package.json +21 -9
  113. package/.editorconfig +0 -12
  114. package/app/assets/css/main.css +0 -2
  115. package/app/components/X/Marketing/Sections/EmailSubscription/index.vue +0 -129
@@ -0,0 +1,668 @@
1
+ @import "tailwindcss";
2
+ @import "@nuxt/ui";
3
+
4
+ @layer utilities {
5
+ .pt-24 {
6
+ padding-top: 6rem;
7
+ }
8
+
9
+ /* ============================================
10
+ * X MARKETING TYPOGRAPHY UTILITIES
11
+ * From spec-prompt.md specification
12
+ * ============================================ */
13
+
14
+ /* Display - for heroes, major headings */
15
+ .xText-display {
16
+ font-size: clamp(3rem, 8vw, 6rem);
17
+ line-height: 1.0;
18
+ letter-spacing: -0.03em;
19
+ font-weight: 700;
20
+ }
21
+
22
+ /* Headline - section titles */
23
+ .xText-headline {
24
+ font-size: clamp(2rem, 5vw, 3.5rem);
25
+ line-height: 1.1;
26
+ letter-spacing: -0.02em;
27
+ font-weight: 600;
28
+ }
29
+
30
+ /* Title - card titles, smaller headings */
31
+ .xText-title {
32
+ font-size: clamp(1.25rem, 3vw, 1.75rem);
33
+ line-height: 1.2;
34
+ letter-spacing: -0.01em;
35
+ font-weight: 600;
36
+ }
37
+
38
+ /* Body - paragraph text */
39
+ .xText-body {
40
+ font-size: 1.125rem;
41
+ line-height: 1.7;
42
+ }
43
+
44
+ /* Small - captions, labels */
45
+ .xText-small {
46
+ font-size: 0.875rem;
47
+ line-height: 1.5;
48
+ }
49
+
50
+ /* Eyebrow - section labels */
51
+ .xText-eyebrow {
52
+ font-size: 0.75rem;
53
+ letter-spacing: 0.1em;
54
+ text-transform: uppercase;
55
+ font-weight: 500;
56
+ }
57
+
58
+ /* Balance long headlines */
59
+ .xText-balance {
60
+ text-wrap: balance;
61
+ }
62
+
63
+ /* Gradient text */
64
+ .xText-gradient {
65
+ background: linear-gradient(135deg, var(--color-primary-400), var(--color-primary-600));
66
+ -webkit-background-clip: text;
67
+ -webkit-text-fill-color: transparent;
68
+ background-clip: text;
69
+ }
70
+
71
+ /* Legacy typography (kept for compatibility) */
72
+ .text-hero {
73
+ font-size: clamp(3rem, 8vw, 7rem);
74
+ line-height: 0.9;
75
+ letter-spacing: -0.02em;
76
+ }
77
+
78
+ .text-section-heading {
79
+ font-size: clamp(2.5rem, 5vw, 4rem);
80
+ line-height: 1.1;
81
+ letter-spacing: -0.01em;
82
+ }
83
+
84
+ .text-eyebrow {
85
+ font-size: 0.75rem;
86
+ letter-spacing: 0.15em;
87
+ text-transform: uppercase;
88
+ font-weight: 600;
89
+ }
90
+
91
+ /* ============================================
92
+ * X MARKETING SCROLL ANIMATIONS
93
+ * ============================================ */
94
+
95
+ /* xFadeUp - Global fade up on scroll */
96
+ .xFadeUp {
97
+ opacity: 0;
98
+ transform: translateY(24px);
99
+ transition:
100
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
101
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
102
+ }
103
+
104
+ .xFadeUp.is-visible {
105
+ opacity: 1;
106
+ transform: translateY(0);
107
+ transition:
108
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
109
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1),
110
+ box-shadow 700ms cubic-bezier(0.16, 1, 0.3, 1);
111
+ }
112
+
113
+ /* Stagger children */
114
+ .xFadeUp-stagger > * {
115
+ opacity: 0;
116
+ transform: translateY(24px);
117
+ transition:
118
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
119
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
120
+ }
121
+
122
+ .xFadeUp-stagger.is-visible > *:nth-child(1) { transition-delay: 0ms; opacity: 1; transform: translateY(0); }
123
+ .xFadeUp-stagger.is-visible > *:nth-child(2) { transition-delay: 100ms; opacity: 1; transform: translateY(0); }
124
+ .xFadeUp-stagger.is-visible > *:nth-child(3) { transition-delay: 200ms; opacity: 1; transform: translateY(0); }
125
+ .xFadeUp-stagger.is-visible > *:nth-child(4) { transition-delay: 300ms; opacity: 1; transform: translateY(0); }
126
+ .xFadeUp-stagger.is-visible > *:nth-child(5) { transition-delay: 400ms; opacity: 1; transform: translateY(0); }
127
+ .xFadeUp-stagger.is-visible > *:nth-child(6) { transition-delay: 500ms; opacity: 1; transform: translateY(0); }
128
+
129
+ /* xFadeIn - Simple fade */
130
+ .xFadeIn {
131
+ opacity: 0;
132
+ transition: opacity 700ms cubic-bezier(0.16, 1, 0.3, 1);
133
+ }
134
+ .xFadeIn.is-visible { opacity: 1; }
135
+
136
+ /* xFadeLeft - Fade from left */
137
+ .xFadeLeft {
138
+ opacity: 0;
139
+ transform: translateX(-24px);
140
+ transition:
141
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
142
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
143
+ }
144
+ .xFadeLeft.is-visible { opacity: 1; transform: translateX(0); }
145
+
146
+ /* xFadeRight - Fade from right */
147
+ .xFadeRight {
148
+ opacity: 0;
149
+ transform: translateX(24px);
150
+ transition:
151
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
152
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
153
+ }
154
+ .xFadeRight.is-visible { opacity: 1; transform: translateX(0); }
155
+
156
+ /* xScale - Scale in */
157
+ .xScale {
158
+ opacity: 0;
159
+ transform: scale(0.95);
160
+ transition:
161
+ opacity 700ms cubic-bezier(0.16, 1, 0.3, 1),
162
+ transform 700ms cubic-bezier(0.16, 1, 0.3, 1);
163
+ }
164
+ .xScale.is-visible { opacity: 1; transform: scale(1); }
165
+
166
+ /* Legacy reveal (kept for compatibility) */
167
+ [data-reveal] {
168
+ opacity: 0;
169
+ transform: translateY(40px);
170
+ transition: opacity 0.4s cubic-bezier(0.25, 1, 0.5, 1),
171
+ transform 0.4s cubic-bezier(0.25, 1, 0.5, 1);
172
+ }
173
+
174
+ [data-reveal].is-visible {
175
+ opacity: 1;
176
+ transform: translateY(0);
177
+ }
178
+
179
+ /* ============================================
180
+ * X MARKETING PARALLAX
181
+ * ============================================ */
182
+
183
+ .xParallax {
184
+ will-change: transform;
185
+ transition: transform 0.1s linear;
186
+ }
187
+
188
+ /* Static parallax backgrounds (CSS only) */
189
+ .xParallax-bg {
190
+ background-attachment: fixed;
191
+ background-position: center;
192
+ background-size: cover;
193
+ }
194
+
195
+ @media (prefers-reduced-motion: reduce) {
196
+ .xParallax,
197
+ .xParallax-bg {
198
+ transform: none !important;
199
+ background-attachment: scroll;
200
+ }
201
+
202
+ .xFadeUp,
203
+ .xFadeIn,
204
+ .xFadeLeft,
205
+ .xFadeRight,
206
+ .xScale,
207
+ .xFadeUp-stagger > * {
208
+ opacity: 1 !important;
209
+ transform: none !important;
210
+ }
211
+ }
212
+
213
+ /* ============================================
214
+ * X MARKETING GLASS EFFECTS
215
+ * ============================================ */
216
+
217
+ .xGlass {
218
+ background: var(--x-glass-bg, rgba(255, 255, 255, 0.7));
219
+ backdrop-filter: blur(20px);
220
+ -webkit-backdrop-filter: blur(20px);
221
+ border: 1px solid var(--x-glass-border, rgba(255, 255, 255, 0.2));
222
+ box-shadow: var(--x-glass-shadow, 0 8px 32px rgba(0, 0, 0, 0.08));
223
+ }
224
+
225
+ .xGlass-subtle {
226
+ background: var(--x-glass-bg, rgba(255, 255, 255, 0.7));
227
+ backdrop-filter: blur(8px);
228
+ -webkit-backdrop-filter: blur(8px);
229
+ }
230
+
231
+ .xGlass-heavy {
232
+ background: var(--x-glass-bg, rgba(255, 255, 255, 0.7));
233
+ backdrop-filter: blur(40px);
234
+ -webkit-backdrop-filter: blur(40px);
235
+ border: 1px solid var(--x-glass-border, rgba(255, 255, 255, 0.2));
236
+ box-shadow: var(--x-glass-shadow, 0 8px 32px rgba(0, 0, 0, 0.08));
237
+ }
238
+
239
+ /* ============================================
240
+ * X MARKETING GLOW EFFECTS
241
+ * ============================================ */
242
+
243
+ .xGlow-divider {
244
+ position: relative;
245
+ border: none;
246
+ height: 1px;
247
+ background: linear-gradient(
248
+ 90deg,
249
+ transparent 0%,
250
+ var(--x-glow-primary, rgba(var(--color-primary-400), 0.5)) 50%,
251
+ transparent 100%
252
+ );
253
+ }
254
+
255
+ .xGlow-divider::before {
256
+ content: '';
257
+ position: absolute;
258
+ left: 50%;
259
+ top: 50%;
260
+ transform: translate(-50%, -50%);
261
+ width: 60%;
262
+ height: 40px;
263
+ background: radial-gradient(
264
+ ellipse at center,
265
+ var(--x-glow-primary, rgba(var(--color-primary-400), 0.6)) 0%,
266
+ var(--x-glow-primary, rgba(var(--color-primary-400), 0.3)) 30%,
267
+ transparent 70%
268
+ );
269
+ pointer-events: none;
270
+ }
271
+
272
+ .xGlow-divider-subtle {
273
+ position: relative;
274
+ border: none;
275
+ height: 1px;
276
+ background: linear-gradient(
277
+ 90deg,
278
+ transparent 0%,
279
+ var(--x-glow-subtle, rgba(255, 255, 255, 0.1)) 50%,
280
+ transparent 100%
281
+ );
282
+ }
283
+
284
+ .xGlow-divider-subtle::before {
285
+ content: '';
286
+ position: absolute;
287
+ left: 50%;
288
+ top: 50%;
289
+ transform: translate(-50%, -50%);
290
+ width: 50%;
291
+ height: 24px;
292
+ background: radial-gradient(
293
+ ellipse at center,
294
+ var(--x-glow-subtle, rgba(255, 255, 255, 0.15)) 0%,
295
+ transparent 70%
296
+ );
297
+ pointer-events: none;
298
+ }
299
+
300
+ .xGlow-border {
301
+ position: relative;
302
+ }
303
+
304
+ .xGlow-border::before {
305
+ content: '';
306
+ position: absolute;
307
+ inset: -1px;
308
+ background: linear-gradient(
309
+ 135deg,
310
+ var(--x-glow-primary, rgba(var(--color-primary-400), 0.5)) 0%,
311
+ transparent 50%,
312
+ var(--x-glow-primary, rgba(var(--color-primary-400), 0.5)) 100%
313
+ );
314
+ border-radius: inherit;
315
+ z-index: -1;
316
+ opacity: 0.5;
317
+ }
318
+
319
+ .xGlow-text {
320
+ text-shadow: 0 0 40px var(--x-glow-primary, rgba(var(--color-primary-400), 0.5));
321
+ }
322
+
323
+ /* ============================================
324
+ * X MARKETING IMAGE OVERLAYS
325
+ * ============================================ */
326
+
327
+ .xOverlay {
328
+ position: relative;
329
+ }
330
+
331
+ .xOverlay::after {
332
+ content: '';
333
+ position: absolute;
334
+ inset: 0;
335
+ pointer-events: none;
336
+ }
337
+
338
+ .xOverlay-light::after {
339
+ background: rgba(0, 0, 0, 0.3);
340
+ }
341
+
342
+ .xOverlay-heavy::after {
343
+ background: rgba(0, 0, 0, 0.6);
344
+ }
345
+
346
+ .xOverlay-gradient::after {
347
+ background: linear-gradient(to top, rgba(0,0,0,0.8) 0%, transparent 50%);
348
+ }
349
+
350
+ .xOverlay-vignette::after {
351
+ background: radial-gradient(
352
+ ellipse at center,
353
+ transparent 0%,
354
+ rgba(0, 0, 0, 0.4) 100%
355
+ );
356
+ }
357
+
358
+ /* ============================================
359
+ * X MARKETING HOVER EFFECTS
360
+ * ============================================ */
361
+
362
+ .xHover-lift {
363
+ transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1),
364
+ box-shadow 300ms cubic-bezier(0.16, 1, 0.3, 1),
365
+ background 300ms cubic-bezier(0.16, 1, 0.3, 1),
366
+ border-color 300ms cubic-bezier(0.16, 1, 0.3, 1);
367
+ }
368
+ .xHover-lift:hover {
369
+ transform: translateY(-4px);
370
+ box-shadow: var(--x-shadow-lg, 0 12px 32px rgba(0, 0, 0, 0.12));
371
+ }
372
+
373
+ .xHover-grow {
374
+ transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
375
+ }
376
+ .xHover-grow:hover {
377
+ transform: scale(1.02);
378
+ }
379
+
380
+ .xHover-glow {
381
+ transition: box-shadow 300ms cubic-bezier(0.16, 1, 0.3, 1);
382
+ }
383
+ .xHover-glow:hover {
384
+ box-shadow: var(--x-shadow-glow-md, 0 0 40px rgba(var(--color-primary-500), 0.3));
385
+ }
386
+
387
+ .xHover-glow-neutral {
388
+ transition: box-shadow 300ms cubic-bezier(0.16, 1, 0.3, 1);
389
+ }
390
+ .xHover-glow-neutral:hover {
391
+ box-shadow: 0 0 40px rgba(128, 128, 128, 0.25);
392
+ }
393
+ .dark .xHover-glow-neutral:hover {
394
+ box-shadow: 0 0 40px rgba(255, 255, 255, 0.12);
395
+ }
396
+
397
+ .xHover-glow-subtle {
398
+ transition: box-shadow 500ms cubic-bezier(0.16, 1, 0.3, 1);
399
+ }
400
+ .xHover-glow-subtle:hover {
401
+ box-shadow: 0 0 30px rgba(128, 128, 128, 0.15);
402
+ }
403
+ .dark .xHover-glow-subtle:hover {
404
+ box-shadow: 0 0 30px rgba(255, 255, 255, 0.08);
405
+ }
406
+
407
+ /* For images inside containers */
408
+ .xHover-zoom {
409
+ overflow: hidden;
410
+ }
411
+ .xHover-zoom img {
412
+ transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1);
413
+ }
414
+ .xHover-zoom:hover img {
415
+ transform: scale(1.08);
416
+ }
417
+
418
+ /* Legacy hover-lift (kept for compatibility) */
419
+ .hover-lift {
420
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
421
+ box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
422
+ }
423
+
424
+ .hover-lift:hover {
425
+ transform: translateY(-4px);
426
+ box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.15);
427
+ }
428
+ }
429
+
430
+ @theme static {
431
+ /* Premium Automotive Color Palette */
432
+ /* Electric Blue Accent (Replace with your brand color) */
433
+ --color-brand-50: #e6f0ff;
434
+ --color-brand-100: #cce0ff;
435
+ --color-brand-200: #99c2ff;
436
+ --color-brand-300: #66a3ff;
437
+ --color-brand-400: #3385ff;
438
+ --color-brand-500: #0066ff;
439
+ --color-brand-600: #0052cc;
440
+ --color-brand-700: #003d99;
441
+ --color-brand-800: #002966;
442
+ --color-brand-900: #001433;
443
+ --color-brand-950: #000a1a;
444
+
445
+ /* Deep blacks with warm undertone */
446
+ --color-deep-50: #f5f5f4;
447
+ --color-deep-100: #e8e8e3;
448
+ --color-deep-200: #c5c5bd;
449
+ --color-deep-300: #9d9d94;
450
+ --color-deep-400: #78786f;
451
+ --color-deep-500: #52524e;
452
+ --color-deep-600: #3d3c39;
453
+ --color-deep-700: #2d2c2a;
454
+ --color-deep-800: #1f1e1c;
455
+ --color-deep-900: #151412;
456
+ --color-deep-950: #0a0908;
457
+
458
+ /* Typography - Premium Font Stack */
459
+ --font-display: "Outfit", system-ui, -apple-system, sans-serif;
460
+ --font-body: "DM Sans", system-ui, -apple-system, sans-serif;
461
+ --font-sans: var(--font-body);
462
+ }
463
+
464
+ :root {
465
+ --ui-radius: 0.375rem;
466
+ --ui-container: 1440px;
467
+ --ui-header-height: 4.5rem;
468
+
469
+ /* Easing curves for premium animations */
470
+ --ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
471
+ --ease-in-out-quart: cubic-bezier(0.76, 0, 0.24, 1);
472
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
473
+
474
+ /* ============================================
475
+ * X MARKETING DESIGN SYSTEM VARIABLES
476
+ * From spec-prompt.md specification
477
+ * ============================================ */
478
+
479
+ /* Surface colors for sections */
480
+ --x-surface-elevated: color-mix(in srgb, var(--color-primary-500) 3%, white);
481
+ --x-surface-subtle: color-mix(in srgb, var(--color-neutral-500) 3%, white);
482
+ --x-surface-bold: var(--color-primary-950);
483
+
484
+ /* Glass effect */
485
+ --x-glass-bg: rgba(255, 255, 255, 0.7);
486
+ --x-glass-border: rgba(255, 255, 255, 0.2);
487
+ --x-glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
488
+
489
+ /* Glow colors */
490
+ --x-glow-primary: color-mix(in srgb, var(--color-primary-400) 50%, transparent);
491
+ --x-glow-subtle: rgba(255, 255, 255, 0.1);
492
+
493
+ /* Overlay for images */
494
+ --x-overlay-light: rgba(0, 0, 0, 0.3);
495
+ --x-overlay-heavy: rgba(0, 0, 0, 0.6);
496
+ --x-overlay-gradient: linear-gradient(to top, rgba(0,0,0,0.8) 0%, transparent 50%);
497
+
498
+ /* Typography scale */
499
+ --x-text-display: clamp(3rem, 8vw, 6rem);
500
+ --x-text-display-leading: 1.0;
501
+ --x-text-display-tracking: -0.03em;
502
+
503
+ --x-text-headline: clamp(2rem, 5vw, 3.5rem);
504
+ --x-text-headline-leading: 1.1;
505
+ --x-text-headline-tracking: -0.02em;
506
+
507
+ --x-text-title: clamp(1.25rem, 3vw, 1.75rem);
508
+ --x-text-title-leading: 1.2;
509
+ --x-text-title-tracking: -0.01em;
510
+
511
+ --x-text-body: 1.125rem;
512
+ --x-text-body-leading: 1.7;
513
+
514
+ --x-text-small: 0.875rem;
515
+ --x-text-small-leading: 1.5;
516
+
517
+ --x-text-eyebrow: 0.75rem;
518
+ --x-text-eyebrow-tracking: 0.1em;
519
+
520
+ /* Spacing scale */
521
+ --x-section-py: clamp(4rem, 10vw, 8rem);
522
+ --x-section-py-lg: clamp(6rem, 15vw, 12rem);
523
+
524
+ --x-content-sm: 42rem;
525
+ --x-content-md: 64rem;
526
+ --x-content-lg: 80rem;
527
+ --x-content-xl: 96rem;
528
+
529
+ /* Motion durations */
530
+ --x-duration-instant: 100ms;
531
+ --x-duration-fast: 200ms;
532
+ --x-duration-normal: 300ms;
533
+ --x-duration-slow: 500ms;
534
+ --x-duration-slower: 700ms;
535
+
536
+ /* Easings */
537
+ --x-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
538
+ --x-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
539
+ --x-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
540
+
541
+ /* Standard transitions */
542
+ --x-transition-colors: color var(--x-duration-fast) var(--x-ease-out),
543
+ background-color var(--x-duration-fast) var(--x-ease-out),
544
+ border-color var(--x-duration-fast) var(--x-ease-out);
545
+ --x-transition-transform: transform var(--x-duration-normal) var(--x-ease-out);
546
+ --x-transition-opacity: opacity var(--x-duration-normal) var(--x-ease-out);
547
+ --x-transition-all: all var(--x-duration-normal) var(--x-ease-out);
548
+
549
+ /* Elevation shadows */
550
+ --x-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
551
+ --x-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
552
+ --x-shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.12);
553
+ --x-shadow-xl: 0 24px 48px rgba(0, 0, 0, 0.16);
554
+
555
+ /* Glow shadows */
556
+ --x-shadow-glow-sm: 0 0 20px var(--x-glow-primary);
557
+ --x-shadow-glow-md: 0 0 40px var(--x-glow-primary);
558
+ --x-shadow-glow-lg: 0 0 60px var(--x-glow-primary);
559
+ }
560
+
561
+ .dark {
562
+ --ui-bg: var(--color-deep-950);
563
+ --ui-primary: white;
564
+
565
+ /* Dark mode overrides for X Marketing */
566
+ --x-surface-elevated: color-mix(in srgb, var(--color-primary-500) 5%, var(--color-neutral-950));
567
+ --x-surface-subtle: var(--color-neutral-900);
568
+ --x-surface-bold: var(--color-primary-500);
569
+
570
+ --x-glass-bg: rgba(0, 0, 0, 0.6);
571
+ --x-glass-border: rgba(255, 255, 255, 0.1);
572
+ --x-glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
573
+
574
+ --x-glow-primary: color-mix(in srgb, var(--color-primary-500) 30%, transparent);
575
+ --x-glow-subtle: rgba(255, 255, 255, 0.05);
576
+
577
+ --x-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
578
+ --x-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
579
+ --x-shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.4);
580
+ --x-shadow-xl: 0 24px 48px rgba(0, 0, 0, 0.5);
581
+ }
582
+
583
+ /* Premium Animation Keyframes */
584
+ @keyframes slide-up-fade {
585
+ from {
586
+ opacity: 0;
587
+ transform: translateY(40px);
588
+ }
589
+ to {
590
+ opacity: 1;
591
+ transform: translateY(0);
592
+ }
593
+ }
594
+
595
+ @keyframes scale-in {
596
+ from {
597
+ opacity: 0;
598
+ transform: scale(0.95);
599
+ }
600
+ to {
601
+ opacity: 1;
602
+ transform: scale(1);
603
+ }
604
+ }
605
+
606
+ @keyframes shimmer {
607
+ 0% {
608
+ background-position: -200% center;
609
+ }
610
+ 100% {
611
+ background-position: 200% center;
612
+ }
613
+ }
614
+
615
+ @keyframes float {
616
+ 0%, 100% {
617
+ transform: translateY(0px);
618
+ }
619
+ 50% {
620
+ transform: translateY(-10px);
621
+ }
622
+ }
623
+
624
+ @keyframes glow-pulse {
625
+ 0%, 100% {
626
+ opacity: 0.5;
627
+ }
628
+ 50% {
629
+ opacity: 1;
630
+ }
631
+ }
632
+
633
+ @keyframes scroll-indicator {
634
+ 0% {
635
+ opacity: 1;
636
+ transform: translateY(0);
637
+ }
638
+ 50% {
639
+ opacity: 0.3;
640
+ transform: translateY(12px);
641
+ }
642
+ 100% {
643
+ opacity: 1;
644
+ transform: translateY(0);
645
+ }
646
+ }
647
+
648
+ /* Font Feature Settings for Premium Typography */
649
+ .font-display {
650
+ font-family: var(--font-display);
651
+ font-feature-settings: 'ss01' on, 'cv01' on;
652
+ }
653
+
654
+ .font-body {
655
+ font-family: var(--font-body);
656
+ }
657
+
658
+ /* Smooth scroll behavior */
659
+ html {
660
+ scroll-behavior: smooth;
661
+ }
662
+
663
+ /* Improved text rendering */
664
+ body {
665
+ -webkit-font-smoothing: antialiased;
666
+ -moz-osx-font-smoothing: grayscale;
667
+ text-rendering: optimizeLegibility;
668
+ }