@salesmind-ai/design-system 0.7.0 → 1.2.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 (74) hide show
  1. package/dist/chunk-6WQKRQEE.cjs +33 -0
  2. package/dist/chunk-6WQKRQEE.cjs.map +1 -0
  3. package/dist/{chunk-R3ZECV5P.cjs → chunk-FVSL5YMB.cjs} +13 -34
  4. package/dist/chunk-FVSL5YMB.cjs.map +1 -0
  5. package/dist/{chunk-D2RHF2OE.cjs → chunk-H5BOCR5Z.cjs} +10 -6
  6. package/dist/chunk-H5BOCR5Z.cjs.map +1 -0
  7. package/dist/chunk-HTLWFOLC.js +26 -0
  8. package/dist/chunk-HTLWFOLC.js.map +1 -0
  9. package/dist/{chunk-KXVFFEGD.js → chunk-MLINFRC3.js} +2 -19
  10. package/dist/chunk-MLINFRC3.js.map +1 -0
  11. package/dist/{chunk-DMRQPGQA.js → chunk-NB3BDIQO.js} +10 -6
  12. package/dist/chunk-NB3BDIQO.js.map +1 -0
  13. package/dist/{chunk-JPUJWI7F.cjs → chunk-QXUA5PQ3.cjs} +1 -19
  14. package/dist/chunk-QXUA5PQ3.cjs.map +1 -0
  15. package/dist/{chunk-HHQ6J7B6.js → chunk-REEHJV7M.js} +145 -14
  16. package/dist/chunk-REEHJV7M.js.map +1 -0
  17. package/dist/{chunk-LQB7QLD3.js → chunk-RY257SWH.js} +207 -3
  18. package/dist/chunk-RY257SWH.js.map +1 -0
  19. package/dist/{chunk-WE4QIIVN.cjs → chunk-UCWMJD4Y.cjs} +151 -18
  20. package/dist/chunk-UCWMJD4Y.cjs.map +1 -0
  21. package/dist/{chunk-27Y5ESMM.js → chunk-VFO2MUPI.js} +13 -33
  22. package/dist/chunk-VFO2MUPI.js.map +1 -0
  23. package/dist/{chunk-UGKYP6F3.cjs → chunk-YL4FGGHF.cjs} +211 -2
  24. package/dist/chunk-YL4FGGHF.cjs.map +1 -0
  25. package/dist/core/index.cjs +13 -12
  26. package/dist/core/index.js +2 -1
  27. package/dist/{index-BJ8rBqrO.d.cts → index-I4Xi04oE.d.cts} +47 -3
  28. package/dist/{index-BxMqCbqE.d.ts → index-r__EEywy.d.ts} +47 -3
  29. package/dist/index.cjs +81 -56
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.css +658 -109
  32. package/dist/index.css.map +1 -1
  33. package/dist/index.d.cts +3 -3
  34. package/dist/index.d.ts +3 -3
  35. package/dist/index.js +6 -5
  36. package/dist/index.js.map +1 -1
  37. package/dist/marketing/index.cjs +35 -26
  38. package/dist/marketing/index.css +242 -0
  39. package/dist/marketing/index.css.map +1 -1
  40. package/dist/marketing/index.d.cts +1 -1
  41. package/dist/marketing/index.d.ts +1 -1
  42. package/dist/marketing/index.js +3 -2
  43. package/dist/sections/index.css +1 -1
  44. package/dist/sections/index.css.map +1 -1
  45. package/dist/social-proof/index.cjs +26 -4
  46. package/dist/social-proof/index.css +521 -0
  47. package/dist/social-proof/index.css.map +1 -1
  48. package/dist/social-proof/index.d.cts +99 -27
  49. package/dist/social-proof/index.d.ts +99 -27
  50. package/dist/social-proof/index.js +3 -1
  51. package/dist/styles/styles.css +0 -109
  52. package/dist/theme/index.cjs +3 -7
  53. package/dist/theme/index.css +0 -108
  54. package/dist/theme/index.css.map +1 -1
  55. package/dist/theme/index.d.cts +1 -28
  56. package/dist/theme/index.d.ts +1 -28
  57. package/dist/theme/index.js +1 -1
  58. package/dist/web/index.cjs +7 -7
  59. package/dist/web/index.js +1 -1
  60. package/dist/web/server/index.cjs +7 -7
  61. package/dist/web/server/index.d.cts +0 -5
  62. package/dist/web/server/index.d.ts +0 -5
  63. package/dist/web/server/index.js +1 -1
  64. package/package.json +1 -1
  65. package/dist/chunk-27Y5ESMM.js.map +0 -1
  66. package/dist/chunk-D2RHF2OE.cjs.map +0 -1
  67. package/dist/chunk-DMRQPGQA.js.map +0 -1
  68. package/dist/chunk-HHQ6J7B6.js.map +0 -1
  69. package/dist/chunk-JPUJWI7F.cjs.map +0 -1
  70. package/dist/chunk-KXVFFEGD.js.map +0 -1
  71. package/dist/chunk-LQB7QLD3.js.map +0 -1
  72. package/dist/chunk-R3ZECV5P.cjs.map +0 -1
  73. package/dist/chunk-UGKYP6F3.cjs.map +0 -1
  74. package/dist/chunk-WE4QIIVN.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ThemeSelector/ThemeSelector.tsx","../src/components/ColorPicker/ColorPicker.tsx"],"names":["clsx","jsx","jsxs"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Sun, Moon } from 'lucide-react';\nimport clsx from 'clsx';\nimport { useAppearance, Theme } from '../../theme/AppearanceProvider';\nimport './ThemeSelector.css';\n\nexport interface ThemeSelectorProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = ({ className, style }) => {\n const { theme, setTheme } = useAppearance();\n\n const handleThemeChange = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n return (\n <div className={clsx('ds-theme-selector', className)} style={style} role=\"group\" aria-label=\"Theme Selector\">\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light' })}\n onClick={() => handleThemeChange('light')}\n aria-pressed={theme === 'light'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'light-contrast' })}\n onClick={() => handleThemeChange('light-contrast')}\n aria-pressed={theme === 'light-contrast'}\n >\n <Sun className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Light HC</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark' })}\n onClick={() => handleThemeChange('dark')}\n aria-pressed={theme === 'dark'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark</span>\n </button>\n\n <button\n type=\"button\"\n className={clsx('ds-theme-selector__btn', { 'ds-theme-selector__btn--active': theme === 'dark-contrast' })}\n onClick={() => handleThemeChange('dark-contrast')}\n aria-pressed={theme === 'dark-contrast'}\n >\n <Moon className=\"ds-theme-selector__icon\" />\n <span className=\"ds-theme-selector__label\">Dark HC</span>\n </button>\n </div>\n );\n};\n\nThemeSelector.displayName = 'ThemeSelector';\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useAppearance, Brand } from '../../theme/AppearanceProvider';\nimport './ColorPicker.css';\n\n/** Pre-configured brand presets shown as swatches. */\nconst BRAND_PRESETS: { value: Brand; label: string; color: string }[] = [\n { value: 'default', label: 'Warm Intelligence', color: '#f97316' },\n { value: 'salesmind', label: 'SalesMind', color: '#ff005a' },\n];\n\nexport interface ColorPickerProps {\n /** Additional CSS class name. */\n className?: string;\n /** Inline styles. */\n style?: React.CSSProperties;\n /**\n * Hide the custom color swatch and native color input.\n * When `true`, only the curated brand presets are shown.\n * Use this on production surfaces (e.g., marketing website footer)\n * where arbitrary custom colors would undermine brand consistency.\n * @default false\n */\n hideCustom?: boolean;\n}\n\n/**\n * Compact brand/accent color picker.\n * Renders preset brand swatches and an optional custom color input.\n * Consumes the `useAppearance()` context for state.\n */\nexport const ColorPicker = React.forwardRef<HTMLDivElement, ColorPickerProps>(\n ({ className, style, hideCustom = false }, ref) => {\n const { brand, setBrand, customColor, setCustomColor } = useAppearance();\n\n return (\n <div\n ref={ref}\n className={clsx('ds-color-picker', className)}\n style={style}\n role=\"group\"\n aria-label=\"Brand Color\"\n >\n {BRAND_PRESETS.map(({ value, label, color }) => (\n <button\n key={value}\n type=\"button\"\n className={clsx('ds-color-picker__swatch', {\n 'ds-color-picker__swatch--active': brand === value,\n })}\n onClick={() => setBrand(value)}\n aria-label={`Switch to ${label} color scheme`}\n aria-pressed={brand === value}\n title={label}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': color } as React.CSSProperties}\n />\n </button>\n ))}\n\n {/* Custom color — clicking the dot opens the native color picker */}\n {!hideCustom && (\n <label\n className={clsx('ds-color-picker__swatch', 'ds-color-picker__swatch--custom', {\n 'ds-color-picker__swatch--active': brand === 'custom',\n })}\n title={`Custom: ${customColor}`}\n >\n <span\n className=\"ds-color-picker__dot\"\n style={{ '--swatch-color': customColor } as React.CSSProperties}\n />\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => setCustomColor(e.target.value)}\n className=\"ds-color-picker__native-input\"\n aria-label=\"Pick a custom accent color\"\n />\n </label>\n )}\n </div>\n );\n },\n);\n\nColorPicker.displayName = 'ColorPicker';\n"]}
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var chunkQXUA5PQ3_cjs = require('./chunk-QXUA5PQ3.cjs');
4
+ var chunkLJADZITX_cjs = require('./chunk-LJADZITX.cjs');
3
5
  var react = require('react');
