@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
@@ -621,7 +621,7 @@ var ENDPOINT_DEFINITIONS = {
621
621
  method: "GET",
622
622
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
623
623
  auth: "user",
624
- responseKind: "text"
624
+ responseKind: "blob"
625
625
  },
626
626
  getNewsletterSubscriber: {
627
627
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -952,12 +952,7 @@ var ENDPOINT_DEFINITIONS = {
952
952
  ],
953
953
  auth: "user",
954
954
  responseKind: "json",
955
- errors: [
956
- "validation:invalid_input",
957
- "resource:not_found",
958
- "resource:conflict",
959
- "server:internal_error"
960
- ]
955
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
961
956
  },
962
957
  unpublishTeamMemberProfile: {
963
958
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -1210,6 +1205,13 @@ var ENDPOINT_DEFINITIONS = {
1210
1205
  auth: "user",
1211
1206
  responseKind: "json"
1212
1207
  },
1208
+ exportBookingAppointmentsCsv: {
1209
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
1210
+ method: "GET",
1211
+ auth: "user",
1212
+ errors: [],
1213
+ responseKind: "blob"
1214
+ },
1213
1215
  createAppointment: {
1214
1216
  path: "/sites/{siteId}/bookings/appointments",
1215
1217
  method: "POST",
@@ -1337,6 +1339,13 @@ var ENDPOINT_DEFINITIONS = {
1337
1339
  auth: "user",
1338
1340
  responseKind: "json"
1339
1341
  },
1342
+ exportCourseEnrollmentsCsv: {
1343
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1344
+ method: "GET",
1345
+ auth: "user",
1346
+ errors: [],
1347
+ responseKind: "blob"
1348
+ },
1340
1349
  listCourseWaitlist: {
1341
1350
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1342
1351
  method: "GET",
@@ -2095,6 +2104,63 @@ var ENDPOINT_DEFINITIONS = {
2095
2104
  auth: "user",
2096
2105
  responseKind: "json"
2097
2106
  },
2107
+ updateRegisteredDomainContact: {
2108
+ path: "/domains/{domainId}/registrar/contact",
2109
+ method: "POST",
2110
+ errors: [
2111
+ "validation:invalid_input",
2112
+ "resource:not_found",
2113
+ "auth:forbidden",
2114
+ "external:service_error",
2115
+ "external:registrar_orphaned_contact_profile",
2116
+ "server:internal_error"
2117
+ ],
2118
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2119
+ auth: "user",
2120
+ responseKind: "json"
2121
+ },
2122
+ setRegisteredDomainPrivacy: {
2123
+ path: "/domains/{domainId}/registrar/privacy",
2124
+ method: "POST",
2125
+ errors: [
2126
+ "validation:invalid_input",
2127
+ "resource:not_found",
2128
+ "auth:forbidden",
2129
+ "external:service_error",
2130
+ "server:internal_error"
2131
+ ],
2132
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2133
+ auth: "user",
2134
+ responseKind: "json"
2135
+ },
2136
+ setRegisteredDomainAutoRenew: {
2137
+ path: "/domains/{domainId}/registrar/auto-renew",
2138
+ method: "POST",
2139
+ errors: [
2140
+ "validation:invalid_input",
2141
+ "resource:not_found",
2142
+ "auth:forbidden",
2143
+ "external:service_error",
2144
+ "server:internal_error"
2145
+ ],
2146
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2147
+ auth: "user",
2148
+ responseKind: "json"
2149
+ },
2150
+ getRegisteredDomainRenewalPosture: {
2151
+ path: "/domains/{domainId}/registrar/renewal",
2152
+ method: "GET",
2153
+ errors: [
2154
+ "validation:invalid_input",
2155
+ "resource:not_found",
2156
+ "auth:forbidden",
2157
+ "external:service_error",
2158
+ "server:internal_error"
2159
+ ],
2160
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
2161
+ auth: "user",
2162
+ responseKind: "json"
2163
+ },
2098
2164
  retryDomainVercel: {
2099
2165
  path: "/domains/{domainId}/vercel",
2100
2166
  method: "POST",
@@ -2642,6 +2708,14 @@ var ENDPOINT_DEFINITIONS = {
2642
2708
  auth: "user",
2643
2709
  responseKind: "json"
2644
2710
  },
2711
+ exportSeoPagesCsv: {
2712
+ path: "/sites/{siteId}/seo/pages",
2713
+ method: "GET",
2714
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
2715
+ auth: "user",
2716
+ responseKind: "blob",
2717
+ errors: []
2718
+ },
2645
2719
  getSeoQueries: {
2646
2720
  path: "/sites/{siteId}/seo/queries",
2647
2721
  method: "GET",
@@ -2650,6 +2724,14 @@ var ENDPOINT_DEFINITIONS = {
2650
2724
  auth: "user",
2651
2725
  responseKind: "json"
2652
2726
  },
2727
+ exportSeoQueriesCsv: {
2728
+ path: "/sites/{siteId}/seo/queries",
2729
+ method: "GET",
2730
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
2731
+ auth: "user",
2732
+ responseKind: "blob",
2733
+ errors: []
2734
+ },
2653
2735
  getPerformanceOverview: {
2654
2736
  path: "/sites/{siteId}/performance/overview",
2655
2737
  method: "GET",
@@ -2698,7 +2780,12 @@ var ENDPOINT_DEFINITIONS = {
2698
2780
  path: "/media/{assetId}/canonical-crop",
2699
2781
  method: "POST",
2700
2782
  tags: ["media", "media-{assetId}"],
2701
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
2783
+ errors: [
2784
+ "validation:invalid_input",
2785
+ "resource:not_found",
2786
+ "resource:conflict",
2787
+ "server:internal_error"
2788
+ ],
2702
2789
  auth: "user",
2703
2790
  responseKind: "json"
2704
2791
  },
@@ -3030,7 +3117,7 @@ var ENDPOINT_DEFINITIONS = {
3030
3117
  method: "GET",
3031
3118
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
3032
3119
  auth: "user",
3033
- responseKind: "text"
3120
+ responseKind: "blob"
3034
3121
  },
3035
3122
  // Public submit
3036
3123
  submitForm: {
@@ -3913,6 +4000,14 @@ var ENDPOINT_DEFINITIONS = {
3913
4000
  auth: "user",
3914
4001
  responseKind: "json"
3915
4002
  },
4003
+ exportEventSeriesAttendeesCsv: {
4004
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
4005
+ method: "GET",
4006
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
4007
+ auth: "user",
4008
+ errors: [],
4009
+ responseKind: "blob"
4010
+ },
3916
4011
  listEventSeriesWaitlist: {
3917
4012
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
3918
4013
  method: "GET",
@@ -4476,6 +4571,14 @@ var ENDPOINT_DEFINITIONS = {
4476
4571
  auth: "user",
4477
4572
  responseKind: "json"
4478
4573
  },
4574
+ exportBookingCustomersCsv: {
4575
+ path: "/sites/{siteId}/bookings/customers/export.csv",
4576
+ method: "GET",
4577
+ tags: ["site-{siteId}", "customers-{siteId}"],
4578
+ auth: "user",
4579
+ errors: [],
4580
+ responseKind: "blob"
4581
+ },
4479
4582
  createBookingCustomer: {
4480
4583
  path: "/sites/{siteId}/bookings/customers",
4481
4584
  method: "POST",
@@ -4503,6 +4606,21 @@ var ENDPOINT_DEFINITIONS = {
4503
4606
  "server:internal_error"
4504
4607
  ]
4505
4608
  },
4609
+ rectifyBookingParticipantIdentity: {
4610
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
4611
+ method: "PATCH",
4612
+ tags: ["site-{siteId}", "customers-{siteId}"],
4613
+ auth: "user",
4614
+ responseKind: "json",
4615
+ errors: [
4616
+ "validation:invalid_input",
4617
+ "auth:forbidden",
4618
+ "resource:not_found",
4619
+ "resource:already_exists",
4620
+ "resource:conflict",
4621
+ "server:internal_error"
4622
+ ]
4623
+ },
4506
4624
  listCustomerPasses: {
4507
4625
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
4508
4626
  method: "GET",
@@ -4637,13 +4755,46 @@ var ENDPOINT_DEFINITIONS = {
4637
4755
  auth: "user",
4638
4756
  responseKind: "json"
4639
4757
  },
4758
+ exportMoneyPaymentsCsv: {
4759
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
4760
+ method: "GET",
4761
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
4762
+ errors: [],
4763
+ auth: "user",
4764
+ responseKind: "blob"
4765
+ },
4766
+ exportMoneyBreakdownsCsv: {
4767
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
4768
+ method: "GET",
4769
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4770
+ errors: [],
4771
+ auth: "user",
4772
+ responseKind: "blob"
4773
+ },
4774
+ exportMoneyTimeSeriesCsv: {
4775
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
4776
+ method: "GET",
4777
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4778
+ errors: [],
4779
+ auth: "user",
4780
+ responseKind: "blob"
4781
+ },
4640
4782
  listBookingActivity: {
4641
4783
  path: "/sites/{siteId}/bookings/activity",
4642
4784
  method: "GET",
4643
4785
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4786
+ errors: [],
4644
4787
  auth: "user",
4645
4788
  responseKind: "json"
4646
4789
  },
4790
+ exportBookingActivityCsv: {
4791
+ path: "/sites/{siteId}/bookings/activity/export.csv",
4792
+ method: "GET",
4793
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4794
+ errors: [],
4795
+ auth: "user",
4796
+ responseKind: "blob"
4797
+ },
4647
4798
  // Site logs
4648
4799
  listSiteActivityLogs: {
4649
4800
  path: "/sites/{siteId}/logs/activity",
@@ -4795,13 +4946,6 @@ var ENDPOINT_DEFINITIONS = {
4795
4946
  auth: "user",
4796
4947
  responseKind: "blob"
4797
4948
  },
4798
- exportSeoCsv: {
4799
- path: "/sites/{siteId}/seo/export",
4800
- method: "GET",
4801
- tags: ["site-{siteId}", "seo"],
4802
- auth: "user",
4803
- responseKind: "blob"
4804
- },
4805
4949
  // Admin site cost (for admin panel)
4806
4950
  adminSiteCost: {
4807
4951
  path: "/admin/sites/{siteId}/cost",
@@ -7753,6 +7897,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
7753
7897
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
7754
7898
  "missing_amount",
7755
7899
  "amount_exceeds_remaining",
7900
+ "credit_refunds_disabled",
7901
+ "missing_credit_customer",
7756
7902
  "deposit_refund_override_required",
7757
7903
  "refund_revoke_requires_full_line_refund",
7758
7904
  "unified_order_link_required"
@@ -9070,12 +9216,29 @@ function defineFrameCapability(capability) {
9070
9216
  function defineBlockDesignCapability(capability) {
9071
9217
  return {
9072
9218
  ...capability,
9073
- kind: "designed"
9219
+ kind: "designed",
9220
+ sectionHeights: capability.sectionHeights ?? ["default"],
9221
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
9222
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
9223
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
9074
9224
  };
9075
9225
  }
9076
9226
 
9077
9227
  // ../theme-core/src/site-styles/appearancePresets.ts
9228
+ function assertValidOptionGroups(preset2) {
9229
+ preset2.optionGroups?.forEach((group) => {
9230
+ const selectedOption = group.options.find(
9231
+ (option) => option.id === group.selectedOptionId
9232
+ );
9233
+ if (!selectedOption) {
9234
+ throw new Error(
9235
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
9236
+ );
9237
+ }
9238
+ });
9239
+ }
9078
9240
  function defineBlockAppearancePreset(preset2) {
9241
+ assertValidOptionGroups(preset2);
9079
9242
  return preset2;
9080
9243
  }
9081
9244
  function defineSiteChromeAppearancePreset(preset2) {
@@ -9088,13 +9251,122 @@ var appearancePresets = [
9088
9251
  target: "hero",
9089
9252
  label: "Immersive image hero",
9090
9253
  blockKinds: ["block.hero"],
9254
+ constraints: {
9255
+ layoutFamilies: ["centered", "compact"]
9256
+ },
9091
9257
  design: {
9092
9258
  sectionSurface: "hero-image",
9093
9259
  contentFrame: plainFrame,
9094
9260
  itemSurface: "none",
9095
9261
  transitionAfter: "soft-fade-short",
9096
9262
  emphasis: "high",
9097
- heroLegibility: "scrim-gradient"
9263
+ sectionHeight: "hero",
9264
+ imageSurfaceTreatment: { kind: "neutral-wash" }
9265
+ }
9266
+ }),
9267
+ defineBlockAppearancePreset({
9268
+ kind: "block-design",
9269
+ id: "hero-brand-scrim",
9270
+ target: "hero",
9271
+ label: "Brand scrim image hero",
9272
+ blockKinds: ["block.hero"],
9273
+ constraints: {
9274
+ layoutFamilies: ["centered", "compact"]
9275
+ },
9276
+ optionGroups: [
9277
+ {
9278
+ id: "image-surface-treatment",
9279
+ label: "Treatment",
9280
+ selectedOptionId: "brand-scrim-primary",
9281
+ options: [
9282
+ {
9283
+ id: "brand-scrim-primary",
9284
+ label: "Brand scrim",
9285
+ designPatch: {
9286
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
9287
+ }
9288
+ },
9289
+ {
9290
+ id: "neutral-scrim",
9291
+ label: "Neutral scrim",
9292
+ designPatch: {
9293
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
9294
+ }
9295
+ }
9296
+ ]
9297
+ }
9298
+ ],
9299
+ layoutPatches: [
9300
+ {
9301
+ constraints: {
9302
+ layoutVariantKeys: ["micro"]
9303
+ },
9304
+ designPatch: {
9305
+ sectionHeight: "banner"
9306
+ }
9307
+ }
9308
+ ],
9309
+ design: {
9310
+ sectionSurface: "hero-image",
9311
+ contentFrame: plainFrame,
9312
+ itemSurface: "none",
9313
+ transitionAfter: "soft-fade-short",
9314
+ emphasis: "high",
9315
+ sectionHeight: "immersive",
9316
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
9317
+ }
9318
+ }),
9319
+ defineBlockAppearancePreset({
9320
+ kind: "block-design",
9321
+ id: "hero-brand-scrim-fixed-frame",
9322
+ target: "hero",
9323
+ label: "Fixed-frame brand scrim hero",
9324
+ blockKinds: ["block.hero"],
9325
+ constraints: {
9326
+ layoutFamilies: ["centered", "compact"]
9327
+ },
9328
+ optionGroups: [
9329
+ {
9330
+ id: "image-surface-treatment",
9331
+ label: "Treatment",
9332
+ selectedOptionId: "brand-scrim-primary",
9333
+ options: [
9334
+ {
9335
+ id: "brand-scrim-primary",
9336
+ label: "Brand scrim",
9337
+ designPatch: {
9338
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
9339
+ }
9340
+ },
9341
+ {
9342
+ id: "neutral-scrim",
9343
+ label: "Neutral scrim",
9344
+ designPatch: {
9345
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
9346
+ }
9347
+ }
9348
+ ]
9349
+ }
9350
+ ],
9351
+ layoutPatches: [
9352
+ {
9353
+ constraints: {
9354
+ layoutVariantKeys: ["micro"]
9355
+ },
9356
+ designPatch: {
9357
+ sectionHeight: "banner"
9358
+ }
9359
+ }
9360
+ ],
9361
+ design: {
9362
+ sectionSurface: "hero-image",
9363
+ contentFrame: plainFrame,
9364
+ itemSurface: "none",
9365
+ transitionAfter: "soft-fade-short",
9366
+ emphasis: "high",
9367
+ sectionHeight: "immersive",
9368
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
9369
+ imageSurfaceMotion: "fixed-frame"
9098
9370
  }
9099
9371
  }),
9100
9372
  defineBlockAppearancePreset({
@@ -9111,17 +9383,26 @@ var appearancePresets = [
9111
9383
  emphasis: "high"
9112
9384
  }
9113
9385
  }),
9386
+ defineBlockAppearancePreset({
9387
+ kind: "block-design",
9388
+ id: "body-text-editorial-intro",
9389
+ target: "body-text",
9390
+ label: "Editorial intro copy",
9391
+ blockKinds: ["block.body-text"],
9392
+ design: {
9393
+ sectionSurface: "base",
9394
+ contentFrame: plainFrame,
9395
+ itemSurface: "none",
9396
+ transitionAfter: "soft-fade-short",
9397
+ emphasis: "high"
9398
+ }
9399
+ }),
9114
9400
  defineBlockAppearancePreset({
9115
9401
  kind: "block-design",
9116
9402
  id: "offerings-calm-list",
9117
9403
  target: "offerings",
9118
9404
  label: "Calm offerings list",
9119
- blockKinds: [
9120
- "block.event-listing",
9121
- "block.event-calendar",
9122
- "block.event-spotlight",
9123
- "block.product-list"
9124
- ],
9405
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
9125
9406
  design: {
9126
9407
  sectionSurface: "muted-band",
9127
9408
  contentFrame: plainFrame,
@@ -9200,6 +9481,35 @@ var appearancePresets = [
9200
9481
  emphasis: "high"
9201
9482
  }
9202
9483
  }),
9484
+ defineBlockAppearancePreset({
9485
+ kind: "block-design",
9486
+ id: "testimonials-dark-proof",
9487
+ target: "testimonials",
9488
+ label: "Dark proof panel",
9489
+ blockKinds: ["block.testimonials"],
9490
+ design: {
9491
+ sectionSurface: "accent-band",
9492
+ contentFrame: panelFrame("raised"),
9493
+ itemSurface: "raised",
9494
+ transitionAfter: "soft-fade-short",
9495
+ emphasis: "high"
9496
+ }
9497
+ }),
9498
+ defineBlockAppearancePreset({
9499
+ kind: "block-design",
9500
+ id: "testimonials-accent-quote-proof",
9501
+ target: "testimonials",
9502
+ label: "Accent quote proof",
9503
+ blockKinds: ["block.testimonials"],
9504
+ design: {
9505
+ sectionSurface: "accent-band",
9506
+ contentFrame: plainFrame,
9507
+ itemSurface: "raised",
9508
+ transitionAfter: "soft-fade-short",
9509
+ emphasis: "high",
9510
+ testimonialCardTreatment: "accent-quote"
9511
+ }
9512
+ }),
9203
9513
  defineBlockAppearancePreset({
9204
9514
  kind: "block-design",
9205
9515
  id: "faq-contained-help",
@@ -9228,6 +9538,20 @@ var appearancePresets = [
9228
9538
  emphasis: "medium"
9229
9539
  }
9230
9540
  }),
9541
+ defineBlockAppearancePreset({
9542
+ kind: "block-design",
9543
+ id: "contact-form-dark-card",
9544
+ target: "contact-form",
9545
+ label: "Dark form card",
9546
+ blockKinds: ["block.form"],
9547
+ design: {
9548
+ sectionSurface: "accent-band",
9549
+ contentFrame: panelFrame("raised"),
9550
+ itemSurface: "none",
9551
+ transitionAfter: "soft-fade-short",
9552
+ emphasis: "high"
9553
+ }
9554
+ }),
9231
9555
  defineBlockAppearancePreset({
9232
9556
  kind: "block-design",
9233
9557
  id: "cta-accent-band",
@@ -9247,9 +9571,33 @@ var appearancePresets = [
9247
9571
  id: "header-clean-base",
9248
9572
  target: "site-header",
9249
9573
  label: "Clean base header",
9250
- chrome: {
9251
- surface: "base",
9252
- emphasis: "medium"
9574
+ header: {
9575
+ surface: {
9576
+ kind: "neutral-solid",
9577
+ token: "surface",
9578
+ textColorToken: "text"
9579
+ },
9580
+ navTreatment: "minimal",
9581
+ dropdownTreatment: "surface",
9582
+ ctaTreatment: "default",
9583
+ behavior: "default"
9584
+ }
9585
+ }),
9586
+ defineSiteChromeAppearancePreset({
9587
+ kind: "site-chrome",
9588
+ id: "site-header-brand-solid-inverted-cta",
9589
+ target: "site-header",
9590
+ label: "Brand solid header with inverted CTA",
9591
+ header: {
9592
+ surface: {
9593
+ kind: "brand-solid",
9594
+ token: "primary",
9595
+ textColorToken: "primaryForeground"
9596
+ },
9597
+ navTreatment: "uppercase-underline",
9598
+ dropdownTreatment: "matched-solid",
9599
+ ctaTreatment: "inverted",
9600
+ behavior: "sticky-shrink"
9253
9601
  }
9254
9602
  }),
9255
9603
  defineSiteChromeAppearancePreset({
@@ -9257,10 +9605,31 @@ var appearancePresets = [
9257
9605
  id: "footer-muted-grounding",
9258
9606
  target: "site-footer",
9259
9607
  label: "Muted grounding footer",
9260
- chrome: {
9608
+ footer: {
9609
+ kind: "grounding",
9261
9610
  surface: "muted-band",
9262
9611
  emphasis: "low"
9263
9612
  }
9613
+ }),
9614
+ defineSiteChromeAppearancePreset({
9615
+ kind: "site-chrome",
9616
+ id: "site-footer-brand-two-band",
9617
+ target: "site-footer",
9618
+ label: "Two-band brand footer",
9619
+ footer: {
9620
+ kind: "brand-two-band",
9621
+ surface: {
9622
+ token: "primary",
9623
+ shade: "800",
9624
+ textColorToken: "primaryForeground"
9625
+ },
9626
+ bottomBand: {
9627
+ token: "primary",
9628
+ shade: "900",
9629
+ textColorToken: "primaryForeground"
9630
+ },
9631
+ emphasis: "high"
9632
+ }
9264
9633
  })
9265
9634
  ];
9266
9635
 
@@ -9930,6 +10299,111 @@ var pebble = defineButtonPersonality({
9930
10299
  }
9931
10300
  });
9932
10301
 
10302
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
10303
+ var showtimePill = defineButtonPersonality({
10304
+ id: "showtime-pill",
10305
+ name: "Showtime Pill",
10306
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
10307
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
10308
+ buttonSystem: {
10309
+ global: {
10310
+ cornerStyle: "pill",
10311
+ shadow: "low",
10312
+ textTransform: "uppercase",
10313
+ fontWeight: 700,
10314
+ borderWidth: 2,
10315
+ hoverTransform: "lift",
10316
+ hoverColor: "darken",
10317
+ typography: "body",
10318
+ paddingPreset: "spacious",
10319
+ italic: false
10320
+ },
10321
+ sizes: {
10322
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
10323
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
10324
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
10325
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
10326
+ },
10327
+ variants: [
10328
+ {
10329
+ id: "primary",
10330
+ name: "Primary",
10331
+ enabled: true,
10332
+ priority: 1,
10333
+ background: { type: "solid", colorToken: "primary" },
10334
+ textColorToken: "background",
10335
+ borderRadius: "rounded-full",
10336
+ effects: {
10337
+ hover: [{ effectId: "pop" }]
10338
+ }
10339
+ },
10340
+ {
10341
+ id: "secondary",
10342
+ name: "Secondary",
10343
+ enabled: true,
10344
+ priority: 2,
10345
+ background: { type: "transparent" },
10346
+ textColorToken: "primary",
10347
+ borderRadius: "rounded-full",
10348
+ border: { widthClass: "border-2", colorToken: "primary" },
10349
+ effects: {
10350
+ hover: [{ effectId: "pop" }]
10351
+ }
10352
+ },
10353
+ {
10354
+ id: "hero",
10355
+ name: "Hero",
10356
+ enabled: true,
10357
+ priority: 1,
10358
+ background: { type: "solid", colorToken: "secondary" },
10359
+ textColorToken: "primary",
10360
+ borderRadius: "rounded-full",
10361
+ effects: {
10362
+ hover: [{ effectId: "pop" }]
10363
+ }
10364
+ },
10365
+ {
10366
+ id: "header",
10367
+ name: "Header",
10368
+ enabled: true,
10369
+ priority: 2,
10370
+ background: { type: "solid", colorToken: "background" },
10371
+ textColorToken: "primary",
10372
+ borderRadius: "rounded-full",
10373
+ border: { widthClass: "border-2", colorToken: "primary" },
10374
+ effects: {
10375
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10376
+ }
10377
+ },
10378
+ {
10379
+ id: "outline",
10380
+ name: "Outline",
10381
+ enabled: true,
10382
+ priority: 3,
10383
+ background: { type: "transparent" },
10384
+ textColorToken: "primary",
10385
+ borderRadius: "rounded-full",
10386
+ border: { widthClass: "border-2", colorToken: "primary" },
10387
+ effects: {
10388
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
10389
+ }
10390
+ },
10391
+ {
10392
+ id: "ghost",
10393
+ name: "Ghost",
10394
+ enabled: true,
10395
+ priority: 3,
10396
+ background: { type: "transparent" },
10397
+ textColorToken: "primary",
10398
+ borderRadius: "rounded-full",
10399
+ effects: {
10400
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10401
+ }
10402
+ }
10403
+ ]
10404
+ }
10405
+ });
10406
+
9933
10407
  // ../theme-core/src/buttons/personalities/soft-pill.ts
9934
10408
  var softPill = defineButtonPersonality({
9935
10409
  id: "soft-pill",
@@ -10010,7 +10484,8 @@ var buttonPersonalities = [
10010
10484
  editorialLink,
10011
10485
  pebble,
10012
10486
  inkStamp,
10013
- brushedWash
10487
+ brushedWash,
10488
+ showtimePill
10014
10489
  ];
10015
10490
  var personalitiesById = new Map(
10016
10491
  buttonPersonalities.map((p) => [p.id, p])
@@ -12599,14 +13074,7 @@ var proseLinkStyleSchema = z24.object({
12599
13074
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
12600
13075
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
12601
13076
  });
12602
- var semanticSpacingSchema = z24.enum([
12603
- "none",
12604
- "compact",
12605
- "cozy",
12606
- "medium",
12607
- "comfortable",
12608
- "spacious"
12609
- ]);
13077
+ var semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
12610
13078
  var boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
12611
13079
  var boxBackgroundOverlaySchema = z24.object({
12612
13080
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -12623,6 +13091,7 @@ var boxBackgroundSchema = z24.object({
12623
13091
  scale: z24.string().nullable().optional(),
12624
13092
  position: z24.string().nullable().optional(),
12625
13093
  opacity: z24.number().min(0).max(1).nullable().optional(),
13094
+ motion: z24.enum(["static", "fixed-frame"]).nullable().optional(),
12626
13095
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
12627
13096
  textColor: z24.string().nullable().optional(),
12628
13097
  headingColor: z24.string().nullable().optional()
@@ -12630,7 +13099,7 @@ var boxBackgroundSchema = z24.object({
12630
13099
  var sectionStylesOverrideSchema = z24.object({
12631
13100
  background: boxBackgroundSchema.nullable().optional(),
12632
13101
  spacing: semanticSpacingSchema.nullable().optional(),
12633
- minHeight: z24.enum(["none", "hero", "immersive"]).nullable().optional()
13102
+ minHeight: z24.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
12634
13103
  });
12635
13104
  var containerStylesOverrideSchema = z24.object({
12636
13105
  background: boxBackgroundSchema.nullable().optional(),
@@ -12649,7 +13118,8 @@ var cardStylesOverrideSchema = z24.object({
12649
13118
  border: cardBorderOverrideSchema.nullable().optional(),
12650
13119
  spacing: semanticSpacingSchema.nullable().optional(),
12651
13120
  raised: z24.boolean().nullable().optional(),
12652
- rounded: boxRoundedSchema.nullable().optional()
13121
+ rounded: boxRoundedSchema.nullable().optional(),
13122
+ treatment: z24.enum(["accent-quote"]).nullable().optional()
12653
13123
  });
12654
13124
  var blockStyleOverridesSchema = z24.object({
12655
13125
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -12724,15 +13194,7 @@ var inputStyle = z24.object({
12724
13194
  });
12725
13195
  var headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
12726
13196
  var headerPositioning = z24.enum(["static", "sticky", "fixed"]);
12727
- var headerNavStyle = z24.enum([
12728
- "minimal",
12729
- "underline",
12730
- "underline-grow",
12731
- "capsule",
12732
- "scale",
12733
- "frosted",
12734
- "solid"
12735
- ]);
13197
+ var headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
12736
13198
  var navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
12737
13199
  var headerMaxWidth = z24.enum(["container", "full"]);
12738
13200
  var headerContainerSchema = z24.object({
@@ -12786,6 +13248,7 @@ var dropdownStyleSchema = z24.object({
12786
13248
  // optional = no override (browser default)
12787
13249
  }).optional();
12788
13250
  var headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
13251
+ var headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
12789
13252
  var navContainerSchema = z24.object({
12790
13253
  type: z24.enum(["none", "pill", "glass"]).default("none"),
12791
13254
  tint: z24.string().nullable().optional(),
@@ -12804,7 +13267,10 @@ var headerSchema = z24.object({
12804
13267
  shrinkOnScroll: z24.boolean(),
12805
13268
  maxWidth: headerMaxWidth,
12806
13269
  logoOverride: mediaSchema.nullable().optional(),
12807
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
13270
+ background: headerBackgroundSchema.default({
13271
+ type: "color",
13272
+ color: "surface"
13273
+ }),
12808
13274
  textColor: z24.string().nullable().optional(),
12809
13275
  // Site title and general header text
12810
13276
  navStyle: headerNavStyle,
@@ -12824,6 +13290,13 @@ var headerSchema = z24.object({
12824
13290
  navLinkStyle: navLinkStyleSchema.optional(),
12825
13291
  // CTA button spacing (desktop left margin)
12826
13292
  ctaGap: headerCtaGapSchema.optional(),
13293
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
13294
+ // materializes this to ctaVariant against the active button personality.
13295
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
13296
+ // Optional theme-level CTA variant for header/nav CTA buttons.
13297
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
13298
+ // authored Theme V2 concepts.
13299
+ ctaVariant: z24.string().min(1).optional(),
12827
13300
  // Dropdown menu styling (nav dropdowns and mobile drawer)
12828
13301
  dropdownStyle: dropdownStyleSchema
12829
13302
  });
@@ -12880,7 +13353,10 @@ var footerSchema = z24.object({
12880
13353
  variant: footerVariant,
12881
13354
  maxWidth: footerMaxWidth,
12882
13355
  showLogoText: z24.boolean().optional(),
12883
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
13356
+ background: headerBackgroundSchema.default({
13357
+ type: "color",
13358
+ color: "surface"
13359
+ }),
12884
13360
  // Footer nav styling (independent from header)
12885
13361
  navStyle: headerNavStyle.default("minimal"),
12886
13362
  navColor: z24.string().nullable().optional(),
@@ -12902,17 +13378,7 @@ var layoutSchema = z24.object({
12902
13378
  desktop: containerPaddingPresetSchema.optional()
12903
13379
  }).optional()
12904
13380
  }).optional();
12905
- var heroTypographySizeSchema = z24.enum([
12906
- "sm",
12907
- "base",
12908
- "lg",
12909
- "xl",
12910
- "2xl",
12911
- "3xl",
12912
- "4xl",
12913
- "5xl",
12914
- "6xl"
12915
- ]);
13381
+ var heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
12916
13382
  var heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
12917
13383
  var heroResponsiveTypographySchema = z24.object({
12918
13384
  headlineSize: heroTypographySizeSchema.optional(),
@@ -12937,6 +13403,13 @@ var heroTypographySchema = z24.object({
12937
13403
  var heroSchema = z24.object({
12938
13404
  typography: heroTypographySchema.optional()
12939
13405
  }).optional();
13406
+ var bodyTextIntroTypographySizeSchema = z24.enum(["default", "editorial"]);
13407
+ var bodyTextSchema = z24.object({
13408
+ intro: z24.object({
13409
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
13410
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
13411
+ }).optional()
13412
+ }).optional();
12940
13413
  var gradientsSchema = z24.object({
12941
13414
  button: z24.string().min(1).nullable().optional(),
12942
13415
  hero: z24.string().min(1).nullable().optional(),
@@ -12958,6 +13431,7 @@ var themeSchema = z24.object({
12958
13431
  gradients: gradientsSchema.optional(),
12959
13432
  layout: layoutSchema,
12960
13433
  hero: heroSchema,
13434
+ bodyText: bodyTextSchema,
12961
13435
  header: headerSchema,
12962
13436
  footer: footerSchema,
12963
13437
  buttons: buttonSystemSchema.optional(),
@@ -12981,10 +13455,7 @@ var themeSchema = z24.object({
12981
13455
  ).optional(),
12982
13456
  // Structured block-kind theme overrides (v1: typography prose-link style only)
12983
13457
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
12984
- blockOverrides: z24.record(
12985
- z24.string(),
12986
- blockThemeOverrideSchema
12987
- ).optional(),
13458
+ blockOverrides: z24.record(z24.string(), blockThemeOverrideSchema).optional(),
12988
13459
  // Structured custom CSS rules
12989
13460
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
12990
13461
  customCssRules: customCssRulesSchema,
@@ -13155,6 +13626,28 @@ var brandLedJewel = definePaletteVariant({
13155
13626
  { name: "border", hex: "#a8a29e" }
13156
13627
  ]
13157
13628
  });
13629
+ var brandLedBurgundyGold = definePaletteVariant({
13630
+ id: "brand-led-burgundy-gold",
13631
+ name: "Brand-led \u2014 Burgundy Gold",
13632
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
13633
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
13634
+ mode: "light",
13635
+ colors: [
13636
+ { name: "primary", hex: "#7c2e38" },
13637
+ { name: "secondary", hex: "#d4af37" },
13638
+ { name: "accent", hex: "#b8e19a" },
13639
+ { name: "success", hex: "#10b981" },
13640
+ { name: "warning", hex: "#f59e0b" },
13641
+ { name: "destructive", hex: "#ef4444" },
13642
+ { name: "background", hex: "#f1dfd0" },
13643
+ { name: "surface", hex: "#f5e6db" },
13644
+ { name: "surfaceAlt", hex: "#f8ece3" },
13645
+ { name: "muted", hex: "#c9b8a8" },
13646
+ { name: "text", hex: "#400000" },
13647
+ { name: "primaryForeground", hex: "#ffffff" },
13648
+ { name: "border", hex: "#c9b8a8" }
13649
+ ]
13650
+ });
13158
13651
 
13159
13652
  // ../theme-core/src/palette/variants/high-contrast.ts
13160
13653
  var highContrastInk = definePaletteVariant({
@@ -13366,6 +13859,7 @@ var paletteVariants = [
13366
13859
  brandLedCool,
13367
13860
  brandLedWarm,
13368
13861
  brandLedJewel,
13862
+ brandLedBurgundyGold,
13369
13863
  // Warm-neutral family
13370
13864
  warmNeutralClay,
13371
13865
  warmNeutralCream,
@@ -13441,7 +13935,8 @@ var curatedSiteStyleIdValues = [
13441
13935
  "site-style:quiet-luxury",
13442
13936
  "site-style:practical-services",
13443
13937
  "site-style:modern-wellness",
13444
- "site-style:bold-launch"
13938
+ "site-style:bold-launch",
13939
+ "site-style:south-west-twerk-school"
13445
13940
  ];
13446
13941
  var quietBudget = {
13447
13942
  accentDensity: "low",
@@ -13496,6 +13991,8 @@ function defineCuratedSiteStyle(input) {
13496
13991
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
13497
13992
  supportedTransitions: generatedDesignOptionCatalog.transitions
13498
13993
  },
13994
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
13995
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13499
13996
  buttonPersonalityChoices: input.buttonPersonalityChoices,
13500
13997
  paletteVariantChoices: input.paletteVariantChoices
13501
13998
  };
@@ -13742,6 +14239,101 @@ var curatedSiteStyles = [
13742
14239
  paletteChoice("brand-led-jewel"),
13743
14240
  paletteChoice("brand-led-warm")
13744
14241
  ]
14242
+ }),
14243
+ defineCuratedSiteStyle({
14244
+ id: "site-style:south-west-twerk-school",
14245
+ name: "South West Twerk School",
14246
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
14247
+ 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.",
14248
+ selectionKeywords: [
14249
+ "dance",
14250
+ "classes",
14251
+ "workshop",
14252
+ "school",
14253
+ "movement",
14254
+ "performance",
14255
+ "community"
14256
+ ],
14257
+ tokenRecipes: {
14258
+ palette: "brand-led",
14259
+ contrast: "maximum",
14260
+ radius: "soft",
14261
+ shadow: "layered",
14262
+ typography: "clean-sans",
14263
+ spacing: "airy",
14264
+ motion: "expressive"
14265
+ },
14266
+ compositionBudget: expressiveBudget,
14267
+ themeOverrides: {
14268
+ typography: {
14269
+ body: {
14270
+ family: "Manrope, system-ui, sans-serif",
14271
+ size: "lg",
14272
+ weight: "regular",
14273
+ lineHeight: "relaxed",
14274
+ letterSpacing: "normal"
14275
+ },
14276
+ headings: {
14277
+ default: {
14278
+ family: '"TAN - PEARL", sans-serif',
14279
+ weight: "bold",
14280
+ lineHeight: "normal",
14281
+ letterSpacing: "tight",
14282
+ colorToken: "primary",
14283
+ italic: null,
14284
+ case: null
14285
+ },
14286
+ h1: {
14287
+ size: "xl",
14288
+ weight: "bold",
14289
+ lineHeight: "normal",
14290
+ letterSpacing: "tight",
14291
+ italic: null
14292
+ },
14293
+ h2: {
14294
+ size: "lg",
14295
+ weight: "bold",
14296
+ lineHeight: "normal",
14297
+ letterSpacing: "normal",
14298
+ italic: null
14299
+ },
14300
+ h3: {
14301
+ size: "md",
14302
+ weight: "bold",
14303
+ lineHeight: "normal",
14304
+ letterSpacing: "normal",
14305
+ italic: null
14306
+ }
14307
+ },
14308
+ scale: "balanced"
14309
+ },
14310
+ bodyText: {
14311
+ intro: {
14312
+ paragraphSize: "editorial",
14313
+ headingSize: "editorial"
14314
+ }
14315
+ }
14316
+ },
14317
+ recommendedAppearancePresetIds: [
14318
+ "site-header-brand-solid-inverted-cta",
14319
+ "site-footer-brand-two-band",
14320
+ "hero-brand-scrim-fixed-frame",
14321
+ "body-text-editorial-intro",
14322
+ "testimonials-accent-quote-proof",
14323
+ "contact-form-dark-card"
14324
+ ],
14325
+ buttonPersonalityChoices: [
14326
+ buttonChoice("showtime-pill"),
14327
+ buttonChoice("confident-chip"),
14328
+ buttonChoice("ink-stamp"),
14329
+ buttonChoice("brushed-wash")
14330
+ ],
14331
+ paletteVariantChoices: [
14332
+ paletteChoice("brand-led-burgundy-gold"),
14333
+ paletteChoice("brand-led-jewel"),
14334
+ paletteChoice("brand-led-warm"),
14335
+ paletteChoice("high-contrast-ink")
14336
+ ]
13745
14337
  })
13746
14338
  ];
13747
14339
  var curatedSiteStylesById = new Map(
@@ -13786,6 +14378,40 @@ var heroLegibilityStrategySchema = z26.enum([
13786
14378
  "scrim-gradient",
13787
14379
  "solid-panel"
13788
14380
  ]);
14381
+ var sectionHeightIntentSchema = z26.enum([
14382
+ "default",
14383
+ "banner",
14384
+ "hero",
14385
+ "immersive"
14386
+ ]);
14387
+ var imageSurfaceTreatmentIntensitySchema = z26.enum(["soft", "balanced", "strong"]);
14388
+ var imageSurfaceMotionSchema = z26.enum(["static", "fixed-frame"]);
14389
+ var imageSurfaceTreatmentSchema = z26.discriminatedUnion("kind", [
14390
+ z26.object({ kind: z26.literal("none") }).strict(),
14391
+ z26.object({
14392
+ kind: z26.literal("brand-scrim"),
14393
+ token: z26.enum(["primary", "secondary", "accent"]),
14394
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
14395
+ }).strict(),
14396
+ z26.object({
14397
+ kind: z26.literal("brand-wash"),
14398
+ token: z26.enum(["primary", "secondary", "accent"]),
14399
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
14400
+ }).strict(),
14401
+ z26.object({
14402
+ kind: z26.literal("neutral-scrim"),
14403
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
14404
+ }).strict(),
14405
+ z26.object({
14406
+ kind: z26.literal("neutral-wash"),
14407
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
14408
+ }).strict(),
14409
+ z26.object({
14410
+ kind: z26.literal("solid-panel"),
14411
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
14412
+ }).strict()
14413
+ ]);
14414
+ var testimonialCardTreatmentSchema = z26.enum(["default", "accent-quote"]);
13789
14415
  function uniqueNonEmpty(values) {
13790
14416
  const uniqueValues = [...new Set(values)];
13791
14417
  const firstValue = uniqueValues[0];
@@ -13824,7 +14450,11 @@ var blockDesignPlanSchema = z26.object({
13824
14450
  itemSurface: z26.enum(userDesignOptionCatalog.itemSurfaces),
13825
14451
  transitionAfter: z26.enum(userDesignOptionCatalog.transitions),
13826
14452
  emphasis: z26.enum(userDesignOptionCatalog.emphases),
13827
- heroLegibility: heroLegibilityStrategySchema.optional()
14453
+ sectionHeight: sectionHeightIntentSchema.optional(),
14454
+ heroLegibility: heroLegibilityStrategySchema.optional(),
14455
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14456
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14457
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
13828
14458
  }).strict();
13829
14459
  var styleAuthoritySchema = z26.discriminatedUnion("kind", [
13830
14460
  z26.object({
@@ -15354,6 +15984,7 @@ var SEMANTIC_SPACING_VALUES = [
15354
15984
  ];
15355
15985
  var SECTION_MIN_HEIGHT_VALUES = [
15356
15986
  "none",
15987
+ "banner",
15357
15988
  "hero",
15358
15989
  "immersive"
15359
15990
  ];
@@ -15381,6 +16012,7 @@ var CONTAINER_SPACING_MAP = {
15381
16012
  };
15382
16013
  var SECTION_MIN_HEIGHT_MAP = {
15383
16014
  none: "",
16015
+ banner: "rb-section-min-h-banner",
15384
16016
  hero: "rb-section-min-h-hero",
15385
16017
  immersive: "rb-section-min-h-immersive"
15386
16018
  };
@@ -16171,6 +16803,9 @@ var boxStylesCompositeTransform = {
16171
16803
  classes.push(roundedResult);
16172
16804
  }
16173
16805
  }
16806
+ if (input.treatment === "accent-quote") {
16807
+ classes.push("rb-card-treatment-accent-quote");
16808
+ }
16174
16809
  return classes.join(" ").trim() || "";
16175
16810
  }
16176
16811
  };
@@ -16268,7 +16903,7 @@ var sectionClassNameTransform = {
16268
16903
  minHeight = input.minHeight;
16269
16904
  } else if (process.env.NODE_ENV !== "production") {
16270
16905
  console.warn(
16271
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
16906
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
16272
16907
  );
16273
16908
  }
16274
16909
  }
@@ -16591,23 +17226,6 @@ function styledCard(children, opts, ...mods) {
16591
17226
  );
16592
17227
  }
16593
17228
 
16594
- // ../blocks/src/system/node/fragments/typography.ts
16595
- function mergeClassName(base, extra) {
16596
- return [base, extra ?? ""].filter(Boolean).join(" ");
16597
- }
16598
- function captionText(opts, ...mods) {
16599
- const {
16600
- as: asProp,
16601
- className: classNameProp,
16602
- color,
16603
- ...rest
16604
- } = opts ?? {};
16605
- const as = asProp ?? "p";
16606
- const className = mergeClassName("rb-caption", classNameProp);
16607
- const style = textColorStyle(color ?? "mutedText");
16608
- return text({ ...rest, as, className, style }, ...mods);
16609
- }
16610
-
16611
17229
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
16612
17230
  function joinClasses(...parts) {
16613
17231
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -17512,18 +18130,17 @@ function buildAttributionNodes() {
17512
18130
  const name = text(
17513
18131
  {
17514
18132
  as: "strong",
17515
- className: "rb-block",
17516
- style: textColorStyle("text")
18133
+ className: "rb-block"
17517
18134
  },
17518
18135
  bind("testimonial.content.name", { fallback: "Anonymous" })
17519
18136
  );
17520
- const jobTitle = captionText(
17521
- null,
18137
+ const jobTitle = text(
18138
+ { as: "p", className: "rb-caption" },
17522
18139
  when("testimonial.content.jobTitle"),
17523
18140
  bind("testimonial.content.jobTitle")
17524
18141
  );
17525
- const company = captionText(
17526
- null,
18142
+ const company = text(
18143
+ { as: "p", className: "rb-caption" },
17527
18144
  when("testimonial.content.company"),
17528
18145
  bind("testimonial.content.company")
17529
18146
  );
@@ -17557,8 +18174,7 @@ function buildTestimonialCard(...mods) {
17557
18174
  );
17558
18175
  const body = richText(
17559
18176
  {
17560
- className: "rb-prose rb-max-w-none",
17561
- style: textColorStyle("text")
18177
+ className: "rb-prose rb-max-w-none"
17562
18178
  },
17563
18179
  bind("testimonial.content.body"),
17564
18180
  when("testimonial.content.body")
@@ -19280,6 +19896,7 @@ function heroContentCard(children, gap) {
19280
19896
  return styledContainer({
19281
19897
  bindFrom: "_contentCardStyles",
19282
19898
  constrainWidth: false,
19899
+ baseClassName: "rb-relative rb-isolate",
19283
19900
  rootType: "stack",
19284
19901
  rootProps: {
19285
19902
  gap
@@ -19310,6 +19927,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
19310
19927
  function heroContainerStack(children, gap) {
19311
19928
  return styledContainer({
19312
19929
  rootType: "stack",
19930
+ baseClassName: "rb-relative rb-isolate",
19313
19931
  rootProps: {
19314
19932
  gap: "none",
19315
19933
  justify: {
@@ -20550,7 +21168,7 @@ function resolveHeroVerticalAlignment(content) {
20550
21168
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
20551
21169
  const sectionStyles = asPartialObject(content._sectionStyles);
20552
21170
  const minHeight = sectionStyles?.minHeight;
20553
- if (minHeight === "hero" || minHeight === "immersive") return "center";
21171
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
20554
21172
  const variant = resolveHeroVariant(content);
20555
21173
  if (variant === "split" || variant === "splitReverse") return "center";
20556
21174
  return "top";
@@ -21352,6 +21970,26 @@ var footerSplitNavSingleClassTransform = {
21352
21970
  ]);
21353
21971
  }
21354
21972
  };
21973
+ var footerSplitMainClassSchema = z38.object({
21974
+ base: z38.string().optional(),
21975
+ reverseClass: z38.string().optional()
21976
+ });
21977
+ var footerSplitMainClassTransform = {
21978
+ id: "layout.footerSplitMainClass",
21979
+ kind: "string",
21980
+ summary: "Compose split-footer main row classes from footer logo placement",
21981
+ schema: footerSplitMainClassSchema,
21982
+ run: (value, options) => {
21983
+ const logo = asPartialObject(value);
21984
+ const placement = logo?.placement ?? "right";
21985
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
21986
+ 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";
21987
+ return joinClasses4([
21988
+ options.base ?? baseClass,
21989
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
21990
+ ]);
21991
+ }
21992
+ };
21355
21993
  var footerLogoClassSchema = z38.object({
21356
21994
  base: z38.string().optional()
21357
21995
  });
@@ -21362,14 +22000,11 @@ var footerLogoClassTransform = {
21362
22000
  schema: footerLogoClassSchema,
21363
22001
  run: (value, options) => {
21364
22002
  const logo = asPartialObject(value);
21365
- const placement = logo?.placement ?? "right";
21366
22003
  const align = logo?.align ?? "end";
21367
22004
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
21368
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
21369
22005
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
21370
22006
  return joinClasses4([
21371
22007
  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",
21372
- orderClass,
21373
22008
  selfAlignClass,
21374
22009
  hiddenClass
21375
22010
  ]);
@@ -21424,6 +22059,7 @@ var layoutTransforms = [
21424
22059
  footerBottomBarContainerClassTransform,
21425
22060
  footerBottomBarStyleTransform,
21426
22061
  footerSplitNavSingleClassTransform,
22062
+ footerSplitMainClassTransform,
21427
22063
  footerLogoClassTransform,
21428
22064
  footerLogoMediaClassTransform,
21429
22065
  footerLogoTextVisibleTransform
@@ -21731,7 +22367,7 @@ var createNavRow = (className, align = "end") => navRow({
21731
22367
  var headerCta = ctaButton({
21732
22368
  basePath: "menu.ctaItem",
21733
22369
  whenPath: "menu.ctaItem.label",
21734
- variantPath: "menu.ctaItem.variant",
22370
+ variantPath: "$root.theme.header.ctaVariant",
21735
22371
  linkPath: "menu.ctaItem.link",
21736
22372
  sizeFallback: "sm",
21737
22373
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -21739,7 +22375,7 @@ var headerCta = ctaButton({
21739
22375
  var mobileCta = ctaButton({
21740
22376
  basePath: "menu.ctaItem",
21741
22377
  whenPath: "menu.ctaItem.label",
21742
- variantPath: "menu.ctaItem.variant",
22378
+ variantPath: "$root.theme.header.ctaVariant",
21743
22379
  linkPath: "menu.ctaItem.link",
21744
22380
  sizeFallback: "md",
21745
22381
  className: "nav-mobile-cta rb-w-full"
@@ -22200,7 +22836,13 @@ var splitFooterLayout = stack(
22200
22836
  [
22201
22837
  inline(
22202
22838
  {
22203
- 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"
22839
+ className: {
22840
+ $bind: {
22841
+ from: "$root.theme.footer.logo",
22842
+ transforms: [{ id: "layout.footerSplitMainClass" }],
22843
+ 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"
22844
+ }
22845
+ }
22204
22846
  },
22205
22847
  [
22206
22848
  stack(
@@ -24433,7 +25075,8 @@ var courseEntrySubrouteContextSchema = z50.union([
24433
25075
  run: z50.object({
24434
25076
  courseId: z50.string(),
24435
25077
  seriesId: z50.string(),
24436
- runSlug: z50.string()
25078
+ runSlug: z50.string(),
25079
+ runName: z50.string().nullable()
24437
25080
  })
24438
25081
  }),
24439
25082
  z50.object({
@@ -32247,6 +32890,34 @@ function panelCapable() {
32247
32890
  itemSurfaces: "unsupported"
32248
32891
  });
32249
32892
  }
32893
+ var heroSectionHeights = [
32894
+ "default",
32895
+ "banner",
32896
+ "hero",
32897
+ "immersive"
32898
+ ];
32899
+ var heroImageSurfaceTreatments = [
32900
+ "none",
32901
+ "brand-scrim",
32902
+ "brand-wash",
32903
+ "neutral-scrim",
32904
+ "neutral-wash",
32905
+ "solid-panel"
32906
+ ];
32907
+ var heroImageSurfaceMotions = [
32908
+ "static",
32909
+ "fixed-frame"
32910
+ ];
32911
+ function heroCapable() {
32912
+ return declareBlockDesignCapability({
32913
+ sectionSurfaces: "supported",
32914
+ contentFrames: ["plain", "panel"],
32915
+ itemSurfaces: "unsupported",
32916
+ sectionHeights: heroSectionHeights,
32917
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
32918
+ imageSurfaceMotions: heroImageSurfaceMotions
32919
+ });
32920
+ }
32250
32921
  function plainItemsCapable() {
32251
32922
  return declareBlockDesignCapability({
32252
32923
  sectionSurfaces: "supported",
@@ -32363,7 +33034,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
32363
33034
  };
32364
33035
  }
32365
33036
  var systemBlockDefinitionsRaw = [
32366
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
33037
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
32367
33038
  flow: heroFlow,
32368
33039
  layoutProfiles: [
32369
33040
  layoutProfile({
@@ -32467,7 +33138,12 @@ var systemBlockDefinitionsRaw = [
32467
33138
  flow: siteChromeFlow,
32468
33139
  layoutProfiles: []
32469
33140
  })),
32470
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
33141
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
33142
+ sectionSurfaces: "supported",
33143
+ contentFrames: ["plain", "panel"],
33144
+ itemSurfaces: "supported",
33145
+ testimonialCardTreatments: ["default", "accent-quote"]
33146
+ }), defineBlockDesignMetadata({
32471
33147
  flow: proofFlow,
32472
33148
  layoutProfiles: [
32473
33149
  layoutProfile({
@@ -32779,8 +33455,15 @@ function parseOpacity(value) {
32779
33455
  }
32780
33456
  return opacity <= 1 ? opacity : opacity / 100;
32781
33457
  }
32782
- function appendOptionalClasses(baseClassName, optionalClassName) {
32783
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
33458
+ function backgroundMotionClassNames(input) {
33459
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
33460
+ }
33461
+ function appendBackgroundMediaClasses(baseClassName, input) {
33462
+ return [
33463
+ baseClassName,
33464
+ backgroundMotionClassNames(input),
33465
+ backgroundVideoMobileClassNames(input)
33466
+ ].filter(Boolean).join(" ");
32784
33467
  }
32785
33468
  var resolveImageStyleTransform = {
32786
33469
  id: "background.resolveImageStyle",
@@ -32857,9 +33540,9 @@ var resolveImageClassNameTransform = {
32857
33540
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
32858
33541
  const position = isString(input.position) ? input.position.trim() : null;
32859
33542
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
32860
- return appendOptionalClasses(
33543
+ return appendBackgroundMediaClasses(
32861
33544
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
32862
- backgroundVideoMobileClassNames(input)
33545
+ input
32863
33546
  );
32864
33547
  }
32865
33548
  let needsAnchoring = false;
@@ -32872,18 +33555,18 @@ var resolveImageClassNameTransform = {
32872
33555
  }
32873
33556
  }
32874
33557
  if (!needsAnchoring) {
32875
- return appendOptionalClasses(
33558
+ return appendBackgroundMediaClasses(
32876
33559
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
32877
- backgroundVideoMobileClassNames(input)
33560
+ input
32878
33561
  );
32879
33562
  }
32880
33563
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
32881
33564
  const isCustom = position && !isPreset;
32882
33565
  if (isCustom) {
32883
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
33566
+ return appendBackgroundMediaClasses(baseClass, input);
32884
33567
  }
32885
33568
  const anchorClasses = getAnchorClasses(position);
32886
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
33569
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
32887
33570
  }
32888
33571
  };
32889
33572
  var resolveOverlayStyleTransform = {
@@ -39971,16 +40654,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
39971
40654
  };
39972
40655
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
39973
40656
  }
39974
- const textSize = configuredDropdownStyle?.textSize;
39975
- if (textSize) {
39976
- const textSizeMap = {
39977
- "xs": "0.75rem",
39978
- "sm": "0.875rem",
39979
- "base": "1rem",
39980
- "lg": "1.125rem"
39981
- };
39982
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
39983
- }
40657
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
40658
+ const textSizeMap = {
40659
+ "xs": "0.75rem",
40660
+ "sm": "0.875rem",
40661
+ "base": "1rem",
40662
+ "lg": "1.125rem"
40663
+ };
40664
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
39984
40665
  if (additionalRules.length > 0) {
39985
40666
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
39986
40667
  return baseCSS + `
@@ -40269,12 +40950,10 @@ ${selector} .rb-container-full`;
40269
40950
  ${rootRules.join("\n ")}
40270
40951
  }`);
40271
40952
  if (containerPadding?.mobile) {
40272
- cssChunks.push(
40273
- `${containerSelector} {
40953
+ cssChunks.push(`${containerSelector} {
40274
40954
  padding-left: ${toPaddingValue(containerPadding.mobile)};
40275
40955
  padding-right: ${toPaddingValue(containerPadding.mobile)};
40276
- }`
40277
- );
40956
+ }`);
40278
40957
  }
40279
40958
  if (containerPadding?.tablet) {
40280
40959
  cssChunks.push(
@@ -40300,6 +40979,10 @@ ${selector} .rb-container-full`;
40300
40979
  if (heroTypographyCss) {
40301
40980
  cssChunks.push(heroTypographyCss);
40302
40981
  }
40982
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
40983
+ if (bodyTextTypographyCss) {
40984
+ cssChunks.push(bodyTextTypographyCss);
40985
+ }
40303
40986
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
40304
40987
  return cssChunks.join("\n\n");
40305
40988
  }
@@ -40312,6 +40995,9 @@ function toPaddingValue(preset2) {
40312
40995
  };
40313
40996
  return map[preset2];
40314
40997
  }
40998
+ var waveTransitionMask = svgDataUrl(
40999
+ "<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>"
41000
+ );
40315
41001
  function generateSiteStyleTransitionCss(themeId) {
40316
41002
  const selector = `:where([data-theme-scope="${themeId}"])`;
40317
41003
  return `${selector} [data-style-group^='site-style-transition-'] {
@@ -40379,21 +41065,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
40379
41065
 
40380
41066
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
40381
41067
  background: var(--site-style-transition-to);
40382
- clip-path: polygon(
40383
- 0 42%,
40384
- 10% 34%,
40385
- 21% 42%,
40386
- 34% 31%,
40387
- 48% 39%,
40388
- 63% 29%,
40389
- 78% 37%,
40390
- 90% 30%,
40391
- 100% 36%,
40392
- 100% 100%,
40393
- 0 100%
40394
- );
41068
+ mask-image: url("${waveTransitionMask}");
41069
+ mask-repeat: no-repeat;
41070
+ mask-size: 100% 100%;
41071
+ -webkit-mask-image: url("${waveTransitionMask}");
41072
+ -webkit-mask-repeat: no-repeat;
41073
+ -webkit-mask-size: 100% 100%;
40395
41074
  }`;
40396
41075
  }
41076
+ function svgDataUrl(svg) {
41077
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
41078
+ }
40397
41079
  function generateHeroTypographyCss(themeId, theme) {
40398
41080
  const typography = theme.hero?.typography;
40399
41081
  if (!typography) return "";
@@ -40416,33 +41098,21 @@ function generateHeroTypographyCss(themeId, theme) {
40416
41098
  ${subheadlineRules.join("\n ")}
40417
41099
  }`);
40418
41100
  }
40419
- const microHeadlineRules = buildTypographyRules(
40420
- typography.microHeadlineSize,
40421
- typography.microHeadlineLineHeight
40422
- );
41101
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
40423
41102
  if (microHeadlineRules.length > 0) {
40424
41103
  chunks.push(`${microHeadlineSelector} {
40425
41104
  ${microHeadlineRules.join("\n ")}
40426
41105
  }`);
40427
41106
  }
40428
- const microSubheadlineRules = buildTypographyRules(
40429
- typography.microSubheadlineSize,
40430
- typography.microSubheadlineLineHeight
40431
- );
41107
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
40432
41108
  if (microSubheadlineRules.length > 0) {
40433
41109
  chunks.push(`${microSubheadlineSelector} {
40434
41110
  ${microSubheadlineRules.join("\n ")}
40435
41111
  }`);
40436
41112
  }
40437
41113
  if (typography.responsive?.tablet) {
40438
- const tabletHeadlineRules = buildTypographyRules(
40439
- typography.responsive.tablet.headlineSize,
40440
- typography.responsive.tablet.headlineLineHeight
40441
- );
40442
- const tabletSubheadlineRules = buildTypographyRules(
40443
- typography.responsive.tablet.subheadlineSize,
40444
- typography.responsive.tablet.subheadlineLineHeight
40445
- );
41114
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
41115
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
40446
41116
  const tabletChunks = [];
40447
41117
  if (tabletHeadlineRules.length > 0) {
40448
41118
  tabletChunks.push(`${headlineSelector} {
@@ -40461,14 +41131,8 @@ function generateHeroTypographyCss(themeId, theme) {
40461
41131
  }
40462
41132
  }
40463
41133
  if (typography.responsive?.mobile) {
40464
- const mobileHeadlineRules = buildTypographyRules(
40465
- typography.responsive.mobile.headlineSize,
40466
- typography.responsive.mobile.headlineLineHeight
40467
- );
40468
- const mobileSubheadlineRules = buildTypographyRules(
40469
- typography.responsive.mobile.subheadlineSize,
40470
- typography.responsive.mobile.subheadlineLineHeight
40471
- );
41134
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
41135
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
40472
41136
  const mobileChunks = [];
40473
41137
  if (mobileHeadlineRules.length > 0) {
40474
41138
  mobileChunks.push(`${headlineSelector} {
@@ -40498,6 +41162,27 @@ function buildTypographyRules(size, lineHeight) {
40498
41162
  }
40499
41163
  return rules;
40500
41164
  }
41165
+ function generateBodyTextTypographyCss(themeId, theme) {
41166
+ const intro = theme.bodyText?.intro;
41167
+ if (!intro) return "";
41168
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
41169
+ const chunks = [];
41170
+ if (intro.headingSize === "editorial") {
41171
+ chunks.push(`${rootSelector} .body-copy-heading {
41172
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
41173
+ line-height: 1.08;
41174
+ }`);
41175
+ }
41176
+ if (intro.paragraphSize === "editorial") {
41177
+ chunks.push(`${rootSelector} .body-copy-body {
41178
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
41179
+ --rb-prose-lg-line-height: 1.55;
41180
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
41181
+ --rb-prose-xl-sm-line-height: 1.55;
41182
+ }`);
41183
+ }
41184
+ return chunks.join("\n\n");
41185
+ }
40501
41186
  function toHeroSize(size) {
40502
41187
  const map = {
40503
41188
  sm: "0.875rem",
@@ -40508,7 +41193,8 @@ function toHeroSize(size) {
40508
41193
  "3xl": "1.875rem",
40509
41194
  "4xl": "2.25rem",
40510
41195
  "5xl": "3rem",
40511
- "6xl": "3.75rem"
41196
+ "6xl": "3.75rem",
41197
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
40512
41198
  };
40513
41199
  return map[size];
40514
41200
  }
@@ -42836,12 +43522,16 @@ var containerResponsiveThemeCss = `/*
42836
43522
  .rb-h-full {
42837
43523
  height: 100%;
42838
43524
  }
43525
+ .rb-section-min-h-banner {
43526
+ min-height: clamp(16rem, 34svh, 24rem);
43527
+ }
42839
43528
  .rb-section-min-h-hero {
42840
43529
  min-height: clamp(32rem, 62svh, 44rem);
42841
43530
  }
42842
43531
  .rb-section-min-h-immersive {
42843
43532
  min-height: clamp(38rem, 78svh, 54rem);
42844
43533
  }
43534
+ .rb-section-min-h-banner > .rb-container,
42845
43535
  .rb-section-min-h-hero > .rb-container,
42846
43536
  .rb-section-min-h-immersive > .rb-container {
42847
43537
  min-height: inherit;
@@ -43951,6 +44641,19 @@ var containerResponsiveThemeCss = `/*
43951
44641
  .rb-object-contain {
43952
44642
  object-fit: contain;
43953
44643
  }
44644
+ .rb-bg-motion-fixed-frame {
44645
+ position: fixed;
44646
+ inset: 0;
44647
+ width: 100vw;
44648
+ height: 100svh;
44649
+ }
44650
+ @media (hover: none), (prefers-reduced-motion: reduce) {
44651
+ .rb-bg-motion-fixed-frame {
44652
+ position: absolute;
44653
+ width: 100%;
44654
+ height: 100%;
44655
+ }
44656
+ }
43954
44657
 
43955
44658
  /* Line clamp */
43956
44659
  .rb-line-clamp-2,
@@ -48461,13 +49164,13 @@ var containerResponsiveThemeCss = `/*
48461
49164
 
48462
49165
  /* Eyebrow - color only (typography via .rb-eyebrow) */
48463
49166
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
48464
- color: rgb(var(--tb-text));
49167
+ color: var(--section-text-color, rgb(var(--tb-text)));
48465
49168
  }
48466
49169
 
48467
49170
  /* Subheadline - supporting text below headline */
48468
49171
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
48469
49172
  font-size: 1.125rem;
48470
- color: rgb(var(--tb-text));
49173
+ color: var(--section-text-color, rgb(var(--tb-text)));
48471
49174
  }
48472
49175
 
48473
49176
  @container rb-site (min-width: 640px) {
@@ -48541,6 +49244,20 @@ var containerResponsiveThemeCss = `/*
48541
49244
  max-width: 60rem;
48542
49245
  }
48543
49246
 
49247
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
49248
+ font-size: var(--rb-prose-lg-font-size);
49249
+ line-height: var(--rb-prose-lg-line-height);
49250
+ }
49251
+
49252
+ @container rb-site (min-width: 640px) {
49253
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
49254
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
49255
+ font-size: var(--rb-prose-xl-sm-font-size);
49256
+ line-height: var(--rb-prose-xl-sm-line-height);
49257
+ }
49258
+ }
49259
+ }
49260
+
48544
49261
  /* Variant: Narrow (left-aligned, shorter line length) */
48545
49262
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
48546
49263
  max-width: 34rem;
@@ -49883,6 +50600,13 @@ var containerResponsiveThemeCss = `/*
49883
50600
  border-radius: var(--rb-block-radius);
49884
50601
  }
49885
50602
 
50603
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
50604
+ border: 0;
50605
+ border-left: 5px solid rgb(var(--tb-secondary));
50606
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
50607
+ color: rgb(var(--tb-primaryForeground));
50608
+ }
50609
+
49886
50610
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
49887
50611
  font-size: var(--rb-testimonial-quote-size);
49888
50612
  line-height: 1;
@@ -49891,6 +50615,12 @@ var containerResponsiveThemeCss = `/*
49891
50615
  color: rgb(var(--tb-primary));
49892
50616
  }
49893
50617
 
50618
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
50619
+ color: rgb(var(--tb-secondary));
50620
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
50621
+ opacity: 1;
50622
+ }
50623
+
49894
50624
 
49895
50625
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
49896
50626
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -53509,7 +54239,8 @@ function toEntrySubrouteContext(entrySubrouteData) {
53509
54239
  run: {
53510
54240
  courseId: entrySubrouteData.run.courseId,
53511
54241
  seriesId: entrySubrouteData.run.seriesId,
53512
- runSlug: entrySubrouteData.run.runSlug
54242
+ runSlug: entrySubrouteData.run.runSlug,
54243
+ runName: entrySubrouteData.run.runName
53513
54244
  }
53514
54245
  };
53515
54246
  }
@@ -53889,7 +54620,7 @@ var SimpleCache = class {
53889
54620
  };
53890
54621
 
53891
54622
  // src/version.ts
53892
- var SDK_VERSION = "0.60.11";
54623
+ var SDK_VERSION = "0.60.14";
53893
54624
 
53894
54625
  // src/client/error.ts
53895
54626
  var RiverbankApiError = class _RiverbankApiError extends Error {