@riverbankcms/sdk 0.60.11 → 0.60.14

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 (96) hide show
  1. package/README.md +10 -7
  2. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  3. package/dist/_dts/api/src/bookingConfig.d.ts +31 -1
  4. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +38 -1
  5. package/dist/_dts/api/src/bookingOperations.d.ts +3 -0
  6. package/dist/_dts/api/src/bookingRecords.d.ts +45 -0
  7. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  8. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +1 -5
  9. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  10. package/dist/_dts/api/src/communications.d.ts +1 -1
  11. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  12. package/dist/_dts/api/src/domains.d.ts +14 -13
  13. package/dist/_dts/api/src/endpoints.d.ts +121 -9
  14. package/dist/_dts/api/src/index.d.ts +3 -2
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  16. package/dist/_dts/api/src/seoEndpoints.d.ts +2 -0
  17. package/dist/_dts/api/src/siteAssets.d.ts +0 -10
  18. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  19. package/dist/_dts/api/src/types.d.ts +1 -1
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  21. package/dist/_dts/blocks/src/index.d.ts +1 -0
  22. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  23. package/dist/_dts/blocks/src/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/subroutes/fold.d.ts +40 -0
  25. package/dist/_dts/blocks/src/subroutes/formatDate.d.ts +12 -0
  26. package/dist/_dts/blocks/src/subroutes/index.d.ts +3 -0
  27. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +32 -0
  28. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +3 -1
  29. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +2 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/spacing.d.ts +2 -1
  33. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -0
  34. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +5 -1
  35. package/dist/_dts/core/src/booking-refunds.d.ts +8 -0
  36. package/dist/_dts/core/src/participant-identity.d.ts +1 -1
  37. package/dist/_dts/core/src/participants.d.ts +19 -7
  38. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +284 -96
  39. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  40. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -3
  41. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -3
  42. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -3
  43. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -3
  44. package/dist/_dts/preview-next/src/client/preview/SubrouteNoticePanel.d.ts +13 -0
  45. package/dist/_dts/preview-next/src/client/preview/subrouteNotice.d.ts +26 -0
  46. package/dist/_dts/sdk/src/contracts/page.d.ts +1 -0
  47. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -1
  48. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -0
  49. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +4 -5
  50. package/dist/_dts/sdk/src/version.d.ts +1 -1
  51. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  52. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +17 -0
  53. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  54. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  55. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +66 -30
  56. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +16 -0
  57. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  58. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  59. package/dist/_dts/theme-core/src/schema.d.ts +174 -6
  60. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +328 -15
  61. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +54 -2
  62. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +124 -0
  63. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  64. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  65. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +21 -0
  66. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +2 -1
  67. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/site-styles/types.d.ts +135 -2
  69. package/dist/_dts/ui/src/badge.d.ts +1 -1
  70. package/dist/_dts/ui/src/button.d.ts +1 -1
  71. package/dist/cli/index.mjs +801 -115
  72. package/dist/client/bookings.mjs +115 -1
  73. package/dist/client/client.mjs +905 -166
  74. package/dist/client/hooks.mjs +794 -111
  75. package/dist/client/rendering/client.mjs +179 -39
  76. package/dist/client/rendering/islands.mjs +179 -38
  77. package/dist/client/rendering.mjs +904 -165
  78. package/dist/preview-next/before-render.mjs +160 -16
  79. package/dist/preview-next/client/runtime.mjs +1674 -260
  80. package/dist/preview-next/middleware.mjs +160 -16
  81. package/dist/server/components.mjs +895 -165
  82. package/dist/server/config-validation.mjs +794 -111
  83. package/dist/server/config.mjs +794 -111
  84. package/dist/server/data.mjs +794 -111
  85. package/dist/server/index.mjs +163 -17
  86. package/dist/server/next.mjs +898 -167
  87. package/dist/server/page-converter.mjs +589 -82
  88. package/dist/server/prebuild.mjs +1 -1
  89. package/dist/server/rendering/server.mjs +895 -165
  90. package/dist/server/rendering.mjs +895 -165
  91. package/dist/server/routing.mjs +828 -117
  92. package/dist/server/server.mjs +795 -112
  93. package/dist/server/theme-bridge.mjs +216 -39
  94. package/dist/server/theme.mjs +139 -37
  95. package/dist/styles/index.css +44 -2
  96. package/package.json +1 -1
