@designcrowd/library.brand-page 6.0.19-ast-btns → 6.0.19-ast-btns-2

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 (41) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-BrIpxgMF.js → CreatedOnBrandCrowd-de-de-BI4rJV_V.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DQDv2DBf.js → CreatedOnBrandCrowd-en-us-Crf-sBeO.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BadaUjK1.js → CreatedOnBrandCrowd-es-es-DE_kK1yb.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DbrUAAGP.js → CreatedOnBrandCrowd-fr-ca-BXhEu1vY.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DbrUAAGP.js → CreatedOnBrandCrowd-fr-fr-BXhEu1vY.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Cy41WPcW.js → CreatedOnBrandCrowd-pt-br-DG1azcKI.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Cy41WPcW.js → CreatedOnBrandCrowd-pt-pt-DG1azcKI.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-D6UvcWQ5.js → CreatedOnDcom-de-de-BFL99-ya.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DKUOQjj3.js → CreatedOnDcom-en-us-DqWMpFgs.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CftpM7Vk.js → CreatedOnDcom-es-es-Ds0zIzXx.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DcCQzJDA.js → CreatedOnDcom-fr-ca-X-GSmpwv.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-Bodcymjw.js → CreatedOnDcom-fr-fr-Cm1eyNiD.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-B1OmeM4X.js → CreatedOnDcom-pt-br-BUOePaaJ.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CGx-k757.js → CreatedOnDcom-pt-pt-CJSZsybQ.js} +1 -1
  15. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +1 -1
  16. package/lib/src/brand-page/utils/button.util.d.ts +5 -0
  17. package/lib/src/brand-page/utils/button.util.js +13 -0
  18. package/lib/src/brand-page-maker/constants/config-settings-constant.js +9 -0
  19. package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -1
  20. package/lib/src/css/library.brand-page-brandCrowd.min.css +61 -36
  21. package/lib/src/css/library.brand-page-brandPage.min.css +61 -36
  22. package/lib/src/css/library.brand-page-designCom.min.css +61 -36
  23. package/lib/src/css/library.brand-page-preview.min.css +61 -36
  24. package/lib/src/index.mjs +1 -1
  25. package/lib/src/{lib-ce4Vsuiu.js → lib-CfENvLvt.js} +28317 -28187
  26. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +5 -0
  27. package/package.json +2 -2
  28. package/src/brand-page/components/button/ButtonStyleWrapper.vue +46 -29
  29. package/src/brand-page/components/button/ButtonStyleWrapper.vue.test.ts +8 -5
  30. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +1 -1
  31. package/src/brand-page/components/contact-form/ContactForm.vue +9 -3
  32. package/src/brand-page/utils/button.util.ts +17 -0
  33. package/src/brand-page-maker/constants/config-settings-constant.ts +12 -0
  34. package/src/brand-page-maker/models/content-settings-configs.ts +1 -1
  35. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +6 -0
  36. package/lib/src/brand-page/components/button/decorative-button-styles.d.ts +0 -5
  37. package/lib/src/brand-page/components/button/decorative-button-styles.js +0 -13
  38. package/lib/src/brand-page/components/button/paper-button-mask.d.ts +0 -1
  39. package/lib/src/brand-page/components/button/paper-button-mask.js +0 -8
  40. package/src/brand-page/components/button/decorative-button-styles.ts +0 -16
  41. package/src/brand-page/components/button/paper-button-mask.ts +0 -8
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-ce4Vsuiu.js";
2
+ import { _ as t } from "./lib-CfENvLvt.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-ce4Vsuiu.js";
2
+ import { _ as e } from "./lib-CfENvLvt.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-ce4Vsuiu.js";
2
+ import { _ as e } from "./lib-CfENvLvt.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-ce4Vsuiu.js";
2
+ import { _ as e } from "./lib-CfENvLvt.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-ce4Vsuiu.js";
2
+ import { _ as e } from "./lib-CfENvLvt.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-ce4Vsuiu.js";
2
+ import { _ as e } from "./lib-CfENvLvt.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-ce4Vsuiu.js";
2
+ import { _ as M } from "./lib-CfENvLvt.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-ce4Vsuiu.js";
2
+ import { _ as M } from "./lib-CfENvLvt.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,7 +1,7 @@
1
1
  import { defineComponent } from 'vue';
