@riverbankcms/sdk 0.60.12 → 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 (91) hide show
  1. package/README.md +10 -7
  2. package/dist/_dts/api/src/bookingConfig.d.ts +31 -1
  3. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +38 -1
  4. package/dist/_dts/api/src/bookingOperations.d.ts +3 -0
  5. package/dist/_dts/api/src/bookingRecords.d.ts +45 -0
  6. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  7. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +1 -5
  8. package/dist/_dts/api/src/communications.d.ts +1 -1
  9. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  10. package/dist/_dts/api/src/endpoints.d.ts +89 -9
  11. package/dist/_dts/api/src/index.d.ts +2 -1
  12. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  13. package/dist/_dts/api/src/seoEndpoints.d.ts +2 -0
  14. package/dist/_dts/api/src/siteAssets.d.ts +0 -10
  15. package/dist/_dts/api/src/types.d.ts +1 -1
  16. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  17. package/dist/_dts/blocks/src/index.d.ts +1 -0
  18. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  19. package/dist/_dts/blocks/src/server.d.ts +1 -0
  20. package/dist/_dts/blocks/src/subroutes/fold.d.ts +40 -0
  21. package/dist/_dts/blocks/src/subroutes/formatDate.d.ts +12 -0
  22. package/dist/_dts/blocks/src/subroutes/index.d.ts +3 -0
  23. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +32 -0
  24. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +3 -1
  25. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +1 -0
  27. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +1 -0
  28. package/dist/_dts/blocks/src/system/spacing.d.ts +2 -1
  29. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -0
  30. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +5 -1
  31. package/dist/_dts/core/src/booking-refunds.d.ts +8 -0
  32. package/dist/_dts/core/src/participant-identity.d.ts +1 -73
  33. package/dist/_dts/core/src/participants.d.ts +19 -7
  34. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +188 -36
  35. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -3
  36. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -3
  37. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -3
  38. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -3
  39. package/dist/_dts/preview-next/src/client/preview/SubrouteNoticePanel.d.ts +13 -0
  40. package/dist/_dts/preview-next/src/client/preview/subrouteNotice.d.ts +26 -0
  41. package/dist/_dts/sdk/src/contracts/page.d.ts +1 -0
  42. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  43. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -0
  44. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +4 -5
  45. package/dist/_dts/sdk/src/version.d.ts +1 -1
  46. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  47. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +17 -0
  48. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  49. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  50. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +66 -30
  51. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +16 -0
  52. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  53. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  54. package/dist/_dts/theme-core/src/schema.d.ts +174 -6
  55. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +328 -15
  56. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +54 -2
  57. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +124 -0
  58. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  59. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  60. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +21 -0
  61. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +2 -1
  62. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  63. package/dist/_dts/theme-core/src/site-styles/types.d.ts +135 -2
  64. package/dist/_dts/ui/src/badge.d.ts +1 -1
  65. package/dist/_dts/ui/src/button.d.ts +1 -1
  66. package/dist/cli/index.mjs +744 -176
  67. package/dist/client/bookings.mjs +115 -63
  68. package/dist/client/client.mjs +848 -227
  69. package/dist/client/hooks.mjs +737 -173
  70. package/dist/client/rendering/client.mjs +179 -100
  71. package/dist/client/rendering/islands.mjs +179 -99
  72. package/dist/client/rendering.mjs +847 -226
  73. package/dist/preview-next/before-render.mjs +103 -16
  74. package/dist/preview-next/client/runtime.mjs +1615 -319
  75. package/dist/preview-next/middleware.mjs +103 -16
  76. package/dist/server/components.mjs +838 -227
  77. package/dist/server/config-validation.mjs +737 -173
  78. package/dist/server/config.mjs +737 -173
  79. package/dist/server/data.mjs +737 -173
  80. package/dist/server/index.mjs +106 -79
  81. package/dist/server/next.mjs +841 -229
  82. package/dist/server/page-converter.mjs +589 -144
  83. package/dist/server/prebuild.mjs +1 -1
  84. package/dist/server/rendering/server.mjs +838 -227
  85. package/dist/server/rendering.mjs +838 -227
  86. package/dist/server/routing.mjs +771 -178
  87. package/dist/server/server.mjs +738 -174
  88. package/dist/server/theme-bridge.mjs +216 -39
  89. package/dist/server/theme.mjs +139 -37
  90. package/dist/styles/index.css +44 -2
  91. 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",