@@ -787,7 +787,7 @@ var init_endpoints = __esm({
787
787
  method: "GET",
788
788
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
789
789
  auth: "user",
790
- responseKind: "text"
790
+ responseKind: "blob"
791
791
  },
792
792
  getNewsletterSubscriber: {
793
793
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -1118,12 +1118,7 @@ var init_endpoints = __esm({
1118
1118
  ],
1119
1119
  auth: "user",
1120
1120
  responseKind: "json",
1121
- errors: [
1122
- "validation:invalid_input",
1123
- "resource:not_found",
1124
- "resource:conflict",
1125
- "server:internal_error"
1126
- ]
1121
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1127
1122
  },
1128
1123
  unpublishTeamMemberProfile: {
1129
1124
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -1376,6 +1371,13 @@ var init_endpoints = __esm({
1376
1371
  auth: "user",
1377
1372
  responseKind: "json"
1378
1373
  },
1374
+ exportBookingAppointmentsCsv: {
1375
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
1376
+ method: "GET",
1377
+ auth: "user",
1378
+ errors: [],
1379
+ responseKind: "blob"
1380
+ },
1379
1381
  createAppointment: {
1380
1382
  path: "/sites/{siteId}/bookings/appointments",
1381
1383
  method: "POST",
@@ -1503,6 +1505,13 @@ var init_endpoints = __esm({
1503
1505
  auth: "user",
1504
1506
  responseKind: "json"
1505
1507
  },
1508
+ exportCourseEnrollmentsCsv: {
1509
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1510
+ method: "GET",
1511
+ auth: "user",
1512
+ errors: [],
1513
+ responseKind: "blob"
1514
+ },
1506
1515
  listCourseWaitlist: {
1507
1516
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1508
1517
  method: "GET",
@@ -2261,6 +2270,63 @@ var init_endpoints = __esm({
2261
2270
  auth: "user",
2262
2271
  responseKind: "json"
2263
2272
  },
2273
+ updateRegisteredDomainContact: {
2274
+ path: "/domains/{domainId}/registrar/contact",
2275
+ method: "POST",
2276
+ errors: [
2277
+ "validation:invalid_input",
2278
+ "resource:not_found",
2279
+ "auth:forbidden",
2280
+ "external:service_error",
2281
+ "external:registrar_orphaned_contact_profile",
2282
+ "server:internal_error"
2283
+ ],
2284
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2285
+ auth: "user",
2286
+ responseKind: "json"
2287
+ },
2288
+ setRegisteredDomainPrivacy: {
2289
+ path: "/domains/{domainId}/registrar/privacy",
2290
+ method: "POST",
2291
+ errors: [
2292
+ "validation:invalid_input",
2293
+ "resource:not_found",
2294
+ "auth:forbidden",
2295
+ "external:service_error",
2296
+ "server:internal_error"
2297
+ ],
2298
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2299
+ auth: "user",
2300
+ responseKind: "json"
2301
+ },
2302
+ setRegisteredDomainAutoRenew: {
2303
+ path: "/domains/{domainId}/registrar/auto-renew",
2304
+ method: "POST",
2305
+ errors: [
2306
+ "validation:invalid_input",
2307
+ "resource:not_found",
2308
+ "auth:forbidden",
2309
+ "external:service_error",
2310
+ "server:internal_error"
2311
+ ],
2312
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2313
+ auth: "user",
2314
+ responseKind: "json"
2315
+ },
2316
+ getRegisteredDomainRenewalPosture: {
2317
+ path: "/domains/{domainId}/registrar/renewal",
2318
+ method: "GET",
2319
+ errors: [
2320
+ "validation:invalid_input",
2321
+ "resource:not_found",
2322
+ "auth:forbidden",
2323
+ "external:service_error",
2324
+ "server:internal_error"
2325
+ ],
2326
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2327
+ auth: "user",
2328
+ responseKind: "json"
2329
+ },
2264
2330
  retryDomainVercel: {
2265
2331
  path: "/domains/{domainId}/vercel",
2266
2332
  method: "POST",
@@ -2808,6 +2874,14 @@ var init_endpoints = __esm({
2808
2874
  auth: "user",
2809
2875
  responseKind: "json"
2810
2876
  },
2877
+ exportSeoPagesCsv: {
2878
+ path: "/sites/{siteId}/seo/pages",
2879
+ method: "GET",
2880
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
2881
+ auth: "user",
2882
+ responseKind: "blob",
2883
+ errors: []
2884
+ },
2811
2885
  getSeoQueries: {
2812
2886
  path: "/sites/{siteId}/seo/queries",
2813
2887
  method: "GET",
@@ -2816,6 +2890,14 @@ var init_endpoints = __esm({
2816
2890
  auth: "user",
2817
2891
  responseKind: "json"
2818
2892
  },
2893
+ exportSeoQueriesCsv: {
2894
+ path: "/sites/{siteId}/seo/queries",
2895
+ method: "GET",
2896
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
2897
+ auth: "user",
2898
+ responseKind: "blob",
2899
+ errors: []
2900
+ },
2819
2901
  getPerformanceOverview: {
2820
2902
  path: "/sites/{siteId}/performance/overview",
2821
2903
  method: "GET",
@@ -2864,7 +2946,12 @@ var init_endpoints = __esm({
2864
2946
  path: "/media/{assetId}/canonical-crop",
2865
2947
  method: "POST",
2866
2948
  tags: ["media", "media-{assetId}"],
2867
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
2949
+ errors: [
2950
+ "validation:invalid_input",
2951
+ "resource:not_found",
2952
+ "resource:conflict",
2953
+ "server:internal_error"
2954
+ ],
2868
2955
  auth: "user",
2869
2956
  responseKind: "json"
2870
2957
  },
@@ -3196,7 +3283,7 @@ var init_endpoints = __esm({
3196
3283
  method: "GET",
3197
3284
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
3198
3285
  auth: "user",
3199
- responseKind: "text"
3286
+ responseKind: "blob"
3200
3287
  },
3201
3288
  // Public submit
3202
3289
  submitForm: {
@@ -4079,6 +4166,14 @@ var init_endpoints = __esm({
4079
4166
  auth: "user",
4080
4167
  responseKind: "json"
4081
4168
  },
4169
+ exportEventSeriesAttendeesCsv: {
4170
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
4171
+ method: "GET",
4172
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
4173
+ auth: "user",
4174
+ errors: [],
4175
+ responseKind: "blob"
4176
+ },
4082
4177
  listEventSeriesWaitlist: {
4083
4178
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
4084
4179
  method: "GET",
@@ -4642,6 +4737,14 @@ var init_endpoints = __esm({
4642
4737
  auth: "user",
4643
4738
  responseKind: "json"
4644
4739
  },
4740
+ exportBookingCustomersCsv: {
4741
+ path: "/sites/{siteId}/bookings/customers/export.csv",
4742
+ method: "GET",
4743
+ tags: ["site-{siteId}", "customers-{siteId}"],
4744
+ auth: "user",
4745
+ errors: [],
4746
+ responseKind: "blob"
4747
+ },
4645
4748
  createBookingCustomer: {
4646
4749
  path: "/sites/{siteId}/bookings/customers",
4647
4750
  method: "POST",
@@ -4669,6 +4772,21 @@ var init_endpoints = __esm({
4669
4772
  "server:internal_error"
4670
4773
  ]
4671
4774
  },
4775
+ rectifyBookingParticipantIdentity: {
4776
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
4777
+ method: "PATCH",
4778
+ tags: ["site-{siteId}", "customers-{siteId}"],
4779
+ auth: "user",
4780
+ responseKind: "json",
4781
+ errors: [
4782
+ "validation:invalid_input",
4783
+ "auth:forbidden",
4784
+ "resource:not_found",
4785
+ "resource:already_exists",
4786
+ "resource:conflict",
4787
+ "server:internal_error"
4788
+ ]
4789
+ },
4672
4790
  listCustomerPasses: {
4673
4791
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
4674
4792
  method: "GET",
@@ -4803,13 +4921,46 @@ var init_endpoints = __esm({
4803
4921
  auth: "user",
4804
4922
  responseKind: "json"
4805
4923
  },
4924
+ exportMoneyPaymentsCsv: {
4925
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
4926
+ method: "GET",
4927
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
4928
+ errors: [],
4929
+ auth: "user",
4930
+ responseKind: "blob"
4931
+ },
4932
+ exportMoneyBreakdownsCsv: {
4933
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
4934
+ method: "GET",
4935
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4936
+ errors: [],
4937
+ auth: "user",
4938
+ responseKind: "blob"
4939
+ },
4940
+ exportMoneyTimeSeriesCsv: {
4941
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
4942
+ method: "GET",
4943
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4944
+ errors: [],
4945
+ auth: "user",
4946
+ responseKind: "blob"
4947
+ },
4806
4948
  listBookingActivity: {
4807
4949
  path: "/sites/{siteId}/bookings/activity",
4808
4950
  method: "GET",
4809
4951
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4952
+ errors: [],
4810
4953
  auth: "user",
4811
4954
  responseKind: "json"
4812
4955
  },
4956
+ exportBookingActivityCsv: {
4957
+ path: "/sites/{siteId}/bookings/activity/export.csv",
4958
+ method: "GET",
4959
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4960
+ errors: [],
4961
+ auth: "user",
4962
+ responseKind: "blob"
4963
+ },
4813
4964
  // Site logs
4814
4965
  listSiteActivityLogs: {
4815
4966
  path: "/sites/{siteId}/logs/activity",
@@ -4961,13 +5112,6 @@ var init_endpoints = __esm({
4961
5112
  auth: "user",
4962
5113
  responseKind: "blob"
4963
5114
  },
4964
- exportSeoCsv: {
4965
- path: "/sites/{siteId}/seo/export",
4966
- method: "GET",
4967
- tags: ["site-{siteId}", "seo"],
4968
- auth: "user",
4969
- responseKind: "blob"
4970
- },
4971
5115
  // Admin site cost (for admin panel)
4972
5116
  adminSiteCost: {
4973
5117
  path: "/admin/sites/{siteId}/cost",
@@ -101384,7 +101528,11 @@ function flushPanelFrame(options) {
101384
101528
  function defineBlockDesignCapability(capability) {
101385
101529
  return {
101386
101530
  ...capability,
101387
- kind: "designed"
101531
+ kind: "designed",
101532
+ sectionHeights: capability.sectionHeights ?? ["default"],
101533
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
101534
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
101535
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
101388
101536
  };
101389
101537
  }
101390
101538
  var plainFrame;
@@ -101397,29 +101545,322 @@ var init_types5 = __esm({
101397
101545
  });
101398
101546
 
101399
101547
  // ../theme-core/src/site-styles/appearancePresets.ts
101548
+ function assertValidOptionGroups(preset2) {
101549
+ preset2.optionGroups?.forEach((group) => {
101550
+ const selectedOption = group.options.find(
101551
+ (option) => option.id === group.selectedOptionId
101552
+ );
101553
+ if (!selectedOption) {
101554
+ throw new Error(
101555
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
101556
+ );
101557
+ }
101558
+ });
101559
+ }
101400
101560
  function defineBlockAppearancePreset(preset2) {
101561
+ assertValidOptionGroups(preset2);
101401
101562
  return preset2;
101402
101563
  }
101403
101564
  function defineSiteChromeAppearancePreset(preset2) {
101404
101565
  return preset2;
101405
101566
  }
101567
+ function hasButtonVariant(theme, variantId) {
101568
+ return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
101569
+ }
101570
+ function resolveHeaderCtaVariant(theme, treatment) {
101571
+ switch (treatment) {
101572
+ case "default":
101573
+ return void 0;
101574
+ case "primary":
101575
+ return "primary";
101576
+ case "secondary":
101577
+ return hasButtonVariant(theme, "secondary") ? "secondary" : "primary";
101578
+ case "inverted":
101579
+ if (hasButtonVariant(theme, "header")) return "header";
101580
+ if (hasButtonVariant(theme, "secondary")) return "secondary";
101581
+ if (hasButtonVariant(theme, "outline")) return "outline";
101582
+ return "primary";
101583
+ case "outline":
101584
+ return hasButtonVariant(theme, "outline") ? "outline" : "secondary";
101585
+ case "ghost":
101586
+ return hasButtonVariant(theme, "ghost") ? "ghost" : "secondary";
101587
+ }
101588
+ }
101589
+ function compileHeaderNavStyle(appearance) {
101590
+ switch (appearance.navTreatment) {
101591
+ case "minimal":
101592
+ return void 0;
101593
+ case "uppercase-underline":
101594
+ return {
101595
+ typography: "body",
101596
+ fontWeight: "bold",
101597
+ textTransform: "uppercase",
101598
+ italic: false,
101599
+ colorToken: appearance.surface.textColorToken,
101600
+ hoverColorToken: "secondary",
101601
+ textSize: "sm",
101602
+ letterSpacing: "wider",
101603
+ padding: "compact",
101604
+ paddingX: "compact",
101605
+ borderRadius: "none",
101606
+ effects: {
101607
+ hover: [
101608
+ { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
101609
+ { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
101610
+ ]
101611
+ }
101612
+ };
101613
+ }
101614
+ }
101615
+ function compileHeaderDropdownStyle(appearance) {
101616
+ switch (appearance.dropdownTreatment) {
101617
+ case "surface":
101618
+ return void 0;
101619
+ case "matched-solid": {
101620
+ const backgroundToken = appearance.surface.kind === "brand-solid" ? `${appearance.surface.token}-700` : appearance.surface.token;
101621
+ const hoverBackgroundToken = appearance.surface.kind === "brand-solid" ? `${appearance.surface.token}-900` : appearance.surface.token;
101622
+ return {
101623
+ background: backgroundToken,
101624
+ textColor: appearance.surface.textColorToken,
101625
+ borderColor: null,
101626
+ shadow: "md",
101627
+ borderRadius: "md",
101628
+ hoverBackground: hoverBackgroundToken,
101629
+ hoverTextColor: "secondary",
101630
+ textTransform: appearance.navTreatment === "uppercase-underline" ? "uppercase" : "none",
101631
+ letterSpacing: appearance.navTreatment === "uppercase-underline" ? "wider" : "normal",
101632
+ fontWeight: appearance.navTreatment === "uppercase-underline" ? "bold" : "medium",
101633
+ textSize: "sm"
101634
+ };
101635
+ }
101636
+ }
101637
+ }
101638
+ function compileSiteHeaderAppearancePreset(preset2, theme) {
101639
+ const appearance = preset2.header;
101640
+ const navLinkStyle = compileHeaderNavStyle(appearance);
101641
+ const dropdownStyle = compileHeaderDropdownStyle(appearance);
101642
+ const ctaVariant = resolveHeaderCtaVariant(theme, appearance.ctaTreatment);
101643
+ return {
101644
+ ...theme.header,
101645
+ positioning: appearance.behavior === "sticky-shrink" ? "sticky" : theme.header.positioning,
101646
+ shrinkOnScroll: appearance.behavior === "sticky-shrink" ? true : theme.header.shrinkOnScroll,
101647
+ background: {
101648
+ type: "color",
101649
+ color: appearance.surface.token
101650
+ },
101651
+ textColor: appearance.surface.textColorToken,
101652
+ navColor: appearance.surface.textColorToken,
101653
+ navStyle: appearance.navTreatment === "uppercase-underline" ? "underline-grow" : theme.header.navStyle,
101654
+ navWeight: appearance.navTreatment === "uppercase-underline" ? "bold" : theme.header.navWeight,
101655
+ ...navLinkStyle ? { navLinkStyle } : {},
101656
+ ...dropdownStyle ? { dropdownStyle } : {},
101657
+ border: {
101658
+ style: "solid",
101659
+ width: "none",
101660
+ position: "none"
101661
+ },
101662
+ logoText: appearance.behavior === "sticky-shrink" ? {
101663
+ hideOnShrink: true,
101664
+ mobileMaxWidth: "sm",
101665
+ mobileWrapLines: 2
101666
+ } : theme.header.logoText,
101667
+ ctaGap: appearance.behavior === "sticky-shrink" ? "compact" : theme.header.ctaGap,
101668
+ ctaTreatment: appearance.ctaTreatment,
101669
+ ...ctaVariant ? { ctaVariant } : {}
101670
+ };
101671
+ }
101672
+ function footerBrandColorToken(input) {
101673
+ return input.shade === "base" ? input.token : `${input.token}-${input.shade}`;
101674
+ }
101675
+ function compileSiteFooterAppearancePreset(preset2, theme) {
101676
+ const appearance = preset2.footer;
101677
+ switch (appearance.kind) {
101678
+ case "grounding":
101679
+ return theme.footer;
101680
+ case "brand-two-band":
101681
+ return {
101682
+ ...theme.footer,
101683
+ variant: "split",
101684
+ maxWidth: "container",
101685
+ background: {
101686
+ type: "color",
101687
+ color: footerBrandColorToken(appearance.surface)
101688
+ },
101689
+ navStyle: "minimal",
101690
+ navWeight: "medium",
101691
+ navColor: appearance.surface.textColorToken,
101692
+ navLinkStyle: {
101693
+ typography: "body",
101694
+ fontWeight: "medium",
101695
+ textTransform: "none",
101696
+ italic: false,
101697
+ colorToken: appearance.surface.textColorToken,
101698
+ hoverColorToken: "secondary",
101699
+ padding: "none",
101700
+ borderRadius: "none"
101701
+ },
101702
+ bottomTextLinkStyle: {
101703
+ colorToken: "secondary",
101704
+ decorationColorToken: "secondary"
101705
+ },
101706
+ navLayout: {
101707
+ layout: "inline-wrap",
101708
+ align: "start",
101709
+ gapX: "default",
101710
+ gapY: "tight"
101711
+ },
101712
+ logo: {
101713
+ showLogo: true,
101714
+ showLogoText: false,
101715
+ placement: "left",
101716
+ size: "sm",
101717
+ align: "start"
101718
+ },
101719
+ bottomBar: {
101720
+ enabled: true,
101721
+ fullBleed: true,
101722
+ background: {
101723
+ type: "color",
101724
+ color: footerBrandColorToken(appearance.bottomBand)
101725
+ },
101726
+ textColor: appearance.bottomBand.textColorToken,
101727
+ textAlign: "center",
101728
+ paddingX: "default",
101729
+ paddingY: "compact",
101730
+ borderTop: {
101731
+ width: "none"
101732
+ }
101733
+ }
101734
+ };
101735
+ }
101736
+ }
101737
+ var appearancePresets;
101406
101738
  var init_appearancePresets = __esm({
101407
101739
  "../theme-core/src/site-styles/appearancePresets.ts"() {
101408
101740
  init_types5();
101409
- [
101741
+ appearancePresets = [
101410
101742
  defineBlockAppearancePreset({
101411
101743
  kind: "block-design",
101412
101744
  id: "hero-immersive-image",
101413
101745
  target: "hero",
101414
101746
  label: "Immersive image hero",
101415
101747
  blockKinds: ["block.hero"],
101748
+ constraints: {
101749
+ layoutFamilies: ["centered", "compact"]
101750
+ },
101416
101751
  design: {
101417
101752
  sectionSurface: "hero-image",
101418
101753
  contentFrame: plainFrame,
101419
101754
  itemSurface: "none",
101420
101755
  transitionAfter: "soft-fade-short",
101421
101756
  emphasis: "high",
101422
- heroLegibility: "scrim-gradient"
101757
+ sectionHeight: "hero",
101758
+ imageSurfaceTreatment: { kind: "neutral-wash" }
101759
+ }
101760
+ }),
101761
+ defineBlockAppearancePreset({
101762
+ kind: "block-design",
101763
+ id: "hero-brand-scrim",
101764
+ target: "hero",
101765
+ label: "Brand scrim image hero",
101766
+ blockKinds: ["block.hero"],
101767
+ constraints: {
101768
+ layoutFamilies: ["centered", "compact"]
101769
+ },
101770
+ optionGroups: [
101771
+ {
101772
+ id: "image-surface-treatment",
101773
+ label: "Treatment",
101774
+ selectedOptionId: "brand-scrim-primary",
101775
+ options: [
101776
+ {
101777
+ id: "brand-scrim-primary",
101778
+ label: "Brand scrim",
101779
+ designPatch: {
101780
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101781
+ }
101782
+ },
101783
+ {
101784
+ id: "neutral-scrim",
101785
+ label: "Neutral scrim",
101786
+ designPatch: {
101787
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
101788
+ }
101789
+ }
101790
+ ]
101791
+ }
101792
+ ],
101793
+ layoutPatches: [
101794
+ {
101795
+ constraints: {
101796
+ layoutVariantKeys: ["micro"]
101797
+ },
101798
+ designPatch: {
101799
+ sectionHeight: "banner"
101800
+ }
101801
+ }
101802
+ ],
101803
+ design: {
101804
+ sectionSurface: "hero-image",
101805
+ contentFrame: plainFrame,
101806
+ itemSurface: "none",
101807
+ transitionAfter: "soft-fade-short",
101808
+ emphasis: "high",
101809
+ sectionHeight: "immersive",
101810
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101811
+ }
101812
+ }),
101813
+ defineBlockAppearancePreset({
101814
+ kind: "block-design",
101815
+ id: "hero-brand-scrim-fixed-frame",
101816
+ target: "hero",
101817
+ label: "Fixed-frame brand scrim hero",
101818
+ blockKinds: ["block.hero"],
101819
+ constraints: {
101820
+ layoutFamilies: ["centered", "compact"]
101821
+ },
101822
+ optionGroups: [
101823
+ {
101824
+ id: "image-surface-treatment",
101825
+ label: "Treatment",
101826
+ selectedOptionId: "brand-scrim-primary",
101827
+ options: [
101828
+ {
101829
+ id: "brand-scrim-primary",
101830
+ label: "Brand scrim",
101831
+ designPatch: {
101832
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101833
+ }
101834
+ },
101835
+ {
101836
+ id: "neutral-scrim",
101837
+ label: "Neutral scrim",
101838
+ designPatch: {
101839
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
101840
+ }
101841
+ }
101842
+ ]
101843
+ }
101844
+ ],
101845
+ layoutPatches: [
101846
+ {
101847
+ constraints: {
101848
+ layoutVariantKeys: ["micro"]
101849
+ },
101850
+ designPatch: {
101851
+ sectionHeight: "banner"
101852
+ }
101853
+ }
101854
+ ],
101855
+ design: {
101856
+ sectionSurface: "hero-image",
101857
+ contentFrame: plainFrame,
101858
+ itemSurface: "none",
101859
+ transitionAfter: "soft-fade-short",
101860
+ emphasis: "high",
101861
+ sectionHeight: "immersive",
101862
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
101863
+ imageSurfaceMotion: "fixed-frame"
101423
101864
  }
101424
101865
  }),
101425
101866
  defineBlockAppearancePreset({
@@ -101436,17 +101877,26 @@ var init_appearancePresets = __esm({
101436
101877
  emphasis: "high"
101437
101878
  }
101438
101879
  }),
101880
+ defineBlockAppearancePreset({
101881
+ kind: "block-design",
101882
+ id: "body-text-editorial-intro",
101883
+ target: "body-text",
101884
+ label: "Editorial intro copy",
101885
+ blockKinds: ["block.body-text"],
101886
+ design: {
101887
+ sectionSurface: "base",
101888
+ contentFrame: plainFrame,
101889
+ itemSurface: "none",
101890
+ transitionAfter: "soft-fade-short",
101891
+ emphasis: "high"
101892
+ }
101893
+ }),
101439
101894
  defineBlockAppearancePreset({
101440
101895
  kind: "block-design",
101441
101896
  id: "offerings-calm-list",
101442
101897
  target: "offerings",
101443
101898
  label: "Calm offerings list",
101444
- blockKinds: [
101445
- "block.event-listing",
101446
- "block.event-calendar",
101447
- "block.event-spotlight",
101448
- "block.product-list"
101449
- ],
101899
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
101450
101900
  design: {
101451
101901
  sectionSurface: "muted-band",
101452
101902
  contentFrame: plainFrame,
@@ -101525,6 +101975,35 @@ var init_appearancePresets = __esm({
101525
101975
  emphasis: "high"
101526
101976
  }
101527
101977
  }),
101978
+ defineBlockAppearancePreset({
101979
+ kind: "block-design",
101980
+ id: "testimonials-dark-proof",
101981
+ target: "testimonials",
101982
+ label: "Dark proof panel",
101983
+ blockKinds: ["block.testimonials"],
101984
+ design: {
101985
+ sectionSurface: "accent-band",
101986
+ contentFrame: panelFrame("raised"),
101987
+ itemSurface: "raised",
101988
+ transitionAfter: "soft-fade-short",
101989
+ emphasis: "high"
101990
+ }
101991
+ }),
101992
+ defineBlockAppearancePreset({
101993
+ kind: "block-design",
101994
+ id: "testimonials-accent-quote-proof",
101995
+ target: "testimonials",
101996
+ label: "Accent quote proof",
101997
+ blockKinds: ["block.testimonials"],
101998
+ design: {
101999
+ sectionSurface: "accent-band",
102000
+ contentFrame: plainFrame,
102001
+ itemSurface: "raised",
102002
+ transitionAfter: "soft-fade-short",
102003
+ emphasis: "high",
102004
+ testimonialCardTreatment: "accent-quote"
102005
+ }
102006
+ }),
101528
102007
  defineBlockAppearancePreset({
101529
102008
  kind: "block-design",
101530
102009
  id: "faq-contained-help",
@@ -101553,6 +102032,20 @@ var init_appearancePresets = __esm({
101553
102032
  emphasis: "medium"
101554
102033
  }
101555
102034
  }),
102035
+ defineBlockAppearancePreset({
102036
+ kind: "block-design",
102037
+ id: "contact-form-dark-card",
102038
+ target: "contact-form",
102039
+ label: "Dark form card",
102040
+ blockKinds: ["block.form"],
102041
+ design: {
102042
+ sectionSurface: "accent-band",
102043
+ contentFrame: panelFrame("raised"),
102044
+ itemSurface: "none",
102045
+ transitionAfter: "soft-fade-short",
102046
+ emphasis: "high"
102047
+ }
102048
+ }),
101556
102049
  defineBlockAppearancePreset({
101557
102050
  kind: "block-design",
101558
102051
  id: "cta-accent-band",
@@ -101572,9 +102065,33 @@ var init_appearancePresets = __esm({
101572
102065
  id: "header-clean-base",
101573
102066
  target: "site-header",
101574
102067
  label: "Clean base header",
101575
- chrome: {
101576
- surface: "base",
101577
- emphasis: "medium"
102068
+ header: {
102069
+ surface: {
102070
+ kind: "neutral-solid",
102071
+ token: "surface",
102072
+ textColorToken: "text"
102073
+ },
102074
+ navTreatment: "minimal",
102075
+ dropdownTreatment: "surface",
102076
+ ctaTreatment: "default",
102077
+ behavior: "default"
102078
+ }
102079
+ }),
102080
+ defineSiteChromeAppearancePreset({
102081
+ kind: "site-chrome",
102082
+ id: "site-header-brand-solid-inverted-cta",
102083
+ target: "site-header",
102084
+ label: "Brand solid header with inverted CTA",
102085
+ header: {
102086
+ surface: {
102087
+ kind: "brand-solid",
102088
+ token: "primary",
102089
+ textColorToken: "primaryForeground"
102090
+ },
102091
+ navTreatment: "uppercase-underline",
102092
+ dropdownTreatment: "matched-solid",
102093
+ ctaTreatment: "inverted",
102094
+ behavior: "sticky-shrink"
101578
102095
  }
101579
102096
  }),
101580
102097
  defineSiteChromeAppearancePreset({
@@ -101582,10 +102099,31 @@ var init_appearancePresets = __esm({
101582
102099
  id: "footer-muted-grounding",
101583
102100
  target: "site-footer",
101584
102101
  label: "Muted grounding footer",
101585
- chrome: {
102102
+ footer: {
102103
+ kind: "grounding",
101586
102104
  surface: "muted-band",
101587
102105
  emphasis: "low"
101588
102106
  }
102107
+ }),
102108
+ defineSiteChromeAppearancePreset({
102109
+ kind: "site-chrome",
102110
+ id: "site-footer-brand-two-band",
102111
+ target: "site-footer",
102112
+ label: "Two-band brand footer",
102113
+ footer: {
102114
+ kind: "brand-two-band",
102115
+ surface: {
102116
+ token: "primary",
102117
+ shade: "800",
102118
+ textColorToken: "primaryForeground"
102119
+ },
102120
+ bottomBand: {
102121
+ token: "primary",
102122
+ shade: "900",
102123
+ textColorToken: "primaryForeground"
102124
+ },
102125
+ emphasis: "high"
102126
+ }
101589
102127
  })
101590
102128
  ];
101591
102129
  }
@@ -102352,6 +102890,117 @@ var init_pebble = __esm({
102352
102890
  }
102353
102891
  });
102354
102892
 
102893
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
102894
+ var showtimePill;
102895
+ var init_showtime_pill = __esm({
102896
+ "../theme-core/src/buttons/personalities/showtime-pill.ts"() {
102897
+ init_types7();
102898
+ showtimePill = defineButtonPersonality({
102899
+ id: "showtime-pill",
102900
+ name: "Showtime Pill",
102901
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
102902
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
102903
+ buttonSystem: {
102904
+ global: {
102905
+ cornerStyle: "pill",
102906
+ shadow: "low",
102907
+ textTransform: "uppercase",
102908
+ fontWeight: 700,
102909
+ borderWidth: 2,
102910
+ hoverTransform: "lift",
102911
+ hoverColor: "darken",
102912
+ typography: "body",
102913
+ paddingPreset: "spacious",
102914
+ italic: false
102915
+ },
102916
+ sizes: {
102917
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
102918
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
102919
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
102920
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
102921
+ },
102922
+ variants: [
102923
+ {
102924
+ id: "primary",
102925
+ name: "Primary",
102926
+ enabled: true,
102927
+ priority: 1,
102928
+ background: { type: "solid", colorToken: "primary" },
102929
+ textColorToken: "background",
102930
+ borderRadius: "rounded-full",
102931
+ effects: {
102932
+ hover: [{ effectId: "pop" }]
102933
+ }
102934
+ },
102935
+ {
102936
+ id: "secondary",
102937
+ name: "Secondary",
102938
+ enabled: true,
102939
+ priority: 2,
102940
+ background: { type: "transparent" },
102941
+ textColorToken: "primary",
102942
+ borderRadius: "rounded-full",
102943
+ border: { widthClass: "border-2", colorToken: "primary" },
102944
+ effects: {
102945
+ hover: [{ effectId: "pop" }]
102946
+ }
102947
+ },
102948
+ {
102949
+ id: "hero",
102950
+ name: "Hero",
102951
+ enabled: true,
102952
+ priority: 1,
102953
+ background: { type: "solid", colorToken: "secondary" },
102954
+ textColorToken: "primary",
102955
+ borderRadius: "rounded-full",
102956
+ effects: {
102957
+ hover: [{ effectId: "pop" }]
102958
+ }
102959
+ },
102960
+ {
102961
+ id: "header",
102962
+ name: "Header",
102963
+ enabled: true,
102964
+ priority: 2,
102965
+ background: { type: "solid", colorToken: "background" },
102966
+ textColorToken: "primary",
102967
+ borderRadius: "rounded-full",
102968
+ border: { widthClass: "border-2", colorToken: "primary" },
102969
+ effects: {
102970
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
102971
+ }
102972
+ },
102973
+ {
102974
+ id: "outline",
102975
+ name: "Outline",
102976
+ enabled: true,
102977
+ priority: 3,
102978
+ background: { type: "transparent" },
102979
+ textColorToken: "primary",
102980
+ borderRadius: "rounded-full",
102981
+ border: { widthClass: "border-2", colorToken: "primary" },
102982
+ effects: {
102983
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
102984
+ }
102985
+ },
102986
+ {
102987
+ id: "ghost",
102988
+ name: "Ghost",
102989
+ enabled: true,
102990
+ priority: 3,
102991
+ background: { type: "transparent" },
102992
+ textColorToken: "primary",
102993
+ borderRadius: "rounded-full",
102994
+ effects: {
102995
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
102996
+ }
102997
+ }
102998
+ ]
102999
+ }
103000
+ });
103001
+ }
103002
+ });
103003
+
102355
103004
  // ../theme-core/src/buttons/personalities/soft-pill.ts
102356
103005
  var softPill;
102357
103006
  var init_soft_pill = __esm({
@@ -102448,6 +103097,7 @@ var init_personalities = __esm({
102448
103097
  init_editorial_link();
102449
103098
  init_ink_stamp();
102450
103099
  init_pebble();
103100
+ init_showtime_pill();
102451
103101
  init_soft_pill();
102452
103102
  init_types7();
102453
103103
  buttonPersonalities = [
@@ -102456,7 +103106,8 @@ var init_personalities = __esm({
102456
103106
  editorialLink,
102457
103107
  pebble,
102458
103108
  inkStamp,
102459
- brushedWash
103109
+ brushedWash,
103110
+ showtimePill
102460
103111
  ];
102461
103112
  personalitiesById = new Map(
102462
103113
  buttonPersonalities.map((p2) => [p2.id, p2])
@@ -105187,7 +105838,7 @@ var init_shared3 = __esm({
105187
105838
  init_componentStyles();
105188
105839
  }
105189
105840
  });
105190
- var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, gradientsSchema, themeSchema;
105841
+ var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, themeSchema;
105191
105842
  var init_schema4 = __esm({
105192
105843
  "../theme-core/src/schema.ts"() {
105193
105844
  init_media();
@@ -105259,14 +105910,7 @@ var init_schema4 = __esm({
105259
105910
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
105260
105911
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
105261
105912
  });
105262
- semanticSpacingSchema = z.enum([
105263
- "none",
105264
- "compact",
105265
- "cozy",
105266
- "medium",
105267
- "comfortable",
105268
- "spacious"
105269
- ]);
105913
+ semanticSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
105270
105914
  boxRoundedSchema = z.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
105271
105915
  boxBackgroundOverlaySchema = z.object({
105272
105916
  type: z.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -105283,6 +105927,7 @@ var init_schema4 = __esm({
105283
105927
  scale: z.string().nullable().optional(),
105284
105928
  position: z.string().nullable().optional(),
105285
105929
  opacity: z.number().min(0).max(1).nullable().optional(),
105930
+ motion: z.enum(["static", "fixed-frame"]).nullable().optional(),
105286
105931
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
105287
105932
  textColor: z.string().nullable().optional(),
105288
105933
  headingColor: z.string().nullable().optional()
@@ -105290,7 +105935,7 @@ var init_schema4 = __esm({
105290
105935
  sectionStylesOverrideSchema = z.object({
105291
105936
  background: boxBackgroundSchema.nullable().optional(),
105292
105937
  spacing: semanticSpacingSchema.nullable().optional(),
105293
- minHeight: z.enum(["none", "hero", "immersive"]).nullable().optional()
105938
+ minHeight: z.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
105294
105939
  });
105295
105940
  containerStylesOverrideSchema = z.object({
105296
105941
  background: boxBackgroundSchema.nullable().optional(),
@@ -105309,7 +105954,8 @@ var init_schema4 = __esm({
105309
105954
  border: cardBorderOverrideSchema.nullable().optional(),
105310
105955
  spacing: semanticSpacingSchema.nullable().optional(),
105311
105956
  raised: z.boolean().nullable().optional(),
105312
- rounded: boxRoundedSchema.nullable().optional()
105957
+ rounded: boxRoundedSchema.nullable().optional(),
105958
+ treatment: z.enum(["accent-quote"]).nullable().optional()
105313
105959
  });
105314
105960
  blockStyleOverridesSchema = z.object({
105315
105961
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -105384,15 +106030,7 @@ var init_schema4 = __esm({
105384
106030
  });
105385
106031
  headerVariant = z.enum(["classic", "centered", "transparent", "floating", "editorial"]);
105386
106032
  headerPositioning = z.enum(["static", "sticky", "fixed"]);
105387
- headerNavStyle = z.enum([
105388
- "minimal",
105389
- "underline",
105390
- "underline-grow",
105391
- "capsule",
105392
- "scale",
105393
- "frosted",
105394
- "solid"
105395
- ]);
106033
+ headerNavStyle = z.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
105396
106034
  navFontWeight = z.enum(["regular", "medium", "semibold", "bold"]);
105397
106035
  headerMaxWidth = z.enum(["container", "full"]);
105398
106036
  headerContainerSchema = z.object({
@@ -105446,6 +106084,7 @@ var init_schema4 = __esm({
105446
106084
  // optional = no override (browser default)
105447
106085
  }).optional();
105448
106086
  headerCtaGapSchema = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
106087
+ headerCtaTreatmentSchema = z.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
105449
106088
  navContainerSchema = z.object({
105450
106089
  type: z.enum(["none", "pill", "glass"]).default("none"),
105451
106090
  tint: z.string().nullable().optional(),
@@ -105464,7 +106103,10 @@ var init_schema4 = __esm({
105464
106103
  shrinkOnScroll: z.boolean(),
105465
106104
  maxWidth: headerMaxWidth,
105466
106105
  logoOverride: mediaSchema.nullable().optional(),
105467
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
106106
+ background: headerBackgroundSchema.default({
106107
+ type: "color",
106108
+ color: "surface"
106109
+ }),
105468
106110
  textColor: z.string().nullable().optional(),
105469
106111
  // Site title and general header text
105470
106112
  navStyle: headerNavStyle,
@@ -105484,6 +106126,13 @@ var init_schema4 = __esm({
105484
106126
  navLinkStyle: navLinkStyleSchema.optional(),
105485
106127
  // CTA button spacing (desktop left margin)
105486
106128
  ctaGap: headerCtaGapSchema.optional(),
106129
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
106130
+ // materializes this to ctaVariant against the active button personality.
106131
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
106132
+ // Optional theme-level CTA variant for header/nav CTA buttons.
106133
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
106134
+ // authored Theme V2 concepts.
106135
+ ctaVariant: z.string().min(1).optional(),
105487
106136
  // Dropdown menu styling (nav dropdowns and mobile drawer)
105488
106137
  dropdownStyle: dropdownStyleSchema
105489
106138
  });
@@ -105540,7 +106189,10 @@ var init_schema4 = __esm({
105540
106189
  variant: footerVariant,
105541
106190
  maxWidth: footerMaxWidth,
105542
106191
  showLogoText: z.boolean().optional(),
105543
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
106192
+ background: headerBackgroundSchema.default({
106193
+ type: "color",
106194
+ color: "surface"
106195
+ }),
105544
106196
  // Footer nav styling (independent from header)
105545
106197
  navStyle: headerNavStyle.default("minimal"),
105546
106198
  navColor: z.string().nullable().optional(),
@@ -105562,17 +106214,7 @@ var init_schema4 = __esm({
105562
106214
  desktop: containerPaddingPresetSchema.optional()
105563
106215
  }).optional()
105564
106216
  }).optional();
105565
- heroTypographySizeSchema = z.enum([
105566
- "sm",
105567
- "base",
105568
- "lg",
105569
- "xl",
105570
- "2xl",
105571
- "3xl",
105572
- "4xl",
105573
- "5xl",
105574
- "6xl"
105575
- ]);
106217
+ heroTypographySizeSchema = z.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
105576
106218
  heroTypographyLineHeightSchema = z.enum(["tight", "snug", "normal", "relaxed"]);
105577
106219
  heroResponsiveTypographySchema = z.object({
105578
106220
  headlineSize: heroTypographySizeSchema.optional(),
@@ -105597,6 +106239,13 @@ var init_schema4 = __esm({
105597
106239
  heroSchema = z.object({
105598
106240
  typography: heroTypographySchema.optional()
105599
106241
  }).optional();
106242
+ bodyTextIntroTypographySizeSchema = z.enum(["default", "editorial"]);
106243
+ bodyTextSchema = z.object({
106244
+ intro: z.object({
106245
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
106246
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
106247
+ }).optional()
106248
+ }).optional();
105600
106249
  gradientsSchema = z.object({
105601
106250
  button: z.string().min(1).nullable().optional(),
105602
106251
  hero: z.string().min(1).nullable().optional(),
@@ -105618,6 +106267,7 @@ var init_schema4 = __esm({
105618
106267
  gradients: gradientsSchema.optional(),
105619
106268
  layout: layoutSchema,
105620
106269
  hero: heroSchema,
106270
+ bodyText: bodyTextSchema,
105621
106271
  header: headerSchema,
105622
106272
  footer: footerSchema,
105623
106273
  buttons: buttonSystemSchema.optional(),
@@ -105641,10 +106291,7 @@ var init_schema4 = __esm({
105641
106291
  ).optional(),
105642
106292
  // Structured block-kind theme overrides (v1: typography prose-link style only)
105643
106293
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
105644
- blockOverrides: z.record(
105645
- z.string(),
105646
- blockThemeOverrideSchema
105647
- ).optional(),
106294
+ blockOverrides: z.record(z.string(), blockThemeOverrideSchema).optional(),
105648
106295
  // Structured custom CSS rules
105649
106296
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
105650
106297
  customCssRules: customCssRulesSchema,
@@ -105756,7 +106403,7 @@ var init_types14 = __esm({
105756
106403
  });
105757
106404
 
105758
106405
  // ../theme-core/src/palette/variants/brand-led.ts
105759
- var brandLedCool, brandLedWarm, brandLedJewel;
106406
+ var brandLedCool, brandLedWarm, brandLedJewel, brandLedBurgundyGold;
105760
106407
  var init_brand_led = __esm({
105761
106408
  "../theme-core/src/palette/variants/brand-led.ts"() {
105762
106409
  init_types14();
@@ -105826,6 +106473,28 @@ var init_brand_led = __esm({
105826
106473
  { name: "border", hex: "#a8a29e" }
105827
106474
  ]
105828
106475
  });
106476
+ brandLedBurgundyGold = definePaletteVariant({
106477
+ id: "brand-led-burgundy-gold",
106478
+ name: "Brand-led \u2014 Burgundy Gold",
106479
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
106480
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
106481
+ mode: "light",
106482
+ colors: [
106483
+ { name: "primary", hex: "#7c2e38" },
106484
+ { name: "secondary", hex: "#d4af37" },
106485
+ { name: "accent", hex: "#b8e19a" },
106486
+ { name: "success", hex: "#10b981" },
106487
+ { name: "warning", hex: "#f59e0b" },
106488
+ { name: "destructive", hex: "#ef4444" },
106489
+ { name: "background", hex: "#f1dfd0" },
106490
+ { name: "surface", hex: "#f5e6db" },
106491
+ { name: "surfaceAlt", hex: "#f8ece3" },
106492
+ { name: "muted", hex: "#c9b8a8" },
106493
+ { name: "text", hex: "#400000" },
106494
+ { name: "primaryForeground", hex: "#ffffff" },
106495
+ { name: "border", hex: "#c9b8a8" }
106496
+ ]
106497
+ });
105829
106498
  }
105830
106499
  });
105831
106500
 
@@ -106073,6 +106742,7 @@ var init_variants = __esm({
106073
106742
  brandLedCool,
106074
106743
  brandLedWarm,
106075
106744
  brandLedJewel,
106745
+ brandLedBurgundyGold,
106076
106746
  // Warm-neutral family
106077
106747
  warmNeutralClay,
106078
106748
  warmNeutralCream,
@@ -106176,6 +106846,8 @@ function defineCuratedSiteStyle(input) {
106176
106846
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
106177
106847
  supportedTransitions: generatedDesignOptionCatalog.transitions
106178
106848
  },
106849
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
106850
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
106179
106851
  buttonPersonalityChoices: input.buttonPersonalityChoices,
106180
106852
  paletteVariantChoices: input.paletteVariantChoices
106181
106853
  };
@@ -106205,7 +106877,8 @@ var init_curatedSiteStyles = __esm({
106205
106877
  "site-style:quiet-luxury",
106206
106878
  "site-style:practical-services",
106207
106879
  "site-style:modern-wellness",
106208
- "site-style:bold-launch"
106880
+ "site-style:bold-launch",
106881
+ "site-style:south-west-twerk-school"
106209
106882
  ];
106210
106883
  quietBudget = {
106211
106884
  accentDensity: "low",
@@ -106468,6 +107141,101 @@ var init_curatedSiteStyles = __esm({
106468
107141
  paletteChoice("brand-led-jewel"),
106469
107142
  paletteChoice("brand-led-warm")
106470
107143
  ]
107144
+ }),
107145
+ defineCuratedSiteStyle({
107146
+ id: "site-style:south-west-twerk-school",
107147
+ name: "South West Twerk School",
107148
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
107149
+ generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
107150
+ selectionKeywords: [
107151
+ "dance",
107152
+ "classes",
107153
+ "workshop",
107154
+ "school",
107155
+ "movement",
107156
+ "performance",
107157
+ "community"
107158
+ ],
107159
+ tokenRecipes: {
107160
+ palette: "brand-led",
107161
+ contrast: "maximum",
107162
+ radius: "soft",
107163
+ shadow: "layered",
107164
+ typography: "clean-sans",
107165
+ spacing: "airy",
107166
+ motion: "expressive"
107167
+ },
107168
+ compositionBudget: expressiveBudget,
107169
+ themeOverrides: {
107170
+ typography: {
107171
+ body: {
107172
+ family: "Manrope, system-ui, sans-serif",
107173
+ size: "lg",
107174
+ weight: "regular",
107175
+ lineHeight: "relaxed",
107176
+ letterSpacing: "normal"
107177
+ },
107178
+ headings: {
107179
+ default: {
107180
+ family: '"TAN - PEARL", sans-serif',
107181
+ weight: "bold",
107182
+ lineHeight: "normal",
107183
+ letterSpacing: "tight",
107184
+ colorToken: "primary",
107185
+ italic: null,
107186
+ case: null
107187
+ },
107188
+ h1: {
107189
+ size: "xl",
107190
+ weight: "bold",
107191
+ lineHeight: "normal",
107192
+ letterSpacing: "tight",
107193
+ italic: null
107194
+ },
107195
+ h2: {
107196
+ size: "lg",
107197
+ weight: "bold",
107198
+ lineHeight: "normal",
107199
+ letterSpacing: "normal",
107200
+ italic: null
107201
+ },
107202
+ h3: {
107203
+ size: "md",
107204
+ weight: "bold",
107205
+ lineHeight: "normal",
107206
+ letterSpacing: "normal",
107207
+ italic: null
107208
+ }
107209
+ },
107210
+ scale: "balanced"
107211
+ },
107212
+ bodyText: {
107213
+ intro: {
107214
+ paragraphSize: "editorial",
107215
+ headingSize: "editorial"
107216
+ }
107217
+ }
107218
+ },
107219
+ recommendedAppearancePresetIds: [
107220
+ "site-header-brand-solid-inverted-cta",
107221
+ "site-footer-brand-two-band",
107222
+ "hero-brand-scrim-fixed-frame",
107223
+ "body-text-editorial-intro",
107224
+ "testimonials-accent-quote-proof",
107225
+ "contact-form-dark-card"
107226
+ ],
107227
+ buttonPersonalityChoices: [
107228
+ buttonChoice("showtime-pill"),
107229
+ buttonChoice("confident-chip"),
107230
+ buttonChoice("ink-stamp"),
107231
+ buttonChoice("brushed-wash")
107232
+ ],
107233
+ paletteVariantChoices: [
107234
+ paletteChoice("brand-led-burgundy-gold"),
107235
+ paletteChoice("brand-led-jewel"),
107236
+ paletteChoice("brand-led-warm"),
107237
+ paletteChoice("high-contrast-ink")
107238
+ ]
106471
107239
  })
106472
107240
  ];
106473
107241
  curatedSiteStylesById = new Map(
@@ -106523,7 +107291,7 @@ function uniqueNonEmpty(values) {
106523
107291
  }
106524
107292
  return [firstValue, ...uniqueValues.slice(1)];
106525
107293
  }
106526
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
107294
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
106527
107295
  var init_designState = __esm({
106528
107296
  "../theme-core/src/site-styles/designState.ts"() {
106529
107297
  init_sourceCatalogs();
@@ -106543,6 +107311,40 @@ var init_designState = __esm({
106543
107311
  "scrim-gradient",
106544
107312
  "solid-panel"
106545
107313
  ]);
107314
+ sectionHeightIntentSchema = z.enum([
107315
+ "default",
107316
+ "banner",
107317
+ "hero",
107318
+ "immersive"
107319
+ ]);
107320
+ imageSurfaceTreatmentIntensitySchema = z.enum(["soft", "balanced", "strong"]);
107321
+ imageSurfaceMotionSchema = z.enum(["static", "fixed-frame"]);
107322
+ imageSurfaceTreatmentSchema = z.discriminatedUnion("kind", [
107323
+ z.object({ kind: z.literal("none") }).strict(),
107324
+ z.object({
107325
+ kind: z.literal("brand-scrim"),
107326
+ token: z.enum(["primary", "secondary", "accent"]),
107327
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107328
+ }).strict(),
107329
+ z.object({
107330
+ kind: z.literal("brand-wash"),
107331
+ token: z.enum(["primary", "secondary", "accent"]),
107332
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107333
+ }).strict(),
107334
+ z.object({
107335
+ kind: z.literal("neutral-scrim"),
107336
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107337
+ }).strict(),
107338
+ z.object({
107339
+ kind: z.literal("neutral-wash"),
107340
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107341
+ }).strict(),
107342
+ z.object({
107343
+ kind: z.literal("solid-panel"),
107344
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107345
+ }).strict()
107346
+ ]);
107347
+ testimonialCardTreatmentSchema = z.enum(["default", "accent-quote"]);
106546
107348
  userPanelTreatments = uniqueNonEmpty(
106547
107349
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
106548
107350
  );
@@ -106573,7 +107375,11 @@ var init_designState = __esm({
106573
107375
  itemSurface: z.enum(userDesignOptionCatalog.itemSurfaces),
106574
107376
  transitionAfter: z.enum(userDesignOptionCatalog.transitions),
106575
107377
  emphasis: z.enum(userDesignOptionCatalog.emphases),
106576
- heroLegibility: heroLegibilityStrategySchema.optional()
107378
+ sectionHeight: sectionHeightIntentSchema.optional(),
107379
+ heroLegibility: heroLegibilityStrategySchema.optional(),
107380
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
107381
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
107382
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
106577
107383
  }).strict();
106578
107384
  styleAuthoritySchema = z.discriminatedUnion("kind", [
106579
107385
  z.object({
@@ -106794,6 +107600,14 @@ var init_pageDesignIntent = __esm({
106794
107600
  }
106795
107601
  });
106796
107602
 
107603
+ // ../theme-core/src/site-styles/lookResolution.ts
107604
+ var init_lookResolution = __esm({
107605
+ "../theme-core/src/site-styles/lookResolution.ts"() {
107606
+ init_appearancePresets();
107607
+ init_types5();
107608
+ }
107609
+ });
107610
+
106797
107611
  // ../theme-core/src/site-styles/resolver.ts
106798
107612
  function repairActionsForIssue(issueKind) {
106799
107613
  return repairActionsByIssueKind[issueKind];
@@ -106801,6 +107615,18 @@ function repairActionsForIssue(issueKind) {
106801
107615
  function supportsFrame(capability, frameKind) {
106802
107616
  return capability.contentFrames.includes(frameKind);
106803
107617
  }
107618
+ function supportsSectionHeight(capability, sectionHeight) {
107619
+ return capability.sectionHeights.includes(sectionHeight);
107620
+ }
107621
+ function supportsImageSurfaceTreatment(capability, imageSurfaceTreatment) {
107622
+ return capability.imageSurfaceTreatments.includes(imageSurfaceTreatment.kind);
107623
+ }
107624
+ function supportsImageSurfaceMotion(capability, imageSurfaceMotion) {
107625
+ return capability.imageSurfaceMotions.includes(imageSurfaceMotion);
107626
+ }
107627
+ function supportsTestimonialCardTreatment(capability, treatment) {
107628
+ return capability.testimonialCardTreatments.includes(treatment);
107629
+ }
106804
107630
  function isDecorativeTransition(transition) {
106805
107631
  return transition !== "none";
106806
107632
  }
@@ -106810,7 +107636,11 @@ function blockDesignRequest(block) {
106810
107636
  contentFrame: block.contentFrame,
106811
107637
  itemSurface: block.itemSurface,
106812
107638
  transitionAfter: block.transitionAfter,
106813
- heroLegibility: block.heroLegibility
107639
+ sectionHeight: block.sectionHeight,
107640
+ heroLegibility: block.heroLegibility,
107641
+ imageSurfaceTreatment: block.imageSurfaceTreatment,
107642
+ imageSurfaceMotion: block.imageSurfaceMotion,
107643
+ testimonialCardTreatment: block.testimonialCardTreatment
106814
107644
  };
106815
107645
  }
106816
107646
  function resolveBlockDesignPlan(input) {
@@ -106821,7 +107651,11 @@ function resolveBlockDesignPlan(input) {
106821
107651
  let appliedContentFrame = block.contentFrame;
106822
107652
  let appliedItemSurface = block.itemSurface;
106823
107653
  let appliedTransitionAfter = block.transitionAfter;
107654
+ let appliedSectionHeight = block.sectionHeight ?? "default";
106824
107655
  let appliedHeroLegibility = block.heroLegibility ?? "none";
107656
+ let appliedImageSurfaceTreatment = block.imageSurfaceTreatment ?? { kind: "none" };
107657
+ let appliedImageSurfaceMotion = block.imageSurfaceMotion ?? "static";
107658
+ let appliedTestimonialCardTreatment = block.testimonialCardTreatment ?? "default";
106825
107659
  if (!capability) {
106826
107660
  issues.push({
106827
107661
  kind: "missing-block-design-capability",
@@ -106840,7 +107674,11 @@ function resolveBlockDesignPlan(input) {
106840
107674
  appliedContentFrame: blockDesignFallback.contentFrame,
106841
107675
  appliedItemSurface: blockDesignFallback.itemSurface,
106842
107676
  appliedTransitionAfter: blockDesignFallback.transitionAfter,
106843
- appliedHeroLegibility: blockDesignFallback.heroLegibility
107677
+ appliedSectionHeight: blockDesignFallback.sectionHeight,
107678
+ appliedHeroLegibility: blockDesignFallback.heroLegibility,
107679
+ appliedImageSurfaceTreatment: blockDesignFallback.imageSurfaceTreatment,
107680
+ appliedImageSurfaceMotion: blockDesignFallback.imageSurfaceMotion,
107681
+ appliedTestimonialCardTreatment: blockDesignFallback.testimonialCardTreatment
106844
107682
  };
106845
107683
  }
106846
107684
  if (capability.kind === "not-designed") {
@@ -106862,7 +107700,11 @@ function resolveBlockDesignPlan(input) {
106862
107700
  appliedContentFrame: blockDesignFallback.contentFrame,
106863
107701
  appliedItemSurface: blockDesignFallback.itemSurface,
106864
107702
  appliedTransitionAfter: blockDesignFallback.transitionAfter,
106865
- appliedHeroLegibility: blockDesignFallback.heroLegibility
107703
+ appliedSectionHeight: blockDesignFallback.sectionHeight,
107704
+ appliedHeroLegibility: blockDesignFallback.heroLegibility,
107705
+ appliedImageSurfaceTreatment: blockDesignFallback.imageSurfaceTreatment,
107706
+ appliedImageSurfaceMotion: blockDesignFallback.imageSurfaceMotion,
107707
+ appliedTestimonialCardTreatment: blockDesignFallback.testimonialCardTreatment
106866
107708
  };
106867
107709
  }
106868
107710
  if (capability.sectionSurfaces === "unsupported") {
@@ -106907,7 +107749,108 @@ function resolveBlockDesignPlan(input) {
106907
107749
  allowedRepairActions: repairActionsForIssue("unsupported-item-surface")
106908
107750
  });
106909
107751
  }
106910
- if (appliedSectionSurface === "hero-image" && (block.heroLegibility === void 0 || appliedHeroLegibility === "none")) {
107752
+ if (!supportsSectionHeight(capability, appliedSectionHeight)) {
107753
+ appliedSectionHeight = "default";
107754
+ issues.push({
107755
+ kind: "unsupported-section-height",
107756
+ blockId: block.blockId,
107757
+ blockKind: block.blockKind,
107758
+ purpose: block.purpose,
107759
+ requested: block.sectionHeight ?? "default",
107760
+ fallback: appliedSectionHeight,
107761
+ policy: input.policy,
107762
+ severity: designIssueSeverityForPolicy(input.policy),
107763
+ allowedRepairActions: repairActionsForIssue("unsupported-section-height")
107764
+ });
107765
+ }
107766
+ if (!supportsImageSurfaceTreatment(capability, appliedImageSurfaceTreatment)) {
107767
+ appliedImageSurfaceTreatment = { kind: "none" };
107768
+ issues.push({
107769
+ kind: "unsupported-image-surface-treatment",
107770
+ blockId: block.blockId,
107771
+ blockKind: block.blockKind,
107772
+ purpose: block.purpose,
107773
+ requested: block.imageSurfaceTreatment ?? { kind: "none" },
107774
+ fallback: appliedImageSurfaceTreatment,
107775
+ policy: input.policy,
107776
+ severity: designIssueSeverityForPolicy(input.policy),
107777
+ allowedRepairActions: repairActionsForIssue("unsupported-image-surface-treatment")
107778
+ });
107779
+ }
107780
+ if (!supportsImageSurfaceMotion(capability, appliedImageSurfaceMotion)) {
107781
+ appliedImageSurfaceMotion = "static";
107782
+ issues.push({
107783
+ kind: "unsupported-image-surface-motion",
107784
+ blockId: block.blockId,
107785
+ blockKind: block.blockKind,
107786
+ purpose: block.purpose,
107787
+ requested: block.imageSurfaceMotion ?? "static",
107788
+ fallback: appliedImageSurfaceMotion,
107789
+ policy: input.policy,
107790
+ severity: designIssueSeverityForPolicy(input.policy),
107791
+ allowedRepairActions: repairActionsForIssue("unsupported-image-surface-motion")
107792
+ });
107793
+ }
107794
+ if (!supportsTestimonialCardTreatment(capability, appliedTestimonialCardTreatment)) {
107795
+ appliedTestimonialCardTreatment = "default";
107796
+ issues.push({
107797
+ kind: "unsupported-testimonial-card-treatment",
107798
+ blockId: block.blockId,
107799
+ blockKind: block.blockKind,
107800
+ purpose: block.purpose,
107801
+ requested: block.testimonialCardTreatment ?? "default",
107802
+ fallback: appliedTestimonialCardTreatment,
107803
+ policy: input.policy,
107804
+ severity: designIssueSeverityForPolicy(input.policy),
107805
+ allowedRepairActions: repairActionsForIssue("unsupported-testimonial-card-treatment")
107806
+ });
107807
+ }
107808
+ if (appliedSectionSurface !== "hero-image" && appliedImageSurfaceTreatment.kind !== "none") {
107809
+ const requested = appliedImageSurfaceTreatment;
107810
+ appliedImageSurfaceTreatment = { kind: "none" };
107811
+ issues.push({
107812
+ kind: "image-surface-treatment-without-image-surface",
107813
+ blockId: block.blockId,
107814
+ blockKind: block.blockKind,
107815
+ purpose: block.purpose,
107816
+ requested,
107817
+ fallback: appliedImageSurfaceTreatment,
107818
+ policy: input.policy,
107819
+ severity: designIssueSeverityForPolicy(input.policy),
107820
+ allowedRepairActions: repairActionsForIssue("image-surface-treatment-without-image-surface")
107821
+ });
107822
+ }
107823
+ if (appliedSectionSurface !== "hero-image" && appliedImageSurfaceMotion !== "static") {
107824
+ const requested = appliedImageSurfaceMotion;
107825
+ appliedImageSurfaceMotion = "static";
107826
+ issues.push({
107827
+ kind: "image-surface-motion-without-image-surface",
107828
+ blockId: block.blockId,
107829
+ blockKind: block.blockKind,
107830
+ purpose: block.purpose,
107831
+ requested,
107832
+ fallback: appliedImageSurfaceMotion,
107833
+ policy: input.policy,
107834
+ severity: designIssueSeverityForPolicy(input.policy),
107835
+ allowedRepairActions: repairActionsForIssue("image-surface-motion-without-image-surface")
107836
+ });
107837
+ }
107838
+ if (appliedSectionSurface === "hero-image" && appliedImageSurfaceTreatment.kind !== "none" && appliedHeroLegibility !== "none") {
107839
+ const requested = appliedHeroLegibility;
107840
+ appliedHeroLegibility = "none";
107841
+ issues.push({
107842
+ kind: "hero-legibility-overridden-by-image-surface-treatment",
107843
+ blockId: block.blockId,
107844
+ blockKind: block.blockKind,
107845
+ purpose: block.purpose,
107846
+ requested,
107847
+ fallback: appliedHeroLegibility,
107848
+ policy: input.policy,
107849
+ severity: designIssueSeverityForPolicy(input.policy),
107850
+ allowedRepairActions: repairActionsForIssue("hero-legibility-overridden-by-image-surface-treatment")
107851
+ });
107852
+ }
107853
+ if (appliedSectionSurface === "hero-image" && appliedImageSurfaceTreatment.kind === "none" && (block.heroLegibility === void 0 || appliedHeroLegibility === "none")) {
106911
107854
  appliedHeroLegibility = "scrim-gradient";
106912
107855
  issues.push({
106913
107856
  kind: "hero-image-without-legibility",
@@ -106927,7 +107870,11 @@ function resolveBlockDesignPlan(input) {
106927
107870
  appliedContentFrame,
106928
107871
  appliedItemSurface,
106929
107872
  appliedTransitionAfter,
106930
- appliedHeroLegibility
107873
+ appliedSectionHeight,
107874
+ appliedHeroLegibility,
107875
+ appliedImageSurfaceTreatment,
107876
+ appliedImageSurfaceMotion,
107877
+ appliedTestimonialCardTreatment
106931
107878
  };
106932
107879
  });
106933
107880
  const transitionSafeBlocks = blocks.map((block, index2) => {
@@ -106963,6 +107910,13 @@ var init_resolver2 = __esm({
106963
107910
  "unsupported-section-surface": ["fallback-section-surface"],
106964
107911
  "unsupported-content-frame": ["fallback-content-frame"],
106965
107912
  "unsupported-item-surface": ["fallback-item-surface"],
107913
+ "unsupported-section-height": ["fallback-section-height"],
107914
+ "unsupported-image-surface-treatment": ["fallback-image-surface-treatment"],
107915
+ "unsupported-image-surface-motion": ["fallback-image-surface-motion"],
107916
+ "unsupported-testimonial-card-treatment": ["fallback-testimonial-card-treatment"],
107917
+ "image-surface-treatment-without-image-surface": ["fallback-image-surface-treatment"],
107918
+ "image-surface-motion-without-image-surface": ["fallback-image-surface-motion"],
107919
+ "hero-legibility-overridden-by-image-surface-treatment": ["remove-hero-legibility"],
106966
107920
  "removed-transition-for-flush-frame": ["remove-transition"],
106967
107921
  "hero-image-without-legibility": ["fallback-hero-legibility"]
106968
107922
  };
@@ -106971,7 +107925,11 @@ var init_resolver2 = __esm({
106971
107925
  contentFrame: plainFrame,
106972
107926
  itemSurface: "none",
106973
107927
  transitionAfter: "none",
106974
- heroLegibility: "none"
107928
+ sectionHeight: "default",
107929
+ heroLegibility: "none",
107930
+ imageSurfaceTreatment: { kind: "none" },
107931
+ imageSurfaceMotion: "static",
107932
+ testimonialCardTreatment: "default"
106975
107933
  };
106976
107934
  }
106977
107935
  });
@@ -107107,15 +108065,121 @@ function resolveVisualSectionSurface(requestedSurface, contentFrame) {
107107
108065
  }
107108
108066
  function compileSectionStyles(input) {
107109
108067
  const rule2 = input.rules.sectionSurfaces[input.surface];
107110
- const background = input.surface === "hero-image" ? {
107111
- ...rule2.background,
107112
- overlay: input.heroLegibility === "none" ? null : input.rules.heroLegibility[input.heroLegibility]
107113
- } : rule2.background;
107114
- return sectionStylesOverrideSchema.parse(background ? {
108068
+ const background = compileSectionBackground({
108069
+ background: rule2.background,
108070
+ heroLegibility: input.heroLegibility,
108071
+ imageSurfaceTreatment: input.imageSurfaceTreatment,
108072
+ imageSurfaceMotion: input.imageSurfaceMotion,
108073
+ rules: input.rules
108074
+ });
108075
+ return sectionStylesOverrideSchema.parse({
107115
108076
  spacing: input.spacing,
107116
- background,
107117
- ...input.surface === "hero-image" ? { minHeight: "hero" } : {}
107118
- } : { spacing: input.spacing });
108077
+ ...background ? { background } : {},
108078
+ ...sectionMinHeightForIntent(input.sectionHeight, input.surface)
108079
+ });
108080
+ }
108081
+ function sectionMinHeightForIntent(sectionHeight, surface) {
108082
+ if (sectionHeight === "default") {
108083
+ return surface === "hero-image" ? { minHeight: "hero" } : {};
108084
+ }
108085
+ return { minHeight: sectionHeight };
108086
+ }
108087
+ function compileSectionBackground(input) {
108088
+ if (!input.background || input.background.type !== "image") {
108089
+ return input.background;
108090
+ }
108091
+ const treatmentBackground = compileImageSurfaceTreatmentBackground(
108092
+ input.background,
108093
+ input.imageSurfaceTreatment
108094
+ );
108095
+ if (treatmentBackground) {
108096
+ return withImageSurfaceMotion(treatmentBackground, input.imageSurfaceMotion);
108097
+ }
108098
+ return withImageSurfaceMotion({
108099
+ ...input.background,
108100
+ overlay: input.heroLegibility === "none" ? null : input.rules.heroLegibility[input.heroLegibility]
108101
+ }, input.imageSurfaceMotion);
108102
+ }
108103
+ function withImageSurfaceMotion(background, motion2) {
108104
+ return motion2 === "static" ? background : {
108105
+ ...background,
108106
+ motion: motion2
108107
+ };
108108
+ }
108109
+ function compileImageSurfaceTreatmentBackground(background, treatment) {
108110
+ switch (treatment.kind) {
108111
+ case "none":
108112
+ return null;
108113
+ case "brand-scrim":
108114
+ return {
108115
+ ...background,
108116
+ overlay: {
108117
+ type: "color",
108118
+ color: darkenedBrandToken(treatment.token),
108119
+ opacity: imageSurfaceTreatmentOpacity("brand-scrim", treatment.intensity)
108120
+ },
108121
+ textColor: "primaryForeground",
108122
+ headingColor: "primaryForeground"
108123
+ };
108124
+ case "brand-wash":
108125
+ return {
108126
+ ...background,
108127
+ overlay: {
108128
+ type: "color",
108129
+ color: lightenedBrandToken(treatment.token),
108130
+ opacity: imageSurfaceTreatmentOpacity("brand-wash", treatment.intensity)
108131
+ },
108132
+ textColor: "text",
108133
+ headingColor: "text"
108134
+ };
108135
+ case "neutral-scrim":
108136
+ return {
108137
+ ...background,
108138
+ overlay: {
108139
+ type: "color",
108140
+ color: darkenedThemeToken("text"),
108141
+ opacity: imageSurfaceTreatmentOpacity("neutral-scrim", treatment.intensity)
108142
+ },
108143
+ textColor: "primaryForeground",
108144
+ headingColor: "primaryForeground"
108145
+ };
108146
+ case "neutral-wash":
108147
+ return {
108148
+ ...background,
108149
+ overlay: {
108150
+ type: "gradient",
108151
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
108152
+ opacity: 1
108153
+ },
108154
+ textColor: "text",
108155
+ headingColor: "text"
108156
+ };
108157
+ case "solid-panel":
108158
+ return {
108159
+ ...background,
108160
+ overlay: {
108161
+ type: "color",
108162
+ color: "surface",
108163
+ opacity: imageSurfaceTreatmentOpacity("solid-panel", treatment.intensity)
108164
+ },
108165
+ textColor: "text",
108166
+ headingColor: "text"
108167
+ };
108168
+ default:
108169
+ return assertNever6(treatment);
108170
+ }
108171
+ }
108172
+ function imageSurfaceTreatmentOpacity(kind, intensity) {
108173
+ return imageSurfaceTreatmentOpacityByKind[kind][intensity ?? "balanced"];
108174
+ }
108175
+ function darkenedThemeToken(token) {
108176
+ return `color-mix(in oklab, rgb(var(--tb-${token})), black 28%)`;
108177
+ }
108178
+ function darkenedBrandToken(token) {
108179
+ return darkenedThemeToken(token);
108180
+ }
108181
+ function lightenedBrandToken(token) {
108182
+ return `color-mix(in oklab, rgb(var(--tb-${token})), white 42%)`;
107119
108183
  }
107120
108184
  function compileContainerStyles(contentFrame, rules) {
107121
108185
  switch (contentFrame.kind) {
@@ -107143,6 +108207,39 @@ function compileContainerStyles(contentFrame, rules) {
107143
108207
  return assertNever6(contentFrame);
107144
108208
  }
107145
108209
  }
108210
+ function testimonialCardTreatmentStyles(treatment) {
108211
+ const resolvedTreatment = treatment ?? "default";
108212
+ switch (resolvedTreatment) {
108213
+ case "default":
108214
+ return null;
108215
+ case "accent-quote":
108216
+ return {
108217
+ treatment: "accent-quote",
108218
+ background: {
108219
+ type: "color",
108220
+ color: "primary-700",
108221
+ textColor: "primaryForeground"
108222
+ },
108223
+ border: {
108224
+ enabled: true,
108225
+ width: "3",
108226
+ colorToken: "secondary"
108227
+ },
108228
+ rounded: "none"
108229
+ };
108230
+ default:
108231
+ return assertNever6(resolvedTreatment);
108232
+ }
108233
+ }
108234
+ function compileCardStyles(input) {
108235
+ const itemSurfaceStyles = input.rules.itemSurfaces[input.itemSurface];
108236
+ const treatmentStyles = testimonialCardTreatmentStyles(input.testimonialCardTreatment);
108237
+ if (!itemSurfaceStyles && !treatmentStyles) return void 0;
108238
+ return cardStylesOverrideSchema.parse({
108239
+ ...itemSurfaceStyles ?? {},
108240
+ ...treatmentStyles ?? {}
108241
+ });
108242
+ }
107146
108243
  function compileBlockRuntimeFields(input) {
107147
108244
  const designRules = input.designRules ?? defaultDesignRuntimeRules;
107148
108245
  const componentRules = input.componentRules ?? defaultComponentRuntimeRules;
@@ -107152,7 +108249,11 @@ function compileBlockRuntimeFields(input) {
107152
108249
  input.block.appliedContentFrame,
107153
108250
  componentRules
107154
108251
  );
107155
- const cardStyles = componentRules.itemSurfaces[input.block.appliedItemSurface] ? cardStylesOverrideSchema.parse(componentRules.itemSurfaces[input.block.appliedItemSurface]) : void 0;
108252
+ const cardStyles = compileCardStyles({
108253
+ itemSurface: input.block.appliedItemSurface,
108254
+ testimonialCardTreatment: input.block.appliedTestimonialCardTreatment,
108255
+ rules: componentRules
108256
+ });
107156
108257
  const transitionClassName = designRules.transitionClassName(
107157
108258
  input.block.appliedTransitionAfter,
107158
108259
  visualSectionSurface,
@@ -107168,7 +108269,10 @@ function compileBlockRuntimeFields(input) {
107168
108269
  surface: visualSectionSurface,
107169
108270
  spacing: sectionSpacing,
107170
108271
  rules: designRules,
107171
- heroLegibility: input.block.appliedHeroLegibility
108272
+ sectionHeight: input.block.appliedSectionHeight,
108273
+ heroLegibility: input.block.appliedHeroLegibility,
108274
+ imageSurfaceTreatment: input.block.appliedImageSurfaceTreatment,
108275
+ imageSurfaceMotion: input.block.appliedImageSurfaceMotion
107172
108276
  }),
107173
108277
  ...containerStyles ? { _containerStyles: containerStyles } : {},
107174
108278
  ...cardStyles ? { _cardStyles: cardStyles } : {},
@@ -107223,11 +108327,11 @@ function compileHeroTypography(recipes) {
107223
108327
  return {
107224
108328
  headlineSize,
107225
108329
  headlineLineHeight: "tight",
107226
- subheadlineSize: recipes.spacing === "compact" ? "base" : "lg",
108330
+ subheadlineSize: recipes.spacing === "compact" ? "xl" : "editorial",
107227
108331
  subheadlineLineHeight: "normal",
107228
- microHeadlineSize: recipes.spacing === "compact" ? "2xl" : "3xl",
107229
- microHeadlineLineHeight: "snug",
107230
- microSubheadlineSize: "base",
108332
+ microHeadlineSize: headlineSize,
108333
+ microHeadlineLineHeight: "tight",
108334
+ microSubheadlineSize: "xl",
107231
108335
  microSubheadlineLineHeight: "normal",
107232
108336
  responsive: {
107233
108337
  tablet: {
@@ -107235,7 +108339,7 @@ function compileHeroTypography(recipes) {
107235
108339
  },
107236
108340
  mobile: {
107237
108341
  headlineSize: recipes.spacing === "compact" ? "3xl" : "4xl",
107238
- subheadlineSize: "base"
108342
+ subheadlineSize: "xl"
107239
108343
  }
107240
108344
  }
107241
108345
  };
@@ -107297,7 +108401,7 @@ function compileTokenRecipes(recipes, options = {}) {
107297
108401
  };
107298
108402
  return themeSchema.parse(theme);
107299
108403
  }
107300
- var compiledRuntimeStyleFieldNames, defaultDesignRuntimeRules, defaultComponentRuntimeRules, paletteByRecipe;
108404
+ var compiledRuntimeStyleFieldNames, defaultDesignRuntimeRules, defaultComponentRuntimeRules, imageSurfaceTreatmentOpacityByKind, paletteByRecipe;
107301
108405
  var init_runtimeCompiler = __esm({
107302
108406
  "../theme-core/src/site-styles/runtimeCompiler.ts"() {
107303
108407
  init_schema4();
@@ -107446,6 +108550,13 @@ var init_runtimeCompiler = __esm({
107446
108550
  }
107447
108551
  }
107448
108552
  });
108553
+ imageSurfaceTreatmentOpacityByKind = {
108554
+ "brand-scrim": { soft: 0.26, balanced: 0.35, strong: 0.52 },
108555
+ "brand-wash": { soft: 0.24, balanced: 0.34, strong: 0.46 },
108556
+ "neutral-scrim": { soft: 0.42, balanced: 0.58, strong: 0.72 },
108557
+ "neutral-wash": { soft: 1, balanced: 1, strong: 1 },
108558
+ "solid-panel": { soft: 0.78, balanced: 0.88, strong: 0.94 }
108559
+ };
107449
108560
  paletteByRecipe = {
107450
108561
  "brand-led": [
107451
108562
  { name: "primary", hex: "#2563eb" },
@@ -107518,6 +108629,7 @@ var init_generatedDesignPipeline = __esm({
107518
108629
  init_designState();
107519
108630
  init_generatedSchemas();
107520
108631
  init_pageDesignIntent();
108632
+ init_lookResolution();
107521
108633
  init_resolver2();
107522
108634
  init_runtimeCompiler();
107523
108635
  init_types5();
@@ -107687,7 +108799,8 @@ function layoutFamilyForEffectiveSelection(block) {
107687
108799
  var backgroundImagePromotedFieldPath, normalEditorCuratedPromotedFieldPaths, noneBoundaryOption, softBoundaryOption, spaciousBoundaryOption;
107688
108800
  var init_pageDesignEditorModel = __esm({
107689
108801
  "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
107690
- init_appearancePresets();
108802
+ init_curatedSiteStyles();
108803
+ init_lookResolution();
107691
108804
  init_pageDesignIntent();
107692
108805
  init_types5();
107693
108806
  backgroundImagePromotedFieldPath = "_sectionStyles.background.image";
@@ -107783,6 +108896,7 @@ var init_site_styles = __esm({
107783
108896
  init_designState();
107784
108897
  init_generatedSchemas();
107785
108898
  init_generatedDesignPipeline();
108899
+ init_lookResolution();
107786
108900
  init_pageDesignAuthority();
107787
108901
  init_pageDesignEditorErrors();
107788
108902
  init_pageDesignEditorModel();
@@ -108775,6 +109889,7 @@ var init_spacing = __esm({
108775
109889
  ];
108776
109890
  SECTION_MIN_HEIGHT_VALUES = [
108777
109891
  "none",
109892
+ "banner",
108778
109893
  "hero",
108779
109894
  "immersive"
108780
109895
  ];
@@ -108796,6 +109911,7 @@ var init_spacing = __esm({
108796
109911
  };
108797
109912
  SECTION_MIN_HEIGHT_MAP = {
108798
109913
  none: "",
109914
+ banner: "rb-section-min-h-banner",
108799
109915
  hero: "rb-section-min-h-hero",
108800
109916
  immersive: "rb-section-min-h-immersive"
108801
109917
  };
@@ -109672,6 +110788,9 @@ var init_boxStyles2 = __esm({
109672
110788
  classes.push(roundedResult);
109673
110789
  }
109674
110790
  }
110791
+ if (input.treatment === "accent-quote") {
110792
+ classes.push("rb-card-treatment-accent-quote");
110793
+ }
109675
110794
  return classes.join(" ").trim() || "";
109676
110795
  }
109677
110796
  };
@@ -109741,7 +110860,7 @@ var init_boxStyles2 = __esm({
109741
110860
  minHeight = input.minHeight;
109742
110861
  } else {
109743
110862
  console.warn(
109744
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
110863
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
109745
110864
  );
109746
110865
  }
109747
110866
  }
@@ -110078,24 +111197,8 @@ var init_styledCard = __esm({
110078
111197
  });
110079
111198
 
110080
111199
  // ../blocks/src/system/node/fragments/typography.ts
110081
- function mergeClassName(base2, extra) {
110082
- return [base2, extra ?? ""].filter(Boolean).join(" ");
110083
- }
110084
- function captionText(opts, ...mods) {
110085
- const {
110086
- as: asProp,
110087
- className: classNameProp,
110088
- color,
110089
- ...rest
110090
- } = {};
110091
- const as = asProp ?? "p";
110092
- const className = mergeClassName("rb-caption", classNameProp);
110093
- const style2 = textColorStyle(color ?? "mutedText");
110094
- return text({ ...rest, as, className, style: style2 }, ...mods);
110095
- }
110096
111200
  var init_typography = __esm({
110097
111201
  "../blocks/src/system/node/fragments/typography.ts"() {
110098
- init_builder();
110099
111202
  init_colorStyles();
110100
111203
  }
110101
111204
  });
@@ -111112,18 +112215,17 @@ function buildAttributionNodes() {
111112
112215
  const name = text(
111113
112216
  {
111114
112217
  as: "strong",
111115
- className: "rb-block",
111116
- style: textColorStyle("text")
112218
+ className: "rb-block"
111117
112219
  },
111118
112220
  bind2("testimonial.content.name", { fallback: "Anonymous" })
111119
112221
  );
111120
- const jobTitle = captionText(
111121
- null,
112222
+ const jobTitle = text(
112223
+ { as: "p", className: "rb-caption" },
111122
112224
  when("testimonial.content.jobTitle"),
111123
112225
  bind2("testimonial.content.jobTitle")
111124
112226
  );
111125
- const company = captionText(
111126
- null,
112227
+ const company = text(
112228
+ { as: "p", className: "rb-caption" },
111127
112229
  when("testimonial.content.company"),
111128
112230
  bind2("testimonial.content.company")
111129
112231
  );
@@ -111157,8 +112259,7 @@ function buildTestimonialCard(...mods) {
111157
112259
  );
111158
112260
  const body = richText(
111159
112261
  {
111160
- className: "rb-prose rb-max-w-none",
111161
- style: textColorStyle("text")
112262
+ className: "rb-prose rb-max-w-none"
111162
112263
  },
111163
112264
  bind2("testimonial.content.body"),
111164
112265
  when("testimonial.content.body")
@@ -111242,7 +112343,6 @@ var init_testimonialsCarousel = __esm({
111242
112343
  "../blocks/src/system/fragments/library/testimonialsCarousel.ts"() {
111243
112344
  init_types16();
111244
112345
  init_builder();
111245
- init_colorStyles();
111246
112346
  init_fragments();
111247
112347
  grid = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
111248
112348
  testimonialsCarouselFragment = defineFragment({
@@ -113337,6 +114437,7 @@ function heroContentCard(children, gap) {
113337
114437
  return styledContainer({
113338
114438
  bindFrom: "_contentCardStyles",
113339
114439
  constrainWidth: false,
114440
+ baseClassName: "rb-relative rb-isolate",
113340
114441
  rootType: "stack",
113341
114442
  rootProps: {
113342
114443
  gap
@@ -113367,6 +114468,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
113367
114468
  function heroContainerStack(children, gap) {
113368
114469
  return styledContainer({
113369
114470
  rootType: "stack",
114471
+ baseClassName: "rb-relative rb-isolate",
113370
114472
  rootProps: {
113371
114473
  gap: "none",
113372
114474
  justify: {
@@ -114517,7 +115619,7 @@ function resolveHeroVerticalAlignment(content) {
114517
115619
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
114518
115620
  const sectionStyles = asPartialObject(content._sectionStyles);
114519
115621
  const minHeight = sectionStyles?.minHeight;
114520
- if (minHeight === "hero" || minHeight === "immersive") return "center";
115622
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
114521
115623
  const variant = resolveHeroVariant(content);
114522
115624
  if (variant === "split" || variant === "splitReverse") return "center";
114523
115625
  return "top";
@@ -115121,7 +116223,7 @@ function extractBackgroundColorToken(background, fallback2) {
115121
116223
  }
115122
116224
  return fallback2;
115123
116225
  }
115124
- var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
116226
+ var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerSplitMainClassSchema, footerSplitMainClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
115125
116227
  var init_layout = __esm({
115126
116228
  "../blocks/src/system/transforms/registry/layout.ts"() {
115127
116229
  init_colorConversion();
@@ -115427,6 +116529,26 @@ var init_layout = __esm({
115427
116529
  ]);
115428
116530
  }
115429
116531
  };
116532
+ footerSplitMainClassSchema = z.object({
116533
+ base: z.string().optional(),
116534
+ reverseClass: z.string().optional()
116535
+ });
116536
+ footerSplitMainClassTransform = {
116537
+ id: "layout.footerSplitMainClass",
116538
+ kind: "string",
116539
+ summary: "Compose split-footer main row classes from footer logo placement",
116540
+ schema: footerSplitMainClassSchema,
116541
+ run: (value, options) => {
116542
+ const logo = asPartialObject(value);
116543
+ const placement = logo?.placement ?? "right";
116544
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
116545
+ const baseClass = shouldPlaceLogoFirst ? "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-end rb-gap-8 rb-md-flex-row rb-md-items-end" : "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end";
116546
+ return joinClasses4([
116547
+ options.base ?? baseClass,
116548
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
116549
+ ]);
116550
+ }
116551
+ };
115430
116552
  footerLogoClassSchema = z.object({
115431
116553
  base: z.string().optional()
115432
116554
  });
@@ -115437,14 +116559,11 @@ var init_layout = __esm({
115437
116559
  schema: footerLogoClassSchema,
115438
116560
  run: (value, options) => {
115439
116561
  const logo = asPartialObject(value);
115440
- const placement = logo?.placement ?? "right";
115441
116562
  const align = logo?.align ?? "end";
115442
116563
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
115443
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
115444
116564
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
115445
116565
  return joinClasses4([
115446
116566
  options.base ?? "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-no-underline rb-transition-opacity rb-hover-opacity-80",
115447
- orderClass,
115448
116567
  selfAlignClass,
115449
116568
  hiddenClass
115450
116569
  ]);
@@ -115481,6 +116600,7 @@ var init_layout = __esm({
115481
116600
  footerBottomBarContainerClassTransform,
115482
116601
  footerBottomBarStyleTransform,
115483
116602
  footerSplitNavSingleClassTransform,
116603
+ footerSplitMainClassTransform,
115484
116604
  footerLogoClassTransform,
115485
116605
  footerLogoMediaClassTransform,
115486
116606
  footerLogoTextVisibleTransform
@@ -115821,7 +116941,7 @@ var init_site_header = __esm({
115821
116941
  headerCta = ctaButton({
115822
116942
  basePath: "menu.ctaItem",
115823
116943
  whenPath: "menu.ctaItem.label",
115824
- variantPath: "menu.ctaItem.variant",
116944
+ variantPath: "$root.theme.header.ctaVariant",
115825
116945
  linkPath: "menu.ctaItem.link",
115826
116946
  sizeFallback: "sm",
115827
116947
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -115829,7 +116949,7 @@ var init_site_header = __esm({
115829
116949
  mobileCta = ctaButton({
115830
116950
  basePath: "menu.ctaItem",
115831
116951
  whenPath: "menu.ctaItem.label",
115832
- variantPath: "menu.ctaItem.variant",
116952
+ variantPath: "$root.theme.header.ctaVariant",
115833
116953
  linkPath: "menu.ctaItem.link",
115834
116954
  sizeFallback: "md",
115835
116955
  className: "nav-mobile-cta rb-w-full"
@@ -116308,7 +117428,13 @@ var init_site_footer = __esm({
116308
117428
  [
116309
117429
  inline3(
116310
117430
  {
116311
- className: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
117431
+ className: {
117432
+ $bind: {
117433
+ from: "$root.theme.footer.logo",
117434
+ transforms: [{ id: "layout.footerSplitMainClass" }],
117435
+ fallback: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
117436
+ }
117437
+ }
116312
117438
  },
116313
117439
  [
116314
117440
  stack(
@@ -118702,7 +119828,8 @@ var init_course_registration_interactive = __esm({
118702
119828
  run: z.object({
118703
119829
  courseId: z.string(),
118704
119830
  seriesId: z.string(),
118705
- runSlug: z.string()
119831
+ runSlug: z.string(),
119832
+ runName: z.string().nullable()
118706
119833
  })
118707
119834
  }),
118708
119835
  z.object({
@@ -126902,6 +128029,16 @@ function panelCapable() {
126902
128029
  itemSurfaces: "unsupported"
126903
128030
  });
126904
128031
  }
128032
+ function heroCapable() {
128033
+ return declareBlockDesignCapability({
128034
+ sectionSurfaces: "supported",
128035
+ contentFrames: ["plain", "panel"],
128036
+ itemSurfaces: "unsupported",
128037
+ sectionHeights: heroSectionHeights,
128038
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
128039
+ imageSurfaceMotions: heroImageSurfaceMotions
128040
+ });
128041
+ }
126905
128042
  function plainItemsCapable() {
126906
128043
  return declareBlockDesignCapability({
126907
128044
  sectionSurfaces: "supported",
@@ -126961,7 +128098,7 @@ function ensureSystemBlockDefinitionsRegistered() {
126961
128098
  registerBlockDefinition(definition);
126962
128099
  }
126963
128100
  }
126964
- var allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
128101
+ var heroSectionHeights, heroImageSurfaceTreatments, heroImageSurfaceMotions, allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
126965
128102
  var init_blocks3 = __esm({
126966
128103
  "../blocks/src/system/blocks/index.ts"() {
126967
128104
  init_site_styles();
@@ -127035,6 +128172,24 @@ var init_blocks3 = __esm({
127035
128172
  init_checkout();
127036
128173
  init_gifting();
127037
128174
  init_newsletter_signup();
128175
+ heroSectionHeights = [
128176
+ "default",
128177
+ "banner",
128178
+ "hero",
128179
+ "immersive"
128180
+ ];
128181
+ heroImageSurfaceTreatments = [
128182
+ "none",
128183
+ "brand-scrim",
128184
+ "brand-wash",
128185
+ "neutral-scrim",
128186
+ "neutral-wash",
128187
+ "solid-panel"
128188
+ ];
128189
+ heroImageSurfaceMotions = [
128190
+ "static",
128191
+ "fixed-frame"
128192
+ ];
127038
128193
  allSectionSurfaces = [
127039
128194
  "base",
127040
128195
  "muted-band",
@@ -127101,7 +128256,7 @@ var init_blocks3 = __esm({
127101
128256
  boundaryPreference: "soft"
127102
128257
  };
127103
128258
  systemBlockDefinitionsRaw = [
127104
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
128259
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
127105
128260
  flow: heroFlow,
127106
128261
  layoutProfiles: [
127107
128262
  layoutProfile({
@@ -127205,7 +128360,12 @@ var init_blocks3 = __esm({
127205
128360
  flow: siteChromeFlow,
127206
128361
  layoutProfiles: []
127207
128362
  })),
127208
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
128363
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
128364
+ sectionSurfaces: "supported",
128365
+ contentFrames: ["plain", "panel"],
128366
+ itemSurfaces: "supported",
128367
+ testimonialCardTreatments: ["default", "accent-quote"]
128368
+ }), defineBlockDesignMetadata({
127209
128369
  flow: proofFlow,
127210
128370
  layoutProfiles: [
127211
128371
  layoutProfile({
@@ -127558,8 +128718,15 @@ function parseOpacity(value) {
127558
128718
  }
127559
128719
  return opacity <= 1 ? opacity : opacity / 100;
127560
128720
  }
127561
- function appendOptionalClasses(baseClassName, optionalClassName) {
127562
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
128721
+ function backgroundMotionClassNames(input) {
128722
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
128723
+ }
128724
+ function appendBackgroundMediaClasses(baseClassName, input) {
128725
+ return [
128726
+ baseClassName,
128727
+ backgroundMotionClassNames(input),
128728
+ backgroundVideoMobileClassNames(input)
128729
+ ].filter(Boolean).join(" ");
127563
128730
  }
127564
128731
  var isString3, isNumber4, resolveImageStyleTransform, resolveImageClassNameTransform, resolveOverlayStyleTransform, backgroundTransforms;
127565
128732
  var init_background4 = __esm({
@@ -127645,9 +128812,9 @@ var init_background4 = __esm({
127645
128812
  const objectFit = isString3(input.objectFit) ? input.objectFit.trim() : null;
127646
128813
  const position = isString3(input.position) ? input.position.trim() : null;
127647
128814
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
127648
- return appendOptionalClasses(
128815
+ return appendBackgroundMediaClasses(
127649
128816
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
127650
- backgroundVideoMobileClassNames(input)
128817
+ input
127651
128818
  );
127652
128819
  }
127653
128820
  let needsAnchoring = false;
@@ -127660,18 +128827,18 @@ var init_background4 = __esm({
127660
128827
  }
127661
128828
  }
127662
128829
  if (!needsAnchoring) {
127663
- return appendOptionalClasses(
128830
+ return appendBackgroundMediaClasses(
127664
128831
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
127665
- backgroundVideoMobileClassNames(input)
128832
+ input
127666
128833
  );
127667
128834
  }
127668
128835
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
127669
128836
  const isCustom = position && !isPreset;
127670
128837
  if (isCustom) {
127671
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
128838
+ return appendBackgroundMediaClasses(baseClass, input);
127672
128839
  }
127673
128840
  const anchorClasses = getAnchorClasses(position);
127674
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
128841
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
127675
128842
  }
127676
128843
  };
127677
128844
  resolveOverlayStyleTransform = {
@@ -135274,16 +136441,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
135274
136441
  };
135275
136442
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
135276
136443
  }
135277
- const textSize = configuredDropdownStyle?.textSize;
135278
- if (textSize) {
135279
- const textSizeMap = {
135280
- "xs": "0.75rem",
135281
- "sm": "0.875rem",
135282
- "base": "1rem",
135283
- "lg": "1.125rem"
135284
- };
135285
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
135286
- }
136444
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
136445
+ const textSizeMap = {
136446
+ "xs": "0.75rem",
136447
+ "sm": "0.875rem",
136448
+ "base": "1rem",
136449
+ "lg": "1.125rem"
136450
+ };
136451
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
135287
136452
  if (additionalRules.length > 0) {
135288
136453
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
135289
136454
  return baseCSS + `
@@ -135605,12 +136770,10 @@ ${selector} .rb-container-full`;
135605
136770
  ${rootRules.join("\n ")}
135606
136771
  }`);
135607
136772
  if (containerPadding?.mobile) {
135608
- cssChunks.push(
135609
- `${containerSelector} {
136773
+ cssChunks.push(`${containerSelector} {
135610
136774
  padding-left: ${toPaddingValue(containerPadding.mobile)};
135611
136775
  padding-right: ${toPaddingValue(containerPadding.mobile)};
135612
- }`
135613
- );
136776
+ }`);
135614
136777
  }
135615
136778
  if (containerPadding?.tablet) {
135616
136779
  cssChunks.push(
@@ -135636,6 +136799,10 @@ ${selector} .rb-container-full`;
135636
136799
  if (heroTypographyCss) {
135637
136800
  cssChunks.push(heroTypographyCss);
135638
136801
  }
136802
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
136803
+ if (bodyTextTypographyCss) {
136804
+ cssChunks.push(bodyTextTypographyCss);
136805
+ }
135639
136806
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
135640
136807
  return cssChunks.join("\n\n");
135641
136808
  }
@@ -135715,21 +136882,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
135715
136882
 
135716
136883
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
135717
136884
  background: var(--site-style-transition-to);
135718
- clip-path: polygon(
135719
- 0 42%,
135720
- 10% 34%,
135721
- 21% 42%,
135722
- 34% 31%,
135723
- 48% 39%,
135724
- 63% 29%,
135725
- 78% 37%,
135726
- 90% 30%,
135727
- 100% 36%,
135728
- 100% 100%,
135729
- 0 100%
135730
- );
136885
+ mask-image: url("${waveTransitionMask}");
136886
+ mask-repeat: no-repeat;
136887
+ mask-size: 100% 100%;
136888
+ -webkit-mask-image: url("${waveTransitionMask}");
136889
+ -webkit-mask-repeat: no-repeat;
136890
+ -webkit-mask-size: 100% 100%;
135731
136891
  }`;
135732
136892
  }
136893
+ function svgDataUrl(svg) {
136894
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
136895
+ }
135733
136896
  function generateHeroTypographyCss(themeId, theme) {
135734
136897
  const typography = theme.hero?.typography;
135735
136898
  if (!typography) return "";
@@ -135752,33 +136915,21 @@ function generateHeroTypographyCss(themeId, theme) {
135752
136915
  ${subheadlineRules.join("\n ")}
135753
136916
  }`);
135754
136917
  }
135755
- const microHeadlineRules = buildTypographyRules(
135756
- typography.microHeadlineSize,
135757
- typography.microHeadlineLineHeight
135758
- );
136918
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
135759
136919
  if (microHeadlineRules.length > 0) {
135760
136920
  chunks.push(`${microHeadlineSelector} {
135761
136921
  ${microHeadlineRules.join("\n ")}
135762
136922
  }`);
135763
136923
  }
135764
- const microSubheadlineRules = buildTypographyRules(
135765
- typography.microSubheadlineSize,
135766
- typography.microSubheadlineLineHeight
135767
- );
136924
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
135768
136925
  if (microSubheadlineRules.length > 0) {
135769
136926
  chunks.push(`${microSubheadlineSelector} {
135770
136927
  ${microSubheadlineRules.join("\n ")}
135771
136928
  }`);
135772
136929
  }
135773
136930
  if (typography.responsive?.tablet) {
135774
- const tabletHeadlineRules = buildTypographyRules(
135775
- typography.responsive.tablet.headlineSize,
135776
- typography.responsive.tablet.headlineLineHeight
135777
- );
135778
- const tabletSubheadlineRules = buildTypographyRules(
135779
- typography.responsive.tablet.subheadlineSize,
135780
- typography.responsive.tablet.subheadlineLineHeight
135781
- );
136931
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
136932
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
135782
136933
  const tabletChunks = [];
135783
136934
  if (tabletHeadlineRules.length > 0) {
135784
136935
  tabletChunks.push(`${headlineSelector} {
@@ -135797,14 +136948,8 @@ function generateHeroTypographyCss(themeId, theme) {
135797
136948
  }
135798
136949
  }
135799
136950
  if (typography.responsive?.mobile) {
135800
- const mobileHeadlineRules = buildTypographyRules(
135801
- typography.responsive.mobile.headlineSize,
135802
- typography.responsive.mobile.headlineLineHeight
135803
- );
135804
- const mobileSubheadlineRules = buildTypographyRules(
135805
- typography.responsive.mobile.subheadlineSize,
135806
- typography.responsive.mobile.subheadlineLineHeight
135807
- );
136951
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
136952
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
135808
136953
  const mobileChunks = [];
135809
136954
  if (mobileHeadlineRules.length > 0) {
135810
136955
  mobileChunks.push(`${headlineSelector} {
@@ -135834,6 +136979,27 @@ function buildTypographyRules(size4, lineHeight) {
135834
136979
  }
135835
136980
  return rules;
135836
136981
  }
136982
+ function generateBodyTextTypographyCss(themeId, theme) {
136983
+ const intro = theme.bodyText?.intro;
136984
+ if (!intro) return "";
136985
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
136986
+ const chunks = [];
136987
+ if (intro.headingSize === "editorial") {
136988
+ chunks.push(`${rootSelector} .body-copy-heading {
136989
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
136990
+ line-height: 1.08;
136991
+ }`);
136992
+ }
136993
+ if (intro.paragraphSize === "editorial") {
136994
+ chunks.push(`${rootSelector} .body-copy-body {
136995
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
136996
+ --rb-prose-lg-line-height: 1.55;
136997
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
136998
+ --rb-prose-xl-sm-line-height: 1.55;
136999
+ }`);
137000
+ }
137001
+ return chunks.join("\n\n");
137002
+ }
135837
137003
  function toHeroSize(size4) {
135838
137004
  const map2 = {
135839
137005
  sm: "0.875rem",
@@ -135844,7 +137010,8 @@ function toHeroSize(size4) {
135844
137010
  "3xl": "1.875rem",
135845
137011
  "4xl": "2.25rem",
135846
137012
  "5xl": "3rem",
135847
- "6xl": "3.75rem"
137013
+ "6xl": "3.75rem",
137014
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
135848
137015
  };
135849
137016
  return map2[size4];
135850
137017
  }
@@ -135857,9 +137024,13 @@ function toHeroLineHeight(lineHeight) {
135857
137024
  };
135858
137025
  return map2[lineHeight];
135859
137026
  }
137027
+ var waveTransitionMask;
135860
137028
  var init_generateLayoutCss = __esm({
135861
137029
  "../theme-core/src/layout/generateLayoutCss.ts"() {
135862
137030
  init_breakpoints();
137031
+ waveTransitionMask = svgDataUrl(
137032
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
137033
+ );
135863
137034
  }
135864
137035
  });
135865
137036
 
@@ -138132,6 +139303,81 @@ var init_PageRenderer = __esm({
138132
139303
  );
138133
139304
  }
138134
139305
  });
139306
+
139307
+ // ../blocks/src/subroutes/formatDate.ts
139308
+ function formatOccurrenceDate(iso) {
139309
+ const datePart = iso?.split("T")[0];
139310
+ if (!datePart) return null;
139311
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(datePart)) return null;
139312
+ const [year, month, day] = datePart.split("-").map(Number);
139313
+ if (!year || !month || !day) return null;
139314
+ if (month < 1 || month > 12) return null;
139315
+ if (day < 1 || day > 31) return null;
139316
+ const date = new Date(year, month - 1, day);
139317
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
139318
+ return null;
139319
+ }
139320
+ return date.toLocaleDateString("en-GB", {
139321
+ day: "numeric",
139322
+ month: "long",
139323
+ year: "numeric"
139324
+ });
139325
+ }
139326
+ var init_formatDate = __esm({
139327
+ "../blocks/src/subroutes/formatDate.ts"() {
139328
+ }
139329
+ });
139330
+
139331
+ // ../blocks/src/subroutes/fold.ts
139332
+ function foldSubroute(ctx, fold) {
139333
+ switch (ctx.kind) {
139334
+ case "event-occurrence":
139335
+ return fold["event-occurrence"](ctx.occurrence);
139336
+ case "course-run":
139337
+ return fold["course-run"](ctx.run);
139338
+ default:
139339
+ return assertNever3(ctx, "Unhandled subroute kind");
139340
+ }
139341
+ }
139342
+ var init_fold = __esm({
139343
+ "../blocks/src/subroutes/fold.ts"() {
139344
+ init_src3();
139345
+ }
139346
+ });
139347
+
139348
+ // ../blocks/src/subroutes/kinds.ts
139349
+ var SUBROUTE_KINDS;
139350
+ var init_kinds = __esm({
139351
+ "../blocks/src/subroutes/kinds.ts"() {
139352
+ init_formatDate();
139353
+ SUBROUTE_KINDS = {
139354
+ "event-occurrence": {
139355
+ kind: "event-occurrence",
139356
+ containerNoun: "event",
139357
+ instanceNoun: "date",
139358
+ listLabel: "events list",
139359
+ formatInstanceName: (occurrence) => formatOccurrenceDate(occurrence.startsAt),
139360
+ subEditorPath: (occurrence) => `bookings/events/${occurrence.seriesId}`
139361
+ },
139362
+ "course-run": {
139363
+ kind: "course-run",
139364
+ containerNoun: "course",
139365
+ instanceNoun: "run",
139366
+ listLabel: "courses list",
139367
+ formatInstanceName: (run3) => run3.runName,
139368
+ subEditorPath: (run3) => `bookings/courses/${run3.courseId}`
139369
+ }
139370
+ };
139371
+ }
139372
+ });
139373
+
139374
+ // ../blocks/src/subroutes/index.ts
139375
+ var init_subroutes = __esm({
139376
+ "../blocks/src/subroutes/index.ts"() {
139377
+ init_fold();
139378
+ init_kinds();
139379
+ }
139380
+ });
138135
139381
  var init_paletteAccess = __esm({
138136
139382
  "../theme-core/src/palette/utils/paletteAccess.ts"() {
138137
139383
  init_colorConversion();
@@ -140231,12 +141477,16 @@ var init_containerResponsiveThemeCss = __esm({
140231
141477
  .rb-h-full {
140232
141478
  height: 100%;
140233
141479
  }
141480
+ .rb-section-min-h-banner {
141481
+ min-height: clamp(16rem, 34svh, 24rem);
141482
+ }
140234
141483
  .rb-section-min-h-hero {
140235
141484
  min-height: clamp(32rem, 62svh, 44rem);
140236
141485
  }
140237
141486
  .rb-section-min-h-immersive {
140238
141487
  min-height: clamp(38rem, 78svh, 54rem);
140239
141488
  }
141489
+ .rb-section-min-h-banner > .rb-container,
140240
141490
  .rb-section-min-h-hero > .rb-container,
140241
141491
  .rb-section-min-h-immersive > .rb-container {
140242
141492
  min-height: inherit;
@@ -141346,6 +142596,19 @@ var init_containerResponsiveThemeCss = __esm({
141346
142596
  .rb-object-contain {
141347
142597
  object-fit: contain;
141348
142598
  }
142599
+ .rb-bg-motion-fixed-frame {
142600
+ position: fixed;
142601
+ inset: 0;
142602
+ width: 100vw;
142603
+ height: 100svh;
142604
+ }
142605
+ @media (hover: none), (prefers-reduced-motion: reduce) {
142606
+ .rb-bg-motion-fixed-frame {
142607
+ position: absolute;
142608
+ width: 100%;
142609
+ height: 100%;
142610
+ }
142611
+ }
141349
142612
 
141350
142613
  /* Line clamp */
141351
142614
  .rb-line-clamp-2,
@@ -145856,13 +147119,13 @@ var init_containerResponsiveThemeCss = __esm({
145856
147119
 
145857
147120
  /* Eyebrow - color only (typography via .rb-eyebrow) */
145858
147121
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
145859
- color: rgb(var(--tb-text));
147122
+ color: var(--section-text-color, rgb(var(--tb-text)));
145860
147123
  }
145861
147124
 
145862
147125
  /* Subheadline - supporting text below headline */
145863
147126
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
145864
147127
  font-size: 1.125rem;
145865
- color: rgb(var(--tb-text));
147128
+ color: var(--section-text-color, rgb(var(--tb-text)));
145866
147129
  }
145867
147130
 
145868
147131
  @container rb-site (min-width: 640px) {
@@ -145936,6 +147199,20 @@ var init_containerResponsiveThemeCss = __esm({
145936
147199
  max-width: 60rem;
145937
147200
  }
145938
147201
 
147202
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
147203
+ font-size: var(--rb-prose-lg-font-size);
147204
+ line-height: var(--rb-prose-lg-line-height);
147205
+ }
147206
+
147207
+ @container rb-site (min-width: 640px) {
147208
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
147209
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
147210
+ font-size: var(--rb-prose-xl-sm-font-size);
147211
+ line-height: var(--rb-prose-xl-sm-line-height);
147212
+ }
147213
+ }
147214
+ }
147215
+
145939
147216
  /* Variant: Narrow (left-aligned, shorter line length) */
145940
147217
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
145941
147218
  max-width: 34rem;
@@ -147278,6 +148555,13 @@ var init_containerResponsiveThemeCss = __esm({
147278
148555
  border-radius: var(--rb-block-radius);
147279
148556
  }
147280
148557
 
148558
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
148559
+ border: 0;
148560
+ border-left: 5px solid rgb(var(--tb-secondary));
148561
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
148562
+ color: rgb(var(--tb-primaryForeground));
148563
+ }
148564
+
147281
148565
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
147282
148566
  font-size: var(--rb-testimonial-quote-size);
147283
148567
  line-height: 1;
@@ -147286,6 +148570,12 @@ var init_containerResponsiveThemeCss = __esm({
147286
148570
  color: rgb(var(--tb-primary));
147287
148571
  }
147288
148572
 
148573
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
148574
+ color: rgb(var(--tb-secondary));
148575
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
148576
+ opacity: 1;
148577
+ }
148578
+
147289
148579
 
147290
148580
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
147291
148581
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -149127,6 +150417,7 @@ var init_events2 = __esm({
149127
150417
  var init_src6 = __esm({
149128
150418
  "../blocks/src/index.ts"() {
149129
150419
  init_PageRenderer();
150420
+ init_subroutes();
149130
150421
  init_Button2();
149131
150422
  init_schema5();
149132
150423
  init_palette2();
@@ -193892,6 +195183,73 @@ function withSiteStyleMetadata(theme, siteStyle) {
193892
195183
  siteStyleId: siteStyle.id
193893
195184
  };
193894
195185
  }
195186
+ function hasOwnKeys(value) {
195187
+ return Object.keys(value).length > 0;
195188
+ }
195189
+ function mergeThemeBranch(base2, override) {
195190
+ if (override === void 0) return base2;
195191
+ const merged = {
195192
+ ...base2 ?? {},
195193
+ ...override
195194
+ };
195195
+ return hasOwnKeys(merged) ? merged : void 0;
195196
+ }
195197
+ function mergeHeroTypographyOverride(base2, override) {
195198
+ if (override === void 0) return base2;
195199
+ const responsive = mergeThemeBranch(base2?.responsive, override.responsive);
195200
+ return mergeThemeBranch(base2, {
195201
+ ...override,
195202
+ ...responsive ? { responsive } : {}
195203
+ });
195204
+ }
195205
+ function mergeHeroOverride(theme, override) {
195206
+ if (override === void 0) return theme.hero;
195207
+ const typography = mergeHeroTypographyOverride(theme.hero?.typography, override.typography);
195208
+ return mergeThemeBranch(theme.hero, {
195209
+ ...override,
195210
+ ...typography ? { typography } : {}
195211
+ });
195212
+ }
195213
+ function mergeBodyTextOverride(theme, override) {
195214
+ if (override === void 0) return theme.bodyText;
195215
+ const intro = mergeThemeBranch(theme.bodyText?.intro, override.intro);
195216
+ return mergeThemeBranch(theme.bodyText, {
195217
+ ...override,
195218
+ ...intro ? { intro } : {}
195219
+ });
195220
+ }
195221
+ function applySiteStyleThemeOverrides(theme, siteStyle) {
195222
+ const overrides = siteStyle.themeOverrides;
195223
+ if (!overrides) return theme;
195224
+ return themeSchema.parse({
195225
+ ...theme,
195226
+ ...overrides.typography ? { typography: overrides.typography } : {},
195227
+ ...overrides.hero ? { hero: mergeHeroOverride(theme, overrides.hero) } : {},
195228
+ ...overrides.bodyText ? { bodyText: mergeBodyTextOverride(theme, overrides.bodyText) } : {}
195229
+ });
195230
+ }
195231
+ function recommendedSiteHeaderAppearancePreset(siteStyle) {
195232
+ return siteStyle.recommendedAppearancePresetIds.flatMap((presetId) => {
195233
+ const preset2 = appearancePresets.find((candidate) => candidate.id === presetId);
195234
+ return preset2?.kind === "site-chrome" && preset2.target === "site-header" ? [preset2] : [];
195235
+ })[0] ?? null;
195236
+ }
195237
+ function recommendedSiteFooterAppearancePreset(siteStyle) {
195238
+ return siteStyle.recommendedAppearancePresetIds.flatMap((presetId) => {
195239
+ const preset2 = appearancePresets.find((candidate) => candidate.id === presetId);
195240
+ return preset2?.kind === "site-chrome" && preset2.target === "site-footer" ? [preset2] : [];
195241
+ })[0] ?? null;
195242
+ }
195243
+ function applySiteChromeAppearancePresets(theme, siteStyle) {
195244
+ const headerPreset = recommendedSiteHeaderAppearancePreset(siteStyle);
195245
+ const footerPreset = recommendedSiteFooterAppearancePreset(siteStyle);
195246
+ if (!headerPreset && !footerPreset) return theme;
195247
+ return themeSchema.parse({
195248
+ ...theme,
195249
+ ...headerPreset ? { header: compileSiteHeaderAppearancePreset(headerPreset, theme) } : {},
195250
+ ...footerPreset ? { footer: compileSiteFooterAppearancePreset(footerPreset, theme) } : {}
195251
+ });
195252
+ }
193895
195253
  function compileSiteThemeFromSelections(input) {
193896
195254
  const { siteStyle, buttonPersonalityId, paletteVariantId, paletteOverrides } = input;
193897
195255
  const personalityRequest = toCuratedRequest(parsePersistedButtonPersonalityId(buttonPersonalityId));
@@ -193924,8 +195282,10 @@ function compileSiteThemeFromSelections(input) {
193924
195282
  paletteVariantId: paletteResult.resolved,
193925
195283
  paletteOverrides: paletteOverrides ?? void 0
193926
195284
  });
195285
+ const themeWithSiteStyleOverrides = applySiteStyleThemeOverrides(theme, siteStyle);
195286
+ const themeWithSiteChrome = applySiteChromeAppearancePresets(themeWithSiteStyleOverrides, siteStyle);
193927
195287
  return {
193928
- theme: withSiteStyleMetadata(theme, siteStyle),
195288
+ theme: withSiteStyleMetadata(themeWithSiteChrome, siteStyle),
193929
195289
  resolvedSelections: {
193930
195290
  buttonPersonalityId: personalityResult.resolved,
193931
195291
  paletteVariantId: paletteResult.resolved
@@ -193988,11 +195348,41 @@ function compileEditorModelRuntimeFieldsForBlock(input) {
193988
195348
  return buildEditorModelRuntimeFieldsByBlockId(input).get(input.blockId) ?? null;
193989
195349
  }
193990
195350
  function applyCompiledRuntimeFieldsToContent(content, fields3) {
195351
+ const runtimeFields = fields3 ? preservePromotedBackgroundImageFields(content, fields3) : fields3;
193991
195352
  return {
193992
195353
  ...stripCompiledRuntimeStyleFields(content),
193993
- ...fields3
195354
+ ...runtimeFields
193994
195355
  };
193995
195356
  }
195357
+ function preservePromotedBackgroundImageFields(content, fields3) {
195358
+ const compiledBackground = fields3._sectionStyles?.background;
195359
+ if (!compiledBackground || compiledBackground.type !== "image") {
195360
+ return fields3;
195361
+ }
195362
+ const currentSectionStyles = readRecord(content._sectionStyles);
195363
+ const currentBackground = readRecord(currentSectionStyles?.background);
195364
+ if (!currentBackground || !Object.prototype.hasOwnProperty.call(currentBackground, "image")) {
195365
+ return fields3;
195366
+ }
195367
+ return {
195368
+ ...fields3,
195369
+ _sectionStyles: {
195370
+ ...fields3._sectionStyles,
195371
+ background: {
195372
+ ...compiledBackground,
195373
+ ...pickExistingImageBackgroundFields(currentBackground)
195374
+ }
195375
+ }
195376
+ };
195377
+ }
195378
+ function readRecord(value) {
195379
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
195380
+ }
195381
+ function pickExistingImageBackgroundFields(background) {
195382
+ return Object.fromEntries(
195383
+ promotedBackgroundImageFieldNames.flatMap((fieldName) => Object.prototype.hasOwnProperty.call(background, fieldName) ? [[fieldName, background[fieldName]]] : [])
195384
+ );
195385
+ }
193996
195386
  function restoreCompiledRuntimeFieldsFromContent(currentContent, previousContent) {
193997
195387
  const nextContent = stripCompiledRuntimeStyleFields(currentContent);
193998
195388
  for (const fieldName of compiledRuntimeStyleFieldNames) {
@@ -194023,23 +195413,28 @@ function runtimeCapabilitiesForBlocks(blocks) {
194023
195413
  return Object.fromEntries(
194024
195414
  blocks.map((block) => [
194025
195415
  block.blockKind,
194026
- {
194027
- kind: "designed",
195416
+ defineBlockDesignCapability({
194028
195417
  sectionSurfaces: "supported",
194029
195418
  contentFrames: [block.contentFrame.kind],
194030
- itemSurfaces: "supported"
194031
- }
195419
+ itemSurfaces: "supported",
195420
+ sectionHeights: [block.sectionHeight ?? "default"],
195421
+ imageSurfaceTreatments: [block.imageSurfaceTreatment?.kind ?? "none"],
195422
+ imageSurfaceMotions: [block.imageSurfaceMotion ?? "static"]
195423
+ })
194032
195424
  ])
194033
195425
  );
194034
195426
  }
194035
- var previewCustomizePurpose;
195427
+ var previewCustomizePurpose, promotedBackgroundImageFieldNames;
194036
195428
  var init_previewCompiler = __esm({
194037
195429
  "../theme-core/src/site-styles/previewCompiler.ts"() {
195430
+ init_schema4();
194038
195431
  init_personalities();
194039
195432
  init_variants();
194040
195433
  init_curatedChoices();
194041
195434
  init_curatedSiteStyles();
194042
195435
  init_resolver2();
195436
+ init_types5();
195437
+ init_appearancePresets();
194043
195438
  init_runtimeCompiler();
194044
195439
  init_blockFlow();
194045
195440
  init_pageDesignEditorModel();
@@ -194051,6 +195446,12 @@ var init_previewCompiler = __esm({
194051
195446
  init_curatedSiteStyles();
194052
195447
  init_types5();
194053
195448
  previewCustomizePurpose = "preview-customize";
195449
+ promotedBackgroundImageFieldNames = [
195450
+ "image",
195451
+ "objectFit",
195452
+ "scale",
195453
+ "position"
195454
+ ];
194054
195455
  }
194055
195456
  });
194056
195457
 
@@ -195974,6 +197375,61 @@ var init_widgetOverrides = __esm({
195974
197375
  };
195975
197376
  }
195976
197377
  });
197378
+ function SubrouteNotice({ model }) {
197379
+ return /* @__PURE__ */ jsxs("div", { className: "border-b bg-amber-50 px-4 py-3 text-amber-950", children: [
197380
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: model.title }),
197381
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: model.body }),
197382
+ model.cta ? /* @__PURE__ */ jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: /* @__PURE__ */ jsx(
197383
+ "a",
197384
+ {
197385
+ className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
197386
+ href: model.cta.href,
197387
+ target: "_blank",
197388
+ rel: "noopener noreferrer",
197389
+ children: model.cta.label
197390
+ }
197391
+ ) }) : null,
197392
+ model.fallbackMessage ? /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-amber-900/90", children: model.fallbackMessage }) : null
197393
+ ] });
197394
+ }
197395
+ var init_SubrouteNoticePanel = __esm({
197396
+ "../preview-next/src/client/preview/SubrouteNoticePanel.tsx"() {
197397
+ "use client";
197398
+ }
197399
+ });
197400
+
197401
+ // ../preview-next/src/client/preview/subrouteNotice.ts
197402
+ function buildNoticeFromMeta(meta, payload, siteId) {
197403
+ const name = meta.formatInstanceName(payload);
197404
+ const title = name ? `You're previewing the ${name} ${meta.instanceNoun} of this ${meta.containerNoun}` : `You're previewing one ${meta.instanceNoun} of this ${meta.containerNoun}`;
197405
+ const body = `Edits in this sidebar apply to the whole ${meta.containerNoun}, so they'll show up on every ${meta.instanceNoun}. Need to change just this ${meta.instanceNoun}? You can do that from your ${meta.listLabel}.`;
197406
+ const ctaLabel = `Edit just this ${meta.instanceNoun}`;
197407
+ let href = null;
197408
+ try {
197409
+ href = getDashboardUrl(`sites/${siteId}/${meta.subEditorPath(payload)}`);
197410
+ } catch {
197411
+ href = null;
197412
+ }
197413
+ return {
197414
+ title,
197415
+ body,
197416
+ cta: href ? { label: ctaLabel, href } : null,
197417
+ fallbackMessage: href ? null : "Dashboard links are unavailable. Set `NEXT_PUBLIC_DASHBOARD_URL` so preview can link back to the dashboard."
197418
+ };
197419
+ }
197420
+ function resolveSubrouteNotice(ctx, args) {
197421
+ if (!ctx) return null;
197422
+ return foldSubroute(ctx, {
197423
+ "event-occurrence": (occurrence) => buildNoticeFromMeta(SUBROUTE_KINDS["event-occurrence"], occurrence, args.siteId),
197424
+ "course-run": (run3) => buildNoticeFromMeta(SUBROUTE_KINDS["course-run"], run3, args.siteId)
197425
+ });
197426
+ }
197427
+ var init_subrouteNotice = __esm({
197428
+ "../preview-next/src/client/preview/subrouteNotice.ts"() {
197429
+ init_url();
197430
+ init_src6();
197431
+ }
197432
+ });
195977
197433
  function EntryEditorPanel({
195978
197434
  siteId,
195979
197435
  entryData,
@@ -195985,7 +197441,7 @@ function EntryEditorPanel({
195985
197441
  apiClient,
195986
197442
  bearerToken,
195987
197443
  supabaseUrl,
195988
- occurrenceContext,
197444
+ entrySubrouteContext,
195989
197445
  metadataPanel,
195990
197446
  mediaAssets,
195991
197447
  widgets,
@@ -196021,54 +197477,10 @@ function EntryEditorPanel({
196021
197477
  [contentFormFields]
196022
197478
  );
196023
197479
  const contentInitialValues = useMemo(() => draftContent ?? {}, [draftContent]);
196024
- const occurrenceNotice = useMemo(() => {
196025
- if (!occurrenceContext) return null;
196026
- const date = occurrenceContext.startsAt?.split("T")[0] ?? null;
196027
- const editEventHref = (() => {
196028
- try {
196029
- return getDashboardUrl(`sites/${siteId}/content/${entryData.type ?? "event"}/${entryData.id}`);
196030
- } catch {
196031
- return null;
196032
- }
196033
- })();
196034
- const editOccurrenceHref = (() => {
196035
- try {
196036
- return getDashboardUrl(`sites/${siteId}/bookings/events/${occurrenceContext.seriesId}`);
196037
- } catch {
196038
- return null;
196039
- }
196040
- })();
196041
- return /* @__PURE__ */ jsxs("div", { className: "border-b bg-amber-50 px-4 py-3 text-amber-950", children: [
196042
- /* @__PURE__ */ jsxs("p", { className: "text-sm font-semibold", children: [
196043
- "You're viewing an event occurrence",
196044
- date ? ` (${date})` : "",
196045
- "."
196046
- ] }),
196047
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: "Sidebar edits apply to the parent event entry. Occurrence-specific overrides aren't editable in preview yet." }),
196048
- editEventHref && editOccurrenceHref ? /* @__PURE__ */ jsxs("div", { className: "mt-3 flex flex-wrap gap-2", children: [
196049
- /* @__PURE__ */ jsx(
196050
- "a",
196051
- {
196052
- className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
196053
- href: editEventHref,
196054
- target: "_blank",
196055
- rel: "noopener noreferrer",
196056
- children: "Edit event content"
196057
- }
196058
- ),
196059
- /* @__PURE__ */ jsx(
196060
- "a",
196061
- {
196062
- className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
196063
- href: editOccurrenceHref,
196064
- target: "_blank",
196065
- rel: "noopener noreferrer",
196066
- children: "Edit occurrence overrides"
196067
- }
196068
- )
196069
- ] }) : /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-amber-900/90", children: "Dashboard links are unavailable. Set `NEXT_PUBLIC_DASHBOARD_URL` so preview can link back to the dashboard." })
196070
- ] });
196071
- }, [entryData.id, entryData.type, occurrenceContext, siteId]);
197480
+ const subrouteNotice = useMemo(
197481
+ () => resolveSubrouteNotice(entrySubrouteContext ?? null, { siteId }),
197482
+ [entrySubrouteContext, siteId]
197483
+ );
196072
197484
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
196073
197485
  /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b px-4 py-2", children: /* @__PURE__ */ jsx(
196074
197486
  PreviewViewportControls,
@@ -196081,7 +197493,7 @@ function EntryEditorPanel({
196081
197493
  onZoomChange
196082
197494
  }
196083
197495
  ) }),
196084
- occurrenceNotice,
197496
+ subrouteNotice ? /* @__PURE__ */ jsx(SubrouteNotice, { model: subrouteNotice }) : null,
196085
197497
  /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 space-y-0 overflow-auto", children: [
196086
197498
  contentTypeSchema && entryData.type ? /* @__PURE__ */ jsx(Collapsible2, { open: contentOpen, onOpenChange: setContentOpen, children: /* @__PURE__ */ jsxs("div", { className: "border-b", children: [
196087
197499
  /* @__PURE__ */ jsx(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: "flex cursor-pointer items-center gap-2 px-4 py-3 hover:bg-accent/40", children: [
@@ -196157,6 +197569,8 @@ var init_EntryEditorPanel = __esm({
196157
197569
  init_src();
196158
197570
  init_widgetOverrides();
196159
197571
  init_PreviewViewportControls();
197572
+ init_SubrouteNoticePanel();
197573
+ init_subrouteNotice();
196160
197574
  }
196161
197575
  });
196162
197576
  function useStoreSelector(store, selector, isEqual = Object.is) {
@@ -200630,7 +202044,7 @@ function PreviewEditorSidebar({
200630
202044
  apiClient,
200631
202045
  bearerToken,
200632
202046
  supabaseUrl,
200633
- occurrenceContext,
202047
+ entrySubrouteContext,
200634
202048
  assistantPanel,
200635
202049
  sdkConfig,
200636
202050
  mediaAssets,
@@ -200740,7 +202154,7 @@ function PreviewEditorSidebar({
200740
202154
  apiClient,
200741
202155
  bearerToken,
200742
202156
  supabaseUrl,
200743
- occurrenceContext,
202157
+ entrySubrouteContext,
200744
202158
  metadataPanel: metadataSectionContent,
200745
202159
  mediaAssets,
200746
202160
  widgets: contentFormWidgets,
@@ -201934,8 +203348,8 @@ function deriveLaunchReadiness(input) {
201934
203348
  description: input.customDomain.kind === "connected" ? "A custom domain is already connected." : "You can connect a custom domain later when you are ready to launch.",
201935
203349
  action: openDashboardPathAction(
201936
203350
  siteId,
201937
- "/settings/domains",
201938
- "Manage domains"
203351
+ "/settings/domains?setup=domain",
203352
+ "Set up domain"
201939
203353
  ),
201940
203354
  evidence: evidenceFromDerivedState(
201941
203355
  input.customDomain.kind === "connected" ? "complete" : "pending"
@@ -204534,7 +205948,7 @@ function PreviewShellLayout({
204534
205948
  supabaseUrl,
204535
205949
  isSiteLaunched,
204536
205950
  maintenanceModeEnabled,
204537
- occurrenceContext,
205951
+ entrySubrouteContext,
204538
205952
  assistantPanel,
204539
205953
  sdkConfig,
204540
205954
  mediaAssets,
@@ -204808,7 +206222,7 @@ function PreviewShellLayout({
204808
206222
  setPreviewSidebarActiveTab(tab);
204809
206223
  },
204810
206224
  onClose: () => setDrawerOpen(false),
204811
- occurrenceContext: occurrenceContext ?? null,
206225
+ entrySubrouteContext: entrySubrouteContext ?? null,
204812
206226
  assistantPanel,
204813
206227
  mediaAssets,
204814
206228
  siteStyleAccess,
@@ -204915,7 +206329,7 @@ function PreviewShell({
204915
206329
  pageMetadata,
204916
206330
  isSiteLaunched,
204917
206331
  maintenanceModeEnabled,
204918
- occurrenceContext,
206332
+ entrySubrouteContext,
204919
206333
  assistantPanel,
204920
206334
  sdkConfig,
204921
206335
  mediaAssets,
@@ -204984,7 +206398,7 @@ function PreviewShell({
204984
206398
  supabaseUrl,
204985
206399
  isSiteLaunched,
204986
206400
  maintenanceModeEnabled,
204987
- occurrenceContext,
206401
+ entrySubrouteContext,
204988
206402
  assistantPanel,
204989
206403
  sdkConfig: sdkConfig ?? null,
204990
206404
  mediaAssets,
@@ -206177,7 +207591,7 @@ function SdkPreviewMode(props2) {
206177
207591
  pageMetadata,
206178
207592
  isSiteLaunched: true,
206179
207593
  maintenanceModeEnabled: false,
206180
- occurrenceContext: null,
207594
+ entrySubrouteContext: null,
206181
207595
  assistantPanel: null,
206182
207596
  sdkConfig: sdkConfigForEditor,
206183
207597
  mediaAssets: content.mediaAssets,