@riverbankcms/sdk 0.60.11 → 0.60.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +10 -7
  2. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  3. package/dist/_dts/api/src/bookingConfig.d.ts +31 -1
  4. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +38 -1
  5. package/dist/_dts/api/src/bookingOperations.d.ts +3 -0
  6. package/dist/_dts/api/src/bookingRecords.d.ts +45 -0
  7. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  8. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +1 -5
  9. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  10. package/dist/_dts/api/src/communications.d.ts +1 -1
  11. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  12. package/dist/_dts/api/src/domains.d.ts +14 -13
  13. package/dist/_dts/api/src/endpoints.d.ts +121 -9
  14. package/dist/_dts/api/src/index.d.ts +3 -2
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  16. package/dist/_dts/api/src/seoEndpoints.d.ts +2 -0
  17. package/dist/_dts/api/src/siteAssets.d.ts +0 -10
  18. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  19. package/dist/_dts/api/src/types.d.ts +1 -1
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  21. package/dist/_dts/blocks/src/index.d.ts +1 -0
  22. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  23. package/dist/_dts/blocks/src/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/subroutes/fold.d.ts +40 -0
  25. package/dist/_dts/blocks/src/subroutes/formatDate.d.ts +12 -0
  26. package/dist/_dts/blocks/src/subroutes/index.d.ts +3 -0
  27. package/dist/_dts/blocks/src/subroutes/kinds.d.ts +32 -0
  28. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +3 -1
  29. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +2 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/spacing.d.ts +2 -1
  33. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +5 -0
  34. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +5 -1
  35. package/dist/_dts/core/src/booking-refunds.d.ts +8 -0
  36. package/dist/_dts/core/src/participant-identity.d.ts +1 -1
  37. package/dist/_dts/core/src/participants.d.ts +19 -7
  38. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +284 -96
  39. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  40. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -3
  41. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -3
  42. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +3 -3
  43. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +3 -3
  44. package/dist/_dts/preview-next/src/client/preview/SubrouteNoticePanel.d.ts +13 -0
  45. package/dist/_dts/preview-next/src/client/preview/subrouteNotice.d.ts +26 -0
  46. package/dist/_dts/sdk/src/contracts/page.d.ts +1 -0
  47. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -1
  48. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -0
  49. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +4 -5
  50. package/dist/_dts/sdk/src/version.d.ts +1 -1
  51. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  52. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +17 -0
  53. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  54. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  55. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +66 -30
  56. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +16 -0
  57. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  58. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  59. package/dist/_dts/theme-core/src/schema.d.ts +174 -6
  60. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +328 -15
  61. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +54 -2
  62. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +124 -0
  63. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  64. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  65. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +21 -0
  66. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +2 -1
  67. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/site-styles/types.d.ts +135 -2
  69. package/dist/_dts/ui/src/badge.d.ts +1 -1
  70. package/dist/_dts/ui/src/button.d.ts +1 -1
  71. package/dist/cli/index.mjs +801 -115
  72. package/dist/client/bookings.mjs +115 -1
  73. package/dist/client/client.mjs +905 -166
  74. package/dist/client/hooks.mjs +794 -111
  75. package/dist/client/rendering/client.mjs +179 -39
  76. package/dist/client/rendering/islands.mjs +179 -38
  77. package/dist/client/rendering.mjs +904 -165
  78. package/dist/preview-next/before-render.mjs +160 -16
  79. package/dist/preview-next/client/runtime.mjs +1674 -260
  80. package/dist/preview-next/middleware.mjs +160 -16
  81. package/dist/server/components.mjs +895 -165
  82. package/dist/server/config-validation.mjs +794 -111
  83. package/dist/server/config.mjs +794 -111
  84. package/dist/server/data.mjs +794 -111
  85. package/dist/server/index.mjs +163 -17
  86. package/dist/server/next.mjs +898 -167
  87. package/dist/server/page-converter.mjs +589 -82
  88. package/dist/server/prebuild.mjs +1 -1
  89. package/dist/server/rendering/server.mjs +895 -165
  90. package/dist/server/rendering.mjs +895 -165
  91. package/dist/server/routing.mjs +828 -117
  92. package/dist/server/server.mjs +795 -112
  93. package/dist/server/theme-bridge.mjs +216 -39
  94. package/dist/server/theme.mjs +139 -37
  95. package/dist/styles/index.css +44 -2
  96. package/package.json +1 -1