4
6
  var clsx = require('clsx');
5
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -9,7 +11,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
11
 
10
12
  var clsx__default = /*#__PURE__*/_interopDefault(clsx);
11
13
 
12
- // src/components/StarRating/StarRating.tsx
13
14
  var StarRating = react.forwardRef(
14
15
  ({
15
16
  value,
@@ -212,6 +213,209 @@ var PlatformBadge = react.forwardRef(
212
213
  }
213
214
  );
214
215
  PlatformBadge.displayName = "PlatformBadge";
216
+ var SocialProofCard = react.forwardRef(
217
+ ({
218
+ variant = "standard",
219
+ content,
220
+ author,
221
+ starRating,
222
+ platform,
223
+ badges,
224
+ href,
225
+ media,
226
+ metrics,
227
+ headline,
228
+ industry,
229
+ ctaText,
230
+ className,
231
+ ...props
232
+ }, ref) => {
233
+ return /* @__PURE__ */ jsxRuntime.jsxs(
234
+ "article",
235
+ {
236
+ ref,
237
+ className: clsx__default.default(
238
+ "ds-card",
239
+ variant === "compact" ? "ds-card--tier-1" : "ds-card--tier-2",
240
+ variant === "compact" ? "glass--tier-1" : "glass--tier-2",
241
+ "ds-social-proof-card",
242
+ `ds-social-proof-card--${variant}`,
243
+ href && "ds-social-proof-card--linked",
244
+ className
245
+ ),
246
+ ...props,
247
+ children: [
248
+ media?.src && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-card__media", children: /* @__PURE__ */ jsxRuntime.jsx(
249
+ "img",
250
+ {
251
+ src: media.src,
252
+ alt: media.alt ?? "",
253
+ className: "ds-social-proof-card__image",
254
+ loading: "lazy",
255
+ decoding: "async"
256
+ }
257
+ ) }),
258
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-card__body", children: [
259
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-card__meta", children: [
260
+ starRating !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(StarRating, { value: starRating, size: "sm" }),
261
+ platform && /* @__PURE__ */ jsxRuntime.jsx(PlatformBadge, { platform }),
262
+ industry && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__industry", children: industry })
263
+ ] }),
264
+ headline && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "ds-social-proof-card__headline", children: headline }),
265
+ /* @__PURE__ */ jsxRuntime.jsx("blockquote", { className: "ds-social-proof-card__quote", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: content }) }),
266
+ metrics && metrics.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-card__metrics", children: metrics.map((metric, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-card__metric", children: [
267
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__metric-value", children: metric.value }),
268
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__metric-label", children: metric.label })
269
+ ] }, index)) }),
270
+ badges && badges.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-card__badges", children: badges.map((badge, index) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__badge", children: badge }, index)) }),
271
+ /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "ds-social-proof-card__author", children: [
272
+ author.avatar && /* @__PURE__ */ jsxRuntime.jsx(
273
+ "img",
274
+ {
275
+ src: author.avatar,
276
+ alt: "",
277
+ className: "ds-social-proof-card__avatar",
278
+ loading: "lazy",
279
+ decoding: "async"
280
+ }
281
+ ),
282
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-card__author-copy", children: [
283
+ /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "ds-social-proof-card__name", children: author.name }),
284
+ (author.title || author.company) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__role", children: [author.title, author.company].filter(Boolean).join(" \xB7 ") })
285
+ ] })
286
+ ] }),
287
+ href && ctaText && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-card__cta", children: ctaText })
288
+ ] })
289
+ ]
290
+ }
291
+ );
292
+ }
293
+ );
294
+ SocialProofCard.displayName = "SocialProofCard";
295
+ var SocialProofCarousel = react.forwardRef(
296
+ ({ background = "transparent", className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
297
+ "div",
298
+ {
299
+ ref,
300
+ className: clsx__default.default(
301
+ "ds-social-proof-carousel",
302
+ `ds-social-proof-carousel--background-${background}`,
303
+ className
304
+ ),
305
+ ...props,
306
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-carousel__track", children })
307
+ }
308
+ )
309
+ );
310
+ SocialProofCarousel.displayName = "SocialProofCarousel";
311
+ var SocialProofFeatured = react.forwardRef(
312
+ ({
313
+ quote,
314
+ author,
315
+ featuredVariant = "standard",
316
+ starRating,
317
+ platform,
318
+ mediaSrc,
319
+ background = "transparent",
320
+ padding = "md",
321
+ className,
322
+ ...props
323
+ }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
324
+ chunkQXUA5PQ3_cjs.Card,
325
+ {
326
+ ref,
327
+ tier: featuredVariant === "spotlight" ? 3 : 2,
328
+ radius: "panel",
329
+ aurora: featuredVariant === "spotlight",
330
+ className: clsx__default.default(
331
+ "ds-social-proof-featured",
332
+ `ds-social-proof-featured--${featuredVariant}`,
333
+ `ds-social-proof-featured--background-${background}`,
334
+ `ds-social-proof-featured--padding-${padding}`,
335
+ className
336
+ ),
337
+ ...props,
338
+ children: [
339
+ mediaSrc && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-featured__media", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: mediaSrc, alt: "", className: "ds-social-proof-featured__image", loading: "lazy", decoding: "async" }) }),
340
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-featured__content", children: [
341
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-featured__meta", children: [
342
+ starRating !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(StarRating, { value: starRating, size: "md" }),
343
+ platform && /* @__PURE__ */ jsxRuntime.jsx(PlatformBadge, { platform })
344
+ ] }),
345
+ /* @__PURE__ */ jsxRuntime.jsx("blockquote", { className: "ds-social-proof-featured__quote", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: quote }) }),
346
+ /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "ds-social-proof-featured__author", children: [
347
+ author.avatar && /* @__PURE__ */ jsxRuntime.jsx(
348
+ "img",
349
+ {
350
+ src: author.avatar,
351
+ alt: "",
352
+ className: "ds-social-proof-featured__avatar",
353
+ loading: "lazy",
354
+ decoding: "async"
355
+ }
356
+ ),
357
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-featured__author-copy", children: [
358
+ /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "ds-social-proof-featured__name", children: author.name }),
359
+ (author.title || author.company) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-featured__role", children: [author.title, author.company].filter(Boolean).join(" \xB7 ") })
360
+ ] })
361
+ ] })
362
+ ] })
363
+ ]
364
+ }
365
+ )
366
+ );
367
+ SocialProofFeatured.displayName = "SocialProofFeatured";
368
+ var SocialProofGrid = react.forwardRef(
369
+ ({ columns = 3, staggered = false, background = "transparent", className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
370
+ "div",
371
+ {
372
+ ref,
373
+ className: clsx__default.default(
374
+ "ds-social-proof-grid",
375
+ `ds-social-proof-grid--columns-${columns}`,
376
+ `ds-social-proof-grid--background-${background}`,
377
+ staggered && "ds-social-proof-grid--staggered",
378
+ className
379
+ ),
380
+ ...props,
381
+ children
382
+ }
383
+ )
384
+ );
385
+ SocialProofGrid.displayName = "SocialProofGrid";
386
+ var SocialProofLogos = react.forwardRef(
387
+ ({ logos, title, variant = "grid", speed = "normal", background = "transparent", className, ...props }, ref) => {
388
+ const renderedLogos = logos.map((item) => {
389
+ const content = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ds-social-proof-logos__item-content", children: [
390
+ item.src ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.src, alt: item.alt, className: "ds-social-proof-logos__image", loading: "lazy", decoding: "async" }) : item.logo,
391
+ item.badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-logos__badge", children: item.badge })
392
+ ] });
393
+ return item.href ? /* @__PURE__ */ jsxRuntime.jsx(chunkLJADZITX_cjs.OutboundLink, { href: item.href, context: "social-proof-logo", className: "ds-social-proof-logos__item", children: content }, item.id) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ds-social-proof-logos__item", children: content }, item.id);
394
+ });
395
+ return /* @__PURE__ */ jsxRuntime.jsxs(
396
+ "div",
397
+ {
398
+ ref,
399
+ className: clsx__default.default(
400
+ "ds-social-proof-logos",
401
+ `ds-social-proof-logos--${variant}`,
402
+ `ds-social-proof-logos--speed-${speed}`,
403
+ `ds-social-proof-logos--background-${background}`,
404
+ className
405
+ ),
406
+ ...props,
407
+ children: [
408
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "ds-social-proof-logos__title", children: title }),
409
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ds-social-proof-logos__viewport", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ds-social-proof-logos__track", children: [
410
+ renderedLogos,
411
+ variant === "marquee" && renderedLogos
412
+ ] }) })
413
+ ]
414
+ }
415
+ );
416
+ }
417
+ );
418
+ SocialProofLogos.displayName = "SocialProofLogos";
215
419
  function getEmbedUrl(src) {
216
420
  const ytMatch = src.match(
217
421
  /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]+)/
