forgecad 0.10.2 → 0.10.4

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 (132) hide show
  1. package/README.md +7 -6
  2. package/dist/assets/{AdminPage-CHY6ZN-p.js → AdminPage-B3L3W1Uo.js} +1 -1
  3. package/dist/assets/{BenchmarkPage-BcRT5iGN.js → BenchmarkPage-DXKVXMrJ.js} +2 -2
  4. package/dist/assets/{BlogPage-BssBbnb-.js → BlogPage-B7BWxOCg.js} +1 -1
  5. package/dist/assets/{DocsPage-DsvdiRNK.js → DocsPage-BPGGwht1.js} +28 -48
  6. package/dist/assets/{EditorApp-Bfd3jbtC.js → EditorApp-BWUGCdD5.js} +183 -21
  7. package/dist/assets/{EditorApp-BpjZgzk0.css → EditorApp-C5f24ZN9.css} +8 -0
  8. package/dist/assets/{EmbedViewer-D5t8WamV.js → EmbedViewer-DygByZS2.js} +2 -2
  9. package/dist/assets/{LandingPageProofDriven-DbN7o-Be.js → LandingPageProofDriven-BoVE7JGY.js} +54 -36
  10. package/dist/assets/{LegalPage-DNGrrY0p.js → LegalPage-Din8wv8d.js} +2 -2
  11. package/dist/assets/{PricingPage-Nczr3pRz.js → PricingPage-C2PMzmDc.js} +2 -2
  12. package/dist/assets/{SettingsPage-DZlyu4d4.js → SettingsPage-BlJDCRe8.js} +1 -1
  13. package/dist/assets/{app-C9ct2hRD.js → app-BsRYSfxY.js} +2264 -6259
  14. package/dist/assets/{backendInit-ymjonyQp.js → backendInit-6C0DLgH0.js} +8290 -2136
  15. package/dist/assets/cli/{render-B_0lQwKU.js → render-XXol_ET7.js} +822 -105
  16. package/dist/assets/{constructionHistoryWorker-CZ42Dksy.js → constructionHistoryWorker-cTHWRJEi.js} +699 -284
  17. package/dist/assets/{evalWorker-C2pm8LHP.js → evalWorker-BssDYW9u.js} +2559 -1330
  18. package/dist/assets/{forgecad_geometry-BlMtqluF.js → forgecad_geometry-CZ_IfuvA.js} +1 -9
  19. package/dist/assets/{forgecad_geometry_bg-BllP_WiL.wasm → forgecad_geometry_bg-C3rQHfwg.wasm} +0 -0
  20. package/dist/assets/{inspectWorker-D5T5VbfK.js → inspectWorker-ymhBV4Ll.js} +6254 -671
  21. package/dist/assets/{jointPose-4r8ed8_5.js → jointPose-B0blBj9A.js} +1 -1
  22. package/dist/assets/{landing-proof-driven-ORyigZ6p.css → landing-proof-driven-Cpf-MIbI.css} +73 -13
  23. package/dist/assets/{manifold-5PP1eGLN.js → manifold-B_7QXpGB.js} +1 -1
  24. package/dist/assets/{manifold-DjBkyIc8.js → manifold-CNShmpEJ.js} +1 -1
  25. package/dist/assets/{manifold-C4r6B-XY.js → manifold-CYlIm-M6.js} +2 -2
  26. package/dist/assets/{reportWorker-CwenM7wB.js → reportWorker-Cb5eyM7D.js} +2485 -1275
  27. package/dist/cli/render.html +1 -1
  28. package/dist/docs/index.html +2 -2
  29. package/dist/docs-raw/AI/usage.md +17 -17
  30. package/dist/docs-raw/CLI.md +9 -7
  31. package/dist/docs-raw/README.md +1 -1
  32. package/dist/docs-raw/component-model.md +2 -2
  33. package/dist/docs-raw/generated/assembly.md +1 -1
  34. package/dist/docs-raw/generated/concepts.md +10 -4
  35. package/dist/docs-raw/generated/core.md +96 -1
  36. package/dist/docs-raw/generated/curves.md +8 -1
  37. package/dist/docs-raw/generated/output.md +0 -64
  38. package/dist/docs-raw/generated/runtime-names.md +6 -6
  39. package/dist/docs-raw/generated/viewport.md +3 -12
  40. package/dist/docs-raw/guides/inspection-bundles.md +1 -1
  41. package/dist/docs-raw/simulation-workflow.md +58 -0
  42. package/{dist-skill/website/skills/forgecad-make-a-model.md → dist/docs-raw/skills/forgecad-build-model.md} +18 -8
  43. package/dist/docs-raw/skills/forgecad-design-spec.md +145 -0
  44. package/dist/docs-raw/skills/{forgecad-model-grader.md → forgecad-grade-model.md} +8 -6
  45. package/{dist-skill/website/skills/forgecad-visual-spec.md → dist/docs-raw/skills/forgecad-image-prompt.md} +7 -7
  46. package/dist/docs-raw/skills/{forgecad-render-inspect.md → forgecad-inspect-model.md} +6 -6
  47. package/{dist-skill/website/skills/forgecad-project.md → dist/docs-raw/skills/forgecad-project-sync.md} +5 -5
  48. package/{dist-skill/website/skills/forgecad-3d-reconstruction.md → dist/docs-raw/skills/forgecad-reconstruct-cad-file.md} +7 -7
  49. package/dist/docs-raw/skills/{forgecad-image-replicator.md → forgecad-reconstruct-from-images.md} +12 -12
  50. package/dist/docs-raw/skills/forgecad-verify-mujoco.md +78 -0
  51. package/dist/docs-raw/skills/forgecad.md +24 -24
  52. package/dist/docs-raw/skills/index.md +9 -13
  53. package/dist/index.html +9 -9
  54. package/dist/llms.txt +7 -7
  55. package/dist/sitemap.xml +16 -16
  56. package/dist-cli/{check-compiler-SP7FAL7R.js → check-compiler-4RPB6SB5.js} +1 -1
  57. package/dist-cli/{check-query-propagation-BRLSHP22.js → check-query-propagation-KN3DFQTX.js} +1 -1
  58. package/dist-cli/{chunk-RQQ42YCP.js → chunk-UHBRMYA6.js} +30770 -29253
  59. package/dist-cli/forgecad.js +3277 -237
  60. package/dist-cli/{forgecad_geometry-7TVSNVUB.js → forgecad_geometry-2IMYCUWW.js} +0 -8
  61. package/dist-cli/forgecad_geometry_bg.wasm +0 -0
  62. package/dist-skill/CONTEXT.md +111 -73
  63. package/dist-skill/SKILL.md +1 -1
  64. package/dist-skill/docs/CLI.md +9 -7
  65. package/dist-skill/docs/generated/assembly.md +1 -1
  66. package/dist-skill/docs/generated/core.md +96 -1
  67. package/dist-skill/docs/generated/curves.md +8 -1
  68. package/dist-skill/docs/generated/output.md +0 -64
  69. package/dist-skill/docs/generated/runtime-names.md +6 -6
  70. package/dist-skill/docs/generated/viewport.md +3 -12
  71. package/dist-skill/docs/guides/inspection-bundles.md +1 -1
  72. package/dist-skill/library/README.md +9 -13
  73. package/dist-skill/library/{forgecad-make-a-model → forgecad-build-model}/SKILL.md +16 -6
  74. package/dist-skill/library/forgecad-design-spec/SKILL.md +132 -0
  75. package/dist-skill/library/{forgecad-prepare-prompt → forgecad-design-spec}/references/master-prompt.md +1 -1
  76. package/dist-skill/library/{forgecad-model-grader → forgecad-grade-model}/SKILL.md +6 -4
  77. package/dist-skill/library/forgecad-grade-model/agents/openai.yaml +4 -0
  78. package/dist-skill/library/{forgecad-visual-spec → forgecad-image-prompt}/SKILL.md +5 -5
  79. package/dist-skill/library/forgecad-image-prompt/agents/openai.yaml +4 -0
  80. package/dist-skill/library/{forgecad-render-inspect → forgecad-inspect-model}/SKILL.md +4 -4
  81. package/dist-skill/library/{forgecad-project → forgecad-project-sync}/SKILL.md +3 -3
  82. package/dist-skill/library/{forgecad-3d-reconstruction → forgecad-reconstruct-cad-file}/SKILL.md +5 -5
  83. package/dist-skill/library/forgecad-reconstruct-cad-file/agents/openai.yaml +4 -0
  84. package/dist-skill/library/{forgecad-image-replicator → forgecad-reconstruct-from-images}/SKILL.md +10 -10
  85. package/dist-skill/library/forgecad-reconstruct-from-images/agents/openai.yaml +4 -0
  86. package/dist-skill/library/forgecad-verify-mujoco/SKILL.md +66 -0
  87. package/dist-skill/library/forgecad-verify-mujoco/scripts/mujoco_verify.py +385 -0
  88. package/{dist/docs-raw/skills/forgecad-make-a-model.md → dist-skill/website/skills/forgecad-build-model.md} +18 -8
  89. package/dist-skill/website/skills/forgecad-design-spec.md +145 -0
  90. package/dist-skill/website/skills/{forgecad-model-grader.md → forgecad-grade-model.md} +8 -6
  91. package/{dist/docs-raw/skills/forgecad-visual-spec.md → dist-skill/website/skills/forgecad-image-prompt.md} +7 -7
  92. package/dist-skill/website/skills/{forgecad-render-inspect.md → forgecad-inspect-model.md} +6 -6
  93. package/{dist/docs-raw/skills/forgecad-project.md → dist-skill/website/skills/forgecad-project-sync.md} +5 -5
  94. package/{dist/docs-raw/skills/forgecad-3d-reconstruction.md → dist-skill/website/skills/forgecad-reconstruct-cad-file.md} +7 -7
  95. package/dist-skill/website/skills/{forgecad-image-replicator.md → forgecad-reconstruct-from-images.md} +12 -12
  96. package/dist-skill/website/skills/forgecad-verify-mujoco.md +78 -0
  97. package/dist-skill/website/skills/forgecad.md +24 -24
  98. package/dist-skill/website/skills/index.md +9 -13
  99. package/examples/analysis/clearance-fit.forge.js +31 -0
  100. package/examples/analysis/lever-arm-actuator.forge.js +43 -0
  101. package/examples/analysis/tipping-tripod.forge.js +35 -0
  102. package/examples/api/texture-projection.forge.js +75 -0
  103. package/examples/assets/uv-grid.png +0 -0
  104. package/examples/products/sportscar.forge.js +77 -0
  105. package/package.json +1 -3
  106. package/dist/docs-raw/skills/forgecad-blockout-model.md +0 -49
  107. package/dist/docs-raw/skills/forgecad-component-model.md +0 -53
  108. package/dist/docs-raw/skills/forgecad-high-level-spec.md +0 -101
  109. package/dist/docs-raw/skills/forgecad-lld.md +0 -41
  110. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +0 -63
  111. package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +0 -60
  112. package/dist-skill/library/forgecad-3d-reconstruction/agents/openai.yaml +0 -4
  113. package/dist-skill/library/forgecad-blockout-model/SKILL.md +0 -42
  114. package/dist-skill/library/forgecad-component-model/SKILL.md +0 -46
  115. package/dist-skill/library/forgecad-high-level-spec/SKILL.md +0 -94
  116. package/dist-skill/library/forgecad-image-replicator/agents/openai.yaml +0 -4
  117. package/dist-skill/library/forgecad-lld/SKILL.md +0 -34
  118. package/dist-skill/library/forgecad-model-grader/agents/openai.yaml +0 -4
  119. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +0 -50
  120. package/dist-skill/library/forgecad-reconstruction-benchmark/SKILL.md +0 -48
  121. package/dist-skill/library/forgecad-reconstruction-benchmark/agents/openai.yaml +0 -4
  122. package/dist-skill/library/forgecad-visual-spec/agents/openai.yaml +0 -4
  123. package/dist-skill/website/skills/forgecad-blockout-model.md +0 -49
  124. package/dist-skill/website/skills/forgecad-component-model.md +0 -53
  125. package/dist-skill/website/skills/forgecad-high-level-spec.md +0 -101
  126. package/dist-skill/website/skills/forgecad-lld.md +0 -41
  127. package/dist-skill/website/skills/forgecad-prepare-prompt.md +0 -63
  128. package/dist-skill/website/skills/forgecad-reconstruction-benchmark.md +0 -60
  129. /package/dist/assets/{landing-proof-driven-DiGqdtWa.js → landing-proof-driven-BxZZh5r5.js} +0 -0
  130. /package/dist-skill/library/{forgecad-prepare-prompt → forgecad-design-spec}/references/default-profiles.md +0 -0
  131. /package/dist-skill/library/{forgecad-render-inspect → forgecad-inspect-model}/summarize_manifest.py +0 -0
  132. /package/dist-skill/library/{forgecad-image-replicator → forgecad-reconstruct-from-images}/scripts/compare_images.py +0 -0
