@omniharmonic/openspace-cli 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/{agents-md-PVK5NBFF.js → agents-md-A4JWPOMG.js} +2 -2
  2. package/dist/bin.js +2 -2
  3. package/dist/{chunk-RG7S2MUH.js → chunk-ANGZMFLZ.js} +139 -24
  4. package/dist/chunk-ANGZMFLZ.js.map +1 -0
  5. package/dist/{chunk-UQXJVMUV.js → chunk-KAJOS2YV.js} +590 -66
  6. package/dist/chunk-KAJOS2YV.js.map +1 -0
  7. package/dist/index.js +2 -2
  8. package/dist/templates/atelier/content/pages/home.json +11 -11
  9. package/dist/templates/beacon/content/collections/news/2026-09-12-heat-map-2026.mdoc +2 -2
  10. package/dist/templates/beacon/content/collections/news/2026-09-30-school-gardens-harvest.mdoc +2 -2
  11. package/dist/templates/beacon/content/collections/news/2026-10-14-planting-season-begins.mdoc +2 -2
  12. package/dist/templates/beacon/content/pages/home.json +1 -1
  13. package/dist/templates/beacon/media/LICENSES.json +33 -0
  14. package/dist/templates/commons/content/pages/home.json +4 -4
  15. package/dist/templates/commons/content/site.json +1 -1
  16. package/dist/templates/commons/media/LICENSES.json +11 -11
  17. package/dist/templates/darkroom/content/collections/work/after-hours.mdoc +7 -4
  18. package/dist/templates/darkroom/content/collections/work/faces-of-the-guild.mdoc +10 -7
  19. package/dist/templates/darkroom/content/collections/work/first-light.mdoc +34 -0
  20. package/dist/templates/darkroom/content/pages/home.json +27 -15
  21. package/dist/templates/darkroom/media/LICENSES.json +82 -49
  22. package/dist/templates/encore/content/pages/home.json +8 -4
  23. package/dist/templates/encore/media/LICENSES.json +11 -0
  24. package/dist/templates/field-notes/content/collections/essays/a-year-of-apples.mdoc +2 -2
  25. package/dist/templates/field-notes/content/collections/essays/in-praise-of-dirt-roads.mdoc +27 -0
  26. package/dist/templates/field-notes/content/collections/essays/learning-a-field.mdoc +2 -2
  27. package/dist/templates/field-notes/content/collections/essays/the-barn-that-leans.mdoc +29 -0
  28. package/dist/templates/field-notes/content/collections/essays/the-wall-builders.mdoc +2 -2
  29. package/dist/templates/field-notes/content/pages/home.json +3 -3
  30. package/dist/templates/field-notes/media/LICENSES.json +55 -33
  31. package/dist/templates/gather/content/pages/home.json +25 -11
  32. package/dist/templates/harbor/content/collections/news/2026-09-15-meet-the-repair-crew.mdoc +2 -2
  33. package/dist/templates/harbor/content/pages/get-involved.json +1 -1
  34. package/dist/templates/harbor/content/pages/home.json +9 -5
  35. package/dist/templates/harbor/content/pages/programs.json +2 -2
  36. package/dist/templates/harbor/media/LICENSES.json +22 -0
  37. package/dist/templates/hearth/content/pages/home.json +17 -22
  38. package/dist/templates/hearth/media/LICENSES.json +22 -11
  39. package/dist/templates/kiln/content/collections/classes/glaze-day-march.mdoc +2 -2
  40. package/dist/templates/kiln/content/collections/classes/hand-building-february.mdoc +2 -2
  41. package/dist/templates/kiln/content/collections/classes/wheel-weekend-january.mdoc +2 -2
  42. package/dist/templates/kiln/content/pages/home.json +5 -5
  43. package/dist/templates/kiln/media/LICENSES.json +55 -0
  44. package/dist/templates/link/content/pages/home.json +35 -31
  45. package/dist/templates/link/media/LICENSES.json +25 -25
  46. package/dist/templates/meadow/content/collections/workshops/breath-and-rest-workshop.mdoc +2 -2
  47. package/dist/templates/meadow/media/LICENSES.json +11 -0
  48. package/dist/templates/orbit/content/pages/home.json +25 -11
  49. package/package.json +6 -6
  50. package/dist/chunk-RG7S2MUH.js.map +0 -1
  51. package/dist/chunk-UQXJVMUV.js.map +0 -1
  52. package/dist/templates/darkroom/content/collections/work/dry-season.mdoc +0 -28
  53. /package/dist/{agents-md-PVK5NBFF.js.map → agents-md-A4JWPOMG.js.map} +0 -0
@@ -24994,6 +24994,18 @@ function withBase(href, basePath = "") {
24994
24994
  if (href === base || href.startsWith(`${base}/`)) return href;
24995
24995
  return `${base}${href}`;
24996
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
+ }
24997
25009
  function sectionFragment(section2) {
24998
25010
  return section2.anchor ?? section2.id;
24999
25011
  }
@@ -25025,7 +25037,7 @@ function resolveLink(link2, opts = {}) {
25025
25037
  }
25026
25038
  case "url": {
25027
25039
  const external = /^https?:\/\//.test(link2.url);
25028
- 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);
25029
25041
  }
