@retinalabsllc/zairusjs 5.1.70 → 5.1.85

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.
package/dist/index.js CHANGED
@@ -32,8 +32,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  var index_exports = {};
33
33
  __export(index_exports, {
34
34
  AppBento2: () => AppBento2,
35
- Banner: () => Banner,
36
- CardLogo: () => CardLogo,
37
35
  ConsultantShowcase: () => ConsultantShowcase,
38
36
  ContentGridBlock: () => ContentGridBlock,
39
37
  Faq: () => Faq,
@@ -53,21 +51,11 @@ __export(index_exports, {
53
51
  MedicalFeatureStatsBlock: () => MedicalFeatureStatsBlock,
54
52
  NumberInput: () => NumberInput,
55
53
  PageSpinner: () => PageSpinner,
56
- PipleAuth: () => PipleAuth,
57
54
  PlatformFeatures: () => PlatformFeatures,
58
55
  PortfolioHero: () => PortfolioHero,
59
- Stagger: () => Stagger,
60
56
  TextInput: () => TextInput,
61
57
  ThreeDActionButton: () => ThreeDActionButton,
62
- ThreeDButton: () => ThreeDButton,
63
- UniversalErrorView: () => UniversalErrorView,
64
- UniversalHomeView: () => UniversalHomeView,
65
- UniversalOrganizationPage: () => UniversalOrganizationPage,
66
- UniversalProfileSettings: () => UniversalProfileSettings,
67
- UniversalSidebar: () => UniversalSidebar,
68
- UniversalTransactionPage: () => UniversalTransactionPage,
69
- UniversalWalletPage: () => UniversalWalletPage,
70
- ZairusAuth: () => ZairusAuth
58
+ ThreeDButton: () => ThreeDButton
71
59
  });
72
60
  module.exports = __toCommonJS(index_exports);
73
61
 
@@ -92,6 +80,7 @@ var Faq = ({
92
80
  }
93
81
  },
94
82
  { threshold: 0.1 }
83
+ // Triggers when 10% of the title is visible
95
84
  );
96
85
  if (titleRef.current) {
97
86
  observer.observe(titleRef.current);
@@ -101,11 +90,11 @@ var Faq = ({
101
90
  const toggleFaq = (index) => {
102
91
  setActiveFaq(activeFaq === index ? null : index);
103
92
  };
104
- return /* @__PURE__ */ import_react.default.createElement("div", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative bg-black" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-10 max-w-4xl w-full" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-center w-full" }, title && /* @__PURE__ */ import_react.default.createElement(
93
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col gap-10 max-w-4xl w-full" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "flex flex-col items-center w-full" }, title && /* @__PURE__ */ import_react.default.createElement(
105
94
  "h2",
106
95
  {
107
96
  ref: titleRef,
108
- className: `text-3xl text-white tracking-tight leading-[1.15] ${isAnimating ? "" : ""}`,
97
+ className: `text-3xl text-black tracking-tight leading-[1.15] ${isAnimating ? "" : ""}`,
109
98
  style: isAnimating ? { animationIterationCount: 1 } : {}
110
99
  },
111
100
  "FAQ"
@@ -113,10 +102,10 @@ var Faq = ({
113
102
  const isOpen = activeFaq === index;
114
103
  const getShadowStyle = () => {
115
104
  if (isOpen) return `
116
- inset 0 1.5px 0 0 rgba(255, 255, 255, 0.05),
117
- inset 0 -3px 0 0 rgba(0, 0, 0, 0.5),
118
- 0 4px 0 0 #000000,
119
- 0 12px 24px rgba(0, 0, 0, 0.5)
105
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.2),
106
+ inset 0 -3px 0 0 rgba(0, 0, 0, 0.3),
107
+ 0 4px 0 0 #0c0c0c,
108
+ 0 12px 24px rgba(0, 0, 0, 0.1)
120
109
  `;
121
110
  return "none";
122
111
  };
@@ -124,7 +113,7 @@ var Faq = ({
124
113
  "div",
125
114
  {
126
115
  key: index,
127
- className: `relative transition-all duration-500 rounded-4xl overflow-hidden border ${isOpen ? "bg-neutral-900 border-neutral-800" : "bg-black border-neutral-800 hover:border-neutral-700"}`,
116
+ className: `relative transition-all duration-500 rounded-4xl overflow-hidden ${isOpen ? "bg-black border-transparent" : "border border-neutral-200 hover:border-neutral-300"}`,
128
117
  style: { boxShadow: getShadowStyle() }
129
118
  },
130
119
  isOpen && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
@@ -143,19 +132,19 @@ var Faq = ({
143
132
  /* @__PURE__ */ import_react.default.createElement(
144
133
  "span",
145
134
  {
146
- className: `text-[15px] transition-colors duration-300 flex items-center gap-2 ${isOpen ? "text-white" : "text-neutral-300"}`
135
+ className: `text-[15px] transition-colors duration-300 flex items-center gap-2 ${isOpen ? "text-white" : "text-black"}`
147
136
  },
148
- /* @__PURE__ */ import_react.default.createElement("span", { className: "text-neutral-500" }, index + 1, "."),
137
+ /* @__PURE__ */ import_react.default.createElement("span", { className: isOpen ? "text-neutral-400" : "text-neutral-400" }, index + 1, "."),
149
138
  faq.question
150
139
  ),
151
- /* @__PURE__ */ import_react.default.createElement("div", { className: `shrink-0 transition-colors duration-300 ${isOpen ? "text-white" : "text-neutral-400 group-hover:text-white"}` }, isOpen ? /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M8 12h8", strokeLinecap: "round" })) : /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 8v8M8 12h8", strokeLinecap: "round" })))
140
+ /* @__PURE__ */ import_react.default.createElement("div", { className: `shrink-0 transition-colors duration-300 ${isOpen ? "text-white" : "text-black group-hover:text-black/70"}` }, isOpen ? /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M8 12h8", strokeLinecap: "round" })) : /* @__PURE__ */ import_react.default.createElement("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }, /* @__PURE__ */ import_react.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M12 8v8M8 12h8", strokeLinecap: "round" })))
152
141
  ),
153
142
  /* @__PURE__ */ import_react.default.createElement(
154
143
  "div",
155
144
  {
156
145
  className: `relative z-20 grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"}`
157
146
  },
158
- /* @__PURE__ */ import_react.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react.default.createElement("p", { className: `text-[14px] leading-relaxed px-6 pb-6 pt-0 pr-12 transition-colors duration-300 ${isOpen ? "text-neutral-400" : "text-transparent"}` }, faq.answer))
147
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react.default.createElement("p", { className: `text-[14px] leading-relaxed px-6 pb-6 pt-0 pr-12 transition-colors duration-300 ${isOpen ? "text-neutral-300" : "text-transparent"}` }, faq.answer))
159
148
  )
160
149
  );
161
150
  }))));
@@ -170,23 +159,31 @@ var ThreeDButton = ({
170
159
  className = "",
171
160
  onClick
172
161
  }) => {
173
- const silverBg = `linear-gradient(110deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0) 35%, rgba(0,0,0,0.1) 60%, rgba(255,255,255,0.6) 80%, rgba(0,0,0,0.2) 100%), url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc2MDAnIGhlaWdodD0nODAnPjxmaWx0ZXIgaWQ9J2JydXNoZWQnIHg9JzAlJyB5PScwJScgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJSc+PGZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuMDA1IDAuOCcgbnVtT2N0YXZlcz0nNCcgc2VlZD0nNScgcmVzdWx0PSdub2lzZScvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnIHJlc3VsdD0nbW9ubycvPjxmZUNvbXBvbmVudFRyYW5zZmVyIHJlc3VsdD0nYWRqdXN0ZWQnPjxmZUZ1bmNSIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuNCcgaW50ZXJjZXB0PScwLjMnLz48ZmVGdW5jRyB0eXBlPSdsaW5lYXInIHNsb3BlPScwLjQnIGludGVyY2VwdD0nMC4zJy8+PGZlRnVuY0IgdHlwZT0nbGluZWFyJyBzbG9wZT0nMC40JyBpbnRlcmNlcHQ9JzAuMycvPjxmZUZ1bmNBIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuMTUnIGludGVyY2VwdD0nMCcvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWxsPScjZDFkNWRiJy8+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI2JydXNoZWQpJyBvcGFjaXR5PScwLjgnLz48L3N2Zz4=")`;
174
- const baseShadow = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 4px 10px rgba(0,0,0,0.5)";
175
- const hoverShadow = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 6px 14px rgba(0,0,0,0.7)";
176
- const activeShadow = "inset 0 2px 4px rgba(0,0,0,0.4), inset 0 -1px 2px rgba(255,255,255,0.5), 0 2px 4px rgba(0,0,0,0.3)";
162
+ const baseShadow = `
163
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3),
164
+ inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
165
+ 0 3px 0 0 #0c0c0c,
166
+ 0 6px 10px rgba(0, 0, 0, 0.3)
167
+ `;
168
+ const hoverShadow = `
169
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35),
170
+ inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
171
+ 0 4px 0 0 #0c0c0c,
172
+ 0 8px 12px rgba(0, 0, 0, 0.35)
173
+ `;
174
+ const activeShadow = `
175
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.1),
176
+ inset 0 -1px 0 0 rgba(0, 0, 0, 0.5),
177
+ 0 1px 0 0 #0c0c0c,
178
+ 0 2px 4px rgba(0, 0, 0, 0.2)
179
+ `;
177
180
  return /* @__PURE__ */ import_react2.default.createElement(
178
181
  import_link.default,
179
182
  {
180
183
  href,
181
184
  onClick,
182
- className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full text-neutral-900 text-xs font-medium transition-all duration-150 select-none group overflow-hidden ${className}`,
183
- style: {
184
- backgroundImage: silverBg,
185
- backgroundSize: "cover",
186
- backgroundPosition: "center right",
187
- boxShadow: baseShadow,
188
- textShadow: "0 1px 1px rgba(255,255,255,0.6)"
189
- },
185
+ className: `relative inline-flex items-center justify-center py-2.5 px-8 rounded-full bg-neutral-950 text-white text-xs transition-all duration-150 select-none group ${className}`,
186
+ style: { boxShadow: baseShadow },
190
187
  onMouseEnter: (e) => {
191
188
  e.currentTarget.style.boxShadow = hoverShadow;
192
189
  e.currentTarget.style.transform = "translateY(-1px)";
@@ -203,8 +200,8 @@ var ThreeDButton = ({
203
200
  e.currentTarget.style.transform = "translateY(-1px)";
204
201
  }
205
202
  },
206
- /* @__PURE__ */ import_react2.default.createElement("span", { className: "absolute inset-0 bg-linear-to-r from-white/30 to-transparent pointer-events-none" }),
207
- /* @__PURE__ */ import_react2.default.createElement("span", { className: "relative z-10 pt-1 tracking-wide text-neutral-900/95 group-hover:text-neutral-950 transition-colors duration-150 flex items-center justify-center leading-none drop-shadow-[0_1px_1px_rgba(255,255,255,0.8)]" }, children)
203
+ /* @__PURE__ */ import_react2.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
204
+ /* @__PURE__ */ import_react2.default.createElement("span", { className: "relative z-10 pt-1 tracking-wide text-white/95 group-hover:text-white transition-colors duration-150 flex items-center justify-center leading-none" }, children)
208
205
  );
209
206
  };
210
207
 
@@ -222,11 +219,29 @@ var ThreeDActionButton = ({
222
219
  ariaLabel
223
220
  }) => {
224
221
  const isInteractionDisabled = disabled || isLoading;
225
- const silverBg = `linear-gradient(110deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0) 35%, rgba(0,0,0,0.1) 60%, rgba(255,255,255,0.6) 80%, rgba(0,0,0,0.2) 100%), url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc2MDAnIGhlaWdodD0nODAnPjxmaWx0ZXIgaWQ9J2JydXNoZWQnIHg9JzAlJyB5PScwJScgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJSc+PGZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuMDA1IDAuOCcgbnVtT2N0YXZlcz0nNCcgc2VlZD0nNScgcmVzdWx0PSdub2lzZScvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnIHJlc3VsdD0nbW9ubycvPjxmZUNvbXBvbmVudFRyYW5zZmVyIHJlc3VsdD0nYWRqdXN0ZWQnPjxmZUZ1bmNSIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuNCcgaW50ZXJjZXB0PScwLjMnLz48ZmVGdW5jRyB0eXBlPSdsaW5lYXInIHNsb3BlPScwLjQnIGludGVyY2VwdD0nMC4zJy8+PGZlRnVuY0IgdHlwZT0nbGluZWFyJyBzbG9wZT0nMC40JyBpbnRlcmNlcHQ9JzAuMycvPjxmZUZ1bmNBIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuMTUnIGludGVyY2VwdD0nMCcvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWxsPScjZDFkNWRiJy8+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI2JydXNoZWQpJyBvcGFjaXR5PScwLjgnLz48L3N2Zz4=")`;
226
- const baseShadow = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 4px 10px rgba(0,0,0,0.5)";
227
- const hoverShadow = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 6px 14px rgba(0,0,0,0.7)";
228
- const activeShadow = "inset 0 2px 4px rgba(0,0,0,0.4), inset 0 -1px 2px rgba(255,255,255,0.5), 0 2px 4px rgba(0,0,0,0.3)";
229
- const disabledShadow = "inset 0 1px 2px rgba(255,255,255,0.5), inset 0 -1px 2px rgba(0,0,0,0.2), 0 2px 4px rgba(0,0,0,0.2)";
222
+ const baseShadow = `
223
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.3),
224
+ inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
225
+ 0 3px 0 0 #0c0c0c,
226
+ 0 6px 10px rgba(0, 0, 0, 0.3)
227
+ `;
228
+ const hoverShadow = `
229
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.35),
230
+ inset 0 -2px 0 0 rgba(0, 0, 0, 0.5),
231
+ 0 4px 0 0 #0c0c0c,
232
+ 0 8px 12px rgba(0, 0, 0, 0.35)
233
+ `;
234
+ const activeShadow = `
235
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.1),
236
+ inset 0 -1px 0 0 rgba(0, 0, 0, 0.5),
237
+ 0 1px 0 0 #0c0c0c,
238
+ 0 2px 4px rgba(0, 0, 0, 0.2)
239
+ `;
240
+ const disabledShadow = `
241
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.15),
242
+ inset 0 -1px 0 0 rgba(0, 0, 0, 0.3),
243
+ 0 1px 0 0 #1c1c1c
244
+ `;
230
245
  return /* @__PURE__ */ import_react3.default.createElement(
231
246
  "button",
232
247
  {
@@ -236,18 +251,12 @@ var ThreeDActionButton = ({
236
251
  "aria-label": ariaLabel,
237
252
  className: `
238
253
  relative inline-flex items-center justify-center py-2.5 px-8 rounded-full
239
- text-neutral-900 text-xs font-medium tracking-widest
240
- transition-all duration-150 select-none group outline-none overflow-hidden
241
- ${isInteractionDisabled ? "opacity-70 cursor-not-allowed" : "active:translate-y-0.5"}
254
+ bg-neutral-950 text-white text-xs tracking-widest
255
+ transition-all duration-150 select-none group outline-none
256
+ ${isInteractionDisabled ? "opacity-50 cursor-not-allowed" : "active:translate-y-0.5"}
242
257
  ${className}
243
258
  `,
244
- style: {
245
- backgroundImage: silverBg,
246
- backgroundSize: "cover",
247
- backgroundPosition: "center right",
248
- boxShadow: isInteractionDisabled ? disabledShadow : baseShadow,
249
- textShadow: "0 1px 1px rgba(255,255,255,0.6)"
250
- },
259
+ style: { boxShadow: isInteractionDisabled ? disabledShadow : baseShadow },
251
260
  onMouseEnter: (e) => {
252
261
  if (isInteractionDisabled) return;
253
262
  e.currentTarget.style.boxShadow = hoverShadow;
@@ -268,536 +277,27 @@ var ThreeDActionButton = ({
268
277
  e.currentTarget.style.transform = "translateY(-1px)";
269
278
  }
270
279
  },
271
- /* @__PURE__ */ import_react3.default.createElement("span", { className: "absolute inset-0 bg-linear-to-r from-white/30 to-transparent pointer-events-none" }),
272
- /* @__PURE__ */ import_react3.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 leading-none drop-shadow-[0_1px_1px_rgba(255,255,255,0.8)]" }, isLoading ? /* @__PURE__ */ import_react3.default.createElement(import_react4.HugeiconsIcon, { icon: import_core_free_icons.Loading03Icon, size: 16, className: "animate-spin text-neutral-900" }) : children)
280
+ /* @__PURE__ */ import_react3.default.createElement("span", { className: "absolute inset-0 rounded-full bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none" }),
281
+ /* @__PURE__ */ import_react3.default.createElement("span", { className: "relative z-10 flex items-center justify-center gap-2 leading-none" }, isLoading ? /* @__PURE__ */ import_react3.default.createElement(import_react4.HugeiconsIcon, { icon: import_core_free_icons.Loading03Icon, size: 16, className: "animate-spin text-white" }) : children)
273
282
  );
274
283
  };
275
284
 
276
- // src/components/ZairusAuth.tsx
277
- var import_react5 = __toESM(require("react"));
278
- var import_navigation = require("next/navigation");
279
- var import_react_hot_toast = __toESM(require("react-hot-toast"));
280
- var import_react_google_recaptcha_v3 = require("react-google-recaptcha-v3");
281
- var InputSpinner = () => /* @__PURE__ */ import_react5.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react5.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react5.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
282
- function AuthFormInner({
283
- companyName,
284
- workspaceLabel = "Workspace",
285
- termsUrl = "https://retinalabs.company/terms-of-service",
286
- privacyUrl = "https://retinalabs.company/privacy-policy",
287
- requireNames = true,
288
- requireOrganization = true,
289
- useRecaptcha = false,
290
- defaultRedirectPath = "/app",
291
- onAuthRequest,
292
- onVerifyOtp
293
- }) {
294
- const searchParams = (0, import_navigation.useSearchParams)();
295
- const redirectUrl = searchParams.get("redirect") || defaultRedirectPath;
296
- const captchaContext = useRecaptcha ? (0, import_react_google_recaptcha_v3.useGoogleReCaptcha)() : null;
297
- const [mode, setMode] = (0, import_react5.useState)("LOGIN");
298
- const [step, setStep] = (0, import_react5.useState)("INPUT");
299
- const getInitialSignupStep = () => {
300
- if (requireNames) return "NAME";
301
- if (requireOrganization) return "ORGANIZATION";
302
- return "EMAIL_ID";
303
- };
304
- const [signupStep, setSignupStep] = (0, import_react5.useState)(getInitialSignupStep());
305
- const [isSubmitting, setIsSubmitting] = (0, import_react5.useState)(false);
306
- const [countdown, setCountdown] = (0, import_react5.useState)(0);
307
- const [emailId, setEmailId] = (0, import_react5.useState)("");
308
- const [firstName, setFirstName] = (0, import_react5.useState)("");
309
- const [lastName, setLastName] = (0, import_react5.useState)("");
310
- const [orgName, setOrgName] = (0, import_react5.useState)("");
311
- const [agreedToTerms, setAgreedToTerms] = (0, import_react5.useState)(false);
312
- const [otp, setOtp] = (0, import_react5.useState)(["", "", "", "", "", ""]);
313
- const inputRefs = (0, import_react5.useRef)([]);
314
- const cleanAlpha = (val) => val.replace(/[^a-zA-Z\s-]/g, "");
315
- const cleanOrgName = (val) => val.replace(/[^a-zA-Z0-9\s]/g, "").substring(0, 50);
316
- const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
317
- (0, import_react5.useEffect)(() => {
318
- if (countdown > 0) {
319
- const timer = setTimeout(() => setCountdown(countdown - 1), 1e3);
320
- return () => clearTimeout(timer);
321
- }
322
- }, [countdown]);
323
- const handleOtpChange = (index, value) => {
324
- const cleanValue = value.replace(/[^0-9]/g, "");
325
- if (!cleanValue && value !== "") return;
326
- const newOtp = [...otp];
327
- newOtp[index] = cleanValue.slice(-1);
328
- setOtp(newOtp);
329
- if (cleanValue && index < 5) {
330
- inputRefs.current[index + 1]?.focus();
331
- }
332
- };
333
- const handlePaste = (e) => {
334
- e.preventDefault();
335
- const pastedData = e.clipboardData.getData("text/plain");
336
- const numbersOnly = pastedData.replace(/[^0-9]/g, "");
337
- if (!numbersOnly) return;
338
- const newOtp = [...otp];
339
- const length = Math.min(numbersOnly.length, 6);
340
- for (let i = 0; i < length; i++) {
341
- newOtp[i] = numbersOnly[i];
342
- }
343
- setOtp(newOtp);
344
- if (length < 6) {
345
- inputRefs.current[length]?.focus();
346
- } else {
347
- inputRefs.current[5]?.focus();
348
- verifyOtpCode(newOtp.join(""));
349
- }
350
- };
351
- const handleAuthRequestSubmit = async (e) => {
352
- if (e) e.preventDefault();
353
- if (mode === "SIGNUP" && !agreedToTerms) {
354
- import_react_hot_toast.default.error("You must agree to the Terms and Privacy Policy.");
355
- return;
356
- }
357
- if (isSubmitting || countdown > 0) return;
358
- setIsSubmitting(true);
359
- try {
360
- let recaptchaToken = void 0;
361
- if (useRecaptcha && captchaContext?.executeRecaptcha) {
362
- recaptchaToken = await captchaContext.executeRecaptcha("auth_request");
363
- }
364
- const res = await onAuthRequest({
365
- email: emailId,
366
- firstName: mode === "SIGNUP" && requireNames ? firstName : void 0,
367
- lastName: mode === "SIGNUP" && requireNames ? lastName : void 0,
368
- organizationName: mode === "SIGNUP" && requireOrganization ? orgName : void 0,
369
- mode,
370
- recaptchaToken
371
- });
372
- if (res.success) {
373
- import_react_hot_toast.default.success("Verification code sent");
374
- setStep("OTP");
375
- setCountdown(60);
376
- } else {
377
- import_react_hot_toast.default.error(res.error || "Authentication failed.");
378
- }
379
- } catch {
380
- import_react_hot_toast.default.error("Service unavailable. Try again later.");
381
- } finally {
382
- setIsSubmitting(false);
383
- }
384
- };
385
- const verifyOtpCode = async (codeToVerify) => {
386
- if (codeToVerify.length !== 6 || isSubmitting) return;
387
- setIsSubmitting(true);
388
- try {
389
- const res = await onVerifyOtp({ email: emailId, code: codeToVerify });
390
- if (res.success) {
391
- window.location.href = res.redirect || redirectUrl;
392
- } else {
393
- import_react_hot_toast.default.error(res.error || "Invalid code.");
394
- setOtp(["", "", "", "", "", ""]);
395
- inputRefs.current[0]?.focus();
396
- }
397
- } catch {
398
- import_react_hot_toast.default.error("Verification failed.");
399
- } finally {
400
- setIsSubmitting(false);
401
- }
402
- };
403
- const handleNextSignupStep = () => {
404
- if (signupStep === "NAME") {
405
- if (requireOrganization) setSignupStep("ORGANIZATION");
406
- else setSignupStep("EMAIL_ID");
407
- } else if (signupStep === "ORGANIZATION") {
408
- setSignupStep("EMAIL_ID");
409
- }
410
- };
411
- const isContinueDisabled = () => {
412
- if (isSubmitting) return true;
413
- if (mode === "LOGIN") return emailId.length < 3;
414
- if (mode === "SIGNUP") {
415
- if (signupStep === "NAME") return firstName.trim() === "" || lastName.trim() === "";
416
- if (signupStep === "ORGANIZATION") return orgName.trim().length < 3;
417
- if (signupStep === "EMAIL_ID") return emailId.length < 3 || !agreedToTerms;
418
- }
419
- return false;
420
- };
421
- return /* @__PURE__ */ import_react5.default.createElement("div", { className: "w-full max-w-md mx-auto flex flex-col items-center gap-4 relative z-10 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "w-full bg-neutral-900 border border-neutral-800 rounded-2xl overflow-hidden shadow-2xl" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "p-8 md:p-12" }, step === "INPUT" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "mb-12 text-center mt-2" }, /* @__PURE__ */ import_react5.default.createElement("h2", { className: "text-xl text-white mb-2 tracking-tight " }, mode === "LOGIN" ? `${companyName} ${workspaceLabel}` : "Create Account"), /* @__PURE__ */ import_react5.default.createElement("div", { className: "text-[13px] text-neutral-400" }, mode === "LOGIN" ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, "Don't have an account? ", /* @__PURE__ */ import_react5.default.createElement("button", { type: "button", onClick: () => {
422
- setMode("SIGNUP");
423
- setSignupStep(getInitialSignupStep());
424
- }, className: "text-white hover:text-neutral-300 transition-colors ml-1 " }, "Sign up")) : /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, "Already have an account? ", /* @__PURE__ */ import_react5.default.createElement("button", { type: "button", onClick: () => setMode("LOGIN"), className: "text-white hover:text-neutral-300 transition-colors ml-1 " }, "Log in")))), /* @__PURE__ */ import_react5.default.createElement("form", { className: "space-y-6", autoComplete: "off", onSubmit: (e) => {
425
- e.preventDefault();
426
- if (mode === "SIGNUP" && signupStep === "NAME") handleNextSignupStep();
427
- else if (mode === "SIGNUP" && signupStep === "ORGANIZATION") handleNextSignupStep();
428
- else handleAuthRequestSubmit();
429
- } }, mode === "SIGNUP" && signupStep === "NAME" && requireNames && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "First Name"), /* @__PURE__ */ import_react5.default.createElement(
430
- "input",
431
- {
432
- type: "text",
433
- value: firstName,
434
- onChange: (e) => setFirstName(cleanAlpha(e.target.value)),
435
- required: true,
436
- autoFocus: true,
437
- className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
438
- placeholder: "First name"
439
- }
440
- )), /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Last Name"), /* @__PURE__ */ import_react5.default.createElement(
441
- "input",
442
- {
443
- type: "text",
444
- value: lastName,
445
- onChange: (e) => setLastName(cleanAlpha(e.target.value)),
446
- required: true,
447
- className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
448
- placeholder: "Last name"
449
- }
450
- ))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Organization Name"), /* @__PURE__ */ import_react5.default.createElement(
451
- "input",
452
- {
453
- type: "text",
454
- value: orgName,
455
- onChange: (e) => setOrgName(cleanOrgName(e.target.value)),
456
- required: true,
457
- autoFocus: true,
458
- className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
459
- placeholder: "Acme Corporation"
460
- }
461
- ))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react5.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Retina ID"), /* @__PURE__ */ import_react5.default.createElement(
462
- "input",
463
- {
464
- type: "email",
465
- value: emailId,
466
- onChange: (e) => setEmailId(cleanEmailId(e.target.value)),
467
- required: true,
468
- autoFocus: true,
469
- className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
470
- placeholder: "name@company.com"
471
- }
472
- )), mode === "SIGNUP" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-start gap-3 mt-4" }, /* @__PURE__ */ import_react5.default.createElement(
473
- "input",
474
- {
475
- type: "checkbox",
476
- id: "zairus-terms",
477
- checked: agreedToTerms,
478
- onChange: (e) => setAgreedToTerms(e.target.checked),
479
- className: "mt-0.5 w-4 h-4 bg-neutral-800 border-neutral-700 rounded text-white focus:ring-white cursor-pointer",
480
- required: true
481
- }
482
- ), /* @__PURE__ */ import_react5.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-400 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react5.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-white hover:text-neutral-300 " }, "Terms of Service"), " and ", /* @__PURE__ */ import_react5.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-white hover:text-neutral-300 " }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react5.default.createElement(
483
- ThreeDActionButton,
484
- {
485
- type: "submit",
486
- disabled: isContinueDisabled(),
487
- isLoading: isSubmitting,
488
- className: "w-full mt-10"
489
- },
490
- "Continue"
491
- ))), step === "OTP" && /* @__PURE__ */ import_react5.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "text-center mb-10 mt-2" }, /* @__PURE__ */ import_react5.default.createElement("h2", { className: "text-xl text-white mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react5.default.createElement("p", { className: "text-[13px] text-neutral-400" }, "Enter the code sent to ", /* @__PURE__ */ import_react5.default.createElement("br", null), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-white" }, emailId))), /* @__PURE__ */ import_react5.default.createElement("form", { className: "space-y-10", autoComplete: "off", onSubmit: (e) => {
492
- e.preventDefault();
493
- verifyOtpCode(otp.join(""));
494
- } }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react5.default.createElement(
495
- "input",
496
- {
497
- key: index,
498
- ref: (el) => {
499
- inputRefs.current[index] = el;
500
- },
501
- type: "text",
502
- inputMode: "numeric",
503
- maxLength: 1,
504
- value: digit,
505
- onChange: (e) => handleOtpChange(index, e.target.value),
506
- className: "w-8 h-8 text-center text-lg bg-transparent border-b-2 border-neutral-800 text-white outline-none focus:border-white transition-all duration-300"
507
- }
508
- ))), /* @__PURE__ */ import_react5.default.createElement(
509
- ThreeDActionButton,
510
- {
511
- type: "submit",
512
- disabled: otp.join("").length < 6,
513
- isLoading: isSubmitting,
514
- className: "w-full"
515
- },
516
- "Verify Code"
517
- ))))), /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col items-center gap-1.5 animate-in slide-in-from-bottom-3 duration-500 delay-100 mt-4" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-center gap-2.5 px-3 py-1.5 bg-neutral-900 border border-neutral-800 rounded-full" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "w-5 h-5 bg-neutral-800 rounded-full flex items-center justify-center shrink-0 overflow-hidden relative" }, /* @__PURE__ */ import_react5.default.createElement(
518
- "img",
519
- {
520
- src: "https://retinalabs.company/assets/images/retina.avif",
521
- alt: "Retina Labs Logo",
522
- className: "w-full h-full object-cover rounded-full",
523
- onError: (e) => {
524
- e.currentTarget.style.display = "none";
525
- }
526
- }
527
- )), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-[11px] text-neutral-300 tracking-tight pr-1" }, "Retina Labs Company")), /* @__PURE__ */ import_react5.default.createElement("span", { className: "text-[8px] text-neutral-500 tracking-[0.25em]" }, "RC - 9235780")));
528
- }
529
- var ZairusAuth = (props) => {
530
- if (props.useRecaptcha && props.recaptchaSiteKey) {
531
- return /* @__PURE__ */ import_react5.default.createElement(import_react_google_recaptcha_v3.GoogleReCaptchaProvider, { reCaptchaKey: props.recaptchaSiteKey }, /* @__PURE__ */ import_react5.default.createElement(import_react5.Suspense, { fallback: /* @__PURE__ */ import_react5.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react5.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react5.default.createElement(AuthFormInner, { ...props })));
532
- }
533
- return /* @__PURE__ */ import_react5.default.createElement(import_react5.Suspense, { fallback: /* @__PURE__ */ import_react5.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react5.default.createElement(InputSpinner, null)) }, /* @__PURE__ */ import_react5.default.createElement(AuthFormInner, { ...props }));
534
- };
535
-
536
- // src/components/PipleAuth.tsx
537
- var import_react6 = __toESM(require("react"));
538
- var import_navigation2 = require("next/navigation");
539
- var import_react_hot_toast2 = __toESM(require("react-hot-toast"));
540
- var import_react_google_recaptcha_v32 = require("react-google-recaptcha-v3");
541
- var InputSpinner2 = () => /* @__PURE__ */ import_react6.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react6.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react6.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
542
- function AuthFormInner2({
543
- companyName,
544
- workspaceLabel = "Workspace",
545
- termsUrl = "https://aeona.finance/terms-of-service",
546
- privacyUrl = "https://aeona.finance/privacy-policy",
547
- requireNames = true,
548
- requireOrganization = true,
549
- useRecaptcha = false,
550
- defaultRedirectPath = "/app",
551
- onAuthRequest,
552
- onVerifyOtp
553
- }) {
554
- const searchParams = (0, import_navigation2.useSearchParams)();
555
- const redirectUrl = searchParams.get("redirect") || defaultRedirectPath;
556
- const captchaContext = useRecaptcha ? (0, import_react_google_recaptcha_v32.useGoogleReCaptcha)() : null;
557
- const [mode, setMode] = (0, import_react6.useState)("LOGIN");
558
- const [step, setStep] = (0, import_react6.useState)("INPUT");
559
- const getInitialSignupStep = () => {
560
- if (requireNames) return "NAME";
561
- if (requireOrganization) return "ORGANIZATION";
562
- return "EMAIL_ID";
563
- };
564
- const [signupStep, setSignupStep] = (0, import_react6.useState)(getInitialSignupStep());
565
- const [isSubmitting, setIsSubmitting] = (0, import_react6.useState)(false);
566
- const [countdown, setCountdown] = (0, import_react6.useState)(0);
567
- const [emailId, setEmailId] = (0, import_react6.useState)("");
568
- const [firstName, setFirstName] = (0, import_react6.useState)("");
569
- const [lastName, setLastName] = (0, import_react6.useState)("");
570
- const [orgName, setOrgName] = (0, import_react6.useState)("");
571
- const [agreedToTerms, setAgreedToTerms] = (0, import_react6.useState)(false);
572
- const [otp, setOtp] = (0, import_react6.useState)(["", "", "", "", "", ""]);
573
- const inputRefs = (0, import_react6.useRef)([]);
574
- const cleanAlpha = (val) => val.replace(/[^a-zA-Z\s-]/g, "");
575
- const cleanOrgName = (val) => val.replace(/[^a-zA-Z0-9\s]/g, "").substring(0, 50);
576
- const cleanEmailId = (val) => val.toLowerCase().replace(/[^a-z0-9@._-]/g, "");
577
- (0, import_react6.useEffect)(() => {
578
- if (countdown > 0) {
579
- const timer = setTimeout(() => setCountdown(countdown - 1), 1e3);
580
- return () => clearTimeout(timer);
581
- }
582
- }, [countdown]);
583
- const handleOtpChange = (index, value) => {
584
- const cleanValue = value.replace(/[^0-9]/g, "");
585
- if (!cleanValue && value !== "") return;
586
- const newOtp = [...otp];
587
- newOtp[index] = cleanValue.slice(-1);
588
- setOtp(newOtp);
589
- if (cleanValue && index < 5) {
590
- inputRefs.current[index + 1]?.focus();
591
- }
592
- };
593
- const handlePaste = (e) => {
594
- e.preventDefault();
595
- const pastedData = e.clipboardData.getData("text/plain");
596
- const numbersOnly = pastedData.replace(/[^0-9]/g, "");
597
- if (!numbersOnly) return;
598
- const newOtp = [...otp];
599
- const length = Math.min(numbersOnly.length, 6);
600
- for (let i = 0; i < length; i++) {
601
- newOtp[i] = numbersOnly[i];
602
- }
603
- setOtp(newOtp);
604
- if (length < 6) {
605
- inputRefs.current[length]?.focus();
606
- } else {
607
- inputRefs.current[5]?.focus();
608
- verifyOtpCode(newOtp.join(""));
609
- }
610
- };
611
- const handleAuthRequestSubmit = async (e) => {
612
- if (e) e.preventDefault();
613
- if (mode === "SIGNUP" && !agreedToTerms) {
614
- import_react_hot_toast2.default.error("You must agree to the Terms and Privacy Policy.");
615
- return;
616
- }
617
- if (isSubmitting || countdown > 0) return;
618
- setIsSubmitting(true);
619
- try {
620
- let recaptchaToken = void 0;
621
- if (useRecaptcha && captchaContext?.executeRecaptcha) {
622
- recaptchaToken = await captchaContext.executeRecaptcha("auth_request");
623
- }
624
- const res = await onAuthRequest({
625
- email: emailId,
626
- firstName: mode === "SIGNUP" && requireNames ? firstName : void 0,
627
- lastName: mode === "SIGNUP" && requireNames ? lastName : void 0,
628
- organizationName: mode === "SIGNUP" && requireOrganization ? orgName : void 0,
629
- mode,
630
- recaptchaToken
631
- });
632
- if (res.success) {
633
- import_react_hot_toast2.default.success("Verification code sent");
634
- setStep("OTP");
635
- setCountdown(60);
636
- } else {
637
- import_react_hot_toast2.default.error(res.error || "Authentication failed.");
638
- }
639
- } catch {
640
- import_react_hot_toast2.default.error("Service unavailable. Try again later.");
641
- } finally {
642
- setIsSubmitting(false);
643
- }
644
- };
645
- const verifyOtpCode = async (codeToVerify) => {
646
- if (codeToVerify.length !== 6 || isSubmitting) return;
647
- setIsSubmitting(true);
648
- try {
649
- const res = await onVerifyOtp({ email: emailId, code: codeToVerify });
650
- if (res.success) {
651
- window.location.href = res.redirect || redirectUrl;
652
- } else {
653
- import_react_hot_toast2.default.error(res.error || "Invalid code.");
654
- setOtp(["", "", "", "", "", ""]);
655
- inputRefs.current[0]?.focus();
656
- }
657
- } catch {
658
- import_react_hot_toast2.default.error("Verification failed.");
659
- } finally {
660
- setIsSubmitting(false);
661
- }
662
- };
663
- const handleNextSignupStep = () => {
664
- if (signupStep === "NAME") {
665
- if (requireOrganization) setSignupStep("ORGANIZATION");
666
- else setSignupStep("EMAIL_ID");
667
- } else if (signupStep === "ORGANIZATION") {
668
- setSignupStep("EMAIL_ID");
669
- }
670
- };
671
- const isContinueDisabled = () => {
672
- if (isSubmitting) return true;
673
- if (mode === "LOGIN") return emailId.length < 3;
674
- if (mode === "SIGNUP") {
675
- if (signupStep === "NAME") return firstName.trim() === "" || lastName.trim() === "";
676
- if (signupStep === "ORGANIZATION") return orgName.trim().length < 3;
677
- if (signupStep === "EMAIL_ID") return emailId.length < 3 || !agreedToTerms;
678
- }
679
- return false;
680
- };
681
- return /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-md mx-auto flex flex-col items-center gap-4 relative z-10 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full bg-neutral-900 rounded-2xl overflow-hidden shadow-2xl" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "p-8 md:p-12" }, step === "INPUT" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mb-12 text-center mt-2" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "text-xl text-white mb-2 tracking-tight " }, mode === "LOGIN" ? `${companyName} ${workspaceLabel}` : "Create Account"), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[13px] text-neutral-400" }, mode === "LOGIN" ? /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Don't have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => {
682
- setMode("SIGNUP");
683
- setSignupStep(getInitialSignupStep());
684
- }, className: "text-white hover:text-neutral-300 transition-colors ml-1 " }, "Sign up")) : /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, "Already have an account? ", /* @__PURE__ */ import_react6.default.createElement("button", { type: "button", onClick: () => setMode("LOGIN"), className: "text-white hover:text-neutral-300 transition-colors ml-1 " }, "Log in")))), /* @__PURE__ */ import_react6.default.createElement("form", { className: "space-y-6", autoComplete: "off", onSubmit: (e) => {
685
- e.preventDefault();
686
- if (mode === "SIGNUP" && signupStep === "NAME") handleNextSignupStep();
687
- else if (mode === "SIGNUP" && signupStep === "ORGANIZATION") handleNextSignupStep();
688
- else handleAuthRequestSubmit();
689
- } }, mode === "SIGNUP" && signupStep === "NAME" && requireNames && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "First Name"), /* @__PURE__ */ import_react6.default.createElement(
690
- "input",
691
- {
692
- type: "text",
693
- value: firstName,
694
- onChange: (e) => setFirstName(cleanAlpha(e.target.value)),
695
- required: true,
696
- autoFocus: true,
697
- className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
698
- placeholder: "First name"
699
- }
700
- )), /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Last Name"), /* @__PURE__ */ import_react6.default.createElement(
701
- "input",
702
- {
703
- type: "text",
704
- value: lastName,
705
- onChange: (e) => setLastName(cleanAlpha(e.target.value)),
706
- required: true,
707
- className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
708
- placeholder: "Last name"
709
- }
710
- ))), mode === "SIGNUP" && signupStep === "ORGANIZATION" && requireOrganization && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Organization Name"), /* @__PURE__ */ import_react6.default.createElement(
711
- "input",
712
- {
713
- type: "text",
714
- value: orgName,
715
- onChange: (e) => setOrgName(cleanOrgName(e.target.value)),
716
- required: true,
717
- autoFocus: true,
718
- className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
719
- placeholder: "Acme Corporation"
720
- }
721
- ))), (mode === "LOGIN" || mode === "SIGNUP" && signupStep === "EMAIL_ID") && /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Email ID"), /* @__PURE__ */ import_react6.default.createElement(
722
- "input",
723
- {
724
- type: "email",
725
- value: emailId,
726
- onChange: (e) => setEmailId(cleanEmailId(e.target.value)),
727
- required: true,
728
- autoFocus: true,
729
- className: "w-full px-2 py-3 bg-transparent text-sm border-b border-neutral-800 text-white outline-none focus:border-white transition-all duration-300",
730
- placeholder: "name@company.com"
731
- }
732
- )), mode === "SIGNUP" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-start gap-3 mt-4" }, /* @__PURE__ */ import_react6.default.createElement(
733
- "input",
734
- {
735
- type: "checkbox",
736
- id: "zairus-terms",
737
- checked: agreedToTerms,
738
- onChange: (e) => setAgreedToTerms(e.target.checked),
739
- className: "mt-0.5 w-4 h-4 bg-neutral-800 border-neutral-700 rounded text-white focus:ring-white cursor-pointer",
740
- required: true
741
- }
742
- ), /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "zairus-terms", className: "text-[11px] text-neutral-400 cursor-pointer leading-snug" }, "I agree to ", companyName, "'s ", /* @__PURE__ */ import_react6.default.createElement("a", { href: termsUrl, target: "_blank", rel: "noreferrer", className: "text-white hover:text-neutral-300 " }, "Terms of Service"), " and ", /* @__PURE__ */ import_react6.default.createElement("a", { href: privacyUrl, target: "_blank", rel: "noreferrer", className: "text-white hover:text-neutral-300 " }, "Privacy Policy"), "."))), /* @__PURE__ */ import_react6.default.createElement(
743
- ThreeDActionButton,
744
- {
745
- type: "submit",
746
- disabled: isContinueDisabled(),
747
- isLoading: isSubmitting,
748
- className: "w-full mt-10"
749
- },
750
- "Continue"
751
- ))), step === "OTP" && /* @__PURE__ */ import_react6.default.createElement("div", { className: "animate-in fade-in duration-300" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-center mb-10 mt-2" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "text-xl text-white mb-2 tracking-tight" }, "Security Check"), /* @__PURE__ */ import_react6.default.createElement("p", { className: "text-[13px] text-neutral-400" }, "Enter the code sent to ", /* @__PURE__ */ import_react6.default.createElement("br", null), /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-white" }, emailId))), /* @__PURE__ */ import_react6.default.createElement("form", { className: "space-y-10", autoComplete: "off", onSubmit: (e) => {
752
- e.preventDefault();
753
- verifyOtpCode(otp.join(""));
754
- } }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex justify-between gap-2", onPaste: handlePaste }, otp.map((digit, index) => /* @__PURE__ */ import_react6.default.createElement(
755
- "input",
756
- {
757
- key: index,
758
- ref: (el) => {
759
- inputRefs.current[index] = el;
760
- },
761
- type: "text",
762
- inputMode: "numeric",
763
- maxLength: 1,
764
- value: digit,
765
- onChange: (e) => handleOtpChange(index, e.target.value),
766
- className: "w-8 h-8 text-center text-lg bg-transparent border-b-2 border-neutral-800 text-white outline-none focus:border-white transition-all duration-300"
767
- }
768
- ))), /* @__PURE__ */ import_react6.default.createElement(
769
- ThreeDActionButton,
770
- {
771
- type: "submit",
772
- disabled: otp.join("").length < 6,
773
- isLoading: isSubmitting,
774
- className: "w-full"
775
- },
776
- "Verify Code"
777
- ))))));
778
- }
779
- var PipleAuth = (props) => {
780
- if (props.useRecaptcha && props.recaptchaSiteKey) {
781
- return /* @__PURE__ */ import_react6.default.createElement(import_react_google_recaptcha_v32.GoogleReCaptchaProvider, { reCaptchaKey: props.recaptchaSiteKey }, /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, { fallback: /* @__PURE__ */ import_react6.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement(InputSpinner2, null)) }, /* @__PURE__ */ import_react6.default.createElement(AuthFormInner2, { ...props })));
782
- }
783
- return /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, { fallback: /* @__PURE__ */ import_react6.default.createElement("div", { className: "h-64 flex items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement(InputSpinner2, null)) }, /* @__PURE__ */ import_react6.default.createElement(AuthFormInner2, { ...props }));
784
- };
785
-
786
285
  // src/components/Header.tsx
787
- var import_react7 = __toESM(require("react"));
286
+ var import_react5 = __toESM(require("react"));
788
287
  var import_link2 = __toESM(require("next/link"));
789
288
  var import_image = __toESM(require("next/image"));
790
- var import_navigation3 = require("next/navigation");
289
+ var import_navigation = require("next/navigation");
791
290
  var NavLink = ({
792
291
  href,
793
292
  children,
794
- className = ""
293
+ className = "",
294
+ isDarkTheme
795
295
  }) => {
796
- const pathname = (0, import_navigation3.usePathname)();
296
+ const pathname = (0, import_navigation.usePathname)();
797
297
  const isActive = pathname === href;
798
- const activeClass = "text-white";
799
- const inactiveClass = "text-neutral-400 hover:text-white";
800
- return /* @__PURE__ */ import_react7.default.createElement(
298
+ const activeClass = isDarkTheme ? "text-white" : "text-neutral-900 font-medium";
299
+ const inactiveClass = isDarkTheme ? "text-neutral-400 hover:text-white" : "text-neutral-500 hover:text-neutral-900";
300
+ return /* @__PURE__ */ import_react5.default.createElement(
801
301
  import_link2.default,
802
302
  {
803
303
  href,
@@ -816,33 +316,77 @@ var Header = ({
816
316
  hideHeaderText = false,
817
317
  compact = false
818
318
  }) => {
319
+ const headerRef = (0, import_react5.useRef)(null);
320
+ const [isDarkTheme, setIsDarkTheme] = (0, import_react5.useState)(true);
321
+ (0, import_react5.useEffect)(() => {
322
+ const checkBackgroundLuminance = () => {
323
+ if (!headerRef.current) return;
324
+ const rect = headerRef.current.getBoundingClientRect();
325
+ const x = rect.left + rect.width / 2;
326
+ const y = rect.top + rect.height / 2;
327
+ const elementsAtPoint = document.elementsFromPoint(x, y);
328
+ let foundDarkBackground = true;
329
+ for (const el of elementsAtPoint) {
330
+ if (headerRef.current.contains(el)) continue;
331
+ const style = window.getComputedStyle(el);
332
+ const bg = style.backgroundColor;
333
+ if (bg && bg !== "rgba(0, 0, 0, 0)" && bg !== "transparent") {
334
+ const rgbMatch = bg.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
335
+ if (rgbMatch) {
336
+ const r = parseInt(rgbMatch[1], 10);
337
+ const g = parseInt(rgbMatch[2], 10);
338
+ const b = parseInt(rgbMatch[3], 10);
339
+ const brightness = Math.round((r * 299 + g * 587 + b * 114) / 1e3);
340
+ foundDarkBackground = brightness < 128;
341
+ break;
342
+ }
343
+ }
344
+ }
345
+ setIsDarkTheme(foundDarkBackground);
346
+ };
347
+ checkBackgroundLuminance();
348
+ window.addEventListener("scroll", checkBackgroundLuminance, { passive: true });
349
+ window.addEventListener("resize", checkBackgroundLuminance, { passive: true });
350
+ return () => {
351
+ window.removeEventListener("scroll", checkBackgroundLuminance);
352
+ window.removeEventListener("resize", checkBackgroundLuminance);
353
+ };
354
+ }, []);
819
355
  const headerLayoutWidth = compact ? "w-fit mx-auto gap-8 md:gap-16" : "w-full justify-between";
820
356
  const hasBrandSection = showLogo || !hideHeaderText;
821
- return /* @__PURE__ */ import_react7.default.createElement("div", { className: "absolute inset-x-0 top-0 w-full z-50 pointer-events-none px-4 pt-4 sm:pt-6" }, /* @__PURE__ */ import_react7.default.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center" }, /* @__PURE__ */ import_react7.default.createElement("header", { className: `${headerLayoutWidth} bg-black/40 backdrop-blur-md rounded-full py-2 px-6 flex items-center transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react7.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70 outline-none" }, showLogo && /* @__PURE__ */ import_react7.default.createElement(
822
- import_image.default,
823
- {
824
- src: logoSrc,
825
- alt: `${companyName} Logo`,
826
- width: 40,
827
- height: 40,
828
- className: `object-contain w-8 h-auto ${invert ? "invert" : ""}`,
829
- priority: true
830
- }
831
- ), !hideHeaderText && /* @__PURE__ */ import_react7.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react7.default.createElement("span", { className: "text-[11px] leading-none tracking-wide mb-1 transition-colors text-white" }, companyName), subtitle && /* @__PURE__ */ import_react7.default.createElement("span", { className: "text-[9px] tracking-widest leading-none transition-colors text-neutral-400" }, subtitle)))), /* @__PURE__ */ import_react7.default.createElement("nav", { className: "flex items-center gap-1 md:gap-2 shrink-0" }, links.map((link, index) => /* @__PURE__ */ import_react7.default.createElement(
832
- NavLink,
833
- {
834
- key: index,
835
- href: link.href,
836
- className: link.hideOnMobile ? "hidden sm:inline-flex" : ""
837
- },
838
- link.label
839
- ))))));
357
+ const headerBgClass = isDarkTheme ? "bg-black/40" : "bg-white/40";
358
+ const brandTitleClass = isDarkTheme ? "text-white" : "text-neutral-900";
359
+ const brandSubtitleClass = isDarkTheme ? "text-neutral-400" : "text-neutral-600";
360
+ const shouldInvertLogo = isDarkTheme ? invert : !invert;
361
+ return (
362
+ // Upgraded to 'fixed' so the smart scroll detection actually follows the user down the page
363
+ /* @__PURE__ */ import_react5.default.createElement("div", { className: "fixed inset-x-0 top-0 w-full z-50 pointer-events-none px-4 pt-4 sm:pt-6" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "max-w-5xl mx-auto w-full pointer-events-auto flex justify-center", ref: headerRef }, /* @__PURE__ */ import_react5.default.createElement("header", { className: `${headerLayoutWidth} ${headerBgClass} backdrop-blur-md rounded-full py-2 px-6 flex items-center transition-all duration-300` }, hasBrandSection && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex items-center shrink-0" }, /* @__PURE__ */ import_react5.default.createElement(import_link2.default, { href: "/", className: "flex items-center gap-3 transition-opacity hover:opacity-70 outline-none" }, showLogo && /* @__PURE__ */ import_react5.default.createElement(
364
+ import_image.default,
365
+ {
366
+ src: logoSrc,
367
+ alt: `${companyName} Logo`,
368
+ width: 40,
369
+ height: 40,
370
+ className: `object-contain w-8 h-auto transition-all duration-300 ${shouldInvertLogo ? "invert" : ""}`,
371
+ priority: true
372
+ }
373
+ ), !hideHeaderText && /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex flex-col justify-center transition-colors duration-300" }, /* @__PURE__ */ import_react5.default.createElement("span", { className: `text-[11px] leading-none tracking-wide mb-1 ${brandTitleClass}` }, companyName), subtitle && /* @__PURE__ */ import_react5.default.createElement("span", { className: `text-[9px] tracking-widest leading-none ${brandSubtitleClass}` }, subtitle)))), /* @__PURE__ */ import_react5.default.createElement("nav", { className: "flex items-center gap-1 md:gap-2 shrink-0" }, links.map((link, index) => /* @__PURE__ */ import_react5.default.createElement(
374
+ NavLink,
375
+ {
376
+ key: index,
377
+ href: link.href,
378
+ isDarkTheme,
379
+ className: link.hideOnMobile ? "hidden sm:inline-flex" : ""
380
+ },
381
+ link.label
382
+ ))))))
383
+ );
840
384
  };
