@contractspec/bundle.marketing 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.turbo/turbo-build.log +73 -73
  2. package/CHANGELOG.md +49 -0
  3. package/README.md +6 -1
  4. package/dist/browser/components/marketing/CofounderPage.js +2 -2
  5. package/dist/browser/components/marketing/ContactClient.js +57 -961
  6. package/dist/browser/components/marketing/DesignPartnerPage.js +2 -2
  7. package/dist/browser/components/marketing/LandingPage.js +6 -6
  8. package/dist/browser/components/marketing/PricingClient.js +107 -1127
  9. package/dist/browser/components/marketing/ProductClientPage.js +2 -2
  10. package/dist/browser/components/marketing/index.js +157 -1064
  11. package/dist/browser/components/marketing/pricing-thinking-modal.js +3 -3
  12. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  13. package/dist/browser/components/marketing/sections/CtaSection.js +2 -2
  14. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +2 -2
  15. package/dist/browser/components/marketing/studio-signup-section.js +87 -0
  16. package/dist/browser/components/templates/TemplatesClientPage.js +175 -1082
  17. package/dist/browser/components/templates/index.js +181 -1088
  18. package/dist/browser/index.js +505 -1157
  19. package/dist/browser/registry/engine.js +158 -1080
  20. package/dist/browser/registry/index.js +158 -1080
  21. package/dist/browser/registry/registry-docs.js +2 -17
  22. package/dist/browser/registry/registry-landing.js +156 -1063
  23. package/dist/browser/registry/registry.js +158 -1080
  24. package/dist/browser/registry/utils.js +158 -1080
  25. package/dist/components/marketing/CofounderPage.js +2 -2
  26. package/dist/components/marketing/ContactClient.js +57 -961
  27. package/dist/components/marketing/DesignPartnerPage.js +2 -2
  28. package/dist/components/marketing/LandingPage.js +6 -6
  29. package/dist/components/marketing/PricingClient.js +107 -1127
  30. package/dist/components/marketing/ProductClientPage.js +2 -2
  31. package/dist/components/marketing/index.d.ts +1 -1
  32. package/dist/components/marketing/index.js +157 -1064
  33. package/dist/components/marketing/pricing-thinking-modal.js +3 -3
  34. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  35. package/dist/components/marketing/sections/CtaSection.js +2 -2
  36. package/dist/components/marketing/sections/HeroMarketingSection.js +2 -2
  37. package/dist/components/marketing/studio-signup-section.d.ts +5 -0
  38. package/dist/components/marketing/studio-signup-section.js +82 -0
  39. package/dist/components/templates/TemplatesClientPage.js +175 -1082
  40. package/dist/components/templates/index.js +181 -1088
  41. package/dist/index.js +505 -1157
  42. package/dist/node/components/marketing/CofounderPage.js +2 -2
  43. package/dist/node/components/marketing/ContactClient.js +57 -961
  44. package/dist/node/components/marketing/DesignPartnerPage.js +2 -2
  45. package/dist/node/components/marketing/LandingPage.js +6 -6
  46. package/dist/node/components/marketing/PricingClient.js +107 -1127
  47. package/dist/node/components/marketing/ProductClientPage.js +2 -2
  48. package/dist/node/components/marketing/index.js +157 -1064
  49. package/dist/node/components/marketing/pricing-thinking-modal.js +3 -3
  50. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  51. package/dist/node/components/marketing/sections/CtaSection.js +2 -2
  52. package/dist/node/components/marketing/sections/HeroMarketingSection.js +2 -2
  53. package/dist/node/components/marketing/studio-signup-section.js +82 -0
  54. package/dist/node/components/templates/TemplatesClientPage.js +175 -1082
  55. package/dist/node/components/templates/index.js +181 -1088
  56. package/dist/node/index.js +505 -1157
  57. package/dist/node/registry/engine.js +158 -1080
  58. package/dist/node/registry/index.js +158 -1080
  59. package/dist/node/registry/registry-docs.js +2 -17
  60. package/dist/node/registry/registry-landing.js +156 -1063
  61. package/dist/node/registry/registry.js +158 -1080
  62. package/dist/node/registry/utils.js +158 -1080
  63. package/dist/registry/engine.js +158 -1080
  64. package/dist/registry/index.js +158 -1080
  65. package/dist/registry/registry-docs.js +2 -17
  66. package/dist/registry/registry-landing.js +156 -1063
  67. package/dist/registry/registry.js +158 -1080
  68. package/dist/registry/utils.js +158 -1080
  69. package/package.json +34 -34
  70. package/src/components/marketing/CofounderPage.tsx +2 -2
  71. package/src/components/marketing/ContactClient.tsx +3 -3
  72. package/src/components/marketing/DesignPartnerPage.tsx +3 -3
  73. package/src/components/marketing/PricingClient.tsx +39 -38
  74. package/src/components/marketing/ProductClientPage.tsx +2 -2
  75. package/src/components/marketing/index.ts +1 -1
  76. package/src/components/marketing/pricing-thinking-modal.tsx +5 -5
  77. package/src/components/marketing/sections/CorePositioningSection.tsx +2 -2
  78. package/src/components/marketing/sections/CtaSection.tsx +2 -2
  79. package/src/components/marketing/sections/HeroMarketingSection.tsx +2 -2
  80. package/src/components/marketing/studio-signup-section.tsx +56 -0
  81. package/src/components/templates/TemplatesClientPage.tsx +12 -9
  82. package/src/registry/registry-docs.ts +0 -40
  83. package/dist/browser/components/marketing/waitlist-section.js +0 -1104
  84. package/dist/components/marketing/waitlist-section.d.ts +0 -7
  85. package/dist/components/marketing/waitlist-section.js +0 -1099
  86. package/dist/node/components/marketing/waitlist-section.js +0 -1099
  87. package/src/components/marketing/waitlist-section.tsx +0 -606
@@ -176,7 +176,7 @@ function WhatExistsSection() {
176
176
  "Solo founder, bootstrapped"
177
177
  ];