25030
25042
  case "email": {
25031
25043
  const subject = link2.subject ? `?subject=${encodeURIComponent(link2.subject)}` : "";
@@ -26996,7 +27008,7 @@ function wrapMark(mark, child, key, basePath) {
26996
27008
  return /* @__PURE__ */ jsx9(
26997
27009
  "a",
26998
27010
  {
26999
- href: withBase(href, basePath),
27011
+ href: internalHref(href, basePath),
27000
27012
  title,
27001
27013
  target: newTab ? "_blank" : void 0,
27002
27014
  rel: newTab ? "noopener" : void 0,
@@ -28175,6 +28187,10 @@ function useImageUrl() {
28175
28187
  height: image3.height
28176
28188
  }).src;
28177
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
+ }
28178
28194
  var sub = (id, part) => `${id}-${part}`;
28179
28195
  var unsplash = (id, alt, width, height) => ({
28180
28196
  src: `https://images.unsplash.com/photo-${id}?w=2400&q=80`,
@@ -28368,9 +28384,70 @@ function useSiteServer() {
28368
28384
  const { doc } = useRenderContext();
28369
28385
  return !doc || doc.config.deploy.target === "cloudflare";
28370
28386
  }
28371
- function UnavailableNotice({ children, hint }) {
28387
+ var ELSEWHERE_PATHS = {
28388
+ store: "/shop-elsewhere",
28389
+ donations: "/give-elsewhere"
28390
+ };
28391
+ var SECONDARY = "secondary";
28392
+ var SOON_COPY = {
28393
+ store: {
28394
+ title: "Online ordering opens here soon.",
28395
+ text: "Have a look around \u2014 you'll be able to order right here very soon.",
28396
+ elsewhere: "Until then, you can order from our current shop.",
28397
+ button: "Order from our current shop",
28398
+ icon: "shopping-bag"
28399
+ },
28400
+ donations: {
28401
+ title: "Online giving opens here soon.",
28402
+ text: "Thank you for wanting to help \u2014 you'll be able to give right here very soon.",
28403
+ elsewhere: "Until then, you can give on our current donation page.",
28404
+ button: "Give on our current page",
28405
+ icon: "hand-heart"
28406
+ },
28407
+ members: {
28408
+ title: "Member sign-in opens here soon.",
28409
+ text: "Members will be able to sign in right here very soon.",
28410
+ elsewhere: "",
28411
+ button: "",
28412
+ icon: "key-round"
28413
+ }
28414
+ };
28415
+ function useElsewhere(kind) {
28416
+ const { doc } = useRenderContext();
28417
+ if (kind === "members") return null;
28418
+ const from = ELSEWHERE_PATHS[kind];
28419
+ const hit = doc?.site.redirects?.find((r2) => r2.from.replace(/\/+$/, "") === from);
28420
+ return hit?.to ?? null;
28421
+ }
28422
+ function OpeningSoon({
28423
+ kind,
28424
+ hint,
28425
+ compact
28426
+ }) {
28427
+ const copy2 = SOON_COPY[kind];
28428
+ const elsewhere = useElsewhere(kind);
28429
+ if (compact)
28430
+ return /* @__PURE__ */ jsxs7(Fragment5, { children: [
28431
+ /* @__PURE__ */ jsx11("p", { className: cx("os-unavailable", "os-soon", "os-soon--compact"), children: copy2.title }),
28432
+ /* @__PURE__ */ jsx11(EditorNotice, { children: hint })
28433
+ ] });
28372
28434
  return /* @__PURE__ */ jsxs7(Fragment5, { children: [
28373
- /* @__PURE__ */ jsx11("p", { className: "os-unavailable", children }),
28435
+ /* @__PURE__ */ jsxs7("div", { className: cx("os-soon", `os-soon--${kind}`), children: [
28436
+ /* @__PURE__ */ jsx11("span", { className: "os-soon__mark", "aria-hidden": "true", children: /* @__PURE__ */ jsx11(Icon, { name: copy2.icon, size: 20 }) }),
28437
+ /* @__PURE__ */ jsxs7("div", { className: "os-soon__body", children: [
28438
+ /* @__PURE__ */ jsx11("p", { className: "os-unavailable os-soon__title", children: copy2.title }),
28439
+ /* @__PURE__ */ jsx11("p", { className: "os-soon__text", children: elsewhere ? copy2.elsewhere : copy2.text }),
28440
+ elsewhere ? /* @__PURE__ */ jsx11(
28441
+ Button,
28442
+ {
28443
+ to: { type: "url", url: elsewhere },
28444
+ role: SECONDARY,
28445
+ className: "os-soon__link",
28446
+ children: copy2.button
28447
+ }
28448
+ ) : null
28449
+ ] })
28450
+ ] }),
28374
28451
  /* @__PURE__ */ jsx11(EditorNotice, { children: hint })
28375
28452
  ] });
28376
28453
  }
@@ -29288,7 +29365,10 @@ var iconListBlock = defineBlock({
29288
29365
  "ul",
29289
29366
  {
29290
29367
  className: cx("os-iconlist", `os-iconlist--${variant}`),
29291
- style: { "--il-cols": fields.columns, "--il-tcols": Math.min(Number(fields.columns), 2) },
29368
+ style: {
29369
+ "--il-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29370
+ "--il-tcols": Math.min(Number(fields.columns), 2)
29371
+ },
29292
29372
  children: fields.items.map((item3, i) => (
29293
29373
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29294
29374
  /* @__PURE__ */ jsxs13("li", { className: "os-iconlist__item", children: [
@@ -29379,7 +29459,10 @@ var columnsBlock = defineBlock({
29379
29459
  "ol",
29380
29460
  {
29381
29461
  className: cx("os-columns", `os-columns--${variant}`),
29382
- style: { "--c-cols": fields.columns, "--c-tcols": Math.min(Number(fields.columns), 2) },
29462
+ style: {
29463
+ "--c-cols": balancedColumns(fields.items.length, Number(fields.columns)),
29464
+ "--c-tcols": Math.min(Number(fields.columns), 2)
29465
+ },
29383
29466
  children: fields.items.map((item3, i) => (
29384
29467
  // biome-ignore lint/suspicious/noArrayIndexKey: list items have no ids
29385
29468
  /* @__PURE__ */ jsxs13("li", { className: "os-columns__item", children: [
@@ -29430,7 +29513,7 @@ var cardCss = `
29430
29513
  @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)}}
29431
29514
  .os-cardblock--overlay{color:var(--os-color-neutral-50);overflow:hidden;border-radius:var(--os-image-radius)}
29432
29515
  .os-cardblock--overlay.has-image>.os-card__media{grid-area:1/1}
29433
- .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)}
29516
+ .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)}
29434
29517
  .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)}
29435
29518
  .os-cardblock--overlay.no-image{padding:var(--os-space-md);background:var(--os-color-accent);color:var(--os-color-accent-text)}
29436
29519
  .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)}
@@ -29766,7 +29849,7 @@ var chartCss = `
29766
29849
 
29767
29850
  // ../blocks/src/blocks/collections.tsx
29768
29851
  import { Fragment as Fragment7, jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
29769
- var SECONDARY = "secondary";
29852
+ var SECONDARY2 = "secondary";
29770
29853
  function itemImage(item3) {
29771
29854
  const fm = item3.frontmatter;
29772
29855
  if (fm.image) return { src: fm.image, alt: fm.imageAlt ?? "" };
@@ -29881,7 +29964,7 @@ var summaryBlock = defineBlock({
29881
29964
  const items = useCollectionQuery(fields.source);
29882
29965
  const columns2 = Number(fields.columns);
29883
29966
  const heading2 = fields.heading ? /* @__PURE__ */ jsx19(HTag, { className: "os-summary__heading os-type-h3", id: sub(id, "h"), children: fields.heading }) : null;
29884
- const footer = fields.linkLabel && fields.link ? /* @__PURE__ */ jsx19("div", { className: "os-summary__foot", children: /* @__PURE__ */ jsx19(Button, { to: fields.link, role: SECONDARY, children: fields.linkLabel }) }) : null;
29967
+ const footer = fields.linkLabel && fields.link ? /* @__PURE__ */ jsx19("div", { className: "os-summary__foot", children: /* @__PURE__ */ jsx19(Button, { to: fields.link, role: SECONDARY2, children: fields.linkLabel }) }) : null;
29885
29968
  if (!items.length)
29886
29969
  return /* @__PURE__ */ jsxs15("div", { className: cx("os-summary", `os-summary--${variant}`), children: [
29887
29970
  heading2,
@@ -29937,11 +30020,18 @@ var summaryBlock = defineBlock({
29937
30020
  footer
29938
30021
  ] });
29939
30022
  }
29940
- return /* @__PURE__ */ jsxs15("div", { className: cx("os-summary", `os-summary--${variant}`), style: { "--s-cols": columns2 }, children: [
29941
- heading2,
29942
- /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
29943
- footer
29944
- ] });
30023
+ return /* @__PURE__ */ jsxs15(
30024
+ "div",
30025
+ {
30026
+ className: cx("os-summary", `os-summary--${variant}`),
30027
+ style: { "--s-cols": balancedColumns(items.length, columns2) },
30028
+ children: [
30029
+ heading2,
30030
+ /* @__PURE__ */ jsx19("ul", { className: "os-summary__items", "aria-labelledby": heading2 ? sub(id, "h") : void 0, children: cards }),
30031
+ footer
30032
+ ]
30033
+ }
30034
+ );
29945
30035
  }
29946
30036
  });
29947
30037
  function firstWeekday(locale) {
@@ -30706,7 +30796,13 @@ var productBlock = defineBlock({
30706
30796
  ),
30707
30797
  price ? /* @__PURE__ */ jsx21("p", { className: "os-product__price", children: /* @__PURE__ */ jsx21(PriceText, { price }) }) : null,
30708
30798
  fields.showDescription && fm.excerpt ? /* @__PURE__ */ jsx21("p", { className: "os-product__desc", children: fm.excerpt }) : null,
30709
- firstAvailable && !canSell ? /* @__PURE__ */ jsx21(UnavailableNotice, { hint: "Checkout needs the Cloudflare hosting option and a connected Stripe account (Settings \u2192 Hosting). Until then visitors see this message instead of \u201CAdd to cart\u201D.", children: "Online ordering isn't open yet." }) : firstAvailable ? /* @__PURE__ */ jsxs17("div", { className: "os-product__buy", children: [
30799
+ firstAvailable && !canSell ? /* @__PURE__ */ jsx21(
30800
+ OpeningSoon,
30801
+ {
30802
+ kind: "store",
30803
+ hint: "Visitors see this friendly \u201Copening soon\u201D note instead of \u201CAdd to cart\u201D until you turn on your shop in Finish setting up (about 10 minutes, free)."
30804
+ }
30805
+ ) : firstAvailable ? /* @__PURE__ */ jsxs17("div", { className: "os-product__buy", children: [
30710
30806
  options.length > 1 ? /* @__PURE__ */ jsxs17("div", { className: "os-field os-product__option", children: [
30711
30807
  /* @__PURE__ */ jsx21("label", { className: "os-label", htmlFor: pickId, children: fm.options?.map((o) => o.name).join(" / ") || "Option" }),
30712
30808
  /* @__PURE__ */ jsx21("select", { className: "os-select", id: pickId, defaultValue: firstAvailable.sku, children: options.map((o) => /* @__PURE__ */ jsxs17(
@@ -30874,7 +30970,13 @@ var donationBlock = defineBlock({
30874
30970
  if (!canCheckout) {
30875
30971
  return /* @__PURE__ */ jsxs17("div", { className: cx("os-donation", `os-donation--${variant}`), children: [
30876
30972
  intro10,
30877
- /* @__PURE__ */ jsx21(UnavailableNotice, { hint: "Donations through Stripe need the Cloudflare hosting option (Settings \u2192 Hosting). Until then visitors see this message \u2014 or choose \u201CLink to another donation page\u201D to take gifts now.", children: "Online giving isn't open yet." })
30973
+ /* @__PURE__ */ jsx21(
30974
+ OpeningSoon,
30975
+ {
30976
+ kind: "donations",
30977
+ hint: "Visitors see this friendly \u201Copening soon\u201D note until you turn on donations in Finish setting up \u2014 or choose \u201CLink to another donation page\u201D to take gifts today."
30978
+ }
30979
+ )
30878
30980
  ] });
30879
30981
  }
30880
30982
  const amountName = "amount";
@@ -31917,7 +32019,10 @@ function Gallery({ id, fields, variant }) {
31917
32019
  "div",
31918
32020
  {
31919
32021
  className: cx("os-gallery", `os-gallery--${variant}`),
31920
- style: { "--g-cols": fields.columns, "--g-tcols": Math.min(Number(fields.columns), 3) },
32022
+ style: {
32023
+ "--g-cols": balancedColumns(fields.images.length, Number(fields.columns)),
32024
+ "--g-tcols": Math.min(Number(fields.columns), 3)
32025
+ },
31921
32026
  "data-os-behavior": behaviors || void 0,
31922
32027
  children: /* @__PURE__ */ jsx27("ul", { className: "os-gallery__items", "aria-label": label3, children: items })
31923
32028
  }
@@ -31945,7 +32050,7 @@ var galleryCss = `
31945
32050
  @container block (max-width:24rem){.os-gallery--masonry .os-gallery__items{columns:1}}
31946
32051
 
31947
32052
  .os-gallery--strips .os-gallery__items{--row-h:6.5rem;display:flex;flex-wrap:wrap;gap:var(--os-space-2xs)}
31948
- .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:999}
32053
+ .os-gallery--strips .os-gallery__items::after{content:"";flex-grow:1.5}
31949
32054
  .os-gallery--strips .os-gallery__item{flex:var(--ar,1.5) 1 calc(var(--ar,1.5) * var(--row-h));min-width:0}
31950
32055
  .os-gallery--strips .os-img{aspect-ratio:var(--ar,1.5)}
31951
32056
  @container block (min-width:30rem){.os-gallery--strips .os-gallery__items{--row-h:10rem}}
@@ -32396,6 +32501,9 @@ var linkListCss = `
32396
32501
 
32397
32502
  // ../blocks/src/blocks/logo-strip.tsx
32398
32503
  import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
32504
+ function narrowColumns(n) {
32505
+ return n % 2 !== 0 && n % 3 === 0 ? 3 : Math.min(2, n);
32506
+ }
32399
32507
  var logoStripBlock = defineBlock({
32400
32508
  type: "logo-strip",
32401
32509
  version: 1,
@@ -32451,45 +32559,61 @@ var logoStripBlock = defineBlock({
32451
32559
  });
32452
32560
  const label3 = fields.label ? /* @__PURE__ */ jsx31("p", { className: "os-logos__label", children: fields.label }) : null;
32453
32561
  const cls = cx("os-logos", `os-logos--${variant}`, fields.monochrome && "is-mono");
32562
+ const n = fields.logos.length;
32563
+ const columns2 = {
32564
+ "--lo-s": narrowColumns(n),
32565
+ "--lo-m": balancedColumns(n, 4),
32566
+ "--lo-l": balancedColumns(n, 6)
32567
+ };
32454
32568
  if (variant === "marquee") {
32455
32569
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32456
32570
  label3,
32457
- /* @__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 }) })
32571
+ /* @__PURE__ */ jsx31("div", { className: "os-marquee", "data-os-behavior": "marquee", "data-os-speed": "30", children: /* @__PURE__ */ jsx31(
32572
+ "ul",
32573
+ {
32574
+ className: "os-marquee__track os-logos__list",
32575
+ "aria-label": fields.label || "Logos",
32576
+ style: columns2,
32577
+ children: items
32578
+ }
32579
+ ) })
32458
32580
  ] });
32459
32581
  }
32460
32582
  return /* @__PURE__ */ jsxs25("div", { className: cls, children: [
32461
32583
  label3,
32462
- /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", children: items })
32584
+ /* @__PURE__ */ jsx31("ul", { className: "os-logos__list", "aria-label": fields.label || "Logos", style: columns2, children: items })
32463
32585
  ] });
32464
32586
  }
32465
32587
  });
32466
32588
  var logoStripCss = `
32467
32589
  .os-logos{display:grid;gap:var(--os-space-sm)}
32468
32590
  .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}
32469
- .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}
32470
- .os-logos__item{display:flex;align-items:center;justify-content:center;min-height:3rem}
32591
+ .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}
32592
+ @container block (min-width:40rem){.os-logos__list{--lo-cols:var(--lo-m,4)}}
32593
+ @container block (min-width:64rem){.os-logos__list{--lo-cols:var(--lo-l,6)}}
32594
+ .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}
32471
32595
  .os-logos__link{display:flex;color:inherit;text-decoration:none}
32472
32596
  .os-logos__img{width:auto;height:2.25rem;max-width:9rem;aspect-ratio:auto;background:none;border-radius:0;padding:0;clip-path:none}
32473
32597
  .os-logos__img>picture{background:none}
32474
32598
  .os-logos__img .os-img__img{width:auto;max-width:100%;height:100%;object-fit:contain;filter:none;mix-blend-mode:normal}
32475
32599
  .os-logos__img::after{display:none}
32476
- .os-logos__word{display:block;color:var(--os-color-heading);white-space:nowrap;line-height:1;font-size:1.25rem}
32600
+ .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}
32477
32601
  .os-logos__word--0{font-family:var(--os-font-heading);font-weight:var(--os-font-weight-heading);font-style:italic;font-size:1.4rem}
32478
32602
  .os-logos__word--1{font-family:var(--os-font-body);font-weight:600;letter-spacing:0.18em;text-transform:uppercase;font-size:0.95rem}
32479
32603
  .os-logos__word--2{font-family:var(--os-font-heading);font-weight:400;letter-spacing:-0.01em;font-size:1.5rem}
32480
32604
  .os-logos__word--3{font-family:var(--os-font-body);font-weight:800;letter-spacing:-0.03em;font-size:1.3rem}
32481
- @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}}
32482
- .os-logos--grid .os-logos__word{white-space:normal;text-align:center;text-wrap:balance}
32605
+ @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}}
32483
32606
  .os-logos.is-mono .os-logos__item{opacity:0.72;transition:opacity var(--os-motion-duration-base) var(--os-motion-ease)}
32484
32607
  .os-logos.is-mono .os-logos__img .os-img__img{filter:grayscale(1)}
32485
32608
  .os-logos.is-mono .os-logos__item:hover{opacity:1}
32486
32609
  .os-logos.is-mono .os-logos__item:hover .os-img__img{filter:none}
32487
- .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)}
32488
- @container block (min-width:40rem){.os-logos--grid .os-logos__list{grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}}
32489
- .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)}
32490
- .os-logos--marquee .os-marquee{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32491
- .os-logos--marquee .os-marquee__track{justify-content:center}
32492
- .os-logos--marquee .os-marquee.is-running .os-marquee__track{justify-content:flex-start;padding-inline-end:var(--os-space-lg)}
32610
+ .os-logos--grid .os-logos__list{gap:0;padding:1px}
32611
+ .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)}
32612
+ .os-logos--marquee .os-marquee.is-running{mask-image:linear-gradient(90deg,transparent,currentColor 8%,currentColor 92%,transparent)}
32613
+ .os-logos--marquee .os-marquee__track{justify-content:center;gap:var(--os-space-sm) 0}
32614
+ .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)}
32615
+ .os-logos--marquee .os-marquee.is-running .os-logos__item{flex:0 0 auto;padding-inline:0}
32616
+ .os-logos--marquee .os-marquee.is-running .os-logos__word{white-space:nowrap}
32493
32617
  `;
32494
32618
 
32495
32619
  // ../blocks/src/blocks/map.tsx
@@ -32828,7 +32952,14 @@ var memberLoginBlock = defineBlock({
32828
32952
  const { hub, siteId } = useHub();
32829
32953
  const source = useSourcePath();
32830
32954
  const canSignIn = useSiteServer();
32831
- const unavailable = /* @__PURE__ */ jsx34(UnavailableNotice, { hint: "Member sign-in needs the Cloudflare hosting option (Settings \u2192 Hosting). Until then visitors see this message instead of a sign-in form.", children: "Member sign-in isn't open yet." });
32955
+ const unavailable = /* @__PURE__ */ jsx34(
32956
+ OpeningSoon,
32957
+ {
32958
+ kind: "members",
32959
+ compact: variant !== "form",
32960
+ hint: "Visitors see this friendly \u201Copening soon\u201D note instead of a sign-in form until you turn on member sign-in in Finish setting up."
32961
+ }
32962
+ );
32832
32963
  const heading2 = fields.heading ? /* @__PURE__ */ jsx34(
32833
32964
  HTag,
32834
32965
  {
@@ -34134,7 +34265,7 @@ var socialCss = `
34134
34265
 
34135
34266
  // ../blocks/src/blocks/social-feed.tsx
34136
34267
  import { jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
34137
- var SECONDARY2 = "secondary";
34268
+ var SECONDARY3 = "secondary";
34138
34269
  var NETWORKS = ["instagram", "bluesky", "mastodon", "pinterest", "tiktok", "youtube"];
34139
34270
  function profileUrl(network, handle) {
34140
34271
  const h = handle.trim().replace(/^@/, "");
@@ -34216,7 +34347,7 @@ var socialFeedBlock = defineBlock({
34216
34347
  Button,
34217
34348
  {
34218
34349
  to: { type: "url", url: profile, newTab: true },
34219
- role: SECONDARY2,
34350
+ role: SECONDARY3,
34220
34351
  className: "os-feed__follow",
34221
34352
  children: [
34222
34353
  /* @__PURE__ */ jsx42(SocialIcon, { network }),
@@ -34412,10 +34543,13 @@ var tableBlock = defineBlock({
34412
34543
  const cols = fields.columns;
34413
34544
  const width = cols.length + 1;
34414
34545
  return /* @__PURE__ */ jsxs37("div", { className: cx("os-table", `os-table--${variant}`), children: [
34415
- /* @__PURE__ */ jsx43(
34546
+ /* @__PURE__ */ jsx43("p", { className: "os-table__hint", "aria-hidden": "true", children: "Swipe sideways to see every column \u2192" }),
34547
+ /* @__PURE__ */ jsx43("div", { className: "os-table__frame", children: /* @__PURE__ */ jsx43(
34416
34548
  "div",
34417
34549
  {
34418
34550
  className: "os-table__scroll",
34551
+ role: "group",
34552
+ "aria-label": `${fields.caption || "Comparison table"} (scrolls sideways on small screens)`,
34419
34553
  tabIndex: 0,
34420
34554
  children: /* @__PURE__ */ jsxs37("table", { className: "os-table__table", style: { "--cols": cols.length }, children: [
34421
34555
  fields.caption ? /* @__PURE__ */ jsx43("caption", { className: "os-table__caption", children: fields.caption }) : null,
@@ -34455,7 +34589,7 @@ var tableBlock = defineBlock({
34455
34589
  ) })
34456
34590
  ] })
34457
34591
  }
34458
- ),
34592
+ ) }),
34459
34593
  fields.note ? /* @__PURE__ */ jsx43("p", { className: "os-table__note", children: fields.note }) : null
34460
34594
  ] });
34461
34595
  }
@@ -34464,6 +34598,13 @@ var tableCss = `
34464
34598
  .os-table{display:grid;gap:var(--os-space-xs);min-width:0}
34465
34599
  .os-table__scroll{overflow-x:auto;min-width:0;border-radius:var(--os-radius-card);overscroll-behavior-x:contain}
34466
34600
  .os-table__scroll:focus-visible{outline:2px solid var(--os-color-focus);outline-offset:2px}
34601
+ .os-table__frame{position:relative;min-width:0;timeline-scope:--os-table-x}
34602
+ .os-table__frame>.os-table__scroll{scroll-timeline:--os-table-x inline}
34603
+ .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}
34604
+ @supports (animation-timeline:scroll()){.os-table__frame::after{animation:os-table-cue linear both;animation-timeline:--os-table-x}}
34605
+ @keyframes os-table-cue{0%,90%{opacity:1}100%{opacity:0}}
34606
+ .os-table__hint{display:none;margin:0;font-size:var(--os-type-small-font-size);color:var(--os-color-text-muted)}
34607
+ @media (max-width:40em){.os-table__hint{display:block}}
34467
34608
  .os-table__table{width:100%;min-width:calc(10rem + var(--cols,3) * 7.5rem);border-collapse:collapse;font-variant-numeric:tabular-nums}
34468
34609
  .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)}
34469
34610
  .os-table th,.os-table td{padding:0.85em 1em;text-align:center;vertical-align:middle;border-bottom:1px solid var(--os-color-border)}
@@ -34658,7 +34799,10 @@ var teamBlock = defineBlock({
34658
34799
  "ul",
34659
34800
  {
34660
34801
  className: cx("os-team", `os-team--${variant}`),
34661
- style: { "--t-cols": fields.columns, "--t-tcols": Math.min(Number(fields.columns), 2) },
34802
+ style: {
34803
+ "--t-cols": balancedColumns(fields.people.length, Number(fields.columns)),
34804
+ "--t-tcols": Math.min(Number(fields.columns), 2)
34805
+ },
34662
34806
  children: fields.people.map((person2, i) => {
34663
34807
  const name = person2.link ? /* @__PURE__ */ jsx45(Link, { to: person2.link, className: "os-team__link", children: person2.name }) : person2.name;
34664
34808
  return (
@@ -34699,7 +34843,7 @@ var teamCss = `
34699
34843
  .os-team--list{grid-template-columns:minmax(0,1fr);gap:var(--os-space-md)}
34700
34844
  @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}}
34701
34845
  .os-team--list .os-team__person+.os-team__person{padding-top:var(--os-space-md);border-top:1px solid var(--os-color-border)}
34702
- .os-team--circles{grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));text-align:center}
34846
+ .os-team--circles{grid-template-columns:repeat(auto-fit,minmax(9rem,11rem));justify-content:center;text-align:center}
34703
34847
  .os-team--circles .os-team__photo{width:min(100%,9rem);margin-inline:auto}
34704
34848
  `;
34705
34849
 
@@ -35049,6 +35193,13 @@ ${[
35049
35193
  commerceCss,
35050
35194
  membersCss,
35051
35195
  `.os-unavailable{margin:0;padding:var(--os-space-xs) var(--os-space-sm);border-inline-start:3px solid var(--os-color-text-muted);background:var(--os-color-surface);border-radius:var(--os-radius-sm);color:var(--os-color-text);max-inline-size:var(--os-measure)}`,
35196
+ `.os-soon{display:flex;gap:var(--os-space-sm);align-items:flex-start;padding:var(--os-space-md);border-radius:var(--os-radius-card);background:color-mix(in srgb,var(--os-color-accent) 7%,var(--os-color-surface));border:1px solid color-mix(in srgb,var(--os-color-accent) 24%,transparent);color:var(--os-color-text);max-inline-size:var(--os-measure);text-align:start}`,
35197
+ `.os-soon__mark{flex:none;display:grid;place-items:center;inline-size:2.5rem;block-size:2.5rem;border-radius:var(--os-radius-full);background:var(--os-color-accent);color:var(--os-color-accent-text)}`,
35198
+ `.os-soon__body{min-inline-size:0}`,
35199
+ `.os-soon .os-soon__title{margin:0;padding:0;border:0;background:none;font-family:var(--os-type-h4-font-family);font-weight:var(--os-type-h4-font-weight);letter-spacing:var(--os-type-h4-letter-spacing);color:var(--os-color-heading)}`,
35200
+ `.os-soon__text{margin:var(--os-space-3xs) 0 0;color:var(--os-color-text-muted);font-size:var(--os-type-small-font-size);line-height:var(--os-type-small-line-height)}`,
35201
+ `.os-soon__link{margin-block-start:var(--os-space-sm)}`,
35202
+ `.os-soon.os-soon--compact{display:block;padding:var(--os-space-xs) var(--os-space-sm);border-radius:var(--os-radius-full);font-weight:var(--os-type-h4-font-weight)}`,
35052
35203
  `.os-empty{margin:0;padding:var(--os-space-xs) var(--os-space-sm);border:1px dashed var(--os-color-text-muted);border-radius:var(--os-radius-sm);font-size:var(--os-type-small-font-size);color:var(--os-color-text-muted)}`
35053
35204
  ].map((s) => s.trim()).join("\n")}
35054
35205
  }
@@ -35712,6 +35863,171 @@ var PHOTOS = {
35712
35863
  4683,
35713
35864
  "A city street at night strung with red lanterns"
35714
35865
  ),
35866
+ // people at work (portrait & editorial portfolios)
35867
+ bakerApron: p(
35868
+ "1496811425508-6d7ebb7ff32c",
35869
+ 4918,
35870
+ 3376,
35871
+ "A young woman in a white shirt, bow tie and brown apron looking into the camera"
35872
+ ),
35873
+ bakerOven: p(
35874
+ "1772758632331-56fcdb6fd45b",
35875
+ 5707,
35876
+ 3805,
35877
+ "A smiling baker in a hairnet sliding bread from a brick oven",
35878
+ [0.3, 0.35]
35879
+ ),
35880
+ bakerKitchen: p(
35881
+ "1783768204400-7e6f402f3738",
35882
+ 3011,
35883
+ 4517,
35884
+ "A black-and-white photo of a woman kneading dough at a kitchen table"
35885
+ ),
35886
+ shopkeeper: p(
35887
+ "1748640858029-53c840ef5a1b",
35888
+ 3685,
35889
+ 5528,
35890
+ "A shopkeeper resting his chin on his hand behind a counter of flatbreads",
35891
+ [0.55, 0.55]
35892
+ ),
35893
+ woodCarver: p(
35894
+ "1776728016975-45f2197c0d2a",
35895
+ 3598,
35896
+ 5397,
35897
+ "A black-and-white portrait of a bearded wood carver holding his tools and a figure",
35898
+ [0.5, 0.3]
35899
+ ),
35900
+ makerShop: p(
35901
+ "1713652425093-47778c267769",
35902
+ 5716,
35903
+ 4912,
35904
+ "An older craftsman with his arms crossed in a cluttered workshop"
35905
+ ),
35906
+ woodworker: p(
35907
+ "1631396327810-0299385c06bf",
35908
+ 4e3,
35909
+ 6e3,
35910
+ "A black-and-white photo of a woodworker shaping a block at his bench"
35911
+ ),
35912
+ workshopNight: p(
35913
+ "1660796334912-8ce8e9c2cff0",
35914
+ 5391,
35915
+ 3556,
35916
+ "A man working late at a bench in a dim workshop under a single lamp",
35917
+ [0.55, 0.5]
35918
+ ),
35919
+ treePlanting: p(
35920
+ "1598335624134-5bceb5de202d",
35921
+ 4480,
35922
+ 6720,
35923
+ "Neighbours kneeling to plant a young tree together"
35924
+ ),
35925
+ chardHarvest: p(
35926
+ "1529007328922-d323f83de273",
35927
+ 5760,
35928
+ 3840,
35929
+ "A child holding an armful of freshly picked chard"
35930
+ ),
35931
+ shadedStreet: p(
35932
+ "1790026988616-8a01ef4a6709",
35933
+ 3356,
35934
+ 5043,
35935
+ "A quiet street under a canopy of tall plane trees"
35936
+ ),
35937
+ synthStage: p(
35938
+ "1561447920-ee278fe828a2",
35939
+ 4852,
35940
+ 2393,
35941
+ "A keyboard player on a stage washed in violet haze",
35942
+ [0.42, 0.55]
35943
+ ),
35944
+ repairVolunteer: p(
35945
+ "1505798577917-a65157d3320a",
35946
+ 5472,
35947
+ 3648,
35948
+ "An older volunteer in a cap cutting trim with a miter saw indoors",
35949
+ [0.45, 0.5]
35950
+ ),
35951
+ pastaCutting: p(
35952
+ "1447279506476-3faec8071eee",
35953
+ 6e3,
35954
+ 4e3,
35955
+ "Floury hands lifting fresh ribbons of pasta from a cutter",
35956
+ [0.65, 0.45]
35957
+ ),
35958
+ pastaRagu: p(
35959
+ "1600803907087-f56d462fd26b",
35960
+ 4472,
35961
+ 7952,
35962
+ "A dark bowl of pasta with slow-cooked rag\xF9 and herbs",
35963
+ [0.5, 0.6]
35964
+ ),
35965
+ potterWheel: p(
35966
+ "1609881583302-61548332039c",
35967
+ 4932,
35968
+ 4865,
35969
+ "A potter in a clay-spattered apron throwing a pot on the wheel"
35970
+ ),
35971
+ greenwareShelves: p(
35972
+ "1610206349499-c932c3b3aacb",
35973
+ 4337,
35974
+ 2891,
35975
+ "Studio shelves stacked with cups and bowls waiting to be fired"
35976
+ ),
35977
+ wheelLesson: p(
35978
+ "1637548580984-10c48d61b168",
35979
+ 3264,
35980
+ 2448,
35981
+ "A teacher's hands guiding a student's on a spinning pottery wheel"
35982
+ ),
35983
+ potteryClass: p(
35984
+ "1682868067843-11fbc221174a",
35985
+ 2784,
35986
+ 4176,
35987
+ "Students hand-building pots around a table in a bright studio"
35988
+ ),
35989
+ glazePainting: p(
35990
+ "1657395348373-28a0cb49804b",
35991
+ 6e3,
35992
+ 4e3,
35993
+ "A brush painting a butterfly in glaze on a white plate"
35994
+ ),
35995
+ stoneWall: p(
35996
+ "1611950318733-51d05def21ee",
35997
+ 4032,
35998
+ 3024,
35999
+ "An old dry-stone wall in the woods under early snow"
36000
+ ),
36001
+ appleTree: p(
36002
+ "1789448720981-96879056796d",
36003
+ 12032,
36004
+ 8018,
36005
+ "A gnarled old apple tree in a grassy field, in black and white"
36006
+ ),
36007
+ hayField: p(
36008
+ "1676903761134-a7806cd2f26d",
36009
+ 3600,
36010
+ 2400,
36011
+ "Hay bales in a green field below a barn and a wooded hill in Vermont"
36012
+ ),
36013
+ oldBarn: p(
36014
+ "1743351831171-a4317f076b2f",
36015
+ 5370,
36016
+ 2679,
36017
+ "A weathered barn with a rusted roof against autumn hills"
36018
+ ),
36019
+ dirtRoad: p(
36020
+ "1670967595704-f5f38475bb01",
36021
+ 6e3,
36022
+ 4e3,
36023
+ "A dirt road running between fields and forest under a grey sky"
36024
+ ),
36025
+ autumnFarm: p(
36026
+ "1744488340684-2b86590c15dd",
36027
+ 4799,
36028
+ 2673,
36029
+ "A small farm with a barn among autumn trees below a mountain"
36030
+ ),
35715
36031
  dunes: p("1542401886-65d6c61db217", 5835, 3890, "Rippled orange sand dunes under a hazy sky"),
35716
36032
  canyon: p(
35717
36033
  "1509316785289-025f5b846b35",
@@ -36551,6 +36867,128 @@ var PHOTO_CREDITS = {
36551
36867
  "marckleen",
36552
36868
  "a-person-walking-down-a-street-with-red-decorations-e1f9yY-DzoY"
36553
36869
  ],
36870
+ "1496811425508-6d7ebb7ff32c": [
36871
+ "Steven Cleghorn",
36872
+ "buliamti",
36873
+ "woman-wearing-brown-apron-psomVjxL29Y"
36874
+ ],
36875
+ "1772758632331-56fcdb6fd45b": [
36876
+ "Yasin Onus",
36877
+ "yasinonus",
36878
+ "baker-smiling-while-preparing-food-in-a-brick-oven-yS8tQoatvmM"
36879
+ ],
36880
+ "1783768204400-7e6f402f3738": [
36881
+ "Lisa Marie Theck",
36882
+ "lisa_marie_theck",
36883
+ "a-woman-preparing-food-in-a-rustic-kitchen-JzKQSxf4-4Q"
36884
+ ],
36885
+ "1748640858029-53c840ef5a1b": [
36886
+ "Rawan Yasser",
36887
+ "rawanyasser",
36888
+ "a-man-leans-on-a-counter-in-his-shop-1rW3RIxLu7E"
36889
+ ],
36890
+ "1776728016975-45f2197c0d2a": [
36891
+ "Tim Mossholder",
36892
+ "timmossholder",
36893
+ "elderly-craftsman-with-beard-holding-carving-tools-and-figurine-E5SfRlzUh2Q"
36894
+ ],
36895
+ "1713652425093-47778c267769": [
36896
+ "Andrew Heald",
36897
+ "aheald25",
36898
+ "a-man-in-an-old-fashioned-shop-with-his-arms-crossed-WV6tnAij3rU"
36899
+ ],
36900
+ "1631396327810-0299385c06bf": [
36901
+ "Bailey Alexander",
36902
+ "baileyal3xander",
36903
+ "a-man-is-working-on-a-piece-of-wood-UJfNwtQ7zAs"
36904
+ ],
36905
+ "1660796334912-8ce8e9c2cff0": [
36906
+ "Alex Gruber",
36907
+ "alex_gruber",
36908
+ "a-man-working-in-a-shop-rgSLzr82Kd8"
36909
+ ],
36910
+ "1598335624134-5bceb5de202d": [
36911
+ "Eyoel Kahssay",
36912
+ "eyoelkahssay",
36913
+ "woman-and-child-planting-tree-FyCjvyPG9Pg"
36914
+ ],
36915
+ "1529007328922-d323f83de273": [
36916
+ "Johnny McClung",
36917
+ "johnnymcclung",
36918
+ "person-holding-bok-choy-0aC-3Gt7jF4"
36919
+ ],
36920
+ "1790026988616-8a01ef4a6709": [
36921
+ "Jakub Tomasik",
36922
+ "jakubeq",
36923
+ "street-lined-with-plane-trees-Az4s1u1pyLs"
36924
+ ],
36925
+ "1561447920-ee278fe828a2": ["dreokt", "dreokt", "man-playing-electronic-keyboard-h5DPNz9kMZA"],
36926
+ "1505798577917-a65157d3320a": [
36927
+ "Annie Gray",
36928
+ "anniegray",
36929
+ "man-standing-infront-of-miter-saw-WEWTGkPUVT0"
36930
+ ],
36931
+ "1447279506476-3faec8071eee": [
36932
+ "Jorge Zapata",
36933
+ "jorgezapatag",
36934
+ "person-sheeting-dough-4nXkhLCrkLo"
36935
+ ],
36936
+ "1600803907087-f56d462fd26b": [
36937
+ "Emanuel Ekstr\xF6m",
36938
+ "emanuelekstrom",
36939
+ "pasta-dish-on-white-ceramic-bowl-KJOUnsGXq58"
36940
+ ],
36941
+ "1609881583302-61548332039c": [
36942
+ "Earl Wilcox",
36943
+ "earl_plannerzone",
36944
+ "person-in-blue-denim-jeans-making-clay-pot-7ZK_CuHroq4"
36945
+ ],
36946
+ "1610206349499-c932c3b3aacb": [
36947
+ "Manki Kim",
36948
+ "kimdonkey",
36949
+ "white-ceramic-teacup-on-brown-wooden-shelf-ZOeyUJB6t_Y"
36950
+ ],
36951
+ "1637548580984-10c48d61b168": [
36952
+ "Lindsey Elsey",
36953
+ "artsmarts",
36954
+ "a-group-of-people-working-on-a-pottery-wheel-fmuykMXH-dY"
36955
+ ],
36956
+ "1682868067843-11fbc221174a": [
36957
+ "Sander Breneman",
36958
+ "brenesan",
36959
+ "a-group-of-women-sitting-at-a-table-working-on-pottery-kJiPUr1KQSE"
36960
+ ],
36961
+ "1657395348373-28a0cb49804b": ["Grant Durr", "grant_durr", "a-child-painting-a-bowl-GjpUt15XbPE"],
36962
+ "1611950318733-51d05def21ee": [
36963
+ "natalie bowers",
36964
+ "nbowers",
36965
+ "gray-rocks-on-brown-soil-khAcUpojwhA"
36966
+ ],
36967
+ "1789448720981-96879056796d": [
36968
+ "Julian Kraus",
36969
+ "juliankraus",
36970
+ "gnarled-apple-tree-in-grassy-field-b3pCgNT1fn0"
36971
+ ],
36972
+ "1676903761134-a7806cd2f26d": [
36973
+ "David Trinks",
36974
+ "dtrinksrph",
36975
+ "a-large-field-with-hay-bales-in-the-foreground-and-a-barn-in-the-Rf5SsbLmFmc"
36976
+ ],
36977
+ "1743351831171-a4317f076b2f": [
36978
+ "LXS Photography",
36979
+ "lxsphotography",
36980
+ "old-weathered-barn-against-autumn-foliage-i7jff9hPR-U"
36981
+ ],
36982
+ "1670967595704-f5f38475bb01": [
36983
+ "Giuli Canderle",
36984
+ "giulicanderle",
36985
+ "a-dirt-road-in-the-middle-of-a-forest-G2k-BQWJ3DM"
36986
+ ],
36987
+ "1744488340684-2b86590c15dd": [
36988
+ "LXS Photography",
36989
+ "lxsphotography",
36990
+ "autumn-farm-scene-with-a-barn-and-covered-bridge-1PnkD5YV6Sw"
36991
+ ],
36554
36992
  "1542401886-65d6c61db217": [
36555
36993
  "Wolfgang Hasselmann",
36556
36994
  "wolfgang_hasselmann",
@@ -38206,7 +38644,7 @@ var ctaPresets = [
38206
38644
  "Sort donations, drive deliveries or cook with us on Saturdays. Training and lunch are on us."
38207
38645
  )
38208
38646
  ],
38209
- { style: { colorTheme: c3.theme, padding: { d: "xl", m: "md" } } }
38647
+ { style: { colorTheme: raised(c3.theme), padding: { d: "xl", m: "md" } } }
38210
38648
  );
38211
38649
  const cta = button2("Sign up to volunteer", c3.primary);
38212
38650
  return {
@@ -38859,20 +39297,26 @@ var ctaMorePresets = [
38859
39297
  definePreset({
38860
39298
  category: "cta",
38861
39299
  name: "card-centered",
38862
- label: "Card on tinted band",
38863
- description: "A raised card with headline, text and two actions, centred on a tinted section.",
39300
+ label: "Centred with accent rule",
39301
+ description: "A short accent rule over a centred headline, a line of text and two actions, on a tinted band.",
38864
39302
  copy: [headline4, copy.body(6, 35)],
38865
39303
  defaultTheme: "light-accent",
38866
- tags: ["card", "centered", "panel"],
39304
+ tags: ["centered", "rule", "band"],
38867
39305
  links: { primary: "/signup", secondary: "/demo" },
38868
39306
  ai: {
38869
- purpose: "Frames the final ask as a distinct, tidy panel.",
39307
+ purpose: "A calm, centred final ask with everything \u2014 words and both actions \u2014 in one group.",
38870
39308
  whenToUse: "Software, courses and memberships.",
38871
39309
  avoid: CTA_AVOID2
38872
39310
  },
38873
39311
  make: (c3) => ({
38874
- layout: stack({ width: "content", gap: "lg" }),
39312
+ layout: stack({ width: "content", gap: "md" }),
39313
+ padding: { d: "2xl", m: "xl" },
38875
39314
  blocks: [
39315
+ make2(
39316
+ lineBlock,
39317
+ { thickness: "regular", length: "short", color: "accent" },
39318
+ { variant: "solid", style: { align: { d: "center", m: "center" } } }
39319
+ ),
38876
39320
  text2(
38877
39321
  [
38878
39322
  rt.h(2, "Try Frontdesk free for 30 days", "h2"),
@@ -38880,7 +39324,7 @@ var ctaMorePresets = [
38880
39324
  "Set up your booking page in an afternoon. No card needed, and we'll move your clients across for you."
38881
39325
  )
38882
39326
  ],
38883
- { align: "center", style: { ...panel("light", "xl"), border: "subtle" } }
39327
+ { align: "center" }
38884
39328
  ),
38885
39329
  button2("Start your free trial", c3.primary, {
38886
39330
  align: "center",
@@ -41615,7 +42059,7 @@ var featuresMorePresets = [
41615
42059
  "Materials \u2014 Solid wood, oiled not lacquered",
41616
42060
  "Oak and ash from managed forests, finished with oil you can renew yourself. Scratches sand out instead of chipping."
41617
42061
  );
41618
- const d = image2(photo2("stool", 640));
42062
+ const d = image2(photo2("woodworker", 640));
41619
42063
  const dt = row2(
41620
42064
  "Aftercare \u2014 We come back every year",
41621
42065
  "An annual visit to oil worktops, adjust hinges and fix anything that's bothering you, for as long as you own the kitchen."
@@ -42151,7 +42595,7 @@ var galleryPresets = [
42151
42595
  label: "Masonry wall",
42152
42596
  description: "Photos at their natural proportions in staggered columns.",
42153
42597
  copy: [headline9],
42154
- images: [{ slot: "photos", aspect: "original", count: 7 }],
42598
+ images: [{ slot: "photos", aspect: "original", count: 6 }],
42155
42599
  defaultTheme: "light",
42156
42600
  tags: ["masonry", "portfolio"],
42157
42601
  ai: {
@@ -42171,8 +42615,7 @@ var galleryPresets = [
42171
42615
  "portraitTheo",
42172
42616
  "weddingAisle",
42173
42617
  "portraitAna",
42174
- "friendsSunset",
42175
- "portraitSam"
42618
+ "friendsSunset"
42176
42619
  ],
42177
42620
  460
42178
42621
  ),
@@ -42502,7 +42945,7 @@ var galleryMorePresets = [
42502
42945
  layout: stack({ width: "full", gap: "lg" }),
42503
42946
  blocks: [
42504
42947
  heading("Around the lodge", { eyebrow: "Gallery" }),
42505
- gallery2([["canyon"], ["dunes"], ["valley"], ["mountainLake"], ["road"]], 900, {
42948
+ gallery2([["mountainLake"], ["lake"], ["valley"], ["cliffs"], ["hills"]], 900, {
42506
42949
  variant: "carousel",
42507
42950
  aspect: "3:2"
42508
42951
  })
@@ -43417,7 +43860,7 @@ var heroMorePresets = [
43417
43860
  second: { label: "Book a design visit", link: c3.secondary }
43418
43861
  });
43419
43862
  const a = image2(photo2("kitchen", 560));
43420
- const b = image2(photo2("stool", 360));
43863
+ const b = image2(photo2("woodworker", 360));
43421
43864
  const proof = stats([["212", "Kitchens fitted"]], {
43422
43865
  variant: "large",
43423
43866
  style: panel("dark-accent")
@@ -44872,19 +45315,19 @@ var teamPresets = [
44872
45315
  make: () => ({
44873
45316
  layout: stack({ gap: "xl" }),
44874
45317
  blocks: [
44875
- heading("The people in the kitchen", {
45318
+ heading("The people behind the work", {
44876
45319
  eyebrow: "Our team",
44877
- sub: "A small crew who've cooked together for years \u2014 and still argue about the best tomato."
45320
+ sub: "A small team who've worked together for years \u2014 and still care about every detail."
44878
45321
  }),
44879
45322
  make2(
44880
45323
  teamBlock,
44881
45324
  {
44882
45325
  columns: "4",
44883
45326
  people: [
44884
- person("Elena Ruiz", "Chef & owner", "portraitMaya"),
44885
- person("Sam Okoro", "Head of pastry", "portraitSam"),
44886
- person("Clara Jensen", "Front of house", "portraitClara"),
44887
- person("Theo Marsh", "Sommelier", "portraitTheo")
45327
+ person("Elena Ruiz", "Founder", "portraitMaya"),
45328
+ person("Sam Okoro", "Lead", "portraitSam"),
45329
+ person("Clara Jensen", "Client care", "portraitClara"),
45330
+ person("Theo Marsh", "Operations", "portraitTheo")
44888
45331
  ]
44889
45332
  },
44890
45333
  { variant: "grid" }
@@ -47501,7 +47944,7 @@ var servicesPresets = [
47501
47944
  linkLabel: "About planting"
47502
47945
  },
47503
47946
  {
47504
- image: photo2("porchHouse", 400, "4:5"),
47947
+ image: photo2("urbanGarden", 400, "4:5"),
47505
47948
  heading: "Full garden builds",
47506
47949
  body: rt.doc(
47507
47950
  rt.p(
@@ -48317,25 +48760,28 @@ var testimonialsPresets = [
48317
48760
  avoid: AVOID15
48318
48761
  },
48319
48762
  make: () => {
48320
- const h = heading("Kind words from our regulars", { eyebrow: "Reviews", align: "center" });
48763
+ const h = heading("Kind words from the people we work with", {
48764
+ eyebrow: "Reviews",
48765
+ align: "center"
48766
+ });
48321
48767
  const a = testimonial2(
48322
- "The sourdough is the best I've had outside San Francisco, and the staff remember my order.",
48768
+ "Clear, friendly and on time from the first email to the last detail. We felt looked after throughout.",
48323
48769
  "Marcus Webb",
48324
- "Regular since 2019",
48770
+ "Customer since 2019",
48325
48771
  "portraitDaniel",
48326
48772
  { rating: 5 }
48327
48773
  );
48328
48774
  const b = testimonial2(
48329
- "We ordered our wedding cake here and people are still talking about it a year later.",
48775
+ "They listened properly, explained every option and delivered exactly what we hoped for \u2014 a year later we still recommend them.",
48330
48776
  "Hana Okafor",
48331
- "Wedding cake, June",
48777
+ "First-time customer",
48332
48778
  "portraitAna",
48333
48779
  { rating: 5 }
48334
48780
  );
48335
48781
  const d = testimonial2(
48336
- "Saturday croissants have become a family ritual. Worth the queue, every single time.",
48782
+ "Easy to work with and genuinely kind. We have come back again and again, and so have our friends.",
48337
48783
  "Leo Brandt",
48338
- "Neighbour",
48784
+ "Returning customer",
48339
48785
  "portraitSam",
48340
48786
  { rating: 5 }
48341
48787
  );
@@ -49033,6 +49479,71 @@ function starterSection(label3, blocks2, look = {}) {
49033
49479
  };
49034
49480
  }
49035
49481
 
49482
+ // ../blocks/src/presets/sample.ts
49483
+ var SAMPLE_BLOCK_TYPES = /* @__PURE__ */ new Set([
49484
+ "testimonial",
49485
+ "quote",
49486
+ "quote-carousel",
49487
+ "team",
49488
+ "restaurant-menu",
49489
+ "stats",
49490
+ "pricing",
49491
+ "timeline",
49492
+ "contact-info",
49493
+ "table"
49494
+ ]);
49495
+ 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)$/;
49496
+ function normalizeSampleText(s) {
49497
+ return s.normalize("NFKC").toLowerCase().replace(/\s+/g, " ").trim();
49498
+ }
49499
+ function specific(s) {
49500
+ const t = s.trim();
49501
+ if (t.length < 4) return false;
49502
+ if (/\d/.test(t) || t.includes("@")) return true;
49503
+ if (/\p{Lu}[\p{L}’'-]+[\s.,&]+(?:\p{Ll}{1,3}\s+)?\p{Lu}[\p{L}’'-]+/u.test(t)) return true;
49504
+ return t.split(/\s+/).length >= 6;
49505
+ }
49506
+ function sampleStringsOf(block2) {
49507
+ const out = [];
49508
+ const push = (s) => {
49509
+ if (specific(s)) out.push(normalizeSampleText(s));
49510
+ };
49511
+ const walk = (v2, key) => {
49512
+ if (typeof v2 === "string") {
49513
+ if (!key || !NOT_TEXT.test(key)) push(v2);
49514
+ } else if (Array.isArray(v2)) for (const x of v2) walk(x);
49515
+ else if (v2 && typeof v2 === "object") {
49516
+ const o = v2;
49517
+ if (o.type === "doc" && Array.isArray(o.content)) {
49518
+ for (const node2 of o.content)
49519
+ push(plainText({ type: "doc", content: [node2] }));
49520
+ return;
49521
+ }
49522
+ if (typeof o.src === "string") return;
49523
+ for (const [k, x] of Object.entries(o)) walk(x, k);
49524
+ }
49525
+ };
49526
+ walk(block2.fields);
49527
+ return out;
49528
+ }
49529
+ function sectionSampleStrings(section2) {
49530
+ const out = /* @__PURE__ */ new Set();
49531
+ for (const b of section2.blocks)
49532
+ if (SAMPLE_BLOCK_TYPES.has(b.type)) for (const s of sampleStringsOf(b)) out.add(s);
49533
+ return out;
49534
+ }
49535
+ function sampleMatches(section2, sample) {
49536
+ if (!sample.size) return [];
49537
+ const out = [];
49538
+ for (const b of section2.blocks) {
49539
+ if (b.hidden || !SAMPLE_BLOCK_TYPES.has(b.type)) continue;
49540
+ const found = [...new Set(sampleStringsOf(b).filter((s) => sample.has(s)))];
49541
+ if (found.length) out.push({ blockId: b.id, blockType: b.type, found });
49542
+ }
49543
+ return out;
49544
+ }
49545
+ var PLACEHOLDER_RE = /\[(?:placeholder|todo|tbd|tk|insert[^\]]*|your [^\]]*|add [^\]]*)\]|\blorem ipsum\b|\{\{[^}]*\}\}/i;
49546
+
49036
49547
  // ../blocks/src/presets/index.ts
49037
49548
  var sectionPresets = [
49038
49549
  ...heroPresets,
@@ -49100,6 +49611,16 @@ function presetSection(ref, colorTheme) {
49100
49611
  if (!preset || preset.target === "header") return void 0;
49101
49612
  return preset.build(colorTheme ? { colorTheme } : {});
49102
49613
  }
49614
+ var sampleCache = /* @__PURE__ */ new Map();
49615
+ function presetSampleStrings(id) {
49616
+ let set2 = sampleCache.get(id);
49617
+ if (!set2) {
49618
+ const preset = getPreset(id);
49619
+ set2 = preset && preset.target !== "header" ? sectionSampleStrings(preset.build()) : /* @__PURE__ */ new Set();
49620
+ sampleCache.set(id, set2);
49621
+ }
49622
+ return set2;
49623
+ }
49103
49624
 
49104
49625
  // ../blocks/src/index.ts
49105
49626
  var allBlocks = [
@@ -49332,10 +49853,13 @@ export {
49332
49853
  copyViolations,
49333
49854
  PRESET_CATEGORIES,
49334
49855
  starterRef,
49856
+ sampleMatches,
49857
+ PLACEHOLDER_RE,
49335
49858
  getPreset,
49336
49859
  presetsIn,
49337
49860
  presetCatalog,
49338
49861
  presetSection,
49862
+ presetSampleStrings,
49339
49863
  registerAll,
49340
49864
  blocksRegistry,
49341
49865
  generateAgentsMd
@@ -49443,4 +49967,4 @@ lucide/dist/esm/lucide.mjs:
49443
49967
  * See the LICENSE file in the root directory of this source tree.
49444
49968
  *)
49445
49969
  */
49446
- //# sourceMappingURL=chunk-UQXJVMUV.js.map
49970
+ //# sourceMappingURL=chunk-KAJOS2YV.js.map