@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
@@ -609,7 +609,7 @@ var init_endpoints = __esm({
609
609
  method: "GET",
610
610
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
611
611
  auth: "user",
612
- responseKind: "text"
612
+ responseKind: "blob"
613
613
  },
614
614
  getNewsletterSubscriber: {
615
615
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -940,12 +940,7 @@ var init_endpoints = __esm({
940
940
  ],
941
941
  auth: "user",
942
942
  responseKind: "json",
943
- errors: [
944
- "validation:invalid_input",
945
- "resource:not_found",
946
- "resource:conflict",
947
- "server:internal_error"
948
- ]
943
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
949
944
  },
950
945
  unpublishTeamMemberProfile: {
951
946
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -1198,6 +1193,13 @@ var init_endpoints = __esm({
1198
1193
  auth: "user",
1199
1194
  responseKind: "json"
1200
1195
  },
1196
+ exportBookingAppointmentsCsv: {
1197
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
1198
+ method: "GET",
1199
+ auth: "user",
1200
+ errors: [],
1201
+ responseKind: "blob"
1202
+ },
1201
1203
  createAppointment: {
1202
1204
  path: "/sites/{siteId}/bookings/appointments",
1203
1205
  method: "POST",
@@ -1325,6 +1327,13 @@ var init_endpoints = __esm({
1325
1327
  auth: "user",
1326
1328
  responseKind: "json"
1327
1329
  },
1330
+ exportCourseEnrollmentsCsv: {
1331
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1332
+ method: "GET",
1333
+ auth: "user",
1334
+ errors: [],
1335
+ responseKind: "blob"
1336
+ },
1328
1337
  listCourseWaitlist: {
1329
1338
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1330
1339
  method: "GET",
@@ -2687,6 +2696,14 @@ var init_endpoints = __esm({
2687
2696
  auth: "user",
2688
2697
  responseKind: "json"
2689
2698
  },
2699
+ exportSeoPagesCsv: {
2700
+ path: "/sites/{siteId}/seo/pages",
2701
+ method: "GET",
2702
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
2703
+ auth: "user",
2704
+ responseKind: "blob",
2705
+ errors: []
2706
+ },
2690
2707
  getSeoQueries: {
2691
2708
  path: "/sites/{siteId}/seo/queries",
2692
2709
  method: "GET",
@@ -2695,6 +2712,14 @@ var init_endpoints = __esm({
2695
2712
  auth: "user",
2696
2713
  responseKind: "json"
2697
2714
  },
2715
+ exportSeoQueriesCsv: {
2716
+ path: "/sites/{siteId}/seo/queries",
2717
+ method: "GET",
2718
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
2719
+ auth: "user",
2720
+ responseKind: "blob",
2721
+ errors: []
2722
+ },
2698
2723
  getPerformanceOverview: {
2699
2724
  path: "/sites/{siteId}/performance/overview",
2700
2725
  method: "GET",
@@ -2743,7 +2768,12 @@ var init_endpoints = __esm({
2743
2768
  path: "/media/{assetId}/canonical-crop",
2744
2769
  method: "POST",
2745
2770
  tags: ["media", "media-{assetId}"],
2746
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
2771
+ errors: [
2772
+ "validation:invalid_input",
2773
+ "resource:not_found",
2774
+ "resource:conflict",
2775
+ "server:internal_error"
2776
+ ],
2747
2777
  auth: "user",
2748
2778
  responseKind: "json"
2749
2779
  },
@@ -3075,7 +3105,7 @@ var init_endpoints = __esm({
3075
3105
  method: "GET",
3076
3106
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
3077
3107
  auth: "user",
3078
- responseKind: "text"
3108
+ responseKind: "blob"
3079
3109
  },
3080
3110
  // Public submit
3081
3111
  submitForm: {
@@ -3958,6 +3988,14 @@ var init_endpoints = __esm({
3958
3988
  auth: "user",
3959
3989
  responseKind: "json"
3960
3990
  },
3991
+ exportEventSeriesAttendeesCsv: {
3992
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
3993
+ method: "GET",
3994
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
3995
+ auth: "user",
3996
+ errors: [],
3997
+ responseKind: "blob"
3998
+ },
3961
3999
  listEventSeriesWaitlist: {
3962
4000
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
3963
4001
  method: "GET",
@@ -4521,6 +4559,14 @@ var init_endpoints = __esm({
4521
4559
  auth: "user",
4522
4560
  responseKind: "json"
4523
4561
  },
4562
+ exportBookingCustomersCsv: {
4563
+ path: "/sites/{siteId}/bookings/customers/export.csv",
4564
+ method: "GET",
4565
+ tags: ["site-{siteId}", "customers-{siteId}"],
4566
+ auth: "user",
4567
+ errors: [],
4568
+ responseKind: "blob"
4569
+ },
4524
4570
  createBookingCustomer: {
4525
4571
  path: "/sites/{siteId}/bookings/customers",
4526
4572
  method: "POST",
@@ -4548,6 +4594,21 @@ var init_endpoints = __esm({
4548
4594
  "server:internal_error"
4549
4595
  ]
4550
4596
  },
4597
+ rectifyBookingParticipantIdentity: {
4598
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
4599
+ method: "PATCH",
4600
+ tags: ["site-{siteId}", "customers-{siteId}"],
4601
+ auth: "user",
4602
+ responseKind: "json",
4603
+ errors: [
4604
+ "validation:invalid_input",
4605
+ "auth:forbidden",
4606
+ "resource:not_found",
4607
+ "resource:already_exists",
4608
+ "resource:conflict",
4609
+ "server:internal_error"
4610
+ ]
4611
+ },
4551
4612
  listCustomerPasses: {
4552
4613
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
4553
4614
  method: "GET",
@@ -4682,13 +4743,46 @@ var init_endpoints = __esm({
4682
4743
  auth: "user",
4683
4744
  responseKind: "json"
4684
4745
  },
4746
+ exportMoneyPaymentsCsv: {
4747
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
4748
+ method: "GET",
4749
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
4750
+ errors: [],
4751
+ auth: "user",
4752
+ responseKind: "blob"
4753
+ },
4754
+ exportMoneyBreakdownsCsv: {
4755
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
4756
+ method: "GET",
4757
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4758
+ errors: [],
4759
+ auth: "user",
4760
+ responseKind: "blob"
4761
+ },
4762
+ exportMoneyTimeSeriesCsv: {
4763
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
4764
+ method: "GET",
4765
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4766
+ errors: [],
4767
+ auth: "user",
4768
+ responseKind: "blob"
4769
+ },
4685
4770
  listBookingActivity: {
4686
4771
  path: "/sites/{siteId}/bookings/activity",
4687
4772
  method: "GET",
4688
4773
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4774
+ errors: [],
4689
4775
  auth: "user",
4690
4776
  responseKind: "json"
4691
4777
  },
4778
+ exportBookingActivityCsv: {
4779
+ path: "/sites/{siteId}/bookings/activity/export.csv",
4780
+ method: "GET",
4781
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4782
+ errors: [],
4783
+ auth: "user",
4784
+ responseKind: "blob"
4785
+ },
4692
4786
  // Site logs
4693
4787
  listSiteActivityLogs: {
4694
4788
  path: "/sites/{siteId}/logs/activity",
@@ -4840,13 +4934,6 @@ var init_endpoints = __esm({
4840
4934
  auth: "user",
4841
4935
  responseKind: "blob"
4842
4936
  },
4843
- exportSeoCsv: {
4844
- path: "/sites/{siteId}/seo/export",
4845
- method: "GET",
4846
- tags: ["site-{siteId}", "seo"],
4847
- auth: "user",
4848
- responseKind: "blob"
4849
- },
4850
4937
  // Admin site cost (for admin panel)
4851
4938
  adminSiteCost: {
4852
4939
  path: "/admin/sites/{siteId}/cost",
@@ -6027,71 +6114,10 @@ var init_participants = __esm({
6027
6114
  });
6028
6115
 
6029
6116
  // ../core/src/participant-identity.ts
6030
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD, PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS;
6031
6117
  var init_participant_identity = __esm({
6032
6118
  "../core/src/participant-identity.ts"() {
6033
6119
  "use strict";
6034
6120
  init_assertNever();
6035
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
6036
- participant_id: {
6037
- field: "participant_id",
6038
- role: "canonical_link",
6039
- canonicalSource: "booking_participants.id",
6040
- contractAction: "tighten_in_839",
6041
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
6042
- },
6043
- display_name: {
6044
- field: "display_name",
6045
- role: "contextual_snapshot",
6046
- canonicalSource: "booking_participants.display_name for live identity",
6047
- contractAction: "retain_as_snapshot",
6048
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
6049
- },
6050
- email: {
6051
- field: "email",
6052
- role: "contextual_snapshot",
6053
- canonicalSource: "booking_participants.email_normalized for live email identity",
6054
- contractAction: "retain_as_snapshot",
6055
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
6056
- },
6057
- email_normalized: {
6058
- field: "email_normalized",
6059
- role: "contextual_snapshot",
6060
- canonicalSource: "booking_participants.email_normalized for live email identity",
6061
- contractAction: "retain_as_snapshot",
6062
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
6063
- },
6064
- phone: {
6065
- field: "phone",
6066
- role: "contextual_snapshot",
6067
- canonicalSource: "booking_participants.phone for live phone identity",
6068
- contractAction: "retain_as_snapshot",
6069
- notes: "Participation-time phone context. Live identity belongs to the participant row."
6070
- },
6071
- identity_state: {
6072
- field: "identity_state",
6073
- role: "materialization_state",
6074
- canonicalSource: "booking_participants.identity_state for subject state",
6075
- contractAction: "review_for_later_contract_cleanup",
6076
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
6077
- },
6078
- event_attendee_guest_id: {
6079
- field: "event_attendee_guest_id",
6080
- role: "compatibility_projection",
6081
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
6082
- contractAction: "retain_as_projection",
6083
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
6084
- }
6085
- };
6086
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
6087
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
6088
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
6089
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
6090
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
6091
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
6092
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
6093
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
6094
- ];
6095
6121
  }
6096
6122
  });
6097
6123
 
@@ -7779,6 +7805,8 @@ var init_bookingRefundOutcomes = __esm({
7779
7805
  STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
7780
7806
  "missing_amount",
7781
7807
  "amount_exceeds_remaining",
7808
+ "credit_refunds_disabled",
7809
+ "missing_credit_customer",
7782
7810
  "deposit_refund_override_required",
7783
7811
  "refund_revoke_requires_full_line_refund",
7784
7812
  "unified_order_link_required"
@@ -8431,6 +8459,13 @@ var init_routes = __esm({
8431
8459
  }
8432
8460
  });
8433
8461
 
8462
+ // ../api/src/bookingConfig.ts
8463
+ var init_bookingConfig = __esm({
8464
+ "../api/src/bookingConfig.ts"() {
8465
+ "use strict";
8466
+ }
8467
+ });
8468
+
8434
8469
  // ../api/src/emailSettings.ts
8435
8470
  var init_emailSettings = __esm({
8436
8471
  "../api/src/emailSettings.ts"() {
@@ -8700,7 +8735,11 @@ function defineFrameCapability(capability) {
8700
8735
  function defineBlockDesignCapability(capability) {
8701
8736
  return {
8702
8737
  ...capability,
8703
- kind: "designed"
8738
+ kind: "designed",
8739
+ sectionHeights: capability.sectionHeights ?? ["default"],
8740
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
8741
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
8742
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
8704
8743
  };
8705
8744
  }
8706
8745
  var plainFrame;
@@ -8714,7 +8753,20 @@ var init_types3 = __esm({
8714
8753
  });
8715
8754
 
8716
8755
  // ../theme-core/src/site-styles/appearancePresets.ts
8756
+ function assertValidOptionGroups(preset2) {
8757
+ preset2.optionGroups?.forEach((group) => {
8758
+ const selectedOption = group.options.find(
8759
+ (option) => option.id === group.selectedOptionId
8760
+ );
8761
+ if (!selectedOption) {
8762
+ throw new Error(
8763
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
8764
+ );
8765
+ }
8766
+ });
8767
+ }
8717
8768
  function defineBlockAppearancePreset(preset2) {
8769
+ assertValidOptionGroups(preset2);
8718
8770
  return preset2;
8719
8771
  }
8720
8772
  function defineSiteChromeAppearancePreset(preset2) {
@@ -8732,13 +8784,122 @@ var init_appearancePresets = __esm({
8732
8784
  target: "hero",
8733
8785
  label: "Immersive image hero",
8734
8786
  blockKinds: ["block.hero"],
8787
+ constraints: {
8788
+ layoutFamilies: ["centered", "compact"]
8789
+ },
8735
8790
  design: {
8736
8791
  sectionSurface: "hero-image",
8737
8792
  contentFrame: plainFrame,
8738
8793
  itemSurface: "none",
8739
8794
  transitionAfter: "soft-fade-short",
8740
8795
  emphasis: "high",
8741
- heroLegibility: "scrim-gradient"
8796
+ sectionHeight: "hero",
8797
+ imageSurfaceTreatment: { kind: "neutral-wash" }
8798
+ }
8799
+ }),
8800
+ defineBlockAppearancePreset({
8801
+ kind: "block-design",
8802
+ id: "hero-brand-scrim",
8803
+ target: "hero",
8804
+ label: "Brand scrim image hero",
8805
+ blockKinds: ["block.hero"],
8806
+ constraints: {
8807
+ layoutFamilies: ["centered", "compact"]
8808
+ },
8809
+ optionGroups: [
8810
+ {
8811
+ id: "image-surface-treatment",
8812
+ label: "Treatment",
8813
+ selectedOptionId: "brand-scrim-primary",
8814
+ options: [
8815
+ {
8816
+ id: "brand-scrim-primary",
8817
+ label: "Brand scrim",
8818
+ designPatch: {
8819
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
8820
+ }
8821
+ },
8822
+ {
8823
+ id: "neutral-scrim",
8824
+ label: "Neutral scrim",
8825
+ designPatch: {
8826
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
8827
+ }
8828
+ }
8829
+ ]
8830
+ }
8831
+ ],
8832
+ layoutPatches: [
8833
+ {
8834
+ constraints: {
8835
+ layoutVariantKeys: ["micro"]
8836
+ },
8837
+ designPatch: {
8838
+ sectionHeight: "banner"
8839
+ }
8840
+ }
8841
+ ],
8842
+ design: {
8843
+ sectionSurface: "hero-image",
8844
+ contentFrame: plainFrame,
8845
+ itemSurface: "none",
8846
+ transitionAfter: "soft-fade-short",
8847
+ emphasis: "high",
8848
+ sectionHeight: "immersive",
8849
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
8850
+ }
8851
+ }),
8852
+ defineBlockAppearancePreset({
8853
+ kind: "block-design",
8854
+ id: "hero-brand-scrim-fixed-frame",
8855
+ target: "hero",
8856
+ label: "Fixed-frame brand scrim hero",
8857
+ blockKinds: ["block.hero"],
8858
+ constraints: {
8859
+ layoutFamilies: ["centered", "compact"]
8860
+ },
8861
+ optionGroups: [
8862
+ {
8863
+ id: "image-surface-treatment",
8864
+ label: "Treatment",
8865
+ selectedOptionId: "brand-scrim-primary",
8866
+ options: [
8867
+ {
8868
+ id: "brand-scrim-primary",
8869
+ label: "Brand scrim",
8870
+ designPatch: {
8871
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
8872
+ }
8873
+ },
8874
+ {
8875
+ id: "neutral-scrim",
8876
+ label: "Neutral scrim",
8877
+ designPatch: {
8878
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
8879
+ }
8880
+ }
8881
+ ]
8882
+ }
8883
+ ],
8884
+ layoutPatches: [
8885
+ {
8886
+ constraints: {
8887
+ layoutVariantKeys: ["micro"]
8888
+ },
8889
+ designPatch: {
8890
+ sectionHeight: "banner"
8891
+ }
8892
+ }
8893
+ ],
8894
+ design: {
8895
+ sectionSurface: "hero-image",
8896
+ contentFrame: plainFrame,
8897
+ itemSurface: "none",
8898
+ transitionAfter: "soft-fade-short",
8899
+ emphasis: "high",
8900
+ sectionHeight: "immersive",
8901
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
8902
+ imageSurfaceMotion: "fixed-frame"
8742
8903
  }
8743
8904
  }),
8744
8905
  defineBlockAppearancePreset({
@@ -8755,17 +8916,26 @@ var init_appearancePresets = __esm({
8755
8916
  emphasis: "high"
8756
8917
  }
8757
8918
  }),
8919
+ defineBlockAppearancePreset({
8920
+ kind: "block-design",
8921
+ id: "body-text-editorial-intro",
8922
+ target: "body-text",
8923
+ label: "Editorial intro copy",
8924
+ blockKinds: ["block.body-text"],
8925
+ design: {
8926
+ sectionSurface: "base",
8927
+ contentFrame: plainFrame,
8928
+ itemSurface: "none",
8929
+ transitionAfter: "soft-fade-short",
8930
+ emphasis: "high"
8931
+ }
8932
+ }),
8758
8933
  defineBlockAppearancePreset({
8759
8934
  kind: "block-design",
8760
8935
  id: "offerings-calm-list",
8761
8936
  target: "offerings",
8762
8937
  label: "Calm offerings list",
8763
- blockKinds: [
8764
- "block.event-listing",
8765
- "block.event-calendar",
8766
- "block.event-spotlight",
8767
- "block.product-list"
8768
- ],
8938
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
8769
8939
  design: {
8770
8940
  sectionSurface: "muted-band",
8771
8941
  contentFrame: plainFrame,
@@ -8844,6 +9014,35 @@ var init_appearancePresets = __esm({
8844
9014
  emphasis: "high"
8845
9015
  }
8846
9016
  }),
9017
+ defineBlockAppearancePreset({
9018
+ kind: "block-design",
9019
+ id: "testimonials-dark-proof",
9020
+ target: "testimonials",
9021
+ label: "Dark proof panel",
9022
+ blockKinds: ["block.testimonials"],
9023
+ design: {
9024
+ sectionSurface: "accent-band",
9025
+ contentFrame: panelFrame("raised"),
9026
+ itemSurface: "raised",
9027
+ transitionAfter: "soft-fade-short",
9028
+ emphasis: "high"
9029
+ }
9030
+ }),
9031
+ defineBlockAppearancePreset({
9032
+ kind: "block-design",
9033
+ id: "testimonials-accent-quote-proof",
9034
+ target: "testimonials",
9035
+ label: "Accent quote proof",
9036
+ blockKinds: ["block.testimonials"],
9037
+ design: {
9038
+ sectionSurface: "accent-band",
9039
+ contentFrame: plainFrame,
9040
+ itemSurface: "raised",
9041
+ transitionAfter: "soft-fade-short",
9042
+ emphasis: "high",
9043
+ testimonialCardTreatment: "accent-quote"
9044
+ }
9045
+ }),
8847
9046
  defineBlockAppearancePreset({
8848
9047
  kind: "block-design",
8849
9048
  id: "faq-contained-help",
@@ -8872,6 +9071,20 @@ var init_appearancePresets = __esm({
8872
9071
  emphasis: "medium"
8873
9072
  }
8874
9073
  }),
9074
+ defineBlockAppearancePreset({
9075
+ kind: "block-design",
9076
+ id: "contact-form-dark-card",
9077
+ target: "contact-form",
9078
+ label: "Dark form card",
9079
+ blockKinds: ["block.form"],
9080
+ design: {
9081
+ sectionSurface: "accent-band",
9082
+ contentFrame: panelFrame("raised"),
9083
+ itemSurface: "none",
9084
+ transitionAfter: "soft-fade-short",
9085
+ emphasis: "high"
9086
+ }
9087
+ }),
8875
9088
  defineBlockAppearancePreset({
8876
9089
  kind: "block-design",
8877
9090
  id: "cta-accent-band",
@@ -8891,9 +9104,33 @@ var init_appearancePresets = __esm({
8891
9104
  id: "header-clean-base",
8892
9105
  target: "site-header",
8893
9106
  label: "Clean base header",
8894
- chrome: {
8895
- surface: "base",
8896
- emphasis: "medium"
9107
+ header: {
9108
+ surface: {
9109
+ kind: "neutral-solid",
9110
+ token: "surface",
9111
+ textColorToken: "text"
9112
+ },
9113
+ navTreatment: "minimal",
9114
+ dropdownTreatment: "surface",
9115
+ ctaTreatment: "default",
9116
+ behavior: "default"
9117
+ }
9118
+ }),
9119
+ defineSiteChromeAppearancePreset({
9120
+ kind: "site-chrome",
9121
+ id: "site-header-brand-solid-inverted-cta",
9122
+ target: "site-header",
9123
+ label: "Brand solid header with inverted CTA",
9124
+ header: {
9125
+ surface: {
9126
+ kind: "brand-solid",
9127
+ token: "primary",
9128
+ textColorToken: "primaryForeground"
9129
+ },
9130
+ navTreatment: "uppercase-underline",
9131
+ dropdownTreatment: "matched-solid",
9132
+ ctaTreatment: "inverted",
9133
+ behavior: "sticky-shrink"
8897
9134
  }
8898
9135
  }),
8899
9136
  defineSiteChromeAppearancePreset({
@@ -8901,10 +9138,31 @@ var init_appearancePresets = __esm({
8901
9138
  id: "footer-muted-grounding",
8902
9139
  target: "site-footer",
8903
9140
  label: "Muted grounding footer",
8904
- chrome: {
9141
+ footer: {
9142
+ kind: "grounding",
8905
9143
  surface: "muted-band",
8906
9144
  emphasis: "low"
8907
9145
  }
9146
+ }),
9147
+ defineSiteChromeAppearancePreset({
9148
+ kind: "site-chrome",
9149
+ id: "site-footer-brand-two-band",
9150
+ target: "site-footer",
9151
+ label: "Two-band brand footer",
9152
+ footer: {
9153
+ kind: "brand-two-band",
9154
+ surface: {
9155
+ token: "primary",
9156
+ shade: "800",
9157
+ textColorToken: "primaryForeground"
9158
+ },
9159
+ bottomBand: {
9160
+ token: "primary",
9161
+ shade: "900",
9162
+ textColorToken: "primaryForeground"
9163
+ },
9164
+ emphasis: "high"
9165
+ }
8908
9166
  })
8909
9167
  ];
8910
9168
  }
@@ -9640,6 +9898,118 @@ var init_pebble = __esm({
9640
9898
  }
9641
9899
  });
9642
9900
 
9901
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
9902
+ var showtimePill;
9903
+ var init_showtime_pill = __esm({
9904
+ "../theme-core/src/buttons/personalities/showtime-pill.ts"() {
9905
+ "use strict";
9906
+ init_types5();
9907
+ showtimePill = defineButtonPersonality({
9908
+ id: "showtime-pill",
9909
+ name: "Showtime Pill",
9910
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
9911
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
9912
+ buttonSystem: {
9913
+ global: {
9914
+ cornerStyle: "pill",
9915
+ shadow: "low",
9916
+ textTransform: "uppercase",
9917
+ fontWeight: 700,
9918
+ borderWidth: 2,
9919
+ hoverTransform: "lift",
9920
+ hoverColor: "darken",
9921
+ typography: "body",
9922
+ paddingPreset: "spacious",
9923
+ italic: false
9924
+ },
9925
+ sizes: {
9926
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
9927
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
9928
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
9929
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
9930
+ },
9931
+ variants: [
9932
+ {
9933
+ id: "primary",
9934
+ name: "Primary",
9935
+ enabled: true,
9936
+ priority: 1,
9937
+ background: { type: "solid", colorToken: "primary" },
9938
+ textColorToken: "background",
9939
+ borderRadius: "rounded-full",
9940
+ effects: {
9941
+ hover: [{ effectId: "pop" }]
9942
+ }
9943
+ },
9944
+ {
9945
+ id: "secondary",
9946
+ name: "Secondary",
9947
+ enabled: true,
9948
+ priority: 2,
9949
+ background: { type: "transparent" },
9950
+ textColorToken: "primary",
9951
+ borderRadius: "rounded-full",
9952
+ border: { widthClass: "border-2", colorToken: "primary" },
9953
+ effects: {
9954
+ hover: [{ effectId: "pop" }]
9955
+ }
9956
+ },
9957
+ {
9958
+ id: "hero",
9959
+ name: "Hero",
9960
+ enabled: true,
9961
+ priority: 1,
9962
+ background: { type: "solid", colorToken: "secondary" },
9963
+ textColorToken: "primary",
9964
+ borderRadius: "rounded-full",
9965
+ effects: {
9966
+ hover: [{ effectId: "pop" }]
9967
+ }
9968
+ },
9969
+ {
9970
+ id: "header",
9971
+ name: "Header",
9972
+ enabled: true,
9973
+ priority: 2,
9974
+ background: { type: "solid", colorToken: "background" },
9975
+ textColorToken: "primary",
9976
+ borderRadius: "rounded-full",
9977
+ border: { widthClass: "border-2", colorToken: "primary" },
9978
+ effects: {
9979
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9980
+ }
9981
+ },
9982
+ {
9983
+ id: "outline",
9984
+ name: "Outline",
9985
+ enabled: true,
9986
+ priority: 3,
9987
+ background: { type: "transparent" },
9988
+ textColorToken: "primary",
9989
+ borderRadius: "rounded-full",
9990
+ border: { widthClass: "border-2", colorToken: "primary" },
9991
+ effects: {
9992
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
9993
+ }
9994
+ },
9995
+ {
9996
+ id: "ghost",
9997
+ name: "Ghost",
9998
+ enabled: true,
9999
+ priority: 3,
10000
+ background: { type: "transparent" },
10001
+ textColorToken: "primary",
10002
+ borderRadius: "rounded-full",
10003
+ effects: {
10004
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
10005
+ }
10006
+ }
10007
+ ]
10008
+ }
10009
+ });
10010
+ }
10011
+ });
10012
+
9643
10013
  // ../theme-core/src/buttons/personalities/soft-pill.ts
9644
10014
  var softPill;
9645
10015
  var init_soft_pill = __esm({
@@ -9730,6 +10100,7 @@ var init_personalities = __esm({
9730
10100
  init_editorial_link();
9731
10101
  init_ink_stamp();
9732
10102
  init_pebble();
10103
+ init_showtime_pill();
9733
10104
  init_soft_pill();
9734
10105
  init_types5();
9735
10106
  buttonPersonalities = [
@@ -9738,7 +10109,8 @@ var init_personalities = __esm({
9738
10109
  editorialLink,
9739
10110
  pebble,
9740
10111
  inkStamp,
9741
- brushedWash
10112
+ brushedWash,
10113
+ showtimePill
9742
10114
  ];
9743
10115
  personalitiesById = new Map(
9744
10116
  buttonPersonalities.map((p) => [p.id, p])
@@ -10511,7 +10883,7 @@ var init_shared = __esm({
10511
10883
 
10512
10884
  // ../theme-core/src/schema.ts
10513
10885
  import { z as z23 } from "zod";
10514
- var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, buttonStyle, cardStyle, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, gradientsSchema, themeSchema, themesTurnSchema;
10886
+ var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, buttonStyle, cardStyle, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, themeSchema, themesTurnSchema;
10515
10887
  var init_schema3 = __esm({
10516
10888
  "../theme-core/src/schema.ts"() {
10517
10889
  "use strict";
@@ -10584,14 +10956,7 @@ var init_schema3 = __esm({
10584
10956
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
10585
10957
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
10586
10958
  });
10587
- semanticSpacingSchema = z23.enum([
10588
- "none",
10589
- "compact",
10590
- "cozy",
10591
- "medium",
10592
- "comfortable",
10593
- "spacious"
10594
- ]);
10959
+ semanticSpacingSchema = z23.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
10595
10960
  boxRoundedSchema = z23.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
10596
10961
  boxBackgroundOverlaySchema = z23.object({
10597
10962
  type: z23.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -10608,6 +10973,7 @@ var init_schema3 = __esm({
10608
10973
  scale: z23.string().nullable().optional(),
10609
10974
  position: z23.string().nullable().optional(),
10610
10975
  opacity: z23.number().min(0).max(1).nullable().optional(),
10976
+ motion: z23.enum(["static", "fixed-frame"]).nullable().optional(),
10611
10977
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
10612
10978
  textColor: z23.string().nullable().optional(),
10613
10979
  headingColor: z23.string().nullable().optional()
@@ -10615,7 +10981,7 @@ var init_schema3 = __esm({
10615
10981
  sectionStylesOverrideSchema = z23.object({
10616
10982
  background: boxBackgroundSchema.nullable().optional(),
10617
10983
  spacing: semanticSpacingSchema.nullable().optional(),
10618
- minHeight: z23.enum(["none", "hero", "immersive"]).nullable().optional()
10984
+ minHeight: z23.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
10619
10985
  });
10620
10986
  containerStylesOverrideSchema = z23.object({
10621
10987
  background: boxBackgroundSchema.nullable().optional(),
@@ -10634,7 +11000,8 @@ var init_schema3 = __esm({
10634
11000
  border: cardBorderOverrideSchema.nullable().optional(),
10635
11001
  spacing: semanticSpacingSchema.nullable().optional(),
10636
11002
  raised: z23.boolean().nullable().optional(),
10637
- rounded: boxRoundedSchema.nullable().optional()
11003
+ rounded: boxRoundedSchema.nullable().optional(),
11004
+ treatment: z23.enum(["accent-quote"]).nullable().optional()
10638
11005
  });
10639
11006
  blockStyleOverridesSchema = z23.object({
10640
11007
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -10709,15 +11076,7 @@ var init_schema3 = __esm({
10709
11076
  });
10710
11077
  headerVariant = z23.enum(["classic", "centered", "transparent", "floating", "editorial"]);
10711
11078
  headerPositioning = z23.enum(["static", "sticky", "fixed"]);
10712
- headerNavStyle = z23.enum([
10713
- "minimal",
10714
- "underline",
10715
- "underline-grow",
10716
- "capsule",
10717
- "scale",
10718
- "frosted",
10719
- "solid"
10720
- ]);
11079
+ headerNavStyle = z23.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
10721
11080
  navFontWeight = z23.enum(["regular", "medium", "semibold", "bold"]);
10722
11081
  headerMaxWidth = z23.enum(["container", "full"]);
10723
11082
  headerContainerSchema = z23.object({
@@ -10771,6 +11130,7 @@ var init_schema3 = __esm({
10771
11130
  // optional = no override (browser default)
10772
11131
  }).optional();
10773
11132
  headerCtaGapSchema = z23.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
11133
+ headerCtaTreatmentSchema = z23.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
10774
11134
  navContainerSchema = z23.object({
10775
11135
  type: z23.enum(["none", "pill", "glass"]).default("none"),
10776
11136
  tint: z23.string().nullable().optional(),
@@ -10789,7 +11149,10 @@ var init_schema3 = __esm({
10789
11149
  shrinkOnScroll: z23.boolean(),
10790
11150
  maxWidth: headerMaxWidth,
10791
11151
  logoOverride: mediaSchema.nullable().optional(),
10792
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
11152
+ background: headerBackgroundSchema.default({
11153
+ type: "color",
11154
+ color: "surface"
11155
+ }),
10793
11156
  textColor: z23.string().nullable().optional(),
10794
11157
  // Site title and general header text
10795
11158
  navStyle: headerNavStyle,
@@ -10809,6 +11172,13 @@ var init_schema3 = __esm({
10809
11172
  navLinkStyle: navLinkStyleSchema.optional(),
10810
11173
  // CTA button spacing (desktop left margin)
10811
11174
  ctaGap: headerCtaGapSchema.optional(),
11175
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
11176
+ // materializes this to ctaVariant against the active button personality.
11177
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
11178
+ // Optional theme-level CTA variant for header/nav CTA buttons.
11179
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
11180
+ // authored Theme V2 concepts.
11181
+ ctaVariant: z23.string().min(1).optional(),
10812
11182
  // Dropdown menu styling (nav dropdowns and mobile drawer)
10813
11183
  dropdownStyle: dropdownStyleSchema
10814
11184
  });
@@ -10865,7 +11235,10 @@ var init_schema3 = __esm({
10865
11235
  variant: footerVariant,
10866
11236
  maxWidth: footerMaxWidth,
10867
11237
  showLogoText: z23.boolean().optional(),
10868
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
11238
+ background: headerBackgroundSchema.default({
11239
+ type: "color",
11240
+ color: "surface"
11241
+ }),
10869
11242
  // Footer nav styling (independent from header)
10870
11243
  navStyle: headerNavStyle.default("minimal"),
10871
11244
  navColor: z23.string().nullable().optional(),
@@ -10887,17 +11260,7 @@ var init_schema3 = __esm({
10887
11260
  desktop: containerPaddingPresetSchema.optional()
10888
11261
  }).optional()
10889
11262
  }).optional();
10890
- heroTypographySizeSchema = z23.enum([
10891
- "sm",
10892
- "base",
10893
- "lg",
10894
- "xl",
10895
- "2xl",
10896
- "3xl",
10897
- "4xl",
10898
- "5xl",
10899
- "6xl"
10900
- ]);
11263
+ heroTypographySizeSchema = z23.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
10901
11264
  heroTypographyLineHeightSchema = z23.enum(["tight", "snug", "normal", "relaxed"]);
10902
11265
  heroResponsiveTypographySchema = z23.object({
10903
11266
  headlineSize: heroTypographySizeSchema.optional(),
@@ -10922,6 +11285,13 @@ var init_schema3 = __esm({
10922
11285
  heroSchema = z23.object({
10923
11286
  typography: heroTypographySchema.optional()
10924
11287
  }).optional();
11288
+ bodyTextIntroTypographySizeSchema = z23.enum(["default", "editorial"]);
11289
+ bodyTextSchema = z23.object({
11290
+ intro: z23.object({
11291
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
11292
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
11293
+ }).optional()
11294
+ }).optional();
10925
11295
  gradientsSchema = z23.object({
10926
11296
  button: z23.string().min(1).nullable().optional(),
10927
11297
  hero: z23.string().min(1).nullable().optional(),
@@ -10943,6 +11313,7 @@ var init_schema3 = __esm({
10943
11313
  gradients: gradientsSchema.optional(),
10944
11314
  layout: layoutSchema,
10945
11315
  hero: heroSchema,
11316
+ bodyText: bodyTextSchema,
10946
11317
  header: headerSchema,
10947
11318
  footer: footerSchema,
10948
11319
  buttons: buttonSystemSchema.optional(),
@@ -10966,10 +11337,7 @@ var init_schema3 = __esm({
10966
11337
  ).optional(),
10967
11338
  // Structured block-kind theme overrides (v1: typography prose-link style only)
10968
11339
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
10969
- blockOverrides: z23.record(
10970
- z23.string(),
10971
- blockThemeOverrideSchema
10972
- ).optional(),
11340
+ blockOverrides: z23.record(z23.string(), blockThemeOverrideSchema).optional(),
10973
11341
  // Structured custom CSS rules
10974
11342
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
10975
11343
  customCssRules: customCssRulesSchema,
@@ -11085,7 +11453,7 @@ var init_types12 = __esm({
11085
11453
  });
11086
11454
 
11087
11455
  // ../theme-core/src/palette/variants/brand-led.ts
11088
- var brandLedCool, brandLedWarm, brandLedJewel;
11456
+ var brandLedCool, brandLedWarm, brandLedJewel, brandLedBurgundyGold;
11089
11457
  var init_brand_led = __esm({
11090
11458
  "../theme-core/src/palette/variants/brand-led.ts"() {
11091
11459
  "use strict";
@@ -11156,6 +11524,28 @@ var init_brand_led = __esm({
11156
11524
  { name: "border", hex: "#a8a29e" }
11157
11525
  ]
11158
11526
  });
11527
+ brandLedBurgundyGold = definePaletteVariant({
11528
+ id: "brand-led-burgundy-gold",
11529
+ name: "Brand-led \u2014 Burgundy Gold",
11530
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
11531
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
11532
+ mode: "light",
11533
+ colors: [
11534
+ { name: "primary", hex: "#7c2e38" },
11535
+ { name: "secondary", hex: "#d4af37" },
11536
+ { name: "accent", hex: "#b8e19a" },
11537
+ { name: "success", hex: "#10b981" },
11538
+ { name: "warning", hex: "#f59e0b" },
11539
+ { name: "destructive", hex: "#ef4444" },
11540
+ { name: "background", hex: "#f1dfd0" },
11541
+ { name: "surface", hex: "#f5e6db" },
11542
+ { name: "surfaceAlt", hex: "#f8ece3" },
11543
+ { name: "muted", hex: "#c9b8a8" },
11544
+ { name: "text", hex: "#400000" },
11545
+ { name: "primaryForeground", hex: "#ffffff" },
11546
+ { name: "border", hex: "#c9b8a8" }
11547
+ ]
11548
+ });
11159
11549
  }
11160
11550
  });
11161
11551
 
@@ -11399,6 +11789,7 @@ var init_variants = __esm({
11399
11789
  brandLedCool,
11400
11790
  brandLedWarm,
11401
11791
  brandLedJewel,
11792
+ brandLedBurgundyGold,
11402
11793
  // Warm-neutral family
11403
11794
  warmNeutralClay,
11404
11795
  warmNeutralCream,
@@ -11503,6 +11894,8 @@ function defineCuratedSiteStyle(input) {
11503
11894
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
11504
11895
  supportedTransitions: generatedDesignOptionCatalog.transitions
11505
11896
  },
11897
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
11898
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
11506
11899
  buttonPersonalityChoices: input.buttonPersonalityChoices,
11507
11900
  paletteVariantChoices: input.paletteVariantChoices
11508
11901
  };
@@ -11530,7 +11923,8 @@ var init_curatedSiteStyles = __esm({
11530
11923
  "site-style:quiet-luxury",
11531
11924
  "site-style:practical-services",
11532
11925
  "site-style:modern-wellness",
11533
- "site-style:bold-launch"
11926
+ "site-style:bold-launch",
11927
+ "site-style:south-west-twerk-school"
11534
11928
  ];
11535
11929
  quietBudget = {
11536
11930
  accentDensity: "low",
@@ -11793,6 +12187,101 @@ var init_curatedSiteStyles = __esm({
11793
12187
  paletteChoice("brand-led-jewel"),
11794
12188
  paletteChoice("brand-led-warm")
11795
12189
  ]
12190
+ }),
12191
+ defineCuratedSiteStyle({
12192
+ id: "site-style:south-west-twerk-school",
12193
+ name: "South West Twerk School",
12194
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
12195
+ 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.",
12196
+ selectionKeywords: [
12197
+ "dance",
12198
+ "classes",
12199
+ "workshop",
12200
+ "school",
12201
+ "movement",
12202
+ "performance",
12203
+ "community"
12204
+ ],
12205
+ tokenRecipes: {
12206
+ palette: "brand-led",
12207
+ contrast: "maximum",
12208
+ radius: "soft",
12209
+ shadow: "layered",
12210
+ typography: "clean-sans",
12211
+ spacing: "airy",
12212
+ motion: "expressive"
12213
+ },
12214
+ compositionBudget: expressiveBudget,
12215
+ themeOverrides: {
12216
+ typography: {
12217
+ body: {
12218
+ family: "Manrope, system-ui, sans-serif",
12219
+ size: "lg",
12220
+ weight: "regular",
12221
+ lineHeight: "relaxed",
12222
+ letterSpacing: "normal"
12223
+ },
12224
+ headings: {
12225
+ default: {
12226
+ family: '"TAN - PEARL", sans-serif',
12227
+ weight: "bold",
12228
+ lineHeight: "normal",
12229
+ letterSpacing: "tight",
12230
+ colorToken: "primary",
12231
+ italic: null,
12232
+ case: null
12233
+ },
12234
+ h1: {
12235
+ size: "xl",
12236
+ weight: "bold",
12237
+ lineHeight: "normal",
12238
+ letterSpacing: "tight",
12239
+ italic: null
12240
+ },
12241
+ h2: {
12242
+ size: "lg",
12243
+ weight: "bold",
12244
+ lineHeight: "normal",
12245
+ letterSpacing: "normal",
12246
+ italic: null
12247
+ },
12248
+ h3: {
12249
+ size: "md",
12250
+ weight: "bold",
12251
+ lineHeight: "normal",
12252
+ letterSpacing: "normal",
12253
+ italic: null
12254
+ }
12255
+ },
12256
+ scale: "balanced"
12257
+ },
12258
+ bodyText: {
12259
+ intro: {
12260
+ paragraphSize: "editorial",
12261
+ headingSize: "editorial"
12262
+ }
12263
+ }
12264
+ },
12265
+ recommendedAppearancePresetIds: [
12266
+ "site-header-brand-solid-inverted-cta",
12267
+ "site-footer-brand-two-band",
12268
+ "hero-brand-scrim-fixed-frame",
12269
+ "body-text-editorial-intro",
12270
+ "testimonials-accent-quote-proof",
12271
+ "contact-form-dark-card"
12272
+ ],
12273
+ buttonPersonalityChoices: [
12274
+ buttonChoice("showtime-pill"),
12275
+ buttonChoice("confident-chip"),
12276
+ buttonChoice("ink-stamp"),
12277
+ buttonChoice("brushed-wash")
12278
+ ],
12279
+ paletteVariantChoices: [
12280
+ paletteChoice("brand-led-burgundy-gold"),
12281
+ paletteChoice("brand-led-jewel"),
12282
+ paletteChoice("brand-led-warm"),
12283
+ paletteChoice("high-contrast-ink")
12284
+ ]
11796
12285
  })
11797
12286
  ];
11798
12287
  curatedSiteStylesById = new Map(
@@ -11846,7 +12335,7 @@ function uniqueNonEmpty(values) {
11846
12335
  }
11847
12336
  return [firstValue, ...uniqueValues.slice(1)];
11848
12337
  }
11849
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
12338
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
11850
12339
  var init_designState = __esm({
11851
12340
  "../theme-core/src/site-styles/designState.ts"() {
11852
12341
  "use strict";
@@ -11867,6 +12356,40 @@ var init_designState = __esm({
11867
12356
  "scrim-gradient",
11868
12357
  "solid-panel"
11869
12358
  ]);
12359
+ sectionHeightIntentSchema = z25.enum([
12360
+ "default",
12361
+ "banner",
12362
+ "hero",
12363
+ "immersive"
12364
+ ]);
12365
+ imageSurfaceTreatmentIntensitySchema = z25.enum(["soft", "balanced", "strong"]);
12366
+ imageSurfaceMotionSchema = z25.enum(["static", "fixed-frame"]);
12367
+ imageSurfaceTreatmentSchema = z25.discriminatedUnion("kind", [
12368
+ z25.object({ kind: z25.literal("none") }).strict(),
12369
+ z25.object({
12370
+ kind: z25.literal("brand-scrim"),
12371
+ token: z25.enum(["primary", "secondary", "accent"]),
12372
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
12373
+ }).strict(),
12374
+ z25.object({
12375
+ kind: z25.literal("brand-wash"),
12376
+ token: z25.enum(["primary", "secondary", "accent"]),
12377
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
12378
+ }).strict(),
12379
+ z25.object({
12380
+ kind: z25.literal("neutral-scrim"),
12381
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
12382
+ }).strict(),
12383
+ z25.object({
12384
+ kind: z25.literal("neutral-wash"),
12385
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
12386
+ }).strict(),
12387
+ z25.object({
12388
+ kind: z25.literal("solid-panel"),
12389
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
12390
+ }).strict()
12391
+ ]);
12392
+ testimonialCardTreatmentSchema = z25.enum(["default", "accent-quote"]);
11870
12393
  userPanelTreatments = uniqueNonEmpty(
11871
12394
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
11872
12395
  );
@@ -11897,7 +12420,11 @@ var init_designState = __esm({
11897
12420
  itemSurface: z25.enum(userDesignOptionCatalog.itemSurfaces),
11898
12421
  transitionAfter: z25.enum(userDesignOptionCatalog.transitions),
11899
12422
  emphasis: z25.enum(userDesignOptionCatalog.emphases),
11900
- heroLegibility: heroLegibilityStrategySchema.optional()
12423
+ sectionHeight: sectionHeightIntentSchema.optional(),
12424
+ heroLegibility: heroLegibilityStrategySchema.optional(),
12425
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12426
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12427
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
11901
12428
  }).strict();
11902
12429
  styleAuthoritySchema = z25.discriminatedUnion("kind", [
11903
12430
  z25.object({
@@ -12126,6 +12653,15 @@ var init_pageDesignIntent = __esm({
12126
12653
  }
12127
12654
  });
12128
12655
 
12656
+ // ../theme-core/src/site-styles/lookResolution.ts
12657
+ var init_lookResolution = __esm({
12658
+ "../theme-core/src/site-styles/lookResolution.ts"() {
12659
+ "use strict";
12660
+ init_appearancePresets();
12661
+ init_types3();
12662
+ }
12663
+ });
12664
+
12129
12665
  // ../theme-core/src/site-styles/resolver.ts
12130
12666
  var init_resolver2 = __esm({
12131
12667
  "../theme-core/src/site-styles/resolver.ts"() {
@@ -12302,6 +12838,7 @@ var init_generatedDesignPipeline = __esm({
12302
12838
  init_designState();
12303
12839
  init_generatedSchemas();
12304
12840
  init_pageDesignIntent();
12841
+ init_lookResolution();
12305
12842
  init_resolver2();
12306
12843
  init_runtimeCompiler();
12307
12844
  init_types3();
@@ -12441,7 +12978,8 @@ var noneBoundaryOption, softBoundaryOption, waveBoundaryOption, spaciousBoundary
12441
12978
  var init_pageDesignEditorModel = __esm({
12442
12979
  "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
12443
12980
  "use strict";
12444
- init_appearancePresets();
12981
+ init_curatedSiteStyles();
12982
+ init_lookResolution();
12445
12983
  init_pageDesignIntent();
12446
12984
  init_types3();
12447
12985
  noneBoundaryOption = {
@@ -12539,6 +13077,7 @@ var init_site_styles = __esm({
12539
13077
  init_designState();
12540
13078
  init_generatedSchemas();
12541
13079
  init_generatedDesignPipeline();
13080
+ init_lookResolution();
12542
13081
  init_pageDesignAuthority();
12543
13082
  init_pageDesignEditorErrors();
12544
13083
  init_pageDesignEditorModel();
@@ -13544,6 +14083,7 @@ var init_spacing = __esm({
13544
14083
  ];
13545
14084
  SECTION_MIN_HEIGHT_VALUES = [
13546
14085
  "none",
14086
+ "banner",
13547
14087
  "hero",
13548
14088
  "immersive"
13549
14089
  ];
@@ -13565,6 +14105,7 @@ var init_spacing = __esm({
13565
14105
  };
13566
14106
  SECTION_MIN_HEIGHT_MAP = {
13567
14107
  none: "",
14108
+ banner: "rb-section-min-h-banner",
13568
14109
  hero: "rb-section-min-h-hero",
13569
14110
  immersive: "rb-section-min-h-immersive"
13570
14111
  };
@@ -14457,6 +14998,9 @@ var init_boxStyles2 = __esm({
14457
14998
  classes.push(roundedResult);
14458
14999
  }
14459
15000
  }
15001
+ if (input.treatment === "accent-quote") {
15002
+ classes.push("rb-card-treatment-accent-quote");
15003
+ }
14460
15004
  return classes.join(" ").trim() || "";
14461
15005
  }
14462
15006
  };
@@ -14526,7 +15070,7 @@ var init_boxStyles2 = __esm({
14526
15070
  minHeight = input.minHeight;
14527
15071
  } else if (process.env.NODE_ENV !== "production") {
14528
15072
  console.warn(
14529
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
15073
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
14530
15074
  );
14531
15075
  }
14532
15076
  }
@@ -14866,25 +15410,9 @@ var init_styledCard = __esm({
14866
15410
  });
14867
15411
 
14868
15412
  // ../blocks/src/system/node/fragments/typography.ts
14869
- function mergeClassName(base, extra) {
14870
- return [base, extra ?? ""].filter(Boolean).join(" ");
14871
- }
14872
- function captionText(opts, ...mods) {
14873
- const {
14874
- as: asProp,
14875
- className: classNameProp,
14876
- color,
14877
- ...rest
14878
- } = opts ?? {};
14879
- const as = asProp ?? "p";
14880
- const className = mergeClassName("rb-caption", classNameProp);
14881
- const style = textColorStyle(color ?? "mutedText");
14882
- return text({ ...rest, as, className, style }, ...mods);
14883
- }
14884
15413
  var init_typography = __esm({
14885
15414
  "../blocks/src/system/node/fragments/typography.ts"() {
14886
15415
  "use strict";
14887
- init_builder();
14888
15416
  init_colorStyles();
14889
15417
  }
14890
15418
  });
@@ -15918,18 +16446,17 @@ function buildAttributionNodes() {
15918
16446
  const name = text(
15919
16447
  {
15920
16448
  as: "strong",
15921
- className: "rb-block",
15922
- style: textColorStyle("text")
16449
+ className: "rb-block"
15923
16450
  },
15924
16451
  bind("testimonial.content.name", { fallback: "Anonymous" })
15925
16452
  );
15926
- const jobTitle = captionText(
15927
- null,
16453
+ const jobTitle = text(
16454
+ { as: "p", className: "rb-caption" },
15928
16455
  when("testimonial.content.jobTitle"),
15929
16456
  bind("testimonial.content.jobTitle")
15930
16457
  );
15931
- const company = captionText(
15932
- null,
16458
+ const company = text(
16459
+ { as: "p", className: "rb-caption" },
15933
16460
  when("testimonial.content.company"),
15934
16461
  bind("testimonial.content.company")
15935
16462
  );
@@ -15963,8 +16490,7 @@ function buildTestimonialCard(...mods) {
15963
16490
  );
15964
16491
  const body = richText(
15965
16492
  {
15966
- className: "rb-prose rb-max-w-none",
15967
- style: textColorStyle("text")
16493
+ className: "rb-prose rb-max-w-none"
15968
16494
  },
15969
16495
  bind("testimonial.content.body"),
15970
16496
  when("testimonial.content.body")
@@ -16049,7 +16575,6 @@ var init_testimonialsCarousel = __esm({
16049
16575
  "use strict";
16050
16576
  init_types14();
16051
16577
  init_builder();
16052
- init_colorStyles();
16053
16578
  init_fragments();
16054
16579
  grid = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
16055
16580
  testimonialsCarouselFragment = defineFragment({
@@ -18111,6 +18636,7 @@ function heroContentCard(children, gap) {
18111
18636
  return styledContainer({
18112
18637
  bindFrom: "_contentCardStyles",
18113
18638
  constrainWidth: false,
18639
+ baseClassName: "rb-relative rb-isolate",
18114
18640
  rootType: "stack",
18115
18641
  rootProps: {
18116
18642
  gap
@@ -18141,6 +18667,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
18141
18667
  function heroContainerStack(children, gap) {
18142
18668
  return styledContainer({
18143
18669
  rootType: "stack",
18670
+ baseClassName: "rb-relative rb-isolate",
18144
18671
  rootProps: {
18145
18672
  gap: "none",
18146
18673
  justify: {
@@ -19402,7 +19929,7 @@ function resolveHeroVerticalAlignment(content) {
19402
19929
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
19403
19930
  const sectionStyles = asPartialObject(content._sectionStyles);
19404
19931
  const minHeight = sectionStyles?.minHeight;
19405
- if (minHeight === "hero" || minHeight === "immersive") return "center";
19932
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
19406
19933
  const variant = resolveHeroVariant(content);
19407
19934
  if (variant === "split" || variant === "splitReverse") return "center";
19408
19935
  return "top";
@@ -19967,7 +20494,7 @@ function extractBackgroundColorToken(background, fallback) {
19967
20494
  }
19968
20495
  return fallback;
19969
20496
  }
19970
- var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
20497
+ var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerSplitMainClassSchema, footerSplitMainClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
19971
20498
  var init_layout = __esm({
19972
20499
  "../blocks/src/system/transforms/registry/layout.ts"() {
19973
20500
  "use strict";
@@ -20274,6 +20801,26 @@ var init_layout = __esm({
20274
20801
  ]);
20275
20802
  }
20276
20803
  };
20804
+ footerSplitMainClassSchema = z37.object({
20805
+ base: z37.string().optional(),
20806
+ reverseClass: z37.string().optional()
20807
+ });
20808
+ footerSplitMainClassTransform = {
20809
+ id: "layout.footerSplitMainClass",
20810
+ kind: "string",
20811
+ summary: "Compose split-footer main row classes from footer logo placement",
20812
+ schema: footerSplitMainClassSchema,
20813
+ run: (value, options) => {
20814
+ const logo = asPartialObject(value);
20815
+ const placement = logo?.placement ?? "right";
20816
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
20817
+ 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";
20818
+ return joinClasses4([
20819
+ options.base ?? baseClass,
20820
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
20821
+ ]);
20822
+ }
20823
+ };
20277
20824
  footerLogoClassSchema = z37.object({
20278
20825
  base: z37.string().optional()
20279
20826
  });
@@ -20284,14 +20831,11 @@ var init_layout = __esm({
20284
20831
  schema: footerLogoClassSchema,
20285
20832
  run: (value, options) => {
20286
20833
  const logo = asPartialObject(value);
20287
- const placement = logo?.placement ?? "right";
20288
20834
  const align = logo?.align ?? "end";
20289
20835
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
20290
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
20291
20836
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
20292
20837
  return joinClasses4([
20293
20838
  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",
20294
- orderClass,
20295
20839
  selfAlignClass,
20296
20840
  hiddenClass
20297
20841
  ]);
@@ -20328,6 +20872,7 @@ var init_layout = __esm({
20328
20872
  footerBottomBarContainerClassTransform,
20329
20873
  footerBottomBarStyleTransform,
20330
20874
  footerSplitNavSingleClassTransform,
20875
+ footerSplitMainClassTransform,
20331
20876
  footerLogoClassTransform,
20332
20877
  footerLogoMediaClassTransform,
20333
20878
  footerLogoTextVisibleTransform
@@ -20651,7 +21196,7 @@ var init_site_header = __esm({
20651
21196
  headerCta = ctaButton({
20652
21197
  basePath: "menu.ctaItem",
20653
21198
  whenPath: "menu.ctaItem.label",
20654
- variantPath: "menu.ctaItem.variant",
21199
+ variantPath: "$root.theme.header.ctaVariant",
20655
21200
  linkPath: "menu.ctaItem.link",
20656
21201
  sizeFallback: "sm",
20657
21202
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -20659,7 +21204,7 @@ var init_site_header = __esm({
20659
21204
  mobileCta = ctaButton({
20660
21205
  basePath: "menu.ctaItem",
20661
21206
  whenPath: "menu.ctaItem.label",
20662
- variantPath: "menu.ctaItem.variant",
21207
+ variantPath: "$root.theme.header.ctaVariant",
20663
21208
  linkPath: "menu.ctaItem.link",
20664
21209
  sizeFallback: "md",
20665
21210
  className: "nav-mobile-cta rb-w-full"
@@ -21140,7 +21685,13 @@ var init_site_footer = __esm({
21140
21685
  [
21141
21686
  inline(
21142
21687
  {
21143
- 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"
21688
+ className: {
21689
+ $bind: {
21690
+ from: "$root.theme.footer.logo",
21691
+ transforms: [{ id: "layout.footerSplitMainClass" }],
21692
+ 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"
21693
+ }
21694
+ }
21144
21695
  },
21145
21696
  [
21146
21697
  stack(
@@ -23457,7 +24008,8 @@ var init_course_registration_interactive = __esm({
23457
24008
  run: z49.object({
23458
24009
  courseId: z49.string(),
23459
24010
  seriesId: z49.string(),
23460
- runSlug: z49.string()
24011
+ runSlug: z49.string(),
24012
+ runName: z49.string().nullable()
23461
24013
  })
23462
24014
  }),
23463
24015
  z49.object({
@@ -29779,6 +30331,16 @@ function panelCapable() {
29779
30331
  itemSurfaces: "unsupported"
29780
30332
  });
29781
30333
  }
30334
+ function heroCapable() {
30335
+ return declareBlockDesignCapability({
30336
+ sectionSurfaces: "supported",
30337
+ contentFrames: ["plain", "panel"],
30338
+ itemSurfaces: "unsupported",
30339
+ sectionHeights: heroSectionHeights,
30340
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
30341
+ imageSurfaceMotions: heroImageSurfaceMotions
30342
+ });
30343
+ }
29782
30344
  function plainItemsCapable() {
29783
30345
  return declareBlockDesignCapability({
29784
30346
  sectionSurfaces: "supported",
@@ -29838,7 +30400,7 @@ function ensureSystemBlockDefinitionsRegistered() {
29838
30400
  registerBlockDefinition(definition);
29839
30401
  }
29840
30402
  }
29841
- var allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
30403
+ var heroSectionHeights, heroImageSurfaceTreatments, heroImageSurfaceMotions, allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
29842
30404
  var init_blocks2 = __esm({
29843
30405
  "../blocks/src/system/blocks/index.ts"() {
29844
30406
  "use strict";
@@ -29913,6 +30475,24 @@ var init_blocks2 = __esm({
29913
30475
  init_checkout();
29914
30476
  init_gifting();
29915
30477
  init_newsletter_signup();
30478
+ heroSectionHeights = [
30479
+ "default",
30480
+ "banner",
30481
+ "hero",
30482
+ "immersive"
30483
+ ];
30484
+ heroImageSurfaceTreatments = [
30485
+ "none",
30486
+ "brand-scrim",
30487
+ "brand-wash",
30488
+ "neutral-scrim",
30489
+ "neutral-wash",
30490
+ "solid-panel"
30491
+ ];
30492
+ heroImageSurfaceMotions = [
30493
+ "static",
30494
+ "fixed-frame"
30495
+ ];
29916
30496
  allSectionSurfaces = [
29917
30497
  "base",
29918
30498
  "muted-band",
@@ -29979,7 +30559,7 @@ var init_blocks2 = __esm({
29979
30559
  boundaryPreference: "soft"
29980
30560
  };
29981
30561
  systemBlockDefinitionsRaw = [
29982
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
30562
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
29983
30563
  flow: heroFlow,
29984
30564
  layoutProfiles: [
29985
30565
  layoutProfile({
@@ -30083,7 +30663,12 @@ var init_blocks2 = __esm({
30083
30663
  flow: siteChromeFlow,
30084
30664
  layoutProfiles: []
30085
30665
  })),
30086
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
30666
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
30667
+ sectionSurfaces: "supported",
30668
+ contentFrames: ["plain", "panel"],
30669
+ itemSurfaces: "supported",
30670
+ testimonialCardTreatments: ["default", "accent-quote"]
30671
+ }), defineBlockDesignMetadata({
30087
30672
  flow: proofFlow,
30088
30673
  layoutProfiles: [
30089
30674
  layoutProfile({
@@ -30424,8 +31009,15 @@ function parseOpacity(value) {
30424
31009
  }
30425
31010
  return opacity <= 1 ? opacity : opacity / 100;
30426
31011
  }
30427
- function appendOptionalClasses(baseClassName, optionalClassName) {
30428
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
31012
+ function backgroundMotionClassNames(input) {
31013
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
31014
+ }
31015
+ function appendBackgroundMediaClasses(baseClassName, input) {
31016
+ return [
31017
+ baseClassName,
31018
+ backgroundMotionClassNames(input),
31019
+ backgroundVideoMobileClassNames(input)
31020
+ ].filter(Boolean).join(" ");
30429
31021
  }
30430
31022
  var isString, isNumber, resolveImageStyleTransform, resolveImageClassNameTransform, resolveOverlayStyleTransform, backgroundTransforms;
30431
31023
  var init_background4 = __esm({
@@ -30512,9 +31104,9 @@ var init_background4 = __esm({
30512
31104
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
30513
31105
  const position = isString(input.position) ? input.position.trim() : null;
30514
31106
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
30515
- return appendOptionalClasses(
31107
+ return appendBackgroundMediaClasses(
30516
31108
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
30517
- backgroundVideoMobileClassNames(input)
31109
+ input
30518
31110
  );
30519
31111
  }
30520
31112
  let needsAnchoring = false;
@@ -30527,18 +31119,18 @@ var init_background4 = __esm({
30527
31119
  }
30528
31120
  }
30529
31121
  if (!needsAnchoring) {
30530
- return appendOptionalClasses(
31122
+ return appendBackgroundMediaClasses(
30531
31123
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
30532
- backgroundVideoMobileClassNames(input)
31124
+ input
30533
31125
  );
30534
31126
  }
30535
31127
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
30536
31128
  const isCustom = position && !isPreset;
30537
31129
  if (isCustom) {
30538
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
31130
+ return appendBackgroundMediaClasses(baseClass, input);
30539
31131
  }
30540
31132
  const anchorClasses = getAnchorClasses(position);
30541
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
31133
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
30542
31134
  }
30543
31135
  };
30544
31136
  resolveOverlayStyleTransform = {
@@ -31508,6 +32100,7 @@ var init_src3 = __esm({
31508
32100
  init_pages();
31509
32101
  init_routes();
31510
32102
  init_bookings();
32103
+ init_bookingConfig();
31511
32104
  init_emailSettings();
31512
32105
  init_eventEmailTemplates();
31513
32106
  init_resources();