841
385
 
842
386
  // src/components/Footer.tsx
843
- var import_react8 = __toESM(require("react"));
387
+ var import_react6 = __toESM(require("react"));
844
388
  var import_link3 = __toESM(require("next/link"));
845
- var import_react9 = require("@hugeicons/react");
389
+ var import_react7 = require("@hugeicons/react");
846
390
  var Footer = ({
847
391
  description,
848
392
  columns,
@@ -850,46 +394,46 @@ var Footer = ({
850
394
  copyrightText,
851
395
  topSection
852
396
  }) => {
853
- const [openCol, setOpenCol] = (0, import_react8.useState)(null);
397
+ const [openCol, setOpenCol] = (0, import_react6.useState)(null);
854
398
  const toggleColumn = (idx) => {
855
399
  setOpenCol(openCol === idx ? null : idx);
856
400
  };
857
- return /* @__PURE__ */ import_react8.default.createElement("div", { className: "bg-black" }, topSection && topSection, /* @__PURE__ */ import_react8.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start gap-12 lg:gap-16 mb-12 text-left" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center gap-4 mb-4" }, /* @__PURE__ */ import_react8.default.createElement("img", { src: "https://retinalabs.company/assets/images/ndpr.avif", alt: "NDPR", className: "w-28 h-auto object-contain filter grayscale invert opacity-80" }), /* @__PURE__ */ import_react8.default.createElement("img", { src: "https://retinalabs.company/assets/images/gdpr.avif", alt: "GDPR", className: "w-12 h-12 object-contain filter grayscale invert opacity-80" })), /* @__PURE__ */ import_react8.default.createElement("div", null, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[11px] text-neutral-400 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "hidden md:grid grid-cols-2 gap-x-16 lg:gap-x-24 gap-y-12" }, columns.map((col, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react8.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-white mb-6 " }, col.title), /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-white transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-white transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-800 mt-4" }, columns.map((col, idx) => {
401
+ return /* @__PURE__ */ import_react6.default.createElement("div", { className: "" }, topSection && topSection, /* @__PURE__ */ import_react6.default.createElement("footer", { className: "relative px-6 overflow-hidden flex flex-col" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative w-full max-w-7xl mx-auto z-20 flex flex-col" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative py-12 md:py-16" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start gap-12 lg:gap-16 mb-12 text-left" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full lg:max-w-sm flex flex-col items-start justify-between shrink-0" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-4 mb-4" }, /* @__PURE__ */ import_react6.default.createElement("img", { src: "https://retinalabs.company/assets/images/ndpr.avif", alt: "NDPR", className: "w-28 h-auto object-contain filter grayscale opacity-80" }), /* @__PURE__ */ import_react6.default.createElement("img", { src: "https://retinalabs.company/assets/images/gdpr.avif", alt: "GDPR", className: "w-12 h-12 object-contain filter grayscale opacity-80" })), /* @__PURE__ */ import_react6.default.createElement("div", null, /* @__PURE__ */ import_react6.default.createElement("p", { className: "text-[11px] text-neutral-600 leading-relaxed pr-4" }, description))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full lg:flex-1 lg:max-w-2xl" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "hidden md:grid grid-cols-2 gap-x-16 lg:gap-x-24 gap-y-12" }, columns.map((col, idx) => /* @__PURE__ */ import_react6.default.createElement("div", { key: idx, className: "flex flex-col" }, /* @__PURE__ */ import_react6.default.createElement("h4", { className: "text-[11px] tracking-[0.2em] text-black mb-6 " }, col.title), /* @__PURE__ */ import_react6.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react6.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react6.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors block truncate" }, link.label) : /* @__PURE__ */ import_react6.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors block truncate" }, link.label))))))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-col md:hidden w-full border-t border-neutral-100 mt-4" }, columns.map((col, idx) => {
858
402
  const isOpen = openCol === idx;
859
- return /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "border-b border-neutral-800" }, /* @__PURE__ */ import_react8.default.createElement(
403
+ return /* @__PURE__ */ import_react6.default.createElement("div", { key: idx, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react6.default.createElement(
860
404
  "button",
861
405
  {
862
406
  onClick: () => toggleColumn(idx),
863
407
  className: "w-full flex items-center justify-between py-5 text-left outline-none"
864
408
  },
865
- /* @__PURE__ */ import_react8.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-white " }, col.title),
866
- /* @__PURE__ */ import_react8.default.createElement(
409
+ /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-black " }, col.title),
410
+ /* @__PURE__ */ import_react6.default.createElement(
867
411
  "svg",
868
412
  {
869
- className: `w-4 h-4 text-neutral-500 transition-transform duration-300 ${isOpen ? "rotate-180" : ""}`,
413
+ className: `w-4 h-4 text-neutral-400 transition-transform duration-300 ${isOpen ? "rotate-180" : ""}`,
870
414
  fill: "none",
871
415
  viewBox: "0 0 24 24",
872
416
  stroke: "currentColor"
873
417
  },
874
- /* @__PURE__ */ import_react8.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
418
+ /* @__PURE__ */ import_react6.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" })
875
419
  )
876
- ), /* @__PURE__ */ import_react8.default.createElement("div", { className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] pb-6 opacity-100" : "grid-rows-[0fr] opacity-0"}` }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react8.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500 pt-2" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react8.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react8.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-white transition-colors" }, link.label) : /* @__PURE__ */ import_react8.default.createElement(import_link3.default, { href: link.href, className: "hover:text-white transition-colors" }, link.label)))))));
877
- })))), /* @__PURE__ */ import_react8.default.createElement("div", { className: "pt-8 mt-4 flex flex-col-reverse md:flex-row justify-between items-start md:items-center gap-6 relative z-20" }, /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[11px] text-neutral-500 tracking-widest text-left" }, copyrightText), socialLinks && socialLinks.length > 0 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex items-center gap-6" }, socialLinks.map((social, idx) => /* @__PURE__ */ import_react8.default.createElement(
420
+ ), /* @__PURE__ */ import_react6.default.createElement("div", { className: `grid transition-all duration-300 ease-in-out ${isOpen ? "grid-rows-[1fr] pb-6 opacity-100" : "grid-rows-[0fr] opacity-0"}` }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react6.default.createElement("ul", { className: "space-y-4 text-[13px] text-neutral-500 pt-2" }, col.links.map((link, lIdx) => /* @__PURE__ */ import_react6.default.createElement("li", { key: lIdx }, link.isExternal ? /* @__PURE__ */ import_react6.default.createElement("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: "hover:text-black transition-colors" }, link.label) : /* @__PURE__ */ import_react6.default.createElement(import_link3.default, { href: link.href, className: "hover:text-black transition-colors" }, link.label)))))));
421
+ })))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "pt-8 mt-4 flex flex-col-reverse md:flex-row justify-between items-start md:items-center gap-6 relative z-20" }, /* @__PURE__ */ import_react6.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-widest text-left" }, copyrightText), socialLinks && socialLinks.length > 0 && /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-6" }, socialLinks.map((social, idx) => /* @__PURE__ */ import_react6.default.createElement(
878
422
  "a",
879
423
  {
880
424
  key: idx,
881
425
  href: social.href,
882
426
  target: "_blank",
883
427
  rel: "noopener noreferrer",
884
- className: "text-neutral-500 hover:text-white transition-colors",
428
+ className: "text-neutral-400 hover:text-black transition-colors",
885
429
  "aria-label": social.name
886
430
  },
887
- /* @__PURE__ */ import_react8.default.createElement(import_react9.HugeiconsIcon, { icon: social.icon, size: 20 })
431
+ /* @__PURE__ */ import_react6.default.createElement(import_react7.HugeiconsIcon, { icon: social.icon, size: 20 })
888
432
  ))))))));
889
433
  };
890
434
 
891
435
  // src/components/HeroSection.tsx
892
- var import_react10 = __toESM(require("react"));
436
+ var import_react8 = __toESM(require("react"));
893
437
  var import_link4 = __toESM(require("next/link"));
894
438
  var import_image2 = __toESM(require("next/image"));
