@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
@@ -371,68 +371,6 @@ function toLocationCoordinates(value) {
371
371
  };
372
372
  }
373
373
 
374
- // ../core/src/participant-identity.ts
375
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
376
- participant_id: {
377
- field: "participant_id",
378
- role: "canonical_link",
379
- canonicalSource: "booking_participants.id",
380
- contractAction: "tighten_in_839",
381
- notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
382
- },
383
- display_name: {
384
- field: "display_name",
385
- role: "contextual_snapshot",
386
- canonicalSource: "booking_participants.display_name for live identity",
387
- contractAction: "retain_as_snapshot",
388
- notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
389
- },
390
- email: {
391
- field: "email",
392
- role: "contextual_snapshot",
393
- canonicalSource: "booking_participants.email_normalized for live email identity",
394
- contractAction: "retain_as_snapshot",
395
- notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
396
- },
397
- email_normalized: {
398
- field: "email_normalized",
399
- role: "contextual_snapshot",
400
- canonicalSource: "booking_participants.email_normalized for live email identity",
401
- contractAction: "retain_as_snapshot",
402
- notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
403
- },
404
- phone: {
405
- field: "phone",
406
- role: "contextual_snapshot",
407
- canonicalSource: "booking_participants.phone for live phone identity",
408
- contractAction: "retain_as_snapshot",
409
- notes: "Participation-time phone context. Live identity belongs to the participant row."
410
- },
411
- identity_state: {
412
- field: "identity_state",
413
- role: "materialization_state",
414
- canonicalSource: "booking_participants.identity_state for subject state",
415
- contractAction: "review_for_later_contract_cleanup",
416
- notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
417
- },
418
- event_attendee_guest_id: {
419
- field: "event_attendee_guest_id",
420
- role: "compatibility_projection",
421
- canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
422
- contractAction: "retain_as_projection",
423
- notes: "Compatibility FK for event guest read models. It is not person identity authority."
424
- }
425
- };
426
- var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
427
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
428
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
429
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
430
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
431
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
432
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
433
- PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
434
- ];
435
-
436
374
  // ../media-core/src/typeGuards.ts
