@yca-software/yca-react-core 0.0.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 (87) hide show
  1. package/README.md +129 -0
  2. package/dist/admin/index.d.ts +10 -0
  3. package/dist/admin/index.js +3 -0
  4. package/dist/admin/index.js.map +1 -0
  5. package/dist/admin-BVYdWtEy.d.ts +3 -0
  6. package/dist/api/index.d.ts +68 -0
  7. package/dist/api/index.js +3 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/auth/index.d.ts +49 -0
  10. package/dist/auth/index.js +3 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/chunk-2HJO2ICF.js +339 -0
  13. package/dist/chunk-2HJO2ICF.js.map +1 -0
  14. package/dist/chunk-3AYG73DK.js +174 -0
  15. package/dist/chunk-3AYG73DK.js.map +1 -0
  16. package/dist/chunk-3SCZ4Z6P.js +26 -0
  17. package/dist/chunk-3SCZ4Z6P.js.map +1 -0
  18. package/dist/chunk-3ZLODBRJ.js +21 -0
  19. package/dist/chunk-3ZLODBRJ.js.map +1 -0
  20. package/dist/chunk-6LO5O4G6.js +224 -0
  21. package/dist/chunk-6LO5O4G6.js.map +1 -0
  22. package/dist/chunk-APZVW5SW.js +75 -0
  23. package/dist/chunk-APZVW5SW.js.map +1 -0
  24. package/dist/chunk-EVZBADFR.js +583 -0
  25. package/dist/chunk-EVZBADFR.js.map +1 -0
  26. package/dist/chunk-GXWVFQCK.js +52 -0
  27. package/dist/chunk-GXWVFQCK.js.map +1 -0
  28. package/dist/chunk-KG4JVAKS.js +13 -0
  29. package/dist/chunk-KG4JVAKS.js.map +1 -0
  30. package/dist/chunk-KZH56VPP.js +183 -0
  31. package/dist/chunk-KZH56VPP.js.map +1 -0
  32. package/dist/chunk-LP7Q75C6.js +96 -0
  33. package/dist/chunk-LP7Q75C6.js.map +1 -0
  34. package/dist/chunk-NL4NAHXG.js +3 -0
  35. package/dist/chunk-NL4NAHXG.js.map +1 -0
  36. package/dist/chunk-PLSNCPEC.js +2507 -0
  37. package/dist/chunk-PLSNCPEC.js.map +1 -0
  38. package/dist/chunk-QFKVPVFC.js +1391 -0
  39. package/dist/chunk-QFKVPVFC.js.map +1 -0
  40. package/dist/chunk-TSXUUD64.js +64 -0
  41. package/dist/chunk-TSXUUD64.js.map +1 -0
  42. package/dist/chunk-UCJ76BEC.js +32 -0
  43. package/dist/chunk-UCJ76BEC.js.map +1 -0
  44. package/dist/chunk-WFTIYYII.js +3 -0
  45. package/dist/chunk-WFTIYYII.js.map +1 -0
  46. package/dist/components/forms/index.d.ts +101 -0
  47. package/dist/components/forms/index.js +7 -0
  48. package/dist/components/forms/index.js.map +1 -0
  49. package/dist/components/marketing/index.d.ts +473 -0
  50. package/dist/components/marketing/index.js +5 -0
  51. package/dist/components/marketing/index.js.map +1 -0
  52. package/dist/components/spa/index.d.ts +275 -0
  53. package/dist/components/spa/index.js +8 -0
  54. package/dist/components/spa/index.js.map +1 -0
  55. package/dist/components/ui/index.d.ts +420 -0
  56. package/dist/components/ui/index.js +6 -0
  57. package/dist/components/ui/index.js.map +1 -0
  58. package/dist/constants/index.d.ts +2 -0
  59. package/dist/constants/index.js +4 -0
  60. package/dist/constants/index.js.map +1 -0
  61. package/dist/cookies-ZS_QYOR7.d.ts +8 -0
  62. package/dist/dateRangePickerTranslations-B99F2WQA.d.ts +9 -0
  63. package/dist/errors/index.d.ts +48 -0
  64. package/dist/errors/index.js +3 -0
  65. package/dist/errors/index.js.map +1 -0
  66. package/dist/forms-VpLvEFob.d.ts +18 -0
  67. package/dist/hooks/index.d.ts +18 -0
  68. package/dist/hooks/index.js +4 -0
  69. package/dist/hooks/index.js.map +1 -0
  70. package/dist/index.d.ts +42 -0
  71. package/dist/index.js +19 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/lib/index.d.ts +49 -0
  74. package/dist/lib/index.js +7 -0
  75. package/dist/lib/index.js.map +1 -0
  76. package/dist/pagination-CFqoqiAG.d.ts +10 -0
  77. package/dist/radix-overlays-BlCr-uem.d.ts +10 -0
  78. package/dist/styles.css +9 -0
  79. package/dist/theme/marketing.css +750 -0
  80. package/dist/theme/tokens.css +115 -0
  81. package/dist/types/index.d.ts +2 -0
  82. package/dist/types/index.js +3 -0
  83. package/dist/types/index.js.map +1 -0
  84. package/dist/types-BuNHOJ1h.d.ts +58 -0
  85. package/dist/types-CN73TWSY.d.ts +51 -0
  86. package/dist/useAdminListPage-C4ZTTllP.d.ts +26 -0
  87. package/package.json +152 -0
