@contractspec/bundle.marketing 3.7.5 → 3.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +84 -84
- package/AGENTS.md +29 -21
- package/CHANGELOG.md +27 -0
- package/README.md +36 -49
- package/dist/browser/components/marketing/ChangelogPage.js +8 -8
- package/dist/browser/components/marketing/CofounderPage.js +167 -523
- package/dist/browser/components/marketing/ContactClient.js +200 -207
- package/dist/browser/components/marketing/ContributePage.js +211 -463
- package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/browser/components/marketing/LandingPage.js +464 -568
- package/dist/browser/components/marketing/PricingClient.js +213 -839
- package/dist/browser/components/marketing/ProductClientPage.js +265 -463
- package/dist/browser/components/marketing/index.js +2007 -3338
- package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
- package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
- package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
- package/dist/browser/components/marketing/studio-signup-section.js +25 -41
- package/dist/browser/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/browser/components/templates/TemplatesPage.js +1 -1
- package/dist/browser/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/browser/components/templates/index.js +2361 -3615
- package/dist/browser/index.js +2363 -3617
- package/dist/browser/libs/email/client.js +1 -1
- package/dist/browser/libs/email/contact.js +1 -1
- package/dist/browser/libs/email/newsletter.js +1 -1
- package/dist/browser/libs/email/waitlist-application.js +1 -1
- package/dist/browser/libs/email/waitlist.js +1 -1
- package/dist/browser/registry/engine.js +2003 -3334
- package/dist/browser/registry/index.js +2003 -3334
- package/dist/browser/registry/registry-docs.js +2 -2
- package/dist/browser/registry/registry-landing.js +2007 -3338
- package/dist/browser/registry/registry.js +2003 -3334
- package/dist/browser/registry/utils.js +2003 -3334
- package/dist/components/marketing/ChangelogPage.js +8 -8
- package/dist/components/marketing/CofounderPage.js +167 -523
- package/dist/components/marketing/ContactClient.js +200 -207
- package/dist/components/marketing/ContributePage.d.ts +0 -2
- package/dist/components/marketing/ContributePage.js +211 -463
- package/dist/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/components/marketing/LandingPage.js +464 -568
- package/dist/components/marketing/PricingClient.js +213 -839
- package/dist/components/marketing/ProductClientPage.js +265 -463
- package/dist/components/marketing/index.d.ts +5 -5
- package/dist/components/marketing/index.js +2007 -3338
- package/dist/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/components/marketing/sections/CtaSection.js +3 -3
- package/dist/components/marketing/sections/FearsSection.js +3 -3
- package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
- package/dist/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/components/marketing/sections/StepsSection.js +4 -4
- package/dist/components/marketing/studio-signup-section.js +25 -41
- package/dist/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/components/templates/TemplatesPage.js +1 -1
- package/dist/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/components/templates/index.js +2361 -3615
- package/dist/index.js +2363 -3617
- package/dist/libs/email/client.js +1 -1
- package/dist/libs/email/contact.js +1 -1
- package/dist/libs/email/newsletter.js +1 -1
- package/dist/libs/email/waitlist-application.js +1 -1
- package/dist/libs/email/waitlist.js +1 -1
- package/dist/node/components/marketing/ChangelogPage.js +8 -8
- package/dist/node/components/marketing/CofounderPage.js +167 -523
- package/dist/node/components/marketing/ContactClient.js +200 -207
- package/dist/node/components/marketing/ContributePage.js +211 -463
- package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/node/components/marketing/LandingPage.js +464 -568
- package/dist/node/components/marketing/PricingClient.js +213 -839
- package/dist/node/components/marketing/ProductClientPage.js +265 -463
- package/dist/node/components/marketing/index.js +2007 -3338
- package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/node/components/marketing/sections/CtaSection.js +3 -3
- package/dist/node/components/marketing/sections/FearsSection.js +3 -3
- package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/node/components/marketing/sections/StepsSection.js +4 -4
- package/dist/node/components/marketing/studio-signup-section.js +25 -41
- package/dist/node/components/templates/TemplatesClientPage.js +2324 -3578
- package/dist/node/components/templates/TemplatesPage.js +1 -1
- package/dist/node/components/templates/TemplatesPreviewModal.js +3 -3
- package/dist/node/components/templates/index.js +2361 -3615
- package/dist/node/index.js +2363 -3617
- package/dist/node/libs/email/client.js +1 -1
- package/dist/node/libs/email/contact.js +1 -1
- package/dist/node/libs/email/newsletter.js +1 -1
- package/dist/node/libs/email/waitlist-application.js +1 -1
- package/dist/node/libs/email/waitlist.js +1 -1
- package/dist/node/registry/engine.js +2003 -3334
- package/dist/node/registry/index.js +2003 -3334
- package/dist/node/registry/registry-docs.js +2 -2
- package/dist/node/registry/registry-landing.js +2007 -3338
- package/dist/node/registry/registry.js +2003 -3334
- package/dist/node/registry/utils.js +2003 -3334
- package/dist/registry/engine.js +2003 -3334
- package/dist/registry/index.js +2003 -3334
- package/dist/registry/registry-docs.js +2 -2
- package/dist/registry/registry-landing.js +2007 -3338
- package/dist/registry/registry.js +2003 -3334
- package/dist/registry/utils.js +2003 -3334
- package/package.json +29 -29
- package/src/bundles/MarketingBundle.ts +273 -273
- package/src/components/marketing/ChangelogPage.tsx +72 -100
- package/src/components/marketing/CofounderPage.tsx +120 -384
- package/src/components/marketing/ContactClient.tsx +164 -154
- package/src/components/marketing/ContributePage.tsx +139 -313
- package/src/components/marketing/DesignPartnerPage.tsx +133 -171
- package/src/components/marketing/LandingPage.tsx +353 -25
- package/src/components/marketing/PricingClient.tsx +192 -437
- package/src/components/marketing/ProductClientPage.tsx +255 -377
- package/src/components/marketing/index.ts +5 -5
- package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
- package/src/components/marketing/sections/AudienceSection.tsx +55 -56
- package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
- package/src/components/marketing/sections/CtaSection.tsx +49 -50
- package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
- package/src/components/marketing/sections/FearsSection.tsx +36 -37
- package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
- package/src/components/marketing/sections/IconGridSection.tsx +71 -71
- package/src/components/marketing/sections/OutputsSection.tsx +51 -52
- package/src/components/marketing/sections/ProblemSection.tsx +39 -40
- package/src/components/marketing/sections/SolutionSection.tsx +39 -40
- package/src/components/marketing/sections/StepsSection.tsx +47 -48
- package/src/components/marketing/studio-signup-section.tsx +39 -41
- package/src/components/templates/TemplatesClientPage.tsx +727 -685
- package/src/components/templates/TemplatesPage.tsx +110 -110
- package/src/components/templates/TemplatesPreviewModal.tsx +197 -198
- package/src/index.ts +4 -4
- package/src/libs/email/client.test.ts +81 -81
- package/src/libs/email/client.ts +111 -111
- package/src/libs/email/contact.ts +35 -35
- package/src/libs/email/newsletter.ts +46 -46
- package/src/libs/email/types.ts +29 -29
- package/src/libs/email/utils.ts +5 -5
- package/src/libs/email/waitlist-application.ts +72 -72
- package/src/libs/email/waitlist.ts +46 -46
- package/src/libs/pricing-examples.ts +12 -12
- package/src/registry/engine.ts +16 -16
- package/src/registry/factory.ts +57 -57
- package/src/registry/registry-docs.ts +656 -666
- package/src/registry/registry-landing.ts +94 -95
- package/src/registry/registry.ts +36 -37
- package/src/registry/types.ts +2 -2
- package/src/registry/utils.ts +56 -56
- package/tsconfig.json +11 -11
- package/tsdown.config.js +5 -5
|
@@ -7,9 +7,8 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
7
7
|
});
|
|
8
8
|
|
|
9
9
|
// src/components/marketing/studio-signup-section.tsx
|
|
10
|
+
import { ArrowRight, Sparkles } from "lucide-react";
|
|
10
11
|
import Link from "next/link";
|
|
11
|
-
import { ArrowRight, Rocket } from "lucide-react";
|
|
12
|
-
import { Button } from "@contractspec/lib.design-system";
|
|
13
12
|
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
14
13
|
"use client";
|
|
15
14
|
var studioUrl = "https://www.contractspec.studio";
|
|
@@ -20,62 +19,47 @@ function StudioSignupSection({
|
|
|
20
19
|
const isCompact = variant === "compact";
|
|
21
20
|
return /* @__PURE__ */ jsxDEV("div", {
|
|
22
21
|
id: "studio-signup",
|
|
23
|
-
className: isCompact ? "space-y-
|
|
22
|
+
className: `${isCompact ? "space-y-5 rounded-[28px] border border-border bg-card p-6" : "editorial-panel space-y-6"}`,
|
|
24
23
|
children: [
|
|
25
24
|
/* @__PURE__ */ jsxDEV("div", {
|
|
26
25
|
className: "space-y-4",
|
|
27
26
|
children: [
|
|
28
27
|
/* @__PURE__ */ jsxDEV("div", {
|
|
29
|
-
className: "
|
|
28
|
+
className: "badge",
|
|
30
29
|
children: [
|
|
31
|
-
/* @__PURE__ */ jsxDEV(
|
|
32
|
-
size: 14
|
|
33
|
-
className: "text-violet-300"
|
|
30
|
+
/* @__PURE__ */ jsxDEV(Sparkles, {
|
|
31
|
+
size: 14
|
|
34
32
|
}, undefined, false, undefined, this),
|
|
35
|
-
|
|
36
|
-
className: "text-sm font-medium text-violet-300",
|
|
37
|
-
children: "ContractSpec Studio"
|
|
38
|
-
}, undefined, false, undefined, this)
|
|
33
|
+
"Studio on top"
|
|
39
34
|
]
|
|
40
35
|
}, undefined, true, undefined, this),
|
|
41
36
|
/* @__PURE__ */ jsxDEV("h2", {
|
|
42
|
-
className: isCompact ? "text-
|
|
43
|
-
children: "
|
|
44
|
-
}, undefined, false, undefined, this),
|
|
45
|
-
/* @__PURE__ */ jsxDEV("p", {
|
|
46
|
-
className: "text-muted-foreground text-sm",
|
|
47
|
-
children: "The AI-powered product decision engine that turns product signals into spec-first deliverables."
|
|
37
|
+
className: isCompact ? "font-serif text-3xl tracking-[-0.04em]" : "font-serif text-4xl tracking-[-0.04em]",
|
|
38
|
+
children: "See the operating layer built on top of the open system."
|
|
48
39
|
}, undefined, false, undefined, this),
|
|
49
40
|
/* @__PURE__ */ jsxDEV("p", {
|
|
50
|
-
className: "text-muted-foreground text-
|
|
51
|
-
children: "
|
|
41
|
+
className: "text-muted-foreground text-sm leading-7",
|
|
42
|
+
children: "Studio packages the workflow for evidence, drafting, review, export, and follow-up. It should feel like the best product built on top of ContractSpec, not a different story."
|
|
52
43
|
}, undefined, false, undefined, this)
|
|
53
44
|
]
|
|
54
45
|
}, undefined, true, undefined, this),
|
|
55
46
|
/* @__PURE__ */ jsxDEV("div", {
|
|
56
|
-
className: "
|
|
47
|
+
className: "grid gap-3 sm:grid-cols-2",
|
|
57
48
|
children: [
|
|
58
|
-
/* @__PURE__ */ jsxDEV(
|
|
59
|
-
|
|
60
|
-
className: "
|
|
61
|
-
children:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
asChild: true,
|
|
73
|
-
variant: "outline",
|
|
74
|
-
className: "w-full sm:w-auto",
|
|
75
|
-
children: /* @__PURE__ */ jsxDEV(Link, {
|
|
76
|
-
href: studioDocsUrl,
|
|
77
|
-
children: "Read Studio Docs"
|
|
78
|
-
}, undefined, false, undefined, this)
|
|
49
|
+
/* @__PURE__ */ jsxDEV(Link, {
|
|
50
|
+
href: studioUrl,
|
|
51
|
+
className: "btn-primary",
|
|
52
|
+
children: [
|
|
53
|
+
"Explore Studio ",
|
|
54
|
+
/* @__PURE__ */ jsxDEV(ArrowRight, {
|
|
55
|
+
className: "ml-2 h-4 w-4"
|
|
56
|
+
}, undefined, false, undefined, this)
|
|
57
|
+
]
|
|
58
|
+
}, undefined, true, undefined, this),
|
|
59
|
+
/* @__PURE__ */ jsxDEV(Link, {
|
|
60
|
+
href: studioDocsUrl,
|
|
61
|
+
className: "btn-ghost",
|
|
62
|
+
children: "Read Studio docs"
|
|
79
63
|
}, undefined, false, undefined, this)
|
|
80
64
|
]
|
|
81
65
|
}, undefined, true, undefined, this)
|
|
@@ -83,866 +67,256 @@ function StudioSignupSection({
|
|
|
83
67
|
}, undefined, true, undefined, this);
|
|
84
68
|
}
|
|
85
69
|
|
|
86
|
-
// src/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
aiActionsPerMonth: 100,
|
|
91
|
-
projects: 1
|
|
92
|
-
},
|
|
93
|
-
builder: {
|
|
94
|
-
regenerationsPerMonthHint: "1,000–2,000+",
|
|
95
|
-
aiActionsPerMonthHint: "1,000+"
|
|
96
|
-
},
|
|
97
|
-
team: {
|
|
98
|
-
description: "Higher limits + cheaper per-regen at scale"
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
// src/components/marketing/pricing-thinking-modal.tsx
|
|
103
|
-
import { CheckCircle } from "lucide-react";
|
|
104
|
-
import {
|
|
105
|
-
Dialog,
|
|
106
|
-
DialogContent,
|
|
107
|
-
DialogDescription,
|
|
108
|
-
DialogHeader,
|
|
109
|
-
DialogTitle
|
|
110
|
-
} from "@contractspec/lib.ui-kit-web/ui/dialog";
|
|
111
|
-
import { Button as Button2 } from "@contractspec/lib.design-system";
|
|
70
|
+
// src/components/marketing/PricingClient.tsx
|
|
71
|
+
import { ChevronDown, ChevronRight } from "lucide-react";
|
|
72
|
+
import Link2 from "next/link";
|
|
73
|
+
import { useState } from "react";
|
|
112
74
|
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
113
75
|
"use client";
|
|
114
|
-
var
|
|
76
|
+
var faqs = [
|
|
115
77
|
{
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
priceLine: "For hobbyists and pre-PMF teams",
|
|
119
|
-
bullets: [
|
|
120
|
-
"1 active project",
|
|
121
|
-
"Small spec size",
|
|
122
|
-
`Example: ~${PRICING_EXAMPLES.free.regenerationsPerMonth} free regenerations per month`,
|
|
123
|
-
`Example: ~${PRICING_EXAMPLES.free.aiActionsPerMonth} free AI agent actions per month`,
|
|
124
|
-
"Unlimited collaborators"
|
|
125
|
-
],
|
|
126
|
-
note: "Good enough to build and launch a real product before paying."
|
|
78
|
+
question: "What stays free?",
|
|
79
|
+
answer: "The OSS foundation stays free. Teams can adopt contracts, generation, runtime adapters, and the core package ecosystem without crossing into a paid product loop."
|
|
127
80
|
},
|
|
128
81
|
{
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
priceLine: "Usage-based, for solo builders and small teams",
|
|
132
|
-
bullets: [
|
|
133
|
-
"More projects",
|
|
134
|
-
`More monthly regenerations included (e.g. ${PRICING_EXAMPLES.builder.regenerationsPerMonthHint})`,
|
|
135
|
-
`More AI agent actions included (e.g. ${PRICING_EXAMPLES.builder.aiActionsPerMonthHint})`,
|
|
136
|
-
"Pay-as-you-go for extra regenerations and AI",
|
|
137
|
-
"Basic environments (dev / prod)"
|
|
138
|
-
],
|
|
139
|
-
note: "Pay for how fast and how often you evolve your system, not for seats."
|
|
82
|
+
question: "What is Studio charging for?",
|
|
83
|
+
answer: "Studio is the operating layer: the packaged workflow for evidence, drafts, review, export, and follow-up on top of the same open system."
|
|
140
84
|
},
|
|
141
85
|
{
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
"Cheaper overages as you scale",
|
|
149
|
-
"Advanced RBAC and governance",
|
|
150
|
-
"SSO, audit trails, and longer retention"
|
|
151
|
-
],
|
|
152
|
-
note: "For platform teams using ContractSpec as infra for multiple apps."
|
|
86
|
+
question: "Why not price the OSS layer?",
|
|
87
|
+
answer: "The GTM works better when technical adopters can prove the foundation in the open, keep their leverage, and only pay when the operating product removes enough operational work."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
question: "Who should talk to you now?",
|
|
91
|
+
answer: "Teams already running AI-heavy product or ops workflows, especially those who feel drift, unsafe regeneration, or coordination pain across multiple surfaces."
|
|
153
92
|
}
|
|
154
93
|
];
|
|
155
|
-
var
|
|
94
|
+
var packages = [
|
|
156
95
|
{
|
|
157
|
-
name: "
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
96
|
+
name: "OSS/Core",
|
|
97
|
+
subtitle: "Free and open",
|
|
98
|
+
description: "Use the open system when you want explicit contracts, safe regeneration, and standard outputs the team owns.",
|
|
99
|
+
items: [
|
|
100
|
+
"Contracts, generation, runtime adapters, harnesses, and agent tooling",
|
|
101
|
+
"Incremental adoption inside existing codebases",
|
|
102
|
+
"Local and CI-friendly workflows",
|
|
103
|
+
"No forced hosted runtime or locked delivery path"
|
|
104
|
+
],
|
|
105
|
+
cta: {
|
|
106
|
+
label: "Start with OSS",
|
|
107
|
+
href: "/install",
|
|
108
|
+
className: "btn-primary"
|
|
109
|
+
}
|
|
165
110
|
},
|
|
166
111
|
{
|
|
167
|
-
name: "
|
|
168
|
-
|
|
169
|
-
|
|
112
|
+
name: "Studio",
|
|
113
|
+
subtitle: "Operating product",
|
|
114
|
+
description: "Use Studio when you want the product layer for evidence, drafting, review, exports, and follow-up.",
|
|
115
|
+
items: [
|
|
116
|
+
"Packaged operating loop on top of the same open system",
|
|
117
|
+
"Opinionated team workflows and governance surfaces",
|
|
118
|
+
"Faster coordination for teams running real product or ops loops",
|
|
119
|
+
"Design partner and rollout paths for teams with live complexity"
|
|
120
|
+
],
|
|
121
|
+
cta: {
|
|
122
|
+
label: "Explore Studio",
|
|
123
|
+
href: "https://www.contractspec.studio",
|
|
124
|
+
className: "btn-ghost"
|
|
125
|
+
}
|
|
170
126
|
}
|
|
171
127
|
];
|
|
172
|
-
function
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
children: /* @__PURE__ */ jsxDEV2(DialogContent, {
|
|
181
|
-
className: "max-h-[90vh] w-full overflow-y-auto md:max-w-5xl",
|
|
182
|
-
children: [
|
|
183
|
-
/* @__PURE__ */ jsxDEV2(DialogHeader, {
|
|
184
|
-
children: [
|
|
185
|
-
/* @__PURE__ */ jsxDEV2(DialogTitle, {
|
|
186
|
-
children: "Tentative pricing (work in progress)"
|
|
187
|
-
}, undefined, false, undefined, this),
|
|
188
|
-
/* @__PURE__ */ jsxDEV2(DialogDescription, {
|
|
189
|
-
children: "ContractSpec Studio is live. This is a draft of how paid plans are expected to evolve as usage grows."
|
|
190
|
-
}, undefined, false, undefined, this)
|
|
191
|
-
]
|
|
192
|
-
}, undefined, true, undefined, this),
|
|
193
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
194
|
-
className: "space-y-8",
|
|
128
|
+
function PricingClient() {
|
|
129
|
+
const [openFaq, setOpenFaq] = useState(0);
|
|
130
|
+
return /* @__PURE__ */ jsxDEV2("main", {
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsxDEV2("section", {
|
|
133
|
+
className: "section-padding hero-gradient border-border/70 border-b",
|
|
134
|
+
children: /* @__PURE__ */ jsxDEV2("div", {
|
|
135
|
+
className: "editorial-shell grid gap-8 lg:grid-cols-[1.05fr_0.95fr]",
|
|
195
136
|
children: [
|
|
196
137
|
/* @__PURE__ */ jsxDEV2("div", {
|
|
197
|
-
className: "space-y-
|
|
198
|
-
children: [
|
|
199
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
200
|
-
className: "flex items-center gap-2",
|
|
201
|
-
children: [
|
|
202
|
-
/* @__PURE__ */ jsxDEV2("span", {
|
|
203
|
-
className: "text-muted-foreground text-xs font-medium",
|
|
204
|
-
children: "Draft"
|
|
205
|
-
}, undefined, false, undefined, this),
|
|
206
|
-
/* @__PURE__ */ jsxDEV2("span", {
|
|
207
|
-
className: "text-muted-foreground text-xs",
|
|
208
|
-
children: "•"
|
|
209
|
-
}, undefined, false, undefined, this),
|
|
210
|
-
/* @__PURE__ */ jsxDEV2("span", {
|
|
211
|
-
className: "text-muted-foreground text-xs",
|
|
212
|
-
children: "Subject to change"
|
|
213
|
-
}, undefined, false, undefined, this)
|
|
214
|
-
]
|
|
215
|
-
}, undefined, true, undefined, this),
|
|
216
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
217
|
-
className: "grid gap-4 md:grid-cols-3",
|
|
218
|
-
children: pricingTiers.map((tier) => /* @__PURE__ */ jsxDEV2("div", {
|
|
219
|
-
className: "card-subtle relative space-y-4 p-6",
|
|
220
|
-
children: [
|
|
221
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
222
|
-
className: "bg-muted border-border absolute -top-2 left-1/2 -translate-x-1/2 rounded-full border px-2 py-0.5 text-xs font-medium",
|
|
223
|
-
children: tier.tag
|
|
224
|
-
}, undefined, false, undefined, this),
|
|
225
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
226
|
-
className: "space-y-2 pt-2",
|
|
227
|
-
children: [
|
|
228
|
-
/* @__PURE__ */ jsxDEV2("h3", {
|
|
229
|
-
className: "text-xl font-bold",
|
|
230
|
-
children: tier.title
|
|
231
|
-
}, undefined, false, undefined, this),
|
|
232
|
-
/* @__PURE__ */ jsxDEV2("p", {
|
|
233
|
-
className: "text-muted-foreground text-sm",
|
|
234
|
-
children: tier.priceLine
|
|
235
|
-
}, undefined, false, undefined, this)
|
|
236
|
-
]
|
|
237
|
-
}, undefined, true, undefined, this),
|
|
238
|
-
/* @__PURE__ */ jsxDEV2("ul", {
|
|
239
|
-
className: "space-y-2",
|
|
240
|
-
children: tier.bullets.map((bullet, i) => /* @__PURE__ */ jsxDEV2("li", {
|
|
241
|
-
className: "text-muted-foreground flex gap-2 text-sm",
|
|
242
|
-
children: [
|
|
243
|
-
/* @__PURE__ */ jsxDEV2(CheckCircle, {
|
|
244
|
-
size: 14,
|
|
245
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
246
|
-
}, undefined, false, undefined, this),
|
|
247
|
-
bullet
|
|
248
|
-
]
|
|
249
|
-
}, i, true, undefined, this))
|
|
250
|
-
}, undefined, false, undefined, this),
|
|
251
|
-
/* @__PURE__ */ jsxDEV2("p", {
|
|
252
|
-
className: "text-muted-foreground text-xs italic",
|
|
253
|
-
children: tier.note
|
|
254
|
-
}, undefined, false, undefined, this)
|
|
255
|
-
]
|
|
256
|
-
}, tier.title, true, undefined, this))
|
|
257
|
-
}, undefined, false, undefined, this)
|
|
258
|
-
]
|
|
259
|
-
}, undefined, true, undefined, this),
|
|
260
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
261
|
-
className: "border-border space-y-4 border-t pt-6",
|
|
138
|
+
className: "space-y-6",
|
|
262
139
|
children: [
|
|
140
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
141
|
+
className: "editorial-kicker",
|
|
142
|
+
children: "Packaging, not upsell fog"
|
|
143
|
+
}, undefined, false, undefined, this),
|
|
144
|
+
/* @__PURE__ */ jsxDEV2("h1", {
|
|
145
|
+
className: "editorial-title max-w-4xl",
|
|
146
|
+
children: "The open system is how teams start. Studio is how some teams operate."
|
|
147
|
+
}, undefined, false, undefined, this),
|
|
148
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
149
|
+
className: "editorial-subtitle",
|
|
150
|
+
children: "Pricing should reflect the product split honestly. The OSS layer is the open foundation. Studio is the paid operating surface when the team wants a packaged workflow on top."
|
|
151
|
+
}, undefined, false, undefined, this),
|
|
263
152
|
/* @__PURE__ */ jsxDEV2("div", {
|
|
153
|
+
className: "flex flex-col gap-3 sm:flex-row",
|
|
264
154
|
children: [
|
|
265
|
-
/* @__PURE__ */ jsxDEV2(
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
155
|
+
/* @__PURE__ */ jsxDEV2(Link2, {
|
|
156
|
+
href: "/install",
|
|
157
|
+
className: "btn-primary",
|
|
158
|
+
children: [
|
|
159
|
+
"Start with OSS ",
|
|
160
|
+
/* @__PURE__ */ jsxDEV2(ChevronRight, {
|
|
161
|
+
className: "ml-2 h-4 w-4"
|
|
162
|
+
}, undefined, false, undefined, this)
|
|
163
|
+
]
|
|
164
|
+
}, undefined, true, undefined, this),
|
|
165
|
+
/* @__PURE__ */ jsxDEV2(Link2, {
|
|
166
|
+
href: "https://www.contractspec.studio",
|
|
167
|
+
className: "btn-ghost",
|
|
168
|
+
children: "Explore Studio"
|
|
276
169
|
}, undefined, false, undefined, this)
|
|
277
170
|
]
|
|
278
|
-
}, undefined, true, undefined, this)
|
|
279
|
-
/* @__PURE__ */ jsxDEV2("div", {
|
|
280
|
-
className: "grid gap-4 md:grid-cols-3",
|
|
281
|
-
children: usageMetrics.map((metric) => /* @__PURE__ */ jsxDEV2("div", {
|
|
282
|
-
className: "card-subtle space-y-2 p-4",
|
|
283
|
-
children: [
|
|
284
|
-
/* @__PURE__ */ jsxDEV2("h4", {
|
|
285
|
-
className: "text-sm font-semibold",
|
|
286
|
-
children: metric.name
|
|
287
|
-
}, undefined, false, undefined, this),
|
|
288
|
-
/* @__PURE__ */ jsxDEV2("p", {
|
|
289
|
-
className: "text-muted-foreground text-xs",
|
|
290
|
-
children: metric.freeTier
|
|
291
|
-
}, undefined, false, undefined, this),
|
|
292
|
-
/* @__PURE__ */ jsxDEV2("p", {
|
|
293
|
-
className: "text-muted-foreground text-xs",
|
|
294
|
-
children: metric.beyond
|
|
295
|
-
}, undefined, false, undefined, this)
|
|
296
|
-
]
|
|
297
|
-
}, metric.name, true, undefined, this))
|
|
298
|
-
}, undefined, false, undefined, this)
|
|
171
|
+
}, undefined, true, undefined, this)
|
|
299
172
|
]
|
|
300
173
|
}, undefined, true, undefined, this),
|
|
301
174
|
/* @__PURE__ */ jsxDEV2("div", {
|
|
302
|
-
className: "
|
|
175
|
+
className: "editorial-panel space-y-5",
|
|
303
176
|
children: [
|
|
304
177
|
/* @__PURE__ */ jsxDEV2("p", {
|
|
305
|
-
className: "
|
|
306
|
-
children: "
|
|
178
|
+
className: "editorial-kicker",
|
|
179
|
+
children: "Current GTM"
|
|
307
180
|
}, undefined, false, undefined, this),
|
|
308
|
-
/* @__PURE__ */ jsxDEV2("
|
|
309
|
-
className: "
|
|
310
|
-
children: "
|
|
181
|
+
/* @__PURE__ */ jsxDEV2("h2", {
|
|
182
|
+
className: "editorial-panel-title",
|
|
183
|
+
children: "Earn trust in the open, then earn the right to sell the operating product."
|
|
311
184
|
}, undefined, false, undefined, this),
|
|
312
185
|
/* @__PURE__ */ jsxDEV2("p", {
|
|
313
|
-
className: "text-muted-foreground text-
|
|
314
|
-
children: "
|
|
315
|
-
}, undefined, false, undefined, this),
|
|
316
|
-
onApplyClick && /* @__PURE__ */ jsxDEV2(Button2, {
|
|
317
|
-
onClick: () => {
|
|
318
|
-
onOpenChange(false);
|
|
319
|
-
onApplyClick();
|
|
320
|
-
},
|
|
321
|
-
className: "w-full",
|
|
322
|
-
variant: "outline",
|
|
323
|
-
children: "Try Studio"
|
|
324
|
-
}, undefined, false, undefined, this)
|
|
325
|
-
]
|
|
326
|
-
}, undefined, true, undefined, this)
|
|
327
|
-
]
|
|
328
|
-
}, undefined, true, undefined, this)
|
|
329
|
-
]
|
|
330
|
-
}, undefined, true, undefined, this)
|
|
331
|
-
}, undefined, false, undefined, this);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
// src/components/marketing/PricingClient.tsx
|
|
335
|
-
import { useState } from "react";
|
|
336
|
-
import Link2 from "next/link";
|
|
337
|
-
import { CheckCircle as CheckCircle2, ChevronDown, ChevronRight } from "lucide-react";
|
|
338
|
-
import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
|
|
339
|
-
"use client";
|
|
340
|
-
var faqs = [
|
|
341
|
-
{
|
|
342
|
-
question: "Can I use ContractSpec Studio today?",
|
|
343
|
-
answer: "Yes. ContractSpec Studio is live at www.contractspec.studio. Start with the free tier and upgrade as paid plans roll out."
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
question: "What will you charge for later?",
|
|
347
|
-
answer: "Pricing is evolving toward usage: regenerations, AI agent actions, and active projects. A generous free tier will remain so smaller teams and experiments can thrive."
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
question: "What do I get as a design partner?",
|
|
351
|
-
answer: "Direct collaboration on roadmap priorities, hands-on onboarding, and priority support. You also help shape Studio workflows before broad rollout."
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
question: "Will you ever charge per seat?",
|
|
355
|
-
answer: "No. We want everyone in your team to use ContractSpec without friction. Pricing is tied to how much of your system we help you maintain, not how many teammates you invite."
|
|
356
|
-
}
|
|
357
|
-
];
|
|
358
|
-
function PricingClient() {
|
|
359
|
-
const [openFaq, setOpenFaq] = useState(null);
|
|
360
|
-
const [pricingModalOpen, setPricingModalOpen] = useState(false);
|
|
361
|
-
const openStudio = () => {
|
|
362
|
-
window.open("https://www.contractspec.studio", "_blank", "noopener,noreferrer");
|
|
363
|
-
};
|
|
364
|
-
return /* @__PURE__ */ jsxDEV3("main", {
|
|
365
|
-
className: "",
|
|
366
|
-
children: [
|
|
367
|
-
/* @__PURE__ */ jsxDEV3("section", {
|
|
368
|
-
className: "section-padding hero-gradient relative",
|
|
369
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
370
|
-
className: "mx-auto max-w-4xl space-y-6 text-center",
|
|
371
|
-
children: [
|
|
372
|
-
/* @__PURE__ */ jsxDEV3("h1", {
|
|
373
|
-
className: "text-5xl leading-tight font-bold md:text-6xl",
|
|
374
|
-
children: "Transparent, usage-based pricing – after we earn it."
|
|
375
|
-
}, undefined, false, undefined, this),
|
|
376
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
377
|
-
className: "text-muted-foreground mx-auto max-w-2xl text-lg",
|
|
378
|
-
children: "ContractSpec Core (the OSS compiler) is and always will be free. ContractSpec Studio is live, with paid plans rolling out progressively."
|
|
379
|
-
}, undefined, false, undefined, this),
|
|
380
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
381
|
-
className: "flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row",
|
|
382
|
-
children: [
|
|
383
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
384
|
-
href: "/install",
|
|
385
|
-
className: "btn-primary inline-flex items-center gap-2",
|
|
386
|
-
children: [
|
|
387
|
-
"Install OSS Core ",
|
|
388
|
-
/* @__PURE__ */ jsxDEV3(ChevronRight, {
|
|
389
|
-
size: 16
|
|
390
|
-
}, undefined, false, undefined, this)
|
|
391
|
-
]
|
|
392
|
-
}, undefined, true, undefined, this),
|
|
393
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
394
|
-
href: "https://www.contractspec.studio",
|
|
395
|
-
className: "btn-ghost inline-flex items-center gap-2",
|
|
396
|
-
children: "Try Studio Free"
|
|
186
|
+
className: "text-muted-foreground text-sm leading-7",
|
|
187
|
+
children: "This page should make the ladder clear: prove the OSS foundation first, then package the workflow that removes operational drag for teams that need more."
|
|
397
188
|
}, undefined, false, undefined, this)
|
|
398
189
|
]
|
|
399
190
|
}, undefined, true, undefined, this)
|
|
400
191
|
]
|
|
401
192
|
}, undefined, true, undefined, this)
|
|
402
193
|
}, undefined, false, undefined, this),
|
|
403
|
-
/* @__PURE__ */
|
|
404
|
-
className: "section
|
|
405
|
-
children: /* @__PURE__ */
|
|
406
|
-
className: "
|
|
407
|
-
children: /* @__PURE__ */
|
|
408
|
-
className: "
|
|
194
|
+
/* @__PURE__ */ jsxDEV2("section", {
|
|
195
|
+
className: "editorial-section",
|
|
196
|
+
children: /* @__PURE__ */ jsxDEV2("div", {
|
|
197
|
+
className: "editorial-shell grid gap-6 lg:grid-cols-2",
|
|
198
|
+
children: packages.map((pkg) => /* @__PURE__ */ jsxDEV2("div", {
|
|
199
|
+
className: "editorial-panel space-y-6",
|
|
409
200
|
children: [
|
|
410
|
-
/* @__PURE__ */
|
|
411
|
-
className: "
|
|
201
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
202
|
+
className: "space-y-3",
|
|
412
203
|
children: [
|
|
413
|
-
/* @__PURE__ */
|
|
414
|
-
className: "
|
|
415
|
-
children:
|
|
416
|
-
className: "text-sm font-medium text-violet-300",
|
|
417
|
-
children: "Now accepting design partners"
|
|
418
|
-
}, undefined, false, undefined, this)
|
|
204
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
205
|
+
className: "editorial-kicker",
|
|
206
|
+
children: pkg.subtitle
|
|
419
207
|
}, undefined, false, undefined, this),
|
|
420
|
-
/* @__PURE__ */
|
|
421
|
-
className: "text-
|
|
422
|
-
children:
|
|
208
|
+
/* @__PURE__ */ jsxDEV2("h2", {
|
|
209
|
+
className: "font-serif text-4xl tracking-[-0.04em]",
|
|
210
|
+
children: pkg.name
|
|
423
211
|
}, undefined, false, undefined, this),
|
|
424
|
-
/* @__PURE__ */
|
|
425
|
-
className: "text-muted-foreground text-sm",
|
|
426
|
-
children:
|
|
427
|
-
}, undefined, false, undefined, this)
|
|
428
|
-
]
|
|
429
|
-
}, undefined, true, undefined, this),
|
|
430
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
431
|
-
className: "flex-1 space-y-4",
|
|
432
|
-
children: [
|
|
433
|
-
/* @__PURE__ */ jsxDEV3("ul", {
|
|
434
|
-
className: "text-muted-foreground space-y-2 text-sm",
|
|
435
|
-
children: [
|
|
436
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
437
|
-
className: "flex gap-2",
|
|
438
|
-
children: [
|
|
439
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
440
|
-
size: 16,
|
|
441
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
442
|
-
}, undefined, false, undefined, this),
|
|
443
|
-
"Priority access to new Studio capabilities"
|
|
444
|
-
]
|
|
445
|
-
}, undefined, true, undefined, this),
|
|
446
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
447
|
-
className: "flex gap-2",
|
|
448
|
-
children: [
|
|
449
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
450
|
-
size: 16,
|
|
451
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
452
|
-
}, undefined, false, undefined, this),
|
|
453
|
-
"Hands-on onboarding and architecture help"
|
|
454
|
-
]
|
|
455
|
-
}, undefined, true, undefined, this),
|
|
456
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
457
|
-
className: "flex gap-2",
|
|
458
|
-
children: [
|
|
459
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
460
|
-
size: 16,
|
|
461
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
462
|
-
}, undefined, false, undefined, this),
|
|
463
|
-
"Influence over roadmap and features"
|
|
464
|
-
]
|
|
465
|
-
}, undefined, true, undefined, this),
|
|
466
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
467
|
-
className: "flex gap-2",
|
|
468
|
-
children: [
|
|
469
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
470
|
-
size: 16,
|
|
471
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
472
|
-
}, undefined, false, undefined, this),
|
|
473
|
-
"Priority support through direct channels"
|
|
474
|
-
]
|
|
475
|
-
}, undefined, true, undefined, this),
|
|
476
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
477
|
-
className: "flex gap-2",
|
|
478
|
-
children: [
|
|
479
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
480
|
-
size: 16,
|
|
481
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
482
|
-
}, undefined, false, undefined, this),
|
|
483
|
-
"Pricing input and partner incentives"
|
|
484
|
-
]
|
|
485
|
-
}, undefined, true, undefined, this)
|
|
486
|
-
]
|
|
487
|
-
}, undefined, true, undefined, this),
|
|
488
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
489
|
-
href: "/design-partner",
|
|
490
|
-
className: "btn-primary w-full md:w-auto",
|
|
491
|
-
children: "Apply as a design partner"
|
|
492
|
-
}, undefined, false, undefined, this)
|
|
493
|
-
]
|
|
494
|
-
}, undefined, true, undefined, this)
|
|
495
|
-
]
|
|
496
|
-
}, undefined, true, undefined, this)
|
|
497
|
-
}, undefined, false, undefined, this)
|
|
498
|
-
}, undefined, false, undefined, this),
|
|
499
|
-
/* @__PURE__ */ jsxDEV3("section", {
|
|
500
|
-
className: "section-padding border-border border-b",
|
|
501
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
502
|
-
className: "mx-auto max-w-6xl",
|
|
503
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
504
|
-
className: "grid gap-6 md:grid-cols-3",
|
|
505
|
-
children: [
|
|
506
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
507
|
-
className: "card-subtle col-span-3 space-y-6 border-violet-500/20 p-6",
|
|
508
|
-
children: [
|
|
509
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
510
|
-
className: "absolute -top-3 left-1/2 -translate-x-1/2 rounded-full bg-violet-500 px-3 py-1 text-xs font-medium text-white",
|
|
511
|
-
children: [
|
|
512
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
513
|
-
className: "text-1xl font-bold",
|
|
514
|
-
children: "Free Forever"
|
|
515
|
-
}, undefined, false, undefined, this),
|
|
516
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
517
|
-
className: "text-muted-foreground text-xs",
|
|
518
|
-
children: "Apache 2.0 / MIT License"
|
|
519
|
-
}, undefined, false, undefined, this)
|
|
520
|
-
]
|
|
521
|
-
}, undefined, true, undefined, this),
|
|
522
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
523
|
-
className: "flex flex-row justify-around",
|
|
524
|
-
children: [
|
|
525
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
526
|
-
className: "w-1/2",
|
|
527
|
-
children: [
|
|
528
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
529
|
-
className: "space-y-2",
|
|
530
|
-
children: /* @__PURE__ */ jsxDEV3("h2", {
|
|
531
|
-
className: "text-2xl font-bold",
|
|
532
|
-
children: "OSS Core"
|
|
533
|
-
}, undefined, false, undefined, this)
|
|
534
|
-
}, undefined, false, undefined, this),
|
|
535
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
536
|
-
className: "text-muted-foreground text-sm",
|
|
537
|
-
children: "The complete spec-first compiler. Generate API, DB, and UI code locally."
|
|
538
|
-
}, undefined, false, undefined, this)
|
|
539
|
-
]
|
|
540
|
-
}, undefined, true, undefined, this),
|
|
541
|
-
/* @__PURE__ */ jsxDEV3("ul", {
|
|
542
|
-
className: "space-y-3",
|
|
543
|
-
children: [
|
|
544
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
545
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
546
|
-
children: [
|
|
547
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
548
|
-
size: 16,
|
|
549
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
550
|
-
}, undefined, false, undefined, this),
|
|
551
|
-
"Unlimited local regenerations"
|
|
552
|
-
]
|
|
553
|
-
}, undefined, true, undefined, this),
|
|
554
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
555
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
556
|
-
children: [
|
|
557
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
558
|
-
size: 16,
|
|
559
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
560
|
-
}, undefined, false, undefined, this),
|
|
561
|
-
"All standard generators included"
|
|
562
|
-
]
|
|
563
|
-
}, undefined, true, undefined, this),
|
|
564
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
565
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
566
|
-
children: [
|
|
567
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
568
|
-
size: 16,
|
|
569
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
570
|
-
}, undefined, false, undefined, this),
|
|
571
|
-
"Run in your own CI/CD"
|
|
572
|
-
]
|
|
573
|
-
}, undefined, true, undefined, this),
|
|
574
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
575
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
576
|
-
children: [
|
|
577
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
578
|
-
size: 16,
|
|
579
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
580
|
-
}, undefined, false, undefined, this),
|
|
581
|
-
"Community support"
|
|
582
|
-
]
|
|
583
|
-
}, undefined, true, undefined, this)
|
|
584
|
-
]
|
|
585
|
-
}, undefined, true, undefined, this)
|
|
586
|
-
]
|
|
587
|
-
}, undefined, true, undefined, this),
|
|
588
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
589
|
-
href: "/install",
|
|
590
|
-
className: "btn-ghost w-full",
|
|
591
|
-
children: "Install now"
|
|
212
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
213
|
+
className: "text-muted-foreground text-sm leading-7",
|
|
214
|
+
children: pkg.description
|
|
592
215
|
}, undefined, false, undefined, this)
|
|
593
216
|
]
|
|
594
217
|
}, undefined, true, undefined, this),
|
|
595
|
-
/* @__PURE__ */
|
|
596
|
-
className: "
|
|
597
|
-
children:
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
className: "text-2xl font-bold",
|
|
614
|
-
children: "Invite-based"
|
|
615
|
-
}, undefined, false, undefined, this),
|
|
616
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
617
|
-
className: "text-muted-foreground text-xs",
|
|
618
|
-
children: "Built for teams shaping the next Studio capabilities"
|
|
619
|
-
}, undefined, false, undefined, this)
|
|
620
|
-
]
|
|
621
|
-
}, undefined, true, undefined, this)
|
|
622
|
-
]
|
|
623
|
-
}, undefined, true, undefined, this),
|
|
624
|
-
/* @__PURE__ */ jsxDEV3("ul", {
|
|
625
|
-
className: "space-y-3",
|
|
626
|
-
children: [
|
|
627
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
628
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
629
|
-
children: [
|
|
630
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
631
|
-
size: 16,
|
|
632
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
633
|
-
}, undefined, false, undefined, this),
|
|
634
|
-
"Use ContractSpec Studio for real projects"
|
|
635
|
-
]
|
|
636
|
-
}, undefined, true, undefined, this),
|
|
637
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
638
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
639
|
-
children: [
|
|
640
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
641
|
-
size: 16,
|
|
642
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
643
|
-
}, undefined, false, undefined, this),
|
|
644
|
-
"Work directly with the team on architecture and workflow design"
|
|
645
|
-
]
|
|
646
|
-
}, undefined, true, undefined, this),
|
|
647
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
648
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
649
|
-
children: [
|
|
650
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
651
|
-
size: 16,
|
|
652
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
653
|
-
}, undefined, false, undefined, this),
|
|
654
|
-
"Access to partner-only previews and feedback loops"
|
|
655
|
-
]
|
|
656
|
-
}, undefined, true, undefined, this),
|
|
657
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
658
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
659
|
-
children: [
|
|
660
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
661
|
-
size: 16,
|
|
662
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
663
|
-
}, undefined, false, undefined, this),
|
|
664
|
-
"Priority support and roadmap influence"
|
|
665
|
-
]
|
|
666
|
-
}, undefined, true, undefined, this)
|
|
667
|
-
]
|
|
668
|
-
}, undefined, true, undefined, this),
|
|
669
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
670
|
-
href: "/design-partner",
|
|
671
|
-
className: "btn-primary w-full",
|
|
672
|
-
children: "Apply as a design partner"
|
|
673
|
-
}, undefined, false, undefined, this)
|
|
674
|
-
]
|
|
675
|
-
}, undefined, true, undefined, this),
|
|
676
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
677
|
-
className: "card-subtle relative space-y-6 p-6",
|
|
678
|
-
children: [
|
|
679
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
680
|
-
className: "bg-muted border-border absolute -top-3 left-1/2 -translate-x-1/2 rounded-full border px-3 py-1 text-xs font-medium",
|
|
681
|
-
children: "Coming soon"
|
|
682
|
-
}, undefined, false, undefined, this),
|
|
683
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
684
|
-
className: "space-y-2",
|
|
685
|
-
children: [
|
|
686
|
-
/* @__PURE__ */ jsxDEV3("h2", {
|
|
687
|
-
className: "text-2xl font-bold",
|
|
688
|
-
children: "Builder"
|
|
689
|
-
}, undefined, false, undefined, this),
|
|
690
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
691
|
-
className: "space-y-1",
|
|
692
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
693
|
-
className: "text-2xl font-bold",
|
|
694
|
-
children: "Usage-based, for solo builders and small teams"
|
|
695
|
-
}, undefined, false, undefined, this)
|
|
696
|
-
}, undefined, false, undefined, this)
|
|
697
|
-
]
|
|
698
|
-
}, undefined, true, undefined, this),
|
|
699
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
700
|
-
className: "text-muted-foreground text-sm",
|
|
701
|
-
children: "Pay only for what you regenerate and the AI you consume. No seat-based pricing, and a generous free tier for experiments."
|
|
702
|
-
}, undefined, false, undefined, this),
|
|
703
|
-
/* @__PURE__ */ jsxDEV3("ul", {
|
|
704
|
-
className: "space-y-2",
|
|
705
|
-
children: [
|
|
706
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
707
|
-
className: "text-muted-foreground text-sm",
|
|
708
|
-
children: "1–3 projects"
|
|
709
|
-
}, undefined, false, undefined, this),
|
|
710
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
711
|
-
className: "text-muted-foreground text-sm",
|
|
712
|
-
children: "Generous monthly free regenerations"
|
|
713
|
-
}, undefined, false, undefined, this),
|
|
714
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
715
|
-
className: "text-muted-foreground text-sm",
|
|
716
|
-
children: "Pay-as-you-go beyond the free tier"
|
|
717
|
-
}, undefined, false, undefined, this)
|
|
718
|
-
]
|
|
719
|
-
}, undefined, true, undefined, this),
|
|
720
|
-
/* @__PURE__ */ jsxDEV3("button", {
|
|
721
|
-
disabled: true,
|
|
722
|
-
className: "btn-ghost w-full cursor-not-allowed opacity-50",
|
|
723
|
-
children: "Available after pricing rollout"
|
|
724
|
-
}, undefined, false, undefined, this)
|
|
725
|
-
]
|
|
726
|
-
}, undefined, true, undefined, this),
|
|
727
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
728
|
-
className: "card-subtle relative space-y-6 p-6",
|
|
729
|
-
children: [
|
|
730
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
731
|
-
className: "bg-muted border-border absolute -top-3 left-1/2 -translate-x-1/2 rounded-full border px-3 py-1 text-xs font-medium",
|
|
732
|
-
children: "Coming soon"
|
|
733
|
-
}, undefined, false, undefined, this),
|
|
734
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
735
|
-
className: "space-y-2",
|
|
736
|
-
children: [
|
|
737
|
-
/* @__PURE__ */ jsxDEV3("h2", {
|
|
738
|
-
className: "text-2xl font-bold",
|
|
739
|
-
children: "Team & Platform"
|
|
740
|
-
}, undefined, false, undefined, this),
|
|
741
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
742
|
-
className: "space-y-1",
|
|
743
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
744
|
-
className: "text-2xl font-bold",
|
|
745
|
-
children: "Custom, for teams standardizing on ContractSpec"
|
|
746
|
-
}, undefined, false, undefined, this)
|
|
747
|
-
}, undefined, false, undefined, this)
|
|
748
|
-
]
|
|
749
|
-
}, undefined, true, undefined, this),
|
|
750
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
751
|
-
className: "text-muted-foreground text-sm",
|
|
752
|
-
children: "For teams running multiple apps or platforms on ContractSpec, with stricter governance, data, and compliance needs."
|
|
753
|
-
}, undefined, false, undefined, this),
|
|
754
|
-
/* @__PURE__ */ jsxDEV3("ul", {
|
|
755
|
-
className: "space-y-3",
|
|
756
|
-
children: [
|
|
757
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
758
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
759
|
-
children: [
|
|
760
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
761
|
-
size: 16,
|
|
762
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
763
|
-
}, undefined, false, undefined, this),
|
|
764
|
-
"Multiple projects and environments"
|
|
765
|
-
]
|
|
766
|
-
}, undefined, true, undefined, this),
|
|
767
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
768
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
769
|
-
children: [
|
|
770
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
771
|
-
size: 16,
|
|
772
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
773
|
-
}, undefined, false, undefined, this),
|
|
774
|
-
"Advanced RBAC and policy packs"
|
|
775
|
-
]
|
|
776
|
-
}, undefined, true, undefined, this),
|
|
777
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
778
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
779
|
-
children: [
|
|
780
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
781
|
-
size: 16,
|
|
782
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
783
|
-
}, undefined, false, undefined, this),
|
|
784
|
-
"SSO, audit trails, and longer retention"
|
|
785
|
-
]
|
|
786
|
-
}, undefined, true, undefined, this),
|
|
787
|
-
/* @__PURE__ */ jsxDEV3("li", {
|
|
788
|
-
className: "text-muted-foreground flex gap-3 text-sm",
|
|
789
|
-
children: [
|
|
790
|
-
/* @__PURE__ */ jsxDEV3(CheckCircle2, {
|
|
791
|
-
size: 16,
|
|
792
|
-
className: "mt-0.5 shrink-0 text-violet-400"
|
|
793
|
-
}, undefined, false, undefined, this),
|
|
794
|
-
"Priority support & SLAs"
|
|
795
|
-
]
|
|
796
|
-
}, undefined, true, undefined, this)
|
|
797
|
-
]
|
|
798
|
-
}, undefined, true, undefined, this),
|
|
799
|
-
/* @__PURE__ */ jsxDEV3(Link2, {
|
|
800
|
-
href: "/contact",
|
|
801
|
-
className: "btn-ghost w-full",
|
|
802
|
-
children: "Talk to us"
|
|
803
|
-
}, undefined, false, undefined, this)
|
|
804
|
-
]
|
|
805
|
-
}, undefined, true, undefined, this)
|
|
218
|
+
/* @__PURE__ */ jsxDEV2("ul", {
|
|
219
|
+
className: "editorial-list",
|
|
220
|
+
children: pkg.items.map((item) => /* @__PURE__ */ jsxDEV2("li", {
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ jsxDEV2("span", {
|
|
223
|
+
className: "editorial-list-marker"
|
|
224
|
+
}, undefined, false, undefined, this),
|
|
225
|
+
/* @__PURE__ */ jsxDEV2("span", {
|
|
226
|
+
children: item
|
|
227
|
+
}, undefined, false, undefined, this)
|
|
228
|
+
]
|
|
229
|
+
}, item, true, undefined, this))
|
|
230
|
+
}, undefined, false, undefined, this),
|
|
231
|
+
/* @__PURE__ */ jsxDEV2(Link2, {
|
|
232
|
+
href: pkg.cta.href,
|
|
233
|
+
className: pkg.cta.className,
|
|
234
|
+
children: pkg.cta.label
|
|
235
|
+
}, undefined, false, undefined, this)
|
|
806
236
|
]
|
|
807
|
-
},
|
|
237
|
+
}, pkg.name, true, undefined, this))
|
|
808
238
|
}, undefined, false, undefined, this)
|
|
809
239
|
}, undefined, false, undefined, this),
|
|
810
|
-
/* @__PURE__ */
|
|
811
|
-
className: "section
|
|
812
|
-
children: /* @__PURE__ */
|
|
813
|
-
className: "
|
|
240
|
+
/* @__PURE__ */ jsxDEV2("section", {
|
|
241
|
+
className: "editorial-section bg-striped",
|
|
242
|
+
children: /* @__PURE__ */ jsxDEV2("div", {
|
|
243
|
+
className: "editorial-shell grid gap-8 lg:grid-cols-[0.95fr_1.05fr]",
|
|
814
244
|
children: [
|
|
815
|
-
/* @__PURE__ */
|
|
816
|
-
className: "space-y-4
|
|
245
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
246
|
+
className: "space-y-4",
|
|
817
247
|
children: [
|
|
818
|
-
/* @__PURE__ */
|
|
819
|
-
className: "
|
|
820
|
-
children: "
|
|
248
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
249
|
+
className: "editorial-kicker",
|
|
250
|
+
children: "Design partner path"
|
|
821
251
|
}, undefined, false, undefined, this),
|
|
822
|
-
/* @__PURE__ */
|
|
823
|
-
className: "
|
|
824
|
-
children: "
|
|
252
|
+
/* @__PURE__ */ jsxDEV2("h2", {
|
|
253
|
+
className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
|
|
254
|
+
children: "For teams already carrying real AI-native complexity."
|
|
255
|
+
}, undefined, false, undefined, this),
|
|
256
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
257
|
+
className: "editorial-copy",
|
|
258
|
+
children: "The design partner path exists for teams that need the operating layer now and are willing to shape it with us. That is not “enterprise later” positioning. It is a practical way to learn from the hardest live workflows first."
|
|
259
|
+
}, undefined, false, undefined, this),
|
|
260
|
+
/* @__PURE__ */ jsxDEV2(Link2, {
|
|
261
|
+
href: "/design-partner",
|
|
262
|
+
className: "btn-primary",
|
|
263
|
+
children: "Apply as a design partner"
|
|
825
264
|
}, undefined, false, undefined, this)
|
|
826
265
|
]
|
|
827
266
|
}, undefined, true, undefined, this),
|
|
828
|
-
/* @__PURE__ */
|
|
829
|
-
className: "grid gap-6 md:grid-cols-3",
|
|
830
|
-
children: [
|
|
831
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
832
|
-
className: "card-subtle space-y-3 p-6",
|
|
833
|
-
children: [
|
|
834
|
-
/* @__PURE__ */ jsxDEV3("h3", {
|
|
835
|
-
className: "font-bold",
|
|
836
|
-
children: "Generous free tier"
|
|
837
|
-
}, undefined, false, undefined, this),
|
|
838
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
839
|
-
className: "text-muted-foreground text-sm",
|
|
840
|
-
children: "One serious project, small spec, and enough monthly regenerations to ship something real."
|
|
841
|
-
}, undefined, false, undefined, this)
|
|
842
|
-
]
|
|
843
|
-
}, undefined, true, undefined, this),
|
|
844
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
845
|
-
className: "card-subtle space-y-3 p-6",
|
|
846
|
-
children: [
|
|
847
|
-
/* @__PURE__ */ jsxDEV3("h3", {
|
|
848
|
-
className: "font-bold",
|
|
849
|
-
children: "Usage-based beyond free"
|
|
850
|
-
}, undefined, false, undefined, this),
|
|
851
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
852
|
-
className: "text-muted-foreground text-sm",
|
|
853
|
-
children: "You pay for regenerations and AI agent actions, not per-seat. The more your system evolves via ContractSpec, the more you pay."
|
|
854
|
-
}, undefined, false, undefined, this)
|
|
855
|
-
]
|
|
856
|
-
}, undefined, true, undefined, this),
|
|
857
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
858
|
-
className: "card-subtle space-y-3 p-6",
|
|
859
|
-
children: [
|
|
860
|
-
/* @__PURE__ */ jsxDEV3("h3", {
|
|
861
|
-
className: "font-bold",
|
|
862
|
-
children: "No lock-in"
|
|
863
|
-
}, undefined, false, undefined, this),
|
|
864
|
-
/* @__PURE__ */ jsxDEV3("p", {
|
|
865
|
-
className: "text-muted-foreground text-sm",
|
|
866
|
-
children: "Generated code is standard, readable, and exportable. If you leave, your app keeps running."
|
|
867
|
-
}, undefined, false, undefined, this)
|
|
868
|
-
]
|
|
869
|
-
}, undefined, true, undefined, this)
|
|
870
|
-
]
|
|
871
|
-
}, undefined, true, undefined, this),
|
|
872
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
873
|
-
className: "pt-6 text-center",
|
|
874
|
-
children: /* @__PURE__ */ jsxDEV3("button", {
|
|
875
|
-
onClick: () => setPricingModalOpen(true),
|
|
876
|
-
className: "btn-ghost",
|
|
877
|
-
children: "View our tentative pricing model"
|
|
878
|
-
}, undefined, false, undefined, this)
|
|
879
|
-
}, undefined, false, undefined, this)
|
|
267
|
+
/* @__PURE__ */ jsxDEV2(StudioSignupSection, {}, undefined, false, undefined, this)
|
|
880
268
|
]
|
|
881
269
|
}, undefined, true, undefined, this)
|
|
882
270
|
}, undefined, false, undefined, this),
|
|
883
|
-
/* @__PURE__ */
|
|
884
|
-
className: "section
|
|
885
|
-
children: /* @__PURE__ */
|
|
886
|
-
className: "
|
|
271
|
+
/* @__PURE__ */ jsxDEV2("section", {
|
|
272
|
+
className: "editorial-section",
|
|
273
|
+
children: /* @__PURE__ */ jsxDEV2("div", {
|
|
274
|
+
className: "editorial-shell grid gap-8 lg:grid-cols-[0.9fr_1.1fr]",
|
|
887
275
|
children: [
|
|
888
|
-
/* @__PURE__ */
|
|
889
|
-
className: "text-center text-3xl font-bold",
|
|
890
|
-
children: "Frequently asked questions"
|
|
891
|
-
}, undefined, false, undefined, this),
|
|
892
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
276
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
893
277
|
className: "space-y-4",
|
|
894
|
-
children: faqs.map((faq, i) => /* @__PURE__ */ jsxDEV3("div", {
|
|
895
|
-
className: "card-subtle overflow-hidden",
|
|
896
|
-
children: [
|
|
897
|
-
/* @__PURE__ */ jsxDEV3("button", {
|
|
898
|
-
onClick: () => setOpenFaq(openFaq === i ? null : i),
|
|
899
|
-
className: "flex w-full items-center justify-between p-6 text-left",
|
|
900
|
-
children: [
|
|
901
|
-
/* @__PURE__ */ jsxDEV3("span", {
|
|
902
|
-
className: "font-medium",
|
|
903
|
-
children: faq.question
|
|
904
|
-
}, undefined, false, undefined, this),
|
|
905
|
-
/* @__PURE__ */ jsxDEV3(ChevronDown, {
|
|
906
|
-
size: 20,
|
|
907
|
-
className: `text-muted-foreground transition-transform ${openFaq === i ? "rotate-180" : ""}`
|
|
908
|
-
}, undefined, false, undefined, this)
|
|
909
|
-
]
|
|
910
|
-
}, undefined, true, undefined, this),
|
|
911
|
-
openFaq === i && /* @__PURE__ */ jsxDEV3("div", {
|
|
912
|
-
className: "text-muted-foreground px-6 pb-6 text-sm",
|
|
913
|
-
children: faq.answer
|
|
914
|
-
}, undefined, false, undefined, this)
|
|
915
|
-
]
|
|
916
|
-
}, i, true, undefined, this))
|
|
917
|
-
}, undefined, false, undefined, this),
|
|
918
|
-
/* @__PURE__ */ jsxDEV3("div", {
|
|
919
|
-
className: "pt-4 text-center",
|
|
920
278
|
children: [
|
|
921
|
-
/* @__PURE__ */
|
|
922
|
-
className: "
|
|
923
|
-
children: "
|
|
279
|
+
/* @__PURE__ */ jsxDEV2("p", {
|
|
280
|
+
className: "editorial-kicker",
|
|
281
|
+
children: "FAQ"
|
|
924
282
|
}, undefined, false, undefined, this),
|
|
925
|
-
/* @__PURE__ */
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
children: "Contact us →"
|
|
283
|
+
/* @__PURE__ */ jsxDEV2("h2", {
|
|
284
|
+
className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
|
|
285
|
+
children: "Questions teams usually ask before they pick a side."
|
|
929
286
|
}, undefined, false, undefined, this)
|
|
930
287
|
]
|
|
931
|
-
}, undefined, true, undefined, this)
|
|
288
|
+
}, undefined, true, undefined, this),
|
|
289
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
290
|
+
className: "space-y-3",
|
|
291
|
+
children: faqs.map((faq, index) => {
|
|
292
|
+
const isOpen = openFaq === index;
|
|
293
|
+
return /* @__PURE__ */ jsxDEV2("div", {
|
|
294
|
+
className: "editorial-panel p-5",
|
|
295
|
+
children: [
|
|
296
|
+
/* @__PURE__ */ jsxDEV2("button", {
|
|
297
|
+
type: "button",
|
|
298
|
+
onClick: () => setOpenFaq(isOpen ? null : index),
|
|
299
|
+
className: "flex w-full items-center justify-between gap-4 text-left",
|
|
300
|
+
children: [
|
|
301
|
+
/* @__PURE__ */ jsxDEV2("span", {
|
|
302
|
+
className: "font-medium text-lg",
|
|
303
|
+
children: faq.question
|
|
304
|
+
}, undefined, false, undefined, this),
|
|
305
|
+
/* @__PURE__ */ jsxDEV2(ChevronDown, {
|
|
306
|
+
className: `h-4 w-4 shrink-0 text-muted-foreground transition-transform ${isOpen ? "rotate-180" : ""}`
|
|
307
|
+
}, undefined, false, undefined, this)
|
|
308
|
+
]
|
|
309
|
+
}, undefined, true, undefined, this),
|
|
310
|
+
isOpen ? /* @__PURE__ */ jsxDEV2("p", {
|
|
311
|
+
className: "mt-4 text-muted-foreground text-sm leading-7",
|
|
312
|
+
children: faq.answer
|
|
313
|
+
}, undefined, false, undefined, this) : null
|
|
314
|
+
]
|
|
315
|
+
}, faq.question, true, undefined, this);
|
|
316
|
+
})
|
|
317
|
+
}, undefined, false, undefined, this)
|
|
932
318
|
]
|
|
933
319
|
}, undefined, true, undefined, this)
|
|
934
|
-
}, undefined, false, undefined, this),
|
|
935
|
-
/* @__PURE__ */ jsxDEV3("section", {
|
|
936
|
-
className: "section-padding hero-gradient",
|
|
937
|
-
children: /* @__PURE__ */ jsxDEV3("div", {
|
|
938
|
-
className: "mx-auto max-w-4xl",
|
|
939
|
-
children: /* @__PURE__ */ jsxDEV3(StudioSignupSection, {}, undefined, false, undefined, this)
|
|
940
|
-
}, undefined, false, undefined, this)
|
|
941
|
-
}, undefined, false, undefined, this),
|
|
942
|
-
/* @__PURE__ */ jsxDEV3(PricingThinkingModal, {
|
|
943
|
-
open: pricingModalOpen,
|
|
944
|
-
onOpenChange: setPricingModalOpen,
|
|
945
|
-
onApplyClick: openStudio
|
|
946
320
|
}, undefined, false, undefined, this)
|
|
947
321
|
]
|
|
948
322
|
}, undefined, true, undefined, this);
|