178
178
  const planned = [
179
- "Visual studio for specs",
179
+ "ContractSpec Studio product-decision engine",
180
180
  "Auto-evolution engine",
181
181
  "Multi-tenant SaaS",
182
182
  "Integration marketplace"
@@ -262,7 +262,7 @@ function RoleSection() {
262
262
  const productDeliverables = [
263
263
  "Ship UI/UX improvements weekly",
264
264
  "Define specs based on user research",
265
- "Own the studio experience",
265
+ "Own the Studio product experience",
266
266
  "Collaborate on architecture decisions"
267
267
  ];
268
268
  return /* @__PURE__ */ jsxDEV2(MarketingSection, {
@@ -839,978 +839,76 @@ Submitted via ContractSpec contact form
839
839
  return { success: true, text: "Message sent successfully!" };
840
840
  };
841
841
 
842
- // src/libs/email/waitlist.ts
843
- "use server";
844
- var WAITLIST_MISSING_CONFIG = "Waitlist service is not configured. Please try again later.";
845
- var WAITLIST_SEND_ERROR = "Failed to join waitlist. Please try again later or contact us directly.";
846
- var joinWaitlist = async (formData) => {
847
- const email = (formData.get("email") ?? "").toString().trim();
848
- if (!email || !email.includes("@")) {
849
- return {
850
- success: false,
851
- text: "Please enter a valid email address."
852
- };
853
- }
854
- const configResult = getEmailConfig();
855
- if (!configResult.ok || !configResult.config) {
856
- return {
857
- success: false,
858
- text: configResult.errorMessage ?? WAITLIST_MISSING_CONFIG
859
- };
860
- }
861
- const waitlistText = `
862
- You're on the waitlist!
863
-
864
- Thanks for joining the ContractSpec waitlist. You're now in line for early access to:
865
-
866
- • Stabilize your AI-generated code with ContractSpec
867
- • Multi-surface consistency (API, DB, UI, events)
868
- • Safe regeneration without breaking changes
869
- • AI governance and contract enforcement
870
-
871
- We'll notify you as soon as early access is available. In the meantime, you can:
872
-
873
- • Check out our docs: https://contractspec.io/docs
874
- • Follow our progress on GitHub
875
- • Book a demo call to see ContractSpec in action
876
-
877
- We're excited to have you on board!
878
-
879
- ---
880
- ContractSpec Team
881
- https://contractspec.io
882
-
883
- To remove yourself from the waitlist, reply to this email with "remove"
884
- `.trim();
885
- const waitlistHtml = `
886
- <div style="font-family: sans-serif; max-width: 640px; margin: 0 auto;">
887
- <h1 style="color: #8b5cf6;">You're on the waitlist!</h1>
888
- <p>Thanks for joining the ContractSpec waitlist. You're now in line for early access to:</p>
889
- <ul style="line-height: 1.8;">
890
- <li>Stabilize your AI-generated code with ContractSpec</li>
891
- <li>Multi-surface consistency (API, DB, UI, events)</li>
892
- <li>Safe regeneration without breaking changes</li>
893
- <li>AI governance and contract enforcement</li>
894
- </ul>
895
- <p>We'll notify you as soon as early access is available. In the meantime, you can:</p>
896
- <ul style="line-height: 1.8;">
897
- <li>Check out our <a href="https://contractspec.io/docs" style="color: #8b5cf6;">docs</a></li>
898
- <li>Follow our progress on GitHub</li>
899
- <li>Book a demo call to see ContractSpec in action</li>
900
- </ul>
901
- <p>We're excited to have you on board!</p>
902
- <hr style="margin: 30px 0; border: none; border-top: 1px solid #e5e7eb;" />
903
- <p style="color: #6b7280; font-size: 14px;">
904
- ContractSpec Team<br />
905
- <a href="https://contractspec.io" style="color: #8b5cf6;">contractspec.io</a>
906
- </p>
907
- <p style="color: #9ca3af; font-size: 12px;">
908
- To remove yourself from the waitlist, reply to this email with "remove"
909
- </p>
910
- </div>
911
- `;
912
- const userSend = await sendEmail(configResult.config, {
913
- to: [{ email }],
914
- subject: "You're on the ContractSpec waitlist!",
915
- text: waitlistText,
916
- html: waitlistHtml,
917
- context: "waitlist-welcome"
918
- });
919
- if (!userSend.success) {
920
- return { success: false, text: WAITLIST_SEND_ERROR };
921
- }
922
- const teamNotificationText = `New waitlist signup from: ${email}`;
923
- const teamNotificationHtml = `
924
- <div style="font-family: sans-serif; max-width: 640px; margin: 0 auto;">
925
- <p style="margin: 0 0 8px;">New waitlist signup</p>
926
- <p style="margin: 0;"><strong>Email:</strong> ${formatMultilineHtml(email)}</p>
927
- </div>
928
- `;
929
- const teamSend = await sendEmail(configResult.config, {
930
- to: [configResult.config.teamInbox],
931
- subject: `New Waitlist Signup: ${email}`,
932
- text: teamNotificationText,
933
- html: teamNotificationHtml,
934
- context: "waitlist-team-notification"
935
- });
936
- if (!teamSend.success) {
937
- return { success: false, text: WAITLIST_SEND_ERROR };
938
- }
939
- return { success: true, text: "Successfully joined waitlist!" };
940
- };
941
-
942
- // src/libs/email/waitlist-application.ts
943
- "use server";
944
- var APPLICATION_MISSING_CONFIG = "Waitlist application service is not configured. Please try again later.";
945
- var APPLICATION_SEND_ERROR = "Failed to submit application. Please try again later or contact us directly.";
946
- var submitWaitlistApplication = async (formData) => {
947
- const email = (formData.get("email") ?? "").toString().trim();
948
- const name = (formData.get("name") ?? "").toString().trim();
949
- const company = (formData.get("company") ?? "").toString().trim();
950
- const role = (formData.get("role") ?? "").toString().trim();
951
- const useCase = (formData.get("useCase") ?? "").toString().trim();
952
- const currentStack = (formData.get("currentStack") ?? "").toString().trim();
953
- const whatBuilding = (formData.get("whatBuilding") ?? "").toString().trim();
954
- const whatSolving = (formData.get("whatSolving") ?? "").toString().trim();
955
- const teamSize = (formData.get("teamSize") ?? "").toString().trim();
956
- const timeline = (formData.get("timeline") ?? "").toString().trim();
957
- const openToSessions = formData.get("openToSessions") === "on";
958
- const okayWithCaseStudies = formData.get("okayWithCaseStudies") === "on";
959
- if (!email || !email.includes("@")) {
960
- return {
961
- success: false,
962
- text: "Please enter a valid email address."
963
- };
964
- }
965
- if (!name || !whatBuilding || !whatSolving) {
966
- return {
967
- success: false,
968
- text: "Please fill in all required fields."
969
- };
970
- }
971
- const configResult = getEmailConfig();
972
- if (!configResult.ok || !configResult.config) {
973
- return {
974
- success: false,
975
- text: configResult.errorMessage ?? APPLICATION_MISSING_CONFIG
976
- };
977
- }
978
- const applicantText = `
979
- You're on the list.
980
-
981
- Thanks for applying to the ContractSpec design partner program. We're slowly onboarding design partners in waves. If your use case is a good fit, we'll reach out personally.
982
-
983
- What happens next:
984
- • We review applications weekly
985
- • If selected, we'll reach out via email to schedule an intro call
986
- • During early access, you'll get hands-on support and influence over the roadmap
987
-
988
- In the meantime:
989
- • Check out our docs: https://contractspec.io/docs
990
- • Book a demo call: https://contractspec.io/contact
991
-
992
- We're excited about the possibility of working together!
993
-
994
- ---
995
- ContractSpec Team
996
- https://contractspec.io
997
- `.trim();
998
- const applicantHtml = `
999
- <div style="font-family: sans-serif; max-width: 640px; margin: 0 auto;">
1000
- <h1 style="color: #8b5cf6;">You're on the list.</h1>
1001
- <p>Thanks for applying to the ContractSpec design partner program. We're slowly onboarding design partners in waves. If your use case is a good fit, we'll reach out personally.</p>
1002
- <h2 style="color: #8b5cf6; margin-top: 24px;">What happens next:</h2>
1003
- <ul style="line-height: 1.8;">
1004
- <li>We review applications weekly</li>
1005
- <li>If selected, we'll reach out via email to schedule an intro call</li>
1006
- <li>During early access, you'll get hands-on support and influence over the roadmap</li>
1007
- </ul>
1008
- <h2 style="color: #8b5cf6; margin-top: 24px;">In the meantime:</h2>
1009
- <ul style="line-height: 1.8;">
1010
- <li>Check out our <a href="https://contractspec.io/docs" style="color: #8b5cf6;">docs</a></li>
1011
- <li>Book a demo call: <a href="https://contractspec.io/contact" style="color: #8b5cf6;">contractspec.io/contact</a></li>
1012
- </ul>
1013
- <p>We're excited about the possibility of working together!</p>
1014
- <hr style="margin: 30px 0; border: none; border-top: 1px solid #e5e7eb;" />
1015
- <p style="color: #6b7280; font-size: 14px;">
1016
- ContractSpec Team<br />
1017
- <a href="https://contractspec.io" style="color: #8b5cf6;">contractspec.io</a>
1018
- </p>
1019
- </div>
1020
- `;
1021
- const applicantSend = await sendEmail(configResult.config, {
1022
- to: [{ email }],
1023
- subject: "You're on the ContractSpec design partner waitlist!",
1024
- text: applicantText,
1025
- html: applicantHtml,
1026
- context: "waitlist-application-welcome"
1027
- });
1028
- if (!applicantSend.success) {
1029
- return { success: false, text: APPLICATION_SEND_ERROR };
1030
- }
1031
- const preferencesText = `
1032
- Open to 1:1 product/design sessions: ${openToSessions ? "Yes" : "No"}
1033
- Okay with anonymized case studies: ${okayWithCaseStudies ? "Yes" : "No"}
1034
- `.trim();
1035
- const teamEmailText = `
1036
- New Design Partner Waitlist Application
1037
-
1038
- Contact Information:
1039
- - Name: ${name}
1040
- - Email: ${email}
1041
- ${company ? `- Company/Project: ${company}` : ""}
1042
- ${role ? `- Role: ${role}` : ""}
1043
-
1044
- Application Details:
1045
- - What are you building with AI today?
1046
- ${whatBuilding}
1047
-
1048
- - What do you hope ContractSpec will solve for you?
1049
- ${whatSolving}
1050
-
1051
- - Primary use case: ${useCase || "Not specified"}
1052
- - Current stack: ${currentStack || "Not specified"}
1053
- - Team Size: ${teamSize || "Not specified"}
1054
- - Timeline: ${timeline || "Not specified"}
1055
-
1056
- Preferences:
1057
- - Open to 1:1 product/design sessions: ${openToSessions ? "Yes" : "No"}
1058
- - Okay with anonymized case studies: ${okayWithCaseStudies ? "Yes" : "No"}
1059
-
1060
- ---
1061
- Submitted via ContractSpec waitlist application form
1062
- `.trim();
1063
- const teamEmailHtml = `
1064
- <div style="font-family: sans-serif; max-width: 720px; margin: 0 auto;">
1065
- <h1 style="color: #8b5cf6;">New Design Partner Waitlist Application</h1>
1066
- <h2 style="color: #8b5cf6; margin: 16px 0 8px;">Contact Information</h2>
1067
- <ul style="padding-left: 16px; line-height: 1.6; margin: 0 0 16px;">
1068
- <li>Name: ${escapeHtml(name)}</li>
1069
- <li>Email: ${escapeHtml(email)}</li>
1070
- ${company ? `<li>Company/Project: ${escapeHtml(company)}</li>` : ""}
1071
- ${role ? `<li>Role: ${escapeHtml(role)}</li>` : ""}
1072
- </ul>
1073
- <h2 style="color: #8b5cf6; margin: 16px 0 8px;">Application Details</h2>
1074
- <p style="margin: 0 0 8px; font-weight: 600;">What are you building with AI today?</p>
1075
- <div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; background: #f9fafb; white-space: pre-wrap; line-height: 1.6;">
1076
- ${formatMultilineHtml(whatBuilding)}
1077
- </div>
1078
- <p style="margin: 16px 0 8px; font-weight: 600;">What do you hope ContractSpec will solve for you?</p>
1079
- <div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; background: #f9fafb; white-space: pre-wrap; line-height: 1.6;">
1080
- ${formatMultilineHtml(whatSolving)}
1081
- </div>
1082
- <ul style="padding-left: 16px; line-height: 1.6; margin: 16px 0;">
1083
- <li>Primary use case: ${escapeHtml(useCase || "Not specified")}</li>
1084
- <li>Current stack: ${escapeHtml(currentStack || "Not specified")}</li>
1085
- <li>Team Size: ${escapeHtml(teamSize || "Not specified")}</li>
1086
- <li>Timeline: ${escapeHtml(timeline || "Not specified")}</li>
1087
- </ul>
1088
- <h2 style="color: #8b5cf6; margin: 16px 0 8px;">Preferences</h2>
1089
- <div style="border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px; background: #f9fafb; line-height: 1.6;">
1090
- ${formatMultilineHtml(preferencesText)}
1091
- </div>
1092
- <p style="color: #6b7280; font-size: 12px; margin-top: 20px;">Submitted via ContractSpec waitlist application form</p>
1093
- </div>
1094
- `;
1095
- const teamSend = await sendEmail(configResult.config, {
1096
- to: [configResult.config.teamInbox],
1097
- subject: `New Design Partner Application: ${name} (${email})`,
1098
- text: teamEmailText,
1099
- html: teamEmailHtml,
1100
- replyTo: email,
1101
- context: "waitlist-application-team-notification"
1102
- });
1103
- if (!teamSend.success) {
1104
- return { success: false, text: APPLICATION_SEND_ERROR };
1105
- }
1106
- return {
1107
- success: true,
1108
- text: "Application submitted successfully!"
1109
- };
1110
- };
1111
-
1112
- // src/components/marketing/waitlist-section.tsx
1113
- import { useEffect, useState } from "react";
1114
- import { useForm } from "react-hook-form";
1115
- import { zodResolver } from "@hookform/resolvers/zod";
1116
- import z from "zod";
1117
- import { AlertCircle, CheckCircle } from "lucide-react";
842
+ // src/components/marketing/studio-signup-section.tsx
843
+ import Link from "next/link";
844
+ import { ArrowRight, Rocket as Rocket2 } from "lucide-react";
1118
845
  import { Button } from "@contractspec/lib.design-system";
1119
- import { Textarea } from "@contractspec/lib.design-system";
1120
- import { Label } from "@contractspec/lib.ui-kit-web/ui/label";
1121
- import {
1122
- Select,
1123
- SelectContent,
1124
- SelectItem,
1125
- SelectTrigger,
1126
- SelectValue
1127
- } from "@contractspec/lib.ui-kit-web/ui/select";
1128
- import { Checkbox } from "@contractspec/lib.ui-kit-web/ui/checkbox";
1129
- import { Switch } from "@contractspec/lib.ui-kit-web/ui/switch";
1130
- import { Input } from "@contractspec/lib.design-system";
1131
- import { jsxDEV as jsxDEV3, Fragment } from "react/jsx-dev-runtime";
846
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
1132
847
  "use client";
1133
- var simpleWaitlistSchema = z.object({
1134
- email: z.email("Please enter a valid email address")
1135
- });
1136
- var designPartnerSchema = z.object({
1137
- name: z.string().min(1, "Name is required"),
1138
- email: z.email("Please enter a valid email address"),
1139
- company: z.string().optional(),
1140
- role: z.string().optional(),
1141
- useCase: z.string().optional(),
1142
- currentStack: z.string().optional(),
1143
- whatBuilding: z.string().min(1, "Please tell us what you are building"),
1144
- whatSolving: z.string().min(1, "Please tell us what ContractSpec will solve for you"),
1145
- teamSize: z.string().optional(),
1146
- timeline: z.string().optional(),
1147
- openToSessions: z.boolean().default(false),
1148
- okayWithCaseStudies: z.boolean().default(false)
1149
- });
1150
- function WaitlistSection({
1151
- variant = "default",
1152
- context = "pricing"
848
+ var studioUrl = "https://app.contractspec.studio";
849
+ var studioDocsUrl = "https://app.contractspec.studio/docs";
850
+ function StudioSignupSection({
851
+ variant = "default"
1153
852
  }) {
1154
- const [isDesignPartner, setIsDesignPartner] = useState(false);
1155
- const [submitResult, setSubmitResult] = useState(null);
1156
- const [isPending, setIsPending] = useState(false);
1157
- const simpleForm = useForm({
1158
- resolver: zodResolver(simpleWaitlistSchema),
1159
- defaultValues: {
1160
- email: ""
1161
- }
1162
- });
1163
- const designPartnerForm = useForm({
1164
- resolver: zodResolver(designPartnerSchema),
1165
- defaultValues: {
1166
- name: "",
1167
- email: "",
1168
- company: "",
1169
- role: "",
1170
- useCase: "",
1171
- currentStack: "",
1172
- whatBuilding: "",
1173
- whatSolving: "",
1174
- teamSize: "",
1175
- timeline: "",
1176
- openToSessions: false,
1177
- okayWithCaseStudies: false
1178
- }
1179
- });
1180
- const simpleEmail = simpleForm.watch("email");
1181
- const designPartnerEmail = designPartnerForm.watch("email");
1182
- useEffect(() => {
1183
- const currentDesignPartnerEmail = designPartnerForm.getValues("email");
1184
- if (simpleEmail && simpleEmail !== currentDesignPartnerEmail) {
1185
- designPartnerForm.setValue("email", simpleEmail, { shouldDirty: false });
1186
- }
1187
- }, [simpleEmail, designPartnerForm]);
1188
- useEffect(() => {
1189
- const currentSimpleEmail = simpleForm.getValues("email");
1190
- if (designPartnerEmail && designPartnerEmail !== currentSimpleEmail) {
1191
- simpleForm.setValue("email", designPartnerEmail, { shouldDirty: false });
1192
- }
1193
- }, [designPartnerEmail, simpleForm]);
1194
- const handleSimpleSubmit = async (data) => {
1195
- setIsPending(true);
1196
- setSubmitResult(null);
1197
- try {
1198
- const formData = new FormData;
1199
- formData.set("email", data.email);
1200
- const result = await joinWaitlist(formData);
1201
- if (result.success) {
1202
- setSubmitResult({
1203
- success: true,
1204
- text: "Thanks for joining the waitlist! Check your inbox for a confirmation."
1205
- });
1206
- simpleForm.reset();
1207
- } else {
1208
- setSubmitResult({
1209
- success: false,
1210
- text: result.text || "Failed to join waitlist. Please try again."
1211
- });
1212
- }
1213
- } catch (_error) {
1214
- setSubmitResult({
1215
- success: false,
1216
- text: "Failed to join waitlist. Please try again."
1217
- });
1218
- } finally {
1219
- setIsPending(false);
1220
- }
1221
- };
1222
- const handleDesignPartnerSubmit = async (data) => {
1223
- setIsPending(true);
1224
- setSubmitResult(null);
1225
- try {
1226
- const formData = new FormData;
1227
- formData.set("email", data.email);
1228
- formData.set("name", data.name);
1229
- if (data.company)
1230
- formData.set("company", data.company);
1231
- if (data.role)
1232
- formData.set("role", data.role);
1233
- if (data.useCase)
1234
- formData.set("useCase", data.useCase);
1235
- if (data.currentStack)
1236
- formData.set("currentStack", data.currentStack);
1237
- formData.set("whatBuilding", data.whatBuilding);
1238
- formData.set("whatSolving", data.whatSolving);
1239
- if (data.teamSize)
1240
- formData.set("teamSize", data.teamSize);
1241
- if (data.timeline)
1242
- formData.set("timeline", data.timeline);
1243
- if (data.openToSessions)
1244
- formData.set("openToSessions", "on");
1245
- if (data.okayWithCaseStudies)
1246
- formData.set("okayWithCaseStudies", "on");
1247
- const result = await submitWaitlistApplication(formData);
1248
- if (result.success) {
1249
- setSubmitResult({
1250
- success: true,
1251
- text: "You're on the list. Thanks for applying. We're slowly onboarding design partners in waves. If your use case is a good fit, we'll reach out personally."
1252
- });
1253
- designPartnerForm.reset();
1254
- } else {
1255
- setSubmitResult({
1256
- success: false,
1257
- text: result.text || "Failed to submit application. Please try again."
1258
- });
1259
- }
1260
- } catch (_error) {
1261
- setSubmitResult({
1262
- success: false,
1263
- text: "Failed to submit application. Please try again."
1264
- });
1265
- } finally {
1266
- setIsPending(false);
1267
- }
1268
- };
1269
- const onSubmit = isDesignPartner ? designPartnerForm.handleSubmit(handleDesignPartnerSubmit) : simpleForm.handleSubmit(handleSimpleSubmit);
1270
853
  const isCompact = variant === "compact";
1271
854
  return /* @__PURE__ */ jsxDEV3("div", {
1272
- id: "waitlist",
855
+ id: "studio-signup",
1273
856
  className: isCompact ? "space-y-4" : "card-subtle space-y-6 p-8",
1274
857
  children: [
1275
- !isCompact && /* @__PURE__ */ jsxDEV3("div", {
858
+ /* @__PURE__ */ jsxDEV3("div", {
1276
859
  className: "space-y-4",
1277
860
  children: [
1278
861
  /* @__PURE__ */ jsxDEV3("div", {
1279
862
  className: "inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1",
1280
- children: /* @__PURE__ */ jsxDEV3("span", {
1281
- className: "text-sm font-medium text-violet-300",
1282
- children: isDesignPartner ? "Design Partner Waitlist" : "Join the Waitlist"
1283
- }, undefined, false, undefined, this)
1284
- }, undefined, false, undefined, this),
1285
- /* @__PURE__ */ jsxDEV3("h2", {
1286
- className: "text-2xl font-bold",
1287
- children: isDesignPartner ? "Apply for early access to ContractSpec" : "Get early access to ContractSpec"
1288
- }, undefined, false, undefined, this),
1289
- /* @__PURE__ */ jsxDEV3("p", {
1290
- className: "text-muted-foreground text-sm",
1291
- children: isDesignPartner ? "Tell us what you're building. We'll prioritize teams where ContractSpec can have a big impact, and where we can learn the most." : "Join the waitlist to be notified when ContractSpec becomes available."
1292
- }, undefined, false, undefined, this)
1293
- ]
1294
- }, undefined, true, undefined, this),
1295
- !isCompact && /* @__PURE__ */ jsxDEV3("div", {
1296
- className: "border-border bg-muted/20 flex items-center justify-between gap-4 rounded-lg border p-4",
1297
- children: [
1298
- /* @__PURE__ */ jsxDEV3("div", {
1299
- className: "space-y-1",
1300
863
  children: [
1301
- /* @__PURE__ */ jsxDEV3(Label, {
1302
- htmlFor: "design-partner-toggle",
1303
- className: "text-sm font-medium",
1304
- children: "Apply as a design partner"
864
+ /* @__PURE__ */ jsxDEV3(Rocket2, {
865
+ size: 14,
866
+ className: "text-violet-300"
1305
867
  }, undefined, false, undefined, this),
1306
- /* @__PURE__ */ jsxDEV3("p", {
1307
- className: "text-muted-foreground text-xs",
1308
- children: isDesignPartner ? "Get hands-on support, influence the roadmap, and founding discount" : "Get priority access, 1:1 onboarding, and help shape ContractSpec"
868
+ /* @__PURE__ */ jsxDEV3("span", {
869
+ className: "text-sm font-medium text-violet-300",
870
+ children: "ContractSpec Studio"
1309
871
  }, undefined, false, undefined, this)
1310
872
  ]
1311
873
  }, undefined, true, undefined, this),
1312
- /* @__PURE__ */ jsxDEV3(Switch, {
1313
- id: "design-partner-toggle",
1314
- checked: isDesignPartner,
1315
- onCheckedChange: setIsDesignPartner,
1316
- disabled: isPending || submitResult?.success
1317
- }, undefined, false, undefined, this)
1318
- ]
1319
- }, undefined, true, undefined, this),
1320
- !isCompact && isDesignPartner && /* @__PURE__ */ jsxDEV3("div", {
1321
- className: "space-y-2",
1322
- children: [
874
+ /* @__PURE__ */ jsxDEV3("h2", {
875
+ className: isCompact ? "text-xl font-bold" : "text-2xl font-bold",
876
+ children: "Try ContractSpec Studio"
877
+ }, undefined, false, undefined, this),
1323
878
  /* @__PURE__ */ jsxDEV3("p", {
1324
- className: "text-sm font-medium",
1325
- children: "Benefits:"
879
+ className: "text-muted-foreground text-sm",
880
+ children: "The AI-powered product decision engine that turns product signals into spec-first deliverables."
1326
881
  }, undefined, false, undefined, this),
1327
- /* @__PURE__ */ jsxDEV3("ul", {
1328
- className: "text-muted-foreground space-y-1 text-sm",
1329
- children: [
1330
- /* @__PURE__ */ jsxDEV3("li", {
1331
- children: "• Early access to ContractSpec Studio"
1332
- }, undefined, false, undefined, this),
1333
- /* @__PURE__ */ jsxDEV3("li", {
1334
- children: "• 1:1 onboarding and architecture sessions"
1335
- }, undefined, false, undefined, this),
1336
- /* @__PURE__ */ jsxDEV3("li", {
1337
- children: "• Priority support via direct channels"
1338
- }, undefined, false, undefined, this),
1339
- /* @__PURE__ */ jsxDEV3("li", {
1340
- children: "• Influence over roadmap and features"
1341
- }, undefined, false, undefined, this),
1342
- /* @__PURE__ */ jsxDEV3("li", {
1343
- children: "• Founding discount when paid plans launch"
1344
- }, undefined, false, undefined, this)
1345
- ]
1346
- }, undefined, true, undefined, this)
882
+ /* @__PURE__ */ jsxDEV3("p", {
883
+ className: "text-muted-foreground text-xs",
884
+ children: "Evidence -> Correlation -> Decision -> Change -> Export -> Check -> Notify -> Autopilot"
885
+ }, undefined, false, undefined, this)
1347
886
  ]
1348
887
  }, undefined, true, undefined, this),
1349
- /* @__PURE__ */ jsxDEV3("form", {
1350
- onSubmit,
1351
- className: "space-y-4",
888
+ /* @__PURE__ */ jsxDEV3("div", {
889
+ className: "flex flex-col gap-3 sm:flex-row",
1352
890
  children: [
1353
- isDesignPartner ? /* @__PURE__ */ jsxDEV3(Fragment, {
1354
- children: [
1355
- /* @__PURE__ */ jsxDEV3("div", {
1356
- className: "grid gap-4 md:grid-cols-2",
1357
- children: [
1358
- /* @__PURE__ */ jsxDEV3("div", {
1359
- className: "space-y-2",
1360
- children: [
1361
- /* @__PURE__ */ jsxDEV3(Label, {
1362
- htmlFor: "waitlist-name",
1363
- className: "text-sm font-medium",
1364
- children: [
1365
- "Name ",
1366
- /* @__PURE__ */ jsxDEV3("span", {
1367
- className: "text-red-400",
1368
- children: "*"
1369
- }, undefined, false, undefined, this)
1370
- ]
1371
- }, undefined, true, undefined, this),
1372
- /* @__PURE__ */ jsxDEV3(Input, {
1373
- id: "waitlist-name",
1374
- ...designPartnerForm.register("name"),
1375
- type: "text",
1376
- placeholder: "Your name",
1377
- disabled: isPending || submitResult?.success
1378
- }, undefined, false, undefined, this),
1379
- designPartnerForm.formState.errors.name && /* @__PURE__ */ jsxDEV3("p", {
1380
- className: "text-xs text-red-400",
1381
- children: designPartnerForm.formState.errors.name.message
1382
- }, undefined, false, undefined, this)
1383
- ]
1384
- }, undefined, true, undefined, this),
1385
- /* @__PURE__ */ jsxDEV3("div", {
1386
- className: "space-y-2",
1387
- children: [
1388
- /* @__PURE__ */ jsxDEV3(Label, {
1389
- htmlFor: "waitlist-email",
1390
- className: "text-sm font-medium",
1391
- children: [
1392
- "Email ",
1393
- /* @__PURE__ */ jsxDEV3("span", {
1394
- className: "text-red-400",
1395
- children: "*"
1396
- }, undefined, false, undefined, this)
1397
- ]
1398
- }, undefined, true, undefined, this),
1399
- /* @__PURE__ */ jsxDEV3(Input, {
1400
- id: "waitlist-email",
1401
- ...designPartnerForm.register("email"),
1402
- type: "email",
1403
- placeholder: "your@email.com",
1404
- disabled: isPending || submitResult?.success
1405
- }, undefined, false, undefined, this),
1406
- designPartnerForm.formState.errors.email && /* @__PURE__ */ jsxDEV3("p", {
1407
- className: "text-xs text-red-400",
1408
- children: designPartnerForm.formState.errors.email.message
1409
- }, undefined, false, undefined, this)
1410
- ]
1411
- }, undefined, true, undefined, this)
1412
- ]
1413
- }, undefined, true, undefined, this),
1414
- /* @__PURE__ */ jsxDEV3("div", {
1415
- className: "grid gap-4 md:grid-cols-2",
1416
- children: [
1417
- /* @__PURE__ */ jsxDEV3("div", {
1418
- className: "space-y-2",
1419
- children: [
1420
- /* @__PURE__ */ jsxDEV3(Label, {
1421
- htmlFor: "waitlist-company",
1422
- className: "text-sm font-medium",
1423
- children: "Company / Project Name"
1424
- }, undefined, false, undefined, this),
1425
- /* @__PURE__ */ jsxDEV3(Input, {
1426
- id: "waitlist-company",
1427
- ...designPartnerForm.register("company"),
1428
- type: "text",
1429
- placeholder: "Your company or project",
1430
- disabled: isPending || submitResult?.success
1431
- }, undefined, false, undefined, this)
1432
- ]
1433
- }, undefined, true, undefined, this),
1434
- /* @__PURE__ */ jsxDEV3("div", {
1435
- className: "space-y-2",
1436
- children: [
1437
- /* @__PURE__ */ jsxDEV3(Label, {
1438
- htmlFor: "waitlist-role",
1439
- className: "text-sm font-medium",
1440
- children: "Role"
1441
- }, undefined, false, undefined, this),
1442
- /* @__PURE__ */ jsxDEV3(Select, {
1443
- value: designPartnerForm.watch("role") || "",
1444
- onValueChange: (value) => designPartnerForm.setValue("role", value),
1445
- disabled: isPending || submitResult?.success,
1446
- children: [
1447
- /* @__PURE__ */ jsxDEV3(SelectTrigger, {
1448
- id: "waitlist-role",
1449
- className: "w-full",
1450
- children: /* @__PURE__ */ jsxDEV3(SelectValue, {
1451
- placeholder: "Select your role"
1452
- }, undefined, false, undefined, this)
1453
- }, undefined, false, undefined, this),
1454
- /* @__PURE__ */ jsxDEV3(SelectContent, {
1455
- children: [
1456
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1457
- value: "founder",
1458
- children: "Founder"
1459
- }, undefined, false, undefined, this),
1460
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1461
- value: "cto",
1462
- children: "CTO"
1463
- }, undefined, false, undefined, this),
1464
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1465
- value: "lead-engineer",
1466
- children: "Lead Engineer"
1467
- }, undefined, false, undefined, this),
1468
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1469
- value: "engineer",
1470
- children: "Engineer"
1471
- }, undefined, false, undefined, this),
1472
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1473
- value: "product-manager",
1474
- children: "Product Manager"
1475
- }, undefined, false, undefined, this),
1476
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1477
- value: "other",
1478
- children: "Other"
1479
- }, undefined, false, undefined, this)
1480
- ]
1481
- }, undefined, true, undefined, this)
1482
- ]
1483
- }, undefined, true, undefined, this)
1484
- ]
1485
- }, undefined, true, undefined, this)
1486
- ]
1487
- }, undefined, true, undefined, this),
1488
- /* @__PURE__ */ jsxDEV3("div", {
1489
- className: "grid gap-4 md:grid-cols-2",
1490
- children: [
1491
- /* @__PURE__ */ jsxDEV3("div", {
1492
- className: "space-y-2",
1493
- children: [
1494
- /* @__PURE__ */ jsxDEV3(Label, {
1495
- htmlFor: "waitlist-use-case",
1496
- className: "text-sm font-medium",
1497
- children: "Primary use case"
1498
- }, undefined, false, undefined, this),
1499
- /* @__PURE__ */ jsxDEV3(Select, {
1500
- value: designPartnerForm.watch("useCase") || "",
1501
- onValueChange: (value) => designPartnerForm.setValue("useCase", value),
1502
- disabled: isPending || submitResult?.success,
1503
- children: [
1504
- /* @__PURE__ */ jsxDEV3(SelectTrigger, {
1505
- id: "waitlist-use-case",
1506
- className: "w-full",
1507
- children: /* @__PURE__ */ jsxDEV3(SelectValue, {
1508
- placeholder: "Select a use case"
1509
- }, undefined, false, undefined, this)
1510
- }, undefined, false, undefined, this),
1511
- /* @__PURE__ */ jsxDEV3(SelectContent, {
1512
- children: [
1513
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1514
- value: "api-platform",
1515
- children: "API platform"
1516
- }, undefined, false, undefined, this),
1517
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1518
- value: "ai-ops",
1519
- children: "AI operations"
1520
- }, undefined, false, undefined, this),
1521
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1522
- value: "integration-hub",
1523
- children: "Integration hub"
1524
- }, undefined, false, undefined, this),
1525
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1526
- value: "internal-tools",
1527
- children: "Internal tools"
1528
- }, undefined, false, undefined, this),
1529
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1530
- value: "data-pipelines",
1531
- children: "Data pipelines"
1532
- }, undefined, false, undefined, this),
1533
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1534
- value: "other",
1535
- children: "Other"
1536
- }, undefined, false, undefined, this)
1537
- ]
1538
- }, undefined, true, undefined, this)
1539
- ]
1540
- }, undefined, true, undefined, this)
1541
- ]
1542
- }, undefined, true, undefined, this),
1543
- /* @__PURE__ */ jsxDEV3("div", {
1544
- className: "space-y-2",
1545
- children: [
1546
- /* @__PURE__ */ jsxDEV3(Label, {
1547
- htmlFor: "waitlist-current-stack",
1548
- className: "text-sm font-medium",
1549
- children: "Current stack"
1550
- }, undefined, false, undefined, this),
1551
- /* @__PURE__ */ jsxDEV3(Input, {
1552
- id: "waitlist-current-stack",
1553
- ...designPartnerForm.register("currentStack"),
1554
- type: "text",
1555
- placeholder: "e.g. Next.js, Postgres, OpenAPI",
1556
- disabled: isPending || submitResult?.success
1557
- }, undefined, false, undefined, this)
1558
- ]
1559
- }, undefined, true, undefined, this)
1560
- ]
1561
- }, undefined, true, undefined, this),
1562
- /* @__PURE__ */ jsxDEV3("div", {
1563
- className: "space-y-2",
1564
- children: [
1565
- /* @__PURE__ */ jsxDEV3(Label, {
1566
- htmlFor: "waitlist-what-building",
1567
- className: "text-sm font-medium",
1568
- children: [
1569
- "What are you building with AI today?",
1570
- " ",
1571
- /* @__PURE__ */ jsxDEV3("span", {
1572
- className: "text-red-400",
1573
- children: "*"
1574
- }, undefined, false, undefined, this)
1575
- ]
1576
- }, undefined, true, undefined, this),
1577
- /* @__PURE__ */ jsxDEV3(Textarea, {
1578
- id: "waitlist-what-building",
1579
- ...designPartnerForm.register("whatBuilding"),
1580
- placeholder: "Tell us about your project...",
1581
- disabled: isPending || submitResult?.success,
1582
- rows: 4
1583
- }, undefined, false, undefined, this),
1584
- designPartnerForm.formState.errors.whatBuilding && /* @__PURE__ */ jsxDEV3("p", {
1585
- className: "text-xs text-red-400",
1586
- children: designPartnerForm.formState.errors.whatBuilding.message
1587
- }, undefined, false, undefined, this)
1588
- ]
1589
- }, undefined, true, undefined, this),
1590
- /* @__PURE__ */ jsxDEV3("div", {
1591
- className: "space-y-2",
1592
- children: [
1593
- /* @__PURE__ */ jsxDEV3(Label, {
1594
- htmlFor: "waitlist-what-solving",
1595
- className: "text-sm font-medium",
1596
- children: [
1597
- "What do you hope ContractSpec will solve for you?",
1598
- " ",
1599
- /* @__PURE__ */ jsxDEV3("span", {
1600
- className: "text-red-400",
1601
- children: "*"
1602
- }, undefined, false, undefined, this)
1603
- ]
1604
- }, undefined, true, undefined, this),
1605
- /* @__PURE__ */ jsxDEV3(Textarea, {
1606
- id: "waitlist-what-solving",
1607
- ...designPartnerForm.register("whatSolving"),
1608
- placeholder: "What problems are you trying to solve?",
1609
- disabled: isPending || submitResult?.success,
1610
- rows: 4
1611
- }, undefined, false, undefined, this),
1612
- designPartnerForm.formState.errors.whatSolving && /* @__PURE__ */ jsxDEV3("p", {
1613
- className: "text-xs text-red-400",
1614
- children: designPartnerForm.formState.errors.whatSolving.message
1615
- }, undefined, false, undefined, this)
1616
- ]
1617
- }, undefined, true, undefined, this),
1618
- /* @__PURE__ */ jsxDEV3("div", {
1619
- className: "grid gap-4 md:grid-cols-2",
1620
- children: [
1621
- /* @__PURE__ */ jsxDEV3("div", {
1622
- className: "space-y-2",
1623
- children: [
1624
- /* @__PURE__ */ jsxDEV3(Label, {
1625
- htmlFor: "waitlist-team-size",
1626
- className: "text-sm font-medium",
1627
- children: "Team Size"
1628
- }, undefined, false, undefined, this),
1629
- /* @__PURE__ */ jsxDEV3(Select, {
1630
- value: designPartnerForm.watch("teamSize") || "",
1631
- onValueChange: (value) => designPartnerForm.setValue("teamSize", value),
1632
- disabled: isPending || submitResult?.success,
1633
- children: [
1634
- /* @__PURE__ */ jsxDEV3(SelectTrigger, {
1635
- id: "waitlist-team-size",
1636
- className: "w-full",
1637
- children: /* @__PURE__ */ jsxDEV3(SelectValue, {
1638
- placeholder: "Select team size"
1639
- }, undefined, false, undefined, this)
1640
- }, undefined, false, undefined, this),
1641
- /* @__PURE__ */ jsxDEV3(SelectContent, {
1642
- children: [
1643
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1644
- value: "solo",
1645
- children: "Solo"
1646
- }, undefined, false, undefined, this),
1647
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1648
- value: "2-5",
1649
- children: "2-5"
1650
- }, undefined, false, undefined, this),
1651
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1652
- value: "6-20",
1653
- children: "6-20"
1654
- }, undefined, false, undefined, this),
1655
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1656
- value: "20+",
1657
- children: "20+"
1658
- }, undefined, false, undefined, this)
1659
- ]
1660
- }, undefined, true, undefined, this)
1661
- ]
1662
- }, undefined, true, undefined, this)
1663
- ]
1664
- }, undefined, true, undefined, this),
1665
- /* @__PURE__ */ jsxDEV3("div", {
1666
- className: "space-y-2",
1667
- children: [
1668
- /* @__PURE__ */ jsxDEV3(Label, {
1669
- htmlFor: "waitlist-timeline",
1670
- className: "text-sm font-medium",
1671
- children: "Timeline"
1672
- }, undefined, false, undefined, this),
1673
- /* @__PURE__ */ jsxDEV3(Select, {
1674
- value: designPartnerForm.watch("timeline") || "",
1675
- onValueChange: (value) => designPartnerForm.setValue("timeline", value),
1676
- disabled: isPending || submitResult?.success,
1677
- children: [
1678
- /* @__PURE__ */ jsxDEV3(SelectTrigger, {
1679
- id: "waitlist-timeline",
1680
- className: "w-full",
1681
- children: /* @__PURE__ */ jsxDEV3(SelectValue, {
1682
- placeholder: "Select timeline"
1683
- }, undefined, false, undefined, this)
1684
- }, undefined, false, undefined, this),
1685
- /* @__PURE__ */ jsxDEV3(SelectContent, {
1686
- children: [
1687
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1688
- value: "now",
1689
- children: "Now"
1690
- }, undefined, false, undefined, this),
1691
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1692
- value: "1-3-months",
1693
- children: "1-3 months"
1694
- }, undefined, false, undefined, this),
1695
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1696
- value: "3-6-months",
1697
- children: "3-6 months"
1698
- }, undefined, false, undefined, this),
1699
- /* @__PURE__ */ jsxDEV3(SelectItem, {
1700
- value: "exploring",
1701
- children: "Exploring"
1702
- }, undefined, false, undefined, this)
1703
- ]
1704
- }, undefined, true, undefined, this)
1705
- ]
1706
- }, undefined, true, undefined, this)
1707
- ]
1708
- }, undefined, true, undefined, this)
1709
- ]
1710
- }, undefined, true, undefined, this),
1711
- /* @__PURE__ */ jsxDEV3("div", {
1712
- className: "space-y-3",
1713
- children: [
1714
- /* @__PURE__ */ jsxDEV3("div", {
1715
- className: "flex items-start gap-3",
1716
- children: [
1717
- /* @__PURE__ */ jsxDEV3(Checkbox, {
1718
- id: "waitlist-open-to-sessions",
1719
- checked: designPartnerForm.watch("openToSessions"),
1720
- onCheckedChange: (checked) => designPartnerForm.setValue("openToSessions", checked === true),
1721
- disabled: isPending || submitResult?.success
1722
- }, undefined, false, undefined, this),
1723
- /* @__PURE__ */ jsxDEV3(Label, {
1724
- htmlFor: "waitlist-open-to-sessions",
1725
- className: "cursor-pointer text-sm leading-relaxed",
1726
- children: "I'm open to 1:1 product/design sessions"
1727
- }, undefined, false, undefined, this)
1728
- ]
1729
- }, undefined, true, undefined, this),
1730
- /* @__PURE__ */ jsxDEV3("div", {
1731
- className: "flex items-start gap-3",
1732
- children: [
1733
- /* @__PURE__ */ jsxDEV3(Checkbox, {
1734
- id: "waitlist-case-studies",
1735
- checked: designPartnerForm.watch("okayWithCaseStudies"),
1736
- onCheckedChange: (checked) => designPartnerForm.setValue("okayWithCaseStudies", checked === true),
1737
- disabled: isPending || submitResult?.success
1738
- }, undefined, false, undefined, this),
1739
- /* @__PURE__ */ jsxDEV3(Label, {
1740
- htmlFor: "waitlist-case-studies",
1741
- className: "cursor-pointer text-sm leading-relaxed",
1742
- children: "I'm okay with anonymized case studies about our usage"
1743
- }, undefined, false, undefined, this)
1744
- ]
1745
- }, undefined, true, undefined, this)
1746
- ]
1747
- }, undefined, true, undefined, this)
1748
- ]
1749
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsxDEV3("div", {
1750
- className: "space-y-2",
1751
- children: [
1752
- /* @__PURE__ */ jsxDEV3(Label, {
1753
- htmlFor: "waitlist-email",
1754
- className: "text-sm font-medium",
1755
- children: [
1756
- "Email ",
1757
- /* @__PURE__ */ jsxDEV3("span", {
1758
- className: "text-red-400",
1759
- children: "*"
1760
- }, undefined, false, undefined, this)
1761
- ]
1762
- }, undefined, true, undefined, this),
1763
- /* @__PURE__ */ jsxDEV3(Input, {
1764
- id: "waitlist-email",
1765
- ...simpleForm.register("email"),
1766
- type: "email",
1767
- placeholder: "your@email.com",
1768
- disabled: isPending || submitResult?.success
1769
- }, undefined, false, undefined, this),
1770
- simpleForm.formState.errors.email && /* @__PURE__ */ jsxDEV3("p", {
1771
- className: "text-xs text-red-400",
1772
- children: simpleForm.formState.errors.email.message
1773
- }, undefined, false, undefined, this)
1774
- ]
1775
- }, undefined, true, undefined, this),
1776
- submitResult && !isPending && /* @__PURE__ */ jsxDEV3("div", {
1777
- className: `flex items-start gap-2 rounded-lg p-4 text-sm ${submitResult.success ? "border border-green-500/20 bg-green-500/10 text-green-400" : "border border-red-500/20 bg-red-500/10 text-red-400"}`,
1778
- children: [
1779
- submitResult.success ? /* @__PURE__ */ jsxDEV3(CheckCircle, {
1780
- size: 20,
1781
- className: "mt-0.5 shrink-0"
1782
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV3(AlertCircle, {
1783
- size: 20,
1784
- className: "mt-0.5 shrink-0"
1785
- }, undefined, false, undefined, this),
1786
- /* @__PURE__ */ jsxDEV3("div", {
1787
- className: "flex-1",
1788
- children: submitResult.success ? /* @__PURE__ */ jsxDEV3(Fragment, {
1789
- children: [
1790
- /* @__PURE__ */ jsxDEV3("p", {
1791
- className: "mb-1 font-semibold",
1792
- children: "You're on the list."
1793
- }, undefined, false, undefined, this),
1794
- /* @__PURE__ */ jsxDEV3("p", {
1795
- className: "text-sm",
1796
- children: submitResult.text
1797
- }, undefined, false, undefined, this)
1798
- ]
1799
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsxDEV3("p", {
1800
- children: submitResult.text
1801
- }, undefined, false, undefined, this)
1802
- }, undefined, false, undefined, this)
1803
- ]
1804
- }, undefined, true, undefined, this),
1805
891
  /* @__PURE__ */ jsxDEV3(Button, {
1806
- type: "submit",
1807
- disabled: isPending || submitResult?.success,
1808
- className: "w-full",
1809
- children: isPending ? "Submitting..." : isDesignPartner ? "Apply to the waitlist" : "Join waitlist"
892
+ asChild: true,
893
+ className: "w-full sm:w-auto",
894
+ children: /* @__PURE__ */ jsxDEV3(Link, {
895
+ href: studioUrl,
896
+ children: [
897
+ "Get Started Free ",
898
+ /* @__PURE__ */ jsxDEV3(ArrowRight, {
899
+ className: "ml-2 h-4 w-4"
900
+ }, undefined, false, undefined, this)
901
+ ]
902
+ }, undefined, true, undefined, this)
1810
903
  }, undefined, false, undefined, this),
1811
- /* @__PURE__ */ jsxDEV3("p", {
1812
- className: "text-muted-foreground text-center text-xs",
1813
- children: "No spam. We'll only email you about ContractSpec and your application."
904
+ /* @__PURE__ */ jsxDEV3(Button, {
905
+ asChild: true,
906
+ variant: "outline",
907
+ className: "w-full sm:w-auto",
908
+ children: /* @__PURE__ */ jsxDEV3(Link, {
909
+ href: studioDocsUrl,
910
+ children: "Read Studio Docs"
911
+ }, undefined, false, undefined, this)
1814
912
  }, undefined, false, undefined, this)
1815
913
  ]
1816
914
  }, undefined, true, undefined, this)
@@ -1823,14 +921,14 @@ import { useActionState } from "react";
1823
921
  import {
1824
922
  Calendar,
1825
923
  MessageSquare as MessageSquare2,
1826
- CheckCircle as CheckCircle2,
1827
- AlertCircle as AlertCircle2
924
+ CheckCircle,
925
+ AlertCircle
1828
926
  } from "lucide-react";
1829
927
  import {
1830
928
  ActionForm,
1831
929
  Button as Button2,
1832
- Input as Input2,
1833
- Textarea as Textarea2
930
+ Input,
931
+ Textarea
1834
932
  } from "@contractspec/lib.design-system";
1835
933
  import { VStack as VStack2, HStack as HStack2 } from "@contractspec/lib.ui-kit-web/ui/stack";
1836
934
  import {
@@ -1875,9 +973,7 @@ function ContactClient() {
1875
973
  }, undefined, false, undefined, this)
1876
974
  ]
1877
975
  }, undefined, true, undefined, this),