895
439
  var HeroSection = ({
@@ -910,9 +454,9 @@ var HeroSection = ({
910
454
  bgVideoSrc,
911
455
  bgImageSrc
912
456
  }) => {
913
- const [isAnimating, setIsAnimating] = (0, import_react10.useState)(false);
914
- const titleRef = (0, import_react10.useRef)(null);
915
- (0, import_react10.useEffect)(() => {
457
+ const [isAnimating, setIsAnimating] = (0, import_react8.useState)(false);
458
+ const titleRef = (0, import_react8.useRef)(null);
459
+ (0, import_react8.useEffect)(() => {
916
460
  const observer = new IntersectionObserver(
917
461
  ([entry]) => {
918
462
  if (entry.isIntersecting) {
@@ -930,7 +474,7 @@ var HeroSection = ({
930
474
  }
931
475
  return () => observer.disconnect();
932
476
  }, []);
933
- return /* @__PURE__ */ import_react10.default.createElement("section", { className: "relative min-h-[85vh] pt-40 sm:pt-48 pb-20 flex flex-col items-center justify-center overflow-hidden w-full bg-black" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute inset-0 w-full h-full z-0 overflow-hidden" }, bgVideoSrc ? /* @__PURE__ */ import_react10.default.createElement(
477
+ return /* @__PURE__ */ import_react8.default.createElement("section", { className: "relative min-h-[85vh] pt-40 sm:pt-48 pb-20 flex flex-col items-center justify-center overflow-hidden w-full bg-neutral-100" }, /* @__PURE__ */ import_react8.default.createElement("div", { className: "absolute inset-0 w-full h-full z-0 overflow-hidden" }, bgVideoSrc ? /* @__PURE__ */ import_react8.default.createElement(
934
478
  "video",
935
479
  {
936
480
  src: bgVideoSrc,
@@ -939,62 +483,62 @@ var HeroSection = ({
939
483
  loop: true,
940
484
  muted: true,
941
485
  playsInline: true,
942
- className: "absolute inset-0 w-full h-full object-cover z-0"
486
+ className: "absolute inset-0 w-full h-full object-cover z-0 opacity-80"
943
487
  }
944
- ) : bgImageSrc ? /* @__PURE__ */ import_react10.default.createElement(
488
+ ) : bgImageSrc ? /* @__PURE__ */ import_react8.default.createElement(
945
489
  import_image2.default,
946
490
  {
947
491
  src: bgImageSrc,
948
492
  alt: "Hero Background",
949
493
  fill: true,
950
494
  priority: true,
951
- className: "object-cover z-0"
495
+ className: "object-cover z-0 opacity-80"
952
496
  }
953
- ) : null, /* @__PURE__ */ import_react10.default.createElement(
497
+ ) : null, /* @__PURE__ */ import_react8.default.createElement(
954
498
  "div",
955
499
  {
956
500
  className: "absolute inset-0 z-10 opacity-30 mix-blend-overlay pointer-events-none",
957
501
  style: {
958
- backgroundImage: `linear-gradient(110deg, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0) 35%, rgba(0,0,0,0.2) 60%, rgba(255,255,255,0.4) 80%, rgba(0,0,0,0.4) 100%), url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc2MDAnIGhlaWdodD0nODAnPjxmaWx0ZXIgaWQ9J2JydXNoZWQnIHg9JzAlJyB5PScwJScgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJSc+PGZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuMDA1IDAuOCcgbnVtT2N0YXZlcz0nNCcgc2VlZD0nNScgcmVzdWx0PSdub2lzZScvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnIHJlc3VsdD0nbW9ubycvPjxmZUNvbXBvbmVudFRyYW5zZmVyIHJlc3VsdD0nYWRqdXN0ZWQnPjxmZUZ1bmNSIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuNCcgaW50ZXJjZXB0PScwLjMnLz48ZmVGdW5jRyB0eXBlPSdsaW5lYXInIHNsb3BlPScwLjQnIGludGVyY2VwdD0nMC4zJy8+PGZlRnVuY0IgdHlwZT0nbGluZWFyJyBzbG9wZT0nMC40JyBpbnRlcmNlcHQ9JzAuMycvPjxmZUZ1bmNBIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuMTUnIGludGVyY2VwdD0nMCcvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWxsPScjZDFkNWRiJy8+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI2JydXNoZWQpJyBvcGFjaXR5PScwLjgnLz48L3N2Zz4=")`,
502
+ backgroundImage: `linear-gradient(110deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.2) 35%, rgba(0,0,0,0.05) 60%, rgba(255,255,255,0.6) 80%, rgba(0,0,0,0.1) 100%), url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc2MDAnIGhlaWdodD0nODAnPjxmaWx0ZXIgaWQ9J2JydXNoZWQnIHg9JzAlJyB5PScwJScgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJSc+PGZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuMDA1IDAuOCcgbnVtT2N0YXZlcz0nNCcgc2VlZD0nNScgcmVzdWx0PSdub2lzZScvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnIHJlc3VsdD0nbW9ubycvPjxmZUNvbXBvbmVudFRyYW5zZmVyIHJlc3VsdD0nYWRqdXN0ZWQnPjxmZUZ1bmNSIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuNCcgaW50ZXJjZXB0PScwLjMnLz48ZmVGdW5jRyB0eXBlPSdsaW5lYXInIHNsb3BlPScwLjQnIGludGVyY2VwdD0nMC4zJy8+PGZlRnVuY0IgdHlwZT0nbGluZWFyJyBzbG9wZT0nMC40JyBpbnRlcmNlcHQ9JzAuMycvPjxmZUZ1bmNBIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuMTUnIGludGVyY2VwdD0nMCcvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWxsPScjZDFkNWRiJy8+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI2JydXNoZWQpJyBvcGFjaXR5PScwLjgnLz48L3N2Zz4=")`,
959
503
  backgroundSize: "cover",
960
504
  backgroundPosition: "center"
961
505
  }
962
506
  }
963
- ), /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10" }), /* @__PURE__ */ import_react10.default.createElement(
507
+ ), /* @__PURE__ */ import_react8.default.createElement("div", { className: "absolute inset-0 z-10" }), /* @__PURE__ */ import_react8.default.createElement(
964
508
  "div",
965
509
  {
966
510
  className: "absolute inset-0 w-full h-full pointer-events-none z-10 opacity-10",
967
511
  style: {
968
- backgroundImage: "radial-gradient(circle at center, rgba(255,255,255,0.2) 1px, transparent 1px)",
512
+ backgroundImage: "radial-gradient(circle at center, rgba(0,0,0,0.15) 1px, transparent 1px)",
969
513
  backgroundSize: "32px 32px"
970
514
  }
971
515
  }
972
- ), /* @__PURE__ */ import_react10.default.createElement(
516
+ ), /* @__PURE__ */ import_react8.default.createElement(
973
517
  "div",
974
518
  {
975
- className: "absolute inset-0 w-full h-full pointer-events-none z-10 opacity-[0.10] mix-blend-overlay",
519
+ className: "absolute inset-0 w-full h-full pointer-events-none z-10 opacity-[0.05] mix-blend-overlay",
976
520
  style: {
977
521
  backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
978
522
  }
979
523
  }
980
- ), /* @__PURE__ */ import_react10.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-40 bg-linear-to-t from-black to-transparent z-10 pointer-events-none" })), /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-20" }, /* @__PURE__ */ import_react10.default.createElement(
524
+ ), /* @__PURE__ */ import_react8.default.createElement("div", { className: "absolute inset-x-0 bottom-0 h-40 bg-linear-to-t from-neutral-100 to-transparent z-10 pointer-events-none" })), /* @__PURE__ */ import_react8.default.createElement("div", { className: "relative max-w-5xl mx-auto px-4 sm:px-6 w-full flex flex-col items-center text-center z-20" }, /* @__PURE__ */ import_react8.default.createElement(
981
525
  "h1",
982
526
  {
983
527
  ref: titleRef,
984
- className: `text-4xl sm:text-5xl lg:text-7xl font-light mb-6 text-white tracking-tight leading-[1.05] max-w-4xl drop-shadow-[0_4px_24px_rgba(0,0,0,0.5)]`,
528
+ className: `text-4xl sm:text-5xl lg:text-7xl font-light mb-6 text-white tracking-tight leading-[1.05] max-w-4xl`,
985
529
  style: isAnimating ? { animationIterationCount: 1 } : {}
986
530
  },
987
531
  titlePrefix,
988
532
  " ",
989
- /* @__PURE__ */ import_react10.default.createElement("span", { className: "font-medium gradient-text" }, highlightText)
990
- ), subtitle && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-[14px] md:text-[16px] text-neutral-200 max-w-xl mx-auto mb-10 font-light leading-relaxed drop-shadow-md" }, subtitle), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-16" }, ctaText && ctaHref && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react10.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react10.default.createElement(
533
+ /* @__PURE__ */ import_react8.default.createElement("span", { className: "font-medium gradient-text" }, highlightText)
534
+ ), subtitle && /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[14px] md:text-[16px] text-neutral-600 max-w-xl mx-auto mb-10 font-light leading-relaxed" }, subtitle), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 justify-center items-center w-full px-2 sm:px-0 mx-auto mb-16" }, ctaText && ctaHref && /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full sm:w-60 flex justify-center *:w-full" }, /* @__PURE__ */ import_react8.default.createElement(ThreeDButton, { href: ctaHref }, ctaText)), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react8.default.createElement(
991
535
  import_link4.default,
992
536
  {
993
537
  href: secondaryCtaHref,
994
- className: "w-full sm:w-60 inline-flex font-medium items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/40 backdrop-blur-md text-center text-white text-xs hover:border-neutral-500 outline-none transition-all drop-shadow-lg"
538
+ className: "w-full sm:w-60 inline-flex font-medium items-center justify-center text-[11px] tracking-widest rounded-full px-8 py-3 bg-black/60 backdrop-blur-md text-center text-white text-xs hover:bg-black/80 outline-none transition-all"
995
539
  },
996
540
  secondaryCtaText
997
- )), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react10.default.createElement("div", { className: "w-full flex flex-col items-center mt-4" }, appsText && /* @__PURE__ */ import_react10.default.createElement("p", { className: "text-[9px] tracking-[0.2em] text-neutral-300 mb-5 " }, appsText), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex flex-wrap justify-center items-center gap-6 opacity-90" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react10.default.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-8 sm:w-8 flex items-center justify-center cursor-default filter invert" }, /* @__PURE__ */ import_react10.default.createElement(
541
+ )), showApps && appLogos && appLogos.length > 0 && /* @__PURE__ */ import_react8.default.createElement("div", { className: "w-full flex flex-col items-center mt-4" }, appsText && /* @__PURE__ */ import_react8.default.createElement("p", { className: "text-[9px] tracking-[0.2em] text-neutral-500 mb-5 " }, appsText), /* @__PURE__ */ import_react8.default.createElement("div", { className: "flex flex-wrap justify-center items-center gap-6 opacity-90" }, appLogos.map((logo, idx) => /* @__PURE__ */ import_react8.default.createElement("div", { key: idx, className: "relative h-6 w-6 sm:h-8 sm:w-8 flex items-center justify-center cursor-default" }, /* @__PURE__ */ import_react8.default.createElement(
998
542
  import_image2.default,
999
543
  {
1000
544
  src: logo.src,
@@ -1007,12 +551,12 @@ var HeroSection = ({
1007
551
  };
1008
552
 
1009
553
  // src/components/AppBento2.tsx
1010
- var import_react11 = __toESM(require("react"));
1011
- var import_react12 = require("@hugeicons/react");
554
+ var import_react9 = __toESM(require("react"));
555
+ var import_react10 = require("@hugeicons/react");
1012
556
  var AppBento2 = ({ tagline, headline, features }) => {
1013
- const [isAnimating, setIsAnimating] = (0, import_react11.useState)(false);
1014
- const titleRef = (0, import_react11.useRef)(null);
1015
- (0, import_react11.useEffect)(() => {
557
+ const [isAnimating, setIsAnimating] = (0, import_react9.useState)(false);
558
+ const titleRef = (0, import_react9.useRef)(null);
559
+ (0, import_react9.useEffect)(() => {
1016
560
  const observer = new IntersectionObserver(
1017
561
  ([entry]) => {
1018
562
  if (entry.isIntersecting) {
@@ -1030,66 +574,66 @@ var AppBento2 = ({ tagline, headline, features }) => {
1030
574
  }
1031
575
  return () => observer.disconnect();
1032
576
  }, []);
1033
- return /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-full py-16 bg-black" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react11.default.createElement(
577
+ return /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-full py-16" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "w-full flex justify-center px-4" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative overflow-hidden mb-12 text-left" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4 " }, tagline), /* @__PURE__ */ import_react9.default.createElement(
1034
578
  "h2",
1035
579
  {
1036
580
  ref: titleRef,
1037
- className: `text-3xl tracking-tight text-white leading-[1.1] ${isAnimating ? "" : ""}`,
581
+ className: ` text-3xl tracking-tight text-black leading-[1.1] ${isAnimating ? "" : ""}`,
1038
582
  style: isAnimating ? { animationIterationCount: 1 } : {}
1039
583
  },
1040
584
  headline
1041
- ))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
1042
- const isPrimary = i === 0;
1043
- const isHighlight = i === 1;
1044
- const isSecondary = i === 2;
585
+ ))), /* @__PURE__ */ import_react9.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-6 gap-6" }, features.map((f, i) => {
586
+ const isWhite = i === 0;
587
+ const isBlack = i === 1;
588
+ const isNeutral = i === 2;
1045
589
  const getBgStyle = () => {
1046
- if (isPrimary) return "bg-neutral-900 ";
1047
- if (isHighlight) return "bg-black";
1048
- if (isSecondary) return "bg-neutral-800";
1049
- return "bg-neutral-900 ";
590
+ if (isWhite) return "bg-white";
591
+ if (isBlack) return "bg-black";
592
+ if (isNeutral) return "bg-neutral-200";
593
+ return "bg-neutral-200";
1050
594
  };
1051
595
  const getShadowStyle = () => {
1052
- if (isHighlight) return `
1053
- inset 0 1.5px 0 0 rgba(255, 255, 255, 0.05),
1054
- inset 0 -3px 0 0 rgba(0, 0, 0, 0.5),
1055
- 0 4px 0 0 #000000,
1056
- 0 12px 24px rgba(0, 0, 0, 0.5)
596
+ if (isBlack) return `
597
+ inset 0 1.5px 0 0 rgba(255, 255, 255, 0.2),
598
+ inset 0 -3px 0 0 rgba(0, 0, 0, 0.3),
599
+ 0 4px 0 0 #0c0c0c,
600
+ 0 12px 24px rgba(0, 0, 0, 0.1)
1057
601
  `;
1058
602
  return "none";
1059
603
  };
1060
- const textColor = "text-white";
1061
- const subTextColor = "text-neutral-400";
1062
- const labelColor = "text-neutral-500";
1063
- return /* @__PURE__ */ import_react11.default.createElement(
604
+ const textColor = isBlack ? "text-white" : "text-black";
605
+ const subTextColor = isBlack ? "text-neutral-300" : "text-neutral-600";
606
+ const labelColor = isBlack ? "text-neutral-400" : "text-neutral-500";
607
+ return /* @__PURE__ */ import_react9.default.createElement(
1064
608
  "div",
1065
609
  {
1066
610
  key: i,
1067
611
  className: `relative rounded-2xl overflow-hidden p-8 flex flex-col min-h-75 transition-all duration-500 group text-left ${getBgStyle()} ${f.size}`,
1068
612
  style: { boxShadow: getShadowStyle() }
1069
613
  },
1070
- /* @__PURE__ */ import_react11.default.createElement(
614
+ /* @__PURE__ */ import_react9.default.createElement(
1071
615
  "div",
1072
616
  {
1073
617
  className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
1074
618
  style: { backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")` }
1075
619
  }
1076
620
  ),
1077
- isHighlight && /* @__PURE__ */ import_react11.default.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
1078
- /* @__PURE__ */ import_react11.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isHighlight ? "text-white/5" : "text-white/5"}` }, /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: f.icon, size: 180 }))),
1079
- /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react11.default.createElement("div", { className: `p-2 rounded-full transition-colors bg-white/10` }, /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react11.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react11.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
621
+ isBlack && /* @__PURE__ */ import_react9.default.createElement("span", { className: "absolute inset-0 rounded-2xl bg-linear-to-b from-white/10 via-white/5 to-transparent pointer-events-none z-10" }),
622
+ /* @__PURE__ */ import_react9.default.createElement("div", { className: "absolute inset-0 overflow-hidden pointer-events-none z-0" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: `absolute -bottom-8 -right-8 transform group-hover:scale-110 transition-transform duration-700 ease-out ${isBlack ? "text-white/5" : "text-black/5"}` }, /* @__PURE__ */ import_react9.default.createElement(import_react10.HugeiconsIcon, { icon: f.icon, size: 180 }))),
623
+ /* @__PURE__ */ import_react9.default.createElement("div", { className: "relative z-10 w-full h-full flex flex-col pointer-events-auto" }, /* @__PURE__ */ import_react9.default.createElement("div", { className: "flex items-center justify-between mb-8" }, /* @__PURE__ */ import_react9.default.createElement("span", { className: `text-[9px] tracking-widest ${labelColor}` }, f.label), /* @__PURE__ */ import_react9.default.createElement("div", { className: `p-2 rounded-full transition-colors ${isBlack ? "bg-white/10" : "bg-white/50 backdrop-blur-sm"}` }, /* @__PURE__ */ import_react9.default.createElement(import_react10.HugeiconsIcon, { icon: f.icon, size: 20, className: textColor }))), /* @__PURE__ */ import_react9.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react9.default.createElement("h3", { className: `text-xl mb-2 tracking-tight ${textColor}` }, f.title), /* @__PURE__ */ import_react9.default.createElement("p", { className: `text-[13px] leading-relaxed max-w-sm ${subTextColor}` }, f.desc)))
1080
624
  );
1081
625
  })))));
1082
626
  };
1083
627
 
1084
628
  // src/components/FeatureScroll.tsx
1085
- var import_react13 = __toESM(require("react"));
629
+ var import_react11 = __toESM(require("react"));
1086
630
  var import_image3 = __toESM(require("next/image"));
1087
- var import_react14 = require("@hugeicons/react");
631
+ var import_react12 = require("@hugeicons/react");
1088
632
  var import_core_free_icons2 = require("@hugeicons/core-free-icons");
1089
633
  var FeatureCard = ({ feature, bgImage }) => {
1090
- const [isBgLoading, setIsBgLoading] = (0, import_react13.useState)(true);
1091
- const [isFgLoading, setIsFgLoading] = (0, import_react13.useState)(!!feature.image);
1092
- return /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-900 rounded-2xl overflow-hidden mb-6 flex items-center justify-center " }, /* @__PURE__ */ import_react13.default.createElement(
634
+ const [isBgLoading, setIsBgLoading] = (0, import_react11.useState)(true);
635
+ const [isFgLoading, setIsFgLoading] = (0, import_react11.useState)(!!feature.image);
636
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col shrink-0 w-[90vw] sm:w-150 snap-center md:snap-start group cursor-grab active:cursor-grabbing" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative w-full aspect-16/10 bg-neutral-100 rounded-2xl overflow-hidden mb-6 flex items-center justify-center" }, /* @__PURE__ */ import_react11.default.createElement(
1093
637
  import_image3.default,
1094
638
  {
1095
639
  src: bgImage,
@@ -1102,7 +646,7 @@ var FeatureCard = ({ feature, bgImage }) => {
1102
646
  ${isBgLoading ? "blur-xl scale-110" : "blur-0 scale-100"}
1103
647
  `
1104
648
  }
1105
- ), /* @__PURE__ */ import_react13.default.createElement(
649
+ ), /* @__PURE__ */ import_react11.default.createElement(
1106
650
  "div",
1107
651
  {
1108
652
  className: "absolute inset-0 w-full h-full pointer-events-none z-0 opacity-[0.25] mix-blend-overlay",
@@ -1110,7 +654,7 @@ var FeatureCard = ({ feature, bgImage }) => {
1110
654
  backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`
1111
655
  }
1112
656
  }
1113
- ), isFgLoading && feature.image && /* @__PURE__ */ import_react13.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-900/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.Loading03Icon, size: 32, className: "animate-spin text-neutral-500" })), feature.image && /* @__PURE__ */ import_react13.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react13.default.createElement(
657
+ ), isFgLoading && feature.image && /* @__PURE__ */ import_react11.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-50/50 backdrop-blur-sm transition-opacity duration-300" }, /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons2.Loading03Icon, size: 32, className: "animate-spin text-neutral-400" })), feature.image && /* @__PURE__ */ import_react11.default.createElement("div", { className: "absolute -bottom-6 -right-6 w-[85%] h-[85%] z-10 transition-transform duration-700 ease-out group-hover:-translate-x-2 group-hover:-translate-y-2" }, /* @__PURE__ */ import_react11.default.createElement(
1114
658
  import_image3.default,
1115
659
  {
1116
660
  src: feature.image,
@@ -1119,16 +663,16 @@ var FeatureCard = ({ feature, bgImage }) => {
1119
663
  sizes: "(max-width: 768px) 90vw, 600px",
1120
664
  onLoad: () => setIsFgLoading(false),
1121
665
  className: `
1122
- object-cover object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.5)] transition-all duration-700 ease-out
666
+ object-cover object-top-left rounded-tl-2xl shadow-[-12px_-12px_30px_rgba(0,0,0,0.06)] transition-all duration-700 ease-out
1123
667
  ${isFgLoading ? "opacity-0 blur-xl" : "opacity-100 blur-0"}
1124
668
  `
1125
669
  }
1126
- ))), /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react13.default.createElement("h3", { className: "text-xl tracking-tight text-white mb-2" }, feature.title), /* @__PURE__ */ import_react13.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-400 max-w-[90%]" }, feature.desc)));
670
+ ))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col text-left pr-4" }, /* @__PURE__ */ import_react11.default.createElement("h3", { className: " text-xl tracking-tight text-black mb-2" }, feature.title), /* @__PURE__ */ import_react11.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 max-w-[90%]" }, feature.desc)));
1127
671
  };
1128
672
  var FeatureScroll = ({ tagline, headline, features }) => {
1129
- const scrollRef = (0, import_react13.useRef)(null);
1130
- const [canScrollLeft, setCanScrollLeft] = (0, import_react13.useState)(false);
1131
- const [canScrollRight, setCanScrollRight] = (0, import_react13.useState)(true);
673
+ const scrollRef = (0, import_react11.useRef)(null);
674
+ const [canScrollLeft, setCanScrollLeft] = (0, import_react11.useState)(false);
675
+ const [canScrollRight, setCanScrollRight] = (0, import_react11.useState)(true);
1132
676
  const checkScroll = () => {
1133
677
  if (scrollRef.current) {
1134
678
  const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
@@ -1136,7 +680,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
1136
680
  setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
1137
681
  }
1138
682
  };
1139
- (0, import_react13.useEffect)(() => {
683
+ (0, import_react11.useEffect)(() => {
1140
684
  checkScroll();
1141
685
  window.addEventListener("resize", checkScroll);
1142
686
  return () => window.removeEventListener("resize", checkScroll);
@@ -1152,74 +696,74 @@ var FeatureScroll = ({ tagline, headline, features }) => {
1152
696
  "https://retinalabs.company/assets/images/bg_6.avif",
1153
697
  "https://retinalabs.company/assets/images/bg_1.avif"
1154
698
  ];
1155
- return /* @__PURE__ */ import_react13.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden bg-black" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react13.default.createElement("h2", { className: "text-3xl tracking-tight text-white leading-[1.05]" }, headline)), /* @__PURE__ */ import_react13.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react13.default.createElement(
699
+ return /* @__PURE__ */ import_react11.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 overflow-hidden" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex flex-col md:flex-row md:items-end justify-between gap-6 mb-12" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "relative z-10 text-left" }, /* @__PURE__ */ import_react11.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react11.default.createElement("h2", { className: " text-3xl tracking-tight text-black leading-[1.05]" }, headline)), /* @__PURE__ */ import_react11.default.createElement("div", { className: "hidden md:flex items-center gap-3" }, /* @__PURE__ */ import_react11.default.createElement(
1156
700
  "button",
1157
701
  {
1158
702
  onClick: () => scroll("left"),
1159
703
  disabled: !canScrollLeft,
1160
- className: "p-4 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-white disabled:opacity-30 disabled:hover:border-neutral-800 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
704
+ className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
1161
705
  "aria-label": "Previous feature"
1162
706
  },
1163
- /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
1164
- ), /* @__PURE__ */ import_react13.default.createElement(
707
+ /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
708
+ ), /* @__PURE__ */ import_react11.default.createElement(
1165
709
  "button",
1166
710
  {
1167
711
  onClick: () => scroll("right"),
1168
712
  disabled: !canScrollRight,
1169
- className: "p-4 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-white disabled:opacity-30 disabled:hover:border-neutral-800 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
713
+ className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 disabled:hover:border-neutral-200 disabled:hover:text-neutral-500 disabled:cursor-not-allowed transition-all outline-none",
1170
714
  "aria-label": "Next feature"
1171
715
  },
1172
- /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
1173
- ))), /* @__PURE__ */ import_react13.default.createElement(
716
+ /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
717
+ ))), /* @__PURE__ */ import_react11.default.createElement(
1174
718
  "div",
1175
719
  {
1176
720
  ref: scrollRef,
1177
721
  onScroll: checkScroll,
1178
722
  className: "flex gap-6 overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] scrollbar-none pb-8 -mx-4 px-4 md:mx-0 md:px-0"
1179
723
  },
1180
- features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react13.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
1181
- ), /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react13.default.createElement(
724
+ features.slice(0, 3).map((feature, idx) => /* @__PURE__ */ import_react11.default.createElement(FeatureCard, { key: idx, feature, bgImage: bgImages[idx] }))
725
+ ), /* @__PURE__ */ import_react11.default.createElement("div", { className: "flex md:hidden items-center justify-center gap-4 mt-2" }, /* @__PURE__ */ import_react11.default.createElement(
1182
726
  "button",
1183
727
  {
1184
728
  onClick: () => scroll("left"),
1185
729
  disabled: !canScrollLeft,
1186
- className: "p-4 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-white disabled:opacity-30 transition-all outline-none"
730
+ className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
1187
731
  },
1188
- /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
1189
- ), /* @__PURE__ */ import_react13.default.createElement(
732
+ /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons2.ArrowLeft01Icon, size: 20 })
733
+ ), /* @__PURE__ */ import_react11.default.createElement(
1190
734
  "button",
1191
735
  {
1192
736
  onClick: () => scroll("right"),
1193
737
  disabled: !canScrollRight,
1194
- className: "p-4 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-white disabled:opacity-30 transition-all outline-none"
738
+ className: "p-4 border border-neutral-200 rounded-full text-neutral-500 hover:text-black hover:border-black disabled:opacity-30 transition-all outline-none"
1195
739
  },
1196
- /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
740
+ /* @__PURE__ */ import_react11.default.createElement(import_react12.HugeiconsIcon, { icon: import_core_free_icons2.ArrowRight01Icon, size: 20 })
1197
741
  ))));
1198
742
  };
1199
743
 
1200
744
  // src/components/PlatformFeatures.tsx
1201
- var import_react15 = __toESM(require("react"));
1202
- var import_react16 = require("@hugeicons/react");
745
+ var import_react13 = __toESM(require("react"));
746
+ var import_react14 = require("@hugeicons/react");
1203
747
  var PlatformFeatures = ({
1204
748
  tagline,
1205
749
  headline,
1206
750
  description,
1207
751
  features
1208
752
  }) => {
1209
- return /* @__PURE__ */ import_react15.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10 bg-black" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react15.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react15.default.createElement("h2", { className: "text-3xl tracking-tight text-white leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-400 max-w-2xl" }, description)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react15.default.createElement(
753
+ return /* @__PURE__ */ import_react13.default.createElement("section", { className: "w-full flex justify-center mb-15 relative z-10" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col items-start mb-16 relative z-10" }, /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 block mb-4" }, tagline), /* @__PURE__ */ import_react13.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.05] mb-6" }, headline), /* @__PURE__ */ import_react13.default.createElement("p", { className: "text-[15px] leading-[1.8] text-neutral-600 max-w-2xl" }, description)), /* @__PURE__ */ import_react13.default.createElement("div", { className: "w-full h-px bg-neutral-100 mb-16", "aria-hidden": "true" }), /* @__PURE__ */ import_react13.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-x-8 gap-y-12" }, features.map((feature, idx) => /* @__PURE__ */ import_react13.default.createElement(
1210
754
  "div",
1211
755
  {
1212
756
  key: idx,
1213
757
  className: "flex flex-col group animate-in fade-in slide-in-from-bottom-4 duration-700 fill-mode-both",
1214
758
  style: { animationDelay: feature.delay || "0ms" }
1215
759
  },
1216
- /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-800 flex items-center justify-center text-white transition-colors duration-300" }, /* @__PURE__ */ import_react15.default.createElement(import_react16.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react15.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-500 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react15.default.createElement("h3", { className: "text-xl tracking-tight text-white" }, feature.title))),
1217
- /* @__PURE__ */ import_react15.default.createElement("div", null, /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-400 pr-4" }, feature.desc))
760
+ /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-row items-center gap-4 mb-4" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "w-14 h-14 shrink-0 rounded-xl border border-neutral-200 flex items-center justify-center text-neutral-600 transition-colors duration-300" }, /* @__PURE__ */ import_react13.default.createElement(import_react14.HugeiconsIcon, { icon: feature.icon, size: 24 })), /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex flex-col justify-center" }, /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-[11px] tracking-widest text-neutral-400 mb-0.5" }, feature.label || "CAPABILITY"), /* @__PURE__ */ import_react13.default.createElement("h3", { className: "text-xl tracking-tight text-black" }, feature.title))),
761
+ /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement("p", { className: "text-[13px] leading-relaxed text-neutral-600 pr-4" }, feature.desc))
1218
762
  )))));
1219
763
  };
1220
764
 
1221
765
  // src/components/ManagedDocument.tsx
1222
- var import_react17 = __toESM(require("react"));
766
+ var import_react15 = __toESM(require("react"));
1223
767
  var ManagedDocument = ({
1224
768
  tagline,
1225
769
  title,
@@ -1227,9 +771,9 @@ var ManagedDocument = ({
1227
771
  contactText,
1228
772
  contactEmail
1229
773
  }) => {
1230
- const [isAnimating, setIsAnimating] = (0, import_react17.useState)(false);
1231
- const titleRef = (0, import_react17.useRef)(null);
1232
- (0, import_react17.useEffect)(() => {
774
+ const [isAnimating, setIsAnimating] = (0, import_react15.useState)(false);
775
+ const titleRef = (0, import_react15.useRef)(null);
776
+ (0, import_react15.useEffect)(() => {
1233
777
  const observer = new IntersectionObserver(
1234
778
  ([entry]) => {
1235
779
  if (entry.isIntersecting) {
@@ -1249,19 +793,19 @@ var ManagedDocument = ({
1249
793
  }, []);
1250
794
  return (
1251
795
  // Outer layout wrapper (takes up available space, adds padding)
1252
- /* @__PURE__ */ import_react17.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative bg-neutral-900 rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react17.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react17.default.createElement(
796
+ /* @__PURE__ */ import_react15.default.createElement("div", { className: "grow pt-28 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react15.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react15.default.createElement(
1253
797
  "h1",
1254
798
  {
1255
799
  ref: titleRef,
1256
- className: `text-3xl mt-4 text-white tracking-tight text-left ${isAnimating ? "" : ""}`,
800
+ className: ` text-3xl mt-4 text-black tracking-tight text-left ${isAnimating ? "" : ""}`,
1257
801
  style: isAnimating ? { animationIterationCount: 1 } : {}
1258
802
  },
1259
803
  title
1260
- )), sections.map((section, index) => /* @__PURE__ */ import_react17.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-white mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react17.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-400 space-y-4 text-left font-light" }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react17.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react17.default.createElement("div", { className: `border-neutral-800 bg-neutral-950 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-white text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react17.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react17.default.createElement("p", { className: "text-[11px] text-neutral-500 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react17.default.createElement(
804
+ )), sections.map((section, index) => /* @__PURE__ */ import_react15.default.createElement("div", { key: index, className: "relative px-5 md:px-12 py-8 md:py-10" }, section.heading && /* @__PURE__ */ import_react15.default.createElement("p", { className: " text-[11px] tracking-[0.2em] text-black mb-4 text-left " }, section.heading), section.paragraphs && section.paragraphs.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", { className: "text-[14px] leading-[1.8] text-neutral-700 space-y-4 text-left font-light" }, section.paragraphs.map((text, pIndex) => /* @__PURE__ */ import_react15.default.createElement("p", { key: pIndex }, text))), section.quote && /* @__PURE__ */ import_react15.default.createElement("div", { className: `border-neutral-100 border rounded-xl p-6 ${section.paragraphs && section.paragraphs.length > 0 ? "mt-6" : ""}` }, /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-neutral-900 text-[14px] md:text-[14px] leading-relaxed" }, '"', section.quote, '"')))), (contactText || contactEmail) && /* @__PURE__ */ import_react15.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react15.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react15.default.createElement(
1261
805
  "a",
1262
806
  {
1263
807
  href: `mailto:${contactEmail}`,
1264
- className: "text-white decoration-neutral-600 decoration-1 ml-1 transition-colors hover:decoration-white"
808
+ className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors"
1265
809
  },
1266
810
  contactEmail
1267
811
  ))))))
@@ -1269,18 +813,18 @@ var ManagedDocument = ({
1269
813
  };
1270
814
 
1271
815
  // src/components/ManagedContactBlock.tsx
1272
- var import_react18 = __toESM(require("react"));
1273
- var import_react19 = require("@hugeicons/react");
816
+ var import_react16 = __toESM(require("react"));
817
+ var import_react17 = require("@hugeicons/react");
1274
818
  var SecureEmail = ({ user, domain, className }) => {
1275
- const [isMounted, setIsMounted] = (0, import_react18.useState)(false);
1276
- (0, import_react18.useEffect)(() => {
819
+ const [isMounted, setIsMounted] = (0, import_react16.useState)(false);
820
+ (0, import_react16.useEffect)(() => {
1277
821
  setIsMounted(true);
1278
822
  }, []);
1279
823
  if (!isMounted) {
1280
- return /* @__PURE__ */ import_react18.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
824
+ return /* @__PURE__ */ import_react16.default.createElement("span", { className, style: { opacity: 0 } }, "Loading");
1281
825
  }
1282
826
  const email = `${user}@${domain}`;
1283
- return /* @__PURE__ */ import_react18.default.createElement("a", { href: `mailto:${email}`, className }, email);
827
+ return /* @__PURE__ */ import_react16.default.createElement("a", { href: `mailto:${email}`, className }, email);
1284
828
  };
1285
829
  var ManagedContactBlock = ({
1286
830
  tagline,
@@ -1289,7 +833,7 @@ var ManagedContactBlock = ({
1289
833
  emails,
1290
834
  socials
1291
835
  }) => {
1292
- return /* @__PURE__ */ import_react18.default.createElement("div", { className: "grow pt-28 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative bg-neutral-900 rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react18.default.createElement(
836
+ return /* @__PURE__ */ import_react16.default.createElement("div", { className: "grow pt-28 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react16.default.createElement(
1293
837
  "div",
1294
838
  {
1295
839
  className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
@@ -1298,51 +842,51 @@ var ManagedContactBlock = ({
1298
842
  backgroundRepeat: "repeat"
1299
843
  }
1300
844
  }
1301
- ), /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react18.default.createElement("h1", { className: "text-3xl mt-4 text-white tracking-tight text-left" }, title)), /* @__PURE__ */ import_react18.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-white mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react18.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-400 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-white" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react18.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react18.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react18.default.createElement(
845
+ ), /* @__PURE__ */ import_react16.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "relative px-8 md:px-12 py-10" }, tagline && /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react16.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react16.default.createElement("div", { className: "relative px-8 md:px-12 py-8 pb-14" }, /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex flex-wrap gap-12 lg:gap-16 w-full" }, company && /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Contact Details"), /* @__PURE__ */ import_react16.default.createElement("div", { className: "space-y-3 text-[13px] text-neutral-600 leading-[1.8]" }, company.name && /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-black" }, company.name), company.lines && company.lines.map((line, idx) => /* @__PURE__ */ import_react16.default.createElement("p", { key: idx }, line)), company.phone && /* @__PURE__ */ import_react16.default.createElement("p", { className: "pt-2" }, /* @__PURE__ */ import_react16.default.createElement(
1302
846
  "a",
1303
847
  {
1304
848
  href: `tel:${company.phone.replace(/\s+/g, "")}`,
1305
- className: "transition-colors hover:text-white"
849
+ className: "transition-colors hover:text-black"
1306
850
  },
1307
851
  company.phone
1308
- )))), emails && emails.length > 0 && /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-white mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react18.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react18.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react18.default.createElement(
852
+ )))), emails && emails.length > 0 && /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Email Directory"), /* @__PURE__ */ import_react16.default.createElement("div", { className: "space-y-6 text-[13px]" }, emails.map((email, idx) => /* @__PURE__ */ import_react16.default.createElement("div", { key: idx }, /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[11px] tracking-[0.2em] mb-1.5 text-neutral-500 " }, email.label), /* @__PURE__ */ import_react16.default.createElement(
1309
853
  SecureEmail,
1310
854
  {
1311
855
  user: email.user,
1312
856
  domain: email.domain,
1313
- className: "text-neutral-400 transition-colors hover:text-white"
857
+ className: "text-neutral-600 transition-colors hover:text-black"
1314
858
  }
1315
- ))))), socials && socials.length > 0 && /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-white mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react18.default.createElement(
859
+ ))))), socials && socials.length > 0 && /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex-1 min-w-65 space-y-6" }, /* @__PURE__ */ import_react16.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-black mb-4 " }, "Find Us Online"), /* @__PURE__ */ import_react16.default.createElement("div", { className: "flex flex-col space-y-5 pt-1" }, socials.map((social, idx) => /* @__PURE__ */ import_react16.default.createElement(
1316
860
  "a",
1317
861
  {
1318
862
  key: idx,
1319
863
  href: social.href,
1320
864
  target: "_blank",
1321
865
  rel: "noopener noreferrer",
1322
- className: "flex items-center gap-3 transition-colors group text-neutral-400 hover:text-white",
866
+ className: "flex items-center gap-3 transition-colors group text-neutral-600 hover:text-black",
1323
867
  "aria-label": social.label
1324
868
  },
1325
- /* @__PURE__ */ import_react18.default.createElement(import_react19.HugeiconsIcon, { icon: social.icon, size: 18 }),
1326
- /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-[13px]" }, social.label)
869
+ /* @__PURE__ */ import_react16.default.createElement(import_react17.HugeiconsIcon, { icon: social.icon, size: 18 }),
870
+ /* @__PURE__ */ import_react16.default.createElement("span", { className: "text-[13px]" }, social.label)
1327
871
  )))))))));
