@omniharmonic/openspace-cli 0.1.4 → 0.1.6

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 (220) hide show
  1. package/README.md +14 -9
  2. package/dist/{agents-md-3W4PIY4N.js → agents-md-Q2TI3NHB.js} +3 -2
  3. package/dist/bin.js +4 -2
  4. package/dist/bin.js.map +1 -1
  5. package/dist/chunk-26AZCID5.js +44 -0
  6. package/dist/chunk-26AZCID5.js.map +1 -0
  7. package/dist/{chunk-6NIIOHOX.js → chunk-7SWL46LQ.js} +9653 -18568
  8. package/dist/chunk-7SWL46LQ.js.map +1 -0
  9. package/dist/{chunk-7I6IJI6Z.js → chunk-BW42R6WD.js} +502 -96
  10. package/dist/chunk-BW42R6WD.js.map +1 -0
  11. package/dist/chunk-WE4QCL3R.js +12836 -0
  12. package/dist/chunk-WE4QCL3R.js.map +1 -0
  13. package/dist/crawl-5ZZ5W7B6.js +9 -0
  14. package/dist/crawl-5ZZ5W7B6.js.map +1 -0
  15. package/dist/index.js +4 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/starter/site/AGENTS.md +2 -2
  18. package/dist/templates/atelier/content/pages/about.json +1 -1
  19. package/dist/templates/atelier/content/pages/commissions.json +1 -1
  20. package/dist/templates/atelier/content/pages/contact.json +1 -1
  21. package/dist/templates/atelier/content/pages/home.json +12 -12
  22. package/dist/templates/atelier/content/pages/work.json +1 -1
  23. package/dist/templates/atelier/content/site.json +1 -1
  24. package/dist/templates/atelier/content/styles.json +1 -1
  25. package/dist/templates/atelier/openspace.json +2 -2
  26. package/dist/templates/atelier/template.json +1 -1
  27. package/dist/templates/beacon/content/collections/news/2026-09-12-heat-map-2026.mdoc +2 -2
  28. package/dist/templates/beacon/content/collections/news/2026-09-30-school-gardens-harvest.mdoc +2 -2
  29. package/dist/templates/beacon/content/collections/news/2026-10-14-planting-season-begins.mdoc +2 -2
  30. package/dist/templates/beacon/content/pages/about.json +1 -1
  31. package/dist/templates/beacon/content/pages/contact.json +1 -1
  32. package/dist/templates/beacon/content/pages/donate.json +1 -1
  33. package/dist/templates/beacon/content/pages/get-involved.json +1 -1
  34. package/dist/templates/beacon/content/pages/home.json +2 -2
  35. package/dist/templates/beacon/content/pages/our-work.json +1 -1
  36. package/dist/templates/beacon/content/site.json +1 -1
  37. package/dist/templates/beacon/content/styles.json +1 -1
  38. package/dist/templates/beacon/media/LICENSES.json +33 -0
  39. package/dist/templates/beacon/openspace.json +2 -2
  40. package/dist/templates/beacon/template.json +1 -1
  41. package/dist/templates/commons/content/pages/about.json +1 -1
  42. package/dist/templates/commons/content/pages/directory.json +1 -1
  43. package/dist/templates/commons/content/pages/home.json +5 -5
  44. package/dist/templates/commons/content/pages/join.json +1 -1
  45. package/dist/templates/commons/content/site.json +2 -2
  46. package/dist/templates/commons/content/styles.json +1 -1
  47. package/dist/templates/commons/media/LICENSES.json +11 -11
  48. package/dist/templates/commons/openspace.json +2 -2
  49. package/dist/templates/commons/template.json +1 -1
  50. package/dist/templates/darkroom/content/collections/work/after-hours.mdoc +7 -4
  51. package/dist/templates/darkroom/content/collections/work/faces-of-the-guild.mdoc +10 -7
  52. package/dist/templates/darkroom/content/collections/work/first-light.mdoc +34 -0
  53. package/dist/templates/darkroom/content/pages/about.json +1 -1
  54. package/dist/templates/darkroom/content/pages/contact.json +1 -1
  55. package/dist/templates/darkroom/content/pages/home.json +28 -16
  56. package/dist/templates/darkroom/content/pages/services.json +1 -1
  57. package/dist/templates/darkroom/content/site.json +1 -1
  58. package/dist/templates/darkroom/content/styles.json +1 -1
  59. package/dist/templates/darkroom/media/LICENSES.json +82 -49
  60. package/dist/templates/darkroom/openspace.json +2 -2
  61. package/dist/templates/darkroom/template.json +1 -1
  62. package/dist/templates/encore/content/pages/about.json +1 -1
  63. package/dist/templates/encore/content/pages/contact.json +1 -1
  64. package/dist/templates/encore/content/pages/home.json +9 -5
  65. package/dist/templates/encore/content/pages/music.json +1 -1
  66. package/dist/templates/encore/content/site.json +1 -1
  67. package/dist/templates/encore/content/styles.json +1 -1
  68. package/dist/templates/encore/media/LICENSES.json +11 -0
  69. package/dist/templates/encore/openspace.json +2 -2
  70. package/dist/templates/encore/template.json +1 -1
  71. package/dist/templates/field-notes/content/collections/essays/a-year-of-apples.mdoc +2 -2
  72. package/dist/templates/field-notes/content/collections/essays/in-praise-of-dirt-roads.mdoc +27 -0
  73. package/dist/templates/field-notes/content/collections/essays/learning-a-field.mdoc +2 -2
  74. package/dist/templates/field-notes/content/collections/essays/the-barn-that-leans.mdoc +29 -0
  75. package/dist/templates/field-notes/content/collections/essays/the-wall-builders.mdoc +2 -2
  76. package/dist/templates/field-notes/content/pages/about.json +1 -1
  77. package/dist/templates/field-notes/content/pages/contact.json +1 -1
  78. package/dist/templates/field-notes/content/pages/home.json +4 -4
  79. package/dist/templates/field-notes/content/pages/subscribe.json +1 -1
  80. package/dist/templates/field-notes/content/site.json +1 -1
  81. package/dist/templates/field-notes/content/styles.json +1 -1
  82. package/dist/templates/field-notes/media/LICENSES.json +55 -33
  83. package/dist/templates/field-notes/openspace.json +2 -2
  84. package/dist/templates/field-notes/template.json +1 -1
  85. package/dist/templates/fixwell/content/pages/about.json +1 -1
  86. package/dist/templates/fixwell/content/pages/contact.json +1 -1
  87. package/dist/templates/fixwell/content/pages/home.json +1 -1
  88. package/dist/templates/fixwell/content/pages/pricing.json +1 -1
  89. package/dist/templates/fixwell/content/pages/services.json +1 -1
  90. package/dist/templates/fixwell/content/site.json +1 -1
  91. package/dist/templates/fixwell/content/styles.json +1 -1
  92. package/dist/templates/fixwell/openspace.json +2 -2
  93. package/dist/templates/fixwell/template.json +1 -1
  94. package/dist/templates/folio/content/pages/about.json +1 -1
  95. package/dist/templates/folio/content/pages/contact.json +1 -1
  96. package/dist/templates/folio/content/pages/experience.json +1 -1
  97. package/dist/templates/folio/content/pages/home.json +1 -1
  98. package/dist/templates/folio/content/site.json +1 -1
  99. package/dist/templates/folio/content/styles.json +1 -1
  100. package/dist/templates/folio/openspace.json +2 -2
  101. package/dist/templates/folio/template.json +1 -1
  102. package/dist/templates/gather/content/pages/about.json +1 -1
  103. package/dist/templates/gather/content/pages/contact.json +1 -1
  104. package/dist/templates/gather/content/pages/home.json +26 -12
  105. package/dist/templates/gather/content/pages/programme.json +1 -1
  106. package/dist/templates/gather/content/pages/speakers.json +1 -1
  107. package/dist/templates/gather/content/pages/tickets.json +1 -1
  108. package/dist/templates/gather/content/pages/venue.json +1 -1
  109. package/dist/templates/gather/content/site.json +1 -1
  110. package/dist/templates/gather/content/styles.json +1 -1
  111. package/dist/templates/gather/openspace.json +2 -2
  112. package/dist/templates/gather/template.json +1 -1
  113. package/dist/templates/harbor/content/collections/news/2026-09-15-meet-the-repair-crew.mdoc +2 -2
  114. package/dist/templates/harbor/content/pages/about.json +1 -1
  115. package/dist/templates/harbor/content/pages/contact.json +1 -1
  116. package/dist/templates/harbor/content/pages/get-involved.json +2 -2
  117. package/dist/templates/harbor/content/pages/home.json +10 -6
  118. package/dist/templates/harbor/content/pages/programs.json +3 -3
  119. package/dist/templates/harbor/content/site.json +1 -1
  120. package/dist/templates/harbor/content/styles.json +1 -1
  121. package/dist/templates/harbor/media/LICENSES.json +22 -0
  122. package/dist/templates/harbor/openspace.json +2 -2
  123. package/dist/templates/harbor/template.json +1 -1
  124. package/dist/templates/hearth/content/pages/about.json +1 -1
  125. package/dist/templates/hearth/content/pages/home.json +18 -23
  126. package/dist/templates/hearth/content/pages/menu.json +1 -1
  127. package/dist/templates/hearth/content/pages/private-dining.json +1 -1
  128. package/dist/templates/hearth/content/pages/visit.json +1 -1
  129. package/dist/templates/hearth/content/site.json +1 -1
  130. package/dist/templates/hearth/content/styles.json +1 -1
  131. package/dist/templates/hearth/media/LICENSES.json +22 -11
  132. package/dist/templates/hearth/openspace.json +2 -2
  133. package/dist/templates/hearth/template.json +1 -1
  134. package/dist/templates/inkwell/content/pages/about.json +1 -1
  135. package/dist/templates/inkwell/content/pages/books.json +1 -1
  136. package/dist/templates/inkwell/content/pages/contact.json +1 -1
  137. package/dist/templates/inkwell/content/pages/home.json +1 -1
  138. package/dist/templates/inkwell/content/pages/speaking.json +1 -1
  139. package/dist/templates/inkwell/content/site.json +1 -1
  140. package/dist/templates/inkwell/content/styles.json +1 -1
  141. package/dist/templates/inkwell/openspace.json +2 -2
  142. package/dist/templates/inkwell/template.json +1 -1
  143. package/dist/templates/keystone/content/pages/about.json +1 -1
  144. package/dist/templates/keystone/content/pages/contact.json +1 -1
  145. package/dist/templates/keystone/content/pages/home.json +1 -1
  146. package/dist/templates/keystone/content/pages/results.json +1 -1
  147. package/dist/templates/keystone/content/pages/work-with-me.json +1 -1
  148. package/dist/templates/keystone/content/site.json +1 -1
  149. package/dist/templates/keystone/content/styles.json +1 -1
  150. package/dist/templates/keystone/openspace.json +2 -2
  151. package/dist/templates/keystone/template.json +1 -1
  152. package/dist/templates/kiln/content/collections/classes/glaze-day-march.mdoc +2 -2
  153. package/dist/templates/kiln/content/collections/classes/hand-building-february.mdoc +2 -2
  154. package/dist/templates/kiln/content/collections/classes/wheel-weekend-january.mdoc +2 -2
  155. package/dist/templates/kiln/content/pages/about.json +1 -1
  156. package/dist/templates/kiln/content/pages/contact.json +1 -1
  157. package/dist/templates/kiln/content/pages/home.json +6 -6
  158. package/dist/templates/kiln/content/pages/workshops.json +1 -1
  159. package/dist/templates/kiln/content/site.json +1 -1
  160. package/dist/templates/kiln/content/styles.json +1 -1
  161. package/dist/templates/kiln/media/LICENSES.json +55 -0
  162. package/dist/templates/kiln/openspace.json +2 -2
  163. package/dist/templates/kiln/template.json +1 -1
  164. package/dist/templates/ledger/content/pages/about.json +1 -1
  165. package/dist/templates/ledger/content/pages/contact.json +1 -1
  166. package/dist/templates/ledger/content/pages/home.json +1 -1
  167. package/dist/templates/ledger/content/pages/services.json +1 -1
  168. package/dist/templates/ledger/content/site.json +1 -1
  169. package/dist/templates/ledger/content/styles.json +1 -1
  170. package/dist/templates/ledger/openspace.json +2 -2
  171. package/dist/templates/ledger/template.json +1 -1
  172. package/dist/templates/link/content/pages/home.json +36 -32
  173. package/dist/templates/link/content/site.json +1 -1
  174. package/dist/templates/link/content/styles.json +1 -1
  175. package/dist/templates/link/media/LICENSES.json +25 -25
  176. package/dist/templates/link/openspace.json +2 -2
  177. package/dist/templates/link/template.json +1 -1
  178. package/dist/templates/meadow/content/collections/workshops/breath-and-rest-workshop.mdoc +2 -2
  179. package/dist/templates/meadow/content/pages/about.json +1 -1
  180. package/dist/templates/meadow/content/pages/bodywork.json +1 -1
  181. package/dist/templates/meadow/content/pages/classes.json +1 -1
  182. package/dist/templates/meadow/content/pages/contact.json +1 -1
  183. package/dist/templates/meadow/content/pages/home.json +1 -1
  184. package/dist/templates/meadow/content/site.json +1 -1
  185. package/dist/templates/meadow/content/styles.json +1 -1
  186. package/dist/templates/meadow/media/LICENSES.json +11 -0
  187. package/dist/templates/meadow/openspace.json +2 -2
  188. package/dist/templates/meadow/template.json +1 -1
  189. package/dist/templates/orbit/content/pages/about.json +1 -1
  190. package/dist/templates/orbit/content/pages/contact.json +1 -1
  191. package/dist/templates/orbit/content/pages/features.json +1 -1
  192. package/dist/templates/orbit/content/pages/home.json +26 -12
  193. package/dist/templates/orbit/content/pages/pricing.json +1 -1
  194. package/dist/templates/orbit/content/site.json +1 -1
  195. package/dist/templates/orbit/content/styles.json +1 -1
  196. package/dist/templates/orbit/openspace.json +2 -2
  197. package/dist/templates/orbit/template.json +1 -1
  198. package/dist/templates/signal/content/pages/about.json +1 -1
  199. package/dist/templates/signal/content/pages/contact.json +1 -1
  200. package/dist/templates/signal/content/pages/home.json +1 -1
  201. package/dist/templates/signal/content/pages/pricing.json +1 -1
  202. package/dist/templates/signal/content/site.json +1 -1
  203. package/dist/templates/signal/content/styles.json +1 -1
  204. package/dist/templates/signal/openspace.json +2 -2
  205. package/dist/templates/signal/template.json +1 -1
  206. package/dist/templates/vow/content/pages/about.json +1 -1
  207. package/dist/templates/vow/content/pages/home.json +1 -1
  208. package/dist/templates/vow/content/pages/registry.json +1 -1
  209. package/dist/templates/vow/content/pages/rsvp.json +1 -1
  210. package/dist/templates/vow/content/pages/schedule.json +1 -1
  211. package/dist/templates/vow/content/pages/travel.json +1 -1
  212. package/dist/templates/vow/content/site.json +1 -1
  213. package/dist/templates/vow/content/styles.json +1 -1
  214. package/dist/templates/vow/openspace.json +2 -2
  215. package/dist/templates/vow/template.json +1 -1
  216. package/package.json +6 -6
  217. package/dist/chunk-6NIIOHOX.js.map +0 -1
  218. package/dist/chunk-7I6IJI6Z.js.map +0 -1
  219. package/dist/templates/darkroom/content/collections/work/dry-season.mdoc +0 -28
  220. /package/dist/{agents-md-3W4PIY4N.js.map → agents-md-Q2TI3NHB.js.map} +0 -0
