@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
@@ -368,68 +368,6 @@ function toLocationCoordinates(value) {
368
368
  };
369
369
  }
370
370
 
371
- // ../core/src/participant-identity.ts
372
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
373
- participant_id: {
374
- field: "participant_id",
375
- role: "canonical_link",
376
- canonicalSource: "booking_participants.id",
377
- contractAction: "tighten_in_839",
378
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
379
- },
380
- display_name: {
381
- field: "display_name",
382
- role: "contextual_snapshot",
383
- canonicalSource: "booking_participants.display_name for live identity",
384
- contractAction: "retain_as_snapshot",
385
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
386
- },
387
- email: {
388
- field: "email",
389
- role: "contextual_snapshot",
390
- canonicalSource: "booking_participants.email_normalized for live email identity",
391
- contractAction: "retain_as_snapshot",
392
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
393
- },
394
- email_normalized: {
395
- field: "email_normalized",
396
- role: "contextual_snapshot",
397
- canonicalSource: "booking_participants.email_normalized for live email identity",
398
- contractAction: "retain_as_snapshot",
399
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
400
- },
401
- phone: {
402
- field: "phone",
403
- role: "contextual_snapshot",
404
- canonicalSource: "booking_participants.phone for live phone identity",
405
- contractAction: "retain_as_snapshot",
406
- notes: "Participation-time phone context. Live identity belongs to the participant row."
407
- },
408
- identity_state: {
409
- field: "identity_state",
410
- role: "materialization_state",
411
- canonicalSource: "booking_participants.identity_state for subject state",
412
- contractAction: "review_for_later_contract_cleanup",
413
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
414
- },
415
- event_attendee_guest_id: {
416
- field: "event_attendee_guest_id",
417
- role: "compatibility_projection",
418
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
419
- contractAction: "retain_as_projection",
420
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
421
- }
422
- };
423
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
424
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
425
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
426
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
427
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
428
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
429
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
430
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
431
- ];
432
-
433
371
  // ../media-core/src/typeGuards.ts
434
372
  function isRecord(value) {
435
373
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -2090,12 +2028,29 @@ function defineFrameCapability(capability) {
2090
2028
  function defineBlockDesignCapability(capability) {
2091
2029
  return {
2092
2030
  ...capability,
2093
- 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"]
2094
2036
  };
2095
2037
  }
2096
2038
 
2097
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
+ }
2098
2052
  function defineBlockAppearancePreset(preset2) {
2053
+ assertValidOptionGroups(preset2);
2099
2054
  return preset2;
2100
2055
  }
2101
2056
  function defineSiteChromeAppearancePreset(preset2) {
@@ -2108,13 +2063,122 @@ var appearancePresets = [
2108
2063
  target: "hero",
2109
2064
  label: "Immersive image hero",
2110
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
+ ],
2111
2173
  design: {
2112
2174
  sectionSurface: "hero-image",
2113
2175
  contentFrame: plainFrame,
2114
2176
  itemSurface: "none",
2115
2177
  transitionAfter: "soft-fade-short",
2116
2178
  emphasis: "high",
2117
- heroLegibility: "scrim-gradient"
2179
+ sectionHeight: "immersive",
2180
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
2181
+ imageSurfaceMotion: "fixed-frame"
2118
2182
  }
2119
2183
  }),
