@riverbankcms/sdk 0.77.0 → 0.77.1

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 (46) hide show
  1. package/dist/{PreviewEditorSidebar-XSX7QKHQ.mjs → PreviewEditorSidebar-DVUG7GK4.mjs} +2 -2
  2. package/dist/{PreviewEditorUI-YZNEZ3QD.mjs → PreviewEditorUI-P7RN4CDS.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-KLPX47SE.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +40 -30
  5. package/dist/_dts/blocks/src/customBlockRegistry.d.ts +20 -1
  6. package/dist/_dts/blocks/src/index.d.ts +2 -2
  7. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +2 -2
  8. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +5 -0
  9. package/dist/_dts/blocks/src/system/runtime/components/multi-step/runtimeFormValidation.d.ts +28 -0
  10. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +4 -4
  11. package/dist/_dts/sdk/src/contracts/theme.d.ts +1 -1
  12. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  13. package/dist/_dts/sdk/src/version.d.ts +1 -1
  14. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  15. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +27 -27
  16. package/dist/_dts/theme-core/src/schema.d.ts +26 -30
  17. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +1 -1
  18. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +4 -4
  19. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +63 -33
  20. package/dist/{chunk-EAWHBECW.mjs → chunk-2SPENC5M.mjs} +5 -5
  21. package/dist/{chunk-GSQX43EZ.mjs → chunk-IENWFSLO.mjs} +22 -41
  22. package/dist/{chunk-WLQBJN2Z.mjs → chunk-KWJPDZH2.mjs} +1815 -1338
  23. package/dist/{chunk-ANKDYZ2E.mjs → chunk-ZYEJLCTN.mjs} +1 -1
  24. package/dist/cli/index.mjs +381 -176
  25. package/dist/client/client.mjs +1574 -1252
  26. package/dist/client/hooks.mjs +369 -170
  27. package/dist/client/rendering.mjs +1588 -1257
  28. package/dist/preview-next/client/runtime.mjs +3 -3
  29. package/dist/{sdk-runtime-Q6MTR4KL.mjs → sdk-runtime-6UT2S7KZ.mjs} +4 -4
  30. package/dist/server/components.mjs +1561 -1239
  31. package/dist/server/config-validation.mjs +369 -170
  32. package/dist/server/config.mjs +369 -170
  33. package/dist/server/data.mjs +369 -170
  34. package/dist/server/index.mjs +1 -1
  35. package/dist/server/next.mjs +1547 -1234
  36. package/dist/server/page-converter.mjs +362 -165
  37. package/dist/server/prebuild.mjs +1 -1
  38. package/dist/server/rendering/server.mjs +1561 -1239
  39. package/dist/server/rendering.mjs +1561 -1239
  40. package/dist/server/routing.mjs +370 -171
  41. package/dist/server/server.mjs +370 -171
  42. package/dist/server/theme-bridge.mjs +1156 -1035
  43. package/dist/server/theme.mjs +79 -11
  44. package/dist/styles/index.css +1081 -1028
  45. package/package.json +1 -1
  46. package/dist/SdkPreviewModeRuntime-5FS5E6BI.mjs +0 -8
@@ -4566,8 +4566,19 @@ var init_schema3 = __esm({
4566
4566
  colorToken: themeColorTokenSchema.nullable().optional()
4567
4567
  });
4568
4568
  proseLinkUnderlineStyleSchema = z.enum(["solid", "dotted", "dashed"]);
4569
- proseLinkUnderlineThicknessSchema = z.enum(["auto", "fromFont", "thin", "medium", "thick"]);
4570
- proseLinkUnderlineOffsetSchema = z.enum(["auto", "tight", "normal", "loose"]);
4569
+ proseLinkUnderlineThicknessSchema = z.enum([
4570
+ "auto",
4571
+ "fromFont",
4572
+ "thin",
4573
+ "medium",
4574
+ "thick"
4575
+ ]);
4576
+ proseLinkUnderlineOffsetSchema = z.enum([
4577
+ "auto",
4578
+ "tight",
4579
+ "normal",
4580
+ "loose"
4581
+ ]);
4571
4582
  proseLinkStyleSchema = z.object({
4572
4583
  colorToken: themeColorTokenSchema.optional(),
4573
4584
  hoverColorToken: themeColorTokenSchema.optional(),
@@ -4578,7 +4589,14 @@ var init_schema3 = __esm({
4578
4589
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
4579
4590
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
4580
4591
  });
4581
- semanticSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
4592
+ semanticSpacingSchema = z.enum([
4593
+ "none",
4594
+ "compact",
4595
+ "cozy",
4596
+ "medium",
4597
+ "comfortable",
4598
+ "spacious"
4599
+ ]);
4582
4600
  boxRoundedSchema = z.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
4583
4601
  boxBackgroundOverlaySchema = z.object({
4584
4602
  type: z.enum(["none", "color", "gradient"]).nullable().optional(),
@@ -4722,9 +4740,17 @@ var init_schema3 = __esm({
4722
4740
  focus: z.enum(["glow", "ring", "underline"]),
4723
4741
  label: z.enum(["inside", "above"])
4724
4742
  });
4725
- headerVariant = z.enum(["classic", "centered", "transparent", "floating", "editorial"]);
4743
+ headerVariant = z.enum(["classic", "centered", "transparent", "floating"]);
4726
4744
  headerPositioning = z.enum(["static", "sticky", "fixed"]);
4727
- headerNavStyle = z.enum(["minimal", "underline", "underline-grow", "capsule", "scale", "frosted", "solid"]);
4745
+ headerNavStyle = z.enum([
4746
+ "minimal",
4747
+ "underline",
4748
+ "underline-grow",
4749
+ "capsule",
4750
+ "scale",
4751
+ "frosted",
4752
+ "solid"
4753
+ ]);
4728
4754
  navFontWeight = z.enum(["regular", "medium", "semibold", "bold"]);
4729
4755
  headerMaxWidth = z.enum(["container", "full"]);
4730
4756
  headerContainerSchema = z.object({
@@ -4772,8 +4798,22 @@ var init_schema3 = __esm({
4772
4798
  textSize: z.enum(["xs", "sm", "base", "lg"]).optional()
4773
4799
  // optional = no override (browser default)
4774
4800
  }).optional();
4775
- headerCtaGapSchema = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
4776
- headerCtaTreatmentSchema = z.enum(["default", "primary", "secondary", "inverted", "outline", "ghost"]);
4801
+ headerCtaGapSchema = z.enum([
4802
+ "none",
4803
+ "tight",
4804
+ "compact",
4805
+ "default",
4806
+ "relaxed",
4807
+ "spacious"
4808
+ ]);
4809
+ headerCtaTreatmentSchema = z.enum([
4810
+ "default",
4811
+ "primary",
4812
+ "secondary",
4813
+ "inverted",
4814
+ "outline",
4815
+ "ghost"
4816
+ ]);
4777
4817
  navContainerSchema = z.object({
4778
4818
  type: z.enum(["none", "pill", "glass"]).default("none"),
4779
4819
  tint: z.string().nullable().optional(),
@@ -4828,7 +4868,14 @@ var init_schema3 = __esm({
4828
4868
  footerMode = z.enum(["default", "blocks", "default+blocks", "none"]);
4829
4869
  footerNavLayoutMode = z.enum(["stack", "inline", "inline-wrap"]);
4830
4870
  footerNavLayoutAlign = z.enum(["start", "center", "end", "space-between"]);
4831
- footerSpacing = z.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
4871
+ footerSpacing = z.enum([
4872
+ "none",
4873
+ "tight",
4874
+ "compact",
4875
+ "default",
4876
+ "relaxed",
4877
+ "spacious"
4878
+ ]);
4832
4879
  footerLogoPlacement = z.enum(["left", "right", "above", "below"]);
4833
4880
  footerLogoSize = z.enum(["sm", "md", "lg", "xl"]);
4834
4881
  footerLogoMaxHeight = z.enum(["sm", "md", "lg", "xl"]);
@@ -4893,7 +4940,12 @@ var init_schema3 = __esm({
4893
4940
  logo: footerLogoSchema.optional(),
4894
4941
  bottomBar: footerBottomBarSchema.optional()
4895
4942
  });
4896
- containerPaddingPresetSchema = z.enum(["tight", "compact", "default", "relaxed"]);
4943
+ containerPaddingPresetSchema = z.enum([
4944
+ "tight",
4945
+ "compact",
4946
+ "default",
4947
+ "relaxed"
4948
+ ]);
4897
4949
  layoutSchema = z.object({
4898
4950
  containerPadding: z.object({
4899
4951
  mobile: containerPaddingPresetSchema.optional(),
@@ -4901,8 +4953,24 @@ var init_schema3 = __esm({
4901
4953
  desktop: containerPaddingPresetSchema.optional()
4902
4954
  }).optional()
4903
4955
  }).optional();
4904
- heroTypographySizeSchema = z.enum(["sm", "base", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "editorial"]);
4905
- heroTypographyLineHeightSchema = z.enum(["tight", "snug", "normal", "relaxed"]);
4956
+ heroTypographySizeSchema = z.enum([
4957
+ "sm",
4958
+ "base",
4959
+ "lg",
4960
+ "xl",
4961
+ "2xl",
4962
+ "3xl",
4963
+ "4xl",
4964
+ "5xl",
4965
+ "6xl",
4966
+ "editorial"
4967
+ ]);
4968
+ heroTypographyLineHeightSchema = z.enum([
4969
+ "tight",
4970
+ "snug",
4971
+ "normal",
4972
+ "relaxed"
4973
+ ]);
4906
4974
  heroResponsiveTypographySchema = z.object({
4907
4975
  headlineSize: heroTypographySizeSchema.optional(),
4908
4976
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
@@ -5513,10 +5581,12 @@ function resolveLegacyHeaderLookAlias(lookId) {
5513
5581
  return legacyHeaderLookAliasesById.get(lookId)?.selection ?? null;
5514
5582
  }
5515
5583
  function getCompatibleHeaderStyleIds(layoutId) {
5516
- return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter((styleId) => {
5517
- const style = getHeaderStyleOrThrow(styleId);
5518
- return isHeaderStyleCompatibleWithLayout(style, layoutId);
5519
- });
5584
+ return (headerStyleCompatibilityOrder.get(layoutId) ?? []).filter(
5585
+ (styleId) => {
5586
+ const style = getHeaderStyleOrThrow(styleId);
5587
+ return isHeaderStyleCompatibleWithLayout(style, layoutId);
5588
+ }
5589
+ );
5520
5590
  }
5521
5591
  function solidBrandHeader(theme) {
5522
5592
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
@@ -5547,8 +5617,14 @@ function solidBrandHeader(theme) {
5547
5617
  borderRadius: "none",
5548
5618
  effects: {
5549
5619
  hover: [
5550
- { effectId: "text-color-change", options: { hoverColorToken: "secondary" } },
5551
- { effectId: "nav-underline", options: { style: "grow", colorToken: "secondary" } }
5620
+ {
5621
+ effectId: "text-color-change",
5622
+ options: { hoverColorToken: "secondary" }
5623
+ },
5624
+ {
5625
+ effectId: "nav-underline",
5626
+ options: { style: "grow", colorToken: "secondary" }
5627
+ }
5552
5628
  ]
5553
5629
  }
5554
5630
  },
@@ -5604,10 +5680,10 @@ function cleanBaseHeader(theme) {
5604
5680
  ctaGap: "default"
5605
5681
  };
5606
5682
  }
5607
- function editorialLineHeader(theme) {
5683
+ function serifLineHeader(theme) {
5608
5684
  return {
5609
5685
  ...baseHeader(theme),
5610
- variant: "editorial",
5686
+ variant: "centered",
5611
5687
  positioning: "sticky",
5612
5688
  shrinkOnScroll: false,
5613
5689
  background: {
@@ -5781,16 +5857,6 @@ var init_headerLooks = __esm({
5781
5857
  maxRecommendedNavItems: 5,
5782
5858
  allowedLogoShapes: ["none", "text-only", "horizontal", "square"]
5783
5859
  },
5784
- {
5785
- id: asHeaderLayoutId("editorial"),
5786
- label: "Editorial",
5787
- description: "A composed, magazine-like stacked header treatment.",
5788
- structure: "editorial-stack",
5789
- variant: "editorial",
5790
- defaultPositioning: "static",
5791
- shrinkOnScroll: false,
5792
- maxRecommendedNavItems: 6
5793
- },
5794
5860
  {
5795
5861
  id: asHeaderLayoutId("floating"),
5796
5862
  label: "Floating",
@@ -5808,17 +5874,19 @@ var init_headerLooks = __esm({
5808
5874
  id: asHeaderStyleId("minimal"),
5809
5875
  label: "Minimal",
5810
5876
  description: "Quiet surface with simple color-change navigation.",
5811
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
5877
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5812
5878
  navInteraction: "color-change",
5813
- surface: "neutral"
5879
+ surface: "neutral",
5880
+ navTypography: "plain"
5814
5881
  },
5815
5882
  {
5816
5883
  id: asHeaderStyleId("fine-line"),
5817
5884
  label: "Fine Line",
5818
5885
  description: "Light surface with a crisp lower rule and underline hover.",
5819
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
5886
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5820
5887
  navInteraction: "underline-grow",
5821
- surface: "bordered"
5888
+ surface: "bordered",
5889
+ navTypography: "plain"
5822
5890
  },
5823
5891
  {
5824
5892
  id: asHeaderStyleId("soft-bar"),
@@ -5826,7 +5894,8 @@ var init_headerLooks = __esm({
5826
5894
  description: "Soft tinted surface with gentle pill hover states.",
5827
5895
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5828
5896
  navInteraction: "pill-background",
5829
- surface: "soft"
5897
+ surface: "soft",
5898
+ navTypography: "plain"
5830
5899
  },
5831
5900
  {
5832
5901
  id: asHeaderStyleId("pill-nav"),
@@ -5834,23 +5903,26 @@ var init_headerLooks = __esm({
5834
5903
  description: "A calm pill navigation rail over a neutral header.",
5835
5904
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5836
5905
  navInteraction: "pill-background",
5837
- surface: "soft"
5906
+ surface: "soft",
5907
+ navTypography: "plain"
5838
5908
  },
5839
5909
  {
5840
5910
  id: asHeaderStyleId("brand-bar"),
5841
5911
  label: "Brand Bar",
5842
5912
  description: "Solid brand surface with high-contrast navigation.",
5843
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
5913
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5844
5914
  navInteraction: "color-change",
5845
- surface: "brand-solid"
5915
+ surface: "brand-solid",
5916
+ navTypography: "brand-caps"
5846
5917
  },
5847
5918
  {
5848
5919
  id: asHeaderStyleId("brand-underline"),
5849
5920
  label: "Brand Underline",
5850
5921
  description: "Brand surface with underline-grow navigation.",
5851
- supportedLayoutIds: supportedLayouts(["classic", "editorial"]),
5922
+ supportedLayoutIds: supportedLayouts(["classic"]),
5852
5923
  navInteraction: "underline-grow",
5853
- surface: "brand-solid"
5924
+ surface: "brand-solid",
5925
+ navTypography: "brand-caps"
5854
5926
  },
5855
5927
  {
5856
5928
  id: asHeaderStyleId("brand-pill"),
@@ -5858,41 +5930,44 @@ var init_headerLooks = __esm({
5858
5930
  description: "Solid brand surface with rounded active and hover states.",
5859
5931
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
5860
5932
  navInteraction: "pill-background",
5861
- surface: "brand-solid"
5933
+ surface: "brand-solid",
5934
+ navTypography: "brand-caps"
5862
5935
  },
5863
5936
  {
5864
- id: asHeaderStyleId("editorial-line"),
5865
- label: "Editorial Line",
5937
+ id: asHeaderStyleId("serif-line"),
5938
+ label: "Serif Line",
5866
5939
  description: "Typographic logo treatment with understated underline navigation.",
5867
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
5940
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5868
5941
  navInteraction: "underline-grow",
5869
- surface: "bordered"
5942
+ surface: "bordered",
5943
+ navTypography: "heading"
5870
5944
  },
5871
5945
  {
5872
5946
  id: asHeaderStyleId("flat-tabs"),
5873
5947
  label: "Flat Tabs",
5874
5948
  description: "Flat block hover and active states with a Swiss utility feel.",
5875
- supportedLayoutIds: supportedLayouts(["classic", "centered", "editorial"]),
5949
+ supportedLayoutIds: supportedLayouts(["classic", "centered"]),
5876
5950
  navInteraction: "flat-block",
5877
- surface: "bordered"
5951
+ surface: "bordered",
5952
+ navTypography: "quiet-caps"
5878
5953
  },
5879
5954
  {
5880
5955
  id: asHeaderStyleId("glass"),
5881
5956
  label: "Glass",
5882
- description: "Floating translucent chrome with frosted navigation backing.",
5883
- supportedLayoutIds: supportedLayouts(["floating"]),
5957
+ description: "Translucent chrome with frosted navigation backing.",
5958
+ supportedLayoutIds: supportedLayouts(["classic", "floating"]),
5884
5959
  navInteraction: "glass-backed",
5885
5960
  surface: "floating",
5886
- requiresFloatingLayout: true
5961
+ navTypography: "plain"
5887
5962
  },
5888
5963
  {
5889
5964
  id: asHeaderStyleId("minimal-surface"),
5890
- label: "Minimal Surface",
5891
- description: "Floating chrome with a restrained translucent surface.",
5965
+ label: "Clear Split",
5966
+ description: "Floating logo with transparent navigation and no shared shell.",
5892
5967
  supportedLayoutIds: supportedLayouts(["floating"]),
5893
5968
  navInteraction: "color-change",
5894
5969
  surface: "floating",
5895
- requiresFloatingLayout: true
5970
+ navTypography: "plain"
5896
5971
  },
5897
5972
  {
5898
5973
  id: asHeaderStyleId("soft-shell"),
@@ -5901,7 +5976,25 @@ var init_headerLooks = __esm({
5901
5976
  supportedLayoutIds: supportedLayouts(["floating"]),
5902
5977
  navInteraction: "pill-background",
5903
5978
  surface: "floating",
5904
- requiresFloatingLayout: true
5979
+ navTypography: "plain"
5980
+ },
5981
+ {
5982
+ id: asHeaderStyleId("split-glass"),
5983
+ label: "Split Glass",
5984
+ description: "Logo floats independently while the navigation sits in a glass rail.",
5985
+ supportedLayoutIds: supportedLayouts(["floating"]),
5986
+ navInteraction: "glass-backed",
5987
+ surface: "floating",
5988
+ navTypography: "quiet-caps"
5989
+ },
5990
+ {
5991
+ id: asHeaderStyleId("split-pill"),
5992
+ label: "Split Pill",
5993
+ description: "Logo floats independently with a soft pill-backed navigation rail.",
5994
+ supportedLayoutIds: supportedLayouts(["floating"]),
5995
+ navInteraction: "pill-background",
5996
+ surface: "floating",
5997
+ navTypography: "heading"
5905
5998
  }
5906
5999
  ];
5907
6000
  headerLayoutsById = new Map(
@@ -5915,13 +6008,14 @@ var init_headerLooks = __esm({
5915
6008
  asHeaderLayoutId("classic"),
5916
6009
  headerStyleRepairChain([
5917
6010
  "minimal",
6011
+ "glass",
5918
6012
  "fine-line",
5919
6013
  "soft-bar",
5920
6014
  "pill-nav",
5921
6015
  "brand-bar",
5922
6016
  "brand-underline",
5923
6017
  "brand-pill",
5924
- "editorial-line",
6018
+ "serif-line",
5925
6019
  "flat-tabs"
5926
6020
  ])
5927
6021
  ],
@@ -5934,19 +6028,7 @@ var init_headerLooks = __esm({
5934
6028
  "pill-nav",
5935
6029
  "brand-bar",
5936
6030
  "brand-pill",
5937
- "editorial-line",
5938
- "flat-tabs"
5939
- ])
5940
- ],
5941
- [
5942
- asHeaderLayoutId("editorial"),
5943
- headerStyleRepairChain([
5944
- "minimal",
5945
- "fine-line",
5946
- "soft-bar",
5947
- "brand-bar",
5948
- "brand-underline",
5949
- "editorial-line",
6031
+ "serif-line",
5950
6032
  "flat-tabs"
5951
6033
  ])
5952
6034
  ],
@@ -5955,25 +6037,70 @@ var init_headerLooks = __esm({
5955
6037
  headerStyleRepairChain([
5956
6038
  "glass",
5957
6039
  "minimal-surface",
6040
+ "split-glass",
6041
+ "split-pill",
5958
6042
  "soft-shell",
5959
6043
  "brand-pill"
5960
6044
  ])
5961
6045
  ]
5962
6046
  ]);
5963
- /* @__PURE__ */ new Map([
5964
- [asHeaderStyleId("brand-bar"), headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])],
5965
- [asHeaderStyleId("brand-underline"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
5966
- [asHeaderStyleId("brand-pill"), headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])],
5967
- [asHeaderStyleId("pill-nav"), headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])],
5968
- [asHeaderStyleId("flat-tabs"), headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])],
5969
- [asHeaderStyleId("editorial-line"), headerStyleRepairChain(["editorial-line", "fine-line", "minimal"])],
5970
- [asHeaderStyleId("glass"), headerStyleRepairChain(["glass", "minimal-surface", "minimal"])],
5971
- [asHeaderStyleId("soft-shell"), headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])],
5972
- [asHeaderStyleId("minimal-surface"), headerStyleRepairChain(["minimal-surface", "minimal"])],
5973
- [asHeaderStyleId("fine-line"), headerStyleRepairChain(["fine-line", "minimal"])],
5974
- [asHeaderStyleId("soft-bar"), headerStyleRepairChain(["soft-bar", "minimal"])],
5975
- [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
5976
- ]);
6047
+ /* @__PURE__ */ new Map(
6048
+ [
6049
+ [
6050
+ asHeaderStyleId("brand-bar"),
6051
+ headerStyleRepairChain(["brand-bar", "brand-pill", "minimal"])
6052
+ ],
6053
+ [
6054
+ asHeaderStyleId("brand-underline"),
6055
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
6056
+ ],
6057
+ [
6058
+ asHeaderStyleId("brand-pill"),
6059
+ headerStyleRepairChain(["brand-pill", "brand-bar", "minimal"])
6060
+ ],
6061
+ [
6062
+ asHeaderStyleId("pill-nav"),
6063
+ headerStyleRepairChain(["pill-nav", "soft-bar", "minimal"])
6064
+ ],
6065
+ [
6066
+ asHeaderStyleId("flat-tabs"),
6067
+ headerStyleRepairChain(["flat-tabs", "pill-nav", "minimal"])
6068
+ ],
6069
+ [
6070
+ asHeaderStyleId("serif-line"),
6071
+ headerStyleRepairChain(["serif-line", "fine-line", "minimal"])
6072
+ ],
6073
+ [
6074
+ asHeaderStyleId("glass"),
6075
+ headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
6076
+ ],
6077
+ [
6078
+ asHeaderStyleId("soft-shell"),
6079
+ headerStyleRepairChain(["soft-shell", "soft-bar", "minimal"])
6080
+ ],
6081
+ [
6082
+ asHeaderStyleId("minimal-surface"),
6083
+ headerStyleRepairChain(["minimal-surface", "minimal"])
6084
+ ],
6085
+ [
6086
+ asHeaderStyleId("split-glass"),
6087
+ headerStyleRepairChain(["split-glass", "glass", "minimal-surface"])
6088
+ ],
6089
+ [
6090
+ asHeaderStyleId("split-pill"),
6091
+ headerStyleRepairChain(["split-pill", "soft-shell", "brand-pill"])
6092
+ ],
6093
+ [
6094
+ asHeaderStyleId("fine-line"),
6095
+ headerStyleRepairChain(["fine-line", "minimal"])
6096
+ ],
6097
+ [
6098
+ asHeaderStyleId("soft-bar"),
6099
+ headerStyleRepairChain(["soft-bar", "minimal"])
6100
+ ],
6101
+ [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
6102
+ ]
6103
+ );
5977
6104
  legacyHeaderLookAliases = [
5978
6105
  {
5979
6106
  lookId: asHeaderLookId("clean-base"),
@@ -5990,10 +6117,10 @@ var init_headerLooks = __esm({
5990
6117
  }
5991
6118
  },
5992
6119
  {
5993
- lookId: asHeaderLookId("editorial-line"),
6120
+ lookId: asHeaderLookId("serif-line"),
5994
6121
  selection: {
5995
- layoutId: asHeaderLayoutId("editorial"),
5996
- styleId: asHeaderStyleId("editorial-line")
6122
+ layoutId: asHeaderLayoutId("centered"),
6123
+ styleId: asHeaderStyleId("serif-line")
5997
6124
  }
5998
6125
  },
5999
6126
  {
@@ -6032,9 +6159,7 @@ var init_headerLooks = __esm({
6032
6159
  }
6033
6160
  }
6034
6161
  ];
6035
- legacyHeaderLookAliasesById = new Map(
6036
- legacyHeaderLookAliases.map((alias) => [alias.lookId, alias])
6037
- );
6162
+ legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
6038
6163
  headerLookCatalog = [
6039
6164
  {
6040
6165
  id: asHeaderLookId("clean-base"),
@@ -6063,27 +6188,27 @@ var init_headerLooks = __esm({
6063
6188
  compile: solidBrandHeader
6064
6189
  },
6065
6190
  {
6066
- id: asHeaderLookId("editorial-line"),
6067
- label: "Editorial line",
6068
- visualTreatment: "light-editorial",
6191
+ id: asHeaderLookId("serif-line"),
6192
+ label: "Serif line",
6193
+ visualTreatment: "light-serif",
6069
6194
  layoutBehavior: "sticky",
6070
6195
  configuration: {
6071
- structure: "editorial-stack",
6072
- treatment: "light-editorial",
6196
+ structure: "centered-stack",
6197
+ treatment: "light-serif",
6073
6198
  behavior: "sticky"
6074
6199
  },
6075
6200
  openingRequirement: "none",
6076
6201
  maxRecommendedNavItems: 6,
6077
- compile: editorialLineHeader
6202
+ compile: serifLineHeader
6078
6203
  },
6079
6204
  {
6080
6205
  id: asHeaderLookId("centered-calm"),
6081
6206
  label: "Centered calm",
6082
- visualTreatment: "light-editorial",
6207
+ visualTreatment: "light-serif",
6083
6208
  layoutBehavior: "normal-flow",
6084
6209
  configuration: {
6085
6210
  structure: "centered-stack",
6086
- treatment: "light-editorial",
6211
+ treatment: "light-serif",
6087
6212
  behavior: "normal-flow"
6088
6213
  },
6089
6214
  openingRequirement: "none",
@@ -6580,12 +6705,16 @@ var init_typographyPresets = __esm({
6580
6705
 
6581
6706
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
6582
6707
  function uniqueContentFrameKinds() {
6583
- const kinds = [...new Set(
6584
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
6585
- )];
6708
+ const kinds = [
6709
+ ...new Set(
6710
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
6711
+ )
6712
+ ];
6586
6713
  const firstKind = kinds[0];
6587
6714
  if (!firstKind) {
6588
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
6715
+ throw new Error(
6716
+ "Expected generated design option catalog to expose at least one content frame kind."
6717
+ );
6589
6718
  }
6590
6719
  return [firstKind, ...kinds.slice(1)];
6591
6720
  }
@@ -6594,7 +6723,9 @@ function defineCuratedSiteStyle(input) {
6594
6723
  const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
6595
6724
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
6596
6725
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
6597
- if (!typographyPresetChoices.some((choice) => choice.id === defaultTypographyPresetId)) {
6726
+ if (!typographyPresetChoices.some(
6727
+ (choice) => choice.id === defaultTypographyPresetId
6728
+ )) {
6598
6729
  throw new Error(
6599
6730
  `Default typography preset ${defaultTypographyPresetId} is not curated for site style ${input.id}.`
6600
6731
  );
@@ -6605,9 +6736,13 @@ function defineCuratedSiteStyle(input) {
6605
6736
  description: input.description,
6606
6737
  generationBrief: input.generationBrief,
6607
6738
  selectionKeywordRules: input.selectionKeywordRules ?? [],
6608
- siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
6739
+ siteCreatorSelection: input.siteCreatorSelection ?? {
6740
+ kind: "explicit_only"
6741
+ },
6609
6742
  template: {
6610
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
6743
+ id: asDesignSystemTemplateId(
6744
+ `template:${input.id.replace("site-style:", "")}`
6745
+ ),
6611
6746
  name: input.name,
6612
6747
  version: 1,
6613
6748
  tokenRecipes: input.tokenRecipes,
@@ -6625,13 +6760,17 @@ function defineCuratedSiteStyle(input) {
6625
6760
  } : inferredHeaderCuration.defaultHeaderSelection,
6626
6761
  recommendedHeaderLayoutChoices: input.recommendedHeaderLayoutChoices ?? inferredHeaderCuration.recommendedHeaderLayoutChoices,
6627
6762
  recommendedHeaderStyleChoicesByLayout: input.recommendedHeaderStyleChoicesByLayout ?? inferredHeaderCuration.recommendedHeaderStyleChoicesByLayout,
6628
- discouragedHeaderSelections: input.discouragedHeaderSelections?.map((selection) => ({
6629
- layoutId: asHeaderLayoutId(selection.layoutId),
6630
- styleId: asHeaderStyleId(selection.styleId)
6631
- })),
6763
+ discouragedHeaderSelections: input.discouragedHeaderSelections?.map(
6764
+ (selection) => ({
6765
+ layoutId: asHeaderLayoutId(selection.layoutId),
6766
+ styleId: asHeaderStyleId(selection.styleId)
6767
+ })
6768
+ ),
6632
6769
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
6633
6770
  // Empty is intentional: resolveFooterLook always appends its guaranteed fallback.
6634
- recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
6771
+ recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(
6772
+ asFooterLookId
6773
+ ),
6635
6774
  buttonPersonalityChoices: input.buttonPersonalityChoices,
6636
6775
  paletteVariantChoices: input.paletteVariantChoices,
6637
6776
  typographyPresetChoices,
@@ -6650,7 +6789,7 @@ function headerLayoutChoice(id, note) {
6650
6789
  function headerStyleChoice(id, note) {
6651
6790
  return note ? { id: asHeaderStyleId(id), note } : { id: asHeaderStyleId(id) };
6652
6791
  }
6653
- function headerLayoutRecordKey(id) {
6792
+ function unbrandHeaderLayoutId(id) {
6654
6793
  return id;
6655
6794
  }
6656
6795
  function uniqueHeaderLayoutChoices(choices) {
@@ -6673,7 +6812,9 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
6673
6812
  return [first, ...choices.slice(1)];
6674
6813
  }
6675
6814
  function inferHeaderCurationFromLegacyLooks(lookIds) {
6676
- const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter((selection) => Boolean(selection));
6815
+ const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
6816
+ (selection) => Boolean(selection)
6817
+ );
6677
6818
  const defaultHeaderSelection = selections[0] ?? {
6678
6819
  layoutId: asHeaderLayoutId("classic"),
6679
6820
  styleId: asHeaderStyleId("minimal")
@@ -6684,10 +6825,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
6684
6825
  const stylesByLayout = {};
6685
6826
  for (const layoutChoice of layoutChoices) {
6686
6827
  const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
6687
- stylesByLayout[headerLayoutRecordKey(layoutChoice.id)] = nonEmptyHeaderStyleChoices(
6688
- styleChoices,
6689
- layoutChoice.id
6690
- );
6828
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
6691
6829
  }
6692
6830
  return {
6693
6831
  defaultHeaderSelection,
@@ -6833,7 +6971,11 @@ var init_curatedSiteStyles = __esm({
6833
6971
  motion: "subtle"
6834
6972
  },
6835
6973
  compositionBudget: quietBudget,
6836
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
6974
+ recommendedHeaderLookIds: [
6975
+ "centered-calm",
6976
+ "minimal-transparent",
6977
+ "clean-base"
6978
+ ],
6837
6979
  buttonPersonalityChoices: [
6838
6980
  buttonChoice("soft-pill"),
6839
6981
  buttonChoice("pebble"),
@@ -6862,7 +7004,11 @@ var init_curatedSiteStyles = __esm({
6862
7004
  motion: "subtle"
6863
7005
  },
6864
7006
  compositionBudget: balancedBudget,
6865
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
7007
+ recommendedHeaderLookIds: [
7008
+ "practical-utility",
7009
+ "brand-solid",
7010
+ "clean-base"
7011
+ ],
6866
7012
  buttonPersonalityChoices: [
6867
7013
  buttonChoice("confident-chip"),
6868
7014
  buttonChoice("soft-pill"),
@@ -6889,7 +7035,11 @@ var init_curatedSiteStyles = __esm({
6889
7035
  motion: "subtle"
6890
7036
  },
6891
7037
  compositionBudget: balancedBudget,
6892
- recommendedHeaderLookIds: ["editorial-line", "minimal-transparent", "centered-calm"],
7038
+ recommendedHeaderLookIds: [
7039
+ "serif-line",
7040
+ "minimal-transparent",
7041
+ "centered-calm"
7042
+ ],
6893
7043
  buttonPersonalityChoices: [
6894
7044
  buttonChoice("editorial-link"),
6895
7045
  buttonChoice("soft-pill"),
@@ -6917,7 +7067,11 @@ var init_curatedSiteStyles = __esm({
6917
7067
  motion: "expressive"
6918
7068
  },
6919
7069
  compositionBudget: balancedBudget,
6920
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
7070
+ recommendedHeaderLookIds: [
7071
+ "brand-solid",
7072
+ "practical-utility",
7073
+ "clean-base"
7074
+ ],
6921
7075
  buttonPersonalityChoices: [
6922
7076
  buttonChoice("pebble"),
6923
7077
  buttonChoice("brushed-wash"),
@@ -6934,7 +7088,10 @@ var init_curatedSiteStyles = __esm({
6934
7088
  name: "Quiet Luxury",
6935
7089
  description: "Minimal, confident, and refined for premium experiences and private services.",
6936
7090
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
6937
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
7091
+ siteCreatorSelection: {
7092
+ kind: "site_creator_keyword_heuristic",
7093
+ priority: 20
7094
+ },
6938
7095
  selectionKeywordRules: [
6939
7096
  { kind: "word", value: "luxury" },
6940
7097
  { kind: "word", value: "premium" },
@@ -6952,7 +7109,11 @@ var init_curatedSiteStyles = __esm({
6952
7109
  motion: "none"
6953
7110
  },
6954
7111
  compositionBudget: quietBudget,
6955
- recommendedHeaderLookIds: ["minimal-transparent", "editorial-line", "clean-base"],
7112
+ recommendedHeaderLookIds: [
7113
+ "minimal-transparent",
7114
+ "serif-line",
7115
+ "clean-base"
7116
+ ],
6956
7117
  buttonPersonalityChoices: [
6957
7118
  buttonChoice("editorial-link"),
6958
7119
  buttonChoice("confident-chip"),
@@ -6988,7 +7149,11 @@ var init_curatedSiteStyles = __esm({
6988
7149
  motion: "none"
6989
7150
  },
6990
7151
  compositionBudget: quietBudget,
6991
- recommendedHeaderLookIds: ["practical-utility", "brand-solid", "clean-base"],
7152
+ recommendedHeaderLookIds: [
7153
+ "practical-utility",
7154
+ "brand-solid",
7155
+ "clean-base"
7156
+ ],
6992
7157
  buttonPersonalityChoices: [
6993
7158
  buttonChoice("confident-chip"),
6994
7159
  buttonChoice("pebble"),
@@ -7015,7 +7180,11 @@ var init_curatedSiteStyles = __esm({
7015
7180
  motion: "subtle"
7016
7181
  },
7017
7182
  compositionBudget: balancedBudget,
7018
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "clean-base"],
7183
+ recommendedHeaderLookIds: [
7184
+ "centered-calm",
7185
+ "minimal-transparent",
7186
+ "clean-base"
7187
+ ],
7019
7188
  buttonPersonalityChoices: [
7020
7189
  buttonChoice("soft-pill"),
7021
7190
  buttonChoice("pebble"),
@@ -7032,7 +7201,10 @@ var init_curatedSiteStyles = __esm({
7032
7201
  name: "Quiet Practice",
7033
7202
  description: "Grounded, calm, and practical for small appointment-first practices.",
7034
7203
  generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
7035
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
7204
+ siteCreatorSelection: {
7205
+ kind: "site_creator_keyword_heuristic",
7206
+ priority: 30
7207
+ },
7036
7208
  selectionKeywordRules: [
7037
7209
  { kind: "substring", value: "massage" },
7038
7210
  { kind: "word", value: "bodywork" },
@@ -7053,7 +7225,11 @@ var init_curatedSiteStyles = __esm({
7053
7225
  motion: "subtle"
7054
7226
  },
7055
7227
  compositionBudget: quietBudget,
7056
- recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
7228
+ recommendedHeaderLookIds: [
7229
+ "practical-utility",
7230
+ "clean-base",
7231
+ "centered-calm"
7232
+ ],
7057
7233
  buttonPersonalityChoices: [
7058
7234
  buttonChoice("pebble"),
7059
7235
  buttonChoice("soft-pill"),
@@ -7070,7 +7246,10 @@ var init_curatedSiteStyles = __esm({
7070
7246
  name: "Personal Retreat Journal",
7071
7247
  description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
7072
7248
  generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
7073
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
7249
+ siteCreatorSelection: {
7250
+ kind: "site_creator_keyword_heuristic",
7251
+ priority: 40
7252
+ },
7074
7253
  selectionKeywordRules: [
7075
7254
  { kind: "substring", value: "retreat" },
7076
7255
  { kind: "phrase", value: "solo practitioner" },
@@ -7090,7 +7269,11 @@ var init_curatedSiteStyles = __esm({
7090
7269
  motion: "subtle"
7091
7270
  },
7092
7271
  compositionBudget: balancedBudget,
7093
- recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
7272
+ recommendedHeaderLookIds: [
7273
+ "serif-line",
7274
+ "centered-calm",
7275
+ "minimal-transparent"
7276
+ ],
7094
7277
  buttonPersonalityChoices: [
7095
7278
  buttonChoice("editorial-link"),
7096
7279
  buttonChoice("soft-pill"),
@@ -7107,7 +7290,10 @@ var init_curatedSiteStyles = __esm({
7107
7290
  name: "Tactile Workshop",
7108
7291
  description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
7109
7292
  generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
7110
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
7293
+ siteCreatorSelection: {
7294
+ kind: "site_creator_keyword_heuristic",
7295
+ priority: 50
7296
+ },
7111
7297
  selectionKeywordRules: [
7112
7298
  { kind: "substring", value: "ceramic" },
7113
7299
  { kind: "word", value: "pottery" },
@@ -7127,8 +7313,15 @@ var init_curatedSiteStyles = __esm({
7127
7313
  motion: "subtle"
7128
7314
  },
7129
7315
  compositionBudget: balancedBudget,
7130
- recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
7131
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
7316
+ recommendedHeaderLookIds: [
7317
+ "brand-solid",
7318
+ "practical-utility",
7319
+ "clean-base"
7320
+ ],
7321
+ recommendedFooterLookIds: [
7322
+ "site-footer-brand-two-band",
7323
+ "footer-muted-grounding"
7324
+ ],
7132
7325
  buttonPersonalityChoices: [
7133
7326
  buttonChoice("pebble"),
7134
7327
  buttonChoice("confident-chip"),
@@ -7147,7 +7340,10 @@ var init_curatedSiteStyles = __esm({
7147
7340
  name: "Soft Earth",
7148
7341
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
7149
7342
  generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
7150
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 45 },
7343
+ siteCreatorSelection: {
7344
+ kind: "site_creator_keyword_heuristic",
7345
+ priority: 45
7346
+ },
7151
7347
  selectionKeywordRules: [
7152
7348
  { kind: "word", value: "meditation" },
7153
7349
  { kind: "word", value: "wellbeing" },
@@ -7223,8 +7419,15 @@ var init_curatedSiteStyles = __esm({
7223
7419
  "faq-soft-earth-two-column",
7224
7420
  "contact-form-panel"
7225
7421
  ],
7226
- recommendedHeaderLookIds: ["centered-calm", "minimal-transparent", "editorial-line"],
7227
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
7422
+ recommendedHeaderLookIds: [
7423
+ "centered-calm",
7424
+ "minimal-transparent",
7425
+ "serif-line"
7426
+ ],
7427
+ recommendedFooterLookIds: [
7428
+ "footer-muted-grounding",
7429
+ "site-footer-brand-two-band"
7430
+ ],
7228
7431
  buttonPersonalityChoices: [
7229
7432
  buttonChoice("earth-pill"),
7230
7433
  buttonChoice("soft-pill"),
@@ -7243,7 +7446,10 @@ var init_curatedSiteStyles = __esm({
7243
7446
  name: "Bold Launch",
7244
7447
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
7245
7448
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
7246
- siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
7449
+ siteCreatorSelection: {
7450
+ kind: "site_creator_keyword_heuristic",
7451
+ priority: 10
7452
+ },
7247
7453
  selectionKeywordRules: [
7248
7454
  { kind: "substring", value: "launch" },
7249
7455
  { kind: "substring", value: "campaign" },
@@ -7262,7 +7468,11 @@ var init_curatedSiteStyles = __esm({
7262
7468
  motion: "expressive"
7263
7469
  },
7264
7470
  compositionBudget: expressiveBudget,
7265
- recommendedHeaderLookIds: ["transparent-overlay", "floating-glass", "brand-solid"],
7471
+ recommendedHeaderLookIds: [
7472
+ "transparent-overlay",
7473
+ "floating-glass",
7474
+ "brand-solid"
7475
+ ],
7266
7476
  buttonPersonalityChoices: [
7267
7477
  buttonChoice("ink-stamp"),
7268
7478
  buttonChoice("confident-chip"),
@@ -7313,8 +7523,15 @@ var init_curatedSiteStyles = __esm({
7313
7523
  "testimonials-accent-quote-proof",
7314
7524
  "contact-form-brand-depth-card"
7315
7525
  ],
7316
- recommendedHeaderLookIds: ["brand-solid", "transparent-overlay", "practical-utility"],
7317
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
7526
+ recommendedHeaderLookIds: [
7527
+ "brand-solid",
7528
+ "transparent-overlay",
7529
+ "practical-utility"
7530
+ ],
7531
+ recommendedFooterLookIds: [
7532
+ "site-footer-brand-two-band",
7533
+ "footer-muted-grounding"
7534
+ ],
7318
7535
  buttonPersonalityChoices: [
7319
7536
  buttonChoice("showtime-pill"),
7320
7537
  buttonChoice("confident-chip"),
@@ -23145,15 +23362,15 @@ function validateStringConstraint(plan, constraint, value) {
23145
23362
  case "maxLength":
23146
23363
  return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
23147
23364
  case "emailFormat":
23148
- return z.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
23365
+ return isCanonicalEmailValue(value) ? [] : [issue(plan, "invalidEmail")];
23149
23366
  case "phoneFormat":
23150
- return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
23367
+ return isCanonicalPhoneValue(value) ? [] : [issue(plan, "invalidPhone")];
23151
23368
  case "patternFormat": {
23152
23369
  const re = compilePattern(constraint.pattern);
23153
23370
  return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
23154
23371
  }
23155
23372
  case "urlFormat":
23156
- return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
23373
+ return isCanonicalUrlValue(value, { allowRelative: constraint.allowRelative }) ? [] : [issue(plan, "invalidUrl")];
23157
23374
  case "dateFormat":
23158
23375
  return isValidDateString(value) ? [] : [issue(plan, "invalidDate")];
23159
23376
  case "timeFormat":
@@ -23375,9 +23592,15 @@ function compilePattern(pattern) {
23375
23592
  function isValidNumber(value) {
23376
23593
  return typeof value === "number" && Number.isFinite(value);
23377
23594
  }
23378
- function isValidUrl(value, allowRelative) {
23595
+ function isCanonicalEmailValue(value) {
23596
+ return z.email().safeParse(value).success;
23597
+ }
23598
+ function isCanonicalPhoneValue(value) {
23599
+ return TEL_RE.test(value);
23600
+ }
23601
+ function isCanonicalUrlValue(value, options = {}) {
23379
23602
  if (!value) return false;
23380
- if (allowRelative && value.startsWith("/")) return true;
23603
+ if (options.allowRelative === true && value.startsWith("/")) return true;
23381
23604
  try {
23382
23605
  const parsed = new URL(value);
23383
23606
  return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
@@ -25432,10 +25655,7 @@ var headerRootClassTransform = {
25432
25655
  const navContainerType = header?.navContainer?.type ?? "none";
25433
25656
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
25434
25657
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
25435
- const classes = [
25436
- config2.base,
25437
- backgroundClass
25438
- ];
25658
+ const classes = [config2.base, backgroundClass];
25439
25659
  if (!hasContainedNav) {
25440
25660
  if (config2.blur) classes.push(config2.blur);
25441
25661
  if (config2.blurSupport) classes.push(config2.blurSupport);
@@ -25450,7 +25670,12 @@ var headerRootClassTransform = {
25450
25670
  if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
25451
25671
  classes.push(config2.shrink);
25452
25672
  }
25453
- const VALID_VARIANTS = ["classic", "centered", "transparent", "floating", "editorial"];
25673
+ const VALID_VARIANTS = [
25674
+ "classic",
25675
+ "centered",
25676
+ "transparent",
25677
+ "floating"
25678
+ ];
25454
25679
  const variant = header?.variant;
25455
25680
  if (variant && VALID_VARIANTS.includes(variant)) {
25456
25681
  classes.push(`header-variant-${variant}`);
@@ -26062,15 +26287,21 @@ var mobileCta = ctaButton({
26062
26287
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
26063
26288
  {
26064
26289
  type: "div",
26065
- props: { className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
26290
+ props: {
26291
+ className: "nav-mobile-bar nav-mobile-bar-top rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
26292
+ }
26066
26293
  },
26067
26294
  {
26068
26295
  type: "div",
26069
- props: { className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
26296
+ props: {
26297
+ className: "nav-mobile-bar nav-mobile-bar-middle rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
26298
+ }
26070
26299
  },
26071
26300
  {
26072
26301
  type: "div",
26073
- props: { className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current" }
26302
+ props: {
26303
+ className: "nav-mobile-bar nav-mobile-bar-bottom rb-h-0.5 rb-w-5 rb-rounded-full rb-bg-current"
26304
+ }
26074
26305
  }
26075
26306
  ]);
26076
26307
  var mobileToggleButton = {
@@ -26253,28 +26484,6 @@ var floatingLayout = inline(
26253
26484
  ],
26254
26485
  when("$root.theme.header.variant", { equals: "floating" })
26255
26486
  );
26256
- var editorialLayout = stack(
26257
- {
26258
- gap: "md",
26259
- align: "center",
26260
- className: bindProp("$root.theme.header.maxWidth", {
26261
- transforms: pipe(
26262
- tx("layout.maxWidthClass", {
26263
- base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
26264
- })
26265
- ),
26266
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-6 rb-text-center`
26267
- })
26268
- },
26269
- [
26270
- centeredLogoRow,
26271
- createNavRow(
26272
- `${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-8 rb-gap-y-3`,
26273
- "center"
26274
- )
26275
- ],
26276
- when("$root.theme.header.variant", { equals: "editorial" })
26277
- );
26278
26487
  var headerLayout = headerSection(
26279
26488
  {
26280
26489
  background: bindProp("$root.theme.header", {
@@ -26288,10 +26497,7 @@ var headerLayout = headerSection(
26288
26497
  }),
26289
26498
  style: bindProp("$root.theme.header", {
26290
26499
  transforms: pipe(tx("layout.headerRootStyle")),
26291
- fallback: mergeStyles(
26292
- textColorStyle("text"),
26293
- borderColorStyle("border")
26294
- )
26500
+ fallback: mergeStyles(textColorStyle("text"), borderColorStyle("border"))
26295
26501
  })
26296
26502
  },
26297
26503
  [
@@ -26300,7 +26506,6 @@ var headerLayout = headerSection(
26300
26506
  centeredLayout,
26301
26507
  transparentLayout,
26302
26508
  floatingLayout,
26303
- editorialLayout,
26304
26509
  mobileOverlay
26305
26510
  ],
26306
26511
  props({
@@ -56301,7 +56506,7 @@ var SimpleCache = class {
56301
56506
  };
56302
56507
 
56303
56508
  // src/version.ts
56304
- var SDK_VERSION = "0.77.0";
56509
+ var SDK_VERSION = "0.77.1";
56305
56510
 
56306
56511
  // src/client/error.ts
56307
56512
  var RiverbankApiError = class _RiverbankApiError extends Error {