@salesmind-ai/design-system 0.3.1 → 0.3.2

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 (197) hide show
  1. package/dist/admin/index.cjs +68 -2928
  2. package/dist/admin/index.cjs.map +1 -1
  3. package/dist/admin/index.js +5 -2915
  4. package/dist/admin/index.js.map +1 -1
  5. package/dist/blog/index.cjs +53 -1064
  6. package/dist/blog/index.cjs.map +1 -1
  7. package/dist/blog/index.js +8 -1054
  8. package/dist/blog/index.js.map +1 -1
  9. package/dist/charts/index.cjs +46 -2694
  10. package/dist/charts/index.cjs.map +1 -1
  11. package/dist/charts/index.js +3 -2680
  12. package/dist/charts/index.js.map +1 -1
  13. package/dist/chunk-2GARWEJK.js +17 -0
  14. package/dist/chunk-2GARWEJK.js.map +1 -0
  15. package/dist/chunk-3NKRFUAR.js +37 -0
  16. package/dist/chunk-3NKRFUAR.js.map +1 -0
  17. package/dist/chunk-3TGSIILM.cjs +201 -0
  18. package/dist/chunk-3TGSIILM.cjs.map +1 -0
  19. package/dist/chunk-4GM5BGBN.cjs +801 -0
  20. package/dist/chunk-4GM5BGBN.cjs.map +1 -0
  21. package/dist/chunk-5LGDEZWY.cjs +2434 -0
  22. package/dist/chunk-5LGDEZWY.cjs.map +1 -0
  23. package/dist/chunk-6H4DSTXR.js +786 -0
  24. package/dist/chunk-6H4DSTXR.js.map +1 -0
  25. package/dist/chunk-6UNG76Y2.js +153 -0
  26. package/dist/chunk-6UNG76Y2.js.map +1 -0
  27. package/dist/chunk-7PX2AZ6Y.js +39 -0
  28. package/dist/chunk-7PX2AZ6Y.js.map +1 -0
  29. package/dist/chunk-B6AVAX4F.js +1415 -0
  30. package/dist/chunk-B6AVAX4F.js.map +1 -0
  31. package/dist/chunk-BILT5KD3.js +264 -0
  32. package/dist/chunk-BILT5KD3.js.map +1 -0
  33. package/dist/chunk-C2BCDNAV.js +24 -0
  34. package/dist/chunk-C2BCDNAV.js.map +1 -0
  35. package/dist/chunk-CH42VPWE.cjs +421 -0
  36. package/dist/chunk-CH42VPWE.cjs.map +1 -0
  37. package/dist/chunk-CJ2MKVAF.cjs +46 -0
  38. package/dist/chunk-CJ2MKVAF.cjs.map +1 -0
  39. package/dist/chunk-DP74LUXG.cjs +98 -0
  40. package/dist/chunk-DP74LUXG.cjs.map +1 -0
  41. package/dist/chunk-E7D6EKJ4.cjs +44 -0
  42. package/dist/chunk-E7D6EKJ4.cjs.map +1 -0
  43. package/dist/chunk-ECXBTUH6.cjs +584 -0
  44. package/dist/chunk-ECXBTUH6.cjs.map +1 -0
  45. package/dist/chunk-EFRAP5ES.js +157 -0
  46. package/dist/chunk-EFRAP5ES.js.map +1 -0
  47. package/dist/chunk-F6YYWMME.js +485 -0
  48. package/dist/chunk-F6YYWMME.js.map +1 -0
  49. package/dist/chunk-FAFAP4L5.js +183 -0
  50. package/dist/chunk-FAFAP4L5.js.map +1 -0
  51. package/dist/chunk-GUZIMHWS.js +1608 -0
  52. package/dist/chunk-GUZIMHWS.js.map +1 -0
  53. package/dist/chunk-H2Y6BSTL.cjs +69 -0
  54. package/dist/chunk-H2Y6BSTL.cjs.map +1 -0
  55. package/dist/chunk-HN4PHABT.js +126 -0
  56. package/dist/chunk-HN4PHABT.js.map +1 -0
  57. package/dist/chunk-HRENHNDJ.js +211 -0
  58. package/dist/chunk-HRENHNDJ.js.map +1 -0
  59. package/dist/chunk-I75BFEYT.cjs +2561 -0
  60. package/dist/chunk-I75BFEYT.cjs.map +1 -0
  61. package/dist/chunk-IFRATNLU.js +562 -0
  62. package/dist/chunk-IFRATNLU.js.map +1 -0
  63. package/dist/chunk-IYPXJ6YC.cjs +69 -0
  64. package/dist/chunk-IYPXJ6YC.cjs.map +1 -0
  65. package/dist/chunk-JPJN4YBC.js +409 -0
  66. package/dist/chunk-JPJN4YBC.js.map +1 -0
  67. package/dist/chunk-KBA2LFBG.js +62 -0
  68. package/dist/chunk-KBA2LFBG.js.map +1 -0
  69. package/dist/chunk-KCKUSU2M.cjs +166 -0
  70. package/dist/chunk-KCKUSU2M.cjs.map +1 -0
  71. package/dist/chunk-KJ2OXQF4.js +287 -0
  72. package/dist/chunk-KJ2OXQF4.js.map +1 -0
  73. package/dist/chunk-KNQEIU7O.cjs +1202 -0
  74. package/dist/chunk-KNQEIU7O.cjs.map +1 -0
  75. package/dist/chunk-KVGSVGRK.cjs +569 -0
  76. package/dist/chunk-KVGSVGRK.cjs.map +1 -0
  77. package/dist/chunk-L352JRV6.cjs +105 -0
  78. package/dist/chunk-L352JRV6.cjs.map +1 -0
  79. package/dist/chunk-LJADZITX.cjs +298 -0
  80. package/dist/chunk-LJADZITX.cjs.map +1 -0
  81. package/dist/chunk-LMJPWXTZ.cjs +194 -0
  82. package/dist/chunk-LMJPWXTZ.cjs.map +1 -0
  83. package/dist/chunk-LOWEAQST.js +701 -0
  84. package/dist/chunk-LOWEAQST.js.map +1 -0
  85. package/dist/chunk-MDB2WCRQ.cjs +137 -0
  86. package/dist/chunk-MDB2WCRQ.cjs.map +1 -0
  87. package/dist/chunk-MQDEE7HC.cjs +283 -0
  88. package/dist/chunk-MQDEE7HC.cjs.map +1 -0
  89. package/dist/chunk-MQRB634A.cjs +34 -0
  90. package/dist/chunk-MQRB634A.cjs.map +1 -0
  91. package/dist/chunk-MTI27RDV.js +185 -0
  92. package/dist/chunk-MTI27RDV.js.map +1 -0
  93. package/dist/chunk-MU6GW5ZV.js +2317 -0
  94. package/dist/chunk-MU6GW5ZV.js.map +1 -0
  95. package/dist/chunk-NN3TUHIH.js +28 -0
  96. package/dist/chunk-NN3TUHIH.js.map +1 -0
  97. package/dist/chunk-NT4LBP7D.cjs +111 -0
  98. package/dist/chunk-NT4LBP7D.cjs.map +1 -0
  99. package/dist/chunk-OLV7OD3X.cjs +502 -0
  100. package/dist/chunk-OLV7OD3X.cjs.map +1 -0
  101. package/dist/chunk-OXNXEQY7.js +2538 -0
  102. package/dist/chunk-OXNXEQY7.js.map +1 -0
  103. package/dist/chunk-P5BOFE5A.js +546 -0
  104. package/dist/chunk-P5BOFE5A.js.map +1 -0
  105. package/dist/chunk-Q2MFGYTE.cjs +1449 -0
  106. package/dist/chunk-Q2MFGYTE.cjs.map +1 -0
  107. package/dist/chunk-Q75DBVDY.cjs +68 -0
  108. package/dist/chunk-Q75DBVDY.cjs.map +1 -0
  109. package/dist/chunk-REQ5Q6ZI.js +1022 -0
  110. package/dist/chunk-REQ5Q6ZI.js.map +1 -0
  111. package/dist/chunk-SICKWUWB.js +62 -0
  112. package/dist/chunk-SICKWUWB.js.map +1 -0
  113. package/dist/chunk-T343CCH5.js +1190 -0
  114. package/dist/chunk-T343CCH5.js.map +1 -0
  115. package/dist/chunk-TEC62D4A.cjs +1624 -0
  116. package/dist/chunk-TEC62D4A.cjs.map +1 -0
  117. package/dist/chunk-TW5JB35D.js +2122 -0
  118. package/dist/chunk-TW5JB35D.js.map +1 -0
  119. package/dist/chunk-VC5LMUVQ.cjs +20 -0
  120. package/dist/chunk-VC5LMUVQ.cjs.map +1 -0
  121. package/dist/chunk-VM7WFMKI.cjs +76 -0
  122. package/dist/chunk-VM7WFMKI.cjs.map +1 -0
  123. package/dist/chunk-W2WTP6HS.cjs +233 -0
  124. package/dist/chunk-W2WTP6HS.cjs.map +1 -0
  125. package/dist/chunk-WH7PYHZY.cjs +35 -0
  126. package/dist/chunk-WH7PYHZY.cjs.map +1 -0
  127. package/dist/chunk-XQZVY7JJ.cjs +717 -0
  128. package/dist/chunk-XQZVY7JJ.cjs.map +1 -0
  129. package/dist/chunk-XU3OMQ7V.js +98 -0
  130. package/dist/chunk-XU3OMQ7V.js.map +1 -0
  131. package/dist/chunk-XWPDRMZG.js +62 -0
  132. package/dist/chunk-XWPDRMZG.js.map +1 -0
  133. package/dist/chunk-Y3CPKNB7.js +67 -0
  134. package/dist/chunk-Y3CPKNB7.js.map +1 -0
  135. package/dist/chunk-YNVRDD2P.js +98 -0
  136. package/dist/chunk-YNVRDD2P.js.map +1 -0
  137. package/dist/chunk-YSYR54XR.js +92 -0
  138. package/dist/chunk-YSYR54XR.js.map +1 -0
  139. package/dist/chunk-YTYDQBVY.cjs +162 -0
  140. package/dist/chunk-YTYDQBVY.cjs.map +1 -0
  141. package/dist/chunk-ZDLOA2UT.cjs +1042 -0
  142. package/dist/chunk-ZDLOA2UT.cjs.map +1 -0
  143. package/dist/chunk-ZWUKRCOJ.cjs +2162 -0
  144. package/dist/chunk-ZWUKRCOJ.cjs.map +1 -0
  145. package/dist/core/index.cjs +807 -4333
  146. package/dist/core/index.cjs.map +1 -1
  147. package/dist/core/index.js +14 -4130
  148. package/dist/core/index.js.map +1 -1
  149. package/dist/i18n/index.cjs +86 -558
  150. package/dist/i18n/index.cjs.map +1 -1
  151. package/dist/i18n/index.js +1 -544
  152. package/dist/i18n/index.js.map +1 -1
  153. package/dist/index.cjs +1432 -17140
  154. package/dist/index.cjs.map +1 -1
  155. package/dist/index.js +31 -16785
  156. package/dist/index.js.map +1 -1
  157. package/dist/marketing/index.cjs +142 -3072
  158. package/dist/marketing/index.cjs.map +1 -1
  159. package/dist/marketing/index.js +11 -3042
  160. package/dist/marketing/index.js.map +1 -1
  161. package/dist/motion/index.cjs +26 -1222
  162. package/dist/motion/index.cjs.map +1 -1
  163. package/dist/motion/index.js +2 -1215
  164. package/dist/motion/index.js.map +1 -1
  165. package/dist/nav/index.cjs +101 -1518
  166. package/dist/nav/index.cjs.map +1 -1
  167. package/dist/nav/index.js +4 -1498
  168. package/dist/nav/index.js.map +1 -1
  169. package/dist/report/index.cjs +171 -2403
  170. package/dist/report/index.cjs.map +1 -1
  171. package/dist/report/index.js +3 -2363
  172. package/dist/report/index.js.map +1 -1
  173. package/dist/sections/index.cjs +28 -378
  174. package/dist/sections/index.cjs.map +1 -1
  175. package/dist/sections/index.js +4 -372
  176. package/dist/sections/index.js.map +1 -1
  177. package/dist/social-proof/index.cjs +53 -1250
  178. package/dist/social-proof/index.cjs.map +1 -1
  179. package/dist/social-proof/index.js +6 -1235
  180. package/dist/social-proof/index.js.map +1 -1
  181. package/dist/theme/index.cjs +38 -565
  182. package/dist/theme/index.cjs.map +1 -1
  183. package/dist/theme/index.js +2 -555
  184. package/dist/theme/index.js.map +1 -1
  185. package/dist/web/client/index.cjs +38 -491
  186. package/dist/web/client/index.cjs.map +1 -1
  187. package/dist/web/client/index.js +4 -483
  188. package/dist/web/client/index.js.map +1 -1
  189. package/dist/web/index.cjs +158 -1346
  190. package/dist/web/index.cjs.map +1 -1
  191. package/dist/web/index.js +9 -1305
  192. package/dist/web/index.js.map +1 -1
  193. package/dist/web/server/index.cjs +26 -563
  194. package/dist/web/server/index.cjs.map +1 -1
  195. package/dist/web/server/index.js +1 -560
  196. package/dist/web/server/index.js.map +1 -1
  197. package/package.json +1 -1
