@mdxui/named 7.0.0 → 8.1.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,80 +612,1372 @@ 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/view/view.tsx
606
- import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
607
- function NamedAgentView({ content, theme, mode, brandName, hostname }) {
608
- const { hero, features, pricing, faq, cta } = content;
609
- return /* @__PURE__ */ jsx10(DialectShell, { theme, mode, children: /* @__PURE__ */ jsx10("div", { "data-dialect": "named", children: /* @__PURE__ */ jsxs7(
610
- NeoChrome,
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
645
+ }) {
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",
611
671
  {
612
- brandName,
613
- hostname,
614
- primaryCta: { text: hero.ctaText, url: hero.ctaHref },
615
- openInAIPrompt: `Help me decide whether ${brandName} fits my team's workflow`,
616
- children: [
617
- /* @__PURE__ */ jsx10(
618
- Hero,
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,
619
687
  {
620
- badgeEmoji: hero.badgeEmoji,
621
- badgeText: hero.badgeText,
622
- badgeHref: hero.badgeHref,
623
- heading: hero.heading,
624
- description: hero.description,
625
- ctaText: hero.ctaText,
626
- ctaHref: hero.ctaHref,
627
- rightImageSrc: hero.rightImageSrc,
628
- rightImageAlt: hero.rightImageAlt,
629
- showIconOverlay: hero.showIconOverlay,
630
- marqueeTitle: hero.marqueeTitle,
631
- marqueeImages: hero.marqueeImages
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
+ ] }) })
632
697
  }
698
+ ) })
699
+ ] })
700
+ }
701
+ );
702
+ }
703
+
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
633
722
  ),
634
- /* @__PURE__ */ jsx10(
635
- Features,
723
+ ref,
724
+ ...props
725
+ }
726
+ );
727
+ }
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.",
752
+ className
753
+ }) {
754
+ const handleEmailSubmit = (e) => {
755
+ e.preventDefault();
756
+ const form = e.currentTarget;
757
+ const formData = new FormData(form);
758
+ const email = formData.get("email");
759
+ if (onEmailSubmit) {
760
+ onEmailSubmit(email);
761
+ }
762
+ form.reset();
763
+ };
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,
878
+ {
879
+ logo: brandName,
880
+ description: hero.description,
881
+ copyrightText: `${hostname} \xA9 ${(/* @__PURE__ */ new Date()).getFullYear()}. All rights reserved.`
882
+ }
883
+ )
884
+ ] });
885
+ }
886
+
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";
891
+
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
+ });
915
+ }
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",
944
+ {
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
959
+ },
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
981
+ },
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
+ ] })
987
+ }
988
+ );
989
+ }
990
+
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
1004
+ }) {
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
+ ] });
1032
+ }
1033
+
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
1041
+ }) {
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 })
1088
+ ] }),
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,
1210
+ {
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
+ ]
1220
+ },
1221
+ index
1222
+ )) })
1223
+ ] }) });
1224
+ }
1225
+
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
+ ] }) }) }) }) }) });
1259
+ }
1260
+
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,
636
1297
  {
637
- heading: features.heading,
638
- description: features.description,
639
- features: features.features
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
640
1303
  }