@@ -2699,6 +2708,14 @@ var ENDPOINT_DEFINITIONS = {
2699
2708
  auth: "user",
2700
2709
  responseKind: "json"
2701
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
+ },
2702
2719
  getSeoQueries: {
2703
2720
  path: "/sites/{siteId}/seo/queries",
2704
2721
  method: "GET",
@@ -2707,6 +2724,14 @@ var ENDPOINT_DEFINITIONS = {
2707
2724
  auth: "user",
2708
2725
  responseKind: "json"
2709
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
+ },
2710
2735
  getPerformanceOverview: {
2711
2736
  path: "/sites/{siteId}/performance/overview",
2712
2737
  method: "GET",
@@ -2755,7 +2780,12 @@ var ENDPOINT_DEFINITIONS = {
2755
2780
  path: "/media/{assetId}/canonical-crop",
2756
2781
  method: "POST",
2757
2782
  tags: ["media", "media-{assetId}"],
2758
- 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
+ ],
2759
2789
  auth: "user",
2760
2790
  responseKind: "json"
2761
2791
  },
@@ -3087,7 +3117,7 @@ var ENDPOINT_DEFINITIONS = {
3087
3117
  method: "GET",
3088
3118
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
3089
3119
  auth: "user",
3090
- responseKind: "text"
3120
+ responseKind: "blob"
3091
3121
  },
3092
3122
  // Public submit
3093
3123
  submitForm: {
@@ -3970,6 +4000,14 @@ var ENDPOINT_DEFINITIONS = {
3970
4000
  auth: "user",
3971
4001
  responseKind: "json"
3972
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
+ },
3973
4011
  listEventSeriesWaitlist: {
3974
4012
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
3975
4013
  method: "GET",
@@ -4533,6 +4571,14 @@ var ENDPOINT_DEFINITIONS = {
4533
4571
  auth: "user",
4534
4572
  responseKind: "json"
4535
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
+ },
4536
4582
  createBookingCustomer: {
4537
4583
  path: "/sites/{siteId}/bookings/customers",
4538
4584
  method: "POST",
@@ -4560,6 +4606,21 @@ var ENDPOINT_DEFINITIONS = {
4560
4606
  "server:internal_error"
4561
4607
  ]
4562
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
+ },
4563
4624
  listCustomerPasses: {
4564
4625
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
4565
4626
  method: "GET",
@@ -4694,13 +4755,46 @@ var ENDPOINT_DEFINITIONS = {
4694
4755
  auth: "user",
4695
4756
  responseKind: "json"
4696
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
+ },
4697
4782
  listBookingActivity: {
4698
4783
  path: "/sites/{siteId}/bookings/activity",
4699
4784
  method: "GET",
4700
4785
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4786
+ errors: [],
4701
4787
  auth: "user",
4702
4788
  responseKind: "json"
4703
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
+ },
4704
4798
  // Site logs
4705
4799
  listSiteActivityLogs: {
4706
4800
  path: "/sites/{siteId}/logs/activity",
@@ -4852,13 +4946,6 @@ var ENDPOINT_DEFINITIONS = {
4852
4946
  auth: "user",
4853
4947
  responseKind: "blob"
4854
4948
  },
4855
- exportSeoCsv: {
4856
- path: "/sites/{siteId}/seo/export",
4857
- method: "GET",
4858
- tags: ["site-{siteId}", "seo"],
4859
- auth: "user",
4860
- responseKind: "blob"
4861
- },
4862
4949
  // Admin site cost (for admin panel)
4863
4950
  adminSiteCost: {
4864
4951
  path: "/admin/sites/{siteId}/cost",
@@ -6094,68 +6181,6 @@ function toLocationCoordinates(value) {
6094
6181
  };
6095
6182
  }
6096
6183
 
6097
- // ../core/src/participant-identity.ts
6098
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
6099
- participant_id: {
6100
- field: "participant_id",
6101
- role: "canonical_link",
6102
- canonicalSource: "booking_participants.id",
6103
- contractAction: "tighten_in_839",
6104
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
6105
- },
6106
- display_name: {
6107
- field: "display_name",
6108
- role: "contextual_snapshot",
6109
- canonicalSource: "booking_participants.display_name for live identity",
6110
- contractAction: "retain_as_snapshot",
6111
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
6112
- },
6113
- email: {
6114
- field: "email",
6115
- role: "contextual_snapshot",
6116
- canonicalSource: "booking_participants.email_normalized for live email identity",
6117
- contractAction: "retain_as_snapshot",
6118
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
6119
- },
6120
- email_normalized: {
6121
- field: "email_normalized",
6122
- role: "contextual_snapshot",
6123
- canonicalSource: "booking_participants.email_normalized for live email identity",
6124
- contractAction: "retain_as_snapshot",
6125
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
6126
- },
6127
- phone: {
6128
- field: "phone",
6129
- role: "contextual_snapshot",
6130
- canonicalSource: "booking_participants.phone for live phone identity",
6131
- contractAction: "retain_as_snapshot",
6132
- notes: "Participation-time phone context. Live identity belongs to the participant row."
6133
- },
6134
- identity_state: {
6135
- field: "identity_state",
6136
- role: "materialization_state",
6137
- canonicalSource: "booking_participants.identity_state for subject state",
6138
- contractAction: "review_for_later_contract_cleanup",
6139
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
6140
- },
6141
- event_attendee_guest_id: {
6142
- field: "event_attendee_guest_id",
6143
- role: "compatibility_projection",
6144
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
6145
- contractAction: "retain_as_projection",
6146
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
6147
- }
6148
- };
6149
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
6150
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
6151
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
6152
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
6153
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
6154
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
6155
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
6156
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
6157
- ];
6158
-
6159
6184
  // ../media-core/src/typeGuards.ts
6160
6185
  function isRecord(value) {
6161
6186
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -7872,6 +7897,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
7872
7897
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
7873
7898
  "missing_amount",
7874
7899
  "amount_exceeds_remaining",
7900
+ "credit_refunds_disabled",
7901
+ "missing_credit_customer",
7875
7902
  "deposit_refund_override_required",
7876
7903
  "refund_revoke_requires_full_line_refund",
7877
7904
  "unified_order_link_required"
@@ -9189,12 +9216,29 @@ function defineFrameCapability(capability) {
9189
9216
  function defineBlockDesignCapability(capability) {
9190
9217
  return {
9191
9218
  ...capability,
9192
- 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"]
9193
9224
  };
9194
9225
  }
9195
9226
 
9196
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
+ }
9197
9240
  function defineBlockAppearancePreset(preset2) {
9241
+ assertValidOptionGroups(preset2);
9198
9242
  return preset2;
9199
9243
  }
9200
9244
  function defineSiteChromeAppearancePreset(preset2) {
@@ -9207,13 +9251,122 @@ var appearancePresets = [
9207
9251
  target: "hero",
9208
9252
  label: "Immersive image hero",
9209
9253
  blockKinds: ["block.hero"],
9254
+ constraints: {
9255
+ layoutFamilies: ["centered", "compact"]
9256
+ },
9210
9257
  design: {
9211
9258
  sectionSurface: "hero-image",
9212
9259
  contentFrame: plainFrame,
9213
9260
  itemSurface: "none",
9214
9261
  transitionAfter: "soft-fade-short",
9215
9262
  emphasis: "high",
9216
- 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"
9217
9370
  }
9218
9371
  }),
9219
9372
  defineBlockAppearancePreset({
@@ -9230,17 +9383,26 @@ var appearancePresets = [
9230
9383
  emphasis: "high"
9231
9384
  }
9232
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
+ }),
9233
9400
  defineBlockAppearancePreset({
9234
9401
  kind: "block-design",
9235
9402
  id: "offerings-calm-list",
9236
9403
  target: "offerings",
9237
9404
  label: "Calm offerings list",
9238
- blockKinds: [
9239
- "block.event-listing",
9240
- "block.event-calendar",
9241
- "block.event-spotlight",
9242
- "block.product-list"
9243
- ],
9405
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
9244
9406
  design: {
9245
9407
  sectionSurface: "muted-band",
9246
9408
  contentFrame: plainFrame,
@@ -9319,6 +9481,35 @@ var appearancePresets = [
9319
9481
  emphasis: "high"
9320
9482
  }
9321
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
+ }),
9322
9513
  defineBlockAppearancePreset({
9323
9514
  kind: "block-design",
9324
9515
  id: "faq-contained-help",
@@ -9347,6 +9538,20 @@ var appearancePresets = [
9347
9538
  emphasis: "medium"
9348
9539
  }
9349
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
+ }),
9350
9555
  defineBlockAppearancePreset({
9351
9556
  kind: "block-design",
9352
9557
  id: "cta-accent-band",
@@ -9366,9 +9571,33 @@ var appearancePresets = [
9366
9571
  id: "header-clean-base",
9367
9572
  target: "site-header",
9368
9573
  label: "Clean base header",
9369
- chrome: {
9370
- surface: "base",
9371
- 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"
9372
9601
  }
9373
9602
  }),
9374
9603
  defineSiteChromeAppearancePreset({
@@ -9376,10 +9605,31 @@ var appearancePresets = [
9376
9605
  id: "footer-muted-grounding",
9377
9606
  target: "site-footer",
9378
9607
  label: "Muted grounding footer",
9379
- chrome: {
9608
+ footer: {
9609
+ kind: "grounding",
9380
9610
  surface: "muted-band",
9381
9611
  emphasis: "low"
9382
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
+ }
9383
9633
  })
9384
9634
  ];
9385
9635
 
@@ -10049,6 +10299,111 @@ var pebble = defineButtonPersonality({
10049
10299
  }
10050
10300
  });
10051
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
+
10052
10407
  // ../theme-core/src/buttons/personalities/soft-pill.ts
10053
10408
  var softPill = defineButtonPersonality({
10054
10409
  id: "soft-pill",
@@ -10129,7 +10484,8 @@ var buttonPersonalities = [
10129
10484
  editorialLink,
10130
10485
  pebble,
10131
10486
  inkStamp,
10132
- brushedWash
10487
+ brushedWash,
10488
+ showtimePill
10133
10489
  ];
10134
10490
  var personalitiesById = new Map(
10135
10491
  buttonPersonalities.map((p) => [p.id, p])
@@ -12718,14 +13074,7 @@ var proseLinkStyleSchema = z24.object({
12718
13074
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
12719
13075
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
12720
13076
  });
12721
- var semanticSpacingSchema = z24.enum([
12722
- "none",
12723
- "compact",
12724
- "cozy",
12725
- "medium",
12726
- "comfortable",
12727
- "spacious"
12728
- ]);
13077
+ var semanticSpacingSchema = z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
12729
13078
  var boxRoundedSchema = z24.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
12730
13079
  var boxBackgroundOverlaySchema = z24.object({
12731
13080
  type: z24.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -12742,6 +13091,7 @@ var boxBackgroundSchema = z24.object({
12742
13091
  scale: z24.string().nullable().optional(),
12743
13092
  position: z24.string().nullable().optional(),
12744
13093
  opacity: z24.number().min(0).max(1).nullable().optional(),
13094
+ motion: z24.enum(["static", "fixed-frame"]).nullable().optional(),
12745
13095
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
12746
13096
  textColor: z24.string().nullable().optional(),
12747
13097
  headingColor: z24.string().nullable().optional()
@@ -12749,7 +13099,7 @@ var boxBackgroundSchema = z24.object({
12749
13099
  var sectionStylesOverrideSchema = z24.object({
12750
13100
  background: boxBackgroundSchema.nullable().optional(),
12751
13101
  spacing: semanticSpacingSchema.nullable().optional(),
12752
- minHeight: z24.enum(["none", "hero", "immersive"]).nullable().optional()
13102
+ minHeight: z24.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
12753
13103
  });
12754
13104
  var containerStylesOverrideSchema = z24.object({
12755
13105
  background: boxBackgroundSchema.nullable().optional(),
@@ -12768,7 +13118,8 @@ var cardStylesOverrideSchema = z24.object({
12768
13118
  border: cardBorderOverrideSchema.nullable().optional(),
12769
13119
  spacing: semanticSpacingSchema.nullable().optional(),
12770
13120
  raised: z24.boolean().nullable().optional(),
12771
- rounded: boxRoundedSchema.nullable().optional()
13121
+ rounded: boxRoundedSchema.nullable().optional(),
13122
+ treatment: z24.enum(["accent-quote"]).nullable().optional()
12772
13123
  });
12773
13124
  var blockStyleOverridesSchema = z24.object({
12774
13125
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -12843,15 +13194,7 @@ var inputStyle = z24.object({
12843
13194
  });
12844
13195
  var headerVariant = z24.enum(["classic", "centered", "transparent", "floating", "editorial"]);
12845
13196
  var headerPositioning = z24.enum(["static", "sticky", "fixed"]);
12846
- var headerNavStyle = z24.enum([
12847
- "minimal",
12848
- "underline",
12849
- "underline-grow",
12850
- "capsule",
12851
- "scale",
12852
- "frosted",
12853
- "solid"
12854
- ]);
13197
+ var headerNavStyle = z24.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
12855
13198
  var navFontWeight = z24.enum(["regular", "medium", "semibold", "bold"]);
12856
13199
  var headerMaxWidth = z24.enum(["container", "full"]);
12857
13200
  var headerContainerSchema = z24.object({
@@ -12905,6 +13248,7 @@ var dropdownStyleSchema = z24.object({
12905
13248
  // optional = no override (browser default)
12906
13249
  }).optional();
12907
13250
  var headerCtaGapSchema = z24.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
13251
+ var headerCtaTreatmentSchema = z24.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
12908
13252
  var navContainerSchema = z24.object({
12909
13253
  type: z24.enum(["none", "pill", "glass"]).default("none"),
12910
13254
  tint: z24.string().nullable().optional(),
@@ -12923,7 +13267,10 @@ var headerSchema = z24.object({
12923
13267
  shrinkOnScroll: z24.boolean(),
12924
13268
  maxWidth: headerMaxWidth,
12925
13269
  logoOverride: mediaSchema.nullable().optional(),
12926
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
13270
+ background: headerBackgroundSchema.default({
13271
+ type: "color",
13272
+ color: "surface"
13273
+ }),
12927
13274
  textColor: z24.string().nullable().optional(),
12928
13275
  // Site title and general header text
12929
13276
  navStyle: headerNavStyle,
@@ -12943,6 +13290,13 @@ var headerSchema = z24.object({
12943
13290
  navLinkStyle: navLinkStyleSchema.optional(),
12944
13291
  // CTA button spacing (desktop left margin)
12945
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(),
12946
13300
  // Dropdown menu styling (nav dropdowns and mobile drawer)
12947
13301
  dropdownStyle: dropdownStyleSchema
12948
13302
  });
@@ -12999,7 +13353,10 @@ var footerSchema = z24.object({
12999
13353
  variant: footerVariant,
13000
13354
  maxWidth: footerMaxWidth,
13001
13355
  showLogoText: z24.boolean().optional(),
13002
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
13356
+ background: headerBackgroundSchema.default({
13357
+ type: "color",
13358
+ color: "surface"
13359
+ }),
13003
13360
  // Footer nav styling (independent from header)
13004
13361
  navStyle: headerNavStyle.default("minimal"),
13005
13362
  navColor: z24.string().nullable().optional(),
@@ -13021,17 +13378,7 @@ var layoutSchema = z24.object({
13021
13378
  desktop: containerPaddingPresetSchema.optional()
13022
13379
  }).optional()
13023
13380
  }).optional();
13024
- var heroTypographySizeSchema = z24.enum([
13025
- "sm",
13026
- "base",
13027
- "lg",
13028
- "xl",
13029
- "2xl",
13030
- "3xl",
13031
- "4xl",
13032
- "5xl",
13033
- "6xl"
13034
- ]);
13381
+ var heroTypographySizeSchema = z24.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
13035
13382
  var heroTypographyLineHeightSchema = z24.enum(["tight", "snug", "normal", "relaxed"]);
13036
13383
  var heroResponsiveTypographySchema = z24.object({
13037
13384
  headlineSize: heroTypographySizeSchema.optional(),
@@ -13056,6 +13403,13 @@ var heroTypographySchema = z24.object({
13056
13403
  var heroSchema = z24.object({
13057
13404
  typography: heroTypographySchema.optional()
13058
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();
13059
13413
  var gradientsSchema = z24.object({
13060
13414
  button: z24.string().min(1).nullable().optional(),
13061
13415
  hero: z24.string().min(1).nullable().optional(),
@@ -13077,6 +13431,7 @@ var themeSchema = z24.object({
13077
13431
  gradients: gradientsSchema.optional(),
13078
13432
  layout: layoutSchema,
13079
13433
  hero: heroSchema,
13434
+ bodyText: bodyTextSchema,
13080
13435
  header: headerSchema,
13081
13436
  footer: footerSchema,
13082
13437
  buttons: buttonSystemSchema.optional(),
@@ -13100,10 +13455,7 @@ var themeSchema = z24.object({
13100
13455
  ).optional(),
13101
13456
  // Structured block-kind theme overrides (v1: typography prose-link style only)
13102
13457
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
13103
- blockOverrides: z24.record(
13104
- z24.string(),
13105
- blockThemeOverrideSchema
13106
- ).optional(),
13458
+ blockOverrides: z24.record(z24.string(), blockThemeOverrideSchema).optional(),
13107
13459
  // Structured custom CSS rules
13108
13460
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
13109
13461
  customCssRules: customCssRulesSchema,
@@ -13274,6 +13626,28 @@ var brandLedJewel = definePaletteVariant({
13274
13626
  { name: "border", hex: "#a8a29e" }
13275
13627
  ]
13276
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
+ });
13277
13651
 
13278
13652
  // ../theme-core/src/palette/variants/high-contrast.ts
13279
13653
  var highContrastInk = definePaletteVariant({
@@ -13485,6 +13859,7 @@ var paletteVariants = [
13485
13859
  brandLedCool,
13486
13860
  brandLedWarm,
13487
13861
  brandLedJewel,
13862
+ brandLedBurgundyGold,
13488
13863
  // Warm-neutral family
13489
13864
  warmNeutralClay,
13490
13865
  warmNeutralCream,
@@ -13560,7 +13935,8 @@ var curatedSiteStyleIdValues = [
13560
13935
  "site-style:quiet-luxury",
13561
13936
  "site-style:practical-services",
13562
13937
  "site-style:modern-wellness",
13563
- "site-style:bold-launch"
13938
+ "site-style:bold-launch",
13939
+ "site-style:south-west-twerk-school"
13564
13940
  ];
13565
13941
  var quietBudget = {
13566
13942
  accentDensity: "low",
@@ -13615,6 +13991,8 @@ function defineCuratedSiteStyle(input) {
13615
13991
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
13616
13992
  supportedTransitions: generatedDesignOptionCatalog.transitions
13617
13993
  },
13994
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
13995
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
13618
13996
  buttonPersonalityChoices: input.buttonPersonalityChoices,
13619
13997
  paletteVariantChoices: input.paletteVariantChoices
13620
13998
  };
@@ -13861,6 +14239,101 @@ var curatedSiteStyles = [
13861
14239
  paletteChoice("brand-led-jewel"),
13862
14240
  paletteChoice("brand-led-warm")
13863
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
+ ]
13864
14337
  })
13865
14338
  ];
13866
14339
  var curatedSiteStylesById = new Map(
@@ -13905,6 +14378,40 @@ var heroLegibilityStrategySchema = z26.enum([
13905
14378
  "scrim-gradient",
13906
14379
  "solid-panel"
13907
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"]);
13908
14415
  function uniqueNonEmpty(values) {
13909
14416
  const uniqueValues = [...new Set(values)];
13910
14417
  const firstValue = uniqueValues[0];
@@ -13943,7 +14450,11 @@ var blockDesignPlanSchema = z26.object({
13943
14450
  itemSurface: z26.enum(userDesignOptionCatalog.itemSurfaces),
13944
14451
  transitionAfter: z26.enum(userDesignOptionCatalog.transitions),
13945
14452
  emphasis: z26.enum(userDesignOptionCatalog.emphases),
13946
- heroLegibility: heroLegibilityStrategySchema.optional()
14453
+ sectionHeight: sectionHeightIntentSchema.optional(),
14454
+ heroLegibility: heroLegibilityStrategySchema.optional(),
14455
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14456
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14457
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
13947
14458
  }).strict();
13948
14459
  var styleAuthoritySchema = z26.discriminatedUnion("kind", [
13949
14460
  z26.object({
@@ -15473,6 +15984,7 @@ var SEMANTIC_SPACING_VALUES = [
15473
15984
  ];
15474
15985
  var SECTION_MIN_HEIGHT_VALUES = [
15475
15986
  "none",
15987
+ "banner",
15476
15988
  "hero",
15477
15989
  "immersive"
15478
15990
  ];
@@ -15500,6 +16012,7 @@ var CONTAINER_SPACING_MAP = {
15500
16012
  };
15501
16013
  var SECTION_MIN_HEIGHT_MAP = {
15502
16014
  none: "",
16015
+ banner: "rb-section-min-h-banner",
15503
16016
  hero: "rb-section-min-h-hero",
15504
16017
  immersive: "rb-section-min-h-immersive"
15505
16018
  };
@@ -16290,6 +16803,9 @@ var boxStylesCompositeTransform = {
16290
16803
  classes.push(roundedResult);
16291
16804
  }
16292
16805
  }
16806
+ if (input.treatment === "accent-quote") {
16807
+ classes.push("rb-card-treatment-accent-quote");
16808
+ }
16293
16809
  return classes.join(" ").trim() || "";
16294
16810
  }
16295
16811
  };
@@ -16387,7 +16903,7 @@ var sectionClassNameTransform = {
16387
16903
  minHeight = input.minHeight;
16388
16904
  } else if (process.env.NODE_ENV !== "production") {
16389
16905
  console.warn(
16390
- `[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.`
16391
16907
  );
16392
16908
  }
16393
16909
  }
@@ -16710,23 +17226,6 @@ function styledCard(children, opts, ...mods) {
16710
17226
  );
16711
17227
  }
16712
17228
 
16713
- // ../blocks/src/system/node/fragments/typography.ts
16714
- function mergeClassName(base, extra) {
16715
- return [base, extra ?? ""].filter(Boolean).join(" ");
16716
- }
16717
- function captionText(opts, ...mods) {
16718
- const {
16719
- as: asProp,
16720
- className: classNameProp,
16721
- color,
16722
- ...rest
16723
- } = opts ?? {};
16724
- const as = asProp ?? "p";
16725
- const className = mergeClassName("rb-caption", classNameProp);
16726
- const style = textColorStyle(color ?? "mutedText");
16727
- return text({ ...rest, as, className, style }, ...mods);
16728
- }
16729
-
16730
17229
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
16731
17230
  function joinClasses(...parts) {
16732
17231
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -17631,18 +18130,17 @@ function buildAttributionNodes() {
17631
18130
  const name = text(
17632
18131
  {
17633
18132
  as: "strong",
17634
- className: "rb-block",
17635
- style: textColorStyle("text")
18133
+ className: "rb-block"
17636
18134
  },
17637
18135
  bind("testimonial.content.name", { fallback: "Anonymous" })
17638
18136
  );
17639
- const jobTitle = captionText(
17640
- null,
18137
+ const jobTitle = text(
18138
+ { as: "p", className: "rb-caption" },
17641
18139
  when("testimonial.content.jobTitle"),
17642
18140
  bind("testimonial.content.jobTitle")
17643
18141
  );
17644
- const company = captionText(
17645
- null,
18142
+ const company = text(
18143
+ { as: "p", className: "rb-caption" },
17646
18144
  when("testimonial.content.company"),
17647
18145
  bind("testimonial.content.company")
17648
18146
  );
@@ -17676,8 +18174,7 @@ function buildTestimonialCard(...mods) {
17676
18174
  );
17677
18175
  const body = richText(
17678
18176
  {
17679
- className: "rb-prose rb-max-w-none",
17680
- style: textColorStyle("text")
18177
+ className: "rb-prose rb-max-w-none"
17681
18178
  },
17682
18179
  bind("testimonial.content.body"),
17683
18180
  when("testimonial.content.body")
@@ -19399,6 +19896,7 @@ function heroContentCard(children, gap) {
19399
19896
  return styledContainer({
19400
19897
  bindFrom: "_contentCardStyles",
19401
19898
  constrainWidth: false,
19899
+ baseClassName: "rb-relative rb-isolate",
19402
19900
  rootType: "stack",
19403
19901
  rootProps: {
19404
19902
  gap
@@ -19429,6 +19927,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
19429
19927
  function heroContainerStack(children, gap) {
19430
19928
  return styledContainer({
19431
19929
  rootType: "stack",
19930
+ baseClassName: "rb-relative rb-isolate",
19432
19931
  rootProps: {
19433
19932
  gap: "none",
19434
19933
  justify: {
@@ -20669,7 +21168,7 @@ function resolveHeroVerticalAlignment(content) {
20669
21168
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
20670
21169
  const sectionStyles = asPartialObject(content._sectionStyles);
20671
21170
  const minHeight = sectionStyles?.minHeight;
20672
- if (minHeight === "hero" || minHeight === "immersive") return "center";
21171
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
20673
21172
  const variant = resolveHeroVariant(content);
20674
21173
  if (variant === "split" || variant === "splitReverse") return "center";
20675
21174
  return "top";
@@ -21471,6 +21970,26 @@ var footerSplitNavSingleClassTransform = {
21471
21970
  ]);
21472
21971
  }
21473
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
+ };
21474
21993
  var footerLogoClassSchema = z38.object({
21475
21994
  base: z38.string().optional()
21476
21995
  });
@@ -21481,14 +22000,11 @@ var footerLogoClassTransform = {
21481
22000
  schema: footerLogoClassSchema,
21482
22001
  run: (value, options) => {
21483
22002
  const logo = asPartialObject(value);
21484
- const placement = logo?.placement ?? "right";
21485
22003
  const align = logo?.align ?? "end";
21486
22004
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
21487
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
21488
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";
21489
22006
  return joinClasses4([
21490
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",
21491
- orderClass,
21492
22008
  selfAlignClass,
21493
22009
  hiddenClass
21494
22010
  ]);
@@ -21543,6 +22059,7 @@ var layoutTransforms = [
21543
22059
  footerBottomBarContainerClassTransform,
21544
22060
  footerBottomBarStyleTransform,
21545
22061
  footerSplitNavSingleClassTransform,
22062
+ footerSplitMainClassTransform,
21546
22063
  footerLogoClassTransform,
21547
22064
  footerLogoMediaClassTransform,
21548
22065
  footerLogoTextVisibleTransform
@@ -21850,7 +22367,7 @@ var createNavRow = (className, align = "end") => navRow({
21850
22367
  var headerCta = ctaButton({
21851
22368
  basePath: "menu.ctaItem",
21852
22369
  whenPath: "menu.ctaItem.label",
21853
- variantPath: "menu.ctaItem.variant",
22370
+ variantPath: "$root.theme.header.ctaVariant",
21854
22371
  linkPath: "menu.ctaItem.link",
21855
22372
  sizeFallback: "sm",
21856
22373
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -21858,7 +22375,7 @@ var headerCta = ctaButton({
21858
22375
  var mobileCta = ctaButton({
21859
22376
  basePath: "menu.ctaItem",
21860
22377
  whenPath: "menu.ctaItem.label",
21861
- variantPath: "menu.ctaItem.variant",
22378
+ variantPath: "$root.theme.header.ctaVariant",
21862
22379
  linkPath: "menu.ctaItem.link",
21863
22380
  sizeFallback: "md",
21864
22381
  className: "nav-mobile-cta rb-w-full"
@@ -22319,7 +22836,13 @@ var splitFooterLayout = stack(
22319
22836
  [
22320
22837
  inline(
22321
22838
  {
22322
- 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
+ }
22323
22846
  },
22324
22847
  [
22325
22848
  stack(
@@ -24552,7 +25075,8 @@ var courseEntrySubrouteContextSchema = z50.union([
24552
25075
  run: z50.object({
24553
25076
  courseId: z50.string(),
24554
25077
  seriesId: z50.string(),
24555
- runSlug: z50.string()
25078
+ runSlug: z50.string(),
25079
+ runName: z50.string().nullable()
24556
25080
  })
24557
25081
  }),
24558
25082
  z50.object({
@@ -32366,6 +32890,34 @@ function panelCapable() {
32366
32890
  itemSurfaces: "unsupported"
32367
32891
  });
32368
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
+ }
32369
32921
  function plainItemsCapable() {
32370
32922
  return declareBlockDesignCapability({
32371
32923
  sectionSurfaces: "supported",
@@ -32482,7 +33034,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
32482
33034
  };
32483
33035
  }
32484
33036
  var systemBlockDefinitionsRaw = [
32485
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
33037
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
32486
33038
  flow: heroFlow,
32487
33039
  layoutProfiles: [
32488
33040
  layoutProfile({
@@ -32586,7 +33138,12 @@ var systemBlockDefinitionsRaw = [
32586
33138
  flow: siteChromeFlow,
32587
33139
  layoutProfiles: []
32588
33140
  })),
32589
- 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({
32590
33147
  flow: proofFlow,
32591
33148
  layoutProfiles: [
32592
33149
  layoutProfile({
@@ -32898,8 +33455,15 @@ function parseOpacity(value) {
32898
33455
  }
32899
33456
  return opacity <= 1 ? opacity : opacity / 100;
32900
33457
  }
32901
- function appendOptionalClasses(baseClassName, optionalClassName) {
32902
- 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(" ");
32903
33467
  }
32904
33468
  var resolveImageStyleTransform = {
32905
33469
  id: "background.resolveImageStyle",
@@ -32976,9 +33540,9 @@ var resolveImageClassNameTransform = {
32976
33540
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
32977
33541
  const position = isString(input.position) ? input.position.trim() : null;
32978
33542
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
32979
- return appendOptionalClasses(
33543
+ return appendBackgroundMediaClasses(
32980
33544
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
32981
- backgroundVideoMobileClassNames(input)
33545
+ input
32982
33546
  );
32983
33547
  }
32984
33548
  let needsAnchoring = false;
@@ -32991,18 +33555,18 @@ var resolveImageClassNameTransform = {
32991
33555
  }
32992
33556
  }
32993
33557
  if (!needsAnchoring) {
32994
- return appendOptionalClasses(
33558
+ return appendBackgroundMediaClasses(
32995
33559
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
32996
- backgroundVideoMobileClassNames(input)
33560
+ input
32997
33561
  );
32998
33562
  }
32999
33563
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
33000
33564
  const isCustom = position && !isPreset;
33001
33565
  if (isCustom) {
33002
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
33566
+ return appendBackgroundMediaClasses(baseClass, input);
33003
33567
  }
33004
33568
  const anchorClasses = getAnchorClasses(position);
33005
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
33569
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
33006
33570
  }
33007
33571
  };
33008
33572
  var resolveOverlayStyleTransform = {
@@ -40090,16 +40654,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
40090
40654
  };
40091
40655
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
40092
40656
  }
40093
- const textSize = configuredDropdownStyle?.textSize;
40094
- if (textSize) {
40095
- const textSizeMap = {
40096
- "xs": "0.75rem",
40097
- "sm": "0.875rem",
40098
- "base": "1rem",
40099
- "lg": "1.125rem"
40100
- };
40101
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
40102
- }
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]};`);
40103
40665
  if (additionalRules.length > 0) {
40104
40666
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
40105
40667
  return baseCSS + `
@@ -40388,12 +40950,10 @@ ${selector} .rb-container-full`;
40388
40950
  ${rootRules.join("\n ")}
40389
40951
  }`);
40390
40952
  if (containerPadding?.mobile) {
40391
- cssChunks.push(
40392
- `${containerSelector} {
40953
+ cssChunks.push(`${containerSelector} {
40393
40954
  padding-left: ${toPaddingValue(containerPadding.mobile)};
40394
40955
  padding-right: ${toPaddingValue(containerPadding.mobile)};
40395
- }`
40396
- );
40956
+ }`);
40397
40957
  }
40398
40958
  if (containerPadding?.tablet) {
40399
40959
  cssChunks.push(
@@ -40419,6 +40979,10 @@ ${selector} .rb-container-full`;
40419
40979
  if (heroTypographyCss) {
40420
40980
  cssChunks.push(heroTypographyCss);
40421
40981
  }
40982
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
40983
+ if (bodyTextTypographyCss) {
40984
+ cssChunks.push(bodyTextTypographyCss);
40985
+ }
40422
40986
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
40423
40987
  return cssChunks.join("\n\n");
40424
40988
  }
@@ -40431,6 +40995,9 @@ function toPaddingValue(preset2) {
40431
40995
  };
40432
40996
  return map[preset2];
40433
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
+ );
40434
41001
  function generateSiteStyleTransitionCss(themeId) {
40435
41002
  const selector = `:where([data-theme-scope="${themeId}"])`;
40436
41003
  return `${selector} [data-style-group^='site-style-transition-'] {
@@ -40498,21 +41065,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
40498
41065
 
40499
41066
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
40500
41067
  background: var(--site-style-transition-to);
40501
- clip-path: polygon(
40502
- 0 42%,
40503
- 10% 34%,
40504
- 21% 42%,
40505
- 34% 31%,
40506
- 48% 39%,
40507
- 63% 29%,
40508
- 78% 37%,
40509
- 90% 30%,
40510
- 100% 36%,
40511
- 100% 100%,
40512
- 0 100%
40513
- );
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%;
40514
41074
  }`;
40515
41075
  }
41076
+ function svgDataUrl(svg) {
41077
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
41078
+ }
40516
41079
  function generateHeroTypographyCss(themeId, theme) {
40517
41080
  const typography = theme.hero?.typography;
40518
41081
  if (!typography) return "";
@@ -40535,33 +41098,21 @@ function generateHeroTypographyCss(themeId, theme) {
40535
41098
  ${subheadlineRules.join("\n ")}
40536
41099
  }`);
40537
41100
  }
40538
- const microHeadlineRules = buildTypographyRules(
40539
- typography.microHeadlineSize,
40540
- typography.microHeadlineLineHeight
40541
- );
41101
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
40542
41102
  if (microHeadlineRules.length > 0) {
40543
41103
  chunks.push(`${microHeadlineSelector} {
40544
41104
  ${microHeadlineRules.join("\n ")}
40545
41105
  }`);
40546
41106
  }
40547
- const microSubheadlineRules = buildTypographyRules(
40548
- typography.microSubheadlineSize,
40549
- typography.microSubheadlineLineHeight
40550
- );
41107
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
40551
41108
  if (microSubheadlineRules.length > 0) {
40552
41109
  chunks.push(`${microSubheadlineSelector} {
40553
41110
  ${microSubheadlineRules.join("\n ")}
40554
41111
  }`);
40555
41112
  }
40556
41113
  if (typography.responsive?.tablet) {
40557
- const tabletHeadlineRules = buildTypographyRules(
40558
- typography.responsive.tablet.headlineSize,
40559
- typography.responsive.tablet.headlineLineHeight
40560
- );
40561
- const tabletSubheadlineRules = buildTypographyRules(
40562
- typography.responsive.tablet.subheadlineSize,
40563
- typography.responsive.tablet.subheadlineLineHeight
40564
- );
41114
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
41115
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
40565
41116
  const tabletChunks = [];
40566
41117
  if (tabletHeadlineRules.length > 0) {
40567
41118
  tabletChunks.push(`${headlineSelector} {
@@ -40580,14 +41131,8 @@ function generateHeroTypographyCss(themeId, theme) {
40580
41131
  }
40581
41132
  }
40582
41133
  if (typography.responsive?.mobile) {
40583
- const mobileHeadlineRules = buildTypographyRules(
40584
- typography.responsive.mobile.headlineSize,
40585
- typography.responsive.mobile.headlineLineHeight
40586
- );
40587
- const mobileSubheadlineRules = buildTypographyRules(
40588
- typography.responsive.mobile.subheadlineSize,
40589
- typography.responsive.mobile.subheadlineLineHeight
40590
- );
41134
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
41135
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
40591
41136
  const mobileChunks = [];
40592
41137
  if (mobileHeadlineRules.length > 0) {
40593
41138
  mobileChunks.push(`${headlineSelector} {
@@ -40617,6 +41162,27 @@ function buildTypographyRules(size, lineHeight) {
40617
41162
  }
40618
41163
  return rules;
40619
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
+ }
40620
41186
  function toHeroSize(size) {
40621
41187
  const map = {
40622
41188
  sm: "0.875rem",
@@ -40627,7 +41193,8 @@ function toHeroSize(size) {
40627
41193
  "3xl": "1.875rem",
40628
41194
  "4xl": "2.25rem",
40629
41195
  "5xl": "3rem",
40630
- "6xl": "3.75rem"
41196
+ "6xl": "3.75rem",
41197
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
40631
41198
  };
40632
41199
  return map[size];
40633
41200
  }
@@ -42955,12 +43522,16 @@ var containerResponsiveThemeCss = `/*
42955
43522
  .rb-h-full {
42956
43523
  height: 100%;
42957
43524
  }
43525
+ .rb-section-min-h-banner {
43526
+ min-height: clamp(16rem, 34svh, 24rem);
43527
+ }
42958
43528
  .rb-section-min-h-hero {
42959
43529
  min-height: clamp(32rem, 62svh, 44rem);
42960
43530
  }
42961
43531
  .rb-section-min-h-immersive {
42962
43532
  min-height: clamp(38rem, 78svh, 54rem);
42963
43533
  }
43534
+ .rb-section-min-h-banner > .rb-container,
42964
43535
  .rb-section-min-h-hero > .rb-container,
42965
43536
  .rb-section-min-h-immersive > .rb-container {
42966
43537
  min-height: inherit;
@@ -44070,6 +44641,19 @@ var containerResponsiveThemeCss = `/*
44070
44641
  .rb-object-contain {
44071
44642
  object-fit: contain;
44072
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
+ }
44073
44657
 
44074
44658
  /* Line clamp */
44075
44659
  .rb-line-clamp-2,
@@ -48580,13 +49164,13 @@ var containerResponsiveThemeCss = `/*
48580
49164
 
48581
49165
  /* Eyebrow - color only (typography via .rb-eyebrow) */
48582
49166
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
48583
- color: rgb(var(--tb-text));
49167
+ color: var(--section-text-color, rgb(var(--tb-text)));
48584
49168
  }
48585
49169
 
48586
49170
  /* Subheadline - supporting text below headline */
48587
49171
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
48588
49172
  font-size: 1.125rem;
48589
- color: rgb(var(--tb-text));
49173
+ color: var(--section-text-color, rgb(var(--tb-text)));
48590
49174
  }
48591
49175
 
48592
49176
  @container rb-site (min-width: 640px) {
@@ -48660,6 +49244,20 @@ var containerResponsiveThemeCss = `/*
48660
49244
  max-width: 60rem;
48661
49245
  }
48662
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
+
48663
49261
  /* Variant: Narrow (left-aligned, shorter line length) */
48664
49262
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
48665
49263
  max-width: 34rem;
@@ -50002,6 +50600,13 @@ var containerResponsiveThemeCss = `/*
50002
50600
  border-radius: var(--rb-block-radius);
50003
50601
  }
50004
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
+
50005
50610
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
50006
50611
  font-size: var(--rb-testimonial-quote-size);
50007
50612
  line-height: 1;
@@ -50010,6 +50615,12 @@ var containerResponsiveThemeCss = `/*
50010
50615
  color: rgb(var(--tb-primary));
50011
50616
  }
50012
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
+
50013
50624
 
50014
50625
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
50015
50626
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -53628,7 +54239,8 @@ function toEntrySubrouteContext(entrySubrouteData) {
53628
54239
  run: {
53629
54240
  courseId: entrySubrouteData.run.courseId,
53630
54241
  seriesId: entrySubrouteData.run.seriesId,
53631
- runSlug: entrySubrouteData.run.runSlug
54242
+ runSlug: entrySubrouteData.run.runSlug,
54243
+ runName: entrySubrouteData.run.runName
53632
54244
  }
53633
54245
  };
53634
54246
  }
@@ -54008,7 +54620,7 @@ var SimpleCache = class {
54008
54620
  };
54009
54621
 
54010
54622
  // src/version.ts
54011
- var SDK_VERSION = "0.60.12";
54623
+ var SDK_VERSION = "0.60.14";
54012
54624
 
54013
54625
  // src/client/error.ts
54014
54626
  var RiverbankApiError = class _RiverbankApiError extends Error {