1878
- /* @__PURE__ */ jsxDEV4(WaitlistSection, {
1879
- context: "contact"
1880
- }, undefined, false, undefined, this),
976
+ /* @__PURE__ */ jsxDEV4(StudioSignupSection, {}, undefined, false, undefined, this),
1881
977
  /* @__PURE__ */ jsxDEV4(VStack2, {
1882
978
  className: "card-subtle gap-6 p-8",
1883
979
  id: "call",
@@ -1954,7 +1050,7 @@ function ContactClient() {
1954
1050
  className: "text-sm font-medium",
1955
1051
  children: "Name"
1956
1052
  }, undefined, false, undefined, this),
1957
- /* @__PURE__ */ jsxDEV4(Input2, {
1053
+ /* @__PURE__ */ jsxDEV4(Input, {
1958
1054
  id: "contact-name",
1959
1055
  name: "name",
1960
1056
  type: "text",
@@ -1971,7 +1067,7 @@ function ContactClient() {
1971
1067
  className: "text-sm font-medium",
1972
1068
  children: "Email"
1973
1069
  }, undefined, false, undefined, this),
1974
- /* @__PURE__ */ jsxDEV4(Input2, {
1070
+ /* @__PURE__ */ jsxDEV4(Input, {
1975
1071
  id: "contact-email",
1976
1072
  name: "email",
1977
1073
  type: "email",
@@ -1989,7 +1085,7 @@ function ContactClient() {
1989
1085
  className: "text-sm font-medium",
1990
1086
  children: "Message"
1991
1087
  }, undefined, false, undefined, this),
1992
- /* @__PURE__ */ jsxDEV4(Textarea2, {
1088
+ /* @__PURE__ */ jsxDEV4(Textarea, {
1993
1089
  id: "contact-message",
1994
1090
  name: "message",
1995
1091
  placeholder: "Tell us what's on your mind...",
@@ -2002,9 +1098,9 @@ function ContactClient() {
2002
1098
  contactResult && !contactPending && /* @__PURE__ */ jsxDEV4(HStack2, {
2003
1099
  className: `items-center gap-2 rounded-lg p-3 text-sm ${contactResult.success ? "border border-green-500/20 bg-green-500/10 text-green-400" : "border border-red-500/20 bg-red-500/10 text-red-400"}`,
2004
1100
  children: [
2005
- contactResult.success ? /* @__PURE__ */ jsxDEV4(CheckCircle2, {
1101
+ contactResult.success ? /* @__PURE__ */ jsxDEV4(CheckCircle, {
2006
1102
  size: 16
2007
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV4(AlertCircle2, {
1103
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV4(AlertCircle, {
2008
1104
  size: 16
2009
1105
  }, undefined, false, undefined, this),
2010
1106
  /* @__PURE__ */ jsxDEV4(Small2, {
@@ -2505,13 +1601,13 @@ function ContributePage() {
2505
1601
  }
2506
1602
 
2507
1603
  // src/components/marketing/DesignPartnerPage.tsx
2508
- import Link from "next/link";
1604
+ import Link2 from "next/link";
2509
1605
  import { Button as Button3 } from "@contractspec/lib.design-system";
2510
1606
  import {
2511
- ArrowRight,
1607
+ ArrowRight as ArrowRight2,
2512
1608
  BookOpen,
2513
1609
  MessageSquare as MessageSquare3,
2514
- Rocket as Rocket2,
1610
+ Rocket as Rocket3,
2515
1611
  Users as Users2
2516
1612
  } from "lucide-react";
2517
1613
  import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
@@ -2559,7 +1655,7 @@ function DesignPartnerPage() {
2559
1655
  children: [
2560
1656
  /* @__PURE__ */ jsxDEV6("div", {
2561
1657
  className: "border-primary/20 bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg border",
2562
- children: /* @__PURE__ */ jsxDEV6(Rocket2, {
1658
+ children: /* @__PURE__ */ jsxDEV6(Rocket3, {
2563
1659
  className: "text-primary h-6 w-6"
2564
1660
  }, undefined, false, undefined, this)
2565
1661
  }, undefined, false, undefined, this),
@@ -2569,18 +1665,18 @@ function DesignPartnerPage() {
2569
1665
  }, undefined, false, undefined, this),
2570
1666
  /* @__PURE__ */ jsxDEV6("p", {
2571
1667
  className: "text-muted-foreground",
2572
- children: "Your account has been enabled with Design Partner privileges. Log in to the Studio to start exploring the latest features before they're public."
1668
+ children: "Your account has been enabled with Design Partner privileges. Log in to ContractSpec Studio to run the full loop from evidence to spec-first deliverables with your team."
2573
1669
  }, undefined, false, undefined, this),
2574
1670
  /* @__PURE__ */ jsxDEV6("div", {
2575
1671
  className: "pt-2",
2576
1672
  children: /* @__PURE__ */ jsxDEV6(Button3, {
2577
1673
  asChild: true,
2578
1674
  variant: "outline",
2579
- children: /* @__PURE__ */ jsxDEV6(Link, {
2580
- href: "https://www.contractspec.studio",
1675
+ children: /* @__PURE__ */ jsxDEV6(Link2, {
1676
+ href: "https://app.contractspec.studio",
2581
1677
  children: [
2582
1678
  "Launch Studio ",
2583
- /* @__PURE__ */ jsxDEV6(ArrowRight, {
1679
+ /* @__PURE__ */ jsxDEV6(ArrowRight2, {
2584
1680
  className: "ml-2 h-4 w-4"
2585
1681
  }, undefined, false, undefined, this)
2586
1682
  ]
@@ -2611,12 +1707,12 @@ function DesignPartnerPage() {
2611
1707
  children: /* @__PURE__ */ jsxDEV6(Button3, {
2612
1708
  asChild: true,
2613
1709
  variant: "outline",
2614
- children: /* @__PURE__ */ jsxDEV6(Link, {
1710
+ children: /* @__PURE__ */ jsxDEV6(Link2, {
2615
1711
  href: "mailto:partners@contractspec.io",
2616
1712
  children: [
2617
1713
  "Contact Partner Success",
2618
1714
  " ",
2619
- /* @__PURE__ */ jsxDEV6(ArrowRight, {
1715
+ /* @__PURE__ */ jsxDEV6(ArrowRight2, {
2620
1716
  className: "ml-2 h-4 w-4"
2621
1717
  }, undefined, false, undefined, this)
2622
1718
  ]
@@ -2647,11 +1743,11 @@ function DesignPartnerPage() {
2647
1743
  children: /* @__PURE__ */ jsxDEV6(Button3, {
2648
1744
  asChild: true,
2649
1745
  variant: "outline",
2650
- children: /* @__PURE__ */ jsxDEV6(Link, {
1746
+ children: /* @__PURE__ */ jsxDEV6(Link2, {
2651
1747
  href: "/docs",
2652
1748
  children: [
2653
1749
  "Read the Docs ",
2654
- /* @__PURE__ */ jsxDEV6(ArrowRight, {
1750
+ /* @__PURE__ */ jsxDEV6(ArrowRight2, {
2655
1751
  className: "ml-2 h-4 w-4"
2656
1752
  }, undefined, false, undefined, this)
2657
1753
  ]
@@ -2753,7 +1849,7 @@ function DesignPartnerPage() {
2753
1849
  /* @__PURE__ */ jsxDEV6(Button3, {
2754
1850
  asChild: true,
2755
1851
  size: "lg",
2756
- children: /* @__PURE__ */ jsxDEV6(Link, {
1852
+ children: /* @__PURE__ */ jsxDEV6(Link2, {
2757
1853
  href: "mailto:partners@contractspec.io",
2758
1854
  children: "Email the Founders"
2759
1855
  }, undefined, false, undefined, this)
@@ -2820,11 +1916,11 @@ function HeroMarketingSection() {
2820
1916
  }, undefined, true, undefined, this),
2821
1917
  /* @__PURE__ */ jsxDEV7(ButtonLink2, {
2822
1918
  variant: "ghost",
2823
- href: "/contact#waitlist",
1919
+ href: "https://app.contractspec.studio",
2824
1920
  onClick: () => captureAnalyticsEvent(analyticsEventNames.CTA_STUDIO_CLICK, {
2825
1921
  surface: "hero"
2826
1922
  }),
2827
- children: "Join Studio Waitlist"
1923
+ children: "Try Studio"
2828
1924
  }, undefined, false, undefined, this)
2829
1925
  ]
2830
1926
  }, undefined, true, undefined, this),
@@ -2982,13 +2078,13 @@ function SolutionSection() {
2982
2078
  }
2983
2079
 
2984
2080
  // src/components/marketing/sections/FearsSection.tsx
2985
- import { CheckCircle as CheckCircle3, Code, Unlock, Zap } from "lucide-react";
2081
+ import { CheckCircle as CheckCircle2, Code, Unlock, Zap } from "lucide-react";
2986
2082
  import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
2987
2083
  var fears = [
2988
2084
  {
2989
2085
  title: '"I already have an app"',
2990
2086
  body: "ContractSpec works with existing codebases. You don't start over — you stabilize incrementally, one module at a time. Start with one API endpoint, one data model, one contract.",
2991
- icon: CheckCircle3
2087
+ icon: CheckCircle2
2992
2088
  },
2993
2089
  {
2994
2090
  title: '"Vendor lock-in / losing ownership"',
@@ -3065,9 +2161,9 @@ function CorePositioningSection() {
3065
2161
  className: "pt-2 sm:flex sm:flex-row sm:flex-wrap sm:items-center sm:justify-center",
3066
2162
  children: [
3067
2163
  /* @__PURE__ */ jsxDEV12(ButtonLink3, {
3068
- href: "/pricing#waitlist",
2164
+ href: "https://app.contractspec.studio",
3069
2165
  children: [
3070
- "Join waitlist ",
2166
+ "Try Studio ",
3071
2167
  /* @__PURE__ */ jsxDEV12(ChevronRight2, {
3072
2168
  size: 16
3073
2169
  }, undefined, false, undefined, this)
@@ -3339,11 +2435,11 @@ function CtaSection() {
3339
2435
  className: "pt-2 sm:flex sm:flex-row sm:flex-wrap sm:items-center sm:justify-center",
3340
2436
  children: [
3341
2437
  /* @__PURE__ */ jsxDEV17(ButtonLink5, {
3342
- href: "/pricing#waitlist",
2438
+ href: "https://app.contractspec.studio",
3343
2439
  onClick: () => captureAnalyticsEvent2(analyticsEventNames2.CTA_STUDIO_CLICK, {
3344
2440
  surface: "cta-section"
3345
2441
  }),
3346
- children: "Join waitlist"
2442
+ children: "Try Studio"
3347
2443
  }, undefined, false, undefined, this),
3348
2444
  /* @__PURE__ */ jsxDEV17(ButtonLink5, {
3349
2445
  variant: "ghost",
@@ -3401,7 +2497,7 @@ var PRICING_EXAMPLES = {
3401
2497
  };
3402
2498
 
3403
2499
  // src/components/marketing/pricing-thinking-modal.tsx
3404
- import { CheckCircle as CheckCircle4 } from "lucide-react";
2500
+ import { CheckCircle as CheckCircle3 } from "lucide-react";
3405
2501
  import {
3406
2502
  Dialog,
3407
2503
  DialogContent,
@@ -3487,7 +2583,7 @@ function PricingThinkingModal({
3487
2583
  children: "Tentative pricing (work in progress)"
3488
2584
  }, undefined, false, undefined, this),
3489
2585
  /* @__PURE__ */ jsxDEV19(DialogDescription, {
3490
- children: "We're still in design-partner mode. This is a draft of how we expect pricing to look once we open public access."
2586
+ children: "ContractSpec Studio is live. This is a draft of how paid plans are expected to evolve as usage grows."
3491
2587
  }, undefined, false, undefined, this)
3492
2588
  ]
3493
2589
  }, undefined, true, undefined, this),
@@ -3541,7 +2637,7 @@ function PricingThinkingModal({
3541
2637
  children: tier.bullets.map((bullet, i) => /* @__PURE__ */ jsxDEV19("li", {
3542
2638
  className: "text-muted-foreground flex gap-2 text-sm",
3543
2639
  children: [
3544
- /* @__PURE__ */ jsxDEV19(CheckCircle4, {
2640
+ /* @__PURE__ */ jsxDEV19(CheckCircle3, {
3545
2641
  size: 14,
3546
2642
  className: "mt-0.5 shrink-0 text-violet-400"
3547
2643
  }, undefined, false, undefined, this),
@@ -3612,7 +2708,7 @@ function PricingThinkingModal({
3612
2708
  }, undefined, false, undefined, this),
3613
2709
  /* @__PURE__ */ jsxDEV19("p", {
3614
2710
  className: "text-muted-foreground text-xs",
3615
- children: "Design partners get early access and a founding discount when paid plans launch."
2711
+ children: "Design partners get priority onboarding and partner incentives as paid plans launch."
3616
2712
  }, undefined, false, undefined, this),
3617
2713
  onApplyClick && /* @__PURE__ */ jsxDEV19(Button4, {
3618
2714
  onClick: () => {
@@ -3621,7 +2717,7 @@ function PricingThinkingModal({
3621
2717
  },
3622
2718
  className: "w-full",
3623
2719
  variant: "outline",
3624
- children: "Apply as a design partner"
2720
+ children: "Try Studio"
3625
2721
  }, undefined, false, undefined, this)
3626
2722
  ]
3627
2723
  }, undefined, true, undefined, this)
@@ -3633,23 +2729,23 @@ function PricingThinkingModal({
3633
2729
  }
3634
2730
 
3635
2731
  // src/components/marketing/PricingClient.tsx
3636
- import { useState as useState2 } from "react";
3637
- import Link2 from "next/link";
3638
- import { CheckCircle as CheckCircle5, ChevronDown, ChevronRight as ChevronRight3 } from "lucide-react";
2732
+ import { useState } from "react";
2733
+ import Link3 from "next/link";
2734
+ import { CheckCircle as CheckCircle4, ChevronDown, ChevronRight as ChevronRight3 } from "lucide-react";
3639
2735
  import { jsxDEV as jsxDEV20 } from "react/jsx-dev-runtime";
3640
2736
  "use client";
3641
2737
  var faqs = [
3642
2738
  {
3643
- question: "Can I pay for ContractSpec today?",
3644
- answer: "Not yet. We're pre-PMF and working closely with a small set of design partners. They get full access during early access and will be first to move onto paid plans once we're confident in the value and stability."
2739
+ question: "Can I use ContractSpec Studio today?",
2740
+ answer: "Yes. ContractSpec Studio is live at app.contractspec.studio. Start with the free tier and upgrade as paid plans roll out."
3645
2741
  },
3646
2742
  {
3647
2743
  question: "What will you charge for later?",
3648
- answer: "Our plan is to charge based on usage: regenerations, AI agent actions, and number of active projects. A generous free tier will stay available so smaller teams and experiments can thrive."
2744
+ 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."
3649
2745
  },
3650
2746
  {
3651
2747
  question: "What do I get as a design partner?",
3652
- answer: "Direct collaboration on features, priority onboarding, and a founding discount when paid plans launch. You also shape how ContractSpec works for teams like yours."
2748
+ answer: "Direct collaboration on roadmap priorities, hands-on onboarding, and priority support. You also help shape Studio workflows before broad rollout."
3653
2749
  },
3654
2750
  {
3655
2751
  question: "Will you ever charge per seat?",
@@ -3657,13 +2753,10 @@ var faqs = [
3657
2753
  }
3658
2754
  ];
3659
2755
  function PricingClient() {
3660
- const [openFaq, setOpenFaq] = useState2(null);
3661
- const [pricingModalOpen, setPricingModalOpen] = useState2(false);
3662
- const scrollToWaitlist = () => {
3663
- const waitlistElement = document.getElementById("waitlist");
3664
- if (waitlistElement) {
3665
- waitlistElement.scrollIntoView({ behavior: "smooth", block: "start" });
3666
- }
2756
+ const [openFaq, setOpenFaq] = useState(null);
2757
+ const [pricingModalOpen, setPricingModalOpen] = useState(false);
2758
+ const openStudio = () => {
2759
+ window.open("https://app.contractspec.studio", "_blank", "noopener,noreferrer");
3667
2760
  };
3668
2761
  return /* @__PURE__ */ jsxDEV20("main", {
3669
2762
  className: "",
@@ -3679,12 +2772,12 @@ function PricingClient() {
3679
2772
  }, undefined, false, undefined, this),
3680
2773
  /* @__PURE__ */ jsxDEV20("p", {
3681
2774
  className: "text-muted-foreground mx-auto max-w-2xl text-lg",
3682
- children: "ContractSpec Core (the OSS compiler) is and always will be free. ContractSpec Studio (the managed platform) is in early access."
2775
+ children: "ContractSpec Core (the OSS compiler) is and always will be free. ContractSpec Studio is live, with paid plans rolling out progressively."
3683
2776
  }, undefined, false, undefined, this),
3684
2777
  /* @__PURE__ */ jsxDEV20("div", {
3685
2778
  className: "flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row",
3686
2779
  children: [
3687
- /* @__PURE__ */ jsxDEV20(Link2, {
2780
+ /* @__PURE__ */ jsxDEV20(Link3, {
3688
2781
  href: "/install",
3689
2782
  className: "btn-primary inline-flex items-center gap-2",
3690
2783
  children: [
@@ -3694,10 +2787,10 @@ function PricingClient() {
3694
2787
  }, undefined, false, undefined, this)
3695
2788
  ]
3696
2789
  }, undefined, true, undefined, this),
3697
- /* @__PURE__ */ jsxDEV20("button", {
3698
- onClick: scrollToWaitlist,
2790
+ /* @__PURE__ */ jsxDEV20(Link3, {
2791
+ href: "https://app.contractspec.studio",
3699
2792
  className: "btn-ghost inline-flex items-center gap-2",
3700
- children: "Join Studio waitlist"
2793
+ children: "Try Studio Free"
3701
2794
  }, undefined, false, undefined, this)
3702
2795
  ]
3703
2796
  }, undefined, true, undefined, this)
@@ -3740,17 +2833,17 @@ function PricingClient() {
3740
2833
  /* @__PURE__ */ jsxDEV20("li", {
3741
2834
  className: "flex gap-2",
3742
2835
  children: [
3743
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2836
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3744
2837
  size: 16,
3745
2838
  className: "mt-0.5 shrink-0 text-violet-400"
3746
2839
  }, undefined, false, undefined, this),
3747
- "Early access to ContractSpec Studio"
2840
+ "Priority access to new Studio capabilities"
3748
2841
  ]
3749
2842
  }, undefined, true, undefined, this),
3750
2843
  /* @__PURE__ */ jsxDEV20("li", {
3751
2844
  className: "flex gap-2",
3752
2845
  children: [
3753
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2846
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3754
2847
  size: 16,
3755
2848
  className: "mt-0.5 shrink-0 text-violet-400"
3756
2849
  }, undefined, false, undefined, this),
@@ -3760,7 +2853,7 @@ function PricingClient() {
3760
2853
  /* @__PURE__ */ jsxDEV20("li", {
3761
2854
  className: "flex gap-2",
3762
2855
  children: [
3763
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2856
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3764
2857
  size: 16,
3765
2858
  className: "mt-0.5 shrink-0 text-violet-400"
3766
2859
  }, undefined, false, undefined, this),
@@ -3770,29 +2863,29 @@ function PricingClient() {
3770
2863
  /* @__PURE__ */ jsxDEV20("li", {
3771
2864
  className: "flex gap-2",
3772
2865
  children: [
3773
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2866
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3774
2867
  size: 16,
3775
2868
  className: "mt-0.5 shrink-0 text-violet-400"
3776
2869
  }, undefined, false, undefined, this),
3777
- "Priority support during early access"
2870
+ "Priority support through direct channels"
3778
2871
  ]
3779
2872
  }, undefined, true, undefined, this),
3780
2873
  /* @__PURE__ */ jsxDEV20("li", {
3781
2874
  className: "flex gap-2",
3782
2875
  children: [
3783
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2876
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3784
2877
  size: 16,
3785
2878
  className: "mt-0.5 shrink-0 text-violet-400"
3786
2879
  }, undefined, false, undefined, this),
3787
- "Founding discount when paid plans launch"
2880
+ "Pricing input and partner incentives"
3788
2881
  ]
3789
2882
  }, undefined, true, undefined, this)
3790
2883
  ]
3791
2884
  }, undefined, true, undefined, this),
3792
- /* @__PURE__ */ jsxDEV20("button", {
3793
- onClick: scrollToWaitlist,
2885
+ /* @__PURE__ */ jsxDEV20(Link3, {
2886
+ href: "/design-partner",
3794
2887
  className: "btn-primary w-full md:w-auto",
3795
- children: "Apply to the waitlist"
2888
+ children: "Apply as a design partner"
3796
2889
  }, undefined, false, undefined, this)
3797
2890
  ]
3798
2891
  }, undefined, true, undefined, this)
@@ -3848,7 +2941,7 @@ function PricingClient() {
3848
2941
  /* @__PURE__ */ jsxDEV20("li", {
3849
2942
  className: "text-muted-foreground flex gap-3 text-sm",
3850
2943
  children: [
3851
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2944
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3852
2945
  size: 16,
3853
2946
  className: "mt-0.5 shrink-0 text-violet-400"
3854
2947
  }, undefined, false, undefined, this),
@@ -3858,7 +2951,7 @@ function PricingClient() {
3858
2951
  /* @__PURE__ */ jsxDEV20("li", {
3859
2952
  className: "text-muted-foreground flex gap-3 text-sm",
3860
2953
  children: [
3861
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2954
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3862
2955
  size: 16,
3863
2956
  className: "mt-0.5 shrink-0 text-violet-400"
3864
2957
  }, undefined, false, undefined, this),
@@ -3868,7 +2961,7 @@ function PricingClient() {
3868
2961
  /* @__PURE__ */ jsxDEV20("li", {
3869
2962
  className: "text-muted-foreground flex gap-3 text-sm",
3870
2963
  children: [
3871
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2964
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3872
2965
  size: 16,
3873
2966
  className: "mt-0.5 shrink-0 text-violet-400"
3874
2967
  }, undefined, false, undefined, this),
@@ -3878,7 +2971,7 @@ function PricingClient() {
3878
2971
  /* @__PURE__ */ jsxDEV20("li", {
3879
2972
  className: "text-muted-foreground flex gap-3 text-sm",
3880
2973
  children: [
3881
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
2974
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3882
2975
  size: 16,
3883
2976
  className: "mt-0.5 shrink-0 text-violet-400"
3884
2977
  }, undefined, false, undefined, this),
@@ -3889,7 +2982,7 @@ function PricingClient() {
3889
2982
  }, undefined, true, undefined, this)
3890
2983
  ]
3891
2984
  }, undefined, true, undefined, this),
3892
- /* @__PURE__ */ jsxDEV20(Link2, {
2985
+ /* @__PURE__ */ jsxDEV20(Link3, {
3893
2986
  href: "/install",
3894
2987
  className: "btn-ghost w-full",
3895
2988
  children: "Install now"
@@ -3901,7 +2994,7 @@ function PricingClient() {
3901
2994
  children: [
3902
2995
  /* @__PURE__ */ jsxDEV20("div", {
3903
2996
  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",
3904
- children: "Current"
2997
+ children: "Live program"
3905
2998
  }, undefined, false, undefined, this),
3906
2999
  /* @__PURE__ */ jsxDEV20("div", {
3907
3000
  className: "space-y-2",
@@ -3915,11 +3008,11 @@ function PricingClient() {
3915
3008
  children: [
3916
3009
  /* @__PURE__ */ jsxDEV20("div", {
3917
3010
  className: "text-2xl font-bold",
3918
- children: "Free during early access"
3011
+ children: "Invite-based"
3919
3012
  }, undefined, false, undefined, this),
3920
3013
  /* @__PURE__ */ jsxDEV20("p", {
3921
3014
  className: "text-muted-foreground text-xs",
3922
- children: "Founding discount when paid plans launch"
3015
+ children: "Built for teams shaping the next Studio capabilities"
3923
3016
  }, undefined, false, undefined, this)
3924
3017
  ]
3925
3018
  }, undefined, true, undefined, this)
@@ -3931,47 +3024,47 @@ function PricingClient() {
3931
3024
  /* @__PURE__ */ jsxDEV20("li", {
3932
3025
  className: "text-muted-foreground flex gap-3 text-sm",
3933
3026
  children: [
3934
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3027
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3935
3028
  size: 16,
3936
3029
  className: "mt-0.5 shrink-0 text-violet-400"
3937
3030
  }, undefined, false, undefined, this),
3938
- "Use ContractSpec Studio for real projects during early access"
3031
+ "Use ContractSpec Studio for real projects"
3939
3032
  ]
3940
3033
  }, undefined, true, undefined, this),
3941
3034
  /* @__PURE__ */ jsxDEV20("li", {
3942
3035
  className: "text-muted-foreground flex gap-3 text-sm",
3943
3036
  children: [
3944
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3037
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3945
3038
  size: 16,
3946
3039
  className: "mt-0.5 shrink-0 text-violet-400"
3947
3040
  }, undefined, false, undefined, this),
3948
- "Work directly with the founder on architecture & use cases"
3041
+ "Work directly with the team on architecture and workflow design"
3949
3042
  ]
3950
3043
  }, undefined, true, undefined, this),
3951
3044
  /* @__PURE__ */ jsxDEV20("li", {
3952
3045
  className: "text-muted-foreground flex gap-3 text-sm",
3953
3046
  children: [
3954
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3047
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3955
3048
  size: 16,
3956
3049
  className: "mt-0.5 shrink-0 text-violet-400"
3957
3050
  }, undefined, false, undefined, this),
3958
- 'Reasonable "fair use" limits on regenerations and AI credits'
3051
+ "Access to partner-only previews and feedback loops"
3959
3052
  ]
3960
3053
  }, undefined, true, undefined, this),
3961
3054
  /* @__PURE__ */ jsxDEV20("li", {
3962
3055
  className: "text-muted-foreground flex gap-3 text-sm",
3963
3056
  children: [
3964
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3057
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
3965
3058
  size: 16,
3966
3059
  className: "mt-0.5 shrink-0 text-violet-400"
3967
3060
  }, undefined, false, undefined, this),
3968
- "Priority support & feedback loops"
3061
+ "Priority support and roadmap influence"
3969
3062
  ]
3970
3063
  }, undefined, true, undefined, this)
3971
3064
  ]
3972
3065
  }, undefined, true, undefined, this),
3973
- /* @__PURE__ */ jsxDEV20("button", {
3974
- onClick: scrollToWaitlist,
3066
+ /* @__PURE__ */ jsxDEV20(Link3, {
3067
+ href: "/design-partner",
3975
3068
  className: "btn-primary w-full",
3976
3069
  children: "Apply as a design partner"
3977
3070
  }, undefined, false, undefined, this)
@@ -4024,7 +3117,7 @@ function PricingClient() {
4024
3117
  /* @__PURE__ */ jsxDEV20("button", {
4025
3118
  disabled: true,
4026
3119
  className: "btn-ghost w-full cursor-not-allowed opacity-50",
4027
- children: "Available after public launch"
3120
+ children: "Available after pricing rollout"
4028
3121
  }, undefined, false, undefined, this)
4029
3122
  ]
4030
3123
  }, undefined, true, undefined, this),
@@ -4061,7 +3154,7 @@ function PricingClient() {
4061
3154
  /* @__PURE__ */ jsxDEV20("li", {
4062
3155
  className: "text-muted-foreground flex gap-3 text-sm",
4063
3156
  children: [
4064
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3157
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
4065
3158
  size: 16,
4066
3159
  className: "mt-0.5 shrink-0 text-violet-400"
4067
3160
  }, undefined, false, undefined, this),
@@ -4071,7 +3164,7 @@ function PricingClient() {
4071
3164
  /* @__PURE__ */ jsxDEV20("li", {
4072
3165
  className: "text-muted-foreground flex gap-3 text-sm",
4073
3166
  children: [
4074
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3167
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
4075
3168
  size: 16,
4076
3169
  className: "mt-0.5 shrink-0 text-violet-400"
4077
3170
  }, undefined, false, undefined, this),
@@ -4081,7 +3174,7 @@ function PricingClient() {
4081
3174
  /* @__PURE__ */ jsxDEV20("li", {
4082
3175
  className: "text-muted-foreground flex gap-3 text-sm",
4083
3176
  children: [
4084
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3177
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
4085
3178
  size: 16,
4086
3179
  className: "mt-0.5 shrink-0 text-violet-400"
4087
3180
  }, undefined, false, undefined, this),
@@ -4091,7 +3184,7 @@ function PricingClient() {
4091
3184
  /* @__PURE__ */ jsxDEV20("li", {
4092
3185
  className: "text-muted-foreground flex gap-3 text-sm",
4093
3186
  children: [
4094
- /* @__PURE__ */ jsxDEV20(CheckCircle5, {
3187
+ /* @__PURE__ */ jsxDEV20(CheckCircle4, {
4095
3188
  size: 16,
4096
3189
  className: "mt-0.5 shrink-0 text-violet-400"
4097
3190
  }, undefined, false, undefined, this),
@@ -4100,7 +3193,7 @@ function PricingClient() {
4100
3193
  }, undefined, true, undefined, this)
4101
3194
  ]
4102
3195
  }, undefined, true, undefined, this),
4103
- /* @__PURE__ */ jsxDEV20(Link2, {
3196
+ /* @__PURE__ */ jsxDEV20(Link3, {
4104
3197
  href: "/contact",
4105
3198
  className: "btn-ghost w-full",
4106
3199
  children: "Talk to us"
@@ -4121,7 +3214,7 @@ function PricingClient() {
4121
3214
  children: [
4122
3215
  /* @__PURE__ */ jsxDEV20("h2", {
4123
3216
  className: "text-3xl font-bold",
4124
- children: "How ContractSpec pricing will work"
3217
+ children: "How ContractSpec pricing works now and next"
4125
3218
  }, undefined, false, undefined, this),
4126
3219
  /* @__PURE__ */ jsxDEV20("p", {
4127
3220
  className: "text-muted-foreground mx-auto max-w-2xl text-lg",
@@ -4226,7 +3319,7 @@ function PricingClient() {
4226
3319
  className: "text-muted-foreground mb-2 text-sm",
4227
3320
  children: "Still unsure?"
4228
3321
  }, undefined, false, undefined, this),
4229
- /* @__PURE__ */ jsxDEV20(Link2, {
3322
+ /* @__PURE__ */ jsxDEV20(Link3, {
4230
3323
  href: "/contact",
4231
3324
  className: "text-sm font-medium text-violet-400 hover:text-violet-300",
4232
3325
  children: "Contact us →"
@@ -4240,26 +3333,26 @@ function PricingClient() {
4240
3333
  className: "section-padding hero-gradient",
4241
3334
  children: /* @__PURE__ */ jsxDEV20("div", {
4242
3335
  className: "mx-auto max-w-4xl",
4243
- children: /* @__PURE__ */ jsxDEV20(WaitlistSection, {}, undefined, false, undefined, this)
3336
+ children: /* @__PURE__ */ jsxDEV20(StudioSignupSection, {}, undefined, false, undefined, this)
4244
3337
  }, undefined, false, undefined, this)
4245
3338
  }, undefined, false, undefined, this),
4246
3339
  /* @__PURE__ */ jsxDEV20(PricingThinkingModal, {
4247
3340
  open: pricingModalOpen,
4248
3341
  onOpenChange: setPricingModalOpen,
4249
- onApplyClick: scrollToWaitlist
3342
+ onApplyClick: openStudio
4250
3343
  }, undefined, false, undefined, this)
4251
3344
  ]
4252
3345
  }, undefined, true, undefined, this);
4253
3346
  }
4254
3347
 
4255
3348
  // src/components/marketing/ProductClientPage.tsx
4256
- import Link3 from "@contractspec/lib.ui-link";
3349
+ import Link4 from "@contractspec/lib.ui-link";
4257
3350
  import {
4258
3351
  analyticsEventNames as analyticsEventNames3,
4259
3352
  captureAnalyticsEvent as captureAnalyticsEvent3
4260
3353
  } from "@contractspec/bundle.library/libs/posthog/client";
4261
3354
  import {
4262
- CheckCircle as CheckCircle6,
3355
+ CheckCircle as CheckCircle5,
4263
3356
  ChevronRight as ChevronRight4,
4264
3357
  Database,
4265
3358
  FileCode as FileCode2,
@@ -4291,7 +3384,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4291
3384
  /* @__PURE__ */ jsxDEV21("div", {
4292
3385
  className: "flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row",
4293
3386
  children: [
4294
- /* @__PURE__ */ jsxDEV21(Link3, {
3387
+ /* @__PURE__ */ jsxDEV21(Link4, {
4295
3388
  href: "/install",
4296
3389
  onClick: () => captureAnalyticsEvent3(analyticsEventNames3.CTA_INSTALL_CLICK, {
4297
3390
  surface: "product-hero"
@@ -4304,7 +3397,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4304
3397
  }, undefined, false, undefined, this)
4305
3398
  ]
4306
3399
  }, undefined, true, undefined, this),
4307
- /* @__PURE__ */ jsxDEV21(Link3, {
3400
+ /* @__PURE__ */ jsxDEV21(Link4, {
4308
3401
  href: "/pricing",
4309
3402
  className: "btn-ghost",
4310
3403
  children: "View pricing"
@@ -4440,7 +3533,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4440
3533
  /* @__PURE__ */ jsxDEV21("li", {
4441
3534
  className: "flex gap-3",
4442
3535
  children: [
4443
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3536
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4444
3537
  size: 16,
4445
3538
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4446
3539
  }, undefined, false, undefined, this),
@@ -4450,7 +3543,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4450
3543
  /* @__PURE__ */ jsxDEV21("li", {
4451
3544
  className: "flex gap-3",
4452
3545
  children: [
4453
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3546
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4454
3547
  size: 16,
4455
3548
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4456
3549
  }, undefined, false, undefined, this),
@@ -4460,7 +3553,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4460
3553
  /* @__PURE__ */ jsxDEV21("li", {
4461
3554
  className: "flex gap-3",
4462
3555
  children: [
4463
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3556
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4464
3557
  size: 16,
4465
3558
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4466
3559
  }, undefined, false, undefined, this),
@@ -4488,7 +3581,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4488
3581
  /* @__PURE__ */ jsxDEV21("li", {
4489
3582
  className: "flex gap-3",
4490
3583
  children: [
4491
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3584
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4492
3585
  size: 16,
4493
3586
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4494
3587
  }, undefined, false, undefined, this),
@@ -4498,7 +3591,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4498
3591
  /* @__PURE__ */ jsxDEV21("li", {
4499
3592
  className: "flex gap-3",
4500
3593
  children: [
4501
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3594
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4502
3595
  size: 16,
4503
3596
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4504
3597
  }, undefined, false, undefined, this),
@@ -4508,7 +3601,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4508
3601
  /* @__PURE__ */ jsxDEV21("li", {
4509
3602
  className: "flex gap-3",
4510
3603
  children: [
4511
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3604
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4512
3605
  size: 16,
4513
3606
  className: "mt-0.5 flex-shrink-0 text-emerald-400"
4514
3607
  }, undefined, false, undefined, this),
@@ -4664,7 +3757,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4664
3757
  ].map((item, i) => /* @__PURE__ */ jsxDEV21("li", {
4665
3758
  className: "flex gap-3",
4666
3759
  children: [
4667
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3760
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4668
3761
  size: 16,
4669
3762
  className: "mt-0.5 flex-shrink-0 text-pink-400"
4670
3763
  }, undefined, false, undefined, this),
@@ -4692,7 +3785,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4692
3785
  ].map((item, i) => /* @__PURE__ */ jsxDEV21("li", {
4693
3786
  className: "flex gap-3",
4694
3787
  children: [
4695
- /* @__PURE__ */ jsxDEV21(CheckCircle6, {
3788
+ /* @__PURE__ */ jsxDEV21(CheckCircle5, {
4696
3789
  size: 16,
4697
3790
  className: "mt-0.5 flex-shrink-0 text-pink-400"
4698
3791
  }, undefined, false, undefined, this),
@@ -4782,7 +3875,7 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4782
3875
  /* @__PURE__ */ jsxDEV21("div", {
4783
3876
  className: "flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row",
4784
3877
  children: [
4785
- /* @__PURE__ */ jsxDEV21(Link3, {
3878
+ /* @__PURE__ */ jsxDEV21(Link4, {
4786
3879
  href: "/install",
4787
3880
  className: "btn-primary inline-flex items-center gap-2",
4788
3881
  children: [
@@ -4792,10 +3885,10 @@ var ProductClientPage = () => /* @__PURE__ */ jsxDEV21("main", {
4792
3885
  }, undefined, false, undefined, this)
4793
3886
  ]
4794
3887
  }, undefined, true, undefined, this),
4795
- /* @__PURE__ */ jsxDEV21(Link3, {
4796
- href: "/contact#waitlist",
3888
+ /* @__PURE__ */ jsxDEV21(Link4, {
3889
+ href: "https://app.contractspec.studio",
4797
3890
  className: "btn-ghost",
4798
- children: "Join Studio Waitlist"
3891
+ children: "Try Studio"
4799
3892
  }, undefined, false, undefined, this)
4800
3893
  ]
4801
3894
  }, undefined, true, undefined, this)