@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
@@ -69,68 +69,6 @@ function toLocationCoordinates(value) {
69
69
  };
70
70
  }
71
71
 
72
- // ../core/src/participant-identity.ts
73
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
74
- participant_id: {
75
- field: "participant_id",
76
- role: "canonical_link",
77
- canonicalSource: "booking_participants.id",
78
- contractAction: "tighten_in_839",
79
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
80
- },
81
- display_name: {
82
- field: "display_name",
83
- role: "contextual_snapshot",
84
- canonicalSource: "booking_participants.display_name for live identity",
85
- contractAction: "retain_as_snapshot",
86
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
87
- },
88
- email: {
89
- field: "email",
90
- role: "contextual_snapshot",
91
- canonicalSource: "booking_participants.email_normalized for live email identity",
92
- contractAction: "retain_as_snapshot",
93
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
94
- },
95
- email_normalized: {
96
- field: "email_normalized",
97
- role: "contextual_snapshot",
98
- canonicalSource: "booking_participants.email_normalized for live email identity",
99
- contractAction: "retain_as_snapshot",
100
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
101
- },
102
- phone: {
103
- field: "phone",
104
- role: "contextual_snapshot",
105
- canonicalSource: "booking_participants.phone for live phone identity",
106
- contractAction: "retain_as_snapshot",
107
- notes: "Participation-time phone context. Live identity belongs to the participant row."
108
- },
109
- identity_state: {
110
- field: "identity_state",
111
- role: "materialization_state",
112
- canonicalSource: "booking_participants.identity_state for subject state",
113
- contractAction: "review_for_later_contract_cleanup",
114
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
115
- },
116
- event_attendee_guest_id: {
117
- field: "event_attendee_guest_id",
118
- role: "compatibility_projection",
119
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
120
- contractAction: "retain_as_projection",
121
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
122
- }
123
- };
124
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
125
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
126
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
127
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
128
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
129
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
130
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
131
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
132
- ];
133
-
134
72
  // ../media-core/src/aspectTransforms.ts