@@ -1,39 +1,7 @@
1
1
  import { createRequire as __osCreateRequire } from "node:module"; const require = __osCreateRequire(import.meta.url);
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
10
- }) : x)(function(x) {
11
- if (typeof require !== "undefined") return require.apply(this, arguments);
12
- throw Error('Dynamic require of "' + x + '" is not supported');
13
- });
14
- var __commonJS = (cb, mod) => function __require2() {
15
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
16
- };
17
- var __export = (target, all) => {
18
- for (var name in all)
19
- __defProp(target, name, { get: all[name], enumerable: true });
20
- };
21
- var __copyProps = (to, from, except, desc) => {
22
- if (from && typeof from === "object" || typeof from === "function") {
23
- for (let key of __getOwnPropNames(from))
24
- if (!__hasOwnProp.call(to, key) && key !== except)
25
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
26
- }
27
- return to;
28
- };
29
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
- // If the importer is in node compatibility mode or this is not an ESM
31
- // file that has been converted to a CommonJS file using a Babel-
32
- // compatible transform (i.e. "__esModule" has not been set), then set
33
- // "default" to the CommonJS "module.exports" for node compatibility.
34
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
- mod
36
- ));
2
+ import {
3
+ __export
4
+ } from "./chunk-26AZCID5.js";
37
5
 
