@mdxui/named 8.2.0 → 8.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["/**\n * Pure-Zod schemas for @mdxui/named section components.\n *\n * This subpath has NO React, no @mdxui/primitives, and no next/* imports —\n * consumers (e.g. dot-do/named-agents) can validate prop data at runtime\n * without pulling Radix, React, or the rest of the UI tree into their build.\n *\n * Each `XxxPropsSchema` is annotated as `z.ZodType<XxxProps>` and cast back\n * (annotate-and-cast pattern) so any future drift between the TS interface\n * and the Zod schema is caught at typecheck — without triggering the\n * variance issues that `satisfies` raises on function / ReactNode fields.\n *\n * Authoring reference: `packages/mdxui/src/zod.ts`.\n * Function / ReactNode handling reference: `packages/mdxui/src/ui/shell/shell.ts`.\n */\nimport { z } from 'zod'\nimport type { IconType } from 'react-icons'\n\n// Re-export the existing interfaces type-only — type-only erases at build,\n// so this entry stays runtime-clean (only `zod` survives in the JS output).\nexport type { HeroProps } from '../templates/studio/components/hero/hero'\nexport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nexport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nexport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../templates/studio/components/hero/hero'\nimport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nimport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nimport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// =============================================================================\n// Hero\n// =============================================================================\n\nexport const HeroPropsSchema: z.ZodType<HeroProps> = z.object({\n badgeEmoji: z.string().optional(),\n badgeText: z.string().optional(),\n badgeHref: z.string().optional(),\n heading: z.string().optional(),\n description: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost']).optional(),\n rightImageSrc: z.string().optional(),\n rightImageAlt: z.string().optional(),\n rightImageSizes: z.string().optional(),\n showIconOverlay: z.boolean().optional(),\n marqueeTitle: z.string().optional(),\n marqueeImages: z.array(z.string()).optional(),\n className: z.string().optional(),\n}).describe('Hero section props') as z.ZodType<HeroProps>\n\n// =============================================================================\n// FAQ\n// =============================================================================\n\nexport const FAQItemSchema: z.ZodType<FAQItem> = z.object({\n question: z.string(),\n answer: z.string(),\n}).describe('FAQ item') as z.ZodType<FAQItem>\n\nexport const FAQPropsSchema: z.ZodType<FAQProps> = z.object({\n heading: z.string().optional(),\n faqs: z.array(FAQItemSchema).optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('FAQ section props') as z.ZodType<FAQProps>\n\n// =============================================================================\n// Features\n// =============================================================================\n\nexport const FeatureItemSchema: z.ZodType<FeatureItem> = z.object({\n text: z.string(),\n}).describe('Feature item (bullet)') as z.ZodType<FeatureItem>\n\nexport const FeatureSchema: z.ZodType<Feature> = z.object({\n title: z.string(),\n description: z.string(),\n items: z.array(FeatureItemSchema),\n code: z.string(),\n language: z.string().optional(),\n badge: z.string(),\n}).describe('Feature card') as z.ZodType<Feature>\n\nexport const FeaturesPropsSchema: z.ZodType<FeaturesProps> = z.object({\n heading: z.string().optional(),\n description: z.string().optional(),\n features: z.array(FeatureSchema).optional(),\n className: z.string().optional(),\n}).describe('Features section props') as z.ZodType<FeaturesProps>\n\n// =============================================================================\n// Pricing (single-tier)\n// =============================================================================\n\nexport const PricingFeatureSchema: z.ZodType<PricingFeature> = z.object({\n text: z.string(),\n}).describe('Pricing feature bullet') as z.ZodType<PricingFeature>\n\nexport const PricingPropsSchema: z.ZodType<PricingProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n price: z.string().optional(),\n priceUnit: z.string().optional(),\n trialText: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n featuresHeading: z.string().optional(),\n features: z.array(PricingFeatureSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Single-tier pricing section props') as z.ZodType<PricingProps>\n\n// =============================================================================\n// PricingTiers (multi-tier)\n// =============================================================================\n\nexport const PricingTierFeatureSchema: z.ZodType<PricingTierFeature> = z.object({\n text: z.string(),\n}).describe('Pricing tier feature bullet') as z.ZodType<PricingTierFeature>\n\nexport const PricingTierSchema: z.ZodType<PricingTier> = z.object({\n title: z.string(),\n description: z.string(),\n price: z.string(),\n priceUnit: z.string(),\n ctaText: z.string(),\n ctaVariant: z.enum(['primary', 'secondary']).optional(),\n ctaHref: z.string().optional(),\n features: z.array(PricingTierFeatureSchema),\n image: z.string().optional(),\n imageAlt: z.string().optional(),\n featured: z.boolean().optional(),\n}).describe('Pricing tier card') as z.ZodType<PricingTier>\n\nexport const PricingTiersPropsSchema: z.ZodType<PricingTiersProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n tiers: z.array(PricingTierSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Multi-tier pricing section props') as z.ZodType<PricingTiersProps>\n\n// Backwards-friendly aliases matching the issue's vocabulary.\nexport const Pricing1PropsSchema = PricingPropsSchema\nexport const Pricing2PropsSchema = PricingTiersPropsSchema\n\n// =============================================================================\n// CTA\n// =============================================================================\n\nexport const CTAButtonSchema: z.ZodType<CTAButton> = z.object({\n text: z.string(),\n href: z.string(),\n variant: z.enum(['primary', 'secondary']).optional(),\n showArrow: z.boolean().optional(),\n}).describe('CTA button') as z.ZodType<CTAButton>\n\nexport const CTAPropsSchema: z.ZodType<CTAProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n buttons: z.array(CTAButtonSchema).optional(),\n backgroundColor: z.enum(['light', 'blue', 'green', 'purple', 'orange']).optional(),\n className: z.string().optional(),\n}).describe('CTA section props') as z.ZodType<CTAProps>\n\n// =============================================================================\n// Navigation\n// =============================================================================\n\nexport const NavLinkSchema: z.ZodType<NavLink> = z.object({\n label: z.string(),\n href: z.string(),\n}).describe('Nav link') as z.ZodType<NavLink>\n\nexport const NavigationPropsSchema: z.ZodType<NavigationProps> = z.object({\n // Non-translating: string | React.ReactNode.\n logo: z.union([z.string(), z.any()]).optional(),\n logoHref: z.string().optional(),\n links: z.array(NavLinkSchema).optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost', 'link', 'accent']).optional(),\n className: z.string().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full']).optional(),\n sticky: z.boolean().optional(),\n showScrollEffect: z.boolean().optional(),\n}).describe('Navigation section props') as z.ZodType<NavigationProps>\n\n// =============================================================================\n// Footer\n// =============================================================================\n\nexport const SocialLinkSchema: z.ZodType<SocialLink> = z.object({\n href: z.string(),\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Social link') as z.ZodType<SocialLink>\n\nexport const QuickLinkSchema: z.ZodType<QuickLink> = z.object({\n href: z.string(),\n label: z.string(),\n}).describe('Footer quick link') as z.ZodType<QuickLink>\n\nexport const FooterPropsSchema: z.ZodType<FooterProps> = z.object({\n logo: z.string().optional(),\n description: z.string().optional(),\n socialLinks: z.array(SocialLinkSchema).optional(),\n quickLinks: z.array(QuickLinkSchema).optional(),\n contactTitle: z.string().optional(),\n emailPlaceholder: z.string().optional(),\n // Non-translating: function field.\n onEmailSubmit: z.function().optional(),\n copyrightText: z.string().optional(),\n showThemeToggle: z.boolean().optional(),\n className: z.string().optional(),\n}).describe('Footer section props') as z.ZodType<FooterProps>\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/schemas/index.ts"],"sourcesContent":["/**\n * Pure-Zod schemas for @mdxui/named section components.\n *\n * This subpath has NO React, no @mdxui/primitives, and no next/* imports —\n * consumers (e.g. dot-do/named-agents) can validate prop data at runtime\n * without pulling Radix, React, or the rest of the UI tree into their build.\n *\n * Each `XxxPropsSchema` is annotated as `z.ZodType<XxxProps>` and cast back\n * (annotate-and-cast pattern) so any future drift between the TS interface\n * and the Zod schema is caught at typecheck — without triggering the\n * variance issues that `satisfies` raises on function / ReactNode fields.\n *\n * Authoring reference: `packages/mdxui/src/zod.ts`.\n * Function / ReactNode handling reference: `packages/mdxui/src/ui/shell/shell.ts`.\n */\nimport { z } from 'zod'\nimport type { IconType } from 'react-icons'\n\n// Re-export the existing interfaces type-only — type-only erases at build,\n// so this entry stays runtime-clean (only `zod` survives in the JS output).\nexport type { HeroProps } from '../templates/studio/components/hero/hero'\nexport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nexport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nexport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nexport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nexport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nexport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nexport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// Import types for the annotate-and-cast assertions below.\nimport type { HeroProps } from '../templates/studio/components/hero/hero'\nimport type { FAQItem, FAQProps } from '../templates/studio/components/faq/faq'\nimport type { FeatureItem, Feature, FeaturesProps } from '../templates/studio/components/features/features'\nimport type { PricingFeature, PricingProps } from '../templates/studio/components/pricing/pricing'\nimport type { PricingTierFeature, PricingTier, PricingTiersProps } from '../templates/studio/components/pricing/pricing-tiers'\nimport type { CTAButton, CTAProps } from '../templates/studio/components/cta/cta'\nimport type { NavLink, NavigationProps } from '../templates/studio/components/navigation/navigation'\nimport type { SocialLink, QuickLink, FooterProps } from '../templates/studio/components/footer/footer'\n\n// =============================================================================\n// Hero\n// =============================================================================\n\nexport const HeroPropsSchema: z.ZodType<HeroProps> = z.object({\n badgeEmoji: z.string().optional(),\n badgeText: z.string().optional(),\n heading: z.string().optional(),\n description: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost']).optional(),\n rightImageSrc: z.string().optional(),\n rightImageAlt: z.string().optional(),\n rightImageSizes: z.string().optional(),\n showIconOverlay: z.boolean().optional(),\n marqueeTitle: z.string().optional(),\n marqueeImages: z.array(z.string()).optional(),\n className: z.string().optional(),\n}).describe('Hero section props') as z.ZodType<HeroProps>\n\n// =============================================================================\n// FAQ\n// =============================================================================\n\nexport const FAQItemSchema: z.ZodType<FAQItem> = z.object({\n question: z.string(),\n answer: z.string(),\n}).describe('FAQ item') as z.ZodType<FAQItem>\n\nexport const FAQPropsSchema: z.ZodType<FAQProps> = z.object({\n heading: z.string().optional(),\n faqs: z.array(FAQItemSchema).optional(),\n backgroundColor: z.string().optional(),\n className: z.string().optional(),\n}).describe('FAQ section props') as z.ZodType<FAQProps>\n\n// =============================================================================\n// Features\n// =============================================================================\n\nexport const FeatureItemSchema: z.ZodType<FeatureItem> = z.object({\n text: z.string(),\n}).describe('Feature item (bullet)') as z.ZodType<FeatureItem>\n\nexport const FeatureSchema: z.ZodType<Feature> = z.object({\n title: z.string(),\n description: z.string(),\n items: z.array(FeatureItemSchema),\n code: z.string(),\n language: z.string().optional(),\n badge: z.string(),\n}).describe('Feature card') as z.ZodType<Feature>\n\nexport const FeaturesPropsSchema: z.ZodType<FeaturesProps> = z.object({\n heading: z.string().optional(),\n description: z.string().optional(),\n features: z.array(FeatureSchema).optional(),\n className: z.string().optional(),\n}).describe('Features section props') as z.ZodType<FeaturesProps>\n\n// =============================================================================\n// Pricing (single-tier)\n// =============================================================================\n\nexport const PricingFeatureSchema: z.ZodType<PricingFeature> = z.object({\n text: z.string(),\n}).describe('Pricing feature bullet') as z.ZodType<PricingFeature>\n\nexport const PricingPropsSchema: z.ZodType<PricingProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n price: z.string().optional(),\n priceUnit: z.string().optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n featuresHeading: z.string().optional(),\n features: z.array(PricingFeatureSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Single-tier pricing section props') as z.ZodType<PricingProps>\n\n// =============================================================================\n// PricingTiers (multi-tier)\n// =============================================================================\n\nexport const PricingTierFeatureSchema: z.ZodType<PricingTierFeature> = z.object({\n text: z.string(),\n}).describe('Pricing tier feature bullet') as z.ZodType<PricingTierFeature>\n\nexport const PricingTierSchema: z.ZodType<PricingTier> = z.object({\n title: z.string(),\n description: z.string(),\n price: z.string(),\n priceUnit: z.string(),\n ctaText: z.string(),\n ctaVariant: z.enum(['primary', 'secondary']).optional(),\n ctaHref: z.string().optional(),\n features: z.array(PricingTierFeatureSchema),\n image: z.string().optional(),\n imageAlt: z.string().optional(),\n featured: z.boolean().optional(),\n}).describe('Pricing tier card') as z.ZodType<PricingTier>\n\nexport const PricingTiersPropsSchema: z.ZodType<PricingTiersProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n tiers: z.array(PricingTierSchema).optional(),\n backgroundColor: z.string().optional(),\n securityNote: z.string().optional(),\n className: z.string().optional(),\n}).describe('Multi-tier pricing section props') as z.ZodType<PricingTiersProps>\n\n// Backwards-friendly aliases matching the issue's vocabulary.\nexport const Pricing1PropsSchema = PricingPropsSchema\nexport const Pricing2PropsSchema = PricingTiersPropsSchema\n\n// =============================================================================\n// CTA\n// =============================================================================\n\nexport const CTAButtonSchema: z.ZodType<CTAButton> = z.object({\n text: z.string(),\n href: z.string(),\n variant: z.enum(['primary', 'secondary']).optional(),\n showArrow: z.boolean().optional(),\n}).describe('CTA button') as z.ZodType<CTAButton>\n\nexport const CTAPropsSchema: z.ZodType<CTAProps> = z.object({\n heading: z.string().optional(),\n subheading: z.string().optional(),\n buttons: z.array(CTAButtonSchema).optional(),\n backgroundColor: z.enum(['light', 'blue', 'green', 'purple', 'orange']).optional(),\n className: z.string().optional(),\n}).describe('CTA section props') as z.ZodType<CTAProps>\n\n// =============================================================================\n// Navigation\n// =============================================================================\n\nexport const NavLinkSchema: z.ZodType<NavLink> = z.object({\n label: z.string(),\n href: z.string(),\n}).describe('Nav link') as z.ZodType<NavLink>\n\nexport const NavigationPropsSchema: z.ZodType<NavigationProps> = z.object({\n // Non-translating: string | React.ReactNode.\n logo: z.union([z.string(), z.any()]).optional(),\n logoHref: z.string().optional(),\n links: z.array(NavLinkSchema).optional(),\n ctaText: z.string().optional(),\n ctaHref: z.string().optional(),\n ctaVariant: z.enum(['default', 'secondary', 'outline', 'ghost', 'link', 'accent']).optional(),\n className: z.string().optional(),\n maxWidth: z.enum(['sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full']).optional(),\n sticky: z.boolean().optional(),\n showScrollEffect: z.boolean().optional(),\n}).describe('Navigation section props') as z.ZodType<NavigationProps>\n\n// =============================================================================\n// Footer\n// =============================================================================\n\nexport const SocialLinkSchema: z.ZodType<SocialLink> = z.object({\n href: z.string(),\n // Non-translating: react-icons IconType is a function — round-trip via z.custom.\n icon: z.custom<IconType>((v) => typeof v === 'function'),\n label: z.string(),\n}).describe('Social link') as z.ZodType<SocialLink>\n\nexport const QuickLinkSchema: z.ZodType<QuickLink> = z.object({\n href: z.string(),\n label: z.string(),\n}).describe('Footer quick link') as z.ZodType<QuickLink>\n\nexport const FooterPropsSchema: z.ZodType<FooterProps> = z.object({\n logo: z.string().optional(),\n description: z.string().optional(),\n socialLinks: z.array(SocialLinkSchema).optional(),\n quickLinks: z.array(QuickLinkSchema).optional(),\n contactTitle: z.string().optional(),\n emailPlaceholder: z.string().optional(),\n // Non-translating: function field.\n onEmailSubmit: z.function().optional(),\n copyrightText: z.string().optional(),\n showThemeToggle: z.boolean().optional(),\n className: z.string().optional(),\n}).describe('Footer section props') as z.ZodType<FooterProps>\n"],"mappings":"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","names":[]}
@@ -11,7 +11,6 @@ type NamedAgentFaqItem = {
11
11
  type NamedAgentHero = {
12
12
  badgeEmoji?: string;
13
13
  badgeText?: string;
14
- badgeHref?: string;
15
14
  heading: string;
16
15
  description: string;
17
16
  ctaText: string;
@@ -68,7 +67,6 @@ type NamedAgentPricing = {
68
67
  subheading?: string;
69
68
  price: string;
70
69
  priceUnit: string;
71
- trialText?: string;
72
70
  ctaText: string;
73
71
  ctaHref: string;
74
72
  featuresHeading?: string;
@@ -172,7 +172,6 @@ import { jsx as jsx4, jsxs } from "react/jsx-runtime";
172
172
  function Hero({
173
173
  badgeEmoji = "",
174
174
  badgeText = "Meet Priya",
175
- badgeHref = "#",
176
175
  heading = "Your AI Product Manager for GitHub",
177
176
  description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
178
177
  ctaText = "Get Started",
@@ -197,19 +196,10 @@ function Hero({
197
196
  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: [
198
197
  /* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:gap-16 items-start mb-16 lg:mb-20", hasHeroImage && "lg:grid-cols-2"), children: [
199
198
  /* @__PURE__ */ jsxs("div", { className: cn("space-y-6 lg:pt-8", !hasHeroImage && "mx-auto max-w-3xl text-center"), children: [
200
- /* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
201
- "a",
202
- {
203
- href: badgeHref,
204
- target: "_blank",
205
- rel: "noopener noreferrer",
206
- className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full transition-colors border border-border bg-card",
207
- children: [
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 })
210
- ]
211
- }
212
- ) }) }),
199
+ /* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full border border-border bg-card", children: [
200
+ /* @__PURE__ */ jsx4("span", { className: "text-base", children: badgeEmoji }),
201
+ /* @__PURE__ */ jsx4("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
202
+ ] }) }) }),
213
203
  /* @__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
204
  /* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx4("p", { className: cn("text-lg leading-relaxed max-w-lg", !hasHeroImage && "mx-auto"), children: description }) }),
215
205
  /* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col sm:flex-row gap-3 pt-4", !hasHeroImage && "sm:justify-center"), children: /* @__PURE__ */ jsx4(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
@@ -426,7 +416,6 @@ function Pricing({
426
416
  subheading = "Start automating your product workflow in minutes. No credit card required to get started.",
427
417
  price = "$16",
428
418
  priceUnit = "/ month",
429
- trialText = "With a 7-day free trial",
430
419
  ctaText = "Get Started",
431
420
  ctaHref = "#contact",
432
421
  featuresHeading = "What's included",
@@ -443,10 +432,9 @@ function Pricing({
443
432
  /* @__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: [
444
433
  /* @__PURE__ */ jsxs3("div", { className: "text-center", children: [
445
434
  /* @__PURE__ */ jsxs3("div", { className: "flex justify-start sm:justify-center items-baseline", children: [
446
- /* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: price }),
435
+ /* @__PURE__ */ jsx7("span", { className: "text-4xl font-semibold text-foreground", children: price }),
447
436
  /* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
448
437
  ] }),
449
- trialText && /* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
450
438
  /* @__PURE__ */ jsx7(Button, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx7("a", { href: ctaHref, children: ctaText }) })
451
439
  ] }),
452
440
  /* @__PURE__ */ jsxs3("div", { className: "mt-8", children: [
@@ -824,22 +812,47 @@ function Footer({
824
812
  ] }) });
825
813
  }
826
814
 
815
+ // src/templates/chrome.ts
816
+ var NAMED_FIXED_CHROME = {
817
+ /** Navbar CTA — every template. */
818
+ navCta: "Hire me",
819
+ /** Hero primary button. The hero renders NO secondary button. */
820
+ heroCta: "Get Started",
821
+ /** "How It Works" section (the wire `features` section) title. */
822
+ howItWorksTitle: "How It Works",
823
+ /** Pricing section title — both single-tier and multi-tier variants. */
824
+ pricingTitle: "Simple, transparent pricing",
825
+ /** FAQ section title. */
826
+ faqTitle: "FAQs",
827
+ /** Closing CTA button label. The closing CTA renders exactly ONE button. */
828
+ bottomCta: "Get Started"
829
+ };
830
+ function clampHowItWorks(features) {
831
+ return features.slice(0, 4).map((f) => ({ ...f, items: f.items.slice(0, 3) }));
832
+ }
833
+ function normalizePricingTiers(tiers) {
834
+ return tiers.slice(0, 2).map((tier, i) => ({
835
+ ...tier,
836
+ featured: i === 0,
837
+ ctaVariant: i === 0 ? "primary" : "secondary"
838
+ }));
839
+ }
840
+
827
841
  // src/templates/studio/view.tsx
828
842
  import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
829
843
  function StudioView({ content, brandName, hostname }) {
830
844
  const { hero, features, pricing, faq, cta } = content;
831
845
  return /* @__PURE__ */ jsxs9(Fragment2, { children: [
832
- /* @__PURE__ */ jsx14(Navigation, { logo: brandName }),
846
+ /* @__PURE__ */ jsx14(Navigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
833
847
  /* @__PURE__ */ jsxs9("main", { children: [
834
848
  /* @__PURE__ */ jsx14(
835
849
  Hero,
836
850
  {
837
851
  badgeEmoji: hero.badgeEmoji,
838
852
  badgeText: hero.badgeText,
839
- badgeHref: hero.badgeHref,
840
853
  heading: hero.heading,
841
854
  description: hero.description,
842
- ctaText: hero.ctaText,
855
+ ctaText: NAMED_FIXED_CHROME.heroCta,
843
856
  ctaHref: hero.ctaHref,
844
857
  rightImageSrc: hero.rightImageSrc,
845
858
  rightImageAlt: hero.rightImageAlt,
@@ -851,19 +864,18 @@ function StudioView({ content, brandName, hostname }) {
851
864
  /* @__PURE__ */ jsx14(
852
865
  Features,
853
866
  {
854
- heading: features.heading,
867
+ heading: NAMED_FIXED_CHROME.howItWorksTitle,
855
868
  description: features.description,
856
- features: features.features
869
+ features: clampHowItWorks(features.features)
857
870
  }
858
871
  ),
859
872
  pricing.variant === "single" ? /* @__PURE__ */ jsx14(
860
873
  Pricing,
861
874
  {
862
- heading: pricing.heading,
875
+ heading: NAMED_FIXED_CHROME.pricingTitle,
863
876
  subheading: pricing.subheading,
864
877
  price: pricing.price,
865
878
  priceUnit: pricing.priceUnit,
866
- trialText: pricing.trialText,
867
879
  ctaText: pricing.ctaText,
868
880
  ctaHref: pricing.ctaHref,
869
881
  featuresHeading: pricing.featuresHeading,
@@ -873,14 +885,28 @@ function StudioView({ content, brandName, hostname }) {
873
885
  ) : /* @__PURE__ */ jsx14(
874
886
  PricingTiers,
875
887
  {
876
- heading: pricing.heading,
888
+ heading: NAMED_FIXED_CHROME.pricingTitle,
877
889
  subheading: pricing.subheading,
878
- tiers: pricing.tiers,
890
+ tiers: normalizePricingTiers(pricing.tiers),
879
891
  securityNote: pricing.securityNote
880
892
  }
881
893
  ),
882
- /* @__PURE__ */ jsx14(FAQ, { heading: faq.heading, faqs: faq.faqs }),
883
- /* @__PURE__ */ jsx14(CTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons })
894
+ /* @__PURE__ */ jsx14(FAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
895
+ /* @__PURE__ */ jsx14(
896
+ CTA,
897
+ {
898
+ heading: cta.heading,
899
+ subheading: cta.subheading,
900
+ buttons: [
901
+ {
902
+ text: NAMED_FIXED_CHROME.bottomCta,
903
+ href: cta.buttons[0]?.href ?? "#pricing",
904
+ variant: "primary",
905
+ showArrow: true
906
+ }
907
+ ]
908
+ }
909
+ )
884
910
  ] }),
885
911
  /* @__PURE__ */ jsx14(
886
912
  Footer,
@@ -953,7 +979,7 @@ function ExecNavigation({
953
979
  {
954
980
  className: cn(
955
981
  "sticky top-0 z-50 w-full bg-(--color-surface) transition-[border-color] duration-200 border-b",
956
- isScrolled ? "border-(--color-border-strong)" : "border-(--color-border)",
982
+ isScrolled ? "border-(--color-border)" : "border-transparent",
957
983
  className
958
984
  ),
959
985
  children: /* @__PURE__ */ jsxs10("div", { className: "max-w-6xl mx-auto px-6 lg:px-10 py-4", children: [
@@ -1018,7 +1044,7 @@ function ExecHero({
1018
1044
  /* @__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: [
1019
1045
  /* @__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 }) }) }),
1020
1046
  /* @__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: [
1021
- /* @__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: [
1047
+ /* @__PURE__ */ jsx17(ExecButton, { asChild: true, className: "bg-(--color-accent-fg) text-(--color-accent-field) hover:bg-(--color-accent-fg)/90", children: /* @__PURE__ */ jsxs11("a", { href: ctaHref, children: [
1022
1048
  ctaText,
1023
1049
  /* @__PURE__ */ jsx17(HiArrowRight2, { className: "w-4 h-4" })
1024
1050
  ] }) }),
@@ -1048,8 +1074,8 @@ function ExecFeatures({
1048
1074
  features = [],
1049
1075
  className
1050
1076
  }) {
1051
- 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: [
1052
- /* @__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: [
1077
+ 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-12 md:py-24", children: [
1078
+ /* @__PURE__ */ jsx18(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs12("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
1053
1079
  /* @__PURE__ */ jsx18("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1054
1080
  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 })
1055
1081
  ] }) }),
@@ -1082,7 +1108,6 @@ function ExecPricing({
1082
1108
  subheading,
1083
1109
  price = "$16",
1084
1110
  priceUnit = "/ month",
1085
- trialText,
1086
1111
  ctaText = "Get Started",
1087
1112
  ctaHref = "#contact",
1088
1113
  featuresHeading = "What's included",
@@ -1090,8 +1115,8 @@ function ExecPricing({
1090
1115
  securityNote,
1091
1116
  className
1092
1117
  }) {
1093
- 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: [
1094
- /* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-[3px] border-(--color-fg)", children: [
1118
+ 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-12 md:py-24", children: [
1119
+ /* @__PURE__ */ jsxs13("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
1095
1120
  /* @__PURE__ */ jsx19("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1096
1121
  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 })
1097
1122
  ] }),
@@ -1101,7 +1126,6 @@ function ExecPricing({
1101
1126
  /* @__PURE__ */ jsx19("span", { className: "exec-figure font-halant text-6xl text-(--color-accent-strong)", children: price }),
1102
1127
  /* @__PURE__ */ jsx19("span", { className: "text-sm text-(--color-fg-muted)", children: priceUnit })
1103
1128
  ] }),
1104
- trialText && /* @__PURE__ */ jsx19("p", { className: "mt-3 text-sm text-(--color-fg-soft)", children: trialText }),
1105
1129
  /* @__PURE__ */ jsx19("div", { className: "mt-8", children: /* @__PURE__ */ jsx19(ExecButton, { asChild: true, children: /* @__PURE__ */ jsx19("a", { href: ctaHref, children: ctaText }) }) })
1106
1130
  ] }),
1107
1131
  /* @__PURE__ */ jsxs13("div", { className: "md:col-span-6 md:col-start-7", children: [
@@ -1132,8 +1156,8 @@ function ExecPricingTiers({
1132
1156
  securityNote,
1133
1157
  className
1134
1158
  }) {
1135
- 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: [
1136
- /* @__PURE__ */ jsxs14("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-[3px] border-(--color-fg)", children: [
1159
+ 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-12 md:py-24", children: [
1160
+ /* @__PURE__ */ jsxs14("div", { className: "grid md:grid-cols-12 gap-6 pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: [
1137
1161
  /* @__PURE__ */ jsx20("h2", { className: "md:col-span-7 font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }),
1138
1162
  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 })
1139
1163
  ] }),
@@ -1184,7 +1208,7 @@ function ExecPricingTiers({
1184
1208
  ),
1185
1209
  /* @__PURE__ */ jsx20("span", { className: cn("text-sm", featured ? "text-(--color-accent-fg)/60" : "text-(--color-fg-muted)"), children: tier.priceUnit })
1186
1210
  ] }),
1187
- /* @__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 }) }) }),
1211
+ /* @__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-accent-fg)/90 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 }) }) }),
1188
1212
  /* @__PURE__ */ jsx20("ul", { className: "mt-10 flex-1", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsx20(
1189
1213
  "li",
1190
1214
  {
@@ -1212,8 +1236,8 @@ function ExecPricingTiers({
1212
1236
  import { Accordion as Accordion2, AccordionContent as AccordionContent2, AccordionItem as AccordionItem2, AccordionTrigger as AccordionTrigger2 } from "@mdxui/primitives";
1213
1237
  import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
1214
1238
  function ExecFAQ({ heading = "FAQs", faqs = [], className }) {
1215
- 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: [
1216
- /* @__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 }) }),
1239
+ 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-12 md:py-24", children: [
1240
+ /* @__PURE__ */ jsx21("div", { className: "pb-8 border-b-2 border-(--color-fg) dark:border-(--color-fg)/50", children: /* @__PURE__ */ jsx21("h2", { className: "font-halant text-[clamp(44px,6vw,84px)] text-(--color-fg)", children: heading }) }),
1217
1241
  /* @__PURE__ */ jsx21(Accordion2, { type: "single", collapsible: true, children: faqs.map((faq, index) => /* @__PURE__ */ jsxs15(
1218
1242
  AccordionItem2,
1219
1243
  {
@@ -1221,10 +1245,10 @@ function ExecFAQ({ heading = "FAQs", faqs = [], className }) {
1221
1245
  className: "border-b border-(--color-border) rounded-none",
1222
1246
  children: [
1223
1247
  /* @__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: [
1224
- /* @__PURE__ */ jsx21("span", { className: "exec-figure text-xs text-(--color-fg-muted) shrink-0", "aria-hidden": "true", children: String(index + 1).padStart(2, "0") }),
1248
+ /* @__PURE__ */ jsx21("span", { className: "exec-figure hidden text-xs text-(--color-fg-muted) shrink-0 md:inline", "aria-hidden": "true", children: String(index + 1).padStart(2, "0") }),
1225
1249
  faq.question
1226
1250
  ] }) }),
1227
- /* @__PURE__ */ jsx21(AccordionContent2, { className: "pb-6 pl-10 text-sm leading-relaxed text-(--color-fg-soft) max-w-[65ch]", children: faq.answer })
1251
+ /* @__PURE__ */ jsx21(AccordionContent2, { className: "pb-6 pl-0 text-sm leading-relaxed text-(--color-fg-soft) max-w-[65ch] md:pl-10", children: faq.answer })
1228
1252
  ]
1229
1253
  },
1230
1254
  index
@@ -1241,7 +1265,7 @@ function ExecCTA({
1241
1265
  buttons = [{ text: "Get Started", href: "#pricing", variant: "primary", showArrow: true }],
1242
1266
  className
1243
1267
  }) {
1244
- 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: [
1268
+ 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-12 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: [
1245
1269
  /* @__PURE__ */ jsxs16("div", { className: "md:col-span-8", children: [
1246
1270
  /* @__PURE__ */ jsx22("h2", { className: "font-halant text-[clamp(44px,6vw,92px)] text-(--color-surface) max-w-[16ch]", children: heading }),
1247
1271
  subheading && /* @__PURE__ */ jsx22("p", { className: "exec-serif italic mt-5 text-lg md:text-xl text-(--color-surface)/70", children: subheading })
@@ -1287,8 +1311,8 @@ function ExecFooter({
1287
1311
  className
1288
1312
  }) {
1289
1313
  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: [
1290
- /* @__PURE__ */ jsxs17("div", { className: "grid md:grid-cols-12 gap-x-6 gap-y-10", children: [
1291
- /* @__PURE__ */ jsxs17("div", { className: "md:col-span-6", children: [
1314
+ /* @__PURE__ */ jsxs17("div", { className: "grid grid-cols-2 md:grid-cols-12 gap-x-6 gap-y-10", children: [
1315
+ /* @__PURE__ */ jsxs17("div", { className: "col-span-2 md:col-span-6", children: [
1292
1316
  /* @__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 }) }),
1293
1317
  /* @__PURE__ */ jsxs17("div", { className: "mt-4 flex items-baseline gap-3 border-t border-(--color-border) pt-3 max-w-[44ch]", children: [
1294
1318
  /* @__PURE__ */ jsx23("span", { className: "inline-block size-[7px] shrink-0 translate-y-[-1px] bg-(--color-accent-strong)", "aria-hidden": "true" }),
@@ -1322,17 +1346,15 @@ import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs18 } from "react/jsx-r
1322
1346
  function ExecutiveView({ content, brandName, hostname }) {
1323
1347
  const { hero, features, pricing, faq, cta } = content;
1324
1348
  return /* @__PURE__ */ jsxs18(Fragment3, { children: [
1325
- /* @__PURE__ */ jsx24(ExecNavigation, { logo: brandName }),
1349
+ /* @__PURE__ */ jsx24(ExecNavigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
1326
1350
  /* @__PURE__ */ jsxs18("main", { children: [
1327
1351
  /* @__PURE__ */ jsx24(
1328
1352
  ExecHero,
1329
1353
  {
1330
1354
  heading: hero.heading,
1331
1355
  description: hero.description,
1332
- ctaText: hero.ctaText,
1356
+ ctaText: NAMED_FIXED_CHROME.heroCta,
1333
1357
  ctaHref: hero.ctaHref,
1334
- secondaryCtaText: hero.secondaryCtaText,
1335
- secondaryCtaHref: hero.secondaryCtaHref,
1336
1358
  marqueeTitle: hero.marqueeTitle,
1337
1359
  marqueeImages: hero.marqueeImages
1338
1360
  }
@@ -1340,19 +1362,18 @@ function ExecutiveView({ content, brandName, hostname }) {
1340
1362
  /* @__PURE__ */ jsx24(
1341
1363
  ExecFeatures,
1342
1364
  {
1343
- heading: features.heading,
1365
+ heading: NAMED_FIXED_CHROME.howItWorksTitle,
1344
1366
  description: features.description,
1345
- features: features.features
1367
+ features: clampHowItWorks(features.features)
1346
1368
  }
1347
1369
  ),
1348
1370
  pricing.variant === "single" ? /* @__PURE__ */ jsx24(
1349
1371
  ExecPricing,
1350
1372
  {
1351
- heading: pricing.heading,
1373
+ heading: NAMED_FIXED_CHROME.pricingTitle,
1352
1374
  subheading: pricing.subheading,
1353
1375
  price: pricing.price,
1354
1376
  priceUnit: pricing.priceUnit,
1355
- trialText: pricing.trialText,
1356
1377
  ctaText: pricing.ctaText,
1357
1378
  ctaHref: pricing.ctaHref,
1358
1379
  featuresHeading: pricing.featuresHeading,
@@ -1362,14 +1383,28 @@ function ExecutiveView({ content, brandName, hostname }) {
1362
1383
  ) : /* @__PURE__ */ jsx24(
1363
1384
  ExecPricingTiers,
1364
1385
  {
1365
- heading: pricing.heading,
1386
+ heading: NAMED_FIXED_CHROME.pricingTitle,
1366
1387
  subheading: pricing.subheading,
1367
- tiers: pricing.tiers,
1388
+ tiers: normalizePricingTiers(pricing.tiers),
1368
1389
  securityNote: pricing.securityNote
1369
1390
  }
1370
1391
  ),
1371
- /* @__PURE__ */ jsx24(ExecFAQ, { heading: faq.heading, faqs: faq.faqs }),
1372
- /* @__PURE__ */ jsx24(ExecCTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons })
1392
+ /* @__PURE__ */ jsx24(ExecFAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
1393
+ /* @__PURE__ */ jsx24(
1394
+ ExecCTA,
1395
+ {
1396
+ heading: cta.heading,
1397
+ subheading: cta.subheading,
1398
+ buttons: [
1399
+ {
1400
+ text: NAMED_FIXED_CHROME.bottomCta,
1401
+ href: cta.buttons[0]?.href ?? "#pricing",
1402
+ variant: "primary",
1403
+ showArrow: true
1404
+ }
1405
+ ]
1406
+ }
1407
+ )
1373
1408
  ] }),
1374
1409
  /* @__PURE__ */ jsx24(
1375
1410
  ExecFooter,
@@ -1467,7 +1502,7 @@ function GalNavigation({
1467
1502
  {
1468
1503
  className: cn(
1469
1504
  "sticky top-0 z-50 w-full border-b bg-(--color-surface) transition-[border-color] duration-200",
1470
- isScrolled ? "border-(--color-border-strong)" : "border-(--color-border)",
1505
+ isScrolled ? "border-(--color-border)" : "border-transparent",
1471
1506
  className
1472
1507
  ),
1473
1508
  children: /* @__PURE__ */ jsxs20("div", { className: "mx-auto max-w-6xl px-6 py-5 lg:px-10", children: [
@@ -1584,7 +1619,7 @@ function GalFeatures({
1584
1619
  features = [],
1585
1620
  className
1586
1621
  }) {
1587
- 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: [
1622
+ 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-16 md:py-40 lg:px-10", children: [
1588
1623
  /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx29(
1589
1624
  GalSectionHead,
1590
1625
  {
@@ -1592,10 +1627,10 @@ function GalFeatures({
1592
1627
  statement: description
1593
1628
  }
1594
1629
  ) }),
1595
- /* @__PURE__ */ jsx29("div", { className: "mt-24 space-y-28 md:mt-36 md:space-y-44", children: features.map((feature, index) => {
1630
+ /* @__PURE__ */ jsx29("div", { className: "mt-12 space-y-28 md:mt-36 md:space-y-44", children: features.map((feature, index) => {
1596
1631
  const reversed = index % 2 === 1;
1597
1632
  const language = feature.language ?? "typescript";
1598
- 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: [
1633
+ return /* @__PURE__ */ jsx29(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsxs22("article", { className: "grid items-center gap-y-6 md:grid-cols-12 md:gap-x-10", children: [
1599
1634
  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(
1600
1635
  CodeWindow,
1601
1636
  {
@@ -1644,7 +1679,6 @@ function GalPricing({
1644
1679
  subheading,
1645
1680
  price = "$16",
1646
1681
  priceUnit = "/ month",
1647
- trialText,
1648
1682
  ctaText = "Get Started",
1649
1683
  ctaHref = "#contact",
1650
1684
  featuresHeading = "What's included",
@@ -1652,15 +1686,14 @@ function GalPricing({
1652
1686
  securityNote,
1653
1687
  className
1654
1688
  }) {
1655
- 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: [
1689
+ 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-16 md:py-40 lg:px-10", children: [
1656
1690
  /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30(GalSectionHead, { heading, statement: subheading }) }),
1657
- /* @__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: [
1691
+ /* @__PURE__ */ jsx30(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx30("div", { className: "mt-12 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: [
1658
1692
  /* @__PURE__ */ jsxs23("div", { className: "md:col-span-5", children: [
1659
1693
  /* @__PURE__ */ jsxs23("div", { className: "flex items-baseline gap-2.5", children: [
1660
1694
  /* @__PURE__ */ jsx30("span", { className: "gal-display text-7xl font-[560] tracking-[-0.02em] text-(--color-placard-fg) md:text-8xl", children: price }),
1661
1695
  /* @__PURE__ */ jsx30("span", { className: "text-sm text-(--color-placard-muted)", children: priceUnit })
1662
1696
  ] }),
1663
- trialText && /* @__PURE__ */ jsx30("p", { className: "mt-4 text-sm text-(--color-placard-soft)", children: trialText }),
1664
1697
  /* @__PURE__ */ jsx30("div", { className: "mt-9", children: /* @__PURE__ */ jsx30(GalButton, { asChild: true, children: /* @__PURE__ */ jsx30("a", { href: ctaHref, children: ctaText }) }) })
1665
1698
  ] }),
1666
1699
  /* @__PURE__ */ jsxs23("div", { className: "md:col-span-6 md:col-start-7", children: [
@@ -1688,7 +1721,7 @@ function GalPricingTiers({
1688
1721
  securityNote,
1689
1722
  className
1690
1723
  }) {
1691
- 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: [
1724
+ 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-16 md:py-40 lg:px-10", children: [
1692
1725
  /* @__PURE__ */ jsx31(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx31(
1693
1726
  GalSectionHead,
1694
1727
  {
@@ -1788,7 +1821,7 @@ import {
1788
1821
  } from "@mdxui/primitives";
1789
1822
  import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1790
1823
  function GalFAQ({ heading = "FAQs", faqs = [], className }) {
1791
- 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: [
1824
+ 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-16 md:py-40 lg:px-10", children: [
1792
1825
  /* @__PURE__ */ jsx32(ScrollReveal, { direction: "up", children: /* @__PURE__ */ jsx32(
1793
1826
  GalSectionHead,
1794
1827
  {
@@ -1802,13 +1835,13 @@ function GalFAQ({ heading = "FAQs", faqs = [], className }) {
1802
1835
  className: "rounded-none border-b border-(--color-border)",
1803
1836
  children: [
1804
1837
  /* @__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: [
1805
- /* @__PURE__ */ jsxs25("span", { className: "gal-no shrink-0 text-sm text-(--color-accent-strong)", "aria-hidden": "true", children: [
1838
+ /* @__PURE__ */ jsxs25("span", { className: "gal-no hidden shrink-0 text-sm text-(--color-accent-strong) md:inline", "aria-hidden": "true", children: [
1806
1839
  "No. ",
1807
1840
  index + 1
1808
1841
  ] }),
1809
1842
  faq.question
1810
1843
  ] }) }),
1811
- /* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-18 text-sm leading-relaxed text-(--color-fg-soft)", children: faq.answer })
1844
+ /* @__PURE__ */ jsx32(AccordionContent3, { className: "max-w-[62ch] pb-8 pl-0 text-sm leading-relaxed text-(--color-fg-soft) md:pl-18", children: faq.answer })
1812
1845
  ]
1813
1846
  },
1814
1847
  index
@@ -1826,7 +1859,7 @@ function GalCTA({
1826
1859
  hostname,
1827
1860
  className
1828
1861
  }) {
1829
- 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: [
1862
+ 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-16 md:py-36 lg:px-10", children: /* @__PURE__ */ jsxs26(ScrollReveal, { direction: "up", children: [
1830
1863
  hostname && /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-3", children: [
1831
1864
  /* @__PURE__ */ jsx33(GalDiamond, { className: "bg-(--color-accent-fg)" }),
1832
1865
  /* @__PURE__ */ jsx33("span", { className: "gal-label text-(--color-accent-fg)/70", children: hostname })
@@ -1912,7 +1945,7 @@ import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs28 } from "react/jsx-r
1912
1945
  function GalleryView({ content, brandName, hostname }) {
1913
1946
  const { hero, features, pricing, faq, cta } = content;
1914
1947
  return /* @__PURE__ */ jsxs28(Fragment4, { children: [
1915
- /* @__PURE__ */ jsx35(GalNavigation, { logo: brandName }),
1948
+ /* @__PURE__ */ jsx35(GalNavigation, { logo: brandName, ctaText: NAMED_FIXED_CHROME.navCta }),
1916
1949
  /* @__PURE__ */ jsxs28("main", { children: [
1917
1950
  /* @__PURE__ */ jsx35(
1918
1951
  GalHero,
@@ -1921,10 +1954,8 @@ function GalleryView({ content, brandName, hostname }) {
1921
1954
  badgeText: hero.badgeText,
1922
1955
  heading: hero.heading,
1923
1956
  description: hero.description,
1924
- ctaText: hero.ctaText,
1957
+ ctaText: NAMED_FIXED_CHROME.heroCta,
1925
1958
  ctaHref: hero.ctaHref,
1926
- secondaryCtaText: hero.secondaryCtaText,
1927
- secondaryCtaHref: hero.secondaryCtaHref,
1928
1959
  marqueeTitle: hero.marqueeTitle,
1929
1960
  marqueeImages: hero.marqueeImages
1930
1961
  }
@@ -1932,19 +1963,18 @@ function GalleryView({ content, brandName, hostname }) {
1932
1963
  /* @__PURE__ */ jsx35(
1933
1964
  GalFeatures,
1934
1965
  {
1935
- heading: features.heading,
1966
+ heading: NAMED_FIXED_CHROME.howItWorksTitle,
1936
1967
  description: features.description,
1937
- features: features.features
1968
+ features: clampHowItWorks(features.features)
1938
1969
  }
1939
1970
  ),
1940
1971
  pricing.variant === "single" ? /* @__PURE__ */ jsx35(
1941
1972
  GalPricing,
1942
1973
  {
1943
- heading: pricing.heading,
1974
+ heading: NAMED_FIXED_CHROME.pricingTitle,
1944
1975
  subheading: pricing.subheading,
1945
1976
  price: pricing.price,
1946
1977
  priceUnit: pricing.priceUnit,
1947
- trialText: pricing.trialText,
1948
1978
  ctaText: pricing.ctaText,
1949
1979
  ctaHref: pricing.ctaHref,
1950
1980
  featuresHeading: pricing.featuresHeading,
@@ -1954,19 +1984,26 @@ function GalleryView({ content, brandName, hostname }) {
1954
1984
  ) : /* @__PURE__ */ jsx35(
1955
1985
  GalPricingTiers,
1956
1986
  {
1957
- heading: pricing.heading,
1987
+ heading: NAMED_FIXED_CHROME.pricingTitle,
1958
1988
  subheading: pricing.subheading,
1959
- tiers: pricing.tiers,
1989
+ tiers: normalizePricingTiers(pricing.tiers),
1960
1990
  securityNote: pricing.securityNote
1961
1991
  }
1962
1992
  ),
1963
- /* @__PURE__ */ jsx35(GalFAQ, { heading: faq.heading, faqs: faq.faqs }),
1993
+ /* @__PURE__ */ jsx35(GalFAQ, { heading: NAMED_FIXED_CHROME.faqTitle, faqs: faq.faqs }),
1964
1994
  /* @__PURE__ */ jsx35(
1965
1995
  GalCTA,
1966
1996
  {
1967
1997
  heading: cta.heading,
1968
1998
  subheading: cta.subheading,
1969
- buttons: cta.buttons,
1999
+ buttons: [
2000
+ {
2001
+ text: NAMED_FIXED_CHROME.bottomCta,
2002
+ href: cta.buttons[0]?.href ?? "#pricing",
2003
+ variant: "primary",
2004
+ showArrow: true
2005
+ }
2006
+ ],
1970
2007
  hostname
1971
2008
  }
1972
2009
  )