135
73
  function parseAspectRatioValue(value) {
136
74
  if (typeof value === "number") {
@@ -1050,12 +988,29 @@ function defineFrameCapability(capability) {
1050
988
  function defineBlockDesignCapability(capability) {
1051
989
  return {
1052
990
  ...capability,
1053
- kind: "designed"
991
+ kind: "designed",
992
+ sectionHeights: capability.sectionHeights ?? ["default"],
993
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
994
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
995
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
1054
996
  };
1055
997
  }
1056
998
 
1057
999
  // ../theme-core/src/site-styles/appearancePresets.ts
1000
+ function assertValidOptionGroups(preset) {
1001
+ preset.optionGroups?.forEach((group) => {
1002
+ const selectedOption = group.options.find(
1003
+ (option) => option.id === group.selectedOptionId
1004
+ );
1005
+ if (!selectedOption) {
1006
+ throw new Error(
1007
+ `Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
1008
+ );
1009
+ }
1010
+ });
1011
+ }
1058
1012
  function defineBlockAppearancePreset(preset) {
1013
+ assertValidOptionGroups(preset);
1059
1014
  return preset;
1060
1015
  }
1061
1016
  function defineSiteChromeAppearancePreset(preset) {
@@ -1068,13 +1023,122 @@ var appearancePresets = [
1068
1023
  target: "hero",
1069
1024
  label: "Immersive image hero",
1070
1025
  blockKinds: ["block.hero"],
1026
+ constraints: {
1027
+ layoutFamilies: ["centered", "compact"]
1028
+ },
1029
+ design: {
1030
+ sectionSurface: "hero-image",
1031
+ contentFrame: plainFrame,
1032
+ itemSurface: "none",
1033
+ transitionAfter: "soft-fade-short",
1034
+ emphasis: "high",
1035
+ sectionHeight: "hero",
1036
+ imageSurfaceTreatment: { kind: "neutral-wash" }
1037
+ }
1038
+ }),
1039
+ defineBlockAppearancePreset({
1040
+ kind: "block-design",
1041
+ id: "hero-brand-scrim",
1042
+ target: "hero",
1043
+ label: "Brand scrim image hero",
1044
+ blockKinds: ["block.hero"],
1045
+ constraints: {
1046
+ layoutFamilies: ["centered", "compact"]
1047
+ },
1048
+ optionGroups: [
1049
+ {
1050
+ id: "image-surface-treatment",
1051
+ label: "Treatment",
1052
+ selectedOptionId: "brand-scrim-primary",
1053
+ options: [
1054
+ {
1055
+ id: "brand-scrim-primary",
1056
+ label: "Brand scrim",
1057
+ designPatch: {
1058
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
1059
+ }
1060
+ },
1061
+ {
1062
+ id: "neutral-scrim",
1063
+ label: "Neutral scrim",
1064
+ designPatch: {
1065
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
1066
+ }
1067
+ }
1068
+ ]
1069
+ }
1070
+ ],
1071
+ layoutPatches: [
1072
+ {
1073
+ constraints: {
1074
+ layoutVariantKeys: ["micro"]
1075
+ },
1076
+ designPatch: {
1077
+ sectionHeight: "banner"
1078
+ }
1079
+ }
1080
+ ],
1081
+ design: {
1082
+ sectionSurface: "hero-image",
1083
+ contentFrame: plainFrame,
1084
+ itemSurface: "none",
1085
+ transitionAfter: "soft-fade-short",
1086
+ emphasis: "high",
1087
+ sectionHeight: "immersive",
1088
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
1089
+ }
1090
+ }),
1091
+ defineBlockAppearancePreset({
1092
+ kind: "block-design",
1093
+ id: "hero-brand-scrim-fixed-frame",
1094
+ target: "hero",
1095
+ label: "Fixed-frame brand scrim hero",
1096
+ blockKinds: ["block.hero"],
1097
+ constraints: {
1098
+ layoutFamilies: ["centered", "compact"]
1099
+ },
1100
+ optionGroups: [
1101
+ {
1102
+ id: "image-surface-treatment",
1103
+ label: "Treatment",
1104
+ selectedOptionId: "brand-scrim-primary",
1105
+ options: [
1106
+ {
1107
+ id: "brand-scrim-primary",
1108
+ label: "Brand scrim",
1109
+ designPatch: {
1110
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
1111
+ }
1112
+ },
1113
+ {
1114
+ id: "neutral-scrim",
1115
+ label: "Neutral scrim",
1116
+ designPatch: {
1117
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
1118
+ }
1119
+ }
1120
+ ]
1121
+ }
1122
+ ],
1123
+ layoutPatches: [
1124
+ {
1125
+ constraints: {
1126
+ layoutVariantKeys: ["micro"]
1127
+ },
1128
+ designPatch: {
1129
+ sectionHeight: "banner"
1130
+ }
1131
+ }
1132
+ ],
1071
1133
  design: {
1072
1134
  sectionSurface: "hero-image",
1073
1135
  contentFrame: plainFrame,
1074
1136
  itemSurface: "none",
1075
1137
  transitionAfter: "soft-fade-short",
1076
1138
  emphasis: "high",
1077
- heroLegibility: "scrim-gradient"
1139
+ sectionHeight: "immersive",
1140
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
1141
+ imageSurfaceMotion: "fixed-frame"
1078
1142
  }
1079
1143
  }),
1080
1144
  defineBlockAppearancePreset({
@@ -1091,17 +1155,26 @@ var appearancePresets = [
1091
1155
  emphasis: "high"
1092
1156
  }
1093
1157
  }),
1158
+ defineBlockAppearancePreset({
1159
+ kind: "block-design",
1160
+ id: "body-text-editorial-intro",
1161
+ target: "body-text",
1162
+ label: "Editorial intro copy",
1163
+ blockKinds: ["block.body-text"],
1164
+ design: {
1165
+ sectionSurface: "base",
1166
+ contentFrame: plainFrame,
1167
+ itemSurface: "none",
1168
+ transitionAfter: "soft-fade-short",
1169
+ emphasis: "high"
1170
+ }
1171
+ }),
1094
1172
  defineBlockAppearancePreset({
1095
1173
  kind: "block-design",
1096
1174
  id: "offerings-calm-list",
1097
1175
  target: "offerings",
1098
1176
  label: "Calm offerings list",
1099
- blockKinds: [
1100
- "block.event-listing",
1101
- "block.event-calendar",
1102
- "block.event-spotlight",
1103
- "block.product-list"
1104
- ],
1177
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
1105
1178
  design: {
1106
1179
  sectionSurface: "muted-band",
1107
1180
  contentFrame: plainFrame,
@@ -1180,6 +1253,35 @@ var appearancePresets = [
1180
1253
  emphasis: "high"
1181
1254
  }
1182
1255
  }),
1256
+ defineBlockAppearancePreset({
1257
+ kind: "block-design",
1258
+ id: "testimonials-dark-proof",
1259
+ target: "testimonials",
1260
+ label: "Dark proof panel",
1261
+ blockKinds: ["block.testimonials"],
1262
+ design: {
1263
+ sectionSurface: "accent-band",
1264
+ contentFrame: panelFrame("raised"),
1265
+ itemSurface: "raised",
1266
+ transitionAfter: "soft-fade-short",
1267
+ emphasis: "high"
1268
+ }
1269
+ }),
1270
+ defineBlockAppearancePreset({
1271
+ kind: "block-design",
1272
+ id: "testimonials-accent-quote-proof",
1273
+ target: "testimonials",
1274
+ label: "Accent quote proof",
1275
+ blockKinds: ["block.testimonials"],
1276
+ design: {
1277
+ sectionSurface: "accent-band",
1278
+ contentFrame: plainFrame,
1279
+ itemSurface: "raised",
1280
+ transitionAfter: "soft-fade-short",
1281
+ emphasis: "high",
1282
+ testimonialCardTreatment: "accent-quote"
1283
+ }
1284
+ }),
1183
1285
  defineBlockAppearancePreset({
1184
1286
  kind: "block-design",
1185
1287
  id: "faq-contained-help",
@@ -1208,6 +1310,20 @@ var appearancePresets = [
1208
1310
  emphasis: "medium"
1209
1311
  }
1210
1312
  }),
1313
+ defineBlockAppearancePreset({
1314
+ kind: "block-design",
1315
+ id: "contact-form-dark-card",
1316
+ target: "contact-form",
1317
+ label: "Dark form card",
1318
+ blockKinds: ["block.form"],
1319
+ design: {
1320
+ sectionSurface: "accent-band",
1321
+ contentFrame: panelFrame("raised"),
1322
+ itemSurface: "none",
1323
+ transitionAfter: "soft-fade-short",
1324
+ emphasis: "high"
1325
+ }
1326
+ }),
1211
1327
  defineBlockAppearancePreset({
1212
1328
  kind: "block-design",
1213
1329
  id: "cta-accent-band",
@@ -1227,9 +1343,33 @@ var appearancePresets = [
1227
1343
  id: "header-clean-base",
1228
1344
  target: "site-header",
1229
1345
  label: "Clean base header",
1230
- chrome: {
1231
- surface: "base",
1232
- emphasis: "medium"
1346
+ header: {
1347
+ surface: {
1348
+ kind: "neutral-solid",
1349
+ token: "surface",
1350
+ textColorToken: "text"
1351
+ },
1352
+ navTreatment: "minimal",
1353
+ dropdownTreatment: "surface",
1354
+ ctaTreatment: "default",
1355
+ behavior: "default"
1356
+ }
1357
+ }),
1358
+ defineSiteChromeAppearancePreset({
1359
+ kind: "site-chrome",
1360
+ id: "site-header-brand-solid-inverted-cta",
1361
+ target: "site-header",
1362
+ label: "Brand solid header with inverted CTA",
1363
+ header: {
1364
+ surface: {
1365
+ kind: "brand-solid",
1366
+ token: "primary",
1367
+ textColorToken: "primaryForeground"
1368
+ },
1369
+ navTreatment: "uppercase-underline",
1370
+ dropdownTreatment: "matched-solid",
1371
+ ctaTreatment: "inverted",
1372
+ behavior: "sticky-shrink"
1233
1373
  }
1234
1374
  }),
1235
1375
  defineSiteChromeAppearancePreset({
@@ -1237,10 +1377,31 @@ var appearancePresets = [
1237
1377
  id: "footer-muted-grounding",
1238
1378
  target: "site-footer",
1239
1379
  label: "Muted grounding footer",
1240
- chrome: {
1380
+ footer: {
1381
+ kind: "grounding",
1241
1382
  surface: "muted-band",
1242
1383
  emphasis: "low"
1243
1384
  }
1385
+ }),
1386
+ defineSiteChromeAppearancePreset({
1387
+ kind: "site-chrome",
1388
+ id: "site-footer-brand-two-band",
1389
+ target: "site-footer",
1390
+ label: "Two-band brand footer",
1391
+ footer: {
1392
+ kind: "brand-two-band",
1393
+ surface: {
1394
+ token: "primary",
1395
+ shade: "800",
1396
+ textColorToken: "primaryForeground"
1397
+ },
1398
+ bottomBand: {
1399
+ token: "primary",
1400
+ shade: "900",
1401
+ textColorToken: "primaryForeground"
1402
+ },
1403
+ emphasis: "high"
1404
+ }
1244
1405
  })
1245
1406
  ];
1246
1407
 
@@ -1900,6 +2061,111 @@ var pebble = defineButtonPersonality({
1900
2061
  }
1901
2062
  });
1902
2063
 
2064
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
2065
+ var showtimePill = defineButtonPersonality({
2066
+ id: "showtime-pill",
2067
+ name: "Showtime Pill",
2068
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
2069
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
2070
+ buttonSystem: {
2071
+ global: {
2072
+ cornerStyle: "pill",
2073
+ shadow: "low",
2074
+ textTransform: "uppercase",
2075
+ fontWeight: 700,
2076
+ borderWidth: 2,
2077
+ hoverTransform: "lift",
2078
+ hoverColor: "darken",
2079
+ typography: "body",
2080
+ paddingPreset: "spacious",
2081
+ italic: false
2082
+ },
2083
+ sizes: {
2084
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
2085
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
2086
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
2087
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
2088
+ },
2089
+ variants: [
2090
+ {
2091
+ id: "primary",
2092
+ name: "Primary",
2093
+ enabled: true,
2094
+ priority: 1,
2095
+ background: { type: "solid", colorToken: "primary" },
2096
+ textColorToken: "background",
2097
+ borderRadius: "rounded-full",
2098
+ effects: {
2099
+ hover: [{ effectId: "pop" }]
2100
+ }
2101
+ },
2102
+ {
2103
+ id: "secondary",
2104
+ name: "Secondary",
2105
+ enabled: true,
2106
+ priority: 2,
2107
+ background: { type: "transparent" },
2108
+ textColorToken: "primary",
2109
+ borderRadius: "rounded-full",
2110
+ border: { widthClass: "border-2", colorToken: "primary" },
2111
+ effects: {
2112
+ hover: [{ effectId: "pop" }]
2113
+ }
2114
+ },
2115
+ {
2116
+ id: "hero",
2117
+ name: "Hero",
2118
+ enabled: true,
2119
+ priority: 1,
2120
+ background: { type: "solid", colorToken: "secondary" },
2121
+ textColorToken: "primary",
2122
+ borderRadius: "rounded-full",
2123
+ effects: {
2124
+ hover: [{ effectId: "pop" }]
2125
+ }
2126
+ },
2127
+ {
2128
+ id: "header",
2129
+ name: "Header",
2130
+ enabled: true,
2131
+ priority: 2,
2132
+ background: { type: "solid", colorToken: "background" },
2133
+ textColorToken: "primary",
2134
+ borderRadius: "rounded-full",
2135
+ border: { widthClass: "border-2", colorToken: "primary" },
2136
+ effects: {
2137
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
2138
+ }
2139
+ },
2140
+ {
2141
+ id: "outline",
2142
+ name: "Outline",
2143
+ enabled: true,
2144
+ priority: 3,
2145
+ background: { type: "transparent" },
2146
+ textColorToken: "primary",
2147
+ borderRadius: "rounded-full",
2148
+ border: { widthClass: "border-2", colorToken: "primary" },
2149
+ effects: {
2150
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
2151
+ }
2152
+ },
2153
+ {
2154
+ id: "ghost",
2155
+ name: "Ghost",
2156
+ enabled: true,
2157
+ priority: 3,
2158
+ background: { type: "transparent" },
2159
+ textColorToken: "primary",
2160
+ borderRadius: "rounded-full",
2161
+ effects: {
2162
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
2163
+ }
2164
+ }
2165
+ ]
2166
+ }
2167
+ });
2168
+
1903
2169
  // ../theme-core/src/buttons/personalities/soft-pill.ts
1904
2170
  var softPill = defineButtonPersonality({
1905
2171
  id: "soft-pill",
@@ -1980,7 +2246,8 @@ var buttonPersonalities = [
1980
2246
  editorialLink,
1981
2247
  pebble,
1982
2248
  inkStamp,
1983
- brushedWash
2249
+ brushedWash,
2250
+ showtimePill
1984
2251
  ];
1985
2252
  var personalitiesById = new Map(
1986
2253
  buttonPersonalities.map((p) => [p.id, p])
@@ -2511,14 +2778,7 @@ var proseLinkStyleSchema = z16.object({
2511
2778
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
2512
2779
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
2513
2780
  });
2514
- var semanticSpacingSchema = z16.enum([
2515
- "none",
2516
- "compact",
2517
- "cozy",
2518
- "medium",
2519
- "comfortable",
2520
- "spacious"
2521
- ]);
2781
+ var semanticSpacingSchema = z16.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
2522
2782
  var boxRoundedSchema = z16.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
2523
2783
  var boxBackgroundOverlaySchema = z16.object({
2524
2784
  type: z16.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -2535,6 +2795,7 @@ var boxBackgroundSchema = z16.object({
2535
2795
  scale: z16.string().nullable().optional(),
2536
2796
  position: z16.string().nullable().optional(),
2537
2797
  opacity: z16.number().min(0).max(1).nullable().optional(),
2798
+ motion: z16.enum(["static", "fixed-frame"]).nullable().optional(),
2538
2799
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
2539
2800
  textColor: z16.string().nullable().optional(),
2540
2801
  headingColor: z16.string().nullable().optional()
@@ -2542,7 +2803,7 @@ var boxBackgroundSchema = z16.object({
2542
2803
  var sectionStylesOverrideSchema = z16.object({
2543
2804
  background: boxBackgroundSchema.nullable().optional(),
2544
2805
  spacing: semanticSpacingSchema.nullable().optional(),
2545
- minHeight: z16.enum(["none", "hero", "immersive"]).nullable().optional()
2806
+ minHeight: z16.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
2546
2807
  });
2547
2808
  var containerStylesOverrideSchema = z16.object({
2548
2809
  background: boxBackgroundSchema.nullable().optional(),
@@ -2561,7 +2822,8 @@ var cardStylesOverrideSchema = z16.object({
2561
2822
  border: cardBorderOverrideSchema.nullable().optional(),
2562
2823
  spacing: semanticSpacingSchema.nullable().optional(),
2563
2824
  raised: z16.boolean().nullable().optional(),
2564
- rounded: boxRoundedSchema.nullable().optional()
2825
+ rounded: boxRoundedSchema.nullable().optional(),
2826
+ treatment: z16.enum(["accent-quote"]).nullable().optional()
2565
2827
  });
2566
2828
  var blockStyleOverridesSchema = z16.object({
2567
2829
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -2636,15 +2898,7 @@ var inputStyle = z16.object({
2636
2898
  });
2637
2899
  var headerVariant = z16.enum(["classic", "centered", "transparent", "floating", "editorial"]);
2638
2900
  var headerPositioning = z16.enum(["static", "sticky", "fixed"]);
2639
- var headerNavStyle = z16.enum([
2640
- "minimal",
2641
- "underline",
2642
- "underline-grow",
2643
- "capsule",
2644
- "scale",
2645
- "frosted",
2646
- "solid"
2647
- ]);
2901
+ var headerNavStyle = z16.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
2648
2902
  var navFontWeight = z16.enum(["regular", "medium", "semibold", "bold"]);
2649
2903
  var headerMaxWidth = z16.enum(["container", "full"]);
2650
2904
  var headerContainerSchema = z16.object({
@@ -2698,6 +2952,7 @@ var dropdownStyleSchema = z16.object({
2698
2952
  // optional = no override (browser default)
2699
2953
  }).optional();
2700
2954
  var headerCtaGapSchema = z16.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
2955
+ var headerCtaTreatmentSchema = z16.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
2701
2956
  var navContainerSchema = z16.object({
2702
2957
  type: z16.enum(["none", "pill", "glass"]).default("none"),
2703
2958
  tint: z16.string().nullable().optional(),
@@ -2716,7 +2971,10 @@ var headerSchema = z16.object({
2716
2971
  shrinkOnScroll: z16.boolean(),
2717
2972
  maxWidth: headerMaxWidth,
2718
2973
  logoOverride: mediaSchema.nullable().optional(),
2719
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
2974
+ background: headerBackgroundSchema.default({
2975
+ type: "color",
2976
+ color: "surface"
2977
+ }),
2720
2978
  textColor: z16.string().nullable().optional(),
2721
2979
  // Site title and general header text
2722
2980
  navStyle: headerNavStyle,
@@ -2736,6 +2994,13 @@ var headerSchema = z16.object({
2736
2994
  navLinkStyle: navLinkStyleSchema.optional(),
2737
2995
  // CTA button spacing (desktop left margin)
2738
2996
  ctaGap: headerCtaGapSchema.optional(),
2997
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
2998
+ // materializes this to ctaVariant against the active button personality.
2999
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
3000
+ // Optional theme-level CTA variant for header/nav CTA buttons.
3001
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
3002
+ // authored Theme V2 concepts.
3003
+ ctaVariant: z16.string().min(1).optional(),
2739
3004
  // Dropdown menu styling (nav dropdowns and mobile drawer)
2740
3005
  dropdownStyle: dropdownStyleSchema
2741
3006
  });
@@ -2792,7 +3057,10 @@ var footerSchema = z16.object({
2792
3057
  variant: footerVariant,
2793
3058
  maxWidth: footerMaxWidth,
2794
3059
  showLogoText: z16.boolean().optional(),
2795
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
3060
+ background: headerBackgroundSchema.default({
3061
+ type: "color",
3062
+ color: "surface"
3063
+ }),
2796
3064
  // Footer nav styling (independent from header)
2797
3065
  navStyle: headerNavStyle.default("minimal"),
2798
3066
  navColor: z16.string().nullable().optional(),
@@ -2814,17 +3082,7 @@ var layoutSchema = z16.object({
2814
3082
  desktop: containerPaddingPresetSchema.optional()
2815
3083
  }).optional()
2816
3084
  }).optional();
2817
- var heroTypographySizeSchema = z16.enum([
2818
- "sm",
2819
- "base",
2820
- "lg",
2821
- "xl",
2822
- "2xl",
2823
- "3xl",
2824
- "4xl",
2825
- "5xl",
2826
- "6xl"
2827
- ]);
3085
+ var heroTypographySizeSchema = z16.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
2828
3086
  var heroTypographyLineHeightSchema = z16.enum(["tight", "snug", "normal", "relaxed"]);
2829
3087
  var heroResponsiveTypographySchema = z16.object({
2830
3088
  headlineSize: heroTypographySizeSchema.optional(),
@@ -2849,6 +3107,13 @@ var heroTypographySchema = z16.object({
2849
3107
  var heroSchema = z16.object({
2850
3108
  typography: heroTypographySchema.optional()
2851
3109
  }).optional();
3110
+ var bodyTextIntroTypographySizeSchema = z16.enum(["default", "editorial"]);
3111
+ var bodyTextSchema = z16.object({
3112
+ intro: z16.object({
3113
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
3114
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
3115
+ }).optional()
3116
+ }).optional();
2852
3117
  var gradientsSchema = z16.object({
2853
3118
  button: z16.string().min(1).nullable().optional(),
2854
3119
  hero: z16.string().min(1).nullable().optional(),
@@ -2870,6 +3135,7 @@ var themeSchema = z16.object({
2870
3135
  gradients: gradientsSchema.optional(),
2871
3136
  layout: layoutSchema,
2872
3137
  hero: heroSchema,
3138
+ bodyText: bodyTextSchema,
2873
3139
  header: headerSchema,
2874
3140
  footer: footerSchema,
2875
3141
  buttons: buttonSystemSchema.optional(),
@@ -2893,10 +3159,7 @@ var themeSchema = z16.object({
2893
3159
  ).optional(),
2894
3160
  // Structured block-kind theme overrides (v1: typography prose-link style only)
2895
3161
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
2896
- blockOverrides: z16.record(
2897
- z16.string(),
2898
- blockThemeOverrideSchema
2899
- ).optional(),
3162
+ blockOverrides: z16.record(z16.string(), blockThemeOverrideSchema).optional(),
2900
3163
  // Structured custom CSS rules
2901
3164
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
2902
3165
  customCssRules: customCssRulesSchema,
@@ -3067,6 +3330,28 @@ var brandLedJewel = definePaletteVariant({
3067
3330
  { name: "border", hex: "#a8a29e" }
3068
3331
  ]
3069
3332
  });
3333
+ var brandLedBurgundyGold = definePaletteVariant({
3334
+ id: "brand-led-burgundy-gold",
3335
+ name: "Brand-led \u2014 Burgundy Gold",
3336
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
3337
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
3338
+ mode: "light",
3339
+ colors: [
3340
+ { name: "primary", hex: "#7c2e38" },
3341
+ { name: "secondary", hex: "#d4af37" },
3342
+ { name: "accent", hex: "#b8e19a" },
3343
+ { name: "success", hex: "#10b981" },
3344
+ { name: "warning", hex: "#f59e0b" },
3345
+ { name: "destructive", hex: "#ef4444" },
3346
+ { name: "background", hex: "#f1dfd0" },
3347
+ { name: "surface", hex: "#f5e6db" },
3348
+ { name: "surfaceAlt", hex: "#f8ece3" },
3349
+ { name: "muted", hex: "#c9b8a8" },
3350
+ { name: "text", hex: "#400000" },
3351
+ { name: "primaryForeground", hex: "#ffffff" },
3352
+ { name: "border", hex: "#c9b8a8" }
3353
+ ]
3354
+ });
3070
3355
 
3071
3356
  // ../theme-core/src/palette/variants/high-contrast.ts
3072
3357
  var highContrastInk = definePaletteVariant({
@@ -3278,6 +3563,7 @@ var paletteVariants = [
3278
3563
  brandLedCool,
3279
3564
  brandLedWarm,
3280
3565
  brandLedJewel,
3566
+ brandLedBurgundyGold,
3281
3567
  // Warm-neutral family
3282
3568
  warmNeutralClay,
3283
3569
  warmNeutralCream,
@@ -3353,7 +3639,8 @@ var curatedSiteStyleIdValues = [
3353
3639
  "site-style:quiet-luxury",
3354
3640
  "site-style:practical-services",
3355
3641
  "site-style:modern-wellness",
3356
- "site-style:bold-launch"
3642
+ "site-style:bold-launch",
3643
+ "site-style:south-west-twerk-school"
3357
3644
  ];
3358
3645
  var quietBudget = {
3359
3646
  accentDensity: "low",
@@ -3408,6 +3695,8 @@ function defineCuratedSiteStyle(input) {
3408
3695
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
3409
3696
  supportedTransitions: generatedDesignOptionCatalog.transitions
3410
3697
  },
3698
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
3699
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
3411
3700
  buttonPersonalityChoices: input.buttonPersonalityChoices,
3412
3701
  paletteVariantChoices: input.paletteVariantChoices
3413
3702
  };
@@ -3654,6 +3943,101 @@ var curatedSiteStyles = [
3654
3943
  paletteChoice("brand-led-jewel"),
3655
3944
  paletteChoice("brand-led-warm")
3656
3945
  ]
3946
+ }),
3947
+ defineCuratedSiteStyle({
3948
+ id: "site-style:south-west-twerk-school",
3949
+ name: "South West Twerk School",
3950
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
3951
+ 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.",
3952
+ selectionKeywords: [
3953
+ "dance",
3954
+ "classes",
3955
+ "workshop",
3956
+ "school",
3957
+ "movement",
3958
+ "performance",
3959
+ "community"
3960
+ ],
3961
+ tokenRecipes: {
3962
+ palette: "brand-led",
3963
+ contrast: "maximum",
3964
+ radius: "soft",
3965
+ shadow: "layered",
3966
+ typography: "clean-sans",
3967
+ spacing: "airy",
3968
+ motion: "expressive"
3969
+ },
3970
+ compositionBudget: expressiveBudget,
3971
+ themeOverrides: {
3972
+ typography: {
3973
+ body: {
3974
+ family: "Manrope, system-ui, sans-serif",
3975
+ size: "lg",
3976
+ weight: "regular",
3977
+ lineHeight: "relaxed",
3978
+ letterSpacing: "normal"
3979
+ },
3980
+ headings: {
3981
+ default: {
3982
+ family: '"TAN - PEARL", sans-serif',
3983
+ weight: "bold",
3984
+ lineHeight: "normal",
3985
+ letterSpacing: "tight",
3986
+ colorToken: "primary",
3987
+ italic: null,
3988
+ case: null
3989
+ },
3990
+ h1: {
3991
+ size: "xl",
3992
+ weight: "bold",
3993
+ lineHeight: "normal",
3994
+ letterSpacing: "tight",
3995
+ italic: null
3996
+ },
3997
+ h2: {
3998
+ size: "lg",
3999
+ weight: "bold",
4000
+ lineHeight: "normal",
4001
+ letterSpacing: "normal",
4002
+ italic: null
4003
+ },
4004
+ h3: {
4005
+ size: "md",
4006
+ weight: "bold",
4007
+ lineHeight: "normal",
4008
+ letterSpacing: "normal",
4009
+ italic: null
4010
+ }
4011
+ },
4012
+ scale: "balanced"
4013
+ },
4014
+ bodyText: {
4015
+ intro: {
4016
+ paragraphSize: "editorial",
4017
+ headingSize: "editorial"
4018
+ }
4019
+ }
4020
+ },
4021
+ recommendedAppearancePresetIds: [
4022
+ "site-header-brand-solid-inverted-cta",
4023
+ "site-footer-brand-two-band",
4024
+ "hero-brand-scrim-fixed-frame",
4025
+ "body-text-editorial-intro",
4026
+ "testimonials-accent-quote-proof",
4027
+ "contact-form-dark-card"
4028
+ ],
4029
+ buttonPersonalityChoices: [
4030
+ buttonChoice("showtime-pill"),
4031
+ buttonChoice("confident-chip"),
4032
+ buttonChoice("ink-stamp"),
4033
+ buttonChoice("brushed-wash")
4034
+ ],
4035
+ paletteVariantChoices: [
4036
+ paletteChoice("brand-led-burgundy-gold"),
4037
+ paletteChoice("brand-led-jewel"),
4038
+ paletteChoice("brand-led-warm"),
4039
+ paletteChoice("high-contrast-ink")
4040
+ ]
3657
4041
  })
3658
4042
  ];
3659
4043
  var curatedSiteStylesById = new Map(
@@ -3698,6 +4082,40 @@ var heroLegibilityStrategySchema = z18.enum([
3698
4082
  "scrim-gradient",
3699
4083
  "solid-panel"
3700
4084
  ]);
4085
+ var sectionHeightIntentSchema = z18.enum([
4086
+ "default",
4087
+ "banner",
4088
+ "hero",
4089
+ "immersive"
4090
+ ]);
4091
+ var imageSurfaceTreatmentIntensitySchema = z18.enum(["soft", "balanced", "strong"]);
4092
+ var imageSurfaceMotionSchema = z18.enum(["static", "fixed-frame"]);
4093
+ var imageSurfaceTreatmentSchema = z18.discriminatedUnion("kind", [
4094
+ z18.object({ kind: z18.literal("none") }).strict(),
4095
+ z18.object({
4096
+ kind: z18.literal("brand-scrim"),
4097
+ token: z18.enum(["primary", "secondary", "accent"]),
4098
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
4099
+ }).strict(),
4100
+ z18.object({
4101
+ kind: z18.literal("brand-wash"),
4102
+ token: z18.enum(["primary", "secondary", "accent"]),
4103
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
4104
+ }).strict(),
4105
+ z18.object({
4106
+ kind: z18.literal("neutral-scrim"),
4107
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
4108
+ }).strict(),
4109
+ z18.object({
4110
+ kind: z18.literal("neutral-wash"),
4111
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
4112
+ }).strict(),
4113
+ z18.object({
4114
+ kind: z18.literal("solid-panel"),
4115
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
4116
+ }).strict()
4117
+ ]);
4118
+ var testimonialCardTreatmentSchema = z18.enum(["default", "accent-quote"]);
3701
4119
  function uniqueNonEmpty(values) {
3702
4120
  const uniqueValues = [...new Set(values)];
3703
4121
  const firstValue = uniqueValues[0];
@@ -3736,7 +4154,11 @@ var blockDesignPlanSchema = z18.object({
3736
4154
  itemSurface: z18.enum(userDesignOptionCatalog.itemSurfaces),
3737
4155
  transitionAfter: z18.enum(userDesignOptionCatalog.transitions),
3738
4156
  emphasis: z18.enum(userDesignOptionCatalog.emphases),
3739
- heroLegibility: heroLegibilityStrategySchema.optional()
4157
+ sectionHeight: sectionHeightIntentSchema.optional(),
4158
+ heroLegibility: heroLegibilityStrategySchema.optional(),
4159
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
4160
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
4161
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
3740
4162
  }).strict();
3741
4163
  var styleAuthoritySchema = z18.discriminatedUnion("kind", [
3742
4164
  z18.object({
@@ -5845,23 +6267,6 @@ function styledCard(children, opts, ...mods) {
5845
6267
  );
5846
6268
  }
5847
6269
 
5848
- // ../blocks/src/system/node/fragments/typography.ts
5849
- function mergeClassName(base, extra) {
5850
- return [base, extra ?? ""].filter(Boolean).join(" ");
5851
- }
5852
- function captionText(opts, ...mods) {
5853
- const {
5854
- as: asProp,
5855
- className: classNameProp,
5856
- color,
5857
- ...rest
5858
- } = opts ?? {};
5859
- const as = asProp ?? "p";
5860
- const className = mergeClassName("rb-caption", classNameProp);
5861
- const style = textColorStyle(color ?? "mutedText");
5862
- return text({ ...rest, as, className, style }, ...mods);
5863
- }
5864
-
5865
6270
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
5866
6271
  function joinClasses(...parts) {
5867
6272
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -6760,18 +7165,17 @@ function buildAttributionNodes() {
6760
7165
  const name = text(
6761
7166
  {
6762
7167
  as: "strong",
6763
- className: "rb-block",
6764
- style: textColorStyle("text")
7168
+ className: "rb-block"
6765
7169
  },
6766
7170
  bind("testimonial.content.name", { fallback: "Anonymous" })
6767
7171
  );
6768
- const jobTitle = captionText(
6769
- null,
7172
+ const jobTitle = text(
7173
+ { as: "p", className: "rb-caption" },
6770
7174
  when("testimonial.content.jobTitle"),
6771
7175
  bind("testimonial.content.jobTitle")
6772
7176
  );
6773
- const company = captionText(
6774
- null,
7177
+ const company = text(
7178
+ { as: "p", className: "rb-caption" },
6775
7179
  when("testimonial.content.company"),
6776
7180
  bind("testimonial.content.company")
6777
7181
  );
@@ -6805,8 +7209,7 @@ function buildTestimonialCard(...mods) {
6805
7209
  );
6806
7210
  const body = richText(
6807
7211
  {
6808
- className: "rb-prose rb-max-w-none",
6809
- style: textColorStyle("text")
7212
+ className: "rb-prose rb-max-w-none"
6810
7213
  },
6811
7214
  bind("testimonial.content.body"),
6812
7215
  when("testimonial.content.body")
@@ -8436,6 +8839,7 @@ function heroContentCard(children, gap) {
8436
8839
  return styledContainer({
8437
8840
  bindFrom: "_contentCardStyles",
8438
8841
  constrainWidth: false,
8842
+ baseClassName: "rb-relative rb-isolate",
8439
8843
  rootType: "stack",
8440
8844
  rootProps: {
8441
8845
  gap
@@ -8466,6 +8870,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
8466
8870
  function heroContainerStack(children, gap) {
8467
8871
  return styledContainer({
8468
8872
  rootType: "stack",
8873
+ baseClassName: "rb-relative rb-isolate",
8469
8874
  rootProps: {
8470
8875
  gap: "none",
8471
8876
  justify: {
@@ -9581,7 +9986,7 @@ var createNavRow = (className, align = "end") => navRow({
9581
9986
  var headerCta = ctaButton({
9582
9987
  basePath: "menu.ctaItem",
9583
9988
  whenPath: "menu.ctaItem.label",
9584
- variantPath: "menu.ctaItem.variant",
9989
+ variantPath: "$root.theme.header.ctaVariant",
9585
9990
  linkPath: "menu.ctaItem.link",
9586
9991
  sizeFallback: "sm",
9587
9992
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -9589,7 +9994,7 @@ var headerCta = ctaButton({
9589
9994
  var mobileCta = ctaButton({
9590
9995
  basePath: "menu.ctaItem",
9591
9996
  whenPath: "menu.ctaItem.label",
9592
- variantPath: "menu.ctaItem.variant",
9997
+ variantPath: "$root.theme.header.ctaVariant",
9593
9998
  linkPath: "menu.ctaItem.link",
9594
9999
  sizeFallback: "md",
9595
10000
  className: "nav-mobile-cta rb-w-full"
@@ -10050,7 +10455,13 @@ var splitFooterLayout = stack(
10050
10455
  [
10051
10456
  inline(
10052
10457
  {
10053
- 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"
10458
+ className: {
10459
+ $bind: {
10460
+ from: "$root.theme.footer.logo",
10461
+ transforms: [{ id: "layout.footerSplitMainClass" }],
10462
+ 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"
10463
+ }
10464
+ }
10054
10465
  },
10055
10466
  [
10056
10467
  stack(
@@ -12138,7 +12549,8 @@ var courseEntrySubrouteContextSchema = z37.union([
12138
12549
  run: z37.object({
12139
12550
  courseId: z37.string(),
12140
12551
  seriesId: z37.string(),
12141
- runSlug: z37.string()
12552
+ runSlug: z37.string(),
12553
+ runName: z37.string().nullable()
12142
12554
  })
12143
12555
  }),
12144
12556
  z37.object({
@@ -18009,6 +18421,34 @@ function panelCapable() {
18009
18421
  itemSurfaces: "unsupported"
18010
18422
  });
18011
18423
  }
18424
+ var heroSectionHeights = [
18425
+ "default",
18426
+ "banner",
18427
+ "hero",
18428
+ "immersive"
18429
+ ];
18430
+ var heroImageSurfaceTreatments = [
18431
+ "none",
18432
+ "brand-scrim",
18433
+ "brand-wash",
18434
+ "neutral-scrim",
18435
+ "neutral-wash",
18436
+ "solid-panel"
18437
+ ];
18438
+ var heroImageSurfaceMotions = [
18439
+ "static",
18440
+ "fixed-frame"
18441
+ ];
18442
+ function heroCapable() {
18443
+ return declareBlockDesignCapability({
18444
+ sectionSurfaces: "supported",
18445
+ contentFrames: ["plain", "panel"],
18446
+ itemSurfaces: "unsupported",
18447
+ sectionHeights: heroSectionHeights,
18448
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
18449
+ imageSurfaceMotions: heroImageSurfaceMotions
18450
+ });
18451
+ }
18012
18452
  function plainItemsCapable() {
18013
18453
  return declareBlockDesignCapability({
18014
18454
  sectionSurfaces: "supported",
@@ -18125,7 +18565,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
18125
18565
  };
18126
18566
  }
18127
18567
  var systemBlockDefinitionsRaw = [
18128
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
18568
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
18129
18569
  flow: heroFlow,
18130
18570
  layoutProfiles: [
18131
18571
  layoutProfile({
@@ -18229,7 +18669,12 @@ var systemBlockDefinitionsRaw = [
18229
18669
  flow: siteChromeFlow,
18230
18670
  layoutProfiles: []
18231
18671
  })),
18232
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
18672
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
18673
+ sectionSurfaces: "supported",
18674
+ contentFrames: ["plain", "panel"],
18675
+ itemSurfaces: "supported",
18676
+ testimonialCardTreatments: ["default", "accent-quote"]
18677
+ }), defineBlockDesignMetadata({
18233
18678
  flow: proofFlow,
18234
18679
  layoutProfiles: [
18235
18680
  layoutProfile({