641
- ),
642
- pricing.variant === "single" ? /* @__PURE__ */ jsx10(
643
- Pricing,
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/templates/gallery/components/navigation.tsx
1377
+ import { useState as useState4, useEffect as useEffect4 } from "react";
1378
+ import Link5 from "next/link";
1379
+ import { Menu as Menu3, X as X3 } from "lucide-react";
1380
+
1381
+ // src/templates/gallery/ui/button.tsx
1382
+ import * as React4 from "react";
1383
+ import { jsx as jsx25 } from "react/jsx-runtime";
1384
+ var baseClasses3 = "inline-flex items-center justify-center gap-2 whitespace-nowrap uppercase tracking-[0.14em] 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-3.5 [&_svg]:shrink-0 cursor-pointer rounded-[4px]";
1385
+ var variantClasses3 = {
1386
+ default: "bg-(--color-btn-primary-to) text-(--color-btn-primary-fg) hover:bg-(--color-accent)",
1387
+ bone: "bg-(--color-placard) text-(--color-accent-field) hover:bg-(--color-accent-fg)",
1388
+ secondary: "bg-transparent text-(--color-fg) border border-(--color-border-strong) hover:bg-(--color-hover)"
1389
+ };
1390
+ var sizeClasses3 = {
1391
+ default: "h-11 px-6 text-xs",
1392
+ sm: "h-9 px-4 text-[11px]"
1393
+ };
1394
+ var GalButton = React4.forwardRef(
1395
+ ({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
1396
+ const classes = cn(baseClasses3, variantClasses3[variant], sizeClasses3[size], className);
1397
+ if (asChild && React4.isValidElement(children)) {
1398
+ const child = children;
1399
+ return React4.cloneElement(child, {
1400
+ ...props,
1401
+ className: cn(classes, child.props.className)
1402
+ });
1403
+ }
1404
+ return /* @__PURE__ */ jsx25("button", { ref, className: classes, ...props, children });
1405
+ }
1406
+ );
1407
+ GalButton.displayName = "GalButton";
1408
+
1409
+ // src/templates/gallery/ui/placard.tsx
1410
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1411
+ function GalLabel({ children, className }) {
1412
+ return /* @__PURE__ */ jsx26("span", { className: cn("gal-label block text-(--color-fg-muted)", className), children });
1413
+ }
1414
+ function GalDiamond({ className }) {
1415
+ return /* @__PURE__ */ jsx26(
1416
+ "span",
1417
+ {
1418
+ className: cn("inline-block size-[5px] rotate-45 bg-(--color-accent-strong)", className),
1419
+ "aria-hidden": "true"
1420
+ }
1421
+ );
1422
+ }
1423
+ function GalSectionHead({ heading, statement, className }) {
1424
+ return /* @__PURE__ */ jsxs19("div", { className: cn("grid gap-y-8 md:grid-cols-12 md:gap-x-6", className), children: [
1425
+ /* @__PURE__ */ jsx26("div", { className: "md:col-span-7", children: /* @__PURE__ */ jsx26("h2", { className: "text-[clamp(40px,5.5vw,76px)] text-(--color-fg)", children: heading }) }),
1426
+ statement && /* @__PURE__ */ jsx26("div", { className: "md:col-span-4 md:col-start-9 md:self-end", children: /* @__PURE__ */ jsx26("p", { className: "max-w-[40ch] text-base leading-relaxed text-(--color-fg-soft)", children: statement }) })
1427
+ ] });
1428
+ }
1429
+
1430
+ // src/templates/gallery/components/navigation.tsx
1431
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1432
+ function GalNavigation({
1433
+ logo = "Priya",
1434
+ logoHref = "/",
1435
+ links = [
1436
+ { label: "Features", href: "#features" },
1437
+ { label: "Pricing", href: "#pricing" },
1438
+ { label: "FAQ", href: "#faq" }
1439
+ ],
1440
+ ctaText = "Hire me",
1441
+ ctaHref = "#pricing",
1442
+ className
1443
+ }) {
1444
+ const [mobileMenuOpen, setMobileMenuOpen] = useState4(false);
1445
+ const [isScrolled, setIsScrolled] = useState4(false);
1446
+ useEffect4(() => {
1447
+ const handleScroll = () => setIsScrolled(window.scrollY > 10);
1448
+ window.addEventListener("scroll", handleScroll);
1449
+ return () => window.removeEventListener("scroll", handleScroll);
1450
+ }, []);
1451
+ return /* @__PURE__ */ jsx27(
1452
+ "nav",
1453
+ {
1454
+ className: cn(
1455
+ "sticky top-0 z-50 w-full border-b bg-(--color-surface) transition-[border-color] duration-200",
1456
+ isScrolled ? "border-(--color-border-strong)" : "border-(--color-border)",
1457
+ className
1458
+ ),
1459
+ children: /* @__PURE__ */ jsxs20("div", { className: "mx-auto max-w-6xl px-6 py-5 lg:px-10", children: [
1460
+ /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between", children: [
1461
+ /* @__PURE__ */ jsxs20(Link5, { href: logoHref, className: "flex items-center gap-2.5", children: [
1462
+ /* @__PURE__ */ jsx27("span", { className: "gal-display text-xl font-[560] tracking-[-0.01em] text-(--color-fg)", children: logo }),
1463
+ /* @__PURE__ */ jsx27(GalDiamond, {})
1464
+ ] }),
1465
+ /* @__PURE__ */ jsx27("div", { className: "hidden items-center gap-10 lg:flex", children: links.map((link) => /* @__PURE__ */ jsx27(
1466
+ "a",
1467
+ {
1468
+ href: link.href,
1469
+ className: "gal-label text-(--color-fg-muted) transition-colors hover:text-(--color-fg)",
1470
+ children: link.label
1471
+ },
1472
+ link.href
1473
+ )) }),
1474
+ ctaText && ctaHref && /* @__PURE__ */ jsx27("div", { className: "hidden items-center lg:flex", children: /* @__PURE__ */ jsx27(GalButton, { asChild: true, variant: "secondary", size: "sm", children: /* @__PURE__ */ jsx27("a", { href: ctaHref, children: ctaText }) }) }),
1475
+ /* @__PURE__ */ jsx27(
1476
+ "button",
1477
+ {
1478
+ className: "p-2 text-(--color-fg) lg:hidden",
1479
+ onClick: () => setMobileMenuOpen(!mobileMenuOpen),
1480
+ "aria-label": "Toggle menu",
1481
+ children: mobileMenuOpen ? /* @__PURE__ */ jsx27(X3, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx27(Menu3, { className: "h-5 w-5" })
1482
+ }
1483
+ )
1484
+ ] }),
1485
+ mobileMenuOpen && /* @__PURE__ */ jsx27("div", { className: "mt-5 border-t border-(--color-border) lg:hidden", children: /* @__PURE__ */ jsxs20("div", { className: "flex flex-col py-2", children: [
1486
+ links.map((link) => /* @__PURE__ */ jsx27(
1487
+ "a",
1488
+ {
1489
+ href: link.href,
1490
+ className: "gal-label border-b border-(--color-border) py-4 text-(--color-fg) last:border-b-0",
1491
+ onClick: () => setMobileMenuOpen(false),
1492
+ children: link.label
1493
+ },
1494
+ link.href
1495
+ )),
1496
+ ctaText && ctaHref && /* @__PURE__ */ jsx27(
1497
+ GalButton,
1498
+ {
1499
+ asChild: true,
1500
+ variant: "secondary",
1501
+ size: "sm",
1502
+ className: "mt-4 self-start",
1503
+ onClick: () => setMobileMenuOpen(false),
1504
+ children: /* @__PURE__ */ jsx27("a", { href: ctaHref, children: ctaText })
1505
+ }
1506
+ )
1507
+ ] }) })
1508
+ ] })
1509
+ }
1510
+ );
1511
+ }
1512
+
1513
+ // src/templates/gallery/components/hero.tsx
1514
+ import { HiArrowRight as HiArrowRight4 } from "react-icons/hi";
1515
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1516
+ function GalHero({
1517
+ presenter = "Priya",
1518
+ badgeText,
1519
+ heading = "Your AI Product Manager for GitHub",
1520
+ description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
1521
+ ctaText = "Get Started",
1522
+ ctaHref = "#pricing",
1523
+ secondaryCtaText,
1524
+ secondaryCtaHref,
1525
+ marqueeTitle = "Tools I work with",
1526
+ marqueeImages = [],
1527
+ className
1528
+ }) {
1529
+ const tools = marqueeImages.filter(
1530
+ (s) => !/^(https?:)?\/\//i.test(s.trim()) && !s.trim().startsWith("data:")
1531
+ );
1532
+ return /* @__PURE__ */ jsxs21("section", { className: cn("gal-wash bg-(--color-surface)", className), children: [
1533
+ /* @__PURE__ */ jsxs21("div", { className: "mx-auto max-w-6xl px-6 lg:px-10", children: [
1534
+ /* @__PURE__ */ jsx28(ScrollReveal, { direction: "none", trigger: "mount", children: /* @__PURE__ */ jsx28("div", { className: "pt-8 md:pt-16 md:text-center", children: /* @__PURE__ */ jsx28(GalLabel, { className: "text-(--color-fg)", children: badgeText ?? presenter }) }) }),
1535
+ /* @__PURE__ */ jsx28(ScrollReveal, { direction: "up", trigger: "mount", children: /* @__PURE__ */ jsx28("h1", { className: "max-w-[16ch] pt-8 text-[clamp(46px,6.5vw,96px)] text-(--color-fg) md:mx-auto md:pt-14 md:text-center", children: heading }) }),
1536
+ /* @__PURE__ */ jsx28("div", { className: "pt-7 pb-16 md:pt-12 md:pb-32", children: /* @__PURE__ */ jsxs21(ScrollReveal, { direction: "up", delay: 0.12, trigger: "mount", children: [
1537
+ /* @__PURE__ */ jsx28("p", { className: "max-w-[52ch] text-lg leading-relaxed text-(--color-fg-soft) md:mx-auto md:text-center md:text-xl", children: description }),
1538
+ /* @__PURE__ */ jsxs21("div", { className: "mt-9 flex flex-col gap-3 sm:flex-row md:justify-center", children: [
1539
+ /* @__PURE__ */ jsx28(GalButton, { asChild: true, children: /* @__PURE__ */ jsxs21("a", { href: ctaHref, children: [
1540
+ ctaText,
1541
+ /* @__PURE__ */ jsx28(HiArrowRight4, { className: "h-3.5 w-3.5" })
1542
+ ] }) }),
1543
+ secondaryCtaText && secondaryCtaHref && /* @__PURE__ */ jsx28(GalButton, { asChild: true, variant: "secondary", children: /* @__PURE__ */ jsx28("a", { href: secondaryCtaHref, children: secondaryCtaText }) })
1544
+ ] })
1545
+ ] }) })
1546
+ ] }),
1547
+ tools.length > 0 && /* @__PURE__ */ jsx28("div", { className: "border-t border-b border-(--color-border)", "aria-label": marqueeTitle, children: /* @__PURE__ */ jsx28(Marquee, { className: "py-3.5 [--duration:48s] [--gap:3rem]", children: tools.map((tool, i) => /* @__PURE__ */ jsxs21(
1548
+ "span",
1549
+ {
1550
+ className: "gal-label flex items-center gap-x-12 whitespace-nowrap text-(--color-fg-muted)",
1551
+ children: [
1552
+ brandLabel(tool),
1553
+ /* @__PURE__ */ jsx28(GalDiamond, { className: "size-1" })
1554
+ ]
1555
+ },
1556
+ `${tool}-${i}`
1557
+ )) }) })
1558
+ ] });
1559
+ }
1560
+
1561
+ // src/templates/gallery/components/features.tsx
1562
+ import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1563
+ var catalogueNo = (badge) => {
1564
+ const n = parseInt(badge, 10);
1565
+ return Number.isNaN(n) ? badge : String(n);
1566
+ };
1567
+ function GalFeatures({
1568
+ heading = "How It Works",
1569
+ description,
1570
+ features = [],
1571
+ className
1572
+ }) {
1573
+ return /* @__PURE__ */ jsx29("section", { id: "features", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs22("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1574
+ /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx29(
1575
+ GalSectionHead,
1576
+ {
1577
+ heading,
1578
+ statement: description
1579
+ }
1580
+ ) }),
1581
+ /* @__PURE__ */ jsx29("div", { className: "mt-24 space-y-28 md:mt-36 md:space-y-44", children: features.map((feature, index) => {
1582
+ const reversed = index % 2 === 1;
1583
+ const language = feature.language ?? "typescript";
1584
+ return /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs22("article", { className: "grid items-center gap-y-10 md:grid-cols-12 md:gap-x-10", children: [
1585
+ feature.code && /* @__PURE__ */ jsx29("div", { className: cn("md:col-span-7", reversed && "md:order-2"), children: /* @__PURE__ */ jsx29("div", { className: "rounded-[2px] md:border md:border-(--color-vitrine-border) md:bg-(--color-placard) md:p-1.5 md:shadow-(--shadow-lg)", children: /* @__PURE__ */ jsx29(
1586
+ CodeWindow,
644
1587
  {
645
- heading: pricing.heading,
646
- subheading: pricing.subheading,
647
- price: pricing.price,
648
- priceUnit: pricing.priceUnit,
649
- trialText: pricing.trialText,
650
- ctaText: pricing.ctaText,
651
- ctaHref: pricing.ctaHref,
652
- featuresHeading: pricing.featuresHeading,
653
- features: pricing.features,
654
- securityNote: pricing.securityNote
1588
+ code: feature.code,
1589
+ language,
1590
+ className: "rounded-[2px] bg-(--color-vitrine) p-6 text-left text-xs leading-relaxed text-(--color-vitrine-fg) md:p-8"
655
1591
  }
656
- ) : /* @__PURE__ */ jsx10(
657
- PricingTiers,
1592
+ ) }) }),
1593
+ /* @__PURE__ */ jsx29(
1594
+ "div",
658
1595
  {
659
- heading: pricing.heading,
660
- subheading: pricing.subheading,
661
- tiers: pricing.tiers,
662
- securityNote: pricing.securityNote
1596
+ className: cn(
1597
+ feature.code ? "md:col-span-5" : "md:col-span-7",
1598
+ reversed && "md:order-1"
1599
+ ),
1600
+ children: /* @__PURE__ */ jsxs22("div", { className: "rounded-[4px] border border-(--color-placard-border) bg-(--color-placard) p-7 text-(--color-placard-fg) shadow-(--shadow-md) md:p-9", children: [
1601
+ /* @__PURE__ */ jsx29("div", { className: "border-b border-(--color-placard-border) pb-4", children: /* @__PURE__ */ jsxs22("span", { className: "gal-no text-2xl text-(--color-accent-strong)", children: [
1602
+ "No. ",
1603
+ catalogueNo(feature.badge)
1604
+ ] }) }),
1605
+ /* @__PURE__ */ jsx29("h3", { className: "mt-6 text-2xl font-semibold tracking-[-0.01em] text-(--color-placard-fg)", children: feature.title }),
1606
+ /* @__PURE__ */ jsx29("p", { className: "mt-5 text-sm leading-relaxed text-(--color-placard-soft)", children: feature.description }),
1607
+ feature.items.length > 0 && /* @__PURE__ */ jsx29("ul", { className: "mt-7 space-y-3 border-t border-(--color-placard-border) pt-5", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs22(
1608
+ "li",
1609
+ {
1610
+ className: "flex items-baseline gap-3 text-sm text-(--color-placard-fg)",
1611
+ children: [
1612
+ /* @__PURE__ */ jsx29(GalDiamond, { className: "shrink-0 -translate-y-px" }),
1613
+ item.text
1614
+ ]
1615
+ },
1616
+ itemIndex
1617
+ )) })
1618
+ ] })
663
1619
  }
664
- ),
665
- /* @__PURE__ */ jsx10(FAQ, { heading: faq.heading, faqs: faq.faqs }),
666
- /* @__PURE__ */ jsx10(CTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons })
667
- ]
668
- }
669
- ) }) });
1620
+ )
1621
+ ] }) }, index);
1622
+ }) })
1623
+ ] }) });
1624
+ }
1625
+
1626
+ // src/templates/gallery/components/pricing.tsx
1627
+ import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1628
+ function GalPricing({
1629
+ heading = "Simple, transparent pricing",
1630
+ subheading,
1631
+ price = "$16",
1632
+ priceUnit = "/ month",
1633
+ trialText,
1634
+ ctaText = "Get Started",
1635
+ ctaHref = "#contact",
1636
+ featuresHeading = "What's included",
1637
+ features = [],
1638
+ securityNote,
1639
+ className
1640
+ }) {
1641
+ return /* @__PURE__ */ jsx30("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1642
+ /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30(GalSectionHead, { heading, statement: subheading }) }),
1643
+ /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30("div", { className: "mt-20 rounded-[4px] border border-(--color-placard-border) bg-(--color-placard) p-8 text-(--color-placard-fg) shadow-(--shadow-md) md:mt-28 md:p-12", children: /* @__PURE__ */ jsxs23("div", { className: "grid gap-y-10 md:grid-cols-12 md:gap-x-10", children: [
1644
+ /* @__PURE__ */ jsxs23("div", { className: "md:col-span-5", children: [
1645
+ /* @__PURE__ */ jsxs23("div", { className: "flex items-baseline gap-2.5", children: [
1646
+ /* @__PURE__ */ jsx30("span", { className: "gal-display text-7xl font-[560] tracking-[-0.02em] text-(--color-placard-fg) md:text-8xl", children: price }),
1647
+ /* @__PURE__ */ jsx30("span", { className: "text-sm text-(--color-placard-muted)", children: priceUnit })
1648
+ ] }),
1649
+ trialText && /* @__PURE__ */ jsx30("p", { className: "mt-4 text-sm text-(--color-placard-soft)", children: trialText }),
1650
+ /* @__PURE__ */ jsx30("div", { className: "mt-9", children: /* @__PURE__ */ jsx30(GalButton, { asChild: true, children: /* @__PURE__ */ jsx30("a", { href: ctaHref, children: ctaText }) }) })
1651
+ ] }),
1652
+ /* @__PURE__ */ jsxs23("div", { className: "md:col-span-6 md:col-start-7", children: [
1653
+ /* @__PURE__ */ jsx30(GalLabel, { className: "text-(--color-placard-muted)", children: featuresHeading }),
1654
+ /* @__PURE__ */ jsx30("ul", { className: "mt-5 columns-1 gap-x-10 sm:columns-2", children: features.map((feature, index) => /* @__PURE__ */ jsx30(
1655
+ "li",
1656
+ {
1657
+ className: "break-inside-avoid border-t border-(--color-placard-border) py-3 text-sm text-(--color-placard-fg)",
1658
+ children: feature.text
1659
+ },
1660
+ index
1661
+ )) })
1662
+ ] })
1663
+ ] }) }) }),
1664
+ securityNote && /* @__PURE__ */ jsx30("div", { className: "mt-14 border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx30("p", { className: "max-w-[70ch] text-xs leading-relaxed text-(--color-fg-muted)", children: securityNote }) })
1665
+ ] }) });
1666
+ }
1667
+
1668
+ // src/templates/gallery/components/pricing-tiers.tsx
1669
+ import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1670
+ function GalPricingTiers({
1671
+ heading = "Simple, transparent pricing",
1672
+ subheading,
1673
+ tiers = [],
1674
+ securityNote,
1675
+ className
1676
+ }) {
1677
+ return /* @__PURE__ */ jsx31("section", { id: "pricing", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs24("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1678
+ /* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx31(
1679
+ GalSectionHead,
1680
+ {
1681
+ heading,
1682
+ statement: subheading
1683
+ }
1684
+ ) }),
1685
+ /* @__PURE__ */ jsx31("div", { className: "mt-20 grid gap-8 md:mt-28 md:grid-cols-2", children: tiers.map((tier, index) => {
1686
+ const featured = !!tier.featured;
1687
+ return /* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", delay: index * 0.06, children: /* @__PURE__ */ jsxs24(
1688
+ "div",
1689
+ {
1690
+ className: cn(
1691
+ "flex h-full flex-col rounded-[4px] p-8 md:p-10",
1692
+ featured ? "bg-(--color-accent-field) text-(--color-accent-fg) shadow-(--shadow-xl)" : "border border-(--color-placard-border) bg-(--color-placard) text-(--color-placard-fg) shadow-(--shadow-md)"
1693
+ ),
1694
+ children: [
1695
+ /* @__PURE__ */ jsx31(
1696
+ "h3",
1697
+ {
1698
+ className: cn(
1699
+ "text-2xl font-semibold tracking-[-0.01em]",
1700
+ featured ? "text-(--color-accent-fg)" : "text-(--color-placard-fg)"
1701
+ ),
1702
+ children: tier.title
1703
+ }
1704
+ ),
1705
+ /* @__PURE__ */ jsx31(
1706
+ "p",
1707
+ {
1708
+ className: cn(
1709
+ "mt-3 max-w-[44ch] text-sm leading-relaxed",
1710
+ featured ? "text-(--color-accent-fg)/80" : "text-(--color-placard-soft)"
1711
+ ),
1712
+ children: tier.description
1713
+ }
1714
+ ),
1715
+ /* @__PURE__ */ jsxs24("div", { className: "mt-10 flex items-baseline gap-2.5", children: [
1716
+ /* @__PURE__ */ jsx31(
1717
+ "span",
1718
+ {
1719
+ className: cn(
1720
+ "gal-display text-7xl font-[560] tracking-[-0.02em] md:text-8xl",
1721
+ featured ? "text-(--color-accent-fg)" : "text-(--color-placard-fg)"
1722
+ ),
1723
+ children: tier.price
1724
+ }
1725
+ ),
1726
+ /* @__PURE__ */ jsx31(
1727
+ "span",
1728
+ {
1729
+ className: cn(
1730
+ "text-sm",
1731
+ featured ? "text-(--color-accent-fg)/70" : "text-(--color-placard-muted)"
1732
+ ),
1733
+ children: tier.priceUnit
1734
+ }
1735
+ )
1736
+ ] }),
1737
+ /* @__PURE__ */ jsx31("div", { className: "mt-9", children: tier.ctaVariant === "secondary" ? /* @__PURE__ */ jsx31(
1738
+ GalButton,
1739
+ {
1740
+ asChild: true,
1741
+ variant: "secondary",
1742
+ className: cn(
1743
+ "w-full sm:w-auto",
1744
+ featured ? "border-(--color-accent-fg)/40 text-(--color-accent-fg) hover:bg-(--color-accent-fg)/10" : "border-(--color-placard-fg)/35 text-(--color-placard-fg) hover:bg-(--color-placard-fg)/5"
1745
+ ),
1746
+ children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText })
1747
+ }
1748
+ ) : featured ? /* @__PURE__ */ jsx31(GalButton, { asChild: true, variant: "bone", className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) : /* @__PURE__ */ jsx31(GalButton, { asChild: true, className: "w-full sm:w-auto", children: /* @__PURE__ */ jsx31("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }) }),
1749
+ /* @__PURE__ */ jsx31("ul", { className: "mt-10 flex-1", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsx31(
1750
+ "li",
1751
+ {
1752
+ className: cn(
1753
+ "border-t py-3 text-sm first:border-t-0",
1754
+ featured ? "border-(--color-accent-fg)/20 text-(--color-accent-fg)/90" : "border-(--color-placard-border) text-(--color-placard-fg)"
1755
+ ),
1756
+ children: feature.text
1757
+ },
1758
+ featureIndex
1759
+ )) })
1760
+ ]
1761
+ }
1762
+ ) }, index);
1763
+ }) }),
1764
+ securityNote && /* @__PURE__ */ jsx31("div", { className: "mt-14 border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx31("p", { className: "max-w-[70ch] text-xs leading-relaxed text-(--color-fg-muted)", children: securityNote }) })
1765
+ ] }) });
1766
+ }
1767
+
1768
+ // src/templates/gallery/components/faq.tsx
1769
+ import {
1770
+ Accordion as Accordion3,
1771
+ AccordionContent as AccordionContent3,
1772
+ AccordionItem as AccordionItem3,
1773
+ AccordionTrigger as AccordionTrigger3
1774
+ } from "@mdxui/primitives";
1775
+ import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1776
+ function GalFAQ({ heading = "FAQs", faqs = [], className }) {
1777
+ return /* @__PURE__ */ jsx32("section", { id: "faq", className: cn("bg-(--color-surface)", className), children: /* @__PURE__ */ jsxs25("div", { className: "mx-auto max-w-6xl px-6 py-28 md:py-40 lg:px-10", children: [
1778
+ /* @__PURE__ */ jsx32(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx32(
1779
+ GalSectionHead,
1780
+ {
1781
+ heading
1782
+ }
1783
+ ) }),
1784
+ /* @__PURE__ */ jsx32(Accordion3, { type: "single", collapsible: true, className: "mt-16 border-t border-(--color-border) md:mt-24", children: faqs.map((faq, index) => /* @__PURE__ */ jsxs25(
1785
+ AccordionItem3,
1786
+ {
1787
+ value: `item-${index}`,
1788
+ className: "rounded-none border-b border-(--color-border)",
1789
+ children: [
1790
+ /* @__PURE__ */ jsx32(AccordionTrigger3, { className: "gap-6 py-7 text-base font-medium text-(--color-fg) hover:no-underline", children: /* @__PURE__ */ jsxs25("span", { className: "flex items-baseline gap-6 text-left", children: [
1791
+ /* @__PURE__ */ jsxs25("span", { className: "gal-no shrink-0 text-sm text-(--color-accent-strong)", "aria-hidden": "true", children: [
1792
+ "No. ",
1793
+ index + 1
1794
+ ] }),
1795
+ faq.question
1796
+ ] }) }),
1797
+ /* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-18 text-sm leading-relaxed text-(--color-fg-soft)", children: faq.answer })
1798
+ ]
1799
+ },
1800
+ index
1801
+ )) })
1802
+ ] }) });
1803
+ }
1804
+
1805
+ // src/templates/gallery/components/cta.tsx
1806
+ import { HiArrowRight as HiArrowRight5 } from "react-icons/hi";
1807
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
1808
+ function GalCTA({
1809
+ heading = "Ready to Save 15 Hours Per Week?",
1810
+ subheading,
1811
+ buttons = [{ text: "Get Started", href: "#pricing", variant: "primary", showArrow: true }],
1812
+ hostname,
1813
+ className
1814
+ }) {
1815
+ return /* @__PURE__ */ jsx33("section", { className: cn("bg-(--color-accent-field) text-(--color-accent-fg)", className), children: /* @__PURE__ */ jsx33("div", { className: "mx-auto max-w-6xl px-6 py-24 md:py-36 lg:px-10", children: /* @__PURE__ */ jsxs26(ScrollReveal, { direction: "up", children: [
1816
+ hostname && /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-3", children: [
1817
+ /* @__PURE__ */ jsx33(GalDiamond, { className: "bg-(--color-accent-fg)" }),
1818
+ /* @__PURE__ */ jsx33("span", { className: "gal-label text-(--color-accent-fg)/70", children: hostname })
1819
+ ] }),
1820
+ /* @__PURE__ */ jsxs26("div", { className: "grid items-end gap-y-12 pt-10 md:grid-cols-12 md:gap-x-6 md:pt-14", children: [
1821
+ /* @__PURE__ */ jsxs26("div", { className: "md:col-span-8", children: [
1822
+ /* @__PURE__ */ jsx33("h2", { className: "max-w-[15ch] text-[clamp(44px,6.5vw,96px)] text-(--color-accent-fg)", children: heading }),
1823
+ subheading && /* @__PURE__ */ jsx33("p", { className: "mt-6 max-w-[44ch] text-lg leading-relaxed text-(--color-accent-fg)/80 md:text-xl", children: subheading })
1824
+ ] }),
1825
+ /* @__PURE__ */ jsx33("div", { className: "md:col-span-4 md:flex md:justify-end", children: /* @__PURE__ */ jsx33("div", { className: "flex flex-col gap-3 sm:flex-row", children: buttons.map(
1826
+ (button, index) => button.variant === "primary" || !button.variant ? /* @__PURE__ */ jsx33(GalButton, { asChild: true, variant: "bone", children: /* @__PURE__ */ jsxs26("a", { href: button.href, children: [
1827
+ button.text,
1828
+ button.showArrow && /* @__PURE__ */ jsx33(HiArrowRight5, { className: "h-3.5 w-3.5" })
1829
+ ] }) }, index) : /* @__PURE__ */ jsx33(
1830
+ GalButton,
1831
+ {
1832
+ asChild: true,
1833
+ variant: "secondary",
1834
+ className: "border-(--color-accent-fg)/40 text-(--color-accent-fg) hover:bg-(--color-accent-fg)/10",
1835
+ children: /* @__PURE__ */ jsxs26("a", { href: button.href, children: [
1836
+ button.text,
1837
+ button.showArrow && /* @__PURE__ */ jsx33(HiArrowRight5, { className: "h-3.5 w-3.5" })
1838
+ ] })
1839
+ },
1840
+ index
1841
+ )
1842
+ ) }) })
1843
+ ] })
1844
+ ] }) }) });
1845
+ }
1846
+
1847
+ // src/templates/gallery/components/footer.tsx
1848
+ import Link6 from "next/link";
1849
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
1850
+ function GalFooter({
1851
+ logo = "Priya",
1852
+ description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
1853
+ quickLinks = [
1854
+ { label: "Features", href: "/#features" },
1855
+ { label: "Pricing", href: "/#pricing" },
1856
+ { label: "FAQ", href: "/#faq" }
1857
+ ],
1858
+ socialLinks = [
1859
+ { label: "GitHub", href: "https://github.com" },
1860
+ { label: "npm", href: "https://npmjs.com" },
1861
+ { label: "X", href: "https://x.com/dotdo_ai" }
1862
+ ],
1863
+ copyrightText = "Priya.do \xA9 2025. All rights reserved.",
1864
+ className
1865
+ }) {
1866
+ return /* @__PURE__ */ jsx34("footer", { className: cn("border-t border-(--color-border) bg-(--color-surface)", className), children: /* @__PURE__ */ jsx34("div", { className: "mx-auto max-w-6xl px-6 py-20 md:py-28 lg:px-10", children: /* @__PURE__ */ jsxs27("div", { className: "flex flex-col items-center text-center", children: [
1867
+ /* @__PURE__ */ jsx34(GalDiamond, { className: "size-2" }),
1868
+ /* @__PURE__ */ jsx34(Link6, { href: "/", className: "mt-6 inline-block", children: /* @__PURE__ */ jsx34("span", { className: "gal-display text-4xl font-[560] tracking-[-0.015em] text-(--color-fg) md:text-5xl", children: logo }) }),
1869
+ /* @__PURE__ */ jsx34("p", { className: "mt-5 max-w-[52ch] text-sm leading-relaxed text-(--color-fg-muted)", children: description }),
1870
+ /* @__PURE__ */ jsx34(
1871
+ "nav",
1872
+ {
1873
+ className: "mt-12 flex flex-wrap items-center justify-center gap-x-5 gap-y-4",
1874
+ "aria-label": "Footer",
1875
+ children: [...quickLinks, ...socialLinks].map((link, index, all) => {
1876
+ const external = /^https?:\/\//.test(link.href);
1877
+ return /* @__PURE__ */ jsxs27("span", { className: "flex items-center gap-x-5", children: [
1878
+ /* @__PURE__ */ jsx34(
1879
+ Link6,
1880
+ {
1881
+ href: link.href,
1882
+ ...external ? { target: "_blank", rel: "noopener noreferrer" } : {},
1883
+ className: "gal-label text-(--color-fg-soft) transition-colors hover:text-(--color-fg)",
1884
+ children: link.label
1885
+ }
1886
+ ),
1887
+ index < all.length - 1 && /* @__PURE__ */ jsx34(GalDiamond, { className: "size-1" })
1888
+ ] }, `${link.label}-${index}`);
1889
+ })
1890
+ }
1891
+ ),
1892
+ /* @__PURE__ */ jsx34("div", { className: "mt-14 w-full max-w-md border-t border-(--color-border) pt-6", children: /* @__PURE__ */ jsx34("p", { className: "text-xs leading-relaxed text-(--color-fg-muted)", children: copyrightText }) })
1893
+ ] }) }) });
1894
+ }
1895
+
1896
+ // src/templates/gallery/view.tsx
1897
+ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
1898
+ function GalleryView({ content, brandName, hostname }) {
1899
+ const { hero, features, pricing, faq, cta } = content;
1900
+ return /* @__PURE__ */ jsxs28(Fragment4, { children: [
1901
+ /* @__PURE__ */ jsx35(GalNavigation, { logo: brandName }),
1902
+ /* @__PURE__ */ jsxs28("main", { children: [
1903
+ /* @__PURE__ */ jsx35(
1904
+ GalHero,
1905
+ {
1906
+ presenter: brandName,
1907
+ badgeText: hero.badgeText,
1908
+ heading: hero.heading,
1909
+ description: hero.description,
1910
+ ctaText: hero.ctaText,
1911
+ ctaHref: hero.ctaHref,
1912
+ secondaryCtaText: hero.secondaryCtaText,
1913
+ secondaryCtaHref: hero.secondaryCtaHref,
1914
+ marqueeTitle: hero.marqueeTitle,
1915
+ marqueeImages: hero.marqueeImages
1916
+ }
1917
+ ),
1918
+ /* @__PURE__ */ jsx35(
1919
+ GalFeatures,
1920
+ {
1921
+ heading: features.heading,
1922
+ description: features.description,
1923
+ features: features.features
1924
+ }
1925
+ ),
1926
+ pricing.variant === "single" ? /* @__PURE__ */ jsx35(
1927
+ GalPricing,
1928
+ {
1929
+ heading: pricing.heading,
1930
+ subheading: pricing.subheading,
1931
+ price: pricing.price,
1932
+ priceUnit: pricing.priceUnit,
1933
+ trialText: pricing.trialText,
1934
+ ctaText: pricing.ctaText,
1935
+ ctaHref: pricing.ctaHref,
1936
+ featuresHeading: pricing.featuresHeading,
1937
+ features: pricing.features,
1938
+ securityNote: pricing.securityNote
1939
+ }
1940
+ ) : /* @__PURE__ */ jsx35(
1941
+ GalPricingTiers,
1942
+ {
1943
+ heading: pricing.heading,
1944
+ subheading: pricing.subheading,
1945
+ tiers: pricing.tiers,
1946
+ securityNote: pricing.securityNote
1947
+ }
1948
+ ),
1949
+ /* @__PURE__ */ jsx35(GalFAQ, { heading: faq.heading, faqs: faq.faqs }),
1950
+ /* @__PURE__ */ jsx35(
1951
+ GalCTA,
1952
+ {
1953
+ heading: cta.heading,
1954
+ subheading: cta.subheading,
1955
+ buttons: cta.buttons,
1956
+ hostname
1957
+ }
1958
+ )
1959
+ ] }),
1960
+ /* @__PURE__ */ jsx35(
1961
+ GalFooter,
1962
+ {
1963
+ logo: brandName,
1964
+ description: hero.description,
1965
+ copyrightText: `${hostname} \xA9 ${(/* @__PURE__ */ new Date()).getFullYear()}. All rights reserved.`
1966
+ }
1967
+ )
1968
+ ] });
1969
+ }
1970
+
1971
+ // src/view/view.tsx
1972
+ import { jsx as jsx36 } from "react/jsx-runtime";
1973
+ function NamedAgentView({ content, theme, mode, brandName, hostname, template = "studio" }) {
1974
+ return (
1975
+ // texture={false}: DialectShell's NoiseTexture grain defaults on for the
1976
+ // agent dialects, but the named baseline renders NO overlay — the fixed
1977
+ // full-viewport speckle layer sits over every pixel and subtly shifts the
1978
+ // whole palette off the baseline values.
1979
+ /* @__PURE__ */ jsx36(DialectShell, { theme, mode, texture: false, children: /* @__PURE__ */ jsx36("div", { "data-dialect": "named", "data-template": template, children: template === "executive" ? /* @__PURE__ */ jsx36(ExecutiveView, { content, brandName, hostname }) : template === "gallery" ? /* @__PURE__ */ jsx36(GalleryView, { content, brandName, hostname }) : /* @__PURE__ */ jsx36(StudioView, { content, brandName, hostname }) }) })
1980
+ );
670
1981
  }
671
1982
  var view_default = NamedAgentView;
672
1983
  export {