@@ -0,0 +1,750 @@
1
+ /**
2
+ * Marketing blocks — namespaced utilities (`ds-mkt-*`).
3
+ * Importing `@yca-software/design-system/styles.css` enables these classes.
4
+ */
5
+ @keyframes ds-mkt-float {
6
+ 0%,
7
+ 100% {
8
+ transform: translateY(0);
9
+ }
10
+
11
+ 50% {
12
+ transform: translateY(-6px);
13
+ }
14
+ }
15
+
16
+ @keyframes ds-mkt-fade-up {
17
+ from {
18
+ opacity: 0;
19
+ transform: translateY(12px);
20
+ }
21
+
22
+ to {
23
+ opacity: 1;
24
+ transform: translateY(0);
25
+ }
26
+ }
27
+
28
+ @keyframes ds-mkt-gradient-shift {
29
+ 0% {
30
+ background-position: 0% 50%;
31
+ }
32
+
33
+ 100% {
34
+ background-position: 100% 50%;
35
+ }
36
+ }
37
+
38
+ @keyframes ds-mkt-aurora-drift {
39
+ 0% {
40
+ transform: translate(-48%, -42%) scale(1) rotate(0deg);
41
+ opacity: 0.55;
42
+ }
43
+
44
+ 33% {
45
+ transform: translate(-42%, -48%) scale(1.12) rotate(8deg);
46
+ opacity: 0.8;
47
+ }
48
+
49
+ 66% {
50
+ transform: translate(-52%, -38%) scale(1.05) rotate(-6deg);
51
+ opacity: 0.65;
52
+ }
53
+
54
+ 100% {
55
+ transform: translate(-48%, -42%) scale(1) rotate(0deg);
56
+ opacity: 0.55;
57
+ }
58
+ }
59
+
60
+ @keyframes ds-mkt-aurora-drift-slow {
61
+ 0% {
62
+ transform: translate(20%, 10%) scale(1.1);
63
+ opacity: 0.35;
64
+ }
65
+
66
+ 50% {
67
+ transform: translate(-15%, 25%) scale(1.2);
68
+ opacity: 0.55;
69
+ }
70
+
71
+ 100% {
72
+ transform: translate(20%, 10%) scale(1.1);
73
+ opacity: 0.35;
74
+ }
75
+ }
76
+
77
+ @keyframes ds-mkt-grid-pan {
78
+ 0% {
79
+ background-position:
80
+ 0 0,
81
+ 0 0;
82
+ }
83
+
84
+ 100% {
85
+ background-position:
86
+ 56px 56px,
87
+ 56px 56px;
88
+ }
89
+ }
90
+
91
+ @keyframes ds-mkt-split-sheen {
92
+ 0% {
93
+ transform: translateX(-120%) skewX(-12deg);
94
+ opacity: 0;
95
+ }
96
+
97
+ 15% {
98
+ opacity: 0.4;
99
+ }
100
+
101
+ 50% {
102
+ transform: translateX(120%) skewX(-12deg);
103
+ opacity: 0.25;
104
+ }
105
+
106
+ 100% {
107
+ transform: translateX(120%) skewX(-12deg);
108
+ opacity: 0;
109
+ }
110
+ }
111
+
112
+ @keyframes ds-mkt-cta-shimmer {
113
+ 0%,
114
+ 100% {
115
+ background-position: 0% 40%;
116
+ }
117
+
118
+ 50% {
119
+ background-position: 100% 60%;
120
+ }
121
+ }
122
+
123
+ .ds-mkt-gradient-bg {
124
+ background-color: var(--background);
125
+ background-image:
126
+ radial-gradient(
127
+ ellipse 85% 55% at 50% -15%,
128
+ color-mix(in oklch, var(--primary) 22%, transparent),
129
+ transparent
130
+ ),
131
+ radial-gradient(
132
+ ellipse 55% 45% at 100% 15%,
133
+ color-mix(in oklch, var(--ring) 14%, transparent),
134
+ transparent
135
+ );
136
+ }
137
+
138
+ .ds-mkt-media-float {
139
+ animation: ds-mkt-float 5.5s ease-in-out infinite;
140
+ }
141
+
142
+ .ds-mkt-fade-up {
143
+ animation: ds-mkt-fade-up 0.85s ease-out both;
144
+ }
145
+
146
+ .ds-mkt-stat-pop {
147
+ animation: ds-mkt-fade-up 0.65s ease-out both;
148
+ }
149
+
150
+ .ds-mkt-cta-gradient {
151
+ background-image: linear-gradient(
152
+ 125deg,
153
+ color-mix(in oklch, var(--primary) 18%, var(--background)),
154
+ color-mix(in oklch, var(--accent) 35%, var(--background)),
155
+ color-mix(in oklch, var(--primary) 14%, var(--background))
156
+ );
157
+ background-size: 200% 200%;
158
+ animation: ds-mkt-gradient-shift 14s ease infinite;
159
+ }
160
+
161
+ /** CTA band: soft ambient layer + optional aurora (use with `.ds-mkt-cta-panel` inside) */
162
+ .ds-mkt-cta-shell {
163
+ position: relative;
164
+ isolation: isolate;
165
+ overflow: hidden;
166
+ background-color: var(--background);
167
+ }
168
+
169
+ .ds-mkt-cta-shell::before {
170
+ content: "";
171
+ position: absolute;
172
+ inset: 0;
173
+ z-index: 0;
174
+ pointer-events: none;
175
+ background:
176
+ radial-gradient(
177
+ ellipse 70% 55% at 15% 20%,
178
+ color-mix(in oklch, var(--primary) 16%, transparent),
179
+ transparent 55%
180
+ ),
181
+ radial-gradient(
182
+ ellipse 60% 50% at 92% 75%,
183
+ color-mix(in oklch, var(--accent) 14%, transparent),
184
+ transparent 52%
185
+ ),
186
+ linear-gradient(
187
+ 165deg,
188
+ color-mix(in oklch, var(--muted) 25%, var(--background)) 0%,
189
+ var(--background) 55%,
190
+ color-mix(in oklch, var(--primary) 6%, var(--background)) 100%
191
+ );
192
+ }
193
+
194
+ .ds-mkt-cta-shell::after {
195
+ content: "";
196
+ position: absolute;
197
+ left: 50%;
198
+ top: 35%;
199
+ width: min(100%, 720px);
200
+ height: min(60vh, 420px);
201
+ translate: -50% -50%;
202
+ z-index: 0;
203
+ pointer-events: none;
204
+ background: radial-gradient(
205
+ circle closest-side,
206
+ color-mix(in oklch, var(--primary) 28%, transparent),
207
+ transparent 72%
208
+ );
209
+ filter: blur(56px);
210
+ opacity: 0.55;
211
+ animation: ds-mkt-cta-aurora 18s ease-in-out infinite;
212
+ }
213
+
214
+ @keyframes ds-mkt-cta-aurora {
215
+ 0%,
216
+ 100% {
217
+ opacity: 0.45;
218
+ transform: translate(-50%, -48%) scale(1);
219
+ }
220
+
221
+ 50% {
222
+ opacity: 0.65;
223
+ transform: translate(-50%, -52%) scale(1.08);
224
+ }
225
+ }
226
+
227
+ /** Frosted card sitting on the CTA band */
228
+ .ds-mkt-cta-panel {
229
+ position: relative;
230
+ z-index: 1;
231
+ border-radius: calc(var(--radius) + 14px);
232
+ border: 1px solid color-mix(in oklch, var(--border) 55%, transparent);
233
+ background: color-mix(in oklch, var(--card) 78%, transparent);
234
+ backdrop-filter: blur(18px);
235
+ -webkit-backdrop-filter: blur(18px);
236
+ box-shadow:
237
+ 0 28px 64px -28px color-mix(in oklch, var(--foreground) 22%, transparent),
238
+ 0 0 0 1px color-mix(in oklch, var(--foreground) 6%, transparent) inset,
239
+ 0 1px 0 color-mix(in oklch, var(--primary-foreground) 12%, transparent) inset;
240
+ }
241
+
242
+ /** Solid variant band (no gradient shell animation) */
243
+ .ds-mkt-cta-solid-shell {
244
+ position: relative;
245
+ isolation: isolate;
246
+ overflow: hidden;
247
+ background: linear-gradient(
248
+ 180deg,
249
+ color-mix(in oklch, var(--primary) 100%, transparent) 0%,
250
+ color-mix(in oklch, var(--primary) 88%, var(--foreground)) 100%
251
+ );
252
+ }
253
+
254
+ .ds-mkt-cta-solid-shell::before {
255
+ content: "";
256
+ position: absolute;
257
+ inset: 0;
258
+ z-index: 0;
259
+ pointer-events: none;
260
+ opacity: 0.35;
261
+ background: radial-gradient(
262
+ ellipse 80% 60% at 50% 0%,
263
+ color-mix(in oklch, var(--primary-foreground) 25%, transparent),
264
+ transparent 55%
265
+ );
266
+ }
267
+
268
+ .ds-mkt-cta-solid-panel {
269
+ position: relative;
270
+ z-index: 1;
271
+ border-radius: calc(var(--radius) + 14px);
272
+ border: 1px solid color-mix(in oklch, var(--primary-foreground) 18%, transparent);
273
+ background: color-mix(in oklch, var(--primary) 22%, transparent);
274
+ backdrop-filter: blur(12px);
275
+ -webkit-backdrop-filter: blur(12px);
276
+ box-shadow:
277
+ 0 20px 50px -20px color-mix(in oklch, var(--foreground) 35%, transparent),
278
+ inset 0 1px 0 color-mix(in oklch, var(--primary-foreground) 15%, transparent);
279
+ }
280
+
281
+ /** Bento tile: accent rail + depth (prefer over stacking generic elevated + bento-cell) */
282
+ .ds-mkt-bento-tile {
283
+ position: relative;
284
+ overflow: hidden;
285
+ border-radius: calc(var(--radius) + 10px);
286
+ border: 1px solid color-mix(in oklch, var(--border) 48%, transparent);
287
+ background: linear-gradient(
288
+ 168deg,
289
+ color-mix(in oklch, var(--card) 100%, transparent) 0%,
290
+ color-mix(in oklch, var(--muted) 38%, var(--card)) 100%
291
+ );
292
+ box-shadow:
293
+ 0 1px 0 color-mix(in oklch, var(--foreground) 5%, transparent) inset,
294
+ 0 18px 44px -22px color-mix(in oklch, var(--foreground) 18%, transparent),
295
+ 0 0 0 1px color-mix(in oklch, var(--border) 40%, transparent);
296
+ transition:
297
+ transform 0.28s ease,
298
+ box-shadow 0.28s ease,
299
+ border-color 0.28s ease;
300
+ }
301
+
302
+ .ds-mkt-bento-tile::before {
303
+ content: "";
304
+ position: absolute;
305
+ left: 0;
306
+ right: 0;
307
+ top: 0;
308
+ height: 3px;
309
+ border-radius: 2px 2px 0 0;
310
+ background: linear-gradient(
311
+ 90deg,
312
+ color-mix(in oklch, var(--primary) 75%, transparent),
313
+ color-mix(in oklch, var(--ring) 65%, transparent) 45%,
314
+ color-mix(in oklch, var(--accent) 60%, transparent)
315
+ );
316
+ opacity: 0.9;
317
+ }
318
+
319
+ .ds-mkt-bento-tile:hover {
320
+ transform: translateY(-5px);
321
+ border-color: color-mix(in oklch, var(--primary) 28%, var(--border));
322
+ box-shadow:
323
+ 0 1px 0 color-mix(in oklch, var(--foreground) 6%, transparent) inset,
324
+ 0 28px 56px -20px color-mix(in oklch, var(--primary) 22%, transparent),
325
+ 0 0 0 1px color-mix(in oklch, var(--primary) 18%, transparent);
326
+ }
327
+
328
+ .ds-mkt-bento-icon-wrap {
329
+ display: flex;
330
+ height: 2.75rem;
331
+ width: 2.75rem;
332
+ align-items: center;
333
+ justify-content: center;
334
+ border-radius: calc(var(--radius) + 4px);
335
+ background: linear-gradient(
336
+ 145deg,
337
+ color-mix(in oklch, var(--primary) 22%, transparent),
338
+ color-mix(in oklch, var(--muted) 50%, transparent) 100%
339
+ );
340
+ color: var(--primary);
341
+ box-shadow:
342
+ 0 1px 0 color-mix(in oklch, var(--primary-foreground) 20%, transparent) inset,
343
+ 0 0 0 1px color-mix(in oklch, var(--primary) 15%, transparent);
344
+ }
345
+
346
+ .ds-mkt-video-glow {
347
+ box-shadow:
348
+ 0 24px 48px -18px color-mix(in oklch, var(--primary) 28%, transparent),
349
+ 0 0 0 1px color-mix(in oklch, var(--border) 80%, transparent);
350
+ }
351
+
352
+ /** Layered card / panel — gradient fill, soft inner highlight, outer shadow + hairline ring */
353
+ .ds-mkt-surface-elevated {
354
+ border-radius: calc(var(--radius) + 6px);
355
+ background: linear-gradient(
356
+ 155deg,
357
+ color-mix(in oklch, var(--card) 100%, transparent) 0%,
358
+ color-mix(in oklch, var(--muted) 45%, var(--card)) 100%
359
+ );
360
+ box-shadow:
361
+ 0 1px 0 color-mix(in oklch, var(--foreground) 6%, transparent) inset,
362
+ 0 22px 48px -28px color-mix(in oklch, var(--foreground) 28%, transparent),
363
+ 0 0 0 1px color-mix(in oklch, var(--border) 55%, transparent);
364
+ }
365
+
366
+ .ds-mkt-surface-elevated:hover {
367
+ box-shadow:
368
+ 0 1px 0 color-mix(in oklch, var(--foreground) 7%, transparent) inset,
369
+ 0 28px 56px -26px color-mix(in oklch, var(--primary) 22%, transparent),
370
+ 0 0 0 1px color-mix(in oklch, var(--primary) 25%, transparent);
371
+ }
372
+
373
+ /** Frosted panel for quotes, overlays */
374
+ .ds-mkt-glass-panel {
375
+ border-radius: calc(var(--radius) + 10px);
376
+ background: color-mix(in oklch, var(--card) 82%, transparent);
377
+ backdrop-filter: blur(14px);
378
+ -webkit-backdrop-filter: blur(14px);
379
+ border: 1px solid color-mix(in oklch, var(--border) 65%, transparent);
380
+ box-shadow:
381
+ 0 4px 28px -6px color-mix(in oklch, var(--foreground) 14%, transparent),
382
+ 0 0 0 1px color-mix(in oklch, var(--foreground) 4%, transparent) inset;
383
+ }
384
+
385
+ /** Ambient mesh + animated aurora + subtle grid (centered heroes) */
386
+ .ds-mkt-hero-mesh {
387
+ position: relative;
388
+ isolation: isolate;
389
+ background-color: var(--background);
390
+ background-image:
391
+ linear-gradient(color-mix(in oklch, var(--foreground) 3.2%, transparent) 1px, transparent 1px),
392
+ linear-gradient(
393
+ 90deg,
394
+ color-mix(in oklch, var(--foreground) 3.2%, transparent) 1px,
395
+ transparent 1px
396
+ );
397
+ background-size: 56px 56px;
398
+ animation: ds-mkt-grid-pan 90s linear infinite;
399
+ }
400
+
401
+ .ds-mkt-hero-mesh::before {
402
+ content: "";
403
+ position: absolute;
404
+ inset: 0;
405
+ z-index: 0;
406
+ pointer-events: none;
407
+ background:
408
+ radial-gradient(
409
+ ellipse 90% 65% at 50% -25%,
410
+ color-mix(in oklch, var(--primary) 18%, transparent),
411
+ transparent 58%
412
+ ),
413
+ radial-gradient(
414
+ ellipse 55% 45% at 100% 10%,
415
+ color-mix(in oklch, var(--ring) 14%, transparent),
416
+ transparent 52%
417
+ ),
418
+ radial-gradient(
419
+ ellipse 45% 35% at 0% 85%,
420
+ color-mix(in oklch, var(--accent) 20%, transparent),
421
+ transparent 48%
422
+ );
423
+ }
424
+
425
+ /** Soft animated color blob (adds depth behind headline) */
426
+ .ds-mkt-hero-mesh::after {
427
+ content: "";
428
+ position: absolute;
429
+ left: 50%;
430
+ top: 38%;
431
+ width: min(100vw, 720px);
432
+ height: min(100vw, 720px);
433
+ translate: -50% -50%;
434
+ z-index: 0;
435
+ pointer-events: none;
436
+ background: radial-gradient(
437
+ circle closest-side,
438
+ color-mix(in oklch, var(--primary) 42%, transparent),
439
+ color-mix(in oklch, var(--ring) 22%, transparent) 45%,
440
+ transparent 70%
441
+ );
442
+ filter: blur(56px);
443
+ opacity: 0.75;
444
+ animation: ds-mkt-aurora-drift 22s ease-in-out infinite;
445
+ will-change: transform;
446
+ }
447
+
448
+ .ds-mkt-hero-mesh > * {
449
+ position: relative;
450
+ z-index: 1;
451
+ }
452
+
453
+ /** Split hero: extra animated layers (orbs + occasional light sheen) */
454
+ .ds-mkt-hero-split-stage {
455
+ position: relative;
456
+ isolation: isolate;
457
+ }
458
+
459
+ .ds-mkt-hero-split-stage::before {
460
+ content: "";
461
+ position: absolute;
462
+ inset: 0;
463
+ z-index: 0;
464
+ pointer-events: none;
465
+ background:
466
+ radial-gradient(
467
+ ellipse 70% 50% at 15% 20%,
468
+ color-mix(in oklch, var(--primary) 14%, transparent),
469
+ transparent 55%
470
+ ),
471
+ radial-gradient(
472
+ ellipse 60% 45% at 95% 75%,
473
+ color-mix(in oklch, var(--accent) 16%, transparent),
474
+ transparent 50%
475
+ );
476
+ animation: ds-mkt-aurora-drift-slow 28s ease-in-out infinite;
477
+ }
478
+
479
+ .ds-mkt-hero-split-stage::after {
480
+ content: "";
481
+ position: absolute;
482
+ inset: 0;
483
+ z-index: 0;
484
+ pointer-events: none;
485
+ background: linear-gradient(
486
+ 105deg,
487
+ transparent 40%,
488
+ color-mix(in oklch, var(--primary-foreground) 8%, transparent) 50%,
489
+ transparent 60%
490
+ );
491
+ animation: ds-mkt-split-sheen 11s ease-in-out infinite;
492
+ mix-blend-mode: overlay;
493
+ }
494
+
495
+ .ds-mkt-hero-split-stage .ds-mkt-hero-split-content {
496
+ position: relative;
497
+ z-index: 1;
498
+ }
499
+
500
+ /** Section backgrounds */
501
+ .ds-mkt-section-soft {
502
+ background:
503
+ linear-gradient(180deg, color-mix(in oklch, var(--muted) 35%, transparent) 0%, transparent 40%),
504
+ var(--background);
505
+ }
506
+
507
+ .ds-mkt-section-spotlight {
508
+ background: radial-gradient(
509
+ ellipse 80% 55% at 50% 0%,
510
+ color-mix(in oklch, var(--primary) 12%, transparent),
511
+ transparent 65%
512
+ );
513
+ }
514
+
515
+ /** Logo strip container */
516
+ .ds-mkt-logo-rail {
517
+ border-radius: calc(var(--radius) + 8px);
518
+ background: linear-gradient(
519
+ 180deg,
520
+ color-mix(in oklch, var(--card) 90%, transparent),
521
+ color-mix(in oklch, var(--muted) 25%, transparent)
522
+ );
523
+ box-shadow:
524
+ 0 0 0 1px color-mix(in oklch, var(--border) 50%, transparent),
525
+ 0 16px 40px -20px color-mix(in oklch, var(--foreground) 12%, transparent);
526
+ }
527
+
528
+ /** Image / media frame with chromatic edge */
529
+ .ds-mkt-media-frame {
530
+ padding: 3px;
531
+ border-radius: calc(var(--radius) + 10px);
532
+ background: linear-gradient(
533
+ 135deg,
534
+ color-mix(in oklch, var(--primary) 35%, transparent),
535
+ color-mix(in oklch, var(--ring) 25%, transparent),
536
+ color-mix(in oklch, var(--accent) 30%, transparent)
537
+ );
538
+ box-shadow:
539
+ 0 20px 50px -22px color-mix(in oklch, var(--primary) 35%, transparent),
540
+ 0 0 0 1px color-mix(in oklch, var(--border) 40%, transparent);
541
+ }
542
+
543
+ .ds-mkt-media-frame-inner {
544
+ border-radius: calc(var(--radius) + 7px);
545
+ overflow: hidden;
546
+ background: var(--card);
547
+ }
548
+
549
+ /** Footer depth */
550
+ .ds-mkt-footer-depth {
551
+ background: linear-gradient(
552
+ 180deg,
553
+ color-mix(in oklch, var(--muted) 40%, var(--background)) 0%,
554
+ color-mix(in oklch, var(--background) 100%, transparent) 32%
555
+ );
556
+ box-shadow: 0 -1px 0 color-mix(in oklch, var(--border) 70%, transparent);
557
+ }
558
+
559
+ /** Stat value — gradient text (use with bg-clip-text utilities in TSX) */
560
+ .ds-mkt-stat-value {
561
+ background: linear-gradient(
562
+ 135deg,
563
+ var(--foreground) 0%,
564
+ color-mix(in oklch, var(--foreground) 85%, var(--primary)) 55%,
565
+ var(--primary) 100%
566
+ );
567
+ -webkit-background-clip: text;
568
+ background-clip: text;
569
+ color: transparent;
570
+ }
571
+
572
+ @media (prefers-reduced-motion: reduce) {
573
+ .ds-mkt-media-float,
574
+ .ds-mkt-fade-up,
575
+ .ds-mkt-stat-pop,
576
+ .ds-mkt-cta-gradient {
577
+ animation: none !important;
578
+ }
579
+
580
+ .ds-mkt-media-float {
581
+ transform: none;
582
+ }
583
+
584
+ .ds-mkt-surface-elevated:hover {
585
+ transform: none !important;
586
+ box-shadow:
587
+ 0 1px 0 color-mix(in oklch, var(--foreground) 6%, transparent) inset,
588
+ 0 22px 48px -28px color-mix(in oklch, var(--foreground) 28%, transparent),
589
+ 0 0 0 1px color-mix(in oklch, var(--border) 55%, transparent);
590
+ }
591
+
592
+ .ds-mkt-stat-value {
593
+ background: none;
594
+ -webkit-background-clip: unset;
595
+ background-clip: unset;
596
+ color: var(--foreground);
597
+ }
598
+
599
+ .ds-mkt-hero-mesh {
600
+ animation: none;
601
+ }
602
+
603
+ .ds-mkt-hero-mesh::after {
604
+ animation: none;
605
+ opacity: 0.45;
606
+ }
607
+
608
+ .ds-mkt-hero-split-stage::before,
609
+ .ds-mkt-hero-split-stage::after {
610
+ animation: none;
611
+ }
612
+
613
+ .ds-mkt-hero-split-stage::after {
614
+ opacity: 0;
615
+ }
616
+
617
+ .ds-mkt-hero-cta-primary,
618
+ .ds-mkt-hero-cta-primary a {
619
+ animation: none !important;
620
+ }
621
+
622
+ .ds-mkt-hero-cta-primary:hover,
623
+ .ds-mkt-hero-cta-primary a:hover,
624
+ .ds-mkt-hero-cta-secondary:hover,
625
+ .ds-mkt-hero-cta-secondary a:hover {
626
+ transform: none;
627
+ }
628
+
629
+ .ds-mkt-cta-shell::after {
630
+ animation: none;
631
+ opacity: 0.42;
632
+ }
633
+
634
+ .ds-mkt-bento-tile:hover {
635
+ transform: none;
636
+ box-shadow:
637
+ 0 1px 0 color-mix(in oklch, var(--foreground) 5%, transparent) inset,
638
+ 0 18px 44px -22px color-mix(in oklch, var(--foreground) 18%, transparent),
639
+ 0 0 0 1px color-mix(in oklch, var(--border) 40%, transparent);
640
+ }
641
+ }
642
+
643
+ /**
644
+ * Hero CTAs — animated gradient fill (primary) + gradient border glass (secondary).
645
+ * Used by `Hero` and `HeroSplit` for above-the-fold actions.
646
+ */
647
+ .ds-mkt-hero-cta-primary,
648
+ .ds-mkt-hero-cta-primary a {
649
+ position: relative;
650
+ overflow: hidden;
651
+ border-radius: calc(var(--radius) + 4px) !important;
652
+ border: none !important;
653
+ background: linear-gradient(
654
+ 128deg,
655
+ color-mix(in oklch, var(--primary) 100%, transparent) 0%,
656
+ color-mix(in oklch, var(--ring) 72%, var(--primary)) 38%,
657
+ color-mix(in oklch, var(--accent) 68%, var(--primary)) 100%
658
+ ) !important;
659
+ background-size: 220% 220% !important;
660
+ animation: ds-mkt-cta-shimmer 10s ease-in-out infinite !important;
661
+ color: var(--primary-foreground) !important;
662
+ box-shadow:
663
+ 0 6px 28px -6px color-mix(in oklch, var(--primary) 55%, transparent),
664
+ 0 2px 10px -4px color-mix(in oklch, var(--foreground) 18%, transparent),
665
+ inset 0 1px 0 color-mix(in oklch, var(--primary-foreground) 38%, transparent),
666
+ inset 0 -1px 0 color-mix(in oklch, var(--foreground) 12%, transparent) !important;
667
+ transition:
668
+ transform 0.22s ease,
669
+ box-shadow 0.22s ease;
670
+ }
671
+
672
+ .ds-mkt-hero-cta-primary:hover,
673
+ .ds-mkt-hero-cta-primary a:hover {
674
+ transform: translateY(-2px);
675
+ box-shadow:
676
+ 0 14px 40px -10px color-mix(in oklch, var(--primary) 58%, transparent),
677
+ 0 6px 16px -6px color-mix(in oklch, var(--foreground) 22%, transparent),
678
+ inset 0 1px 0 color-mix(in oklch, var(--primary-foreground) 48%, transparent) !important;
679
+ }
680
+
681
+ .ds-mkt-hero-cta-secondary,
682
+ .ds-mkt-hero-cta-secondary a {
683
+ border-radius: calc(var(--radius) + 4px) !important;
684
+ border: 2px solid transparent !important;
685
+ background:
686
+ linear-gradient(
687
+ color-mix(in oklch, var(--background) 88%, var(--card)),
688
+ color-mix(in oklch, var(--muted) 36%, var(--background))
689
+ )
690
+ padding-box,
691
+ linear-gradient(
692
+ 135deg,
693
+ color-mix(in oklch, var(--primary) 88%, transparent),
694
+ color-mix(in oklch, var(--ring) 72%, transparent),
695
+ color-mix(in oklch, var(--accent) 78%, transparent)
696
+ )
697
+ border-box !important;
698
+ color: var(--foreground) !important;
699
+ box-shadow:
700
+ 0 4px 26px -10px color-mix(in oklch, var(--primary) 38%, transparent),
701
+ inset 0 1px 0 color-mix(in oklch, var(--foreground) 9%, transparent) !important;
702
+ transition:
703
+ transform 0.22s ease,
704
+ box-shadow 0.22s ease,
705
+ filter 0.22s ease;
706
+ }
707
+
708
+ .ds-mkt-hero-cta-secondary:hover,
709
+ .ds-mkt-hero-cta-secondary a:hover {
710
+ transform: translateY(-2px);
711
+ filter: brightness(1.04);
712
+ box-shadow:
713
+ 0 12px 36px -14px color-mix(in oklch, var(--primary) 48%, transparent),
714
+ inset 0 1px 0 color-mix(in oklch, var(--foreground) 14%, transparent) !important;
715
+ }
716
+
717
+ /**
718
+ * Marketing CTAs — token-based depth (shadow + inset highlight) for primary / ghost-secondary.
719
+ * Apply via `className` on `<Button asChild>` (classes merge onto the inner `<a>`).
720
+ */
721
+ .ds-mkt-btn-primary,
722
+ .ds-mkt-btn-primary a {
723
+ background-color: var(--primary) !important;
724
+ color: var(--primary-foreground) !important;
725
+ border-color: transparent !important;
726
+ box-shadow:
727
+ 0 4px 20px -4px color-mix(in oklch, var(--primary) 55%, transparent),
728
+ inset 0 1px 0 color-mix(in oklch, var(--primary-foreground) 22%, transparent);
729
+ }
730
+
731
+ .ds-mkt-btn-primary:hover,
732
+ .ds-mkt-btn-primary a:hover {
733
+ background-color: color-mix(in oklch, var(--primary) 88%, var(--foreground)) !important;
734
+ color: var(--primary-foreground) !important;
735
+ }
736
+
737
+ .ds-mkt-btn-secondary,
738
+ .ds-mkt-btn-secondary a {
739
+ background-color: color-mix(in oklch, var(--background) 70%, var(--card)) !important;
740
+ color: var(--foreground) !important;
741
+ border: 1px solid color-mix(in oklch, var(--border) 75%, var(--foreground)) !important;
742
+ box-shadow:
743
+ 0 1px 2px color-mix(in oklch, var(--foreground) 8%, transparent),
744
+ inset 0 1px 0 color-mix(in oklch, var(--foreground) 6%, transparent);
745
+ }
746
+
747
+ .ds-mkt-btn-secondary:hover,
748
+ .ds-mkt-btn-secondary a:hover {
749
+ background-color: color-mix(in oklch, var(--muted) 50%, var(--card)) !important;
750
+ }