@@ -0,0 +1,1190 @@
1
+ import { VARIANTS, MOTION } from './chunk-YNVRDD2P.js';
2
+ import React3, { useRef, useState, useEffect, useCallback } from 'react';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import { useInView, motion, useReducedMotion } from 'framer-motion';
5
+ import clsx2 from 'clsx';
6
+
7
+ var CursorSpotlight = ({
8
+ children,
9
+ color = "var(--accent-rgb)",
10
+ size = 400,
11
+ opacity = 0.15,
12
+ borderGlow = true,
13
+ className,
14
+ disabled = false
15
+ }) => {
16
+ const containerRef = useRef(null);
17
+ const [position, setPosition] = useState({ x: 0, y: 0 });
18
+ const [isHovering, setIsHovering] = useState(false);
19
+ const [reducedMotion, setReducedMotion] = useState(false);
20
+ useEffect(() => {
21
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
22
+ setReducedMotion(mediaQuery.matches);
23
+ const handler = (e) => setReducedMotion(e.matches);
24
+ mediaQuery.addEventListener("change", handler);
25
+ return () => mediaQuery.removeEventListener("change", handler);
26
+ }, []);
27
+ const isDisabled = disabled || reducedMotion;
28
+ const handleMouseMove = useCallback(
29
+ (e) => {
30
+ if (!containerRef.current || isDisabled) return;
31
+ const rect = containerRef.current.getBoundingClientRect();
32
+ setPosition({
33
+ x: e.clientX - rect.left,
34
+ y: e.clientY - rect.top
35
+ });
36
+ },
37
+ [isDisabled]
38
+ );
39
+ const handleMouseEnter = useCallback(() => {
40
+ if (!isDisabled) setIsHovering(true);
41
+ }, [isDisabled]);
42
+ const handleMouseLeave = useCallback(() => {
43
+ setIsHovering(false);
44
+ }, []);
45
+ useEffect(() => {
46
+ const container = containerRef.current;
47
+ if (!container || isDisabled) return;
48
+ container.addEventListener("mousemove", handleMouseMove);
49
+ container.addEventListener("mouseenter", handleMouseEnter);
50
+ container.addEventListener("mouseleave", handleMouseLeave);
51
+ return () => {
52
+ container.removeEventListener("mousemove", handleMouseMove);
53
+ container.removeEventListener("mouseenter", handleMouseEnter);
54
+ container.removeEventListener("mouseleave", handleMouseLeave);
55
+ };
56
+ }, [handleMouseMove, handleMouseEnter, handleMouseLeave, isDisabled]);
57
+ const spotlightColor = color.startsWith("var(") ? `rgba(${color.replace("var(", "").replace(")", "")}, ${opacity})` : color.includes(",") ? `rgba(${color}, ${opacity})` : color;
58
+ const borderColor = color.startsWith("var(") ? `rgba(${color.replace("var(", "").replace(")", "")}, 0.5)` : color.includes(",") ? `rgba(${color}, 0.5)` : color;
59
+ return /* @__PURE__ */ jsxs(
60
+ "div",
61
+ {
62
+ ref: containerRef,
63
+ className: `ds-cursor-spotlight ${className || ""}`,
64
+ style: {
65
+ "--spotlight-x": `${position.x}px`,
66
+ "--spotlight-y": `${position.y}px`,
67
+ "--spotlight-size": `${size}px`,
68
+ "--spotlight-color": spotlightColor,
69
+ "--spotlight-border-color": borderColor,
70
+ "--spotlight-opacity": isHovering ? 1 : 0
71
+ },
72
+ "data-hovering": isHovering,
73
+ "data-border-glow": borderGlow,
74
+ children: [
75
+ /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__glow", "aria-hidden": "true" }),
76
+ borderGlow && /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__border", "aria-hidden": "true" }),
77
+ /* @__PURE__ */ jsx("div", { className: "ds-cursor-spotlight__content", children })
78
+ ]
79
+ }
80
+ );
81
+ };
82
+ CursorSpotlight.displayName = "CursorSpotlight";
83
+ var SpotlightCard = ({
84
+ title,
85
+ description,
86
+ icon,
87
+ children,
88
+ onClick,
89
+ ...spotlightProps
90
+ }) => {
91
+ return /* @__PURE__ */ jsx(CursorSpotlight, { ...spotlightProps, className: "ds-spotlight-card", children: /* @__PURE__ */ jsxs(
92
+ "div",
93
+ {
94
+ className: "ds-spotlight-card__inner",
95
+ onClick,
96
+ role: onClick ? "button" : void 0,
97
+ tabIndex: onClick ? 0 : void 0,
98
+ onKeyDown: onClick ? (e) => {
99
+ if (e.key === "Enter" || e.key === " ") {
100
+ e.preventDefault();
101
+ onClick();
102
+ }
103
+ } : void 0,
104
+ children: [
105
+ icon && /* @__PURE__ */ jsx("div", { className: "ds-spotlight-card__icon", children: icon }),
106
+ title && /* @__PURE__ */ jsx("h3", { className: "ds-spotlight-card__title", children: title }),
107
+ description && /* @__PURE__ */ jsx("p", { className: "ds-spotlight-card__description", children: description }),
108
+ children
109
+ ]
110
+ }
111
+ ) });
112
+ };
113
+ SpotlightCard.displayName = "SpotlightCard";
114
+ var MotionContainer = ({
115
+ children,
116
+ viewportMargin = "-10%",
117
+ once = true,
118
+ stagger = false,
119
+ delay = 0,
120
+ className,
121
+ ...props
122
+ }) => {
123
+ const ref = useRef(null);
124
+ const isInView = useInView(ref, {
125
+ once,
126
+ margin: viewportMargin
127
+ });
128
+ const variants = stagger ? VARIANTS.staggerContainer : VARIANTS.fadeIn;
129
+ return /* @__PURE__ */ jsx(
130
+ motion.div,
131
+ {
132
+ ref,
133
+ initial: "hidden",
134
+ animate: isInView ? "visible" : "hidden",
135
+ variants,
136
+ transition: { delay },
137
+ className,
138
+ ...props,
139
+ children
140
+ }
141
+ );
142
+ };
143
+ var MotionText = ({
144
+ text,
145
+ type = "word",
146
+ highlightWords = [],
147
+ className,
148
+ ...props
149
+ }) => {
150
+ const items = type === "word" ? text.split(" ") : text.split("");
151
+ const containerVariants = {
152
+ hidden: { opacity: 0 },
153
+ visible: {
154
+ opacity: 1,
155
+ transition: {
156
+ staggerChildren: type === "word" ? 0.05 : 0.02,
157
+ delayChildren: 0.1
158
+ }
159
+ }
160
+ };
161
+ const itemVariants = {
162
+ hidden: { opacity: 0, y: 10 },
163
+ visible: {
164
+ opacity: 1,
165
+ y: 0,
166
+ transition: { duration: MOTION.DURATION.short, ease: MOTION.EASING.standard }
167
+ }
168
+ };
169
+ return /* @__PURE__ */ jsx(
170
+ motion.div,
171
+ {
172
+ variants: containerVariants,
173
+ initial: "hidden",
174
+ whileInView: "visible",
175
+ viewport: { once: true, margin: "-10%" },
176
+ className,
177
+ ...props,
178
+ style: {
179
+ display: "flex",
180
+ flexWrap: "wrap",
181
+ gap: type === "word" ? "0.25em" : "0.05em",
182
+ ...props.style
183
+ },
184
+ children: items.map((item, i) => {
185
+ const isHighlighted = highlightWords.includes(item.replace(/[^a-zA-Z0-9]/g, ""));
186
+ return /* @__PURE__ */ jsxs(
187
+ motion.span,
188
+ {
189
+ variants: itemVariants,
190
+ style: {
191
+ color: isHighlighted ? "var(--brand-pink)" : "inherit",
192
+ fontWeight: isHighlighted ? 600 : "inherit"
193
+ },
194
+ children: [
195
+ item,
196
+ type === "word" && "\xA0"
197
+ ]
198
+ },
199
+ i
200
+ );
201
+ })
202
+ }
203
+ );
204
+ };
205
+ var steps = [
206
+ {
207
+ id: "test",
208
+ label: "Test Audience & Messaging",
209
+ icon: /* @__PURE__ */ jsx(
210
+ "svg",
211
+ {
212
+ width: "24",
213
+ height: "24",
214
+ viewBox: "0 0 24 24",
215
+ fill: "none",
216
+ xmlns: "http://www.w3.org/2000/svg",
217
+ children: /* @__PURE__ */ jsx(
218
+ "path",
219
+ {
220
+ d: "M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z",
221
+ stroke: "currentColor",
222
+ strokeWidth: "2",
223
+ strokeLinecap: "round",
224
+ strokeLinejoin: "round"
225
+ }
226
+ )
227
+ }
228
+ )
229
+ },
230
+ {
231
+ id: "execute",
232
+ label: "Execute Outreach",
233
+ icon: /* @__PURE__ */ jsx(
234
+ "svg",
235
+ {
236
+ width: "24",
237
+ height: "24",
238
+ viewBox: "0 0 24 24",
239
+ fill: "none",
240
+ xmlns: "http://www.w3.org/2000/svg",
241
+ children: /* @__PURE__ */ jsx(
242
+ "path",
243
+ {
244
+ d: "M22 2L11 13M22 2L15 22L11 13M11 13L2 9L22 2Z",
245
+ stroke: "currentColor",
246
+ strokeWidth: "2",
247
+ strokeLinecap: "round",
248
+ strokeLinejoin: "round"
249
+ }
250
+ )
251
+ }
252
+ )
253
+ },
254
+ {
255
+ id: "results",
256
+ label: "Book Meetings",
257
+ icon: /* @__PURE__ */ jsx(
258
+ "svg",
259
+ {
260
+ width: "24",
261
+ height: "24",
262
+ viewBox: "0 0 24 24",
263
+ fill: "none",
264
+ xmlns: "http://www.w3.org/2000/svg",
265
+ children: /* @__PURE__ */ jsx(
266
+ "path",
267
+ {
268
+ d: "M8 7V3M16 7V3M7 11H17M5 21H19C20.1046 21 21 20.1046 21 19V7C21 5.89543 20.1046 5 19 5H5C3.89543 5 3 5.89543 3 7V19C3 20.1046 3.89543 21 5 21Z",
269
+ stroke: "currentColor",
270
+ strokeWidth: "2",
271
+ strokeLinecap: "round",
272
+ strokeLinejoin: "round"
273
+ }
274
+ )
275
+ }
276
+ )
277
+ }
278
+ ];
279
+ var RevenueAutomationLoop = ({ className }) => {
280
+ return /* @__PURE__ */ jsx("div", { className: clsx2("ds-revenue-loop", className), children: /* @__PURE__ */ jsxs("div", { className: "ds-revenue-loop__circle", children: [
281
+ /* @__PURE__ */ jsxs(
282
+ "svg",
283
+ {
284
+ className: "ds-revenue-loop__ring",
285
+ viewBox: "0 0 400 400",
286
+ fill: "none",
287
+ xmlns: "http://www.w3.org/2000/svg",
288
+ children: [
289
+ /* @__PURE__ */ jsxs("defs", { children: [
290
+ /* @__PURE__ */ jsxs("linearGradient", { id: "loopGradient", x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
291
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
292
+ /* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "var(--brand-yellow)" }),
293
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-pink)" })
294
+ ] }),
295
+ /* @__PURE__ */ jsx(
296
+ "marker",
297
+ {
298
+ id: "arrowhead",
299
+ markerWidth: "10",
300
+ markerHeight: "7",
301
+ refX: "9",
302
+ refY: "3.5",
303
+ orient: "auto",
304
+ children: /* @__PURE__ */ jsx("polygon", { points: "0 0, 10 3.5, 0 7", fill: "url(#loopGradient)" })
305
+ }
306
+ )
307
+ ] }),
308
+ /* @__PURE__ */ jsx(
309
+ "circle",
310
+ {
311
+ cx: "200",
312
+ cy: "200",
313
+ r: "190",
314
+ stroke: "var(--rim-light-bottom)",
315
+ strokeWidth: "1",
316
+ strokeDasharray: "4 4",
317
+ className: "ds-revenue-loop__track"
318
+ }
319
+ ),
320
+ /* @__PURE__ */ jsx(
321
+ motion.circle,
322
+ {
323
+ cx: "200",
324
+ cy: "200",
325
+ r: "190",
326
+ stroke: "url(#loopGradient)",
327
+ strokeWidth: "2",
328
+ fill: "none",
329
+ strokeLinecap: "round",
330
+ initial: { pathLength: 0, rotate: -90 },
331
+ animate: { pathLength: 1, rotate: -90 },
332
+ transition: {
333
+ duration: 4,
334
+ ease: "linear",
335
+ repeat: Infinity
336
+ }
337
+ }
338
+ )
339
+ ]
340
+ }
341
+ ),
342
+ /* @__PURE__ */ jsxs("div", { className: "ds-revenue-loop__hub", children: [
343
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__hub-glow" }),
344
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__hub-content", children: /* @__PURE__ */ jsx("span", { className: "ds-revenue-loop__logo", children: "AI" }) })
345
+ ] }),
346
+ steps.map((step, index) => {
347
+ const angle = index * 360 / steps.length - 90;
348
+ const radius = 190;
349
+ const x = 200 + radius * Math.cos(angle * Math.PI / 180);
350
+ const y = 200 + radius * Math.sin(angle * Math.PI / 180);
351
+ return /* @__PURE__ */ jsxs(
352
+ motion.div,
353
+ {
354
+ className: "ds-revenue-loop__node",
355
+ style: {
356
+ left: `${x / 400 * 100}%`,
357
+ top: `${y / 400 * 100}%`
358
+ },
359
+ initial: { opacity: 0, scale: 0.8 },
360
+ animate: { opacity: 1, scale: 1 },
361
+ transition: { delay: index * 0.5 },
362
+ children: [
363
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__icon", children: step.icon }),
364
+ /* @__PURE__ */ jsx("div", { className: "ds-revenue-loop__label", children: step.label })
365
+ ]
366
+ },
367
+ step.id
368
+ );
369
+ })
370
+ ] }) });
371
+ };
372
+ var EASE_PREMIUM = [0.22, 1, 0.36, 1];
373
+ var SCENE_TIMING = {
374
+ init: 0,
375
+ funnel: 1500,
376
+ qualification: 3500,
377
+ meeting: 5500,
378
+ mapping: 6500,
379
+ scaling: 8500
380
+ };
381
+ var HOLD_DURATION = 1200;
382
+ var TOTAL_DURATION = 1e4 + HOLD_DURATION;
383
+ var LINKEDIN_STEPS = [
384
+ { id: "follow", label: "Profile Follow" },
385
+ { id: "visit", label: "Profile Visit" },
386
+ { id: "connect", label: "Connection Request" },
387
+ { id: "msg1", label: "Message 1" },
388
+ { id: "msg2", label: "Message 2" },
389
+ { id: "msg3", label: "Message 3" }
390
+ ];
391
+ var FUNNEL_STAGES = [
392
+ { id: "awareness", label: "Awareness", num: 1 },
393
+ { id: "discovery", label: "Discovery", num: 2 },
394
+ { id: "evaluation", label: "Evaluation", num: 3 },
395
+ { id: "intent", label: "Intent", num: 4 },
396
+ { id: "negotiation", label: "Negotiation", num: 5 },
397
+ { id: "purchase", label: "Purchase", num: 6 }
398
+ ];
399
+ var WINNING_BULLETS = [
400
+ "Target audience validated & segmented",
401
+ "Messaging sequence A/B tested",
402
+ "Optimal send times confirmed",
403
+ "Response rate > benchmark threshold",
404
+ "Conversion path verified end-to-end"
405
+ ];
406
+ var SCALING_CHECKS = [
407
+ "Volume multiplied to 9 senders",
408
+ "All sequences templated & locked",
409
+ "Auto-qualification active",
410
+ "Meeting pipeline on autopilot"
411
+ ];
412
+ var AntSVG = ({ size = 28, className }) => /* @__PURE__ */ jsxs(
413
+ "svg",
414
+ {
415
+ className,
416
+ width: size,
417
+ height: size,
418
+ viewBox: "0 0 28 28",
419
+ fill: "none",
420
+ xmlns: "http://www.w3.org/2000/svg",
421
+ "aria-hidden": "true",
422
+ children: [
423
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: "antGrad", x1: "0", y1: "0", x2: "28", y2: "28", gradientUnits: "userSpaceOnUse", children: [
424
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
425
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
426
+ ] }) }),
427
+ /* @__PURE__ */ jsx("circle", { cx: "14", cy: "6", r: "4", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
428
+ /* @__PURE__ */ jsx(
429
+ "line",
430
+ {
431
+ x1: "11",
432
+ y1: "3",
433
+ x2: "7",
434
+ y2: "0.5",
435
+ stroke: "rgba(255,255,255,0.1)",
436
+ strokeWidth: "1",
437
+ strokeLinecap: "round"
438
+ }
439
+ ),
440
+ /* @__PURE__ */ jsx(
441
+ "line",
442
+ {
443
+ x1: "17",
444
+ y1: "3",
445
+ x2: "21",
446
+ y2: "0.5",
447
+ stroke: "rgba(255,255,255,0.1)",
448
+ strokeWidth: "1",
449
+ strokeLinecap: "round"
450
+ }
451
+ ),
452
+ /* @__PURE__ */ jsx("ellipse", { cx: "14", cy: "13", rx: "3.5", ry: "3", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
453
+ /* @__PURE__ */ jsx("ellipse", { cx: "14", cy: "22", rx: "5", ry: "5", stroke: "url(#antGrad)", strokeWidth: "1.2", fill: "none" }),
454
+ /* @__PURE__ */ jsx(
455
+ "line",
456
+ {
457
+ x1: "10.5",
458
+ y1: "11",
459
+ x2: "5",
460
+ y2: "9",
461
+ stroke: "rgba(255,255,255,0.1)",
462
+ strokeWidth: "0.8",
463
+ strokeLinecap: "round"
464
+ }
465
+ ),
466
+ /* @__PURE__ */ jsx(
467
+ "line",
468
+ {
469
+ x1: "17.5",
470
+ y1: "11",
471
+ x2: "23",
472
+ y2: "9",
473
+ stroke: "rgba(255,255,255,0.1)",
474
+ strokeWidth: "0.8",
475
+ strokeLinecap: "round"
476
+ }
477
+ ),
478
+ /* @__PURE__ */ jsx(
479
+ "line",
480
+ {
481
+ x1: "10.5",
482
+ y1: "13",
483
+ x2: "4",
484
+ y2: "14",
485
+ stroke: "rgba(255,255,255,0.1)",
486
+ strokeWidth: "0.8",
487
+ strokeLinecap: "round"
488
+ }
489
+ ),
490
+ /* @__PURE__ */ jsx(
491
+ "line",
492
+ {
493
+ x1: "17.5",
494
+ y1: "13",
495
+ x2: "24",
496
+ y2: "14",
497
+ stroke: "rgba(255,255,255,0.1)",
498
+ strokeWidth: "0.8",
499
+ strokeLinecap: "round"
500
+ }
501
+ ),
502
+ /* @__PURE__ */ jsx(
503
+ "line",
504
+ {
505
+ x1: "10.5",
506
+ y1: "15",
507
+ x2: "5",
508
+ y2: "18",
509
+ stroke: "rgba(255,255,255,0.1)",
510
+ strokeWidth: "0.8",
511
+ strokeLinecap: "round"
512
+ }
513
+ ),
514
+ /* @__PURE__ */ jsx(
515
+ "line",
516
+ {
517
+ x1: "17.5",
518
+ y1: "15",
519
+ x2: "23",
520
+ y2: "18",
521
+ stroke: "rgba(255,255,255,0.1)",
522
+ strokeWidth: "0.8",
523
+ strokeLinecap: "round"
524
+ }
525
+ ),
526
+ /* @__PURE__ */ jsx("circle", { cx: "12.5", cy: "5.5", r: "0.8", fill: "url(#antGrad)" }),
527
+ /* @__PURE__ */ jsx("circle", { cx: "15.5", cy: "5.5", r: "0.8", fill: "url(#antGrad)" })
528
+ ]
529
+ }
530
+ );
531
+ var SwarmAntSVG = () => /* @__PURE__ */ jsxs(
532
+ "svg",
533
+ {
534
+ width: "16",
535
+ height: "16",
536
+ viewBox: "0 0 16 16",
537
+ fill: "none",
538
+ xmlns: "http://www.w3.org/2000/svg",
539
+ "aria-hidden": "true",
540
+ children: [
541
+ /* @__PURE__ */ jsx("circle", { cx: "8", cy: "3.5", r: "2.5", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" }),
542
+ /* @__PURE__ */ jsx("ellipse", { cx: "8", cy: "8", rx: "2", ry: "1.8", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" }),
543
+ /* @__PURE__ */ jsx("ellipse", { cx: "8", cy: "13", rx: "3", ry: "3", stroke: "url(#antGrad)", strokeWidth: "0.8", fill: "none" })
544
+ ]
545
+ }
546
+ );
547
+ var CalendarIcon = () => /* @__PURE__ */ jsxs(
548
+ "svg",
549
+ {
550
+ width: "20",
551
+ height: "20",
552
+ viewBox: "0 0 20 20",
553
+ fill: "none",
554
+ xmlns: "http://www.w3.org/2000/svg",
555
+ "aria-hidden": "true",
556
+ children: [
557
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "4", width: "16", height: "14", rx: "2", stroke: "currentColor", strokeWidth: "1.5" }),
558
+ /* @__PURE__ */ jsx("line", { x1: "2", y1: "8", x2: "18", y2: "8", stroke: "currentColor", strokeWidth: "1.5" }),
559
+ /* @__PURE__ */ jsx(
560
+ "line",
561
+ {
562
+ x1: "6",
563
+ y1: "2",
564
+ x2: "6",
565
+ y2: "6",
566
+ stroke: "currentColor",
567
+ strokeWidth: "1.5",
568
+ strokeLinecap: "round"
569
+ }
570
+ ),
571
+ /* @__PURE__ */ jsx(
572
+ "line",
573
+ {
574
+ x1: "14",
575
+ y1: "2",
576
+ x2: "14",
577
+ y2: "6",
578
+ stroke: "currentColor",
579
+ strokeWidth: "1.5",
580
+ strokeLinecap: "round"
581
+ }
582
+ ),
583
+ /* @__PURE__ */ jsx("rect", { x: "5", y: "10", width: "3", height: "3", rx: "0.5", fill: "currentColor", opacity: "0.5" })
584
+ ]
585
+ }
586
+ );
587
+ var LockIcon = () => /* @__PURE__ */ jsxs(
588
+ "svg",
589
+ {
590
+ width: "12",
591
+ height: "12",
592
+ viewBox: "0 0 12 12",
593
+ fill: "none",
594
+ xmlns: "http://www.w3.org/2000/svg",
595
+ "aria-hidden": "true",
596
+ children: [
597
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "5", width: "8", height: "6", rx: "1.5", stroke: "currentColor", strokeWidth: "1.2" }),
598
+ /* @__PURE__ */ jsx(
599
+ "path",
600
+ {
601
+ d: "M4 5V3.5C4 2.4 4.9 1.5 6 1.5C7.1 1.5 8 2.4 8 3.5V5",
602
+ stroke: "currentColor",
603
+ strokeWidth: "1.2",
604
+ strokeLinecap: "round"
605
+ }
606
+ )
607
+ ]
608
+ }
609
+ );
610
+ var CheckIcon = () => /* @__PURE__ */ jsxs(
611
+ "svg",
612
+ {
613
+ className: "ds-funnel-scaling__scaling-check",
614
+ width: "14",
615
+ height: "14",
616
+ viewBox: "0 0 14 14",
617
+ fill: "none",
618
+ xmlns: "http://www.w3.org/2000/svg",
619
+ "aria-hidden": "true",
620
+ children: [
621
+ /* @__PURE__ */ jsx("circle", { cx: "7", cy: "7", r: "6", stroke: "currentColor", strokeWidth: "1.2" }),
622
+ /* @__PURE__ */ jsx(
623
+ "polyline",
624
+ {
625
+ points: "4,7 6,9.5 10,4.5",
626
+ stroke: "currentColor",
627
+ strokeWidth: "1.4",
628
+ strokeLinecap: "round",
629
+ strokeLinejoin: "round",
630
+ fill: "none"
631
+ }
632
+ )
633
+ ]
634
+ }
635
+ );
636
+ var NodeDot = () => /* @__PURE__ */ jsxs(
637
+ "svg",
638
+ {
639
+ className: "ds-funnel-scaling__flow-icon",
640
+ width: "20",
641
+ height: "20",
642
+ viewBox: "0 0 20 20",
643
+ fill: "none",
644
+ xmlns: "http://www.w3.org/2000/svg",
645
+ "aria-hidden": "true",
646
+ children: [
647
+ /* @__PURE__ */ jsx("circle", { cx: "10", cy: "10", r: "4", stroke: "currentColor", strokeWidth: "1.5" }),
648
+ /* @__PURE__ */ jsx("circle", { cx: "10", cy: "10", r: "1.5", fill: "currentColor" })
649
+ ]
650
+ }
651
+ );
652
+ var containerStagger = {
653
+ hidden: { opacity: 0 },
654
+ show: {
655
+ opacity: 1,
656
+ transition: { staggerChildren: 0.1 }
657
+ }
658
+ };
659
+ var cardReveal = {
660
+ hidden: { opacity: 0, y: 40 },
661
+ show: {
662
+ opacity: 1,
663
+ y: 0,
664
+ transition: { duration: 0.6, ease: EASE_PREMIUM }
665
+ }
666
+ };
667
+ var bulletStagger = {
668
+ hidden: { opacity: 0, x: -8 },
669
+ show: {
670
+ opacity: 1,
671
+ x: 0,
672
+ transition: { duration: 0.3, ease: EASE_PREMIUM }
673
+ }
674
+ };
675
+ var stepNode = {
676
+ hidden: { opacity: 0, scaleY: 0.85 },
677
+ show: {
678
+ opacity: 1,
679
+ scaleY: 1,
680
+ transition: { duration: 0.35, ease: EASE_PREMIUM }
681
+ }
682
+ };
683
+ var funnelLayer = {
684
+ hidden: { opacity: 0, y: 20 },
685
+ show: {
686
+ opacity: 1,
687
+ y: 0,
688
+ transition: { duration: 0.4, ease: EASE_PREMIUM }
689
+ }
690
+ };
691
+ var fadeSlideUp = {
692
+ hidden: { opacity: 0, y: 30 },
693
+ show: {
694
+ opacity: 1,
695
+ y: 0,
696
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
697
+ }
698
+ };
699
+ var scalePulse = {
700
+ hidden: { scale: 1 },
701
+ show: {
702
+ scale: [1, 1.04, 1],
703
+ transition: { duration: 0.6, ease: EASE_PREMIUM }
704
+ }
705
+ };
706
+ var swarmEntry = {
707
+ hidden: { opacity: 0, scale: 0.8 },
708
+ show: {
709
+ opacity: 1,
710
+ scale: 1,
711
+ transition: { duration: 0.35, ease: EASE_PREMIUM }
712
+ }
713
+ };
714
+ var qualBlockLeft = {
715
+ hidden: { opacity: 0, x: -60 },
716
+ show: {
717
+ opacity: 1,
718
+ x: 0,
719
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
720
+ }
721
+ };
722
+ var qualBlockRight = {
723
+ hidden: { opacity: 0, x: 60 },
724
+ show: {
725
+ opacity: 1,
726
+ x: 0,
727
+ transition: { duration: 0.5, ease: EASE_PREMIUM }
728
+ }
729
+ };
730
+ function useSceneTimeline(isInView, autoPlay, loop, reducedMotion) {
731
+ const [scene, setScene] = useState("idle");
732
+ const timerRef = useRef([]);
733
+ const clearTimers = useCallback(() => {
734
+ timerRef.current.forEach(clearTimeout);
735
+ timerRef.current = [];
736
+ }, []);
737
+ const startTimeline = useCallback(() => {
738
+ clearTimers();
739
+ const scenes = [
740
+ "init",
741
+ "funnel",
742
+ "qualification",
743
+ "meeting",
744
+ "mapping",
745
+ "scaling"
746
+ ];
747
+ if (reducedMotion) {
748
+ setScene("scaling");
749
+ return;
750
+ }
751
+ scenes.forEach((s) => {
752
+ const id = setTimeout(() => setScene(s), SCENE_TIMING[s]);
753
+ timerRef.current.push(id);
754
+ });
755
+ if (loop) {
756
+ const loopId = setTimeout(() => {
757
+ setScene("idle");
758
+ const restartId = setTimeout(() => startTimeline(), 100);
759
+ timerRef.current.push(restartId);
760
+ }, TOTAL_DURATION);
761
+ timerRef.current.push(loopId);
762
+ }
763
+ }, [clearTimers, loop, reducedMotion]);
764
+ useEffect(() => {
765
+ if (isInView && autoPlay) {
766
+ startTimeline();
767
+ }
768
+ return clearTimers;
769
+ }, [isInView, autoPlay, startTimeline, clearTimers]);
770
+ return scene;
771
+ }
772
+ function isAtOrPast(current, target) {
773
+ const order = [
774
+ "idle",
775
+ "init",
776
+ "funnel",
777
+ "qualification",
778
+ "meeting",
779
+ "mapping",
780
+ "scaling"
781
+ ];
782
+ return order.indexOf(current) >= order.indexOf(target);
783
+ }
784
+ var FunnelScalingSender = ({
785
+ className,
786
+ autoPlay = true,
787
+ loop = true
788
+ }) => {
789
+ const containerRef = useRef(null);
790
+ const isInView = useInView(containerRef, { once: false, amount: 0.3 });
791
+ const reducedMotion = useReducedMotion();
792
+ const scene = useSceneTimeline(isInView, autoPlay, loop, reducedMotion);
793
+ const isActive = scene !== "idle";
794
+ const showInit = isAtOrPast(scene, "init");
795
+ const showFunnel = isAtOrPast(scene, "funnel");
796
+ const showQualification = isAtOrPast(scene, "qualification");
797
+ const showMeeting = isAtOrPast(scene, "meeting");
798
+ const showMapping = isAtOrPast(scene, "mapping");
799
+ const showScaling = isAtOrPast(scene, "scaling");
800
+ return /* @__PURE__ */ jsxs(
801
+ "div",
802
+ {
803
+ ref: containerRef,
804
+ className: clsx2("ds-funnel-scaling", className),
805
+ role: "img",
806
+ "aria-label": "Animated illustration: SalesMind scaling funnel from the sender perspective \u2014 showing how validated outreach becomes an automated pipeline machine",
807
+ children: [
808
+ /* @__PURE__ */ jsx(
809
+ motion.div,
810
+ {
811
+ className: "ds-funnel-scaling__bg",
812
+ initial: { opacity: 0 },
813
+ animate: { opacity: isActive ? 1 : 0 },
814
+ transition: { duration: 0.4 }
815
+ }
816
+ ),
817
+ /* @__PURE__ */ jsx(
818
+ motion.div,
819
+ {
820
+ className: "ds-funnel-scaling__grid",
821
+ initial: { opacity: 0 },
822
+ animate: { opacity: isActive ? 1 : 0 },
823
+ transition: { duration: 0.4, delay: 0.6 }
824
+ }
825
+ ),
826
+ /* @__PURE__ */ jsx("svg", { width: "0", height: "0", "aria-hidden": "true", style: { position: "absolute" }, children: /* @__PURE__ */ jsxs("defs", { children: [
827
+ /* @__PURE__ */ jsxs("linearGradient", { id: "antGrad", x1: "0", y1: "0", x2: "28", y2: "28", gradientUnits: "userSpaceOnUse", children: [
828
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
829
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
830
+ ] }),
831
+ /* @__PURE__ */ jsxs("linearGradient", { id: "fscFlowGrad", x1: "0", y1: "0", x2: "0", y2: "1", children: [
832
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
833
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
834
+ ] }),
835
+ /* @__PURE__ */ jsxs("linearGradient", { id: "fscQualGrad", x1: "0", y1: "0", x2: "1", y2: "1", children: [
836
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "var(--brand-pink)" }),
837
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "var(--brand-yellow)" })
838
+ ] })
839
+ ] }) }),
840
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__canvas", children: [
841
+ /* @__PURE__ */ jsxs(
842
+ motion.div,
843
+ {
844
+ className: "ds-funnel-scaling__winning-card",
845
+ variants: cardReveal,
846
+ initial: "hidden",
847
+ animate: showInit ? "show" : "hidden",
848
+ children: [
849
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__winning-header", children: "Solution" }),
850
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__winning-title", children: "Winning Combination" }),
851
+ /* @__PURE__ */ jsx(
852
+ motion.ul,
853
+ {
854
+ className: "ds-funnel-scaling__winning-bullets",
855
+ variants: containerStagger,
856
+ initial: "hidden",
857
+ animate: showInit ? "show" : "hidden",
858
+ children: WINNING_BULLETS.map((bullet) => /* @__PURE__ */ jsx(
859
+ motion.li,
860
+ {
861
+ className: "ds-funnel-scaling__winning-bullet",
862
+ variants: bulletStagger,
863
+ children: bullet
864
+ },
865
+ bullet
866
+ ))
867
+ }
868
+ ),
869
+ /* @__PURE__ */ jsxs(
870
+ motion.div,
871
+ {
872
+ className: "ds-funnel-scaling__winning-lock",
873
+ initial: { opacity: 0 },
874
+ animate: { opacity: showInit ? 1 : 0 },
875
+ transition: { delay: 0.8, duration: 0.4 },
876
+ children: [
877
+ /* @__PURE__ */ jsx(LockIcon, {}),
878
+ " Validated & Locked"
879
+ ]
880
+ }
881
+ )
882
+ ]
883
+ }
884
+ ),
885
+ /* @__PURE__ */ jsxs(
886
+ motion.div,
887
+ {
888
+ className: "ds-funnel-scaling__flow",
889
+ variants: containerStagger,
890
+ initial: "hidden",
891
+ animate: showFunnel ? "show" : "hidden",
892
+ children: [
893
+ LINKEDIN_STEPS.map((step, i) => /* @__PURE__ */ jsxs(React3.Fragment, { children: [
894
+ /* @__PURE__ */ jsxs(
895
+ motion.div,
896
+ {
897
+ className: clsx2(
898
+ "ds-funnel-scaling__flow-node",
899
+ showFunnel && "ds-funnel-scaling__flow-node--active"
900
+ ),
901
+ variants: stepNode,
902
+ custom: i,
903
+ children: [
904
+ /* @__PURE__ */ jsx(NodeDot, {}),
905
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__flow-label", children: step.label })
906
+ ]
907
+ }
908
+ ),
909
+ i < LINKEDIN_STEPS.length - 1 && /* @__PURE__ */ jsx(
910
+ motion.svg,
911
+ {
912
+ className: "ds-funnel-scaling__flow-connector",
913
+ width: "2",
914
+ height: "12",
915
+ viewBox: "0 0 2 12",
916
+ initial: { scaleY: 0, opacity: 0 },
917
+ animate: showFunnel ? { scaleY: 1, opacity: 1 } : { scaleY: 0, opacity: 0 },
918
+ transition: { duration: 0.3, delay: 0.1 * (i + 1), ease: EASE_PREMIUM },
919
+ style: { transformOrigin: "top" },
920
+ children: /* @__PURE__ */ jsx("rect", { width: "2", height: "12", fill: "url(#fscFlowGrad)", rx: "1" })
921
+ }
922
+ )
923
+ ] }, step.id)),
924
+ showFunnel && /* @__PURE__ */ jsx("div", { style: { position: "relative", height: 0 }, children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
925
+ motion.div,
926
+ {
927
+ className: "ds-funnel-scaling__ant ds-funnel-scaling__ant--ghost",
928
+ initial: { opacity: 0, x: -20 + i * 15, y: -10 },
929
+ animate: showFunnel ? { opacity: 0.35, x: -10 + i * 18, y: 0 } : { opacity: 0 },
930
+ transition: { delay: 1.2 + i * 0.15, duration: 0.4, ease: EASE_PREMIUM },
931
+ style: { position: "absolute" },
932
+ children: /* @__PURE__ */ jsx(AntSVG, { size: 20 })
933
+ },
934
+ `ghost-${i}`
935
+ )) })
936
+ ]
937
+ }
938
+ ),
939
+ /* @__PURE__ */ jsxs(
940
+ motion.div,
941
+ {
942
+ className: "ds-funnel-scaling__qualification",
943
+ initial: { opacity: 0, scale: 0.9 },
944
+ animate: showQualification ? { opacity: 1, scale: 1 } : { opacity: 0, scale: 0.9 },
945
+ transition: { duration: 0.6, ease: EASE_PREMIUM },
946
+ children: [
947
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__qual-ring", children: [
948
+ /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 180 180", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
949
+ /* @__PURE__ */ jsx("circle", { cx: "90", cy: "90", r: "70", stroke: "rgba(255,255,255,0.06)", strokeWidth: "1" }),
950
+ /* @__PURE__ */ jsx(
951
+ motion.circle,
952
+ {
953
+ cx: "90",
954
+ cy: "90",
955
+ r: "70",
956
+ stroke: "url(#fscQualGrad)",
957
+ strokeWidth: "2",
958
+ fill: "none",
959
+ strokeLinecap: "round",
960
+ strokeDasharray: "440",
961
+ initial: { strokeDashoffset: 440 },
962
+ animate: showQualification ? { strokeDashoffset: 0 } : { strokeDashoffset: 440 },
963
+ transition: { duration: 0.8, ease: EASE_PREMIUM }
964
+ }
965
+ ),
966
+ /* @__PURE__ */ jsx(
967
+ motion.polygon,
968
+ {
969
+ points: "155,80 165,90 155,100",
970
+ fill: "var(--brand-pink)",
971
+ initial: { opacity: 0 },
972
+ animate: showQualification ? { opacity: 0.7 } : { opacity: 0 },
973
+ transition: { delay: 0.6, duration: 0.3 }
974
+ }
975
+ ),
976
+ /* @__PURE__ */ jsx(
977
+ motion.polygon,
978
+ {
979
+ points: "25,100 15,90 25,80",
980
+ fill: "var(--brand-yellow)",
981
+ initial: { opacity: 0 },
982
+ animate: showQualification ? { opacity: 0.7 } : { opacity: 0 },
983
+ transition: { delay: 0.7, duration: 0.3 }
984
+ }
985
+ )
986
+ ] }),
987
+ /* @__PURE__ */ jsx(
988
+ motion.div,
989
+ {
990
+ className: "ds-funnel-scaling__qual-center",
991
+ initial: { opacity: 0 },
992
+ animate: showQualification ? { opacity: 1 } : { opacity: 0 },
993
+ transition: { delay: 0.8, duration: 0.4 },
994
+ children: /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__qual-text", children: "Qualification happens during the conversation" })
995
+ }
996
+ ),
997
+ showQualification && !reducedMotion && /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: showScaling ? 9 : 3 }).map((_, i) => /* @__PURE__ */ jsx(
998
+ motion.div,
999
+ {
1000
+ className: "ds-funnel-scaling__swarm-ant",
1001
+ variants: swarmEntry,
1002
+ initial: "hidden",
1003
+ animate: "show",
1004
+ transition: { delay: i * 0.08 },
1005
+ style: {
1006
+ animationDelay: `${-(i * (3 / (showScaling ? 9 : 3)))}s`
1007
+ },
1008
+ children: /* @__PURE__ */ jsx(SwarmAntSVG, {})
1009
+ },
1010
+ `swarm-${i}`
1011
+ )) })
1012
+ ] }),
1013
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__qual-blocks", children: [
1014
+ /* @__PURE__ */ jsx(
1015
+ motion.div,
1016
+ {
1017
+ className: "ds-funnel-scaling__qual-block",
1018
+ variants: qualBlockLeft,
1019
+ initial: "hidden",
1020
+ animate: showQualification ? "show" : "hidden",
1021
+ children: "Reply Handling"
1022
+ }
1023
+ ),
1024
+ /* @__PURE__ */ jsx(
1025
+ motion.div,
1026
+ {
1027
+ className: "ds-funnel-scaling__qual-block",
1028
+ variants: qualBlockRight,
1029
+ initial: "hidden",
1030
+ animate: showQualification ? "show" : "hidden",
1031
+ children: "Follow-up Sequence"
1032
+ }
1033
+ )
1034
+ ] })
1035
+ ]
1036
+ }
1037
+ ),
1038
+ /* @__PURE__ */ jsxs(
1039
+ motion.div,
1040
+ {
1041
+ className: "ds-funnel-scaling__funnel",
1042
+ variants: containerStagger,
1043
+ initial: "hidden",
1044
+ animate: showMapping ? "show" : "hidden",
1045
+ children: [
1046
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__funnel-header", children: "Sales Funnel Stages" }),
1047
+ FUNNEL_STAGES.map((stage) => {
1048
+ const isHighlight = stage.id === "evaluation" || stage.id === "intent";
1049
+ const isDim = showMapping && !isHighlight;
1050
+ return /* @__PURE__ */ jsxs(
1051
+ motion.div,
1052
+ {
1053
+ className: clsx2(
1054
+ "ds-funnel-scaling__funnel-stage",
1055
+ isHighlight && showMapping && "ds-funnel-scaling__funnel-stage--highlight",
1056
+ isDim && "ds-funnel-scaling__funnel-stage--dim"
1057
+ ),
1058
+ variants: funnelLayer,
1059
+ children: [
1060
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__funnel-num", children: stage.num }),
1061
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__funnel-label", children: stage.label })
1062
+ ]
1063
+ },
1064
+ stage.id
1065
+ );
1066
+ })
1067
+ ]
1068
+ }
1069
+ )
1070
+ ] }),
1071
+ /* @__PURE__ */ jsx(
1072
+ motion.div,
1073
+ {
1074
+ className: "ds-funnel-scaling__meeting",
1075
+ variants: fadeSlideUp,
1076
+ initial: "hidden",
1077
+ animate: showMeeting ? "show" : "hidden",
1078
+ children: /* @__PURE__ */ jsxs(
1079
+ motion.div,
1080
+ {
1081
+ variants: scalePulse,
1082
+ initial: "hidden",
1083
+ animate: showMeeting ? "show" : "hidden",
1084
+ style: { display: "flex", alignItems: "center", gap: "12px" },
1085
+ children: [
1086
+ /* @__PURE__ */ jsx("div", { className: "ds-funnel-scaling__meeting-icon", children: /* @__PURE__ */ jsx(CalendarIcon, {}) }),
1087
+ /* @__PURE__ */ jsx("span", { className: "ds-funnel-scaling__meeting-label", children: "Meeting Booked" })
1088
+ ]
1089
+ }
1090
+ )
1091
+ }
1092
+ ),
1093
+ showMeeting && showMapping && /* @__PURE__ */ jsxs(
1094
+ motion.svg,
1095
+ {
1096
+ className: "ds-funnel-scaling__data-line",
1097
+ style: { right: 240, bottom: 80, width: 120, height: 200 },
1098
+ viewBox: "0 0 120 200",
1099
+ initial: { opacity: 0 },
1100
+ animate: { opacity: 0.4 },
1101
+ transition: { delay: 0.3, duration: 0.5 },
1102
+ children: [
1103
+ /* @__PURE__ */ jsx(
1104
+ motion.path,
1105
+ {
1106
+ d: "M 0 200 C 20 150, 80 100, 120 40",
1107
+ stroke: "url(#fscFlowGrad)",
1108
+ strokeWidth: "1.5",
1109
+ fill: "none",
1110
+ strokeLinecap: "round",
1111
+ initial: { pathLength: 0 },
1112
+ animate: { pathLength: 1 },
1113
+ transition: { duration: 0.8, ease: EASE_PREMIUM, delay: 0.2 }
1114
+ }
1115
+ ),
1116
+ /* @__PURE__ */ jsx(
1117
+ motion.circle,
1118
+ {
1119
+ cx: "120",
1120
+ cy: "40",
1121
+ r: "3",
1122
+ fill: "var(--brand-pink)",
1123
+ initial: { opacity: 0, scale: 0 },
1124
+ animate: { opacity: 1, scale: 1 },
1125
+ transition: { delay: 1, duration: 0.3 }
1126
+ }
1127
+ )
1128
+ ]
1129
+ }
1130
+ ),
1131
+ /* @__PURE__ */ jsxs(
1132
+ motion.div,
1133
+ {
1134
+ className: "ds-funnel-scaling__scaling-panel",
1135
+ initial: { opacity: 0, y: 20 },
1136
+ animate: showScaling ? { opacity: 1, y: 0 } : { opacity: 0, y: 20 },
1137
+ transition: { duration: 0.5, ease: EASE_PREMIUM },
1138
+ children: [
1139
+ /* @__PURE__ */ jsxs("div", { className: "ds-funnel-scaling__scaling-header", children: [
1140
+ /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M6 1L11 6L6 11L1 6Z", stroke: "currentColor", strokeWidth: "1.2" }) }),
1141
+ "Scaling Mode"
1142
+ ] }),
1143
+ SCALING_CHECKS.map((item, i) => /* @__PURE__ */ jsxs(
1144
+ motion.div,
1145
+ {
1146
+ className: "ds-funnel-scaling__scaling-item",
1147
+ initial: { opacity: 0, x: -10 },
1148
+ animate: showScaling ? { opacity: 1, x: 0 } : { opacity: 0, x: -10 },
1149
+ transition: { delay: 0.15 + i * 0.12, duration: 0.35, ease: EASE_PREMIUM },
1150
+ children: [
1151
+ /* @__PURE__ */ jsx(
1152
+ motion.div,
1153
+ {
1154
+ initial: { scale: 0 },
1155
+ animate: showScaling ? { scale: 1 } : { scale: 0 },
1156
+ transition: { delay: 0.25 + i * 0.12, duration: 0.3, ease: EASE_PREMIUM },
1157
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
1158
+ }
1159
+ ),
1160
+ item
1161
+ ]
1162
+ },
1163
+ item
1164
+ ))
1165
+ ]
1166
+ }
1167
+ ),
1168
+ /* @__PURE__ */ jsx(
1169
+ motion.div,
1170
+ {
1171
+ className: "ds-funnel-scaling__ant",
1172
+ initial: { opacity: 0, x: -40, y: 100 },
1173
+ animate: showScaling ? { opacity: 1, x: 280, y: 60 } : showMapping ? { opacity: 1, x: 240, y: 160 } : showMeeting ? { opacity: 1, x: 400, y: 280 } : showQualification ? { opacity: 1, x: 380, y: 200 } : showFunnel ? { opacity: 1, x: 320, y: 40 } : showInit ? { opacity: 1, x: 220, y: 30 } : { opacity: 0, x: -40, y: 100 },
1174
+ transition: {
1175
+ duration: 0.8,
1176
+ ease: EASE_PREMIUM,
1177
+ opacity: { duration: 0.4 }
1178
+ },
1179
+ children: /* @__PURE__ */ jsx(AntSVG, {})
1180
+ }
1181
+ )
1182
+ ]
1183
+ }
1184
+ );
1185
+ };
1186
+ FunnelScalingSender.displayName = "FunnelScalingSender";
1187
+
1188
+ export { CursorSpotlight, FunnelScalingSender, MotionContainer, MotionText, RevenueAutomationLoop, SpotlightCard };
1189
+ //# sourceMappingURL=out.js.map
1190
+ //# sourceMappingURL=chunk-T343CCH5.js.map