2120
2184
  defineBlockAppearancePreset({
@@ -2131,17 +2195,26 @@ var appearancePresets = [
2131
2195
  emphasis: "high"
2132
2196
  }
2133
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
+ }),
2134
2212
  defineBlockAppearancePreset({
2135
2213
  kind: "block-design",
2136
2214
  id: "offerings-calm-list",
2137
2215
  target: "offerings",
2138
2216
  label: "Calm offerings list",
2139
- blockKinds: [
2140
- "block.event-listing",
2141
- "block.event-calendar",
2142
- "block.event-spotlight",
2143
- "block.product-list"
2144
- ],
2217
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
2145
2218
  design: {
2146
2219
  sectionSurface: "muted-band",
2147
2220
  contentFrame: plainFrame,
@@ -2220,6 +2293,35 @@ var appearancePresets = [
2220
2293
  emphasis: "high"
2221
2294
  }
2222
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
+ }),
2223
2325
  defineBlockAppearancePreset({
2224
2326
  kind: "block-design",
2225
2327
  id: "faq-contained-help",
@@ -2248,6 +2350,20 @@ var appearancePresets = [
2248
2350
  emphasis: "medium"
2249
2351
  }
2250
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
+ }),
2251
2367
  defineBlockAppearancePreset({
2252
2368
  kind: "block-design",
2253
2369
  id: "cta-accent-band",
@@ -2267,9 +2383,33 @@ var appearancePresets = [
2267
2383
  id: "header-clean-base",
2268
2384
  target: "site-header",
2269
2385
  label: "Clean base header",
2270
- chrome: {
2271
- surface: "base",
2272
- 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"
2273
2413
  }
2274
2414
  }),
2275
2415
  defineSiteChromeAppearancePreset({
@@ -2277,10 +2417,31 @@ var appearancePresets = [
2277
2417
  id: "footer-muted-grounding",
2278
2418
  target: "site-footer",
2279
2419
  label: "Muted grounding footer",
2280
- chrome: {
2420
+ footer: {
2421
+ kind: "grounding",
2281
2422
  surface: "muted-band",
2282
2423
  emphasis: "low"
2283
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
+ }
2284
2445
  })
2285
2446
  ];
2286
2447
 
@@ -2950,6 +3111,111 @@ var pebble = defineButtonPersonality({
2950
3111
  }
2951
3112
  });
2952
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
+
2953
3219
  // ../theme-core/src/buttons/personalities/soft-pill.ts
2954
3220
  var softPill = defineButtonPersonality({
2955
3221
  id: "soft-pill",
@@ -3030,7 +3296,8 @@ var buttonPersonalities = [
3030
3296
  editorialLink,
3031
3297
  pebble,
3032
3298
  inkStamp,
3033
- brushedWash
3299
+ brushedWash,
3300
+ showtimePill
3034
3301
  ];
3035
3302
  var personalitiesById = new Map(
3036
3303
  buttonPersonalities.map((p) => [p.id, p])
@@ -5619,14 +5886,7 @@ var proseLinkStyleSchema = z19.object({
5619
5886
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
5620
5887
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
5621
5888
  });
5622
- var semanticSpacingSchema = z19.enum([
5623
- "none",
5624
- "compact",
5625
- "cozy",
5626
- "medium",
5627
- "comfortable",
5628
- "spacious"
5629
- ]);
5889
+ var semanticSpacingSchema = z19.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
5630
5890
  var boxRoundedSchema = z19.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
5631
5891
  var boxBackgroundOverlaySchema = z19.object({
5632
5892
  type: z19.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -5643,6 +5903,7 @@ var boxBackgroundSchema = z19.object({
5643
5903
  scale: z19.string().nullable().optional(),
5644
5904
  position: z19.string().nullable().optional(),
5645
5905
  opacity: z19.number().min(0).max(1).nullable().optional(),
5906
+ motion: z19.enum(["static", "fixed-frame"]).nullable().optional(),
5646
5907
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
5647
5908
  textColor: z19.string().nullable().optional(),
5648
5909
  headingColor: z19.string().nullable().optional()
@@ -5650,7 +5911,7 @@ var boxBackgroundSchema = z19.object({
5650
5911
  var sectionStylesOverrideSchema = z19.object({
5651
5912
  background: boxBackgroundSchema.nullable().optional(),
5652
5913
  spacing: semanticSpacingSchema.nullable().optional(),
5653
- minHeight: z19.enum(["none", "hero", "immersive"]).nullable().optional()
5914
+ minHeight: z19.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
5654
5915
  });
5655
5916
  var containerStylesOverrideSchema = z19.object({
5656
5917
  background: boxBackgroundSchema.nullable().optional(),
@@ -5669,7 +5930,8 @@ var cardStylesOverrideSchema = z19.object({
5669
5930
  border: cardBorderOverrideSchema.nullable().optional(),
5670
5931
  spacing: semanticSpacingSchema.nullable().optional(),
5671
5932
  raised: z19.boolean().nullable().optional(),
5672
- rounded: boxRoundedSchema.nullable().optional()
5933
+ rounded: boxRoundedSchema.nullable().optional(),
5934
+ treatment: z19.enum(["accent-quote"]).nullable().optional()
5673
5935
  });
5674
5936
  var blockStyleOverridesSchema = z19.object({
5675
5937
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -5744,15 +6006,7 @@ var inputStyle = z19.object({
5744
6006
  });
5745
6007
  var headerVariant = z19.enum(["classic", "centered", "transparent", "floating", "editorial"]);
5746
6008
  var headerPositioning = z19.enum(["static", "sticky", "fixed"]);
5747
- var headerNavStyle = z19.enum([
5748
- "minimal",
5749
- "underline",
5750
- "underline-grow",
5751
- "capsule",
5752
- "scale",
5753
- "frosted",
5754
- "solid"
5755
- ]);
6009
+ var headerNavStyle = z19.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
5756
6010
  var navFontWeight = z19.enum(["regular", "medium", "semibold", "bold"]);
5757
6011
  var headerMaxWidth = z19.enum(["container", "full"]);
5758
6012
  var headerContainerSchema = z19.object({
@@ -5806,6 +6060,7 @@ var dropdownStyleSchema = z19.object({
5806
6060
  // optional = no override (browser default)
5807
6061
  }).optional();
5808
6062
  var headerCtaGapSchema = z19.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
6063
+ var headerCtaTreatmentSchema = z19.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
5809
6064
  var navContainerSchema = z19.object({
5810
6065
  type: z19.enum(["none", "pill", "glass"]).default("none"),
5811
6066
  tint: z19.string().nullable().optional(),
@@ -5824,7 +6079,10 @@ var headerSchema = z19.object({
5824
6079
  shrinkOnScroll: z19.boolean(),
5825
6080
  maxWidth: headerMaxWidth,
5826
6081
  logoOverride: mediaSchema.nullable().optional(),
5827
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6082
+ background: headerBackgroundSchema.default({
6083
+ type: "color",
6084
+ color: "surface"
6085
+ }),
5828
6086
  textColor: z19.string().nullable().optional(),
5829
6087
  // Site title and general header text
5830
6088
  navStyle: headerNavStyle,
@@ -5844,6 +6102,13 @@ var headerSchema = z19.object({
5844
6102
  navLinkStyle: navLinkStyleSchema.optional(),
5845
6103
  // CTA button spacing (desktop left margin)
5846
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(),
5847
6112
  // Dropdown menu styling (nav dropdowns and mobile drawer)
5848
6113
  dropdownStyle: dropdownStyleSchema
5849
6114
  });
@@ -5900,7 +6165,10 @@ var footerSchema = z19.object({
5900
6165
  variant: footerVariant,
5901
6166
  maxWidth: footerMaxWidth,
5902
6167
  showLogoText: z19.boolean().optional(),
5903
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6168
+ background: headerBackgroundSchema.default({
6169
+ type: "color",
6170
+ color: "surface"
6171
+ }),
5904
6172
  // Footer nav styling (independent from header)
5905
6173
  navStyle: headerNavStyle.default("minimal"),
5906
6174
  navColor: z19.string().nullable().optional(),
@@ -5922,17 +6190,7 @@ var layoutSchema = z19.object({
5922
6190
  desktop: containerPaddingPresetSchema.optional()
5923
6191
  }).optional()
5924
6192
  }).optional();
5925
- var heroTypographySizeSchema = z19.enum([
5926
- "sm",
5927
- "base",
5928
- "lg",
5929
- "xl",
5930
- "2xl",
5931
- "3xl",
5932
- "4xl",
5933
- "5xl",
5934
- "6xl"
5935
- ]);
6193
+ var heroTypographySizeSchema = z19.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
5936
6194
  var heroTypographyLineHeightSchema = z19.enum(["tight", "snug", "normal", "relaxed"]);
5937
6195
  var heroResponsiveTypographySchema = z19.object({
5938
6196
  headlineSize: heroTypographySizeSchema.optional(),
@@ -5957,6 +6215,13 @@ var heroTypographySchema = z19.object({
5957
6215
  var heroSchema = z19.object({
5958
6216
  typography: heroTypographySchema.optional()
5959
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();
5960
6225
  var gradientsSchema = z19.object({
5961
6226
  button: z19.string().min(1).nullable().optional(),
5962
6227
  hero: z19.string().min(1).nullable().optional(),
@@ -5978,6 +6243,7 @@ var themeSchema = z19.object({
5978
6243
  gradients: gradientsSchema.optional(),
5979
6244
  layout: layoutSchema,
5980
6245
  hero: heroSchema,
6246
+ bodyText: bodyTextSchema,
5981
6247
  header: headerSchema,
5982
6248
  footer: footerSchema,
5983
6249
  buttons: buttonSystemSchema.optional(),
@@ -6001,10 +6267,7 @@ var themeSchema = z19.object({
6001
6267
  ).optional(),
6002
6268
  // Structured block-kind theme overrides (v1: typography prose-link style only)
6003
6269
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
6004
- blockOverrides: z19.record(
6005
- z19.string(),
6006
- blockThemeOverrideSchema
6007
- ).optional(),
6270
+ blockOverrides: z19.record(z19.string(), blockThemeOverrideSchema).optional(),
6008
6271
  // Structured custom CSS rules
6009
6272
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
6010
6273
  customCssRules: customCssRulesSchema,
@@ -6175,6 +6438,28 @@ var brandLedJewel = definePaletteVariant({
6175
6438
  { name: "border", hex: "#a8a29e" }
6176
6439
  ]
6177
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
+ });
6178
6463
 
6179
6464
  // ../theme-core/src/palette/variants/high-contrast.ts
6180
6465
  var highContrastInk = definePaletteVariant({
@@ -6386,6 +6671,7 @@ var paletteVariants = [
6386
6671
  brandLedCool,
6387
6672
  brandLedWarm,
6388
6673
  brandLedJewel,
6674
+ brandLedBurgundyGold,
6389
6675
  // Warm-neutral family
6390
6676
  warmNeutralClay,
6391
6677
  warmNeutralCream,
@@ -6461,7 +6747,8 @@ var curatedSiteStyleIdValues = [
6461
6747
  "site-style:quiet-luxury",
6462
6748
  "site-style:practical-services",
6463
6749
  "site-style:modern-wellness",
6464
- "site-style:bold-launch"
6750
+ "site-style:bold-launch",
6751
+ "site-style:south-west-twerk-school"
6465
6752
  ];
6466
6753
  var quietBudget = {
6467
6754
  accentDensity: "low",
@@ -6516,6 +6803,8 @@ function defineCuratedSiteStyle(input) {
6516
6803
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
6517
6804
  supportedTransitions: generatedDesignOptionCatalog.transitions
6518
6805
  },
6806
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
6807
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
6519
6808
  buttonPersonalityChoices: input.buttonPersonalityChoices,
6520
6809
  paletteVariantChoices: input.paletteVariantChoices
6521
6810
  };
@@ -6762,6 +7051,101 @@ var curatedSiteStyles = [
6762
7051
  paletteChoice("brand-led-jewel"),
6763
7052
  paletteChoice("brand-led-warm")
6764
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
+ ]
6765
7149
  })
6766
7150
  ];
6767
7151
  var curatedSiteStylesById = new Map(
@@ -6806,6 +7190,40 @@ var heroLegibilityStrategySchema = z21.enum([
6806
7190
  "scrim-gradient",
6807
7191
  "solid-panel"
6808
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"]);
6809
7227
  function uniqueNonEmpty(values) {
6810
7228
  const uniqueValues = [...new Set(values)];
6811
7229
  const firstValue = uniqueValues[0];
@@ -6844,7 +7262,11 @@ var blockDesignPlanSchema = z21.object({
6844
7262
  itemSurface: z21.enum(userDesignOptionCatalog.itemSurfaces),
6845
7263
  transitionAfter: z21.enum(userDesignOptionCatalog.transitions),
6846
7264
  emphasis: z21.enum(userDesignOptionCatalog.emphases),
6847
- heroLegibility: heroLegibilityStrategySchema.optional()
7265
+ sectionHeight: sectionHeightIntentSchema.optional(),
7266
+ heroLegibility: heroLegibilityStrategySchema.optional(),
7267
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7268
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7269
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
6848
7270
  }).strict();
6849
7271
  var styleAuthoritySchema = z21.discriminatedUnion("kind", [
6850
7272
  z21.object({
@@ -8374,6 +8796,7 @@ var SEMANTIC_SPACING_VALUES = [
8374
8796
  ];
8375
8797
  var SECTION_MIN_HEIGHT_VALUES = [
8376
8798
  "none",
8799
+ "banner",
8377
8800
  "hero",
8378
8801
  "immersive"
8379
8802
  ];
@@ -8401,6 +8824,7 @@ var CONTAINER_SPACING_MAP = {
8401
8824
  };
8402
8825
  var SECTION_MIN_HEIGHT_MAP = {
8403
8826
  none: "",
8827
+ banner: "rb-section-min-h-banner",
8404
8828
  hero: "rb-section-min-h-hero",
8405
8829
  immersive: "rb-section-min-h-immersive"
8406
8830
  };
@@ -9191,6 +9615,9 @@ var boxStylesCompositeTransform = {
9191
9615
  classes.push(roundedResult);
9192
9616
  }
9193
9617
  }
9618
+ if (input.treatment === "accent-quote") {
9619
+ classes.push("rb-card-treatment-accent-quote");
9620
+ }
9194
9621
  return classes.join(" ").trim() || "";
9195
9622
  }
9196
9623
  };
@@ -9288,7 +9715,7 @@ var sectionClassNameTransform = {
9288
9715
  minHeight = input.minHeight;
9289
9716
  } else if (process.env.NODE_ENV !== "production") {
9290
9717
  console.warn(
9291
- `[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.`
9292
9719
  );
9293
9720
  }
9294
9721
  }
@@ -9611,23 +10038,6 @@ function styledCard(children, opts, ...mods) {
9611
10038
  );
9612
10039
  }
9613
10040
 
9614
- // ../blocks/src/system/node/fragments/typography.ts
9615
- function mergeClassName(base, extra) {
9616
- return [base, extra ?? ""].filter(Boolean).join(" ");
9617
- }
9618
- function captionText(opts, ...mods) {
9619
- const {
9620
- as: asProp,
9621
- className: classNameProp,
9622
- color,
9623
- ...rest
9624
- } = opts ?? {};
9625
- const as = asProp ?? "p";
9626
- const className = mergeClassName("rb-caption", classNameProp);
9627
- const style = textColorStyle(color ?? "mutedText");
9628
- return text({ ...rest, as, className, style }, ...mods);
9629
- }
9630
-
9631
10041
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
9632
10042
  function joinClasses(...parts) {
9633
10043
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -10532,18 +10942,17 @@ function buildAttributionNodes() {
10532
10942
  const name = text(
10533
10943
  {
10534
10944
  as: "strong",
10535
- className: "rb-block",
10536
- style: textColorStyle("text")
10945
+ className: "rb-block"
10537
10946
  },
10538
10947
  bind("testimonial.content.name", { fallback: "Anonymous" })
10539
10948
  );
10540
- const jobTitle = captionText(
10541
- null,
10949
+ const jobTitle = text(
10950
+ { as: "p", className: "rb-caption" },
10542
10951
  when("testimonial.content.jobTitle"),
10543
10952
  bind("testimonial.content.jobTitle")
10544
10953
  );
10545
- const company = captionText(
10546
- null,
10954
+ const company = text(
10955
+ { as: "p", className: "rb-caption" },
10547
10956
  when("testimonial.content.company"),
10548
10957
  bind("testimonial.content.company")
10549
10958
  );
@@ -10577,8 +10986,7 @@ function buildTestimonialCard(...mods) {
10577
10986
  );
10578
10987
  const body = richText(
10579
10988
  {
10580
- className: "rb-prose rb-max-w-none",
10581
- style: textColorStyle("text")
10989
+ className: "rb-prose rb-max-w-none"
10582
10990
  },
10583
10991
  bind("testimonial.content.body"),
10584
10992
  when("testimonial.content.body")
@@ -12300,6 +12708,7 @@ function heroContentCard(children, gap) {
12300
12708
  return styledContainer({
12301
12709
  bindFrom: "_contentCardStyles",
12302
12710
  constrainWidth: false,
12711
+ baseClassName: "rb-relative rb-isolate",
12303
12712
  rootType: "stack",
12304
12713
  rootProps: {
12305
12714
  gap
@@ -12330,6 +12739,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
12330
12739
  function heroContainerStack(children, gap) {
12331
12740
  return styledContainer({
12332
12741
  rootType: "stack",
12742
+ baseClassName: "rb-relative rb-isolate",
12333
12743
  rootProps: {
12334
12744
  gap: "none",
12335
12745
  justify: {
@@ -13570,7 +13980,7 @@ function resolveHeroVerticalAlignment(content) {
13570
13980
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
13571
13981
  const sectionStyles = asPartialObject(content._sectionStyles);
13572
13982
  const minHeight = sectionStyles?.minHeight;
13573
- if (minHeight === "hero" || minHeight === "immersive") return "center";
13983
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
13574
13984
  const variant = resolveHeroVariant(content);
13575
13985
  if (variant === "split" || variant === "splitReverse") return "center";
13576
13986
  return "top";
@@ -14372,6 +14782,26 @@ var footerSplitNavSingleClassTransform = {
14372
14782
  ]);
14373
14783
  }
14374
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
+ };
14375
14805
  var footerLogoClassSchema = z33.object({
14376
14806
  base: z33.string().optional()
14377
14807
  });
@@ -14382,14 +14812,11 @@ var footerLogoClassTransform = {
14382
14812
  schema: footerLogoClassSchema,
14383
14813
  run: (value, options) => {
14384
14814
  const logo = asPartialObject(value);
14385
- const placement = logo?.placement ?? "right";
14386
14815
  const align = logo?.align ?? "end";
14387
14816
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
14388
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
14389
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";
14390
14818
  return joinClasses4([
14391
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",
14392
- orderClass,
14393
14820
  selfAlignClass,
14394
14821
  hiddenClass
14395
14822
  ]);
@@ -14444,6 +14871,7 @@ var layoutTransforms = [
14444
14871
  footerBottomBarContainerClassTransform,
14445
14872
  footerBottomBarStyleTransform,
14446
14873
  footerSplitNavSingleClassTransform,
14874
+ footerSplitMainClassTransform,
14447
14875
  footerLogoClassTransform,
14448
14876
  footerLogoMediaClassTransform,
14449
14877
  footerLogoTextVisibleTransform
@@ -14751,7 +15179,7 @@ var createNavRow = (className, align = "end") => navRow({
14751
15179
  var headerCta = ctaButton({
14752
15180
  basePath: "menu.ctaItem",
14753
15181
  whenPath: "menu.ctaItem.label",
14754
- variantPath: "menu.ctaItem.variant",
15182
+ variantPath: "$root.theme.header.ctaVariant",
14755
15183
  linkPath: "menu.ctaItem.link",
14756
15184
  sizeFallback: "sm",
14757
15185
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -14759,7 +15187,7 @@ var headerCta = ctaButton({
14759
15187
  var mobileCta = ctaButton({
14760
15188
  basePath: "menu.ctaItem",
14761
15189
  whenPath: "menu.ctaItem.label",
14762
- variantPath: "menu.ctaItem.variant",
15190
+ variantPath: "$root.theme.header.ctaVariant",
14763
15191
  linkPath: "menu.ctaItem.link",
14764
15192
  sizeFallback: "md",
14765
15193
  className: "nav-mobile-cta rb-w-full"
@@ -15220,7 +15648,13 @@ var splitFooterLayout = stack(
15220
15648
  [
15221
15649
  inline(
15222
15650
  {
15223
- 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
+ }
15224
15658
  },
15225
15659
  [
15226
15660
  stack(
@@ -17453,7 +17887,8 @@ var courseEntrySubrouteContextSchema = z45.union([
17453
17887
  run: z45.object({
17454
17888
  courseId: z45.string(),
17455
17889
  seriesId: z45.string(),
17456
- runSlug: z45.string()
17890
+ runSlug: z45.string(),
17891
+ runName: z45.string().nullable()
17457
17892
  })
17458
17893
  }),
17459
17894
  z45.object({
@@ -25267,6 +25702,34 @@ function panelCapable() {
25267
25702
  itemSurfaces: "unsupported"
25268
25703
  });
25269
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
+ }
25270
25733
  function plainItemsCapable() {
25271
25734
  return declareBlockDesignCapability({
25272
25735
  sectionSurfaces: "supported",
@@ -25383,7 +25846,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
25383
25846
  };
25384
25847
  }
25385
25848
  var systemBlockDefinitionsRaw = [
25386
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
25849
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
25387
25850
  flow: heroFlow,
25388
25851
  layoutProfiles: [
25389
25852
  layoutProfile({
@@ -25487,7 +25950,12 @@ var systemBlockDefinitionsRaw = [
25487
25950
  flow: siteChromeFlow,
25488
25951
  layoutProfiles: []
25489
25952
  })),
25490
- 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({
25491
25959
  flow: proofFlow,
25492
25960
  layoutProfiles: [
25493
25961
  layoutProfile({
@@ -25799,8 +26267,15 @@ function parseOpacity(value) {
25799
26267
  }
25800
26268
  return opacity <= 1 ? opacity : opacity / 100;
25801
26269
  }
25802
- function appendOptionalClasses(baseClassName, optionalClassName) {
25803
- 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(" ");
25804
26279
  }
25805
26280
  var resolveImageStyleTransform = {
25806
26281
  id: "background.resolveImageStyle",
@@ -25877,9 +26352,9 @@ var resolveImageClassNameTransform = {
25877
26352
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
25878
26353
  const position = isString(input.position) ? input.position.trim() : null;
25879
26354
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
25880
- return appendOptionalClasses(
26355
+ return appendBackgroundMediaClasses(
25881
26356
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
25882
- backgroundVideoMobileClassNames(input)
26357
+ input
25883
26358
  );
25884
26359
  }
25885
26360
  let needsAnchoring = false;
@@ -25892,18 +26367,18 @@ var resolveImageClassNameTransform = {
25892
26367
  }
25893
26368
  }
25894
26369
  if (!needsAnchoring) {
25895
- return appendOptionalClasses(
26370
+ return appendBackgroundMediaClasses(
25896
26371
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
25897
- backgroundVideoMobileClassNames(input)
26372
+ input
25898
26373
  );
25899
26374
  }
25900
26375
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
25901
26376
  const isCustom = position && !isPreset;
25902
26377
  if (isCustom) {
25903
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
26378
+ return appendBackgroundMediaClasses(baseClass, input);
25904
26379
  }
25905
26380
  const anchorClasses = getAnchorClasses(position);
25906
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
26381
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
25907
26382
  }
25908
26383
  };
25909
26384
  var resolveOverlayStyleTransform = {
@@ -33035,16 +33510,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
33035
33510
  };
33036
33511
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
33037
33512
  }
33038
- const textSize = configuredDropdownStyle?.textSize;
33039
- if (textSize) {
33040
- const textSizeMap = {
33041
- "xs": "0.75rem",
33042
- "sm": "0.875rem",
33043
- "base": "1rem",
33044
- "lg": "1.125rem"
33045
- };
33046
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
33047
- }
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]};`);
33048
33521
  if (additionalRules.length > 0) {
33049
33522
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
33050
33523
  return baseCSS + `
@@ -33333,12 +33806,10 @@ ${selector} .rb-container-full`;
33333
33806
  ${rootRules.join("\n ")}
33334
33807
  }`);
33335
33808
  if (containerPadding?.mobile) {
33336
- cssChunks.push(
33337
- `${containerSelector} {
33809
+ cssChunks.push(`${containerSelector} {
33338
33810
  padding-left: ${toPaddingValue(containerPadding.mobile)};
33339
33811
  padding-right: ${toPaddingValue(containerPadding.mobile)};
33340
- }`
33341
- );
33812
+ }`);
33342
33813
  }
33343
33814
  if (containerPadding?.tablet) {
33344
33815
  cssChunks.push(
@@ -33364,6 +33835,10 @@ ${selector} .rb-container-full`;
33364
33835
  if (heroTypographyCss) {
33365
33836
  cssChunks.push(heroTypographyCss);
33366
33837
  }
33838
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
33839
+ if (bodyTextTypographyCss) {
33840
+ cssChunks.push(bodyTextTypographyCss);
33841
+ }
33367
33842
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
33368
33843
  return cssChunks.join("\n\n");
33369
33844
  }
@@ -33376,6 +33851,9 @@ function toPaddingValue(preset2) {
33376
33851
  };
33377
33852
  return map[preset2];
33378
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
+ );
33379
33857
  function generateSiteStyleTransitionCss(themeId) {
33380
33858
  const selector = `:where([data-theme-scope="${themeId}"])`;
33381
33859
  return `${selector} [data-style-group^='site-style-transition-'] {
@@ -33443,21 +33921,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
33443
33921
 
33444
33922
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
33445
33923
  background: var(--site-style-transition-to);
33446
- clip-path: polygon(
33447
- 0 42%,
33448
- 10% 34%,
33449
- 21% 42%,
33450
- 34% 31%,
33451
- 48% 39%,
33452
- 63% 29%,
33453
- 78% 37%,
33454
- 90% 30%,
33455
- 100% 36%,
33456
- 100% 100%,
33457
- 0 100%
33458
- );
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%;
33459
33930
  }`;
33460
33931
  }
33932
+ function svgDataUrl(svg) {
33933
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
33934
+ }
33461
33935
  function generateHeroTypographyCss(themeId, theme) {
33462
33936
  const typography = theme.hero?.typography;
33463
33937
  if (!typography) return "";
@@ -33480,33 +33954,21 @@ function generateHeroTypographyCss(themeId, theme) {
33480
33954
  ${subheadlineRules.join("\n ")}
33481
33955
  }`);
33482
33956
  }
33483
- const microHeadlineRules = buildTypographyRules(
33484
- typography.microHeadlineSize,
33485
- typography.microHeadlineLineHeight
33486
- );
33957
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
33487
33958
  if (microHeadlineRules.length > 0) {
33488
33959
  chunks.push(`${microHeadlineSelector} {
33489
33960
  ${microHeadlineRules.join("\n ")}
33490
33961
  }`);
33491
33962
  }
33492
- const microSubheadlineRules = buildTypographyRules(
33493
- typography.microSubheadlineSize,
33494
- typography.microSubheadlineLineHeight
33495
- );
33963
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
33496
33964
  if (microSubheadlineRules.length > 0) {
33497
33965
  chunks.push(`${microSubheadlineSelector} {
33498
33966
  ${microSubheadlineRules.join("\n ")}
33499
33967
  }`);
33500
33968
  }
33501
33969
  if (typography.responsive?.tablet) {
33502
- const tabletHeadlineRules = buildTypographyRules(
33503
- typography.responsive.tablet.headlineSize,
33504
- typography.responsive.tablet.headlineLineHeight
33505
- );
33506
- const tabletSubheadlineRules = buildTypographyRules(
33507
- typography.responsive.tablet.subheadlineSize,
33508
- typography.responsive.tablet.subheadlineLineHeight
33509
- );
33970
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
33971
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
33510
33972
  const tabletChunks = [];
33511
33973
  if (tabletHeadlineRules.length > 0) {
33512
33974
  tabletChunks.push(`${headlineSelector} {
@@ -33525,14 +33987,8 @@ function generateHeroTypographyCss(themeId, theme) {
33525
33987
  }
33526
33988
  }
33527
33989
  if (typography.responsive?.mobile) {
33528
- const mobileHeadlineRules = buildTypographyRules(
33529
- typography.responsive.mobile.headlineSize,
33530
- typography.responsive.mobile.headlineLineHeight
33531
- );
33532
- const mobileSubheadlineRules = buildTypographyRules(
33533
- typography.responsive.mobile.subheadlineSize,
33534
- typography.responsive.mobile.subheadlineLineHeight
33535
- );
33990
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
33991
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
33536
33992
  const mobileChunks = [];
33537
33993
  if (mobileHeadlineRules.length > 0) {
33538
33994
  mobileChunks.push(`${headlineSelector} {
@@ -33562,6 +34018,27 @@ function buildTypographyRules(size, lineHeight) {
33562
34018
  }
33563
34019
  return rules;
33564
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
+ }
33565
34042
  function toHeroSize(size) {
33566
34043
  const map = {
33567
34044
  sm: "0.875rem",
@@ -33572,7 +34049,8 @@ function toHeroSize(size) {
33572
34049
  "3xl": "1.875rem",
33573
34050
  "4xl": "2.25rem",
33574
34051
  "5xl": "3rem",
33575
- "6xl": "3.75rem"
34052
+ "6xl": "3.75rem",
34053
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
33576
34054
  };
33577
34055
  return map[size];
33578
34056
  }
@@ -35894,12 +36372,16 @@ var containerResponsiveThemeCss = `/*
35894
36372
  .rb-h-full {
35895
36373
  height: 100%;
35896
36374
  }
36375
+ .rb-section-min-h-banner {
36376
+ min-height: clamp(16rem, 34svh, 24rem);
36377
+ }
35897
36378
  .rb-section-min-h-hero {
35898
36379
  min-height: clamp(32rem, 62svh, 44rem);
35899
36380
  }
35900
36381
  .rb-section-min-h-immersive {
35901
36382
  min-height: clamp(38rem, 78svh, 54rem);
35902
36383
  }
36384
+ .rb-section-min-h-banner > .rb-container,
35903
36385
  .rb-section-min-h-hero > .rb-container,
35904
36386
  .rb-section-min-h-immersive > .rb-container {
35905
36387
  min-height: inherit;
@@ -37009,6 +37491,19 @@ var containerResponsiveThemeCss = `/*
37009
37491
  .rb-object-contain {
37010
37492
  object-fit: contain;
37011
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
+ }
37012
37507
 
37013
37508
  /* Line clamp */
37014
37509
  .rb-line-clamp-2,
@@ -41519,13 +42014,13 @@ var containerResponsiveThemeCss = `/*
41519
42014
 
41520
42015
  /* Eyebrow - color only (typography via .rb-eyebrow) */
41521
42016
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
41522
- color: rgb(var(--tb-text));
42017
+ color: var(--section-text-color, rgb(var(--tb-text)));
41523
42018
  }
41524
42019
 
41525
42020
  /* Subheadline - supporting text below headline */
41526
42021
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
41527
42022
  font-size: 1.125rem;
41528
- color: rgb(var(--tb-text));
42023
+ color: var(--section-text-color, rgb(var(--tb-text)));
41529
42024
  }
41530
42025
 
41531
42026
  @container rb-site (min-width: 640px) {
@@ -41599,6 +42094,20 @@ var containerResponsiveThemeCss = `/*
41599
42094
  max-width: 60rem;
41600
42095
  }
41601
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
+
41602
42111
  /* Variant: Narrow (left-aligned, shorter line length) */
41603
42112
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
41604
42113
  max-width: 34rem;
@@ -42941,6 +43450,13 @@ var containerResponsiveThemeCss = `/*
42941
43450
  border-radius: var(--rb-block-radius);
42942
43451
  }
42943
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
+
42944
43460
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
42945
43461
  font-size: var(--rb-testimonial-quote-size);
42946
43462
  line-height: 1;
@@ -42949,6 +43465,12 @@ var containerResponsiveThemeCss = `/*
42949
43465
  color: rgb(var(--tb-primary));
42950
43466
  }
42951
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
+
42952
43474
 
42953
43475
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
42954
43476
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -47622,7 +48144,7 @@ var ENDPOINT_DEFINITIONS = {
47622
48144
  method: "GET",
47623
48145
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
47624
48146
  auth: "user",
47625
- responseKind: "text"
48147
+ responseKind: "blob"
47626
48148
  },
47627
48149
  getNewsletterSubscriber: {
47628
48150
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -47953,12 +48475,7 @@ var ENDPOINT_DEFINITIONS = {
47953
48475
  ],
47954
48476
  auth: "user",
47955
48477
  responseKind: "json",
47956
- errors: [
47957
- "validation:invalid_input",
47958
- "resource:not_found",
47959
- "resource:conflict",
47960
- "server:internal_error"
47961
- ]
48478
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
47962
48479
  },
47963
48480
  unpublishTeamMemberProfile: {
47964
48481
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -48211,6 +48728,13 @@ var ENDPOINT_DEFINITIONS = {
48211
48728
  auth: "user",
48212
48729
  responseKind: "json"
48213
48730
  },
48731
+ exportBookingAppointmentsCsv: {
48732
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
48733
+ method: "GET",
48734
+ auth: "user",
48735
+ errors: [],
48736
+ responseKind: "blob"
48737
+ },
48214
48738
  createAppointment: {
48215
48739
  path: "/sites/{siteId}/bookings/appointments",
48216
48740
  method: "POST",
@@ -48338,6 +48862,13 @@ var ENDPOINT_DEFINITIONS = {
48338
48862
  auth: "user",
48339
48863
  responseKind: "json"
48340
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
+ },
48341
48872
  listCourseWaitlist: {
48342
48873
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
48343
48874
  method: "GET",
@@ -49700,6 +50231,14 @@ var ENDPOINT_DEFINITIONS = {
49700
50231
  auth: "user",
49701
50232
  responseKind: "json"
49702
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
+ },
49703
50242
  getSeoQueries: {
49704
50243
  path: "/sites/{siteId}/seo/queries",
49705
50244
  method: "GET",
@@ -49708,6 +50247,14 @@ var ENDPOINT_DEFINITIONS = {
49708
50247
  auth: "user",
49709
50248
  responseKind: "json"
49710
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
+ },
49711
50258
  getPerformanceOverview: {
49712
50259
  path: "/sites/{siteId}/performance/overview",
49713
50260
  method: "GET",
@@ -49756,7 +50303,12 @@ var ENDPOINT_DEFINITIONS = {
49756
50303
  path: "/media/{assetId}/canonical-crop",
49757
50304
  method: "POST",
49758
50305
  tags: ["media", "media-{assetId}"],
49759
- 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
+ ],
49760
50312
  auth: "user",
49761
50313
  responseKind: "json"
49762
50314
  },
@@ -50088,7 +50640,7 @@ var ENDPOINT_DEFINITIONS = {
50088
50640
  method: "GET",
50089
50641
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
50090
50642
  auth: "user",
50091
- responseKind: "text"
50643
+ responseKind: "blob"
50092
50644
  },
50093
50645
  // Public submit
50094
50646
  submitForm: {
@@ -50971,6 +51523,14 @@ var ENDPOINT_DEFINITIONS = {
50971
51523
  auth: "user",
50972
51524
  responseKind: "json"
50973
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
+ },
50974
51534
  listEventSeriesWaitlist: {
50975
51535
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
50976
51536
  method: "GET",
@@ -51534,6 +52094,14 @@ var ENDPOINT_DEFINITIONS = {
51534
52094
  auth: "user",
51535
52095
  responseKind: "json"
51536
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
+ },
51537
52105
  createBookingCustomer: {
51538
52106
  path: "/sites/{siteId}/bookings/customers",
51539
52107
  method: "POST",
@@ -51561,6 +52129,21 @@ var ENDPOINT_DEFINITIONS = {
51561
52129
  "server:internal_error"
51562
52130
  ]
51563
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
+ },
51564
52147
  listCustomerPasses: {
51565
52148
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
51566
52149
  method: "GET",
@@ -51695,13 +52278,46 @@ var ENDPOINT_DEFINITIONS = {
51695
52278
  auth: "user",
51696
52279
  responseKind: "json"
51697
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
+ },
51698
52305
  listBookingActivity: {
51699
52306
  path: "/sites/{siteId}/bookings/activity",
51700
52307
  method: "GET",
51701
52308
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
52309
+ errors: [],
51702
52310
  auth: "user",
51703
52311
  responseKind: "json"
51704
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
+ },
51705
52321
  // Site logs
51706
52322
  listSiteActivityLogs: {
51707
52323
  path: "/sites/{siteId}/logs/activity",
@@ -51853,13 +52469,6 @@ var ENDPOINT_DEFINITIONS = {
51853
52469
  auth: "user",
51854
52470
  responseKind: "blob"
51855
52471
  },
51856
- exportSeoCsv: {
51857
- path: "/sites/{siteId}/seo/export",
51858
- method: "GET",
51859
- tags: ["site-{siteId}", "seo"],
51860
- auth: "user",
51861
- responseKind: "blob"
51862
- },
51863
52472
  // Admin site cost (for admin panel)
51864
52473
  adminSiteCost: {
51865
52474
  path: "/admin/sites/{siteId}/cost",
@@ -53161,6 +53770,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
53161
53770
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
53162
53771
  "missing_amount",
53163
53772
  "amount_exceeds_remaining",
53773
+ "credit_refunds_disabled",
53774
+ "missing_credit_customer",
53164
53775
  "deposit_refund_override_required",
53165
53776
  "refund_revoke_requires_full_line_refund",
53166
53777
  "unified_order_link_required"