1328
872
  };
1329
873
 
1330
874
  // src/components/ManagedPricingBlock.tsx
1331
- var import_react20 = __toESM(require("react"));
875
+ var import_react18 = __toESM(require("react"));
1332
876
  var import_link5 = __toESM(require("next/link"));
1333
877
  var import_image4 = __toESM(require("next/image"));
1334
- var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react20.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react20.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "white" }), /* @__PURE__ */ import_react20.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "black", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
1335
- var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react20.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react20.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#262626" }), /* @__PURE__ */ import_react20.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#737373", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
878
+ var CheckIcon = ({ className = "" }) => /* @__PURE__ */ import_react18.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react18.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ import_react18.default.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
879
+ var CrossIcon = ({ className = "" }) => /* @__PURE__ */ import_react18.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react18.default.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "#F5F5F5" }), /* @__PURE__ */ import_react18.default.createElement("path", { d: "M15 9L9 15M9 9l6 6", stroke: "#D4D4D4", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
1336
880
  var ManagedPricingBlock = ({
1337
881
  tagline,
1338
882
  title,
1339
883
  plans = [],
1340
884
  tabs
1341
885
  }) => {
1342
- const [isAnimating, setIsAnimating] = (0, import_react20.useState)(false);
1343
- const [activeTabIndex, setActiveTabIndex] = (0, import_react20.useState)(0);
1344
- const titleRef = (0, import_react20.useRef)(null);
1345
- (0, import_react20.useEffect)(() => {
886
+ const [isAnimating, setIsAnimating] = (0, import_react18.useState)(false);
887
+ const [activeTabIndex, setActiveTabIndex] = (0, import_react18.useState)(0);
888
+ const titleRef = (0, import_react18.useRef)(null);
889
+ (0, import_react18.useEffect)(() => {
1346
890
  const observer = new IntersectionObserver(
1347
891
  ([entry]) => {
1348
892
  if (entry.isIntersecting) {
@@ -1362,79 +906,79 @@ var ManagedPricingBlock = ({
1362
906
  }, []);
1363
907
  const hasTabs = tabs && tabs.length > 0;
1364
908
  const currentPlans = hasTabs ? tabs[activeTabIndex].plans : plans;
1365
- return /* @__PURE__ */ import_react20.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-neutral-500 block" }, tagline), /* @__PURE__ */ import_react20.default.createElement(
909
+ return /* @__PURE__ */ import_react18.default.createElement("div", { className: "grow pt-10 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col items-center" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "w-full flex flex-col items-center text-center mb-10 sm:mb-12" }, tagline && /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-[9px] tracking-[0.4em] text-black block " }, tagline), /* @__PURE__ */ import_react18.default.createElement(
1366
910
  "h1",
1367
911
  {
1368
912
  ref: titleRef,
1369
- className: `text-2xl sm:text-3xl mt-3 text-white tracking-tight ${isAnimating ? "" : ""}`,
913
+ className: `text-2xl sm:text-3xl mt-3 text-black tracking-tight ${isAnimating ? "" : ""}`,
1370
914
  style: isAnimating ? { animationIterationCount: 1 } : {}
1371
915
  },
1372
916
  title
1373
- )), hasTabs && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center bg-neutral-900 rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
917
+ )), hasTabs && /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex items-center justify-center mb-8 sm:mb-10 w-full animate-in fade-in duration-300 px-2" }, /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex items-center bg-white rounded-full p-1 sm:p-1.5 max-w-full overflow-x-auto custom-scrollbar" }, tabs.map((tab, idx) => {
1374
918
  const isActive = activeTabIndex === idx;
1375
- return /* @__PURE__ */ import_react20.default.createElement(
919
+ return /* @__PURE__ */ import_react18.default.createElement(
1376
920
  "button",
1377
921
  {
1378
922
  key: idx,
1379
923
  onClick: () => setActiveTabIndex(idx),
1380
- className: `px-4 sm:px-6 py-1.5 sm:py-2 rounded-full text-[11px] sm:text-xs transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-800 text-white" : "text-neutral-500 hover:text-white /50"}`
924
+ className: `px-4 sm:px-6 py-1.5 sm:py-2 rounded-full text-[11px] sm:text-xs transition-all duration-200 outline-none whitespace-nowrap shrink-0 ${isActive ? "bg-neutral-50 text-black " : "text-neutral-500 hover:text-black hover:bg-neutral-50/50 "}`
1381
925
  },
1382
926
  tab.label
1383
927
  );
1384
- }))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ import_react20.default.createElement(
928
+ }))), /* @__PURE__ */ import_react18.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5 w-full max-w-3xl animate-in slide-in-from-bottom-2 fade-in duration-500" }, currentPlans.map((plan, planIdx) => /* @__PURE__ */ import_react18.default.createElement(
1385
929
  "div",
1386
930
  {
1387
931
  key: `${activeTabIndex}-${planIdx}`,
1388
- className: `bg-neutral-900 rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "border-neutral-700" : ""}`
932
+ className: `bg-white rounded-3xl p-6 flex flex-col relative overflow-hidden transition-all duration-300 ${plan.isPremium ? "" : ""}`
1389
933
  },
1390
- /* @__PURE__ */ import_react20.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-white text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react20.default.createElement("h3", { className: "text-3xl font-light text-white" }, plan.price), plan.period && /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-xs text-neutral-400 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2 mt-4 opacity-90" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react20.default.createElement(
934
+ /* @__PURE__ */ import_react18.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-black text-base block mb-1" }, plan.name), /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex items-baseline gap-1" }, /* @__PURE__ */ import_react18.default.createElement("h3", { className: "text-3xl font-light text-black" }, plan.price), plan.period && /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-xs text-neutral-500" }, plan.period)), /* @__PURE__ */ import_react18.default.createElement("p", { className: "text-xs text-neutral-500 mt-2 min-h-8" }, plan.description), plan.showApps && plan.appLogos && plan.appLogos.length > 0 && /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex items-center gap-2 mt-4" }, plan.appLogos.map((logo, logoIdx) => /* @__PURE__ */ import_react18.default.createElement(
1391
935
  "div",
1392
936
  {
1393
937
  key: logoIdx,
1394
938
  className: "relative w-5 h-5 overflow-hidden flex items-center justify-center shrink-0"
1395
939
  },
1396
- /* @__PURE__ */ import_react20.default.createElement(
940
+ /* @__PURE__ */ import_react18.default.createElement(
1397
941
  import_image4.default,
1398
942
  {
1399
943
  src: logo.src,
1400
944
  alt: logo.alt,
1401
945
  width: 16,
1402
946
  height: 16,
1403
- className: "object-contain filter invert"
947
+ className: "object-contain"
1404
948
  }
1405
949
  )
1406
950
  )))),
1407
- plan.isPremium ? /* @__PURE__ */ import_react20.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react20.default.createElement(
951
+ plan.isPremium ? /* @__PURE__ */ import_react18.default.createElement(ThreeDButton, { href: plan.ctaHref, className: "mb-6 w-full" }, plan.ctaText) : /* @__PURE__ */ import_react18.default.createElement(
1408
952
  import_link5.default,
1409
953
  {
1410
954
  href: plan.ctaHref,
1411
- className: "w-full py-2.5 px-5 rounded-full font-medium border border-neutral-700 text-center text-white text-xs hover:border-neutral-600 transition-colors mb-6 outline-none block"
955
+ className: "w-full py-2 px-5 rounded-full border border-neutral-100 text-center text-black text-xs hover:bg-neutral-50 transition-colors mb-6 outline-none block"
1412
956
  },
1413
957
  plan.ctaText
1414
958
  ),
1415
- /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
959
+ /* @__PURE__ */ import_react18.default.createElement("div", { className: "flex flex-col gap-3" }, plan.features.map((feature, featureIdx) => {
1416
960
  const isAvailable = feature.value !== false;
1417
961
  const valueText = typeof feature.value === "string" ? feature.value : "";
1418
- return /* @__PURE__ */ import_react20.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5" }, isAvailable ? /* @__PURE__ */ import_react20.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react20.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react20.default.createElement("span", { className: `text-xs ${isAvailable ? "text-neutral-300" : "text-neutral-600"}` }, feature.name, valueText && /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
962
+ return /* @__PURE__ */ import_react18.default.createElement("div", { key: featureIdx, className: "flex items-center gap-2.5 min-w-0" }, isAvailable ? /* @__PURE__ */ import_react18.default.createElement(CheckIcon, null) : /* @__PURE__ */ import_react18.default.createElement(CrossIcon, null), /* @__PURE__ */ import_react18.default.createElement("span", { className: `text-xs truncate ${isAvailable ? "text-neutral-800" : "text-neutral-400"}` }, feature.name, valueText && /* @__PURE__ */ import_react18.default.createElement("span", { className: "text-neutral-500 ml-1" }, "(", valueText, ")")));
1419
963
  }))
1420
964
  )))));
1421
965
  };
1422
966
 
1423
967
  // src/components/ManagedBoardBlock.tsx
1424
- var import_react21 = __toESM(require("react"));
968
+ var import_react19 = __toESM(require("react"));
1425
969
  var import_image5 = __toESM(require("next/image"));
1426
- var import_react22 = require("@hugeicons/react");
970
+ var import_react20 = require("@hugeicons/react");
1427
971
  var import_core_free_icons3 = require("@hugeicons/core-free-icons");
1428
- var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react21.default.createElement(
972
+ var MemberSocialLink = ({ href, icon, label, name }) => /* @__PURE__ */ import_react19.default.createElement(
1429
973
  "a",
1430
974
  {
1431
975
  href,
1432
976
  target: "_blank",
1433
977
  rel: "noopener noreferrer",
1434
- className: "text-neutral-500 hover:text-white transition-colors",
978
+ className: "text-neutral-400 hover:text-black transition-colors",
1435
979
  "aria-label": `${name} on ${label}`
1436
980
  },
1437
- /* @__PURE__ */ import_react21.default.createElement(import_react22.HugeiconsIcon, { icon, size: 16 })
981
+ /* @__PURE__ */ import_react19.default.createElement(import_react20.HugeiconsIcon, { icon, size: 16 })
1438
982
  );
1439
983
  var ManagedBoardBlock = ({
1440
984
  tagline,
@@ -1443,7 +987,7 @@ var ManagedBoardBlock = ({
1443
987
  contactText,
1444
988
  contactEmail
1445
989
  }) => {
1446
- return /* @__PURE__ */ import_react21.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react21.default.createElement(
990
+ return /* @__PURE__ */ import_react19.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative w-full mx-auto overflow-hidden max-w-7xl" }, /* @__PURE__ */ import_react19.default.createElement(
1447
991
  "div",
1448
992
  {
1449
993
  className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
@@ -1452,7 +996,7 @@ var ManagedBoardBlock = ({
1452
996
  backgroundRepeat: "repeat"
1453
997
  }
1454
998
  }
1455
- ), /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react21.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react21.default.createElement("h1", { className: "text-3xl mt-4 text-white tracking-tight text-left" }, title)), /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react21.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-neutral-900 flex flex-col transition-all group" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-neutral-800 overflow-hidden rounded-xl " }, /* @__PURE__ */ import_react21.default.createElement(
999
+ ), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10" }, tagline && /* @__PURE__ */ import_react19.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react19.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-4 md:py-8" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-8" }, members.map((member, idx) => /* @__PURE__ */ import_react19.default.createElement("div", { key: idx, className: "relative p-6 md:p-8 rounded-2xl bg-white flex flex-col transition-all group" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex items-start space-x-4 md:space-x-5 mb-5 md:mb-6" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative w-14 h-14 md:w-16 md:h-16 shrink-0 bg-white overflow-hidden rounded-xl" }, /* @__PURE__ */ import_react19.default.createElement(
1456
1000
  import_image5.default,
1457
1001
  {
1458
1002
  src: member.imageSrc,
@@ -1461,7 +1005,7 @@ var ManagedBoardBlock = ({
1461
1005
  sizes: "(max-width: 768px) 56px, 64px",
1462
1006
  className: "object-cover grayscale opacity-100 transition-opacity"
1463
1007
  }
1464
- )), /* @__PURE__ */ import_react21.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react21.default.createElement("h3", { className: "text-[14px] md:text-[15px] text-white tracking-tight" }, member.name), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-400 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react21.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react21.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react21.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react21.default.createElement(
1008
+ )), /* @__PURE__ */ import_react19.default.createElement("div", { className: "pt-1" }, /* @__PURE__ */ import_react19.default.createElement("h3", { className: " text-[14px] md:text-[15px] text-black tracking-tight" }, member.name), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 mt-1.5 " }, member.title))), /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 text-left grow mb-8" }, member.bio), /* @__PURE__ */ import_react19.default.createElement("div", { className: "space-y-6 mt-auto" }, /* @__PURE__ */ import_react19.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react19.default.createElement(ThreeDButton, { href: member.website }, "Visit Website")), /* @__PURE__ */ import_react19.default.createElement("div", { className: "flex space-x-4 pt-5" }, member.twitterHandle && member.twitterHandle.length > 0 && /* @__PURE__ */ import_react19.default.createElement(
1465
1009
  MemberSocialLink,
1466
1010
  {
1467
1011
  href: `https://x.com/${member.twitterHandle}`,
@@ -1469,7 +1013,7 @@ var ManagedBoardBlock = ({
1469
1013
  label: "X",
1470
1014
  name: member.name
1471
1015
  }
1472
- ), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react21.default.createElement(
1016
+ ), member.linkedinHandle && member.linkedinHandle.length > 0 && /* @__PURE__ */ import_react19.default.createElement(
1473
1017
  MemberSocialLink,
1474
1018
  {
1475
1019
  href: member.linkedinHandle,
@@ -1477,39 +1021,29 @@ var ManagedBoardBlock = ({
1477
1021
  label: "LinkedIn",
1478
1022
  name: member.name
1479
1023
  }
1480
- ))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react21.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-[11px] text-neutral-500 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react21.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-white decoration-white decoration-2 ml-1 transition-colors" }, contactEmail))))));
1024
+ ))))))), (contactText || contactEmail) && /* @__PURE__ */ import_react19.default.createElement("div", { className: "relative px-5 md:px-12 py-8 md:py-10 pb-12 md:pb-14" }, /* @__PURE__ */ import_react19.default.createElement("p", { className: "text-[11px] text-neutral-600 text-left" }, contactText, contactEmail && /* @__PURE__ */ import_react19.default.createElement("a", { href: `mailto:${contactEmail}`, className: "text-black decoration-black decoration-2 underline-offset-4 ml-1 transition-colors" }, contactEmail))))));
1481
1025
  };
1482
1026
 
1483
1027
  // src/components/ManagedNotFoundBlock.tsx
1484
- var import_react23 = __toESM(require("react"));
1485
- var import_link6 = __toESM(require("next/link"));
1028
+ var import_react21 = __toESM(require("react"));
1486
1029
  var ManagedNotFoundBlock = ({
1487
1030
  title = "404 - Page Not Found",
1488
- description = "The page you are looking for does not exist or has been moved.",
1489
- backLinkText = "Go back to Homepage",
1490
- backLinkHref = "/"
1031
+ description = "The page you are looking for does not exist or has been moved."
1491
1032
  }) => {
1492
- return /* @__PURE__ */ import_react23.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-black" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react23.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react23.default.createElement(
1033
+ return /* @__PURE__ */ import_react21.default.createElement("main", { className: "min-h-screen flex items-center justify-center relative z-20 bg-transparent" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "p-6 w-full max-w-md mx-auto text-center" }, /* @__PURE__ */ import_react21.default.createElement("div", { className: "mb-8 flex justify-center" }, /* @__PURE__ */ import_react21.default.createElement(
1493
1034
  "svg",
1494
1035
  {
1495
1036
  xmlns: "http://www.w3.org/2000/svg",
1496
1037
  viewBox: "0 0 24 24",
1497
- className: "w-12 h-12 fill-neutral-700"
1038
+ className: "w-12 h-12 fill-neutral-100"
1498
1039
  },
1499
- /* @__PURE__ */ import_react23.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
1500
- )), /* @__PURE__ */ import_react23.default.createElement("h1", { className: "text-xl md:text-3xl text-white tracking-tight mb-4" }, title), /* @__PURE__ */ import_react23.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-400 mb-12" }, description), /* @__PURE__ */ import_react23.default.createElement(
1501
- import_link6.default,
1502
- {
1503
- href: backLinkHref,
1504
- className: "inline-flex items-center justify-center px-8 py-2.5 border border-neutral-800 text-white transition-colors rounded-full text-[11px] tracking-widest outline-none"
1505
- },
1506
- backLinkText
1507
- )));
1040
+ /* @__PURE__ */ import_react21.default.createElement("path", { fillRule: "evenodd", d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z", clipRule: "evenodd" })
1041
+ )), /* @__PURE__ */ import_react21.default.createElement("h1", { className: " text-xl md:text-3xl text-black tracking-tight mb-4" }, title), /* @__PURE__ */ import_react21.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-12" }, description)));
1508
1042
  };
1509
1043
 
1510
1044
  // src/components/PageSpinner.tsx
1511
- var import_react24 = __toESM(require("react"));
1512
- var import_react25 = require("@hugeicons/react");
1045
+ var import_react22 = __toESM(require("react"));
1046
+ var import_react23 = require("@hugeicons/react");
1513
1047
  var import_core_free_icons4 = require("@hugeicons/core-free-icons");
1514
1048
  var PageSpinner = ({
1515
1049
  className = "",
@@ -1518,23 +1052,23 @@ var PageSpinner = ({
1518
1052
  }) => {
1519
1053
  return (
1520
1054
  // z-[100] ensures it sits above absolute headers and modals
1521
- /* @__PURE__ */ import_react24.default.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ import_react24.default.createElement(
1522
- import_react25.HugeiconsIcon,
1055
+ /* @__PURE__ */ import_react22.default.createElement("div", { className: `fixed inset-0 z-100 flex flex-col items-center justify-center w-full h-full pointer-events-none ${className}` }, /* @__PURE__ */ import_react22.default.createElement(
1056
+ import_react23.HugeiconsIcon,
1523
1057
  {
1524
1058
  icon: import_core_free_icons4.Loading03Icon,
1525
1059
  size,
1526
- className: `animate-spin text-white mb-4 ${iconClassName}`
1060
+ className: `animate-spin mb-4 ${iconClassName}`
1527
1061
  }
1528
1062
  ))
1529
1063
  );
1530
1064
  };
1531
1065
 
1532
1066
  // src/components/ManagedToaster.tsx
1533
- var import_react26 = __toESM(require("react"));
1534
- var import_react_hot_toast3 = require("react-hot-toast");
1067
+ var import_react24 = __toESM(require("react"));
1068
+ var import_react_hot_toast = require("react-hot-toast");
1535
1069
  var ManagedToaster = () => {
1536
- return /* @__PURE__ */ import_react26.default.createElement(
1537
- import_react_hot_toast3.Toaster,
1070
+ return /* @__PURE__ */ import_react24.default.createElement(
1071
+ import_react_hot_toast.Toaster,
1538
1072
  {
1539
1073
  position: "top-right",
1540
1074
  toastOptions: {
@@ -1565,7 +1099,7 @@ var ManagedToaster = () => {
1565
1099
  };
1566
1100
 
1567
1101
  // src/components/ManagedNewsletterSplitBlock.tsx
1568
- var import_react27 = __toESM(require("react"));
1102
+ var import_react25 = __toESM(require("react"));
1569
1103
  var import_image6 = __toESM(require("next/image"));
1570
1104
  var ManagedNewsletterSplitBlock = ({
1571
1105
  tagline,
@@ -1579,7 +1113,7 @@ var ManagedNewsletterSplitBlock = ({
1579
1113
  ctaHref = "/contact-us",
1580
1114
  children
1581
1115
  }) => {
1582
- return /* @__PURE__ */ import_react27.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0 bg-black" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden bg-neutral-900" }, /* @__PURE__ */ import_react27.default.createElement(
1116
+ return /* @__PURE__ */ import_react25.default.createElement("div", { className: "grow flex flex-col md:flex-row relative w-full pt-32 md:pt-0" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "hidden md:block md:w-1/2 relative min-h-screen overflow-hidden" }, /* @__PURE__ */ import_react25.default.createElement(
1583
1117
  import_image6.default,
1584
1118
  {
1585
1119
  src: imageSrc,
@@ -1589,23 +1123,23 @@ var ManagedNewsletterSplitBlock = ({
1589
1123
  className: "object-cover object-top grayscale opacity-60",
1590
1124
  quality: 100
1591
1125
  }
1592
- ), /* @__PURE__ */ import_react27.default.createElement(
1126
+ ), /* @__PURE__ */ import_react25.default.createElement(
1593
1127
  "div",
1594
1128
  {
1595
1129
  className: "absolute inset-0 z-10 pointer-events-none",
1596
1130
  style: {
1597
- background: "linear-gradient(to right, rgba(0,0,0,0) 30%, #000000 100%)"
1131
+ background: "linear-gradient(to right, rgba(255,255,255,0) 30%, #ffffff 100%)"
1598
1132
  }
1599
1133
  }
1600
- ), /* @__PURE__ */ import_react27.default.createElement(
1134
+ ), /* @__PURE__ */ import_react25.default.createElement(
1601
1135
  "div",
1602
1136
  {
1603
1137
  className: "absolute inset-x-0 bottom-0 h-40 z-10 pointer-events-none",
1604
1138
  style: {
1605
- background: "linear-gradient(to bottom, rgba(0,0,0,0) 0%, #000000 100%)"
1139
+ background: "linear-gradient(to bottom, rgba(255,255,255,0) 0%, #ffffff 100%)"
1606
1140
  }
1607
1141
  }
1608
- )), /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react27.default.createElement(
1142
+ )), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full md:w-1/2 flex mt-22 flex-col items-center justify-center p-4 md:p-12 relative z-20" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative w-full max-w-lg p-8 md:p-12 text-center md:text-left transition-all duration-700 ease-out" }, /* @__PURE__ */ import_react25.default.createElement(
1609
1143
  "div",
1610
1144
  {
1611
1145
  className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
@@ -1614,18 +1148,18 @@ var ManagedNewsletterSplitBlock = ({
1614
1148
  backgroundRepeat: "repeat"
1615
1149
  }
1616
1150
  }
1617
- ), /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "mb-10 border-b border-neutral-800 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500" }, tagline), /* @__PURE__ */ import_react27.default.createElement("h1", { className: "text-3xl mt-4 text-white tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500" }, subtitle)), /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-400 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react27.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react27.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "grow h-px bg-neutral-800" }), /* @__PURE__ */ import_react27.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-600" }, dividerText), /* @__PURE__ */ import_react27.default.createElement("div", { className: "grow h-px bg-neutral-800" })), ctaText && ctaHref && /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react27.default.createElement(
1151
+ ), /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "mb-10 border-b border-neutral-100 pb-8 text-center md:text-left" }, tagline && /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 " }, tagline), /* @__PURE__ */ import_react25.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight mb-4" }, title), subtitle && /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, subtitle)), /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 mb-10 text-center md:text-left" }, description), children && /* @__PURE__ */ import_react25.default.createElement("div", { className: "mb-8 text-left" }, children), /* @__PURE__ */ import_react25.default.createElement("div", { className: "text-center md:text-left mt-10 space-y-6" }, dividerText && /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "grow h-px bg-neutral-100" }), /* @__PURE__ */ import_react25.default.createElement("span", { className: "shrink mx-4 text-[11px] tracking-[0.2em] text-neutral-400 " }, dividerText), /* @__PURE__ */ import_react25.default.createElement("div", { className: "grow h-px bg-neutral-100" })), ctaText && ctaHref && /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full *:w-full" }, /* @__PURE__ */ import_react25.default.createElement(
1618
1152
  ThreeDButton,
1619
1153
  {
1620
1154
  href: ctaHref,
1621
- className: "py-2.5 tracking-widest text-[11px]"
1155
+ className: "py-3 tracking-widest text-[11px]"
1622
1156
  },
1623
1157
  ctaText
1624
1158
  )))))));
