@mdxui/named 6.4.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  // src/view/view.tsx
2
- import { DialectShell, NeoChrome } from "@mdxui/dialect";
2
+ import { DialectShell } from "@mdxui/dialect";
3
3
 
4
- // src/components/hero/hero.tsx
4
+ // src/templates/studio/components/hero/hero.tsx
5
5
  import Image from "next/image";
6
6
  import { HiChevronRight } from "react-icons/hi";
7
7
 
@@ -73,6 +73,26 @@ import { twMerge } from "tailwind-merge";
73
73
  function cn(...inputs) {
74
74
  return twMerge(clsx(inputs));
75
75
  }
76
+ var isRenderableSrc = (s) => /^(https?:)?\/\//i.test(s.trim()) || /^data:image\//i.test(s.trim());
77
+ var BRAND_LABELS = {
78
+ github: "GitHub",
79
+ gitlab: "GitLab",
80
+ linkedin: "LinkedIn",
81
+ youtube: "YouTube",
82
+ whatsapp: "WhatsApp",
83
+ hubspot: "HubSpot",
84
+ quickbooks: "QuickBooks",
85
+ typescript: "TypeScript",
86
+ javascript: "JavaScript",
87
+ postgresql: "PostgreSQL",
88
+ mongodb: "MongoDB",
89
+ graphql: "GraphQL",
90
+ openai: "OpenAI"
91
+ };
92
+ var brandLabel = (s) => {
93
+ const t = s.trim();
94
+ return BRAND_LABELS[t.toLowerCase()] ?? t.charAt(0).toUpperCase() + t.slice(1);
95
+ };
76
96
 
77
97
  // src/shared/marquee/marquee.tsx
78
98
  import { jsx as jsx2 } from "react/jsx-runtime";
@@ -114,29 +134,41 @@ function Marquee({
114
134
  );
115
135
  }
116
136
 
117
- // src/components/hero/hero.tsx
118
- import { Button } from "@mdxui/primitives";
119
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
120
- var isRenderableSrc = (s) => /^(https?:)?\/\//i.test(s.trim()) || /^data:image\//i.test(s.trim());
121
- var BRAND_LABELS = {
122
- github: "GitHub",
123
- gitlab: "GitLab",
124
- linkedin: "LinkedIn",
125
- youtube: "YouTube",
126
- whatsapp: "WhatsApp",
127
- hubspot: "HubSpot",
128
- quickbooks: "QuickBooks",
129
- typescript: "TypeScript",
130
- javascript: "JavaScript",
131
- postgresql: "PostgreSQL",
132
- mongodb: "MongoDB",
133
- graphql: "GraphQL",
134
- openai: "OpenAI"
137
+ // src/templates/studio/ui/button/button.tsx
138
+ import * as React from "react";
139
+ import { jsx as jsx3 } from "react/jsx-runtime";
140
+ var baseClasses = "inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer";
141
+ var variantClasses = {
142
+ default: "btn-gradient-dark text-(--color-btn-primary-fg) shadow-md hover:shadow-lg rounded-full",
143
+ secondary: "bg-(--color-surface-raised) text-(--color-fg) border border-(--color-border) shadow-sm hover:shadow-md rounded-full",
144
+ outline: "border border-(--color-border) bg-transparent text-(--color-fg) hover:bg-(--color-hover) rounded-full",
145
+ ghost: "text-(--color-fg) hover:bg-(--color-hover) rounded-full",
146
+ link: "text-(--color-fg) underline-offset-4 hover:underline",
147
+ accent: "bg-(--color-accent-strong) text-(--color-accent-fg) shadow-md hover:opacity-90 hover:shadow-lg rounded-full"
135
148
  };
136
- var brandLabel = (s) => {
137
- const t = s.trim();
138
- return BRAND_LABELS[t.toLowerCase()] ?? t.charAt(0).toUpperCase() + t.slice(1);
149
+ var sizeClasses = {
150
+ default: "h-12 px-6 py-3 text-base",
151
+ sm: "h-10 px-4 py-2 text-sm",
152
+ lg: "h-14 px-8 py-4 text-lg",
153
+ icon: "h-12 w-12"
139
154
  };
155
+ var Button = React.forwardRef(
156
+ ({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
157
+ const classes = cn(baseClasses, variantClasses[variant], sizeClasses[size], className);
158
+ if (asChild && React.isValidElement(children)) {
159
+ const child = children;
160
+ return React.cloneElement(child, {
161
+ ...props,
162
+ className: cn(classes, child.props.className)
163
+ });
164
+ }
165
+ return /* @__PURE__ */ jsx3("button", { ref, className: classes, ...props, children });
166
+ }
167
+ );
168
+ Button.displayName = "Button";
169
+
170
+ // src/templates/studio/components/hero/hero.tsx
171
+ import { jsx as jsx4, jsxs } from "react/jsx-runtime";
140
172
  function Hero({
141
173
  badgeEmoji = "",
142
174
  badgeText = "Meet Priya",
@@ -162,10 +194,10 @@ function Hero({
162
194
  className
163
195
  }) {
164
196
  const hasHeroImage = !!rightImageSrc && isRenderableSrc(rightImageSrc);
165
- return /* @__PURE__ */ jsx3("section", { className: cn("relative py-12 md:py-16 px-6 lg:px-12 bg-background", className), children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto p-0 sm:p-16 rounded-none sm:rounded-3xl md:[background:linear-gradient(180deg,var(--card)_0%,transparent_83.55%)]", children: [
197
+ return /* @__PURE__ */ jsx4("section", { className: cn("relative py-12 md:py-16 px-6 lg:px-12 bg-background", className), children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto p-0 sm:p-16 rounded-none sm:rounded-3xl md:[background:linear-gradient(180deg,var(--card)_0%,transparent_83.55%)]", children: [
166
198
  /* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:gap-16 items-start mb-16 lg:mb-20", hasHeroImage && "lg:grid-cols-2"), children: [
167
199
  /* @__PURE__ */ jsxs("div", { className: "space-y-6 lg:pt-8", children: [
168
- /* @__PURE__ */ jsx3(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx3("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
200
+ /* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
169
201
  "a",
170
202
  {
171
203
  href: badgeHref,
@@ -173,19 +205,19 @@ function Hero({
173
205
  rel: "noopener noreferrer",
174
206
  className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full transition-colors border border-border bg-card",
175
207
  children: [
176
- /* @__PURE__ */ jsx3("span", { className: "text-base", children: badgeEmoji }),
177
- /* @__PURE__ */ jsx3("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
208
+ /* @__PURE__ */ jsx4("span", { className: "text-base", children: badgeEmoji }),
209
+ /* @__PURE__ */ jsx4("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
178
210
  ]
179
211
  }
180
212
  ) }) }),
181
- /* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx3("h1", { className: "font-halant font-normal text-[clamp(56px,6vw,72px)] leading-tight tracking-tight text-foreground", children: heading }) }),
182
- /* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx3("p", { className: "text-lg leading-relaxed max-w-lg", children: description }) }),
183
- /* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx3("div", { className: "flex flex-col sm:flex-row gap-3 pt-4", children: /* @__PURE__ */ jsx3(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
213
+ /* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx4("h1", { className: "font-halant font-normal text-[clamp(56px,6vw,72px)] leading-tight tracking-tight text-foreground", children: heading }) }),
214
+ /* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx4("p", { className: "text-lg leading-relaxed max-w-lg", children: description }) }),
215
+ /* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx4("div", { className: "flex flex-col sm:flex-row gap-3 pt-4", children: /* @__PURE__ */ jsx4(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
184
216
  ctaText,
185
- /* @__PURE__ */ jsx3(HiChevronRight, { className: "w-4 h-4" })
217
+ /* @__PURE__ */ jsx4(HiChevronRight, { className: "w-4 h-4" })
186
218
  ] }) }) }) })
187
219
  ] }),