@@ -2028,12 +2028,29 @@ function defineFrameCapability(capability) {
2028
2028
  function defineBlockDesignCapability(capability) {
2029
2029
  return {
2030
2030
  ...capability,
2031
- kind: "designed"
2031
+ kind: "designed",
2032
+ sectionHeights: capability.sectionHeights ?? ["default"],
2033
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
2034
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
2035
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
2032
2036
  };
2033
2037
  }
2034
2038
 
2035
2039
  // ../theme-core/src/site-styles/appearancePresets.ts
2040
+ function assertValidOptionGroups(preset2) {
2041
+ preset2.optionGroups?.forEach((group) => {
2042
+ const selectedOption = group.options.find(
2043
+ (option) => option.id === group.selectedOptionId
2044
+ );
2045
+ if (!selectedOption) {
2046
+ throw new Error(
2047
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2048
+ );
2049
+ }
2050
+ });
2051
+ }
2036
2052
  function defineBlockAppearancePreset(preset2) {
2053
+ assertValidOptionGroups(preset2);
2037
2054
  return preset2;
2038
2055
  }
2039
2056
  function defineSiteChromeAppearancePreset(preset2) {
@@ -2046,13 +2063,122 @@ var appearancePresets = [
2046
2063
  target: "hero",
2047
2064
  label: "Immersive image hero",
2048
2065
  blockKinds: ["block.hero"],
2066
+ constraints: {
2067
+ layoutFamilies: ["centered", "compact"]
2068
+ },
2069
+ design: {
2070
+ sectionSurface: "hero-image",
2071
+ contentFrame: plainFrame,
2072
+ itemSurface: "none",
2073
+ transitionAfter: "soft-fade-short",
2074
+ emphasis: "high",
2075
+ sectionHeight: "hero",
2076
+ imageSurfaceTreatment: { kind: "neutral-wash" }
2077
+ }
2078
+ }),
2079
+ defineBlockAppearancePreset({
2080
+ kind: "block-design",
2081
+ id: "hero-brand-scrim",
2082
+ target: "hero",
2083
+ label: "Brand scrim image hero",
2084
+ blockKinds: ["block.hero"],
2085
+ constraints: {
2086
+ layoutFamilies: ["centered", "compact"]
2087
+ },
2088
+ optionGroups: [
2089
+ {
2090
+ id: "image-surface-treatment",
2091
+ label: "Treatment",
2092
+ selectedOptionId: "brand-scrim-primary",
2093
+ options: [
2094
+ {
2095
+ id: "brand-scrim-primary",
2096
+ label: "Brand scrim",
2097
+ designPatch: {
2098
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2099
+ }
2100
+ },
2101
+ {
2102
+ id: "neutral-scrim",
2103
+ label: "Neutral scrim",
2104
+ designPatch: {
2105
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
2106
+ }
2107
+ }
2108
+ ]
2109
+ }
2110
+ ],
2111
+ layoutPatches: [
2112
+ {
2113
+ constraints: {
2114
+ layoutVariantKeys: ["micro"]
2115
+ },
2116
+ designPatch: {
2117
+ sectionHeight: "banner"
2118
+ }
2119
+ }
2120
+ ],
2121
+ design: {
2122
+ sectionSurface: "hero-image",
2123
+ contentFrame: plainFrame,
2124
+ itemSurface: "none",
2125
+ transitionAfter: "soft-fade-short",
2126
+ emphasis: "high",
2127
+ sectionHeight: "immersive",
2128
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2129
+ }
2130
+ }),
2131
+ defineBlockAppearancePreset({
2132
+ kind: "block-design",
2133
+ id: "hero-brand-scrim-fixed-frame",
2134
+ target: "hero",
2135
+ label: "Fixed-frame brand scrim hero",
2136
+ blockKinds: ["block.hero"],
2137
+ constraints: {
2138
+ layoutFamilies: ["centered", "compact"]
2139
+ },
2140
+ optionGroups: [
2141
+ {
2142
+ id: "image-surface-treatment",
2143
+ label: "Treatment",
2144
+ selectedOptionId: "brand-scrim-primary",
2145
+ options: [
2146
+ {
2147
+ id: "brand-scrim-primary",
2148
+ label: "Brand scrim",
2149
+ designPatch: {
2150
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2151
+ }
2152
+ },
2153
+ {
2154
+ id: "neutral-scrim",
2155
+ label: "Neutral scrim",
2156
+ designPatch: {
2157
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
2158
+ }
2159
+ }
2160
+ ]
2161
+ }
2162
+ ],
2163
+ layoutPatches: [
2164
+ {
2165
+ constraints: {
2166
+ layoutVariantKeys: ["micro"]
2167
+ },
2168
+ designPatch: {
2169
+ sectionHeight: "banner"
2170
+ }
2171
+ }
2172
+ ],
2049
2173
  design: {
2050
2174
  sectionSurface: "hero-image",
2051
2175
  contentFrame: plainFrame,
2052
2176
  itemSurface: "none",
2053
2177
  transitionAfter: "soft-fade-short",
2054
2178
  emphasis: "high",
2055
- heroLegibility: "scrim-gradient"
2179
+ sectionHeight: "immersive",
2180
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
2181
+ imageSurfaceMotion: "fixed-frame"
2056
2182
  }
2057
2183
  }),
2058
2184
  defineBlockAppearancePreset({
@@ -2069,17 +2195,26 @@ var appearancePresets = [
2069
2195
  emphasis: "high"
2070
2196
  }
2071
2197
  }),
2198
+ defineBlockAppearancePreset({
2199
+ kind: "block-design",
2200
+ id: "body-text-editorial-intro",
2201
+ target: "body-text",
2202
+ label: "Editorial intro copy",
2203
+ blockKinds: ["block.body-text"],
2204
+ design: {
2205
+ sectionSurface: "base",
2206
+ contentFrame: plainFrame,
2207
+ itemSurface: "none",
2208
+ transitionAfter: "soft-fade-short",
2209
+ emphasis: "high"
2210
+ }
2211
+ }),
2072
2212
  defineBlockAppearancePreset({
2073
2213
  kind: "block-design",
2074
2214
  id: "offerings-calm-list",
2075
2215
  target: "offerings",
2076
2216
  label: "Calm offerings list",
2077
- blockKinds: [
2078
- "block.event-listing",
2079
- "block.event-calendar",
2080
- "block.event-spotlight",
2081
- "block.product-list"
2082
- ],
2217
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
2083
2218
  design: {
2084
2219
  sectionSurface: "muted-band",
2085
2220
  contentFrame: plainFrame,
@@ -2158,6 +2293,35 @@ var appearancePresets = [
2158
2293
  emphasis: "high"
2159
2294
  }
2160
2295
  }),
2296
+ defineBlockAppearancePreset({
2297
+ kind: "block-design",
2298
+ id: "testimonials-dark-proof",
2299
+ target: "testimonials",
2300
+ label: "Dark proof panel",
2301
+ blockKinds: ["block.testimonials"],
2302
+ design: {
2303
+ sectionSurface: "accent-band",
2304
+ contentFrame: panelFrame("raised"),
2305
+ itemSurface: "raised",
2306
+ transitionAfter: "soft-fade-short",
2307
+ emphasis: "high"
2308
+ }
2309
+ }),
2310
+ defineBlockAppearancePreset({
2311
+ kind: "block-design",
2312
+ id: "testimonials-accent-quote-proof",
2313
+ target: "testimonials",
2314
+ label: "Accent quote proof",
2315
+ blockKinds: ["block.testimonials"],
2316
+ design: {
2317
+ sectionSurface: "accent-band",
2318
+ contentFrame: plainFrame,
2319
+ itemSurface: "raised",
2320
+ transitionAfter: "soft-fade-short",
2321
+ emphasis: "high",
2322
+ testimonialCardTreatment: "accent-quote"
2323
+ }
2324
+ }),
2161
2325
  defineBlockAppearancePreset({
2162
2326
  kind: "block-design",
2163
2327
  id: "faq-contained-help",
@@ -2186,6 +2350,20 @@ var appearancePresets = [
2186
2350
  emphasis: "medium"
2187
2351
  }
2188
2352
  }),
2353
+ defineBlockAppearancePreset({
2354
+ kind: "block-design",
2355
+ id: "contact-form-dark-card",
2356
+ target: "contact-form",
2357
+ label: "Dark form card",
2358
+ blockKinds: ["block.form"],
2359
+ design: {
2360
+ sectionSurface: "accent-band",
2361
+ contentFrame: panelFrame("raised"),
2362
+ itemSurface: "none",
2363
+ transitionAfter: "soft-fade-short",
2364
+ emphasis: "high"
2365
+ }
2366
+ }),
2189
2367
  defineBlockAppearancePreset({
2190
2368
  kind: "block-design",
2191
2369
  id: "cta-accent-band",
@@ -2205,9 +2383,33 @@ var appearancePresets = [
2205
2383
  id: "header-clean-base",
2206
2384
  target: "site-header",
2207
2385
  label: "Clean base header",
2208
- chrome: {
2209
- surface: "base",
2210
- emphasis: "medium"
2386
+ header: {
2387
+ surface: {
2388
+ kind: "neutral-solid",
2389
+ token: "surface",
2390
+ textColorToken: "text"
2391
+ },
2392
+ navTreatment: "minimal",
2393
+ dropdownTreatment: "surface",
2394
+ ctaTreatment: "default",
2395
+ behavior: "default"
2396
+ }
2397
+ }),
2398
+ defineSiteChromeAppearancePreset({
2399
+ kind: "site-chrome",
2400
+ id: "site-header-brand-solid-inverted-cta",
2401
+ target: "site-header",
2402
+ label: "Brand solid header with inverted CTA",
2403
+ header: {
2404
+ surface: {
2405
+ kind: "brand-solid",
2406
+ token: "primary",
2407
+ textColorToken: "primaryForeground"
2408
+ },
2409
+ navTreatment: "uppercase-underline",
2410
+ dropdownTreatment: "matched-solid",
2411
+ ctaTreatment: "inverted",
2412
+ behavior: "sticky-shrink"
2211
2413
  }
2212
2414
  }),
2213
2415
  defineSiteChromeAppearancePreset({
@@ -2215,10 +2417,31 @@ var appearancePresets = [
2215
2417
  id: "footer-muted-grounding",
2216
2418
  target: "site-footer",
2217
2419
  label: "Muted grounding footer",
2218
- chrome: {
2420
+ footer: {
2421
+ kind: "grounding",
2219
2422
  surface: "muted-band",
2220
2423
  emphasis: "low"
2221
2424
  }
2425
+ }),
2426
+ defineSiteChromeAppearancePreset({
2427
+ kind: "site-chrome",
2428
+ id: "site-footer-brand-two-band",
2429
+ target: "site-footer",
2430
+ label: "Two-band brand footer",
2431
+ footer: {
2432
+ kind: "brand-two-band",
2433
+ surface: {
2434
+ token: "primary",
2435
+ shade: "800",
2436
+ textColorToken: "primaryForeground"
2437
+ },
2438
+ bottomBand: {
2439
+ token: "primary",
2440
+ shade: "900",
2441
+ textColorToken: "primaryForeground"
2442
+ },
2443
+ emphasis: "high"
2444
+ }
2222
2445
  })
2223
2446
  ];
2224
2447
 
@@ -2888,6 +3111,111 @@ var pebble = defineButtonPersonality({
2888
3111
  }
2889
3112
  });
2890
3113
 
3114
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
3115
+ var showtimePill = defineButtonPersonality({
3116
+ id: "showtime-pill",
3117
+ name: "Showtime Pill",
3118
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
3119
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
3120
+ buttonSystem: {
3121
+ global: {
3122
+ cornerStyle: "pill",
3123
+ shadow: "low",
3124
+ textTransform: "uppercase",
3125
+ fontWeight: 700,
3126
+ borderWidth: 2,
3127
+ hoverTransform: "lift",
3128
+ hoverColor: "darken",
3129
+ typography: "body",
3130
+ paddingPreset: "spacious",
3131
+ italic: false
3132
+ },
3133
+ sizes: {
3134
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
3135
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
3136
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
3137
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
3138
+ },
3139
+ variants: [
3140
+ {
3141
+ id: "primary",
3142
+ name: "Primary",
3143
+ enabled: true,
3144
+ priority: 1,
3145
+ background: { type: "solid", colorToken: "primary" },
3146
+ textColorToken: "background",
3147
+ borderRadius: "rounded-full",
3148
+ effects: {
3149
+ hover: [{ effectId: "pop" }]
3150
+ }
3151
+ },
3152
+ {
3153
+ id: "secondary",
3154
+ name: "Secondary",
3155
+ enabled: true,
3156
+ priority: 2,
3157
+ background: { type: "transparent" },
3158
+ textColorToken: "primary",
3159
+ borderRadius: "rounded-full",
3160
+ border: { widthClass: "border-2", colorToken: "primary" },
3161
+ effects: {
3162
+ hover: [{ effectId: "pop" }]
3163
+ }
3164
+ },
3165
+ {
3166
+ id: "hero",
3167
+ name: "Hero",
3168
+ enabled: true,
3169
+ priority: 1,
3170
+ background: { type: "solid", colorToken: "secondary" },
3171
+ textColorToken: "primary",
3172
+ borderRadius: "rounded-full",
3173
+ effects: {
3174
+ hover: [{ effectId: "pop" }]
3175
+ }
3176
+ },
3177
+ {
3178
+ id: "header",
3179
+ name: "Header",
3180
+ enabled: true,
3181
+ priority: 2,
3182
+ background: { type: "solid", colorToken: "background" },
3183
+ textColorToken: "primary",
3184
+ borderRadius: "rounded-full",
3185
+ border: { widthClass: "border-2", colorToken: "primary" },
3186
+ effects: {
3187
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3188
+ }
3189
+ },
3190
+ {
3191
+ id: "outline",
3192
+ name: "Outline",
3193
+ enabled: true,
3194
+ priority: 3,
3195
+ background: { type: "transparent" },
3196
+ textColorToken: "primary",
3197
+ borderRadius: "rounded-full",
3198
+ border: { widthClass: "border-2", colorToken: "primary" },
3199
+ effects: {
3200
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
3201
+ }
3202
+ },
3203
+ {
3204
+ id: "ghost",
3205
+ name: "Ghost",
3206
+ enabled: true,
3207
+ priority: 3,
3208
+ background: { type: "transparent" },
3209
+ textColorToken: "primary",
3210
+ borderRadius: "rounded-full",
3211
+ effects: {
3212
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3213
+ }
3214
+ }
3215
+ ]
3216
+ }
3217
+ });
3218
+
2891
3219
  // ../theme-core/src/buttons/personalities/soft-pill.ts
2892
3220
  var softPill = defineButtonPersonality({
2893
3221
  id: "soft-pill",
@@ -2968,7 +3296,8 @@ var buttonPersonalities = [
2968
3296
  editorialLink,
2969
3297
  pebble,
2970
3298
  inkStamp,
2971
- brushedWash
3299
+ brushedWash,
3300
+ showtimePill
2972
3301
  ];
2973
3302
  var personalitiesById = new Map(
2974
3303
  buttonPersonalities.map((p) => [p.id, p])
@@ -5557,14 +5886,7 @@ var proseLinkStyleSchema = z19.object({
5557
5886
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
5558
5887
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
5559
5888
  });
5560
- var semanticSpacingSchema = z19.enum([
5561
- "none",
5562
- "compact",
5563
- "cozy",
5564
- "medium",
5565
- "comfortable",
5566
- "spacious"
5567
- ]);
5889
+ var semanticSpacingSchema = z19.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
5568
5890
  var boxRoundedSchema = z19.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
5569
5891
  var boxBackgroundOverlaySchema = z19.object({
5570
5892
  type: z19.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -5581,6 +5903,7 @@ var boxBackgroundSchema = z19.object({
5581
5903
  scale: z19.string().nullable().optional(),
5582
5904
  position: z19.string().nullable().optional(),
5583
5905
  opacity: z19.number().min(0).max(1).nullable().optional(),
5906
+ motion: z19.enum(["static", "fixed-frame"]).nullable().optional(),
5584
5907
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
5585
5908
  textColor: z19.string().nullable().optional(),
5586
5909
  headingColor: z19.string().nullable().optional()
@@ -5588,7 +5911,7 @@ var boxBackgroundSchema = z19.object({
5588
5911
  var sectionStylesOverrideSchema = z19.object({
5589
5912
  background: boxBackgroundSchema.nullable().optional(),
5590
5913
  spacing: semanticSpacingSchema.nullable().optional(),
5591
- minHeight: z19.enum(["none", "hero", "immersive"]).nullable().optional()
5914
+ minHeight: z19.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
5592
5915
  });
5593
5916
  var containerStylesOverrideSchema = z19.object({
5594
5917
  background: boxBackgroundSchema.nullable().optional(),
@@ -5607,7 +5930,8 @@ var cardStylesOverrideSchema = z19.object({
5607
5930
  border: cardBorderOverrideSchema.nullable().optional(),
5608
5931
  spacing: semanticSpacingSchema.nullable().optional(),
5609
5932
  raised: z19.boolean().nullable().optional(),
5610
- rounded: boxRoundedSchema.nullable().optional()
5933
+ rounded: boxRoundedSchema.nullable().optional(),
5934
+ treatment: z19.enum(["accent-quote"]).nullable().optional()
5611
5935
  });
5612
5936
  var blockStyleOverridesSchema = z19.object({
5613
5937
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -5682,15 +6006,7 @@ var inputStyle = z19.object({
5682
6006
  });
5683
6007
  var headerVariant = z19.enum(["classic", "centered", "transparent", "floating", "editorial"]);
5684
6008
  var headerPositioning = z19.enum(["static", "sticky", "fixed"]);
5685
- var headerNavStyle = z19.enum([
5686
- "minimal",
5687
- "underline",
5688
- "underline-grow",
5689
- "capsule",
5690
- "scale",
5691
- "frosted",
5692
- "solid"
5693
- ]);
6009
+ var headerNavStyle = z19.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
5694
6010
  var navFontWeight = z19.enum(["regular", "medium", "semibold", "bold"]);
5695
6011
  var headerMaxWidth = z19.enum(["container", "full"]);
5696
6012
  var headerContainerSchema = z19.object({
@@ -5744,6 +6060,7 @@ var dropdownStyleSchema = z19.object({
5744
6060
  // optional = no override (browser default)
5745
6061
  }).optional();
5746
6062
  var headerCtaGapSchema = z19.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
6063
+ var headerCtaTreatmentSchema = z19.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
5747
6064
  var navContainerSchema = z19.object({
5748
6065
  type: z19.enum(["none", "pill", "glass"]).default("none"),
5749
6066
  tint: z19.string().nullable().optional(),
@@ -5762,7 +6079,10 @@ var headerSchema = z19.object({
5762
6079
  shrinkOnScroll: z19.boolean(),
5763
6080
  maxWidth: headerMaxWidth,
5764
6081
  logoOverride: mediaSchema.nullable().optional(),
5765
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6082
+ background: headerBackgroundSchema.default({
6083
+ type: "color",
6084
+ color: "surface"
6085
+ }),
5766
6086
  textColor: z19.string().nullable().optional(),
5767
6087
  // Site title and general header text
5768
6088
  navStyle: headerNavStyle,
@@ -5782,6 +6102,13 @@ var headerSchema = z19.object({
5782
6102
  navLinkStyle: navLinkStyleSchema.optional(),
5783
6103
  // CTA button spacing (desktop left margin)
5784
6104
  ctaGap: headerCtaGapSchema.optional(),
6105
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
6106
+ // materializes this to ctaVariant against the active button personality.
6107
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
6108
+ // Optional theme-level CTA variant for header/nav CTA buttons.
6109
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
6110
+ // authored Theme V2 concepts.
6111
+ ctaVariant: z19.string().min(1).optional(),
5785
6112
  // Dropdown menu styling (nav dropdowns and mobile drawer)
5786
6113
  dropdownStyle: dropdownStyleSchema
5787
6114
  });
@@ -5838,7 +6165,10 @@ var footerSchema = z19.object({
5838
6165
  variant: footerVariant,
5839
6166
  maxWidth: footerMaxWidth,
5840
6167
  showLogoText: z19.boolean().optional(),
5841
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6168
+ background: headerBackgroundSchema.default({
6169
+ type: "color",
6170
+ color: "surface"
6171
+ }),
5842
6172
  // Footer nav styling (independent from header)
5843
6173
  navStyle: headerNavStyle.default("minimal"),
5844
6174
  navColor: z19.string().nullable().optional(),
@@ -5860,17 +6190,7 @@ var layoutSchema = z19.object({
5860
6190
  desktop: containerPaddingPresetSchema.optional()
5861
6191
  }).optional()
5862
6192
  }).optional();
5863
- var heroTypographySizeSchema = z19.enum([
5864
- "sm",
5865
- "base",
5866
- "lg",
5867
- "xl",
5868
- "2xl",
5869
- "3xl",
5870
- "4xl",
5871
- "5xl",
5872
- "6xl"
5873
- ]);
6193
+ var heroTypographySizeSchema = z19.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
5874
6194
  var heroTypographyLineHeightSchema = z19.enum(["tight", "snug", "normal", "relaxed"]);
5875
6195
  var heroResponsiveTypographySchema = z19.object({
5876
6196
  headlineSize: heroTypographySizeSchema.optional(),
@@ -5895,6 +6215,13 @@ var heroTypographySchema = z19.object({
5895
6215
  var heroSchema = z19.object({
5896
6216
  typography: heroTypographySchema.optional()
5897
6217
  }).optional();
6218
+ var bodyTextIntroTypographySizeSchema = z19.enum(["default", "editorial"]);
6219
+ var bodyTextSchema = z19.object({
6220
+ intro: z19.object({
6221
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
6222
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
6223
+ }).optional()
6224
+ }).optional();
5898
6225
  var gradientsSchema = z19.object({
5899
6226
  button: z19.string().min(1).nullable().optional(),
5900
6227
  hero: z19.string().min(1).nullable().optional(),
@@ -5916,6 +6243,7 @@ var themeSchema = z19.object({
5916
6243
  gradients: gradientsSchema.optional(),
5917
6244
  layout: layoutSchema,
5918
6245
  hero: heroSchema,
6246
+ bodyText: bodyTextSchema,
5919
6247
  header: headerSchema,
5920
6248
  footer: footerSchema,
5921
6249
  buttons: buttonSystemSchema.optional(),
@@ -5939,10 +6267,7 @@ var themeSchema = z19.object({
5939
6267
  ).optional(),
5940
6268
  // Structured block-kind theme overrides (v1: typography prose-link style only)
5941
6269
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
5942
- blockOverrides: z19.record(
5943
- z19.string(),
5944
- blockThemeOverrideSchema
5945
- ).optional(),
6270
+ blockOverrides: z19.record(z19.string(), blockThemeOverrideSchema).optional(),
5946
6271
  // Structured custom CSS rules
5947
6272
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
5948
6273
  customCssRules: customCssRulesSchema,
@@ -6113,6 +6438,28 @@ var brandLedJewel = definePaletteVariant({
6113
6438
  { name: "border", hex: "#a8a29e" }
6114
6439
  ]
6115
6440
  });
6441
+ var brandLedBurgundyGold = definePaletteVariant({
6442
+ id: "brand-led-burgundy-gold",
6443
+ name: "Brand-led \u2014 Burgundy Gold",
6444
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
6445
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
6446
+ mode: "light",
6447
+ colors: [
6448
+ { name: "primary", hex: "#7c2e38" },
6449
+ { name: "secondary", hex: "#d4af37" },
6450
+ { name: "accent", hex: "#b8e19a" },
6451
+ { name: "success", hex: "#10b981" },
6452
+ { name: "warning", hex: "#f59e0b" },
6453
+ { name: "destructive", hex: "#ef4444" },
6454
+ { name: "background", hex: "#f1dfd0" },
6455
+ { name: "surface", hex: "#f5e6db" },
6456
+ { name: "surfaceAlt", hex: "#f8ece3" },
6457
+ { name: "muted", hex: "#c9b8a8" },
6458
+ { name: "text", hex: "#400000" },
6459
+ { name: "primaryForeground", hex: "#ffffff" },
6460
+ { name: "border", hex: "#c9b8a8" }
6461
+ ]
6462
+ });
6116
6463
 
6117
6464
  // ../theme-core/src/palette/variants/high-contrast.ts
6118
6465
  var highContrastInk = definePaletteVariant({
@@ -6324,6 +6671,7 @@ var paletteVariants = [
6324
6671
  brandLedCool,
6325
6672
  brandLedWarm,
6326
6673
  brandLedJewel,
6674
+ brandLedBurgundyGold,
6327
6675
  // Warm-neutral family
6328
6676
  warmNeutralClay,
6329
6677
  warmNeutralCream,
@@ -6399,7 +6747,8 @@ var curatedSiteStyleIdValues = [
6399
6747
  "site-style:quiet-luxury",
6400
6748
  "site-style:practical-services",
6401
6749
  "site-style:modern-wellness",
6402
- "site-style:bold-launch"
6750
+ "site-style:bold-launch",
6751
+ "site-style:south-west-twerk-school"
6403
6752
  ];
6404
6753
  var quietBudget = {
6405
6754
  accentDensity: "low",
@@ -6454,6 +6803,8 @@ function defineCuratedSiteStyle(input) {
6454
6803
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
6455
6804
  supportedTransitions: generatedDesignOptionCatalog.transitions
6456
6805
  },
6806
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
6807
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
6457
6808
  buttonPersonalityChoices: input.buttonPersonalityChoices,
6458
6809
  paletteVariantChoices: input.paletteVariantChoices
6459
6810
  };
@@ -6700,6 +7051,101 @@ var curatedSiteStyles = [
6700
7051
  paletteChoice("brand-led-jewel"),
6701
7052
  paletteChoice("brand-led-warm")
6702
7053
  ]
7054
+ }),
7055
+ defineCuratedSiteStyle({
7056
+ id: "site-style:south-west-twerk-school",
7057
+ name: "South West Twerk School",
7058
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
7059
+ 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.",
7060
+ selectionKeywords: [
7061
+ "dance",
7062
+ "classes",
7063
+ "workshop",
7064
+ "school",
7065
+ "movement",
7066
+ "performance",
7067
+ "community"
7068
+ ],
7069
+ tokenRecipes: {
7070
+ palette: "brand-led",
7071
+ contrast: "maximum",
7072
+ radius: "soft",
7073
+ shadow: "layered",
7074
+ typography: "clean-sans",
7075
+ spacing: "airy",
7076
+ motion: "expressive"
7077
+ },
7078
+ compositionBudget: expressiveBudget,
7079
+ themeOverrides: {
7080
+ typography: {
7081
+ body: {
7082
+ family: "Manrope, system-ui, sans-serif",
7083
+ size: "lg",
7084
+ weight: "regular",
7085
+ lineHeight: "relaxed",
7086
+ letterSpacing: "normal"
7087
+ },
7088
+ headings: {
7089
+ default: {
7090
+ family: '"TAN - PEARL", sans-serif',
7091
+ weight: "bold",
7092
+ lineHeight: "normal",
7093
+ letterSpacing: "tight",
7094
+ colorToken: "primary",
7095
+ italic: null,
7096
+ case: null
7097
+ },
7098
+ h1: {
7099
+ size: "xl",
7100
+ weight: "bold",
7101
+ lineHeight: "normal",
7102
+ letterSpacing: "tight",
7103
+ italic: null
7104
+ },
7105
+ h2: {
7106
+ size: "lg",
7107
+ weight: "bold",
7108
+ lineHeight: "normal",
7109
+ letterSpacing: "normal",
7110
+ italic: null
7111
+ },
7112
+ h3: {
7113
+ size: "md",
7114
+ weight: "bold",
7115
+ lineHeight: "normal",
7116
+ letterSpacing: "normal",
7117
+ italic: null
7118
+ }
7119
+ },
7120
+ scale: "balanced"
7121
+ },
7122
+ bodyText: {
7123
+ intro: {
7124
+ paragraphSize: "editorial",
7125
+ headingSize: "editorial"
7126
+ }
7127
+ }
7128
+ },
7129
+ recommendedAppearancePresetIds: [
7130
+ "site-header-brand-solid-inverted-cta",
7131
+ "site-footer-brand-two-band",
7132
+ "hero-brand-scrim-fixed-frame",
7133
+ "body-text-editorial-intro",
7134
+ "testimonials-accent-quote-proof",
7135
+ "contact-form-dark-card"
7136
+ ],
7137
+ buttonPersonalityChoices: [
7138
+ buttonChoice("showtime-pill"),
7139
+ buttonChoice("confident-chip"),
7140
+ buttonChoice("ink-stamp"),
7141
+ buttonChoice("brushed-wash")
7142
+ ],
7143
+ paletteVariantChoices: [
7144
+ paletteChoice("brand-led-burgundy-gold"),
7145
+ paletteChoice("brand-led-jewel"),
7146
+ paletteChoice("brand-led-warm"),
7147
+ paletteChoice("high-contrast-ink")
7148
+ ]
6703
7149
  })
6704
7150
  ];
6705
7151
  var curatedSiteStylesById = new Map(
@@ -6744,6 +7190,40 @@ var heroLegibilityStrategySchema = z21.enum([
6744
7190
  "scrim-gradient",
6745
7191
  "solid-panel"
6746
7192
  ]);
7193
+ var sectionHeightIntentSchema = z21.enum([
7194
+ "default",
7195
+ "banner",
7196
+ "hero",
7197
+ "immersive"
7198
+ ]);
7199
+ var imageSurfaceTreatmentIntensitySchema = z21.enum(["soft", "balanced", "strong"]);
7200
+ var imageSurfaceMotionSchema = z21.enum(["static", "fixed-frame"]);
7201
+ var imageSurfaceTreatmentSchema = z21.discriminatedUnion("kind", [
7202
+ z21.object({ kind: z21.literal("none") }).strict(),
7203
+ z21.object({
7204
+ kind: z21.literal("brand-scrim"),
7205
+ token: z21.enum(["primary", "secondary", "accent"]),
7206
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7207
+ }).strict(),
7208
+ z21.object({
7209
+ kind: z21.literal("brand-wash"),
7210
+ token: z21.enum(["primary", "secondary", "accent"]),
7211
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7212
+ }).strict(),
7213
+ z21.object({
7214
+ kind: z21.literal("neutral-scrim"),
7215
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7216
+ }).strict(),
7217
+ z21.object({
7218
+ kind: z21.literal("neutral-wash"),
7219
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7220
+ }).strict(),
7221
+ z21.object({
7222
+ kind: z21.literal("solid-panel"),
7223
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7224
+ }).strict()
7225
+ ]);
7226
+ var testimonialCardTreatmentSchema = z21.enum(["default", "accent-quote"]);
6747
7227
  function uniqueNonEmpty(values) {
6748
7228
  const uniqueValues = [...new Set(values)];
6749
7229
  const firstValue = uniqueValues[0];
@@ -6782,7 +7262,11 @@ var blockDesignPlanSchema = z21.object({
6782
7262
  itemSurface: z21.enum(userDesignOptionCatalog.itemSurfaces),
6783
7263
  transitionAfter: z21.enum(userDesignOptionCatalog.transitions),
6784
7264
  emphasis: z21.enum(userDesignOptionCatalog.emphases),
6785
- heroLegibility: heroLegibilityStrategySchema.optional()
7265
+ sectionHeight: sectionHeightIntentSchema.optional(),
7266
+ heroLegibility: heroLegibilityStrategySchema.optional(),
7267
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7268
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7269
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
6786
7270
  }).strict();
6787
7271
  var styleAuthoritySchema = z21.discriminatedUnion("kind", [
6788
7272
  z21.object({
@@ -8312,6 +8796,7 @@ var SEMANTIC_SPACING_VALUES = [
8312
8796
  ];
8313
8797
  var SECTION_MIN_HEIGHT_VALUES = [
8314
8798
  "none",
8799
+ "banner",
8315
8800
  "hero",
8316
8801
  "immersive"
8317
8802
  ];
@@ -8339,6 +8824,7 @@ var CONTAINER_SPACING_MAP = {
8339
8824
  };
8340
8825
  var SECTION_MIN_HEIGHT_MAP = {
8341
8826
  none: "",
8827
+ banner: "rb-section-min-h-banner",
8342
8828
  hero: "rb-section-min-h-hero",
8343
8829
  immersive: "rb-section-min-h-immersive"
8344
8830
  };
@@ -9129,6 +9615,9 @@ var boxStylesCompositeTransform = {
9129
9615
  classes.push(roundedResult);
9130
9616
  }
9131
9617
  }
9618
+ if (input.treatment === "accent-quote") {
9619
+ classes.push("rb-card-treatment-accent-quote");
9620
+ }
9132
9621
  return classes.join(" ").trim() || "";
9133
9622
  }
9134
9623
  };
@@ -9226,7 +9715,7 @@ var sectionClassNameTransform = {
9226
9715
  minHeight = input.minHeight;
9227
9716
  } else if (process.env.NODE_ENV !== "production") {
9228
9717
  console.warn(
9229
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
9718
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
9230
9719
  );
9231
9720
  }
9232
9721
  }
@@ -9549,23 +10038,6 @@ function styledCard(children, opts, ...mods) {
9549
10038
  );
9550
10039
  }
9551
10040
 
9552
- // ../blocks/src/system/node/fragments/typography.ts
9553
- function mergeClassName(base, extra) {
9554
- return [base, extra ?? ""].filter(Boolean).join(" ");
9555
- }
9556
- function captionText(opts, ...mods) {
9557
- const {
9558
- as: asProp,
9559
- className: classNameProp,
9560
- color,
9561
- ...rest
9562
- } = opts ?? {};
9563
- const as = asProp ?? "p";
9564
- const className = mergeClassName("rb-caption", classNameProp);
9565
- const style = textColorStyle(color ?? "mutedText");
9566
- return text({ ...rest, as, className, style }, ...mods);
9567
- }
9568
-
9569
10041
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
9570
10042
  function joinClasses(...parts) {
9571
10043
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -10470,18 +10942,17 @@ function buildAttributionNodes() {
10470
10942
  const name = text(
10471
10943
  {
10472
10944
  as: "strong",
10473
- className: "rb-block",
10474
- style: textColorStyle("text")
10945
+ className: "rb-block"
10475
10946
  },
10476
10947
  bind("testimonial.content.name", { fallback: "Anonymous" })
10477
10948
  );
10478
- const jobTitle = captionText(
10479
- null,
10949
+ const jobTitle = text(
10950
+ { as: "p", className: "rb-caption" },
10480
10951
  when("testimonial.content.jobTitle"),
10481
10952
  bind("testimonial.content.jobTitle")
10482
10953
  );
10483
- const company = captionText(
10484
- null,
10954
+ const company = text(
10955
+ { as: "p", className: "rb-caption" },
10485
10956
  when("testimonial.content.company"),
10486
10957
  bind("testimonial.content.company")
10487
10958
  );
@@ -10515,8 +10986,7 @@ function buildTestimonialCard(...mods) {
10515
10986
  );
10516
10987
  const body = richText(
10517
10988
  {
10518
- className: "rb-prose rb-max-w-none",
10519
- style: textColorStyle("text")
10989
+ className: "rb-prose rb-max-w-none"
10520
10990
  },
10521
10991
  bind("testimonial.content.body"),
10522
10992
  when("testimonial.content.body")
@@ -12238,6 +12708,7 @@ function heroContentCard(children, gap) {
12238
12708
  return styledContainer({
12239
12709
  bindFrom: "_contentCardStyles",
12240
12710
  constrainWidth: false,
12711
+ baseClassName: "rb-relative rb-isolate",
12241
12712
  rootType: "stack",
12242
12713
  rootProps: {
12243
12714
  gap
@@ -12268,6 +12739,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
12268
12739
  function heroContainerStack(children, gap) {
12269
12740
  return styledContainer({
12270
12741
  rootType: "stack",
12742
+ baseClassName: "rb-relative rb-isolate",
12271
12743
  rootProps: {
12272
12744
  gap: "none",
12273
12745
  justify: {
@@ -13508,7 +13980,7 @@ function resolveHeroVerticalAlignment(content) {
13508
13980
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
13509
13981
  const sectionStyles = asPartialObject(content._sectionStyles);
13510
13982
  const minHeight = sectionStyles?.minHeight;
13511
- if (minHeight === "hero" || minHeight === "immersive") return "center";
13983
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
13512
13984
  const variant = resolveHeroVariant(content);
13513
13985
  if (variant === "split" || variant === "splitReverse") return "center";
13514
13986
  return "top";
@@ -14310,6 +14782,26 @@ var footerSplitNavSingleClassTransform = {
14310
14782
  ]);
14311
14783
  }
14312
14784
  };
14785
+ var footerSplitMainClassSchema = z33.object({
14786
+ base: z33.string().optional(),
14787
+ reverseClass: z33.string().optional()
14788
+ });
14789
+ var footerSplitMainClassTransform = {
14790
+ id: "layout.footerSplitMainClass",
14791
+ kind: "string",
14792
+ summary: "Compose split-footer main row classes from footer logo placement",
14793
+ schema: footerSplitMainClassSchema,
14794
+ run: (value, options) => {
14795
+ const logo = asPartialObject(value);
14796
+ const placement = logo?.placement ?? "right";
14797
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
14798
+ 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";
14799
+ return joinClasses4([
14800
+ options.base ?? baseClass,
14801
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
14802
+ ]);
14803
+ }
14804
+ };
14313
14805
  var footerLogoClassSchema = z33.object({
14314
14806
  base: z33.string().optional()
14315
14807
  });
@@ -14320,14 +14812,11 @@ var footerLogoClassTransform = {
14320
14812
  schema: footerLogoClassSchema,
14321
14813
  run: (value, options) => {
14322
14814
  const logo = asPartialObject(value);
14323
- const placement = logo?.placement ?? "right";
14324
14815
  const align = logo?.align ?? "end";
14325
14816
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
14326
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
14327
14817
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
14328
14818
  return joinClasses4([
14329
14819
  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",
14330
- orderClass,
14331
14820
  selfAlignClass,
14332
14821
  hiddenClass
14333
14822
  ]);
@@ -14382,6 +14871,7 @@ var layoutTransforms = [
14382
14871
  footerBottomBarContainerClassTransform,
14383
14872
  footerBottomBarStyleTransform,
14384
14873
  footerSplitNavSingleClassTransform,
14874
+ footerSplitMainClassTransform,
14385
14875
  footerLogoClassTransform,
14386
14876
  footerLogoMediaClassTransform,
14387
14877
  footerLogoTextVisibleTransform
@@ -14689,7 +15179,7 @@ var createNavRow = (className, align = "end") => navRow({
14689
15179
  var headerCta = ctaButton({
14690
15180
  basePath: "menu.ctaItem",
14691
15181
  whenPath: "menu.ctaItem.label",
14692
- variantPath: "menu.ctaItem.variant",
15182
+ variantPath: "$root.theme.header.ctaVariant",
14693
15183
  linkPath: "menu.ctaItem.link",
14694
15184
  sizeFallback: "sm",
14695
15185
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -14697,7 +15187,7 @@ var headerCta = ctaButton({
14697
15187
  var mobileCta = ctaButton({
14698
15188
  basePath: "menu.ctaItem",
14699
15189
  whenPath: "menu.ctaItem.label",
14700
- variantPath: "menu.ctaItem.variant",
15190
+ variantPath: "$root.theme.header.ctaVariant",
14701
15191
  linkPath: "menu.ctaItem.link",
14702
15192
  sizeFallback: "md",
14703
15193
  className: "nav-mobile-cta rb-w-full"
@@ -15158,7 +15648,13 @@ var splitFooterLayout = stack(
15158
15648
  [
15159
15649
  inline(
15160
15650
  {
15161
- 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"
15651
+ className: {
15652
+ $bind: {
15653
+ from: "$root.theme.footer.logo",
15654
+ transforms: [{ id: "layout.footerSplitMainClass" }],
15655
+ 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"
15656
+ }
15657
+ }
15162
15658
  },
15163
15659
  [
15164
15660
  stack(
@@ -17391,7 +17887,8 @@ var courseEntrySubrouteContextSchema = z45.union([
17391
17887
  run: z45.object({
17392
17888
  courseId: z45.string(),
17393
17889
  seriesId: z45.string(),
17394
- runSlug: z45.string()
17890
+ runSlug: z45.string(),
17891
+ runName: z45.string().nullable()
17395
17892
  })
17396
17893
  }),
17397
17894
  z45.object({
@@ -25205,6 +25702,34 @@ function panelCapable() {
25205
25702
  itemSurfaces: "unsupported"
25206
25703
  });
25207
25704
  }
25705
+ var heroSectionHeights = [
25706
+ "default",
25707
+ "banner",
25708
+ "hero",
25709
+ "immersive"
25710
+ ];
25711
+ var heroImageSurfaceTreatments = [
25712
+ "none",
25713
+ "brand-scrim",
25714
+ "brand-wash",
25715
+ "neutral-scrim",
25716
+ "neutral-wash",
25717
+ "solid-panel"
25718
+ ];
25719
+ var heroImageSurfaceMotions = [
25720
+ "static",
25721
+ "fixed-frame"
25722
+ ];
25723
+ function heroCapable() {
25724
+ return declareBlockDesignCapability({
25725
+ sectionSurfaces: "supported",
25726
+ contentFrames: ["plain", "panel"],
25727
+ itemSurfaces: "unsupported",
25728
+ sectionHeights: heroSectionHeights,
25729
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
25730
+ imageSurfaceMotions: heroImageSurfaceMotions
25731
+ });
25732
+ }
25208
25733
  function plainItemsCapable() {
25209
25734
  return declareBlockDesignCapability({
25210
25735
  sectionSurfaces: "supported",
@@ -25321,7 +25846,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
25321
25846
  };
25322
25847
  }
25323
25848
  var systemBlockDefinitionsRaw = [
25324
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
25849
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
25325
25850
  flow: heroFlow,
25326
25851
  layoutProfiles: [
25327
25852
  layoutProfile({
@@ -25425,7 +25950,12 @@ var systemBlockDefinitionsRaw = [
25425
25950
  flow: siteChromeFlow,
25426
25951
  layoutProfiles: []
25427
25952
  })),
25428
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
25953
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
25954
+ sectionSurfaces: "supported",
25955
+ contentFrames: ["plain", "panel"],
25956
+ itemSurfaces: "supported",
25957
+ testimonialCardTreatments: ["default", "accent-quote"]
25958
+ }), defineBlockDesignMetadata({
25429
25959
  flow: proofFlow,
25430
25960
  layoutProfiles: [
25431
25961
  layoutProfile({
@@ -25737,8 +26267,15 @@ function parseOpacity(value) {
25737
26267
  }
25738
26268
  return opacity <= 1 ? opacity : opacity / 100;
25739
26269
  }
25740
- function appendOptionalClasses(baseClassName, optionalClassName) {
25741
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
26270
+ function backgroundMotionClassNames(input) {
26271
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
26272
+ }
26273
+ function appendBackgroundMediaClasses(baseClassName, input) {
26274
+ return [
26275
+ baseClassName,
26276
+ backgroundMotionClassNames(input),
26277
+ backgroundVideoMobileClassNames(input)
26278
+ ].filter(Boolean).join(" ");
25742
26279
  }
25743
26280
  var resolveImageStyleTransform = {
25744
26281
  id: "background.resolveImageStyle",
@@ -25815,9 +26352,9 @@ var resolveImageClassNameTransform = {
25815
26352
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
25816
26353
  const position = isString(input.position) ? input.position.trim() : null;
25817
26354
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
25818
- return appendOptionalClasses(
26355
+ return appendBackgroundMediaClasses(
25819
26356
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
25820
- backgroundVideoMobileClassNames(input)
26357
+ input
25821
26358
  );
25822
26359
  }
25823
26360
  let needsAnchoring = false;
@@ -25830,18 +26367,18 @@ var resolveImageClassNameTransform = {
25830
26367
  }
25831
26368
  }
25832
26369
  if (!needsAnchoring) {
25833
- return appendOptionalClasses(
26370
+ return appendBackgroundMediaClasses(
25834
26371
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
25835
- backgroundVideoMobileClassNames(input)
26372
+ input
25836
26373
  );
25837
26374
  }
25838
26375
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
25839
26376
  const isCustom = position && !isPreset;
25840
26377
  if (isCustom) {
25841
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
26378
+ return appendBackgroundMediaClasses(baseClass, input);
25842
26379
  }
25843
26380
  const anchorClasses = getAnchorClasses(position);
25844
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
26381
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
25845
26382
  }
25846
26383
  };
25847
26384
  var resolveOverlayStyleTransform = {
@@ -32973,16 +33510,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
32973
33510
  };
32974
33511
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
32975
33512
  }
32976
- const textSize = configuredDropdownStyle?.textSize;
32977
- if (textSize) {
32978
- const textSizeMap = {
32979
- "xs": "0.75rem",
32980
- "sm": "0.875rem",
32981
- "base": "1rem",
32982
- "lg": "1.125rem"
32983
- };
32984
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
32985
- }
33513
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
33514
+ const textSizeMap = {
33515
+ "xs": "0.75rem",
33516
+ "sm": "0.875rem",
33517
+ "base": "1rem",
33518
+ "lg": "1.125rem"
33519
+ };
33520
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
32986
33521
  if (additionalRules.length > 0) {
32987
33522
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
32988
33523
  return baseCSS + `
@@ -33271,12 +33806,10 @@ ${selector} .rb-container-full`;
33271
33806
  ${rootRules.join("\n ")}
33272
33807
  }`);
33273
33808
  if (containerPadding?.mobile) {
33274
- cssChunks.push(
33275
- `${containerSelector} {
33809
+ cssChunks.push(`${containerSelector} {
33276
33810
  padding-left: ${toPaddingValue(containerPadding.mobile)};
33277
33811
  padding-right: ${toPaddingValue(containerPadding.mobile)};
33278
- }`
33279
- );
33812
+ }`);
33280
33813
  }
33281
33814
  if (containerPadding?.tablet) {
33282
33815
  cssChunks.push(
@@ -33302,6 +33835,10 @@ ${selector} .rb-container-full`;
33302
33835
  if (heroTypographyCss) {
33303
33836
  cssChunks.push(heroTypographyCss);
33304
33837
  }
33838
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
33839
+ if (bodyTextTypographyCss) {
33840
+ cssChunks.push(bodyTextTypographyCss);
33841
+ }
33305
33842
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
33306
33843
  return cssChunks.join("\n\n");
33307
33844
  }
@@ -33314,6 +33851,9 @@ function toPaddingValue(preset2) {
33314
33851
  };
33315
33852
  return map[preset2];
33316
33853
  }
33854
+ var waveTransitionMask = svgDataUrl(
33855
+ "<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>"
33856
+ );
33317
33857
  function generateSiteStyleTransitionCss(themeId) {
33318
33858
  const selector = `:where([data-theme-scope="${themeId}"])`;
33319
33859
  return `${selector} [data-style-group^='site-style-transition-'] {
@@ -33381,21 +33921,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
33381
33921
 
33382
33922
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
33383
33923
  background: var(--site-style-transition-to);
33384
- clip-path: polygon(
33385
- 0 42%,
33386
- 10% 34%,
33387
- 21% 42%,
33388
- 34% 31%,
33389
- 48% 39%,
33390
- 63% 29%,
33391
- 78% 37%,
33392
- 90% 30%,
33393
- 100% 36%,
33394
- 100% 100%,
33395
- 0 100%
33396
- );
33924
+ mask-image: url("${waveTransitionMask}");
33925
+ mask-repeat: no-repeat;
33926
+ mask-size: 100% 100%;
33927
+ -webkit-mask-image: url("${waveTransitionMask}");
33928
+ -webkit-mask-repeat: no-repeat;
33929
+ -webkit-mask-size: 100% 100%;
33397
33930
  }`;
33398
33931
  }
33932
+ function svgDataUrl(svg) {
33933
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
33934
+ }
33399
33935
  function generateHeroTypographyCss(themeId, theme) {
33400
33936
  const typography = theme.hero?.typography;
33401
33937
  if (!typography) return "";
@@ -33418,33 +33954,21 @@ function generateHeroTypographyCss(themeId, theme) {
33418
33954
  ${subheadlineRules.join("\n ")}
33419
33955
  }`);
33420
33956
  }
33421
- const microHeadlineRules = buildTypographyRules(
33422
- typography.microHeadlineSize,
33423
- typography.microHeadlineLineHeight
33424
- );
33957
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
33425
33958
  if (microHeadlineRules.length > 0) {
33426
33959
  chunks.push(`${microHeadlineSelector} {
33427
33960
  ${microHeadlineRules.join("\n ")}
33428
33961
  }`);
33429
33962
  }
33430
- const microSubheadlineRules = buildTypographyRules(
33431
- typography.microSubheadlineSize,
33432
- typography.microSubheadlineLineHeight
33433
- );
33963
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
33434
33964
  if (microSubheadlineRules.length > 0) {
33435
33965
  chunks.push(`${microSubheadlineSelector} {
33436
33966
  ${microSubheadlineRules.join("\n ")}
33437
33967
  }`);
33438
33968
  }
33439
33969
  if (typography.responsive?.tablet) {
33440
- const tabletHeadlineRules = buildTypographyRules(
33441
- typography.responsive.tablet.headlineSize,
33442
- typography.responsive.tablet.headlineLineHeight
33443
- );
33444
- const tabletSubheadlineRules = buildTypographyRules(
33445
- typography.responsive.tablet.subheadlineSize,
33446
- typography.responsive.tablet.subheadlineLineHeight
33447
- );
33970
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
33971
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
33448
33972
  const tabletChunks = [];
33449
33973
  if (tabletHeadlineRules.length > 0) {
33450
33974
  tabletChunks.push(`${headlineSelector} {
@@ -33463,14 +33987,8 @@ function generateHeroTypographyCss(themeId, theme) {
33463
33987
  }
33464
33988
  }
33465
33989
  if (typography.responsive?.mobile) {
33466
- const mobileHeadlineRules = buildTypographyRules(
33467
- typography.responsive.mobile.headlineSize,
33468
- typography.responsive.mobile.headlineLineHeight
33469
- );
33470
- const mobileSubheadlineRules = buildTypographyRules(
33471
- typography.responsive.mobile.subheadlineSize,
33472
- typography.responsive.mobile.subheadlineLineHeight
33473
- );
33990
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
33991
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
33474
33992
  const mobileChunks = [];
33475
33993
  if (mobileHeadlineRules.length > 0) {
33476
33994
  mobileChunks.push(`${headlineSelector} {
@@ -33500,6 +34018,27 @@ function buildTypographyRules(size, lineHeight) {
33500
34018
  }
33501
34019
  return rules;
33502
34020
  }
34021
+ function generateBodyTextTypographyCss(themeId, theme) {
34022
+ const intro = theme.bodyText?.intro;
34023
+ if (!intro) return "";
34024
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
34025
+ const chunks = [];
34026
+ if (intro.headingSize === "editorial") {
34027
+ chunks.push(`${rootSelector} .body-copy-heading {
34028
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
34029
+ line-height: 1.08;
34030
+ }`);
34031
+ }
34032
+ if (intro.paragraphSize === "editorial") {
34033
+ chunks.push(`${rootSelector} .body-copy-body {
34034
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
34035
+ --rb-prose-lg-line-height: 1.55;
34036
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
34037
+ --rb-prose-xl-sm-line-height: 1.55;
34038
+ }`);
34039
+ }
34040
+ return chunks.join("\n\n");
34041
+ }
33503
34042
  function toHeroSize(size) {
33504
34043
  const map = {
33505
34044
  sm: "0.875rem",
@@ -33510,7 +34049,8 @@ function toHeroSize(size) {
33510
34049
  "3xl": "1.875rem",
33511
34050
  "4xl": "2.25rem",
33512
34051
  "5xl": "3rem",
33513
- "6xl": "3.75rem"
34052
+ "6xl": "3.75rem",
34053
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
33514
34054
  };
33515
34055
  return map[size];
33516
34056
  }
@@ -35832,12 +36372,16 @@ var containerResponsiveThemeCss = `/*
35832
36372
  .rb-h-full {
35833
36373
  height: 100%;
35834
36374
  }
36375
+ .rb-section-min-h-banner {
36376
+ min-height: clamp(16rem, 34svh, 24rem);
36377
+ }
35835
36378
  .rb-section-min-h-hero {
35836
36379
  min-height: clamp(32rem, 62svh, 44rem);
35837
36380
  }
35838
36381
  .rb-section-min-h-immersive {
35839
36382
  min-height: clamp(38rem, 78svh, 54rem);
35840
36383
  }
36384
+ .rb-section-min-h-banner > .rb-container,
35841
36385
  .rb-section-min-h-hero > .rb-container,
35842
36386
  .rb-section-min-h-immersive > .rb-container {
35843
36387
  min-height: inherit;
@@ -36947,6 +37491,19 @@ var containerResponsiveThemeCss = `/*
36947
37491
  .rb-object-contain {
36948
37492
  object-fit: contain;
36949
37493
  }
37494
+ .rb-bg-motion-fixed-frame {
37495
+ position: fixed;
37496
+ inset: 0;
37497
+ width: 100vw;
37498
+ height: 100svh;
37499
+ }
37500
+ @media (hover: none), (prefers-reduced-motion: reduce) {
37501
+ .rb-bg-motion-fixed-frame {
37502
+ position: absolute;
37503
+ width: 100%;
37504
+ height: 100%;
37505
+ }
37506
+ }
36950
37507
 
36951
37508
  /* Line clamp */
36952
37509
  .rb-line-clamp-2,
@@ -41457,13 +42014,13 @@ var containerResponsiveThemeCss = `/*
41457
42014
 
41458
42015
  /* Eyebrow - color only (typography via .rb-eyebrow) */
41459
42016
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
41460
- color: rgb(var(--tb-text));
42017
+ color: var(--section-text-color, rgb(var(--tb-text)));
41461
42018
  }
41462
42019
 
41463
42020
  /* Subheadline - supporting text below headline */
41464
42021
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
41465
42022
  font-size: 1.125rem;
41466
- color: rgb(var(--tb-text));
42023
+ color: var(--section-text-color, rgb(var(--tb-text)));
41467
42024
  }
41468
42025
 
41469
42026
  @container rb-site (min-width: 640px) {
@@ -41537,6 +42094,20 @@ var containerResponsiveThemeCss = `/*
41537
42094
  max-width: 60rem;
41538
42095
  }
41539
42096
 
42097
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
42098
+ font-size: var(--rb-prose-lg-font-size);
42099
+ line-height: var(--rb-prose-lg-line-height);
42100
+ }
42101
+
42102
+ @container rb-site (min-width: 640px) {
42103
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
42104
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
42105
+ font-size: var(--rb-prose-xl-sm-font-size);
42106
+ line-height: var(--rb-prose-xl-sm-line-height);
42107
+ }
42108
+ }
42109
+ }
42110
+
41540
42111
  /* Variant: Narrow (left-aligned, shorter line length) */
41541
42112
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
41542
42113
  max-width: 34rem;
@@ -42879,6 +43450,13 @@ var containerResponsiveThemeCss = `/*
42879
43450
  border-radius: var(--rb-block-radius);
42880
43451
  }
42881
43452
 
43453
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
43454
+ border: 0;
43455
+ border-left: 5px solid rgb(var(--tb-secondary));
43456
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
43457
+ color: rgb(var(--tb-primaryForeground));
43458
+ }
43459
+
42882
43460
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
42883
43461
  font-size: var(--rb-testimonial-quote-size);
42884
43462
  line-height: 1;
@@ -42887,6 +43465,12 @@ var containerResponsiveThemeCss = `/*
42887
43465
  color: rgb(var(--tb-primary));
42888
43466
  }
42889
43467
 
43468
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
43469
+ color: rgb(var(--tb-secondary));
43470
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
43471
+ opacity: 1;
43472
+ }
43473
+
42890
43474
 
42891
43475
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
42892
43476
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -47560,7 +48144,7 @@ var ENDPOINT_DEFINITIONS = {
47560
48144
  method: "GET",
47561
48145
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
47562
48146
  auth: "user",
47563
- responseKind: "text"
48147
+ responseKind: "blob"
47564
48148
  },
47565
48149
  getNewsletterSubscriber: {
47566
48150
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -47891,12 +48475,7 @@ var ENDPOINT_DEFINITIONS = {
47891
48475
  ],
47892
48476
  auth: "user",
47893
48477
  responseKind: "json",
47894
- errors: [
47895
- "validation:invalid_input",
47896
- "resource:not_found",
47897
- "resource:conflict",
47898
- "server:internal_error"
47899
- ]
48478
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
47900
48479
  },
47901
48480
  unpublishTeamMemberProfile: {
47902
48481
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -48149,6 +48728,13 @@ var ENDPOINT_DEFINITIONS = {
48149
48728
  auth: "user",
48150
48729
  responseKind: "json"
48151
48730
  },
48731
+ exportBookingAppointmentsCsv: {
48732
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
48733
+ method: "GET",
48734
+ auth: "user",
48735
+ errors: [],
48736
+ responseKind: "blob"
48737
+ },
48152
48738
  createAppointment: {
48153
48739
  path: "/sites/{siteId}/bookings/appointments",
48154
48740
  method: "POST",
@@ -48276,6 +48862,13 @@ var ENDPOINT_DEFINITIONS = {
48276
48862
  auth: "user",
48277
48863
  responseKind: "json"
48278
48864
  },
48865
+ exportCourseEnrollmentsCsv: {
48866
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
48867
+ method: "GET",
48868
+ auth: "user",
48869
+ errors: [],
48870
+ responseKind: "blob"
48871
+ },
48279
48872
  listCourseWaitlist: {
48280
48873
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
48281
48874
  method: "GET",
@@ -49034,6 +49627,63 @@ var ENDPOINT_DEFINITIONS = {
49034
49627
  auth: "user",
49035
49628
  responseKind: "json"
49036
49629
  },
49630
+ updateRegisteredDomainContact: {
49631
+ path: "/domains/{domainId}/registrar/contact",
49632
+ method: "POST",
49633
+ errors: [
49634
+ "validation:invalid_input",
49635
+ "resource:not_found",
49636
+ "auth:forbidden",
49637
+ "external:service_error",
49638
+ "external:registrar_orphaned_contact_profile",
49639
+ "server:internal_error"
49640
+ ],
49641
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49642
+ auth: "user",
49643
+ responseKind: "json"
49644
+ },
49645
+ setRegisteredDomainPrivacy: {
49646
+ path: "/domains/{domainId}/registrar/privacy",
49647
+ method: "POST",
49648
+ errors: [
49649
+ "validation:invalid_input",
49650
+ "resource:not_found",
49651
+ "auth:forbidden",
49652
+ "external:service_error",
49653
+ "server:internal_error"
49654
+ ],
49655
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49656
+ auth: "user",
49657
+ responseKind: "json"
49658
+ },
49659
+ setRegisteredDomainAutoRenew: {
49660
+ path: "/domains/{domainId}/registrar/auto-renew",
49661
+ method: "POST",
49662
+ errors: [
49663
+ "validation:invalid_input",
49664
+ "resource:not_found",
49665
+ "auth:forbidden",
49666
+ "external:service_error",
49667
+ "server:internal_error"
49668
+ ],
49669
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49670
+ auth: "user",
49671
+ responseKind: "json"
49672
+ },
49673
+ getRegisteredDomainRenewalPosture: {
49674
+ path: "/domains/{domainId}/registrar/renewal",
49675
+ method: "GET",
49676
+ errors: [
49677
+ "validation:invalid_input",
49678
+ "resource:not_found",
49679
+ "auth:forbidden",
49680
+ "external:service_error",
49681
+ "server:internal_error"
49682
+ ],
49683
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49684
+ auth: "user",
49685
+ responseKind: "json"
49686
+ },
49037
49687
  retryDomainVercel: {
49038
49688
  path: "/domains/{domainId}/vercel",
49039
49689
  method: "POST",
@@ -49581,6 +50231,14 @@ var ENDPOINT_DEFINITIONS = {
49581
50231
  auth: "user",
49582
50232
  responseKind: "json"
49583
50233
  },
50234
+ exportSeoPagesCsv: {
50235
+ path: "/sites/{siteId}/seo/pages",
50236
+ method: "GET",
50237
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
50238
+ auth: "user",
50239
+ responseKind: "blob",
50240
+ errors: []
50241
+ },
49584
50242
  getSeoQueries: {
49585
50243
  path: "/sites/{siteId}/seo/queries",
49586
50244
  method: "GET",
@@ -49589,6 +50247,14 @@ var ENDPOINT_DEFINITIONS = {
49589
50247
  auth: "user",
49590
50248
  responseKind: "json"
49591
50249
  },
50250
+ exportSeoQueriesCsv: {
50251
+ path: "/sites/{siteId}/seo/queries",
50252
+ method: "GET",
50253
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
50254
+ auth: "user",
50255
+ responseKind: "blob",
50256
+ errors: []
50257
+ },
49592
50258
  getPerformanceOverview: {
49593
50259
  path: "/sites/{siteId}/performance/overview",
49594
50260
  method: "GET",
@@ -49637,7 +50303,12 @@ var ENDPOINT_DEFINITIONS = {
49637
50303
  path: "/media/{assetId}/canonical-crop",
49638
50304
  method: "POST",
49639
50305
  tags: ["media", "media-{assetId}"],
49640
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
50306
+ errors: [
50307
+ "validation:invalid_input",
50308
+ "resource:not_found",
50309
+ "resource:conflict",
50310
+ "server:internal_error"
50311
+ ],
49641
50312
  auth: "user",
49642
50313
  responseKind: "json"
49643
50314
  },
@@ -49969,7 +50640,7 @@ var ENDPOINT_DEFINITIONS = {
49969
50640
  method: "GET",
49970
50641
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
49971
50642
  auth: "user",
49972
- responseKind: "text"
50643
+ responseKind: "blob"
49973
50644
  },
49974
50645
  // Public submit
49975
50646
  submitForm: {
@@ -50852,6 +51523,14 @@ var ENDPOINT_DEFINITIONS = {
50852
51523
  auth: "user",
50853
51524
  responseKind: "json"
50854
51525
  },
51526
+ exportEventSeriesAttendeesCsv: {
51527
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
51528
+ method: "GET",
51529
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
51530
+ auth: "user",
51531
+ errors: [],
51532
+ responseKind: "blob"
51533
+ },
50855
51534
  listEventSeriesWaitlist: {
50856
51535
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
50857
51536
  method: "GET",
@@ -51415,6 +52094,14 @@ var ENDPOINT_DEFINITIONS = {
51415
52094
  auth: "user",
51416
52095
  responseKind: "json"
51417
52096
  },
52097
+ exportBookingCustomersCsv: {
52098
+ path: "/sites/{siteId}/bookings/customers/export.csv",
52099
+ method: "GET",
52100
+ tags: ["site-{siteId}", "customers-{siteId}"],
52101
+ auth: "user",
52102
+ errors: [],
52103
+ responseKind: "blob"
52104
+ },
51418
52105
  createBookingCustomer: {
51419
52106
  path: "/sites/{siteId}/bookings/customers",
51420
52107
  method: "POST",
@@ -51442,6 +52129,21 @@ var ENDPOINT_DEFINITIONS = {
51442
52129
  "server:internal_error"
51443
52130
  ]
51444
52131
  },
52132
+ rectifyBookingParticipantIdentity: {
52133
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
52134
+ method: "PATCH",
52135
+ tags: ["site-{siteId}", "customers-{siteId}"],
52136
+ auth: "user",
52137
+ responseKind: "json",
52138
+ errors: [
52139
+ "validation:invalid_input",
52140
+ "auth:forbidden",
52141
+ "resource:not_found",
52142
+ "resource:already_exists",
52143
+ "resource:conflict",
52144
+ "server:internal_error"
52145
+ ]
52146
+ },
51445
52147
  listCustomerPasses: {
51446
52148
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
51447
52149
  method: "GET",
@@ -51576,13 +52278,46 @@ var ENDPOINT_DEFINITIONS = {
51576
52278
  auth: "user",
51577
52279
  responseKind: "json"
51578
52280
  },
52281
+ exportMoneyPaymentsCsv: {
52282
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
52283
+ method: "GET",
52284
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
52285
+ errors: [],
52286
+ auth: "user",
52287
+ responseKind: "blob"
52288
+ },
52289
+ exportMoneyBreakdownsCsv: {
52290
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
52291
+ method: "GET",
52292
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
52293
+ errors: [],
52294
+ auth: "user",
52295
+ responseKind: "blob"
52296
+ },
52297
+ exportMoneyTimeSeriesCsv: {
52298
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
52299
+ method: "GET",
52300
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
52301
+ errors: [],
52302
+ auth: "user",
52303
+ responseKind: "blob"
52304
+ },
51579
52305
  listBookingActivity: {
51580
52306
  path: "/sites/{siteId}/bookings/activity",
51581
52307
  method: "GET",
51582
52308
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
52309
+ errors: [],
51583
52310
  auth: "user",
51584
52311
  responseKind: "json"
51585
52312
  },
52313
+ exportBookingActivityCsv: {
52314
+ path: "/sites/{siteId}/bookings/activity/export.csv",
52315
+ method: "GET",
52316
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
52317
+ errors: [],
52318
+ auth: "user",
52319
+ responseKind: "blob"
52320
+ },
51586
52321
  // Site logs
51587
52322
  listSiteActivityLogs: {
51588
52323
  path: "/sites/{siteId}/logs/activity",
@@ -51734,13 +52469,6 @@ var ENDPOINT_DEFINITIONS = {
51734
52469
  auth: "user",
51735
52470
  responseKind: "blob"
51736
52471
  },
51737
- exportSeoCsv: {
51738
- path: "/sites/{siteId}/seo/export",
51739
- method: "GET",
51740
- tags: ["site-{siteId}", "seo"],
51741
- auth: "user",
51742
- responseKind: "blob"
51743
- },
51744
52472
  // Admin site cost (for admin panel)
51745
52473
  adminSiteCost: {
51746
52474
  path: "/admin/sites/{siteId}/cost",
@@ -53042,6 +53770,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
53042
53770
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
53043
53771
  "missing_amount",
53044
53772
  "amount_exceeds_remaining",
53773
+ "credit_refunds_disabled",
53774
+ "missing_credit_customer",
53045
53775
  "deposit_refund_override_required",
53046
53776
  "refund_revoke_requires_full_line_refund",
53047
53777
  "unified_order_link_required"