@@ -227,6 +227,13 @@
227
227
  line-height: 1.3;
228
228
  }
229
229
 
230
+ .fc-view-panel-control-block {
231
+ display: flex;
232
+ flex-direction: column;
233
+ gap: 6px;
234
+ min-width: 0;
235
+ }
236
+
230
237
  .fc-view-panel-floating-tooltip {
231
238
  position: fixed;
232
239
  box-sizing: border-box;
@@ -350,6 +357,7 @@
350
357
  }
351
358
 
352
359
  .fc-view-panel-control-block + .fc-view-panel-control-block,
360
+ .fc-view-panel-control-block + .fc-view-panel-button-grid,
353
361
  .fc-view-panel-button-grid + .fc-view-panel-button-grid,
354
362
  .fc-view-panel-button-grid + .fc-view-panel-control-block,
355
363
  .fc-view-panel-row + .fc-view-panel-row,
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-6j1Kke-Y.js";
2
- import { cI as initBackendForEvaluation } from "./backendInit-ymjonyQp.js";
3
- import { g as useForgeStore, av as getExternalUrl, aw as getGistId, n as fetchUrlModel, l as fetchGistModel, aB as buildShareUrl, B as BrandMark, ax as Viewport } from "./app-C9ct2hRD.js";
2
+ import { c_ as initBackendForEvaluation } from "./backendInit-6C0DLgH0.js";
3
+ import { g as useForgeStore, au as getExternalUrl, av as getGistId, n as fetchUrlModel, l as fetchGistModel, aA as buildShareUrl, B as BrandMark, aw as Viewport } from "./app-BsRYSfxY.js";
4
4
  function EmbedViewer() {
5
5
  const kernelReady = useForgeStore((s) => s.kernelReady);
6
6
  const setKernelReady = useForgeStore((s) => s.setKernelReady);
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
2
- import { B as BrandMark } from "./app-C9ct2hRD.js";
2
+ import { B as BrandMark } from "./app-BsRYSfxY.js";
3
3
  import { L as LEGAL_COPYRIGHT_NOTICE, a as LEGAL_LINKS } from "./legalContent-ZfFGMmi4.js";
4
- import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
4
+ import { u as usePageBackground } from "./landing-proof-driven-BxZZh5r5.js";
5
5
  const LINKS = {
6
6
  glasses: {
7
7
  share: "https://forgecad.io/m/etXaJYSZF4",
@@ -24,6 +24,24 @@ const LINKS = {
24
24
  embed: "https://forgecad.io/m/E5gK32twac?embed=1"
25
25
  }
26
26
  };
27
+ const WORKFLOW_LANES = [
28
+ {
29
+ title: "Real products",
30
+ detail: "Adapters, enclosures, fixtures, jigs, mechanisms, and custom product components."
31
+ },
32
+ {
33
+ title: "Manufacturing components",
34
+ detail: "Parametric parts with checks, reports, and STEP, STL, and 3MF export paths."
35
+ },
36
+ {
37
+ title: "Robotics and simulation",
38
+ detail: "Assemblies, joints, colliders, variants, and source-authored simulation metadata."
39
+ },
40
+ {
41
+ title: "AI training assets",
42
+ detail: "Generate controlled physical model variants for spatial reasoning and robot workflows."
43
+ }
44
+ ];
27
45
  const CODE_AMS = `// AMS Lite Spool Adapter (74.5mm to 55mm)
28
46
  // Features compressible arms and snap-fit teeth
29
47
 
@@ -202,17 +220,12 @@ function LandingPageProofDriven() {
202
220
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-grid", children: [
203
221
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-copy", children: [
204
222
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
205
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "AI-Native CAD Workflow" }),
223
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "AI-Native Physical Design" }),
206
224
  /* @__PURE__ */ jsxRuntimeExports.jsxs("h1", { children: [
207
- "AI-driven CAD ",
208
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "in JavaScript." })
209
- ] }),
210
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "lpd-hero-lead", children: [
211
- "Turn prompts, product ideas, and feedback into editable parametric CAD. Every model on this page is a real",
212
- " ",
213
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: ".forge.js" }),
214
- " file an agent can revise, validate, inspect, and export for manufacturing."
225
+ "AI-native CAD ",
226
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "for real products and robotics." })
215
227
  ] }),
228
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "lpd-hero-lead", children: "ForgeCAD helps you and AI agents create editable parametric models for products, manufacturing components, robotics simulation, and AI training data, with validation checks and STEP/STL/3MF exports built in." }),
216
229
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-actions", children: [
217
230
  /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/app", className: "lpd-button lpd-button-primary", children: "Open ForgeCAD" }),
218
231
  /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/docs/welcome", className: "lpd-button lpd-button-secondary", children: "Start Here" })
@@ -220,16 +233,16 @@ function LandingPageProofDriven() {
220
233
  ] }),
221
234
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-facts", children: [
222
235
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
223
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "JavaScript" }),
224
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Full language, not a DSL. Agents can read and repair it." })
236
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Real products" }),
237
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Adapters, enclosures, fixtures, mechanisms, and standard components." })
225
238
  ] }),
226
239
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
227
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Feedback Loop" }),
228
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Run, render, inspect, change params, and try the next idea." })
240
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Simulation assets" }),
241
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Assemblies, joints, colliders, robot packages, and controlled variants." })
229
242
  ] }),
230
243
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-fact", children: [
231
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Manufacturing" }),
232
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "STL, 3MF, STEP, reports, and print checks." })
244
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Validated export" }),
245
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Inspection evidence plus STEP, STL, 3MF, reports, and print checks." })
233
246
  ] })
234
247
  ] })
235
248
  ] }),
@@ -256,13 +269,17 @@ function LandingPageProofDriven() {
256
269
  ] })
257
270
  ] })
258
271
  ] }),
272
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-workflow-lanes", "aria-label": "ForgeCAD workflow lanes", children: WORKFLOW_LANES.map((lane) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-workflow-lane", children: [
273
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: lane.title }),
274
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: lane.detail })
275
+ ] }, lane.title)) }),
259
276
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-artifact-strip", children: [
260
277
  /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { className: "lpd-artifact-card", href: LINKS.ams.share, target: "_blank", rel: "noopener noreferrer", children: [
261
278
  /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/landing/proof-ams-adapter.png", alt: "Rendered AMS Lite spool adapter" }),
262
279
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-artifact-copy", children: [
263
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "Printed Part" }),
280
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "Printed Product" }),
264
281
  /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "AMS Lite adapter" }),
265
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "109 lines of code. Printed and in daily use." }),
282
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Parametric spool adapter with flexible arms and snap-fit teeth. Printed and in daily use." }),
266
283
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "ams_lite_adapter.forge.js" })
267
284
  ] })
268
285
  ] }),
@@ -271,7 +288,7 @@ function LandingPageProofDriven() {
271
288
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-artifact-copy", children: [
272
289
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "Everyday Mechanical" }),
273
290
  /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Filleted enclosure" }),
274
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Shell, cavity subtraction, screw bosses, edge fillets. A normal engineering part, not demo theater." }),
291
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Shell, cavity subtraction, screw bosses, and edge fillets for a normal product component." }),
275
292
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "fillet-enclosure.forge.js" })
276
293
  ] })
277
294
  ] }),
@@ -280,25 +297,26 @@ function LandingPageProofDriven() {
280
297
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-artifact-copy", children: [
281
298
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "Standard Parts" }),
282
299
  /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Bolt and nut" }),
283
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Helical threads from the part library. No hand-modeled mesh, no fake hardware glamour shot." }),
300
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Helical threads from the part library for reusable mechanical assemblies." }),
284
301
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "bolt-and-nut.forge.js" })
285
302
  ] })
286
303
  ] }),
287
304
  /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { className: "lpd-artifact-card", href: LINKS.gyroid.share, target: "_blank", rel: "noopener noreferrer", children: [
288
305
  /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/landing/proof-gyroid.png", alt: "Rendered gyroid sphere" }),
289
306
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-artifact-copy", children: [
290
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "SDF Composition" }),
307
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "Training Assets" }),
291
308
  /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Gyroid sphere" }),
292
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Seven lines of SDF. One solid mesh. Still the same file format, still the same toolchain." }),
309
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Controlled SDF geometry for printable lattices, simulation scenes, and generated model variants." }),
293
310
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "lpd-source-tag", children: "gyroid.forge.js" })
294
311
  ] })
295
312
  ] })
296
313
  ] }),
297
314
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-capability-band", children: [
298
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "AI CAD agent skills" }),
299
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Parallel product idea iterations" }),
315
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "AI-authored product models" }),
316
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Manufacturing components" }),
317
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Robotics and simulation assets" }),
318
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Spatial reasoning training data" }),
300
319
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Manufacturing feedback and inspection" }),
301
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Live parameter sliders" }),
302
320
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Assemblies and connectors" }),
303
321
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "STEP, STL, 3MF, reports" })
304
322
  ] })
@@ -369,17 +387,17 @@ function LandingPageProofDriven() {
369
387
  {
370
388
  number: "04",
371
389
  title: "SDF and solid modeling in one language.",
372
- description: "Signed distance fields let you create organic forms that are impossible with traditional B-rep. ForgeCAD meshes them into printable solids.",
390
+ description: "Signed distance fields let you generate organic forms, controlled lattice variants, and printable solids from the same physical-design workflow.",
373
391
  codeFile: "gyroid.forge.js",
374
392
  codeLabel: "SDF + solid output",
375
393
  code: CODE_GYROID,
376
394
  imageSrc: "/landing/proof-gyroid.png",
377
395
  imageAlt: "Rendered gyroid sphere",
378
- visualDescription: "Seven lines of code produce a gyroid lattice intersected with a sphere ready to export and print.",
396
+ visualDescription: "Seven lines of source produce a gyroid lattice intersected with a sphere, useful as a printable part or a generated simulation asset.",
379
397
  facts: [
380
398
  { title: "7 lines of model code", detail: "Enough to explain the result." },
381
399
  { title: "44 x 44 x 44 mm", detail: "Measured render bounds." },
382
- { title: "One language", detail: "SDF and parametric solids still live together." }
400
+ { title: "One workflow", detail: "SDF, solids, validation, and export together." }
383
401
  ],
384
402
  linkKey: "gyroid"
385
403
  }
@@ -387,9 +405,9 @@ function LandingPageProofDriven() {
387
405
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-section-break" }),
388
406
  /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "lpd-cli", children: [
389
407
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-header", children: [
390
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Agent Feedback Loop" }),
391
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "Generate. Validate. Inspect. Export." }),
392
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "ForgeCAD runs anywhere Node does. Install the CLI, let an AI coding agent edit the model, then use deterministic commands to gather evidence before you manufacture, publish, or fork the next product iteration." })
408
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Validation Loop" }),
409
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "Generate. Validate. Export physical models." }),
410
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "ForgeCAD runs anywhere Node does. Let an AI coding agent edit the model, then use deterministic commands to gather evidence before you manufacture a part, publish a product component, or export assets for robotics and simulation workflows." })
393
411
  ] }),
394
412
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-steps", children: [
395
413
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-step", children: [
@@ -457,7 +475,7 @@ function LandingPageProofDriven() {
457
475
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
458
476
  "Install the ForgeCAD skill library (",
459
477
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "forgecad skill install" }),
460
- ") and your AI coding agent gets full API knowledge and workflow prompts. It writes the model, the CLI validates and exports it."
478
+ ") and your AI coding agent gets the product, manufacturing, and simulation vocabulary it needs. It writes the source model; the CLI validates and exports it."
461
479
  ] })
462
480
  ] }) }),
463
481
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-cli-actions", children: [
@@ -467,11 +485,11 @@ function LandingPageProofDriven() {
467
485
  ] }),
468
486
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-footer-cta", children: [
469
487
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lpd-eyebrow", children: "Start Iterating" }),
470
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "From product idea to manufacturable CAD loop." }),
488
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: "From idea to validated physical model." }),
471
489
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
472
490
  "Open the editor, write or generate a ",
473
491
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: ".forge.js" }),
474
- " file, and take your model from AI-authored code to validation evidence and manufacturing-ready exports."
492
+ " file, and take a real product, manufacturing component, or robotics asset from AI-authored source to validation evidence and export-ready geometry."
475
493
  ] }),
476
494
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lpd-hero-actions", children: [
477
495
  /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/app", className: "lpd-button lpd-button-primary", children: "Open ForgeCAD" }),
@@ -484,7 +502,7 @@ function LandingPageProofDriven() {
484
502
  /* @__PURE__ */ jsxRuntimeExports.jsx(BrandMark, { size: 24, decorative: true }),
485
503
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "ForgeCAD" })
486
504
  ] }),
487
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Code-first parametric CAD for real models." }),
505
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "AI-native CAD for real products, manufacturing components, and robotics assets." }),
488
506
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "lpd-footer-copy", children: [
489
507
  "© ",
490
508
  LEGAL_COPYRIGHT_NOTICE
@@ -1,7 +1,7 @@
1
1
  import { j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
2
- import { B as BrandMark } from "./app-C9ct2hRD.js";
2
+ import { B as BrandMark } from "./app-BsRYSfxY.js";
3
3
  import { a as LEGAL_LINKS, b as LEGAL_DOCUMENTS } from "./legalContent-ZfFGMmi4.js";
4
- import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
4
+ import { u as usePageBackground } from "./landing-proof-driven-BxZZh5r5.js";
5
5
  function LegalPage({ documentId }) {
6
6
  const document = LEGAL_DOCUMENTS[documentId];
7
7
  usePageBackground("#f3ede4");
@@ -1,8 +1,8 @@
1
1
  import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
2
- import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-C9ct2hRD.js";
2
+ import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-BsRYSfxY.js";
3
3
  import { L as LEGAL_COPYRIGHT_NOTICE, a as LEGAL_LINKS } from "./legalContent-ZfFGMmi4.js";
4
4
  import { C as COMMERCIAL_USE_CASES } from "./copy-DQcpKfiX.js";
5
- import { u as usePageBackground } from "./landing-proof-driven-DiGqdtWa.js";
5
+ import { u as usePageBackground } from "./landing-proof-driven-BxZZh5r5.js";
6
6
  function checkoutIntentPath(interval) {
7
7
  return `/app?checkout=${interval}`;
8
8
  }
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-6j1Kke-Y.js";
2
- import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-C9ct2hRD.js";
2
+ import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-BsRYSfxY.js";
3
3
  import { C as COMMERCIAL_USE_CASES, P as PRO_STORAGE_UPGRADE_COPY } from "./copy-DQcpKfiX.js";
4
4
  function timeAgo(dateStr) {
5
5
  const ms = Date.now() - new Date(dateStr).getTime();