437
375
  function isRecord(value) {
438
376
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -2093,12 +2031,29 @@ function defineFrameCapability(capability) {
2093
2031
  function defineBlockDesignCapability(capability) {
2094
2032
  return {
2095
2033
  ...capability,
2096
- kind: "designed"
2034
+ kind: "designed",
2035
+ sectionHeights: capability.sectionHeights ?? ["default"],
2036
+ imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
2037
+ imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
2038
+ testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"]
2097
2039
  };
2098
2040
  }
2099
2041
 
2100
2042
  // ../theme-core/src/site-styles/appearancePresets.ts
2043
+ function assertValidOptionGroups(preset2) {
2044
+ preset2.optionGroups?.forEach((group) => {
2045
+ const selectedOption = group.options.find(
2046
+ (option) => option.id === group.selectedOptionId
2047
+ );
2048
+ if (!selectedOption) {
2049
+ throw new Error(
2050
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2051
+ );
2052
+ }
2053
+ });
2054
+ }
2101
2055
  function defineBlockAppearancePreset(preset2) {
2056
+ assertValidOptionGroups(preset2);
2102
2057
  return preset2;
2103
2058
  }
2104
2059
  function defineSiteChromeAppearancePreset(preset2) {
@@ -2111,13 +2066,122 @@ var appearancePresets = [
2111
2066
  target: "hero",
2112
2067
  label: "Immersive image hero",
2113
2068
  blockKinds: ["block.hero"],
2069
+ constraints: {
2070
+ layoutFamilies: ["centered", "compact"]
2071
+ },
2072
+ design: {
2073
+ sectionSurface: "hero-image",
2074
+ contentFrame: plainFrame,
2075
+ itemSurface: "none",
2076
+ transitionAfter: "soft-fade-short",
2077
+ emphasis: "high",
2078
+ sectionHeight: "hero",
2079
+ imageSurfaceTreatment: { kind: "neutral-wash" }
2080
+ }
2081
+ }),
2082
+ defineBlockAppearancePreset({
2083
+ kind: "block-design",
2084
+ id: "hero-brand-scrim",
2085
+ target: "hero",
2086
+ label: "Brand scrim image hero",
2087
+ blockKinds: ["block.hero"],
2088
+ constraints: {
2089
+ layoutFamilies: ["centered", "compact"]
2090
+ },
2091
+ optionGroups: [
2092
+ {
2093
+ id: "image-surface-treatment",
2094
+ label: "Treatment",
2095
+ selectedOptionId: "brand-scrim-primary",
2096
+ options: [
2097
+ {
2098
+ id: "brand-scrim-primary",
2099
+ label: "Brand scrim",
2100
+ designPatch: {
2101
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2102
+ }
2103
+ },
2104
+ {
2105
+ id: "neutral-scrim",
2106
+ label: "Neutral scrim",
2107
+ designPatch: {
2108
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
2109
+ }
2110
+ }
2111
+ ]
2112
+ }
2113
+ ],
2114
+ layoutPatches: [
2115
+ {
2116
+ constraints: {
2117
+ layoutVariantKeys: ["micro"]
2118
+ },
2119
+ designPatch: {
2120
+ sectionHeight: "banner"
2121
+ }
2122
+ }
2123
+ ],
2124
+ design: {
2125
+ sectionSurface: "hero-image",
2126
+ contentFrame: plainFrame,
2127
+ itemSurface: "none",
2128
+ transitionAfter: "soft-fade-short",
2129
+ emphasis: "high",
2130
+ sectionHeight: "immersive",
2131
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2132
+ }
2133
+ }),
2134
+ defineBlockAppearancePreset({
2135
+ kind: "block-design",
2136
+ id: "hero-brand-scrim-fixed-frame",
2137
+ target: "hero",
2138
+ label: "Fixed-frame brand scrim hero",
2139
+ blockKinds: ["block.hero"],
2140
+ constraints: {
2141
+ layoutFamilies: ["centered", "compact"]
2142
+ },
2143
+ optionGroups: [
2144
+ {
2145
+ id: "image-surface-treatment",
2146
+ label: "Treatment",
2147
+ selectedOptionId: "brand-scrim-primary",
2148
+ options: [
2149
+ {
2150
+ id: "brand-scrim-primary",
2151
+ label: "Brand scrim",
2152
+ designPatch: {
2153
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
2154
+ }
2155
+ },
2156
+ {
2157
+ id: "neutral-scrim",
2158
+ label: "Neutral scrim",
2159
+ designPatch: {
2160
+ imageSurfaceTreatment: { kind: "neutral-scrim" }
2161
+ }
2162
+ }
2163
+ ]
2164
+ }
2165
+ ],
2166
+ layoutPatches: [
2167
+ {
2168
+ constraints: {
2169
+ layoutVariantKeys: ["micro"]
2170
+ },
2171
+ designPatch: {
2172
+ sectionHeight: "banner"
2173
+ }
2174
+ }
2175
+ ],
2114
2176
  design: {
2115
2177
  sectionSurface: "hero-image",
2116
2178
  contentFrame: plainFrame,
2117
2179
  itemSurface: "none",
2118
2180
  transitionAfter: "soft-fade-short",
2119
2181
  emphasis: "high",
2120
- heroLegibility: "scrim-gradient"
2182
+ sectionHeight: "immersive",
2183
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
2184
+ imageSurfaceMotion: "fixed-frame"
2121
2185
  }
2122
2186
  }),
2123
2187
  defineBlockAppearancePreset({
@@ -2134,17 +2198,26 @@ var appearancePresets = [
2134
2198
  emphasis: "high"
2135
2199
  }
2136
2200
  }),
2201
+ defineBlockAppearancePreset({
2202
+ kind: "block-design",
2203
+ id: "body-text-editorial-intro",
2204
+ target: "body-text",
2205
+ label: "Editorial intro copy",
2206
+ blockKinds: ["block.body-text"],
2207
+ design: {
2208
+ sectionSurface: "base",
2209
+ contentFrame: plainFrame,
2210
+ itemSurface: "none",
2211
+ transitionAfter: "soft-fade-short",
2212
+ emphasis: "high"
2213
+ }
2214
+ }),
2137
2215
  defineBlockAppearancePreset({
2138
2216
  kind: "block-design",
2139
2217
  id: "offerings-calm-list",
2140
2218
  target: "offerings",
2141
2219
  label: "Calm offerings list",
2142
- blockKinds: [
2143
- "block.event-listing",
2144
- "block.event-calendar",
2145
- "block.event-spotlight",
2146
- "block.product-list"
2147
- ],
2220
+ blockKinds: ["block.event-listing", "block.event-calendar", "block.event-spotlight", "block.product-list"],
2148
2221
  design: {
2149
2222
  sectionSurface: "muted-band",
2150
2223
  contentFrame: plainFrame,
@@ -2223,6 +2296,35 @@ var appearancePresets = [
2223
2296
  emphasis: "high"
2224
2297
  }
2225
2298
  }),
2299
+ defineBlockAppearancePreset({
2300
+ kind: "block-design",
2301
+ id: "testimonials-dark-proof",
2302
+ target: "testimonials",
2303
+ label: "Dark proof panel",
2304
+ blockKinds: ["block.testimonials"],
2305
+ design: {
2306
+ sectionSurface: "accent-band",
2307
+ contentFrame: panelFrame("raised"),
2308
+ itemSurface: "raised",
2309
+ transitionAfter: "soft-fade-short",
2310
+ emphasis: "high"
2311
+ }
2312
+ }),
2313
+ defineBlockAppearancePreset({
2314
+ kind: "block-design",
2315
+ id: "testimonials-accent-quote-proof",
2316
+ target: "testimonials",
2317
+ label: "Accent quote proof",
2318
+ blockKinds: ["block.testimonials"],
2319
+ design: {
2320
+ sectionSurface: "accent-band",
2321
+ contentFrame: plainFrame,
2322
+ itemSurface: "raised",
2323
+ transitionAfter: "soft-fade-short",
2324
+ emphasis: "high",
2325
+ testimonialCardTreatment: "accent-quote"
2326
+ }
2327
+ }),
2226
2328
  defineBlockAppearancePreset({
2227
2329
  kind: "block-design",
2228
2330
  id: "faq-contained-help",
@@ -2251,6 +2353,20 @@ var appearancePresets = [
2251
2353
  emphasis: "medium"
2252
2354
  }
2253
2355
  }),
2356
+ defineBlockAppearancePreset({
2357
+ kind: "block-design",
2358
+ id: "contact-form-dark-card",
2359
+ target: "contact-form",
2360
+ label: "Dark form card",
2361
+ blockKinds: ["block.form"],
2362
+ design: {
2363
+ sectionSurface: "accent-band",
2364
+ contentFrame: panelFrame("raised"),
2365
+ itemSurface: "none",
2366
+ transitionAfter: "soft-fade-short",
2367
+ emphasis: "high"
2368
+ }
2369
+ }),
2254
2370
  defineBlockAppearancePreset({
2255
2371
  kind: "block-design",
2256
2372
  id: "cta-accent-band",
@@ -2270,9 +2386,33 @@ var appearancePresets = [
2270
2386
  id: "header-clean-base",
2271
2387
  target: "site-header",
2272
2388
  label: "Clean base header",
2273
- chrome: {
2274
- surface: "base",
2275
- emphasis: "medium"
2389
+ header: {
2390
+ surface: {
2391
+ kind: "neutral-solid",
2392
+ token: "surface",
2393
+ textColorToken: "text"
2394
+ },
2395
+ navTreatment: "minimal",
2396
+ dropdownTreatment: "surface",
2397
+ ctaTreatment: "default",
2398
+ behavior: "default"
2399
+ }
2400
+ }),
2401
+ defineSiteChromeAppearancePreset({
2402
+ kind: "site-chrome",
2403
+ id: "site-header-brand-solid-inverted-cta",
2404
+ target: "site-header",
2405
+ label: "Brand solid header with inverted CTA",
2406
+ header: {
2407
+ surface: {
2408
+ kind: "brand-solid",
2409
+ token: "primary",
2410
+ textColorToken: "primaryForeground"
2411
+ },
2412
+ navTreatment: "uppercase-underline",
2413
+ dropdownTreatment: "matched-solid",
2414
+ ctaTreatment: "inverted",
2415
+ behavior: "sticky-shrink"
2276
2416
  }
2277
2417
  }),
2278
2418
  defineSiteChromeAppearancePreset({
@@ -2280,10 +2420,31 @@ var appearancePresets = [
2280
2420
  id: "footer-muted-grounding",
2281
2421
  target: "site-footer",
2282
2422
  label: "Muted grounding footer",
2283
- chrome: {
2423
+ footer: {
2424
+ kind: "grounding",
2284
2425
  surface: "muted-band",
2285
2426
  emphasis: "low"
2286
2427
  }
2428
+ }),
2429
+ defineSiteChromeAppearancePreset({
2430
+ kind: "site-chrome",
2431
+ id: "site-footer-brand-two-band",
2432
+ target: "site-footer",
2433
+ label: "Two-band brand footer",
2434
+ footer: {
2435
+ kind: "brand-two-band",
2436
+ surface: {
2437
+ token: "primary",
2438
+ shade: "800",
2439
+ textColorToken: "primaryForeground"
2440
+ },
2441
+ bottomBand: {
2442
+ token: "primary",
2443
+ shade: "900",
2444
+ textColorToken: "primaryForeground"
2445
+ },
2446
+ emphasis: "high"
2447
+ }
2287
2448
  })
2288
2449
  ];
2289
2450
 
@@ -2953,6 +3114,111 @@ var pebble = defineButtonPersonality({
2953
3114
  }
2954
3115
  });
2955
3116
 
3117
+ // ../theme-core/src/buttons/personalities/showtime-pill.ts
3118
+ var showtimePill = defineButtonPersonality({
3119
+ id: "showtime-pill",
3120
+ name: "Showtime Pill",
3121
+ description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
3122
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "modern" },
3123
+ buttonSystem: {
3124
+ global: {
3125
+ cornerStyle: "pill",
3126
+ shadow: "low",
3127
+ textTransform: "uppercase",
3128
+ fontWeight: 700,
3129
+ borderWidth: 2,
3130
+ hoverTransform: "lift",
3131
+ hoverColor: "darken",
3132
+ typography: "body",
3133
+ paddingPreset: "spacious",
3134
+ italic: false
3135
+ },
3136
+ sizes: {
3137
+ sm: { padding: "0.625rem 1.25rem", fontSize: "0.875rem" },
3138
+ md: { padding: "0.875rem 1.75rem", fontSize: "1rem" },
3139
+ lg: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" },
3140
+ xl: { padding: "1.125rem 2.25rem", fontSize: "1.125rem" }
3141
+ },
3142
+ variants: [
3143
+ {
3144
+ id: "primary",
3145
+ name: "Primary",
3146
+ enabled: true,
3147
+ priority: 1,
3148
+ background: { type: "solid", colorToken: "primary" },
3149
+ textColorToken: "background",
3150
+ borderRadius: "rounded-full",
3151
+ effects: {
3152
+ hover: [{ effectId: "pop" }]
3153
+ }
3154
+ },
3155
+ {
3156
+ id: "secondary",
3157
+ name: "Secondary",
3158
+ enabled: true,
3159
+ priority: 2,
3160
+ background: { type: "transparent" },
3161
+ textColorToken: "primary",
3162
+ borderRadius: "rounded-full",
3163
+ border: { widthClass: "border-2", colorToken: "primary" },
3164
+ effects: {
3165
+ hover: [{ effectId: "pop" }]
3166
+ }
3167
+ },
3168
+ {
3169
+ id: "hero",
3170
+ name: "Hero",
3171
+ enabled: true,
3172
+ priority: 1,
3173
+ background: { type: "solid", colorToken: "secondary" },
3174
+ textColorToken: "primary",
3175
+ borderRadius: "rounded-full",
3176
+ effects: {
3177
+ hover: [{ effectId: "pop" }]
3178
+ }
3179
+ },
3180
+ {
3181
+ id: "header",
3182
+ name: "Header",
3183
+ enabled: true,
3184
+ priority: 2,
3185
+ background: { type: "solid", colorToken: "background" },
3186
+ textColorToken: "primary",
3187
+ borderRadius: "rounded-full",
3188
+ border: { widthClass: "border-2", colorToken: "primary" },
3189
+ effects: {
3190
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3191
+ }
3192
+ },
3193
+ {
3194
+ id: "outline",
3195
+ name: "Outline",
3196
+ enabled: true,
3197
+ priority: 3,
3198
+ background: { type: "transparent" },
3199
+ textColorToken: "primary",
3200
+ borderRadius: "rounded-full",
3201
+ border: { widthClass: "border-2", colorToken: "primary" },
3202
+ effects: {
3203
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
3204
+ }
3205
+ },
3206
+ {
3207
+ id: "ghost",
3208
+ name: "Ghost",
3209
+ enabled: true,
3210
+ priority: 3,
3211
+ background: { type: "transparent" },
3212
+ textColorToken: "primary",
3213
+ borderRadius: "rounded-full",
3214
+ effects: {
3215
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3216
+ }
3217
+ }
3218
+ ]
3219
+ }
3220
+ });
3221
+
2956
3222
  // ../theme-core/src/buttons/personalities/soft-pill.ts
2957
3223
  var softPill = defineButtonPersonality({
2958
3224
  id: "soft-pill",
@@ -3033,7 +3299,8 @@ var buttonPersonalities = [
3033
3299
  editorialLink,
3034
3300
  pebble,
3035
3301
  inkStamp,
3036
- brushedWash
3302
+ brushedWash,
3303
+ showtimePill
3037
3304
  ];
3038
3305
  var personalitiesById = new Map(
3039
3306
  buttonPersonalities.map((p) => [p.id, p])
@@ -5622,14 +5889,7 @@ var proseLinkStyleSchema = z19.object({
5622
5889
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
5623
5890
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
5624
5891
  });
5625
- var semanticSpacingSchema = z19.enum([
5626
- "none",
5627
- "compact",
5628
- "cozy",
5629
- "medium",
5630
- "comfortable",
5631
- "spacious"
5632
- ]);
5892
+ var semanticSpacingSchema = z19.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
5633
5893
  var boxRoundedSchema = z19.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
5634
5894
  var boxBackgroundOverlaySchema = z19.object({
5635
5895
  type: z19.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -5646,6 +5906,7 @@ var boxBackgroundSchema = z19.object({
5646
5906
  scale: z19.string().nullable().optional(),
5647
5907
  position: z19.string().nullable().optional(),
5648
5908
  opacity: z19.number().min(0).max(1).nullable().optional(),
5909
+ motion: z19.enum(["static", "fixed-frame"]).nullable().optional(),
5649
5910
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
5650
5911
  textColor: z19.string().nullable().optional(),
5651
5912
  headingColor: z19.string().nullable().optional()
@@ -5653,7 +5914,7 @@ var boxBackgroundSchema = z19.object({
5653
5914
  var sectionStylesOverrideSchema = z19.object({
5654
5915
  background: boxBackgroundSchema.nullable().optional(),
5655
5916
  spacing: semanticSpacingSchema.nullable().optional(),
5656
- minHeight: z19.enum(["none", "hero", "immersive"]).nullable().optional()
5917
+ minHeight: z19.enum(["none", "banner", "hero", "immersive"]).nullable().optional()
5657
5918
  });
5658
5919
  var containerStylesOverrideSchema = z19.object({
5659
5920
  background: boxBackgroundSchema.nullable().optional(),
@@ -5672,7 +5933,8 @@ var cardStylesOverrideSchema = z19.object({
5672
5933
  border: cardBorderOverrideSchema.nullable().optional(),
5673
5934
  spacing: semanticSpacingSchema.nullable().optional(),
5674
5935
  raised: z19.boolean().nullable().optional(),
5675
- rounded: boxRoundedSchema.nullable().optional()
5936
+ rounded: boxRoundedSchema.nullable().optional(),
5937
+ treatment: z19.enum(["accent-quote"]).nullable().optional()
5676
5938
  });
5677
5939
  var blockStyleOverridesSchema = z19.object({
5678
5940
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
@@ -5747,15 +6009,7 @@ var inputStyle = z19.object({
5747
6009
  });
5748
6010
  var headerVariant = z19.enum(["classic", "centered", "transparent", "floating", "editorial"]);
5749
6011
  var headerPositioning = z19.enum(["static", "sticky", "fixed"]);
5750
- var headerNavStyle = z19.enum([
5751
- "minimal",
5752
- "underline",
5753
- "underline-grow",
5754
- "capsule",
5755
- "scale",
5756
- "frosted",
5757
- "solid"
5758
- ]);
6012
+ var headerNavStyle = z19.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
5759
6013
  var navFontWeight = z19.enum(["regular", "medium", "semibold", "bold"]);
5760
6014
  var headerMaxWidth = z19.enum(["container", "full"]);
5761
6015
  var headerContainerSchema = z19.object({
@@ -5809,6 +6063,7 @@ var dropdownStyleSchema = z19.object({
5809
6063
  // optional = no override (browser default)
5810
6064
  }).optional();
5811
6065
  var headerCtaGapSchema = z19.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
6066
+ var headerCtaTreatmentSchema = z19.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
5812
6067
  var navContainerSchema = z19.object({
5813
6068
  type: z19.enum(["none", "pill", "glass"]).default("none"),
5814
6069
  tint: z19.string().nullable().optional(),
@@ -5827,7 +6082,10 @@ var headerSchema = z19.object({
5827
6082
  shrinkOnScroll: z19.boolean(),
5828
6083
  maxWidth: headerMaxWidth,
5829
6084
  logoOverride: mediaSchema.nullable().optional(),
5830
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6085
+ background: headerBackgroundSchema.default({
6086
+ type: "color",
6087
+ color: "surface"
6088
+ }),
5831
6089
  textColor: z19.string().nullable().optional(),
5832
6090
  // Site title and general header text
5833
6091
  navStyle: headerNavStyle,
@@ -5847,6 +6105,13 @@ var headerSchema = z19.object({
5847
6105
  navLinkStyle: navLinkStyleSchema.optional(),
5848
6106
  // CTA button spacing (desktop left margin)
5849
6107
  ctaGap: headerCtaGapSchema.optional(),
6108
+ // Semantic CTA treatment for header/nav CTA buttons. The Theme V2 compiler
6109
+ // materializes this to ctaVariant against the active button personality.
6110
+ ctaTreatment: headerCtaTreatmentSchema.optional(),
6111
+ // Optional theme-level CTA variant for header/nav CTA buttons.
6112
+ // Internal runtime bridge for the block renderer; prefer ctaTreatment in
6113
+ // authored Theme V2 concepts.
6114
+ ctaVariant: z19.string().min(1).optional(),
5850
6115
  // Dropdown menu styling (nav dropdowns and mobile drawer)
5851
6116
  dropdownStyle: dropdownStyleSchema
5852
6117
  });
@@ -5903,7 +6168,10 @@ var footerSchema = z19.object({
5903
6168
  variant: footerVariant,
5904
6169
  maxWidth: footerMaxWidth,
5905
6170
  showLogoText: z19.boolean().optional(),
5906
- background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
6171
+ background: headerBackgroundSchema.default({
6172
+ type: "color",
6173
+ color: "surface"
6174
+ }),
5907
6175
  // Footer nav styling (independent from header)
5908
6176
  navStyle: headerNavStyle.default("minimal"),
5909
6177
  navColor: z19.string().nullable().optional(),
@@ -5925,17 +6193,7 @@ var layoutSchema = z19.object({
5925
6193
  desktop: containerPaddingPresetSchema.optional()
5926
6194
  }).optional()
5927
6195
  }).optional();
5928
- var heroTypographySizeSchema = z19.enum([
5929
- "sm",
5930
- "base",
5931
- "lg",
5932
- "xl",
5933
- "2xl",
5934
- "3xl",
5935
- "4xl",
5936
- "5xl",
5937
- "6xl"
5938
- ]);
6196
+ var heroTypographySizeSchema = z19.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
5939
6197
  var heroTypographyLineHeightSchema = z19.enum(["tight", "snug", "normal", "relaxed"]);
5940
6198
  var heroResponsiveTypographySchema = z19.object({
5941
6199
  headlineSize: heroTypographySizeSchema.optional(),
@@ -5960,6 +6218,13 @@ var heroTypographySchema = z19.object({
5960
6218
  var heroSchema = z19.object({
5961
6219
  typography: heroTypographySchema.optional()
5962
6220
  }).optional();
6221
+ var bodyTextIntroTypographySizeSchema = z19.enum(["default", "editorial"]);
6222
+ var bodyTextSchema = z19.object({
6223
+ intro: z19.object({
6224
+ paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
6225
+ headingSize: bodyTextIntroTypographySizeSchema.optional()
6226
+ }).optional()
6227
+ }).optional();
5963
6228
  var gradientsSchema = z19.object({
5964
6229
  button: z19.string().min(1).nullable().optional(),
5965
6230
  hero: z19.string().min(1).nullable().optional(),
@@ -5981,6 +6246,7 @@ var themeSchema = z19.object({
5981
6246
  gradients: gradientsSchema.optional(),
5982
6247
  layout: layoutSchema,
5983
6248
  hero: heroSchema,
6249
+ bodyText: bodyTextSchema,
5984
6250
  header: headerSchema,
5985
6251
  footer: footerSchema,
5986
6252
  buttons: buttonSystemSchema.optional(),
@@ -6004,10 +6270,7 @@ var themeSchema = z19.object({
6004
6270
  ).optional(),
6005
6271
  // Structured block-kind theme overrides (v1: typography prose-link style only)
6006
6272
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
6007
- blockOverrides: z19.record(
6008
- z19.string(),
6009
- blockThemeOverrideSchema
6010
- ).optional(),
6273
+ blockOverrides: z19.record(z19.string(), blockThemeOverrideSchema).optional(),
6011
6274
  // Structured custom CSS rules
6012
6275
  // Validated, scoped, and safe by construction - no @import, remote url(), or global selectors
6013
6276
  customCssRules: customCssRulesSchema,
@@ -6178,6 +6441,28 @@ var brandLedJewel = definePaletteVariant({
6178
6441
  { name: "border", hex: "#a8a29e" }
6179
6442
  ]
6180
6443
  });
6444
+ var brandLedBurgundyGold = definePaletteVariant({
6445
+ id: "brand-led-burgundy-gold",
6446
+ name: "Brand-led \u2014 Burgundy Gold",
6447
+ description: "Deep burgundy with warm gold accents and soft neutral grounds.",
6448
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
6449
+ mode: "light",
6450
+ colors: [
6451
+ { name: "primary", hex: "#7c2e38" },
6452
+ { name: "secondary", hex: "#d4af37" },
6453
+ { name: "accent", hex: "#b8e19a" },
6454
+ { name: "success", hex: "#10b981" },
6455
+ { name: "warning", hex: "#f59e0b" },
6456
+ { name: "destructive", hex: "#ef4444" },
6457
+ { name: "background", hex: "#f1dfd0" },
6458
+ { name: "surface", hex: "#f5e6db" },
6459
+ { name: "surfaceAlt", hex: "#f8ece3" },
6460
+ { name: "muted", hex: "#c9b8a8" },
6461
+ { name: "text", hex: "#400000" },
6462
+ { name: "primaryForeground", hex: "#ffffff" },
6463
+ { name: "border", hex: "#c9b8a8" }
6464
+ ]
6465
+ });
6181
6466
 
6182
6467
  // ../theme-core/src/palette/variants/high-contrast.ts
6183
6468
  var highContrastInk = definePaletteVariant({
@@ -6389,6 +6674,7 @@ var paletteVariants = [
6389
6674
  brandLedCool,
6390
6675
  brandLedWarm,
6391
6676
  brandLedJewel,
6677
+ brandLedBurgundyGold,
6392
6678
  // Warm-neutral family
6393
6679
  warmNeutralClay,
6394
6680
  warmNeutralCream,
@@ -6464,7 +6750,8 @@ var curatedSiteStyleIdValues = [
6464
6750
  "site-style:quiet-luxury",
6465
6751
  "site-style:practical-services",
6466
6752
  "site-style:modern-wellness",
6467
- "site-style:bold-launch"
6753
+ "site-style:bold-launch",
6754
+ "site-style:south-west-twerk-school"
6468
6755
  ];
6469
6756
  var quietBudget = {
6470
6757
  accentDensity: "low",
@@ -6519,6 +6806,8 @@ function defineCuratedSiteStyle(input) {
6519
6806
  supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
6520
6807
  supportedTransitions: generatedDesignOptionCatalog.transitions
6521
6808
  },
6809
+ ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
6810
+ recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
6522
6811
  buttonPersonalityChoices: input.buttonPersonalityChoices,
6523
6812
  paletteVariantChoices: input.paletteVariantChoices
6524
6813
  };
@@ -6765,6 +7054,101 @@ var curatedSiteStyles = [
6765
7054
  paletteChoice("brand-led-jewel"),
6766
7055
  paletteChoice("brand-led-warm")
6767
7056
  ]
7057
+ }),
7058
+ defineCuratedSiteStyle({
7059
+ id: "site-style:south-west-twerk-school",
7060
+ name: "South West Twerk School",
7061
+ description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
7062
+ 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.",
7063
+ selectionKeywords: [
7064
+ "dance",
7065
+ "classes",
7066
+ "workshop",
7067
+ "school",
7068
+ "movement",
7069
+ "performance",
7070
+ "community"
7071
+ ],
7072
+ tokenRecipes: {
7073
+ palette: "brand-led",
7074
+ contrast: "maximum",
7075
+ radius: "soft",
7076
+ shadow: "layered",
7077
+ typography: "clean-sans",
7078
+ spacing: "airy",
7079
+ motion: "expressive"
7080
+ },
7081
+ compositionBudget: expressiveBudget,
7082
+ themeOverrides: {
7083
+ typography: {
7084
+ body: {
7085
+ family: "Manrope, system-ui, sans-serif",
7086
+ size: "lg",
7087
+ weight: "regular",
7088
+ lineHeight: "relaxed",
7089
+ letterSpacing: "normal"
7090
+ },
7091
+ headings: {
7092
+ default: {
7093
+ family: '"TAN - PEARL", sans-serif',
7094
+ weight: "bold",
7095
+ lineHeight: "normal",
7096
+ letterSpacing: "tight",
7097
+ colorToken: "primary",
7098
+ italic: null,
7099
+ case: null
7100
+ },
7101
+ h1: {
7102
+ size: "xl",
7103
+ weight: "bold",
7104
+ lineHeight: "normal",
7105
+ letterSpacing: "tight",
7106
+ italic: null
7107
+ },
7108
+ h2: {
7109
+ size: "lg",
7110
+ weight: "bold",
7111
+ lineHeight: "normal",
7112
+ letterSpacing: "normal",
7113
+ italic: null
7114
+ },
7115
+ h3: {
7116
+ size: "md",
7117
+ weight: "bold",
7118
+ lineHeight: "normal",
7119
+ letterSpacing: "normal",
7120
+ italic: null
7121
+ }
7122
+ },
7123
+ scale: "balanced"
7124
+ },
7125
+ bodyText: {
7126
+ intro: {
7127
+ paragraphSize: "editorial",
7128
+ headingSize: "editorial"
7129
+ }
7130
+ }
7131
+ },
7132
+ recommendedAppearancePresetIds: [
7133
+ "site-header-brand-solid-inverted-cta",
7134
+ "site-footer-brand-two-band",
7135
+ "hero-brand-scrim-fixed-frame",
7136
+ "body-text-editorial-intro",
7137
+ "testimonials-accent-quote-proof",
7138
+ "contact-form-dark-card"
7139
+ ],
7140
+ buttonPersonalityChoices: [
7141
+ buttonChoice("showtime-pill"),
7142
+ buttonChoice("confident-chip"),
7143
+ buttonChoice("ink-stamp"),
7144
+ buttonChoice("brushed-wash")
7145
+ ],
7146
+ paletteVariantChoices: [
7147
+ paletteChoice("brand-led-burgundy-gold"),
7148
+ paletteChoice("brand-led-jewel"),
7149
+ paletteChoice("brand-led-warm"),
7150
+ paletteChoice("high-contrast-ink")
7151
+ ]
6768
7152
  })
6769
7153
  ];
6770
7154
  var curatedSiteStylesById = new Map(
@@ -6809,6 +7193,40 @@ var heroLegibilityStrategySchema = z21.enum([
6809
7193
  "scrim-gradient",
6810
7194
  "solid-panel"
6811
7195
  ]);
7196
+ var sectionHeightIntentSchema = z21.enum([
7197
+ "default",
7198
+ "banner",
7199
+ "hero",
7200
+ "immersive"
7201
+ ]);
7202
+ var imageSurfaceTreatmentIntensitySchema = z21.enum(["soft", "balanced", "strong"]);
7203
+ var imageSurfaceMotionSchema = z21.enum(["static", "fixed-frame"]);
7204
+ var imageSurfaceTreatmentSchema = z21.discriminatedUnion("kind", [
7205
+ z21.object({ kind: z21.literal("none") }).strict(),
7206
+ z21.object({
7207
+ kind: z21.literal("brand-scrim"),
7208
+ token: z21.enum(["primary", "secondary", "accent"]),
7209
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7210
+ }).strict(),
7211
+ z21.object({
7212
+ kind: z21.literal("brand-wash"),
7213
+ token: z21.enum(["primary", "secondary", "accent"]),
7214
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7215
+ }).strict(),
7216
+ z21.object({
7217
+ kind: z21.literal("neutral-scrim"),
7218
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7219
+ }).strict(),
7220
+ z21.object({
7221
+ kind: z21.literal("neutral-wash"),
7222
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7223
+ }).strict(),
7224
+ z21.object({
7225
+ kind: z21.literal("solid-panel"),
7226
+ intensity: imageSurfaceTreatmentIntensitySchema.optional()
7227
+ }).strict()
7228
+ ]);
7229
+ var testimonialCardTreatmentSchema = z21.enum(["default", "accent-quote"]);
6812
7230
  function uniqueNonEmpty(values) {
6813
7231
  const uniqueValues = [...new Set(values)];
6814
7232
  const firstValue = uniqueValues[0];
@@ -6847,7 +7265,11 @@ var blockDesignPlanSchema = z21.object({
6847
7265
  itemSurface: z21.enum(userDesignOptionCatalog.itemSurfaces),
6848
7266
  transitionAfter: z21.enum(userDesignOptionCatalog.transitions),
6849
7267
  emphasis: z21.enum(userDesignOptionCatalog.emphases),
6850
- heroLegibility: heroLegibilityStrategySchema.optional()
7268
+ sectionHeight: sectionHeightIntentSchema.optional(),
7269
+ heroLegibility: heroLegibilityStrategySchema.optional(),
7270
+ imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7271
+ imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7272
+ testimonialCardTreatment: testimonialCardTreatmentSchema.optional()
6851
7273
  }).strict();
6852
7274
  var styleAuthoritySchema = z21.discriminatedUnion("kind", [
6853
7275
  z21.object({
@@ -8377,6 +8799,7 @@ var SEMANTIC_SPACING_VALUES = [
8377
8799
  ];
8378
8800
  var SECTION_MIN_HEIGHT_VALUES = [
8379
8801
  "none",
8802
+ "banner",
8380
8803
  "hero",
8381
8804
  "immersive"
8382
8805
  ];
@@ -8404,6 +8827,7 @@ var CONTAINER_SPACING_MAP = {
8404
8827
  };
8405
8828
  var SECTION_MIN_HEIGHT_MAP = {
8406
8829
  none: "",
8830
+ banner: "rb-section-min-h-banner",
8407
8831
  hero: "rb-section-min-h-hero",
8408
8832
  immersive: "rb-section-min-h-immersive"
8409
8833
  };
@@ -9194,6 +9618,9 @@ var boxStylesCompositeTransform = {
9194
9618
  classes.push(roundedResult);
9195
9619
  }
9196
9620
  }
9621
+ if (input.treatment === "accent-quote") {
9622
+ classes.push("rb-card-treatment-accent-quote");
9623
+ }
9197
9624
  return classes.join(" ").trim() || "";
9198
9625
  }
9199
9626
  };
@@ -9291,7 +9718,7 @@ var sectionClassNameTransform = {
9291
9718
  minHeight = input.minHeight;
9292
9719
  } else if (process.env.NODE_ENV !== "production") {
9293
9720
  console.warn(
9294
- `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, hero, immersive.`
9721
+ `[sectionStyles] Invalid minHeight value in _sectionStyles: "${input.minHeight}". Expected one of: none, banner, hero, immersive.`
9295
9722
  );
9296
9723
  }
9297
9724
  }
@@ -9614,23 +10041,6 @@ function styledCard(children, opts, ...mods) {
9614
10041
  );
9615
10042
  }
9616
10043
 
9617
- // ../blocks/src/system/node/fragments/typography.ts
9618
- function mergeClassName(base, extra) {
9619
- return [base, extra ?? ""].filter(Boolean).join(" ");
9620
- }
9621
- function captionText(opts, ...mods) {
9622
- const {
9623
- as: asProp,
9624
- className: classNameProp,
9625
- color,
9626
- ...rest
9627
- } = opts ?? {};
9628
- const as = asProp ?? "p";
9629
- const className = mergeClassName("rb-caption", classNameProp);
9630
- const style = textColorStyle(color ?? "mutedText");
9631
- return text({ ...rest, as, className, style }, ...mods);
9632
- }
9633
-
9634
10044
  // ../blocks/src/system/node/fragments/feedbackCallout.ts
9635
10045
  function joinClasses(...parts) {
9636
10046
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
@@ -10535,18 +10945,17 @@ function buildAttributionNodes() {
10535
10945
  const name = text(
10536
10946
  {
10537
10947
  as: "strong",
10538
- className: "rb-block",
10539
- style: textColorStyle("text")
10948
+ className: "rb-block"
10540
10949
  },
10541
10950
  bind("testimonial.content.name", { fallback: "Anonymous" })
10542
10951
  );
10543
- const jobTitle = captionText(
10544
- null,
10952
+ const jobTitle = text(
10953
+ { as: "p", className: "rb-caption" },
10545
10954
  when("testimonial.content.jobTitle"),
10546
10955
  bind("testimonial.content.jobTitle")
10547
10956
  );
10548
- const company = captionText(
10549
- null,
10957
+ const company = text(
10958
+ { as: "p", className: "rb-caption" },
10550
10959
  when("testimonial.content.company"),
10551
10960
  bind("testimonial.content.company")
10552
10961
  );
@@ -10580,8 +10989,7 @@ function buildTestimonialCard(...mods) {
10580
10989
  );
10581
10990
  const body = richText(
10582
10991
  {
10583
- className: "rb-prose rb-max-w-none",
10584
- style: textColorStyle("text")
10992
+ className: "rb-prose rb-max-w-none"
10585
10993
  },
10586
10994
  bind("testimonial.content.body"),
10587
10995
  when("testimonial.content.body")
@@ -12303,6 +12711,7 @@ function heroContentCard(children, gap) {
12303
12711
  return styledContainer({
12304
12712
  bindFrom: "_contentCardStyles",
12305
12713
  constrainWidth: false,
12714
+ baseClassName: "rb-relative rb-isolate",
12306
12715
  rootType: "stack",
12307
12716
  rootProps: {
12308
12717
  gap
@@ -12333,6 +12742,7 @@ function heroContentWrapper(children, gap, fallbackClassName) {
12333
12742
  function heroContainerStack(children, gap) {
12334
12743
  return styledContainer({
12335
12744
  rootType: "stack",
12745
+ baseClassName: "rb-relative rb-isolate",
12336
12746
  rootProps: {
12337
12747
  gap: "none",
12338
12748
  justify: {
@@ -13573,7 +13983,7 @@ function resolveHeroVerticalAlignment(content) {
13573
13983
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
13574
13984
  const sectionStyles = asPartialObject(content._sectionStyles);
13575
13985
  const minHeight = sectionStyles?.minHeight;
13576
- if (minHeight === "hero" || minHeight === "immersive") return "center";
13986
+ if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
13577
13987
  const variant = resolveHeroVariant(content);
13578
13988
  if (variant === "split" || variant === "splitReverse") return "center";
13579
13989
  return "top";
@@ -14375,6 +14785,26 @@ var footerSplitNavSingleClassTransform = {
14375
14785
  ]);
14376
14786
  }
14377
14787
  };
14788
+ var footerSplitMainClassSchema = z33.object({
14789
+ base: z33.string().optional(),
14790
+ reverseClass: z33.string().optional()
14791
+ });
14792
+ var footerSplitMainClassTransform = {
14793
+ id: "layout.footerSplitMainClass",
14794
+ kind: "string",
14795
+ summary: "Compose split-footer main row classes from footer logo placement",
14796
+ schema: footerSplitMainClassSchema,
14797
+ run: (value, options) => {
14798
+ const logo = asPartialObject(value);
14799
+ const placement = logo?.placement ?? "right";
14800
+ const shouldPlaceLogoFirst = placement === "left" || placement === "above";
14801
+ 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";
14802
+ return joinClasses4([
14803
+ options.base ?? baseClass,
14804
+ shouldPlaceLogoFirst ? options.reverseClass ?? "rb-md-flex-row-reverse" : null
14805
+ ]);
14806
+ }
14807
+ };
14378
14808
  var footerLogoClassSchema = z33.object({
14379
14809
  base: z33.string().optional()
14380
14810
  });
@@ -14385,14 +14815,11 @@ var footerLogoClassTransform = {
14385
14815
  schema: footerLogoClassSchema,
14386
14816
  run: (value, options) => {
14387
14817
  const logo = asPartialObject(value);
14388
- const placement = logo?.placement ?? "right";
14389
14818
  const align = logo?.align ?? "end";
14390
14819
  const hiddenClass = logo?.showLogo === false ? "rb-hidden" : null;
14391
- const orderClass = placement === "left" || placement === "above" ? "rb-md-order-first" : "rb-md-order-last";
14392
14820
  const selfAlignClass = align === "start" ? "rb-self-start rb-text-left" : align === "center" ? "rb-self-center rb-text-center" : "rb-self-end rb-text-right";
14393
14821
  return joinClasses4([
14394
14822
  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",
14395
- orderClass,
14396
14823
  selfAlignClass,
14397
14824
  hiddenClass
14398
14825
  ]);
@@ -14447,6 +14874,7 @@ var layoutTransforms = [
14447
14874
  footerBottomBarContainerClassTransform,
14448
14875
  footerBottomBarStyleTransform,
14449
14876
  footerSplitNavSingleClassTransform,
14877
+ footerSplitMainClassTransform,
14450
14878
  footerLogoClassTransform,
14451
14879
  footerLogoMediaClassTransform,
14452
14880
  footerLogoTextVisibleTransform
@@ -14754,7 +15182,7 @@ var createNavRow = (className, align = "end") => navRow({
14754
15182
  var headerCta = ctaButton({
14755
15183
  basePath: "menu.ctaItem",
14756
15184
  whenPath: "menu.ctaItem.label",
14757
- variantPath: "menu.ctaItem.variant",
15185
+ variantPath: "$root.theme.header.ctaVariant",
14758
15186
  linkPath: "menu.ctaItem.link",
14759
15187
  sizeFallback: "sm",
14760
15188
  className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
@@ -14762,7 +15190,7 @@ var headerCta = ctaButton({
14762
15190
  var mobileCta = ctaButton({
14763
15191
  basePath: "menu.ctaItem",
14764
15192
  whenPath: "menu.ctaItem.label",
14765
- variantPath: "menu.ctaItem.variant",
15193
+ variantPath: "$root.theme.header.ctaVariant",
14766
15194
  linkPath: "menu.ctaItem.link",
14767
15195
  sizeFallback: "md",
14768
15196
  className: "nav-mobile-cta rb-w-full"
@@ -15223,7 +15651,13 @@ var splitFooterLayout = stack(
15223
15651
  [
15224
15652
  inline(
15225
15653
  {
15226
- 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"
15654
+ className: {
15655
+ $bind: {
15656
+ from: "$root.theme.footer.logo",
15657
+ transforms: [{ id: "layout.footerSplitMainClass" }],
15658
+ 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"
15659
+ }
15660
+ }
15227
15661
  },
15228
15662
  [
15229
15663
  stack(
@@ -17456,7 +17890,8 @@ var courseEntrySubrouteContextSchema = z45.union([
17456
17890
  run: z45.object({
17457
17891
  courseId: z45.string(),
17458
17892
  seriesId: z45.string(),
17459
- runSlug: z45.string()
17893
+ runSlug: z45.string(),
17894
+ runName: z45.string().nullable()
17460
17895
  })
17461
17896
  }),
17462
17897
  z45.object({
@@ -25273,6 +25708,34 @@ function panelCapable() {
25273
25708
  itemSurfaces: "unsupported"
25274
25709
  });
25275
25710
  }
25711
+ var heroSectionHeights = [
25712
+ "default",
25713
+ "banner",
25714
+ "hero",
25715
+ "immersive"
25716
+ ];
25717
+ var heroImageSurfaceTreatments = [
25718
+ "none",
25719
+ "brand-scrim",
25720
+ "brand-wash",
25721
+ "neutral-scrim",
25722
+ "neutral-wash",
25723
+ "solid-panel"
25724
+ ];
25725
+ var heroImageSurfaceMotions = [
25726
+ "static",
25727
+ "fixed-frame"
25728
+ ];
25729
+ function heroCapable() {
25730
+ return declareBlockDesignCapability({
25731
+ sectionSurfaces: "supported",
25732
+ contentFrames: ["plain", "panel"],
25733
+ itemSurfaces: "unsupported",
25734
+ sectionHeights: heroSectionHeights,
25735
+ imageSurfaceTreatments: heroImageSurfaceTreatments,
25736
+ imageSurfaceMotions: heroImageSurfaceMotions
25737
+ });
25738
+ }
25276
25739
  function plainItemsCapable() {
25277
25740
  return declareBlockDesignCapability({
25278
25741
  sectionSurfaces: "supported",
@@ -25389,7 +25852,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
25389
25852
  };
25390
25853
  }
25391
25854
  var systemBlockDefinitionsRaw = [
25392
- withDesignCapability("block.hero", heroBlockDefinition, panelCapable(), defineBlockDesignMetadata({
25855
+ withDesignCapability("block.hero", heroBlockDefinition, heroCapable(), defineBlockDesignMetadata({
25393
25856
  flow: heroFlow,
25394
25857
  layoutProfiles: [
25395
25858
  layoutProfile({
@@ -25493,7 +25956,12 @@ var systemBlockDefinitionsRaw = [
25493
25956
  flow: siteChromeFlow,
25494
25957
  layoutProfiles: []
25495
25958
  })),
25496
- withDesignCapability("block.testimonials", testimonialsBlockDefinition, panelAndItemsCapable(), defineBlockDesignMetadata({
25959
+ withDesignCapability("block.testimonials", testimonialsBlockDefinition, declareBlockDesignCapability({
25960
+ sectionSurfaces: "supported",
25961
+ contentFrames: ["plain", "panel"],
25962
+ itemSurfaces: "supported",
25963
+ testimonialCardTreatments: ["default", "accent-quote"]
25964
+ }), defineBlockDesignMetadata({
25497
25965
  flow: proofFlow,
25498
25966
  layoutProfiles: [
25499
25967
  layoutProfile({
@@ -25805,8 +26273,15 @@ function parseOpacity(value) {
25805
26273
  }
25806
26274
  return opacity <= 1 ? opacity : opacity / 100;
25807
26275
  }
25808
- function appendOptionalClasses(baseClassName, optionalClassName) {
25809
- return optionalClassName ? `${baseClassName} ${optionalClassName}` : baseClassName;
26276
+ function backgroundMotionClassNames(input) {
26277
+ return input.motion === "fixed-frame" ? "rb-bg-motion-fixed-frame" : "";
26278
+ }
26279
+ function appendBackgroundMediaClasses(baseClassName, input) {
26280
+ return [
26281
+ baseClassName,
26282
+ backgroundMotionClassNames(input),
26283
+ backgroundVideoMobileClassNames(input)
26284
+ ].filter(Boolean).join(" ");
25810
26285
  }
25811
26286
  var resolveImageStyleTransform = {
25812
26287
  id: "background.resolveImageStyle",
@@ -25883,9 +26358,9 @@ var resolveImageClassNameTransform = {
25883
26358
  const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;
25884
26359
  const position = isString(input.position) ? input.position.trim() : null;
25885
26360
  if (objectFit === "fill" || objectFit === "fit" || objectFit === null) {
25886
- return appendOptionalClasses(
26361
+ return appendBackgroundMediaClasses(
25887
26362
  `${baseClass} rb-inset-0 rb-h-full rb-w-full rb-object-${objectFit === "fit" ? "contain" : "cover"}`,
25888
- backgroundVideoMobileClassNames(input)
26363
+ input
25889
26364
  );
25890
26365
  }
25891
26366
  let needsAnchoring = false;
@@ -25898,18 +26373,18 @@ var resolveImageClassNameTransform = {
25898
26373
  }
25899
26374
  }
25900
26375
  if (!needsAnchoring) {
25901
- return appendOptionalClasses(
26376
+ return appendBackgroundMediaClasses(
25902
26377
  `${baseClass} rb-inset-0 rb-h-full rb-w-full`,
25903
- backgroundVideoMobileClassNames(input)
26378
+ input
25904
26379
  );
25905
26380
  }
25906
26381
  const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position);
25907
26382
  const isCustom = position && !isPreset;
25908
26383
  if (isCustom) {
25909
- return appendOptionalClasses(baseClass, backgroundVideoMobileClassNames(input));
26384
+ return appendBackgroundMediaClasses(baseClass, input);
25910
26385
  }
25911
26386
  const anchorClasses = getAnchorClasses(position);
25912
- return appendOptionalClasses(`${baseClass} ${anchorClasses}`, backgroundVideoMobileClassNames(input));
26387
+ return appendBackgroundMediaClasses(`${baseClass} ${anchorClasses}`, input);
25913
26388
  }
25914
26389
  };
25915
26390
  var resolveOverlayStyleTransform = {
@@ -33041,16 +33516,14 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme) {
33041
33516
  };
33042
33517
  additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
33043
33518
  }
33044
- const textSize = configuredDropdownStyle?.textSize;
33045
- if (textSize) {
33046
- const textSizeMap = {
33047
- "xs": "0.75rem",
33048
- "sm": "0.875rem",
33049
- "base": "1rem",
33050
- "lg": "1.125rem"
33051
- };
33052
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
33053
- }
33519
+ const textSize = configuredDropdownStyle?.textSize ?? "sm";
33520
+ const textSizeMap = {
33521
+ "xs": "0.75rem",
33522
+ "sm": "0.875rem",
33523
+ "base": "1rem",
33524
+ "lg": "1.125rem"
33525
+ };
33526
+ additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
33054
33527
  if (additionalRules.length > 0) {
33055
33528
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
33056
33529
  return baseCSS + `
@@ -33339,12 +33812,10 @@ ${selector} .rb-container-full`;
33339
33812
  ${rootRules.join("\n ")}
33340
33813
  }`);
33341
33814
  if (containerPadding?.mobile) {
33342
- cssChunks.push(
33343
- `${containerSelector} {
33815
+ cssChunks.push(`${containerSelector} {
33344
33816
  padding-left: ${toPaddingValue(containerPadding.mobile)};
33345
33817
  padding-right: ${toPaddingValue(containerPadding.mobile)};
33346
- }`
33347
- );
33818
+ }`);
33348
33819
  }
33349
33820
  if (containerPadding?.tablet) {
33350
33821
  cssChunks.push(
@@ -33370,6 +33841,10 @@ ${selector} .rb-container-full`;
33370
33841
  if (heroTypographyCss) {
33371
33842
  cssChunks.push(heroTypographyCss);
33372
33843
  }
33844
+ const bodyTextTypographyCss = generateBodyTextTypographyCss(themeId, theme);
33845
+ if (bodyTextTypographyCss) {
33846
+ cssChunks.push(bodyTextTypographyCss);
33847
+ }
33373
33848
  cssChunks.push(generateSiteStyleTransitionCss(themeId));
33374
33849
  return cssChunks.join("\n\n");
33375
33850
  }
@@ -33382,6 +33857,9 @@ function toPaddingValue(preset2) {
33382
33857
  };
33383
33858
  return map[preset2];
33384
33859
  }
33860
+ var waveTransitionMask = svgDataUrl(
33861
+ "<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>"
33862
+ );
33385
33863
  function generateSiteStyleTransitionCss(themeId) {
33386
33864
  const selector = `:where([data-theme-scope="${themeId}"])`;
33387
33865
  return `${selector} [data-style-group^='site-style-transition-'] {
@@ -33449,21 +33927,17 @@ ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot
33449
33927
 
33450
33928
  ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
33451
33929
  background: var(--site-style-transition-to);
33452
- clip-path: polygon(
33453
- 0 42%,
33454
- 10% 34%,
33455
- 21% 42%,
33456
- 34% 31%,
33457
- 48% 39%,
33458
- 63% 29%,
33459
- 78% 37%,
33460
- 90% 30%,
33461
- 100% 36%,
33462
- 100% 100%,
33463
- 0 100%
33464
- );
33930
+ mask-image: url("${waveTransitionMask}");
33931
+ mask-repeat: no-repeat;
33932
+ mask-size: 100% 100%;
33933
+ -webkit-mask-image: url("${waveTransitionMask}");
33934
+ -webkit-mask-repeat: no-repeat;
33935
+ -webkit-mask-size: 100% 100%;
33465
33936
  }`;
33466
33937
  }
33938
+ function svgDataUrl(svg) {
33939
+ return `data:image/svg+xml,${encodeURIComponent(svg)}`;
33940
+ }
33467
33941
  function generateHeroTypographyCss(themeId, theme) {
33468
33942
  const typography = theme.hero?.typography;
33469
33943
  if (!typography) return "";
@@ -33486,33 +33960,21 @@ function generateHeroTypographyCss(themeId, theme) {
33486
33960
  ${subheadlineRules.join("\n ")}
33487
33961
  }`);
33488
33962
  }
33489
- const microHeadlineRules = buildTypographyRules(
33490
- typography.microHeadlineSize,
33491
- typography.microHeadlineLineHeight
33492
- );
33963
+ const microHeadlineRules = buildTypographyRules(typography.microHeadlineSize, typography.microHeadlineLineHeight);
33493
33964
  if (microHeadlineRules.length > 0) {
33494
33965
  chunks.push(`${microHeadlineSelector} {
33495
33966
  ${microHeadlineRules.join("\n ")}
33496
33967
  }`);
33497
33968
  }
33498
- const microSubheadlineRules = buildTypographyRules(
33499
- typography.microSubheadlineSize,
33500
- typography.microSubheadlineLineHeight
33501
- );
33969
+ const microSubheadlineRules = buildTypographyRules(typography.microSubheadlineSize, typography.microSubheadlineLineHeight);
33502
33970
  if (microSubheadlineRules.length > 0) {
33503
33971
  chunks.push(`${microSubheadlineSelector} {
33504
33972
  ${microSubheadlineRules.join("\n ")}
33505
33973
  }`);
33506
33974
  }
33507
33975
  if (typography.responsive?.tablet) {
33508
- const tabletHeadlineRules = buildTypographyRules(
33509
- typography.responsive.tablet.headlineSize,
33510
- typography.responsive.tablet.headlineLineHeight
33511
- );
33512
- const tabletSubheadlineRules = buildTypographyRules(
33513
- typography.responsive.tablet.subheadlineSize,
33514
- typography.responsive.tablet.subheadlineLineHeight
33515
- );
33976
+ const tabletHeadlineRules = buildTypographyRules(typography.responsive.tablet.headlineSize, typography.responsive.tablet.headlineLineHeight);
33977
+ const tabletSubheadlineRules = buildTypographyRules(typography.responsive.tablet.subheadlineSize, typography.responsive.tablet.subheadlineLineHeight);
33516
33978
  const tabletChunks = [];
33517
33979
  if (tabletHeadlineRules.length > 0) {
33518
33980
  tabletChunks.push(`${headlineSelector} {
@@ -33531,14 +33993,8 @@ function generateHeroTypographyCss(themeId, theme) {
33531
33993
  }
33532
33994
  }
33533
33995
  if (typography.responsive?.mobile) {
33534
- const mobileHeadlineRules = buildTypographyRules(
33535
- typography.responsive.mobile.headlineSize,
33536
- typography.responsive.mobile.headlineLineHeight
33537
- );
33538
- const mobileSubheadlineRules = buildTypographyRules(
33539
- typography.responsive.mobile.subheadlineSize,
33540
- typography.responsive.mobile.subheadlineLineHeight
33541
- );
33996
+ const mobileHeadlineRules = buildTypographyRules(typography.responsive.mobile.headlineSize, typography.responsive.mobile.headlineLineHeight);
33997
+ const mobileSubheadlineRules = buildTypographyRules(typography.responsive.mobile.subheadlineSize, typography.responsive.mobile.subheadlineLineHeight);
33542
33998
  const mobileChunks = [];
33543
33999
  if (mobileHeadlineRules.length > 0) {
33544
34000
  mobileChunks.push(`${headlineSelector} {
@@ -33568,6 +34024,27 @@ function buildTypographyRules(size, lineHeight) {
33568
34024
  }
33569
34025
  return rules;
33570
34026
  }
34027
+ function generateBodyTextTypographyCss(themeId, theme) {
34028
+ const intro = theme.bodyText?.intro;
34029
+ if (!intro) return "";
34030
+ const rootSelector = `:where([data-theme-scope="${themeId}"]) :where([data-block="body-text"][data-block-variant="intro"])`;
34031
+ const chunks = [];
34032
+ if (intro.headingSize === "editorial") {
34033
+ chunks.push(`${rootSelector} .body-copy-heading {
34034
+ font-size: clamp(1.75rem, 1.15rem + 2.2vw, 3rem);
34035
+ line-height: 1.08;
34036
+ }`);
34037
+ }
34038
+ if (intro.paragraphSize === "editorial") {
34039
+ chunks.push(`${rootSelector} .body-copy-body {
34040
+ --rb-prose-lg-font-size: clamp(1.35rem, 1.05rem + 1.3vw, 2rem);
34041
+ --rb-prose-lg-line-height: 1.55;
34042
+ --rb-prose-xl-sm-font-size: clamp(1.45rem, 1.1rem + 1.4vw, 2rem);
34043
+ --rb-prose-xl-sm-line-height: 1.55;
34044
+ }`);
34045
+ }
34046
+ return chunks.join("\n\n");
34047
+ }
33571
34048
  function toHeroSize(size) {
33572
34049
  const map = {
33573
34050
  sm: "0.875rem",
@@ -33578,7 +34055,8 @@ function toHeroSize(size) {
33578
34055
  "3xl": "1.875rem",
33579
34056
  "4xl": "2.25rem",
33580
34057
  "5xl": "3rem",
33581
- "6xl": "3.75rem"
34058
+ "6xl": "3.75rem",
34059
+ editorial: "clamp(1.25rem, 3vw, 2.25rem)"
33582
34060
  };
33583
34061
  return map[size];
33584
34062
  }
@@ -35900,12 +36378,16 @@ var containerResponsiveThemeCss = `/*
35900
36378
  .rb-h-full {
35901
36379
  height: 100%;
35902
36380
  }
36381
+ .rb-section-min-h-banner {
36382
+ min-height: clamp(16rem, 34svh, 24rem);
36383
+ }
35903
36384
  .rb-section-min-h-hero {
35904
36385
  min-height: clamp(32rem, 62svh, 44rem);
35905
36386
  }
35906
36387
  .rb-section-min-h-immersive {
35907
36388
  min-height: clamp(38rem, 78svh, 54rem);
35908
36389
  }
36390
+ .rb-section-min-h-banner > .rb-container,
35909
36391
  .rb-section-min-h-hero > .rb-container,
35910
36392
  .rb-section-min-h-immersive > .rb-container {
35911
36393
  min-height: inherit;
@@ -37015,6 +37497,19 @@ var containerResponsiveThemeCss = `/*
37015
37497
  .rb-object-contain {
37016
37498
  object-fit: contain;
37017
37499
  }
37500
+ .rb-bg-motion-fixed-frame {
37501
+ position: fixed;
37502
+ inset: 0;
37503
+ width: 100vw;
37504
+ height: 100svh;
37505
+ }
37506
+ @media (hover: none), (prefers-reduced-motion: reduce) {
37507
+ .rb-bg-motion-fixed-frame {
37508
+ position: absolute;
37509
+ width: 100%;
37510
+ height: 100%;
37511
+ }
37512
+ }
37018
37513
 
37019
37514
  /* Line clamp */
37020
37515
  .rb-line-clamp-2,
@@ -41525,13 +42020,13 @@ var containerResponsiveThemeCss = `/*
41525
42020
 
41526
42021
  /* Eyebrow - color only (typography via .rb-eyebrow) */
41527
42022
  :where(.theme-scope) :where([data-block="hero"]) .hero-eyebrow {
41528
- color: rgb(var(--tb-text));
42023
+ color: var(--section-text-color, rgb(var(--tb-text)));
41529
42024
  }
41530
42025
 
41531
42026
  /* Subheadline - supporting text below headline */
41532
42027
  :where(.theme-scope) :where([data-block="hero"]) .hero-subheadline {
41533
42028
  font-size: 1.125rem;
41534
- color: rgb(var(--tb-text));
42029
+ color: var(--section-text-color, rgb(var(--tb-text)));
41535
42030
  }
41536
42031
 
41537
42032
  @container rb-site (min-width: 640px) {
@@ -41605,6 +42100,20 @@ var containerResponsiveThemeCss = `/*
41605
42100
  max-width: 60rem;
41606
42101
  }
41607
42102
 
42103
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
42104
+ font-size: var(--rb-prose-lg-font-size);
42105
+ line-height: var(--rb-prose-lg-line-height);
42106
+ }
42107
+
42108
+ @container rb-site (min-width: 640px) {
42109
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
42110
+ :where(.theme-scope) :where([data-block="body-text"][data-block-variant="intro"]) .body-copy-body {
42111
+ font-size: var(--rb-prose-xl-sm-font-size);
42112
+ line-height: var(--rb-prose-xl-sm-line-height);
42113
+ }
42114
+ }
42115
+ }
42116
+
41608
42117
  /* Variant: Narrow (left-aligned, shorter line length) */
41609
42118
  :where(.theme-scope) :where([data-block="body-text"][data-block-variant="narrow"]) .body-copy-container {
41610
42119
  max-width: 34rem;
@@ -42947,6 +43456,13 @@ var containerResponsiveThemeCss = `/*
42947
43456
  border-radius: var(--rb-block-radius);
42948
43457
  }
42949
43458
 
43459
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-card.rb-card-treatment-accent-quote {
43460
+ border: 0;
43461
+ border-left: 5px solid rgb(var(--tb-secondary));
43462
+ border-radius: 0 calc(var(--rb-block-radius) * 3) 0 0;
43463
+ color: rgb(var(--tb-primaryForeground));
43464
+ }
43465
+
42950
43466
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonial-quote {
42951
43467
  font-size: var(--rb-testimonial-quote-size);
42952
43468
  line-height: 1;
@@ -42955,6 +43471,12 @@ var containerResponsiveThemeCss = `/*
42955
43471
  color: rgb(var(--tb-primary));
42956
43472
  }
42957
43473
 
43474
+ :where(.theme-scope) :where([data-block="testimonials"]) .rb-card-treatment-accent-quote .rb-testimonial-quote {
43475
+ color: rgb(var(--tb-secondary));
43476
+ font-size: calc(var(--rb-testimonial-quote-size) * 1.25);
43477
+ opacity: 1;
43478
+ }
43479
+
42958
43480
 
42959
43481
  /* Testimonials carousel tweaks: arrow styling + gutters + equal-height cards */
42960
43482
  :where(.theme-scope) :where([data-block="testimonials"]) .rb-testimonials-carousel.carousel-root .carousel-nav-btn {
@@ -47310,7 +47832,7 @@ var ENDPOINT_DEFINITIONS = {
47310
47832
  method: "GET",
47311
47833
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
47312
47834
  auth: "user",
47313
- responseKind: "text"
47835
+ responseKind: "blob"
47314
47836
  },
47315
47837
  getNewsletterSubscriber: {
47316
47838
  path: "/sites/{siteId}/newsletter/subscribers/{subscriberId}",
@@ -47641,12 +48163,7 @@ var ENDPOINT_DEFINITIONS = {
47641
48163
  ],
47642
48164
  auth: "user",
47643
48165
  responseKind: "json",
47644
- errors: [
47645
- "validation:invalid_input",
47646
- "resource:not_found",
47647
- "resource:conflict",
47648
- "server:internal_error"
47649
- ]
48166
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
47650
48167
  },
47651
48168
  unpublishTeamMemberProfile: {
47652
48169
  path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
@@ -47899,6 +48416,13 @@ var ENDPOINT_DEFINITIONS = {
47899
48416
  auth: "user",
47900
48417
  responseKind: "json"
47901
48418
  },
48419
+ exportBookingAppointmentsCsv: {
48420
+ path: "/sites/{siteId}/bookings/appointments/export.csv",
48421
+ method: "GET",
48422
+ auth: "user",
48423
+ errors: [],
48424
+ responseKind: "blob"
48425
+ },
47902
48426
  createAppointment: {
47903
48427
  path: "/sites/{siteId}/bookings/appointments",
47904
48428
  method: "POST",
@@ -48026,6 +48550,13 @@ var ENDPOINT_DEFINITIONS = {
48026
48550
  auth: "user",
48027
48551
  responseKind: "json"
48028
48552
  },
48553
+ exportCourseEnrollmentsCsv: {
48554
+ path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
48555
+ method: "GET",
48556
+ auth: "user",
48557
+ errors: [],
48558
+ responseKind: "blob"
48559
+ },
48029
48560
  listCourseWaitlist: {
48030
48561
  path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist",
48031
48562
  method: "GET",
@@ -49388,6 +49919,14 @@ var ENDPOINT_DEFINITIONS = {
49388
49919
  auth: "user",
49389
49920
  responseKind: "json"
49390
49921
  },
49922
+ exportSeoPagesCsv: {
49923
+ path: "/sites/{siteId}/seo/pages",
49924
+ method: "GET",
49925
+ tags: ["site-{siteId}", "seo-pages-{siteId}"],
49926
+ auth: "user",
49927
+ responseKind: "blob",
49928
+ errors: []
49929
+ },
49391
49930
  getSeoQueries: {
49392
49931
  path: "/sites/{siteId}/seo/queries",
49393
49932
  method: "GET",
@@ -49396,6 +49935,14 @@ var ENDPOINT_DEFINITIONS = {
49396
49935
  auth: "user",
49397
49936
  responseKind: "json"
49398
49937
  },
49938
+ exportSeoQueriesCsv: {
49939
+ path: "/sites/{siteId}/seo/queries",
49940
+ method: "GET",
49941
+ tags: ["site-{siteId}", "seo-queries-{siteId}"],
49942
+ auth: "user",
49943
+ responseKind: "blob",
49944
+ errors: []
49945
+ },
49399
49946
  getPerformanceOverview: {
49400
49947
  path: "/sites/{siteId}/performance/overview",
49401
49948
  method: "GET",
@@ -49444,7 +49991,12 @@ var ENDPOINT_DEFINITIONS = {
49444
49991
  path: "/media/{assetId}/canonical-crop",
49445
49992
  method: "POST",
49446
49993
  tags: ["media", "media-{assetId}"],
49447
- errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"],
49994
+ errors: [
49995
+ "validation:invalid_input",
49996
+ "resource:not_found",
49997
+ "resource:conflict",
49998
+ "server:internal_error"
49999
+ ],
49448
50000
  auth: "user",
49449
50001
  responseKind: "json"
49450
50002
  },
@@ -49776,7 +50328,7 @@ var ENDPOINT_DEFINITIONS = {
49776
50328
  method: "GET",
49777
50329
  tags: [TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug],
49778
50330
  auth: "user",
49779
- responseKind: "text"
50331
+ responseKind: "blob"
49780
50332
  },
49781
50333
  // Public submit
49782
50334
  submitForm: {
@@ -50659,6 +51211,14 @@ var ENDPOINT_DEFINITIONS = {
50659
51211
  auth: "user",
50660
51212
  responseKind: "json"
50661
51213
  },
51214
+ exportEventSeriesAttendeesCsv: {
51215
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/attendees/export.csv",
51216
+ method: "GET",
51217
+ tags: ["site-{siteId}", "event-series-{seriesId}"],
51218
+ auth: "user",
51219
+ errors: [],
51220
+ responseKind: "blob"
51221
+ },
50662
51222
  listEventSeriesWaitlist: {
50663
51223
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
50664
51224
  method: "GET",
@@ -51222,6 +51782,14 @@ var ENDPOINT_DEFINITIONS = {
51222
51782
  auth: "user",
51223
51783
  responseKind: "json"
51224
51784
  },
51785
+ exportBookingCustomersCsv: {
51786
+ path: "/sites/{siteId}/bookings/customers/export.csv",
51787
+ method: "GET",
51788
+ tags: ["site-{siteId}", "customers-{siteId}"],
51789
+ auth: "user",
51790
+ errors: [],
51791
+ responseKind: "blob"
51792
+ },
51225
51793
  createBookingCustomer: {
51226
51794
  path: "/sites/{siteId}/bookings/customers",
51227
51795
  method: "POST",
@@ -51249,6 +51817,21 @@ var ENDPOINT_DEFINITIONS = {
51249
51817
  "server:internal_error"
51250
51818
  ]
51251
51819
  },
51820
+ rectifyBookingParticipantIdentity: {
51821
+ path: "/sites/{siteId}/bookings/participants/{participantId}/identity",
51822
+ method: "PATCH",
51823
+ tags: ["site-{siteId}", "customers-{siteId}"],
51824
+ auth: "user",
51825
+ responseKind: "json",
51826
+ errors: [
51827
+ "validation:invalid_input",
51828
+ "auth:forbidden",
51829
+ "resource:not_found",
51830
+ "resource:already_exists",
51831
+ "resource:conflict",
51832
+ "server:internal_error"
51833
+ ]
51834
+ },
51252
51835
  listCustomerPasses: {
51253
51836
  path: "/sites/{siteId}/bookings/customers/{customerId}/passes",
51254
51837
  method: "GET",
@@ -51383,13 +51966,46 @@ var ENDPOINT_DEFINITIONS = {
51383
51966
  auth: "user",
51384
51967
  responseKind: "json"
51385
51968
  },
51969
+ exportMoneyPaymentsCsv: {
51970
+ path: "/sites/{siteId}/bookings/money/payments/export.csv",
51971
+ method: "GET",
51972
+ tags: ["site-{siteId}", "bookings", "money-payments-{siteId}"],
51973
+ errors: [],
51974
+ auth: "user",
51975
+ responseKind: "blob"
51976
+ },
51977
+ exportMoneyBreakdownsCsv: {
51978
+ path: "/sites/{siteId}/bookings/money/report/breakdowns/export.csv",
51979
+ method: "GET",
51980
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
51981
+ errors: [],
51982
+ auth: "user",
51983
+ responseKind: "blob"
51984
+ },
51985
+ exportMoneyTimeSeriesCsv: {
51986
+ path: "/sites/{siteId}/bookings/money/report/time-series/export.csv",
51987
+ method: "GET",
51988
+ tags: ["site-{siteId}", "bookings", "money-report-{siteId}"],
51989
+ errors: [],
51990
+ auth: "user",
51991
+ responseKind: "blob"
51992
+ },
51386
51993
  listBookingActivity: {
51387
51994
  path: "/sites/{siteId}/bookings/activity",
51388
51995
  method: "GET",
51389
51996
  tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
51997
+ errors: [],
51390
51998
  auth: "user",
51391
51999
  responseKind: "json"
51392
52000
  },
52001
+ exportBookingActivityCsv: {
52002
+ path: "/sites/{siteId}/bookings/activity/export.csv",
52003
+ method: "GET",
52004
+ tags: ["site-{siteId}", "bookings", "activity-{siteId}"],
52005
+ errors: [],
52006
+ auth: "user",
52007
+ responseKind: "blob"
52008
+ },
51393
52009
  // Site logs
51394
52010
  listSiteActivityLogs: {
51395
52011
  path: "/sites/{siteId}/logs/activity",
@@ -51541,13 +52157,6 @@ var ENDPOINT_DEFINITIONS = {
51541
52157
  auth: "user",
51542
52158
  responseKind: "blob"
51543
52159
  },
51544
- exportSeoCsv: {
51545
- path: "/sites/{siteId}/seo/export",
51546
- method: "GET",
51547
- tags: ["site-{siteId}", "seo"],
51548
- auth: "user",
51549
- responseKind: "blob"
51550
- },
51551
52160
  // Admin site cost (for admin panel)
51552
52161
  adminSiteCost: {
51553
52162
  path: "/admin/sites/{siteId}/cost",
@@ -52849,6 +53458,8 @@ var CUSTOMER_MEMBERSHIP_PAYMENT_REFUND_FAILED_CODES = [
52849
53458
  var STANDARD_LINE_ITEM_REFUND_INVALID_CODES = [
52850
53459
  "missing_amount",
52851
53460
  "amount_exceeds_remaining",
53461
+ "credit_refunds_disabled",
53462
+ "missing_credit_customer",
52852
53463
  "deposit_refund_override_required",
52853
53464
  "refund_revoke_requires_full_line_refund",
52854
53465
  "unified_order_link_required"