2
2
  import { FORM_FIELD_TYPES } from '@brand-page/models';
3
3
  import { getEmailValidationError, getMessageValidationError, getNameValidationError, getPhoneValidationError, } from '@brand-page/utils';
4
- import { isDecorativeButtonStyle } from '../button/decorative-button-styles';
4
+ import { isDecorativeButtonStyle } from '../../utils/button.util';
5
5
  import brandPageClient from '../../clients/brand-page.client';
6
6
  import { isEmail } from '../../../utils/validator.util';
7
7
  import { ALIGN_CARD_CENTER, ALIGN_CARD_CENTER_IMAGE, ALIGN_CENTERED, ALIGN_LEFT_FULL_IMAGE, ALIGN_RIGHT_FULL_IMAGE, DISPLAY_STYLE_COLLAPSED, RECAPTCHA_ACTION_CONTACT_FORM, TEXT_ONLY, } from '../../constants';
@@ -5,3 +5,8 @@ import type { ButtonStyles } from '../models';
5
5
  * @returns The calculated box shadow CSS value
6
6
  */
7
7
  export declare const getBoxShadowValue: (buttonStyles: ButtonStyles) => string;
8
+ export declare const BUTTON_STYLE_BRUSHSTROKE = "BUTTON_STYLE_19";
9
+ export declare const BUTTON_STYLE_ARROW = "BUTTON_STYLE_20";
10
+ export declare const BUTTON_STYLE_PAPER = "BUTTON_STYLE_21";
11
+ export declare const DECORATIVE_BUTTON_STYLE_IDS: string[];
12
+ export declare const isDecorativeButtonStyle: (styleId?: string) => boolean;
@@ -27,3 +27,16 @@ export const getBoxShadowValue = (buttonStyles) => {
27
27
  }
28
28
  return boxShadowValue;
29
29
  };
30
+ // The "decorative" button styles — brushstroke / arrow / torn-paper — whose visual
31
+ // is drawn by ButtonStyleWrapper rather than plain CSS. Their banner-like SVG
32
+ // decoration needs the button to be reasonably wide to render legibly, so narrow
33
+ // (w-fit) hosts should widen when one of these is active (BP-5800).
34
+ export const BUTTON_STYLE_BRUSHSTROKE = 'BUTTON_STYLE_19';
35
+ export const BUTTON_STYLE_ARROW = 'BUTTON_STYLE_20';
36
+ export const BUTTON_STYLE_PAPER = 'BUTTON_STYLE_21';
37
+ export const DECORATIVE_BUTTON_STYLE_IDS = [
38
+ BUTTON_STYLE_BRUSHSTROKE,
39
+ BUTTON_STYLE_ARROW,
40
+ BUTTON_STYLE_PAPER,
41
+ ];
42
+ export const isDecorativeButtonStyle = (styleId) => !!styleId && DECORATIVE_BUTTON_STYLE_IDS.includes(styleId);
@@ -455,6 +455,10 @@ const testimonialReplaceImageSettings = () => ({
455
455
  desiredWidth: undefined,
456
456
  mediaType: MEDIA_TYPES.image,
457
457
  });