38
6
  // ../renderer/src/behaviors-manifest.ts
39
7
  var BEHAVIORS = [
@@ -22750,7 +22718,7 @@ function fallbackMobileRects(layout) {
22750
22718
  }
22751
22719
 
22752
22720
  // ../schema/src/json-schema.ts
22753
- var SCHEMA_BASE_URL = "https://schema.openspace.dev/v1";
22721
+ var SCHEMA_BASE_URL = "https://schema.openspace.host/v1";
22754
22722
  var DOCUMENT_SCHEMAS = {
22755
22723
  "site-config": SiteConfigSchema,
22756
22724
  site: SiteSchema,
@@ -25026,6 +24994,18 @@ function withBase(href, basePath = "") {
25026
24994
  if (href === base || href.startsWith(`${base}/`)) return href;
25027
24995
  return `${base}${href}`;
25028
24996
  }
24997
+ function withTrailingSlash(href) {
24998
+ if (!href.startsWith("/") || href.startsWith("//")) return href;
24999
+ const m = /^([^?#]*)(.*)$/.exec(href);
25000
+ const path = m?.[1] ?? href;
25001
+ const rest = m?.[2] ?? "";
25002
+ if (path.endsWith("/") || /\.[a-z0-9]+$/i.test(path.slice(path.lastIndexOf("/") + 1)))
25003
+ return href;
25004
+ return `${path}/${rest}`;
25005
+ }
25006
+ function internalHref(href, basePath = "") {
25007
+ return withBase(withTrailingSlash(href), basePath);
25008
+ }
25029
25009
  function sectionFragment(section2) {
25030
25010
  return section2.anchor ?? section2.id;
25031
25011
  }
@@ -25057,7 +25037,7 @@ function resolveLink(link2, opts = {}) {
25057
25037
  }
25058
25038
  case "url": {
25059
25039
  const external = /^https?:\/\//.test(link2.url);
25060
- return ok(external ? link2.url : withBase(link2.url, base), link2.newTab ?? false, external);
25040
+ return ok(external ? link2.url : internalHref(link2.url, base), link2.newTab ?? false, external);
25061
25041
  }
25062
25042
  case "email": {
25063
25043
  const subject = link2.subject ? `?subject=${encodeURIComponent(link2.subject)}` : "";
@@ -27028,7 +27008,7 @@ function wrapMark(mark, child, key, basePath) {
27028
27008
  return /* @__PURE__ */ jsx9(
27029
27009
  "a",
27030
27010
  {
27031
- href: withBase(href, basePath),
27011
+ href: internalHref(href, basePath),
27032
27012
  title,
27033
27013
  target: newTab ? "_blank" : void 0,
27034
27014
  rel: newTab ? "noopener" : void 0,
@@ -28207,6 +28187,10 @@ function useImageUrl() {
28207
28187
  height: image3.height
28208
28188
  }).src;
28209
28189
  }
28190
+ function balancedColumns(n, max) {
28191
+ if (n <= max) return Math.max(1, n);
28192
+ return Math.ceil(n / Math.ceil(n / max));
28193
+ }
28210
28194
  var sub = (id, part) => `${id}-${part}`;
28211
28195
  var unsplash = (id, alt, width, height) => ({
28212
28196
  src: `https://images.unsplash.com/photo-${id}?w=2400&q=80`,
@@ -29320,7 +29304,10 @@ var iconListBlock = defineBlock({
29320
29304
  "ul",
29321
29305
  {
29322
29306
  className: cx("os-iconlist", `os-iconlist--${variant}`),
29323
- style: { "--il-cols": fields.columns, "--il-tcols": Math.min(Number(fields.columns), 2) },
29307
+ style: {
29308
+ "--il-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29309
+ "--il-tcols": Math.min(Number(fields.columns), 2)
29310
+ },
29324
29311
  children: fields.items.map((item3, i) => (
29325
29312
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29326
29313
  /* @__PURE__ */ jsxs13("li", { className: "os-iconlist__item", children: [
@@ -29411,7 +29398,10 @@ var columnsBlock = defineBlock({
29411
29398
  "ol",
29412
29399
  {
29413
29400
  className: cx("os-columns", `os-columns--${variant}`),
29414
- style: { "--c-cols": fields.columns, "--c-tcols": Math.min(Number(fields.columns), 2) },
29401
+ style: {
29402
+ "--c-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29403
+ "--c-tcols": Math.min(Number(fields.columns), 2)
29404
+ },
29415
29405
  children: fields.items.map((item3, i) => (
29416
29406
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29417
29407
  /* @__PURE__ */ jsxs13("li", { className: "os-columns__item", children: [
@@ -29462,7 +29452,7 @@ var cardCss = `
29462
29452
  @container block (min-width:36rem){.os-cardblock--horizontal.has-image{grid-template-columns:minmax(0,2fr) minmax(0,3fr);align-items:center;gap:var(--os-space-sm)}}
29463
29453
  .os-cardblock--overlay{color:var(--os-color-neutral-50);overflow:hidden;border-radius:var(--os-image-radius)}
29464
29454
  .os-cardblock--overlay.has-image>.os-card__media{grid-area:1/1}
29465
- .os-cardblock--overlay.has-image>.os-cardblock__body{grid-area:1/1;align-self:end;z-index:2;padding:var(--os-space-xl) var(--os-space-sm) var(--os-space-sm);background:linear-gradient(to top,color-mix(in oklab,var(--os-color-neutral-950) 72%,transparent),transparent);border-radius:0 0 var(--os-image-radius) var(--os-image-radius)}
29455
+ .os-cardblock--overlay.has-image>.os-cardblock__body{grid-area:1/1;align-self:end;z-index:2;padding:var(--os-space-xl) var(--os-space-sm) var(--os-space-sm);background:linear-gradient(to top,color-mix(in oklab,var(--os-color-neutral-950) 80%,transparent),color-mix(in oklab,var(--os-color-neutral-950) 62%,transparent) 60%,transparent);border-radius:0 0 var(--os-image-radius) var(--os-image-radius)}
29466
29456
  .os-cardblock--overlay.has-image :is(.os-cardblock__title,.os-cardblock__eyebrow,.os-cardblock__text,.os-cardblock__text .os-rich,.os-cardblock__more){color:var(--os-color-neutral-50)}
29467
29457
  .os-cardblock--overlay.no-image{padding:var(--os-space-md);background:var(--os-color-accent);color:var(--os-color-accent-text)}
29468
29458
  .os-cardblock--overlay.no-image :is(.os-cardblock__title,.os-cardblock__eyebrow,.os-cardblock__text,.os-cardblock__text .os-rich,.os-cardblock__more,.os-card__icon){color:var(--os-color-accent-text)}
@@ -29969,11 +29959,18 @@ var summaryBlock = defineBlock({
29969
29959
  footer
29970
29960
  ] });
29971
29961
  }
29972
- return /* @__PURE__ */ jsxs15("div", { className: cx("os-summary", `os-summary--${variant}`), style: { "--s-cols": columns2 }, children: [
29973
- heading2,
29974
- /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
29975
- footer
29976
- ] });
29962
+ return /* @__PURE__ */ jsxs15(
29963
+ "div",
29964
+ {
29965
+ className: cx("os-summary", `os-summary--${variant}`),
29966
+ style: { "--s-cols": balancedColumns(items.length, columns2) },
29967
+ children: [
29968
+ heading2,
29969
+ /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
29970
+ footer
29971
+ ]
29972
+ }
29973
+ );
29977
29974
  }
29978
29975
  });
29979
29976
  function firstWeekday(locale) {
@@ -31949,7 +31946,10 @@ function Gallery({ id, fields, variant }) {
31949
31946
  "div",
31950
31947
  {
31951
31948
  className: cx("os-gallery", `os-gallery--${variant}`),
31952
- style: { "--g-cols": fields.columns, "--g-tcols": Math.min(Number(fields.columns), 3) },
31949
+ style: {
31950
+ "--g-cols": balancedColumns(fields.images.length, Number(fields.columns)),
31951
+ "--g-tcols": Math.min(Number(fields.columns), 3)
31952
+ },
31953
31953
  "data-os-behavior": behaviors || void 0,
31954
31954
  children: /* @__PURE__ */ jsx27("ul", { className: "os-gallery__items", "aria-label": label3, children: items })
31955
31955
  }
@@ -31977,7 +31977,7 @@ var galleryCss = `
31977
31977
  @container block (max-width:24rem){.os-gallery--masonry .os-gallery__items{columns:1}}
31978
31978
 
31979
31979
  .os-gallery--strips .os-gallery__items{--row-h:6.5rem;display:flex;flex-wrap:wrap;gap:var(--os-space-2xs)}
31980
- .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:999}
31980
+ .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:1.5}
31981
31981
  .os-gallery--strips .os-gallery__item{flex:var(--ar,1.5) 1 calc(var(--ar,1.5) * var(--row-h));min-width:0}
31982
31982
  .os-gallery--strips .os-img{aspect-ratio:var(--ar,1.5)}
31983
31983
  @container block (min-width:30rem){.os-gallery--strips .os-gallery__items{--row-h:10rem}}
@@ -32428,6 +32428,9 @@ var linkListCss = `
32428
32428
 
32429
32429
  // ../blocks/src/blocks/logo-strip.tsx
32430
32430
  import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
32431
+ function narrowColumns(n) {
32432
+ return n % 2 !== 0 && n % 3 === 0 ? 3 : Math.min(2, n);
32433
+ }
32431
32434
  var logoStripBlock = defineBlock({
32432
32435
  type: "logo-strip",
32433
32436
  version: 1,
@@ -32483,45 +32486,61 @@ var logoStripBlock = defineBlock({
32483
32486
  });
32484
32487
  const label3 = fields.label ? /* @__PURE__ */ jsx31("p", { className: "os-logos__label", children: fields.label }) : null;
32485
32488
  const cls = cx("os-logos", `os-logos--${variant}`, fields.monochrome && "is-mono");
32489
+ const n = fields.logos.length;
32490
+ const columns2 = {
32491
+ "--lo-s": narrowColumns(n),
32492
+ "--lo-m": balancedColumns(n, 4),
32493
+ "--lo-l": balancedColumns(n, 6)
32494
+ };
32486
32495
  if (variant === "marquee") {
32487
32496
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32488
32497
  label3,
32489
- /* @__PURE__ */ jsx31("div", { className: "os-marquee", "data-os-behavior": "marquee", "data-os-speed": "30", children: /* @__PURE__ */ jsx31("ul", { className: "os-marquee__track os-logos__list", "aria-label": fields.label || "Logos", children: items }) })
32498
+ /* @__PURE__ */ jsx31("div", { className: "os-marquee", "data-os-behavior": "marquee", "data-os-speed": "30", children: /* @__PURE__ */ jsx31(
32499
+ "ul",
32500
+ {
32501
+ className: "os-marquee__track os-logos__list",
32502
+ "aria-label": fields.label || "Logos",
32503
+ style: columns2,
32504
+ children: items
32505
+ }
32506
+ ) })
32490
32507
  ] });
32491
32508
  }
32492
32509
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32493
32510
  label3,
32494
- /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", children: items })
32511
+ /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", style: columns2, children: items })
32495
32512
  ] });
32496
32513
  }
32497
32514
  });
32498
32515
  var logoStripCss = `
32499
32516
  .os-logos{display:grid;gap:var(--os-space-sm)}
32500
32517
  .os-logos__label{font-family:var(--os-type-eyebrow-font-family);font-size:var(--os-type-eyebrow-font-size);letter-spacing:var(--os-type-eyebrow-letter-spacing);text-transform:var(--os-type-eyebrow-text-transform);font-weight:var(--os-type-eyebrow-font-weight);color:var(--os-color-text-muted);text-align:center}
32501
- .os-logos__list{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--os-space-sm) var(--os-space-lg);margin:0}
32502
- .os-logos__item{display:flex;align-items:center;justify-content:center;min-height:3rem}
32518
+ .os-logos__list{--lo-cols:var(--lo-s,2);display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--os-space-sm) 0;margin:0}
32519
+ @container block (min-width:40rem){.os-logos__list{--lo-cols:var(--lo-m,4)}}
32520
+ @container block (min-width:64rem){.os-logos__list{--lo-cols:var(--lo-l,6)}}
32521
+ .os-logos__item{display:flex;align-items:center;justify-content:center;min-height:3rem;flex:0 0 calc(100% / var(--lo-cols));min-width:0;padding-inline:calc(var(--os-space-sm) / 2);box-sizing:border-box}
32503
32522
  .os-logos__link{display:flex;color:inherit;text-decoration:none}
32504
32523
  .os-logos__img{width:auto;height:2.25rem;max-width:9rem;aspect-ratio:auto;background:none;border-radius:0;padding:0;clip-path:none}
32505
32524
  .os-logos__img>picture{background:none}
32506
32525
  .os-logos__img .os-img__img{width:auto;max-width:100%;height:100%;object-fit:contain;filter:none;mix-blend-mode:normal}
32507
32526
  .os-logos__img::after{display:none}
32508
- .os-logos__word{display:block;color:var(--os-color-heading);white-space:nowrap;line-height:1;font-size:1.25rem}
32527
+ .os-logos__word{display:block;color:var(--os-color-heading);line-height:1.1;font-size:1.25rem;text-align:center;text-wrap:balance;overflow-wrap:anywhere}
32509
32528
  .os-logos__word--0{font-family:var(--os-font-heading);font-weight:var(--os-font-weight-heading);font-style:italic;font-size:1.4rem}
32510
32529
  .os-logos__word--1{font-family:var(--os-font-body);font-weight:600;letter-spacing:0.18em;text-transform:uppercase;font-size:0.95rem}
32511
32530
  .os-logos__word--2{font-family:var(--os-font-heading);font-weight:400;letter-spacing:-0.01em;font-size:1.5rem}
32512
32531
  .os-logos__word--3{font-family:var(--os-font-body);font-weight:800;letter-spacing:-0.03em;font-size:1.3rem}
32513
- @container block (max-width:30rem){.os-logos__list{gap:var(--os-space-xs) var(--os-space-md)}.os-logos__word{font-size:1rem}.os-logos__word--0,.os-logos__word--2{font-size:1.15rem}.os-logos__word--1{font-size:0.8rem}.os-logos__img{height:1.75rem}}
32514
- .os-logos--grid .os-logos__word{white-space:normal;text-align:center;text-wrap:balance}
32532
+ @container block (max-width:30rem){.os-logos__list{row-gap:var(--os-space-xs)}.os-logos__item{padding-inline:calc(var(--os-space-xs) / 2)}.os-logos__word{font-size:1rem}.os-logos__word--0,.os-logos__word--2{font-size:1.15rem}.os-logos__word--1{font-size:0.8rem}.os-logos__img{height:1.75rem}}
32515
32533
  .os-logos.is-mono .os-logos__item{opacity:0.72;transition:opacity var(--os-motion-duration-base) var(--os-motion-ease)}
32516
32534
  .os-logos.is-mono .os-logos__img .os-img__img{filter:grayscale(1)}
32517
32535
  .os-logos.is-mono .os-logos__item:hover{opacity:1}
32518
32536
  .os-logos.is-mono .os-logos__item:hover .os-img__img{filter:none}
32519
- .os-logos--grid .os-logos__list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border-top:1px solid var(--os-color-border);border-inline-start:1px solid var(--os-color-border)}
32520
- @container block (min-width:40rem){.os-logos--grid .os-logos__list{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}}
32521
- .os-logos--grid .os-logos__item{min-height:6.5rem;padding:var(--os-space-sm);border-bottom:1px solid var(--os-color-border);border-inline-end:1px solid var(--os-color-border)}
32522
- .os-logos--marquee .os-marquee{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32523
- .os-logos--marquee .os-marquee__track{justify-content:center}
32524
- .os-logos--marquee .os-marquee.is-running .os-marquee__track{justify-content:flex-start;padding-inline-end:var(--os-space-lg)}
32537
+ .os-logos--grid .os-logos__list{gap:0;padding:1px}
32538
+ .os-logos--grid .os-logos__item{min-height:6.5rem;padding:var(--os-space-sm);box-shadow:1px 0 0 0 var(--os-color-border),0 1px 0 0 var(--os-color-border),1px 1px 0 0 var(--os-color-border),inset 1px 0 0 0 var(--os-color-border),inset 0 1px 0 0 var(--os-color-border)}
32539
+ .os-logos--marquee .os-marquee.is-running{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32540
+ .os-logos--marquee .os-marquee__track{justify-content:center;gap:var(--os-space-sm) 0}
32541
+ .os-logos--marquee .os-marquee.is-running .os-marquee__track{justify-content:flex-start;gap:var(--os-space-lg);padding-inline-end:var(--os-space-lg)}
32542
+ .os-logos--marquee .os-marquee.is-running .os-logos__item{flex:0 0 auto;padding-inline:0}
32543
+ .os-logos--marquee .os-marquee.is-running .os-logos__word{white-space:nowrap}
32525
32544
  `;
32526
32545
 
32527
32546
  // ../blocks/src/blocks/map.tsx
@@ -34444,10 +34463,13 @@ var tableBlock = defineBlock({
34444
34463
  const cols = fields.columns;
34445
34464
  const width = cols.length + 1;
34446
34465
  return /* @__PURE__ */ jsxs37("div", { className: cx("os-table", `os-table--${variant}`), children: [
34447
- /* @__PURE__ */ jsx43(
34466
+ /* @__PURE__ */ jsx43("p", { className: "os-table__hint", "aria-hidden": "true", children: "Swipe sideways to see every column \u2192" }),
34467
+ /* @__PURE__ */ jsx43("div", { className: "os-table__frame", children: /* @__PURE__ */ jsx43(
34448
34468
  "div",
34449
34469
  {
34450
34470
  className: "os-table__scroll",
34471
+ role: "group",
34472
+ "aria-label": `${fields.caption || "Comparison table"} (scrolls sideways on small screens)`,
34451
34473
  tabIndex: 0,
34452
34474
  children: /* @__PURE__ */ jsxs37("table", { className: "os-table__table", style: { "--cols": cols.length }, children: [
34453
34475
  fields.caption ? /* @__PURE__ */ jsx43("caption", { className: "os-table__caption", children: fields.caption }) : null,
@@ -34487,7 +34509,7 @@ var tableBlock = defineBlock({
34487
34509
  ) })
34488
34510
  ] })
34489
34511
  }
34490
- ),
34512
+ ) }),
34491
34513
  fields.note ? /* @__PURE__ */ jsx43("p", { className: "os-table__note", children: fields.note }) : null
34492
34514
  ] });
34493
34515
  }
@@ -34496,6 +34518,13 @@ var tableCss = `
34496
34518
  .os-table{display:grid;gap:var(--os-space-xs);min-width:0}
34497
34519
  .os-table__scroll{overflow-x:auto;min-width:0;border-radius:var(--os-radius-card);overscroll-behavior-x:contain}
34498
34520
  .os-table__scroll:focus-visible{outline:2px solid var(--os-color-focus);outline-offset:2px}
34521
+ .os-table__frame{position:relative;min-width:0;timeline-scope:--os-table-x}
34522
+ .os-table__frame>.os-table__scroll{scroll-timeline:--os-table-x inline}
34523
+ .os-table__frame::after{content:"";position:absolute;inset-block:0;inset-inline-end:0;width:1.75rem;pointer-events:none;border-radius:0 var(--os-radius-card) var(--os-radius-card) 0;background:linear-gradient(to left,color-mix(in srgb,var(--os-color-heading) 18%,transparent),transparent);opacity:0}
34524
+ @supports (animation-timeline:scroll()){.os-table__frame::after{animation:os-table-cue linear both;animation-timeline:--os-table-x}}
34525
+ @keyframes os-table-cue{0%,90%{opacity:1}100%{opacity:0}}
34526
+ .os-table__hint{display:none;margin:0;font-size:var(--os-type-small-font-size);color:var(--os-color-text-muted)}
34527
+ @media (max-width:40em){.os-table__hint{display:block}}
34499
34528
  .os-table__table{width:100%;min-width:calc(10rem + var(--cols,3) * 7.5rem);border-collapse:collapse;font-variant-numeric:tabular-nums}
34500
34529
  .os-table__caption{caption-side:top;text-align:start;padding:0 0 var(--os-space-xs);color:var(--os-color-text-muted);font-size:var(--os-type-small-font-size)}
34501
34530
  .os-table th,.os-table td{padding:0.85em 1em;text-align:center;vertical-align:middle;border-bottom:1px solid var(--os-color-border)}
@@ -34690,7 +34719,10 @@ var teamBlock = defineBlock({
34690
34719
  "ul",
34691
34720
  {
34692
34721
  className: cx("os-team", `os-team--${variant}`),
34693
- style: { "--t-cols": fields.columns, "--t-tcols": Math.min(Number(fields.columns), 2) },
34722
+ style: {
34723
+ "--t-cols": balancedColumns(fields.people.length, Number(fields.columns)),
34724
+ "--t-tcols": Math.min(Number(fields.columns), 2)
34725
+ },
34694
34726
  children: fields.people.map((person2, i) => {
34695
34727
  const name = person2.link ? /* @__PURE__ */ jsx45(Link, { to: person2.link, className: "os-team__link", children: person2.name }) : person2.name;
34696
34728
  return (
@@ -34731,7 +34763,7 @@ var teamCss = `
34731
34763
  .os-team--list{grid-template-columns:minmax(0,1fr);gap:var(--os-space-md)}
34732
34764
  @container block (min-width:36rem){.os-team--list .os-team__person{grid-template-columns:minmax(0,12rem) minmax(0,1fr);gap:var(--os-space-md);align-items:start}}
34733
34765
  .os-team--list .os-team__person+.os-team__person{padding-top:var(--os-space-md);border-top:1px solid var(--os-color-border)}
34734
- .os-team--circles{grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));text-align:center}
34766
+ .os-team--circles{grid-template-columns:repeat(auto-fit,minmax(9rem,11rem));justify-content:center;text-align:center}
34735
34767
  .os-team--circles .os-team__photo{width:min(100%,9rem);margin-inline:auto}
34736
34768
  `;
34737
34769
 
@@ -35744,6 +35776,171 @@ var PHOTOS = {
35744
35776
  4683,
35745
35777
  "A city street at night strung with red lanterns"
35746
35778
  ),
35779
+ // people at work (portrait & editorial portfolios)
35780
+ bakerApron: p(
35781
+ "1496811425508-6d7ebb7ff32c",
35782
+ 4918,
35783
+ 3376,
35784
+ "A young woman in a white shirt, bow tie and brown apron looking into the camera"
35785
+ ),
35786
+ bakerOven: p(
35787
+ "1772758632331-56fcdb6fd45b",
35788
+ 5707,
35789
+ 3805,
35790
+ "A smiling baker in a hairnet sliding bread from a brick oven",
35791
+ [0.3, 0.35]
35792
+ ),
35793
+ bakerKitchen: p(
35794
+ "1783768204400-7e6f402f3738",
35795
+ 3011,
35796
+ 4517,
35797
+ "A black-and-white photo of a woman kneading dough at a kitchen table"
35798
+ ),
35799
+ shopkeeper: p(
35800
+ "1748640858029-53c840ef5a1b",
35801
+ 3685,
35802
+ 5528,
35803
+ "A shopkeeper resting his chin on his hand behind a counter of flatbreads",
35804
+ [0.55, 0.55]
35805
+ ),
35806
+ woodCarver: p(
35807
+ "1776728016975-45f2197c0d2a",
35808
+ 3598,
35809
+ 5397,
35810
+ "A black-and-white portrait of a bearded wood carver holding his tools and a figure",
35811
+ [0.5, 0.3]
35812
+ ),
35813
+ makerShop: p(
35814
+ "1713652425093-47778c267769",
35815
+ 5716,
35816
+ 4912,
35817
+ "An older craftsman with his arms crossed in a cluttered workshop"
35818
+ ),
35819
+ woodworker: p(
35820
+ "1631396327810-0299385c06bf",
35821
+ 4e3,
35822
+ 6e3,
35823
+ "A black-and-white photo of a woodworker shaping a block at his bench"
35824
+ ),
35825
+ workshopNight: p(
35826
+ "1660796334912-8ce8e9c2cff0",
35827
+ 5391,
35828
+ 3556,
35829
+ "A man working late at a bench in a dim workshop under a single lamp",
35830
+ [0.55, 0.5]
35831
+ ),
35832
+ treePlanting: p(
35833
+ "1598335624134-5bceb5de202d",
35834
+ 4480,
35835
+ 6720,
35836
+ "Neighbours kneeling to plant a young tree together"
35837
+ ),
35838
+ chardHarvest: p(
35839
+ "1529007328922-d323f83de273",
35840
+ 5760,
35841
+ 3840,
35842
+ "A child holding an armful of freshly picked chard"
35843
+ ),
35844
+ shadedStreet: p(
35845
+ "1790026988616-8a01ef4a6709",
35846
+ 3356,
35847
+ 5043,
35848
+ "A quiet street under a canopy of tall plane trees"
35849
+ ),
35850
+ synthStage: p(
35851
+ "1561447920-ee278fe828a2",
35852
+ 4852,
35853
+ 2393,
35854
+ "A keyboard player on a stage washed in violet haze",
35855
+ [0.42, 0.55]
35856
+ ),
35857
+ repairVolunteer: p(
35858
+ "1505798577917-a65157d3320a",
35859
+ 5472,
35860
+ 3648,
35861
+ "An older volunteer in a cap cutting trim with a miter saw indoors",
35862
+ [0.45, 0.5]
35863
+ ),
35864
+ pastaCutting: p(
35865
+ "1447279506476-3faec8071eee",
35866
+ 6e3,
35867
+ 4e3,
35868
+ "Floury hands lifting fresh ribbons of pasta from a cutter",
35869
+ [0.65, 0.45]
35870
+ ),
35871
+ pastaRagu: p(
35872
+ "1600803907087-f56d462fd26b",
35873
+ 4472,
35874
+ 7952,
35875
+ "A dark bowl of pasta with slow-cooked rag\xF9 and herbs",
35876
+ [0.5, 0.6]
35877
+ ),
35878
+ potterWheel: p(
35879
+ "1609881583302-61548332039c",
35880
+ 4932,
35881
+ 4865,
35882
+ "A potter in a clay-spattered apron throwing a pot on the wheel"
35883
+ ),
35884
+ greenwareShelves: p(
35885
+ "1610206349499-c932c3b3aacb",
35886
+ 4337,
35887
+ 2891,
35888
+ "Studio shelves stacked with cups and bowls waiting to be fired"
35889
+ ),
35890
+ wheelLesson: p(
35891
+ "1637548580984-10c48d61b168",
35892
+ 3264,
35893
+ 2448,
35894
+ "A teacher's hands guiding a student's on a spinning pottery wheel"
35895
+ ),
35896
+ potteryClass: p(
35897
+ "1682868067843-11fbc221174a",
35898
+ 2784,
35899
+ 4176,
35900
+ "Students hand-building pots around a table in a bright studio"
35901
+ ),
35902
+ glazePainting: p(
35903
+ "1657395348373-28a0cb49804b",
35904
+ 6e3,
35905
+ 4e3,
35906
+ "A brush painting a butterfly in glaze on a white plate"
35907
+ ),
35908
+ stoneWall: p(
35909
+ "1611950318733-51d05def21ee",
35910
+ 4032,
35911
+ 3024,
35912
+ "An old dry-stone wall in the woods under early snow"
35913
+ ),
35914
+ appleTree: p(
35915
+ "1789448720981-96879056796d",
35916
+ 12032,
35917
+ 8018,
35918
+ "A gnarled old apple tree in a grassy field, in black and white"
35919
+ ),
35920
+ hayField: p(
35921
+ "1676903761134-a7806cd2f26d",
35922
+ 3600,
35923
+ 2400,
35924
+ "Hay bales in a green field below a barn and a wooded hill in Vermont"
35925
+ ),
35926
+ oldBarn: p(
35927
+ "1743351831171-a4317f076b2f",
35928
+ 5370,
35929
+ 2679,
35930
+ "A weathered barn with a rusted roof against autumn hills"
35931
+ ),
35932
+ dirtRoad: p(
35933
+ "1670967595704-f5f38475bb01",
35934
+ 6e3,
35935
+ 4e3,
35936
+ "A dirt road running between fields and forest under a grey sky"
35937
+ ),
35938
+ autumnFarm: p(
35939
+ "1744488340684-2b86590c15dd",
35940
+ 4799,
35941
+ 2673,
35942
+ "A small farm with a barn among autumn trees below a mountain"
35943
+ ),
35747
35944
  dunes: p("1542401886-65d6c61db217", 5835, 3890, "Rippled orange sand dunes under a hazy sky"),
35748
35945
  canyon: p(
35749
35946
  "1509316785289-025f5b846b35",
@@ -36583,6 +36780,128 @@ var PHOTO_CREDITS = {
36583
36780
  "marckleen",
36584
36781
  "a-person-walking-down-a-street-with-red-decorations-e1f9yY-DzoY"
36585
36782
  ],
36783
+ "1496811425508-6d7ebb7ff32c": [
36784
+ "Steven Cleghorn",
36785
+ "buliamti",
36786
+ "woman-wearing-brown-apron-psomVjxL29Y"
36787
+ ],
36788
+ "1772758632331-56fcdb6fd45b": [
36789
+ "Yasin Onus",
36790
+ "yasinonus",
36791
+ "baker-smiling-while-preparing-food-in-a-brick-oven-yS8tQoatvmM"
36792
+ ],
36793
+ "1783768204400-7e6f402f3738": [
36794
+ "Lisa Marie Theck",
36795
+ "lisa_marie_theck",
36796
+ "a-woman-preparing-food-in-a-rustic-kitchen-JzKQSxf4-4Q"
36797
+ ],
36798
+ "1748640858029-53c840ef5a1b": [
36799
+ "Rawan Yasser",
36800
+ "rawanyasser",
36801
+ "a-man-leans-on-a-counter-in-his-shop-1rW3RIxLu7E"
36802
+ ],
36803
+ "1776728016975-45f2197c0d2a": [
36804
+ "Tim Mossholder",
36805
+ "timmossholder",
36806
+ "elderly-craftsman-with-beard-holding-carving-tools-and-figurine-E5SfRlzUh2Q"
36807
+ ],
36808
+ "1713652425093-47778c267769": [
36809
+ "Andrew Heald",
36810
+ "aheald25",
36811
+ "a-man-in-an-old-fashioned-shop-with-his-arms-crossed-WV6tnAij3rU"
36812
+ ],
36813
+ "1631396327810-0299385c06bf": [
36814
+ "Bailey Alexander",
36815
+ "baileyal3xander",
36816
+ "a-man-is-working-on-a-piece-of-wood-UJfNwtQ7zAs"
36817
+ ],
36818
+ "1660796334912-8ce8e9c2cff0": [
36819
+ "Alex Gruber",
36820
+ "alex_gruber",
36821
+ "a-man-working-in-a-shop-rgSLzr82Kd8"
36822
+ ],
36823
+ "1598335624134-5bceb5de202d": [
36824
+ "Eyoel Kahssay",
36825
+ "eyoelkahssay",
36826
+ "woman-and-child-planting-tree-FyCjvyPG9Pg"
36827
+ ],
36828
+ "1529007328922-d323f83de273": [
36829
+ "Johnny McClung",
36830
+ "johnnymcclung",
36831
+ "person-holding-bok-choy-0aC-3Gt7jF4"
36832
+ ],
36833
+ "1790026988616-8a01ef4a6709": [
36834
+ "Jakub Tomasik",
36835
+ "jakubeq",
36836
+ "street-lined-with-plane-trees-Az4s1u1pyLs"
36837
+ ],
36838
+ "1561447920-ee278fe828a2": ["dreokt", "dreokt", "man-playing-electronic-keyboard-h5DPNz9kMZA"],
36839
+ "1505798577917-a65157d3320a": [
36840
+ "Annie Gray",
36841
+ "anniegray",
36842
+ "man-standing-infront-of-miter-saw-WEWTGkPUVT0"
36843
+ ],
36844
+ "1447279506476-3faec8071eee": [
36845
+ "Jorge Zapata",
36846
+ "jorgezapatag",
36847
+ "person-sheeting-dough-4nXkhLCrkLo"
36848
+ ],
36849
+ "1600803907087-f56d462fd26b": [
36850
+ "Emanuel Ekstr\xF6m",
36851
+ "emanuelekstrom",
36852
+ "pasta-dish-on-white-ceramic-bowl-KJOUnsGXq58"
36853
+ ],
36854
+ "1609881583302-61548332039c": [
36855
+ "Earl Wilcox",
36856
+ "earl_plannerzone",
36857
+ "person-in-blue-denim-jeans-making-clay-pot-7ZK_CuHroq4"
36858
+ ],
36859
+ "1610206349499-c932c3b3aacb": [
36860
+ "Manki Kim",
36861
+ "kimdonkey",
36862
+ "white-ceramic-teacup-on-brown-wooden-shelf-ZOeyUJB6t_Y"
36863
+ ],
36864
+ "1637548580984-10c48d61b168": [
36865
+ "Lindsey Elsey",
36866
+ "artsmarts",
36867
+ "a-group-of-people-working-on-a-pottery-wheel-fmuykMXH-dY"
36868
+ ],
36869
+ "1682868067843-11fbc221174a": [
36870
+ "Sander Breneman",
36871
+ "brenesan",
36872
+ "a-group-of-women-sitting-at-a-table-working-on-pottery-kJiPUr1KQSE"
36873
+ ],
36874
+ "1657395348373-28a0cb49804b": ["Grant Durr", "grant_durr", "a-child-painting-a-bowl-GjpUt15XbPE"],
36875
+ "1611950318733-51d05def21ee": [
36876
+ "natalie bowers",
36877
+ "nbowers",
36878
+ "gray-rocks-on-brown-soil-khAcUpojwhA"
36879
+ ],
36880
+ "1789448720981-96879056796d": [
36881
+ "Julian Kraus",
36882
+ "juliankraus",
36883
+ "gnarled-apple-tree-in-grassy-field-b3pCgNT1fn0"
36884
+ ],
36885
+ "1676903761134-a7806cd2f26d": [
36886
+ "David Trinks",
36887
+ "dtrinksrph",
36888
+ "a-large-field-with-hay-bales-in-the-foreground-and-a-barn-in-the-Rf5SsbLmFmc"
36889
+ ],
36890
+ "1743351831171-a4317f076b2f": [
36891
+ "LXS Photography",
36892
+ "lxsphotography",
36893
+ "old-weathered-barn-against-autumn-foliage-i7jff9hPR-U"
36894
+ ],
36895
+ "1670967595704-f5f38475bb01": [
36896
+ "Giuli Canderle",
36897
+ "giulicanderle",
36898
+ "a-dirt-road-in-the-middle-of-a-forest-G2k-BQWJ3DM"
36899
+ ],
36900
+ "1744488340684-2b86590c15dd": [
36901
+ "LXS Photography",
36902
+ "lxsphotography",
36903
+ "autumn-farm-scene-with-a-barn-and-covered-bridge-1PnkD5YV6Sw"
36904
+ ],
36586
36905
  "1542401886-65d6c61db217": [
36587
36906
  "Wolfgang Hasselmann",
36588
36907
  "wolfgang_hasselmann",
@@ -38238,7 +38557,7 @@ var ctaPresets = [
38238
38557
  "Sort donations, drive deliveries or cook with us on Saturdays. Training and lunch are on us."
38239
38558
  )
38240
38559
  ],
38241
- { style: { colorTheme: c3.theme, padding: { d: "xl", m: "md" } } }
38560
+ { style: { colorTheme: raised(c3.theme), padding: { d: "xl", m: "md" } } }
38242
38561
  );
38243
38562
  const cta = button2("Sign up to volunteer", c3.primary);
38244
38563
  return {
@@ -38891,20 +39210,26 @@ var ctaMorePresets = [
38891
39210
  definePreset({
38892
39211
  category: "cta",
38893
39212
  name: "card-centered",
38894
- label: "Card on tinted band",
38895
- description: "A raised card with headline, text and two actions, centred on a tinted section.",
39213
+ label: "Centred with accent rule",
39214
+ description: "A short accent rule over a centred headline, a line of text and two actions, on a tinted band.",
38896
39215
  copy: [headline4, copy.body(6, 35)],
38897
39216
  defaultTheme: "light-accent",
38898
- tags: ["card", "centered", "panel"],
39217
+ tags: ["centered", "rule", "band"],
38899
39218
  links: { primary: "/signup", secondary: "/demo" },
38900
39219
  ai: {
38901
- purpose: "Frames the final ask as a distinct, tidy panel.",
39220
+ purpose: "A calm, centred final ask with everything \u2014 words and both actions \u2014 in one group.",
38902
39221
  whenToUse: "Software, courses and memberships.",
38903
39222
  avoid: CTA_AVOID2
38904
39223
  },
38905
39224
  make: (c3) => ({
38906
- layout: stack({ width: "content", gap: "lg" }),
39225
+ layout: stack({ width: "content", gap: "md" }),
39226
+ padding: { d: "2xl", m: "xl" },
38907
39227
  blocks: [
39228
+ make2(
39229
+ lineBlock,
39230
+ { thickness: "regular", length: "short", color: "accent" },
39231
+ { variant: "solid", style: { align: { d: "center", m: "center" } } }
39232
+ ),
38908
39233
  text2(
38909
39234
  [
38910
39235
  rt.h(2, "Try Frontdesk free for 30 days", "h2"),
@@ -38912,7 +39237,7 @@ var ctaMorePresets = [
38912
39237
  "Set up your booking page in an afternoon. No card needed, and we'll move your clients across for you."
38913
39238
  )
38914
39239
  ],
38915
- { align: "center", style: { ...panel("light", "xl"), border: "subtle" } }
39240
+ { align: "center" }
38916
39241
  ),
38917
39242
  button2("Start your free trial", c3.primary, {
38918
39243
  align: "center",
@@ -41647,7 +41972,7 @@ var featuresMorePresets = [
41647
41972
  "Materials \u2014 Solid wood, oiled not lacquered",
41648
41973
  "Oak and ash from managed forests, finished with oil you can renew yourself. Scratches sand out instead of chipping."
41649
41974
  );
41650
- const d = image2(photo2("stool", 640));
41975
+ const d = image2(photo2("woodworker", 640));
41651
41976
  const dt = row2(
41652
41977
  "Aftercare \u2014 We come back every year",
41653
41978
  "An annual visit to oil worktops, adjust hinges and fix anything that's bothering you, for as long as you own the kitchen."
@@ -42183,7 +42508,7 @@ var galleryPresets = [
42183
42508
  label: "Masonry wall",
42184
42509
  description: "Photos at their natural proportions in staggered columns.",
42185
42510
  copy: [headline9],
42186
- images: [{ slot: "photos", aspect: "original", count: 7 }],
42511
+ images: [{ slot: "photos", aspect: "original", count: 6 }],
42187
42512
  defaultTheme: "light",
42188
42513
  tags: ["masonry", "portfolio"],
42189
42514
  ai: {
@@ -42203,8 +42528,7 @@ var galleryPresets = [
42203
42528
  "portraitTheo",
42204
42529
  "weddingAisle",
42205
42530
  "portraitAna",
42206
- "friendsSunset",
42207
- "portraitSam"
42531
+ "friendsSunset"
42208
42532
  ],
42209
42533
  460
42210
42534
  ),
@@ -42534,7 +42858,7 @@ var galleryMorePresets = [
42534
42858
  layout: stack({ width: "full", gap: "lg" }),
42535
42859
  blocks: [
42536
42860
  heading("Around the lodge", { eyebrow: "Gallery" }),
42537
- gallery2([["canyon"], ["dunes"], ["valley"], ["mountainLake"], ["road"]], 900, {
42861
+ gallery2([["mountainLake"], ["lake"], ["valley"], ["cliffs"], ["hills"]], 900, {
42538
42862
  variant: "carousel",
42539
42863
  aspect: "3:2"
42540
42864
  })
@@ -43449,7 +43773,7 @@ var heroMorePresets = [
43449
43773
  second: { label: "Book a design visit", link: c3.secondary }
43450
43774
  });
43451
43775
  const a = image2(photo2("kitchen", 560));
43452
- const b = image2(photo2("stool", 360));
43776
+ const b = image2(photo2("woodworker", 360));
43453
43777
  const proof = stats([["212", "Kitchens fitted"]], {
43454
43778
  variant: "large",
43455
43779
  style: panel("dark-accent")
@@ -44904,19 +45228,19 @@ var teamPresets = [
44904
45228
  make: () => ({
44905
45229
  layout: stack({ gap: "xl" }),
44906
45230
  blocks: [
44907
- heading("The people in the kitchen", {
45231
+ heading("The people behind the work", {
44908
45232
  eyebrow: "Our team",
44909
- sub: "A small crew who've cooked together for years \u2014 and still argue about the best tomato."
45233
+ sub: "A small team who've worked together for years \u2014 and still care about every detail."
44910
45234
  }),
44911
45235
  make2(
44912
45236
  teamBlock,
44913
45237
  {
44914
45238
  columns: "4",
44915
45239
  people: [
44916
- person("Elena Ruiz", "Chef & owner", "portraitMaya"),
44917
- person("Sam Okoro", "Head of pastry", "portraitSam"),
44918
- person("Clara Jensen", "Front of house", "portraitClara"),
44919
- person("Theo Marsh", "Sommelier", "portraitTheo")
45240
+ person("Elena Ruiz", "Founder", "portraitMaya"),
45241
+ person("Sam Okoro", "Lead", "portraitSam"),
45242
+ person("Clara Jensen", "Client care", "portraitClara"),
45243
+ person("Theo Marsh", "Operations", "portraitTheo")
44920
45244
  ]
44921
45245
  },
44922
45246
  { variant: "grid" }
@@ -47533,7 +47857,7 @@ var servicesPresets = [
47533
47857
  linkLabel: "About planting"
47534
47858
  },
47535
47859
  {
47536
- image: photo2("porchHouse", 400, "4:5"),
47860
+ image: photo2("urbanGarden", 400, "4:5"),
47537
47861
  heading: "Full garden builds",
47538
47862
  body: rt.doc(
47539
47863
  rt.p(
@@ -48349,25 +48673,28 @@ var testimonialsPresets = [
48349
48673
  avoid: AVOID15
48350
48674
  },
48351
48675
  make: () => {
48352
- const h = heading("Kind words from our regulars", { eyebrow: "Reviews", align: "center" });
48676
+ const h = heading("Kind words from the people we work with", {
48677
+ eyebrow: "Reviews",
48678
+ align: "center"
48679
+ });
48353
48680
  const a = testimonial2(
48354
- "The sourdough is the best I've had outside San Francisco, and the staff remember my order.",
48681
+ "Clear, friendly and on time from the first email to the last detail. We felt looked after throughout.",
48355
48682
  "Marcus Webb",
48356
- "Regular since 2019",
48683
+ "Customer since 2019",
48357
48684
  "portraitDaniel",
48358
48685
  { rating: 5 }
48359
48686
  );
48360
48687
  const b = testimonial2(
48361
- "We ordered our wedding cake here and people are still talking about it a year later.",
48688
+ "They listened properly, explained every option and delivered exactly what we hoped for \u2014 a year later we still recommend them.",
48362
48689
  "Hana Okafor",
48363
- "Wedding cake, June",
48690
+ "First-time customer",
48364
48691
  "portraitAna",
48365
48692
  { rating: 5 }
48366
48693
  );
48367
48694
  const d = testimonial2(
48368
- "Saturday croissants have become a family ritual. Worth the queue, every single time.",
48695
+ "Easy to work with and genuinely kind. We have come back again and again, and so have our friends.",
48369
48696
  "Leo Brandt",
48370
- "Neighbour",
48697
+ "Returning customer",
48371
48698
  "portraitSam",
48372
48699
  { rating: 5 }
48373
48700
  );
@@ -49065,6 +49392,71 @@ function starterSection(label3, blocks2, look = {}) {
49065
49392
  };
49066
49393
  }
49067
49394
 
49395
+ // ../blocks/src/presets/sample.ts
49396
+ var SAMPLE_BLOCK_TYPES = /* @__PURE__ */ new Set([
49397
+ "testimonial",
49398
+ "quote",
49399
+ "quote-carousel",
49400
+ "team",
49401
+ "restaurant-menu",
49402
+ "stats",
49403
+ "pricing",
49404
+ "timeline",
49405
+ "contact-info",
49406
+ "table"
49407
+ ]);
49408
+ var NOT_TEXT = /^(?:src|url|href|link|id|type|variant|icon|level|size|aspect|network|day|opens|closes|currency|source|provider|mode|frequency|target|tileServer|headingLevel|placeholder|columns|separator|speed|color|shape|thickness|length|height|align|alignment|layout|fit|theme|kind|alt|style|interval|period)$/;
49409
+ function normalizeSampleText(s) {
49410
+ return s.normalize("NFKC").toLowerCase().replace(/\s+/g, " ").trim();
49411
+ }
49412
+ function specific(s) {
49413
+ const t = s.trim();
49414
+ if (t.length < 4) return false;
49415
+ if (/\d/.test(t) || t.includes("@")) return true;
49416
+ if (/\p{Lu}[\p{L}’'-]+[\s.,&]+(?:\p{Ll}{1,3}\s+)?\p{Lu}[\p{L}’'-]+/u.test(t)) return true;
49417
+ return t.split(/\s+/).length >= 6;
49418
+ }
49419
+ function sampleStringsOf(block2) {
49420
+ const out = [];
49421
+ const push = (s) => {
49422
+ if (specific(s)) out.push(normalizeSampleText(s));
49423
+ };
49424
+ const walk = (v2, key) => {
49425
+ if (typeof v2 === "string") {
49426
+ if (!key || !NOT_TEXT.test(key)) push(v2);
49427
+ } else if (Array.isArray(v2)) for (const x of v2) walk(x);
49428
+ else if (v2 && typeof v2 === "object") {
49429
+ const o = v2;
49430
+ if (o.type === "doc" && Array.isArray(o.content)) {
49431
+ for (const node2 of o.content)
49432
+ push(plainText({ type: "doc", content: [node2] }));
49433
+ return;
49434
+ }
49435
+ if (typeof o.src === "string") return;
49436
+ for (const [k, x] of Object.entries(o)) walk(x, k);
49437
+ }
49438
+ };
49439
+ walk(block2.fields);
49440
+ return out;
49441
+ }
49442
+ function sectionSampleStrings(section2) {
49443
+ const out = /* @__PURE__ */ new Set();
49444
+ for (const b of section2.blocks)
49445
+ if (SAMPLE_BLOCK_TYPES.has(b.type)) for (const s of sampleStringsOf(b)) out.add(s);
49446
+ return out;
49447
+ }
49448
+ function sampleMatches(section2, sample) {
49449
+ if (!sample.size) return [];
49450
+ const out = [];
49451
+ for (const b of section2.blocks) {
49452
+ if (b.hidden || !SAMPLE_BLOCK_TYPES.has(b.type)) continue;
49453
+ const found = [...new Set(sampleStringsOf(b).filter((s) => sample.has(s)))];
49454
+ if (found.length) out.push({ blockId: b.id, blockType: b.type, found });
49455
+ }
49456
+ return out;
49457
+ }
49458
+ var PLACEHOLDER_RE = /\[(?:placeholder|todo|tbd|tk|insert[^\]]*|your [^\]]*|add [^\]]*)\]|\blorem ipsum\b|\{\{[^}]*\}\}/i;
49459
+
49068
49460
  // ../blocks/src/presets/index.ts
49069
49461
  var sectionPresets = [
49070
49462
  ...heroPresets,
@@ -49114,6 +49506,9 @@ var byId = new Map(allPresets.map((p2) => [p2.id, p2]));
49114
49506
  function getPreset(id) {
49115
49507
  return byId.get(id);
49116
49508
  }
49509
+ function presetsIn(category) {
49510
+ return allPresets.filter((p2) => p2.category === category);
49511
+ }
49117
49512
  var presetCatalog = allPresets.map(
49118
49513
  ({ build: _build, ...meta3 }) => meta3
49119
49514
  );
@@ -49129,6 +49524,16 @@ function presetSection(ref, colorTheme) {
49129
49524
  if (!preset || preset.target === "header") return void 0;
49130
49525
  return preset.build(colorTheme ? { colorTheme } : {});
49131
49526
  }
49527
+ var sampleCache = /* @__PURE__ */ new Map();
49528
+ function presetSampleStrings(id) {
49529
+ let set2 = sampleCache.get(id);
49530
+ if (!set2) {
49531
+ const preset = getPreset(id);
49532
+ set2 = preset && preset.target !== "header" ? sectionSampleStrings(preset.build()) : /* @__PURE__ */ new Set();
49533
+ sampleCache.set(id, set2);
49534
+ }
49535
+ return set2;
49536
+ }
49132
49537
 
49133
49538
  // ../blocks/src/index.ts
49134
49539
  var allBlocks = [
@@ -49291,9 +49696,6 @@ ${blockLines.join("\n")}`;
49291
49696
  }
49292
49697
 
49293
49698
  export {
49294
- __require,
49295
- __commonJS,
49296
- __toESM,
49297
49699
  external_exports,
49298
49700
  CROCKFORD_ALPHABET,
49299
49701
  newId,
@@ -49364,9 +49766,13 @@ export {
49364
49766
  copyViolations,
49365
49767
  PRESET_CATEGORIES,
49366
49768
  starterRef,
49769
+ sampleMatches,
49770
+ PLACEHOLDER_RE,
49367
49771
  getPreset,
49772
+ presetsIn,
49368
49773
  presetCatalog,
49369
49774
  presetSection,
49775
+ presetSampleStrings,
49370
49776
  registerAll,
49371
49777
  blocksRegistry,
49372
49778
  generateAgentsMd
@@ -49474,4 +49880,4 @@ lucide/dist/esm/lucide.mjs:
49474
49880
  * See the LICENSE file in the root directory of this source tree.
49475
49881
  *)
49476
49882
  */
49477
- //# sourceMappingURL=chunk-7I6IJI6Z.js.map
49883
+ //# sourceMappingURL=chunk-BW42R6WD.js.map