1625
1159
  };
1626
1160
 
1627
1161
  // src/components/ReusableInputs.tsx
1628
- var import_react28 = __toESM(require("react"));
1162
+ var import_react26 = __toESM(require("react"));
1629
1163
  var TextInput = ({
1630
1164
  label,
1631
1165
  value,
@@ -1636,7 +1170,7 @@ var TextInput = ({
1636
1170
  readOnly,
1637
1171
  type = "text",
1638
1172
  onClick
1639
- }) => /* @__PURE__ */ import_react28.default.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ import_react28.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react28.default.createElement(
1173
+ }) => /* @__PURE__ */ import_react26.default.createElement("div", { className: "space-y-2 flex-1 w-full", onClick }, label && /* @__PURE__ */ import_react26.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react26.default.createElement(
1640
1174
  "input",
1641
1175
  {
1642
1176
  type,
@@ -1647,7 +1181,7 @@ var TextInput = ({
1647
1181
  readOnly,
1648
1182
  autoComplete: "off",
1649
1183
  spellCheck: "false",
1650
- className: `w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white transition-all outline-none focus:border-white disabled:opacity-50 ${readOnly ? "cursor-pointer" : ""}`
1184
+ className: `w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black transition-all outline-none focus:border-black disabled:opacity-50 ${readOnly ? "cursor-pointer" : ""}`
1651
1185
  }
1652
1186
  ));
1653
1187
  var NumberInput = ({
@@ -1657,7 +1191,7 @@ var NumberInput = ({
1657
1191
  placeholder,
1658
1192
  maxLength,
1659
1193
  disabled
1660
- }) => /* @__PURE__ */ import_react28.default.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ import_react28.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react28.default.createElement(
1194
+ }) => /* @__PURE__ */ import_react26.default.createElement("div", { className: "space-y-2 flex-1 w-full" }, label && /* @__PURE__ */ import_react26.default.createElement("label", { className: "text-[11px] text-neutral-400 tracking-[0.2em] block " }, label), /* @__PURE__ */ import_react26.default.createElement(
1661
1195
  "input",
1662
1196
  {
1663
1197
  type: "text",
@@ -1670,19 +1204,19 @@ var NumberInput = ({
1670
1204
  disabled,
1671
1205
  autoComplete: "off",
1672
1206
  spellCheck: "false",
1673
- className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-800 text-white transition-all outline-none focus:border-white disabled:opacity-50"
1207
+ className: "w-full px-2 py-3 text-sm bg-transparent border-b border-neutral-100 text-black transition-all outline-none focus:border-black disabled:opacity-50"
1674
1208
  }
1675
1209
  ));
1676
1210
 
1677
1211
  // src/components/PortfolioHero.tsx
1678
- var import_react29 = __toESM(require("react"));
1679
- var import_link7 = __toESM(require("next/link"));
1212
+ var import_react27 = __toESM(require("react"));
1213
+ var import_link6 = __toESM(require("next/link"));
1680
1214
  var import_image7 = __toESM(require("next/image"));
1681
- var import_react30 = require("@hugeicons/react");
1215
+ var import_react28 = require("@hugeicons/react");
1682
1216
  var import_core_free_icons5 = require("@hugeicons/core-free-icons");
1683
1217
  var useScrollAnimation = () => {
1684
- const elementRef = (0, import_react29.useRef)(null);
1685
- (0, import_react29.useEffect)(() => {
1218
+ const elementRef = (0, import_react27.useRef)(null);
1219
+ (0, import_react27.useEffect)(() => {
1686
1220
  const el = elementRef.current;
1687
1221
  if (!el) return;
1688
1222
  const observer = new IntersectionObserver(
@@ -1718,13 +1252,13 @@ var PortfolioHero = ({
1718
1252
  secondaryCtaHref
1719
1253
  }) => {
1720
1254
  const heroContentRef = useScrollAnimation();
1721
- return /* @__PURE__ */ import_react29.default.createElement("section", { className: "pt-44 md:pt-52 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full bg-black" }, /* @__PURE__ */ import_react29.default.createElement(
1255
+ return /* @__PURE__ */ import_react27.default.createElement("section", { className: "pt-44 md:pt-52 pb-16 px-6 md:px-12 flex flex-col relative overflow-hidden z-10 w-full" }, /* @__PURE__ */ import_react27.default.createElement(
1722
1256
  "div",
1723
1257
  {
1724
1258
  ref: heroContentRef,
1725
1259
  className: "w-full opacity-0 translate-y-5 transition-all duration-1000 ease-out relative z-10"
1726
1260
  },
1727
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden shrink-0 shadow-sm" }, /* @__PURE__ */ import_react29.default.createElement(
1261
+ /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center gap-5 sm:gap-8 mb-10" }, /* @__PURE__ */ import_react27.default.createElement("div", { className: "relative w-20 h-20 sm:w-32 sm:h-32 rounded-full overflow-hidden border border-neutral-100 shrink-0 shadow-sm" }, /* @__PURE__ */ import_react27.default.createElement(
1728
1262
  import_image7.default,
1729
1263
  {
1730
1264
  src: imageSrc,
@@ -1735,40 +1269,40 @@ var PortfolioHero = ({
1735
1269
  sizes: "(max-width: 640px) 80px, 128px",
1736
1270
  quality: 100
1737
1271
  }
1738
- )), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react29.default.createElement("h1", { className: "text-3xl sm:text-5xl lg:text-6xl tracking-tight text-white leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500" }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react29.default.createElement(
1272
+ )), /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col text-left" }, /* @__PURE__ */ import_react27.default.createElement("h1", { className: " text-3xl sm:text-5xl lg:text-6xl tracking-tight text-black leading-none mb-3" }, name), socialLabel && /* @__PURE__ */ import_react27.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 " }, socialLabel), socialLinkText && socialLinkHref && /* @__PURE__ */ import_react27.default.createElement(
1739
1273
  "a",
1740
1274
  {
1741
1275
  href: socialLinkHref,
1742
1276
  target: "_blank",
1743
1277
  rel: "noopener noreferrer",
1744
- className: "text-[11px] md:text-[14px] text-neutral-300 hover:text-white transition-colors mt-1 decoration-neutral-700 hover:decoration-white"
1278
+ className: "text-[11px] md:text-[14px] text-black hover:text-neutral-500 transition-colors mt-1 underline underline-offset-4 decoration-neutral-300"
1745
1279
  },
1746
1280
  socialLinkText
1747
1281
  ))),
1748
- /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-400" }, bio),
1749
- /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react29.default.createElement(
1282
+ /* @__PURE__ */ import_react27.default.createElement("p", { className: "text-[13px] leading-[1.8] max-w-4xl mb-12 text-neutral-600" }, bio),
1283
+ /* @__PURE__ */ import_react27.default.createElement("div", { className: "flex flex-col sm:flex-row gap-4 w-full sm:w-auto" }, primaryCtaText && primaryCtaHref && /* @__PURE__ */ import_react27.default.createElement("div", { className: "w-full sm:w-auto *:w-full" }, /* @__PURE__ */ import_react27.default.createElement(
1750
1284
  ThreeDButton,
1751
1285
  {
1752
1286
  href: primaryCtaHref,
1753
- className: "py-2.5 tracking-widest text-[11px]"
1287
+ className: "py-3 tracking-widest text-[11px]"
1754
1288
  },
1755
1289
  primaryCtaText
1756
- )), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react29.default.createElement(
1757
- import_link7.default,
1290
+ )), secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ import_react27.default.createElement(
1291
+ import_link6.default,
1758
1292
  {
1759
1293
  href: secondaryCtaHref,
1760
- className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-2.5 border border-neutral-700 transition-colors text-white outline-none"
1294
+ className: "w-full sm:w-auto inline-flex items-center justify-center gap-3 text-[11px] tracking-[0.2em] rounded-full px-8 py-3.5 bg-neutral-200 transition-colors text-black hover:bg-neutral-200 outline-none"
1761
1295
  },
1762
1296
  secondaryCtaText,
1763
- /* @__PURE__ */ import_react29.default.createElement(import_react30.HugeiconsIcon, { icon: import_core_free_icons5.ArrowRight01Icon, size: 16 })
1297
+ /* @__PURE__ */ import_react27.default.createElement(import_react28.HugeiconsIcon, { icon: import_core_free_icons5.ArrowRight01Icon, size: 16 })
1764
1298
  ))
1765
1299
  ));
1766
1300
  };
1767
1301
 
1768
1302
  // src/components/GifFeatureCard.tsx
1769
- var import_react31 = __toESM(require("react"));
1303
+ var import_react29 = __toESM(require("react"));
1770
1304
  var import_image8 = __toESM(require("next/image"));
1771
- var import_react32 = require("@hugeicons/react");
1305
+ var import_react30 = require("@hugeicons/react");
1772
1306
  var import_core_free_icons6 = require("@hugeicons/core-free-icons");
1773
1307
  var GifFeatureCard = ({
1774
1308
  gifSrc,
@@ -1777,20 +1311,20 @@ var GifFeatureCard = ({
1777
1311
  alt = "Feature animation",
1778
1312
  className = "aspect-video"
1779
1313
  }) => {
1780
- const [isLoading, setIsLoading] = (0, import_react31.useState)(true);
1781
- return /* @__PURE__ */ import_react31.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react31.default.createElement(
1782
- import_react32.HugeiconsIcon,
1314
+ const [isLoading, setIsLoading] = (0, import_react29.useState)(true);
1315
+ return /* @__PURE__ */ import_react29.default.createElement("div", { className: `relative w-full bg-black overflow-hidden shadow-2xl ${className}` }, isLoading && /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-black" }, /* @__PURE__ */ import_react29.default.createElement(
1316
+ import_react30.HugeiconsIcon,
1783
1317
  {
1784
1318
  icon: import_core_free_icons6.Loading03Icon,
1785
1319
  size: 32,
1786
1320
  className: "animate-spin text-white"
1787
1321
  }
1788
- )), /* @__PURE__ */ import_react31.default.createElement(
1322
+ )), /* @__PURE__ */ import_react29.default.createElement(
1789
1323
  "div",
1790
1324
  {
1791
1325
  className: `absolute inset-0 z-0 transition-all duration-1000 ease-out ${isLoading ? "scale-105 blur-2xl opacity-0" : "scale-100 blur-0 opacity-100"}`
1792
1326
  },
1793
- /* @__PURE__ */ import_react31.default.createElement(
1327
+ /* @__PURE__ */ import_react29.default.createElement(
1794
1328
  import_image8.default,
1795
1329
  {
1796
1330
  src: gifSrc,
@@ -1801,1171 +1335,16 @@ var GifFeatureCard = ({
1801
1335
  className: "object-cover object-center pointer-events-none"
1802
1336
  }
1803
1337
  )
1804
- ), /* @__PURE__ */ import_react31.default.createElement(
1338
+ ), /* @__PURE__ */ import_react29.default.createElement(
1805
1339
  "div",
1806
1340
  {
1807
1341
  className: "absolute inset-x-0 bottom-0 h-1/2 sm:h-2/3 bg-linear-to-t from-black/95 via-black/40 to-transparent z-10 pointer-events-none transition-opacity duration-700"
1808
1342
  }
1809
- ), /* @__PURE__ */ import_react31.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react31.default.createElement("h3", { className: "text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react31.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
1810
- };
1811
-
1812
- // src/components/UniversalSidebar.tsx
1813
- var import_react33 = __toESM(require("react"));
1814
- var import_link8 = __toESM(require("next/link"));
1815
- var import_react_hot_toast4 = __toESM(require("react-hot-toast"));
1816
- var import_react34 = require("@hugeicons/react");
1817
- var import_core_free_icons7 = require("@hugeicons/core-free-icons");
1818
- var ButtonSpinner = () => /* @__PURE__ */ import_react33.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react33.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react33.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
1819
- var formatNotifDate = (d) => {
1820
- const date = new Date(d);
1821
- return date.toLocaleDateString("en-US", { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" });
1822
- };
1823
- var UniversalSidebar = ({
1824
- navItems,
1825
- currentPath,
1826
- isMobileOpen,
1827
- closeMobile,
1828
- openMobile,
1829
- onNavClick,
1830
- userName = "Profile",
1831
- userTag,
1832
- userInitials = "U",
1833
- web3Address,
1834
- web3Avatar,
1835
- notifications,
1836
- unreadNotificationsCount = 0,
1837
- notificationPage = 1,
1838
- notificationTotalPages = 1,
1839
- onNotificationPageChange,
1840
- onNotificationClick,
1841
- showBackButton = false,
1842
- backUrl = "/app",
1843
- showLogoutAction = false,
1844
- onLogout,
1845
- showInterceptDialog = false,
1846
- onCancelIntercept,
1847
- onConfirmIntercept,
1848
- interceptTitle = "Discard Changes",
1849
- interceptMessage = "Are you sure you want to leave? All unsaved changes will be lost."
1850
- }) => {
1851
- const [isCollapsed, setIsCollapsed] = (0, import_react33.useState)(false);
1852
- const [showLogoutDialog, setShowLogoutDialog] = (0, import_react33.useState)(false);
1853
- const [isLoggingOut, setIsLoggingOut] = (0, import_react33.useState)(false);
1854
- const [showNotifDialog, setShowNotifDialog] = (0, import_react33.useState)(false);
1855
- const [selectedNotif, setSelectedNotif] = (0, import_react33.useState)(null);
1856
- (0, import_react33.useEffect)(() => {
1857
- if (isMobileOpen) {
1858
- closeMobile();
1859
- }
1860
- }, [currentPath]);
1861
- const hasActiveMatch = navItems.some(
1862
- (item) => item.path === "/mod" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`)
1863
- );
1864
- const handleLogoutInitiation = async () => {
1865
- if (isLoggingOut || !onLogout) return;
1866
- setIsLoggingOut(true);
1867
- try {
1868
- await onLogout();
1869
- } catch (error) {
1870
- setIsLoggingOut(false);
1871
- setShowLogoutDialog(false);
1872
- }
1873
- };
1874
- const handleCopyWallet = () => {
1875
- if (web3Address) {
1876
- navigator.clipboard.writeText(web3Address);
1877
- import_react_hot_toast4.default.success("Address copied");
1878
- }
1879
- };
1880
- const HeaderActions = () => /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center gap-2 pointer-events-auto" }, web3Address && /* @__PURE__ */ import_react33.default.createElement(
1881
- "div",
1882
- {
1883
- onClick: handleCopyWallet,
1884
- className: "flex items-center gap-2 bg-neutral-900 rounded-full p-1 pr-3 cursor-pointer transition-colors",
1885
- title: "Copy Address"
1886
- },
1887
- web3Avatar ? /* @__PURE__ */ import_react33.default.createElement("img", { src: web3Avatar, alt: "Avatar", className: "w-6 h-6 rounded-full bg-neutral-800 object-cover shrink-0" }) : /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-6 h-6 rounded-full bg-neutral-800 flex items-center justify-center text-[9px] text-white shrink-0" }, userInitials.substring(0, 2)),
1888
- /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[11px] text-white truncate max-w-20 sm:max-w-37.5" }, web3Address)
1889
- ), notifications !== void 0 && /* @__PURE__ */ import_react33.default.createElement(
1890
- "button",
1891
- {
1892
- onClick: () => {
1893
- setShowNotifDialog(true);
1894
- setSelectedNotif(null);
1895
- },
1896
- className: "relative w-8 h-8 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white transition-all duration-300 outline-none"
1897
- },
1898
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.Notification01Icon, size: 14 }),
1899
- unreadNotificationsCount > 0 && /* @__PURE__ */ import_react33.default.createElement("span", { className: "absolute top-2 right-2.5 w-2 h-2 bg-blue-500 rounded-full border border-neutral-900" })
1900
- ), showBackButton && /* @__PURE__ */ import_react33.default.createElement(
1901
- import_link8.default,
1902
- {
1903
- href: backUrl,
1904
- className: "w-10 h-10 shrink-0 bg-neutral-900 rounded-full flex items-center justify-center text-neutral-400 hover:text-white transition-all duration-300 outline-none",
1905
- "aria-label": "Go Back"
1906
- },
1907
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.ArrowLeft01Icon, size: 18 })
1908
- ));
1909
- return /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, /* @__PURE__ */ import_react33.default.createElement("div", { className: "md:hidden fixed top-0 left-0 w-full h-16 bg-black/50 backdrop-blur-md z-40 flex items-center justify-between px-4 " }, /* @__PURE__ */ import_react33.default.createElement(
1910
- "button",
1911
- {
1912
- onClick: openMobile,
1913
- className: `w-10 h-10 bg-neutral-900 rounded-full flex items-center justify-center text-white transition-all duration-300 outline-none ${isMobileOpen ? "opacity-0 pointer-events-none scale-90" : "opacity-100 scale-100"}`,
1914
- "aria-label": "Open Menu"
1915
- },
1916
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.SidebarLeft01Icon, size: 18 })
1917
- ), /* @__PURE__ */ import_react33.default.createElement(HeaderActions, null)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "hidden md:flex fixed top-0 right-0 w-full backdrop-blur-sm justify-end px-8 pt-6 pb-4 bg-transparent z-40 pointer-events-none" }, /* @__PURE__ */ import_react33.default.createElement(HeaderActions, null)), /* @__PURE__ */ import_react33.default.createElement(
1918
- "div",
1919
- {
1920
- className: `fixed inset-0 bg-black/60 shadow-2xl transition-opacity duration-300 md:hidden z-90 ${isMobileOpen ? "opacity-100 pointer-events-auto" : "opacity-0 pointer-events-none"}`,
1921
- onClick: closeMobile
1922
- }
1923
- ), /* @__PURE__ */ import_react33.default.createElement(
1924
- "aside",
1925
- {
1926
- className: `
1927
- fixed md:relative rounded-2xl top-4 md:top-0 md:my-4 left-4 md:left-0 md:ml-4 h-[calc(100dvh-2rem)] bg-neutral-900
1928
- transition-all duration-300 ease-in-out shrink-0 flex flex-col z-100 md:z-50
1929
- ${isMobileOpen ? "translate-x-0" : "translate-x-[-120%] md:translate-x-0"}
1930
- ${isCollapsed ? "md:w-16 w-64" : "w-64"}
1931
- `
1932
- },
1933
- /* @__PURE__ */ import_react33.default.createElement("div", { className: `flex items-center shrink-0 p-5 ${isCollapsed && !isMobileOpen ? "justify-center min-h-18" : "justify-between"}` }, /* @__PURE__ */ import_react33.default.createElement("div", { className: `flex items-center gap-3 text-left ${!isCollapsed || isMobileOpen ? "w-full" : ""}` }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-9 h-9 border border-neutral-700 rounded-full flex items-center justify-center shrink-0" }, /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[10px] text-white tracking-wider" }, userInitials.substring(0, 2))), (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col justify-center min-w-0 pr-2 flex-1" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[13px] text-white leading-none truncate tracking-wide mb-1" }, userName), userTag && /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[9px] text-neutral-500 truncate tracking-[0.2em] leading-none " }, userTag))), /* @__PURE__ */ import_react33.default.createElement("div", { className: "md:hidden flex shrink-0" }, /* @__PURE__ */ import_react33.default.createElement(
1934
- "button",
1935
- {
1936
- onClick: closeMobile,
1937
- className: "text-neutral-500 hover:text-white transition-colors outline-none",
1938
- "aria-label": "Close Menu"
1939
- },
1940
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.CancelCircleIcon, size: 20 })
1941
- ))),
1942
- /* @__PURE__ */ import_react33.default.createElement("nav", { className: "flex-1 py-2 flex flex-col gap-1.5 px-3 overflow-y-auto custom-scrollbar mt-2" }, navItems.map((item, index) => {
1943
- const isExactOrSubMatch = item.path === "/mod" || item.path === "/app" ? currentPath === item.path : currentPath === item.path || currentPath?.startsWith(`${item.path}/`);
1944
- const isCurrentRoute = isExactOrSubMatch || !hasActiveMatch && index === 0;
1945
- return /* @__PURE__ */ import_react33.default.createElement(
1946
- import_link8.default,
1947
- {
1948
- key: item.name,
1949
- href: item.path,
1950
- onClick: (e) => onNavClick ? onNavClick(e, item.path) : void 0,
1951
- className: `flex items-center gap-3 px-3 py-2 rounded-full transition-all outline-none group shrink-0 ${isCurrentRoute ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white /50"}`,
1952
- title: isCollapsed && !isMobileOpen ? item.name : void 0
1953
- },
1954
- /* @__PURE__ */ import_react33.default.createElement(
1955
- import_react34.HugeiconsIcon,
1956
- {
1957
- icon: item.icon,
1958
- size: 18,
1959
- className: `shrink-0 transition-colors ${isCurrentRoute ? "text-white" : "text-neutral-500 group-hover:text-white"}`
1960
- }
1961
- ),
1962
- (!isCollapsed || isMobileOpen) && /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs tracking-wide truncate" }, item.name)
1963
- );
1964
- })),
1965
- /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-4 shrink-0 flex flex-col gap-2" }, showLogoutAction && /* @__PURE__ */ import_react33.default.createElement("div", { className: `flex gap-2 px-1 pb-2 ${isCollapsed && !isMobileOpen ? "flex-col items-center" : "items-center"}` }, /* @__PURE__ */ import_react33.default.createElement(
1966
- "button",
1967
- {
1968
- onClick: () => setShowLogoutDialog(true),
1969
- className: "w-8 h-8 shrink-0 rounded-full bg-neutral-800 flex items-center justify-center text-neutral-400 hover:text-white transition-all outline-none",
1970
- title: "Secure Logout"
1971
- },
1972
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.LogoutCircle02Icon, size: 16 })
1973
- )), /* @__PURE__ */ import_react33.default.createElement("div", { className: "hidden md:block" }, /* @__PURE__ */ import_react33.default.createElement(
1974
- "button",
1975
- {
1976
- onClick: () => setIsCollapsed(!isCollapsed),
1977
- className: "flex items-center justify-center md:justify-start gap-3 w-full p-2.5 rounded-full text-neutral-400 hover:text-white transition-colors outline-none"
1978
- },
1979
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.SidebarLeft01Icon, size: 18, className: "shrink-0 text-neutral-500" }),
1980
- !isCollapsed && /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs " }, "Collapse")
1981
- )))
1982
- ), showNotifDialog && /* @__PURE__ */ import_react33.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setShowNotifDialog(false) }), /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 0 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh] max-h-[80vh]" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, selectedNotif ? /* @__PURE__ */ import_react33.default.createElement("button", { onClick: () => setSelectedNotif(null), className: "text-neutral-500 hover:text-white transition-colors outline-none flex items-center gap-2 text-[11px] tracking-widest " }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.ArrowLeft01Icon, size: 14 }), " Back") : /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[15px] text-white tracking-tight " }, "Notifications"), /* @__PURE__ */ import_react33.default.createElement("button", { onClick: () => setShowNotifDialog(false), className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, selectedNotif ? /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-4 text-left" }, /* @__PURE__ */ import_react33.default.createElement("h4", { className: "text-[14px] text-white mb-1" }, selectedNotif.title), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-widest mb-4 block" }, formatNotifDate(selectedNotif.createdAt)), /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[12px] text-neutral-400 leading-relaxed whitespace-pre-wrap" }, selectedNotif.message)) : /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col " }, notifications?.length === 0 ? /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-8 text-center text-xs text-neutral-500" }, "You have no notifications.") : notifications?.map((notif) => /* @__PURE__ */ import_react33.default.createElement(
1983
- "div",
1984
- {
1985
- key: notif.id,
1986
- onClick: () => {
1987
- setSelectedNotif(notif);
1988
- onNotificationClick?.(notif);
1989
- },
1990
- className: "p-3 flex items-start gap-3 cursor-pointer transition-colors"
1991
- },
1992
- /* @__PURE__ */ import_react33.default.createElement("div", { className: "mt-1.5 shrink-0" }, !notif.isRead ? /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-1.5 h-1.5 bg-blue-500 rounded-full" }) : /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-1.5 h-1.5 bg-transparent" })),
1993
- /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex-1 min-w-0 text-left" }, /* @__PURE__ */ import_react33.default.createElement("h5", { className: `text-[12px] truncate ${notif.isRead ? "text-neutral-400" : "text-white"}` }, notif.title), /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[11px] text-neutral-500 truncate mt-0.5" }, notif.message), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[9px] text-neutral-600 tracking-widest mt-2 block" }, formatNotifDate(notif.createdAt)))
1994
- )))), !selectedNotif && /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-4 flex items-center justify-between shrink-0" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-[10px] text-neutral-500 tracking-widest " }, "Page ", notificationPage, " of ", notificationTotalPages === 0 ? 1 : notificationTotalPages), /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex gap-1" }, /* @__PURE__ */ import_react33.default.createElement(
1995
- "button",
1996
- {
1997
- disabled: notificationPage <= 1,
1998
- onClick: () => onNotificationPageChange?.(notificationPage - 1),
1999
- className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none hover:text-white transition-colors"
2000
- },
2001
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.ArrowLeft01Icon, size: 12 })
2002
- ), /* @__PURE__ */ import_react33.default.createElement(
2003
- "button",
2004
- {
2005
- disabled: notificationPage >= notificationTotalPages || notificationTotalPages === 0,
2006
- onClick: () => onNotificationPageChange?.(notificationPage + 1),
2007
- className: "w-7 h-7 flex items-center justify-center rounded-full border border-neutral-700 text-neutral-400 disabled:opacity-30 outline-none hover:text-white transition-colors"
2008
- },
2009
- /* @__PURE__ */ import_react33.default.createElement(import_react34.HugeiconsIcon, { icon: import_core_free_icons7.ArrowRight01Icon, size: 12 })
2010
- ))))), showLogoutDialog && showLogoutAction && /* @__PURE__ */ import_react33.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react33.default.createElement(
2011
- "div",
2012
- {
2013
- className: "absolute inset-0 bg-black/60",
2014
- onClick: () => !isLoggingOut && setShowLogoutDialog(false)
2015
- }
2016
- ), /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-72 bg-neutral-900 rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[17px] text-white tracking-tight mb-1" }, "Secure Logout"), /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[11px] text-neutral-400 leading-snug mt-2" }, "Are you sure you want to log out? You will need to authenticate to return.")), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full flex " }, /* @__PURE__ */ import_react33.default.createElement(
2017
- "button",
2018
- {
2019
- onClick: () => setShowLogoutDialog(false),
2020
- disabled: isLoggingOut,
2021
- className: "flex-1 py-3 text-[13px] text-neutral-400 hover:text-white transition-colors disabled:opacity-50 outline-none"
2022
- },
2023
- "Cancel"
2024
- ), /* @__PURE__ */ import_react33.default.createElement(
2025
- "button",
2026
- {
2027
- onClick: handleLogoutInitiation,
2028
- disabled: isLoggingOut,
2029
- className: "flex-1 py-3 text-[13px] text-red-400 hover:text-red-300 transition-colors disabled:opacity-50 flex justify-center items-center outline-none"
2030
- },
2031
- isLoggingOut ? /* @__PURE__ */ import_react33.default.createElement(ButtonSpinner, null) : "Log Out"
2032
- )))), showInterceptDialog && /* @__PURE__ */ import_react33.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react33.default.createElement(
2033
- "div",
2034
- {
2035
- className: "absolute inset-0 bg-black/60",
2036
- onClick: onCancelIntercept
2037
- }
2038
- ), /* @__PURE__ */ import_react33.default.createElement("div", { className: "relative w-72 bg-neutral-900 rounded-2xl flex flex-col items-center overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react33.default.createElement("h3", { className: "text-[17px] text-white tracking-tight mb-1" }, interceptTitle), /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-[11px] text-neutral-400 leading-snug mt-2" }, interceptMessage)), /* @__PURE__ */ import_react33.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react33.default.createElement(
2039
- "button",
2040
- {
2041
- onClick: onCancelIntercept,
2042
- className: "flex-1 py-3 text-[13px] text-neutral-400 hover:text-white transition-colors outline-none"
2043
- },
2044
- "Cancel"
2045
- ), /* @__PURE__ */ import_react33.default.createElement(
2046
- "button",
2047
- {
2048
- onClick: onConfirmIntercept,
2049
- className: "flex-1 py-3 text-[13px] text-white transition-colors flex justify-center items-center outline-none"
2050
- },
2051
- "Leave"
2052
- )))));
2053
- };
2054
-
2055
- // src/components/UniversalOrganizationPage.tsx
2056
- var import_react37 = __toESM(require("react"));
2057
- var import_react_hot_toast5 = __toESM(require("react-hot-toast"));
2058
-
2059
- // src/components/Banner.tsx
2060
- var import_react35 = __toESM(require("react"));
2061
- var import_react36 = require("@hugeicons/react");
2062
- var import_core_free_icons8 = require("@hugeicons/core-free-icons");
2063
- var Banner = ({
2064
- title,
2065
- message,
2066
- type,
2067
- icon,
2068
- isDismissible = true,
2069
- onDismiss,
2070
- action
2071
- }) => {
2072
- const [isVisible, setIsVisible] = (0, import_react35.useState)(true);
2073
- if (!isVisible) return null;
2074
- const handleDismiss = () => {
2075
- setIsVisible(false);
2076
- if (onDismiss) onDismiss();
2077
- };
2078
- const config = {
2079
- success: {
2080
- bg: "bg-emerald-50",
2081
- iconColor: "text-emerald-600",
2082
- titleColor: "text-emerald-900",
2083
- msgColor: "text-emerald-700",
2084
- defaultIcon: import_core_free_icons8.CheckmarkBadge01Icon,
2085
- closeHover: "hover:bg-emerald-100 text-emerald-500"
2086
- },
2087
- warning: {
2088
- bg: "bg-amber-50",
2089
- iconColor: "text-amber-600",
2090
- titleColor: "text-amber-900",
2091
- msgColor: "text-amber-700",
2092
- defaultIcon: import_core_free_icons8.InformationCircleIcon,
2093
- closeHover: "hover:bg-amber-100 text-amber-500"
2094
- },
2095
- alert: {
2096
- bg: "bg-red-50",
2097
- iconColor: "text-red-600",
2098
- titleColor: "text-red-900",
2099
- msgColor: "text-red-700",
2100
- defaultIcon: import_core_free_icons8.Alert02Icon,
2101
- closeHover: "hover:bg-red-100 text-red-500"
2102
- }
2103
- };
2104
- const currentConfig = config[type];
2105
- const IconToUse = icon || currentConfig.defaultIcon;
2106
- return /* @__PURE__ */ import_react35.default.createElement("div", { className: `relative w-full rounded-2xl p-4 flex items-start gap-4 transition-all duration-300 animate-in fade-in slide-in-from-top-2 ${currentConfig.bg}` }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex-1 flex flex-col min-w-0" }, /* @__PURE__ */ import_react35.default.createElement("h4", { className: `text-sm tracking-tight mb-1 ${currentConfig.titleColor}` }, title), /* @__PURE__ */ import_react35.default.createElement("p", { className: `text-xs leading-relaxed ${currentConfig.msgColor}` }, message), action && /* @__PURE__ */ import_react35.default.createElement("div", { className: "mt-3" }, action)), isDismissible && /* @__PURE__ */ import_react35.default.createElement(
2107
- "button",
2108
- {
2109
- onClick: handleDismiss,
2110
- className: `absolute top-3 right-3 p-1.5 rounded-full transition-colors outline-none shrink-0 ${currentConfig.closeHover}`,
2111
- "aria-label": "Dismiss banner"
2112
- },
2113
- /* @__PURE__ */ import_react35.default.createElement(import_react36.HugeiconsIcon, { icon: import_core_free_icons8.Cancel01Icon, size: 16 })
2114
- ));
2115
- };
2116
-
2117
- // src/components/UniversalOrganizationPage.tsx
2118
- var import_react38 = require("@hugeicons/react");
2119
- var import_core_free_icons9 = require("@hugeicons/core-free-icons");
2120
- var InputSpinner3 = () => /* @__PURE__ */ import_react37.default.createElement("svg", { className: "animate-spin h-4 w-4 text-neutral-500", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, /* @__PURE__ */ import_react37.default.createElement("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), /* @__PURE__ */ import_react37.default.createElement("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" }));
2121
- var UniversalOrganizationPage = ({
2122
- initialOrgName,
2123
- initialSlug,
2124
- initialUsername,
2125
- orgId,
2126
- isReadOnly = false,
2127
- slugPrefixUrl = ".aeona.eth",
2128
- bannerProps,
2129
- onSaveConfiguration,
2130
- onCheckSlugAvailability
2131
- }) => {
2132
- const resolvedInitialUsername = initialUsername || initialSlug;
2133
- const [web3Name, setWeb3Name] = (0, import_react37.useState)(initialOrgName);
2134
- const [username, setUsername] = (0, import_react37.useState)(resolvedInitialUsername);
2135
- const [slug, setSlug] = (0, import_react37.useState)(initialSlug);
2136
- const [isCheckingSlug, setIsCheckingSlug] = (0, import_react37.useState)(false);
2137
- const [slugAvailable, setSlugAvailable] = (0, import_react37.useState)(null);
2138
- const [isSubmitting, setIsSubmitting] = (0, import_react37.useState)(false);
2139
- (0, import_react37.useEffect)(() => {
2140
- setWeb3Name(initialOrgName || "");
2141
- setSlug(initialSlug || "");
2142
- setUsername(initialUsername || initialSlug || "");
2143
- }, [initialOrgName, initialSlug, initialUsername]);
2144
- const handleWeb3NameChange = (val) => {
2145
- setWeb3Name(val.replace(/[^a-zA-Z0-9\s-]/g, "").substring(0, 50));
2146
- };
2147
- const handleUsernameChange = (val) => {
2148
- setUsername(val.toLowerCase().replace(/[^a-z0-9-]/g, "").substring(0, 30));
2149
- };
2150
- const handleSlugChange = (val) => {
2151
- setSlug(val.toLowerCase().replace(/[^a-z0-9-]/g, "").replace(/-+/g, "-").substring(0, 50));
2152
- };
2153
- (0, import_react37.useEffect)(() => {
2154
- if (!slug || slug === initialSlug) {
2155
- setSlugAvailable(null);
2156
- setIsCheckingSlug(false);
2157
- return;
2158
- }
2159
- if (slug.length < 3) {
2160
- setSlugAvailable(false);
2161
- setIsCheckingSlug(false);
2162
- return;
2163
- }
2164
- setIsCheckingSlug(true);
2165
- setSlugAvailable(null);
2166
- const checkTimer = setTimeout(async () => {
2167
- try {
2168
- const res = await onCheckSlugAvailability(slug);
2169
- setSlugAvailable(res.available);
2170
- } catch (error) {
2171
- setSlugAvailable(null);
2172
- } finally {
2173
- setIsCheckingSlug(false);
2174
- }
2175
- }, 1500);
2176
- return () => clearTimeout(checkTimer);
2177
- }, [slug, initialSlug, onCheckSlugAvailability]);
2178
- const handleSave = async (e) => {
2179
- e.preventDefault();
2180
- if (isSubmitting || isCheckingSlug || isReadOnly) return;
2181
- if (slug !== initialSlug && slugAvailable === false) {
2182
- import_react_hot_toast5.default.error("Please select an available profile address handles.");
2183
- return;
2184
- }
2185
- setIsSubmitting(true);
2186
- try {
2187
- const payload = {
2188
- organizationId: orgId,
2189
- organizationName: web3Name !== initialOrgName ? web3Name : void 0,
2190
- slug: slug !== initialSlug ? slug : void 0,
2191
- username: username !== resolvedInitialUsername ? username : void 0
2192
- };
2193
- const responseData = await onSaveConfiguration(payload);
2194
- if (responseData.success) {
2195
- import_react_hot_toast5.default.success("Web3 profile identity updated successfully.");
2196
- setTimeout(() => window.location.reload(), 1e3);
2197
- } else {
2198
- import_react_hot_toast5.default.error(responseData.error || "Failed to update your identity profile.");
2199
- setIsSubmitting(false);
2200
- }
2201
- } catch (error) {
2202
- import_react_hot_toast5.default.error("Service unavailable. Try again later.");
2203
- setIsSubmitting(false);
2204
- }
2205
- };
2206
- const hasChanges = web3Name !== initialOrgName || slug !== initialSlug || username !== resolvedInitialUsername;
2207
- const isSaveDisabled = isSubmitting || isReadOnly || isCheckingSlug || !hasChanges || web3Name.length < 3 || slug.length < 3 || username.length < 3 || slug !== initialSlug && slugAvailable === false;
2208
- return /* @__PURE__ */ import_react37.default.createElement("div", { className: "flex flex-col gap-8 animate-in max-w-5xl rounded-2xl p-6 bg-neutral-900 fade-in duration-300" }, /* @__PURE__ */ import_react37.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react37.default.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ import_react37.default.createElement("div", null, /* @__PURE__ */ import_react37.default.createElement("h1", { className: "text-white text-xl mb-1 tracking-tight" }, "Public Profile"), /* @__PURE__ */ import_react37.default.createElement("p", { className: "text-xs text-neutral-400" }, "Manage your financial payment handle identifiers and global public cryptographic signature identity details.")), isReadOnly && /* @__PURE__ */ import_react37.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-800 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react37.default.createElement(import_react38.HugeiconsIcon, { icon: import_core_free_icons9.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react37.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react37.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react37.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react37.default.createElement(
2209
- TextInput,
2210
- {
2211
- label: "Display Name",
2212
- value: web3Name,
2213
- onChange: handleWeb3NameChange,
2214
- disabled: isReadOnly || isSubmitting,
2215
- placeholder: "Sovereign User",
2216
- maxLength: 50
2217
- }
2218
- ), /* @__PURE__ */ import_react37.default.createElement(
2219
- TextInput,
2220
- {
2221
- label: "Digital Identity",
2222
- value: username,
2223
- onChange: handleUsernameChange,
2224
- disabled: isReadOnly || isSubmitting,
2225
- placeholder: "sovereignuser",
2226
- maxLength: 30
2227
- }
2228
- ), /* @__PURE__ */ import_react37.default.createElement("div", { className: "space-y-2 relative w-full" }, /* @__PURE__ */ import_react37.default.createElement("label", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block" }, "Wallet Username"), /* @__PURE__ */ import_react37.default.createElement("div", { className: "flex items-center relative w-full border-b border-neutral-800 focus-within:border-white transition-all" }, /* @__PURE__ */ import_react37.default.createElement(
2229
- "input",
2230
- {
2231
- type: "text",
2232
- value: slug,
2233
- disabled: isReadOnly || isSubmitting,
2234
- onChange: (e) => handleSlugChange(e.target.value),
2235
- spellCheck: "false",
2236
- autoComplete: "off",
2237
- className: "w-full px-2 py-3 text-sm bg-transparent text-white outline-none disabled:opacity-50 disabled:cursor-not-allowed",
2238
- placeholder: "sovereign-user-handle"
2239
- }
2240
- ), /* @__PURE__ */ import_react37.default.createElement("span", { className: "text-neutral-500 text-sm py-3 pr-8 shrink-0 whitespace-nowrap" }, slugPrefixUrl), /* @__PURE__ */ import_react37.default.createElement("div", { className: "absolute right-2 top-1/2 -translate-y-1/2" }, isCheckingSlug && /* @__PURE__ */ import_react37.default.createElement(InputSpinner3, null), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === false && /* @__PURE__ */ import_react37.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-red-900/50" }, /* @__PURE__ */ import_react37.default.createElement("svg", { className: "w-2 h-2 text-red-500", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react37.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" }))), !isCheckingSlug && !isReadOnly && slug !== initialSlug && slug.length >= 3 && slugAvailable === true && /* @__PURE__ */ import_react37.default.createElement("span", { className: "inline-flex items-center justify-center w-4 h-4 rounded-full bg-green-900/50" }, /* @__PURE__ */ import_react37.default.createElement("svg", { className: "w-2 h-2 text-green-500", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ import_react37.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 10-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z" })))))), /* @__PURE__ */ import_react37.default.createElement("div", { className: "pt-8 mt-2 flex items-center gap-4" }, /* @__PURE__ */ import_react37.default.createElement(
2241
- ThreeDActionButton,
2242
- {
2243
- type: "submit",
2244
- disabled: isSaveDisabled,
2245
- isLoading: isSubmitting,
2246
- className: "min-w-32"
2247
- },
2248
- "Save Changes"
2249
- ), hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react37.default.createElement(
2250
- "button",
2251
- {
2252
- type: "button",
2253
- onClick: () => {
2254
- setWeb3Name(initialOrgName);
2255
- setSlug(initialSlug);
2256
- setUsername(resolvedInitialUsername);
2257
- },
2258
- className: "text-[11px] tracking-widest text-neutral-500 hover:text-white transition-colors outline-none"
2259
- },
2260
- "Cancel"
2261
- )))));
2262
- };
2263
-
2264
- // src/components/UniversalProfileSettings.tsx
2265
- var import_react39 = __toESM(require("react"));
2266
- var import_react_hot_toast6 = __toESM(require("react-hot-toast"));
2267
- var import_react40 = require("@hugeicons/react");
2268
- var import_core_free_icons10 = require("@hugeicons/core-free-icons");
2269
- var UniversalProfileSettings = ({
2270
- initialFirstName,
2271
- initialLastName,
2272
- email,
2273
- accountStatus = "GOOD",
2274
- memberSince,
2275
- isReadOnly = false,
2276
- bannerProps,
2277
- hasPin = false,
2278
- isPinLoading = false,
2279
- onSavePin,
2280
- onSaveProfile
2281
- }) => {
2282
- const [firstName, setFirstName] = (0, import_react39.useState)(initialFirstName);
2283
- const [lastName, setLastName] = (0, import_react39.useState)(initialLastName);
2284
- const [isSubmitting, setIsSubmitting] = (0, import_react39.useState)(false);
2285
- const [isPinModalOpen, setIsPinModalOpen] = (0, import_react39.useState)(false);
2286
- const [oldPin, setOldPin] = (0, import_react39.useState)("");
2287
- const [newPin, setNewPin] = (0, import_react39.useState)("");
2288
- const [confirmPin, setConfirmPin] = (0, import_react39.useState)("");
2289
- const [isPinSubmitting, setIsPinSubmitting] = (0, import_react39.useState)(false);
2290
- (0, import_react39.useEffect)(() => {
2291
- setFirstName(initialFirstName || "");
2292
- setLastName(initialLastName || "");
2293
- }, [initialFirstName, initialLastName]);
2294
- const handleFirstNameChange = (val) => {
2295
- setFirstName(val.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50));
2296
- };
2297
- const handleLastNameChange = (val) => {
2298
- setLastName(val.replace(/[^a-zA-Z\s-]/g, "").substring(0, 50));
2299
- };
2300
- const handleSave = async (e) => {
2301
- e.preventDefault();
2302
- if (isSubmitting || isReadOnly) return;
2303
- setIsSubmitting(true);
2304
- try {
2305
- const res = await onSaveProfile({ firstName, lastName });
2306
- if (res.success) {
2307
- import_react_hot_toast6.default.success("Profile updated successfully.");
2308
- setTimeout(() => window.location.reload(), 1e3);
2309
- } else {
2310
- import_react_hot_toast6.default.error(res.error || "Uh oh! Something went wrong.");
2311
- setIsSubmitting(false);
2312
- }
2313
- } catch (error) {
2314
- import_react_hot_toast6.default.error("Uh oh! Something went wrong.");
2315
- setIsSubmitting(false);
2316
- }
2317
- };
2318
- const closePinModal = () => {
2319
- if (isPinSubmitting) return;
2320
- setIsPinModalOpen(false);
2321
- setOldPin("");
2322
- setNewPin("");
2323
- setConfirmPin("");
2324
- };
2325
- const handlePinInput = (val, setter) => {
2326
- setter(val.replace(/\D/g, "").substring(0, 4));
2327
- };
2328
- const handlePinSubmit = async (e) => {
2329
- e.preventDefault();
2330
- if (!onSavePin) return;
2331
- if (hasPin && oldPin.length !== 4) return import_react_hot_toast6.default.error("Old PIN must be exactly 4 digits.");
2332
- if (newPin.length !== 4) return import_react_hot_toast6.default.error("New PIN must be exactly 4 digits.");
2333
- if (newPin !== confirmPin) return import_react_hot_toast6.default.error("New PINs do not match.");
2334
- setIsPinSubmitting(true);
2335
- try {
2336
- const action = hasPin ? "change_pin" : "create_pin";
2337
- const res = await onSavePin({
2338
- action,
2339
- oldPin: hasPin ? oldPin : void 0,
2340
- newPin
2341
- });
2342
- if (res.success) {
2343
- import_react_hot_toast6.default.success(res.message || "PIN updated successfully.");
2344
- closePinModal();
2345
- } else {
2346
- import_react_hot_toast6.default.error(res.error || "Failed to update PIN.");
2347
- }
2348
- } catch (error) {
2349
- import_react_hot_toast6.default.error("Uh oh! Something went wrong.");
2350
- } finally {
2351
- setIsPinSubmitting(false);
2352
- }
2353
- };
2354
- const hasChanges = firstName !== initialFirstName || lastName !== initialLastName;
2355
- const isSaveDisabled = isSubmitting || isReadOnly || !hasChanges || firstName.trim().length === 0 || lastName.trim().length === 0;
2356
- return /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col max-w-5xl rounded-2xl p-6 bg-neutral-900 gap-8 animate-in fade-in duration-300" }, /* @__PURE__ */ import_react39.default.createElement(ManagedToaster, null), /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-3 sm:gap-4" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react39.default.createElement("h1", { className: "text-white text-xl mb-1 truncate tracking-tight" }, "Personal Settings"), /* @__PURE__ */ import_react39.default.createElement("p", { className: "text-xs text-neutral-400 truncate" }, "Manage your personal account profile.")), isReadOnly && /* @__PURE__ */ import_react39.default.createElement("span", { className: "p-2 w-9 h-9 bg-neutral-800 text-neutral-400 rounded-full shrink-0" }, /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.CircleLock02Icon, size: 18, className: "text-current" }))), bannerProps && /* @__PURE__ */ import_react39.default.createElement(Banner, { ...bannerProps }), /* @__PURE__ */ import_react39.default.createElement("div", { className: "w-full max-w-5xl" }, /* @__PURE__ */ import_react39.default.createElement("form", { className: "flex flex-col gap-8", onSubmit: handleSave, autoComplete: "off" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col sm:flex-row gap-6" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react39.default.createElement(
2357
- TextInput,
2358
- {
2359
- label: "First Name",
2360
- value: firstName,
2361
- onChange: handleFirstNameChange,
2362
- disabled: isReadOnly || isSubmitting,
2363
- placeholder: "System"
2364
- }
2365
- )), /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react39.default.createElement(
2366
- TextInput,
2367
- {
2368
- label: "Last Name",
2369
- value: lastName,
2370
- onChange: handleLastNameChange,
2371
- disabled: isReadOnly || isSubmitting,
2372
- placeholder: "Admin"
2373
- }
2374
- ))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "space-y-2 min-w-0" }, /* @__PURE__ */ import_react39.default.createElement(
2375
- TextInput,
2376
- {
2377
- label: "Email ID",
2378
- value: email,
2379
- onChange: () => {
2380
- },
2381
- disabled: true
2382
- }
2383
- ), /* @__PURE__ */ import_react39.default.createElement("p", { className: "text-[11px] text-neutral-500 mt-1 truncate" }, "To change your email address, please contact support.")), /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between pt-8 mt-2 gap-6 sm:gap-4" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex items-center gap-6 min-w-0" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block truncate" }, "Account Status"), /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-xs text-white block truncate" }, accountStatus)), /* @__PURE__ */ import_react39.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-[11px] text-neutral-500 tracking-[0.2em] block truncate" }, "Member Since"), /* @__PURE__ */ import_react39.default.createElement("span", { className: "text-xs text-white block truncate" }, memberSince ? new Date(memberSince).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "N/A")), /* @__PURE__ */ import_react39.default.createElement("div", { className: "min-w-0 pl-4" }, /* @__PURE__ */ import_react39.default.createElement(
2384
- "button",
2385
- {
2386
- type: "button",
2387
- onClick: () => setIsPinModalOpen(true),
2388
- "aria-label": "PIN Settings",
2389
- className: "w-9 h-9 flex items-center justify-center border border-neutral-700 rounded-full text-white transition-colors outline-none"
2390
- },
2391
- /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.LockKeyIcon, size: 17, className: "text-white" })
2392
- ))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col-reverse sm:flex-row items-center gap-3 sm:gap-4 w-full sm:w-auto shrink-0" }, hasChanges && !isSubmitting && !isReadOnly && /* @__PURE__ */ import_react39.default.createElement(
2393
- "button",
2394
- {
2395
- type: "button",
2396
- onClick: () => {
2397
- setFirstName(initialFirstName);
2398
- setLastName(initialLastName);
2399
- },
2400
- className: "text-[11px] tracking-widest text-neutral-500 hover:text-white transition-colors w-full sm:w-auto py-2 sm:py-0 outline-none"
2401
- },
2402
- "Cancel"
2403
- ), /* @__PURE__ */ import_react39.default.createElement(
2404
- ThreeDActionButton,
2405
- {
2406
- type: "submit",
2407
- disabled: isSaveDisabled,
2408
- isLoading: isSubmitting,
2409
- className: "min-w-32 w-full sm:w-auto"
2410
- },
2411
- "Save Changes"
2412
- ))))), isPinModalOpen && /* @__PURE__ */ import_react39.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: closePinModal }), /* @__PURE__ */ import_react39.default.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, /* @__PURE__ */ import_react39.default.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, hasPin ? "Change PIN" : "Create PIN"), /* @__PURE__ */ import_react39.default.createElement("button", { onClick: closePinModal, disabled: isPinSubmitting, className: "text-neutral-500 hover:text-white transition-colors outline-none disabled:opacity-50" }, /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react39.default.createElement("div", { className: "p-6" }, isPinLoading ? /* @__PURE__ */ import_react39.default.createElement("div", { className: "flex flex-col items-center justify-center py-10" }, /* @__PURE__ */ import_react39.default.createElement(import_react40.HugeiconsIcon, { icon: import_core_free_icons10.Loading03Icon, size: 28, className: "animate-spin text-neutral-500 mb-4" })) : /* @__PURE__ */ import_react39.default.createElement("form", { onSubmit: handlePinSubmit, className: "flex flex-col gap-6" }, hasPin && /* @__PURE__ */ import_react39.default.createElement(
2413
- TextInput,
2414
- {
2415
- type: "password",
2416
- label: "Old PIN",
2417
- maxLength: 4,
2418
- disabled: isPinSubmitting,
2419
- value: oldPin,
2420
- onChange: (val) => handlePinInput(val, setOldPin),
2421
- placeholder: "\u2022\u2022\u2022\u2022"
2422
- }
2423
- ), /* @__PURE__ */ import_react39.default.createElement(
2424
- TextInput,
2425
- {
2426
- type: "password",
2427
- label: hasPin ? "New PIN" : "Enter 4-Digit PIN",
2428
- maxLength: 4,
2429
- disabled: isPinSubmitting,
2430
- value: newPin,
2431
- onChange: (val) => handlePinInput(val, setNewPin),
2432
- placeholder: "\u2022\u2022\u2022\u2022"
2433
- }
2434
- ), /* @__PURE__ */ import_react39.default.createElement(
2435
- TextInput,
2436
- {
2437
- type: "password",
2438
- label: "Retype New PIN",
2439
- maxLength: 4,
2440
- disabled: isPinSubmitting,
2441
- value: confirmPin,
2442
- onChange: (val) => handlePinInput(val, setConfirmPin),
2443
- placeholder: "\u2022\u2022\u2022\u2022"
2444
- }
2445
- ), /* @__PURE__ */ import_react39.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react39.default.createElement(
2446
- ThreeDActionButton,
2447
- {
2448
- type: "submit",
2449
- disabled: isPinSubmitting || newPin.length !== 4 || confirmPin.length !== 4 || hasPin && oldPin.length !== 4,
2450
- isLoading: isPinSubmitting,
2451
- className: "w-full py-3"
2452
- },
2453
- hasPin ? "Update PIN" : "Set PIN"
2454
- )))))));
2455
- };
2456
-
2457
- // src/components/UniversalErrorView.tsx
2458
- var import_react41 = __toESM(require("react"));
2459
- var import_react42 = require("@hugeicons/react");
2460
- var import_core_free_icons11 = require("@hugeicons/core-free-icons");
2461
- var UniversalErrorView = ({
2462
- isBooting,
2463
- isLoading,
2464
- activeData,
2465
- activeError,
2466
- envName,
2467
- onRetry,
2468
- returnUrl = "/app",
2469
- returnLabel = "Return to Workspace"
2470
- }) => {
2471
- if (isBooting || isLoading && !activeData) {
2472
- return /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex items-center justify-center h-screen w-full bg-black" }, /* @__PURE__ */ import_react41.default.createElement(PageSpinner, null));
2473
- }
2474
- if (!isLoading && (!activeData || activeError)) {
2475
- const errorString = typeof activeError === "string" ? activeError : JSON.stringify(activeError || "");
2476
- const errorMsg = errorString.toLowerCase();
2477
- const isPermissionError = errorMsg.includes("forbidden") || errorMsg.includes("unauthorized") || errorMsg.includes("permission");
2478
- const isNetworkError = errorMsg.includes("network") || errorMsg.includes("connection") || errorMsg.includes("fetch");
2479
- const isNotFoundError = errorMsg.includes("not found") || errorMsg.includes("404") || errorMsg.includes("does not exist") || !activeData && !isPermissionError && !isNetworkError;
2480
- const apiMessage = typeof activeError === "string" && activeError.trim() !== "" ? activeError : null;
2481
- let title = "Oops Connection Error";
2482
- let description = apiMessage || `We could not load your request. Please check your connection and try again.`;
2483
- let IconComponent = import_core_free_icons11.ConfusedIcon;
2484
- if (isNotFoundError) {
2485
- title = "Oops its not your fault";
2486
- description = apiMessage || `We could not reach the ${envName} you just loaded. Our team has been notified.`;
2487
- } else if (isPermissionError) {
2488
- title = "Access Restricted";
2489
- description = apiMessage || `You have insufficient permissions to view this ${envName}. Please contact your administrator.`;
2490
- }
2491
- return /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex flex-col items-center justify-center h-screen w-full px-4 bg-black animate-in fade-in duration-500" }, /* @__PURE__ */ import_react41.default.createElement("div", { className: "mb-4 flex justify-center" }, /* @__PURE__ */ import_react41.default.createElement(import_react42.HugeiconsIcon, { icon: IconComponent, size: 48, className: "text-neutral-600" })), /* @__PURE__ */ import_react41.default.createElement("h2", { className: "text-lg text-white tracking-tight" }, title), /* @__PURE__ */ import_react41.default.createElement("p", { className: "text-xs mt-2 mb-8 text-neutral-400 max-w-sm text-center leading-relaxed" }, description), /* @__PURE__ */ import_react41.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-3 w-full justify-center sm:w-auto" }, isNotFoundError || isPermissionError ? /* @__PURE__ */ import_react41.default.createElement(
2492
- "button",
2493
- {
2494
- onClick: () => window.location.href = returnUrl,
2495
- className: "px-6 py-2 text-white border border-neutral-700 rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none"
2496
- },
2497
- returnLabel
2498
- ) : (
2499
- // Soft errors (Network timeouts) allow them to retry or optionally retreat
2500
- /* @__PURE__ */ import_react41.default.createElement(import_react41.default.Fragment, null, envName.toLowerCase().includes("application") && /* @__PURE__ */ import_react41.default.createElement(
2501
- "button",
2502
- {
2503
- onClick: () => window.location.href = returnUrl,
2504
- className: "px-6 py-2 bg-transparent border border-neutral-700 text-neutral-400 hover:text-white rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none"
2505
- },
2506
- "Back Home"
2507
- ), /* @__PURE__ */ import_react41.default.createElement(
2508
- "button",
2509
- {
2510
- onClick: onRetry,
2511
- className: "px-6 py-2 bg-white text-black rounded-full text-[11px] tracking-widest transition-colors w-full sm:w-auto outline-none capitalize"
2512
- },
2513
- "Refresh ",
2514
- envName
2515
- ))
2516
- )));
2517
- }
2518
- return null;
2519
- };
2520
-
2521
- // src/components/UniversalTransactionPage.tsx
2522
- var import_react43 = __toESM(require("react"));
2523
- var import_react44 = require("@hugeicons/react");
2524
- var import_react_hot_toast7 = __toESM(require("react-hot-toast"));
2525
- var import_core_free_icons12 = require("@hugeicons/core-free-icons");
2526
- var PageSpinner2 = () => /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.Loading03Icon, size: 32, className: "animate-spin mb-4 text-white" }));
2527
- var formatDate = (dateInput) => {
2528
- const d = new Date(dateInput);
2529
- const day = d.getDate();
2530
- const month = d.toLocaleString("en-US", { month: "short" });
2531
- const year = d.getFullYear();
2532
- return `${day} ${month} ${year}`;
2533
- };
2534
- var formatTime = (dateInput) => {
2535
- return new Date(dateInput).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" });
2536
- };
2537
- var truncateAddress = (address) => {
2538
- if (!address || address.length < 12) return address;
2539
- return `${address.substring(0, 6)}...${address.substring(address.length - 4)}`;
2540
- };
2541
- var UniversalTransactionPage = ({
2542
- headerTitle,
2543
- headerDescription,
2544
- hideControls = false,
2545
- hideBalanceAmounts = false,
2546
- hidePagination = false,
2547
- transactions,
2548
- isLoading,
2549
- currentPage,
2550
- totalPages,
2551
- onPageChange,
2552
- searchQuery,
2553
- onSearchChange,
2554
- activeDirectionFilter,
2555
- onDirectionFilterChange,
2556
- activeTypeFilter,
2557
- onTypeFilterChange,
2558
- onReportTransaction,
2559
- onGenerateReceipt
2560
- }) => {
2561
- const [selectedTransaction, setSelectedTransaction] = (0, import_react43.useState)(null);
2562
- const [isGeneratingReceipt, setIsGeneratingReceipt] = (0, import_react43.useState)(false);
2563
- const [localSearchQuery, setLocalSearchQuery] = (0, import_react43.useState)(searchQuery);
2564
- const [isTyping, setIsTyping] = (0, import_react43.useState)(false);
2565
- const [isDirectionModalOpen, setIsDirectionModalOpen] = (0, import_react43.useState)(false);
2566
- const [isTypeModalOpen, setIsTypeModalOpen] = (0, import_react43.useState)(false);
2567
- const directionDropdownRef = (0, import_react43.useRef)(null);
2568
- const typeDropdownRef = (0, import_react43.useRef)(null);
2569
- (0, import_react43.useEffect)(() => {
2570
- function handleClickOutside(event) {
2571
- if (directionDropdownRef.current && !directionDropdownRef.current.contains(event.target)) {
2572
- setIsDirectionModalOpen(false);
2573
- }
2574
- if (typeDropdownRef.current && !typeDropdownRef.current.contains(event.target)) {
2575
- setIsTypeModalOpen(false);
2576
- }
2577
- }
2578
- document.addEventListener("mousedown", handleClickOutside);
2579
- return () => document.removeEventListener("mousedown", handleClickOutside);
2580
- }, []);
2581
- (0, import_react43.useEffect)(() => {
2582
- setIsTyping(true);
2583
- const handler = setTimeout(() => {
2584
- onSearchChange(localSearchQuery);
2585
- setIsTyping(false);
2586
- }, 600);
2587
- return () => clearTimeout(handler);
2588
- }, [localSearchQuery, onSearchChange]);
2589
- (0, import_react43.useEffect)(() => {
2590
- if (searchQuery === "" && localSearchQuery !== "") {
2591
- setLocalSearchQuery("");
2592
- }
2593
- }, [searchQuery]);
2594
- const getDisplayName = (tx) => {
2595
- if (tx.metadata?.merchantName) return tx.metadata.merchantName;
2596
- if (tx.metadata?.description) return tx.metadata.description;
2597
- return tx.type === "CARD_TRANSACTION" ? "Card Transaction" : "Wallet Transaction";
2598
- };
2599
- const handleGenerateReceipt = async () => {
2600
- if (!onGenerateReceipt || !selectedTransaction) return;
2601
- setIsGeneratingReceipt(true);
2602
- try {
2603
- await onGenerateReceipt(selectedTransaction);
2604
- import_react_hot_toast7.default.success("Receipt generated successfully.");
2605
- } catch (error) {
2606
- import_react_hot_toast7.default.error("Failed to generate receipt.");
2607
- } finally {
2608
- setIsGeneratingReceipt(false);
2609
- }
2610
- };
2611
- const isListLoading = isLoading || isTyping;
2612
- return /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, !hideControls && /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.Search01Icon, size: 16, className: "text-neutral-500" })), /* @__PURE__ */ import_react43.default.createElement(
2613
- "input",
2614
- {
2615
- type: "text",
2616
- placeholder: "Search reference or amount...",
2617
- value: localSearchQuery,
2618
- onChange: (e) => setLocalSearchQuery(e.target.value),
2619
- className: "w-full pl-10 pr-4 py-2 border border-neutral-800 rounded-full text-[13px] text-white placeholder-neutral-500 outline-none transition-colors focus:border-neutral-600"
2620
- }
2621
- )), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-3 w-full sm:w-auto overflow-x-auto pb-1 sm:pb-0" }, /* @__PURE__ */ import_react43.default.createElement(
2622
- "button",
2623
- {
2624
- onClick: () => setIsDirectionModalOpen(true),
2625
- className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white transition-colors outline-none"
2626
- },
2627
- /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.SearchList02Icon, size: 12 }),
2628
- activeDirectionFilter === "ALL" ? "Payment Type" : activeDirectionFilter
2629
- ), /* @__PURE__ */ import_react43.default.createElement(
2630
- "button",
2631
- {
2632
- onClick: () => setIsTypeModalOpen(true),
2633
- className: "flex items-center gap-2 whitespace-nowrap border border-neutral-800 px-5 py-2 rounded-full text-[12px] text-neutral-400 hover:text-white transition-colors outline-none"
2634
- },
2635
- /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.ListSettingIcon, size: 14 }),
2636
- activeTypeFilter === "ALL" ? "All Transactions" : activeTypeFilter.replace("_", " ")
2637
- ))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-neutral-900 w-full" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("h1", { className: "text-white text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-xs text-neutral-400" }, headerDescription))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full overflow-hidden" }, isListLoading ? /* @__PURE__ */ import_react43.default.createElement(PageSpinner2, null) : /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react43.default.createElement("div", null, transactions.length === 0 ? /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No transactions found") : transactions.map((tx) => /* @__PURE__ */ import_react43.default.createElement(
2638
- "div",
2639
- {
2640
- key: tx.id,
2641
- onClick: () => setSelectedTransaction(tx),
2642
- className: "flex items-center justify-between py-4 /50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
2643
- },
2644
- /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: `w-10 h-10 shrink-0 rounded-full flex items-center justify-center bg-neutral-700 text-white` }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: tx.direction === "CREDIT" ? import_core_free_icons12.ArrowDownRight01Icon : import_core_free_icons12.ArrowUpRight01Icon, size: 18 })), /* @__PURE__ */ import_react43.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react43.default.createElement("p", { className: "text-[13px] text-white truncate" }, getDisplayName(tx)), /* @__PURE__ */ import_react43.default.createElement("p", { className: `text-[13px] text-neutral-400 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, tx.direction === "CREDIT" ? "+" : "-", tx.amount, " ", tx.currency))),
2645
- /* @__PURE__ */ import_react43.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] text-neutral-500" }, formatDate(tx.createdAt)), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] text-neutral-500 capitalize" }, tx.direction.toLowerCase()))
2646
- ))), !hidePagination && /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center justify-between pt-6 mt-2" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] text-neutral-500 tracking-[0.2em]" }, "Page ", currentPage, " of ", totalPages === 0 ? 1 : totalPages), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react43.default.createElement(
2647
- "button",
2648
- {
2649
- onClick: () => onPageChange(currentPage - 1),
2650
- disabled: currentPage <= 1 || isListLoading,
2651
- className: "p-2 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-neutral-600 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
2652
- },
2653
- /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.ArrowLeft01Icon, size: 14 })
2654
- ), /* @__PURE__ */ import_react43.default.createElement(
2655
- "button",
2656
- {
2657
- onClick: () => onPageChange(currentPage + 1),
2658
- disabled: currentPage >= totalPages || isListLoading || totalPages === 0,
2659
- className: "p-2 border border-neutral-800 rounded-full text-neutral-500 hover:text-white hover:border-neutral-600 disabled:opacity-30 disabled:cursor-not-allowed transition-all outline-none"
2660
- },
2661
- /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.ArrowRight01Icon, size: 14 })
2662
- )))))), selectedTransaction && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setSelectedTransaction(null) }), /* @__PURE__ */ import_react43.default.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, "Details"), /* @__PURE__ */ import_react43.default.createElement("button", { onClick: () => setSelectedTransaction(null), className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: import_core_free_icons12.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col items-center justify-center mb-4" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: `w-12 h-12 rounded-full flex items-center justify-center mb-4 bg-neutral-700 text-white` }, /* @__PURE__ */ import_react43.default.createElement(import_react44.HugeiconsIcon, { icon: selectedTransaction.direction === "CREDIT" ? import_core_free_icons12.ArrowDownRight01Icon : import_core_free_icons12.ArrowUpRight01Icon, size: 20 })), /* @__PURE__ */ import_react43.default.createElement("h2", { className: `text-2xl text-white mb-2 transition-all duration-300 ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedTransaction.direction === "CREDIT" ? "+" : "-", selectedTransaction.amount, " ", selectedTransaction.currency), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-400 px-4 py-1.5 rounded-full border border-neutral-800" }, selectedTransaction.status)), /* @__PURE__ */ import_react43.default.createElement("div", { className: "grid grid-cols-1 gap-y-8 gap-x-4 mb-10 mt-6" }, /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Reference ID"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] text-white break-all" }, selectedTransaction.reference)), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Date & Time"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] text-white" }, formatDate(selectedTransaction.createdAt), " at ", formatTime(selectedTransaction.createdAt))), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Transaction Type"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.type.replace("_", " ").toLowerCase())), /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Flow Direction"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] text-white capitalize" }, selectedTransaction.direction.toLowerCase())), selectedTransaction.metadata?.fromAddress && selectedTransaction.metadata?.toAddress && /* @__PURE__ */ import_react43.default.createElement("div", null, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Transfer Route"), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex items-center gap-2 text-[13px] text-white" }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "truncate" }, truncateAddress(String(selectedTransaction.metadata.fromAddress))), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-neutral-500" }, "\u2192"), /* @__PURE__ */ import_react43.default.createElement("span", { className: "truncate" }, truncateAddress(String(selectedTransaction.metadata.toAddress))))), selectedTransaction.metadata && Object.entries(selectedTransaction.metadata).map(([key, value]) => {
2663
- if (key === "fromAddress" || key === "toAddress") return null;
2664
- if (value === null || value === void 0 || typeof value === "object") return null;
2665
- const formattedKey = key.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
2666
- return /* @__PURE__ */ import_react43.default.createElement("div", { key }, /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, formattedKey), /* @__PURE__ */ import_react43.default.createElement("span", { className: "text-[13px] text-white break-all" }, String(value)));
2667
- })), /* @__PURE__ */ import_react43.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react43.default.createElement(
2668
- ThreeDActionButton,
2669
- {
2670
- onClick: handleGenerateReceipt,
2671
- isLoading: isGeneratingReceipt,
2672
- className: "w-full py-3 text-[14px]"
2673
- },
2674
- "Generate Receipt"
2675
- ), /* @__PURE__ */ import_react43.default.createElement(
2676
- "button",
2677
- {
2678
- onClick: () => onReportTransaction && onReportTransaction(selectedTransaction),
2679
- className: "w-full flex items-center font-medium justify-center py-2.5 rounded-full border border-neutral-700 text-white transition-colors outline-none text-[13px] tracking-wide mt-2"
2680
- },
2681
- "Report Transaction"
2682
- ), selectedTransaction.type === "WALLET_TRANSACTION" && /* @__PURE__ */ import_react43.default.createElement(
2683
- "a",
2684
- {
2685
- href: `https://basescan.org/tx/${selectedTransaction.reference}`,
2686
- target: "_blank",
2687
- rel: "noopener noreferrer",
2688
- className: "w-full flex items-center font-medium justify-center py-2.5 rounded-full border border-neutral-700 text-white transition-colors outline-none text-[13px] tracking-wide mt-2"
2689
- },
2690
- "View in block explorer"
2691
- ))))), isDirectionModalOpen && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setIsDirectionModalOpen(false) }), /* @__PURE__ */ import_react43.default.createElement("div", { ref: directionDropdownRef, className: "relative w-72 bg-neutral-900 shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[14px] text-white tracking-tight" }, "Payment Type")), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, ["ALL", "CREDIT", "DEBIT"].map((option) => /* @__PURE__ */ import_react43.default.createElement(
2692
- "button",
2693
- {
2694
- key: option,
2695
- onClick: () => {
2696
- onDirectionFilterChange(option);
2697
- setIsDirectionModalOpen(false);
2698
- },
2699
- className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeDirectionFilter === option ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white"}`
2700
- },
2701
- /* @__PURE__ */ import_react43.default.createElement("span", { className: "truncate pr-2" }, option.charAt(0).toUpperCase() + option.slice(1).toLowerCase())
2702
- ))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react43.default.createElement(
2703
- "button",
2704
- {
2705
- onClick: () => setIsDirectionModalOpen(false),
2706
- className: "w-full py-3 text-[13px] text-neutral-500 hover:text-white transition-colors outline-none"
2707
- },
2708
- "Cancel"
2709
- )))), isTypeModalOpen && /* @__PURE__ */ import_react43.default.createElement("div", { className: "fixed inset-0 z-110 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => setIsTypeModalOpen(false) }), /* @__PURE__ */ import_react43.default.createElement("div", { ref: typeDropdownRef, className: "relative w-72 bg-neutral-900 shadow-2xl rounded-2xl flex flex-col items-center overflow-hidden animate-in zoom-in-95 duration-200" }, /* @__PURE__ */ import_react43.default.createElement("div", { className: "p-6 text-center w-full" }, /* @__PURE__ */ import_react43.default.createElement("h3", { className: "text-[14px] text-white tracking-tight" }, "Transactions Type")), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex flex-col pl-2 pr-2" }, [
2710
- { label: "All Transactions", value: "ALL" },
2711
- { label: "Wallet Transactions", value: "WALLET_TRANSACTION" },
2712
- { label: "Card Transactions", value: "CARD_TRANSACTION" }
2713
- ].map((option) => /* @__PURE__ */ import_react43.default.createElement(
2714
- "button",
2715
- {
2716
- key: option.value,
2717
- onClick: () => {
2718
- onTypeFilterChange(option.value);
2719
- setIsTypeModalOpen(false);
2720
- },
2721
- className: `text-left px-4 py-3 text-[11px] tracking-wide transition-colors rounded-full flex items-center justify-between outline-none ${activeTypeFilter === option.value ? "bg-neutral-800 text-white" : "text-neutral-400 hover:text-white"}`
2722
- },
2723
- /* @__PURE__ */ import_react43.default.createElement("span", { className: "truncate pr-2" }, option.label.charAt(0).toUpperCase() + option.label.slice(1).toLowerCase())
2724
- ))), /* @__PURE__ */ import_react43.default.createElement("div", { className: "w-full flex" }, /* @__PURE__ */ import_react43.default.createElement(
2725
- "button",
2726
- {
2727
- onClick: () => setIsTypeModalOpen(false),
2728
- className: "w-full py-3 text-[13px] text-neutral-500 hover:text-white transition-colors outline-none"
2729
- },
2730
- "Cancel"
2731
- )))));
2732
- };
2733
-
2734
- // src/components/UniversalHomeView.tsx
2735
- var import_react45 = __toESM(require("react"));
2736
- var import_react46 = require("@hugeicons/react");
2737
- var import_core_free_icons13 = require("@hugeicons/core-free-icons");
2738
- var UniversalHomeView = ({
2739
- balanceLabel = "Your Balance",
2740
- balanceAmount,
2741
- balanceCurrency = "$",
2742
- primaryAction,
2743
- secondaryAction,
2744
- quickActionsTitle = "Quick Actions",
2745
- quickActions = [],
2746
- transactionsProps
2747
- }) => {
2748
- const [displayAmount, setDisplayAmount] = (0, import_react45.useState)("0.00");
2749
- const [isBalanceHidden, setIsBalanceHidden] = (0, import_react45.useState)(false);
2750
- (0, import_react45.useEffect)(() => {
2751
- const target = parseFloat(balanceAmount.replace(/,/g, ""));
2752
- if (isNaN(target)) {
2753
- setDisplayAmount(balanceAmount);
2754
- return;
2755
- }
2756
- let startTimestamp = null;
2757
- const duration = 1e3;
2758
- const step = (timestamp) => {
2759
- if (!startTimestamp) startTimestamp = timestamp;
2760
- const progress = Math.min((timestamp - startTimestamp) / duration, 1);
2761
- const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);
2762
- const currentCount = easeProgress * target;
2763
- setDisplayAmount(currentCount.toLocaleString("en-US", {
2764
- minimumFractionDigits: 2,
2765
- maximumFractionDigits: 2
2766
- }));
2767
- if (progress < 1) {
2768
- requestAnimationFrame(step);
2769
- } else {
2770
- setDisplayAmount(target.toLocaleString("en-US", {
2771
- minimumFractionDigits: 2,
2772
- maximumFractionDigits: 2
2773
- }));
2774
- }
2775
- };
2776
- requestAnimationFrame(step);
2777
- }, [balanceAmount]);
2778
- const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, "00"];
2779
- const silverBg = `linear-gradient(110deg, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0) 35%, rgba(0,0,0,0.1) 60%, rgba(255,255,255,0.6) 80%, rgba(0,0,0,0.2) 100%), url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc2MDAnIGhlaWdodD0nODAnPjxmaWx0ZXIgaWQ9J2JydXNoZWQnIHg9JzAlJyB5PScwJScgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJSc+PGZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuMDA1IDAuOCcgbnVtT2N0YXZlcz0nNCcgc2VlZD0nNScgcmVzdWx0PSdub2lzZScvPjxmZUNvbG9yTWF0cml4IHR5cGU9J3NhdHVyYXRlJyB2YWx1ZXM9JzAnIHJlc3VsdD0nbW9ubycvPjxmZUNvbXBvbmVudFRyYW5zZmVyIHJlc3VsdD0nYWRqdXN0ZWQnPjxmZUZ1bmNSIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuNCcgaW50ZXJjZXB0PScwLjMnLz48ZmVGdW5jRyB0eXBlPSdsaW5lYXInIHNsb3BlPScwLjQnIGludGVyY2VwdD0nMC4zJy8+PGZlRnVuY0IgdHlwZT0nbGluZWFyJyBzbG9wZT0nMC40JyBpbnRlcmNlcHQ9JzAuMycvPjxmZUZ1bmNBIHR5cGU9J2xpbmVhcicgc2xvcGU9JzAuMTUnIGludGVyY2VwdD0nMCcvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48L2ZpbHRlcj48cmVjdCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBmaWxsPScjZDFkNWRiJy8+PHJlY3Qgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgZmlsdGVyPSd1cmwoI2JydXNoZWQpJyBvcGFjaXR5PScwLjgnLz48L3N2Zz4=")`;
2780
- const silverShadowBase = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 4px 10px rgba(0,0,0,0.5)";
2781
- const silverShadowHover = "inset 0 1px 2px rgba(255,255,255,1), inset 0 -2px 3px rgba(0,0,0,0.3), 0 6px 14px rgba(0,0,0,0.7)";
2782
- const silverShadowActive = "inset 0 2px 4px rgba(0,0,0,0.4), inset 0 -1px 2px rgba(255,255,255,0.5), 0 2px 4px rgba(0,0,0,0.3)";
2783
- return /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full max-w-5xl mx-auto flex flex-col animate-in fade-in duration-300" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "relative flex items-start justify-between w-full pt-4 pb-8" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex flex-col items-start text-left z-10 w-full" }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-2 mb-1.5" }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[12px] sm:text-[13px] text-neutral-400" }, balanceLabel), /* @__PURE__ */ import_react45.default.createElement(
2784
- "button",
2785
- {
2786
- onClick: () => setIsBalanceHidden(!isBalanceHidden),
2787
- className: "text-neutral-500 hover:text-white transition-colors outline-none"
2788
- },
2789
- /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: isBalanceHidden ? import_core_free_icons13.ViewIcon : import_core_free_icons13.ViewOffSlashIcon, size: 14 })
2790
- )), /* @__PURE__ */ import_react45.default.createElement("h1", { className: `text-3xl sm:text-4xl md:text-5xl text-white tracking-tight mb-5 tabular-nums flex items-baseline transition-all duration-300 ${isBalanceHidden ? "blur-sm opacity-40 select-none" : ""}` }, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xl sm:text-2xl text-neutral-500 mr-1" }, balanceCurrency), intPart, /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-xl sm:text-2xl text-neutral-500" }, ".", decPart)), /* @__PURE__ */ import_react45.default.createElement("div", { className: "flex items-center gap-3" }, primaryAction && /* @__PURE__ */ import_react45.default.createElement(
2791
- "button",
2792
- {
2793
- onClick: primaryAction.onClick,
2794
- className: "relative inline-flex items-center justify-center gap-1.5 px-8 py-2 rounded-full text-black transition-all duration-150 select-none outline-none overflow-hidden active:translate-y-0.5",
2795
- style: {
2796
- backgroundImage: silverBg,
2797
- backgroundSize: "cover",
2798
- backgroundPosition: "center",
2799
- boxShadow: silverShadowBase,
2800
- textShadow: "0 1px 1px rgba(255,255,255,0.6)"
2801
- },
2802
- onMouseEnter: (e) => {
2803
- e.currentTarget.style.boxShadow = silverShadowHover;
2804
- e.currentTarget.style.transform = "translateY(-1px)";
2805
- },
2806
- onMouseLeave: (e) => {
2807
- e.currentTarget.style.boxShadow = silverShadowBase;
2808
- e.currentTarget.style.transform = "translateY(0px)";
2809
- },
2810
- onMouseDown: (e) => {
2811
- e.currentTarget.style.boxShadow = silverShadowActive;
2812
- e.currentTarget.style.transform = "translateY(2px)";
2813
- },
2814
- onMouseUp: (e) => {
2815
- e.currentTarget.style.transform = "translateY(-1px)";
2816
- }
2817
- },
2818
- /* @__PURE__ */ import_react45.default.createElement("span", { className: "absolute inset-0 bg-linear-to-r from-white/30 to-transparent pointer-events-none" }),
2819
- /* @__PURE__ */ import_react45.default.createElement("span", { className: "relative z-10 flex items-center gap-1.5 leading-none text-[13px] tracking-wide font-medium drop-shadow-[0_1px_1px_rgba(255,255,255,0.8)]" }, primaryAction.label, primaryAction.icon && /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: primaryAction.icon, size: 16 }))
2820
- ), secondaryAction && /* @__PURE__ */ import_react45.default.createElement(
2821
- "button",
2822
- {
2823
- onClick: secondaryAction.onClick,
2824
- className: "flex items-center gap-1.5 px-8 py-2 rounded-full border border-neutral-800 text-white transition-colors outline-none"
2825
- },
2826
- /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[13px] tracking-wide" }, secondaryAction.label),
2827
- secondaryAction.icon && /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: secondaryAction.icon, size: 16 })
2828
- )))), quickActions && quickActions.length > 0 && /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full mb-8 z-10" }, /* @__PURE__ */ import_react45.default.createElement("h3", { className: "text-xl text-white mb-4 px-1 tracking-tight" }, quickActionsTitle), /* @__PURE__ */ import_react45.default.createElement("div", { className: "grid grid-cols-4 gap-2 sm:gap-3 w-full" }, quickActions.slice(0, 4).map((action) => /* @__PURE__ */ import_react45.default.createElement(
2829
- "button",
2830
- {
2831
- key: action.id,
2832
- onClick: action.onClick,
2833
- className: `w-full h-23.75 sm:h-28.75 rounded-2xl border border-neutral-800 p-2.5 sm:p-3 flex flex-col justify-between items-start cursor-pointer active:scale-[0.98] transition-all outline-none`
2834
- },
2835
- /* @__PURE__ */ import_react45.default.createElement("div", { className: `w-7 h-7 sm:w-9 sm:h-9 rounded-full flex items-center justify-center border border-neutral-800 text-white}` }, /* @__PURE__ */ import_react45.default.createElement("div", { className: "scale-75 sm:scale-100 text-white flex items-center justify-center" }, /* @__PURE__ */ import_react45.default.createElement(import_react46.HugeiconsIcon, { icon: action.icon, size: 18 }))),
2836
- /* @__PURE__ */ import_react45.default.createElement("span", { className: "text-[10px] sm:text-[12px] text-neutral-300 text-left leading-[1.2] whitespace-pre-line mt-1" }, action.label)
2837
- )))), /* @__PURE__ */ import_react45.default.createElement("div", { className: "w-full" }, /* @__PURE__ */ import_react45.default.createElement(
2838
- UniversalTransactionPage,
2839
- {
2840
- ...transactionsProps,
2841
- hideControls: true,
2842
- hideBalanceAmounts: isBalanceHidden,
2843
- hidePagination: true
2844
- }
2845
- )));
2846
- };
2847
-
2848
- // src/components/UniversalWalletPage.tsx
2849
- var import_react47 = __toESM(require("react"));
2850
- var import_react48 = require("@hugeicons/react");
2851
- var import_core_free_icons14 = require("@hugeicons/core-free-icons");
2852
- var PageSpinner3 = () => /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons14.Loading03Icon, size: 32, className: "animate-spin mb-4 text-white" }));
2853
- var WalletLogo = ({ src, alt, sizeClass = "w-10 h-10" }) => {
2854
- const [isLoaded, setIsLoaded] = (0, import_react47.useState)(false);
2855
- return /* @__PURE__ */ import_react47.default.createElement("div", { className: `relative shrink-0 rounded-full bg-black flex items-center justify-center overflow-hidden ${sizeClass}` }, !isLoaded && /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons14.Loading03Icon, size: 16, className: "animate-spin text-neutral-600 absolute" }), /* @__PURE__ */ import_react47.default.createElement(
2856
- "img",
2857
- {
2858
- src,
2859
- alt,
2860
- onLoad: () => setIsLoaded(true),
2861
- className: `w-full h-full object-cover transition-opacity duration-300 ${isLoaded ? "opacity-100" : "opacity-0"}`
2862
- }
2863
- ));
2864
- };
2865
- var UniversalWalletPage = ({
2866
- headerTitle,
2867
- headerDescription,
2868
- hideControls = false,
2869
- hideBalanceAmounts = false,
2870
- isGeneratingStatement = false,
2871
- wallets,
2872
- isLoading = false,
2873
- renderQrCode,
2874
- onDownloadPayId,
2875
- onCopyAddress
2876
- }) => {
2877
- const [selectedWallet, setSelectedWallet] = (0, import_react47.useState)(null);
2878
- const [localSearchQuery, setLocalSearchQuery] = (0, import_react47.useState)("");
2879
- const [showToast, setShowToast] = (0, import_react47.useState)(false);
2880
- const filteredWallets = wallets.filter((wallet) => {
2881
- const q = localSearchQuery.toLowerCase();
2882
- return wallet.name.toLowerCase().includes(q) || wallet.currency.toLowerCase().includes(q) || wallet.network.toLowerCase().includes(q);
2883
- });
2884
- const handleCopy = (wallet) => {
2885
- if (onCopyAddress) onCopyAddress(wallet);
2886
- if (typeof navigator !== "undefined" && navigator.clipboard) {
2887
- navigator.clipboard.writeText(wallet.address).catch(() => {
2888
- });
2889
- }
2890
- setShowToast(true);
2891
- setTimeout(() => setShowToast(false), 2500);
2892
- };
2893
- return /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col gap-6 animate-in max-w-5xl fade-in duration-300" }, !hideControls && /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 w-full" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative w-full sm:w-96" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none" }, /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons14.Search01Icon, size: 16, className: "text-neutral-500" })), /* @__PURE__ */ import_react47.default.createElement(
2894
- "input",
2895
- {
2896
- type: "text",
2897
- placeholder: "Search wallets by name or network...",
2898
- value: localSearchQuery,
2899
- onChange: (e) => setLocalSearchQuery(e.target.value),
2900
- className: "w-full pl-10 pr-4 py-2 border border-neutral-800 rounded-full text-[13px] text-white placeholder-neutral-500 outline-none transition-colors focus:border-neutral-600"
2901
- }
2902
- ))), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col gap-8 p-6 rounded-2xl bg-neutral-900 w-full" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col sm:flex-row sm:items-start justify-between gap-4" }, /* @__PURE__ */ import_react47.default.createElement("div", null, /* @__PURE__ */ import_react47.default.createElement("h1", { className: "text-white text-xl mb-1 tracking-tight" }, headerTitle), headerDescription && /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-xs text-neutral-400" }, headerDescription))), /* @__PURE__ */ import_react47.default.createElement("div", { className: "w-full overflow-hidden" }, isLoading ? /* @__PURE__ */ import_react47.default.createElement(PageSpinner3, null) : /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react47.default.createElement("div", null, filteredWallets.length === 0 ? /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-xs text-neutral-500 py-6 text-center" }, "No wallets found") : filteredWallets.map((wallet) => /* @__PURE__ */ import_react47.default.createElement(
2903
- "div",
2904
- {
2905
- key: wallet.id,
2906
- onClick: () => setSelectedWallet(wallet),
2907
- className: "flex items-center justify-between py-4 /50 transition-colors cursor-pointer group min-w-0 px-2 -mx-2 rounded-xl"
2908
- },
2909
- /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex items-center gap-4 min-w-0 flex-1" }, /* @__PURE__ */ import_react47.default.createElement(WalletLogo, { src: wallet.logoSrc, alt: wallet.name }), /* @__PURE__ */ import_react47.default.createElement("div", { className: "min-w-0 flex-1 flex flex-col gap-1" }, /* @__PURE__ */ import_react47.default.createElement("p", { className: "text-[13px] text-white truncate font-medium" }, wallet.name), /* @__PURE__ */ import_react47.default.createElement("p", { className: `text-[13px] text-neutral-400 truncate transition-all duration-300 ${hideBalanceAmounts ? "blur-sm opacity-40 select-none" : ""}` }, wallet.balance, " ", wallet.currency))),
2910
- /* @__PURE__ */ import_react47.default.createElement("div", { className: "shrink-0 flex flex-col items-end gap-1 text-right" }, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[10px] tracking-wide text-neutral-400 bg-neutral-800 px-2.5 py-1 rounded-full " }, wallet.network))
2911
- )))))), selectedWallet && /* @__PURE__ */ import_react47.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "absolute inset-0 bg-black/60", onClick: () => {
2912
- setSelectedWallet(null);
2913
- setShowToast(false);
2914
- } }), /* @__PURE__ */ import_react47.default.createElement("div", { className: "relative w-full max-w-sm bg-neutral-900 rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 max-h-[90vh]" }, showToast && /* @__PURE__ */ import_react47.default.createElement("div", { className: "absolute top-4 left-1/2 -translate-x-1/2 z-50 bg-neutral-800 text-white px-5 py-2.5 rounded-full text-[12px] font-medium tracking-wide shadow-xl animate-in slide-in-from-top-4 fade-in duration-200 pointer-events-none whitespace-nowrap" }, "Address copied to clipboard"), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0" }, /* @__PURE__ */ import_react47.default.createElement("h3", { className: "text-[15px] text-white tracking-tight" }, "Wallet Details"), /* @__PURE__ */ import_react47.default.createElement("button", { onClick: () => {
2915
- setSelectedWallet(null);
2916
- setShowToast(false);
2917
- }, className: "text-neutral-500 hover:text-white transition-colors outline-none" }, /* @__PURE__ */ import_react47.default.createElement(import_react48.HugeiconsIcon, { icon: import_core_free_icons14.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 pt-2" }, /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col items-center justify-center mb-6" }, /* @__PURE__ */ import_react47.default.createElement(WalletLogo, { src: selectedWallet.logoSrc, alt: selectedWallet.name, sizeClass: "w-14 h-14 mb-4" }), /* @__PURE__ */ import_react47.default.createElement("h2", { className: `text-2xl text-white mb-2 transition-all duration-300 font-medium ${hideBalanceAmounts ? "blur-[6px] opacity-40 select-none" : ""}` }, selectedWallet.balance, " ", selectedWallet.currency), /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[9px] tracking-widest text-neutral-400 px-4 py-1.5 rounded-full border border-neutral-800 uppercase mt-1" }, selectedWallet.network, " NETWORK")), renderQrCode && /* @__PURE__ */ import_react47.default.createElement("div", { className: "w-full flex justify-center mb-6" }, renderQrCode(selectedWallet)), /* @__PURE__ */ import_react47.default.createElement("div", { className: "grid grid-cols-1 gap-y-6 gap-x-4 mb-10" }, /* @__PURE__ */ import_react47.default.createElement("div", null, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Wallet Address"), /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[13px] text-white break-all font-medium" }, selectedWallet.address)), /* @__PURE__ */ import_react47.default.createElement("div", null, /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 block mb-2" }, "Wallet Name"), /* @__PURE__ */ import_react47.default.createElement("span", { className: "text-[13px] text-white" }, selectedWallet.name))), /* @__PURE__ */ import_react47.default.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ import_react47.default.createElement(
2918
- ThreeDActionButton,
2919
- {
2920
- onClick: () => onDownloadPayId && onDownloadPayId(selectedWallet),
2921
- isLoading: isGeneratingStatement,
2922
- className: "w-full py-3 text-[13px]"
2923
- },
2924
- "Generate Statement"
2925
- ), /* @__PURE__ */ import_react47.default.createElement(
2926
- "button",
2927
- {
2928
- onClick: () => handleCopy(selectedWallet),
2929
- className: "w-full flex font-medium items-center justify-center py-2.5 rounded-full border border-neutral-700 text-white outline-none text-[13px] tracking-wide"
2930
- },
2931
- "Copy Wallet Address"
2932
- ))))));
2933
- };
2934
-
2935
- // src/components/CardLogo.tsx
2936
- var import_react49 = __toESM(require("react"));
2937
- var CardLogo = ({ network, className = "" }) => {
2938
- if (network === "MASTERCARD") {
2939
- return /* @__PURE__ */ import_react49.default.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 32 32", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react49.default.createElement("title", null, "Mastercard"), /* @__PURE__ */ import_react49.default.createElement("path", { d: "M16 8.73c-0.12 0.094-0.236 0.187-0.349 0.288-1.955 1.705-3.184 4.2-3.184 6.982s1.228 5.277 3.172 6.973l0.011 0.009c0.112 0.1 0.231 0.197 0.349 0.29 0.12-0.092 0.236-0.19 0.349-0.29 1.955-1.705 3.183-4.2 3.183-6.982s-1.228-5.277-3.172-6.973l-0.011-0.009c-0.112-0.1-0.23-0.195-0.349-0.288zM21.721 6.745c-0.005 0-0.011-0-0.018-0-1.903 0-3.67 0.577-5.138 1.566l0.033-0.021c0.075 0.059 0.143 0.121 0.205 0.186l0.001 0.001c2.116 1.836 3.446 4.528 3.446 7.531 0 2.996-1.323 5.682-3.417 7.507l-0.012 0.010c-0.072 0.061-0.15 0.122-0.226 0.182 1.441 0.97 3.216 1.549 5.125 1.549 5.112 0 9.256-4.144 9.256-9.256s-4.143-9.255-9.255-9.256h-0zM15.18 23.526c0.072 0.061 0.15 0.122 0.226 0.182-1.44 0.969-3.214 1.547-5.123 1.547-5.112 0-9.255-4.144-9.255-9.255s4.144-9.255 9.255-9.255c1.907 0 3.68 0.577 5.153 1.566l-0.033-0.021c-0.075 0.059-0.143 0.121-0.205 0.186l-0.001 0.001c-2.116 1.836-3.446 4.528-3.446 7.531 0 2.996 1.323 5.682 3.417 7.507l0.012 0.010z" }));
2940
- }
2941
- if (network === "VERVE") {
2942
- return /* @__PURE__ */ import_react49.default.createElement("div", { className: `font-bold italic flex items-center justify-center tracking-widest ${className}`, style: { fontFamily: "sans-serif" } }, "Verve");
2943
- }
2944
- return /* @__PURE__ */ import_react49.default.createElement("svg", { className, fill: "currentColor", viewBox: "0 0 32 32", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react49.default.createElement("title", null, "Visa"), /* @__PURE__ */ import_react49.default.createElement("path", { d: "M15.854 11.329l-2.003 9.367h-2.424l2.006-9.367zM26.051 17.377l1.275-3.518 0.735 3.518zM28.754 20.696h2.242l-1.956-9.367h-2.069c-0.003-0-0.007-0-0.010-0-0.459 0-0.853 0.281-1.019 0.68l-0.003 0.007-3.635 8.68h2.544l0.506-1.4h3.109zM22.429 17.638c0.010-2.473-3.419-2.609-3.395-3.714 0.008-0.336 0.327-0.694 1.027-0.785 0.13-0.013 0.28-0.021 0.432-0.021 0.711 0 1.385 0.162 1.985 0.452l-0.027-0.012 0.425-1.987c-0.673-0.261-1.452-0.413-2.266-0.416h-0.001c-2.396 0-4.081 1.275-4.096 3.098-0.015 1.348 1.203 2.099 2.122 2.549 0.945 0.459 1.262 0.754 1.257 1.163-0.006 0.63-0.752 0.906-1.45 0.917-0.032 0.001-0.071 0.001-0.109 0.001-0.871 0-1.691-0.219-2.407-0.606l0.027 0.013-0.439 2.052c0.786 0.315 1.697 0.497 2.651 0.497 0.015 0 0.030-0 0.045-0h-0.002c2.546 0 4.211-1.257 4.22-3.204zM12.391 11.329l-3.926 9.367h-2.562l-1.932-7.477c-0.037-0.364-0.26-0.668-0.57-0.82l-0.006-0.003c-0.688-0.338-1.488-0.613-2.325-0.786l-0.066-0.011 0.058-0.271h4.124c0 0 0.001 0 0.001 0 0.562 0 1.028 0.411 1.115 0.948l0.001 0.006 1.021 5.421 2.522-6.376z" }));
2945
- };
2946
-
2947
- // src/components/Stagger.tsx
2948
- var import_react50 = __toESM(require("react"));
2949
- var import_react51 = require("@hugeicons/react");
2950
- var import_core_free_icons15 = require("@hugeicons/core-free-icons");
2951
- var Stagger = ({ steps, currentStep }) => {
2952
- const getIconForStep = (stepName) => {
2953
- const lowerName = stepName.toLowerCase();
2954
- if (lowerName.includes("document")) return import_core_free_icons15.Upload01Icon;
2955
- if (lowerName.includes("review")) return import_core_free_icons15.FileSyncIcon;
2956
- if (lowerName.includes("submit")) return import_core_free_icons15.CloudUploadIcon;
2957
- return import_core_free_icons15.Briefcase02Icon;
2958
- };
2959
- return /* @__PURE__ */ import_react50.default.createElement("div", { className: "w-full flex items-center justify-between relative z-0" }, /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 w-full h-px bg-neutral-100 -z-10" }), /* @__PURE__ */ import_react50.default.createElement("div", { className: "absolute left-0 top-1/2 -translate-y-1/2 h-px bg-emerald-500 -z-10 transition-all duration-500", style: { width: `${currentStep / (steps.length - 1) * 100}%` } }), steps.map((step, idx) => {
2960
- const isActive = idx === currentStep;
2961
- const isPassed = idx < currentStep;
2962
- const colorClass = isPassed ? "bg-emerald-500 text-white" : isActive ? "bg-neutral-100 text-neutral-500" : "bg-neutral-100 text-neutral-500";
2963
- return /* @__PURE__ */ import_react50.default.createElement("div", { key: step, className: `w-6 h-6 rounded-full flex items-center justify-center transition-colors duration-300 ${colorClass}` }, /* @__PURE__ */ import_react50.default.createElement(import_react51.HugeiconsIcon, { icon: getIconForStep(step), size: 11 }));
2964
- }));
1343
+ ), /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute inset-x-0 bottom-0 p-6 sm:p-8 z-30 flex flex-col justify-end text-left pointer-events-none" }, title && /* @__PURE__ */ import_react29.default.createElement("h3", { className: " text-xl sm:text-2xl md:text-3xl text-white tracking-tight mb-2 sm:mb-3 drop-shadow-md" }, title), subtitle && /* @__PURE__ */ import_react29.default.createElement("p", { className: "text-[13px] sm:text-[15px] leading-relaxed text-neutral-300 max-w-2xl drop-shadow-sm" }, subtitle)));
2965
1344
  };