458
+ // Transparent bg is disallowed on the single-page side (brand-page /
459
+ // brand-contact) so the added background colour stays a solid backdrop for the
460
+ // decorative button styles (BP-5800); brand-site sections keep transparent.
461
+ const disableTransparentOffBrandSite = (brandPageType) => brandPageType !== BRAND_PAGE_TYPES.brandSite;
458
462
  export const LOGO_SETTINGS_CONFIG = () => ({
459
463
  createInitialContent: createInitialLogoContent,
460
464
  type: 'logo',
@@ -1470,6 +1474,7 @@ export const MAILING_LIST_CONTENT_SETTINGS_CONFIG = () => ({
1470
1474
  isInline: true,
1471
1475
  showToggle: false,
1472
1476
  title: contentSettingsTr(`backgroundColorTitle`),
1477
+ disableTransparent: disableTransparentOffBrandSite,
1473
1478
  valueConvertor: backgroundColorConvertor,
1474
1479
  defaultGetter: paymentFillColorFieldDefaultGetter,
1475
1480
  },
@@ -1651,6 +1656,7 @@ export const REQUEST_PAYMENT_CONTENT_SETTINGS_CONFIG = () => ({
1651
1656
  isInline: true,
1652
1657
  showToggle: false,
1653
1658
  title: contentSettingsTr(`backgroundColorTitle`),
1659
+ disableTransparent: disableTransparentOffBrandSite,
1654
1660
  valueConvertor: backgroundColorConvertor,
1655
1661
  defaultGetter: paymentFillColorFieldDefaultGetter,
1656
1662
  },
@@ -1726,6 +1732,7 @@ export const SUPPORT_ME_CONTENT_SETTINGS_CONFIG = () => ({
1726
1732
  isInline: true,
1727
1733
  showToggle: false,
1728
1734
  title: contentSettingsTr(`backgroundColorTitle`),
1735
+ disableTransparent: disableTransparentOffBrandSite,
1729
1736
  valueConvertor: backgroundColorConvertor,
1730
1737
  defaultGetter: paymentFillColorFieldDefaultGetter,
1731
1738
  },
@@ -1876,6 +1883,7 @@ export const CONTACT_FORM_SETTINGS_CONFIG = () => ({
1876
1883
  isInline: true,
1877
1884
  showToggle: false,
1878
1885
  title: contentSettingsTr(`backgroundColorTitle`),
1886
+ disableTransparent: disableTransparentOffBrandSite,
1879
1887
  valueConvertor: backgroundColorConvertor,
1880
1888
  defaultGetter: contactFormBackgroundColorDefaultGetter,
1881
1889
  },
@@ -2694,6 +2702,7 @@ export const SHOP_SECTION_SETTINGS_CONFIG = () => ({
2694
2702
  isInline: true,
2695
2703
  showToggle: false,
2696
2704
  title: contentSettingsTr(`backgroundColorTitle`),
2705
+ disableTransparent: disableTransparentOffBrandSite,
2697
2706
  valueConvertor: backgroundColorConvertor,
2698
2707
  },
2699
2708
  },
@@ -90,7 +90,7 @@ export interface ContentSettingsField<TContent> {
90
90
  variant?: VariantDisplayModes | ((brandPageType: BrandPageType) => VariantDisplayModes);
91
91
  replaceImageSettings?: ContentReplaceImageSettings<TContent>;
92
92
  showToggle?: boolean;
93
- disableTransparent?: boolean;
93
+ disableTransparent?: boolean | ((brandPageType: BrandPageType) => boolean);
94
94
  valueConvertor?: ValueConvertor<any, any>;
95
95
  canReplace?: boolean;
96
96
  placeholderAssessor?: PlaceholderTypeAssessor<TContent>;
@@ -1106,6 +1106,9 @@ a.maker-anchor {
1106
1106
  .tw-min-w-\[310px\] {
1107
1107
  min-width: 310px
1108
1108
  }
1109
+ .tw-min-w-full {
1110
+ min-width: 100%
1111
+ }
1109
1112
  .tw-max-w-0 {
1110
1113
  max-width: 0px
1111
1114
  }
@@ -5657,40 +5660,56 @@ input[data-v-4cd691db]::-webkit-inner-spin-button {
5657
5660
  margin on the button itself shifts it out of alignment with the decoration. The
5658
5661
  top gap is instead applied to the wrapper (tw-mt-4 above) so the whole decorated
5659
5662
  unit moves together and stays flush at the container's bottom edge (BP-5800). */
5660
- .bp-style-wrapper--no-margin[data-v-c2533ae5] button {
5663
+ .bp-style-wrapper--no-margin[data-v-255edfd5] button {
5661
5664
  margin-top: 0;
5662
5665
  margin-bottom: 0;
5663
5666
  }
5664
5667
 
5665
- /* The brushstroke ends are transformed over the button's left/right edges, so
5666
- they must not capture clicks (BP-5882). */
5667
- .bp-icon-brush-left[data-v-c2533ae5],
5668
- .bp-icon-brush-right[data-v-c2533ae5] {
5668
+ /* Brushstroke: flanking brush-end icons are transformed over the button's
5669
+ left/right edges, so they must not capture clicks (BP-5882). */
5670
+ .bp-icon-brush-left[data-v-255edfd5],
5671
+ .bp-icon-brush-right[data-v-255edfd5] {
5669
5672
  pointer-events: none;
5670
5673
  }
5671
-
5672
- /* Torn-paper: clip the button itself to a torn silhouette via a CSS alpha mask
5673
- (the button keeps its own fill). The mask stretches to the button box, so the
5674
- torn shape always matches the button — it can't overhang neighbours, stretch
5675
- past the button, or block clicks the way the old absolute overlay did
5676
- (BP-5882/BP-5883). */
5677
- .bp-button-paper[data-v-c2533ae5] button,
5678
- .bp-button-paper[data-v-c2533ae5] a {
5679
- -webkit-mask: var(--paper-mask) no-repeat center / 100% 100%;
5680
- mask: var(--paper-mask) no-repeat center / 100% 100%;
5681
- -webkit-mask-mode: alpha;
5682
- mask-mode: alpha;
5683
- }
5684
- .bp-icon-brush-left[data-v-c2533ae5] svg {
5674
+ .bp-icon-brush-left[data-v-255edfd5] svg {
5685
5675
  -webkit-transform: translateX(-99%);
5686
5676
  transform: translateX(-99%);
5687
5677
  width: auto;
5688
5678
  }
5689
- .bp-icon-brush-right[data-v-c2533ae5] svg {
5679
+ .bp-icon-brush-right[data-v-255edfd5] svg {
5690
5680
  width: auto;
5691
5681
  }
5692
- .bp-button-arrow[data-v-c2533ae5],
5693
- .device-wrapper--mobile .bp-button-arrow[data-v-c2533ae5] {
5682
+
5683
+ /* Torn-paper: the button-paper icon sits BEHIND the button as its shape. The
5684
+ wrapper is the positioning context; the icon is an inert inset layer that fills
5685
+ the button box exactly (inset:0 + preserveAspectRatio none) without inflating
5686
+ its size or capturing clicks (BP-5882/BP-5883). The button's own fill is made
5687
+ transparent so the icon's colour shows through. */
5688
+ .bp-button-shape[data-v-255edfd5] {
5689
+ position: relative;
5690
+ }
5691
+ .bp-icon-shape[data-v-255edfd5] {
5692
+ position: absolute;
5693
+ inset: 0;
5694
+ width: 100%;
5695
+ height: 100%;
5696
+ pointer-events: none;
5697
+ }
5698
+ .bp-button-shape[data-v-255edfd5] button,
5699
+ .bp-button-shape[data-v-255edfd5] a {
5700
+ position: relative; /* sit above the inert background */
5701
+ /* !important to override the host button's inline background-color. */
5702
+ background-color: transparent !important;
5703
+ }
5704
+ /* button-paper ships hardcoded fill="black"; recolour to the button's fill. CSS
5705
+ fill overrides the presentation attribute; clip-path rects are geometric so
5706
+ recolouring them is harmless. */
5707
+ .bp-icon-shape[data-v-255edfd5] path,
5708
+ .bp-icon-shape[data-v-255edfd5] rect {
5709
+ fill: currentColor;
5710
+ }
5711
+ .bp-button-arrow[data-v-255edfd5],
5712
+ .device-wrapper--mobile .bp-button-arrow[data-v-255edfd5] {
5694
5713
  /* Fixed-px arrowhead (not %) so the chevron is equally sharp at any button
5695
5714
  width — a %-based point collapses on narrow buttons (e.g. the 120px contact
5696
5715
  form submit) and only reads as an arrow on wide ones. */
@@ -6169,53 +6188,59 @@ select[data-v-14e7c7c7] {
6169
6188
  width: 100%;
6170
6189
  }
6171
6190
 
6172
- .form-error[data-v-a6dab4ce] {
6191
+ .form-error[data-v-04e03cb2] {
6173
6192
  font-size: 0.875rem;
6174
6193
  line-height: 1.25rem;
6175
6194
  color: #f21b3f;
6176
6195
  }
6177
- .contact-container[data-v-a6dab4ce] {
6196
+ .contact-container[data-v-04e03cb2] {
6178
6197
  max-width: var(--brandsite-max-width);
6179
6198
  margin: 0 auto;
6180
6199
  }
6181
- .c-text-padding[data-v-a6dab4ce] {
6200
+ .c-text-padding[data-v-04e03cb2] {
6182
6201
  padding-left: 1rem;
6183
6202
  padding-right: 1rem;
6184
6203
  }
6185
- .device-wrapper--mobile .c-divided-container[data-v-a6dab4ce] {
6204
+ .device-wrapper--mobile .c-divided-container[data-v-04e03cb2] {
6186
6205
  -webkit-box-orient: vertical;
6187
6206
  -webkit-box-direction: normal;
6188
6207
  -ms-flex-direction: column;
6189
6208
  flex-direction: column;
6190
6209
  }
6191
- .device-wrapper--mobile .c-divided-container-reverse[data-v-a6dab4ce] {
6210
+ .device-wrapper--mobile .c-divided-container-reverse[data-v-04e03cb2] {
6192
6211
  -webkit-box-orient: vertical;
6193
6212
  -webkit-box-direction: reverse;
6194
6213
  -ms-flex-direction: column-reverse;
6195
6214
  flex-direction: column-reverse;
6196
6215
  }
6197
6216
  @media (max-width: 767px) {
6198
- .c-button-full[data-v-a6dab4ce] {
6217
+ .c-button-full[data-v-04e03cb2] {
6218
+ width: 100%;
6219
+ }
6220
+ /* Match the button's full-width on published mobile. The maker uses the
6221
+ isMobileDevice prop for this; the renderer has no such state, so the
6222
+ decorative-button wrapper is widened here via the real viewport instead. */
6223
+ [data-v-04e03cb2] .bp-style-wrapper {
6199
6224
  width: 100%;
6200
6225
  }
6201
- .c-col-span-2[data-v-a6dab4ce] {
6226
+ .c-col-span-2[data-v-04e03cb2] {
6202
6227
  grid-column: span 2 / span 2;
6203
6228
  }
6204
- .c-mobile-padding[data-v-a6dab4ce] {
6229
+ .c-mobile-padding[data-v-04e03cb2] {
6205
6230
  padding: 1rem;
6206
6231
  }
6207
- .c-text-padding[data-v-a6dab4ce] {
6232
+ .c-text-padding[data-v-04e03cb2] {
6208
6233
  grid-column: span 2 / span 2;
6209
6234
  padding-left: 0px;
6210
6235
  padding-right: 0px;
6211
6236
  }
6212
- .c-divided-container[data-v-a6dab4ce] {
6237
+ .c-divided-container[data-v-04e03cb2] {
6213
6238
  -webkit-box-orient: vertical;
6214
6239
  -webkit-box-direction: normal;
6215
6240
  -ms-flex-direction: column;
6216
6241
  flex-direction: column;
6217
6242
  }
6218
- .c-divided-container-reverse[data-v-a6dab4ce] {
6243
+ .c-divided-container-reverse[data-v-04e03cb2] {
6219
6244
  -webkit-box-orient: vertical;
6220
6245
  -webkit-box-direction: reverse;
6221
6246
  -ms-flex-direction: column-reverse;
@@ -6223,16 +6248,16 @@ select[data-v-14e7c7c7] {
6223
6248
  }
6224
6249
  }
6225
6250
  @media (min-width: 767px) {
6226
- .c-aspect-square[data-v-a6dab4ce] {
6251
+ .c-aspect-square[data-v-04e03cb2] {
6227
6252
  aspect-ratio: 1 / 1;
6228
6253
  }
6229
- .c-divided-container[data-v-a6dab4ce] {
6254
+ .c-divided-container[data-v-04e03cb2] {
6230
6255
  -webkit-box-orient: horizontal;
6231
6256
  -webkit-box-direction: normal;
6232
6257
  -ms-flex-direction: row;
6233
6258
  flex-direction: row;
6234
6259
  }
6235
- .c-divided-container-reverse[data-v-a6dab4ce] {
6260
+ .c-divided-container-reverse[data-v-04e03cb2] {
6236
6261
  -webkit-box-orient: horizontal;
6237
6262
  -webkit-box-direction: reverse;
6238
6263
  -ms-flex-direction: row-reverse;
@@ -1527,6 +1527,9 @@ a.maker-anchor {
1527
1527
  .tw-min-w-\[310px\] {
1528
1528
  min-width: 310px;
1529
1529
  }
1530
+ .tw-min-w-full {
1531
+ min-width: 100%;
1532
+ }
1530
1533
  .tw-max-w-0 {
1531
1534
  max-width: 0px;
1532
1535
  }
@@ -6268,40 +6271,56 @@ input[data-v-4cd691db]::-webkit-inner-spin-button {
6268
6271
  margin on the button itself shifts it out of alignment with the decoration. The
6269
6272
  top gap is instead applied to the wrapper (tw-mt-4 above) so the whole decorated
6270
6273
  unit moves together and stays flush at the container's bottom edge (BP-5800). */
6271
- .bp-style-wrapper--no-margin[data-v-c2533ae5] button {
6274
+ .bp-style-wrapper--no-margin[data-v-255edfd5] button {
6272
6275
  margin-top: 0;
6273
6276
  margin-bottom: 0;
6274
6277
  }
6275
6278
 
6276
- /* The brushstroke ends are transformed over the button's left/right edges, so
6277
- they must not capture clicks (BP-5882). */
6278
- .bp-icon-brush-left[data-v-c2533ae5],
6279
- .bp-icon-brush-right[data-v-c2533ae5] {
6279
+ /* Brushstroke: flanking brush-end icons are transformed over the button's
6280
+ left/right edges, so they must not capture clicks (BP-5882). */
6281
+ .bp-icon-brush-left[data-v-255edfd5],
6282
+ .bp-icon-brush-right[data-v-255edfd5] {
6280
6283
  pointer-events: none;
6281
6284
  }
6282
-
6283
- /* Torn-paper: clip the button itself to a torn silhouette via a CSS alpha mask
6284
- (the button keeps its own fill). The mask stretches to the button box, so the
6285
- torn shape always matches the button — it can't overhang neighbours, stretch
6286
- past the button, or block clicks the way the old absolute overlay did
6287
- (BP-5882/BP-5883). */
6288
- .bp-button-paper[data-v-c2533ae5] button,
6289
- .bp-button-paper[data-v-c2533ae5] a {
6290
- -webkit-mask: var(--paper-mask) no-repeat center / 100% 100%;
6291
- mask: var(--paper-mask) no-repeat center / 100% 100%;
6292
- -webkit-mask-mode: alpha;
6293
- mask-mode: alpha;
6294
- }
6295
- .bp-icon-brush-left[data-v-c2533ae5] svg {
6285
+ .bp-icon-brush-left[data-v-255edfd5] svg {
6296
6286
  -webkit-transform: translateX(-99%);
6297
6287
  transform: translateX(-99%);
6298
6288
  width: auto;
6299
6289
  }
6300
- .bp-icon-brush-right[data-v-c2533ae5] svg {
6290
+ .bp-icon-brush-right[data-v-255edfd5] svg {
6301
6291
  width: auto;
6302
6292
  }
6303
- .bp-button-arrow[data-v-c2533ae5],
6304
- .device-wrapper--mobile .bp-button-arrow[data-v-c2533ae5] {
6293
+
6294
+ /* Torn-paper: the button-paper icon sits BEHIND the button as its shape. The
6295
+ wrapper is the positioning context; the icon is an inert inset layer that fills
6296
+ the button box exactly (inset:0 + preserveAspectRatio none) without inflating
6297
+ its size or capturing clicks (BP-5882/BP-5883). The button's own fill is made
6298
+ transparent so the icon's colour shows through. */
6299
+ .bp-button-shape[data-v-255edfd5] {
6300
+ position: relative;
6301
+ }
6302
+ .bp-icon-shape[data-v-255edfd5] {
6303
+ position: absolute;
6304
+ inset: 0;
6305
+ width: 100%;
6306
+ height: 100%;
6307
+ pointer-events: none;
6308
+ }
6309
+ .bp-button-shape[data-v-255edfd5] button,
6310
+ .bp-button-shape[data-v-255edfd5] a {
6311
+ position: relative; /* sit above the inert background */
6312
+ /* !important to override the host button's inline background-color. */
6313
+ background-color: transparent !important;
6314
+ }
6315
+ /* button-paper ships hardcoded fill="black"; recolour to the button's fill. CSS
6316
+ fill overrides the presentation attribute; clip-path rects are geometric so
6317
+ recolouring them is harmless. */
6318
+ .bp-icon-shape[data-v-255edfd5] path,
6319
+ .bp-icon-shape[data-v-255edfd5] rect {
6320
+ fill: currentColor;
6321
+ }
6322
+ .bp-button-arrow[data-v-255edfd5],
6323
+ .device-wrapper--mobile .bp-button-arrow[data-v-255edfd5] {
6305
6324
  /* Fixed-px arrowhead (not %) so the chevron is equally sharp at any button
6306
6325
  width — a %-based point collapses on narrow buttons (e.g. the 120px contact
6307
6326
  form submit) and only reads as an arrow on wide ones. */
@@ -6780,53 +6799,59 @@ select[data-v-14e7c7c7] {
6780
6799
  width: 100%;
6781
6800
  }
6782
6801
 
6783
- .form-error[data-v-a6dab4ce] {
6802
+ .form-error[data-v-04e03cb2] {
6784
6803
  font-size: 0.875rem;
6785
6804
  line-height: 1.25rem;
6786
6805
  color: #f21b3f;
6787
6806
  }
6788
- .contact-container[data-v-a6dab4ce] {
6807
+ .contact-container[data-v-04e03cb2] {
6789
6808
  max-width: var(--brandsite-max-width);
6790
6809
  margin: 0 auto;
6791
6810
  }
6792
- .c-text-padding[data-v-a6dab4ce] {
6811
+ .c-text-padding[data-v-04e03cb2] {
6793
6812
  padding-left: 1rem;
6794
6813
  padding-right: 1rem;
6795
6814
  }
6796
- .device-wrapper--mobile .c-divided-container[data-v-a6dab4ce] {
6815
+ .device-wrapper--mobile .c-divided-container[data-v-04e03cb2] {
6797
6816
  -webkit-box-orient: vertical;
6798
6817
  -webkit-box-direction: normal;
6799
6818
  -ms-flex-direction: column;
6800
6819
  flex-direction: column;
6801
6820
  }
6802
- .device-wrapper--mobile .c-divided-container-reverse[data-v-a6dab4ce] {
6821
+ .device-wrapper--mobile .c-divided-container-reverse[data-v-04e03cb2] {
6803
6822
  -webkit-box-orient: vertical;
6804
6823
  -webkit-box-direction: reverse;
6805
6824
  -ms-flex-direction: column-reverse;
6806
6825
  flex-direction: column-reverse;
6807
6826
  }
6808
6827
  @media (max-width: 767px) {
6809
- .c-button-full[data-v-a6dab4ce] {
6828
+ .c-button-full[data-v-04e03cb2] {
6829
+ width: 100%;
6830
+ }
6831
+ /* Match the button's full-width on published mobile. The maker uses the
6832
+ isMobileDevice prop for this; the renderer has no such state, so the
6833
+ decorative-button wrapper is widened here via the real viewport instead. */
6834
+ [data-v-04e03cb2] .bp-style-wrapper {
6810
6835
  width: 100%;
6811
6836
  }
6812
- .c-col-span-2[data-v-a6dab4ce] {
6837
+ .c-col-span-2[data-v-04e03cb2] {
6813
6838
  grid-column: span 2 / span 2;
6814
6839
  }
6815
- .c-mobile-padding[data-v-a6dab4ce] {
6840
+ .c-mobile-padding[data-v-04e03cb2] {
6816
6841
  padding: 1rem;
6817
6842
  }
6818
- .c-text-padding[data-v-a6dab4ce] {
6843
+ .c-text-padding[data-v-04e03cb2] {
6819
6844
  grid-column: span 2 / span 2;
6820
6845
  padding-left: 0px;
6821
6846
  padding-right: 0px;
6822
6847
  }
6823
- .c-divided-container[data-v-a6dab4ce] {
6848
+ .c-divided-container[data-v-04e03cb2] {
6824
6849
  -webkit-box-orient: vertical;
6825
6850
  -webkit-box-direction: normal;
6826
6851
  -ms-flex-direction: column;
6827
6852
  flex-direction: column;
6828
6853
  }
6829
- .c-divided-container-reverse[data-v-a6dab4ce] {
6854
+ .c-divided-container-reverse[data-v-04e03cb2] {
6830
6855
  -webkit-box-orient: vertical;
6831
6856
  -webkit-box-direction: reverse;
6832
6857
  -ms-flex-direction: column-reverse;
@@ -6834,16 +6859,16 @@ select[data-v-14e7c7c7] {
6834
6859
  }
6835
6860
  }
6836
6861
  @media (min-width: 767px) {
6837
- .c-aspect-square[data-v-a6dab4ce] {
6862
+ .c-aspect-square[data-v-04e03cb2] {
6838
6863
  aspect-ratio: 1 / 1;
6839
6864
  }
6840
- .c-divided-container[data-v-a6dab4ce] {
6865
+ .c-divided-container[data-v-04e03cb2] {
6841
6866
  -webkit-box-orient: horizontal;
6842
6867
  -webkit-box-direction: normal;
6843
6868
  -ms-flex-direction: row;
6844
6869
  flex-direction: row;
6845
6870
  }
6846
- .c-divided-container-reverse[data-v-a6dab4ce] {
6871
+ .c-divided-container-reverse[data-v-04e03cb2] {
6847
6872
  -webkit-box-orient: horizontal;
6848
6873
  -webkit-box-direction: reverse;
6849
6874
  -ms-flex-direction: row-reverse;