@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
@@ -787,7 +787,7 @@ var init_endpoints = __esm({
787
787
  method: "GET",
788
788
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
789
789
  auth: "user",
790
- responseKind: "text"
790
+ responseKind: "blob"
791
791
  },
792
792
  getNewsletterSubscriber: {
793
793
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -1118,12 +1118,7 @@ var init_endpoints = __esm({
1118
1118
  ],
1119
1119
  auth: "user",
1120
1120
  responseKind: "json",
1121
- errors: [
1122
- "validation:invalid_input",
1123
- "resource:not_found",
1124
- "resource:conflict",
1125
- "server:internal_error"
1126
- ]
1121
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1127
1122
  },
1128
1123
  unpublishTeamMemberProfile: {
1129
1124
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -1376,6 +1371,13 @@ var init_endpoints = __esm({
1376
1371
  auth: "user",
1377
1372
  responseKind: "json"
1378
1373
  },
1374
+ exportBookingAppointmentsCsv: {
1375
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
1376
+ method: "GET",
1377
+ auth: "user",
1378
+ errors: [],
1379
+ responseKind: "blob"
1380
+ },
1379
1381
  createAppointment: {
1380
1382
  path: "/sites/{siteId}/bookings/appointments",
1381
1383
  method: "POST",
@@ -1503,6 +1505,13 @@ var init_endpoints = __esm({
1503
1505
  auth: "user",
1504
1506
  responseKind: "json"
1505
1507
  },
1508
+ exportCourseEnrollmentsCsv: {
1509
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1510
+ method: "GET",
1511
+ auth: "user",
1512
+ errors: [],
1513
+ responseKind: "blob"
1514
+ },
1506
1515
  listCourseWaitlist: {
1507
1516
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
1508
1517
  method: "GET",
@@ -2865,6 +2874,14 @@ var init_endpoints = __esm({
2865
2874
  auth: "user",
2866
2875
  responseKind: "json"
2867
2876
  },
2877
+ exportSeoPagesCsv: {
2878
+ path: "/sites/{siteId}/seo/pages",
2879
+ method: "GET",
2880
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
2881
+ auth: "user",
2882
+ responseKind: "blob",
2883
+ errors: []
2884
+ },
2868
2885
  getSeoQueries: {
2869
2886
  path: "/sites/{siteId}/seo/queries",
2870
2887
  method: "GET",
@@ -2873,6 +2890,14 @@ var init_endpoints = __esm({
2873
2890
  auth: "user",
2874
2891
  responseKind: "json"
2875
2892
  },
2893
+ exportSeoQueriesCsv: {
2894
+ path: "/sites/{siteId}/seo/queries",
2895
+ method: "GET",
2896
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
2897
+ auth: "user",
2898
+ responseKind: "blob",
2899
+ errors: []
2900
+ },
2876
2901
  getPerformanceOverview: {
2877
2902
  path: "/sites/{siteId}/performance/overview",
2878
2903
  method: "GET",
@@ -2921,7 +2946,12 @@ var init_endpoints = __esm({
2921
2946
  path: "/media/{assetId}/canonical-crop",
2922
2947
  method: "POST",
2923
2948
  tags: ["media", "media-{assetId}"],
2924
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
2949
+ errors: [
2950
+ "validation:invalid_input",
2951
+ "resource:not_found",
2952
+ "resource:conflict",
2953
+ "server:internal_error"
2954
+ ],
2925
2955
  auth: "user",
2926
2956
  responseKind: "json"
2927
2957
  },
@@ -3253,7 +3283,7 @@ var init_endpoints = __esm({
3253
3283
  method: "GET",
3254
3284
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
3255
3285
  auth: "user",
3256
- responseKind: "text"
3286
+ responseKind: "blob"
3257
3287
  },
3258
3288
  // Public submit
3259
3289
  submitForm: {
@@ -4136,6 +4166,14 @@ var init_endpoints = __esm({
4136
4166
  auth: "user",
4137
4167
  responseKind: "json"
4138
4168
  },
4169
+ exportEventSeriesAttendeesCsv: {
4170
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
4171
+ method: "GET",
4172
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
4173
+ auth: "user",
4174
+ errors: [],
4175
+ responseKind: "blob"
4176
+ },
4139
4177
  listEventSeriesWaitlist: {
4140
4178
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
4141
4179
  method: "GET",
@@ -4699,6 +4737,14 @@ var init_endpoints = __esm({
4699
4737
  auth: "user",
4700
4738
  responseKind: "json"
4701
4739
  },
4740
+ exportBookingCustomersCsv: {
4741
+ path: "/sites/{siteId}/bookings/customers/export.csv",
4742
+ method: "GET",
4743
+ tags: ["site-{siteId}", "customers-{siteId}"],
4744
+ auth: "user",
4745
+ errors: [],
4746
+ responseKind: "blob"
4747
+ },
4702
4748
  createBookingCustomer: {
4703
4749
  path: "/sites/{siteId}/bookings/customers",
4704
4750
  method: "POST",
@@ -4726,6 +4772,21 @@ var init_endpoints = __esm({
4726
4772
  "server:internal_error"
4727
4773
  ]
4728
4774
  },
4775
+ rectifyBookingParticipantIdentity: {
4776
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
4777
+ method: "PATCH",
4778
+ tags: ["site-{siteId}", "customers-{siteId}"],
4779
+ auth: "user",
4780
+ responseKind: "json",
4781
+ errors: [
4782
+ "validation:invalid_input",
4783
+ "auth:forbidden",
4784
+ "resource:not_found",
4785
+ "resource:already_exists",
4786
+ "resource:conflict",
4787
+ "server:internal_error"
4788
+ ]
4789
+ },
4729
4790
  listCustomerPasses: {
4730
4791
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
4731
4792
  method: "GET",
@@ -4860,13 +4921,46 @@ var init_endpoints = __esm({
4860
4921
  auth: "user",
4861
4922
  responseKind: "json"
4862
4923
  },
4924
+ exportMoneyPaymentsCsv: {
4925
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
4926
+ method: "GET",
4927
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
4928
+ errors: [],
4929
+ auth: "user",
4930
+ responseKind: "blob"
4931
+ },
4932
+ exportMoneyBreakdownsCsv: {
4933
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
4934
+ method: "GET",
4935
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4936
+ errors: [],
4937
+ auth: "user",
4938
+ responseKind: "blob"
4939
+ },
4940
+ exportMoneyTimeSeriesCsv: {
4941
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
4942
+ method: "GET",
4943
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
4944
+ errors: [],
4945
+ auth: "user",
4946
+ responseKind: "blob"
4947
+ },
4863
4948
  listBookingActivity: {
4864
4949
  path: "/sites/{siteId}/bookings/activity",
4865
4950
  method: "GET",
4866
4951
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4952
+ errors: [],
4867
4953
  auth: "user",
4868
4954
  responseKind: "json"
4869
4955
  },
4956
+ exportBookingActivityCsv: {
4957
+ path: "/sites/{siteId}/bookings/activity/export.csv",
4958
+ method: "GET",
4959
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
4960
+ errors: [],
4961
+ auth: "user",
4962
+ responseKind: "blob"
4963
+ },
4870
4964
  // Site logs
4871
4965
  listSiteActivityLogs: {
4872
4966
  path: "/sites/{siteId}/logs/activity",
@@ -5018,13 +5112,6 @@ var init_endpoints = __esm({
5018
5112
  auth: "user",
5019
5113
  responseKind: "blob"
5020
5114
  },
5021
- exportSeoCsv: {
5022
- path: "/sites/{siteId}/seo/export",
5023
- method: "GET",
5024
- tags: ["site-{siteId}", "seo"],
5025
- auth: "user",
5026
- responseKind: "blob"
5027
- },
5028
5115
  // Admin site cost (for admin panel)
5029
5116
  adminSiteCost: {
5030
5117
  path: "/admin/sites/{siteId}/cost",
@@ -96886,70 +96973,9 @@ var init_participants = __esm({
96886
96973
  });
96887
96974
 
96888
96975
  // ../core/src/participant-identity.ts
96889
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD;
96890
96976
  var init_participant_identity = __esm({
96891
96977
  "../core/src/participant-identity.ts"() {
96892
96978
  init_assertNever();
96893
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
96894
- participant_id: {
96895
- field: "participant_id",
96896
- role: "canonical_link",
96897
- canonicalSource: "booking_participants.id",
96898
- contractAction: "tighten_in_839",
96899
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
96900
- },
96901
- display_name: {
96902
- field: "display_name",
96903
- role: "contextual_snapshot",
96904
- canonicalSource: "booking_participants.display_name for live identity",
96905
- contractAction: "retain_as_snapshot",
96906
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
96907
- },
96908
- email: {
96909
- field: "email",
96910
- role: "contextual_snapshot",
96911
- canonicalSource: "booking_participants.email_normalized for live email identity",
96912
- contractAction: "retain_as_snapshot",
96913
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
96914
- },
96915
- email_normalized: {
96916
- field: "email_normalized",
96917
- role: "contextual_snapshot",
96918
- canonicalSource: "booking_participants.email_normalized for live email identity",
96919
- contractAction: "retain_as_snapshot",
96920
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
96921
- },
96922
- phone: {
96923
- field: "phone",
96924
- role: "contextual_snapshot",
96925
- canonicalSource: "booking_participants.phone for live phone identity",
96926
- contractAction: "retain_as_snapshot",
96927
- notes: "Participation-time phone context. Live identity belongs to the participant row."
96928
- },
96929
- identity_state: {
96930
- field: "identity_state",
96931
- role: "materialization_state",
96932
- canonicalSource: "booking_participants.identity_state for subject state",
96933
- contractAction: "review_for_later_contract_cleanup",
96934
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
96935
- },
96936
- event_attendee_guest_id: {
96937
- field: "event_attendee_guest_id",
96938
- role: "compatibility_projection",
96939
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
96940
- contractAction: "retain_as_projection",
96941
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
96942
- }
96943
- };
96944
- [
96945
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
96946
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
96947
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
96948
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
96949
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
96950
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
96951
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
96952
- ];
96953
96979
  }
96954
96980
  });
96955
96981
 
@@ -101502,7 +101528,11 @@ function flushPanelFrame(options) {
101502
101528
  function defineBlockDesignCapability(capability) {
101503
101529
  return {
101504
101530
  ...capability,
101505
- kind: "designed"
101531
+ kind: "designed",
101532
+ sectionHeights: capability.sectionHeights ?? ["default"],
101533
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
101534
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
101535
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
101506
101536
  };
101507
101537
  }
101508
101538
  var plainFrame;
@@ -101515,29 +101545,322 @@ var init_types5 = __esm({
101515
101545
  });
101516
101546
 
101517
101547
  // ../theme-core/src/site-styles/appearancePresets.ts
101548
+ function assertValidOptionGroups(preset2) {
101549
+ preset2.optionGroups?.forEach((group) => {
101550
+ const selectedOption = group.options.find(
101551
+ (option) => option.id === group.selectedOptionId
101552
+ );
101553
+ if (!selectedOption) {
101554
+ throw new Error(
101555
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
101556
+ );
101557
+ }
101558
+ });
101559
+ }
101518
101560
  function defineBlockAppearancePreset(preset2) {
101561
+ assertValidOptionGroups(preset2);
101519
101562
  return preset2;
101520
101563
  }
101521
101564
  function defineSiteChromeAppearancePreset(preset2) {
101522
101565
  return preset2;
101523
101566
  }
101567
+ function hasButtonVariant(theme, variantId) {
101568
+ return theme.buttons?.variants.some((variant) => variant.enabled && variant.id === variantId) ?? false;
101569
+ }
101570
+ function resolveHeaderCtaVariant(theme, treatment) {
101571
+ switch (treatment) {
101572
+ case "default":
101573
+ return void 0;
101574
+ case "primary":
101575
+ return "primary";
101576
+ case "secondary":
101577
+ return hasButtonVariant(theme, "secondary") ? "secondary" : "primary";
101578
+ case "inverted":
101579
+ if (hasButtonVariant(theme, "header")) return "header";
101580
+ if (hasButtonVariant(theme, "secondary")) return "secondary";
101581
+ if (hasButtonVariant(theme, "outline")) return "outline";
101582
+ return "primary";
101583
+ case "outline":
101584
+ return hasButtonVariant(theme, "outline") ? "outline" : "secondary";
101585
+ case "ghost":
101586
+ return hasButtonVariant(theme, "ghost") ? "ghost" : "secondary";
101587
+ }
101588
+ }
101589
+ function compileHeaderNavStyle(appearance) {
101590
+ switch (appearance.navTreatment) {
101591
+ case "minimal":
101592
+ return void 0;
101593
+ case "uppercase-underline":
101594
+ return {
101595
+ typography: "body",
101596
+ fontWeight: "bold",
101597
+ textTransform: "uppercase",
101598
+ italic: false,
101599
+ colorToken: appearance.surface.textColorToken,
101600
+ hoverColorToken: "secondary",
101601
+ textSize: "sm",
101602
+ letterSpacing: "wider",
101603
+ padding: "compact",
101604
+ paddingX: "compact",
101605
+ borderRadius: "none",
101606
+ effects: {
101607
+ hover: [
101608
+ { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
101609
+ { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
101610
+ ]
101611
+ }
101612
+ };
101613
+ }
101614
+ }
101615
+ function compileHeaderDropdownStyle(appearance) {
101616
+ switch (appearance.dropdownTreatment) {
101617
+ case "surface":
101618
+ return void 0;
101619
+ case "matched-solid": {
101620
+ const backgroundToken = appearance.surface.kind === "brand-solid" ? `${appearance.surface.token}-700` : appearance.surface.token;
101621
+ const hoverBackgroundToken = appearance.surface.kind === "brand-solid" ? `${appearance.surface.token}-900` : appearance.surface.token;
101622
+ return {
101623
+ background: backgroundToken,
101624
+ textColor: appearance.surface.textColorToken,
101625
+ borderColor: null,
101626
+ shadow: "md",
101627
+ borderRadius: "md",
101628
+ hoverBackground: hoverBackgroundToken,
101629
+ hoverTextColor: "secondary",
101630
+ textTransform: appearance.navTreatment === "uppercase-underline" ? "uppercase" : "none",
101631
+ letterSpacing: appearance.navTreatment === "uppercase-underline" ? "wider" : "normal",
101632
+ fontWeight: appearance.navTreatment === "uppercase-underline" ? "bold" : "medium",
101633
+ textSize: "sm"
101634
+ };
101635
+ }
101636
+ }
101637
+ }
101638
+ function compileSiteHeaderAppearancePreset(preset2, theme) {
101639
+ const appearance = preset2.header;
101640
+ const navLinkStyle = compileHeaderNavStyle(appearance);
101641
+ const dropdownStyle = compileHeaderDropdownStyle(appearance);
101642
+ const ctaVariant = resolveHeaderCtaVariant(theme, appearance.ctaTreatment);
101643
+ return {
101644
+ ...theme.header,
101645
+ positioning: appearance.behavior === "sticky-shrink" ? "sticky" : theme.header.positioning,
101646
+ shrinkOnScroll: appearance.behavior === "sticky-shrink" ? true : theme.header.shrinkOnScroll,
101647
+ background: {
101648
+ type: "color",
101649
+ color: appearance.surface.token
101650
+ },
101651
+ textColor: appearance.surface.textColorToken,
101652
+ navColor: appearance.surface.textColorToken,
101653
+ navStyle: appearance.navTreatment === "uppercase-underline" ? "underline-grow" : theme.header.navStyle,
101654
+ navWeight: appearance.navTreatment === "uppercase-underline" ? "bold" : theme.header.navWeight,
101655
+ ...navLinkStyle ? { navLinkStyle } : {},
101656
+ ...dropdownStyle ? { dropdownStyle } : {},
101657
+ border: {
101658
+ style: "solid",
101659
+ width: "none",
101660
+ position: "none"
101661
+ },
101662
+ logoText: appearance.behavior === "sticky-shrink" ? {
101663
+ hideOnShrink: true,
101664
+ mobileMaxWidth: "sm",
101665
+ mobileWrapLines: 2
101666
+ } : theme.header.logoText,
101667
+ ctaGap: appearance.behavior === "sticky-shrink" ? "compact" : theme.header.ctaGap,
101668
+ ctaTreatment: appearance.ctaTreatment,
101669
+ ...ctaVariant ? { ctaVariant } : {}
101670
+ };
101671
+ }
101672
+ function footerBrandColorToken(input) {
101673
+ return input.shade === "base" ? input.token : `${input.token}-${input.shade}`;
101674
+ }
101675
+ function compileSiteFooterAppearancePreset(preset2, theme) {
101676
+ const appearance = preset2.footer;
101677
+ switch (appearance.kind) {
101678
+ case "grounding":
101679
+ return theme.footer;
101680
+ case "brand-two-band":
101681
+ return {
101682
+ ...theme.footer,
101683
+ variant: "split",
101684
+ maxWidth: "container",
101685
+ background: {
101686
+ type: "color",
101687
+ color: footerBrandColorToken(appearance.surface)
101688
+ },
101689
+ navStyle: "minimal",
101690
+ navWeight: "medium",
101691
+ navColor: appearance.surface.textColorToken,
101692
+ navLinkStyle: {
101693
+ typography: "body",
101694
+ fontWeight: "medium",
101695
+ textTransform: "none",
101696
+ italic: false,
101697
+ colorToken: appearance.surface.textColorToken,
101698
+ hoverColorToken: "secondary",
101699
+ padding: "none",
101700
+ borderRadius: "none"
101701
+ },
101702
+ bottomTextLinkStyle: {
101703
+ colorToken: "secondary",
101704
+ decorationColorToken: "secondary"
101705
+ },
101706
+ navLayout: {
101707
+ layout: "inline-wrap",
101708
+ align: "start",
101709
+ gapX: "default",
101710
+ gapY: "tight"
101711
+ },
101712
+ logo: {
101713
+ showLogo: true,
101714
+ showLogoText: false,
101715
+ placement: "left",
101716
+ size: "sm",
101717
+ align: "start"
101718
+ },
101719
+ bottomBar: {
101720
+ enabled: true,
101721
+ fullBleed: true,
101722
+ background: {
101723
+ type: "color",
101724
+ color: footerBrandColorToken(appearance.bottomBand)
101725
+ },
101726
+ textColor: appearance.bottomBand.textColorToken,
101727
+ textAlign: "center",
101728
+ paddingX: "default",
101729
+ paddingY: "compact",
101730
+ borderTop: {
101731
+ width: "none"
101732
+ }
101733
+ }
101734
+ };
101735
+ }
101736
+ }
101737
+ var appearancePresets;
101524
101738
  var init_appearancePresets = __esm({
101525
101739
  "../theme-core/src/site-styles/appearancePresets.ts"() {
101526
101740
  init_types5();
101527
- [
101741
+ appearancePresets = [
101528
101742
  defineBlockAppearancePreset({
101529
101743
  kind: "block-design",
101530
101744
  id: "hero-immersive-image",
101531
101745
  target: "hero",
101532
101746
  label: "Immersive image hero",
101533
101747
  blockKinds: ["block.hero"],
101748
+ constraints: {
101749
+ layoutFamilies: ["centered", "compact"]
101750
+ },
101534
101751
  design: {
101535
101752
  sectionSurface: "hero-image",
101536
101753
  contentFrame: plainFrame,
101537
101754
  itemSurface: "none",
101538
101755
  transitionAfter: "soft-fade-short",
101539
101756
  emphasis: "high",
101540
- heroLegibility: "scrim-gradient"
101757
+ sectionHeight: "hero",
101758
+ imageSurfaceTreatment: { kind: "neutral-wash" }
101759
+ }
101760
+ }),
101761
+ defineBlockAppearancePreset({
101762
+ kind: "block-design",
101763
+ id: "hero-brand-scrim",
101764
+ target: "hero",
101765
+ label: "Brand scrim image hero",
101766
+ blockKinds: ["block.hero"],
101767
+ constraints: {
101768
+ layoutFamilies: ["centered", "compact"]
101769
+ },
101770
+ optionGroups: [
101771
+ {
101772
+ id: "image-surface-treatment",
101773
+ label: "Treatment",
101774
+ selectedOptionId: "brand-scrim-primary",
101775
+ options: [
101776
+ {
101777
+ id: "brand-scrim-primary",
101778
+ label: "Brand scrim",
101779
+ designPatch: {
101780
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101781
+ }
101782
+ },
101783
+ {
101784
+ id: "neutral-scrim",
101785
+ label: "Neutral scrim",
101786
+ designPatch: {
101787
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
101788
+ }
101789
+ }
101790
+ ]
101791
+ }
101792
+ ],
101793
+ layoutPatches: [
101794
+ {
101795
+ constraints: {
101796
+ layoutVariantKeys: ["micro"]
101797
+ },
101798
+ designPatch: {
101799
+ sectionHeight: "banner"
101800
+ }
101801
+ }
101802
+ ],
101803
+ design: {
101804
+ sectionSurface: "hero-image",
101805
+ contentFrame: plainFrame,
101806
+ itemSurface: "none",
101807
+ transitionAfter: "soft-fade-short",
101808
+ emphasis: "high",
101809
+ sectionHeight: "immersive",
101810
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101811
+ }
101812
+ }),
101813
+ defineBlockAppearancePreset({
101814
+ kind: "block-design",
101815
+ id: "hero-brand-scrim-fixed-frame",
101816
+ target: "hero",
101817
+ label: "Fixed-frame brand scrim hero",
101818
+ blockKinds: ["block.hero"],
101819
+ constraints: {
101820
+ layoutFamilies: ["centered", "compact"]
101821
+ },
101822
+ optionGroups: [
101823
+ {
101824
+ id: "image-surface-treatment",
101825
+ label: "Treatment",
101826
+ selectedOptionId: "brand-scrim-primary",
101827
+ options: [
101828
+ {
101829
+ id: "brand-scrim-primary",
101830
+ label: "Brand scrim",
101831
+ designPatch: {
101832
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
101833
+ }
101834
+ },
101835
+ {
101836
+ id: "neutral-scrim",
101837
+ label: "Neutral scrim",
101838
+ designPatch: {
101839
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
101840
+ }
101841
+ }
101842
+ ]
101843
+ }
101844
+ ],
101845
+ layoutPatches: [
101846
+ {
101847
+ constraints: {
101848
+ layoutVariantKeys: ["micro"]
101849
+ },
101850
+ designPatch: {
101851
+ sectionHeight: "banner"
101852
+ }
101853
+ }
101854
+ ],
101855
+ design: {
101856
+ sectionSurface: "hero-image",
101857
+ contentFrame: plainFrame,
101858
+ itemSurface: "none",
101859
+ transitionAfter: "soft-fade-short",
101860
+ emphasis: "high",
101861
+ sectionHeight: "immersive",
101862
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
101863
+ imageSurfaceMotion: "fixed-frame"
101541
101864
  }
101542
101865
  }),
101543
101866
  defineBlockAppearancePreset({
@@ -101554,17 +101877,26 @@ var init_appearancePresets = __esm({
101554
101877
  emphasis: "high"
101555
101878
  }
101556
101879
  }),
101880
+ defineBlockAppearancePreset({
101881
+ kind: "block-design",
101882
+ id: "body-text-editorial-intro",
101883
+ target: "body-text",
101884
+ label: "Editorial intro copy",
101885
+ blockKinds: ["block.body-text"],
101886
+ design: {
101887
+ sectionSurface: "base",
101888
+ contentFrame: plainFrame,
101889
+ itemSurface: "none",
101890
+ transitionAfter: "soft-fade-short",
101891
+ emphasis: "high"
101892
+ }
101893
+ }),
101557
101894
  defineBlockAppearancePreset({
101558
101895
  kind: "block-design",
101559
101896
  id: "offerings-calm-list",
101560
101897
  target: "offerings",
101561
101898
  label: "Calm offerings list",
101562
- blockKinds: [
101563
- "block.event-listing",
101564
- "block.event-calendar",
101565
- "block.event-spotlight",
101566
- "block.product-list"
101567
- ],
101899
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
101568
101900
  design: {
101569
101901
  sectionSurface: "muted-band",
101570
101902
  contentFrame: plainFrame,
@@ -101643,6 +101975,35 @@ var init_appearancePresets = __esm({
101643
101975
  emphasis: "high"
101644
101976
  }
101645
101977
  }),
101978
+ defineBlockAppearancePreset({
101979
+ kind: "block-design",
101980
+ id: "testimonials-dark-proof",
101981
+ target: "testimonials",
101982
+ label: "Dark proof panel",
101983
+ blockKinds: ["block.testimonials"],
101984
+ design: {
101985
+ sectionSurface: "accent-band",
101986
+ contentFrame: panelFrame("raised"),
101987
+ itemSurface: "raised",
101988
+ transitionAfter: "soft-fade-short",
101989
+ emphasis: "high"
101990
+ }
101991
+ }),
101992
+ defineBlockAppearancePreset({
101993
+ kind: "block-design",
101994
+ id: "testimonials-accent-quote-proof",
101995
+ target: "testimonials",
101996
+ label: "Accent quote proof",
101997
+ blockKinds: ["block.testimonials"],
101998
+ design: {
101999
+ sectionSurface: "accent-band",
102000
+ contentFrame: plainFrame,
102001
+ itemSurface: "raised",
102002
+ transitionAfter: "soft-fade-short",
102003
+ emphasis: "high",
102004
+ testimonialCardTreatment: "accent-quote"
102005
+ }
102006
+ }),
101646
102007
  defineBlockAppearancePreset({
101647
102008
  kind: "block-design",
101648
102009
  id: "faq-contained-help",
@@ -101671,6 +102032,20 @@ var init_appearancePresets = __esm({
101671
102032
  emphasis: "medium"
101672
102033
  }
101673
102034
  }),
102035
+ defineBlockAppearancePreset({
102036
+ kind: "block-design",
102037
+ id: "contact-form-dark-card",
102038
+ target: "contact-form",
102039
+ label: "Dark form card",
102040
+ blockKinds: ["block.form"],
102041
+ design: {
102042
+ sectionSurface: "accent-band",
102043
+ contentFrame: panelFrame("raised"),
102044
+ itemSurface: "none",
102045
+ transitionAfter: "soft-fade-short",
102046
+ emphasis: "high"
102047
+ }
102048
+ }),
101674
102049
  defineBlockAppearancePreset({
101675
102050
  kind: "block-design",
101676
102051
  id: "cta-accent-band",
@@ -101690,9 +102065,33 @@ var init_appearancePresets = __esm({
101690
102065
  id: "header-clean-base",
101691
102066
  target: "site-header",
101692
102067
  label: "Clean base header",
101693
- chrome: {
101694
- surface: "base",
101695
- emphasis: "medium"
102068
+ header: {
102069
+ surface: {
102070
+ kind: "neutral-solid",
102071
+ token: "surface",
102072
+ textColorToken: "text"
102073
+ },
102074
+ navTreatment: "minimal",
102075
+ dropdownTreatment: "surface",
102076
+ ctaTreatment: "default",
102077
+ behavior: "default"
102078
+ }
102079
+ }),
102080
+ defineSiteChromeAppearancePreset({
102081
+ kind: "site-chrome",
102082
+ id: "site-header-brand-solid-inverted-cta",
102083
+ target: "site-header",
102084
+ label: "Brand solid header with inverted CTA",
102085
+ header: {
102086
+ surface: {
102087
+ kind: "brand-solid",
102088
+ token: "primary",
102089
+ textColorToken: "primaryForeground"
102090
+ },
102091
+ navTreatment: "uppercase-underline",
102092
+ dropdownTreatment: "matched-solid",
102093
+ ctaTreatment: "inverted",
102094
+ behavior: "sticky-shrink"
101696
102095
  }
101697
102096
  }),
101698
102097
  defineSiteChromeAppearancePreset({
@@ -101700,10 +102099,31 @@ var init_appearancePresets = __esm({
101700
102099
  id: "footer-muted-grounding",
101701
102100
  target: "site-footer",
101702
102101
  label: "Muted grounding footer",
101703
- chrome: {
102102
+ footer: {
102103
+ kind: "grounding",
101704
102104
  surface: "muted-band",
101705
102105
  emphasis: "low"
101706
102106
  }
102107
+ }),
102108
+ defineSiteChromeAppearancePreset({
102109
+ kind: "site-chrome",
102110
+ id: "site-footer-brand-two-band",
102111
+ target: "site-footer",
102112
+ label: "Two-band brand footer",
102113
+ footer: {
102114
+ kind: "brand-two-band",
102115
+ surface: {
102116
+ token: "primary",
102117
+ shade: "800",
102118
+ textColorToken: "primaryForeground"
102119
+ },
102120
+ bottomBand: {
102121
+ token: "primary",
102122
+ shade: "900",
102123
+ textColorToken: "primaryForeground"
102124
+ },
102125
+ emphasis: "high"
102126
+ }
101707
102127
  })
101708
102128
  ];
101709
102129
  }
@@ -102470,6 +102890,117 @@ var init_pebble = __esm({
102470
102890
  }
102471
102891
  });
102472
102892
 
102893
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
102894
+ var showtimePill;
102895
+ var init_showtime_pill = __esm({
102896
+ "../theme-core/src/buttons/personalities/showtime-pill.ts"() {
102897
+ init_types7();
102898
+ showtimePill = defineButtonPersonality({
102899
+ id: "showtime-pill",
102900
+ name: "Showtime Pill",
102901
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
102902
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
102903
+ buttonSystem: {
102904
+ global: {
102905
+ cornerStyle: "pill",
102906
+ shadow: "low",
102907
+ textTransform: "uppercase",
102908
+ fontWeight: 700,
102909
+ borderWidth: 2,
102910
+ hoverTransform: "lift",
102911
+ hoverColor: "darken",
102912
+ typography: "body",
102913
+ paddingPreset: "spacious",
102914
+ italic: false
102915
+ },
102916
+ sizes: {
102917
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
102918
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
102919
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
102920
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
102921
+ },
102922
+ variants: [
102923
+ {
102924
+ id: "primary",
102925
+ name: "Primary",
102926
+ enabled: true,
102927
+ priority: 1,
102928
+ background: { type: "solid", colorToken: "primary" },
102929
+ textColorToken: "background",
102930
+ borderRadius: "rounded-full",
102931
+ effects: {
102932
+ hover: [{ effectId: "pop" }]
102933
+ }
102934
+ },
102935
+ {
102936
+ id: "secondary",
102937
+ name: "Secondary",
102938
+ enabled: true,
102939
+ priority: 2,
102940
+ background: { type: "transparent" },
102941
+ textColorToken: "primary",
102942
+ borderRadius: "rounded-full",
102943
+ border: { widthClass: "border-2", colorToken: "primary" },
102944
+ effects: {
102945
+ hover: [{ effectId: "pop" }]
102946
+ }
102947
+ },
102948
+ {
102949
+ id: "hero",
102950
+ name: "Hero",
102951
+ enabled: true,
102952
+ priority: 1,
102953
+ background: { type: "solid", colorToken: "secondary" },
102954
+ textColorToken: "primary",
102955
+ borderRadius: "rounded-full",
102956
+ effects: {
102957
+ hover: [{ effectId: "pop" }]
102958
+ }
102959
+ },
102960
+ {
102961
+ id: "header",
102962
+ name: "Header",
102963
+ enabled: true,
102964
+ priority: 2,
102965
+ background: { type: "solid", colorToken: "background" },
102966
+ textColorToken: "primary",
102967
+ borderRadius: "rounded-full",
102968
+ border: { widthClass: "border-2", colorToken: "primary" },
102969
+ effects: {
102970
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
102971
+ }
102972
+ },
102973
+ {
102974
+ id: "outline",
102975
+ name: "Outline",
102976
+ enabled: true,
102977
+ priority: 3,
102978
+ background: { type: "transparent" },
102979
+ textColorToken: "primary",
102980
+ borderRadius: "rounded-full",
102981
+ border: { widthClass: "border-2", colorToken: "primary" },
102982
+ effects: {
102983
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
102984
+ }
102985
+ },
102986
+ {
102987
+ id: "ghost",
102988
+ name: "Ghost",
102989
+ enabled: true,
102990
+ priority: 3,
102991
+ background: { type: "transparent" },
102992
+ textColorToken: "primary",
102993
+ borderRadius: "rounded-full",
102994
+ effects: {
102995
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
102996
+ }
102997
+ }
102998
+ ]
102999
+ }
103000
+ });
103001
+ }
103002
+ });
103003
+
102473
103004
  // ../theme-core/src/buttons/personalities/soft-pill.ts
102474
103005
  var softPill;
102475
103006
  var init_soft_pill = __esm({
@@ -102566,6 +103097,7 @@ var init_personalities = __esm({
102566
103097
  init_editorial_link();
102567
103098
  init_ink_stamp();
102568
103099
  init_pebble();
103100
+ init_showtime_pill();
102569
103101
  init_soft_pill();
102570
103102
  init_types7();
102571
103103
  buttonPersonalities = [
@@ -102574,7 +103106,8 @@ var init_personalities = __esm({
102574
103106
  editorialLink,
102575
103107
  pebble,
102576
103108
  inkStamp,
102577
- brushedWash
103109
+ brushedWash,
103110
+ showtimePill
102578
103111
  ];
102579
103112
  personalitiesById = new Map(
102580
103113
  buttonPersonalities.map((p2) => [p2.id, p2])
@@ -105305,7 +105838,7 @@ var init_shared3 = __esm({
105305
105838
  init_componentStyles();
105306
105839
  }
105307
105840
  });
105308
- var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, gradientsSchema, themeSchema;
105841
+ var axesSchema, colourHexString, paletteColorSchema, paletteMetaSchema, paletteSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, themeSchema;
105309
105842
  var init_schema4 = __esm({
105310
105843
  "../theme-core/src/schema.ts"() {
105311
105844
  init_media();
@@ -105377,14 +105910,7 @@ var init_schema4 = __esm({
105377
105910
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
105378
105911
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
105379
105912
  });
105380
- semanticSpacingSchema = z.enum([
105381
- "none",
105382
- "compact",
105383
- "cozy",
105384
- "medium",
105385
- "comfortable",
105386
- "spacious"
105387
- ]);
105913
+ semanticSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
105388
105914
  boxRoundedSchema = z.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
105389
105915
  boxBackgroundOverlaySchema = z.object({
105390
105916
  type: z.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -105401,6 +105927,7 @@ var init_schema4 = __esm({
105401
105927
  scale: z.string().nullable().optional(),
105402
105928
  position: z.string().nullable().optional(),
105403
105929
  opacity: z.number().min(0).max(1).nullable().optional(),
105930
+ motion: z.enum(["static", "fixed-frame"]).nullable().optional(),
105404
105931
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
105405
105932
  textColor: z.string().nullable().optional(),
105406
105933
  headingColor: z.string().nullable().optional()
@@ -105408,7 +105935,7 @@ var init_schema4 = __esm({
105408
105935
  sectionStylesOverrideSchema = z.object({
105409
105936
  background: boxBackgroundSchema.nullable().optional(),
105410
105937
  spacing: semanticSpacingSchema.nullable().optional(),
105411
- minHeight: z.enum(["none", "hero", "immersive"]).nullable().optional()
105938
+ minHeight: z.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
105412
105939
  });
105413
105940
  containerStylesOverrideSchema = z.object({
105414
105941
  background: boxBackgroundSchema.nullable().optional(),
@@ -105427,7 +105954,8 @@ var init_schema4 = __esm({
105427
105954
  border: cardBorderOverrideSchema.nullable().optional(),
105428
105955
  spacing: semanticSpacingSchema.nullable().optional(),
105429
105956
  raised: z.boolean().nullable().optional(),
105430
- rounded: boxRoundedSchema.nullable().optional()
105957
+ rounded: boxRoundedSchema.nullable().optional(),
105958
+ treatment: z.enum(["accent-quote"]).nullable().optional()
105431
105959
  });
105432
105960
  blockStyleOverridesSchema = z.object({
105433
105961
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -105502,15 +106030,7 @@ var init_schema4 = __esm({
105502
106030
  });
105503
106031
  headerVariant = z.enum(["classic", "centered", "transparent", "floating", "editorial"]);
105504
106032
  headerPositioning = z.enum(["static", "sticky", "fixed"]);
105505
- headerNavStyle = z.enum([
105506
- "minimal",
105507
- "underline",
105508
- "underline-grow",
105509
- "capsule",
105510
- "scale",
105511
- "frosted",
105512
- "solid"
105513
- ]);
106033
+ headerNavStyle = z.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
105514
106034
  navFontWeight = z.enum(["regular", "medium", "semibold", "bold"]);
105515
106035
  headerMaxWidth = z.enum(["container", "full"]);
105516
106036
  headerContainerSchema = z.object({
@@ -105564,6 +106084,7 @@ var init_schema4 = __esm({
105564
106084
  // optional = no override (browser default)
105565
106085
  }).optional();
105566
106086
  headerCtaGapSchema = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
106087
+ headerCtaTreatmentSchema = z.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
105567
106088
  navContainerSchema = z.object({
105568
106089
  type: z.enum(["none", "pill", "glass"]).default("none"),
105569
106090
  tint: z.string().nullable().optional(),
@@ -105582,7 +106103,10 @@ var init_schema4 = __esm({
105582
106103
  shrinkOnScroll: z.boolean(),
105583
106104
  maxWidth: headerMaxWidth,
105584
106105
  logoOverride: mediaSchema.nullable().optional(),
105585
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
106106
+ background: headerBackgroundSchema.default({
106107
+ type: "color",
106108
+ color: "surface"
106109
+ }),
105586
106110
  textColor: z.string().nullable().optional(),
105587
106111
  // Site title and general header text
105588
106112
  navStyle: headerNavStyle,
@@ -105602,6 +106126,13 @@ var init_schema4 = __esm({
105602
106126
  navLinkStyle: navLinkStyleSchema.optional(),
105603
106127
  // CTA button spacing (desktop left margin)
105604
106128
  ctaGap: headerCtaGapSchema.optional(),
106129
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
106130
+ // materializes this to ctaVariant against the active button personality.
106131
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
106132
+ // Optional theme-level CTA variant for header/nav CTA buttons.
106133
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
106134
+ // authored Theme V2 concepts.
106135
+ ctaVariant: z.string().min(1).optional(),
105605
106136
  // Dropdown menu styling (nav dropdowns and mobile drawer)
105606
106137
  dropdownStyle: dropdownStyleSchema
105607
106138
  });
@@ -105658,7 +106189,10 @@ var init_schema4 = __esm({
105658
106189
  variant: footerVariant,
105659
106190
  maxWidth: footerMaxWidth,
105660
106191
  showLogoText: z.boolean().optional(),
105661
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
106192
+ background: headerBackgroundSchema.default({
106193
+ type: "color",
106194
+ color: "surface"
106195
+ }),
105662
106196
  // Footer nav styling (independent from header)
105663
106197
  navStyle: headerNavStyle.default("minimal"),
105664
106198
  navColor: z.string().nullable().optional(),
@@ -105680,17 +106214,7 @@ var init_schema4 = __esm({
105680
106214
  desktop: containerPaddingPresetSchema.optional()
105681
106215
  }).optional()
105682
106216
  }).optional();
105683
- heroTypographySizeSchema = z.enum([
105684
- "sm",
105685
- "base",
105686
- "lg",
105687
- "xl",
105688
- "2xl",
105689
- "3xl",
105690
- "4xl",
105691
- "5xl",
105692
- "6xl"
105693
- ]);
106217
+ heroTypographySizeSchema = z.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
105694
106218
  heroTypographyLineHeightSchema = z.enum(["tight", "snug", "normal", "relaxed"]);
105695
106219
  heroResponsiveTypographySchema = z.object({
105696
106220
  headlineSize: heroTypographySizeSchema.optional(),
@@ -105715,6 +106239,13 @@ var init_schema4 = __esm({
105715
106239
  heroSchema = z.object({
105716
106240
  typography: heroTypographySchema.optional()
105717
106241
  }).optional();
106242
+ bodyTextIntroTypographySizeSchema = z.enum(["default", "editorial"]);
106243
+ bodyTextSchema = z.object({
106244
+ intro: z.object({
106245
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
106246
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
106247
+ }).optional()
106248
+ }).optional();
105718
106249
  gradientsSchema = z.object({
105719
106250
  button: z.string().min(1).nullable().optional(),
105720
106251
  hero: z.string().min(1).nullable().optional(),
@@ -105736,6 +106267,7 @@ var init_schema4 = __esm({
105736
106267
  gradients: gradientsSchema.optional(),
105737
106268
  layout: layoutSchema,
105738
106269
  hero: heroSchema,
106270
+ bodyText: bodyTextSchema,
105739
106271
  header: headerSchema,
105740
106272
  footer: footerSchema,
105741
106273
  buttons: buttonSystemSchema.optional(),
@@ -105759,10 +106291,7 @@ var init_schema4 = __esm({
105759
106291
  ).optional(),
105760
106292
  // Structured block-kind theme overrides (v1: typography prose-link style only)
105761
106293
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
105762
- blockOverrides: z.record(
105763
- z.string(),
105764
- blockThemeOverrideSchema
105765
- ).optional(),
106294
+ blockOverrides: z.record(z.string(), blockThemeOverrideSchema).optional(),
105766
106295
  // Structured custom CSS rules
105767
106296
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
105768
106297
  customCssRules: customCssRulesSchema,
@@ -105874,7 +106403,7 @@ var init_types14 = __esm({
105874
106403
  });
105875
106404
 
105876
106405
  // ../theme-core/src/palette/variants/brand-led.ts
105877
- var brandLedCool, brandLedWarm, brandLedJewel;
106406
+ var brandLedCool, brandLedWarm, brandLedJewel, brandLedBurgundyGold;
105878
106407
  var init_brand_led = __esm({
105879
106408
  "../theme-core/src/palette/variants/brand-led.ts"() {
105880
106409
  init_types14();
@@ -105944,6 +106473,28 @@ var init_brand_led = __esm({
105944
106473
  { name: "border", hex: "#a8a29e" }
105945
106474
  ]
105946
106475
  });
106476
+ brandLedBurgundyGold = definePaletteVariant({
106477
+ id: "brand-led-burgundy-gold",
106478
+ name: "Brand-led \u2014 Burgundy Gold",
106479
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
106480
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
106481
+ mode: "light",
106482
+ colors: [
106483
+ { name: "primary", hex: "#7c2e38" },
106484
+ { name: "secondary", hex: "#d4af37" },
106485
+ { name: "accent", hex: "#b8e19a" },
106486
+ { name: "success", hex: "#10b981" },
106487
+ { name: "warning", hex: "#f59e0b" },
106488
+ { name: "destructive", hex: "#ef4444" },
106489
+ { name: "background", hex: "#f1dfd0" },
106490
+ { name: "surface", hex: "#f5e6db" },
106491
+ { name: "surfaceAlt", hex: "#f8ece3" },
106492
+ { name: "muted", hex: "#c9b8a8" },
106493
+ { name: "text", hex: "#400000" },
106494
+ { name: "primaryForeground", hex: "#ffffff" },
106495
+ { name: "border", hex: "#c9b8a8" }
106496
+ ]
106497
+ });
105947
106498
  }
105948
106499
  });
105949
106500
 
@@ -106191,6 +106742,7 @@ var init_variants = __esm({
106191
106742
  brandLedCool,
106192
106743
  brandLedWarm,
106193
106744
  brandLedJewel,
106745
+ brandLedBurgundyGold,
106194
106746
  // Warm-neutral family
106195
106747
  warmNeutralClay,
106196
106748
  warmNeutralCream,
@@ -106294,6 +106846,8 @@ function defineCuratedSiteStyle(input) {
106294
106846
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
106295
106847
  supportedTransitions: generatedDesignOptionCatalog.transitions
106296
106848
  },
106849
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
106850
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
106297
106851
  buttonPersonalityChoices: input.buttonPersonalityChoices,
106298
106852
  paletteVariantChoices: input.paletteVariantChoices
106299
106853
  };
@@ -106323,7 +106877,8 @@ var init_curatedSiteStyles = __esm({
106323
106877
  "site-style:quiet-luxury",
106324
106878
  "site-style:practical-services",
106325
106879
  "site-style:modern-wellness",
106326
- "site-style:bold-launch"
106880
+ "site-style:bold-launch",
106881
+ "site-style:south-west-twerk-school"
106327
106882
  ];
106328
106883
  quietBudget = {
106329
106884
  accentDensity: "low",
@@ -106586,6 +107141,101 @@ var init_curatedSiteStyles = __esm({
106586
107141
  paletteChoice("brand-led-jewel"),
106587
107142
  paletteChoice("brand-led-warm")
106588
107143
  ]
107144
+ }),
107145
+ defineCuratedSiteStyle({
107146
+ id: "site-style:south-west-twerk-school",
107147
+ name: "South West Twerk School",
107148
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
107149
+ generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
107150
+ selectionKeywords: [
107151
+ "dance",
107152
+ "classes",
107153
+ "workshop",
107154
+ "school",
107155
+ "movement",
107156
+ "performance",
107157
+ "community"
107158
+ ],
107159
+ tokenRecipes: {
107160
+ palette: "brand-led",
107161
+ contrast: "maximum",
107162
+ radius: "soft",
107163
+ shadow: "layered",
107164
+ typography: "clean-sans",
107165
+ spacing: "airy",
107166
+ motion: "expressive"
107167
+ },
107168
+ compositionBudget: expressiveBudget,
107169
+ themeOverrides: {
107170
+ typography: {
107171
+ body: {
107172
+ family: "Manrope, system-ui, sans-serif",
107173
+ size: "lg",
107174
+ weight: "regular",
107175
+ lineHeight: "relaxed",
107176
+ letterSpacing: "normal"
107177
+ },
107178
+ headings: {
107179
+ default: {
107180
+ family: '"TAN - PEARL", sans-serif',
107181
+ weight: "bold",
107182
+ lineHeight: "normal",
107183
+ letterSpacing: "tight",
107184
+ colorToken: "primary",
107185
+ italic: null,
107186
+ case: null
107187
+ },
107188
+ h1: {
107189
+ size: "xl",
107190
+ weight: "bold",
107191
+ lineHeight: "normal",
107192
+ letterSpacing: "tight",
107193
+ italic: null
107194
+ },
107195
+ h2: {
107196
+ size: "lg",
107197
+ weight: "bold",
107198
+ lineHeight: "normal",
107199
+ letterSpacing: "normal",
107200
+ italic: null
107201
+ },
107202
+ h3: {
107203
+ size: "md",
107204
+ weight: "bold",
107205
+ lineHeight: "normal",
107206
+ letterSpacing: "normal",
107207
+ italic: null
107208
+ }
107209
+ },
107210
+ scale: "balanced"
107211
+ },
107212
+ bodyText: {
107213
+ intro: {
107214
+ paragraphSize: "editorial",
107215
+ headingSize: "editorial"
107216
+ }
107217
+ }
107218
+ },
107219
+ recommendedAppearancePresetIds: [
107220
+ "site-header-brand-solid-inverted-cta",
107221
+ "site-footer-brand-two-band",
107222
+ "hero-brand-scrim-fixed-frame",
107223
+ "body-text-editorial-intro",
107224
+ "testimonials-accent-quote-proof",
107225
+ "contact-form-dark-card"
107226
+ ],
107227
+ buttonPersonalityChoices: [
107228
+ buttonChoice("showtime-pill"),
107229
+ buttonChoice("confident-chip"),
107230
+ buttonChoice("ink-stamp"),
107231
+ buttonChoice("brushed-wash")
107232
+ ],
107233
+ paletteVariantChoices: [
107234
+ paletteChoice("brand-led-burgundy-gold"),
107235
+ paletteChoice("brand-led-jewel"),
107236
+ paletteChoice("brand-led-warm"),
107237
+ paletteChoice("high-contrast-ink")
107238
+ ]
106589
107239
  })
106590
107240
  ];
106591
107241
  curatedSiteStylesById = new Map(
@@ -106641,7 +107291,7 @@ function uniqueNonEmpty(values) {
106641
107291
  }
106642
107292
  return [firstValue, ...uniqueValues.slice(1)];
106643
107293
  }
106644
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
107294
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
106645
107295
  var init_designState = __esm({
106646
107296
  "../theme-core/src/site-styles/designState.ts"() {
106647
107297
  init_sourceCatalogs();
@@ -106661,6 +107311,40 @@ var init_designState = __esm({
106661
107311
  "scrim-gradient",
106662
107312
  "solid-panel"
106663
107313
  ]);
107314
+ sectionHeightIntentSchema = z.enum([
107315
+ "default",
107316
+ "banner",
107317
+ "hero",
107318
+ "immersive"
107319
+ ]);
107320
+ imageSurfaceTreatmentIntensitySchema = z.enum(["soft", "balanced", "strong"]);
107321
+ imageSurfaceMotionSchema = z.enum(["static", "fixed-frame"]);
107322
+ imageSurfaceTreatmentSchema = z.discriminatedUnion("kind", [
107323
+ z.object({ kind: z.literal("none") }).strict(),
107324
+ z.object({
107325
+ kind: z.literal("brand-scrim"),
107326
+ token: z.enum(["primary", "secondary", "accent"]),
107327
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107328
+ }).strict(),
107329
+ z.object({
107330
+ kind: z.literal("brand-wash"),
107331
+ token: z.enum(["primary", "secondary", "accent"]),
107332
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107333
+ }).strict(),
107334
+ z.object({
107335
+ kind: z.literal("neutral-scrim"),
107336
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107337
+ }).strict(),
107338
+ z.object({
107339
+ kind: z.literal("neutral-wash"),
107340
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107341
+ }).strict(),
107342
+ z.object({
107343
+ kind: z.literal("solid-panel"),
107344
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
107345
+ }).strict()
107346
+ ]);
107347
+ testimonialCardTreatmentSchema = z.enum(["default", "accent-quote"]);
106664
107348
  userPanelTreatments = uniqueNonEmpty(
106665
107349
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
106666
107350
  );
@@ -106691,7 +107375,11 @@ var init_designState = __esm({
106691
107375
  itemSurface: z.enum(userDesignOptionCatalog.itemSurfaces),
106692
107376
  transitionAfter: z.enum(userDesignOptionCatalog.transitions),
106693
107377
  emphasis: z.enum(userDesignOptionCatalog.emphases),
106694
- heroLegibility: heroLegibilityStrategySchema.optional()
107378
+ sectionHeight: sectionHeightIntentSchema.optional(),
107379
+ heroLegibility: heroLegibilityStrategySchema.optional(),
107380
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
107381
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
107382
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
106695
107383
  }).strict();
106696
107384
  styleAuthoritySchema = z.discriminatedUnion("kind", [
106697
107385
  z.object({
@@ -106912,6 +107600,14 @@ var init_pageDesignIntent = __esm({
106912
107600
  }
106913
107601
  });
106914
107602
 
107603
+ // ../theme-core/src/site-styles/lookResolution.ts
107604
+ var init_lookResolution = __esm({
107605
+ "../theme-core/src/site-styles/lookResolution.ts"() {
107606
+ init_appearancePresets();
107607
+ init_types5();
107608
+ }
107609
+ });
107610
+
106915
107611
  // ../theme-core/src/site-styles/resolver.ts
106916
107612
  function repairActionsForIssue(issueKind) {
106917
107613
  return repairActionsByIssueKind[issueKind];
@@ -106919,6 +107615,18 @@ function repairActionsForIssue(issueKind) {
106919
107615
  function supportsFrame(capability, frameKind) {
106920
107616
  return capability.contentFrames.includes(frameKind);
106921
107617
  }
107618
+ function supportsSectionHeight(capability, sectionHeight) {
107619
+ return capability.sectionHeights.includes(sectionHeight);
107620
+ }
107621
+ function supportsImageSurfaceTreatment(capability, imageSurfaceTreatment) {
107622
+ return capability.imageSurfaceTreatments.includes(imageSurfaceTreatment.kind);
107623
+ }
107624
+ function supportsImageSurfaceMotion(capability, imageSurfaceMotion) {
107625
+ return capability.imageSurfaceMotions.includes(imageSurfaceMotion);
107626
+ }
107627
+ function supportsTestimonialCardTreatment(capability, treatment) {
107628
+ return capability.testimonialCardTreatments.includes(treatment);
107629
+ }
106922
107630
  function isDecorativeTransition(transition) {
106923
107631
  return transition !== "none";
106924
107632
  }
@@ -106928,7 +107636,11 @@ function blockDesignRequest(block) {
106928
107636
  contentFrame: block.contentFrame,
106929
107637
  itemSurface: block.itemSurface,
106930
107638
  transitionAfter: block.transitionAfter,
106931
- heroLegibility: block.heroLegibility
107639
+ sectionHeight: block.sectionHeight,
107640
+ heroLegibility: block.heroLegibility,
107641
+ imageSurfaceTreatment: block.imageSurfaceTreatment,
107642
+ imageSurfaceMotion: block.imageSurfaceMotion,
107643
+ testimonialCardTreatment: block.testimonialCardTreatment
106932
107644
  };
106933
107645
  }
106934
107646
  function resolveBlockDesignPlan(input) {
@@ -106939,7 +107651,11 @@ function resolveBlockDesignPlan(input) {
106939
107651
  let appliedContentFrame = block.contentFrame;
106940
107652
  let appliedItemSurface = block.itemSurface;
106941
107653
  let appliedTransitionAfter = block.transitionAfter;
107654
+ let appliedSectionHeight = block.sectionHeight ?? "default";
106942
107655
  let appliedHeroLegibility = block.heroLegibility ?? "none";
107656
+ let appliedImageSurfaceTreatment = block.imageSurfaceTreatment ?? { kind: "none" };
107657
+ let appliedImageSurfaceMotion = block.imageSurfaceMotion ?? "static";
107658
+ let appliedTestimonialCardTreatment = block.testimonialCardTreatment ?? "default";
106943
107659
  if (!capability) {
106944
107660
  issues.push({
106945
107661
  kind: "missing-block-design-capability",
@@ -106958,7 +107674,11 @@ function resolveBlockDesignPlan(input) {
106958
107674
  appliedContentFrame: blockDesignFallback.contentFrame,
106959
107675
  appliedItemSurface: blockDesignFallback.itemSurface,
106960
107676
  appliedTransitionAfter: blockDesignFallback.transitionAfter,
106961
- appliedHeroLegibility: blockDesignFallback.heroLegibility
107677
+ appliedSectionHeight: blockDesignFallback.sectionHeight,
107678
+ appliedHeroLegibility: blockDesignFallback.heroLegibility,
107679
+ appliedImageSurfaceTreatment: blockDesignFallback.imageSurfaceTreatment,
107680
+ appliedImageSurfaceMotion: blockDesignFallback.imageSurfaceMotion,
107681
+ appliedTestimonialCardTreatment: blockDesignFallback.testimonialCardTreatment
106962
107682
  };
106963
107683
  }
106964
107684
  if (capability.kind === "not-designed") {
@@ -106980,7 +107700,11 @@ function resolveBlockDesignPlan(input) {
106980
107700
  appliedContentFrame: blockDesignFallback.contentFrame,
106981
107701
  appliedItemSurface: blockDesignFallback.itemSurface,
106982
107702
  appliedTransitionAfter: blockDesignFallback.transitionAfter,
106983
- appliedHeroLegibility: blockDesignFallback.heroLegibility
107703
+ appliedSectionHeight: blockDesignFallback.sectionHeight,
107704
+ appliedHeroLegibility: blockDesignFallback.heroLegibility,
107705
+ appliedImageSurfaceTreatment: blockDesignFallback.imageSurfaceTreatment,
107706
+ appliedImageSurfaceMotion: blockDesignFallback.imageSurfaceMotion,
107707
+ appliedTestimonialCardTreatment: blockDesignFallback.testimonialCardTreatment
106984
107708
  };
106985
107709
  }
106986
107710
  if (capability.sectionSurfaces === "unsupported") {
@@ -107025,7 +107749,108 @@ function resolveBlockDesignPlan(input) {
107025
107749
  allowedRepairActions: repairActionsForIssue("unsupported-item-surface")
107026
107750
  });
107027
107751
  }
107028
- if (appliedSectionSurface === "hero-image" && (block.heroLegibility === void 0 || appliedHeroLegibility === "none")) {
107752
+ if (!supportsSectionHeight(capability, appliedSectionHeight)) {
107753
+ appliedSectionHeight = "default";
107754
+ issues.push({
107755
+ kind: "unsupported-section-height",
107756
+ blockId: block.blockId,
107757
+ blockKind: block.blockKind,
107758
+ purpose: block.purpose,
107759
+ requested: block.sectionHeight ?? "default",
107760
+ fallback: appliedSectionHeight,
107761
+ policy: input.policy,
107762
+ severity: designIssueSeverityForPolicy(input.policy),
107763
+ allowedRepairActions: repairActionsForIssue("unsupported-section-height")
107764
+ });
107765
+ }
107766
+ if (!supportsImageSurfaceTreatment(capability, appliedImageSurfaceTreatment)) {
107767
+ appliedImageSurfaceTreatment = { kind: "none" };
107768
+ issues.push({
107769
+ kind: "unsupported-image-surface-treatment",
107770
+ blockId: block.blockId,
107771
+ blockKind: block.blockKind,
107772
+ purpose: block.purpose,
107773
+ requested: block.imageSurfaceTreatment ?? { kind: "none" },
107774
+ fallback: appliedImageSurfaceTreatment,
107775
+ policy: input.policy,
107776
+ severity: designIssueSeverityForPolicy(input.policy),
107777
+ allowedRepairActions: repairActionsForIssue("unsupported-image-surface-treatment")
107778
+ });
107779
+ }
107780
+ if (!supportsImageSurfaceMotion(capability, appliedImageSurfaceMotion)) {
107781
+ appliedImageSurfaceMotion = "static";
107782
+ issues.push({
107783
+ kind: "unsupported-image-surface-motion",
107784
+ blockId: block.blockId,
107785
+ blockKind: block.blockKind,
107786
+ purpose: block.purpose,
107787
+ requested: block.imageSurfaceMotion ?? "static",
107788
+ fallback: appliedImageSurfaceMotion,
107789
+ policy: input.policy,
107790
+ severity: designIssueSeverityForPolicy(input.policy),
107791
+ allowedRepairActions: repairActionsForIssue("unsupported-image-surface-motion")
107792
+ });
107793
+ }
107794
+ if (!supportsTestimonialCardTreatment(capability, appliedTestimonialCardTreatment)) {
107795
+ appliedTestimonialCardTreatment = "default";
107796
+ issues.push({
107797
+ kind: "unsupported-testimonial-card-treatment",
107798
+ blockId: block.blockId,
107799
+ blockKind: block.blockKind,
107800
+ purpose: block.purpose,
107801
+ requested: block.testimonialCardTreatment ?? "default",
107802
+ fallback: appliedTestimonialCardTreatment,
107803
+ policy: input.policy,
107804
+ severity: designIssueSeverityForPolicy(input.policy),
107805
+ allowedRepairActions: repairActionsForIssue("unsupported-testimonial-card-treatment")
107806
+ });
107807
+ }
107808
+ if (appliedSectionSurface !== "hero-image" && appliedImageSurfaceTreatment.kind !== "none") {
107809
+ const requested = appliedImageSurfaceTreatment;
107810
+ appliedImageSurfaceTreatment = { kind: "none" };
107811
+ issues.push({
107812
+ kind: "image-surface-treatment-without-image-surface",
107813
+ blockId: block.blockId,
107814
+ blockKind: block.blockKind,
107815
+ purpose: block.purpose,
107816
+ requested,
107817
+ fallback: appliedImageSurfaceTreatment,
107818
+ policy: input.policy,
107819
+ severity: designIssueSeverityForPolicy(input.policy),
107820
+ allowedRepairActions: repairActionsForIssue("image-surface-treatment-without-image-surface")
107821
+ });
107822
+ }
107823
+ if (appliedSectionSurface !== "hero-image" && appliedImageSurfaceMotion !== "static") {
107824
+ const requested = appliedImageSurfaceMotion;
107825
+ appliedImageSurfaceMotion = "static";
107826
+ issues.push({
107827
+ kind: "image-surface-motion-without-image-surface",
107828
+ blockId: block.blockId,
107829
+ blockKind: block.blockKind,
107830
+ purpose: block.purpose,
107831
+ requested,
107832
+ fallback: appliedImageSurfaceMotion,
107833
+ policy: input.policy,
107834
+ severity: designIssueSeverityForPolicy(input.policy),
107835
+ allowedRepairActions: repairActionsForIssue("image-surface-motion-without-image-surface")
107836
+ });
107837
+ }
107838
+ if (appliedSectionSurface === "hero-image" && appliedImageSurfaceTreatment.kind !== "none" && appliedHeroLegibility !== "none") {
107839
+ const requested = appliedHeroLegibility;
107840
+ appliedHeroLegibility = "none";
107841
+ issues.push({
107842
+ kind: "hero-legibility-overridden-by-image-surface-treatment",
107843
+ blockId: block.blockId,
107844
+ blockKind: block.blockKind,
107845
+ purpose: block.purpose,
107846
+ requested,
107847
+ fallback: appliedHeroLegibility,
107848
+ policy: input.policy,
107849
+ severity: designIssueSeverityForPolicy(input.policy),
107850
+ allowedRepairActions: repairActionsForIssue("hero-legibility-overridden-by-image-surface-treatment")
107851
+ });
107852
+ }
107853
+ if (appliedSectionSurface === "hero-image" && appliedImageSurfaceTreatment.kind === "none" && (block.heroLegibility === void 0 || appliedHeroLegibility === "none")) {
107029
107854
  appliedHeroLegibility = "scrim-gradient";
107030
107855
  issues.push({
107031
107856
  kind: "hero-image-without-legibility",
@@ -107045,7 +107870,11 @@ function resolveBlockDesignPlan(input) {
107045
107870
  appliedContentFrame,
107046
107871
  appliedItemSurface,
107047
107872
  appliedTransitionAfter,
107048
- appliedHeroLegibility
107873
+ appliedSectionHeight,
107874
+ appliedHeroLegibility,
107875
+ appliedImageSurfaceTreatment,
107876
+ appliedImageSurfaceMotion,
107877
+ appliedTestimonialCardTreatment
107049
107878
  };
107050
107879
  });
107051
107880
  const transitionSafeBlocks = blocks.map((block, index2) => {
@@ -107081,6 +107910,13 @@ var init_resolver2 = __esm({
107081
107910
  "unsupported-section-surface": ["fallback-section-surface"],
107082
107911
  "unsupported-content-frame": ["fallback-content-frame"],
107083
107912
  "unsupported-item-surface": ["fallback-item-surface"],
107913
+ "unsupported-section-height": ["fallback-section-height"],
107914
+ "unsupported-image-surface-treatment": ["fallback-image-surface-treatment"],
107915
+ "unsupported-image-surface-motion": ["fallback-image-surface-motion"],
107916
+ "unsupported-testimonial-card-treatment": ["fallback-testimonial-card-treatment"],
107917
+ "image-surface-treatment-without-image-surface": ["fallback-image-surface-treatment"],
107918
+ "image-surface-motion-without-image-surface": ["fallback-image-surface-motion"],
107919
+ "hero-legibility-overridden-by-image-surface-treatment": ["remove-hero-legibility"],
107084
107920
  "removed-transition-for-flush-frame": ["remove-transition"],
107085
107921
  "hero-image-without-legibility": ["fallback-hero-legibility"]
107086
107922
  };
@@ -107089,7 +107925,11 @@ var init_resolver2 = __esm({
107089
107925
  contentFrame: plainFrame,
107090
107926
  itemSurface: "none",
107091
107927
  transitionAfter: "none",
107092
- heroLegibility: "none"
107928
+ sectionHeight: "default",
107929
+ heroLegibility: "none",
107930
+ imageSurfaceTreatment: { kind: "none" },
107931
+ imageSurfaceMotion: "static",
107932
+ testimonialCardTreatment: "default"
107093
107933
  };
107094
107934
  }
107095
107935
  });
@@ -107225,15 +108065,121 @@ function resolveVisualSectionSurface(requestedSurface, contentFrame) {
107225
108065
  }
107226
108066
  function compileSectionStyles(input) {
107227
108067
  const rule2 = input.rules.sectionSurfaces[input.surface];
107228
- const background = input.surface === "hero-image" ? {
107229
- ...rule2.background,
107230
- overlay: input.heroLegibility === "none" ? null : input.rules.heroLegibility[input.heroLegibility]
107231
- } : rule2.background;
107232
- return sectionStylesOverrideSchema.parse(background ? {
108068
+ const background = compileSectionBackground({
108069
+ background: rule2.background,
108070
+ heroLegibility: input.heroLegibility,
108071
+ imageSurfaceTreatment: input.imageSurfaceTreatment,
108072
+ imageSurfaceMotion: input.imageSurfaceMotion,
108073
+ rules: input.rules
108074
+ });
108075
+ return sectionStylesOverrideSchema.parse({
107233
108076
  spacing: input.spacing,
107234
- background,
107235
- ...input.surface === "hero-image" ? { minHeight: "hero" } : {}
107236
- } : { spacing: input.spacing });
108077
+ ...background ? { background } : {},
108078
+ ...sectionMinHeightForIntent(input.sectionHeight, input.surface)
108079
+ });
108080
+ }
108081
+ function sectionMinHeightForIntent(sectionHeight, surface) {
108082
+ if (sectionHeight === "default") {
108083
+ return surface === "hero-image" ? { minHeight: "hero" } : {};
108084
+ }
108085
+ return { minHeight: sectionHeight };
108086
+ }
108087
+ function compileSectionBackground(input) {
108088
+ if (!input.background || input.background.type !== "image") {
108089
+ return input.background;
108090
+ }
108091
+ const treatmentBackground = compileImageSurfaceTreatmentBackground(
108092
+ input.background,
108093
+ input.imageSurfaceTreatment
108094
+ );
108095
+ if (treatmentBackground) {
108096
+ return withImageSurfaceMotion(treatmentBackground, input.imageSurfaceMotion);
108097
+ }
108098
+ return withImageSurfaceMotion({
108099
+ ...input.background,
108100
+ overlay: input.heroLegibility === "none" ? null : input.rules.heroLegibility[input.heroLegibility]
108101
+ }, input.imageSurfaceMotion);
108102
+ }
108103
+ function withImageSurfaceMotion(background, motion2) {
108104
+ return motion2 === "static" ? background : {
108105
+ ...background,
108106
+ motion: motion2
108107
+ };
108108
+ }
108109
+ function compileImageSurfaceTreatmentBackground(background, treatment) {
108110
+ switch (treatment.kind) {
108111
+ case "none":
108112
+ return null;
108113
+ case "brand-scrim":
108114
+ return {
108115
+ ...background,
108116
+ overlay: {
108117
+ type: "color",
108118
+ color: darkenedBrandToken(treatment.token),
108119
+ opacity: imageSurfaceTreatmentOpacity("brand-scrim", treatment.intensity)
108120
+ },
108121
+ textColor: "primaryForeground",
108122
+ headingColor: "primaryForeground"
108123
+ };
108124
+ case "brand-wash":
108125
+ return {
108126
+ ...background,
108127
+ overlay: {
108128
+ type: "color",
108129
+ color: lightenedBrandToken(treatment.token),
108130
+ opacity: imageSurfaceTreatmentOpacity("brand-wash", treatment.intensity)
108131
+ },
108132
+ textColor: "text",
108133
+ headingColor: "text"
108134
+ };
108135
+ case "neutral-scrim":
108136
+ return {
108137
+ ...background,
108138
+ overlay: {
108139
+ type: "color",
108140
+ color: darkenedThemeToken("text"),
108141
+ opacity: imageSurfaceTreatmentOpacity("neutral-scrim", treatment.intensity)
108142
+ },
108143
+ textColor: "primaryForeground",
108144
+ headingColor: "primaryForeground"
108145
+ };
108146
+ case "neutral-wash":
108147
+ return {
108148
+ ...background,
108149
+ overlay: {
108150
+ type: "gradient",
108151
+ gradient: "linear-gradient(180deg, rgba(255,255,255,0.38) 0%, rgba(244,241,234,0.62) 90%)",
108152
+ opacity: 1
108153
+ },
108154
+ textColor: "text",
108155
+ headingColor: "text"
108156
+ };
108157
+ case "solid-panel":
108158
+ return {
108159
+ ...background,
108160
+ overlay: {
108161
+ type: "color",
108162
+ color: "surface",
108163
+ opacity: imageSurfaceTreatmentOpacity("solid-panel", treatment.intensity)
108164
+ },
108165
+ textColor: "text",
108166
+ headingColor: "text"
108167
+ };
108168
+ default:
108169
+ return assertNever6(treatment);
108170
+ }
108171
+ }
108172
+ function imageSurfaceTreatmentOpacity(kind, intensity) {
108173
+ return imageSurfaceTreatmentOpacityByKind[kind][intensity ?? "balanced"];
108174
+ }
108175
+ function darkenedThemeToken(token) {
108176
+ return `color-mix(in oklab, rgb(var(--tb-${token})), black 28%)`;
108177
+ }
108178
+ function darkenedBrandToken(token) {
108179
+ return darkenedThemeToken(token);
108180
+ }
108181
+ function lightenedBrandToken(token) {
108182
+ return `color-mix(in oklab, rgb(var(--tb-${token})), white 42%)`;
107237
108183
  }
107238
108184
  function compileContainerStyles(contentFrame, rules) {
107239
108185
  switch (contentFrame.kind) {
@@ -107261,6 +108207,39 @@ function compileContainerStyles(contentFrame, rules) {
107261
108207
  return assertNever6(contentFrame);
107262
108208
  }
107263
108209
  }
108210
+ function testimonialCardTreatmentStyles(treatment) {
108211
+ const resolvedTreatment = treatment ?? "default";
108212
+ switch (resolvedTreatment) {
108213
+ case "default":
108214
+ return null;
108215
+ case "accent-quote":
108216
+ return {
108217
+ treatment: "accent-quote",
108218
+ background: {
108219
+ type: "color",
108220
+ color: "primary-700",
108221
+ textColor: "primaryForeground"
108222
+ },
108223
+ border: {
108224
+ enabled: true,
108225
+ width: "3",
108226
+ colorToken: "secondary"
108227
+ },
108228
+ rounded: "none"
108229
+ };
108230
+ default:
108231
+ return assertNever6(resolvedTreatment);
108232
+ }
108233
+ }
108234
+ function compileCardStyles(input) {
108235
+ const itemSurfaceStyles = input.rules.itemSurfaces[input.itemSurface];
108236
+ const treatmentStyles = testimonialCardTreatmentStyles(input.testimonialCardTreatment);
108237
+ if (!itemSurfaceStyles && !treatmentStyles) return void 0;
108238
+ return cardStylesOverrideSchema.parse({
108239
+ ...itemSurfaceStyles ?? {},
108240
+ ...treatmentStyles ?? {}
108241
+ });
108242
+ }
107264
108243
  function compileBlockRuntimeFields(input) {
107265
108244
  const designRules = input.designRules ?? defaultDesignRuntimeRules;
107266
108245
  const componentRules = input.componentRules ?? defaultComponentRuntimeRules;
@@ -107270,7 +108249,11 @@ function compileBlockRuntimeFields(input) {
107270
108249
  input.block.appliedContentFrame,
107271
108250
  componentRules
107272
108251
  );
107273
- const cardStyles = componentRules.itemSurfaces[input.block.appliedItemSurface] ? cardStylesOverrideSchema.parse(componentRules.itemSurfaces[input.block.appliedItemSurface]) : void 0;
108252
+ const cardStyles = compileCardStyles({
108253
+ itemSurface: input.block.appliedItemSurface,
108254
+ testimonialCardTreatment: input.block.appliedTestimonialCardTreatment,
108255
+ rules: componentRules
108256
+ });
107274
108257
  const transitionClassName = designRules.transitionClassName(
107275
108258
  input.block.appliedTransitionAfter,
107276
108259
  visualSectionSurface,
@@ -107286,7 +108269,10 @@ function compileBlockRuntimeFields(input) {
107286
108269
  surface: visualSectionSurface,
107287
108270
  spacing: sectionSpacing,
107288
108271
  rules: designRules,
107289
- heroLegibility: input.block.appliedHeroLegibility
108272
+ sectionHeight: input.block.appliedSectionHeight,
108273
+ heroLegibility: input.block.appliedHeroLegibility,
108274
+ imageSurfaceTreatment: input.block.appliedImageSurfaceTreatment,
108275
+ imageSurfaceMotion: input.block.appliedImageSurfaceMotion
107290
108276
  }),
107291
108277
  ...containerStyles ? { _containerStyles: containerStyles } : {},
107292
108278
  ...cardStyles ? { _cardStyles: cardStyles } : {},
@@ -107341,11 +108327,11 @@ function compileHeroTypography(recipes) {
107341
108327
  return {
107342
108328
  headlineSize,
107343
108329
  headlineLineHeight: "tight",
107344
- subheadlineSize: recipes.spacing === "compact" ? "base" : "lg",
108330
+ subheadlineSize: recipes.spacing === "compact" ? "xl" : "editorial",
107345
108331
  subheadlineLineHeight: "normal",
107346
- microHeadlineSize: recipes.spacing === "compact" ? "2xl" : "3xl",
107347
- microHeadlineLineHeight: "snug",
107348
- microSubheadlineSize: "base",
108332
+ microHeadlineSize: headlineSize,
108333
+ microHeadlineLineHeight: "tight",
108334
+ microSubheadlineSize: "xl",
107349
108335
  microSubheadlineLineHeight: "normal",
107350
108336
  responsive: {
107351
108337
  tablet: {
@@ -107353,7 +108339,7 @@ function compileHeroTypography(recipes) {
107353
108339
  },
107354
108340
  mobile: {
107355
108341
  headlineSize: recipes.spacing === "compact" ? "3xl" : "4xl",
107356
- subheadlineSize: "base"
108342
+ subheadlineSize: "xl"
107357
108343
  }
107358
108344
  }
107359
108345
  };
@@ -107415,7 +108401,7 @@ function compileTokenRecipes(recipes, options = {}) {
107415
108401
  };
107416
108402
  return themeSchema.parse(theme);
107417
108403
  }
107418
- var compiledRuntimeStyleFieldNames, defaultDesignRuntimeRules, defaultComponentRuntimeRules, paletteByRecipe;
108404
+ var compiledRuntimeStyleFieldNames, defaultDesignRuntimeRules, defaultComponentRuntimeRules, imageSurfaceTreatmentOpacityByKind, paletteByRecipe;
107419
108405
  var init_runtimeCompiler = __esm({
107420
108406
  "../theme-core/src/site-styles/runtimeCompiler.ts"() {
107421
108407
  init_schema4();
@@ -107564,6 +108550,13 @@ var init_runtimeCompiler = __esm({
107564
108550
  }
107565
108551
  }
107566
108552
  });
108553
+ imageSurfaceTreatmentOpacityByKind = {
108554
+ "brand-scrim": { soft: 0.26, balanced: 0.35, strong: 0.52 },
108555
+ "brand-wash": { soft: 0.24, balanced: 0.34, strong: 0.46 },
108556
+ "neutral-scrim": { soft: 0.42, balanced: 0.58, strong: 0.72 },
108557
+ "neutral-wash": { soft: 1, balanced: 1, strong: 1 },
108558
+ "solid-panel": { soft: 0.78, balanced: 0.88, strong: 0.94 }
108559
+ };
107567
108560
  paletteByRecipe = {
107568
108561
  "brand-led": [
107569
108562
  { name: "primary", hex: "#2563eb" },
@@ -107636,6 +108629,7 @@ var init_generatedDesignPipeline = __esm({
107636
108629
  init_designState();
107637
108630
  init_generatedSchemas();
107638
108631
  init_pageDesignIntent();
108632
+ init_lookResolution();
107639
108633
  init_resolver2();
107640
108634
  init_runtimeCompiler();
107641
108635
  init_types5();
@@ -107805,7 +108799,8 @@ function layoutFamilyForEffectiveSelection(block) {
107805
108799
  var backgroundImagePromotedFieldPath, normalEditorCuratedPromotedFieldPaths, noneBoundaryOption, softBoundaryOption, spaciousBoundaryOption;
107806
108800
  var init_pageDesignEditorModel = __esm({
107807
108801
  "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
107808
- init_appearancePresets();
108802
+ init_curatedSiteStyles();
108803
+ init_lookResolution();
107809
108804
  init_pageDesignIntent();
107810
108805
  init_types5();
107811
108806
  backgroundImagePromotedFieldPath = "_sectionStyles.background.image";
@@ -107901,6 +108896,7 @@ var init_site_styles = __esm({
107901
108896
  init_designState();
107902
108897
  init_generatedSchemas();
107903
108898
  init_generatedDesignPipeline();
108899
+ init_lookResolution();
107904
108900
  init_pageDesignAuthority();
107905
108901
  init_pageDesignEditorErrors();
107906
108902
  init_pageDesignEditorModel();
@@ -108893,6 +109889,7 @@ var init_spacing = __esm({
108893
109889
  ];
108894
109890
  SECTION_MIN_HEIGHT_VALUES = [
108895
109891
  "none",
109892
+ "banner",
108896
109893
  "hero",
108897
109894
  "immersive"
108898
109895
  ];
@@ -108914,6 +109911,7 @@ var init_spacing = __esm({
108914
109911
  };
108915
109912
  SECTION_MIN_HEIGHT_MAP = {
108916
109913
  none: "",
109914
+ banner: "rb-section-min-h-banner",
108917
109915
  hero: "rb-section-min-h-hero",
108918
109916
  immersive: "rb-section-min-h-immersive"
108919
109917
  };
@@ -109790,6 +110788,9 @@ var init_boxStyles2 = __esm({
109790
110788
  classes.push(roundedResult);
109791
110789
  }
109792
110790
  }
110791
+ if (input.treatment === "accent-quote") {
110792
+ classes.push("rb-card-treatment-accent-quote");
110793
+ }
109793
110794
  return classes.join(" ").trim() || "";
109794
110795
  }
109795
110796
  };
@@ -109859,7 +110860,7 @@ var init_boxStyles2 = __esm({
109859
110860
  minHeight = input.minHeight;
109860
110861
  } else {
109861
110862
  console.warn(
109862
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
110863
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
109863
110864
  );
109864
110865
  }
109865
110866
  }
@@ -110196,24 +111197,8 @@ var init_styledCard = __esm({
110196
111197
  });
110197
111198
 
110198
111199
  // ../blocks/src/system/node/fragments/typography.ts
110199
- function mergeClassName(base2, extra) {
110200
- return [base2, extra ?? ""].filter(Boolean).join(" ");
110201
- }
110202
- function captionText(opts, ...mods) {
110203
- const {
110204
- as: asProp,
110205
- className: classNameProp,
110206
- color,
110207
- ...rest
110208
- } = {};
110209
- const as = asProp ?? "p";
110210
- const className = mergeClassName("rb-caption", classNameProp);
110211
- const style2 = textColorStyle(color ?? "mutedText");
110212
- return text({ ...rest, as, className, style: style2 }, ...mods);
110213
- }
110214
111200
  var init_typography = __esm({
110215
111201
  "../blocks/src/system/node/fragments/typography.ts"() {
110216
- init_builder();
110217
111202
  init_colorStyles();
110218
111203
  }
110219
111204
  });
@@ -111230,18 +112215,17 @@ function buildAttributionNodes() {
111230
112215
  const name = text(
111231
112216
  {
111232
112217
  as: "strong",
111233
- className: "rb-block",
111234
- style: textColorStyle("text")
112218
+ className: "rb-block"
111235
112219
  },
111236
112220
  bind2("testimonial.content.name", { fallback: "Anonymous" })
111237
112221
  );
111238
- const jobTitle = captionText(
111239
- null,
112222
+ const jobTitle = text(
112223
+ { as: "p", className: "rb-caption" },
111240
112224
  when("testimonial.content.jobTitle"),
111241
112225
  bind2("testimonial.content.jobTitle")
111242
112226
  );
111243
- const company = captionText(
111244
- null,
112227
+ const company = text(
112228
+ { as: "p", className: "rb-caption" },
111245
112229
  when("testimonial.content.company"),
111246
112230
  bind2("testimonial.content.company")
111247
112231
  );
@@ -111275,8 +112259,7 @@ function buildTestimonialCard(...mods) {
111275
112259
  );
111276
112260
  const body = richText(
111277
112261
  {
111278
- className: "rb-prose rb-max-w-none",
111279
- style: textColorStyle("text")
112262
+ className: "rb-prose rb-max-w-none"
111280
112263
  },
111281
112264
  bind2("testimonial.content.body"),
111282
112265
  when("testimonial.content.body")
@@ -111360,7 +112343,6 @@ var init_testimonialsCarousel = __esm({
111360
112343
  "../blocks/src/system/fragments/library/testimonialsCarousel.ts"() {
111361
112344
  init_types16();
111362
112345
  init_builder();
111363
- init_colorStyles();
111364
112346
  init_fragments();
111365
112347
  grid = (props2, children, ...mods) => el("grid", props2 ?? void 0, children ?? void 0, ...mods);
111366
112348
  testimonialsCarouselFragment = defineFragment({
@@ -113455,6 +114437,7 @@ function heroContentCard(children, gap) {
113455
114437
  return styledContainer({
113456
114438
  bindFrom: "_contentCardStyles",
113457
114439
  constrainWidth: false,
114440
+ baseClassName: "rb-relative rb-isolate",
113458
114441
  rootType: "stack",
113459
114442
  rootProps: {
113460
114443
  gap
@@ -113485,6 +114468,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
113485
114468
  function heroContainerStack(children, gap) {
113486
114469
  return styledContainer({
113487
114470
  rootType: "stack",
114471
+ baseClassName: "rb-relative rb-isolate",
113488
114472
  rootProps: {
113489
114473
  gap: "none",
113490
114474
  justify: {
@@ -114635,7 +115619,7 @@ function resolveHeroVerticalAlignment(content) {
114635
115619
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
114636
115620
  const sectionStyles = asPartialObject(content._sectionStyles);
114637
115621
  const minHeight = sectionStyles?.minHeight;
114638
- if (minHeight === "hero" || minHeight === "immersive") return "center";
115622
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
114639
115623
  const variant = resolveHeroVariant(content);
114640
115624
  if (variant === "split" || variant === "splitReverse") return "center";
114641
115625
  return "top";
@@ -115239,7 +116223,7 @@ function extractBackgroundColorToken(background, fallback2) {
115239
116223
  }
115240
116224
  return fallback2;
115241
116225
  }
115242
- var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
116226
+ var joinClasses4, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerGapXClassMap, footerGapYClassMap, footerAlignClassMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitNavSingleClassTransform, footerSplitMainClassSchema, footerSplitMainClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
115243
116227
  var init_layout = __esm({
115244
116228
  "../blocks/src/system/transforms/registry/layout.ts"() {
115245
116229
  init_colorConversion();
@@ -115545,6 +116529,26 @@ var init_layout = __esm({
115545
116529
  ]);
115546
116530
  }
115547
116531
  };
116532
+ footerSplitMainClassSchema = z.object({
116533
+ base: z.string().optional(),
116534
+ reverseClass: z.string().optional()
116535
+ });
116536
+ footerSplitMainClassTransform = {
116537
+ id: "layout.footerSplitMainClass",
116538
+ kind: "string",
116539
+ summary: "Compose split-footer main row classes from footer logo placement",
116540
+ schema: footerSplitMainClassSchema,
116541
+ run: (value, options) => {
116542
+ const logo = asPartialObject(value);
116543
+ const placement = logo?.placement ?? "right";
116544
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
116545
+ const baseClass = shouldPlaceLogoFirst ? "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-end rb-gap-8 rb-md-flex-row rb-md-items-end" : "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end";
116546
+ return joinClasses4([
116547
+ options.base ?? baseClass,
116548
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
116549
+ ]);
116550
+ }
116551
+ };
115548
116552
  footerLogoClassSchema = z.object({
115549
116553
  base: z.string().optional()
115550
116554
  });
@@ -115555,14 +116559,11 @@ var init_layout = __esm({
115555
116559
  schema: footerLogoClassSchema,
115556
116560
  run: (value, options) => {
115557
116561
  const logo = asPartialObject(value);
115558
- const placement = logo?.placement ?? "right";
115559
116562
  const align = logo?.align ?? "end";
115560
116563
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
115561
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
115562
116564
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
115563
116565
  return joinClasses4([
115564
116566
  options.base ?? "footer-logo rb-inline-flex rb-items-center rb-justify-end rb-gap-3 rb-no-underline rb-transition-opacity rb-hover-opacity-80",
115565
- orderClass,
115566
116567
  selfAlignClass,
115567
116568
  hiddenClass
115568
116569
  ]);
@@ -115599,6 +116600,7 @@ var init_layout = __esm({
115599
116600
  footerBottomBarContainerClassTransform,
115600
116601
  footerBottomBarStyleTransform,
115601
116602
  footerSplitNavSingleClassTransform,
116603
+ footerSplitMainClassTransform,
115602
116604
  footerLogoClassTransform,
115603
116605
  footerLogoMediaClassTransform,
115604
116606
  footerLogoTextVisibleTransform
@@ -115939,7 +116941,7 @@ var init_site_header = __esm({
115939
116941
  headerCta = ctaButton({
115940
116942
  basePath: "menu.ctaItem",
115941
116943
  whenPath: "menu.ctaItem.label",
115942
- variantPath: "menu.ctaItem.variant",
116944
+ variantPath: "$root.theme.header.ctaVariant",
115943
116945
  linkPath: "menu.ctaItem.link",
115944
116946
  sizeFallback: "sm",
115945
116947
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -115947,7 +116949,7 @@ var init_site_header = __esm({
115947
116949
  mobileCta = ctaButton({
115948
116950
  basePath: "menu.ctaItem",
115949
116951
  whenPath: "menu.ctaItem.label",
115950
- variantPath: "menu.ctaItem.variant",
116952
+ variantPath: "$root.theme.header.ctaVariant",
115951
116953
  linkPath: "menu.ctaItem.link",
115952
116954
  sizeFallback: "md",
115953
116955
  className: "nav-mobile-cta rb-w-full"
@@ -116426,7 +117428,13 @@ var init_site_footer = __esm({
116426
117428
  [
116427
117429
  inline3(
116428
117430
  {
116429
- className: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
117431
+ className: {
117432
+ $bind: {
117433
+ from: "$root.theme.footer.logo",
117434
+ transforms: [{ id: "layout.footerSplitMainClass" }],
117435
+ fallback: "rb-flex rb-w-full rb-flex-col rb-items-start rb-justify-between rb-gap-8 rb-md-flex-row rb-md-items-end"
117436
+ }
117437
+ }
116430
117438
  },
116431
117439
  [
116432
117440
  stack(
@@ -118820,7 +119828,8 @@ var init_course_registration_interactive = __esm({
118820
119828
  run: z.object({
118821
119829
  courseId: z.string(),
118822
119830
  seriesId: z.string(),
118823
- runSlug: z.string()
119831
+ runSlug: z.string(),
119832
+ runName: z.string().nullable()
118824
119833
  })
118825
119834
  }),
118826
119835
  z.object({
@@ -127020,6 +128029,16 @@ function panelCapable() {
127020
128029
  itemSurfaces: "unsupported"
127021
128030
  });
127022
128031
  }
128032
+ function heroCapable() {
128033
+ return declareBlockDesignCapability({
128034
+ sectionSurfaces: "supported",
128035
+ contentFrames: ["plain", "panel"],
128036
+ itemSurfaces: "unsupported",
128037
+ sectionHeights: heroSectionHeights,
128038
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
128039
+ imageSurfaceMotions: heroImageSurfaceMotions
128040
+ });
128041
+ }
127023
128042
  function plainItemsCapable() {
127024
128043
  return declareBlockDesignCapability({
127025
128044
  sectionSurfaces: "supported",
@@ -127079,7 +128098,7 @@ function ensureSystemBlockDefinitionsRegistered() {
127079
128098
  registerBlockDefinition(definition);
127080
128099
  }
127081
128100
  }
127082
- var allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
128101
+ var heroSectionHeights, heroImageSurfaceTreatments, heroImageSurfaceMotions, allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
127083
128102
  var init_blocks3 = __esm({
127084
128103
  "../blocks/src/system/blocks/index.ts"() {
127085
128104
  init_site_styles();
@@ -127153,6 +128172,24 @@ var init_blocks3 = __esm({
127153
128172
  init_checkout();
127154
128173
  init_gifting();
127155
128174
  init_newsletter_signup();
128175
+ heroSectionHeights = [
128176
+ "default",
128177
+ "banner",
128178
+ "hero",
128179
+ "immersive"
128180
+ ];
128181
+ heroImageSurfaceTreatments = [
128182
+ "none",
128183
+ "brand-scrim",
128184
+ "brand-wash",
128185
+ "neutral-scrim",
128186
+ "neutral-wash",
128187
+ "solid-panel"
128188
+ ];
128189
+ heroImageSurfaceMotions = [
128190
+ "static",
128191
+ "fixed-frame"
128192
+ ];
127156
128193
  allSectionSurfaces = [
127157
128194
  "base",
127158
128195
  "muted-band",
@@ -127219,7 +128256,7 @@ var init_blocks3 = __esm({
127219
128256
  boundaryPreference: "soft"
127220
128257
  };
127221
128258
  systemBlockDefinitionsRaw = [
127222
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
128259
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
127223
128260
  flow: heroFlow,
127224
128261
  layoutProfiles: [
127225
128262
  layoutProfile({
@@ -127323,7 +128360,12 @@ var init_blocks3 = __esm({
127323
128360
  flow: siteChromeFlow,
127324
128361
  layoutProfiles: []
127325
128362
  })),
127326
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
128363
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
128364
+ sectionSurfaces: "supported",
128365
+ contentFrames: ["plain", "panel"],
128366
+ itemSurfaces: "supported",
128367
+ testimonialCardTreatments: ["default", "accent-quote"]
128368
+ }), defineBlockDesignMetadata({
127327
128369
  flow: proofFlow,
127328
128370
  layoutProfiles: [
127329
128371
  layoutProfile({
@@ -127676,8 +128718,15 @@ function parseOpacity(value) {
127676
128718
  }
127677
128719
  return opacity <= 1 ? opacity : opacity / 100;
127678
128720
  }
127679
- function appendOptionalClasses(baseClassName, optionalClassName) {
127680
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
128721
+ function backgroundMotionClassNames(input) {
128722
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
128723
+ }
128724
+ function appendBackgroundMediaClasses(baseClassName, input) {
128725
+ return [
128726
+ baseClassName,
128727
+ backgroundMotionClassNames(input),
128728
+ backgroundVideoMobileClassNames(input)
128729
+ ].filter(Boolean).join(" ");
127681
128730
  }
127682
128731
  var isString3, isNumber4, resolveImageStyleTransform, resolveImageClassNameTransform, resolveOverlayStyleTransform, backgroundTransforms;
127683
128732
  var init_background4 = __esm({
@@ -127763,9 +128812,9 @@ var init_background4 = __esm({
127763
128812
  const objectFit = isString3(input.objectFit) ? input.objectFit.trim() : null;
127764
128813
  const position = isString3(input.position) ? input.position.trim() : null;
127765
128814
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
127766
- return appendOptionalClasses(
128815
+ return appendBackgroundMediaClasses(
127767
128816
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
127768
- backgroundVideoMobileClassNames(input)
128817
+ input
127769
128818
  );
127770
128819
  }
127771
128820
  let needsAnchoring = false;
@@ -127778,18 +128827,18 @@ var init_background4 = __esm({
127778
128827
  }
127779
128828
  }
127780
128829
  if (!needsAnchoring) {
127781
- return appendOptionalClasses(
128830
+ return appendBackgroundMediaClasses(
127782
128831
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
127783
- backgroundVideoMobileClassNames(input)
128832
+ input
127784
128833
  );
127785
128834
  }
127786
128835
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
127787
128836
  const isCustom = position && !isPreset;
127788
128837
  if (isCustom) {
127789
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
128838
+ return appendBackgroundMediaClasses(baseClass, input);
127790
128839
  }
127791
128840
  const anchorClasses = getAnchorClasses(position);
127792
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
128841
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
127793
128842
  }
127794
128843
  };
127795
128844
  resolveOverlayStyleTransform = {
@@ -135392,16 +136441,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
135392
136441
  };
135393
136442
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
135394
136443
  }
135395
- const textSize = configuredDropdownStyle?.textSize;
135396
- if (textSize) {
135397
- const textSizeMap = {
135398
- "xs": "0.75rem",
135399
- "sm": "0.875rem",
135400
- "base": "1rem",
135401
- "lg": "1.125rem"
135402
- };
135403
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
135404
- }
136444
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
136445
+ const textSizeMap = {
136446
+ "xs": "0.75rem",
136447
+ "sm": "0.875rem",
136448
+ "base": "1rem",
136449
+ "lg": "1.125rem"
136450
+ };
136451
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
135405
136452
  if (additionalRules.length > 0) {
135406
136453
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
135407
136454
  return baseCSS + `
@@ -135723,12 +136770,10 @@ ${selector} .rb-container-full`;
135723
136770
  ${rootRules.join("\n ")}
135724
136771
  }`);
135725
136772
  if (containerPadding?.mobile) {
135726
- cssChunks.push(
135727
- `${containerSelector} {
136773
+ cssChunks.push(`${containerSelector} {
135728
136774
  padding-left: ${toPaddingValue(containerPadding.mobile)};
135729
136775
  padding-right: ${toPaddingValue(containerPadding.mobile)};
135730
- }`
135731
- );
136776
+ }`);
135732
136777
  }
135733
136778
  if (containerPadding?.tablet) {
135734
136779
  cssChunks.push(
@@ -135754,6 +136799,10 @@ ${selector} .rb-container-full`;
135754
136799
  if (heroTypographyCss) {
135755
136800
  cssChunks.push(heroTypographyCss);
135756
136801
  }
136802
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
136803
+ if (bodyTextTypographyCss) {
136804
+ cssChunks.push(bodyTextTypographyCss);
136805
+ }
135757
136806
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
135758
136807
  return cssChunks.join("\n\n");
135759
136808
  }
@@ -135833,21 +136882,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
135833
136882
 
135834
136883
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
135835
136884
  background: var(--site-style-transition-to);
135836
- clip-path: polygon(
135837
- 0 42%,
135838
- 10% 34%,
135839
- 21% 42%,
135840
- 34% 31%,
135841
- 48% 39%,
135842
- 63% 29%,
135843
- 78% 37%,
135844
- 90% 30%,
135845
- 100% 36%,
135846
- 100% 100%,
135847
- 0 100%
135848
- );
136885
+ mask-image: url("${waveTransitionMask}");
136886
+ mask-repeat: no-repeat;
136887
+ mask-size: 100% 100%;
136888
+ -webkit-mask-image: url("${waveTransitionMask}");
136889
+ -webkit-mask-repeat: no-repeat;
136890
+ -webkit-mask-size: 100% 100%;
135849
136891
  }`;
135850
136892
  }
136893
+ function svgDataUrl(svg) {
136894
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
136895
+ }
135851
136896
  function generateHeroTypographyCss(themeId, theme) {
135852
136897
  const typography = theme.hero?.typography;
135853
136898
  if (!typography) return "";
@@ -135870,33 +136915,21 @@ function generateHeroTypographyCss(themeId, theme) {
135870
136915
  ${subheadlineRules.join("\n ")}
135871
136916
  }`);
135872
136917
  }
135873
- const microHeadlineRules = buildTypographyRules(
135874
- typography.microHeadlineSize,
135875
- typography.microHeadlineLineHeight
135876
- );
136918
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
135877
136919
  if (microHeadlineRules.length > 0) {
135878
136920
  chunks.push(`${microHeadlineSelector} {
135879
136921
  ${microHeadlineRules.join("\n ")}
135880
136922
  }`);
135881
136923
  }
135882
- const microSubheadlineRules = buildTypographyRules(
135883
- typography.microSubheadlineSize,
135884
- typography.microSubheadlineLineHeight
135885
- );
136924
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
135886
136925
  if (microSubheadlineRules.length > 0) {
135887
136926
  chunks.push(`${microSubheadlineSelector} {
135888
136927
  ${microSubheadlineRules.join("\n ")}
135889
136928
  }`);
135890
136929
  }
135891
136930
  if (typography.responsive?.tablet) {
135892
- const tabletHeadlineRules = buildTypographyRules(
135893
- typography.responsive.tablet.headlineSize,
135894
- typography.responsive.tablet.headlineLineHeight
135895
- );
135896
- const tabletSubheadlineRules = buildTypographyRules(
135897
- typography.responsive.tablet.subheadlineSize,
135898
- typography.responsive.tablet.subheadlineLineHeight
135899
- );
136931
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
136932
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
135900
136933
  const tabletChunks = [];
135901
136934
  if (tabletHeadlineRules.length > 0) {
135902
136935
  tabletChunks.push(`${headlineSelector} {
@@ -135915,14 +136948,8 @@ function generateHeroTypographyCss(themeId, theme) {
135915
136948
  }
135916
136949
  }
135917
136950
  if (typography.responsive?.mobile) {
135918
- const mobileHeadlineRules = buildTypographyRules(
135919
- typography.responsive.mobile.headlineSize,
135920
- typography.responsive.mobile.headlineLineHeight
135921
- );
135922
- const mobileSubheadlineRules = buildTypographyRules(
135923
- typography.responsive.mobile.subheadlineSize,
135924
- typography.responsive.mobile.subheadlineLineHeight
135925
- );
136951
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
136952
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
135926
136953
  const mobileChunks = [];
135927
136954
  if (mobileHeadlineRules.length > 0) {
135928
136955
  mobileChunks.push(`${headlineSelector} {
@@ -135952,6 +136979,27 @@ function buildTypographyRules(size4, lineHeight) {
135952
136979
  }
135953
136980
  return rules;
135954
136981
  }
136982
+ function generateBodyTextTypographyCss(themeId, theme) {
136983
+ const intro = theme.bodyText?.intro;
136984
+ if (!intro) return "";
136985
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
136986
+ const chunks = [];
136987
+ if (intro.headingSize === "editorial") {
136988
+ chunks.push(`${rootSelector} .body-copy-heading {
136989
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
136990
+ line-height: 1.08;
136991
+ }`);
136992
+ }
136993
+ if (intro.paragraphSize === "editorial") {
136994
+ chunks.push(`${rootSelector} .body-copy-body {
136995
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
136996
+ --rb-prose-lg-line-height: 1.55;
136997
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
136998
+ --rb-prose-xl-sm-line-height: 1.55;
136999
+ }`);
137000
+ }
137001
+ return chunks.join("\n\n");
137002
+ }
135955
137003
  function toHeroSize(size4) {
135956
137004
  const map2 = {
135957
137005
  sm: "0.875rem",
@@ -135962,7 +137010,8 @@ function toHeroSize(size4) {
135962
137010
  "3xl": "1.875rem",
135963
137011
  "4xl": "2.25rem",
135964
137012
  "5xl": "3rem",
135965
- "6xl": "3.75rem"
137013
+ "6xl": "3.75rem",
137014
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
135966
137015
  };
135967
137016
  return map2[size4];
135968
137017
  }
@@ -135975,9 +137024,13 @@ function toHeroLineHeight(lineHeight) {
135975
137024
  };
135976
137025
  return map2[lineHeight];
135977
137026
  }
137027
+ var waveTransitionMask;
135978
137028
  var init_generateLayoutCss = __esm({
135979
137029
  "../theme-core/src/layout/generateLayoutCss.ts"() {
135980
137030
  init_breakpoints();
137031
+ waveTransitionMask = svgDataUrl(
137032
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
137033
+ );
135981
137034
  }
135982
137035
  });
135983
137036
 
@@ -138250,6 +139303,81 @@ var init_PageRenderer = __esm({
138250
139303
  );
138251
139304
  }
138252
139305
  });
139306
+
139307
+ // ../blocks/src/subroutes/formatDate.ts
139308
+ function formatOccurrenceDate(iso) {
139309
+ const datePart = iso?.split("T")[0];
139310
+ if (!datePart) return null;
139311
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(datePart)) return null;
139312
+ const [year, month, day] = datePart.split("-").map(Number);
139313
+ if (!year || !month || !day) return null;
139314
+ if (month < 1 || month > 12) return null;
139315
+ if (day < 1 || day > 31) return null;
139316
+ const date = new Date(year, month - 1, day);
139317
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
139318
+ return null;
139319
+ }
139320
+ return date.toLocaleDateString("en-GB", {
139321
+ day: "numeric",
139322
+ month: "long",
139323
+ year: "numeric"
139324
+ });
139325
+ }
139326
+ var init_formatDate = __esm({
139327
+ "../blocks/src/subroutes/formatDate.ts"() {
139328
+ }
139329
+ });
139330
+
139331
+ // ../blocks/src/subroutes/fold.ts
139332
+ function foldSubroute(ctx, fold) {
139333
+ switch (ctx.kind) {
139334
+ case "event-occurrence":
139335
+ return fold["event-occurrence"](ctx.occurrence);
139336
+ case "course-run":
139337
+ return fold["course-run"](ctx.run);
139338
+ default:
139339
+ return assertNever3(ctx, "Unhandled subroute kind");
139340
+ }
139341
+ }
139342
+ var init_fold = __esm({
139343
+ "../blocks/src/subroutes/fold.ts"() {
139344
+ init_src3();
139345
+ }
139346
+ });
139347
+
139348
+ // ../blocks/src/subroutes/kinds.ts
139349
+ var SUBROUTE_KINDS;
139350
+ var init_kinds = __esm({
139351
+ "../blocks/src/subroutes/kinds.ts"() {
139352
+ init_formatDate();
139353
+ SUBROUTE_KINDS = {
139354
+ "event-occurrence": {
139355
+ kind: "event-occurrence",
139356
+ containerNoun: "event",
139357
+ instanceNoun: "date",
139358
+ listLabel: "events list",
139359
+ formatInstanceName: (occurrence) => formatOccurrenceDate(occurrence.startsAt),
139360
+ subEditorPath: (occurrence) => `bookings/events/${occurrence.seriesId}`
139361
+ },
139362
+ "course-run": {
139363
+ kind: "course-run",
139364
+ containerNoun: "course",
139365
+ instanceNoun: "run",
139366
+ listLabel: "courses list",
139367
+ formatInstanceName: (run3) => run3.runName,
139368
+ subEditorPath: (run3) => `bookings/courses/${run3.courseId}`
139369
+ }
139370
+ };
139371
+ }
139372
+ });
139373
+
139374
+ // ../blocks/src/subroutes/index.ts
139375
+ var init_subroutes = __esm({
139376
+ "../blocks/src/subroutes/index.ts"() {
139377
+ init_fold();
139378
+ init_kinds();
139379
+ }
139380
+ });
138253
139381
  var init_paletteAccess = __esm({
138254
139382
  "../theme-core/src/palette/utils/paletteAccess.ts"() {
138255
139383
  init_colorConversion();
@@ -140349,12 +141477,16 @@ var init_containerResponsiveThemeCss = __esm({
140349
141477
  .rb-h-full {
140350
141478
  height: 100%;
140351
141479
  }
141480
+ .rb-section-min-h-banner {
141481
+ min-height: clamp(16rem, 34svh, 24rem);
141482
+ }
140352
141483
  .rb-section-min-h-hero {
140353
141484
  min-height: clamp(32rem, 62svh, 44rem);
140354
141485
  }
140355
141486
  .rb-section-min-h-immersive {
140356
141487
  min-height: clamp(38rem, 78svh, 54rem);
140357
141488
  }
141489
+ .rb-section-min-h-banner > .rb-container,
140358
141490
  .rb-section-min-h-hero > .rb-container,
140359
141491
  .rb-section-min-h-immersive > .rb-container {
140360
141492
  min-height: inherit;
@@ -141464,6 +142596,19 @@ var init_containerResponsiveThemeCss = __esm({
141464
142596
  .rb-object-contain {
141465
142597
  object-fit: contain;
141466
142598
  }
142599
+ .rb-bg-motion-fixed-frame {
142600
+ position: fixed;
142601
+ inset: 0;
142602
+ width: 100vw;
142603
+ height: 100svh;
142604
+ }
142605
+ @media (hover: none), (prefers-reduced-motion: reduce) {
142606
+ .rb-bg-motion-fixed-frame {
142607
+ position: absolute;
142608
+ width: 100%;
142609
+ height: 100%;
142610
+ }
142611
+ }
141467
142612
 
141468
142613
  /* Line clamp */
141469
142614
  .rb-line-clamp-2,
@@ -145974,13 +147119,13 @@ var init_containerResponsiveThemeCss = __esm({
145974
147119
 
145975
147120
  /* Eyebrow - color only (typography via .rb-eyebrow) */
145976
147121
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
145977
- color: rgb(var(--tb-text));
147122
+ color: var(--section-text-color, rgb(var(--tb-text)));
145978
147123
  }
145979
147124
 
145980
147125
  /* Subheadline - supporting text below headline */
145981
147126
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
145982
147127
  font-size: 1.125rem;
145983
- color: rgb(var(--tb-text));
147128
+ color: var(--section-text-color, rgb(var(--tb-text)));
145984
147129
  }
145985
147130
 
145986
147131
  @container rb-site (min-width: 640px) {
@@ -146054,6 +147199,20 @@ var init_containerResponsiveThemeCss = __esm({
146054
147199
  max-width: 60rem;
146055
147200
  }
146056
147201
 
147202
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
147203
+ font-size: var(--rb-prose-lg-font-size);
147204
+ line-height: var(--rb-prose-lg-line-height);
147205
+ }
147206
+
147207
+ @container rb-site (min-width: 640px) {
147208
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
147209
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
147210
+ font-size: var(--rb-prose-xl-sm-font-size);
147211
+ line-height: var(--rb-prose-xl-sm-line-height);
147212
+ }
147213
+ }
147214
+ }
147215
+
146057
147216
  /* Variant: Narrow (left-aligned, shorter line length) */
146058
147217
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
146059
147218
  max-width: 34rem;
@@ -147396,6 +148555,13 @@ var init_containerResponsiveThemeCss = __esm({
147396
148555
  border-radius: var(--rb-block-radius);
147397
148556
  }
147398
148557
 
148558
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
148559
+ border: 0;
148560
+ border-left: 5px solid rgb(var(--tb-secondary));
148561
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
148562
+ color: rgb(var(--tb-primaryForeground));
148563
+ }
148564
+
147399
148565
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
147400
148566
  font-size: var(--rb-testimonial-quote-size);
147401
148567
  line-height: 1;
@@ -147404,6 +148570,12 @@ var init_containerResponsiveThemeCss = __esm({
147404
148570
  color: rgb(var(--tb-primary));
147405
148571
  }
147406
148572
 
148573
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
148574
+ color: rgb(var(--tb-secondary));
148575
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
148576
+ opacity: 1;
148577
+ }
148578
+
147407
148579
 
147408
148580
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
147409
148581
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -149245,6 +150417,7 @@ var init_events2 = __esm({
149245
150417
  var init_src6 = __esm({
149246
150418
  "../blocks/src/index.ts"() {
149247
150419
  init_PageRenderer();
150420
+ init_subroutes();
149248
150421
  init_Button2();
149249
150422
  init_schema5();
149250
150423
  init_palette2();
@@ -194010,6 +195183,73 @@ function withSiteStyleMetadata(theme, siteStyle) {
194010
195183
  siteStyleId: siteStyle.id
194011
195184
  };
194012
195185
  }
195186
+ function hasOwnKeys(value) {
195187
+ return Object.keys(value).length > 0;
195188
+ }
195189
+ function mergeThemeBranch(base2, override) {
195190
+ if (override === void 0) return base2;
195191
+ const merged = {
195192
+ ...base2 ?? {},
195193
+ ...override
195194
+ };
195195
+ return hasOwnKeys(merged) ? merged : void 0;
195196
+ }
195197
+ function mergeHeroTypographyOverride(base2, override) {
195198
+ if (override === void 0) return base2;
195199
+ const responsive = mergeThemeBranch(base2?.responsive, override.responsive);
195200
+ return mergeThemeBranch(base2, {
195201
+ ...override,
195202
+ ...responsive ? { responsive } : {}
195203
+ });
195204
+ }
195205
+ function mergeHeroOverride(theme, override) {
195206
+ if (override === void 0) return theme.hero;
195207
+ const typography = mergeHeroTypographyOverride(theme.hero?.typography, override.typography);
195208
+ return mergeThemeBranch(theme.hero, {
195209
+ ...override,
195210
+ ...typography ? { typography } : {}
195211
+ });
195212
+ }
195213
+ function mergeBodyTextOverride(theme, override) {
195214
+ if (override === void 0) return theme.bodyText;
195215
+ const intro = mergeThemeBranch(theme.bodyText?.intro, override.intro);
195216
+ return mergeThemeBranch(theme.bodyText, {
195217
+ ...override,
195218
+ ...intro ? { intro } : {}
195219
+ });
195220
+ }
195221
+ function applySiteStyleThemeOverrides(theme, siteStyle) {
195222
+ const overrides = siteStyle.themeOverrides;
195223
+ if (!overrides) return theme;
195224
+ return themeSchema.parse({
195225
+ ...theme,
195226
+ ...overrides.typography ? { typography: overrides.typography } : {},
195227
+ ...overrides.hero ? { hero: mergeHeroOverride(theme, overrides.hero) } : {},
195228
+ ...overrides.bodyText ? { bodyText: mergeBodyTextOverride(theme, overrides.bodyText) } : {}
195229
+ });
195230
+ }
195231
+ function recommendedSiteHeaderAppearancePreset(siteStyle) {
195232
+ return siteStyle.recommendedAppearancePresetIds.flatMap((presetId) => {
195233
+ const preset2 = appearancePresets.find((candidate) => candidate.id === presetId);
195234
+ return preset2?.kind === "site-chrome" && preset2.target === "site-header" ? [preset2] : [];
195235
+ })[0] ?? null;
195236
+ }
195237
+ function recommendedSiteFooterAppearancePreset(siteStyle) {
195238
+ return siteStyle.recommendedAppearancePresetIds.flatMap((presetId) => {
195239
+ const preset2 = appearancePresets.find((candidate) => candidate.id === presetId);
195240
+ return preset2?.kind === "site-chrome" && preset2.target === "site-footer" ? [preset2] : [];
195241
+ })[0] ?? null;
195242
+ }
195243
+ function applySiteChromeAppearancePresets(theme, siteStyle) {
195244
+ const headerPreset = recommendedSiteHeaderAppearancePreset(siteStyle);
195245
+ const footerPreset = recommendedSiteFooterAppearancePreset(siteStyle);
195246
+ if (!headerPreset && !footerPreset) return theme;
195247
+ return themeSchema.parse({
195248
+ ...theme,
195249
+ ...headerPreset ? { header: compileSiteHeaderAppearancePreset(headerPreset, theme) } : {},
195250
+ ...footerPreset ? { footer: compileSiteFooterAppearancePreset(footerPreset, theme) } : {}
195251
+ });
195252
+ }
194013
195253
  function compileSiteThemeFromSelections(input) {
194014
195254
  const { siteStyle, buttonPersonalityId, paletteVariantId, paletteOverrides } = input;
194015
195255
  const personalityRequest = toCuratedRequest(parsePersistedButtonPersonalityId(buttonPersonalityId));
@@ -194042,8 +195282,10 @@ function compileSiteThemeFromSelections(input) {
194042
195282
  paletteVariantId: paletteResult.resolved,
194043
195283
  paletteOverrides: paletteOverrides ?? void 0
194044
195284
  });
195285
+ const themeWithSiteStyleOverrides = applySiteStyleThemeOverrides(theme, siteStyle);
195286
+ const themeWithSiteChrome = applySiteChromeAppearancePresets(themeWithSiteStyleOverrides, siteStyle);
194045
195287
  return {
194046
- theme: withSiteStyleMetadata(theme, siteStyle),
195288
+ theme: withSiteStyleMetadata(themeWithSiteChrome, siteStyle),
194047
195289
  resolvedSelections: {
194048
195290
  buttonPersonalityId: personalityResult.resolved,
194049
195291
  paletteVariantId: paletteResult.resolved
@@ -194106,11 +195348,41 @@ function compileEditorModelRuntimeFieldsForBlock(input) {
194106
195348
  return buildEditorModelRuntimeFieldsByBlockId(input).get(input.blockId) ?? null;
194107
195349
  }
194108
195350
  function applyCompiledRuntimeFieldsToContent(content, fields3) {
195351
+ const runtimeFields = fields3 ? preservePromotedBackgroundImageFields(content, fields3) : fields3;
194109
195352
  return {
194110
195353
  ...stripCompiledRuntimeStyleFields(content),
194111
- ...fields3
195354
+ ...runtimeFields
194112
195355
  };
194113
195356
  }
195357
+ function preservePromotedBackgroundImageFields(content, fields3) {
195358
+ const compiledBackground = fields3._sectionStyles?.background;
195359
+ if (!compiledBackground || compiledBackground.type !== "image") {
195360
+ return fields3;
195361
+ }
195362
+ const currentSectionStyles = readRecord(content._sectionStyles);
195363
+ const currentBackground = readRecord(currentSectionStyles?.background);
195364
+ if (!currentBackground || !Object.prototype.hasOwnProperty.call(currentBackground, "image")) {
195365
+ return fields3;
195366
+ }
195367
+ return {
195368
+ ...fields3,
195369
+ _sectionStyles: {
195370
+ ...fields3._sectionStyles,
195371
+ background: {
195372
+ ...compiledBackground,
195373
+ ...pickExistingImageBackgroundFields(currentBackground)
195374
+ }
195375
+ }
195376
+ };
195377
+ }
195378
+ function readRecord(value) {
195379
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
195380
+ }
195381
+ function pickExistingImageBackgroundFields(background) {
195382
+ return Object.fromEntries(
195383
+ promotedBackgroundImageFieldNames.flatMap((fieldName) => Object.prototype.hasOwnProperty.call(background, fieldName) ? [[fieldName, background[fieldName]]] : [])
195384
+ );
195385
+ }
194114
195386
  function restoreCompiledRuntimeFieldsFromContent(currentContent, previousContent) {
194115
195387
  const nextContent = stripCompiledRuntimeStyleFields(currentContent);
194116
195388
  for (const fieldName of compiledRuntimeStyleFieldNames) {
@@ -194141,23 +195413,28 @@ function runtimeCapabilitiesForBlocks(blocks) {
194141
195413
  return Object.fromEntries(
194142
195414
  blocks.map((block) => [
194143
195415
  block.blockKind,
194144
- {
194145
- kind: "designed",
195416
+ defineBlockDesignCapability({
194146
195417
  sectionSurfaces: "supported",
194147
195418
  contentFrames: [block.contentFrame.kind],
194148
- itemSurfaces: "supported"
194149
- }
195419
+ itemSurfaces: "supported",
195420
+ sectionHeights: [block.sectionHeight ?? "default"],
195421
+ imageSurfaceTreatments: [block.imageSurfaceTreatment?.kind ?? "none"],
195422
+ imageSurfaceMotions: [block.imageSurfaceMotion ?? "static"]
195423
+ })
194150
195424
  ])
194151
195425
  );
194152
195426
  }
194153
- var previewCustomizePurpose;
195427
+ var previewCustomizePurpose, promotedBackgroundImageFieldNames;
194154
195428
  var init_previewCompiler = __esm({
194155
195429
  "../theme-core/src/site-styles/previewCompiler.ts"() {
195430
+ init_schema4();
194156
195431
  init_personalities();
194157
195432
  init_variants();
194158
195433
  init_curatedChoices();
194159
195434
  init_curatedSiteStyles();
194160
195435
  init_resolver2();
195436
+ init_types5();
195437
+ init_appearancePresets();
194161
195438
  init_runtimeCompiler();
194162
195439
  init_blockFlow();
194163
195440
  init_pageDesignEditorModel();
@@ -194169,6 +195446,12 @@ var init_previewCompiler = __esm({
194169
195446
  init_curatedSiteStyles();
194170
195447
  init_types5();
194171
195448
  previewCustomizePurpose = "preview-customize";
195449
+ promotedBackgroundImageFieldNames = [
195450
+ "image",
195451
+ "objectFit",
195452
+ "scale",
195453
+ "position"
195454
+ ];
194172
195455
  }
194173
195456
  });
194174
195457
 
@@ -196092,6 +197375,61 @@ var init_widgetOverrides = __esm({
196092
197375
  };
196093
197376
  }
196094
197377
  });
197378
+ function SubrouteNotice({ model }) {
197379
+ return /* @__PURE__ */ jsxs("div", { className: "border-b bg-amber-50 px-4 py-3 text-amber-950", children: [
197380
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: model.title }),
197381
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: model.body }),
197382
+ model.cta ? /* @__PURE__ */ jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: /* @__PURE__ */ jsx(
197383
+ "a",
197384
+ {
197385
+ className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
197386
+ href: model.cta.href,
197387
+ target: "_blank",
197388
+ rel: "noopener noreferrer",
197389
+ children: model.cta.label
197390
+ }
197391
+ ) }) : null,
197392
+ model.fallbackMessage ? /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-amber-900/90", children: model.fallbackMessage }) : null
197393
+ ] });
197394
+ }
197395
+ var init_SubrouteNoticePanel = __esm({
197396
+ "../preview-next/src/client/preview/SubrouteNoticePanel.tsx"() {
197397
+ "use client";
197398
+ }
197399
+ });
197400
+
197401
+ // ../preview-next/src/client/preview/subrouteNotice.ts
197402
+ function buildNoticeFromMeta(meta, payload, siteId) {
197403
+ const name = meta.formatInstanceName(payload);
197404
+ const title = name ? `You're previewing the ${name} ${meta.instanceNoun} of this ${meta.containerNoun}` : `You're previewing one ${meta.instanceNoun} of this ${meta.containerNoun}`;
197405
+ const body = `Edits in this sidebar apply to the whole ${meta.containerNoun}, so they'll show up on every ${meta.instanceNoun}. Need to change just this ${meta.instanceNoun}? You can do that from your ${meta.listLabel}.`;
197406
+ const ctaLabel = `Edit just this ${meta.instanceNoun}`;
197407
+ let href = null;
197408
+ try {
197409
+ href = getDashboardUrl(`sites/${siteId}/${meta.subEditorPath(payload)}`);
197410
+ } catch {
197411
+ href = null;
197412
+ }
197413
+ return {
197414
+ title,
197415
+ body,
197416
+ cta: href ? { label: ctaLabel, href } : null,
197417
+ fallbackMessage: href ? null : "Dashboard links are unavailable. Set `NEXT_PUBLIC_DASHBOARD_URL` so preview can link back to the dashboard."
197418
+ };
197419
+ }
197420
+ function resolveSubrouteNotice(ctx, args) {
197421
+ if (!ctx) return null;
197422
+ return foldSubroute(ctx, {
197423
+ "event-occurrence": (occurrence) => buildNoticeFromMeta(SUBROUTE_KINDS["event-occurrence"], occurrence, args.siteId),
197424
+ "course-run": (run3) => buildNoticeFromMeta(SUBROUTE_KINDS["course-run"], run3, args.siteId)
197425
+ });
197426
+ }
197427
+ var init_subrouteNotice = __esm({
197428
+ "../preview-next/src/client/preview/subrouteNotice.ts"() {
197429
+ init_url();
197430
+ init_src6();
197431
+ }
197432
+ });
196095
197433
  function EntryEditorPanel({
196096
197434
  siteId,
196097
197435
  entryData,
@@ -196103,7 +197441,7 @@ function EntryEditorPanel({
196103
197441
  apiClient,
196104
197442
  bearerToken,
196105
197443
  supabaseUrl,
196106
- occurrenceContext,
197444
+ entrySubrouteContext,
196107
197445
  metadataPanel,
196108
197446
  mediaAssets,
196109
197447
  widgets,
@@ -196139,54 +197477,10 @@ function EntryEditorPanel({
196139
197477
  [contentFormFields]
196140
197478
  );
196141
197479
  const contentInitialValues = useMemo(() => draftContent ?? {}, [draftContent]);
196142
- const occurrenceNotice = useMemo(() => {
196143
- if (!occurrenceContext) return null;
196144
- const date = occurrenceContext.startsAt?.split("T")[0] ?? null;
196145
- const editEventHref = (() => {
196146
- try {
196147
- return getDashboardUrl(`sites/${siteId}/content/${entryData.type ?? "event"}/${entryData.id}`);
196148
- } catch {
196149
- return null;
196150
- }
196151
- })();
196152
- const editOccurrenceHref = (() => {
196153
- try {
196154
- return getDashboardUrl(`sites/${siteId}/bookings/events/${occurrenceContext.seriesId}`);
196155
- } catch {
196156
- return null;
196157
- }
196158
- })();
196159
- return /* @__PURE__ */ jsxs("div", { className: "border-b bg-amber-50 px-4 py-3 text-amber-950", children: [
196160
- /* @__PURE__ */ jsxs("p", { className: "text-sm font-semibold", children: [
196161
- "You're viewing an event occurrence",
196162
- date ? ` (${date})` : "",
196163
- "."
196164
- ] }),
196165
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm", children: "Sidebar edits apply to the parent event entry. Occurrence-specific overrides aren't editable in preview yet." }),
196166
- editEventHref && editOccurrenceHref ? /* @__PURE__ */ jsxs("div", { className: "mt-3 flex flex-wrap gap-2", children: [
196167
- /* @__PURE__ */ jsx(
196168
- "a",
196169
- {
196170
- className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
196171
- href: editEventHref,
196172
- target: "_blank",
196173
- rel: "noopener noreferrer",
196174
- children: "Edit event content"
196175
- }
196176
- ),
196177
- /* @__PURE__ */ jsx(
196178
- "a",
196179
- {
196180
- className: "inline-flex items-center rounded-md bg-white px-3 py-1.5 text-sm font-medium text-amber-950 shadow-sm ring-1 ring-amber-900/10 hover:bg-amber-100",
196181
- href: editOccurrenceHref,
196182
- target: "_blank",
196183
- rel: "noopener noreferrer",
196184
- children: "Edit occurrence overrides"
196185
- }
196186
- )
196187
- ] }) : /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm text-amber-900/90", children: "Dashboard links are unavailable. Set `NEXT_PUBLIC_DASHBOARD_URL` so preview can link back to the dashboard." })
196188
- ] });
196189
- }, [entryData.id, entryData.type, occurrenceContext, siteId]);
197480
+ const subrouteNotice = useMemo(
197481
+ () => resolveSubrouteNotice(entrySubrouteContext ?? null, { siteId }),
197482
+ [entrySubrouteContext, siteId]
197483
+ );
196190
197484
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
196191
197485
  /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b px-4 py-2", children: /* @__PURE__ */ jsx(
196192
197486
  PreviewViewportControls,
@@ -196199,7 +197493,7 @@ function EntryEditorPanel({
196199
197493
  onZoomChange
196200
197494
  }
196201
197495
  ) }),
196202
- occurrenceNotice,
197496
+ subrouteNotice ? /* @__PURE__ */ jsx(SubrouteNotice, { model: subrouteNotice }) : null,
196203
197497
  /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 space-y-0 overflow-auto", children: [
196204
197498
  contentTypeSchema && entryData.type ? /* @__PURE__ */ jsx(Collapsible2, { open: contentOpen, onOpenChange: setContentOpen, children: /* @__PURE__ */ jsxs("div", { className: "border-b", children: [
196205
197499
  /* @__PURE__ */ jsx(CollapsibleTrigger2, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: "flex cursor-pointer items-center gap-2 px-4 py-3 hover:bg-accent/40", children: [
@@ -196275,6 +197569,8 @@ var init_EntryEditorPanel = __esm({
196275
197569
  init_src();
196276
197570
  init_widgetOverrides();
196277
197571
  init_PreviewViewportControls();
197572
+ init_SubrouteNoticePanel();
197573
+ init_subrouteNotice();
196278
197574
  }
196279
197575
  });
196280
197576
  function useStoreSelector(store, selector, isEqual = Object.is) {
@@ -200748,7 +202044,7 @@ function PreviewEditorSidebar({
200748
202044
  apiClient,
200749
202045
  bearerToken,
200750
202046
  supabaseUrl,
200751
- occurrenceContext,
202047
+ entrySubrouteContext,
200752
202048
  assistantPanel,
200753
202049
  sdkConfig,
200754
202050
  mediaAssets,
@@ -200858,7 +202154,7 @@ function PreviewEditorSidebar({
200858
202154
  apiClient,
200859
202155
  bearerToken,
200860
202156
  supabaseUrl,
200861
- occurrenceContext,
202157
+ entrySubrouteContext,
200862
202158
  metadataPanel: metadataSectionContent,
200863
202159
  mediaAssets,
200864
202160
  widgets: contentFormWidgets,
@@ -204652,7 +205948,7 @@ function PreviewShellLayout({
204652
205948
  supabaseUrl,
204653
205949
  isSiteLaunched,
204654
205950
  maintenanceModeEnabled,
204655
- occurrenceContext,
205951
+ entrySubrouteContext,
204656
205952
  assistantPanel,
204657
205953
  sdkConfig,
204658
205954
  mediaAssets,
@@ -204926,7 +206222,7 @@ function PreviewShellLayout({
204926
206222
  setPreviewSidebarActiveTab(tab);
204927
206223
  },
204928
206224
  onClose: () => setDrawerOpen(false),
204929
- occurrenceContext: occurrenceContext ?? null,
206225
+ entrySubrouteContext: entrySubrouteContext ?? null,
204930
206226
  assistantPanel,
204931
206227
  mediaAssets,
204932
206228
  siteStyleAccess,
@@ -205033,7 +206329,7 @@ function PreviewShell({
205033
206329
  pageMetadata,
205034
206330
  isSiteLaunched,
205035
206331
  maintenanceModeEnabled,
205036
- occurrenceContext,
206332
+ entrySubrouteContext,
205037
206333
  assistantPanel,
205038
206334
  sdkConfig,
205039
206335
  mediaAssets,
@@ -205102,7 +206398,7 @@ function PreviewShell({
205102
206398
  supabaseUrl,
205103
206399
  isSiteLaunched,
205104
206400
  maintenanceModeEnabled,
205105
- occurrenceContext,
206401
+ entrySubrouteContext,
205106
206402
  assistantPanel,
205107
206403
  sdkConfig: sdkConfig ?? null,
205108
206404
  mediaAssets,
@@ -206295,7 +207591,7 @@ function SdkPreviewMode(props2) {
206295
207591
  pageMetadata,
206296
207592
  isSiteLaunched: true,
206297
207593
  maintenanceModeEnabled: false,
206298
- occurrenceContext: null,
207594
+ entrySubrouteContext: null,
206299
207595
  assistantPanel: null,
206300
207596
  sdkConfig: sdkConfigForEditor,
206301
207597
  mediaAssets: content.mediaAssets,