@@ -290,7 +494,12 @@ var VideoLightbox = react.forwardRef(
290
494
  VideoLightbox.displayName = "VideoLightbox";
291
495
 
292
496
  exports.PlatformBadge = PlatformBadge;
497
+ exports.SocialProofCard = SocialProofCard;
498
+ exports.SocialProofCarousel = SocialProofCarousel;
499
+ exports.SocialProofFeatured = SocialProofFeatured;
500
+ exports.SocialProofGrid = SocialProofGrid;
501
+ exports.SocialProofLogos = SocialProofLogos;
293
502
  exports.StarRating = StarRating;
294
503
  exports.VideoLightbox = VideoLightbox;
295
504
  //# sourceMappingURL=out.js.map
296
- //# sourceMappingURL=chunk-UGKYP6F3.cjs.map
505
+ //# sourceMappingURL=chunk-YL4FGGHF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/StarRating/StarRating.tsx","../src/components/PlatformBadge/PlatformBadge.tsx","../src/components/SocialProofCard/SocialProofCard.tsx","../src/components/SocialProofCarousel/SocialProofCarousel.tsx","../src/components/SocialProofFeatured/SocialProofFeatured.tsx","../src/components/SocialProofGrid/SocialProofGrid.tsx","../src/components/SocialProofLogos/SocialProofLogos.tsx","../src/components/VideoLightbox/VideoLightbox.tsx"],"names":["forwardRef","clsx","jsx","jsxs","useState"],"mappings":"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","sourcesContent":["import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport './StarRating.css';\n\n/* ============================================================================\n STAR RATING\n ============================================================================\n Animated star display with half-star support, configurable sizes, and\n optional viewport-triggered fill animation. Replaces text-character\n star displays across all social proof surfaces.\n\n Strategic objective: Instant visual trust signal\n ============================================================================ */\n\nexport interface StarRatingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Rating value (0-5, supports decimals for half-stars) */\n value: number;\n /** Maximum number of stars */\n max?: number;\n /** Star size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Animate stars filling on viewport entry */\n animate?: boolean;\n /** Show numeric value next to stars */\n showValue?: boolean;\n /** Label shown after value (e.g., \"/ 5\") */\n valueLabel?: string;\n}\n\n/**\n * Star rating display with gold-fill, half-star support, and optional\n * entrance animation. Uses inline SVGs with clip-path for precise\n * partial fills.\n *\n * @example\n * ```tsx\n * <StarRating value={4.5} size=\"lg\" animate />\n * <StarRating value={5} size=\"sm\" showValue />\n * ```\n */\nexport const StarRating = forwardRef<HTMLDivElement, StarRatingProps>(\n (\n {\n value,\n max = 5,\n size = 'md',\n animate = false,\n showValue = false,\n valueLabel,\n className,\n ...props\n },\n ref,\n ) => {\n const [visible, setVisible] = useState(!animate);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!animate) return;\n\n // Respect reduced motion\n if (typeof window !== 'undefined') {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n if (mq.matches) {\n setVisible(true);\n return;\n }\n }\n\n const target = containerRef.current;\n if (!target) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n observer.disconnect();\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [animate]);\n\n const clampedValue = Math.min(Math.max(value, 0), max);\n\n const stars = Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1;\n const fillPercent =\n clampedValue >= starIndex\n ? 100\n : clampedValue > starIndex - 1\n ? (clampedValue - (starIndex - 1)) * 100\n : 0;\n\n return (\n <span\n key={i}\n className={clsx(\n 'ds-star-rating__star',\n visible && 'ds-star-rating__star--visible',\n )}\n style={{\n '--star-fill': `${fillPercent}%`,\n '--star-delay': animate ? `${i * 100}ms` : '0ms',\n } as React.CSSProperties}\n >\n {/* Background (empty) star */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-star-rating__svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n className=\"ds-star-rating__empty\"\n />\n </svg>\n {/* Foreground (filled) star with clip */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-star-rating__svg ds-star-rating__svg--filled\"\n aria-hidden=\"true\"\n style={{\n clipPath: `inset(0 ${100 - fillPercent}% 0 0)`,\n }}\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n className=\"ds-star-rating__filled\"\n />\n </svg>\n </span>\n );\n });\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-star-rating', `ds-star-rating--${size}`, className)}\n role=\"img\"\n aria-label={`${clampedValue} out of ${max} stars`}\n {...props}\n >\n <span className=\"ds-star-rating__stars\">{stars}</span>\n {showValue && (\n <span className=\"ds-star-rating__value\">\n {clampedValue.toLocaleString(undefined, {\n minimumFractionDigits: clampedValue % 1 !== 0 ? 1 : 0,\n maximumFractionDigits: 1,\n })}\n {valueLabel && (\n <span className=\"ds-star-rating__value-label\">{valueLabel}</span>\n )}\n </span>\n )}\n </div>\n );\n },\n);\n\nStarRating.displayName = 'StarRating';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { StarRating } from '../StarRating/StarRating';\nimport './PlatformBadge.css';\n\n/* ============================================================================\n PLATFORM BADGE\n ============================================================================\n Recognizable review platform icons (Trustpilot, G2, Google, Chrome Web\n Store) with optional rating display. Builds instant trust through visual\n brand recognition.\n\n Strategic objective: Third-party authority signal\n ============================================================================ */\n\nexport type Platform = 'trustpilot' | 'g2' | 'google' | 'chrome-web-store';\n\nexport interface PlatformBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Review platform */\n platform: Platform;\n /** Display mode */\n variant?: 'icon-only' | 'icon-label' | 'full';\n /** Platform rating (used in 'full' variant) */\n rating?: number;\n /** Number of reviews (used in 'full' variant) */\n count?: number;\n /** Size variant */\n size?: 'sm' | 'md';\n}\n\n/* --------------------------------------------------------------------------\n Platform SVG Icons — inline for zero-latency rendering\n -------------------------------------------------------------------------- */\n\nconst TrustpilotIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2l2.9 8.9H24l-7.35 5.34 2.81 8.64L12 19.56l-7.46 5.32 2.81-8.64L0 10.9h9.1L12 2z\" fill=\"#00B67A\" />\n </svg>\n);\n\nconst G2Icon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z\" fill=\"#FF492C\" />\n <text x=\"50%\" y=\"54%\" dominantBaseline=\"middle\" textAnchor=\"middle\" fill=\"white\" fontWeight=\"bold\" fontSize=\"11\" fontFamily=\"Arial, sans-serif\">G2</text>\n </svg>\n);\n\nconst GoogleIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\"/>\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\"/>\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 001 12c0 1.77.42 3.45 1.18 4.93l3.66-2.84z\" fill=\"#FBBC05\"/>\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst ChromeWebStoreIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#4285F4\" opacity=\"0.1\" stroke=\"#4285F4\" strokeWidth=\"1.5\"/>\n <path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0 8.5c-1.93 0-3.5-1.57-3.5-3.5S10.07 8.5 12 8.5s3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" fill=\"#4285F4\"/>\n <path d=\"M7.5 10.5L4 5.5\" stroke=\"#EA4335\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n <path d=\"M16.5 10.5L20 5.5\" stroke=\"#FBBC05\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n <path d=\"M12 17l-3.5 5\" stroke=\"#34A853\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n);\n\nconst PLATFORM_ICONS: Record<Platform, React.FC<{ size: number }>> = {\n trustpilot: TrustpilotIcon,\n g2: G2Icon,\n google: GoogleIcon,\n 'chrome-web-store': ChromeWebStoreIcon,\n};\n\nconst PLATFORM_LABELS: Record<Platform, string> = {\n trustpilot: 'Trustpilot',\n g2: 'G2',\n google: 'Google',\n 'chrome-web-store': 'Chrome Web Store',\n};\n\nconst PLATFORM_COLORS: Record<Platform, string> = {\n trustpilot: '#00B67A',\n g2: '#FF492C',\n google: '#4285F4',\n 'chrome-web-store': '#4285F4',\n};\n\n/**\n * Review platform badge with recognizable brand icon, optional label,\n * and optional rating display.\n *\n * @example\n * ```tsx\n * <PlatformBadge platform=\"trustpilot\" variant=\"icon-only\" />\n * <PlatformBadge platform=\"g2\" variant=\"icon-label\" />\n * <PlatformBadge platform=\"google\" variant=\"full\" rating={4.9} count={42} />\n * ```\n */\nexport const PlatformBadge = forwardRef<HTMLDivElement, PlatformBadgeProps>(\n (\n {\n platform,\n variant = 'icon-label',\n rating,\n count,\n size = 'sm',\n className,\n ...props\n },\n ref,\n ) => {\n const Icon = PLATFORM_ICONS[platform];\n const label = PLATFORM_LABELS[platform];\n const accentColor = PLATFORM_COLORS[platform];\n const iconSize = size === 'sm' ? 18 : 22;\n\n return (\n <div\n ref={ref}\n role=\"img\"\n className={clsx(\n 'ds-platform-badge',\n `ds-platform-badge--${variant}`,\n `ds-platform-badge--${size}`,\n className,\n )}\n style={{ '--platform-accent': accentColor } as React.CSSProperties}\n aria-label={\n variant === 'full' && rating\n ? `${label}: ${rating} stars${count ? ` from ${count} reviews` : ''}`\n : label\n }\n {...props}\n >\n <span className=\"ds-platform-badge__icon\">\n <Icon size={iconSize} />\n </span>\n\n {variant !== 'icon-only' && (\n <span className=\"ds-platform-badge__label\">{label}</span>\n )}\n\n {variant === 'full' && rating != null && (\n <span className=\"ds-platform-badge__rating\">\n <StarRating value={rating} size=\"sm\" />\n {count != null && (\n <span className=\"ds-platform-badge__count\">({count})</span>\n )}\n </span>\n )}\n </div>\n );\n },\n);\n\nPlatformBadge.displayName = 'PlatformBadge';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { PlatformBadge, type Platform } from '../PlatformBadge/PlatformBadge';\nimport { StarRating } from '../StarRating/StarRating';\nimport './SocialProofCard.css';\n\nexport interface SocialProofAuthor {\n name: string;\n title?: string;\n company?: string;\n avatar?: string;\n}\n\nexport interface SocialProofMetric {\n value: React.ReactNode;\n label: React.ReactNode;\n}\n\nexport interface SocialProofMedia {\n src: string;\n type: 'image';\n alt?: string;\n}\n\nexport interface SocialProofCardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'content'> {\n variant?: 'social' | 'compact' | 'standard' | 'detailed' | 'narrative';\n content: React.ReactNode;\n author: SocialProofAuthor;\n starRating?: number;\n platform?: Platform;\n badges?: React.ReactNode[];\n href?: string;\n media?: SocialProofMedia;\n metrics?: SocialProofMetric[];\n headline?: React.ReactNode;\n industry?: React.ReactNode;\n ctaText?: React.ReactNode;\n}\n\nexport const SocialProofCard = forwardRef<HTMLElement, SocialProofCardProps>(\n (\n {\n variant = 'standard',\n content,\n author,\n starRating,\n platform,\n badges,\n href,\n media,\n metrics,\n headline,\n industry,\n ctaText,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <article\n ref={ref}\n className={clsx(\n 'ds-card',\n variant === 'compact' ? 'ds-card--tier-1' : 'ds-card--tier-2',\n variant === 'compact' ? 'glass--tier-1' : 'glass--tier-2',\n 'ds-social-proof-card',\n `ds-social-proof-card--${variant}`,\n href && 'ds-social-proof-card--linked',\n className,\n )}\n {...props}\n >\n {media?.src && (\n <div className=\"ds-social-proof-card__media\">\n <img\n src={media.src}\n alt={media.alt ?? ''}\n className=\"ds-social-proof-card__image\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </div>\n )}\n\n <div className=\"ds-social-proof-card__body\">\n <div className=\"ds-social-proof-card__meta\">\n {starRating !== undefined && <StarRating value={starRating} size=\"sm\" />}\n {platform && <PlatformBadge platform={platform} />}\n {industry && <span className=\"ds-social-proof-card__industry\">{industry}</span>}\n </div>\n\n {headline && <h3 className=\"ds-social-proof-card__headline\">{headline}</h3>}\n\n <blockquote className=\"ds-social-proof-card__quote\">\n <p>{content}</p>\n </blockquote>\n\n {metrics && metrics.length > 0 && (\n <div className=\"ds-social-proof-card__metrics\">\n {metrics.map((metric, index) => (\n <div className=\"ds-social-proof-card__metric\" key={index}>\n <span className=\"ds-social-proof-card__metric-value\">{metric.value}</span>\n <span className=\"ds-social-proof-card__metric-label\">{metric.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {badges && badges.length > 0 && (\n <div className=\"ds-social-proof-card__badges\">\n {badges.map((badge, index) => (\n <span className=\"ds-social-proof-card__badge\" key={index}>{badge}</span>\n ))}\n </div>\n )}\n\n <footer className=\"ds-social-proof-card__author\">\n {author.avatar && (\n <img\n src={author.avatar}\n alt=\"\"\n className=\"ds-social-proof-card__avatar\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n )}\n <div className=\"ds-social-proof-card__author-copy\">\n <cite className=\"ds-social-proof-card__name\">{author.name}</cite>\n {(author.title || author.company) && (\n <span className=\"ds-social-proof-card__role\">\n {[author.title, author.company].filter(Boolean).join(' · ')}\n </span>\n )}\n </div>\n </footer>\n\n {href && ctaText && <span className=\"ds-social-proof-card__cta\">{ctaText}</span>}\n </div>\n </article>\n );\n },\n);\n\nSocialProofCard.displayName = 'SocialProofCard';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './SocialProofCarousel.css';\n\nexport interface SocialProofCarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n background?: 'default' | 'muted' | 'dark' | 'brand' | 'transparent';\n}\n\nexport const SocialProofCarousel = forwardRef<HTMLDivElement, SocialProofCarouselProps>(\n ({ background = 'transparent', className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={clsx(\n 'ds-social-proof-carousel',\n `ds-social-proof-carousel--background-${background}`,\n className,\n )}\n {...props}\n >\n <div className=\"ds-social-proof-carousel__track\">{children}</div>\n </div>\n ),\n);\n\nSocialProofCarousel.displayName = 'SocialProofCarousel';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Card } from '../Card/Card';\nimport { PlatformBadge, type Platform } from '../PlatformBadge/PlatformBadge';\nimport { StarRating } from '../StarRating/StarRating';\nimport type { SocialProofAuthor } from '../SocialProofCard/SocialProofCard';\nimport './SocialProofFeatured.css';\n\nexport interface SocialProofFeaturedProps extends React.HTMLAttributes<HTMLDivElement> {\n quote: React.ReactNode;\n author: SocialProofAuthor;\n featuredVariant?: 'standard' | 'cinematic' | 'spotlight';\n starRating?: number;\n platform?: Platform;\n mediaSrc?: string;\n background?: 'default' | 'muted' | 'brand' | 'transparent';\n padding?: 'sm' | 'md' | 'lg';\n}\n\nexport const SocialProofFeatured = forwardRef<HTMLDivElement, SocialProofFeaturedProps>(\n (\n {\n quote,\n author,\n featuredVariant = 'standard',\n starRating,\n platform,\n mediaSrc,\n background = 'transparent',\n padding = 'md',\n className,\n ...props\n },\n ref,\n ) => (\n <Card\n ref={ref}\n tier={featuredVariant === 'spotlight' ? 3 : 2}\n radius=\"panel\"\n aurora={featuredVariant === 'spotlight'}\n className={clsx(\n 'ds-social-proof-featured',\n `ds-social-proof-featured--${featuredVariant}`,\n `ds-social-proof-featured--background-${background}`,\n `ds-social-proof-featured--padding-${padding}`,\n className,\n )}\n {...props}\n >\n {mediaSrc && (\n <div className=\"ds-social-proof-featured__media\">\n <img src={mediaSrc} alt=\"\" className=\"ds-social-proof-featured__image\" loading=\"lazy\" decoding=\"async\" />\n </div>\n )}\n\n <div className=\"ds-social-proof-featured__content\">\n <div className=\"ds-social-proof-featured__meta\">\n {starRating !== undefined && <StarRating value={starRating} size=\"md\" />}\n {platform && <PlatformBadge platform={platform} />}\n </div>\n\n <blockquote className=\"ds-social-proof-featured__quote\">\n <p>{quote}</p>\n </blockquote>\n\n <footer className=\"ds-social-proof-featured__author\">\n {author.avatar && (\n <img\n src={author.avatar}\n alt=\"\"\n className=\"ds-social-proof-featured__avatar\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n )}\n <div className=\"ds-social-proof-featured__author-copy\">\n <cite className=\"ds-social-proof-featured__name\">{author.name}</cite>\n {(author.title || author.company) && (\n <span className=\"ds-social-proof-featured__role\">\n {[author.title, author.company].filter(Boolean).join(' · ')}\n </span>\n )}\n </div>\n </footer>\n </div>\n </Card>\n ),\n);\n\nSocialProofFeatured.displayName = 'SocialProofFeatured';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './SocialProofGrid.css';\n\nexport interface SocialProofGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: 1 | 2 | 3 | 4;\n staggered?: boolean;\n background?: 'default' | 'muted' | 'dark' | 'brand' | 'transparent';\n}\n\nexport const SocialProofGrid = forwardRef<HTMLDivElement, SocialProofGridProps>(\n ({ columns = 3, staggered = false, background = 'transparent', className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={clsx(\n 'ds-social-proof-grid',\n `ds-social-proof-grid--columns-${columns}`,\n `ds-social-proof-grid--background-${background}`,\n staggered && 'ds-social-proof-grid--staggered',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n ),\n);\n\nSocialProofGrid.displayName = 'SocialProofGrid';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './SocialProofLogos.css';\n\nexport interface SocialProofLogoItem {\n id: string;\n alt: string;\n src?: string;\n logo?: React.ReactNode;\n href?: string;\n badge?: React.ReactNode;\n}\n\nexport interface SocialProofLogosProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n logos: SocialProofLogoItem[];\n title?: React.ReactNode;\n variant?: 'grid' | 'marquee';\n speed?: 'slow' | 'normal' | 'fast';\n background?: 'default' | 'muted' | 'dark' | 'brand' | 'transparent';\n}\n\nexport const SocialProofLogos = forwardRef<HTMLDivElement, SocialProofLogosProps>(\n ({ logos, title, variant = 'grid', speed = 'normal', background = 'transparent', className, ...props }, ref) => {\n const renderedLogos = logos.map((item) => {\n const content = (\n <span className=\"ds-social-proof-logos__item-content\">\n {item.src ? <img src={item.src} alt={item.alt} className=\"ds-social-proof-logos__image\" loading=\"lazy\" decoding=\"async\" /> : item.logo}\n {item.badge && <span className=\"ds-social-proof-logos__badge\">{item.badge}</span>}\n </span>\n );\n\n return item.href ? (\n <OutboundLink key={item.id} href={item.href} context=\"social-proof-logo\" className=\"ds-social-proof-logos__item\">\n {content}\n </OutboundLink>\n ) : (\n <span key={item.id} className=\"ds-social-proof-logos__item\">\n {content}\n </span>\n );\n });\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-social-proof-logos',\n `ds-social-proof-logos--${variant}`,\n `ds-social-proof-logos--speed-${speed}`,\n `ds-social-proof-logos--background-${background}`,\n className,\n )}\n {...props}\n >\n {title && <p className=\"ds-social-proof-logos__title\">{title}</p>}\n <div className=\"ds-social-proof-logos__viewport\">\n <div className=\"ds-social-proof-logos__track\">\n {renderedLogos}\n {variant === 'marquee' && renderedLogos}\n </div>\n </div>\n </div>\n );\n },\n);\n\nSocialProofLogos.displayName = 'SocialProofLogos';\n","import React, { forwardRef, useState, useCallback } from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport clsx from 'clsx';\nimport './VideoLightbox.css';\n\n/* ============================================================================\n VIDEO LIGHTBOX\n ============================================================================\n Modal overlay video player built on @base-ui/react Dialog. Opens a lazy\n iframe embed (YouTube/Vimeo/Loom) with backdrop blur, keyboard navigation,\n and focus trap. Designed for inline playback from thumbnail cards without\n navigating away from the current page.\n\n Strategic objective: Engagement — keep users on the Wall of Love\n ============================================================================ */\n\nexport interface VideoLightboxProps {\n /** Video embed URL (YouTube, Vimeo, Loom) */\n videoUrl: string;\n /** Poster image shown as thumbnail trigger */\n thumbnailSrc?: string;\n /** Alt text for thumbnail */\n thumbnailAlt?: string;\n /** Video title for accessibility */\n title?: string;\n /** Custom trigger element (overrides default thumbnail + play button) */\n trigger?: React.ReactNode;\n /** Additional class name for the trigger wrapper */\n className?: string;\n /** Callback when video starts playing */\n onPlay?: () => void;\n}\n\n/* --------------------------------------------------------------------------\n Helpers\n -------------------------------------------------------------------------- */\n\nfunction getEmbedUrl(src: string): string {\n // YouTube\n const ytMatch = src.match(\n /(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/,\n );\n if (ytMatch) return `https://www.youtube-nocookie.com/embed/${ytMatch[1]}?autoplay=1&rel=0`;\n\n // Vimeo\n const vimeoMatch = src.match(/(?:vimeo\\.com\\/)(\\d+)/);\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}?autoplay=1`;\n\n // Loom\n const loomMatch = src.match(/(?:loom\\.com\\/share\\/)([a-zA-Z0-9]+)/);\n if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;\n\n return src;\n}\n\nconst PlayIcon = () => (\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"32\" cy=\"32\" r=\"32\" className=\"ds-video-lightbox__play-bg\" />\n <path d=\"M26 20v24l20-12L26 20z\" fill=\"white\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\n/**\n * Modal video player triggered by a thumbnail or custom element.\n * Opens a full-screen overlay with lazy iframe injection.\n *\n * @example\n * ```tsx\n * <VideoLightbox\n * videoUrl=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * thumbnailSrc=\"/thumbnails/demo.jpg\"\n * title=\"Customer testimonial\"\n * />\n *\n * <VideoLightbox\n * videoUrl=\"https://vimeo.com/123456789\"\n * trigger={<Button>Watch Video</Button>}\n * />\n * ```\n */\nexport const VideoLightbox = forwardRef<HTMLDivElement, VideoLightboxProps>(\n (\n {\n videoUrl,\n thumbnailSrc,\n thumbnailAlt,\n title = 'Video',\n trigger,\n className,\n onPlay,\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n\n const handleOpen = useCallback(() => {\n setOpen(true);\n onPlay?.();\n }, [onPlay]);\n\n return (\n <div ref={ref} className={clsx('ds-video-lightbox', className)}>\n <BaseDialog.Root open={open} onOpenChange={setOpen}>\n <BaseDialog.Trigger\n className=\"ds-video-lightbox__trigger\"\n onClick={handleOpen}\n >\n {trigger || (\n <div className=\"ds-video-lightbox__thumbnail-wrap\">\n {thumbnailSrc ? (\n <img\n src={thumbnailSrc}\n alt={thumbnailAlt || `Play: ${title}`}\n className=\"ds-video-lightbox__thumbnail\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n ) : (\n <div className=\"ds-video-lightbox__placeholder\" />\n )}\n <div className=\"ds-video-lightbox__overlay\">\n <div className=\"ds-video-lightbox__play-btn\">\n <PlayIcon />\n </div>\n </div>\n </div>\n )}\n </BaseDialog.Trigger>\n\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"ds-video-lightbox__backdrop\" />\n <BaseDialog.Popup className=\"ds-video-lightbox__popup\">\n <BaseDialog.Close className=\"ds-video-lightbox__close\" aria-label=\"Close video\">\n <CloseIcon />\n </BaseDialog.Close>\n <BaseDialog.Title className=\"ds-sr-only\">{title}</BaseDialog.Title>\n <div className=\"ds-video-lightbox__iframe-wrap\">\n {open && (\n <iframe\n src={getEmbedUrl(videoUrl)}\n title={title}\n className=\"ds-video-lightbox__iframe\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n </div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n </div>\n );\n },\n);\n\nVideoLightbox.displayName = 'VideoLightbox';\n"]}
@@ -3,8 +3,9 @@
3
3
  var chunkLUD52ZJF_cjs = require('../chunk-LUD52ZJF.cjs');
4
4
  var chunkEPD4ZEPY_cjs = require('../chunk-EPD4ZEPY.cjs');
5
5
  var chunkNT4LBP7D_cjs = require('../chunk-NT4LBP7D.cjs');
6
- var chunkJPUJWI7F_cjs = require('../chunk-JPUJWI7F.cjs');
6
+ var chunk6WQKRQEE_cjs = require('../chunk-6WQKRQEE.cjs');
7
7
  var chunk7EUR3AKV_cjs = require('../chunk-7EUR3AKV.cjs');
8
+ var chunkQXUA5PQ3_cjs = require('../chunk-QXUA5PQ3.cjs');
8
9
  var chunkVM7WFMKI_cjs = require('../chunk-VM7WFMKI.cjs');
9
10
  var chunkSGYXYMKZ_cjs = require('../chunk-SGYXYMKZ.cjs');
10
11
  var chunkGPHQGLR5_cjs = require('../chunk-GPHQGLR5.cjs');
@@ -233,35 +234,35 @@ Object.defineProperty(exports, "BreadcrumbSeparator", {
233
234
  });
234
235
  Object.defineProperty(exports, "Badge", {
235
236
  enumerable: true,
236
- get: function () { return chunkJPUJWI7F_cjs.Badge; }
237
+ get: function () { return chunk6WQKRQEE_cjs.Badge; }
238
+ });
239
+ Object.defineProperty(exports, "Button", {
240
+ enumerable: true,
241
+ get: function () { return chunk7EUR3AKV_cjs.Button; }
237
242
  });
238
243
  Object.defineProperty(exports, "Card", {
239
244
  enumerable: true,
240
- get: function () { return chunkJPUJWI7F_cjs.Card; }
245
+ get: function () { return chunkQXUA5PQ3_cjs.Card; }
241
246
  });
242
247
  Object.defineProperty(exports, "CardContent", {
243
248
  enumerable: true,
244
- get: function () { return chunkJPUJWI7F_cjs.CardContent; }
249
+ get: function () { return chunkQXUA5PQ3_cjs.CardContent; }
245
250
  });
246
251
  Object.defineProperty(exports, "CardDescription", {
247
252
  enumerable: true,
248
- get: function () { return chunkJPUJWI7F_cjs.CardDescription; }
253
+ get: function () { return chunkQXUA5PQ3_cjs.CardDescription; }
249
254
  });
250
255
  Object.defineProperty(exports, "CardFooter", {
251
256
  enumerable: true,
252
- get: function () { return chunkJPUJWI7F_cjs.CardFooter; }
257
+ get: function () { return chunkQXUA5PQ3_cjs.CardFooter; }
253
258
  });
254
259
  Object.defineProperty(exports, "CardHeader", {
255
260
  enumerable: true,
256
- get: function () { return chunkJPUJWI7F_cjs.CardHeader; }
261
+ get: function () { return chunkQXUA5PQ3_cjs.CardHeader; }
257
262
  });
258
263
  Object.defineProperty(exports, "CardTitle", {
259
264
  enumerable: true,
260
- get: function () { return chunkJPUJWI7F_cjs.CardTitle; }
261
- });
262
- Object.defineProperty(exports, "Button", {
263
- enumerable: true,
264
- get: function () { return chunk7EUR3AKV_cjs.Button; }
265
+ get: function () { return chunkQXUA5PQ3_cjs.CardTitle; }
265
266
  });
266
267
  Object.defineProperty(exports, "Avatar", {
267
268
  enumerable: true,
@@ -1,8 +1,9 @@
1
1
  export { BREAKPOINTS, CARD_HOVER, COLORS, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, DISTANCE, DURATION, EASING, FONT_FAMILY, FONT_SIZE, FONT_WEIGHT, HERO_ENTRANCE, LINE_HEIGHT, Label, MEDIA_QUERIES, MOTION, PANEL_CROSSFADE, PRESETS, RADIUS, REDUCED_PANEL_CROSSFADE, REDUCED_VARIANTS, SECTION_REVEAL, SHADOWS, SPACING, Select, SelectContent, SelectGroup, SelectItem, SelectSeparator, SelectTrigger, Separator, Skeleton, Switch, TAB_SLIDE, TRANSITION, TextArea, VARIANTS, VARIANT_MAP, Z_INDEX } from '../chunk-PYREXCZK.js';
2
2
  export { AppearanceProvider, accentForegroundRgb, hexToRgb, initializeAppearance, prefersReducedMotion, relativeLuminance, useAppearance } from '../chunk-MBAG654R.js';
3
3
  export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '../chunk-XU3OMQ7V.js';
4
- export { Badge, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../chunk-KXVFFEGD.js';
4
+ export { Badge } from '../chunk-HTLWFOLC.js';
5
5
  export { Button } from '../chunk-KJHPOB3J.js';
6
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../chunk-MLINFRC3.js';
6
7
  export { Avatar, AvatarFallback, AvatarImage } from '../chunk-Y3CPKNB7.js';
7
8
  export { DSIntlProvider, FormattedDate, FormattedMessage, FormattedNumber, defineMessages, useDateFormat, useIsRTL, useLocale, useMessage, useNumberFormat, useRelativeTime, useTextDirection } from '../chunk-SFXTB7JL.js';
8
9
  export { alertMessages, allMessages, appearanceMessages, authMessages, bookingEmbedMessages, calendarMessages, carouselMessages, commonMessages, dialogMessages, formMessages, methodologyMessages, navigationMessages, paginationMessages, reportMessages, toastMessages } from '../chunk-RSLA2FJN.js';
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import React__default from 'react';
2
+ import React__default, { ComponentPropsWithoutRef, ReactNode } from 'react';
3
3
  import { a as SectionShellProps } from './SectionShell-CrgrzWK6.cjs';
4
4
 
5
5
  type AuroraVoidIntensity = 'light' | 'base' | 'heavy';
@@ -39,7 +39,7 @@ interface AuroraVoidProps {
39
39
  * - prefers-reduced-motion: kills animation, holds static composition
40
40
  *
41
41
  * @since v2
42
- * @replaces VoidBackground
42
+ * @since v2
43
43
  */
44
44
  declare const AuroraVoid: React__default.ForwardRefExoticComponent<AuroraVoidProps & React__default.RefAttributes<HTMLDivElement>>;
45
45
 
@@ -1097,4 +1097,48 @@ interface HeroCompositionProps {
1097
1097
  */
1098
1098
  declare const HeroComposition: React.ForwardRefExoticComponent<HeroCompositionProps & React.RefAttributes<HTMLDivElement>>;
1099
1099
 
1100
- export { type IntelligenceMetric as $, type AgitationPoint as A, BeforeAfterBlock as B, CaseStudyCard as C, EcosystemDiagram as D, type EcosystemConnection as E, type EcosystemDiagramProps as F, type EcosystemLayer as G, type EnterpriseSLA as H, type EnterpriseSignalCategory as I, type EnterpriseSignalItem as J, type EnterpriseSignalStatus as K, EnterpriseSignaling as L, type EnterpriseSignalingProps as M, type EraSentiment as N, type EvolutionEra as O, EvolutionTimeline as P, type EvolutionTimelineProps as Q, GuaranteeHighlight as R, type GuaranteeHighlightProps as S, HeroComposition as T, type HeroCompositionProps as U, ICPFilter as V, type ICPFilterItem as W, type ICPFilterProps as X, IntelligenceBlock as Y, type IntelligenceBlockProps as Z, type IntelligenceCapability as _, type ArchitectureConnection as a, IntentCTA as a0, type IntentCTAProps as a1, type IntentStage as a2, type IntentTriggerType as a3, type KPICell as a4, KPIPanel as a5, type KPIPanelProps as a6, type KPITrend as a7, ObjectionFAQ as a8, type ObjectionFAQProps as a9, type ObjectionItem as aa, type PartnerBenefit as ab, type PartnerCalcInput as ac, type PartnerCalcOutput as ad, type PartnerDifferentiator as ae, PartnerValueProp as af, type PartnerValuePropProps as ag, PricingCard as ah, type PricingCardProps as ai, type PricingFeature as aj, ProblemAgitation as ak, type ProblemAgitationProps as al, ROICalculator as am, type ROICalculatorProps as an, type ROIComparisonItem as ao, SegmentSwitch as ap, type SegmentSwitchProps as aq, StickyActionBar as ar, type StickyActionBarProps as as, ValueAnchor as at, type ValueAnchorInput as au, type ValueAnchorOutput as av, type ValueAnchorProps as aw, ArchitectureDiagram as b, type ArchitectureDiagramProps as c, type ArchitectureNode as d, type ArchitectureNodeType as e, AuroraVoid as f, type AuroraVoidIntensity as g, type AuroraVoidProps as h, type BeforeAfterBlockProps as i, type BeforeAfterItem as j, type BeforeAfterSide as k, BookingEmbed as l, type BookingEmbedProps as m, type CaseStudyCardProps as n, type CaseStudyMetric as o, type ComparisonColumn as p, type ComparisonRow as q, ComparisonTable as r, type ComparisonTableProps as s, CompetitorDiff as t, type CompetitorDiffItem as u, type CompetitorDiffProps as v, ComplianceGrid as w, type ComplianceGridProps as x, type ComplianceItem as y, type ComplianceStatus as z };
1100
+ type MarketingHeroVariant = 'center' | 'split' | 'premium-split';
1101
+ interface MarketingHeroProps extends Omit<ComponentPropsWithoutRef<'section'>, 'title'> {
1102
+ /** Eyebrow label rendered as the page h1 for website AC20. */
1103
+ eyebrow: string;
1104
+ /** Primary display message rendered below the eyebrow. */
1105
+ title: string | ReactNode;
1106
+ /** Supporting copy rendered below the display title. */
1107
+ subtitle?: string | ReactNode;
1108
+ /** Primary conversion action. */
1109
+ primaryCta?: ReactNode;
1110
+ /** Secondary conversion action. */
1111
+ secondaryCta?: ReactNode;
1112
+ /** Right-side or below-fold media fixture owned by the consuming page. */
1113
+ media?: ReactNode;
1114
+ /** Additional content rendered after the CTA row. */
1115
+ children?: ReactNode;
1116
+ /** Layout variant. */
1117
+ variant?: MarketingHeroVariant;
1118
+ /** Enables the design-system grid overlay. */
1119
+ withGrid?: boolean;
1120
+ /** Enables the aurora glow background. */
1121
+ withGlow?: boolean;
1122
+ /** Optional A/B test label exposed as a data attribute. */
1123
+ abVariant?: string;
1124
+ /** Optional analytics context exposed as a data attribute. */
1125
+ analyticsContext?: string;
1126
+ }
1127
+ declare const MarketingHero: React.ForwardRefExoticComponent<MarketingHeroProps & React.RefAttributes<HTMLElement>>;
1128
+
1129
+ type MarketingSectionBackground = 'whisper' | 'scanline' | 'plain';
1130
+ type MarketingSectionAlign = 'center' | 'left';
1131
+ interface MarketingSectionProps extends Omit<ComponentPropsWithoutRef<'section'>, 'title'> {
1132
+ eyebrow?: React__default.ReactNode;
1133
+ title?: React__default.ReactNode;
1134
+ titleHighlight?: React__default.ReactNode;
1135
+ subtitle?: React__default.ReactNode;
1136
+ background?: MarketingSectionBackground;
1137
+ align?: MarketingSectionAlign;
1138
+ withGlow?: boolean;
1139
+ withGrid?: boolean;
1140
+ analyticsContext?: string;
1141
+ }
1142
+ declare const MarketingSection: React__default.ForwardRefExoticComponent<MarketingSectionProps & React__default.RefAttributes<HTMLElement>>;
1143
+
1144
+ export { type IntelligenceMetric as $, type AgitationPoint as A, BeforeAfterBlock as B, CaseStudyCard as C, EcosystemDiagram as D, type EcosystemConnection as E, type EcosystemDiagramProps as F, type EcosystemLayer as G, type EnterpriseSLA as H, type EnterpriseSignalCategory as I, type EnterpriseSignalItem as J, type EnterpriseSignalStatus as K, EnterpriseSignaling as L, type EnterpriseSignalingProps as M, type EraSentiment as N, type EvolutionEra as O, EvolutionTimeline as P, type EvolutionTimelineProps as Q, GuaranteeHighlight as R, type GuaranteeHighlightProps as S, HeroComposition as T, type HeroCompositionProps as U, ICPFilter as V, type ICPFilterItem as W, type ICPFilterProps as X, IntelligenceBlock as Y, type IntelligenceBlockProps as Z, type IntelligenceCapability as _, type ArchitectureConnection as a, IntentCTA as a0, type IntentCTAProps as a1, type IntentStage as a2, type IntentTriggerType as a3, type KPICell as a4, KPIPanel as a5, type KPIPanelProps as a6, type KPITrend as a7, MarketingHero as a8, type MarketingHeroProps as a9, ValueAnchor as aA, type ValueAnchorInput as aB, type ValueAnchorOutput as aC, type ValueAnchorProps as aD, type MarketingHeroVariant as aa, MarketingSection as ab, type MarketingSectionAlign as ac, type MarketingSectionBackground as ad, type MarketingSectionProps as ae, ObjectionFAQ as af, type ObjectionFAQProps as ag, type ObjectionItem as ah, type PartnerBenefit as ai, type PartnerCalcInput as aj, type PartnerCalcOutput as ak, type PartnerDifferentiator as al, PartnerValueProp as am, type PartnerValuePropProps as an, PricingCard as ao, type PricingCardProps as ap, type PricingFeature as aq, ProblemAgitation as ar, type ProblemAgitationProps as as, ROICalculator as at, type ROICalculatorProps as au, type ROIComparisonItem as av, SegmentSwitch as aw, type SegmentSwitchProps as ax, StickyActionBar as ay, type StickyActionBarProps as az, ArchitectureDiagram as b, type ArchitectureDiagramProps as c, type ArchitectureNode as d, type ArchitectureNodeType as e, AuroraVoid as f, type AuroraVoidIntensity as g, type AuroraVoidProps as h, type BeforeAfterBlockProps as i, type BeforeAfterItem as j, type BeforeAfterSide as k, BookingEmbed as l, type BookingEmbedProps as m, type CaseStudyCardProps as n, type CaseStudyMetric as o, type ComparisonColumn as p, type ComparisonRow as q, ComparisonTable as r, type ComparisonTableProps as s, CompetitorDiff as t, type CompetitorDiffItem as u, type CompetitorDiffProps as v, ComplianceGrid as w, type ComplianceGridProps as x, type ComplianceItem as y, type ComplianceStatus as z };
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import React__default from 'react';
2
+ import React__default, { ComponentPropsWithoutRef, ReactNode } from 'react';
3
3
  import { a as SectionShellProps } from './SectionShell-CrgrzWK6.js';
4
4
 
5
5
  type AuroraVoidIntensity = 'light' | 'base' | 'heavy';
@@ -39,7 +39,7 @@ interface AuroraVoidProps {
39
39
  * - prefers-reduced-motion: kills animation, holds static composition
40
40
  *
41
41
  * @since v2
42
- * @replaces VoidBackground
42
+ * @since v2
43
43
  */
44
44
  declare const AuroraVoid: React__default.ForwardRefExoticComponent<AuroraVoidProps & React__default.RefAttributes<HTMLDivElement>>;
45
45
 
@@ -1097,4 +1097,48 @@ interface HeroCompositionProps {
1097
1097
  */
1098
1098
  declare const HeroComposition: React.ForwardRefExoticComponent<HeroCompositionProps & React.RefAttributes<HTMLDivElement>>;
1099
1099
 
1100
- export { type IntelligenceMetric as $, type AgitationPoint as A, BeforeAfterBlock as B, CaseStudyCard as C, EcosystemDiagram as D, type EcosystemConnection as E, type EcosystemDiagramProps as F, type EcosystemLayer as G, type EnterpriseSLA as H, type EnterpriseSignalCategory as I, type EnterpriseSignalItem as J, type EnterpriseSignalStatus as K, EnterpriseSignaling as L, type EnterpriseSignalingProps as M, type EraSentiment as N, type EvolutionEra as O, EvolutionTimeline as P, type EvolutionTimelineProps as Q, GuaranteeHighlight as R, type GuaranteeHighlightProps as S, HeroComposition as T, type HeroCompositionProps as U, ICPFilter as V, type ICPFilterItem as W, type ICPFilterProps as X, IntelligenceBlock as Y, type IntelligenceBlockProps as Z, type IntelligenceCapability as _, type ArchitectureConnection as a, IntentCTA as a0, type IntentCTAProps as a1, type IntentStage as a2, type IntentTriggerType as a3, type KPICell as a4, KPIPanel as a5, type KPIPanelProps as a6, type KPITrend as a7, ObjectionFAQ as a8, type ObjectionFAQProps as a9, type ObjectionItem as aa, type PartnerBenefit as ab, type PartnerCalcInput as ac, type PartnerCalcOutput as ad, type PartnerDifferentiator as ae, PartnerValueProp as af, type PartnerValuePropProps as ag, PricingCard as ah, type PricingCardProps as ai, type PricingFeature as aj, ProblemAgitation as ak, type ProblemAgitationProps as al, ROICalculator as am, type ROICalculatorProps as an, type ROIComparisonItem as ao, SegmentSwitch as ap, type SegmentSwitchProps as aq, StickyActionBar as ar, type StickyActionBarProps as as, ValueAnchor as at, type ValueAnchorInput as au, type ValueAnchorOutput as av, type ValueAnchorProps as aw, ArchitectureDiagram as b, type ArchitectureDiagramProps as c, type ArchitectureNode as d, type ArchitectureNodeType as e, AuroraVoid as f, type AuroraVoidIntensity as g, type AuroraVoidProps as h, type BeforeAfterBlockProps as i, type BeforeAfterItem as j, type BeforeAfterSide as k, BookingEmbed as l, type BookingEmbedProps as m, type CaseStudyCardProps as n, type CaseStudyMetric as o, type ComparisonColumn as p, type ComparisonRow as q, ComparisonTable as r, type ComparisonTableProps as s, CompetitorDiff as t, type CompetitorDiffItem as u, type CompetitorDiffProps as v, ComplianceGrid as w, type ComplianceGridProps as x, type ComplianceItem as y, type ComplianceStatus as z };
1100
+ type MarketingHeroVariant = 'center' | 'split' | 'premium-split';
1101
+ interface MarketingHeroProps extends Omit<ComponentPropsWithoutRef<'section'>, 'title'> {
1102
+ /** Eyebrow label rendered as the page h1 for website AC20. */
1103
+ eyebrow: string;
1104
+ /** Primary display message rendered below the eyebrow. */
1105
+ title: string | ReactNode;
1106
+ /** Supporting copy rendered below the display title. */
1107
+ subtitle?: string | ReactNode;
1108
+ /** Primary conversion action. */
1109
+ primaryCta?: ReactNode;
1110
+ /** Secondary conversion action. */
1111
+ secondaryCta?: ReactNode;
1112
+ /** Right-side or below-fold media fixture owned by the consuming page. */
1113
+ media?: ReactNode;
1114
+ /** Additional content rendered after the CTA row. */
1115
+ children?: ReactNode;
1116
+ /** Layout variant. */
1117
+ variant?: MarketingHeroVariant;
1118
+ /** Enables the design-system grid overlay. */
1119
+ withGrid?: boolean;
1120
+ /** Enables the aurora glow background. */
1121
+ withGlow?: boolean;
1122
+ /** Optional A/B test label exposed as a data attribute. */
1123
+ abVariant?: string;
1124
+ /** Optional analytics context exposed as a data attribute. */
1125
+ analyticsContext?: string;
1126
+ }
1127
+ declare const MarketingHero: React.ForwardRefExoticComponent<MarketingHeroProps & React.RefAttributes<HTMLElement>>;
1128
+
1129
+ type MarketingSectionBackground = 'whisper' | 'scanline' | 'plain';
1130
+ type MarketingSectionAlign = 'center' | 'left';
1131
+ interface MarketingSectionProps extends Omit<ComponentPropsWithoutRef<'section'>, 'title'> {
1132
+ eyebrow?: React__default.ReactNode;
1133
+ title?: React__default.ReactNode;
1134
+ titleHighlight?: React__default.ReactNode;
1135
+ subtitle?: React__default.ReactNode;
1136
+ background?: MarketingSectionBackground;
1137
+ align?: MarketingSectionAlign;
1138
+ withGlow?: boolean;
1139
+ withGrid?: boolean;
1140
+ analyticsContext?: string;
1141
+ }
1142
+ declare const MarketingSection: React__default.ForwardRefExoticComponent<MarketingSectionProps & React__default.RefAttributes<HTMLElement>>;
1143
+
1144
+ export { type IntelligenceMetric as $, type AgitationPoint as A, BeforeAfterBlock as B, CaseStudyCard as C, EcosystemDiagram as D, type EcosystemConnection as E, type EcosystemDiagramProps as F, type EcosystemLayer as G, type EnterpriseSLA as H, type EnterpriseSignalCategory as I, type EnterpriseSignalItem as J, type EnterpriseSignalStatus as K, EnterpriseSignaling as L, type EnterpriseSignalingProps as M, type EraSentiment as N, type EvolutionEra as O, EvolutionTimeline as P, type EvolutionTimelineProps as Q, GuaranteeHighlight as R, type GuaranteeHighlightProps as S, HeroComposition as T, type HeroCompositionProps as U, ICPFilter as V, type ICPFilterItem as W, type ICPFilterProps as X, IntelligenceBlock as Y, type IntelligenceBlockProps as Z, type IntelligenceCapability as _, type ArchitectureConnection as a, IntentCTA as a0, type IntentCTAProps as a1, type IntentStage as a2, type IntentTriggerType as a3, type KPICell as a4, KPIPanel as a5, type KPIPanelProps as a6, type KPITrend as a7, MarketingHero as a8, type MarketingHeroProps as a9, ValueAnchor as aA, type ValueAnchorInput as aB, type ValueAnchorOutput as aC, type ValueAnchorProps as aD, type MarketingHeroVariant as aa, MarketingSection as ab, type MarketingSectionAlign as ac, type MarketingSectionBackground as ad, type MarketingSectionProps as ae, ObjectionFAQ as af, type ObjectionFAQProps as ag, type ObjectionItem as ah, type PartnerBenefit as ai, type PartnerCalcInput as aj, type PartnerCalcOutput as ak, type PartnerDifferentiator as al, PartnerValueProp as am, type PartnerValuePropProps as an, PricingCard as ao, type PricingCardProps as ap, type PricingFeature as aq, ProblemAgitation as ar, type ProblemAgitationProps as as, ROICalculator as at, type ROICalculatorProps as au, type ROIComparisonItem as av, SegmentSwitch as aw, type SegmentSwitchProps as ax, StickyActionBar as ay, type StickyActionBarProps as az, ArchitectureDiagram as b, type ArchitectureDiagramProps as c, type ArchitectureNode as d, type ArchitectureNodeType as e, AuroraVoid as f, type AuroraVoidIntensity as g, type AuroraVoidProps as h, type BeforeAfterBlockProps as i, type BeforeAfterItem as j, type BeforeAfterSide as k, BookingEmbed as l, type BookingEmbedProps as m, type CaseStudyCardProps as n, type CaseStudyMetric as o, type ComparisonColumn as p, type ComparisonRow as q, ComparisonTable as r, type ComparisonTableProps as s, CompetitorDiff as t, type CompetitorDiffItem as u, type CompetitorDiffProps as v, ComplianceGrid as w, type ComplianceGridProps as x, type ComplianceItem as y, type ComplianceStatus as z };