188
- hasHeroImage && /* @__PURE__ */ jsx3(ScrollReveal, { direction: "right", delay: 0.2, children: /* @__PURE__ */ jsx3("div", { className: "relative flex justify-center lg:justify-end", children: /* @__PURE__ */ jsx3("div", { className: "relative w-full max-w-lg", children: /* @__PURE__ */ jsx3("div", { className: "relative w-full aspect-square", children: /* @__PURE__ */ jsx3(
220
+ hasHeroImage && /* @__PURE__ */ jsx4(ScrollReveal, { direction: "right", delay: 0.2, children: /* @__PURE__ */ jsx4("div", { className: "relative flex justify-center lg:justify-end", children: /* @__PURE__ */ jsx4("div", { className: "relative w-full max-w-lg", children: /* @__PURE__ */ jsx4("div", { className: "relative w-full aspect-square", children: /* @__PURE__ */ jsx4(
189
221
  Image,
190
222
  {
191
223
  src: rightImageSrc,
@@ -199,24 +231,24 @@ function Hero({
199
231
  ) }) }) }) })
200
232
  ] }),
201
233
  /* @__PURE__ */ jsxs(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: [
202
- /* @__PURE__ */ jsx3("div", { className: "mt-12", children: /* @__PURE__ */ jsx3("p", { className: "text-base text-muted-foreground text-center", children: marqueeTitle }) }),
234
+ /* @__PURE__ */ jsx4("div", { className: "mt-12", children: /* @__PURE__ */ jsx4("p", { className: "text-base text-muted-foreground text-center", children: marqueeTitle }) }),
203
235
  /* @__PURE__ */ jsxs("div", { className: "relative mt-4 sm:mt-6", children: [
204
- /* @__PURE__ */ jsx3(
236
+ /* @__PURE__ */ jsx4(
205
237
  "div",
206
238
  {
207
239
  className: "pointer-events-none absolute inset-y-0 left-0 w-20 sm:w-28 z-10",
208
240
  style: { background: "linear-gradient(to right, var(--background), transparent)" }
209
241
  }
210
242
  ),
211
- /* @__PURE__ */ jsx3(
243
+ /* @__PURE__ */ jsx4(
212
244
  "div",
213
245
  {
214
246
  className: "pointer-events-none absolute inset-y-0 right-0 w-20 sm:w-28 z-10",
215
247
  style: { background: "linear-gradient(to left, var(--background), transparent)" }
216
248
  }
217
249
  ),
218
- /* @__PURE__ */ jsx3(Marquee, { className: "relative z-0 py-2 [--gap:1.25rem] sm:[--gap:3rem]", children: marqueeImages.map(
219
- (src, i) => isRenderableSrc(src) ? /* @__PURE__ */ jsx3(
250
+ /* @__PURE__ */ jsx4(Marquee, { className: "relative z-0 py-2 [--gap:1.25rem] sm:[--gap:3rem]", children: marqueeImages.map(
251
+ (src, i) => isRenderableSrc(src) ? /* @__PURE__ */ jsx4(
220
252
  "img",
221
253
  {
222
254
  src,
@@ -224,7 +256,7 @@ function Hero({
224
256
  className: "h-16 w-16 rounded-xl bg-card p-2 object-contain"
225
257
  },
226
258
  `${src}-${i}`
227
- ) : /* @__PURE__ */ jsx3(
259
+ ) : /* @__PURE__ */ jsx4(
228
260
  "span",
229
261
  {
230
262
  className: "flex h-16 items-center whitespace-nowrap rounded-xl bg-card px-4 text-sm font-semibold tracking-tight text-foreground/70",
@@ -238,61 +270,43 @@ function Hero({
238
270
  ] }) });
239
271
  }
240
272
 
241
- // src/components/features/features.tsx
273
+ // src/templates/studio/components/features/features.tsx
242
274
  import { CheckCircle } from "lucide-react";
243
275
 
244
276
  // src/shared/code-window/code-window.tsx
245
- import { jsx as jsx4 } from "react/jsx-runtime";
246
- function CodeWindow({ code, className }) {
247
- const highlightCode = (code2) => {
248
- const lines = code2.split("\n");
249
- const result = [];
250
- let prevWasComment = false;
251
- let prevWasCode = false;
252
- for (let i = 0; i < lines.length; i++) {
253
- const line = lines[i];
254
- const isComment = line.trim().startsWith("//");
255
- const isEmpty = line.trim() === "";
256
- const isCode = !isComment && !isEmpty;
257
- if (isComment && prevWasCode) {
258
- result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-before-${i}`));
259
- }
260
- if (prevWasComment && isCode) {
261
- result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-after-${i}`));
262
- }
263
- if (isEmpty) {
264
- result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, i));
265
- prevWasComment = false;
266
- prevWasCode = false;
267
- continue;
268
- }
269
- if (isComment) {
270
- result.push(
271
- /* @__PURE__ */ jsx4("div", { className: "text-[#7d8590]", children: line }, i)
272
- );
273
- prevWasComment = true;
274
- prevWasCode = false;
275
- continue;
276
- }
277
- let highlighted = line;
278
- highlighted = highlighted.replace(
279
- /\$\.(\w+)\.(\w+)/g,
280
- '<span class="text-[#79c0ff]">$</span>.<span class="text-[#d2a8ff]">$1</span>.<span class="text-[#ffa657]">$2</span>'
281
- );
282
- highlighted = highlighted.replace(/(\w+):/g, '<span class="text-[#79c0ff]">$1</span>:');
283
- highlighted = highlighted.replace(/'([^']*)'/g, `<span class="text-[#a5d6ff]">'$1'</span>`);
284
- highlighted = highlighted.replace(/\b(\d+)\b/g, '<span class="text-[#79c0ff]">$1</span>');
285
- result.push(/* @__PURE__ */ jsx4("div", { dangerouslySetInnerHTML: { __html: highlighted } }, i));
286
- prevWasComment = false;
287
- prevWasCode = true;
288
- }
289
- return result;
290
- };
291
- return /* @__PURE__ */ jsx4("div", { className: `w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ""}`, children: /* @__PURE__ */ jsx4("div", { className: "flex-1 overflow-auto p-6 lg:p-8", children: /* @__PURE__ */ jsx4("pre", { className: "text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]", children: highlightCode(code) }) }) });
277
+ import { useEffect, useState } from "react";
278
+ import { jsx as jsx5 } from "react/jsx-runtime";
279
+ function CodeWindow({
280
+ code,
281
+ language = "typescript",
282
+ themes = "github-dark-default",
283
+ className
284
+ }) {
285
+ const [html, setHtml] = useState(null);
286
+ const themesKey = typeof themes === "string" ? themes : `${themes.light}/${themes.dark}`;
287
+ useEffect(() => {
288
+ let alive = true;
289
+ import("shiki").then(
290
+ ({ codeToHtml }) => codeToHtml(
291
+ code,
292
+ typeof themes === "string" ? { lang: language, theme: themes } : { lang: language, themes, defaultColor: "light" }
293
+ )
294
+ ).then((out) => {
295
+ if (alive) setHtml(out);
296
+ }).catch(() => {
297
+ });
298
+ return () => {
299
+ alive = false;
300
+ };
301
+ }, [code, language, themesKey]);
302
+ return /* @__PURE__ */ jsx5("div", { className: cn("w-full h-full overflow-auto font-mono", className), children: html ? (
303
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: shiki output; input is escaped by shiki
304
+ /* @__PURE__ */ jsx5("div", { dangerouslySetInnerHTML: { __html: html } })
305
+ ) : /* @__PURE__ */ jsx5("pre", { className: "m-0 whitespace-pre", children: /* @__PURE__ */ jsx5("code", { children: code }) }) });
292
306
  }
293
307
 
294
- // src/components/features/features.tsx
295
- import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
308
+ // src/templates/studio/components/features/features.tsx
309
+ import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
296
310
  var defaultFeatures = [
297
311
  {
298
312
  title: "Automatic Issue Triage",
@@ -365,30 +379,37 @@ $.Priya.statusReport({
365
379
  }
366
380
  ];
367
381
  function Features({ heading = "How It Works", description = "Priya handles the repetitive work so you can focus on what matters. Here's how she automates your entire product workflow.", features = defaultFeatures, className }) {
368
- return /* @__PURE__ */ jsx5("section", { id: "features", className: cn("flex justify-center items-center pb-0 md:pb-10 bg-background", className), children: /* @__PURE__ */ jsxs2("div", { className: "features-gradient flex flex-col items-center w-full relative overflow-visible gap-16 h-min max-w-[1400px] py-10 sm:py-20", style: { borderRadius: "var(--radius-section, 36px)" }, children: [
369
- /* @__PURE__ */ jsx5(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "text-center w-full px-4 md:px-6 space-y-4", children: [
370
- /* @__PURE__ */ jsx5("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: heading }),
371
- /* @__PURE__ */ jsx5("p", { className: "text-base md:text-lg text-muted-foreground max-w-2xl mx-auto", children: description })
382
+ return /* @__PURE__ */ jsx6("section", { id: "features", className: cn("flex justify-center items-center pb-0 md:pb-10 bg-background", className), children: /* @__PURE__ */ jsxs2("div", { className: "features-gradient flex flex-col items-center w-full relative overflow-visible gap-16 h-min max-w-[1400px] py-10 sm:py-20", style: { borderRadius: "var(--radius-section, 36px)" }, children: [
383
+ /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "text-center w-full px-4 md:px-6 space-y-4", children: [
384
+ /* @__PURE__ */ jsx6("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: heading }),
385
+ /* @__PURE__ */ jsx6("p", { className: "text-base md:text-lg text-muted-foreground max-w-2xl mx-auto", children: description })
372
386
  ] }) }),
373
- /* @__PURE__ */ jsx5("div", { className: "w-full px-4 lg:px-18 space-y-10", children: features.map((feature, index) => /* @__PURE__ */ jsx5(ScrollReveal, { direction: "up", delay: index * 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "grid md:grid-cols-2 overflow-hidden bg-card w-full rounded-3xl feature-card-shadow opacity-100 border border-border", children: [
387
+ /* @__PURE__ */ jsx6("div", { className: "w-full px-4 lg:px-18 space-y-10", children: features.map((feature, index) => /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: index * 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "grid md:grid-cols-2 overflow-hidden bg-card w-full rounded-3xl feature-card-shadow opacity-100 border border-border", children: [
374
388
  /* @__PURE__ */ jsxs2("div", { className: "flex flex-col px-4 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20", children: [
375
- /* @__PURE__ */ jsx5("div", { className: "mb-4", children: /* @__PURE__ */ jsx5("span", { className: "inline-flex size-10 items-center justify-center rounded-lg font-mono text-sm font-medium bg-card dark:bg-muted border border-border dark:border-border text-foreground", children: feature.badge }) }),
376
- /* @__PURE__ */ jsx5("h3", { className: "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl text-foreground", children: feature.title }),
377
- /* @__PURE__ */ jsx5("div", { className: "mb-8 text-sm sm:mb-10 md:text-base text-muted-foreground", children: feature.description }),
378
- /* @__PURE__ */ jsx5("ul", { className: "space-y-2 sm:space-y-3", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs2("li", { className: "flex gap-x-3 items-start", children: [
379
- /* @__PURE__ */ jsx5(CheckCircle, { className: "mt-1 size-4 shrink-0 text-primary" }),
380
- /* @__PURE__ */ jsx5("p", { className: "text-sm md:text-base text-foreground", children: item.text })
389
+ /* @__PURE__ */ jsx6("div", { className: "mb-4", children: /* @__PURE__ */ jsx6("span", { className: "inline-flex size-10 items-center justify-center rounded-lg font-mono text-sm font-medium bg-card dark:bg-muted border border-border dark:border-border text-foreground", children: feature.badge }) }),
390
+ /* @__PURE__ */ jsx6("h3", { className: "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl text-foreground", children: feature.title }),
391
+ /* @__PURE__ */ jsx6("div", { className: "mb-8 text-sm sm:mb-10 md:text-base text-muted-foreground", children: feature.description }),
392
+ /* @__PURE__ */ jsx6("ul", { className: "space-y-2 sm:space-y-3", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs2("li", { className: "flex gap-x-3 items-start", children: [
393
+ /* @__PURE__ */ jsx6(CheckCircle, { className: "mt-1 size-4 shrink-0 text-primary" }),
394
+ /* @__PURE__ */ jsx6("p", { className: "text-sm md:text-base text-foreground", children: item.text })
381
395
  ] }, itemIndex)) })
382
396
  ] }),
383
- /* @__PURE__ */ jsx5("div", { className: "relative order-last md:order-last h-96 md:h-[500px] p-4 md:p-8 lg:p-10", children: /* @__PURE__ */ jsx5(CodeWindow, { code: feature.code }) })
397
+ /* @__PURE__ */ jsx6("div", { className: "relative order-last md:order-last h-96 md:h-[500px] p-4 md:p-8 lg:p-10", children: /* @__PURE__ */ jsx6(
398
+ CodeWindow,
399
+ {
400
+ code: feature.code,
401
+ language: feature.language,
402
+ themes: "github-dark-default",
403
+ className: "bg-[#0d1117] rounded-lg p-6 lg:p-8 text-sm leading-relaxed text-[#e6edf3]"
404
+ }
405
+ ) })
384
406
  ] }) }, index)) })
385
407
  ] }) });
386
408
  }
387
409
 
388
- // src/components/pricing/pricing.tsx
410
+ // src/templates/studio/components/pricing/pricing.tsx
389
411
  import { Check } from "lucide-react";
390
- import { Button as Button2 } from "@mdxui/primitives";
391
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
412
+ import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
392
413
  var defaultFeatures2 = [
393
414
  { text: "Automated backups" },
394
415
  { text: "24/7 support" },
@@ -414,41 +435,40 @@ function Pricing({
414
435
  securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
415
436
  className
416
437
  }) {
417
- return /* @__PURE__ */ jsx6("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs3("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
418
- /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs3("div", { className: "text-center my-16 sm:my-12", children: [
419
- /* @__PURE__ */ jsx6("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
420
- /* @__PURE__ */ jsx6("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
438
+ return /* @__PURE__ */ jsx7("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs3("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
439
+ /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs3("div", { className: "text-center my-16 sm:my-12", children: [
440
+ /* @__PURE__ */ jsx7("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
441
+ /* @__PURE__ */ jsx7("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
421
442
  ] }) }),
422
- /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs3("div", { className: "bg-card mx-auto flex w-full md:max-w-md lg:max-w-3xl flex-col rounded-3xl border border-border feature-card-shadow p-6 md:p-8 px-6", children: [
443
+ /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs3("div", { className: "bg-card mx-auto flex w-full md:max-w-md lg:max-w-3xl flex-col rounded-3xl border border-border feature-card-shadow p-6 md:p-8 px-6", children: [
423
444
  /* @__PURE__ */ jsxs3("div", { className: "text-center", children: [
424
445
  /* @__PURE__ */ jsxs3("div", { className: "flex justify-start sm:justify-center items-baseline", children: [
425
- /* @__PURE__ */ jsx6("span", { className: "text-3xl font-semibold text-foreground", children: price }),
426
- /* @__PURE__ */ jsx6("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
446
+ /* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: price }),
447
+ /* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
427
448
  ] }),
428
- trialText && /* @__PURE__ */ jsx6("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
429
- /* @__PURE__ */ jsx6(Button2, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx6("a", { href: ctaHref, children: ctaText }) })
449
+ trialText && /* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
450
+ /* @__PURE__ */ jsx7(Button, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx7("a", { href: ctaHref, children: ctaText }) })
430
451
  ] }),
431
452
  /* @__PURE__ */ jsxs3("div", { className: "mt-8", children: [
432
- /* @__PURE__ */ jsx6("p", { className: "text-left sm:text-center text-lg font-semibold text-foreground mb-4", children: featuresHeading }),
433
- /* @__PURE__ */ jsx6("ul", { className: "grid gap-y-3 gap-x-6 md:grid-cols-2 lg:grid-cols-3 ", children: features.map((feature, index) => /* @__PURE__ */ jsxs3("li", { className: "flex items-start text-left", children: [
434
- /* @__PURE__ */ jsx6(Check, { className: "text-primary mr-2 size-4 shrink-0" }),
435
- /* @__PURE__ */ jsx6("span", { className: "text-foreground text-sm", children: feature.text })
453
+ /* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-lg font-semibold text-foreground mb-4", children: featuresHeading }),
454
+ /* @__PURE__ */ jsx7("ul", { className: "grid gap-y-3 gap-x-6 md:grid-cols-2 lg:grid-cols-3 ", children: features.map((feature, index) => /* @__PURE__ */ jsxs3("li", { className: "flex items-start text-left", children: [
455
+ /* @__PURE__ */ jsx7(Check, { className: "text-primary mr-2 size-4 shrink-0" }),
456
+ /* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
436
457
  ] }, index)) })
437
458
  ] })
438
459
  ] }) }),
439
- securityNote && /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx6("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
440
- /* @__PURE__ */ jsx6("strong", { children: "Your code stays private." }),
460
+ securityNote && /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx7("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
461
+ /* @__PURE__ */ jsx7("strong", { children: "Your code stays private." }),
441
462
  " ",
442
463
  securityNote
443
464
  ] }) }) })
444
465
  ] }) });
445
466
  }
446
467
 
447
- // src/components/pricing/pricing-tiers.tsx
468
+ // src/templates/studio/components/pricing/pricing-tiers.tsx
448
469
  import { Check as Check2 } from "lucide-react";
449
470
  import Image2 from "next/image";
450
- import { Button as Button3 } from "@mdxui/primitives";
451
- import { Fragment, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
471
+ import { Fragment, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
452
472
  var defaultTiers = [
453
473
  {
454
474
  title: "Business",
@@ -490,59 +510,58 @@ function PricingTiers({
490
510
  securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
491
511
  className
492
512
  }) {
493
- return /* @__PURE__ */ jsx7("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs4("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
494
- /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs4("div", { className: "text-center my-16 sm:my-12", children: [
495
- /* @__PURE__ */ jsx7("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }),
496
- /* @__PURE__ */ jsx7("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
513
+ return /* @__PURE__ */ jsx8("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs4("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
514
+ /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs4("div", { className: "text-center my-16 sm:my-12", children: [
515
+ /* @__PURE__ */ jsx8("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }),
516
+ /* @__PURE__ */ jsx8("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
497
517
  ] }) }),
498
- /* @__PURE__ */ jsx7("ul", { className: "grid gap-6 lg:grid-cols-3 lg:items-stretch", children: tiers.map((tier, index) => /* @__PURE__ */ jsx7("li", { className: tier.featured ? "lg:col-span-2 flex" : "lg:col-span-1 flex", children: /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.2 + index * 0.1, className: "w-full", children: /* @__PURE__ */ jsx7(
518
+ /* @__PURE__ */ jsx8("ul", { className: "grid gap-6 lg:grid-cols-3 lg:items-stretch", children: tiers.map((tier, index) => /* @__PURE__ */ jsx8("li", { className: tier.featured ? "lg:col-span-2 flex" : "lg:col-span-1 flex", children: /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.2 + index * 0.1, className: "w-full", children: /* @__PURE__ */ jsx8(
499
519
  "div",
500
520
  {
501
521
  className: tier.featured ? "bg-card flex w-full h-full flex-col-reverse rounded-3xl border border-border feature-card-shadow md:flex-row" : "bg-card w-full h-full rounded-3xl border border-border feature-card-shadow p-6 md:p-8",
502
522
  children: tier.featured ? /* @__PURE__ */ jsxs4(Fragment, { children: [
503
- tier.image && /* @__PURE__ */ jsx7("div", { className: "hidden xl:block xl:w-1/2 pl-6 md:pl-8 py-6 md:py-8", children: /* @__PURE__ */ jsx7("div", { className: "h-full rounded-lg overflow-hidden relative min-h-96", children: /* @__PURE__ */ jsx7(Image2, { src: tier.image, alt: tier.imageAlt || tier.title, fill: true, className: "object-cover", sizes: "(max-width: 1280px) 0vw, 50vw" }) }) }),
504
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-col p-6 md:p-8 xl:w-1/2", children: [
523
+ tier.image && isRenderableSrc(tier.image) && /* @__PURE__ */ jsx8("div", { className: "hidden xl:block xl:w-1/2 pl-6 md:pl-8 py-6 md:py-8", children: /* @__PURE__ */ jsx8("div", { className: "h-full rounded-lg overflow-hidden relative min-h-96", children: /* @__PURE__ */ jsx8(Image2, { src: tier.image, alt: tier.imageAlt || tier.title, fill: true, className: "object-cover", sizes: "(max-width: 1280px) 0vw, 50vw" }) }) }),
524
+ /* @__PURE__ */ jsxs4("div", { className: cn("flex flex-col p-6 md:p-8", tier.image && isRenderableSrc(tier.image) && "xl:w-1/2"), children: [
505
525
  /* @__PURE__ */ jsxs4("div", { className: "flex-1", children: [
506
- /* @__PURE__ */ jsx7("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
507
- /* @__PURE__ */ jsx7("p", { className: "text-muted-foreground mt-3", children: tier.description }),
526
+ /* @__PURE__ */ jsx8("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
527
+ /* @__PURE__ */ jsx8("p", { className: "text-muted-foreground mt-3", children: tier.description }),
508
528
  /* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
509
- /* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
510
- /* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
529
+ /* @__PURE__ */ jsx8("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
530
+ /* @__PURE__ */ jsx8("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
511
531
  ] }),
512
- /* @__PURE__ */ jsx7(Button3, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx7("a", { href: tier.ctaHref || "#", children: tier.ctaText }) })
532
+ /* @__PURE__ */ jsx8(Button, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx8("a", { href: tier.ctaHref || "#", children: tier.ctaText }) })
513
533
  ] }),
514
- /* @__PURE__ */ jsx7("div", { className: "mt-8", children: /* @__PURE__ */ jsx7("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
515
- /* @__PURE__ */ jsx7(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
516
- /* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
534
+ /* @__PURE__ */ jsx8("div", { className: "mt-8", children: /* @__PURE__ */ jsx8("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
535
+ /* @__PURE__ */ jsx8(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
536
+ /* @__PURE__ */ jsx8("span", { className: "text-foreground text-sm", children: feature.text })
517
537
  ] }, featureIndex)) }) })
518
538
  ] })
519
- ] }) : /* @__PURE__ */ jsx7("div", { className: "flex h-full flex-col", children: /* @__PURE__ */ jsxs4("div", { children: [
520
- /* @__PURE__ */ jsx7("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
521
- /* @__PURE__ */ jsx7("p", { className: "text-muted-foreground mt-3", children: tier.description }),
539
+ ] }) : /* @__PURE__ */ jsx8("div", { className: "flex h-full flex-col", children: /* @__PURE__ */ jsxs4("div", { children: [
540
+ /* @__PURE__ */ jsx8("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
541
+ /* @__PURE__ */ jsx8("p", { className: "text-muted-foreground mt-3", children: tier.description }),
522
542
  /* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
523
- /* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
524
- /* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
543
+ /* @__PURE__ */ jsx8("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
544
+ /* @__PURE__ */ jsx8("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
525
545
  ] }),
526
- /* @__PURE__ */ jsx7(Button3, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx7("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }),
527
- /* @__PURE__ */ jsx7("div", { className: "mt-8", children: /* @__PURE__ */ jsx7("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
528
- /* @__PURE__ */ jsx7(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
529
- /* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
546
+ /* @__PURE__ */ jsx8(Button, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx8("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }),
547
+ /* @__PURE__ */ jsx8("div", { className: "mt-8", children: /* @__PURE__ */ jsx8("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
548
+ /* @__PURE__ */ jsx8(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
549
+ /* @__PURE__ */ jsx8("span", { className: "text-foreground text-sm", children: feature.text })
530
550
  ] }, featureIndex)) }) })
531
551
  ] }) })
532
552
  }
533
553
  ) }) }, index)) }),
534
- securityNote && /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.4, children: /* @__PURE__ */ jsx7("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs4("p", { className: "text-sm text-muted-foreground", children: [
535
- /* @__PURE__ */ jsx7("strong", { children: "Your code stays private." }),
554
+ securityNote && /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.4, children: /* @__PURE__ */ jsx8("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs4("p", { className: "text-sm text-muted-foreground", children: [
555
+ /* @__PURE__ */ jsx8("strong", { children: "Your code stays private." }),
536
556
  " ",
537
557
  securityNote
538
558
  ] }) }) })
539
559
  ] }) });
540
560
  }
541
561
 
542
- // src/components/cta/cta.tsx
562
+ // src/templates/studio/components/cta/cta.tsx
543
563
  import { HiArrowRight } from "react-icons/hi";
544
- import { Button as Button4 } from "@mdxui/primitives";
545
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
564
+ import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
546
565
  var defaultButtons = [
547
566
  {
548
567
  text: "Get Started",
@@ -553,19 +572,19 @@ var defaultButtons = [
553
572
  ];
554
573
  function CTA({ heading = "Ready to Save 15 Hours Per Week?", subheading = "Setup with Github \u2013 takes 5 minutes.", buttons = defaultButtons, backgroundColor: _backgroundColor, className }) {
555
574
  const bgClass = "bg-card";
556
- return /* @__PURE__ */ jsx8("section", { className: cn(`py-20 md:py-32 px-4 md:px-6 ${bgClass}`, className), children: /* @__PURE__ */ jsx8("div", { className: "max-w-3xl mx-auto text-center", children: /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs5("div", { className: "space-y-6", children: [
557
- /* @__PURE__ */ jsx8("h2", { className: "font-halant font-normal text-foreground text-[clamp(32px,5vw,52px)] leading-tight tracking-tight", children: heading }),
558
- /* @__PURE__ */ jsx8("p", { className: "max-w-2xl mx-auto text-[clamp(16px,2vw,18px)] leading-relaxed text-muted-foreground", children: subheading }),
559
- /* @__PURE__ */ jsx8("div", { className: "flex flex-col sm:flex-row gap-3 justify-center items-center pt-4", children: buttons.map((button, index) => /* @__PURE__ */ jsx8(Button4, { asChild: true, variant: button.variant === "primary" ? "default" : "secondary", children: /* @__PURE__ */ jsxs5("a", { href: button.href, children: [
575
+ return /* @__PURE__ */ jsx9("section", { className: cn(`py-20 md:py-32 px-4 md:px-6 ${bgClass}`, className), children: /* @__PURE__ */ jsx9("div", { className: "max-w-3xl mx-auto text-center", children: /* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs5("div", { className: "space-y-6", children: [
576
+ /* @__PURE__ */ jsx9("h2", { className: "font-halant font-normal text-foreground text-[clamp(32px,5vw,52px)] leading-tight tracking-tight", children: heading }),
577
+ /* @__PURE__ */ jsx9("p", { className: "max-w-2xl mx-auto text-[clamp(16px,2vw,18px)] leading-relaxed text-muted-foreground", children: subheading }),
578
+ /* @__PURE__ */ jsx9("div", { className: "flex flex-col sm:flex-row gap-3 justify-center items-center pt-4", children: buttons.map((button, index) => /* @__PURE__ */ jsx9(Button, { asChild: true, variant: button.variant === "primary" ? "default" : "secondary", children: /* @__PURE__ */ jsxs5("a", { href: button.href, children: [
560
579
  button.text,
561
- button.showArrow && /* @__PURE__ */ jsx8(HiArrowRight, { className: "w-4 h-4" })
580
+ button.showArrow && /* @__PURE__ */ jsx9(HiArrowRight, { className: "w-4 h-4" })
562
581
  ] }) }, index)) })
563
582
  ] }) }) }) });
564
583
  }
565
584
 
566
- // src/components/faq/faq.tsx
585
+ // src/templates/studio/components/faq/faq.tsx
567
586
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@mdxui/primitives";
568
- import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
587
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
569
588
  var defaultFaqs = [
570
589
  {
571
590
  question: "How do I get started?",
@@ -593,562 +612,781 @@ var defaultFaqs = [
593
612
  }
594
613
  ];
595
614
  function FAQ({ heading = "FAQs", faqs = defaultFaqs, backgroundColor = "bg-background", className }) {
596
- return /* @__PURE__ */ jsx9("section", { id: "faq", className: cn(`py-20 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs6("div", { className: "max-w-4xl mx-auto", children: [
597
- /* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx9("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsx9("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }) }) }),
598
- /* @__PURE__ */ jsx9(Accordion, { type: "single", collapsible: true, className: "space-y-4", children: faqs.map((faq, index) => /* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.15 + index * 0.05, children: /* @__PURE__ */ jsxs6(AccordionItem, { value: `item-${index}`, className: "rounded-xl px-4 sm:px-6 border border-border bg-card shadow-sm", children: [
599
- /* @__PURE__ */ jsx9(AccordionTrigger, { className: "hover:no-underline py-5 text-base font-medium text-foreground", children: faq.question }),
600
- /* @__PURE__ */ jsx9(AccordionContent, { className: "pb-5 text-sm text-muted-foreground leading-relaxed", children: faq.answer })
615
+ return /* @__PURE__ */ jsx10("section", { id: "faq", className: cn(`py-20 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs6("div", { className: "max-w-4xl mx-auto", children: [
616
+ /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx10("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsx10("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }) }) }),
617
+ /* @__PURE__ */ jsx10(Accordion, { type: "single", collapsible: true, className: "space-y-4", children: faqs.map((faq, index) => /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.15 + index * 0.05, children: /* @__PURE__ */ jsxs6(AccordionItem, { value: `item-${index}`, className: "rounded-xl px-4 sm:px-6 border border-border bg-card shadow-sm", children: [
618
+ /* @__PURE__ */ jsx10(AccordionTrigger, { className: "hover:no-underline py-5 text-base font-medium text-foreground", children: faq.question }),
619
+ /* @__PURE__ */ jsx10(AccordionContent, { className: "pb-5 text-sm text-foreground/70 leading-relaxed", children: faq.answer })
601
620
  ] }) }, index)) })
602
621
  ] }) });
603
622
  }
604
623
 
605
- // src/components/problem/problem.tsx
606
- import { FaInbox, FaCalendarAlt, FaListUl, FaFileAlt, FaRocket, FaProjectDiagram, FaBug, FaLightbulb } from "react-icons/fa";
607
- import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
608
- var defaultWorkflows = [
609
- { icon: FaInbox, label: "Issue triage" },
610
- { icon: FaCalendarAlt, label: "Sprint planning" },
611
- { icon: FaListUl, label: "Backlog grooming" },
612
- { icon: FaFileAlt, label: "Status updates" },
613
- { icon: FaRocket, label: "Release planning" },
614
- { icon: FaProjectDiagram, label: "Dependency tracking" },
615
- { icon: FaBug, label: "Bug prioritization" },
616
- { icon: FaLightbulb, label: "Feature requests" }
617
- ];
618
- function Problem({
619
- heading = "Product managers <strong>spend 15+ hours</strong> per week on busywork",
620
- workflows = defaultWorkflows,
621
- subheading = "What if all of that just... ",
622
- subheadingHighlight = "happened automatically?",
623
- highlightColor = "bg-primary/20",
624
- marqueeDuration = "30s",
625
- marqueeGap = "0.5rem",
626
- backgroundColor = "bg-background",
627
- className
624
+ // src/templates/studio/components/navigation/navigation.tsx
625
+ import { useState as useState2, useEffect as useEffect2 } from "react";
626
+ import Link from "next/link";
627
+ import { Menu, X } from "lucide-react";
628
+ import { motion as motion2, AnimatePresence } from "motion/react";
629
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
630
+ function Navigation({
631
+ logo = "Priya",
632
+ logoHref = "/",
633
+ links = [
634
+ { label: "Features", href: "#features" },
635
+ { label: "Pricing", href: "#pricing" },
636
+ { label: "FAQ", href: "#faq" }
637
+ ],
638
+ ctaText = "Hire me",
639
+ ctaHref = "#pricing",
640
+ ctaVariant = "secondary",
641
+ className,
642
+ maxWidth = "7xl",
643
+ sticky = true,
644
+ showScrollEffect = true
628
645
  }) {
629
- return /* @__PURE__ */ jsx10("section", { id: "problem", className: cn(`py-20 md:pb-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsx10("div", { className: "max-w-4xl mx-auto", children: /* @__PURE__ */ jsxs7("div", { className: "text-center space-y-8", children: [
630
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx10(
631
- "h2",
632
- {
633
- className: "font-normal text-[clamp(36px,4vw,40px)] leading-tight text-foreground",
634
- dangerouslySetInnerHTML: { __html: heading }
635
- }
636
- ) }),
637
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "none", delay: 0.2, children: /* @__PURE__ */ jsxs7("div", { className: "relative py-6", children: [
638
- /* @__PURE__ */ jsx10("div", { className: "absolute left-0 top-0 bottom-0 w-32 bg-gradient-to-r from-background to-transparent z-10 pointer-events-none" }),
639
- /* @__PURE__ */ jsx10("div", { className: "absolute right-0 top-0 bottom-0 w-32 bg-gradient-to-l from-background to-transparent z-10 pointer-events-none" }),
640
- /* @__PURE__ */ jsx10(
641
- Marquee,
642
- {
643
- className: "[--duration:30s] [--gap:0.5rem]",
644
- style: {
645
- "--duration": marqueeDuration,
646
- "--gap": marqueeGap
647
- },
648
- children: workflows.map((workflow, index) => /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2.5 pl-1.5 pr-3.5 py-1.5 bg-card border border-border rounded-full", children: [
649
- /* @__PURE__ */ jsx10("div", { className: "flex items-center justify-center w-7 h-7 rounded-full bg-background", children: /* @__PURE__ */ jsx10(workflow.icon, { className: "w-3.5 h-3.5 text-foreground" }) }),
650
- /* @__PURE__ */ jsx10("span", { className: "text-sm text-foreground whitespace-nowrap", children: workflow.label })
651
- ] }, index))
652
- }
653
- )
654
- ] }) }),
655
- /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx10("div", { className: "pt-2 md:pt-4", children: /* @__PURE__ */ jsxs7("h3", { className: "font-normal text-[clamp(26px,3.5vw,32px)] leading-tight text-foreground", children: [
656
- subheading,
657
- /* @__PURE__ */ jsxs7("span", { className: "relative inline-block", children: [
658
- /* @__PURE__ */ jsx10("span", { className: "relative z-10", children: subheadingHighlight }),
659
- /* @__PURE__ */ jsx10("span", { className: `absolute bottom-1 left-0 w-full h-3 ${highlightColor} opacity-30 -rotate-1` })
646
+ const [mobileMenuOpen, setMobileMenuOpen] = useState2(false);
647
+ const [isScrolled, setIsScrolled] = useState2(false);
648
+ useEffect2(() => {
649
+ if (!showScrollEffect) return;
650
+ const handleScroll = () => {
651
+ setIsScrolled(window.scrollY > 10);
652
+ };
653
+ window.addEventListener("scroll", handleScroll);
654
+ return () => window.removeEventListener("scroll", handleScroll);
655
+ }, [showScrollEffect]);
656
+ const maxWidthClass = {
657
+ sm: "max-w-sm",
658
+ md: "max-w-md",
659
+ lg: "max-w-lg",
660
+ xl: "max-w-xl",
661
+ "2xl": "max-w-2xl",
662
+ "3xl": "max-w-3xl",
663
+ "4xl": "max-w-4xl",
664
+ "5xl": "max-w-5xl",
665
+ "6xl": "max-w-6xl",
666
+ "7xl": "max-w-7xl",
667
+ full: "max-w-full"
668
+ }[maxWidth];
669
+ return /* @__PURE__ */ jsx11(
670
+ "nav",
671
+ {
672
+ className: cn(
673
+ "z-50 w-full transition-all duration-300",
674
+ sticky && "sticky top-0",
675
+ showScrollEffect && isScrolled ? "bg-background/95 backdrop-blur-md" : "bg-background",
676
+ className
677
+ ),
678
+ children: /* @__PURE__ */ jsxs7("div", { className: cn(maxWidthClass, "mx-auto px-6 lg:px-12 py-4"), children: [
679
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between", children: [
680
+ /* @__PURE__ */ jsx11("div", { className: "flex items-center", children: /* @__PURE__ */ jsx11(Link, { href: logoHref, className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx11("span", { className: "text-3xl font-base text-foreground font-halant", children: logo }) : logo }) }),
681
+ links && links.length > 0 && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center gap-8", children: links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "text-sm text-foreground hover:opacity-60 transition-opacity", children: link.label }, link.href)) }),
682
+ ctaText && ctaHref && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center", children: /* @__PURE__ */ jsx11(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) }) }),
683
+ /* @__PURE__ */ jsx11("button", { className: "lg:hidden p-2 text-foreground", onClick: () => setMobileMenuOpen(!mobileMenuOpen), "aria-label": "Toggle menu", children: mobileMenuOpen ? /* @__PURE__ */ jsx11(X, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx11(Menu, { className: "w-6 h-6" }) })
684
+ ] }),
685
+ /* @__PURE__ */ jsx11(AnimatePresence, { children: mobileMenuOpen && /* @__PURE__ */ jsx11(
686
+ motion2.div,
687
+ {
688
+ initial: { opacity: 0, height: 0 },
689
+ animate: { opacity: 1, height: "auto" },
690
+ exit: { opacity: 0, height: 0 },
691
+ transition: { duration: 0.3, ease: "easeInOut" },
692
+ className: "lg:hidden overflow-hidden",
693
+ children: /* @__PURE__ */ jsx11("div", { className: "mt-4 py-4 rounded-xl bg-card", children: /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-4 px-6", children: [
694
+ links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "py-2 text-foreground hover:opacity-70 transition-colors", onClick: () => setMobileMenuOpen(false), children: link.label }, link.href)),
695
+ ctaText && ctaHref && /* @__PURE__ */ jsx11(Button, { asChild: true, variant: ctaVariant, className: "mt-2", onClick: () => setMobileMenuOpen(false), children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) })
696
+ ] }) })
697
+ }
698
+ ) })
660
699
  ] })
661
- ] }) }) })
662
- ] }) }) });
700
+ }
701
+ );
663
702
  }
664
703
 
665
- // src/components/contact/contact.tsx
666
- import { useState } from "react";
667
- import { Button as Button5, Input, Label, Textarea } from "@mdxui/primitives";
668
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
669
- var defaultFields = [
670
- {
671
- id: "name",
672
- label: "Name",
673
- type: "text",
674
- required: true
675
- },
676
- {
677
- id: "email",
678
- label: "Company Email",
679
- type: "email",
680
- required: true
681
- },
682
- {
683
- id: "message",
684
- label: "Message",
685
- type: "textarea",
686
- placeholder: "Tell us about your use case, team size, or any other questions you may have.",
687
- required: true
704
+ // src/templates/studio/components/footer/footer.tsx
705
+ import Link2 from "next/link";
706
+ import { FaGithub, FaXTwitter } from "react-icons/fa6";
707
+ import { SiNpm } from "react-icons/si";
708
+ import { FaArrowRight } from "react-icons/fa6";
709
+
710
+ // src/templates/studio/ui/input/input.tsx
711
+ import * as React2 from "react";
712
+ import { jsx as jsx12 } from "react/jsx-runtime";
713
+ var Input = React2.forwardRef(
714
+ ({ className, type, ...props }, ref) => {
715
+ return /* @__PURE__ */ jsx12(
716
+ "input",
717
+ {
718
+ type,
719
+ className: cn(
720
+ "flex h-11 w-full rounded-md border border-(--color-border) bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-(--color-fg) placeholder:text-(--color-fg-muted) focus-visible:outline-none focus-visible:border-(--color-border-strong) focus-visible:ring-1 focus-visible:ring-(--color-ring) disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
721
+ className
722
+ ),
723
+ ref,
724
+ ...props
725
+ }
726
+ );
688
727
  }
689
- ];
690
- function Contact({
691
- heading = "Get in touch",
692
- subheading = "Have questions about use cases, pricing, or anything else? Let's chat!",
693
- fields = defaultFields,
694
- submitButtonText = "Submit",
695
- successMessage = "Thanks for reaching out! I'll get back to you within 24 hours.",
696
- errorMessage = "Hmm, something went wrong. Mind trying again?",
697
- onSubmit,
698
- backgroundColor = "bg-background",
728
+ );
729
+ Input.displayName = "Input";
730
+
731
+ // src/templates/studio/components/footer/footer.tsx
732
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
733
+ function Footer({
734
+ logo = "Priya",
735
+ description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
736
+ socialLinks = [
737
+ { href: "https://github.com", icon: FaGithub, label: "GitHub" },
738
+ { href: "https://npmjs.com", icon: SiNpm, label: "npm" },
739
+ // X always points at the .do brand account (do-design-agency HARD rule);
740
+ // GitHub/npm stay product-specific overrides.
741
+ { href: "https://x.com/dotdo_ai", icon: FaXTwitter, label: "X (Twitter)" }
742
+ ],
743
+ quickLinks = [
744
+ { href: "/#pricing", label: "Pricing" },
745
+ { href: "/#features", label: "How it works" },
746
+ { href: "/contact", label: "Contact" }
747
+ ],
748
+ contactTitle = "Stay in touch",
749
+ emailPlaceholder = "Enter your email",
750
+ onEmailSubmit,
751
+ copyrightText = "Priya.do \xA9 2025. All rights reserved.",
699
752
  className
700
753
  }) {
701
- const [isSubmitting, setIsSubmitting] = useState(false);
702
- const [formData, setFormData] = useState({});
703
- const [submitStatus, setSubmitStatus] = useState("idle");
704
- const handleSubmit = async (e) => {
754
+ const handleEmailSubmit = (e) => {
705
755
  e.preventDefault();
706
- setIsSubmitting(true);
707
- setSubmitStatus("idle");
708
- try {
709
- if (onSubmit) {
710
- await onSubmit(formData);
711
- }
712
- setSubmitStatus("success");
713
- setFormData({});
714
- e.target.reset();
715
- } catch {
716
- setSubmitStatus("error");
717
- } finally {
718
- setIsSubmitting(false);
756
+ const form = e.currentTarget;
757
+ const formData = new FormData(form);
758
+ const email = formData.get("email");
759
+ if (onEmailSubmit) {
760
+ onEmailSubmit(email);
719
761
  }
762
+ form.reset();
720
763
  };
721
- const handleChange = (e) => {
722
- setFormData((prev) => ({
723
- ...prev,
724
- [e.target.id]: e.target.value
725
- }));
726
- };
727
- return /* @__PURE__ */ jsx11("section", { className: cn(`relative py-12 md:py-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs8("div", { className: "max-w-3xl mx-auto", children: [
728
- /* @__PURE__ */ jsx11(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs8("div", { className: "mb-14 text-center", children: [
729
- /* @__PURE__ */ jsx11("h1", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
730
- /* @__PURE__ */ jsx11("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
731
- ] }) }),
732
- /* @__PURE__ */ jsx11(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs8(
733
- "form",
764
+ return /* @__PURE__ */ jsx13("footer", { className: cn("py-16 px-6 lg:px-12 bg-[#111011] text-white", className), children: /* @__PURE__ */ jsxs8("div", { className: "max-w-7xl mx-auto", children: [
765
+ /* @__PURE__ */ jsxs8("div", { className: "grid md:grid-cols-5 gap-12 mb-12", children: [
766
+ /* @__PURE__ */ jsxs8("div", { className: "md:col-span-2", children: [
767
+ /* @__PURE__ */ jsx13(Link2, { href: "/", className: "inline-block mb-4", children: /* @__PURE__ */ jsx13("div", { className: "text-3xl font-base text-white font-halant", children: logo }) }),
768
+ /* @__PURE__ */ jsx13("p", { className: "max-w-md text-sm leading-relaxed text-white/70 mb-6", children: description }),
769
+ /* @__PURE__ */ jsx13("div", { className: "flex items-center gap-4", children: socialLinks.map((link) => {
770
+ const Icon = link.icon;
771
+ return /* @__PURE__ */ jsx13(
772
+ Link2,
773
+ {
774
+ href: link.href,
775
+ target: "_blank",
776
+ rel: "noopener noreferrer",
777
+ className: "text-white/70 transition-colors hover:text-white",
778
+ "aria-label": link.label,
779
+ children: /* @__PURE__ */ jsx13(Icon, { className: "w-5 h-5" })
780
+ },
781
+ link.label
782
+ );
783
+ }) })
784
+ ] }),
785
+ /* @__PURE__ */ jsxs8("div", { children: [
786
+ /* @__PURE__ */ jsx13("h3", { className: "font-semibold text-base mb-4 text-white", children: "Quick Links" }),
787
+ /* @__PURE__ */ jsx13("ul", { className: "space-y-2", children: quickLinks.map((link) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsx13(Link2, { href: link.href, className: "text-sm text-white/70 transition-colors hover:text-white", children: link.label }) }, link.label)) })
788
+ ] }),
789
+ /* @__PURE__ */ jsx13("div", { className: "w-full md:col-span-2 md:flex md:flex-col md:items-end", children: /* @__PURE__ */ jsxs8("div", { className: "w-full md:max-w-sm", children: [
790
+ /* @__PURE__ */ jsx13("h3", { className: "font-semibold text-base mb-4 text-white", children: contactTitle }),
791
+ /* @__PURE__ */ jsxs8("form", { onSubmit: handleEmailSubmit, className: "relative", children: [
792
+ /* @__PURE__ */ jsx13(
793
+ Input,
794
+ {
795
+ type: "email",
796
+ name: "email",
797
+ placeholder: emailPlaceholder,
798
+ required: true,
799
+ className: "w-full bg-white/10 border-white/20 text-white placeholder:text-white/50 pr-12"
800
+ }
801
+ ),
802
+ /* @__PURE__ */ jsx13(
803
+ "button",
804
+ {
805
+ type: "submit",
806
+ className: "absolute right-1 top-1/2 -translate-y-1/2 bg-white text-gray-900 hover:bg-white/90 active:bg-[#111011] active:text-white px-3 py-3 rounded-md transition-colors",
807
+ "aria-label": "Submit email",
808
+ children: /* @__PURE__ */ jsx13(FaArrowRight, { className: "w-3 h-3" })
809
+ }
810
+ )
811
+ ] })
812
+ ] }) })
813
+ ] }),
814
+ /* @__PURE__ */ jsx13("div", { className: "border-t border-white/10 pt-8", children: /* @__PURE__ */ jsx13("div", { className: "flex flex-col md:flex-row justify-between items-center gap-4", children: /* @__PURE__ */ jsx13("p", { className: "text-sm text-white/60", children: copyrightText }) }) })
815
+ ] }) });
816
+ }
817
+
818
+ // src/templates/studio/view.tsx
819
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
820
+ function StudioView({ content, brandName, hostname }) {
821
+ const { hero, features, pricing, faq, cta } = content;
822
+ return /* @__PURE__ */ jsxs9(Fragment2, { children: [
823
+ /* @__PURE__ */ jsx14(Navigation, { logo: brandName }),
824
+ /* @__PURE__ */ jsxs9("main", { children: [
825
+ /* @__PURE__ */ jsx14(
826
+ Hero,
827
+ {
828
+ badgeEmoji: hero.badgeEmoji,
829
+ badgeText: hero.badgeText,
830
+ badgeHref: hero.badgeHref,
831
+ heading: hero.heading,
832
+ description: hero.description,
833
+ ctaText: hero.ctaText,
834
+ ctaHref: hero.ctaHref,
835
+ rightImageSrc: hero.rightImageSrc,
836
+ rightImageAlt: hero.rightImageAlt,
837
+ showIconOverlay: hero.showIconOverlay,
838
+ marqueeTitle: hero.marqueeTitle,
839
+ marqueeImages: hero.marqueeImages
840
+ }
841
+ ),
842
+ /* @__PURE__ */ jsx14(
843
+ Features,
844
+ {
845
+ heading: features.heading,
846
+ description: features.description,
847
+ features: features.features
848
+ }
849
+ ),
850
+ pricing.variant === "single" ? /* @__PURE__ */ jsx14(
851
+ Pricing,
852
+ {
853
+ heading: pricing.heading,
854
+ subheading: pricing.subheading,
855
+ price: pricing.price,
856
+ priceUnit: pricing.priceUnit,
857
+ trialText: pricing.trialText,
858
+ ctaText: pricing.ctaText,
859
+ ctaHref: pricing.ctaHref,
860
+ featuresHeading: pricing.featuresHeading,
861
+ features: pricing.features,
862
+ securityNote: pricing.securityNote
863
+ }
864
+ ) : /* @__PURE__ */ jsx14(
865
+ PricingTiers,
866
+ {
867
+ heading: pricing.heading,
868
+ subheading: pricing.subheading,
869
+ tiers: pricing.tiers,
870
+ securityNote: pricing.securityNote
871
+ }
872
+ ),
873
+ /* @__PURE__ */ jsx14(FAQ, { heading: faq.heading, faqs: faq.faqs }),
874
+ /* @__PURE__ */ jsx14(CTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons })
875
+ ] }),
876
+ /* @__PURE__ */ jsx14(
877
+ Footer,
734
878
  {
735
- onSubmit: handleSubmit,
736
- className: "mx-auto flex max-w-lg flex-col gap-6 bg-card p-6 md:p-8 rounded-3xl border border-border feature-card-shadow",
737
- children: [
738
- fields.map((field) => /* @__PURE__ */ jsxs8("div", { className: "grid w-full items-center gap-2", children: [
739
- /* @__PURE__ */ jsxs8(Label, { htmlFor: field.id, className: "text-foreground", children: [
740
- field.label,
741
- field.required && /* @__PURE__ */ jsx11("span", { className: "text-destructive ml-1", children: "*" })
742
- ] }),
743
- field.type === "textarea" ? /* @__PURE__ */ jsx11(Textarea, { id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange, className: "min-h-[120px]" }) : /* @__PURE__ */ jsx11(Input, { type: field.type, id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange })
744
- ] }, field.id)),
745
- /* @__PURE__ */ jsx11(Button5, { type: "submit", className: "w-full", disabled: isSubmitting, children: isSubmitting ? "Submitting..." : submitButtonText }),
746
- submitStatus === "success" && /* @__PURE__ */ jsx11("p", { className: "text-primary text-sm text-center", children: successMessage }),
747
- submitStatus === "error" && /* @__PURE__ */ jsx11("p", { className: "text-destructive text-sm text-center", children: errorMessage })
748
- ]
879
+ logo: brandName,
880
+ description: hero.description,
881
+ copyrightText: `${hostname} \xA9 ${(/* @__PURE__ */ new Date()).getFullYear()}. All rights reserved.`
749
882
  }
750
- ) })
751
- ] }) });
883
+ )
884
+ ] });
752
885
  }
753
886
 
754
- // src/components/integration/integration.tsx
755
- import { forwardRef, useRef, useEffect as useEffect2, useState as useState3 } from "react";
887
+ // src/templates/executive/components/navigation.tsx
888
+ import { useState as useState3, useEffect as useEffect3 } from "react";
889
+ import Link3 from "next/link";
890
+ import { Menu as Menu2, X as X2 } from "lucide-react";
756
891
 
757
- // src/shared/animated-beam/animated-beam.tsx
758
- import { useEffect, useId, useState as useState2 } from "react";
759
- import { motion as motion2 } from "motion/react";
760
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
761
- function AnimatedBeam({
762
- className,
763
- containerRef,
764
- fromRef,
765
- toRef,
766
- curvature = 0,
767
- reverse = false,
768
- duration = Math.random() * 3 + 4,
769
- delay = 0,
770
- pathColor = "gray",
771
- pathWidth = 2,
772
- pathOpacity = 0.2,
773
- gradientStartColor = "#ffaa40",
774
- gradientStopColor = "#9c40ff",
775
- startXOffset = 0,
776
- startYOffset = 0,
777
- endXOffset = 0,
778
- endYOffset = 0
779
- }) {
780
- const id = useId();
781
- const [pathD, setPathD] = useState2("");
782
- const [svgDimensions, setSvgDimensions] = useState2({ width: 0, height: 0 });
783
- const gradientCoordinates = reverse ? {
784
- x1: ["90%", "-10%"],
785
- x2: ["100%", "0%"],
786
- y1: ["0%", "0%"],
787
- y2: ["0%", "0%"]
788
- } : {
789
- x1: ["10%", "110%"],
790
- x2: ["0%", "100%"],
791
- y1: ["0%", "0%"],
792
- y2: ["0%", "0%"]
793
- };
794
- useEffect(() => {
795
- const updatePath = () => {
796
- if (containerRef.current && fromRef.current && toRef.current) {
797
- const containerRect = containerRef.current.getBoundingClientRect();
798
- const rectA = fromRef.current.getBoundingClientRect();
799
- const rectB = toRef.current.getBoundingClientRect();
800
- const svgWidth = containerRect.width;
801
- const svgHeight = containerRect.height;
802
- setSvgDimensions({ width: svgWidth, height: svgHeight });
803
- const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;
804
- const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
805
- const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;
806
- const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
807
- const controlY = startY - curvature;
808
- const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;
809
- setPathD(d);
810
- }
811
- };
812
- const resizeObserver = new ResizeObserver(() => {
813
- updatePath();
814
- });
815
- if (containerRef.current) {
816
- resizeObserver.observe(containerRef.current);
892
+ // src/templates/executive/ui/button.tsx
893
+ import * as React3 from "react";
894
+ import { jsx as jsx15 } from "react/jsx-runtime";
895
+ var baseClasses2 = "inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer rounded-[2px]";
896
+ var variantClasses2 = {
897
+ default: "bg-(--color-btn-primary-to) text-(--color-btn-primary-fg) hover:bg-(--color-accent)",
898
+ secondary: "bg-transparent text-(--color-fg) border border-(--color-border-strong) hover:bg-(--color-hover)",
899
+ ghost: "text-(--color-fg) hover:bg-(--color-hover)",
900
+ link: "text-(--color-fg) underline-offset-4 hover:underline"
901
+ };
902
+ var sizeClasses2 = {
903
+ default: "h-11 px-6 text-sm tracking-[0.01em]",
904
+ sm: "h-9 px-4 text-sm"
905
+ };
906
+ var ExecButton = React3.forwardRef(
907
+ ({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
908
+ const classes = cn(baseClasses2, variantClasses2[variant], sizeClasses2[size], className);
909
+ if (asChild && React3.isValidElement(children)) {
910
+ const child = children;
911
+ return React3.cloneElement(child, {
912
+ ...props,
913
+ className: cn(classes, child.props.className)
914
+ });
817
915
  }
818
- updatePath();
819
- return () => {
820
- resizeObserver.disconnect();
821
- };
822
- }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);
823
- return /* @__PURE__ */ jsxs9(
824
- "svg",
916
+ return /* @__PURE__ */ jsx15("button", { ref, className: classes, ...props, children });
917
+ }
918
+ );
919
+ ExecButton.displayName = "ExecButton";
920
+
921
+ // src/templates/executive/components/navigation.tsx
922
+ import { jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
923
+ function ExecNavigation({
924
+ logo = "Priya",
925
+ logoHref = "/",
926
+ links = [
927
+ { label: "Features", href: "#features" },
928
+ { label: "Pricing", href: "#pricing" },
929
+ { label: "FAQ", href: "#faq" }
930
+ ],
931
+ ctaText = "Hire me",
932
+ ctaHref = "#pricing",
933
+ className
934
+ }) {
935
+ const [mobileMenuOpen, setMobileMenuOpen] = useState3(false);
936
+ const [isScrolled, setIsScrolled] = useState3(false);
937
+ useEffect3(() => {
938
+ const handleScroll = () => setIsScrolled(window.scrollY > 10);
939
+ window.addEventListener("scroll", handleScroll);
940
+ return () => window.removeEventListener("scroll", handleScroll);
941
+ }, []);
942
+ return /* @__PURE__ */ jsx16(
943
+ "nav",
825
944
  {
826
- fill: "none",
827
- width: svgDimensions.width,
828
- height: svgDimensions.height,
829
- xmlns: "http://www.w3.org/2000/svg",
830
- className: cn("pointer-events-none absolute top-0 left-0 transform-gpu stroke-2", className),
831
- viewBox: `0 0 ${svgDimensions.width} ${svgDimensions.height}`,
832
- children: [
833
- /* @__PURE__ */ jsx12("path", { d: pathD, stroke: pathColor, strokeWidth: pathWidth, strokeOpacity: pathOpacity, strokeLinecap: "round" }),
834
- /* @__PURE__ */ jsx12("path", { d: pathD, strokeWidth: pathWidth, stroke: `url(#${id})`, strokeOpacity: "1", strokeLinecap: "round" }),
835
- /* @__PURE__ */ jsx12("defs", { children: /* @__PURE__ */ jsxs9(
836
- motion2.linearGradient,
837
- {
838
- className: "transform-gpu",
839
- id,
840
- gradientUnits: "userSpaceOnUse",
841
- initial: {
842
- x1: "0%",
843
- x2: "0%",
844
- y1: "0%",
845
- y2: "0%"
846
- },
847
- animate: {
848
- x1: gradientCoordinates.x1,
849
- x2: gradientCoordinates.x2,
850
- y1: gradientCoordinates.y1,
851
- y2: gradientCoordinates.y2
945
+ className: cn(
946
+ "sticky top-0 z-50 w-full bg-(--color-surface) transition-[border-color] duration-200 border-b",
947
+ isScrolled ? "border-(--color-border-strong)" : "border-(--color-border)",
948
+ className
949
+ ),
950
+ children: /* @__PURE__ */ jsxs10("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-4", children: [
951
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between", children: [
952
+ /* @__PURE__ */ jsx16(Link3, { href: logoHref, className: "flex items-baseline gap-2", children: /* @__PURE__ */ jsx16("span", { className: "exec-serif italic text-2xl text-(--color-fg)", children: logo }) }),
953
+ /* @__PURE__ */ jsx16("div", { className: "hidden lg:flex items-center gap-10", children: links.map((link) => /* @__PURE__ */ jsx16(
954
+ "a",
955
+ {
956
+ href: link.href,
957
+ className: "text-sm text-(--color-fg-muted) hover:text-(--color-fg) transition-colors",
958
+ children: link.label
852
959
  },
853
- transition: {
854
- delay,
855
- duration,
856
- ease: [0.16, 1, 0.3, 1],
857
- repeat: Infinity,
858
- repeatDelay: 0
960
+ link.href
961
+ )) }),
962
+ ctaText && ctaHref && /* @__PURE__ */ jsx16("div", { className: "hidden lg:flex items-center", children: /* @__PURE__ */ jsx16(ExecButton, { asChild: true, variant: "secondary", size: "sm", children: /* @__PURE__ */ jsx16("a", { href: ctaHref, children: ctaText }) }) }),
963
+ /* @__PURE__ */ jsx16(
964
+ "button",
965
+ {
966
+ className: "lg:hidden p-2 text-(--color-fg)",
967
+ onClick: () => setMobileMenuOpen(!mobileMenuOpen),
968
+ "aria-label": "Toggle menu",
969
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx16(X2, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx16(Menu2, { className: "w-5 h-5" })
970
+ }
971
+ )
972
+ ] }),
973
+ mobileMenuOpen && /* @__PURE__ */ jsx16("div", { className: "lg:hidden border-t border-(--color-border) mt-4", children: /* @__PURE__ */ jsxs10("div", { className: "flex flex-col py-2", children: [
974
+ links.map((link) => /* @__PURE__ */ jsx16(
975
+ "a",
976
+ {
977
+ href: link.href,
978
+ className: "py-3 text-sm text-(--color-fg) border-b border-(--color-border) last:border-b-0",
979
+ onClick: () => setMobileMenuOpen(false),
980
+ children: link.label
859
981
  },
860
- children: [
861
- /* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
862
- /* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor }),
863
- /* @__PURE__ */ jsx12("stop", { offset: "32.5%", stopColor: gradientStopColor }),
864
- /* @__PURE__ */ jsx12("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
865
- ]
866
- }
867
- ) })
868
- ]
982
+ link.href
983
+ )),
984
+ ctaText && ctaHref && /* @__PURE__ */ jsx16(ExecButton, { asChild: true, variant: "secondary", size: "sm", className: "mt-3 self-start", onClick: () => setMobileMenuOpen(false), children: /* @__PURE__ */ jsx16("a", { href: ctaHref, children: ctaText }) })
985
+ ] }) })
986
+ ] })
869
987
  }
870
988
  );
871
989
  }
872
990
 
873
- // src/shared/grid-pattern/grid-pattern.tsx
874
- import { useId as useId2 } from "react";
875
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
876
- function GridPattern({
877
- width = 40,
878
- height = 40,
879
- x = -1,
880
- y = -1,
881
- strokeDasharray = "0",
882
- squares,
883
- className,
884
- ...props
991
+ // src/templates/executive/components/hero.tsx
992
+ import { HiArrowRight as HiArrowRight2 } from "react-icons/hi";
993
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
994
+ function ExecHero({
995
+ heading = "Your AI Product Manager for GitHub",
996
+ description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
997
+ ctaText = "Get Started",
998
+ ctaHref = "#pricing",
999
+ secondaryCtaText,
1000
+ secondaryCtaHref,
1001
+ marqueeTitle = "Tools I work with",
1002
+ marqueeImages = [],
1003
+ className
885
1004
  }) {
886
- const id = useId2();
887
- return /* @__PURE__ */ jsxs10(
888
- "svg",
889
- {
890
- "aria-hidden": "true",
891
- className: cn("pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20", className),
892
- ...props,
893
- children: [
894
- /* @__PURE__ */ jsx13("defs", { children: /* @__PURE__ */ jsx13("pattern", { id, width, height, patternUnits: "userSpaceOnUse", x, y, children: /* @__PURE__ */ jsx13("path", { d: `M.5 ${height}V.5H${width}`, fill: "none", strokeDasharray }) }) }),
895
- /* @__PURE__ */ jsx13("rect", { width: "100%", height: "100%", strokeWidth: 0, fill: `url(#${id})` }),
896
- squares && /* @__PURE__ */ jsx13("svg", { x, y, className: "overflow-visible", children: squares.map(([sx, sy]) => /* @__PURE__ */ jsx13("rect", { strokeWidth: "0", width: width - 1, height: height - 1, x: sx * width + 1, y: sy * height + 1 }, `${sx}-${sy}`)) })
897
- ]
898
- }
899
- );
1005
+ const tools = marqueeImages.filter((s) => !/^(https?:)?\/\//i.test(s.trim()) && !s.trim().startsWith("data:"));
1006
+ return /* @__PURE__ */ jsxs11("section", { className: cn("bg-(--color-accent-field) text-(--color-accent-fg)", className), children: [
1007
+ /* @__PURE__ */ jsxs11("div", { className: "max-w-6xl mx-auto px-6 lg:px-10", children: [
1008
+ /* @__PURE__ */ jsx17(ScrollReveal, { direction: "up", trigger: "mount", children: /* @__PURE__ */ jsx17("h1", { className: "pt-16 md:pt-24 font-halant text-[clamp(48px,7.5vw,118px)] text-(--color-accent-fg) max-w-[14ch] -ml-0.5", children: heading }) }),
1009
+ /* @__PURE__ */ jsxs11("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-8 pt-10 md:pt-12 pb-14 md:pb-20", children: [
1010
+ /* @__PURE__ */ jsx17("div", { className: "md:col-span-7", children: /* @__PURE__ */ jsx17(ScrollReveal, { direction: "up", delay: 0.12, trigger: "mount", children: /* @__PURE__ */ jsx17("p", { className: "exec-serif italic text-xl md:text-2xl leading-relaxed text-(--color-accent-fg)/90 max-w-[44ch]", children: description }) }) }),
1011
+ /* @__PURE__ */ jsx17("div", { className: "md:col-span-4 md:col-start-9 flex md:justify-end md:items-end", children: /* @__PURE__ */ jsx17(ScrollReveal, { direction: "up", delay: 0.22, trigger: "mount", children: /* @__PURE__ */ jsxs11("div", { className: "flex flex-col sm:flex-row gap-3", children: [
1012
+ /* @__PURE__ */ jsx17(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-surface-raised)", children: /* @__PURE__ */ jsxs11("a", { href: ctaHref, children: [
1013
+ ctaText,
1014
+ /* @__PURE__ */ jsx17(HiArrowRight2, { className: "w-4 h-4" })
1015
+ ] }) }),
1016
+ secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ jsx17(ExecButton, { asChild: true, variant: "secondary", className: "border-(--color-accent-fg)/40 text-(--color-accent-fg) hover:bg-(--color-accent-fg)/10", children: /* @__PURE__ */ jsx17("a", { href: secondaryCtaHref, children: secondaryCtaText }) })
1017
+ ] }) }) })
1018
+ ] })
1019
+ ] }),
1020
+ tools.length > 0 && /* @__PURE__ */ jsx17("div", { className: "border-t border-(--color-accent-fg)/25 bg-(--color-accent-field)", "aria-label": marqueeTitle, children: /* @__PURE__ */ jsx17(Marquee, { className: "py-4 [--duration:32s] [--gap:2.5rem]", children: tools.map((tool, i) => /* @__PURE__ */ jsxs11(
1021
+ "span",
1022
+ {
1023
+ className: "flex items-center gap-x-10 font-halant uppercase text-base tracking-[0.08em] text-(--color-accent-fg)/85 whitespace-nowrap",
1024
+ children: [
1025
+ brandLabel(tool),
1026
+ /* @__PURE__ */ jsx17("span", { className: "inline-block size-[6px] bg-(--color-accent-fg)/50", "aria-hidden": "true" })
1027
+ ]
1028
+ },
1029
+ `${tool}-${i}`
1030
+ )) }) })
1031
+ ] });
900
1032
  }
901
1033
 
902
- // src/components/integration/integration.tsx
903
- import Image3 from "next/image";
904
- import { Button as Button6 } from "@mdxui/primitives";
905
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
906
- var Square = forwardRef(({ className, children }, ref) => {
907
- return /* @__PURE__ */ jsx14(
908
- "div",
909
- {
910
- ref,
911
- className: cn("z-10 flex size-16 items-center justify-center rounded-lg bg-card border border-border p-3 integration-square-shadow", className),
912
- children
913
- }
914
- );
915
- });
916
- Square.displayName = "Square";
917
- function Integration({
918
- title = "Connect in Seconds",
919
- description = "Just connect your account and get started immediately \u2013 no configuration, no setup, no hassle.",
920
- buttonText = "Get Started",
921
- buttonHref = "#pricing",
922
- leftNode,
923
- rightNode,
924
- beamAnimations = [
925
- { startYOffset: 10, endYOffset: 10, curvature: -20, duration: 3 },
926
- { startYOffset: -10, endYOffset: -10, curvature: 20, duration: 3, reverse: true }
927
- ],
928
- gridPatternWidth = 30,
929
- gridPatternHeight = 30,
930
- maxWidth = "5xl",
931
- className,
932
- contentOrder = "left"
1034
+ // src/templates/executive/components/features.tsx
1035
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
1036
+ function ExecFeatures({
1037
+ heading = "How It Works",
1038
+ description,
1039
+ features = [],
1040
+ className
933
1041
  }) {
934
- const containerRef = useRef(null);
935
- const leftRef = useRef(null);
936
- const rightRef = useRef(null);
937
- const [isDark, setIsDark] = useState3(false);
938
- useEffect2(() => {
939
- const checkDarkMode = () => {
940
- const isDarkMode = document.documentElement.classList.contains("dark") || window.matchMedia("(prefers-color-scheme: dark)").matches;
941
- setIsDark(isDarkMode);
942
- };
943
- checkDarkMode();
944
- const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
945
- const observer = new MutationObserver(checkDarkMode);
946
- mediaQuery.addEventListener("change", checkDarkMode);
947
- observer.observe(document.documentElement, {
948
- attributes: true,
949
- attributeFilter: ["class"]
950
- });
951
- return () => {
952
- mediaQuery.removeEventListener("change", checkDarkMode);
953
- observer.disconnect();
954
- };
955
- }, []);
956
- const renderNode = (node, ref) => {
957
- const squareContent = (() => {
958
- if (node.type === "image" && typeof node.content === "string") {
959
- return /* @__PURE__ */ jsx14("div", { className: "relative w-full h-full", children: /* @__PURE__ */ jsx14(Image3, { src: node.content, alt: node.alt || "Integration", fill: true, className: "object-cover rounded-lg" }) });
960
- }
961
- if (node.type === "icon" && typeof node.content === "string") {
962
- return /* @__PURE__ */ jsx14("div", { className: cn("text-foreground", node.className), children: node.content });
963
- }
964
- return node.content;
965
- })();
966
- return /* @__PURE__ */ jsx14(Square, { ref, className: cn("size-20", node.type === "image" ? "p-0" : "", node.className), children: squareContent });
967
- };
968
- const maxWidthClasses = {
969
- sm: "max-w-sm",
970
- md: "max-w-md",
971
- lg: "max-w-lg",
972
- xl: "max-w-xl",
973
- "2xl": "max-w-2xl",
974
- "3xl": "max-w-3xl",
975
- "4xl": "max-w-4xl",
976
- "5xl": "max-w-5xl",
977
- "6xl": "max-w-6xl",
978
- "7xl": "max-w-7xl"
979
- };
980
- const content = /* @__PURE__ */ jsxs11("div", { className: "space-y-6", children: [
981
- /* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx14("h2", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: title }) }),
982
- /* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx14("p", { className: "text-base text-muted-foreground max-w-lg", children: description }) }),
983
- buttonText && buttonHref && /* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx14(Button6, { asChild: true, variant: "default", children: /* @__PURE__ */ jsx14("a", { href: buttonHref, children: buttonText }) }) })
984
- ] });
985
- const animation = /* @__PURE__ */ jsx14(ScrollReveal, { direction: contentOrder === "left" ? "right" : "left", delay: 0.2, children: /* @__PURE__ */ jsxs11("div", { className: "relative flex aspect-square max-w-md mx-auto w-full items-center justify-center overflow-hidden rounded-lg", ref: containerRef, children: [
986
- /* @__PURE__ */ jsx14(
987
- GridPattern,
988
- {
989
- width: gridPatternWidth,
990
- height: gridPatternHeight,
991
- className: "opacity-30 mask-[radial-gradient(ellipse_at_center,black_40%,transparent_85%)] dark:mask-[radial-gradient(ellipse_at_center,white_40%,transparent_85%)]"
992
- }
993
- ),
994
- /* @__PURE__ */ jsxs11("div", { className: "flex size-full flex-row items-center justify-center gap-20 relative z-10", children: [
995
- /* @__PURE__ */ jsx14("div", { className: "flex flex-col justify-center", children: renderNode(leftNode, leftRef) }),
996
- /* @__PURE__ */ jsx14("div", { className: "flex flex-col justify-center", children: renderNode(rightNode, rightRef) })
1042
+ return /* @__PURE__ */ jsx18("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs12("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-16 md:py-24", children: [
1043
+ /* @__PURE__ */ jsx18(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs12("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-[3px] border-(--color-fg)", children: [
1044
+ /* @__PURE__ */ jsx18("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1045
+ description && /* @__PURE__ */ jsx18("p", { className: "md:col-span-4 md:col-start-9 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: description })
1046
+ ] }) }),
1047
+ /* @__PURE__ */ jsx18("ol", { className: "list-none m-0 p-0", children: features.map((feature, index) => /* @__PURE__ */ jsx18("li", { className: "border-b border-(--color-border)", children: /* @__PURE__ */ jsx18(ScrollReveal, { direction: "up", delay: 0.05, children: /* @__PURE__ */ jsxs12("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-6 py-10 md:py-14", children: [
1048
+ /* @__PURE__ */ jsx18("div", { className: "md:col-span-2", children: /* @__PURE__ */ jsx18("span", { className: "exec-figure font-halant block text-[clamp(64px,8vw,124px)] leading-[0.8] text-(--color-accent-strong) md:-mt-2", children: feature.badge }) }),
1049
+ /* @__PURE__ */ jsxs12("div", { className: "md:col-span-4", children: [
1050
+ /* @__PURE__ */ jsx18("h3", { className: "text-xl font-semibold text-(--color-fg)", children: feature.title }),
1051
+ /* @__PURE__ */ jsx18("p", { className: "mt-3 text-base leading-relaxed text-(--color-fg-soft)", children: feature.description }),
1052
+ /* @__PURE__ */ jsx18("ul", { className: "mt-6 space-y-2.5", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs12("li", { className: "flex items-baseline gap-3 text-sm text-(--color-fg)", children: [
1053
+ /* @__PURE__ */ jsx18("span", { className: "inline-block size-[5px] shrink-0 translate-y-[-1px] bg-(--color-accent-strong)", "aria-hidden": "true" }),
1054
+ item.text
1055
+ ] }, itemIndex)) })
1056
+ ] }),
1057
+ feature.code && /* @__PURE__ */ jsx18("div", { className: "md:col-span-6 md:col-start-7", children: /* @__PURE__ */ jsx18(
1058
+ CodeWindow,
1059
+ {
1060
+ code: feature.code,
1061
+ language: feature.language,
1062
+ className: "rounded-[2px] border border-(--color-border) bg-[#0d1117] p-5 text-left text-xs leading-relaxed text-[#e6edf3]"
1063
+ }
1064
+ ) })
1065
+ ] }) }) }, index)) })
1066
+ ] }) });
1067
+ }
1068
+
1069
+ // src/templates/executive/components/pricing.tsx
1070
+ import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
1071
+ function ExecPricing({
1072
+ heading = "Simple, transparent pricing",
1073
+ subheading,
1074
+ price = "$16",
1075
+ priceUnit = "/ month",
1076
+ trialText,
1077
+ ctaText = "Get Started",
1078
+ ctaHref = "#contact",
1079
+ featuresHeading = "What's included",
1080
+ features = [],
1081
+ securityNote,
1082
+ className
1083
+ }) {
1084
+ return /* @__PURE__ */ jsx19("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs13("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-16 md:py-24", children: [
1085
+ /* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-[3px] border-(--color-fg)", children: [
1086
+ /* @__PURE__ */ jsx19("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1087
+ subheading && /* @__PURE__ */ jsx19("p", { className: "md:col-span-6 md:col-start-7 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: subheading })
997
1088
  ] }),
998
- beamAnimations.map((config, index) => /* @__PURE__ */ jsx14(
999
- AnimatedBeam,
1089
+ /* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10 py-12", children: [
1090
+ /* @__PURE__ */ jsxs13("div", { className: "md:col-span-5", children: [
1091
+ /* @__PURE__ */ jsxs13("div", { className: "flex items-baseline gap-2", children: [
1092
+ /* @__PURE__ */ jsx19("span", { className: "exec-figure font-halant text-6xl text-(--color-accent-strong)", children: price }),
1093
+ /* @__PURE__ */ jsx19("span", { className: "text-sm text-(--color-fg-muted)", children: priceUnit })
1094
+ ] }),
1095
+ trialText && /* @__PURE__ */ jsx19("p", { className: "mt-3 text-sm text-(--color-fg-soft)", children: trialText }),
1096
+ /* @__PURE__ */ jsx19("div", { className: "mt-8", children: /* @__PURE__ */ jsx19(ExecButton, { asChild: true, children: /* @__PURE__ */ jsx19("a", { href: ctaHref, children: ctaText }) }) })
1097
+ ] }),
1098
+ /* @__PURE__ */ jsxs13("div", { className: "md:col-span-6 md:col-start-7", children: [
1099
+ /* @__PURE__ */ jsx19("p", { className: "text-xs font-medium tracking-[0.18em] uppercase text-(--color-fg-muted)", children: featuresHeading }),
1100
+ /* @__PURE__ */ jsx19("ul", { className: "mt-4 columns-1 sm:columns-2 gap-x-10", children: features.map((feature, index) => /* @__PURE__ */ jsx19(
1101
+ "li",
1102
+ {
1103
+ className: "break-inside-avoid py-2.5 text-sm text-(--color-fg) border-t border-(--color-border) first:border-t-0",
1104
+ children: feature.text
1105
+ },
1106
+ index
1107
+ )) })
1108
+ ] })
1109
+ ] }),
1110
+ securityNote && /* @__PURE__ */ jsx19("div", { className: "border-t border-(--color-border-strong) pt-5", children: /* @__PURE__ */ jsxs13("p", { className: "text-xs leading-relaxed text-(--color-fg-muted) max-w-[70ch]", children: [
1111
+ /* @__PURE__ */ jsx19("span", { "aria-hidden": "true", children: "\u2020 " }),
1112
+ securityNote
1113
+ ] }) })
1114
+ ] }) });
1115
+ }
1116
+
1117
+ // src/templates/executive/components/pricing-tiers.tsx
1118
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
1119
+ function ExecPricingTiers({
1120
+ heading = "Simple, transparent pricing",
1121
+ subheading,
1122
+ tiers = [],
1123
+ securityNote,
1124
+ className
1125
+ }) {
1126
+ return /* @__PURE__ */ jsx20("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs14("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-16 md:py-24", children: [
1127
+ /* @__PURE__ */ jsxs14("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-[3px] border-(--color-fg)", children: [
1128
+ /* @__PURE__ */ jsx20("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1129
+ subheading && /* @__PURE__ */ jsx20("p", { className: "md:col-span-4 md:col-start-9 text-base leading-relaxed text-(--color-fg-soft) max-w-[58ch] self-end", children: subheading })
1130
+ ] }),
1131
+ /* @__PURE__ */ jsx20("div", { className: "grid md:grid-cols-2 gap-y-8 md:gap-y-0 pt-10 md:pt-12", children: tiers.map((tier, index) => {
1132
+ const featured = !!tier.featured;
1133
+ return /* @__PURE__ */ jsxs14(
1134
+ "div",
1135
+ {
1136
+ className: cn(
1137
+ "flex flex-col p-7 md:p-10",
1138
+ featured ? "bg-(--color-accent-field) text-(--color-accent-fg) rounded-[2px]" : "border border-(--color-border)"
1139
+ ),
1140
+ children: [
1141
+ /* @__PURE__ */ jsxs14("div", { className: "flex items-baseline justify-between", children: [
1142
+ /* @__PURE__ */ jsx20("h3", { className: cn("text-lg font-semibold", featured ? "text-(--color-accent-fg)" : "text-(--color-fg)"), children: tier.title }),
1143
+ /* @__PURE__ */ jsx20(
1144
+ "span",
1145
+ {
1146
+ className: cn(
1147
+ "exec-figure text-xs tracking-[0.18em] uppercase",
1148
+ featured ? "text-(--color-accent-fg)/60" : "text-(--color-fg-muted)"
1149
+ ),
1150
+ "aria-hidden": "true",
1151
+ children: String(index + 1).padStart(2, "0")
1152
+ }
1153
+ )
1154
+ ] }),
1155
+ /* @__PURE__ */ jsx20(
1156
+ "p",
1157
+ {
1158
+ className: cn(
1159
+ "mt-3 text-sm leading-relaxed max-w-[44ch]",
1160
+ featured ? "text-(--color-accent-fg)/75" : "text-(--color-fg-soft)"
1161
+ ),
1162
+ children: tier.description
1163
+ }
1164
+ ),
1165
+ /* @__PURE__ */ jsxs14("div", { className: "mt-9 flex items-baseline gap-2", children: [
1166
+ /* @__PURE__ */ jsx20(
1167
+ "span",
1168
+ {
1169
+ className: cn(
1170
+ "exec-figure font-halant text-7xl md:text-8xl leading-[0.85]",
1171
+ featured ? "text-(--color-accent-fg)" : "text-(--color-fg)"
1172
+ ),
1173
+ children: tier.price
1174
+ }
1175
+ ),
1176
+ /* @__PURE__ */ jsx20("span", { className: cn("text-sm", featured ? "text-(--color-accent-fg)/60" : "text-(--color-fg-muted)"), children: tier.priceUnit })
1177
+ ] }),
1178
+ /* @__PURE__ */ jsx20("div", { className: "mt-9", children: featured ? /* @__PURE__ */ jsx20(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-surface-raised) w-full sm:w-auto", children: /* @__PURE__ */ jsx20("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) : /* @__PURE__ */ jsx20(ExecButton, { asChild: true, variant: "secondary", className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx20("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) }),
1179
+ /* @__PURE__ */ jsx20("ul", { className: "mt-10 flex-1", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsx20(
1180
+ "li",
1181
+ {
1182
+ className: cn(
1183
+ "py-2.5 text-sm border-t first:border-t-0",
1184
+ featured ? "text-(--color-accent-fg)/90 border-(--color-accent-fg)/20" : "text-(--color-fg) border-(--color-border)"
1185
+ ),
1186
+ children: feature.text
1187
+ },
1188
+ featureIndex
1189
+ )) })
1190
+ ]
1191
+ },
1192
+ index
1193
+ );
1194
+ }) }),
1195
+ securityNote && /* @__PURE__ */ jsx20("div", { className: "mt-10 border-t border-(--color-border-strong) pt-5", children: /* @__PURE__ */ jsxs14("p", { className: "text-xs leading-relaxed text-(--color-fg-muted) max-w-[70ch]", children: [
1196
+ /* @__PURE__ */ jsx20("span", { "aria-hidden": "true", children: "\u2020 " }),
1197
+ securityNote
1198
+ ] }) })
1199
+ ] }) });
1200
+ }
1201
+
1202
+ // src/templates/executive/components/faq.tsx
1203
+ import { Accordion as Accordion2, AccordionContent as AccordionContent2, AccordionItem as AccordionItem2, AccordionTrigger as AccordionTrigger2 } from "@mdxui/primitives";
1204
+ import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
1205
+ function ExecFAQ({ heading = "FAQs", faqs = [], className }) {
1206
+ return /* @__PURE__ */ jsx21("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs15("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-16 md:py-24", children: [
1207
+ /* @__PURE__ */ jsx21("div", { className: "pb-8 border-b-[3px] border-(--color-fg)", children: /* @__PURE__ */ jsx21("h2", { className: "font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }) }),
1208
+ /* @__PURE__ */ jsx21(Accordion2, { type: "single", collapsible: true, children: faqs.map((faq, index) => /* @__PURE__ */ jsxs15(
1209
+ AccordionItem2,
1000
1210
  {
1001
- containerRef,
1002
- fromRef: leftRef,
1003
- toRef: rightRef,
1004
- startYOffset: config.startYOffset,
1005
- endYOffset: config.endYOffset,
1006
- curvature: config.curvature,
1007
- duration: config.duration,
1008
- reverse: config.reverse,
1009
- pathColor: isDark ? "rgba(255, 255, 255, 0.2)" : "rgba(0, 0, 0, 0.2)"
1211
+ value: `item-${index}`,
1212
+ className: "border-b border-(--color-border) rounded-none",
1213
+ children: [
1214
+ /* @__PURE__ */ jsx21(AccordionTrigger2, { className: "hover:no-underline py-6 text-base font-medium text-(--color-fg) gap-6", children: /* @__PURE__ */ jsxs15("span", { className: "flex items-baseline gap-5 text-left", children: [
1215
+ /* @__PURE__ */ jsx21("span", { className: "exec-figure text-xs text-(--color-fg-muted) shrink-0", "aria-hidden": "true", children: String(index + 1).padStart(2, "0") }),
1216
+ faq.question
1217
+ ] }) }),
1218
+ /* @__PURE__ */ jsx21(AccordionContent2, { className: "pb-6 pl-10 text-sm leading-relaxed text-(--color-fg-soft) max-w-[65ch]", children: faq.answer })
1219
+ ]
1010
1220
  },
1011
1221
  index
1012
- ))
1222
+ )) })
1013
1223
  ] }) });
1014
- return /* @__PURE__ */ jsx14("section", { className: cn("pt-10 sm:pt-0 px-8 lg:px-24 bg-background", className), children: /* @__PURE__ */ jsx14("div", { className: cn(maxWidthClasses[maxWidth], "mx-auto"), children: /* @__PURE__ */ jsx14("div", { className: "grid lg:grid-cols-2 gap-1 items-center", children: contentOrder === "left" ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
1015
- content,
1016
- animation
1017
- ] }) : /* @__PURE__ */ jsxs11(Fragment2, { children: [
1018
- animation,
1019
- content
1020
- ] }) }) }) });
1021
1224
  }
1022
1225
 
1023
- // src/view/mapper.ts
1024
- import {
1025
- FaInbox as FaInbox2,
1026
- FaCalendarAlt as FaCalendarAlt2,
1027
- FaListUl as FaListUl2,
1028
- FaFileAlt as FaFileAlt2,
1029
- FaRocket as FaRocket2,
1030
- FaProjectDiagram as FaProjectDiagram2,
1031
- FaBug as FaBug2,
1032
- FaLightbulb as FaLightbulb2,
1033
- FaRegDotCircle
1034
- } from "react-icons/fa";
1035
- var WORKFLOW_ICONS = {
1036
- inbox: FaInbox2,
1037
- calendar: FaCalendarAlt2,
1038
- list: FaListUl2,
1039
- file: FaFileAlt2,
1040
- rocket: FaRocket2,
1041
- project: FaProjectDiagram2,
1042
- bug: FaBug2,
1043
- lightbulb: FaLightbulb2
1044
- };
1045
- function resolveWorkflowIcon(hint) {
1046
- return WORKFLOW_ICONS[hint] ?? FaRegDotCircle;
1047
- }
1048
- function mapWorkflows(workflows) {
1049
- return workflows.map((w) => ({ icon: resolveWorkflowIcon(w.icon), label: w.label }));
1226
+ // src/templates/executive/components/cta.tsx
1227
+ import { HiArrowRight as HiArrowRight3 } from "react-icons/hi";
1228
+ import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
1229
+ function ExecCTA({
1230
+ heading = "Ready to Save 15 Hours Per Week?",
1231
+ subheading,
1232
+ buttons = [{ text: "Get Started", href: "#pricing", variant: "primary", showArrow: true }],
1233
+ className
1234
+ }) {
1235
+ return /* @__PURE__ */ jsx22("section", { className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsx22("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 pb-16 md:pb-24", children: /* @__PURE__ */ jsx22("div", { className: "exec-double-rule pt-10 md:pt-12", children: /* @__PURE__ */ jsx22(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx22("div", { className: "rounded-[2px] bg-(--color-fg) px-8 py-14 md:px-14 md:py-20", children: /* @__PURE__ */ jsxs16("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10 items-end", children: [
1236
+ /* @__PURE__ */ jsxs16("div", { className: "md:col-span-8", children: [
1237
+ /* @__PURE__ */ jsx22("h2", { className: "font-halant text-[clamp(44px,6vw,92px)] text-(--color-surface) max-w-[16ch]", children: heading }),
1238
+ subheading && /* @__PURE__ */ jsx22("p", { className: "exec-serif italic mt-5 text-lg md:text-xl text-(--color-surface)/70", children: subheading })
1239
+ ] }),
1240
+ /* @__PURE__ */ jsx22("div", { className: "md:col-span-4 flex md:justify-end", children: /* @__PURE__ */ jsx22("div", { className: "flex flex-col sm:flex-row gap-3", children: buttons.map(
1241
+ (button, index) => button.variant === "primary" || !button.variant ? /* @__PURE__ */ jsx22(ExecButton, { asChild: true, className: "bg-(--color-accent-field) text-(--color-accent-fg) hover:bg-(--color-accent)", children: /* @__PURE__ */ jsxs16("a", { href: button.href, children: [
1242
+ button.text,
1243
+ button.showArrow && /* @__PURE__ */ jsx22(HiArrowRight3, { className: "w-4 h-4" })
1244
+ ] }) }, index) : /* @__PURE__ */ jsx22(
1245
+ ExecButton,
1246
+ {
1247
+ asChild: true,
1248
+ variant: "secondary",
1249
+ className: "border-(--color-surface)/40 text-(--color-surface) hover:bg-(--color-surface)/10",
1250
+ children: /* @__PURE__ */ jsxs16("a", { href: button.href, children: [
1251
+ button.text,
1252
+ button.showArrow && /* @__PURE__ */ jsx22(HiArrowRight3, { className: "w-4 h-4" })
1253
+ ] })
1254
+ },
1255
+ index
1256
+ )
1257
+ ) }) })
1258
+ ] }) }) }) }) }) });
1050
1259
  }
1051
1260
 
1052
- // src/view/view.tsx
1053
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1054
- function NamedAgentView({ content, theme, mode, brandName, hostname }) {
1055
- const { hero, problem, features, integration, pricing, faq, cta, contact } = content;
1056
- return /* @__PURE__ */ jsx15(DialectShell, { theme, mode, children: /* @__PURE__ */ jsx15("div", { "data-dialect": "named", children: /* @__PURE__ */ jsxs12(
1057
- NeoChrome,
1058
- {
1059
- brandName,
1060
- hostname,
1061
- primaryCta: { text: hero.ctaText, url: hero.ctaHref },
1062
- openInAIPrompt: `Help me decide whether ${brandName} fits my team's workflow`,
1063
- children: [
1064
- /* @__PURE__ */ jsx15(
1065
- Hero,
1066
- {
1067
- badgeEmoji: hero.badgeEmoji,
1068
- badgeText: hero.badgeText,
1069
- badgeHref: hero.badgeHref,
1070
- heading: hero.heading,
1071
- description: hero.description,
1072
- ctaText: hero.ctaText,
1073
- ctaHref: hero.ctaHref,
1074
- rightImageSrc: hero.rightImageSrc,
1075
- rightImageAlt: hero.rightImageAlt,
1076
- showIconOverlay: hero.showIconOverlay,
1077
- marqueeTitle: hero.marqueeTitle,
1078
- marqueeImages: hero.marqueeImages
1079
- }
1080
- ),
1081
- /* @__PURE__ */ jsx15(
1082
- Problem,
1083
- {
1084
- heading: problem.heading,
1085
- workflows: mapWorkflows(problem.workflows),
1086
- subheading: problem.subheading,
1087
- subheadingHighlight: problem.subheadingHighlight
1088
- }
1089
- ),
1090
- /* @__PURE__ */ jsx15(
1091
- Features,
1092
- {
1093
- heading: features.heading,
1094
- description: features.description,
1095
- features: features.features
1096
- }
1097
- ),
1098
- integration && /* @__PURE__ */ jsx15(
1099
- Integration,
1100
- {
1101
- title: integration.title,
1102
- description: integration.description,
1103
- buttonText: integration.buttonText,
1104
- buttonHref: integration.buttonHref,
1105
- leftNode: integration.leftNode,
1106
- rightNode: integration.rightNode
1107
- }
1108
- ),
1109
- pricing.variant === "single" ? /* @__PURE__ */ jsx15(
1110
- Pricing,
1111
- {
1112
- heading: pricing.heading,
1113
- subheading: pricing.subheading,
1114
- price: pricing.price,
1115
- priceUnit: pricing.priceUnit,
1116
- trialText: pricing.trialText,
1117
- ctaText: pricing.ctaText,
1118
- ctaHref: pricing.ctaHref,
1119
- featuresHeading: pricing.featuresHeading,
1120
- features: pricing.features,
1121
- securityNote: pricing.securityNote
1122
- }
1123
- ) : /* @__PURE__ */ jsx15(
1124
- PricingTiers,
1125
- {
1126
- heading: pricing.heading,
1127
- subheading: pricing.subheading,
1128
- tiers: pricing.tiers,
1129
- securityNote: pricing.securityNote
1130
- }
1131
- ),
1132
- /* @__PURE__ */ jsx15(FAQ, { heading: faq.heading, faqs: faq.faqs }),
1133
- /* @__PURE__ */ jsx15(CTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons }),
1134
- contact && /* @__PURE__ */ jsx15(
1135
- Contact,
1261
+ // src/templates/executive/components/footer.tsx
1262
+ import Link4 from "next/link";
1263
+ import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
1264
+ function ExecFooter({
1265
+ logo = "Priya",
1266
+ description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
1267
+ quickLinks = [
1268
+ { label: "Pricing", href: "/#pricing" },
1269
+ { label: "How it works", href: "/#features" },
1270
+ { label: "Contact", href: "/contact" }
1271
+ ],
1272
+ socialLinks = [
1273
+ { label: "GitHub", href: "https://github.com" },
1274
+ { label: "npm", href: "https://npmjs.com" },
1275
+ { label: "X", href: "https://x.com/dotdo_ai" }
1276
+ ],
1277
+ copyrightText = "Priya.do \xA9 2025. All rights reserved.",
1278
+ className
1279
+ }) {
1280
+ return /* @__PURE__ */ jsx23("footer", { className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsx23("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 pb-12", children: /* @__PURE__ */ jsxs17("div", { className: "exec-double-rule pt-10", children: [
1281
+ /* @__PURE__ */ jsxs17("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10", children: [
1282
+ /* @__PURE__ */ jsxs17("div", { className: "md:col-span-6", children: [
1283
+ /* @__PURE__ */ jsx23(Link4, { href: "/", className: "inline-block", children: /* @__PURE__ */ jsx23("span", { className: "exec-serif italic text-4xl md:text-5xl text-(--color-fg)", children: logo }) }),
1284
+ /* @__PURE__ */ jsxs17("div", { className: "mt-4 flex items-baseline gap-3 border-t border-(--color-border) pt-3 max-w-[44ch]", children: [
1285
+ /* @__PURE__ */ jsx23("span", { className: "inline-block size-[7px] shrink-0 translate-y-[-1px] bg-(--color-accent-strong)", "aria-hidden": "true" }),
1286
+ /* @__PURE__ */ jsx23("p", { className: "text-sm leading-relaxed text-(--color-fg-muted)", children: description })
1287
+ ] })
1288
+ ] }),
1289
+ /* @__PURE__ */ jsxs17("div", { className: "md:col-span-3", children: [
1290
+ /* @__PURE__ */ jsx23("p", { className: "text-xs font-medium tracking-[0.18em] uppercase text-(--color-fg-muted)", children: "Index" }),
1291
+ /* @__PURE__ */ jsx23("ul", { className: "mt-4 space-y-2", children: quickLinks.map((link) => /* @__PURE__ */ jsx23("li", { children: /* @__PURE__ */ jsx23(Link4, { href: link.href, className: "text-sm text-(--color-fg-soft) hover:text-(--color-fg) transition-colors", children: link.label }) }, link.label)) })
1292
+ ] }),
1293
+ /* @__PURE__ */ jsxs17("div", { className: "md:col-span-3", children: [
1294
+ /* @__PURE__ */ jsx23("p", { className: "text-xs font-medium tracking-[0.18em] uppercase text-(--color-fg-muted)", children: "Elsewhere" }),
1295
+ /* @__PURE__ */ jsx23("ul", { className: "mt-4 space-y-2", children: socialLinks.map((link) => /* @__PURE__ */ jsx23("li", { children: /* @__PURE__ */ jsx23(
1296
+ Link4,
1136
1297
  {
1137
- heading: contact.heading,
1138
- subheading: contact.subheading,
1139
- fields: contact.fields,
1140
- submitButtonText: contact.submitButtonText
1298
+ href: link.href,
1299
+ target: "_blank",
1300
+ rel: "noopener noreferrer",
1301
+ className: "text-sm text-(--color-fg-soft) hover:text-(--color-fg) transition-colors",
1302
+ children: link.label
1141
1303
  }
1142
- )
1143
- ]
1144
- }
1145
- ) }) });
1304
+ ) }, link.label)) })
1305
+ ] })
1306
+ ] }),
1307
+ /* @__PURE__ */ jsx23("div", { className: "mt-12 pt-5 border-t border-(--color-border)", children: /* @__PURE__ */ jsx23("p", { className: "text-xs text-(--color-fg-muted)", children: copyrightText }) })
1308
+ ] }) }) });
1309
+ }
1310
+
1311
+ // src/templates/executive/view.tsx
1312
+ import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
1313
+ function ExecutiveView({ content, brandName, hostname }) {
1314
+ const { hero, features, pricing, faq, cta } = content;
1315
+ return /* @__PURE__ */ jsxs18(Fragment3, { children: [
1316
+ /* @__PURE__ */ jsx24(ExecNavigation, { logo: brandName }),
1317
+ /* @__PURE__ */ jsxs18("main", { children: [
1318
+ /* @__PURE__ */ jsx24(
1319
+ ExecHero,
1320
+ {
1321
+ heading: hero.heading,
1322
+ description: hero.description,
1323
+ ctaText: hero.ctaText,
1324
+ ctaHref: hero.ctaHref,
1325
+ secondaryCtaText: hero.secondaryCtaText,
1326
+ secondaryCtaHref: hero.secondaryCtaHref,
1327
+ marqueeTitle: hero.marqueeTitle,
1328
+ marqueeImages: hero.marqueeImages
1329
+ }
1330
+ ),
1331
+ /* @__PURE__ */ jsx24(
1332
+ ExecFeatures,
1333
+ {
1334
+ heading: features.heading,
1335
+ description: features.description,
1336
+ features: features.features
1337
+ }
1338
+ ),
1339
+ pricing.variant === "single" ? /* @__PURE__ */ jsx24(
1340
+ ExecPricing,
1341
+ {
1342
+ heading: pricing.heading,
1343
+ subheading: pricing.subheading,
1344
+ price: pricing.price,
1345
+ priceUnit: pricing.priceUnit,
1346
+ trialText: pricing.trialText,
1347
+ ctaText: pricing.ctaText,
1348
+ ctaHref: pricing.ctaHref,
1349
+ featuresHeading: pricing.featuresHeading,
1350
+ features: pricing.features,
1351
+ securityNote: pricing.securityNote
1352
+ }
1353
+ ) : /* @__PURE__ */ jsx24(
1354
+ ExecPricingTiers,
1355
+ {
1356
+ heading: pricing.heading,
1357
+ subheading: pricing.subheading,
1358
+ tiers: pricing.tiers,
1359
+ securityNote: pricing.securityNote
1360
+ }
1361
+ ),
1362
+ /* @__PURE__ */ jsx24(ExecFAQ, { heading: faq.heading, faqs: faq.faqs }),
1363
+ /* @__PURE__ */ jsx24(ExecCTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons })
1364
+ ] }),
1365
+ /* @__PURE__ */ jsx24(
1366
+ ExecFooter,
1367
+ {
1368
+ logo: brandName,
1369
+ description: hero.description,
1370
+ copyrightText: `${hostname} \xA9 ${(/* @__PURE__ */ new Date()).getFullYear()}. All rights reserved.`
1371
+ }
1372
+ )
1373
+ ] });
1374
+ }
1375
+
1376
+ // src/view/view.tsx
1377
+ import { jsx as jsx25 } from "react/jsx-runtime";
1378
+ function NamedAgentView({ content, theme, mode, brandName, hostname, template = "studio" }) {
1379
+ return (
1380
+ // texture={false}: DialectShell's NoiseTexture grain defaults on for the
1381
+ // agent dialects, but the named baseline renders NO overlay — the fixed
1382
+ // full-viewport speckle layer sits over every pixel and subtly shifts the
1383
+ // whole palette off the baseline values.
1384
+ /* @__PURE__ */ jsx25(DialectShell, { theme, mode, texture: false, children: /* @__PURE__ */ jsx25("div", { "data-dialect": "named", "data-template": template, children: template === "executive" ? /* @__PURE__ */ jsx25(ExecutiveView, { content, brandName, hostname }) : /* @__PURE__ */ jsx25(StudioView, { content, brandName, hostname }) }) })
1385
+ );
1146
1386
  }
1147
1387
  var view_default = NamedAgentView;
1148
1388
  export {
1149
1389
  NamedAgentView,
1150
- view_default as default,
1151
- mapWorkflows,
1152
- resolveWorkflowIcon
1390
+ view_default as default
1153
1391
  };
1154
1392
  //# sourceMappingURL=index.js.map