2966
1345
 
2967
1346
  // src/components/MedicalFeatureStatsBlock.tsx
2968
- var import_react52 = __toESM(require("react"));
1347
+ var import_react31 = __toESM(require("react"));
2969
1348
  var import_image9 = __toESM(require("next/image"));
2970
1349
  var MedicalFeatureStatsBlock = ({
2971
1350
  bottomHeadline,
@@ -2974,9 +1353,9 @@ var MedicalFeatureStatsBlock = ({
2974
1353
  trustText,
2975
1354
  stats
2976
1355
  }) => {
2977
- const [isAnimating, setIsAnimating] = (0, import_react52.useState)(false);
2978
- const titleRef = (0, import_react52.useRef)(null);
2979
- (0, import_react52.useEffect)(() => {
1356
+ const [isAnimating, setIsAnimating] = (0, import_react31.useState)(false);
1357
+ const titleRef = (0, import_react31.useRef)(null);
1358
+ (0, import_react31.useEffect)(() => {
2980
1359
  const observer = new IntersectionObserver(
2981
1360
  ([entry]) => {
2982
1361
  if (entry.isIntersecting) {
@@ -2994,15 +1373,15 @@ var MedicalFeatureStatsBlock = ({
2994
1373
  }
2995
1374
  return () => observer.disconnect();
2996
1375
  }, []);
2997
- return /* @__PURE__ */ import_react52.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10 bg-black" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react52.default.createElement(
1376
+ return /* @__PURE__ */ import_react31.default.createElement("section", { className: "py-24 w-full flex justify-center relative z-10" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "max-w-6xl w-full flex flex-col px-4 md:px-8" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-10 mb-12" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "max-w-xl" }, /* @__PURE__ */ import_react31.default.createElement(
2998
1377
  "h2",
2999
1378
  {
3000
1379
  ref: titleRef,
3001
- className: `text-3xl text-white tracking-tight leading-[1.1] mb-5 ${isAnimating ? "" : ""}`,
1380
+ className: `text-3xl text-black tracking-tight leading-[1.1] mb-5 ${isAnimating ? "" : ""}`,
3002
1381
  style: isAnimating ? { animationIterationCount: 1 } : {}
3003
1382
  },
3004
1383
  bottomHeadline
3005
- ), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-400" }, bottomDescription)), /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react52.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-black overflow-hidden bg-neutral-900 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react52.default.createElement(
1384
+ ), /* @__PURE__ */ import_react31.default.createElement("p", { className: "text-[14px] leading-relaxed text-neutral-500" }, bottomDescription)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-center gap-4 shrink-0" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex -space-x-3" }, avatars.map((src, i) => /* @__PURE__ */ import_react31.default.createElement("div", { key: i, className: "relative w-12 h-12 rounded-full border-[3px] border-white overflow-hidden bg-neutral-100 z-1 hover:z-10 transition-all" }, /* @__PURE__ */ import_react31.default.createElement(
3006
1385
  import_image9.default,
3007
1386
  {
3008
1387
  src,
@@ -3011,17 +1390,17 @@ var MedicalFeatureStatsBlock = ({
3011
1390
  sizes: "48px",
3012
1391
  className: "object-cover"
3013
1392
  }
3014
- )))), /* @__PURE__ */ import_react52.default.createElement("p", { className: "text-[11px] text-neutral-400 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react52.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react52.default.createElement("div", { key: idx, className: "bg-neutral-900 rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react52.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react52.default.createElement("span", { className: "text-[14px] text-neutral-400 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react52.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-white mt-auto leading-none" }, stat.value))))));
1393
+ )))), /* @__PURE__ */ import_react31.default.createElement("p", { className: "text-[11px] text-neutral-800 leading-[1.4] max-w-55" }, trustText))), /* @__PURE__ */ import_react31.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, stats.map((stat, idx) => /* @__PURE__ */ import_react31.default.createElement("div", { key: idx, className: "bg-white rounded-4xl p-8 md:p-10 flex flex-col h-70" }, /* @__PURE__ */ import_react31.default.createElement("div", { className: "flex items-center p-0.5 mb-6" }, /* @__PURE__ */ import_react31.default.createElement("span", { className: "text-[14px] text-neutral-500 tracking-wide" }, stat.label)), /* @__PURE__ */ import_react31.default.createElement("div", { className: "text-6xl gradient-text md:text-[80px] font-light tracking-tighter text-black mt-auto leading-none" }, stat.value))))));
3015
1394
  };
