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