3016
1395
 
3017
1396
  // src/components/ConsultantShowcase.tsx
3018
- var import_react53 = __toESM(require("react"));
1397
+ var import_react32 = __toESM(require("react"));
3019
1398
  var import_image10 = __toESM(require("next/image"));
3020
- var import_react54 = require("@hugeicons/react");
3021
- var import_core_free_icons16 = require("@hugeicons/core-free-icons");
1399
+ var import_react33 = require("@hugeicons/react");
1400
+ var import_core_free_icons7 = require("@hugeicons/core-free-icons");
3022
1401
  var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
3023
- const [isLoading, setIsLoading] = (0, import_react53.useState)(true);
3024
- return /* @__PURE__ */ import_react53.default.createElement("div", { className: `absolute inset-0 bg-neutral-900 ${className}` }, isLoading && /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-900/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react53.default.createElement(import_react54.HugeiconsIcon, { icon: import_core_free_icons16.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react53.default.createElement(
1402
+ const [isLoading, setIsLoading] = (0, import_react32.useState)(true);
1403
+ return /* @__PURE__ */ import_react32.default.createElement("div", { className: `absolute inset-0 bg-neutral-800 ${className}` }, isLoading && /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-20 bg-neutral-800/50 backdrop-blur-md transition-opacity duration-300" }, /* @__PURE__ */ import_react32.default.createElement(import_react33.HugeiconsIcon, { icon: import_core_free_icons7.Loading03Icon, size: 24, className: "animate-spin text-white/50" })), /* @__PURE__ */ import_react32.default.createElement(
3025
1404
  import_image10.default,
3026
1405
  {
3027
1406
  src,
@@ -3040,9 +1419,9 @@ var ImageWithLoader = ({ src, alt, className, sizes, priority = false }) => {
3040
1419
  var ConsultantShowcase = ({
3041
1420
  profiles
3042
1421
  }) => {
3043
- const [currentIndex, setCurrentIndex] = (0, import_react53.useState)(0);
3044
- const [touchStart, setTouchStart] = (0, import_react53.useState)(null);
3045
- const [touchEnd, setTouchEnd] = (0, import_react53.useState)(null);
1422
+ const [currentIndex, setCurrentIndex] = (0, import_react32.useState)(0);
1423
+ const [touchStart, setTouchStart] = (0, import_react32.useState)(null);
1424
+ const [touchEnd, setTouchEnd] = (0, import_react32.useState)(null);
3046
1425
  const nextSlide = () => {
3047
1426
  setCurrentIndex((prev) => prev === profiles.length - 1 ? 0 : prev + 1);
3048
1427
  };
@@ -3067,23 +1446,23 @@ var ConsultantShowcase = ({
3067
1446
  }
3068
1447
  };
3069
1448
  if (!profiles || profiles.length === 0) return null;
3070
- return /* @__PURE__ */ import_react53.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative bg-black" }, /* @__PURE__ */ import_react53.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react53.default.createElement(
1449
+ return /* @__PURE__ */ import_react32.default.createElement("section", { className: "py-24 w-full flex justify-center px-4 md:px-8 z-10 relative" }, /* @__PURE__ */ import_react32.default.createElement("div", { className: "max-w-6xl w-full" }, /* @__PURE__ */ import_react32.default.createElement(
3071
1450
  "div",
3072
1451
  {
3073
- className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
1452
+ className: "relative w-full h-100 md:h-112.5 rounded-4xl overflow-hidden bg-neutral-900 group select-none",
3074
1453
  onTouchStart,
3075
1454
  onTouchMove,
3076
1455
  onTouchEnd
3077
1456
  },
3078
1457
  profiles.map((profile, idx) => {
3079
1458
  const isActive = idx === currentIndex;
3080
- return /* @__PURE__ */ import_react53.default.createElement(
1459
+ return /* @__PURE__ */ import_react32.default.createElement(
3081
1460
  "div",
3082
1461
  {
3083
1462
  key: profile.id,
3084
1463
  className: `absolute inset-0 transition-opacity duration-700 ease-in-out ${isActive ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`
3085
1464
  },
3086
- /* @__PURE__ */ import_react53.default.createElement(
1465
+ /* @__PURE__ */ import_react32.default.createElement(
3087
1466
  ImageWithLoader,
3088
1467
  {
3089
1468
  src: profile.imageSrc,
@@ -3091,14 +1470,14 @@ var ConsultantShowcase = ({
3091
1470
  priority: idx === 0
3092
1471
  }
3093
1472
  ),
3094
- /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute inset-0 bg-black/40 z-10 pointer-events-none" }),
3095
- /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/40 to-transparent z-20 pointer-events-none" }),
3096
- /* @__PURE__ */ import_react53.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react53.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react53.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[15px] text-neutral-300 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react53.default.createElement("p", { className: "text-[15px] text-neutral-400 font-light tracking-wide mt-1" }, profile.description)))
1473
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute inset-0 bg-black/20 z-10 pointer-events-none" }),
1474
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute top-0 left-0 w-full h-[60%] bg-linear-to-b from-black/80 via-black/30 to-transparent z-20 pointer-events-none" }),
1475
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: `absolute top-8 left-8 md:top-12 md:left-12 z-30 text-white max-w-lg transition-transform duration-700 ease-out ${isActive ? "translate-y-0" : "-translate-y-4"}` }, /* @__PURE__ */ import_react32.default.createElement("h2", { className: "text-[29px] tracking-tight mb-2 leading-none" }, profile.name), /* @__PURE__ */ import_react32.default.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ import_react32.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide" }, profile.role), profile.description && /* @__PURE__ */ import_react32.default.createElement("p", { className: "text-[15px] text-white/80 font-light tracking-wide mt-1" }, profile.description)))
3097
1476
  );
3098
1477
  }),
3099
- /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
3100
- /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
3101
- /* @__PURE__ */ import_react53.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react53.default.createElement(
1478
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute top-0 left-0 w-[20%] h-full z-40 cursor-w-resize hidden md:block", onClick: prevSlide, "aria-label": "Previous image" }),
1479
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute top-0 right-0 w-[20%] h-full z-40 cursor-e-resize hidden md:block", onClick: nextSlide, "aria-label": "Next image" }),
1480
+ /* @__PURE__ */ import_react32.default.createElement("div", { className: "absolute bottom-6 md:bottom-8 left-0 w-full px-4 z-30 flex justify-center items-center gap-2" }, profiles.map((_, idx) => /* @__PURE__ */ import_react32.default.createElement(
3102
1481
  "button",
3103
1482
  {
3104
1483
  key: idx,
@@ -3111,10 +1490,10 @@ var ConsultantShowcase = ({
3111
1490
  };
3112
1491
 
3113
1492
  // src/components/ContentGridBlock.tsx
3114
- var import_react55 = __toESM(require("react"));
1493
+ var import_react34 = __toESM(require("react"));
3115
1494
  var import_image11 = __toESM(require("next/image"));
3116
- var import_react56 = require("@hugeicons/react");
3117
- var import_core_free_icons17 = require("@hugeicons/core-free-icons");
1495
+ var import_react35 = require("@hugeicons/react");
1496
+ var import_core_free_icons8 = require("@hugeicons/core-free-icons");
3118
1497
  var ContentGridBlock = ({
3119
1498
  header,
3120
1499
  leftCard,
@@ -3122,23 +1501,23 @@ var ContentGridBlock = ({
3122
1501
  middleBottomCard,
3123
1502
  rightCards
3124
1503
  }) => {
3125
- return /* @__PURE__ */ import_react55.default.createElement("section", { className: "w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react55.default.createElement("h2", { className: "text-3xl tracking-tight text-white leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react55.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "bg-neutral-900 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react55.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-400 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react55.default.createElement("div", null, /* @__PURE__ */ import_react55.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] text-neutral-400" }, leftCard.subtitle)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react55.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "border border-neutral-800 rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-[11px] text-neutral-500 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react55.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-black overflow-hidden relative z-10" }, /* @__PURE__ */ import_react55.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-sm text-neutral-400" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-900/50 border border-neutral-800 text-[13px] text-neutral-400" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-white" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[11px] text-neutral-500 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[14px] text-white leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "border border-neutral-800 rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react55.default.createElement("div", null, /* @__PURE__ */ import_react55.default.createElement("h4", { className: "text-[15px] text-white leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] text-neutral-500" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react55.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react55.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[16px] text-white leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react55.default.createElement("span", { className: "text-[11px] text-neutral-500 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react55.default.createElement("div", { key: idx, className: "relative w-full h-80 bg-neutral-900 text-white rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react55.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-white" }, /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-white/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react55.default.createElement("span", { className: "mb-4 text-[11px] text-white/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react55.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react55.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react55.default.createElement("p", { className: "text-[13px] text-white/60" }, card.subtitle)))))))));
1504
+ return /* @__PURE__ */ import_react34.default.createElement("section", { className: " w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "max-w-300 w-full px-4 md:px-8 flex flex-col gap-12" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col lg:flex-row justify-between items-start lg:items-end gap-6 w-full" }, /* @__PURE__ */ import_react34.default.createElement("h2", { className: "text-3xl tracking-tight text-black leading-[1.15] max-w-lg" }, header.titlePrefix, " ", /* @__PURE__ */ import_react34.default.createElement("span", { className: "gradient-text" }, header.highlightText))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col justify-end" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "bg-black rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[17px] text-white leading-snug mb-4" }, leftCard.mainText), leftCard.tag && /* @__PURE__ */ import_react34.default.createElement("span", { className: "mb-auto text-[11px] text-neutral-200 tracking-widest" }, leftCard.tag), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex items-center justify-between mt-8" }, /* @__PURE__ */ import_react34.default.createElement("div", null, /* @__PURE__ */ import_react34.default.createElement("h4", { className: "text-[15px] text-white" }, leftCard.title), /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] text-neutral-300" }, leftCard.subtitle)), /* @__PURE__ */ import_react34.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react34.default.createElement(import_image11.default, { src: leftCard.thumbnailSrc, alt: leftCard.title, fill: true, className: "object-cover" }))))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col relative h-75" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "absolute top-6 right-6 flex flex-col items-end gap-1" }, /* @__PURE__ */ import_react34.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-wide" }, middleTopCard.topRightLabel), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex -space-x-2" }, middleTopCard.topRightAvatars.map((src, i) => /* @__PURE__ */ import_react34.default.createElement("div", { key: i, className: "w-7 h-7 rounded-full border-2 border-white overflow-hidden relative z-10" }, /* @__PURE__ */ import_react34.default.createElement(import_image11.default, { src, alt: "Avatar", fill: true, className: "object-cover", sizes: "28px" })))), /* @__PURE__ */ import_react34.default.createElement("span", { className: "text-sm text-neutral-500" }, middleTopCard.topRightCount))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "grow flex flex-col justify-center items-center py-6" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "px-5 py-2 rounded-full bg-neutral-50/50 border border-neutral-100 text-[13px] text-neutral-600" }, middleTopCard.badgePrefix, " ", /* @__PURE__ */ import_react34.default.createElement("span", { className: " text-black" }, middleTopCard.badgeHighlight), middleTopCard.badgeSuffix)), /* @__PURE__ */ import_react34.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[11px] text-neutral-400 tracking-wide mb-1" }, middleTopCard.title), /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[14px] text-black leading-snug pr-4" }, middleTopCard.description))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "bg-white rounded-3xl p-8 flex flex-col h-80" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex justify-between items-start mb-6" }, /* @__PURE__ */ import_react34.default.createElement("div", null, /* @__PURE__ */ import_react34.default.createElement("h4", { className: "text-[15px] text-black leading-tight" }, middleBottomCard.title), /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] text-neutral-400" }, middleBottomCard.subtitle)), /* @__PURE__ */ import_react34.default.createElement("div", { className: "w-10 h-10 rounded-full overflow-hidden relative" }, /* @__PURE__ */ import_react34.default.createElement(import_image11.default, { src: middleBottomCard.thumbnailSrc, alt: middleBottomCard.title, fill: true, className: "object-cover" }))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "mt-auto" }, /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[16px] text-black leading-snug mb-4" }, middleBottomCard.mainText), middleBottomCard.tag && /* @__PURE__ */ import_react34.default.createElement("span", { className: "text-[11px] text-neutral-400 tracking-widest" }, middleBottomCard.tag)))), /* @__PURE__ */ import_react34.default.createElement("div", { className: "flex flex-col gap-6" }, rightCards.slice(0, 2).map((card, idx) => /* @__PURE__ */ import_react34.default.createElement("div", { key: idx, className: "relative w-full h-80 bg-[#ffffff] text-black rounded-3xl overflow-hidden group" }, /* @__PURE__ */ import_react34.default.createElement("div", { className: "absolute inset-0 z-20 pointer-events-none" }), /* @__PURE__ */ import_react34.default.createElement("div", { className: "absolute inset-0 z-30 p-6 flex flex-col justify-end text-black" }, /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[14px] leading-snug mb-3 pr-2 text-black/90" }, card.mainText), card.tag && /* @__PURE__ */ import_react34.default.createElement("span", { className: "mb-4 text-[11px] text-black/50 tracking-widest" }, card.tag), /* @__PURE__ */ import_react34.default.createElement("div", { className: "pt-3" }, /* @__PURE__ */ import_react34.default.createElement("h4", { className: "text-[15px] tracking-wide" }, card.title), /* @__PURE__ */ import_react34.default.createElement("p", { className: "text-[13px] text-black/60" }, card.subtitle)))))))));
3126
1505
  };
3127
1506
 
3128
1507
  // src/components/ManagedProjectsBlock.tsx
3129
- var import_react57 = __toESM(require("react"));
3130
- var import_link9 = __toESM(require("next/link"));
1508
+ var import_react36 = __toESM(require("react"));
1509
+ var import_link7 = __toESM(require("next/link"));
3131
1510
  var GridSection = ({
3132
1511
  children,
3133
1512
  isLast = false,
3134
1513
  className = "py-8 md:py-10"
3135
- }) => /* @__PURE__ */ import_react57.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
1514
+ }) => /* @__PURE__ */ import_react36.default.createElement("div", { className: `relative px-5 md:px-12 ${className} ${!isLast ? "" : ""}` }, children);
3136
1515
  var ManagedProjectsBlock = ({
3137
1516
  tagline,
3138
1517
  title,
3139
1518
  projects
3140
1519
  }) => {
3141
- return /* @__PURE__ */ import_react57.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative bg-black" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "relative bg-neutral-900 rounded-2xl w-full max-w-5xl mx-auto overflow-hidden shadow-2xl" }, /* @__PURE__ */ import_react57.default.createElement(
1520
+ return /* @__PURE__ */ import_react36.default.createElement("div", { className: "grow pt-28 pb-20 px-3 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-5xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react36.default.createElement(
3142
1521
  "div",
3143
1522
  {
3144
1523
  className: "absolute inset-0 pointer-events-none opacity-[0.03] z-0",
@@ -3147,17 +1526,15 @@ var ManagedProjectsBlock = ({
3147
1526
  backgroundRepeat: "repeat"
3148
1527
  }
3149
1528
  }
3150
- ), /* @__PURE__ */ import_react57.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react57.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block" }, tagline), /* @__PURE__ */ import_react57.default.createElement("h1", { className: "text-3xl mt-4 text-white tracking-tight text-left" }, title)), projects.map((project, index) => {
1529
+ ), /* @__PURE__ */ import_react36.default.createElement("div", { className: "relative z-10" }, /* @__PURE__ */ import_react36.default.createElement(GridSection, null, tagline && /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[11px] tracking-[0.4em] text-neutral-500 text-left block " }, tagline), /* @__PURE__ */ import_react36.default.createElement("h1", { className: " text-3xl mt-4 text-black tracking-tight text-left" }, title)), projects.map((project, index) => {
3151
1530
  const isLast = index === projects.length - 1;
3152
- const projectContent = /* @__PURE__ */ import_react57.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react57.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react57.default.createElement("h2", { className: "text-[16px] text-white transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[11px] text-neutral-500 opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 group-hover:text-white transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react57.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-white text-black" : "bg-neutral-800 text-neutral-400 group- group-hover:text-white"}` }, project.status)), /* @__PURE__ */ import_react57.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0" }, project.date)), /* @__PURE__ */ import_react57.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-400 max-w-4xl text-left transition-colors group-hover:text-neutral-300" }, project.description));
3153
- return /* @__PURE__ */ import_react57.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react57.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react57.default.createElement(import_link9.default, { href: project.link, className: "block outline-none" }, projectContent));
1531
+ const projectContent = /* @__PURE__ */ import_react36.default.createElement("div", { className: "group block w-full" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "flex flex-col md:flex-row md:items-center justify-between gap-3 md:gap-4 mb-4 md:mb-5" }, /* @__PURE__ */ import_react36.default.createElement("div", { className: "flex items-center gap-3 md:gap-4" }, /* @__PURE__ */ import_react36.default.createElement("h2", { className: " text-[16px] text-black transition-all flex items-center gap-2" }, project.title, /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[11px] opacity-0 -translate-x-2 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-300" }, project.isExternal ? "\u2197" : "\u2192")), /* @__PURE__ */ import_react36.default.createElement("span", { className: `text-[9px] px-2.5 py-1 rounded-full tracking-[0.15em] transition-colors ${project.status.toLowerCase() === "production" ? "bg-black text-white" : "bg-neutral-100 text-neutral-500 group-hover:bg-neutral-100 group-hover:text-black"}` }, project.status)), /* @__PURE__ */ import_react36.default.createElement("span", { className: "text-[11px] tracking-[0.2em] text-neutral-500 shrink-0 " }, project.date)), /* @__PURE__ */ import_react36.default.createElement("p", { className: "text-[13px] leading-[1.8] text-neutral-600 max-w-4xl text-left transition-colors group-hover:text-black" }, project.description));
1532
+ return /* @__PURE__ */ import_react36.default.createElement(GridSection, { key: project.id || index, isLast, className: isLast ? "py-8 md:py-10 pb-12 md:pb-14" : "py-8 md:py-10" }, project.isExternal ? /* @__PURE__ */ import_react36.default.createElement("a", { href: project.link, target: "_blank", rel: "noopener noreferrer", className: "block outline-none" }, projectContent) : /* @__PURE__ */ import_react36.default.createElement(import_link7.default, { href: project.link, className: "block outline-none" }, projectContent));
3154
1533
  }))));
3155
1534
  };
3156
1535
  // Annotate the CommonJS export names for ESM import in node:
3157
1536
  0 && (module.exports = {
3158
1537
  AppBento2,
3159
- Banner,
3160
- CardLogo,
3161
1538
  ConsultantShowcase,
3162
1539
  ContentGridBlock,
3163
1540
  Faq,
@@ -3177,19 +1554,9 @@ var ManagedProjectsBlock = ({
3177
1554
  MedicalFeatureStatsBlock,
3178
1555
  NumberInput,
3179
1556
  PageSpinner,
3180
- PipleAuth,
3181
1557
  PlatformFeatures,
3182
1558
  PortfolioHero,
3183
- Stagger,
3184
1559
  TextInput,
3185
1560
  ThreeDActionButton,
3186
- ThreeDButton,
3187
- UniversalErrorView,
3188
- UniversalHomeView,
3189
- UniversalOrganizationPage,
3190
- UniversalProfileSettings,
3191
- UniversalSidebar,
3192
- UniversalTransactionPage,
3193
- UniversalWalletPage,
3194
- ZairusAuth
1561
+ ThreeDButton
3195
1562
  });