From 980761f82c2d2989e00e0ff422c3f897b0778b38 Mon Sep 17 00:00:00 2001 From: Morg <32440777+morgpork@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:48:09 +1300 Subject: [PATCH 0001/1275] Delete snippets directory --- snippets/account-actions.liquid | 226 ---- snippets/account-button.liquid | 91 -- snippets/account-drawer.liquid | 92 -- snippets/account-popover.liquid | 88 -- snippets/add-to-cart-button.liquid | 119 -- snippets/background-image.liquid | 70 - snippets/background-media.liquid | 21 - snippets/background-video.liquid | 56 - snippets/bento-grid.liquid | 210 --- snippets/blog-comment-form.liquid | 206 --- snippets/border-override.liquid | 7 - snippets/button.liquid | 45 - snippets/card-gallery.liquid | 405 ------ snippets/cart-bubble.liquid | 40 - snippets/cart-discount.liquid | 214 --- snippets/cart-drawer.liquid | 171 --- snippets/cart-icon-component.liquid | 32 - snippets/cart-note.liquid | 47 - snippets/cart-products.liquid | 765 ----------- snippets/cart-summary.liquid | 139 -- snippets/checkbox.liquid | 58 - snippets/collection-card.liquid | 195 --- snippets/color-schemes.liquid | 99 -- snippets/contact-form.liquid | 170 --- snippets/disclosure-content.liquid | 59 - snippets/disclosure-trigger.liquid | 82 -- snippets/divider.liquid | 54 - snippets/drawer-localization.liquid | 125 -- snippets/dropdown-localization.liquid | 92 -- snippets/editorial-blog-grid.liquid | 119 -- snippets/editorial-collection-grid.liquid | 117 -- snippets/editorial-product-grid.liquid | 125 -- snippets/facets-actions.liquid | 220 ---- snippets/filter-remove-buttons.liquid | 178 --- snippets/filters-toggle.liquid | 151 --- snippets/fonts.liquid | 42 - snippets/gap-style.liquid | 25 - snippets/gift-card-recipient-form.liquid | 403 ------ snippets/grid-density-controls.liquid | 179 --- snippets/group.liquid | 90 -- snippets/header-actions.liquid | 270 ---- snippets/header-drawer.liquid | 1162 ----------------- snippets/header-menu.liquid | 93 -- snippets/header-row.liquid | 78 -- snippets/icon-or-image.liquid | 40 - snippets/icon.liquid | 399 ------ snippets/image.liquid | 32 - snippets/jumbo-text.liquid | 193 --- snippets/layout-panel-style.liquid | 33 - snippets/link-featured-image.liquid | 47 - snippets/list-filter.liquid | 783 ----------- snippets/localization-form.liquid | 819 ------------ snippets/media.liquid | 117 -- snippets/mega-menu-list.liquid | 348 ----- snippets/mega-menu.liquid | 30 - snippets/menu-font-styles.liquid | 23 - snippets/meta-tags.liquid | 121 -- snippets/overflow-list.liquid | 63 - snippets/overlay.liquid | 38 - snippets/predictive-search-empty-state.liquid | 44 - .../predictive-search-products-list.liquid | 185 --- ...predictive-search-resource-carousel.liquid | 130 -- snippets/predictive-search.liquid | 435 ------ snippets/price-filter.liquid | 239 ---- snippets/price.liquid | 79 -- snippets/product-card-badges.liquid | 77 -- snippets/product-card-variant-url.liquid | 27 - snippets/product-card.liquid | 228 ---- snippets/product-grid.liquid | 216 --- snippets/product-media.liquid | 214 --- snippets/quantity-selector.liquid | 74 -- snippets/quick-add-modal.liquid | 434 ------ snippets/quick-add.liquid | 324 ----- snippets/resource-card.liquid | 288 ---- snippets/resource-image.liquid | 214 --- snippets/resource-list-carousel.liquid | 61 - snippets/resource-list.liquid | 176 --- snippets/scripts.liquid | 283 ---- snippets/search-modal.liquid | 109 -- snippets/search.liquid | 52 - snippets/section.liquid | 97 -- snippets/size-style.liquid | 33 - snippets/skip-to-content-link.liquid | 16 - snippets/slideshow-arrow.liquid | 49 - snippets/slideshow-arrows.liquid | 29 - snippets/slideshow-controls.liquid | 191 --- snippets/slideshow-slide.liquid | 42 - snippets/slideshow.liquid | 77 -- snippets/sorting.liquid | 361 ----- snippets/spacing-padding.liquid | 11 - snippets/spacing-style.liquid | 36 - snippets/strikethrough-variant.liquid | 11 - snippets/stylesheets.liquid | 2 - snippets/submenu-font-styles.liquid | 48 - snippets/swatch.liquid | 41 - snippets/tax-info.liquid | 84 -- snippets/text.liquid | 218 ---- snippets/theme-editor.liquid | 5 - snippets/theme-styles-variables.liquid | 566 -------- snippets/timeline-scope.liquid | 11 - snippets/typography-style.liquid | 75 -- snippets/unit-price.liquid | 16 - snippets/util-autofill-img-size-attr.liquid | 75 -- snippets/util-mega-menu-img-sizes-attr.liquid | 87 -- snippets/util-product-grid-card-size.liquid | 45 - snippets/util-product-media-sizes-attr.liquid | 142 -- snippets/variant-main-picker.liquid | 512 -------- snippets/variant-quick-add.liquid | 101 -- snippets/variant-swatches.liquid | 165 --- snippets/video.liquid | 216 --- 110 files changed, 17567 deletions(-) delete mode 100644 snippets/account-actions.liquid delete mode 100644 snippets/account-button.liquid delete mode 100644 snippets/account-drawer.liquid delete mode 100644 snippets/account-popover.liquid delete mode 100644 snippets/add-to-cart-button.liquid delete mode 100644 snippets/background-image.liquid delete mode 100644 snippets/background-media.liquid delete mode 100644 snippets/background-video.liquid delete mode 100644 snippets/bento-grid.liquid delete mode 100644 snippets/blog-comment-form.liquid delete mode 100644 snippets/border-override.liquid delete mode 100644 snippets/button.liquid delete mode 100644 snippets/card-gallery.liquid delete mode 100644 snippets/cart-bubble.liquid delete mode 100644 snippets/cart-discount.liquid delete mode 100644 snippets/cart-drawer.liquid delete mode 100644 snippets/cart-icon-component.liquid delete mode 100644 snippets/cart-note.liquid delete mode 100644 snippets/cart-products.liquid delete mode 100644 snippets/cart-summary.liquid delete mode 100644 snippets/checkbox.liquid delete mode 100644 snippets/collection-card.liquid delete mode 100644 snippets/color-schemes.liquid delete mode 100644 snippets/contact-form.liquid delete mode 100644 snippets/disclosure-content.liquid delete mode 100644 snippets/disclosure-trigger.liquid delete mode 100644 snippets/divider.liquid delete mode 100644 snippets/drawer-localization.liquid delete mode 100644 snippets/dropdown-localization.liquid delete mode 100644 snippets/editorial-blog-grid.liquid delete mode 100644 snippets/editorial-collection-grid.liquid delete mode 100644 snippets/editorial-product-grid.liquid delete mode 100644 snippets/facets-actions.liquid delete mode 100644 snippets/filter-remove-buttons.liquid delete mode 100644 snippets/filters-toggle.liquid delete mode 100644 snippets/fonts.liquid delete mode 100644 snippets/gap-style.liquid delete mode 100644 snippets/gift-card-recipient-form.liquid delete mode 100644 snippets/grid-density-controls.liquid delete mode 100644 snippets/group.liquid delete mode 100644 snippets/header-actions.liquid delete mode 100644 snippets/header-drawer.liquid delete mode 100644 snippets/header-menu.liquid delete mode 100644 snippets/header-row.liquid delete mode 100644 snippets/icon-or-image.liquid delete mode 100644 snippets/icon.liquid delete mode 100644 snippets/image.liquid delete mode 100644 snippets/jumbo-text.liquid delete mode 100644 snippets/layout-panel-style.liquid delete mode 100644 snippets/link-featured-image.liquid delete mode 100644 snippets/list-filter.liquid delete mode 100644 snippets/localization-form.liquid delete mode 100644 snippets/media.liquid delete mode 100644 snippets/mega-menu-list.liquid delete mode 100644 snippets/mega-menu.liquid delete mode 100644 snippets/menu-font-styles.liquid delete mode 100644 snippets/meta-tags.liquid delete mode 100644 snippets/overflow-list.liquid delete mode 100644 snippets/overlay.liquid delete mode 100644 snippets/predictive-search-empty-state.liquid delete mode 100644 snippets/predictive-search-products-list.liquid delete mode 100644 snippets/predictive-search-resource-carousel.liquid delete mode 100644 snippets/predictive-search.liquid delete mode 100644 snippets/price-filter.liquid delete mode 100644 snippets/price.liquid delete mode 100644 snippets/product-card-badges.liquid delete mode 100644 snippets/product-card-variant-url.liquid delete mode 100644 snippets/product-card.liquid delete mode 100644 snippets/product-grid.liquid delete mode 100644 snippets/product-media.liquid delete mode 100644 snippets/quantity-selector.liquid delete mode 100644 snippets/quick-add-modal.liquid delete mode 100644 snippets/quick-add.liquid delete mode 100644 snippets/resource-card.liquid delete mode 100644 snippets/resource-image.liquid delete mode 100644 snippets/resource-list-carousel.liquid delete mode 100644 snippets/resource-list.liquid delete mode 100644 snippets/scripts.liquid delete mode 100644 snippets/search-modal.liquid delete mode 100644 snippets/search.liquid delete mode 100644 snippets/section.liquid delete mode 100644 snippets/size-style.liquid delete mode 100644 snippets/skip-to-content-link.liquid delete mode 100644 snippets/slideshow-arrow.liquid delete mode 100644 snippets/slideshow-arrows.liquid delete mode 100644 snippets/slideshow-controls.liquid delete mode 100644 snippets/slideshow-slide.liquid delete mode 100644 snippets/slideshow.liquid delete mode 100644 snippets/sorting.liquid delete mode 100644 snippets/spacing-padding.liquid delete mode 100644 snippets/spacing-style.liquid delete mode 100644 snippets/strikethrough-variant.liquid delete mode 100644 snippets/stylesheets.liquid delete mode 100644 snippets/submenu-font-styles.liquid delete mode 100644 snippets/swatch.liquid delete mode 100644 snippets/tax-info.liquid delete mode 100644 snippets/text.liquid delete mode 100644 snippets/theme-editor.liquid delete mode 100644 snippets/theme-styles-variables.liquid delete mode 100644 snippets/timeline-scope.liquid delete mode 100644 snippets/typography-style.liquid delete mode 100644 snippets/unit-price.liquid delete mode 100644 snippets/util-autofill-img-size-attr.liquid delete mode 100644 snippets/util-mega-menu-img-sizes-attr.liquid delete mode 100644 snippets/util-product-grid-card-size.liquid delete mode 100644 snippets/util-product-media-sizes-attr.liquid delete mode 100644 snippets/variant-main-picker.liquid delete mode 100644 snippets/variant-quick-add.liquid delete mode 100644 snippets/variant-swatches.liquid delete mode 100644 snippets/video.liquid diff --git a/snippets/account-actions.liquid b/snippets/account-actions.liquid deleted file mode 100644 index 2631a0532..000000000 --- a/snippets/account-actions.liquid +++ /dev/null @@ -1,226 +0,0 @@ -
-
- - - {% unless customer %} - - {% endunless %} - - -
-
- -{% stylesheet %} - .account-actions { - background-color: var(--color-background); - display: flex; - flex-direction: column; - position: relative; - transition: height var(--animation-values); - - &:has([data-active]) .account-actions__main-menu { - visibility: hidden; - } - } - - .account-actions__header { - padding: var(--padding-xl); - display: flex; - flex-direction: column; - gap: var(--gap-2xs); - } - - .account-actions__title { - /* Ideally we set the font-size here, but specificity issues make this necessary */ - --font-h5--size: var(--font-size--lg); - - margin: 0; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - .account-actions__email { - display: flex; - align-items: center; - gap: var(--gap-2xs); - color: rgb(var(--color-foreground-rgb) / var(--opacity-60)); - max-width: var(--account-actions-max-width); - word-break: break-all; - } - - .account-actions__sign-ins { - padding: var(--padding-xl); - padding-block-start: 0; - padding-block-end: var(--padding-md); - display: flex; - flex-direction: column; - gap: var(--gap-sm); - } - - .account-actions__sign-in-text { - display: inline; - } - - .account-actions__fallback-text { - display: none; - } - - .account-actions__sign-ins:not(:has(shop-login-button)) { - gap: 0; - - .account-actions__sign-in-text { - display: none; - } - - .account-actions__fallback-text { - display: block; - } - } - - /* Makes the shop login button radius match the theme settings */ - .account-actions__shop-login { - --buttons-radius: var(--style-border-radius-buttons-primary); - } - - .account-actions__nav { - padding: var(--padding-xl); - padding-block-start: 0; - } - - .account-actions__list { - display: grid; - grid-template-columns: 1fr 1fr; - gap: var(--gap-sm); - width: 100%; - list-style: none; - margin: 0; - padding: 0; - - @media screen and (max-width: 300px) { - grid-template-columns: 1fr; - } - } - - .account-actions__link { - width: auto; - display: flex; - justify-content: center; - align-items: center; - gap: var(--gap-2xs); - } - - .account-actions__icon { - display: flex; - width: var(--icon-size-sm); - height: var(--icon-size-sm); - margin-block: -4px; - } - - /* This triggers iOS < 16.4. The outline bug is not recognized as a lack of @supports */ - - @supports not (background-color: rgb(from red 150 g b / alpha)) { - /** - There is a bug in safari < 16.4 that causes the outline to not follow the elements border radius. This is a workaround. - Using element selector to increase specificity. - **/ - - .account-actions :is(a.button, a.button-secondary):focus-visible { - outline: none; - overflow: visible; - position: relative; - - &::after { - content: ''; - position: absolute; - inset: calc(-1 * var(--focus-outline-offset)); - border: var(--focus-outline-width) solid currentColor; - border-radius: var(--style-border-radius-buttons-secondary); - display: inherit; - } - } - - .account-actions a.button:focus-visible::after { - border-color: var(--button-background-color); - border-radius: var(--style-border-radius-buttons-primary); - } - } -{% endstylesheet %} diff --git a/snippets/account-button.liquid b/snippets/account-button.liquid deleted file mode 100644 index 5c78da885..000000000 --- a/snippets/account-button.liquid +++ /dev/null @@ -1,91 +0,0 @@ -{%- doc -%} - Renders an account button. - - @param {string} [tag] - The tag to use - @param {string} [popover_id] - The id of the popover to target - @param {string} [popover_action] - The id of the popover to target - @param {string} [attributes] - Additional attributes to add to the tag -{%- enddoc -%} - -{%- assign tag = tag | default: 'button' -%} -<{{ tag }} - class="account-button header-actions__action" - aria-label="{{ 'accessibility.account' | t }}" - {%- if popover_id -%} - popovertarget="{{ popover_id }}" - popovertargetaction="{{ popover_action | default: 'toggle' }}" - {%- endif -%} - ref="trigger" - {{ attributes }} -> - {%- if customer.has_avatar? -%} - {{ customer | avatar }} - {%- elsif customer.first_name or customer.email -%} - {%- liquid - assign initial = customer.email | first - - if customer.first_name != blank - assign initial = customer.first_name | first - endif - -%} - - {%- else -%} - - {%- endif -%} - - -{% stylesheet %} - .account-button { - color: var(--color-foreground); - appearance: none; - border: none; - background: none; - height: var(--button-size); - width: var(--button-size); - display: flex; - flex-wrap: wrap; - justify-content: center; - align-content: center; - transition: color var(--animation-speed) var(--animation-easing); - anchor-name: --account-button-trigger; - } - - .account-button__avatar { - --account-button-size: 1.625rem; - - display: flex; - align-items: center; - justify-content: center; - width: var(--account-button-size); - height: var(--account-button-size); - border-radius: var(--style-border-radius-50); - background-color: var(--color-primary-button-background); - font-size: var(--font-size--sm); - font-weight: 500; - color: var(--color-primary-button-text); - text-transform: uppercase; - line-height: 1; - } - - .account-button__icon { - color: currentColor; - display: inline-flex; - justify-content: center; - align-items: center; - } - - /* The shop avatar doesn't bubble the click event up to our button, so we need to prevent that or the button doesn't work */ - .account-button shop-user-avatar { - pointer-events: none; - } -{% endstylesheet %} diff --git a/snippets/account-drawer.liquid b/snippets/account-drawer.liquid deleted file mode 100644 index 8e9976a3d..000000000 --- a/snippets/account-drawer.liquid +++ /dev/null @@ -1,92 +0,0 @@ -{%- doc -%} - Renders the account drawer, which is used for mobile users. -{%- enddoc -%} - - - - - {% render 'account-button', attributes: 'on:click="/showDialog"' %} - - - {% render 'account-actions', autofocus_enabled: true %} - - - -{% stylesheet %} - .account-drawer { - @media screen and (min-width: 750px) { - display: none; - } - } - - .account-drawer__dialog { - --animation-speed: 0.24s; - --dialog-drawer-opening-animation: account-drawer-slide-in; - --dialog-drawer-closing-animation: account-drawer-slide-out; - - height: fit-content; - margin: 0; - inset-block-end: 0; - inset-block-start: auto; - border-radius: 0; - padding: 0; - } - - .account-drawer__close-button { - z-index: 1; - inset-block-start: var(--padding-xs); - inset-inline-end: var(--padding-xs); - color: var(--color-foreground); - background-color: transparent; - } - - .account-drawer__close-button .svg-wrapper { - display: flex; - width: var(--button-size); - height: var(--button-size); - align-items: center; - justify-content: center; - } - - @keyframes account-drawer-slide-in { - from { - transform: translateY(100%); - } - - to { - transform: translateY(0); - } - } - - @keyframes account-drawer-slide-out { - from { - transform: translateY(0); - } - - to { - transform: translateY(100%); - } - } -{% endstylesheet %} diff --git a/snippets/account-popover.liquid b/snippets/account-popover.liquid deleted file mode 100644 index b9c644cf8..000000000 --- a/snippets/account-popover.liquid +++ /dev/null @@ -1,88 +0,0 @@ -{%- doc -%} - Renders the account popover for desktop users, which appears when clicking the account icon. It contains links for account actions like login, logout, and viewing account details. - - @param {object} [settings] - The theme-level settings. - - @param {string} [settings.popover_color_scheme] - The color scheme for the popover panel. -{%- enddoc -%} - - {% render 'account-button' with 'account-popover' as popover_id %} -
- {% render 'account-actions' %} -
-
- -{% stylesheet %} - .account-popover { - --account-popover-min-width: 22rem; - --account-actions-max-width: 22rem; - } - - .account-popover__summary { - padding: 0; - - &:hover { - color: var(--color-foreground); - } - } - - .account-popover__panel { - --account-popover-opacity: 0; - --account-popover-y: 20px; - position-anchor: --account-button-trigger; - border-radius: var(--style-border-radius-popover); - margin: 0; - left: unset; - width: max-content; - min-width: var(--account-popover-min-width); - box-shadow: var(--shadow-popover); - border: var(--style-border-popover); - background-color: var(--color-background); - overflow-y: hidden; - opacity: var(--account-popover-opacity); - translate: 0 var(--account-popover-y); - transition-property: display, opacity, translate; - transition-duration: 0.3s; - transition-timing-function: var(--ease-out-quad); - transition-behavior: allow-discrete; - top: calc(anchor(bottom) + var(--header-padding)); - right: anchor(right); - - &:popover-open { - --account-popover-opacity: 1; - --account-popover-y: 0px; - } - - @supports not (position-anchor: --account-button-trigger) { - top: calc(var(--anchor-top) * 1px + var(--minimum-touch-target) + var(--header-padding)); - right: calc(var(--anchor-right) * 1px); - } - - @supports not selector(:popover-open) { - &.\:popover-open { - --account-popover-opacity: 1; - --account-popover-y: 0px; - } - } - } - - @starting-style { - .account-popover__panel { - --account-popover-opacity: 0.7; - --account-popover-y: 20px; - } - - .account-popover__panel:popover-open { - --account-popover-opacity: 0.7; - --account-popover-y: 20px; - } - } -{% endstylesheet %} diff --git a/snippets/add-to-cart-button.liquid b/snippets/add-to-cart-button.liquid deleted file mode 100644 index 2efa514e6..000000000 --- a/snippets/add-to-cart-button.liquid +++ /dev/null @@ -1,119 +0,0 @@ -{%- doc -%} - Renders an "Add to cart" button with dynamic text and state. It shows different text based on whether the product can be added to the cart and provides visual feedback when an item is added. - - @param {boolean} can_add_to_cart - Whether the product can be added to the cart. - @param {string} add_to_cart_text - The text to display on the button. - @param {object} product - The product object to be added to the cart. - @param {boolean} [icon_only_on_mobile] - If `true`, only the icon is shown on mobile devices. - @param {string} [class] - Additional CSS classes to apply to the button. - @param {string} [id] - The ID attribute for the button. -{%- enddoc -%} - -{%- liquid - assign default_add_to_cart_text = 'actions.add_to_cart' | t - assign product_variant_media = product.selected_or_first_available_variant.featured_media.preview_image | image_url: width: 100 - if product.selected_or_first_available_variant.featured_media.preview_image == blank - assign product_variant_media = product.featured_media.preview_image | image_url: width: 100 - endif --%} - - - - - -{% stylesheet %} - .add-to-cart-text { - display: flex; - gap: var(--gap-2xs); - align-items: center; - justify-content: center; - animation-duration: var(--animation-speed); - animation-timing-function: var(--animation-easing); - animation-fill-mode: forwards; - transition: opacity var(--animation-speed) var(--animation-easing); - } - - .atc-added .add-to-cart-text { - animation-name: atc-slide-out; - } - - .add-to-cart-text--added { - position: absolute; - inset: 0; - animation-duration: var(--animation-speed); - animation-timing-function: var(--animation-easing); - animation-fill-mode: forwards; - display: flex; - align-items: center; - justify-content: center; - opacity: 0; - transition: width var(--animation-speed) var(--animation-easing), - opacity var(--animation-speed) var(--animation-easing); - } - - .atc-added .add-to-cart-text--added { - animation-name: atc-slide-in; - } - - @keyframes atc-slide-in { - from { - opacity: 0; - transform: translateY(0.5em); - } - - to { - opacity: 1; - transform: translateY(0); - } - } - - @keyframes atc-slide-out { - from { - transform: translateY(0); - opacity: 1; - } - - to { - transform: translateY(-1em); - opacity: 0; - } - } -{% endstylesheet %} diff --git a/snippets/background-image.liquid b/snippets/background-image.liquid deleted file mode 100644 index 7beecafa5..000000000 --- a/snippets/background-image.liquid +++ /dev/null @@ -1,70 +0,0 @@ -{%- doc -%} - Renders a background image - - @param {object} background_image - The background image - @param {string} background_image_position - The background image position - @param {object} [block] - The block object - @param {object} [section] - The section object - @param {string} [placeholder] - The placeholder - - @example - {% render 'background-image', background_image: background_image, background_image_position: background_image_position, block: block, section: section %} -{%- enddoc -%} - -
- {% liquid - # Define sizes based on page width setting whether this is called from a section or block - - if block.settings - if section.settings.section_width == 'full-width' - assign sizes = '100vw' - else - case settings.page_width - when 'narrow' - # Narrow: max 90rem (1440px) - assign sizes = '(min-width: 1440px) 1440px, 100vw' - when 'normal' - # Normal: max 120rem (1920px) - assign sizes = '(min-width: 1920px) 1920px, 100vw' - when 'wide' - # Wide: max 150rem (2400px) - assign sizes = '(min-width: 2400px) 2400px, 100vw' - else - # Fallback to full width - assign sizes = '100vw' - endcase - endif - else - assign sizes = '100vw' - endif - - assign widths = '832, 1200, 1600, 1920, 2560, 3840' - %} - - {%- if background_image != blank -%} - {% liquid - assign fetch_priority = 'auto' - assign loading = 'lazy' - if section and section.index == 1 - assign fetch_priority = 'high' - endif - - if section and section.index <= 3 - assign loading = 'eager' - endif - %} - {{ - background_image - | image_url: width: 3840 - | image_tag: sizes: sizes, widths: widths, loading: loading, fetchpriority: fetch_priority - }} - {%- else -%} - {%- assign placeholder_name = placeholder | default: 'hero-apparel-2' -%} - {%- if placeholder_name == blank -%} - {%- assign placeholder_name = 'hero-apparel-2' -%} - {%- endif -%} - {{ placeholder_name | placeholder_svg_tag }} - {%- endif -%} -
diff --git a/snippets/background-media.liquid b/snippets/background-media.liquid deleted file mode 100644 index af576e06f..000000000 --- a/snippets/background-media.liquid +++ /dev/null @@ -1,21 +0,0 @@ -{%- doc -%} - Renders a background media - - @param {string} [background_media] - The background media - @param {object} [background_video] - The background video - @param {string} [background_video_position] - The background video position - @param {object} [background_image] - The background image - @param {string} [background_image_position] - The background image position - @param {string} [placeholder] - The placeholder - - @example - {% render 'background-media', background_media: background_media, background_video: background_video, background_video_position: background_video_position, background_image: background_image, background_image_position: background_image_position, placeholder: placeholder %} -{%- enddoc -%} - -{% liquid - if background_media == 'video' - render 'background-video', background_video: background_video, background_video_position: background_video_position, placeholder: placeholder - elsif background_media == 'image' - render 'background-image', background_image: background_image, background_image_position: background_image_position, placeholder: placeholder - endif -%} diff --git a/snippets/background-video.liquid b/snippets/background-video.liquid deleted file mode 100644 index 445929662..000000000 --- a/snippets/background-video.liquid +++ /dev/null @@ -1,56 +0,0 @@ -{%- doc -%} - Renders a video as a background for a section or block, with a fallback to a placeholder image if no video is provided. - - @param {object} background_video - The video object to be used as the background. - @param {string} background_video_position - The position of the video, e.g., 'center-center'. - @param {string} [placeholder] - The placeholder -{%- enddoc -%} - -{% liquid - assign video_classes = 'video-background video-background--' | append: background_video_position -%} - -{%- if background_video != blank -%} - - {% liquid - assign media_width_desktop = 100 | append: 'vw' - assign media_width_mobile = '100vw' - assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile - assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840' - %} - {{ background_video.preview_image | image_url: width: 3840 | image_tag: width: 1100, widths: widths, sizes: sizes }} - - -{%- else -%} -
- {%- assign placeholder_name = placeholder | default: 'hero-apparel-2' -%} - {%- if placeholder_name == blank -%} - {%- assign placeholder_name = 'hero-apparel-2' -%} - {%- endif -%} - {{ placeholder_name | placeholder_svg_tag }} -
-{%- endif -%} - -{% stylesheet %} - @media (prefers-reduced-motion: reduce) { - video-background-component video { - display: none; - } - } -{% endstylesheet %} diff --git a/snippets/bento-grid.liquid b/snippets/bento-grid.liquid deleted file mode 100644 index 6acc1d4af..000000000 --- a/snippets/bento-grid.liquid +++ /dev/null @@ -1,210 +0,0 @@ -{%- doc -%} - Takes an array of HTML strings and positions them in a bento box grid layout. - Bento boxes can hold up to 12 items; when more items are provided, a new box is created to maintain the layout structure. - - @param {string[]} items - An array of HTML strings, where each string is a collection list item. -{%- enddoc -%} - -{% liquid - assign odd_item_check = items.size | modulo: 12 - if odd_item_check == 1 - assign first_box_size = 11 - else - assign first_box_size = 12 - endif -%} - -{% for item in items %} - {% liquid - if first_box_size == 11 - assign item_modulo = forloop.index | modulo: 11 - if forloop.index == 12 - # Close the box and for a new one to start - assign item_modulo = forloop.index | modulo: 12 - assign item_modulo = 1 - endif - else - assign item_modulo = forloop.index | modulo: 12 - endif - %} - - {% # theme-check-disable UnclosedHTMLElement %} - {% if forloop.first or item_modulo == 1 %} -
- {% endif %} - {% # theme-check-disable UnclosedHTMLElement %} - -
- {{ item }} -
- - {% if forloop.last or item_modulo == 0 %} -
- {% endif %} -{% endfor %} - -{% stylesheet %} - .bento-box { - display: grid; - column-gap: var(--bento-gap); - row-gap: calc(var(--bento-gap) * 1.5); - width: 100%; - } - - .bento-box:has(.collection-card--image-bg) { - row-gap: var(--bento-gap); - } - - .bento-box ~ .bento-box { - padding-block-start: var(--bento-gap); - } - - @media (max-width: 900px) { - .bento-box { - grid-template-columns: repeat(2, 1fr); - } - - .bento-box__item:nth-child(3n + 1) { - grid-column: span 1; - } - - .bento-box__item:nth-child(3n + 2) { - grid-column: span 1; - } - - .bento-box__item:nth-child(3n + 3) { - grid-column: span 2; - } - - /* Ensure last items create a full row */ - .bento-box__item:last-child:nth-child(3n + 5) { - grid-column: span 1; - } - - .bento-box__item:last-child:nth-child(3n + 4) { - grid-column: span 2; - } - } - - @media (min-width: 901px) { - .bento-box { - grid-template-columns: repeat(12, 1fr); - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D E E E F F F' - 'G G G H H H I I I I I I' - 'J J J J K K K K L L L L'; - } - - .bento-box__item:nth-child(1) { - grid-area: A; - } - - .bento-box__item:nth-child(2) { - grid-area: B; - } - - .bento-box__item:nth-child(3) { - grid-area: C; - } - - .bento-box__item:nth-child(4) { - grid-area: D; - } - - .bento-box__item:nth-child(5) { - grid-area: E; - } - - .bento-box__item:nth-child(6) { - grid-area: F; - } - - .bento-box__item:nth-child(7) { - grid-area: G; - } - - .bento-box__item:nth-child(8) { - grid-area: H; - } - - .bento-box__item:nth-child(9) { - grid-area: I; - } - - .bento-box__item:nth-child(10) { - grid-area: J; - } - - .bento-box__item:nth-child(11) { - grid-area: K; - } - - .bento-box__item:nth-child(12) { - grid-area: L; - } - - /* === Overrides for specific cases === */ - - /* Exactly 1 item */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(1)) { - grid-template-areas: 'A A A A A A A A A A A A'; - } - - /* Exactly 2 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(2)) { - grid-template-areas: 'A A A A A A B B B B B B'; - } - - /* Exactly 4 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(4)) { - grid-template-areas: - 'A A A A B B B B B B B B' - 'C C C C C C C C D D D D'; - } - - /* Exactly 5 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(5)) { - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D E E E E E E'; - } - - /* Exactly 7 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(7)) { - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D D D D E E E' - 'F F F F F F G G G G G G'; - } - - /* Exactly 8 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(8)) { - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D E E E F F F' - 'G G G H H H H H H H H H'; - } - - /* Exactly 10 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(10)) { - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D E E E F F F' - 'G G G G G G G G G H H H' - 'I I I J J J J J J J J J'; - } - - /* Exactly 11 items */ - .bento-box:has(.bento-box__item:first-child:nth-last-child(11)) { - grid-template-areas: - 'A A A B B B B B B C C C' - 'D D D D D D E E E F F F' - 'G G G H H H I I I I I I' - 'J J J J K K K K K K K K'; - } - } -{% endstylesheet %} diff --git a/snippets/blog-comment-form.liquid b/snippets/blog-comment-form.liquid deleted file mode 100644 index 2812690a1..000000000 --- a/snippets/blog-comment-form.liquid +++ /dev/null @@ -1,206 +0,0 @@ -{%- doc -%} - Renders a comment form for a blog post. - - @param {object} [form] - The form object - @param {object} [article] - The article object - @param {string} [section_id] - The section ID -{%- enddoc -%} - -{% form 'new_comment', article %} -
-

{{- 'blogs.comment_form.heading' | t -}}

- - {%- if form.errors -%} - - - - {%- elsif form.posted_successfully? -%} - - {%- endif -%} - -
-
- - - -
- -
- - - -
- -
- - - -
-
- - {% if blog.moderated? %} -

- {{- 'blogs.comment_form.moderated' | t -}} -

- {% endif %} - - -
-{% endform %} - -{% stylesheet %} - .blog-post-comments__form-container { - --comment-form-gap: var(--gap-md); - - width: 100%; - max-width: var(--normal-content-width); - margin: var(--margin-4xl) auto 0; - } - - .blog-post-comments__form { - display: grid; - grid-template-columns: 1fr; - gap: var(--comment-form-gap); - - @media screen and (min-width: 750px) { - grid-template-columns: 1fr 1fr; - } - } - - .blog-post-comments__form-input { - padding: var(--padding-lg) var(--padding-xl); - border: var(--style-border-width-inputs) solid var(--color-input-border); - } - - .blog-post-comments__form-input--textarea { - resize: vertical; - min-height: var(--input-textarea-min-height); - } - - .blog-post-comments__form-message { - display: flex; - align-items: center; - gap: var(--gap-xs); - } - - .blog-post-comments__form-body { - grid-column: 1 / -1; - } - - .blog-post-comments__form-input:focus-visible { - outline: var(--focus-outline-width) solid currentcolor; - outline-offset: var(--focus-outline-offset); - } - - .blog-post-comments__form-moderated { - font-size: var(--font-size--xs); - } - - .blog-post-comments__form-submit { - margin-block-start: var(--comment-form-gap); - } -{% endstylesheet %} diff --git a/snippets/border-override.liquid b/snippets/border-override.liquid deleted file mode 100644 index 94d8888f0..000000000 --- a/snippets/border-override.liquid +++ /dev/null @@ -1,7 +0,0 @@ -{%- comment -%} - Renders border override CSS -{%- endcomment -%} - ---border-width: {{ settings.border_width }}px; --border-style: {{ settings.border }}; --border-color: -rgb(var(--color-border-rgb) / {{ settings.border_opacity | divided_by: 100.0 }}); --border-radius: -{{ settings.border_radius }}px; {% if settings.border_radius > 0 %} overflow: hidden; {% endif %} diff --git a/snippets/button.liquid b/snippets/button.liquid deleted file mode 100644 index d174bce4a..000000000 --- a/snippets/button.liquid +++ /dev/null @@ -1,45 +0,0 @@ -{%- doc -%} - Intended for use in a block similar to the button block. - - @param {string} link - link to render - @param {object} [block] - The block - - @example - {% render 'button', link: '/collections/all' %} -{%- enddoc -%} - -{% assign block_settings = block.settings %} - - - {{ block_settings.label }} - - -{% stylesheet %} - .link { - text-decoration: none; - text-decoration-color: currentcolor; - - &:hover { - color: var(--color-primary-hover); - text-decoration-color: transparent; - } - } -{% endstylesheet %} diff --git a/snippets/card-gallery.liquid b/snippets/card-gallery.liquid deleted file mode 100644 index 20946c740..000000000 --- a/snippets/card-gallery.liquid +++ /dev/null @@ -1,405 +0,0 @@ -{%- doc -%} - Displays product images in a carousel. - Settings allow for a full slideshow, showing only the first image, or showing the second image when hovering. - Note: When the product card itself is in a carousel layout, the card-gallery's carousel is disabled with JavaScript. - - @param [children] - Additional content rendered below the card gallery - @param [section] - The section object the snippet is rendered in - @param [block] - The block object the snippet is rendered in - @param [has_applied_colour_filter] - Whether there's an applied colour filter -{%- enddoc -%} - -{% liquid - assign product = closest.product - assign block_settings = block.settings - assign image_sizes = '(min-width: 750px) 50vw, 100vw' - - # if the card-gallery has a section.settings.product_card_size: - # assume grid-template autofill(card-size, 1fr) and calculate the sizes attribute based on the minimum card size - # - # if section has section.settings.columns: - # assume grid-template repeat(column-count, 1fr) and calculate the sizes attribute based on the number of columns - if section.settings.product_card_size - capture card_size - render 'util-product-grid-card-size', section: section - endcapture - assign card_size = card_size | strip | replace: 'px', '' | plus: 0 - capture sizes_attribute - render 'util-autofill-img-size-attr', card_size: card_size, card_gap: section.settings.columns_gap_horizontal - endcapture - assign image_sizes = sizes_attribute | strip - elsif section.settings.columns and section.settings.layout_type != 'editorial' - assign viewport_width = 100.0 | divided_by: section.settings.columns - assign sizes_attribute = '(min-width: 750px) [viewport_width]vw, 100vw' | replace: '[viewport_width]', viewport_width - assign image_sizes = sizes_attribute | strip - endif - - assign ratio = '1' - case block_settings.image_ratio - when 'landscape' - assign ratio = '16 / 9' - when 'portrait' - assign ratio = '4 / 5' - when 'square' - assign ratio = '1' - when 'adapt' - if product != blank - assign current_featured_image_for_ratio = product.featured_image - if current_featured_image_for_ratio == blank and product.featured_media.preview_image != blank - assign current_featured_image_for_ratio = product.featured_media.preview_image - endif - - if current_featured_image_for_ratio != blank and current_featured_image_for_ratio.aspect_ratio != null and current_featured_image_for_ratio.aspect_ratio > 0 - assign ratio = current_featured_image_for_ratio.aspect_ratio - endif - endif - endcase - - assign selected_variant_image = product.selected_or_first_available_variant.image.src - - if block_settings.image_ratio == 'adapt' and block_settings.constrain_to_viewport - if block_settings.constrain_to_viewport != '' - assign constrain_to_viewport = true - assign media_fit = block_settings.constrain_to_viewport - endif - endif - - assign all_media = product.media - - # For combined listings: make sure to include the featured media of the color variants so that the swatch picker - # works as expected. - for product_option in product.options_with_values - for product_option_value in product_option.values - if product_option_value.swatch - assign featured_media = product_option_value.variant.featured_media - - # If the variant has no featured media, and we have a combined listing product, then fall back to using the - # featured media of the child product that is linked to this option value. - - if featured_media == blank and product_option_value.product_url - assign featured_media = product_option_value.variant.product.featured_media - endif - - assign existing_media = all_media | has: 'id', featured_media.id - unless existing_media - assign variant_featured_media = product_option_value.variant.product.media | where: 'id', featured_media.id - assign all_media = all_media | concat: variant_featured_media - endunless - endif - endfor - endfor -%} - - - -{% stylesheet %} - .card-gallery { - overflow: hidden; - container-type: inline-size; /* Make card-gallery a container */ - container-name: card-gallery-container; /* Optional: name the container */ - } - - .card-gallery__placeholder svg { - height: 100%; - width: 100%; - } - - .card-gallery svg { - aspect-ratio: var(--gallery-aspect-ratio, var(--ratio)); - } - - .product-card-gallery__title-placeholder { - padding: var(--padding-md); - font-size: var(--font-size--2xl); - line-height: var(--line-height--display-loose); - word-break: break-word; - color: var(--color-foreground); - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - aspect-ratio: var(--gallery-aspect-ratio); - border-radius: var(--product-corner-radius); - display: -webkit-box; - -webkit-box-orient: vertical; - overflow: hidden; - text-overflow: ellipsis; - } - - .product-card-gallery__title-placeholder a { - color: var(--color-foreground); - } - - @media screen and (min-width: 750px) { - .product-grid[data-product-card-size='extra-large'] .product-card-gallery__title-placeholder { - padding: var(--padding-3xl); - font-size: var(--font-size--3xl); - } - - .product-grid[data-product-card-size='large'] .product-card-gallery__title-placeholder { - padding: var(--padding-2xl); - font-size: var(--font-size--2xl); - } - - .product-grid[data-product-card-size='medium'] .product-card-gallery__title-placeholder { - padding: var(--padding-xl); - font-size: var(--font-size--xl); - } - - .product-grid[data-product-card-size='small'] .product-card-gallery__title-placeholder { - padding: var(--padding-sm); - font-size: var(--font-size--lg); - } - - .product-grid[data-product-card-size='extra-large'] - .card-gallery:has(.product-badges--top-right .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-right: calc(var(--padding-3xl) + 50px); - } - - .product-grid[data-product-card-size='large'] - .card-gallery:has(.product-badges--top-right .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-right: calc(var(--padding-2xl) + 50px); - } - - .product-grid[data-product-card-size='medium'] - .card-gallery:has(.product-badges--top-right .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-right: calc(var(--padding-xl) + 50px); - } - - .product-grid[data-product-card-size='small'] - .card-gallery:has(.product-badges--top-right .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-right: calc(var(--padding-sm) + 50px); - } - - .product-grid[data-product-card-size='extra-large'] - .card-gallery:has(.product-badges--top-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-top: calc(var(--padding-3xl) + 40px); - } - - .product-grid[data-product-card-size='large'] - .card-gallery:has(.product-badges--top-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-top: calc(var(--padding-2xl) + 40px); - } - - .product-grid[data-product-card-size='medium'] - .card-gallery:has(.product-badges--top-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-top: calc(var(--padding-xl) + 40px); - } - - .product-grid[data-product-card-size='small'] - .card-gallery:has(.product-badges--top-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-top: calc(var(--padding-sm) + 40px); - } - - .product-grid[data-product-card-size='extra-large'] - .card-gallery:has(.product-badges--bottom-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-bottom: calc(var(--padding-3xl) + 40px); - } - - .product-grid[data-product-card-size='large'] - .card-gallery:has(.product-badges--bottom-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-bottom: calc(var(--padding-2xl) + 40px); - } - - .product-grid[data-product-card-size='medium'] - .card-gallery:has(.product-badges--bottom-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-bottom: calc(var(--padding-xl) + 40px); - } - - .product-grid[data-product-card-size='small'] - .card-gallery:has(.product-badges--bottom-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-bottom: calc(var(--padding-sm) + 40px); - } - } - - @media screen and (max-width: 749px) { - .product-card-gallery__title-placeholder { - font-size: var(--font-size--xl); - padding: var(--padding-md); - } - - .product-grid[data-product-card-size] - .card-gallery:has(.product-badges--top-right .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-right: calc(var(--padding-sm) + 50px); - } - - .product-grid[data-product-card-size] - .card-gallery:has(.product-badges--top-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-top: calc(var(--padding-sm) + 40px); - } - - .product-grid[data-product-card-size] - .card-gallery:has(.product-badges--bottom-left .product-badges__badge) - .product-card-gallery__title-placeholder { - padding-bottom: calc(var(--padding-sm) + 40px); - } - } - - [product-grid-view='zoom-out'] .card-gallery .product-card-gallery__title-placeholder { - /* stylelint-disable-next-line declaration-no-important */ - padding: var(--padding-xs) !important; - font-size: var(--font-size--xs); - } -{% endstylesheet %} diff --git a/snippets/cart-bubble.liquid b/snippets/cart-bubble.liquid deleted file mode 100644 index 1954e41af..000000000 --- a/snippets/cart-bubble.liquid +++ /dev/null @@ -1,40 +0,0 @@ -{%- doc -%} - @param [limit] - {number} - @param [live_region] - {boolean} - - The maximum number of items in the cart to display. If the number of items in the cart is greater than this limit, the - count will be displayed as "99+". -{%- enddoc -%} - -
- - - - {{- 'accessibility.cart_count' | t -}} - : {{ cart.item_count }} - - - -
diff --git a/snippets/cart-discount.liquid b/snippets/cart-discount.liquid deleted file mode 100644 index 9283c01c6..000000000 --- a/snippets/cart-discount.liquid +++ /dev/null @@ -1,214 +0,0 @@ -{%- doc -%} - Renders a cart discount form. - - @param {string} section_id - The section ID -{%- enddoc -%} - -{% liquid - assign discount_codes = cart.cart_level_discount_applications | where: 'type', 'discount_code' | map: 'title' - for item in cart.items - for allocation in item.line_level_discount_allocations - if allocation.discount_application.type == 'discount_code' - assign discount_codes = item.line_level_discount_allocations | slice: forloop.index0 | map: 'discount_application' | map: 'title' | concat: discount_codes - endif - endfor - endfor - - assign discount_codes = discount_codes | uniq - - # Evaluate the boolean expression for the disclosure state - if discount_codes.size == 0 - assign disclosure_expanded = false - else - assign disclosure_expanded = true - endif -%} - - {% render 'disclosure-trigger', - controls_id: 'cart-discount-disclosure', - is_expanded: disclosure_expanded, - disclosure_name: 'accessibility.discount_menu', - label_text: 'content.discount' - %} - {% capture discount_content %} - -
-
- - - -
-
- - -
- {% endcapture %} - - {% render 'disclosure-content', - content: discount_content, - is_expanded: disclosure_expanded, - content_id: 'cart-discount-disclosure' - %} -
- -{% stylesheet %} - .cart-discount__input { - background-color: var(--color-input-background); - color: var(--color-input-text); - border-width: var(--style-border-width-inputs); - border-color: var(--color-input-border); - border-style: solid; - border-radius: var(--style-border-radius-inputs); - padding: var(--padding-sm) var(--padding-md); - height: 100%; - flex-grow: 1; - min-width: 0; - } - - .cart-discount__input::placeholder { - color: rgb(var(--color-input-text-rgb) / var(--opacity-subdued-text)); - } - - .cart-discount__pill-code { - overflow: hidden; - max-width: 100px; - text-overflow: ellipsis; - white-space: nowrap; - margin: 0; - } - - .cart-discount { - width: 100%; - } - - .cart-discount__codes { - display: none; - gap: var(--padding-xs); - flex-wrap: wrap; - list-style: none; - padding-inline: 0; - margin: 0; - } - - .cart-discount__codes:has(.cart-discount__pill) { - display: flex; - } - - .cart-discount__button { - height: 100%; - } - - .cart-discount__content { - height: calc(var(--button-size) + var(--padding-2xs) + var(--padding-sm)); - } - - .cart-discount__pill { - display: flex; - color: var(--color-foreground); - gap: var(--padding-xs); - align-items: center; - padding: var(--padding-xs) var(--padding-sm); - border-radius: var(--style-border-radius-pills); - background-color: var(--color-input-background); - text-transform: uppercase; - } - - .cart-discount__form { - display: flex; - gap: var(--padding-md); - align-items: center; - height: 100%; - padding-block: var(--padding-2xs) var(--padding-sm); - } - - :is(.cart-discount__pill-remove, .cart-discount__pill-remove:hover) { - --close-icon-opacity: 0.4; - - color: var(--color-foreground); - background-color: transparent; - pointer-events: all; - cursor: pointer; - height: 100%; - } - - .cart-discount__error { - display: flex; - align-items: center; - width: 100%; - padding-block: var(--padding-2xs) var(--padding-sm); - } - - .cart-discount__error .svg-wrapper { - flex-shrink: 0; - width: var(--icon-size-xs); - height: var(--icon-size-xs); - margin-inline: var(--margin-3xs) var(--margin-xs); - } - - .cart-discount__error-text { - margin-block-start: var(--margin-3xs); - } -{% endstylesheet %} diff --git a/snippets/cart-drawer.liquid b/snippets/cart-drawer.liquid deleted file mode 100644 index f5701c47d..000000000 --- a/snippets/cart-drawer.liquid +++ /dev/null @@ -1,171 +0,0 @@ -{%- doc -%} - Renders the cart drawer, a slide-out panel that displays the contents of the cart. It includes the cart icon that acts as a trigger. - - @param {object} [settings] - An object containing theme settings. - - @param {boolean} [settings.auto_open_cart_drawer] - If `true`, the cart drawer opens automatically after an item is - added. - @param {string} [settings.drawer_color_scheme] - The color scheme for the drawer. -{%- enddoc -%} - - - - - - - -
- - {%- if cart.empty? -%} -
- -
- -
- - {{ 'content.your_cart_is_empty' | t }} - - -
- {% render 'cart-products' %} -
-
- {%- else -%} -
- - {{ 'content.cart_title' | t }} - {% render 'cart-bubble' %} - - - -
- -
- - {% render 'cart-products' %} - - -
- {% render 'cart-summary' %} -
-
- {%- endif -%} -
-
-
-
- -{% stylesheet %} - .cart-items-component { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - } - - .cart-drawer__heading .cart-bubble { - width: fit-content; - border-radius: var(--style-border-radius-buttons-primary); - aspect-ratio: auto; - padding: var(--cart-padding); - } - - .cart-drawer__heading .cart-bubble[data-maintain-ratio] { - aspect-ratio: 1; - min-width: 26px; - } - - .cart-drawer__header { - background-color: var(--color-background); - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - padding: var(--cart-drawer-padding); - border-bottom: var(--style-border-width) solid none; - position: sticky; - top: 0; - z-index: 1; - - @media screen and (min-width: 750px) { - padding: var(--cart-drawer-padding-desktop); - } - } - - .cart-drawer__dialog { - overflow: hidden; - } - - .cart-drawer__inner { - height: 100%; - overflow: hidden; - } - - .cart-drawer__content { - height: calc(100% - var(--header-height)); - display: flex; - flex-direction: column; - } - - .cart-drawer__summary { - background-color: var(--color-background); - position: sticky; - bottom: 0; - z-index: 1; - } -{% endstylesheet %} diff --git a/snippets/cart-icon-component.liquid b/snippets/cart-icon-component.liquid deleted file mode 100644 index a17f7c0bc..000000000 --- a/snippets/cart-icon-component.liquid +++ /dev/null @@ -1,32 +0,0 @@ -{%- doc -%} - Renders the cart icon, which displays the number of items in the cart via a bubble. -{%- enddoc -%} - - - - {% render 'cart-bubble', limit: 100, live_region: true, test_id: test_id %} - - -{% stylesheet %} - cart-icon:has(.cart-bubble__text-count:empty) { - --cart-bubble-size: 10px; - --cart-bubble-top: 9px; - --cart-bubble-right: 9px; - - .svg-wrapper { - --cart-bubble-top: 4px; - --cart-bubble-right: 4px; - } - } -{% endstylesheet %} diff --git a/snippets/cart-note.liquid b/snippets/cart-note.liquid deleted file mode 100644 index ecb8a58f8..000000000 --- a/snippets/cart-note.liquid +++ /dev/null @@ -1,47 +0,0 @@ - - - - -
- - - {{ 'content.seller_note' | t }} - - - - {{- 'icon-plus.svg' | inline_asset_content -}} - - - -
- - -
-
-
-
diff --git a/snippets/cart-products.liquid b/snippets/cart-products.liquid deleted file mode 100644 index 5762f6777..000000000 --- a/snippets/cart-products.liquid +++ /dev/null @@ -1,765 +0,0 @@ -{% assign block_settings = block.settings %} - - - -
- {% if cart.empty? %} - {%- if shop.customer_accounts_enabled and customer == null -%} -

- {{ 'actions.log_in_html' | t: link: routes.account_login_url }} -

- {%- endif -%} - - - {{ 'actions.continue_shopping' | t }} - - {%- else -%} - -
-
- - - - - - - - - - - - - - {% for item in cart.items %} - - - - - - - - {% endfor %} - -
- {{ 'content.cart_total' | t }} - {{ cart.total_price | money_with_currency }} -
- {{ 'content.product_image' | t }} - - {{ 'content.product_information' | t }} - - {{ 'content.quantity' | t }} - - {{ 'content.product_total' | t }} -
- {% if item.image -%} - {% liquid - assign ratio = 1 - assign border_opacity = settings.cart_thumbnail_border_opacity | divided_by: 100.0 - assign border_override = '--border-width: [cart_thumbnail_border_width]px; --border-style: [cart_thumbnail_border_style]; --border-color: rgb(var(--color-border-rgb) / [cart_thumbnail_border_opacity]); --border-radius: [cart_thumbnail_border_radius]px;' | replace: '[cart_thumbnail_border_width]', settings.cart_thumbnail_border_width | replace: '[cart_thumbnail_border_style]', settings.cart_thumbnail_border | replace: '[cart_thumbnail_border_opacity]', border_opacity | replace: '[cart_thumbnail_border_radius]', settings.cart_thumbnail_border_radius - - if settings.cart_thumbnail_border_radius > 0 - assign border_override = border_override | append: ' overflow: hidden;' - endif - if block_settings.image_ratio == 'portrait' - assign ratio = 0.8 - elsif block_settings.image_ratio == 'adapt' - assign ratio = item.image.aspect_ratio - endif - %} - - {%- liquid - echo item.image | image_url: width: 250 | image_tag: class: 'cart-items__media-image border-style', style: border_override - -%} - - {%- endif %} - -

- - {{- item.product.title -}} - -

- {% if item.product.vendor and block_settings.vendor %} -

- {{ item.product.vendor }} -

- {% endif %} - - {%- if item.item_components.size != 0 -%} -
    - {%- for component in item.item_components -%} -
  • - {{- component.title -}} - {%- if component.quantity > 1 -%} - × {{ component.quantity }} - {%- endif -%} -
  • - {%- endfor -%} -
- {%- endif -%} - - {%- if item.product.has_only_default_variant == false - or item.properties.size != 0 - or item.selling_plan_allocation != null - -%} -
- {%- if item.product.has_only_default_variant == false and item.item_components.size == 0 -%} - {%- for option in item.options_with_values -%} -
-
{{ option.name }}:
-
- {{- option.value -}} - {%- if forloop.last != true %}, {% endif -%} -
-
- {%- endfor -%} - {%- endif -%} - - {%- for property in item.properties -%} - {%- assign property_first_char = property.first | slice: 0 -%} - {%- if property.last != blank and property_first_char != '_' -%} -
-
{{ property.first }}:
-
- {%- if property.last contains '/uploads/' -%} - {{ property.last | split: '/' | last }} - {%- else -%} - {{ property.last }} - {%- endif -%} -
-
- {%- endif -%} - {%- endfor -%} -
- - {% if item.selling_plan_allocation %} -

{{ item.selling_plan_allocation.selling_plan.name }}

- {% endif %} - {%- endif -%} - - {% if item.line_level_discount_allocations.size > 0 %} -
    - {%- for discount in item.line_level_discount_allocations -%} -
  • {{ discount.discount_application.title | escape }}
  • - {%- endfor -%} -
- {% endif %} - -
- {% if item.original_price != item.final_price %} - {{ 'content.price_sale' | t }} - {{ item.final_price | money }} - {{ 'content.price_regular' | t }} - - {% if item.variant.compare_at_price > item.original_price %} - {{ item.variant.compare_at_price | money }} - {% else %} - {{ item.original_price | money }} - {% endif %} - - {% else %} - {% if item.variant.compare_at_price > item.original_price %} - {{ 'content.price_sale' | t }} - {% else %} - {{ 'content.price' | t }} - {% endif %} - - {{ item.original_price | money }} - - {% if item.variant.compare_at_price > item.original_price %} - {{ 'content.price_regular' | t }} - {{ item.variant.compare_at_price | money }} - {% endif %} - {% endif %} -
-
- {% # Here I want to pass some arguments to the quantity block so it knows which value should the input be set to. Though quantity block could be a snippet instead %} - {% assign can_update_quantity = item.instructions.can_update_quantity - | default: true, allow_false: true - %} - {% render 'quantity-selector', - product: item.product, - in_cart_quantity: item.quantity, - line_index: item.index, - min: 0, - class: 'cart-primary-typography', - can_update_quantity: can_update_quantity - %} - - - - {%- liquid - if settings.currency_code_enabled_cart_items - assign price = item.final_line_price | money_with_currency - assign unit_price = item.unit_price | money_with_currency - else - assign price = item.final_line_price | money - assign unit_price = item.unit_price | money - endif - -%} - {{ price }} - {%- if item.unit_price_measurement -%} -
- {% render 'unit-price', price: unit_price, measurement: item.unit_price_measurement %} -
- {%- endif -%} -
-
-
- {%- endif -%} -
- -{% stylesheet %} - .cart-items { - --cart-item-media-width-min: 2.5rem; - --cart-item-media-width-max: 7.5rem; - - container-name: cart-items; - container-type: inline-size; - width: 100%; - } - - .cart-items-disabled { - pointer-events: none; - } - - .cart-items__table { - width: 100%; - } - - .cart-items__table * { - margin: 0; - } - - .cart-items__table-row { - --cart-item-price-width: 6rem; - - display: grid; - grid-template-columns: clamp(2.5rem, 15cqi, 7.5rem) minmax(0, 1fr) minmax(var(--cart-item-price-width), auto); - grid-template-areas: - 'media details price' - 'media quantity price' - 'media error error'; - column-gap: var(--gap-md); - align-items: start; - padding-bottom: var(--cart-items-gap); - margin-bottom: var(--margin-lg); - } - - .cart-items__table-row.cart-items__nested-line td:first-child { - width: 60%; - justify-self: right; - } - - html:active-view-transition-type(page-navigation) .cart-items__table-row { - /* stylelint-disable-next-line declaration-no-important */ - view-transition-name: none !important; - } - - .cart-items__table-row.removing { - overflow: hidden; - animation: removeRow calc(var(--animation-speed) * 2) var(--animation-easing) forwards; - animation-delay: var(--animation-speed); - } - - @keyframes removeRow { - 0% { - height: var(--row-height); - } - - 100% { - opacity: 0; - height: 0; - padding-bottom: 0; - margin-bottom: 0; - border-color: transparent; - } - } - - .cart-items__table-row:last-child { - padding-bottom: 0; - } - - .cart-items--dividers .cart-items__table-row { - border-bottom: 1px solid var(--color-border); - margin-bottom: var(--cart-items-gap); - } - - .cart-items--dividers .cart-items__table-row:has(+ .cart-items__nested-line) { - border-bottom: none; - margin-bottom: 0; - } - - .cart-items--dividers .cart-items__table-row:last-child { - border-block-end: none; - padding-block-end: 0; - margin-bottom: 0; - } - - .cart-items__details { - grid-area: details; - color: rgb(var(--color-foreground-rgb) / var(--opacity-70)); - } - - .cart-items__details > * + *, - .cart-items__bundle li { - margin-block-start: var(--margin-2xs); - } - - .cart-items__details * { - font-size: var(--cart-font-size--sm); - } - - .cart-items__details a { - text-decoration: none; - } - - .cart-items__title { - font-size: var(--cart-font-size--md); - color: var(--color-foreground); - text-transform: var(--product-title-case); - } - - .cart-items__variant { - display: inline-block; - } - - .cart-items__quantity { - grid-area: quantity; - margin-block-start: var(--margin-xs); - display: flex; - align-items: center; - justify-content: flex-start; - gap: var(--gap-xs); - width: fit-content; - } - - .cart-items__quantity .quantity-selector { - display: inline-flex; - flex: 0 1 var(--quantity-selector-width); - font-size: var(--cart-font-size--sm); - height: auto; - } - - .cart-items__remove { - background-color: transparent; - color: var(--color-foreground); - width: var(--minimum-touch-target); - height: var(--minimum-touch-target); - justify-content: center; - box-shadow: none; - padding: 0; - } - - .cart-items__media { - grid-area: media; - padding: 0; - } - - .cart-items__price { - grid-area: price; - min-height: unset; - min-width: var(--cart-item-price-width); - text-align: end; - display: block; - font-size: var(--cart-font-size--md); - } - - .cart-items__price-unit { - font-size: var(--cart-font-size--xs); - } - - .cart-items__media-container { - display: flex; - aspect-ratio: var(--ratio); - position: relative; - width: 100%; - overflow: hidden; - } - - .cart-items__media-image { - aspect-ratio: inherit; - object-fit: cover; - object-position: center center; - width: 100%; - height: auto; - } - - .cart-items__empty-button { - margin-top: var(--margin-md); - padding-inline: var(--padding-4xl); - padding-block: var(--padding-lg); - } - - /* Error message */ - .cart-items__error { - display: flex; - align-items: flex-start; - width: 100%; - grid-area: error; - margin-block-start: var(--margin-xs); - opacity: 1; - overflow: hidden; - transform: translateY(0); - transition: opacity var(--drawer-animation-speed) var(--animation-easing), - transform var(--drawer-animation-speed) var(--animation-easing); - - @starting-style { - opacity: 0; - transform: translateY(-0.5rem); - } - } - - .cart-item__error { - display: flex; - align-items: flex-start; - width: 100%; - font-size: var(--cart-font-size--sm); - padding-block: var(--padding-2xs); - } - - .cart-item__error .svg-wrapper { - flex-shrink: 0; - width: var(--icon-size-xs); - height: var(--icon-size-xs); - margin-inline: var(--margin-3xs) var(--margin-xs); - margin-block-start: var(--margin-3xs); - } - - @container cart-items (min-width: 720px) { - .cart-items__table-row { - --cart-item-price-width: 6rem; - - grid-template-columns: 7.5rem 1fr 1fr minmax(var(--cart-item-price-width), auto); - grid-template-rows: min-content 1fr; - grid-template-areas: - 'media details quantity price' - 'media details error error'; - } - - .cart-items__quantity, - .cart-items__price { - grid-area: initial; - } - - .cart-items__quantity { - margin-top: 0; - } - - .cart-items__price { - min-height: var(--minimum-touch-target); - display: flex; - flex-direction: column; - align-items: flex-end; - justify-content: center; - } - } - - .cart__original-total-container, - .cart__total-container { - display: flex; - flex-direction: column; - } - - .cart__total-container { - row-gap: var(--gap-2xs); - - &:has(.cart__installments) { - row-gap: var(--gap-xs); - } - } - - .cart__original-total-container:empty { - display: none; - } - - .cart__summary-totals { - display: flex; - flex-direction: column; - gap: var(--gap-xl); - width: 100%; - border-block-start: none; - - &:has(> :first-child:not(.cart__original-total-container, .cart__total-container)) { - padding-block-start: 0; - border-block-start: none; - } - - @media screen and (min-width: 750px) { - padding-block-start: 0; - } - } - - .cart__original-total-container, - .cart__original-total-container * { - font-size: var(--cart-font-size--sm); - } - - .cart__total { - font-weight: var(--font-weight-bold); - } - - .cart__total-label { - font-size: var(--cart-font-size--sm); - } - - .cart__total-value { - font-size: var(--cart-font-size--2xl); - } - - .cart-primary-typography { - font-family: var(--cart-primary-font-family); - font-style: var(--cart-primary-font-style); - font-weight: var(--cart-primary-font-weight); - } - - .cart-secondary-typography { - font-family: var(--cart-secondary-font-family); - font-style: var(--cart-secondary-font-style); - font-weight: var(--cart-secondary-font-weight); - } - - .cart__ctas { - width: 100%; - display: grid; - gap: var(--checkout-button-gap); - grid-auto-flow: row; - grid-template-columns: 1fr; - } - - .cart__additional-checkout-buttons { - width: 100%; - } - - .cart__ctas .cart__checkout-button { - width: 100%; - height: clamp(25px, var(--height-buy-buttons), 55px); - padding-inline: var(--padding-4xl); - } - - shopify-accelerated-checkout-cart { - --shopify-accelerated-checkout-inline-alignment: center; - --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-primary); - --shopify-accelerated-checkout-row-gap: var(--checkout-button-gap, 10px); - } - - .cart-note { - width: 100%; - } - - @starting-style { - .cart-note[open-by-default-on-desktop][open-by-default-on-mobile] .details-content { - block-size: auto; - opacity: 1; - overflow-y: visible; - } - } - - .cart-note__inner { - padding-block: var(--padding-2xs) var(--padding-sm); - } - - .cart-note__summary { - display: flex; - align-items: center; - justify-content: space-between; - } - - .cart-note__summary:hover { - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .cart-note__label { - display: flex; - align-items: flex-start; - gap: var(--gap-2xs); - font-size: var(--cart-font-size--sm); - } - - .cart-note__instructions { - color: var(--color-input-text); - background-color: var(--color-input-background); - border-width: var(--style-border-width-inputs); - border-color: var(--color-input-border); - transition: box-shadow var(--animation-speed) ease; - box-shadow: var(--input-box-shadow); - min-height: 5.5rem; - min-width: 100%; - max-width: 100%; - font-size: var(--cart-font-size--sm); - padding: max(4px, calc(var(--style-border-radius-inputs) * (1 - cos(45deg)))); - } - - .cart-note .svg-wrapper { - height: var(--icon-size-sm); - width: var(--icon-size-sm); - margin: 0; - } - - .cart-note .icon-plus { - height: var(--icon-size-xs); - width: var(--icon-size-xs); - } - - /* Remove animation */ - .remove-icon-bottom, - .remove-icon-top { - transition: transform var(--animation-speed) var(--animation-easing); - } - - .cart-items__remove:hover .remove-icon-top { - transform: translate(calc(-1 * var(--icon-stroke-width)), var(--icon-stroke-width)) rotate(-15deg); - } - - .cart-items__remove:is(:hover, :active) .remove-icon-bottom { - transform: translateY(var(--icon-stroke-width)); - } - - .cart-items__table-row.removing .remove-icon-bottom { - transform: translateY(0); - } - - .cart-items__table-row.removing .remove-icon-top { - animation: removeButtonClickedIconTop var(--animation-speed) var(--animation-easing) forwards; - } - - @keyframes removeButtonClickedIconTop { - 50% { - transform: translate(0, calc(-1 * var(--icon-stroke-width))); - } - - 100% { - transform: translate(0, 0); - } - } - - .cart-items__properties { - display: block; - margin-block-start: var(--margin-2xs); - } - - .cart-items__properties dt, - .cart-items__properties dd { - display: inline; - } -{% endstylesheet %} diff --git a/snippets/cart-summary.liquid b/snippets/cart-summary.liquid deleted file mode 100644 index 9c26c744d..000000000 --- a/snippets/cart-summary.liquid +++ /dev/null @@ -1,139 +0,0 @@ -{%- doc -%} - Renders the cart summary totals. - - @param {string} [accelerated_checkout_buttons_layout] - { 'vertical' } Forced layout of the additional checkout buttons, instead of relying on platform's layout. -{%- enddoc -%} - -
- {% # We need to keep this node in place to allow morphing to work properly # %} -
- {%- if cart.cart_level_discount_applications.size > 0 -%} - - {{ 'content.cart_subtotal' | t }} - - {{- cart.original_total_price | money -}} - - -
-
    - {%- for discount in cart.cart_level_discount_applications -%} -
  • - - {{- 'icon-discount.svg' | inline_asset_content -}} - {{ discount.title | escape }} - - -{{ discount.total_allocated_amount | money -}} - -
  • - {%- endfor -%} -
-
- {%- endif -%} -
- - {% if settings.show_cart_note or settings.show_add_discount_code %} -
- {% if settings.show_cart_note %} - {% render 'cart-note' %} - {% endif %} - {% if settings.show_cart_note and settings.show_add_discount_code %} -
- {% endif %} - {% if settings.show_add_discount_code %} - {% render 'cart-discount', section_id: section.id %} - {% endif %} -
- {% endif %} - - {%- liquid - if settings.currency_code_enabled_cart_total - assign total_price = cart.total_price | money_with_currency - else - assign total_price = cart.total_price | money - endif - -%} - -
- - {{ 'content.cart_estimated_total' | t }} - - {{ total_price }} - - - {% if settings.show_installments %} - - {% form 'cart', cart %} - {{ form | payment_terms }} - {% endform %} - - {% endif %} -
- {% render 'tax-info', has_discounts_enabled: settings.show_add_discount_code %} -
-
-
- -
- - - {% if additional_checkout_buttons and settings.show_accelerated_checkout_buttons %} -
- {{ content_for_additional_checkout_buttons }} -
- {% endif %} -
- -{% stylesheet %} - .cart-actions { - display: flex; - flex-direction: column; - gap: var(--gap-sm); - border-block: 1px solid var(--color-border); - padding-block: var(--padding-sm); - margin-block-start: var(--margin-3xs); - } - - .cart-actions__divider { - border-block-start: 1px solid var(--color-border); - } - - .cart__summary-totals:not(:has(.cart-actions)) { - margin-block-start: var(--margin-3xs); - border-block-start: 1px solid var(--color-border); - padding-block-start: var(--margin-xl); - } - - .cart__installments { - color: var(--color-foreground); - } -{% endstylesheet %} diff --git a/snippets/checkbox.liquid b/snippets/checkbox.liquid deleted file mode 100644 index 8eda0e1c0..000000000 --- a/snippets/checkbox.liquid +++ /dev/null @@ -1,58 +0,0 @@ -{%- doc -%} - Renders a checkbox input and label - - @param {string} id - input id attribute - @param {string} name - input name attribute - @param {string} value - input value attribute - @param {string} label - label text - @param {boolean} checked - whether the input is checked - @param {string} events - event attributes for the input, e.g. 'on:click="/action"' - @param {boolean} disabled - whether the input is disabled - @param {boolean} [required] - whether the input is required - @param {string} [formId] - form id attribute for the input - @param {string} [inputRef] - input ref attribute for use with component framework - @param {string} [labelRef] - label ref attribute for use with component framework - @param {boolean} [autofocus] - whether the input should be autofocused -{%- enddoc -%} -
- - -
diff --git a/snippets/collection-card.liquid b/snippets/collection-card.liquid deleted file mode 100644 index d2891579d..000000000 --- a/snippets/collection-card.liquid +++ /dev/null @@ -1,195 +0,0 @@ -{%- doc -%} - This snippet is used to render a collection card. - To be used inside a block to inherit the block object settings. - - @param {string} card_image - The image to display in the collection card - @param {string} children - The content to render inside the collection card - @param {object} collection - The collection to render the card for - @param {object} block - The block object - @param {object} section - The section object - - @example - {% render 'collection-card', - card_image: card_image, - children: children, - block: block, - collection: collection, - section: section - %} -{%- enddoc -%} - -{% liquid - assign onboarding = false - assign block_settings = block.settings - - if collection == blank - assign onboarding = true - endif -%} - -
- - {{ collection.title }} - -
- {{ card_image }} -
- {{ children }} -
-
-
- -{% stylesheet %} - .collection-card { - --fixed-card-height: var(--height-small); - flex: 1 1 var(--card-width-small); - width: 100%; - position: relative; - } - - .collection-card > svg { - height: 100%; - width: 100%; - aspect-ratio: var(--ratio); - } - - .collection-card__inner { - width: 100%; - overflow: hidden; - position: relative; - gap: var(--collection-card-gap); - display: flex; - flex-direction: column; - } - - .collection-card--image-bg .collection-card__inner { - height: 100%; - } - - .collection-card__inner { - z-index: var(--layer-flat); - pointer-events: none; - - a, - button { - /* only allow interactive elements to be clickable separate from .collection-card__link */ - pointer-events: auto; - } - } - - /* allow all blocks to be selectable in editor preview */ - .shopify-design-mode .collection-card__content * { - pointer-events: auto; - } - - .collection-card__content { - position: relative; - display: flex; - height: 100%; - width: 100%; - max-width: 100%; - gap: var(--collection-card-gap); - flex-direction: column; - align-items: var(--horizontal-alignment); - justify-content: var(--vertical-alignment); - } - - .collection-card__link { - position: absolute; - inset: 0; - - /* allows focus outline to have radius in supported browsers */ - border-radius: var(--border-radius); - } - - /* Nested image block rules */ - - .collection-card.collection-card--image-bg { - aspect-ratio: var(--ratio); - } - - .collection-card.collection-card--image-bg .collection-card__content { - padding: var(--padding-lg); - } - - /* Bento layout rules */ - .collection-card--image-height-fixed .collection-card__image { - height: var(--fixed-card-height); - width: 100%; - } - - .collection-card--image-height-fixed.collection-card--image-bg { - height: var(--fixed-card-height); - aspect-ratio: unset; - } - - .collection-card__image .image-block__image { - object-fit: cover; - width: 100%; - height: 100%; - max-width: 100%; - } - - .collection-card--image-bg .collection-card__image { - position: absolute; - width: 100%; - height: 100%; - } - - .collection-card__image svg { - height: 100%; - width: 100%; - } - - .resource-list:not(.hidden--desktop) .collection-card--flexible-aspect-ratio { - &.collection-card.collection-card--image-bg, - &.collection-card .placeholder-svg { - aspect-ratio: 99; - } - - .collection-card__image { - aspect-ratio: 99; - height: 100%; - } - - .collection-card__inner { - display: flex; - flex-direction: column; - height: 100%; - } - - .collection-card__content { - flex-shrink: 0; - } - - &:not(.collection-card--image-bg) .collection-card__content { - height: auto; - } - } -{% endstylesheet %} diff --git a/snippets/color-schemes.liquid b/snippets/color-schemes.liquid deleted file mode 100644 index cfaacdac5..000000000 --- a/snippets/color-schemes.liquid +++ /dev/null @@ -1,99 +0,0 @@ -{% style %} - {% for scheme in settings.color_schemes -%} - {% assign scheme_classes = scheme_classes | append: ', .color-' | append: scheme.id %} - {% if forloop.index == 1 %} - :root, - {% endif %} - {% assign background_brightness = scheme.settings.background | color_brightness %} - {% if background_brightness < 64 %} - {% assign opacity_5_15 = 0.15 %} - {% assign opacity_10_25 = 0.25 %} - {% assign opacity_35_55 = 0.55 %} - {% assign opacity_40_60 = 0.60 %} - {% assign opacity_30_60 = 0.60 %} - {% else %} - {% assign opacity_5_15 = 0.05 %} - {% assign opacity_10_25 = 0.1 %} - {% assign opacity_35_55 = 0.35 %} - {% assign opacity_40_60 = 0.40 %} - {% assign opacity_30_60 = 0.30 %} - {% endif %} - .color-{{ scheme.id }} { - --color-background: rgb({{ scheme.settings.background.rgba }}); - /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ - --color-background-rgb: {{ scheme.settings.background.rgb }}; - --opacity-5-15: {{ opacity_5_15 }}; - --opacity-10-25: {{ opacity_10_25 }}; - --opacity-35-55: {{ opacity_35_55 }}; - --opacity-40-60: {{ opacity_40_60 }}; - --opacity-30-60: {{ opacity_30_60 }}; - --color-foreground: rgb({{ scheme.settings.foreground.rgba }}); - --color-foreground-rgb: {{ scheme.settings.foreground.rgb }}; - --color-foreground-heading: rgb({{ scheme.settings.foreground_heading.rgba }}); - --color-foreground-heading-rgb: {{ scheme.settings.foreground_heading.rgb }}; - --color-primary: rgb({{ scheme.settings.primary.rgba }}); - --color-primary-rgb: {{ scheme.settings.primary.rgb }}; - --color-primary-hover: rgb({{ scheme.settings.primary_hover.rgba }}); - --color-primary-hover-rgb: {{ scheme.settings.primary_hover.rgb }}; - --color-border: rgb({{ scheme.settings.border.rgba }}); - --color-border-rgb: {{ scheme.settings.border.rgb }}; - --color-shadow: rgb({{ scheme.settings.shadow.rgba }}); - --color-shadow-rgb: {{ scheme.settings.shadow.rgb }}; - --color-primary-button-text: rgb({{ scheme.settings.primary_button_text.rgba }}); - --color-primary-button-background: rgb({{ scheme.settings.primary_button_background.rgba }}); - --color-primary-button-border: rgb({{ scheme.settings.primary_button_border.rgba }}); - --color-primary-button-hover-text: rgb({{ scheme.settings.primary_button_hover_text.rgba }}); - --color-primary-button-hover-background: rgb({{ scheme.settings.primary_button_hover_background.rgba }}); - --color-primary-button-hover-border: rgb({{ scheme.settings.primary_button_hover_border.rgba }}); - --color-secondary-button-text: rgb({{ scheme.settings.secondary_button_text.rgba }}); - --color-secondary-button-background: rgb({{ scheme.settings.secondary_button_background.rgba }}); - --color-secondary-button-border: rgb({{ scheme.settings.secondary_button_border.rgba }}); - --color-secondary-button-hover-text: rgb({{ scheme.settings.secondary_button_hover_text.rgba }}); - --color-secondary-button-hover-background: rgb({{ scheme.settings.secondary_button_hover_background.rgba }}); - --color-secondary-button-hover-border: rgb({{ scheme.settings.secondary_button_hover_border.rgba }}); - --color-input-background: rgb({{ scheme.settings.input_background.rgba }}); - --color-input-text: rgb({{ scheme.settings.input_text_color.rgba }}); - --color-input-text-rgb: {{ scheme.settings.input_text_color.rgb }}; - --color-input-border: rgb({{ scheme.settings.input_border_color.rgba }}); - --color-input-hover-background: rgb({{ scheme.settings.input_hover_background.rgba }}); - --color-variant-background: rgb({{ scheme.settings.variant_background_color.rgba }}); - --color-variant-border: rgb({{ scheme.settings.variant_border_color.rgba }}); - --color-variant-text: rgb({{ scheme.settings.variant_text_color.rgba }}); - --color-variant-text-rgb: {{ scheme.settings.variant_text_color.rgb }}; - --color-variant-hover-background: rgb({{ scheme.settings.variant_hover_background_color.rgba }}); - --color-variant-hover-text: rgb({{ scheme.settings.variant_hover_text_color.rgba }}); - --color-variant-hover-border: rgb({{ scheme.settings.variant_hover_border_color.rgba }}); - --color-selected-variant-background: rgb({{ scheme.settings.selected_variant_background_color.rgba }}); - --color-selected-variant-border: rgb({{ scheme.settings.selected_variant_border_color.rgba }}); - --color-selected-variant-text: rgb({{ scheme.settings.selected_variant_text_color.rgba }}); - --color-selected-variant-hover-background: rgb({{ scheme.settings.selected_variant_hover_background_color.rgba }}); - --color-selected-variant-hover-text: rgb({{ scheme.settings.selected_variant_hover_text_color.rgba }}); - --color-selected-variant-hover-border: rgb({{ scheme.settings.selected_variant_hover_border_color.rgba }}); - - --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); - --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); - --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); - --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); - --font-h1--color: var(--color-foreground-heading); - --font-h2--color: var(--color-foreground-heading); - --font-h3--color: var(--color-foreground-heading); - --font-h4--color: var(--color-foreground-heading); - --font-h5--color: var(--color-foreground-heading); - --font-h6--color: var(--color-foreground-heading); - - /* Shadows */ - {% if settings.drawer_drop_shadow %} - --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); - {% endif %} - {% if settings.popover_drop_shadow %} - --shadow-blur: 20px; - --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); - {% endif %} - } - {% endfor %} - - {{ scheme_classes | prepend: 'body' }} { - color: var(--color-foreground); - background-color: var(--color-background); - } -{% endstyle %} diff --git a/snippets/contact-form.liquid b/snippets/contact-form.liquid deleted file mode 100644 index 0672e225b..000000000 --- a/snippets/contact-form.liquid +++ /dev/null @@ -1,170 +0,0 @@ -{%- doc -%} - Renders a contact form with name, email, phone, and comment fields. - - @param {object} settings - Block settings, required for the 'spacing-style' and 'size-style' snippets. - @param {string} submit_button - HTML for the submit button, rendered via a `content_for` block. - - @example - {% render 'contact-form', settings: block.settings, submit_button: content_for_submit_button %} -{%- enddoc -%} - -
- {% assign form_id = block.id | default: section.id | prepend: 'ContactForm-' %} - - {%- form 'contact', id: form_id, class: 'contact-form__form' -%} - {%- if form.errors -%} -
- {{- 'icon-error.svg' | inline_asset_content -}} - - {{- form.errors.translated_fields.email | capitalize }} - {{ form.errors.messages.email -}} -
- {%- endif -%} - - {%- if form.posted_successfully? -%} -
- {{- 'icon-checkmark.svg' | inline_asset_content -}} - {{- 'blocks.contact_form.post_success' | t -}} -
- {%- endif -%} - -
- - - - - -
- - - - - - - - {{ submit_button }} - {%- endform -%} -
- -{% stylesheet %} - .contact-form__form { - display: flex; - flex-direction: column; - gap: var(--gap-md); - } - - .contact-form__form-row { - display: flex; - flex-direction: column; - gap: var(--gap-md); - - @media screen and (min-width: 750px) { - flex-direction: row; - align-items: center; - } - } - - .contact-form__input { - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - color: var(--color-input-text); - background-color: var(--color-input-background); - padding: var(--padding-lg) var(--padding-xl); - border-radius: var(--style-border-radius-inputs); - border: var(--style-border-width-inputs) solid var(--color-input-border); - -webkit-font-smoothing: antialiased; - } - - .contact-form__input--textarea { - resize: vertical; - min-height: var(--input-textarea-min-height); - } - - .contact-form__error, - .contact-form__success { - display: flex; - align-items: center; - gap: var(--gap-xs); - } -{% endstylesheet %} diff --git a/snippets/disclosure-content.liquid b/snippets/disclosure-content.liquid deleted file mode 100644 index bd7d7e649..000000000 --- a/snippets/disclosure-content.liquid +++ /dev/null @@ -1,59 +0,0 @@ -{% doc %} - Disclosure Content Component - - Renders a collapsible content area with proper accessibility attributes. - - @param is_expanded - {Boolean} Whether the disclosure is currently expanded - @param content - {String} The HTML content to display - @param content_id - {String} ID for the content area - - @example - {% capture discount_content %} - - {% endcapture %} - - {% render 'disclosure-content', - content: discount_content, - is_expanded: disclosure_expanded, - content_id: 'cart-discount-disclosure' - %} -{% enddoc %} - -
-
- {{ content }} -
-
- -{% stylesheet %} - .disclosure-content { - display: grid; - grid-template-rows: 1fr; - /* stylelint-disable-next-line plugin/no-unsupported-browser-features */ - clip-path: inset(-5% -5% 0 -5%); - opacity: 1; - - &[inert] { - grid-template-rows: 0fr; - opacity: 0; - } - - & > * { - min-height: 0; - } - } - - @media (prefers-reduced-motion: no-preference) { - .disclosure-content { - transition-property: grid-template-rows, opacity; - transition-duration: var(--surface-transition-duration); - transition-timing-function: var(--surface-transition-timing); - } - } -{% endstylesheet %} diff --git a/snippets/disclosure-trigger.liquid b/snippets/disclosure-trigger.liquid deleted file mode 100644 index 838ffc51d..000000000 --- a/snippets/disclosure-trigger.liquid +++ /dev/null @@ -1,82 +0,0 @@ -{% doc %} - Disclosure Trigger Component - - Renders a button that controls a disclosure/collapsible content area. - Includes proper ARIA attributes for accessibility. - - @param is_expanded - {Boolean} Whether the disclosure is currently expanded - @param controls_id - {String} ID of the element this button controls - @param disclosure_name - {String} Translation key for the disclosure name - @param label_text - {String} Translation key for the button label - - @example - {% render 'disclosure-trigger', - controls_id: 'cart-discount-disclosure', - is_expanded: discount_codes.size > 0, - disclosure_name: 'cart.discount_code', - label_text: 'content.discount' - %} -{% enddoc %} - - - -{% stylesheet %} - .disclosure-trigger { - cursor: pointer; - color: var(--color-foreground); - display: flex; - align-items: center; - justify-content: space-between; - padding-block: var(--padding-sm); - width: 100%; - border: none; - background: #0000; - - &[aria-expanded='true'] .horizontal { - rotate: 90deg; - } - - &:is(:hover, :focus-visible) { - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .horizontal { - transform-box: fill-box; - transform-origin: center; - } - - svg { - aspect-ratio: 1; - width: var(--icon-size-xs); - } - } - - .disclosure-trigger__label { - display: flex; - align-items: flex-start; - gap: var(--gap-2xs); - font-size: var(--cart-font-size--sm); - } - - @media (prefers-reduced-motion: no-preference) { - .disclosure-trigger .horizontal { - transition: rotate var(--surface-transition-duration) var(--surface-transition-timing); - } - } -{% endstylesheet %} diff --git a/snippets/divider.liquid b/snippets/divider.liquid deleted file mode 100644 index 27edd0d65..000000000 --- a/snippets/divider.liquid +++ /dev/null @@ -1,54 +0,0 @@ -{%- doc -%} - Renders a divider line, used to visually separate content. - - @param {string} id - A unique ID for the divider, linking it to a block or section. - @param {object} settings - An object containing style settings for the divider. - - @param {string} [settings.alignment_horizontal] - The horizontal alignment of the divider ('left', 'center', or - 'right'). Defaults to 'center'. - @param {number} [settings.thickness] - The thickness of the divider line in pixels. - @param {string} [settings.corner_radius] - The corner radius of the divider, e.g., 'rounded'. - @param {number} [settings.width_percent] - The width of the divider as a percentage of its container. - - @param {boolean} [full_width] - When `true`, the divider spans the full width of its container. - @param {boolean} [attributes] - When `true`, render block.shopify_attributes on the divider container. -{%- enddoc -%} - -
- -
- -{% stylesheet %} - .divider { - align-self: stretch; - display: flex; - align-items: center; - justify-content: var(--divider-justify-content); - } - - .divider__line { - border-bottom: var(--divider-border-thickness) solid var(--color-border); - border-right: var(--divider-border-thickness) solid var(--color-border); - border-radius: calc(var(--style-border-radius-sm) * var(--divider-border-rounded)); - flex-basis: var(--divider-flex-basis); - min-height: var(--divider-flex-basis); - } -{% endstylesheet %} diff --git a/snippets/drawer-localization.liquid b/snippets/drawer-localization.liquid deleted file mode 100644 index 78f1e94ab..000000000 --- a/snippets/drawer-localization.liquid +++ /dev/null @@ -1,125 +0,0 @@ -{%- doc -%} - Renders a localization component for the drawer. - The component must be used inside a component. It relies on event bindings from the parent component. - - @param {boolean} [show_country] - Whether to show the country selector - @param {boolean} [show_language] - Whether to show the language selector - @param {boolean} [country_style] - Whether to show the country flag - - @example - {% render 'drawer-localization', country_style: true %} -{%- enddoc -%} - -{% liquid - assign background_brightness = block.settings.color_scheme.settings.background | color_brightness - if background_brightness < 64 - assign flag_shadow_size = 4 - else - assign flag_shadow_size = 2 - endif - - assign localization_font = '--menu-localization-font: var(--font-[localization_font]--family); ' | replace: '[localization_font]', section.settings.localization_font - assign color_shadow = '--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));' - assign form_style = localization_font | append: color_shadow -%} - -{% if show_language and show_country == false %} - -{% else %} - -
- - - -
-
-{% endif %} diff --git a/snippets/dropdown-localization.liquid b/snippets/dropdown-localization.liquid deleted file mode 100644 index e24383e38..000000000 --- a/snippets/dropdown-localization.liquid +++ /dev/null @@ -1,92 +0,0 @@ -{%- doc -%} - Determines whether to wrap the localization-form in a dropdown-component and passes variables to it. - - @param {boolean} [show_country] - Whether to show the country selector. - @param {boolean} [show_language] - Whether to show the language selector. - @param {string} [country_style] - The style of the country selector. - @param {string} localization_position - { 'right' | 'left' } The position of the localization picker. -{%- enddoc -%} - -{% liquid - assign background_brightness = section.settings.color_scheme.settings.background | color_brightness - if background_brightness < 64 - assign shadow_size = 4 - else - assign shadow_size = 2 - endif - - assign localization_font = '--menu-localization-font: var(--font-[localization_font]--family); ' | replace: '[localization_font]', section.settings.localization_font - assign localization_font_size = '--menu-localization-font-size: [localization_font_size]; ' | replace: '[localization_font_size]', section.settings.localization_font_size - assign color_shadow = '--color-shadow: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));' - assign form_style = localization_font | append: localization_font_size | append: color_shadow -%} - -{% if show_language and show_country == false %} - -{% elsif show_country %} - - - - - -{% endif %} diff --git a/snippets/editorial-blog-grid.liquid b/snippets/editorial-blog-grid.liquid deleted file mode 100644 index 302b68f4b..000000000 --- a/snippets/editorial-blog-grid.liquid +++ /dev/null @@ -1,119 +0,0 @@ -{%- doc -%} - Renders a grid and places blog items inside of it using an editorial layout. - This is a horizontally mirrored version of the collection grid layout. - - @param {object} items - An array of HTML strings for the blog list items - - @example - {% render 'editorial-blog-grid', items: items %} -{%- enddoc -%} - -
-
- - {% for item in items %} - {% liquid - assign current_grid_index = forloop.index0 | divided_by: 8 - assign current_item_index = forloop.index0 | modulo: 8 - - # Horizontally mirrored from editorial-collection-grid - case current_item_index - when 0 - assign grid_column = '8 / span 4' - assign grid_row = 1 - assign grid_row_span = 5 - when 1 - assign grid_column = '2 / span 5' - assign grid_row = 3 - assign grid_row_span = 5 - when 2 - assign grid_column = '5 / span 8' - assign grid_row = 9 - assign grid_row_span = 6 - when 3 - assign grid_column = '2 / span 8' - assign grid_row = 16 - assign grid_row_span = 6 - when 4 - assign grid_column = '2 / span 5' - assign grid_row = 23 - assign grid_row_span = 5 - when 5 - assign grid_column = '8 / span 4' - assign grid_row = 25 - assign grid_row_span = 5 - when 6 - assign grid_column = '1 / span 8' - assign grid_row = 31 - assign grid_row_span = 6 - when 7 - assign grid_column = '3 / span 8' - assign grid_row = 38 - assign grid_row_span = 6 - endcase - - assign full_grid_rows = current_grid_index | times: 44 - assign grid_row = grid_row | plus: full_grid_rows - %} -
- {{ item }} -
- {% endfor %} -
- -{% stylesheet %} - .editorial-blog__grid { - display: grid; - grid-template-columns: repeat(12, 1fr); - grid-auto-rows: 1fr; - gap: var(--gap-xl); - - .shopify-block { - height: 100%; - } - } - - .editorial-blog__spacer { - aspect-ratio: 1; - } - - @media (max-width: 768px) { - .editorial-blog__grid { - display: flex; - flex-direction: column; - gap: var(--gap-2xl); - } - - .editorial-blog__spacer { - display: none; - } - - .featured-blog-posts-card__image { - min-height: 200px; - } - - /* Mobile layout - also horizontally mirrored from collection grid */ - .editorial-blog__item-0 { - width: 66%; - align-self: flex-end; /* Originally flex-start, now flex-end */ - } - - .editorial-blog__item-1 { - width: 83%; - align-self: flex-start; /* Originally flex-end, now flex-start */ - } - - .editorial-blog__item-2 { - width: 83%; - align-self: flex-end; /* Originally flex-start, now flex-end */ - } - - .editorial-blog__item-3 { - width: 100%; - align-self: center; /* Stays centered */ - } - } -{% endstylesheet %} diff --git a/snippets/editorial-collection-grid.liquid b/snippets/editorial-collection-grid.liquid deleted file mode 100644 index 65e8f215e..000000000 --- a/snippets/editorial-collection-grid.liquid +++ /dev/null @@ -1,117 +0,0 @@ -{%- doc -%} - Renders a grid and places items inside of it using an editorial layout. - - @param {object} items - An array of HTML strings for the collection list items - - @example - {% render 'editorial-collection-grid', items: items %} -{%- enddoc -%} - -
-
- - {% for item in items %} - {% liquid - assign current_grid_index = forloop.index0 | divided_by: 8 - assign current_item_index = forloop.index0 | modulo: 8 - - case current_item_index - when 0 - assign grid_column = '2 / span 4' - assign grid_row = 1 - assign grid_row_span = 5 - when 1 - assign grid_column = '7 / span 5' - assign grid_row = 3 - assign grid_row_span = 5 - when 2 - assign grid_column = '1 / span 8' - assign grid_row = 9 - assign grid_row_span = 6 - when 3 - assign grid_column = '3 / span 8' - assign grid_row = 16 - assign grid_row_span = 6 - when 4 - assign grid_column = '7 / span 5' - assign grid_row = 23 - assign grid_row_span = 5 - when 5 - assign grid_column = '2 / span 4' - assign grid_row = 25 - assign grid_row_span = 5 - when 6 - assign grid_column = '5 / span 8' - assign grid_row = 31 - assign grid_row_span = 6 - when 7 - assign grid_column = '2 / span 8' - assign grid_row = 38 - assign grid_row_span = 6 - endcase - - assign full_grid_rows = current_grid_index | times: 44 - assign grid_row = grid_row | plus: full_grid_rows - %} -
- {{ item }} -
- {% endfor %} -
- -{% stylesheet %} - .editorial-collection__grid { - display: grid; - grid-template-columns: repeat(12, 1fr); - grid-auto-rows: 1fr; - gap: var(--gap-xl); - - .resource-list__item, - .collection-card { - height: 100%; - } - } - - .editorial-collection__spacer { - aspect-ratio: 1; - } - - @media (max-width: 768px) { - .editorial-collection__grid { - display: flex; - flex-direction: column; - gap: var(--gap-2xl); - } - - .editorial-collection__spacer { - display: none; - } - - .editorial-collection__item-0 { - width: 66%; - align-self: flex-start; - aspect-ratio: 4 / 5; - } - - .editorial-collection__item-1 { - width: 83%; - align-self: flex-end; - aspect-ratio: 5 / 5; - } - - .editorial-collection__item-2 { - width: 83%; - align-self: flex-start; - aspect-ratio: 8 / 6; - } - - .editorial-collection__item-3 { - width: 100%; - align-self: center; - aspect-ratio: 8 / 6; - } - } -{% endstylesheet %} diff --git a/snippets/editorial-product-grid.liquid b/snippets/editorial-product-grid.liquid deleted file mode 100644 index 50b1b01d4..000000000 --- a/snippets/editorial-product-grid.liquid +++ /dev/null @@ -1,125 +0,0 @@ -{%- doc -%} - Renders a grid and places items inside of it using an editorial layout. - - @param {object} items - An array of HTML strings for the product list items - - @example - {% render 'editorial-product-grid', items: items %} -{%- enddoc -%} - -
-
- - {% for item in items %} - {% liquid - assign current_grid_index = forloop.index0 | divided_by: 8 - assign current_item_index = forloop.index0 | modulo: 8 - - case current_item_index - when 0 - assign grid_column = '1 / span 7' - assign grid_row = 1 - assign grid_row_span = 6 - when 1 - assign grid_column = '9 / span 4' - assign grid_row = 5 - assign grid_row_span = 5 - when 2 - assign grid_column = '2 / span 5' - assign grid_row = 8 - assign grid_row_span = 5 - when 3 - assign grid_column = '5 / span 8' - assign grid_row = 14 - assign grid_row_span = 6 - when 4 - assign grid_column = '1 / span 7' - assign grid_row = 21 - assign grid_row_span = 6 - when 5 - assign grid_column = '9 / span 4' - assign grid_row = 25 - assign grid_row_span = 5 - when 6 - assign grid_column = '2 / span 5' - assign grid_row = 28 - assign grid_row_span = 5 - when 7 - assign grid_column = '3 / span 8' - assign grid_row = 34 - assign grid_row_span = 6 - endcase - - assign full_grid_rows = current_grid_index | times: 40 - assign grid_row = grid_row | plus: full_grid_rows - %} -
- {{ item }} -
- {% endfor %} -
- -{% stylesheet %} - .editorial-product__grid { - display: grid; - grid-template-columns: repeat(12, 1fr); - grid-auto-rows: 1fr; - gap: var(--gap-xl); - - /* Make the aspect ratio super high on width, then increase the height of - * slideshow containers until they fill all the available space */ - .card-gallery { - /* stylelint-disable-next-line declaration-no-important */ - --gallery-aspect-ratio: 99 !important; - } - - .card-gallery, - slideshow-component, - slideshow-container, - slideshow-slides { - height: 100%; - } - } - - .editorial-product__spacer { - aspect-ratio: 1; - } - - @media (max-width: 768px) { - .editorial-product__grid { - display: flex; - flex-direction: column; - gap: var(--gap-2xl); - } - - .editorial-product__spacer { - display: none; - } - - .editorial-product__item-0 { - width: 83%; - align-self: flex-start; - aspect-ratio: 7 / 6; - } - - .editorial-product__item-1 { - width: 83%; - align-self: flex-end; - aspect-ratio: 4 / 5; - } - - .editorial-product__item-2 { - width: 66%; - align-self: flex-start; - aspect-ratio: 5 / 5; - } - - .editorial-product__item-3 { - width: 100%; - aspect-ratio: 8 / 6; - } - } -{% endstylesheet %} diff --git a/snippets/facets-actions.liquid b/snippets/facets-actions.liquid deleted file mode 100644 index 702064ad4..000000000 --- a/snippets/facets-actions.liquid +++ /dev/null @@ -1,220 +0,0 @@ -{%- doc -%} - Renders the facets actions - - @param {string} results_url - the url to remove the filters - @param {boolean} is_active - whether the clear all button is active - @param {number} products_count - the number of products in the results - @param {string} [form_component] - the form component to use for the clear all button - @param {boolean} [should_show_clear_all] - whether to show the clear all button - @param {number} [shadow_opacity] - the opacity of the shadow for the sticky action bar -{%- enddoc -%} - -
- {% if should_show_clear_all %} - - - - {% endif %} - - {% if products_count > 0 %} - - {% endif %} -
- -{% stylesheet %} - /* Facets - Actions */ - .facets__actions { - --to-top-gradient-background: linear-gradient( - to top, - rgb(var(--color-background-rgb) / var(--opacity-90)), - rgb(var(--color-background-rgb) / var(--opacity-80)), - rgb(var(--color-background-rgb) / var(--opacity-40)), - transparent - ); - - order: 1; - position: sticky; - bottom: 0; - display: flex; - justify-content: space-between; - align-items: stretch; - gap: var(--gap-sm); - background-image: var(--to-top-gradient-background); - z-index: var(--facets-sticky-z-index); - padding-block-start: var(--padding-xs); - padding-block-end: var(--padding-md); - padding-inline: var(--padding-lg); - margin-top: auto; - } - - .facets:not(.facets--drawer) .facets__actions { - @media screen and (min-width: 750px) { - position: static; - } - } - - .facets--vertical .facets__actions { - padding-inline: 0; - justify-content: center; - } - - .facets--horizontal .facets__actions { - @media screen and (min-width: 750px) { - order: 0; - bottom: auto; - position: static; - padding: 0; - z-index: var(--layer-flat); - flex-shrink: 0; - align-items: center; - margin-top: initial; - background-image: none; - } - } - - .facets--horizontal .facets__actions--active::before { - @media screen and (min-width: 750px) { - content: ''; - border-inline-start: var(--style-border-width) solid var(--color-border); - height: var(--font-paragraph--size); - position: absolute; - } - } - - /* Clear button */ - .facets__clear { - display: none; - } - - .facets--horizontal .facets__clear { - @media screen and (min-width: 750px) { - width: 100%; - justify-content: flex-end; - padding: 0 var(--facets-clear-padding) var(--facets-clear-padding) 0; - cursor: pointer; - } - } - - .facets__clear--active { - @media screen and (min-width: 750px) { - display: flex; - } - } - - .clear-filter:hover { - text-decoration: underline; - background-color: transparent; - } - - /* Clear all button */ - .facets__clear-all { - display: none; - cursor: pointer; - min-width: var(--facets-clear-all-min-width); - transition: transform var(--animation-values), opacity var(--animation-values); - opacity: 0; - transform: translateY(100%); - flex-grow: 1; - padding-block: var(--padding-lg); - } - - .facets:not(.facets--drawer) .facets__clear-all { - box-shadow: none; - } - - .facets--horizontal .facets__clear-all { - @media screen and (min-width: 750px) { - --facets-clear-all-min-width: var(--minimum-touch-target); - --button-color: var(--color-primary); - - text-decoration: underline transparent 0.075em; - text-underline-offset: 0.125em; - width: auto; - transform: none; - opacity: 1; - height: var(--minimum-touch-target); - align-items: center; - flex-grow: 0; - transition: text-decoration-color var(--animation-speed) var(--animation-easing); - } - } - - .facets--horizontal .facets__clear-all:hover { - @media screen and (min-width: 750px) { - --button-color: var(--color-primary-hover); - } - } - - @starting-style { - .facets__clear-all { - opacity: 1; - transform: translateY(0); - } - } - - .facets__clear-all.active { - transform: translateY(0); - opacity: 1; - display: grid; - } - - .facets--horizontal .facets__clear-all.active { - @media screen and (min-width: 750px) { - padding-block: 0; - padding-inline: var(--facets-form-horizontal-gap); - background-color: transparent; - position: static; - transform: none; - } - } - - @starting-style { - .facets__clear-all.active { - opacity: 0; - transform: translateY(100%); - } - - .facets--horizontal .facets__clear-all.active { - @media screen and (min-width: 750px) { - opacity: 1; - transform: none; - } - } - } - - .facets__see-results { - min-width: var(--facets-see-results-min-width); - flex-grow: 1; - padding-block: var(--padding-lg); - } - - .facets:not(.facets--drawer) .facets__see-results { - @media screen and (min-width: 750px) { - display: none; - } - } -{% endstylesheet %} diff --git a/snippets/filter-remove-buttons.liquid b/snippets/filter-remove-buttons.liquid deleted file mode 100644 index 9b3ca7745..000000000 --- a/snippets/filter-remove-buttons.liquid +++ /dev/null @@ -1,178 +0,0 @@ -{%- doc -%} - Renders filter remove buttons. - - Accepts: - - @param {object} filters - The filters to render - @param {boolean} show_filter_label - Whether to show the filter label - @param {string} results_url - The results URL - @param {boolean} should_show_clear_all - Whether to show the clear all button -{%- enddoc -%} - -
- {%- for filter in filters -%} - {%- liquid - assign is_first_filter = forloop.first - -%} - {% if filter.type == 'price_range' and filter.min_value.value != null or filter.max_value.value != null %} - {%- liquid - assign is_active = true - -%} - - {%- if filter.min_value.value != null and filter.max_value.value != null %} - {{- filter.min_value.value | money -}} - – - {{- filter.max_value.value | money -}} - {%- elsif filter.min_value.value != null -%} - {{ filter.min_value.value | money }}–{{ filter.range_max | money }} - {%- elsif filter.max_value.value != null -%} - {{- 0 | money -}} - – - {{- filter.max_value.value | money -}} - {%- endif -%} - - {{- 'icon-filters-close.svg' | inline_asset_content -}} - - {{ 'actions.remove' | t }} - - {% else %} - {%- for value in filter.active_values -%} - {%- liquid - assign is_active = true - -%} - - {% if value.swatch %} - {% render 'swatch', swatch: value.swatch, mode: 'pill' %} - {% endif %} - - {% if filter.type == 'boolean' or show_filter_label %} - {{ filter.label | escape }}: {{ value.label | escape }} - {% else %} - {{ value.label | escape }} - {% endif %} - - - {{- 'icon-filters-close.svg' | inline_asset_content -}} - - {{ 'actions.remove' | t }} - - {%- endfor -%} - {% endif %} - {%- endfor -%} - {% if should_show_clear_all and is_active %} - - - - {% endif %} -
- -{% stylesheet %} - /* Facets - Remove buttons */ - .facets-remove { - --variant-picker-swatch-width: 20px; - --variant-picker-swatch-height: 20px; - - display: none; - align-items: center; - flex-wrap: wrap; - gap: var(--gap-xs); - padding: 0 var(--drawer-padding); - margin: 0; - - @media screen and (min-width: 750px) { - --variant-picker-swatch-width: 16px; - --variant-picker-swatch-height: 16px; - - gap: var(--gap-2xs); - } - } - - .facets-remove:has(facet-remove-component) { - display: flex; - margin-block-start: var(--margin-2xs); - margin-block-end: var(--margin-md); - } - - .facets__clear-all-link { - --button-color: var(--color-primary); - - border: none; - background-color: transparent; - padding: var(--padding-xs); - min-width: fit-content; - color: var(--button-color); - transition: text-decoration-color var(--animation-speed) var(--animation-easing), - color var(--animation-speed) var(--animation-easing); - } - - .facets__clear-all-link:hover { - --button-color: var(--color-primary-hover); - - color: var(--button-color); - text-decoration-color: var(--button-color); - } - - .facets:not(.facets--drawer) .facets-remove--mobile-and-vertical { - @media screen and (min-width: 750px) { - padding: 0; - } - } - - .facets--horizontal .facets-remove--mobile-and-vertical { - @media screen and (min-width: 750px) { - display: none; - } - } - - .facets-remove__pill { - .svg-wrapper, - .swatch { - flex-shrink: 0; - } - } - - .facets--horizontal .facets-remove { - @media screen and (min-width: 750px) { - display: none; - } - } -{% endstylesheet %} diff --git a/snippets/filters-toggle.liquid b/snippets/filters-toggle.liquid deleted file mode 100644 index 81b8d3834..000000000 --- a/snippets/filters-toggle.liquid +++ /dev/null @@ -1,151 +0,0 @@ -{%- doc -%} - Renders the sorting component. - - @param {boolean} enable_filtering - Whether to enable filtering - @param {number} padding-block-start - The padding-block-start value - @param {number} padding-block-end - The padding-block-end value - @param {number} total_active_values - The total number of active values - @param {string} section_id - The section ID - @param {object} results - The results of the search - @param {string} sort_by - The current sort by -{%- enddoc -%} - -{%- assign block_settings = block.settings -%} -
- {% if block_settings.enable_filtering %} -
- -
- {% endif %} - -
- {% if block_settings.enable_filtering == false and block_settings.enable_sorting %} - {% render 'sorting', - results: results, - sort_by: sort_by, - filter_style: block_settings.filter_style, - suffix: 'mobile', - section_id: section_id, - should_use_select_on_mobile: false - %} - {% endif %} - {% if block_settings.enable_grid_density %} - {% render 'grid-density-controls', viewport: 'mobile' %} - {% endif %} -
-
- -{% stylesheet %} - /* Facets - Toggle */ - .facets-toggle { - --icon-offset: -3px; - - display: flex; - justify-content: space-between; - align-items: center; - height: var(--minimum-touch-target); - margin: var(--facets-margin); - padding-block: var(--facets-inner-padding-block); - padding-inline: var(--facets-inner-padding-inline); - - @media screen and (min-width: 750px) { - display: none; - } - } - - .facets-toggle__wrapper { - margin-left: var(--icon-offset); - } - - .facets-toggle__button { - box-shadow: none; - - @media screen and (min-width: 750px) { - display: none; - } - } - - /* Filter count */ - .filter-count-bubble { - position: relative; - width: 20px; - aspect-ratio: 1; - border-radius: 50%; - display: grid; - line-height: normal; - place-content: center; - color: var(--color-foreground); - border: var(--icon-stroke-width) solid var(--color-background); - } - - .facets-mobile__title-wrapper .h3 { - margin-block-end: 0; - display: inline-flex; - align-items: center; - gap: var(--gap-xs); - } - - .facets-mobile__title-wrapper .filter-count-bubble { - width: 22px; - height: 22px; - } - - .facets-mobile__title-wrapper .filter-count-bubble__text { - font-size: var(--font-size--xs); - } - - .filter-count-bubble__background { - position: absolute; - inset: 0; - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25)); - border-radius: var(--style-border-radius-50); - } - - .filter-count-bubble__text { - font-size: 11px; - font-weight: var(--font-paragraph--weight); - aspect-ratio: 1 / 1; - } - - .facets-toggle--no-filters { - @media screen and (max-width: 749px) { - /* stylelint-disable-next-line declaration-no-important */ - justify-content: unset !important; - - & > .facets-mobile-wrapper { - width: 100%; - } - } - } -{% endstylesheet %} diff --git a/snippets/fonts.liquid b/snippets/fonts.liquid deleted file mode 100644 index 9e80dabe7..000000000 --- a/snippets/fonts.liquid +++ /dev/null @@ -1,42 +0,0 @@ -{% # theme-check-disable %} -{%- unless settings.type_body_font.system? -%} - -{%- endunless -%} -{%- unless settings.type_subheading_font.system? -%} - -{%- endunless -%} -{%- unless settings.type_heading_font.system? -%} - -{%- endunless -%} -{%- unless settings.type_accent_font.system? -%} - -{%- endunless -%} -{% # theme-check-enable %} diff --git a/snippets/gap-style.liquid b/snippets/gap-style.liquid deleted file mode 100644 index 99b91ea4f..000000000 --- a/snippets/gap-style.liquid +++ /dev/null @@ -1,25 +0,0 @@ -{%- doc -%} - Renders the CSS variables for the `gap` styles needed for responsive scaling. - Intended for use with the `gap-style` class. - - @param {number} value - The base or desktop gap value to use, in pixels. - @param {string} [name] - The name of the CSS variable to set. Default: 'gap' - @param {number} [scale_min] - Value above which gap scaling will be applied. Default: 20 - @param {boolean} [disable_scaling] - If true, disables scaling and outputs the original value. - - @example -
-{%- enddoc -%} - -{%- liquid - assign min = scale_min | default: 24 - assign name = name | default: 'gap' --%} - -{%- if value != blank -%} - {%- if disable_scaling != true and value > min -%} - --{{ name }}: max({{ min }}px, calc(var(--gap-scale, 1.0) * {{ value }}px)); - {%- else -%} - --{{ name }}: {{ value }}px; - {%- endif -%} -{%- endif -%} diff --git a/snippets/gift-card-recipient-form.liquid b/snippets/gift-card-recipient-form.liquid deleted file mode 100644 index 9c7e936ad..000000000 --- a/snippets/gift-card-recipient-form.liquid +++ /dev/null @@ -1,403 +0,0 @@ -{% comment %} - Renders gift card recipient form. - Accepts: - - product: {Object} product object. - - form: {Object} the product form object. - - section: {Object} section to which this snippet belongs. - - Usage: - {% render 'gift-card-recipient-form', product: product, form: form, section: section, block: block %} -{% endcomment %} - - -
- - {{ 'content.recipient_form_send_to' | t }} - - - -
- - -
-
- -{% stylesheet %} - .recipient-form { - --options-border-radius: var(--variant-picker-button-radius); - --options-border-width: var(--variant-picker-button-border-width); - - display: flex; - flex-direction: column; - padding-bottom: var(--padding-2xl); - } - - .recipient-form__send-to { - padding: 0; - margin-block-end: var(--margin-xs); - } - - .gift-card-form-option { - display: grid; - grid-template-columns: 1fr 1fr; - gap: var(--gap-sm); - padding: 0; - border: none; - } - - .gift-card-form-option__button-label { - display: flex; - align-items: center; - position: relative; - padding-block: var(--padding-sm); - padding-inline: var(--padding-lg); - border: var(--style-border-width) solid var(--color-variant-border); - border-radius: var(--options-border-radius); - border-width: var(--options-border-width); - overflow: clip; - justify-content: center; - min-width: auto; - background-color: var(--color-variant-background); - color: var(--color-variant-text); - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - - &:hover { - background-color: var(--color-variant-hover-background); - border-color: var(--color-variant-hover-border); - color: var(--color-variant-hover-text); - } - } - - .gift-card-form-option__button-label:has(:focus-visible) { - --variant-picker-stroke-color: var(--color-foreground); - - border-color: var(--color-foreground); - outline: var(--focus-outline-width) solid var(--color-foreground); - outline-offset: var(--focus-outline-offset); - } - - .gift-card-form-option__button-label:has(:checked) { - color: var(--color-selected-variant-text); - background-color: var(--color-selected-variant-background); - border-color: var(--color-selected-variant-border); - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - - &:hover { - background-color: var(--color-selected-variant-hover-background); - border-color: var(--color-selected-variant-hover-border); - color: var(--color-selected-variant-hover-text); - } - } - - .gift-card-form-option__button-label input { - /* remove the checkbox from the page flow */ - position: absolute; - - /* set the dimensions to match those of the label */ - inset: 0; - - /* hide it */ - opacity: 0; - margin: 0; - cursor: pointer; - width: 100%; - height: 100%; - } - - .recipient-fields { - display: flex; - flex-direction: column; - gap: var(--gap-sm); - transition: opacity 0.3s var(--animation-easing); - padding-block-start: var(--padding-xl); - } - - .recipient-fields[hidden] { - display: none; - } - - .field--send-on { - display: flex; - flex-direction: column; - } - - .recipient-form__message { - display: flex; - flex-direction: row; - align-items: center; - gap: var(--gap-sm); - margin-top: var(--margin-sm); - } - - .recipient-form-field-label { - position: absolute; - left: var(--padding-sm); - bottom: var(--padding-sm); - font-style: italic; - } - - .recipient-fields__textarea { - min-height: 5.5rem; - overflow-y: auto; - - /* Space for the character count */ - padding-bottom: calc(var(--padding-sm) * 3); - scroll-padding-bottom: calc(var(--padding-sm) * 3); - } - - .recipient-fields__input { - flex-grow: 1; - transition: background-color var(--animation-speed) ease; - padding: var(--input-padding); - background-color: var(--color-input-background); - color: var(--color-input-text); - text-align: left; - font-size: var(--font-paragraph--size); - border: var(--style-border-width-inputs) solid var(--color-input-border); - border-radius: var(--style-border-radius-inputs); - - &:autofill { - background-color: var(--color-input-background); - color: var(--color-input-text); - } - - &:is(:focus) { - outline-color: var(--color-input-background); - } - } - - /* Date picker calendar icon - * Safari doesn't show the icon and Firefox correctly applies the color from the input field. - * Webkit browsers need the mask-image trick to use the correct icon color. - */ - .field--send-on .recipient-fields__input::-webkit-calendar-picker-indicator { - cursor: pointer; - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' viewBox='0 0 24 24' %3E%3Cg%3E%3Cpath d='M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-image: none; - background-color: currentColor; - mask-type: match-source; - } - - /* For Webkit browsers - text cursor for input area */ - .field--send-on .recipient-fields__input::-webkit-datetime-edit { - cursor: text; - } - - .field--send-on .recipient-fields__input::-webkit-datetime-edit-year-field, - .field--send-on .recipient-fields__input::-webkit-datetime-edit-month-field, - .field--send-on .recipient-fields__input::-webkit-datetime-edit-day-field { - /* Override the disabled color */ - color: var(--color-input-text); - } - - /* Fallback for other browsers */ - .field--send-on .recipient-fields__input { - cursor: text; - } - - /* For Firefox - entire field is clickable, so show pointer */ - @supports (-moz-appearance: none) { - .field--send-on .recipient-fields__input { - cursor: pointer; - } - } -{% endstylesheet %} diff --git a/snippets/grid-density-controls.liquid b/snippets/grid-density-controls.liquid deleted file mode 100644 index 2dbc5f169..000000000 --- a/snippets/grid-density-controls.liquid +++ /dev/null @@ -1,179 +0,0 @@ -{%- doc -%} - Renders the grid density controls. - - @param {string} viewport - The viewport to render the controls for, either 'mobile' or 'desktop'. - - @example - {% render 'grid-density-controls', viewport: 'desktop' %} -{%- enddoc -%} - -
-
- - {{ 'content.grid_view.grid_fieldset' | t }} - - - {% if viewport == 'mobile' %} - - - - - {% elsif viewport == 'desktop' %} - - - - {% endif %} -
-
- -{% stylesheet %} - .column-options-wrapper { - --icon-offset: -3px; - - display: flex; - gap: var(--gap-sm); - min-width: fit-content; - justify-content: flex-end; - height: var(--minimum-touch-target); - align-items: center; - margin-right: var(--icon-offset); - } - - .column-options-wrapper:only-child { - margin-left: auto; - } - - .facets__form-wrapper > .column-options-wrapper:first-child { - margin-left: auto; - } - - .facets .column-options-wrapper { - display: none; - - @media screen and (min-width: 750px) { - display: flex; - } - } - - .column-options { - display: flex; - flex-wrap: wrap; - gap: var(--gap-xs); - margin: 0; - padding: 0; - border: none; - - @media screen and (min-width: 750px) { - gap: var(--gap-2xs); - } - } - - .column-options__option { - display: none; - position: relative; - } - - .column-options__option:has(.column-picker-mobile--single), - .column-options__option:has(.column-picker-mobile--double) { - @media screen and (max-width: 749px) { - display: flex; - } - } - - .column-options__option:has(.column-picker--default), - .column-options__option:has(.column-picker--zoom-out) { - @media screen and (min-width: 750px) { - display: flex; - } - } - - .column-options__legend { - padding: 0; - margin: 0; - } - - .column-options__option-input { - /* this is a repeating pattern a bit with the variant picker buttons */ - - /* remove the checkbox from the page flow */ - position: absolute; - - /* set the dimensions to match those of the label */ - inset: 0; - - /* hide it */ - opacity: 0; - margin: 0; - cursor: pointer; - } - - .column-picker { - color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); - padding: var(--padding-2xs); - border-radius: var(--style-border-radius-xs); - transition: background-color var(--animation-speed) ease, color var(--animation-speed) ease; - } - - .column-options__option:hover .column-picker { - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - } - - .column-options__option-input:checked ~ .column-picker { - color: rgb(var(--color-foreground-rgb)); - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - } -{% endstylesheet %} diff --git a/snippets/group.liquid b/snippets/group.liquid deleted file mode 100644 index 716a43aa6..000000000 --- a/snippets/group.liquid +++ /dev/null @@ -1,90 +0,0 @@ -{%- doc -%} - Renders block content for all blocks that extend the group block. - - @param {string} children - The DOM content of the group block. - @param {object} settings - The settings of the group block. - @param {string} shopify_attributes - String with Shopify attributes for the editor. - @param {string} [class] - Custom classes for the group block. - @param {string} [style] - Custom inline styles for the group block. - - @example - {% render 'group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %} -{%- enddoc -%} - -
- {%- if settings.link != blank -%} - - {%- endif -%} - -
- {% render 'background-media', - background_media: settings.background_media, - background_video: settings.video, - background_video_position: settings.video_position, - background_image: settings.background_image, - background_image_position: settings.background_image_position, - placeholder: settings.placeholder - %} - {% if settings.toggle_overlay %} - {% render 'overlay', settings: settings, layer: '0' %} - {% endif %} -
- -
- {{- children -}} -
-
- -{% stylesheet %} - .group-block__link { - position: absolute; - inset: 0; - } - - .group-block__link ~ :is(.group-block-content, .group-block__media-wrapper) { - pointer-events: none; - - :is(a, button, input, textarea, select) { - pointer-events: auto; - } - } - - /* Needs the .group-block__link ~ to be specific enough to take effect. */ - .group-block__link ~ .group-block-content--design-mode { - pointer-events: auto; - } -{% endstylesheet %} diff --git a/snippets/header-actions.liquid b/snippets/header-actions.liquid deleted file mode 100644 index da77237d3..000000000 --- a/snippets/header-actions.liquid +++ /dev/null @@ -1,270 +0,0 @@ - - - - {% if shop.customer_accounts_enabled %} - {% render 'account-popover' %} - {% render 'account-drawer' %} - {% endif %} - - {% if settings.cart_type == 'drawer' and template.name != 'cart' %} - {% render 'cart-drawer' %} - {% else %} - - {% render 'cart-icon-component' %} - - {% endif %} - - -{% stylesheet %} - .cart-drawer { - --cart-drawer-padding: var(--padding-lg) var(--padding-xl); - --cart-drawer-padding-desktop: var(--padding-xl) var(--padding-2xl); - --cart-font-size--2xs: var(--font-size--2xs); - --cart-font-size--xs: var(--font-size--xs); - --cart-font-size--sm: var(--font-size--sm); - --cart-font-size--md: var(--font-size--md); - --cart-font-size--2xl: var(--font-size--2xl); - } - - .cart-drawer__dialog { - position: fixed; - border-radius: 0; - width: var(--sidebar-width); - max-width: 95vw; - height: 100%; - margin: 0 0 0 auto; - padding: 0; - border-left: var(--style-border-drawer); - box-shadow: var(--shadow-drawer); - background-color: var(--color-background); - } - - /* Needed to ensure the drawer is full height */ - .cart-drawer__dialog:modal { - max-height: 100dvh; - overflow-y: hidden; - } - - .cart-drawer__inner { - height: 100%; - } - - .cart-drawer__content { - padding: 0; - background-color: var(--color-background); - display: flex; - flex-direction: column; - flex-grow: 1; - overflow-y: auto; - } - - .cart-drawer__heading { - display: flex; - align-items: center; - gap: var(--gap-xs); - } - - .cart-drawer__close-button { - margin-right: calc(var(--padding-sm) * -1); - } - - .cart-drawer--empty .cart-drawer__content { - text-align: center; - min-height: auto; - } - - .cart-drawer--empty .cart-drawer__heading { - margin-bottom: var(--margin-md); - } - - .cart-drawer__items .cart-items__table-row { - padding-bottom: var(--gap-xl); - border-bottom: var(--style-border-width) solid var(--color-border); - margin-bottom: var(--gap-xl); - } - - .cart-drawer__items .cart-items__table-row:has(+ .cart-items__nested-line) { - border-bottom: none; - margin-bottom: 0; - } - - .cart-drawer__items .cart-items__table-row:last-child { - border-bottom: none; - } - - .cart-drawer__summary { - --cart-drawer-summary-padding: var(--padding-lg); - - display: flex; - flex-direction: column; - align-items: center; - gap: var(--gap-2xl); - padding: var(--cart-drawer-summary-padding); - margin-top: auto; - background-color: var(--color-background); - /* stylelint-disable-next-line color-named */ - mask-image: linear-gradient(to bottom, transparent, black var(--cart-drawer-summary-padding)); - - @media screen and (min-width: 750px) { - --cart-drawer-summary-padding: var(--padding-2xl); - } - } - - .cart-drawer__summary .cart__summary-totals:not(:has(.cart__original-total-container:empty)) { - border-block-start: var(--style-border-width) solid var(--color-border); - padding-block-start: var(--padding-2xl); - } - - .cart-drawer__summary .cart-note { - @media screen and (min-width: 750px) { - margin-block-start: var(--margin-3xs); - } - } - - .cart-drawer__heading--empty { - display: flex; - justify-content: center; - } - - .cart-drawer__items { - display: flex; - flex-direction: column; - padding-inline: var(--cart-drawer-padding); - overflow-y: auto; - - @media screen and (min-width: 750px) { - padding-inline: var(--cart-drawer-padding-desktop); - } - } - - .cart-drawer__items .cart-items__table-row { - padding-bottom: var(--gap-xl); - border-bottom: var(--style-border-width) solid var(--color-border); - margin-bottom: var(--gap-xl); - } - - .cart-drawer__items .cart-items__table-row:last-child { - border-bottom: none; - padding-block-end: 0; - margin-block-end: 0; - } - - .cart-drawer--empty .cart-drawer__inner { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100dvh; - margin-top: 0; - } - - .cart-drawer:not(:has(.cart-form)) .cart-drawer__content { - justify-content: center; - } - - .cart-drawer--empty .cart-drawer__header { - justify-content: right; - border-bottom: none; - padding-bottom: 0; - } - - .cart-drawer--empty .cart-drawer__heading { - text-align: center; - } - - .cart-drawer:not(:has(.cart-form)) .cart-items__wrapper { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - text-align: center; - } - - header-actions { - display: flex; - - @media screen and (max-width: 749px) { - justify-self: flex-end; - } - } - - .header__column--right header-actions { - margin-inline-start: calc(var(--gap-md) * -1); - } - - .header-actions__action { - --button-color: var(--color-foreground); - - cursor: pointer; - display: flex; - justify-content: center; - } - - .header-actions__action .svg-wrapper { - height: var(--button-size); - width: var(--button-size); - } - - .header-actions__action svg { - width: var(--icon-size-md); - height: var(--icon-size-md); - } - - .header-actions__cart-icon { - --cart-bubble-size: 20px; - --cart-bubble-top: 4.5px; - --cart-bubble-right: 2.5px; - - position: relative; - } - - .header-actions__cart-icon .cart-bubble { - position: absolute; - width: var(--cart-bubble-size, 20px); - top: var(--cart-bubble-top); - right: var(--cart-bubble-right); - } - - .header-actions__cart-icon .cart-bubble__text, - .cart-drawer__heading .cart-bubble__text { - font-family: var(--font-paragraph--family); - font-weight: var(--font-paragraph--weight); - } - - .header-actions__cart-icon.header-actions__cart-icon--has-cart svg { - /* Create donut mask where the cart bubble sits */ - mask: radial-gradient( - calc(var(--cart-bubble-size) + 2px) at calc(100% - var(--cart-bubble-right)) var(--cart-bubble-top), - transparent 45.45%, - #fff 45.45%, - #fff 100% - ); - } - - .cart-drawer__heading .cart-bubble__background { - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25)); - } - - .cart-drawer__heading .cart-bubble__text { - color: var(--color-foreground); - font-size: var(--font-size--xs); - } - - .cart-bubble--animating .cart-bubble__background { - animation: grow var(--animation-speed) var(--animation-easing); - } - - .cart-bubble--animating .cart-bubble__text { - animation: cartBubbleSlideIn var(--animation-speed) var(--animation-easing); - } -{% endstylesheet %} diff --git a/snippets/header-drawer.liquid b/snippets/header-drawer.liquid deleted file mode 100644 index f04217bf0..000000000 --- a/snippets/header-drawer.liquid +++ /dev/null @@ -1,1162 +0,0 @@ -{%- doc -%} - Renders a header drawer menu triggered by the top details element. - - @param {object} linklist - The linklist to render - @param {string} [class] - Additional classes to add to the drawer - @param {string} [data_header_drawer_type] - The type of header drawer to render - @param {object} [block] - The block that can be used to provide settings - @param {object} [section] - The section that can be used to provide settings - - @example - {% render 'header-drawer', linklist: section.settings.menu, class: 'header-drawer--mobile' %} -{%- enddoc -%} - -{% liquid - assign block_settings = block.settings - assign max_featured_items = 4 - assign image_border_radius = block_settings.image_border_radius - - if block_settings.menu_style == 'featured_collections' - assign ratio = block_settings.featured_collections_aspect_ratio - elsif block_settings.menu_style == 'featured_products' - assign ratio = block_settings.featured_products_aspect_ratio - endif - - ## - # We only eager load heavy elements of the page when rendering this template - # through the Section Rendering API. - # - # This keeps the initial render lightweight, minimizing the impact on TTFB. - # The second render then refreshes the page with additional content. - # - # At the moment, we check if the Section Rendering API is being used by - # checking if section.index is blank. - assign eager_loading = false - if section.index == blank - assign eager_loading = true - endif -%} - - - - - - - -{% stylesheet %} - .header__icon--menu { - position: initial; - } - - @media screen and (min-width: 750px) { - .header--desktop header-menu + .header__drawer header-drawer { - display: none; - } - } - - .menu-drawer-container .header__icon--summary { - color: var(--color-foreground); - display: flex; - justify-content: center; - align-items: center; - padding: var(--padding-lg); - } - - .header__icon--summary .header-drawer-icon { - margin: auto; - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - .header__drawer { - display: flex; - min-height: 60px; - align-items: center; - - @media screen and (min-width: 750px) { - min-height: 0; - } - } - - .header--compact .header__drawer { - min-height: var(--minimum-touch-target); - } - - .menu-drawer__navigation { - padding: 0; - - @media screen and (min-width: 750px) { - margin-top: var(--drawer-header-desktop-top); - } - } - - details:not([open]) .header__icon--menu .header-drawer-icon--close { - display: none; - } - - details[open] .header__icon--menu .header-drawer-icon--close { - @media screen and (min-width: 750px) { - display: none; - } - } - - details[open] .header__icon--menu .header-drawer-icon--open { - display: none; - - @media screen and (min-width: 750px) { - display: flex; - } - } - - .menu-drawer { - position: fixed; - transform: translateX(-100%); - visibility: hidden; - height: var(--drawer-height); - width: var(--drawer-width); - max-width: var(--drawer-max-width); - z-index: var(--layer-menu-drawer); - left: 0; - top: 0; - padding: 0; - background-color: var(--color-background); - overflow: auto; - display: flex; - border-right: var(--style-border-drawer); - box-shadow: var(--shadow-drawer); - flex-direction: column; - - @media screen and (min-width: 750px) { - width: 25rem; - } - - .header__drawer--desktop & { - height: 100vh; - } - } - - .menu-drawer:has(details[open]) { - overflow: initial; - } - - .menu-drawer__backdrop { - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100dvh; - backdrop-filter: brightness(0.75); - z-index: var(--layer-heightened); - opacity: 0; - transition: opacity var(--drawer-animation-speed) ease; - - .menu-open & { - opacity: 1; - } - } - - .menu-drawer, - details[open] > .menu-drawer__submenu { - transition: transform var(--drawer-animation-speed) ease, visibility var(--drawer-animation-speed) ease, - opacity var(--drawer-animation-speed) ease; - } - - .menu-open > .menu-drawer, - .menu-open > .menu-drawer__submenu:not(.menu-drawer__menu--childlist) { - transform: translateX(0); - visibility: visible; - opacity: 1; - display: flex; - flex-direction: column; - will-change: transform; - } - - .menu-drawer__inner-container { - position: relative; - height: 100%; - } - - .menu-drawer__navigation-container { - display: grid; - grid-template-rows: 1fr auto; - align-content: space-between; - overflow-y: auto; - height: 100%; - } - - .menu-drawer__inner-submenu { - display: flex; - flex-direction: column; - height: 100%; - overflow-y: auto; - - @media screen and (min-width: 750px) { - margin-top: var(--drawer-header-desktop-top); - } - } - - .menu-drawer__nav-buttons { - display: flex; - justify-content: space-between; - align-items: center; - } - - .menu-drawer__menu { - --menu-drawer-inline-padding: calc(var(--padding-sm) + 7px); - - list-style: none; - padding-inline: var(--drawer-padding); - margin-inline: 0; - margin-block-start: 0; - } - - .menu-drawer__menu--grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: var(--padding-sm); - padding-inline-end: var(--menu-drawer-inline-padding); - padding-block-start: var(--padding-xs); - } - - .menu-drawer__menu--childlist:not(.menu-drawer__menu--grid) { - flex-grow: 1; - } - - .menu-drawer__menu.has-submenu, - .menu-drawer__menu--childlist:not(:has(.menu-drawer__animated-element)) { - margin-block-end: var(--margin-xs); - - @media screen and (min-width: 750px) { - margin-block-end: 2.5rem; - } - } - - .menu-drawer__list-item--divider { - border-block-end: 1px solid var(--color-border); - } - - .menu-drawer__list-item--deep:not(.menu-drawer__list-item--divider) .menu-drawer__menu { - margin-block-start: -0.3rem; - } - - .menu-drawer__list-item--flat.menu-drawer__list-item--divider .menu-drawer__menu { - margin-block-start: -0.4rem; - } - - .menu-drawer__menu-container--divider { - border-block-end: 1px solid var(--color-border); - } - - .menu-drawer__menu > .menu-drawer__list-item { - display: flex; - min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs)); - } - - .menu-drawer__list-item--deep .menu-drawer__list-item, - .menu-drawer__list-item--flat .menu-drawer__list-item { - min-height: auto; - } - - .menu-drawer__menu .menu-drawer__list-item--flat { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-block-end: var(--margin-md); - } - - .menu-drawer__menu--childlist .menu-drawer__list-item--flat { - margin-block-end: var(--margin-sm); - - @media screen and (min-width: 750px) { - margin-block-end: var(--margin-lg); - } - } - - .menu-drawer__menu--childlist .menu-drawer__list-item--flat.menu-drawer__list-item--divider { - margin-block-end: 0; - } - - .menu-drawer__list-item--flat .menu-drawer__menu--childlist { - width: 100%; - padding-inline-start: 0; - } - - .menu-drawer-container[open] .menu-drawer__animated-element { - animation: menu-drawer-nav-open var(--drawer-animation-speed) ease-in-out; - animation-delay: calc(var(--drawer-animation-speed) + (var(--menu-drawer-animation-index) - 1) * 0.1s); - animation-fill-mode: backwards; - } - - .menu-drawer__menu details, - .menu-drawer__menu-item, - .menu-drawer__menu accordion-custom { - width: 100%; - } - - .menu-drawer__list-item--divider .menu-drawer__menu-item:not(.menu-drawer__menu-item--child) { - min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs)); - } - - .menu-drawer__menu-item--mainlist { - min-height: calc(2 * var(--padding-lg) + var(--icon-size-xs)); - font-family: var(--menu-top-level-font-family); - font-style: var(--menu-top-level-font-style); - font-weight: var(--menu-top-level-font-weight); - font-size: var(--menu-top-level-font-size); - line-height: var(--menu-top-level-font-line-height); - text-transform: var(--menu-top-level-font-case); - color: var(--menu-top-level-font-color); - justify-content: space-between; - - &:hover { - color: var(--menu-top-level-font-color); - } - } - - .menu-drawer__menu-item--parent { - font-family: var(--menu-parent-font-family); - font-style: var(--menu-parent-font-style); - font-weight: var(--menu-parent-font-weight); - font-size: var(--menu-parent-font-size); - line-height: var(--menu-parent-font-line-height); - text-transform: var(--menu-parent-font-case); - color: var(--menu-parent-font-color); - - &:hover { - color: var(--menu-parent-font-color); - } - } - - .menu-drawer__menu-item--child { - font-family: var(--menu-child-font-family); - font-style: var(--menu-child-font-style); - font-weight: var(--menu-child-font-weight); - font-size: var(--menu-child-font-size); - line-height: var(--menu-child-font-line-height); - text-transform: var(--menu-child-font-case); - color: var(--menu-child-font-color); - - &:hover { - color: var(--menu-child-font-color); - } - } - - .menu-drawer__menu--childlist summary.menu-drawer__menu-item { - display: flex; - width: 100%; - padding-inline-end: 0; - } - - .menu-drawer__list-item--deep .menu-drawer__menu, - .menu-drawer__menu--grandchildlist { - padding-inline-start: 0; - } - - .menu-drawer__list-item--deep .menu-drawer__menu { - padding-block-end: 0.5rem; - } - - .menu-drawer__list-item--deep.menu-drawer__list-item--divider .menu-drawer__menu { - padding-block-end: 0.3rem; - } - - .menu-drawer__list-item--flat.menu-drawer__list-item--divider .menu-drawer__menu--grandchildlist { - padding-block-end: 0.5rem; - } - - .menu-drawer__menu-item { - display: flex; - padding: var(--padding-2xs) 0; - position: relative; - text-decoration: none; - justify-content: space-between; - align-items: center; - } - - .menu-drawer__menu-item:has(> .menu-drawer__link-image) { - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: var(--padding-3xs); - padding: 0; - } - - .menu-drawer__link-image { - width: 100%; - position: relative; - aspect-ratio: 16 / 9; - object-fit: cover; - } - - /* Fix alignment for collection image mode links without images in drawer */ - - /* Target menu items in grids that have images */ - .menu-drawer__menu--grid:has(.menu-drawer__link-image) .menu-drawer__menu-item:not(:has(> .menu-drawer__link-image)) { - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - row-gap: var(--padding-3xs); - padding: 0; - } - - .menu-drawer__menu--grid:has(.menu-drawer__link-image) - .menu-drawer__menu-item:not(:has(> .menu-drawer__link-image))::before { - content: ''; - display: block; - width: 100%; - aspect-ratio: 16 / 9; - background-color: var(--color-foreground-muted); - opacity: 0.1; - border-radius: var(--menu-image-border-radius); - } - - .menu-drawer__close-button { - position: relative; - right: auto; - top: auto; - width: fit-content; - height: fit-content; - padding: var(--padding-lg); - will-change: transform; - } - - .menu-drawer__back-button { - display: flex; - width: 100%; - padding: var(--padding-md) var(--padding-xl); - border: none; - align-items: center; - color: var(--color-foreground); - background-color: transparent; - text-align: left; - text-decoration: none; - white-space: nowrap; - overflow-x: hidden; - line-height: 1.2; - box-shadow: none; - } - - .menu-drawer__menu-item-text { - overflow: hidden; - text-overflow: ellipsis; - } - - /** Styles when the country selector is hidden */ - .menu-drawer .language-selector:not(.menu-drawer__submenu *) { - width: fit-content; - padding-inline-start: 0; - - .localization-form__select { - text-align: left; - } - } - - .menu-drawer__menu-item > .svg-wrapper { - width: fit-content; - height: fit-content; - margin: 0; - padding-block: var(--padding-lg); - padding-inline-start: var(--padding-xl); - flex-shrink: 0; - } - - .menu-drawer__list-item--divider .menu-drawer__menu-item > .svg-wrapper { - padding-block: var(--padding-md); - } - - .menu-drawer svg { - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - .menu-drawer__submenu { - position: absolute; - width: 100%; - top: 0; - height: 100dvh; - left: 0; - background-color: var(--color-background); - z-index: var(--layer-flat); - transform: translateX(-5%); - visibility: hidden; - overflow-y: auto; - opacity: 0; - } - - .menu-drawer__back-button > .svg-wrapper { - margin-right: var(--padding-md); - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - .menu-drawer__utility-links { - display: flex; - flex-direction: column; - padding: 0; - margin-block: auto var(--padding-sm); - margin-inline-start: var(--padding-xl); - background-color: rgb(var(--color-foreground) 0.03); - } - - .menu-drawer__account { - display: inline-flex; - align-items: center; - gap: var(--gap-xs); - text-decoration: none; - height: 44px; - font-size: 1.4rem; - color: rgb(var(--color-foreground)); - } - - .menu-drawer__account svg { - height: var(--icon-size-sm); - width: var(--icon-size-sm); - } - - .menu-drawer__account shop-user-avatar { - --shop-avatar-size: 2.4rem; - - margin-right: 0.55rem; - margin-left: -0.45rem; - } - - .menu-drawer__link-image, - .menu-drawer__featured-product-image, - .menu-drawer__featured-collection-image, - .menu-drawer__featured-collection-link::before { - border-radius: var(--menu-image-border-radius); - } - - @keyframes menu-drawer-nav-open { - 0% { - visibility: hidden; - opacity: 0; - transform: translateX(-0.5rem); - } - - 100% { - visibility: visible; - opacity: 1; - transform: translateX(0); - } - } - - @keyframes menu-drawer-subnav-open { - 0% { - visibility: visible; - opacity: 1; - transform: translateX(0); - } - - 100% { - visibility: hidden; - opacity: 0; - transform: translateX(-1rem); - } - } -{% endstylesheet %} diff --git a/snippets/header-menu.liquid b/snippets/header-menu.liquid deleted file mode 100644 index ca5499760..000000000 --- a/snippets/header-menu.liquid +++ /dev/null @@ -1,93 +0,0 @@ -{% liquid - assign block_settings = block.settings - assign menu_content_type = block_settings.menu_style | default: 'text' - assign image_border_radius = block_settings.image_border_radius - assign color_scheme_classes = '' - assign color_scheme_setting_id = 'color_scheme_' | append: section.settings.menu_row - assign current_color_scheme = block_settings.color_scheme - assign parent_color_scheme = section.settings[color_scheme_setting_id] - - if parent_color_scheme.id != current_color_scheme.id - assign color_scheme_classes = ' color-' | append: current_color_scheme - endif - - # Check if header and menu colors match. This is used to apply different padding styles in css - if parent_color_scheme.settings.background.rgb == current_color_scheme.settings.background.rgb - assign color_scheme_classes = color_scheme_classes | append: ' color-scheme-matches-parent' - endif - - if block_settings.menu_style == 'featured_collections' - assign ratio = block_settings.featured_collections_aspect_ratio - elsif block_settings.menu_style == 'featured_products' - assign ratio = block_settings.featured_products_aspect_ratio - endif -%} - -{% capture children %} - {% for link in block_settings.menu.links %} - - {% endfor %} - -{% endcapture %} - - diff --git a/snippets/header-row.liquid b/snippets/header-row.liquid deleted file mode 100644 index 134390046..000000000 --- a/snippets/header-row.liquid +++ /dev/null @@ -1,78 +0,0 @@ -{%- liquid - assign order = order | split: ',' - assign left = '' - assign center = '' - assign right = '' - - if first != blank - assign left = 'first ' - endif - - for item in order - assign column_key = item | append: '_position' - assign row_key = item | append: '_row' - assign item_row = settings[row_key] | default: 'top' - assign item_column = settings[column_key] | default: 'left' - - case item - when 'actions': - assign item_column = 'right' - endcase - - if item_row == row - case item_column - when 'left' - assign left = left | append: item | append: ' ' - when 'center' - assign center = center | append: item | append: ' ' - else - assign right = right | append: item | append: ' ' - endcase - endif - endfor - - assign columns = 'left,center,right' | split: ',' --%} - -{%- for column in columns -%} - {%- capture items_for_column -%} - {% case column %} - {% when 'left' %} - {{ left }} - {% when 'center' %} - {{ center }} - {% else %} - {{ right }} - {% endcase %} - {%- endcapture -%} - - {%- assign items_array = items_for_column | strip | split: ' ' | compact -%} - - {%- if items_array.size > 0 -%} -
- {% for key in items_array %} - {% unless key == blank %} - {% case key %} - {% when 'first' %} - {{ first }} - {% when 'logo' %} - {{ logo }} - {% when 'menu' %} - {{ menu }} - {% when 'localization' %} - {{ localization }} - {% when 'search' %} - {{ search }} - {% when 'mobile_search' %} - {{ mobile_search }} - {% when 'actions' %} - {{ actions }} - {% endcase %} - {% endunless %} - {% endfor %} -
- {%- endif -%} -{%- endfor -%} diff --git a/snippets/icon-or-image.liquid b/snippets/icon-or-image.liquid deleted file mode 100644 index ca2e468c0..000000000 --- a/snippets/icon-or-image.liquid +++ /dev/null @@ -1,40 +0,0 @@ -{%- doc -%} - Renders either an SVG icon or an uploaded image based on block settings. - - @param {string} icon - The icon name from block.settings.icon - @param {object} image_upload - The uploaded image from block.settings.image_upload - @param {number} width - The width setting from block.settings.width - @param {string} class_name - CSS class name for the rendered element - @param {object} [attributes] - Additional HTML attributes to add to the element -{%- enddoc -%} - -{%- if icon != 'none' and image_upload == blank -%} - -{%- elsif image_upload != blank -%} - {% liquid - assign media_width_desktop = '100vw' - assign media_width_mobile = '100vw' - assign sizes = '(min-width: 1024px) 1024px, ' | append: media_width_desktop | append: ', ' | append: media_width_mobile - assign widths = '240, 352, 832, 1200' - %} - - {% assign image_style = 'width: ' | append: width | append: 'px;' %} - {{ - image_upload - | image_url: width: 1200 - | image_tag: widths: widths, class: class_name, style: image_style, sizes: sizes - }} -{%- endif -%} diff --git a/snippets/icon.liquid b/snippets/icon.liquid deleted file mode 100644 index 3ebf7200f..000000000 --- a/snippets/icon.liquid +++ /dev/null @@ -1,399 +0,0 @@ -{% # To be removed when we can use the icon static block instead %} - -{%- case icon -%} - {%- when 'apple' -%} - - - - {%- when 'banana' -%} - - - {%- when 'bottle' -%} - - - - {%- when 'bluesky' %} - - {%- when 'box' -%} - - {%- when 'caret' -%} - - {%- when 'double-sided-caret' -%} - - - - - - {%- when 'carrot' -%} - - - - - - - {%- when 'chat_bubble' -%} - - - - - {%- when 'check_box' -%} - - - {%- when 'clipboard' -%} - - - - - - {%- when 'dairy' -%} - - - - - - {%- when 'dairy_free' -%} - - - - - - - - - - {%- when 'discord' -%} - - {%- when 'dryer' -%} - - - {%- when 'error' -%} - - - {%- when 'eye' -%} - - - {%- when 'fire' -%} - - - {%- when 'gluten_free' -%} - - - - - - - - - - - - {%- when 'heart' -%} - - {%- when 'iron' -%} - - - - - {%- when 'leaf' -%} - - - - - {%- when 'leather' -%} - - {%- when 'lightning_bolt' -%} - - {%- when 'linkedin' -%} - - {%- when 'lipstick' -%} - - - - {%- when 'lock' -%} - - - - - {%- when 'map_pin' -%} - - - {%- when 'nut_free' -%} - - - - - {%- when 'pants' -%} - - - {%- when 'paw_print' -%} - - - - - - {%- when 'pepper' -%} - - {%- when 'perfume' -%} - - - - - {%- when 'plane' -%} - - {%- when 'plant' -%} - - - - - {%- when 'price_tag' -%} - - - {%- when 'question_mark' -%} - - - {%- when 'recycle' -%} - - - - {%- when 'return' -%} - - - {%- when 'ruler' -%} - - - - - - {%- when 'serving_dish' -%} - - - - - {%- when 'shirt' -%} - - {%- when 'shoe' -%} - - - {%- when 'silhouette' -%} - - - {%- when 'snowflake' -%} - - {%- when 'star' -%} - - {%- when 'stopwatch' -%} - - - - - - - {%- when 'truck' -%} - - - - - {%- when 'washing' -%} - - - {%- when 'arrow' -%} - - - {%- when 'tiktok' -%} - - {%- when 'youtube' -%} - - {%- when 'instagram' -%} - - {%- when 'x' -%} - - {%- when 'twitter' -%} - - {%- when 'facebook' -%} - - {%- when 'pinterest' -%} - - {%- when 'tumblr' -%} - - {%- when 'vimeo' -%} - - {%- when 'snapchat' -%} - - {%- when 'spotify' -%} - - {%- when 'next' -%} - - {%- when 'previous' -%} - - {%- when 'threads' -%} - - {%- when 'whatsapp' -%} - - - {%- when '3d-model' -%} - - {%- when 'mastodon' -%} - - {%- when 'reddit' -%} - - {%- when 'telegram' -%} - - {%- when 'twitch' -%} - -{%- endcase -%} diff --git a/snippets/image.liquid b/snippets/image.liquid deleted file mode 100644 index 2f220188f..000000000 --- a/snippets/image.liquid +++ /dev/null @@ -1,32 +0,0 @@ -{%- doc -%} - Renders the element using provided image object - - @param {object} image - image object - @param {number} [height] - custom image height - @param {string} [class] - additional classes - @param {string} [text_fallback] - text to display if image is blank - @param {boolean} [unset_image_tag] - if true, ignores the image focal point - @param {string} [style] - additional styles - - @example - {% render 'image', image: product.featured_image, height: 300, class: 'product-image' %} -{%- enddoc -%} -{% if image != blank %} - {% assign image_height = height | default: image.height %} - {% assign image_height_2x = height | default: image_height | times: 2 %} - {% assign image_height_3x = height | default: image_height | times: 3 %} - - {% capture image_srcset -%} - {{ image | image_url: height: image_height }} 1x, {{ image | image_url: height: image_height_2x }} 2x, {{ image | image_url: height: image_height_3x }} 3x - {%- endcapture %} - - {% assign style_value = style | default: '' %} - - {% if unset_image_tag %} - {% assign style_value = style_value | append: 'object-position: inherit;' %} - {% endif %} - - {{ image | image_url: height: image_height | image_tag: class: class, srcset: image_srcset, style: style_value }} -{% elsif text_fallback %} - {{ text_fallback }} -{% endif %} diff --git a/snippets/jumbo-text.liquid b/snippets/jumbo-text.liquid deleted file mode 100644 index bbfa7f9bd..000000000 --- a/snippets/jumbo-text.liquid +++ /dev/null @@ -1,193 +0,0 @@ -{%- doc -%} - Renders text that stretches to fit the full width of its container. - - @param {string} [text] - The text to be rendered. - @param {object} [block_settings] - The block settings object, defaults to block.settings - - @example - {% render 'jumbo-text', text: block.settings.text %} -{%- enddoc -%} - -{% liquid - assign block_settings = block_settings | default: block.settings - assign shown_text = text | default: block_settings.text - assign descenders = 'alphabetic' - assign trim = 'trim-both' - - unless block_settings.case == 'uppercase' - if shown_text contains 'g' or shown_text contains 'j' or shown_text contains 'p' or shown_text contains 'q' or shown_text contains 'y' - assign descenders = 'text' - endif - endunless - - assign text_trim = trim | append: ' cap ' | append: descenders - assign shown_text_with_line_breaks = shown_text | newline_to_br - assign text_with_lines = shown_text_with_line_breaks | split: '
' - assign nudge = '-0.04em' -%} - -{% capture attributes %} - style=" - --font-family: var(--font-{{ block_settings.font | default: 'accent'}}--family); - --font-weight: var(--font-{{ block_settings.font | default: 'accent'}}--weight); - {% if block_settings.font == 'body' %} - --color: var(--color-foreground); - {% else %} - --color: var(--color-foreground-heading); - {% endif %} - --text-align: {{ block_settings.alignment | default: 'left' }}; - {% if block_settings.alignment == "left" %} - --margin-left-nudge: {{nudge}}; - {% elsif block_settings.alignment == "right" %} - --margin-right-nudge: {{nudge}}; - {% endif %} - --line-height: {{ block_settings.line_height | default: '1' }}; - --letter-spacing: {{ block_settings.letter_spacing | default: '-0.03em' }}; - --text-transform: {{ block_settings.case | default: 'none' }}; - --text-trim: {{text_trim}}; - " - {{ block.shopify_attributes }} -{% endcapture %} - -{% comment %} - If the jumbo text is not wrapped inside its own container, the overflow calculation does not always work correctly - (looks like some weird off-by-one error when comparing sizes). -{% endcomment %} -
- {% if text != blank %} - {{ text }} - {% else %} - {{ shown_text }} - - {%- assign char_index = 0 -%} - {%- for line in text_with_lines -%} - {%- if forloop.index > 1 -%} -
- {%- endif -%} - - {%- endfor -%} -
- {% endif %} - - -
- -{% stylesheet %} - .jumbo-text__container { - width: 100%; - } - - footer .jumbo-text__container { - pointer-events: none; - } - - jumbo-text { - display: block; - font-family: var(--font-family, inherit); - font-style: var(--font-style, normal); - color: var(--color, inherit); - font-weight: var(--font-weight, inherit); - letter-spacing: var(--letter-spacing, -0.02em); - line-height: var(--line-height, 1); - opacity: 0; - text-align: var(--text-align); - text-box: var(--text-trim, trim-end cap text); - text-transform: var(--text-transform, none); - transition: opacity 0.3s ease; - white-space: pre; - width: 100%; - will-change: font-size; - margin-left: var(--margin-left-nudge, 0); - margin-right: var(--margin-right-nudge, 0); - overflow: visible; - } - - jumbo-text.ready { - opacity: 1; - } - - jumbo-text[data-cap-text='true'] { - /* stylelint-disable-next-line plugin/no-unsupported-browser-features */ - text-box-edge: cap text; - } - - .jumbo-text-space { - display: inline-flex; - width: 0.5ch; - } - - :is(.jumbo-text-char, .jumbo-text-line) { - display: inline-flex; - } - - @media (prefers-reduced-motion: no-preference) { - /* Blur effect */ - [data-text-effect='blur'] { - filter: blur(20px); - opacity: 0.5; - scale: 1.05; - transition: filter 1.6s var(--animation-timing-fade-in), opacity 1.3s var(--animation-timing-fade-in), - scale 1.6s var(--animation-timing-fade-in); - } - - .jumbo-text-visible[data-text-effect='blur'] { - filter: blur(0); - opacity: 1; - scale: 1; - } - - /* Reveal effect */ - .ready[data-text-effect='reveal'], - .ready[data-text-effect='reveal'] .jumbo-text-line { - overflow: hidden; - } - - .ready[data-text-effect='reveal'] .jumbo-text-char { - transform: translateY(100%); - } - - .jumbo-text-visible[data-text-effect='reveal'] .jumbo-text-char { - transition: transform 0.5s var(--animation-timing-fade-in) calc(var(--line-index) * 0.05s); - transform: translateY(0); - } - - .jumbo-text-visible[data-text-effect='reveal'], - .jumbo-text-visible[data-text-effect='reveal'] .jumbo-text-line { - overflow: visible; - transition: overflow 0s linear 0.75s; - } - } -{% endstylesheet %} diff --git a/snippets/layout-panel-style.liquid b/snippets/layout-panel-style.liquid deleted file mode 100644 index c11f2a7ab..000000000 --- a/snippets/layout-panel-style.liquid +++ /dev/null @@ -1,33 +0,0 @@ -{%- liquid - comment - Intended for blocks and sections that provide values for all the referenced settings. - - Accepts: - settings: {block.settings || section.settings} - endcomment - - assign horizontal_alignment = settings.horizontal_alignment - - assign vertical_alignment = settings.vertical_alignment - if settings.align_baseline and vertical_alignment == 'flex-end' - assign vertical_alignment = 'last baseline' - endif - - unless settings.content_direction == 'row' - assign horizontal_alignment = settings.horizontal_alignment_flex_direction_column - assign vertical_alignment = settings.vertical_alignment_flex_direction_column - endunless - - assign vertical_alignment_mobile = vertical_alignment - - if settings.vertical_on_mobile and vertical_alignment == 'last baseline' - assign vertical_alignment_mobile = 'flex-end' - endif --%} - ---flex-direction: {{ settings.content_direction | default: 'column' }}; --flex-wrap: nowrap; --flex-wrap-mobile: wrap; - -{% render 'gap-style', value: settings.gap %} - ---horizontal-alignment: {{ horizontal_alignment }}; --vertical-alignment: {{ vertical_alignment }}; ---vertical-alignment-mobile: {{ vertical_alignment_mobile }}; diff --git a/snippets/link-featured-image.liquid b/snippets/link-featured-image.liquid deleted file mode 100644 index 22b44d70f..000000000 --- a/snippets/link-featured-image.liquid +++ /dev/null @@ -1,47 +0,0 @@ -{%- doc -%} - Renders the featured image for a menu item. - - @param {object} link - The link to render - @param {string} [class] - The class to apply to the image - @param {string} [sizes] - The sizes to apply to the image - - @example - {% render 'menu-featured-image', link: link %} -{%- enddoc -%} - -{% assign image_sizes = sizes | default: 'auto' %} - -{% if link.type == 'collection_link' %} - {% if link.object.featured_image %} - {{ - link.object.featured_image - | image_url: width: 800 - | image_tag: loading: 'lazy', class: class, sizes: image_sizes - }} - {% elsif link.object.products.size > 0 %} - {% assign product_object = link.object.products | where: 'featured_image' | first %} - {% if product_object.featured_image %} - {{ - product_object.featured_image - | image_url: width: 800 - | image_tag: loading: 'lazy', class: class, sizes: image_sizes - }} - {% endif %} - {% endif %} -{% elsif link.type == 'collections_link' %} - {% assign collection_object = collections | where: 'featured_image' | first %} - {% if collection_object.featured_image %} - {{ - collection_object.featured_image - | image_url: width: 800 - | image_tag: loading: 'lazy', class: class, sizes: image_sizes - }} - {% endif %} -{% elsif link.type == 'catalog_link' %} - {% assign product_object = collections.all.products | where: 'featured_image' | first %} - {{ - product_object.featured_image - | image_url: width: 800 - | image_tag: loading: 'lazy', class: class, sizes: image_sizes - }} -{% endif %} diff --git a/snippets/list-filter.liquid b/snippets/list-filter.liquid deleted file mode 100644 index fa65612f7..000000000 --- a/snippets/list-filter.liquid +++ /dev/null @@ -1,783 +0,0 @@ -{%- doc -%} - Renders a list or swatch filter. - - @param {object} filter - The filter to render - @param {string} filter_style - The filter style ('horizontal' | 'vertical') - @param {number} active_value_count - The number of active values - @param {number} sectionId - The section ID - @param {boolean} [autofocus] - Whether to autofocus the filter - @param {boolean} [should_render_clear] - Whether to render the clear button - @param {boolean} [show_swatch_label] - Whether to show the swatch label - @param {boolean} [in_drawer] - Whether the filter is in a drawer -{%- enddoc -%} - -{% liquid - assign is_swatch = false - assign swatch_index = filter.values | find_index: 'swatch' - - if swatch_index != null - assign is_swatch = true - endif - - assign is_image = false - if filter.presentation == 'image' - assign is_image = true - endif -%} - - -
- - {{ filter.label }} - -
- {% if is_swatch %} - - - {%- liquid - if active_value_count > 3 - echo active_value_count - elsif active_value_count > 0 and active_value_count <= 3 - for value in filter.active_values - render 'swatch', swatch: value.swatch, mode: 'filter' - endfor - endif - -%} - - - {% else %} - - 1 %} - class="bubble facets__bubble" - {% endif %} - hide-when-empty - ref="facetStatus" - > - {%- liquid - if active_value_count == 1 - echo filter.active_values[0].label - elsif active_value_count > 1 - echo active_value_count - endif - -%} - - - {% endif %} - - {{- 'icon-caret.svg' | inline_asset_content -}} - -
-
- - - {% liquid - assign has_active_values = false - assign inital_visible_values = 10 - if is_swatch - assign inital_visible_values = 22 - endif - if is_image - assign inital_visible_values = 6 - endif - assign max_visible_values = inital_visible_values | plus: 1 - assign render_show_more = false - assign should_render_for_swatch = is_swatch - if is_swatch and show_swatch_label - assign should_render_for_swatch = false - endif - if filter.values.size > max_visible_values and should_render_for_swatch == false - assign render_show_more = true - endif - %} - {% liquid - if render_show_more - if filter_style == 'horizontal' - echo '' - else - echo '' - endif - endif - assign should_use_pills = true - - for value in filter.values - if value.label.size > 3 - assign should_use_pills = false - break - endif - endfor - - if filter.type == 'boolean' - assign should_use_pills = false - endif - %} - -
- {% liquid - if is_swatch - assign swatch_columns = filter.values.size - - if swatch_columns > 4 - assign swatch_columns = 4 - - # Balance the number of columns based on the number of values, i.e. try to avoid one or two items in - # the last row if the number of values is (almost) divisible by 3. - assign mod4 = filter.values.size | modulo: 4 - assign mod3 = filter.values.size | modulo: 3 - if mod4 != 0 and mod4 != 3 - if mod3 == 0 or mod3 == 2 - assign swatch_columns = 3 - endif - endif - endif - endif - - if is_image - assign image_columns = 3 - if filter.values.size < 3 - assign image_columns = filter.values.size - endif - endif - %} -
    - {%- for value in filter.values -%} - {% liquid - assign input_id = 'Filter-' | append: filter.param_name | escape | append: '-' | append: forloop.index | replace: '.', '-' | append: '-' | append: filter_style | append: '-' | append: in_drawer - assign is_disabled = false - if value.count == 0 and value.active == false - assign is_disabled = true - endif - assign hidden_class = null - if forloop.index > inital_visible_values and render_show_more - assign hidden_class = 'hidden' - if filter_style == 'horizontal' - assign hidden_class = 'mobile:hidden' - endif - endif - %} -
  • - {% if value.active %} - {% assign has_active_values = true %} - {% endif %} - {% if is_image %} -
    -
    - {% if value.image %} - {{ value.image | image_url: width: 300 | image_tag: alt: value.alt }} - {% endif %} - {% if is_disabled %} - - {% endif %} -
    - - -
    - {% elsif is_swatch %} -
    - -
    - {% else %} - {% if should_use_pills %} -
    - - -
    - {% else %} - {% render 'checkbox', - name: value.param_name, - value: value.value, - label: value.label, - checked: value.active, - id: input_id, - disabled: is_disabled, - inputRef: 'facetInputs[]', - events: 'on:pointerenter="/prefetchPage" on:pointerleave="/cancelPrefetchPage"', - autofocus: autofocus - %} - {% endif %} - {% endif %} -
  • - {%- endfor -%} -
-
- {% if render_show_more %} - - {% echo '
' %} - {% endif %} - - {% if should_render_clear %} - -
- -
-
- {% endif %} -
-
-
-
- -{% stylesheet %} - .facets input:checked + label { - font-weight: 500; - } - - .facets .checkbox .icon-checkmark { - transition: border-color 0.2s ease, background-color 0.2s ease; - } - - .facets .checkbox:not(:has(.checkbox__input:disabled)):hover .icon-checkmark { - border-color: rgb(var(--color-foreground-rgb) / var(--opacity-40-60)); - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - } - - .facets .checkbox:has(.checkbox__input:checked):not(:has(.checkbox__input:disabled)):hover .icon-checkmark { - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-85)); - } - - .facets .checkbox:not(:has(.checkbox__input:disabled)):hover .checkbox__label-text { - color: rgb(var(--color-foreground-rgb) / var(--opacity-90)); - } - - .facets .checkbox .checkbox__label-text { - transition: color 0.2s ease, font-weight 0.2s ease; - } - - /* Pill style */ - .facets__pill-label { - --pill-label-padding-inline: var(--padding-xs); - --pill-label-border-radius: var(--style-border-radius-md); - --pill-label-border-width: var(--variant-picker-button-border-width); - --pill-label-height: var(--button-size-md); - --pill-label-focus-outline-color: var(--color-foreground); - --pill-label-color: var(--color-foreground); - --pill-label-color-rgb: var(--color-foreground-rgb); - --pill-label-background-color: var(--color-background); - --pill-label-background-color-rgb: var(--color-background-rgb); - --pill-label-border-opacity: var(--facets-low-opacity); - - display: inline-flex; - position: relative; - align-items: center; - justify-content: center; - box-shadow: inset 0 0 0 var(--pill-label-border-width) rgb(var(--pill-label-color-rgb) / var(--opacity-10-25)); - border-radius: var(--pill-label-border-radius); - height: var(--pill-label-height); - width: 100%; - padding-inline: var(--pill-label-padding-inline); - color: rgb(var(--pill-label-color-rgb)); - background-color: rgb(var(--pill-label-background-color-rgb)); - cursor: pointer; - transition: color var(--animation-speed) var(--animation-easing), - background-color var(--animation-speed) var(--animation-easing); - outline-color: var(--pill-label-focus-outline-color); - - &:hover { - --pill-label-border-opacity: 100%; - } - } - - .facets__pill-input { - &:checked + .facets__pill-label { - --pill-label-color-rgb: var(--color-background-rgb); - --pill-label-background-color-rgb: var(--color-foreground-rgb); - --pill-label-border-opacity: 0; - - font-weight: 500; - } - - &:disabled + .facets__pill-label { - opacity: var(--disabled-opacity); - cursor: not-allowed; - - &:hover { - --pill-label-border-opacity: var(--facets-low-opacity); - } - } - } - - .facets__status-wrapper { - display: flex; - align-items: center; - } - - .facets--drawer .facets__status-wrapper { - @media screen and (max-width: 749px) { - gap: var(--gap-3xs); - } - } - - .facets--vertical .facets__status-wrapper { - gap: var(--gap-xs); - } - - .facets--horizontal .facets__status-wrapper { - gap: 0; - } - - .facets__pill-input:disabled + .facets__pill-label svg { - position: absolute; - top: 0; - left: 0; - border-radius: var(--style-border-radius-md); - } - - .facets__pill-label svg line { - stroke-width: 1.5px; - stroke: rgb(var(--color-foreground-rgb) / var(--facets-low-opacity)); - } - - .facets__pill-wrapper { - position: relative; - } - - .facets__pill-input { - position: absolute; - inset: 0; - margin: 0; - opacity: 0; - cursor: pointer; - } - - /* Swatches */ - .facets__status--swatches { - display: none; - } - - .facets__swatch-wrapper { - display: flex; - } - - .facets__inputs-list--swatches .variant-option__button-label { - --color-variant-text: var(--color-foreground); - } - - .facets__inputs-list--swatches { - --variant-picker-swatch-width: 32px; - --variant-picker-swatch-height: 32px; - - @media screen and (min-width: 750px) { - --variant-picker-swatch-width: 26px; - --variant-picker-swatch-height: 26px; - } - } - - .facets--vertical .facets__inputs-wrapper .facets__inputs-list--swatches-grid { - gap: var(--gap-sm); - } - - .facets--vertical .facets__inputs-list--swatches .facets__inputs-list-item { - display: flex; - } - - .facets__inputs-wrapper .facets__inputs-list--swatches-grid { - --columns: 2; - - display: grid; - grid-template-columns: repeat(var(--columns), 1fr); - } - - .facets__inputs-wrapper .facets__inputs-list--swatches-grid .variant-option--swatches { - cursor: pointer; - overflow: visible; - - &.variant-option--swatches-disabled, - &:has(input:disabled) { - cursor: not-allowed; - } - } - - .facets__inputs-wrapper .facets__inputs-list--swatches-grid label { - cursor: pointer; - word-break: break-word; - white-space: normal; - - .variant-option--swatches-disabled &, - .variant-option--swatches:has(input:disabled) & { - cursor: not-allowed; - } - } - - .facets__inputs-wrapper .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch { - align-items: center; - overflow: visible; - justify-content: flex-start; - display: flex; - width: 100%; - flex-basis: unset; - gap: var(--gap-sm); - } - - .facets__inputs-wrapper .facets__inputs-list--swatches-grid .variant-option__button-label:has(:checked) { - color: rgb(var(--color-foreground-rgb)); - background-color: rgb(var(--color-background-rgb)); - font-weight: 500; - transition: font-weight 0.2s ease; - } - - .facets .variant-option--swatches { - --options-border-radius: var(--variant-picker-swatch-radius); - - width: auto; - } - - .facets--horizontal .facets__status--swatches { - @media screen and (min-width: 750px) { - display: flex; - } - } - - .facets--horizontal .sorting-filter .facets__status { - @media screen and (min-width: 750px) { - display: none; - } - } - - .facets__status--swatches .swatch { - width: calc(var(--variant-picker-swatch-width) / 1.5); - height: calc(var(--variant-picker-swatch-height) / 1.5); - } - - .facets__status--swatches .swatch + .swatch { - margin-left: calc(var(--variant-picker-swatch-width) / -3); - outline: 1px solid rgb(var(--color-background-rgb)); - } - - .variant-option--images { - position: relative; - } - - .variant-option--images { - --image-facet-border-width: var(--variant-picker-button-border-width); - --image-facet-border-opacity: var(--facets-low-opacity); - --image-facet-border-radius: var(--style-border-radius-xs); - - border-radius: var(--image-facet-border-radius); - box-shadow: inset 0 0 0 var(--image-facet-border-width) - rgb(var(--color-foreground-rgb) / var(--image-facet-border-opacity)); - - &:hover:not(:has(input:disabled)), - &:has(input:checked) { - --image-facet-border-opacity: 100%; - } - - &:has(input:checked) { - font-weight: 500; - transition: font-weight 0.2s ease; - } - - &:has(input:checked):hover { - --image-facet-border-width: calc(var(--variant-picker-button-border-width) + 0.5px); - } - - &:has(input:focus-visible) { - outline: var(--focus-outline-width) solid currentcolor; - outline-offset: var(--focus-outline-offset); - } - - &:has(input:disabled), - &:has(input:disabled):hover { - --image-facet-border-opacity: 0; - - opacity: var(--disabled-opacity); - cursor: not-allowed; - - img { - opacity: var(--disabled-opacity); - } - - input, - label, - .facets__image-label { - cursor: not-allowed; - } - - .facets__image-wrapper { - border: var(--style-border-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-30)); - border-radius: var(--image-facet-border-radius); - } - } - } - - .facets__inputs-wrapper .facets__inputs-list--images { - display: grid; - grid-template-columns: repeat(var(--image-columns), 125px); - gap: var(--gap-sm); - } - - .facets--drawer .facets__inputs-wrapper .facets__inputs-list--images { - grid-template-columns: repeat(3, 1fr); - - @media screen and (min-width: 750px) { - grid-template-columns: repeat(4, 1fr); - } - } - - .facets--vertical .facets__inputs-wrapper .facets__inputs-list--images { - grid-template-columns: repeat(2, 1fr); - } - - .facets--drawer .facets__inputs-list--images { - padding-top: var(--padding-xs); - } - - .facets__image-wrapper { - aspect-ratio: 1/1; - width: 100%; - padding: var(--padding-xs); - position: relative; - overflow: hidden; - } - - .facets__image-wrapper img { - height: 100%; - width: 100%; - object-fit: contain; - border-radius: calc(var(--border-radius) / 2); - } - - /* Position disabled-svg */ - .variant-option--images svg { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - width: 100%; - height: 100%; - stroke-width: var(--border-width); - stroke: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - } - - /* Position label text and handle overflow */ - .facets__inputs-list-item, - .variant-option--images { - min-width: 0; - } - - .facets__image-label { - width: 100%; - text-align: center; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - padding-block-end: var(--padding-xs); - cursor: pointer; - - .variant-option--images:has(input:disabled) & { - cursor: not-allowed; - } - } - - .facets__inputs-list--swatches .variant-option__button-label:hover:not(:has(input:disabled)) { - font-weight: 500; - } - - .variant-option--images:not(:has(input:disabled)) .facets__image-label:hover { - font-weight: 500; - } -{% endstylesheet %} diff --git a/snippets/localization-form.liquid b/snippets/localization-form.liquid deleted file mode 100644 index 8e95af233..000000000 --- a/snippets/localization-form.liquid +++ /dev/null @@ -1,819 +0,0 @@ -{%- doc -%} - Renders either a country selector, language selector, or both. - - @param {boolean} show_country - Whether to show the country selector - @param {boolean} show_language - Whether to show the language selector - @param {string} block_id - The block ID - @param {string} [form_style] - The style tag string to be applied to the form - @param {string} [localization_style] - The style of the localization form - - @example - {% render 'localization-form', show_country: true, show_language: true, block_id: block.id %} -{%- enddoc -%} - -{%- liquid - comment - From Tyler in July: Noting here that it might make sense for us to just be able to get localization.available_currencies and localization.popular_countries instead of needing this esoteric logic. - endcomment - assign currencies = localization.available_countries | map: 'currency' | map: 'iso_code' | uniq - assign popular_countries = localization.available_countries | where: 'popular?' | sort: 'name' - - assign show_country_filter = false - if localization.available_countries.size > 9 - assign show_country_filter = true - endif - - assign show_popular_countries = false - if localization.available_countries.size > 9 and popular_countries.size > 1 - assign show_popular_countries = true - endif - - assign show_currencies = false - if currencies.size > 1 - assign show_currencies = true - endif - - assign aliases_us = 'us,usa,america,united states of america' - assign aliases_uk = 'uk,gb,great britain' -%} - - {% assign localization_label = 'content.localization_region_and_language' | t %} - - {%- form 'localization', - id: 'LocalizationForm', - class: 'localization-form', - ref: 'form', - return_to: back, - aria-label: localization_label - -%} - {% if show_country %} - {% if show_country_filter %} -
-
-
- - {{ 'icon-search.svg' | inline_asset_content }} - -
- - - -
-
- {% endif %} -
-

- Country/Region -

- {% if show_country_filter %} -
- {% endif %} -
- {% if show_popular_countries %} - - {% endif %} -
    - - {%- for country in localization.available_countries -%} - {% liquid - assign aliases = '' - case country.iso_code - when 'US' - assign aliases = aliases_us - when 'GB' - assign aliases = aliases_uk - endcase - %} -
  • - - {{- 'icon-checkmark.svg' | inline_asset_content -}} - - {{- country.name }} - -
  • - {%- endfor -%} -
-
-
- -
- {% endif %} - - {% if show_language %} -
-

- {{ 'content.language' | t }} -

- {% if show_country == true %} - {{ 'content.language' | t }} - {% endif %} - - - {{- 'icon-caret.svg' | inline_asset_content -}} - -
- {% endif %} - {%- endform -%} -
- -{% stylesheet %} - /* Localization */ - localization-form-component { - display: flex; - width: var(--width, auto); - - @media screen and (min-width: 750px) { - position: relative; - } - } - - localization-form-component[data-show-filter='false'] .country-selector-form__wrapper { - padding-block-start: var(--padding-xs); - } - - .localization-form { - width: 100%; - } - - localization-form-component .button:is(:not(.country-filter__reset-button)) { - --button-color: var(--color-primary); - --button-background-color: var(--language-button-background-color, var(--color-background)); - --button-border-color: var(--language-button-border-color, var(--color-border)); - - text-decoration-color: transparent; - text-decoration-thickness: 0.075em; - text-underline-offset: 0.125em; - transition: text-decoration-color var(--animation-speed) var(--animation-easing); - } - - localization-form-component .button:is(:not(.country-filter__reset-button)):hover, - .localization-form__list-item:hover, - .localization-form__list-item:focus { - --button-color: var(--color-primary-hover); - - background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8)); - } - - .localization-form__list-item[aria-current='true'] { - --button-color: var(--color-primary-active); - - background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-10)); - } - - .localization-form__list-item-disabled { - pointer-events: none; - } - - .localization-form__list-item:focus-visible { - outline: none; - } - - localization-form-component .localization-selector { - display: flex; - align-items: center; - gap: var(--margin-2xs); - } - - localization-form-component .country-filter__search-icon { - left: 8px; - right: auto; - color: var(--color-foreground-muted); - pointer-events: none; - } - - .country-filter__search-icon .svg-wrapper svg { - width: var(--icon-size-sm); - height: var(--icon-size-sm); - } - - .disclosure { - width: 100%; - } - - .dropdown-localization__button { - display: flex; - position: relative; - align-items: center; - gap: 4px; - font-family: var(--menu-localization-font); - font-size: var(--menu-localization-font-size); - font-weight: var(--menu-top-level-font-weight); - padding-inline: var(--padding-2xs); - margin-inline: calc(-1 * var(--padding-2xs)); - } - - .dropdown-localization__button .icon-caret { - height: var(--icon-size-xs); - width: var(--icon-size-xs); - right: var(--margin-xs); - top: calc(50% - var(--padding-2xs)); - flex-shrink: 0; - transition: transform var(--animation-speed) var(--animation-easing); - } - - .drawer-localization__button .icon-flag, - .dropdown-localization__button .icon-flag { - width: var(--menu-localization-font-size, var(--icon-size-sm)); - height: var(--menu-localization-font-size, var(--icon-size-sm)); - clip-path: circle(50%); /* stylelint-disable-line */ - background-position: center; - background-size: cover; - margin-inline-end: 4px; - position: relative; - } - - .icon-flag::after { - content: ''; - position: absolute; - inset: 0; - box-shadow: inset 0 0 var(--size-shadow) var(--color-shadow); - border-radius: 50%; - } - - .dropdown-localization__button[aria-expanded='true'] .icon-caret svg { - transform: rotate(180deg); - } - - .dropdown-localization__button, - .dropdown-localization__button:hover { - box-shadow: none; - background-color: transparent; - border-color: transparent; - color: var(--color-foreground); - } - - .localization-form__list { - position: relative; - width: 100%; - padding-block: 0 var(--padding-xs); - font-size: var(--font-size-lg); - scroll-padding: var(--padding-xs) 0; - overflow-y: auto; - white-space: nowrap; - - /* Hide scrollbar which would cause extra right padding in Safari */ - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } - } - - dropdown-localization-component .localization-form__list { - max-height: 20.5rem; - } - - .localization-wrapper { - position: fixed; - z-index: var(--layer-raised); - border-radius: var(--style-border-radius-popover); - transition-property: display, opacity, translate; - transition-duration: 0.3s; - transition-timing-function: var(--ease-out-quad); - transition-behavior: allow-discrete; - translate: 0 20px; - opacity: 0; - } - - .localization-wrapper:not([hidden]) { - translate: 0 0; - opacity: 1; - } - - @starting-style { - .localization-wrapper:not([hidden]) { - translate: 0 20px; - opacity: 0; - } - } - - .localization-form__list-item:not([hidden]) { - margin-block-end: var(--margin-3xs); - display: flex; - gap: var(--margin-sm); - padding: 8px; - border-radius: 8px; - line-height: var(--font-line-height-md); - align-items: center; - text-align: start; - cursor: pointer; - transition: background-color var(--animation-speed) var(--animation-easing); - - .country { - flex: 1; - color: var(--color-foreground); - } - - &:hover { - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8)); - } - - &[aria-current='true'] { - .country { - font-weight: 500; - } - } - } - - .localization-form__list-item#no-results-message { - grid-template-columns: 1fr; - text-align: center; - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .is-searching .localization-form__list-item .country { - color: rgb(var(--color-foreground-rgb) / var(--opacity-80)); - } - - .localization-form__list-item .country mark { - font-weight: 500; - background: none; - color: var(--color-foreground); - } - - .country-filter { - position: relative; - padding: var(--padding-xs); - border-bottom: var(--style-border-width) solid transparent; - transition: border-color var(--animation-values); - } - - .country-filter.is-scrolled { - border-color: var(--color-border); - } - - .drawer-localization .country-filter { - padding-block: 8px; - } - - dropdown-localization-component .country-filter { - position: relative; - padding: 8px; - } - - .country-selector-form__wrapper { - overflow-y: auto; - max-height: 100%; - flex-grow: 1; - } - - .language-selector { - display: flex; - gap: var(--gap-xs); - padding: var(--padding-md) var(--padding-lg); - position: relative; - align-items: center; - justify-content: space-between; - width: 100%; - } - - .language-selector__label { - flex-shrink: 0; - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .localization-form__select { - border: none; - color: var(--color-foreground); - appearance: none; - background-color: var(--color-input-background); - padding-block: var(--padding-3xs); - padding-inline: var(--padding-xs) calc(var(--icon-size-xs) + var(--padding-xs)); - text-align: right; - cursor: pointer; - max-width: 40vw; - text-overflow: ellipsis; - - &:focus-visible { - outline: var(--focus-outline-width) solid currentcolor; - } - - &:focus { - outline: none; - } - } - - #header-component[transparent] localization-form-component .localization-form .localization-form__select { - background-color: transparent; - } - - .localization-form__select option { - background-color: var(--color-input-background); - color: var(--color-input-text); - } - - dropdown-localization-component .localization-form__select:hover { - background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8)); - } - - .language-selector .svg-wrapper.icon-caret { - width: var(--icon-size-xs); - height: var(--icon-size-xs); - position: absolute; - right: 12px; - top: 50%; - transform: translateY(-50%); - display: flex; - align-items: center; - } - - .language-selector--collapse-space { - padding-inline-end: var(--padding-2xs); - } - - .language-selector--collapse-space .localization-form__select { - padding-inline-end: var(--icon-size-xs); - } - - .language-selector--collapse-space .svg-wrapper.icon-caret { - right: 0; - } - - .localization-form .icon-checkmark { - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - .localization-form .svg-wrapper.icon-checkmark { - visibility: hidden; - } - - .localization-form__list-item[aria-current='true'] .svg-wrapper.icon-checkmark { - visibility: visible; - } - - .country-filter__input { - width: 100%; - height: 44px; - font-size: var(--font-size-lg); - padding: var(--padding-md) var(--padding-lg) var(--padding-md) calc(var(--margin-md) + var(--padding-xl)); - border: 1px solid var(--color-foreground); - color: var(--color-input-text); - background-color: var(--color-input-background); - outline-offset: -1px; - - @media screen and (min-width: 750px) { - height: 36px; - } - } - - .country-filter__input::placeholder { - color: inherit; - } - - .country-filter .field { - position: relative; - } - - .country-filter .field__label { - font-size: var(--font-size-lg); - left: var(--margin-2xl); - top: var(--margin-xl); - pointer-events: none; - position: absolute; - } - - .country-filter__input:focus ~ .field__label, - .country-filter__input:not(:placeholder-shown) ~ .field__label, - .country-filter__input:-webkit-autofill ~ .field__label { - font-size: var(--font-size-xs); - top: var(--margin-xs); - } - - .country-filter .field__button:not([hidden]) { - display: flex; - height: fit-content; - position: absolute; - padding: 0; - right: 8px; - top: 50%; - transform: translateY(-50%); - align-items: center; - background-color: transparent; - color: var(--color-input-text); - border: 0; - } - - input[type='search']::-webkit-search-cancel-button { - appearance: none; - } - - .country-selector__close-button { - display: none; - } - - .drawer-localization .drawer-localization__button { - display: flex; - padding: 0; - position: relative; - text-decoration: none; - height: 44px; - - &:hover { - color: var(--color-foreground); - } - } - - .drawer-localization .drawer-localization__button .icon-caret { - width: fit-content; - height: fit-content; - margin: 0; - padding: var(--padding-xl) var(--padding-xl) var(--padding-xl) var(--padding-xs); - } - - dropdown-localization-component { - position: relative; - background-color: transparent; - } - - dropdown-localization-component .country-filter__input { - border: none; - } - - dropdown-localization-component .localization-form__list-item { - margin-inline: 8px; - } - - dropdown-localization-component .localization-wrapper { - box-shadow: var(--shadow-popover); - border: var(--style-border-popover); - background-color: var(--color-background); - max-height: 27.5rem; - position: absolute; - top: calc(100% + 10px); - z-index: calc(var(--layer-header-menu) + 1); - } - - dropdown-localization-component .localization-wrapper.right-bound { - right: 0; - left: unset; - } - - dropdown-localization-component .localization-wrapper.left-bound { - left: -8px; - right: unset; - } - - /* Additional specificity due to dropdown-localization-component getting a low score */ - dropdown-localization-component .language-selector.language-selector { - padding: 10px 8px 10px 16px; - } - - dropdown-localization-component .localization-form__currency { - width: max-content; - opacity: 0; - visibility: hidden; - transition: none; - } - - dropdown-localization-component - :is( - .localization-form__list-item:hover, - .localization-form__list-item[aria-selected='true'], - .localization-form__list-item[aria-current='true'] - ) - .localization-form__currency { - opacity: 1; - color: var(--color-foreground-muted); - transition: opacity var(--animation-speed-slow) var(--animation-easing); - visibility: visible; - } - - .dropdown-localization .language-selector:where(:not(.top-shadow)) { - font-weight: var(--menu-top-level-font-weight); - } - - .dropdown-localization:not(dropdown-localization-component) .language-selector, - .menu-drawer__localization:not(drawer-localization-component) .language-selector { - font-family: var(--menu-localization-font); - font-size: var(--menu-localization-font-size); - } - - .menu-drawer__localization .language-selector.h5 { - padding-inline-start: 0; - } - - .header__column .localization-form__select { - background-color: var(--header-bg-color); - } - - .drawer-localization { - display: contents; - color: var(--color-foreground); - } - - .drawer-localization localization-form-component { - position: relative; - height: 100%; - } - - .drawer-localization .mobile-localization, - .drawer-localization .drawer-localization__button--label { - display: flex; - gap: var(--gap-xs); - margin-block: 0; - align-items: center; - } - - .drawer-localization__button--label.h6 { - font-family: var(--menu-localization-font); - } - - .drawer-localization img { - width: var(--icon-size-sm); - } - - .drawer-localization .localization-button__icon, - .drawer-localization .localization-button__icon svg { - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - .drawer-localization summary.is-disabled { - pointer-events: none; - } - - .drawer-localization .localization-wrapper { - width: 100%; - } - - .drawer-localization .localization-form { - display: flex; - flex-direction: column; - position: absolute; - inset: 0; - width: 100%; - height: 100%; - } - - .drawer-localization .localization-form > * { - padding-inline: var(--padding-xl); - } - - .drawer-localization .language-selector .svg-wrapper.icon-caret { - transform: translateY(-50%) rotate(0deg); - } - - .drawer-localization .language-selector .svg-wrapper.icon-caret svg { - transform: none; - } -{% endstylesheet %} diff --git a/snippets/media.liquid b/snippets/media.liquid deleted file mode 100644 index 76036c8d6..000000000 --- a/snippets/media.liquid +++ /dev/null @@ -1,117 +0,0 @@ -{%- doc -%} - Renders media block contents (used in _media and _media-without-appearance blocks) - - @param {string} section_id - The section ID - @param {object} [block] - The block object - @param {boolean} [unset_image_tag] - if true, ignores the image focal point in the image -{%- enddoc -%} - -{% liquid - assign block_settings = block.settings - assign show_image = false - assign show_video = false - - if block_settings.media_type == 'image' - assign show_image = true - endif - - if block_settings.media_type == 'video' - assign show_video = true - endif -%} - -
- {%- if show_image -%} - {% capture image_tag %} - {% if block_settings.image != blank %} - {% render 'image', - image: block_settings.image, - class: 'media-block__media border-style', - unset_image_tag: unset_image_tag - %} - {% else %} -
- {{ 'detailed-apparel-1' | placeholder_svg_tag: 'hero__image' }} -
- {% endif %} - {% endcapture %} - - {% if block_settings.link != blank %} - - {{ image_tag }} - - {% else %} - {{ image_tag }} - {% endif %} - {%- elsif show_video -%} - {% render 'video', - video: block_settings.video, - video_autoplay: block_settings.video_autoplay, - video_loop: block_settings.video_loop, - video_class: 'media-block__media media-block__media--video border-style', - section_id: section_id - %} - {%- else -%} -
- {{ 'hero-apparel-3' | placeholder_svg_tag }} -
- {%- endif -%} -
- -{% stylesheet %} - .media-block { - overflow: hidden; - position: relative; - - @media screen and (min-width: 750px) { - min-height: var(--media-height); - } - } - - .media-block__media { - height: var(--media-height-mobile, auto); - object-fit: var(--image-position, 'cover'); - object-position: center center; - width: 100%; - - @media screen and (min-width: 750px) { - height: 100%; - position: absolute; - } - } - - deferred-media[class].media-block__media - :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) { - object-fit: var(--video-position, 'cover'); - } - - /* This is to support corner radius on video and align the video to the center of the block */ - .media-block__media--video { - display: flex; - align-items: center; - justify-content: center; - - @media screen and (max-width: 749px) { - --media-height-mobile: auto; - } - } -{% endstylesheet %} diff --git a/snippets/mega-menu-list.liquid b/snippets/mega-menu-list.liquid deleted file mode 100644 index 78984f49e..000000000 --- a/snippets/mega-menu-list.liquid +++ /dev/null @@ -1,348 +0,0 @@ -{%- doc -%} - Renders mega menu list markup and optional featured content. - - @param {object} parent_link - The linklist to render. - @param {string} id - Unique ID to assign to the `
    ` element. - @param {number} [grid_columns_count] - Number of grid columns for the mega menu. - @param {number} [grid_columns_count_tablet] - Number of grid columns for the mega menu on tablets. - @param {number} [grid_columns_count_collection_images] - Number of grid columns when `menu_content_type` is 'collection_images'. - @param {string} [menu_content_type] - Type of content: 'featured_products', 'featured_collections', 'collection_images', or 'text'. - @param {number} [content_aspect_ratio] - Aspect ratio for content images. - @param {number} [image_border_radius] - Border radius for content images. - @param {object} [section] - The section object. - - @example - {% render 'mega-menu-list', parent_link: link, id: 'MegaMenuList-1', grid_columns_count: 6, menu_content_type: 'featured_products' %} -{%- enddoc -%} - -{% liquid - comment - open_column_span tracks when a vertical column in the mega menu is open. Links will be stacked - in the column until the code closes the column span. - endcomment - assign open_column_span = false - assign column_count = 0 - assign links_before_wrap = 10 - assign max_menu_columns = grid_columns_count | default: 6 - assign max_menu_columns_tablet = grid_columns_count_tablet | default: 4 - - ## - # We only eager load heavy elements of the page when rendering this template - # through the Section Rendering API. - # - # This keeps the initial render lightweight, minimizing the impact on TTFB. - # The second render then refreshes the page with additional content. - # - # At the moment, we check if the Section Rendering API is being used by - # checking if section.index is blank. - assign eager_loading = false - if section.index == blank - assign eager_loading = true - endif - - if menu_content_type == 'collection_images' - assign collection_links = parent_link.links | where: 'type', 'collection_link' - assign catalog_links = parent_link.links | where: 'type', 'catalog_link' - assign collection_list_links = parent_link.links | where: 'type', 'collections_link' - if collection_links.size == 0 and catalog_links.size == 0 and collection_list_links.size == 0 - assign menu_content_type = 'text' - endif - endif - - if menu_content_type == 'featured_collections' - if parent_link.type == 'collection_link' - assign collection_handles = parent_link.object.handle | append: ',' - elsif parent_link.type == 'catalog_link' or parent_link.type == 'collections_link' - assign collection_handles = 'all' | append: ',' - endif - assign collection_links = parent_link.links | where: 'type', 'collection_link' - for collection_link in collection_links - assign collection_handles = collection_handles | append: collection_link.object.handle | append: ',' - endfor - endif - - if menu_content_type == 'featured_products' - if parent_link.type == 'collection_link' - assign collection_object = parent_link.object - elsif parent_link.type == 'catalog_link' or parent_link.type == 'collections_link' - assign collection_object = collections.all - else - assign menu_content_type = 'text' - endif - endif -%} - - -{% liquid - # decide how many grid columns are needed for the menu list, and how many columns are needed for the featured content - # prioritize a minimum of 1 featured_collection (2 columns), and minimum 2 featured_products (2 columns) - assign min_products = 2 - assign max_products = 3 - assign min_products_tablet = 1 - assign max_products_tablet = 3 - assign min_collections = 1 - - if menu_content_type == 'featured_products' - # desktop breakpoint - assign temp_column_count = column_count | plus: min_products - - if temp_column_count > max_menu_columns - assign max_product_columns = 2 - else - assign max_product_columns = max_menu_columns | minus: column_count | at_most: max_products - endif - - if eager_loading - assign max_product_columns = max_product_columns | at_most: collection_object.products_count - else - assign max_product_columns = 0 - endif - - assign max_featured_products = max_product_columns - assign max_menu_columns = max_menu_columns | minus: max_product_columns - - # tablet breakpoint - assign temp_column_count = column_count | plus: min_products_tablet - - if temp_column_count > max_menu_columns_tablet - assign max_product_columns_tablet = 1 - else - assign max_product_columns_tablet = max_menu_columns_tablet | minus: column_count | at_most: max_products_tablet - endif - - assign max_product_columns_tablet = max_product_columns_tablet | at_most: max_product_columns - - assign max_featured_products_tablet = max_product_columns_tablet - assign max_menu_columns_tablet = max_menu_columns_tablet | minus: max_product_columns_tablet - endif - - if menu_content_type == 'featured_collections' - # desktop breakpoint - assign min_featured_collection_columns = min_collections | times: 2 - assign temp_column_count = column_count | plus: min_featured_collection_columns - - if temp_column_count > max_menu_columns - assign max_collection_columns = 2 - else - assign max_collection_columns = max_menu_columns | minus: column_count - endif - - assign max_featured_collections = max_collection_columns | divided_by: 2 | floor - assign max_menu_columns = max_menu_columns | minus: max_collection_columns - - # tablet breakpoint - assign max_collection_columns_tablet = 2 - assign max_featured_collections_tablet = 1 - assign max_menu_columns_tablet = max_menu_columns_tablet | minus: max_collection_columns_tablet - endif -%} - -{% style %} - [data-menu-grid-id="{{ id }}"] { - {% if menu_content_type == 'collection_images' and parent_link.links.size < 5 %} - --menu-columns-desktop: {{ grid_columns_count_collection_images }}; - --menu-columns-tablet: {{ grid_columns_count_tablet }}; - {% else %} - --menu-columns-desktop: {{ grid_columns_count }}; - --menu-columns-tablet: {{ grid_columns_count_tablet }}; - {% endif %} - } - - [data-menu-list-id="{{ id }}"] { - {% if menu_content_type == 'collection_images' and parent_link.links.size < 5 %} - --menu-columns-desktop: {{ grid_columns_count_collection_images }}; - --menu-columns-tablet: {{ max_menu_columns_tablet }}; - {% else %} - --menu-columns-desktop: {{ max_menu_columns }}; - --menu-columns-tablet: {{ max_menu_columns_tablet }}; - {% endif %} - } -{% endstyle %} - -{% case menu_content_type %} - {% when 'featured_products' %} - {%- capture image_sizes -%} - {%- render 'util-mega-menu-img-sizes-attr', - menu_content_type: 'featured_products', - settings: settings, - grid_columns: grid_columns_count, - grid_columns_tablet: grid_columns_count_tablet - -%} - {%- endcapture -%} - - -
      - {% if eager_loading %} - {% paginate collection_object.products by max_featured_products %} - {% for item in collection_object.products %} - - {% endfor %} - {% endpaginate %} - {% endif %} -
    -
    - {% when 'featured_collections' %} - {% assign collection_handles = collection_handles | split: ',' | uniq %} - {%- capture image_sizes -%} - {%- render 'util-mega-menu-img-sizes-attr', - menu_content_type: 'featured_collections', - settings: settings - -%} - {%- endcapture -%} - - {% if collection_handles.size == 1 %} - {% assign max_featured_collections = 1 %} - {% endif %} - - -
      - {% for handle in collection_handles limit: max_featured_collections %} - {% if handle == 'all' %} - {% assign collection_object = collections.all %} - {% else %} - {% assign collection_object = collections[handle] %} - {% endif %} - - {% endfor %} -
    -
    -{% endcase %} diff --git a/snippets/mega-menu.liquid b/snippets/mega-menu.liquid deleted file mode 100644 index 30c0f7baf..000000000 --- a/snippets/mega-menu.liquid +++ /dev/null @@ -1,30 +0,0 @@ -{%- doc -%} - Renders a mega menu list and optional "more" menu links. - When more menu links are present a duplicate instance of each submenu is also rendered. - - @param {object} [section] - The section object. - @param {linklist} [parent_link] - The linklist to render - @param {string} [id] - Unique ID to assign ul in markup - @param {string} [menu_content_type] - The type of content to render, options: ['featured_products', 'featured_collections', 'collection_images', 'text'] (default: 'text') - @param {number} [content_aspect_ratio] - The aspect ratio to display the content if applicable - @param {number} [image_border_radius] - The border radius used for the content images -{%- enddoc -%} - -
    -
    - {% render 'mega-menu-list', - parent_link: parent_link, - id: id, - section: section, - grid_columns_count: 6, - grid_columns_count_tablet: 4, - grid_columns_count_collection_images: 8, - menu_content_type: menu_content_type, - content_aspect_ratio: content_aspect_ratio, - image_border_radius: image_border_radius - %} -
    -
    diff --git a/snippets/menu-font-styles.liquid b/snippets/menu-font-styles.liquid deleted file mode 100644 index 21015a907..000000000 --- a/snippets/menu-font-styles.liquid +++ /dev/null @@ -1,23 +0,0 @@ -{%- comment -%} - Derives CSS variables from the menu typography settings for 1st level/main menu items. - Accepts: - settings {block.settings} - menu_type {string}: 'drawer' or 'mega_menu' -{%- endcomment -%} - ---menu-top-level-font-family: var(--font-{{ settings.type_font_primary_link }}--family); ---menu-top-level-font-size-desktop: {{ settings.type_font_primary_size }}; --menu-top-level-font-style: var(--font- -{{- settings.type_font_primary_link -}} ---style); --menu-top-level-font-weight: var(--font- -{{- settings.type_font_primary_link -}} ---weight); --menu-top-level-font-case: -{%- if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif -%} -; -{% if menu_type == 'drawer' %} - --menu-top-level-font-size: var(--menu-font-2xl--size); --menu-top-level-font-line-height: - var(--menu-font-2xl--line-height); -{% else %} - --menu-top-level-font-size: var(--menu-font-sm--size); --menu-top-level-font-line-height: - var(--menu-font-sm--line-height); -{% endif %} ---menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb); diff --git a/snippets/meta-tags.liquid b/snippets/meta-tags.liquid deleted file mode 100644 index e4bd0f0a2..000000000 --- a/snippets/meta-tags.liquid +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -{%- liquid - assign og_title = page_title | default: shop.name - assign og_url = canonical_url | default: request.origin - assign og_type = 'website' - assign og_description = page_description | default: shop.description | default: shop.name - - if request.page_type == 'product' - assign og_type = 'product' - elsif request.page_type == 'article' - assign og_type = 'article' - elsif request.page_type == 'password' - assign og_url = request.origin - endif -%} - - - - - - - -{%- if page_image -%} - - - - -{%- endif -%} - -{%- if request.page_type == 'product' -%} - - -{%- endif -%} - -{%- if settings.social_twitter_link != blank -%} - -{%- endif -%} - - - - - - {{ page_title }} - {%- if current_tags %} – tagged "{{ current_tags | join: ', ' }}"{% endif -%} - {%- if current_page != 1 %} – Page {{ current_page }}{% endif -%} - {%- unless page_title contains shop.name %} – {{ shop.name }}{% endunless -%} - - - - -{% if page_description %} - -{% endif %} diff --git a/snippets/overflow-list.liquid b/snippets/overflow-list.liquid deleted file mode 100644 index 2bb5b6fcc..000000000 --- a/snippets/overflow-list.liquid +++ /dev/null @@ -1,63 +0,0 @@ -{%- doc -%} - @param {string} children - The children of the overflow list. - @param {string} [class] - The class that is applied on the overflow-list element. - @param {boolean} [defer] - Whether to defer the loading of the overflow list. - @param {number} [minimum-items] - The minimum number of items to show in the overflow list. - @param {string} [more-attributes] - The attributes that are applied on the more button. - @param {string} [ref] - The ref that is set on the overflow-list element. -{%- enddoc -%} - - - - - {{ children }} - diff --git a/snippets/overlay.liquid b/snippets/overlay.liquid deleted file mode 100644 index 02d3d49d3..000000000 --- a/snippets/overlay.liquid +++ /dev/null @@ -1,38 +0,0 @@ -{%- doc -%} - Renders a full-bleed overlay. - - @param {object} settings - Block or section settings, expecting `overlay_color`, `overlay_style`, and `gradient_direction`. - @param {string} [layer] - The z-index layer for the overlay, defaults to `var(--layer-flat)`. - - @example - {% render 'overlay', settings: section.settings, layer: 'var(--layer-raised)' %} -{%- enddoc -%} - -
    - -{% stylesheet %} - .overlay { - position: absolute; - inset: 0; - z-index: var(--overlay-layer); - pointer-events: none; - border-radius: var(--overlay-border-radius, 0); - } - - .overlay--solid { - background: var(--overlay-color); - } - - .overlay--gradient { - background: linear-gradient(var(--overlay-direction), var(--overlay-color), var(--overlay-color--end)); - } -{% endstylesheet %} diff --git a/snippets/predictive-search-empty-state.liquid b/snippets/predictive-search-empty-state.liquid deleted file mode 100644 index 06c703d89..000000000 --- a/snippets/predictive-search-empty-state.liquid +++ /dev/null @@ -1,44 +0,0 @@ -{% doc %} - Renders the predictive search empty state - - @param {number} shadow_opacity - shadow opacity for the empty state container shadow - @param {string} products_test_id - a playwright test id, used to differentiate empty state from 'real' search results - @param {boolean} [load_empty_state] - Load the empty state or not - - @example - {% render 'predictive-search-empty-state', shadow_opacity: 0.1, products_test_id: 'empty-state' %} -{% enddoc %} - -
    - {% if load_empty_state %} -
    - {% liquid - assign collection = settings.empty_state_collection | default: collections.all - assign default_title = 'content.search_results_resource_products' | t - assign title = settings.empty_state_collection.title | default: default_title - %} - {% paginate collection.products by 4 %} - {% assign products = collection.products %} - {% comment %} Only show products section if there are products to display {% endcomment %} - {% if products.size > 0 %} - {% render 'predictive-search-products-list', - products_test_id: products_test_id, - title: title, - products: products, - limit: 4 - %} - {% else %} -
    -

    {{ 'content.no_products_found' | t }}

    -
    - {% endif %} - {% endpaginate %} -
    - {% endif %} -
    diff --git a/snippets/predictive-search-products-list.liquid b/snippets/predictive-search-products-list.liquid deleted file mode 100644 index f3602aa90..000000000 --- a/snippets/predictive-search-products-list.liquid +++ /dev/null @@ -1,185 +0,0 @@ -{%- doc -%} - Renders the predictive search products list for empty state and recently viewed products - - @param {string} title - title of the result list - @param {object[]} products - array of products - @param {string[]} [order_ids] - array of product ids - @param {number} [limit] - limit of products to display - @param {string} [products_test_id] - a playwright test id, used to differentiate empty state from 'real' search results -{%- enddoc -%} -{%- liquid - assign recently_viewed_title_text = 'content.recently_viewed_products' | t --%} -
    - {% if title == recently_viewed_title_text %} -
    -

    - {{ title }} - -

    -
      - {% liquid - assign limit = limit | default: 8 - %} - {% comment %} - If we're searching for recently viewed products by id, we need to reorder the products. - The order here comes from the search terms, and we display the products in the order of the ids. - {% endcomment %} - {% if order_ids != blank %} - {% for _id in order_ids %} - {% assign int_id = _id | times: 1 %} - {% assign product = products | find: 'id', int_id %} -
    • - {% render 'resource-card', - resource_type: 'product', - resource: product, - image_width: 500, - image_hover: true, - image_aspect_ratio: '4 / 5' - %} -
    • - {% endfor %} - {% else %} - {% for product in products limit: limit %} -
    • - {% render 'resource-card', - resource_type: 'product', - resource: product, - image_width: 500, - image_hover: true, - image_aspect_ratio: '4 / 5' - %} -
    • - {% endfor %} - {% endif %} -
    -
    - {% else %} -

    - {{ title }} -

    -
      - {% liquid - assign limit = limit | default: 8 - %} - {% for product in products limit: limit %} -
    • - {% render 'resource-card', - resource_type: 'product', - resource: product, - image_width: 500, - image_hover: true, - image_aspect_ratio: '4 / 5' - %} -
    • - {% endfor %} -
    - {% endif %} -
    - -{% stylesheet %} - .predictive-search-results__products { - padding-inline: var(--padding-xl); - } - - .recently-viewed-wrapper { - display: grid; - grid-template-rows: auto auto; - max-height: 1000px; - opacity: 1; - overflow: visible; - transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1); - transform-origin: top center; - transform: translateY(0); - } - - .recently-viewed-wrapper.removing { - max-height: 0; - opacity: 0; - transform: translateY(-10px); - transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), - transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); - pointer-events: none; - } - - .predictive-search-results__clear.button-unstyled { - color: var(--color-foreground); - opacity: 0.5; - transition: opacity var(--animation-speed-medium) var(--animation-easing); - padding: 0; - margin-left: var(--margin-sm); - - &:hover { - opacity: 1; - } - } - - .recently-viewed-wrapper.removing .predictive-search-results__card { - transition: none; - transform: none; - opacity: 1; - } - - .recently-viewed-wrapper > * { - transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1); - } - - .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(1) { - animation-delay: 30ms; - } - - .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(2) { - animation-delay: 60ms; - } - - .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(3) { - animation-delay: 90ms; - } - - .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(4) { - animation-delay: 120ms; - } - - .predictive-search-results__wrapper-products .predictive-search-results__card:nth-child(n + 5) { - animation-delay: 150ms; - } - - .predictive-search-results__wrapper-products { - animation-delay: 50ms; - } -{% endstylesheet %} diff --git a/snippets/predictive-search-resource-carousel.liquid b/snippets/predictive-search-resource-carousel.liquid deleted file mode 100644 index 91201c365..000000000 --- a/snippets/predictive-search-resource-carousel.liquid +++ /dev/null @@ -1,130 +0,0 @@ -{%- doc -%} - Renders a carousel of predictive search results cards. - - @param {string} title - The title of the carousel. - @param {object} resources - The resources to display. - @param {string} resource_type - The type of resource to display. -{%- enddoc -%} - -{% liquid - capture slides - for resource in resources - capture children - render 'resource-card', resource_type: resource_type, resource: resource, image_aspect_ratio: '4 / 5', collection_thumbnails: 'multiple' - endcapture - render 'slideshow-slide', index: forloop.index0, children: children, class: 'predictive-search-results__card' - endfor - endcapture -%} - -{% capture header %} -
    -

    - {{ title }} -

    - - {% if resources.size >= 4 %} - {%- render 'slideshow-controls', - show_arrows: true, - icon_style: 'chevron', - shape: 'none' - -%} - {% endif %} -
    -{% endcapture %} - -{% assign slideshow_class = 'predictive-search-results__list predictive-search-results__wrapper list-unstyled slideshow--single-media' %} -{% if resources.size >= 4 %} - {% assign slideshow_class = 'predictive-search-results__list predictive-search-results__wrapper list-unstyled' %} -{% endif %} - -{% render 'slideshow', - class: slideshow_class, - header: header, - infinite: false, - slides: slides, - slide_count: resources.size, - icon_style: 'chevron', - slideshow_gutters: 'start end' -%} - -{% stylesheet %} - .predictive-search-results__wrapper { - display: flex; - overflow-x: auto; - overflow-y: hidden; - padding-block-end: var(--padding-sm); - padding-inline: 0; - scroll-snap-type: x mandatory; - scroll-padding: 0 var(--padding-xl); - scrollbar-width: none; - -ms-overflow-style: none; - - &::-webkit-scrollbar { - display: none; - } - } - - .predictive-search-results__wrapper slideshow-slides { - --gutter-slide-width: var(--padding-xl); - - /* Add padding to prevent hover animations from being clipped in slideshow - 15px accommodates: - - Scale effect (9px on each side from 1.03 scale) - - Lift effect (4px upward movement) - - Shadow (15px spread with -5px offset) - Using 16px for better alignment with our spacing scale */ - padding-block: var(--padding-xl); - margin-block: calc(-1 * var(--padding-xl)); - gap: var(--gap-md); - } - - .predictive-search-results__resource-header { - display: flex; - padding-inline: var(--padding-xl); - justify-content: space-between; - align-items: center; - height: 32px; - } - - .predictive-search-results__resource-header .svg-wrapper { - width: var(--icon-size-xs); - } - - .predictive-search-results__wrapper-products { - display: grid; - grid-template-columns: repeat(2, 1fr); - padding-block-end: var(--padding-sm); - gap: var(--gap-md); - transition: height var(--animation-speed-medium) var(--animation-easing); - - @container (min-width: 550px) { - grid-template-columns: repeat(4, 1fr); - } - } - - .predictive-search-results__wrapper-products:last-child { - padding-block-end: var(--padding-lg); - - @media screen and (min-width: 750px) { - padding-block-end: var(--padding-sm); - } - } - - .predictive-search-results__resource-header .predictive-search-results__title { - margin-block-end: 0; - } - - .predictive-search-results__resource-header:has(slideshow-controls) .predictive-search-results__title { - margin-block-end: 0; - } - - .predictive-search-results__resource-header slideshow-controls { - @media screen and (max-width: 749px) { - display: none; - } - } -{% endstylesheet %} diff --git a/snippets/predictive-search.liquid b/snippets/predictive-search.liquid deleted file mode 100644 index 689da29e0..000000000 --- a/snippets/predictive-search.liquid +++ /dev/null @@ -1,435 +0,0 @@ -{%- doc -%} - Renders the predictive search input and results. - - @param {string} [class] - Additional classes to add to the component. - @param {string} [search_test_id] - A Playwright test ID for differentiating search components. - @param {string} [input_id] - The ID for the search input element. - @param {string} [products_test_id] - A Playwright test ID for differentiating products. - - @example - {% render 'predictive-search', search_test_id: 'header-search' %} -{%- enddoc -%} - - - - - - - -{% stylesheet %} - predictive-search-component { - --resource-card-corner-radius: var(--product-corner-radius); - - display: flex; - width: 100%; - position: relative; - margin-inline: auto; - align-items: center; - background-color: var(--color-background); - z-index: var(--layer-heightened); - } - - .predictive-search-form__footer { - display: none; - position: absolute; - bottom: 0; - left: 0; - right: 0; - - @media screen and (min-width: 750px) { - --to-top-gradient-background: linear-gradient( - to top, - rgb(var(--color-background-rgb) / var(--opacity-90)), - rgb(var(--color-background-rgb) / var(--opacity-80)), - rgb(var(--color-background-rgb) / var(--opacity-40)), - transparent - ); - - padding-block: var(--padding-xs) var(--padding-lg); - background-image: var(--to-top-gradient-background); - } - } - - predictive-search-component:has([data-search-results]):not(:has(.predictive-search-results__no-results)) - .predictive-search-form__footer { - display: block; - } - - .predictive-search-form { - position: relative; - width: 100%; - align-self: flex-start; - } - - .predictive-search-form__content { - max-height: 50dvh; - overflow-y: auto; - background-color: var(--color-background); - - /* Firefox */ - scrollbar-width: none; - - /* Webkit browsers */ - &::-webkit-scrollbar { - display: none; - } - } - - .predictive-search-form__content-wrapper { - position: absolute; - top: 100%; - width: 100%; - left: 0; - z-index: var(--layer-raised); - display: flex; - flex-direction: column; - border-radius: 0 0 var(--search-border-radius) var(--search-border-radius); - transition: box-shadow var(--animation-speed) var(--animation-easing); - transform: translateZ(0); - will-change: transform, opacity; - overflow: hidden; - - @media screen and (max-width: 749px) { - border-radius: 0; - } - - @media screen and (min-width: 750px) { - max-height: var(--modal-max-height); - } - } - - /* Add new rule to apply bottom padding only when search button exists */ - .predictive-search-form__content-wrapper:has([data-search-results]):not(:has(.predictive-search-results__no-results)) - > .predictive-search-form__content { - padding-block-end: var(--padding-6xl); - } - - .predictive-search-form__header-inner { - background: var(--color-background); - border: var(--search-border-width) solid var(--color-border); - color: var(--color-foreground); - border-radius: var(--style-border-radius-popover); - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - - @media screen and (max-width: 749px) { - border-radius: var(--style-border-radius-inputs); - border: none; - } - } - - .predictive-search-form__header-inner:focus-within { - outline-offset: var(--focus-outline-offset); - - @media screen and (min-width: 750px) { - outline: var(--focus-outline-width) solid var(--color-primary); - } - } - - .predictive-search-form__header { - display: flex; - position: sticky; - top: 0; - z-index: var(--layer-heightened); - width: 100%; - align-items: center; - background-color: var(--color-input-background); - border: var(--search-border-width) solid var(--color-border); - border-radius: var(--style-border-radius-inputs); - - @media screen and (max-width: 749px) { - padding: var(--padding-2xs) var(--padding-sm); - } - } - - .predictive-search-form__header:focus-within, - .predictive-search-form__header-inner:focus-within, - .predictive-search-form__header-inner:has(.search-input:is(:focus, :focus-visible)) { - outline: none; - box-shadow: none; - /* stylelint-disable-next-line declaration-no-important */ - border-color: var(--color-border) !important; - } - - .predictive-search-results__inner { - --title-font-size: var(--font-size--md); - --title-margin-block: var(--margin-xs); - --list-item-padding-block: var(--padding-sm); - - flex-grow: 1; - overflow-y: auto; - padding-block: var(--padding-lg); - container-type: inline-size; - color: var(--color-foreground); - } - - .search-input { - border-radius: var(--style-border-radius-inputs); - padding-block: var(--padding-sm); - font-size: var(--font-size--md); - width: 100%; - color: var(--color-foreground); - padding-inline: calc(var(--margin-lg) + var(--icon-size-lg)) 0; - background: transparent; - text-overflow: ellipsis; - overflow: hidden; - outline: none; - border: 0; - } - - .search-input::placeholder { - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .search-input, - .search-input:is(:focus, :focus-visible, :focus-within), - .predictive-search-form__header *:is(:focus, :focus-visible) { - outline: none; - box-shadow: none; - } - - .search-input:hover { - background-color: transparent; - } - - .predictive-search__icon { - position: absolute; - left: var(--margin-xl); - top: auto; - width: var(--icon-size-lg); - height: var(--icon-size-lg); - color: rgb(var(--color-foreground-rgb) / var(--opacity-60)); - - @media screen and (min-width: 750px) { - left: var(--margin-md); - } - } - - .predictive-search__icon > svg { - width: var(--icon-size-md); - height: var(--icon-size-md); - } - - .predictive-search__reset-button { - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - min-width: var(--minimum-touch-target); - height: var(--minimum-touch-target); - padding: 0; - background: transparent; - color: var(--color-foreground); - opacity: 1; - transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-out), - visibility var(--animation-speed-medium) var(--animation-timing-fade-out); - - &:hover { - color: var(--color-foreground); - } - - &:active { - transform: scale(0.9); - transition: transform 100ms var(--animation-timing-active); - } - - @media screen and (max-width: 749px) { - margin-right: var(--margin-md); - } - } - - .predictive-search__reset-button[hidden] { - opacity: 0; - pointer-events: none; - visibility: hidden; - } - - .predictive-search__reset-button-icon { - display: flex; - align-items: center; - justify-content: center; - width: var(--icon-size-lg); - height: var(--icon-size-lg); - transition: background-color var(--animation-speed-medium) ease-in-out, - transform var(--animation-speed-medium) var(--animation-timing-bounce); - border-radius: 50%; - - &:hover { - background-color: rgb(var(--color-primary-hover-rgb) / var(--opacity-8)); - } - } - - .predictive-search__reset-button:active .predictive-search__reset-button-icon { - transform: scale(0.85); - transition-timing-function: var(--animation-timing-active); - transition-duration: 100ms; - } - - .predictive-search__reset-button svg { - width: var(--icon-size-md); - height: var(--icon-size-md); - } - - .predictive-search__reset-button-text { - display: none; - } - - .predictive-search__search-button { - margin: auto; - z-index: var(--layer-raised); - transition: transform var(--animation-speed-medium) var(--animation-timing-bounce), - box-shadow var(--animation-speed-medium) var(--animation-timing-hover); - transform-origin: center; - - &:hover { - transform: translateY(-2px); - box-shadow: 0 4px 8px rgb(0 0 0 / var(--opacity-5)); - } - - &:active { - transform: scale(0.97); - transition: transform 100ms var(--animation-timing-active); - box-shadow: none; - } - } - - .predictive-search__close-modal-button { - --button-color: var(--color-foreground); - --button-background-color: transparent; - - display: flex; - justify-content: center; - align-items: center; - width: var(--minimum-touch-target); - height: var(--minimum-touch-target); - margin-inline-start: var(--margin-sm); - padding: 0; - box-shadow: none; - - &:active { - transform: scale(0.8); - transition: transform 100ms var(--animation-timing-active); - } - - .svg-wrapper, - svg { - width: var(--icon-size-xs); - height: var(--icon-size-xs); - } - - @media screen and (min-width: 750px) { - display: none; - } - } - - .predictive-search__close-modal-button:hover { - --button-color: var(--color-foreground); - --button-background-color: transparent; - } -{% endstylesheet %} diff --git a/snippets/price-filter.liquid b/snippets/price-filter.liquid deleted file mode 100644 index d772538c1..000000000 --- a/snippets/price-filter.liquid +++ /dev/null @@ -1,239 +0,0 @@ -{%- doc -%} - Renders a price filter. - - @param {object} filter - The filter object to render. - @param {string} filter_style - The filter style, can be 'horizontal' or 'vertical'. - @param {boolean} [autofocus] - Whether to autofocus the filter. - @param {boolean} [should_render_clear] - Whether to render the clear button. - - @example - {% render 'price-filter', filter: filter, filter_style: 'vertical' %} -{%- enddoc -%} - - -
    - - {{ filter.label }} - - - - - {%- if filter.min_value.value != null or filter.max_value.value != null %} - {%- if filter.min_value.value != null and filter.max_value.value != null %} - {{- filter.min_value.value | money | strip_html -}} - – - {{- filter.max_value.value | money | strip_html -}} - {%- elsif filter.min_value.value != null -%} - {{ filter.min_value.value | money | strip_html }}–{{ filter.range_max | money | strip_html }} - - {%- elsif filter.max_value.value != null -%} - {{- 0 | money | strip_html -}} - – - {{- filter.max_value.value | money | strip_html -}} - {%- endif -%} - {%- endif -%} - - - - {{- 'icon-caret.svg' | inline_asset_content -}} - - - - {% assign min_input_max_value = filter.max_value.value | default: filter.range_max %} - {% assign max_input_min_value = filter.min_value.value | default: 0 %} - - -
    -
    - - -
    - -
    {{ 'fields.separator' | t }}
    - -
    - - -
    -
    - -
    - {%- assign formatted_highest_price = filter.range_max | money -%} - {{ 'content.price_filter_html' | t: price: formatted_highest_price }} -
    - - {% if filter.min_value.value != null or filter.max_value.value != null %} - {% assign has_active_values = true %} - {% endif %} - - {% if should_render_clear %} - -
    - {{- 'actions.clear' | t -}} -
    -
    - {% endif %} -
    -
    -
    -
    - -{% stylesheet %} - /* Price filter */ - .price-facet { - container-type: inline-size; - display: flex; - flex-direction: column; - } - - .facets__inputs-wrapper.price-facet__inputs-wrapper { - flex-wrap: nowrap; - } - - .price-facet__field { - width: 50%; - flex-grow: 0; - } - - @container (max-width: 199px) { - .facets__inputs-wrapper.price-facet__inputs-wrapper { - flex-wrap: wrap; - width: 100%; - } - - .price-facet__inputs-wrapper .price-facet__field { - width: 100%; - } - } - - .facets .facets__inputs-wrapper.price-facet__inputs-wrapper { - padding: var(--style-border-width-inputs); - gap: calc(var(--gap-sm) + (var(--style-border-width-inputs) * 2)); - } - - .facets--horizontal .facets__panel-content:has(.price-facet) { - min-width: 360px; - } - - .facets--horizontal .facets__inputs-wrapper.price-facet__inputs-wrapper { - @media screen and (min-width: 750px) { - padding: calc(var(--padding-md) + var(--style-border-width-inputs)); - } - } - - .price-facet__input { - width: 100%; - text-align: right; - padding-left: calc(2.5 * var(--input-padding-x)); - } - - .price-facet__input::placeholder { - color: var(--facets-input-label-color); - } - - .price-facet__separator { - display: flex; - align-items: center; - justify-content: center; - font-size: var(--font-paragraph--size); - } - - .price-facet__highest-price { - padding: var(--padding-xs) 0 var(--padding-sm); - } - - .facets--horizontal .price-facet__highest-price { - padding: 0 var(--padding-md) var(--padding-xs); - } - - .field__label.price-facet__label { - top: 0; - left: 0; - color: var(--facets-input-label-color); - padding: var(--input-padding-y) var(--input-padding-x); - transform: none; - } -{% endstylesheet %} diff --git a/snippets/price.liquid b/snippets/price.liquid deleted file mode 100644 index 7369b79ff..000000000 --- a/snippets/price.liquid +++ /dev/null @@ -1,79 +0,0 @@ -{%- doc -%} - This snippet is used to render a product card. - It is used in the product block,featured product block, and the product card block. - - @param {product} product_resource - The product to render - @param {boolean} [show_unit_price] - Whether to show the unit price - @param {boolean} [show_sale_price_first] - Whether to show the sale price first -{%- enddoc -%} - -{%- liquid - assign show_unit_price = show_unit_price | default: false - assign show_sale_price_first = show_sale_price_first | default: false - assign selected_variant = product_resource.selected_or_first_available_variant - assign price = selected_variant.price - assign compare_at_price = selected_variant.compare_at_price - - assign show_compare_price = false - if compare_at_price > price - assign show_compare_price = true - endif - - if product_resource == blank - assign price = 1999 - endif - - # Checks if product handle matches the closest product's handle (i.e. product page) - # and if the currency code is enabled for product pages - if product.handle == closest.product.handle and settings.currency_code_enabled_product_pages - assign price = price | money_with_currency - assign compare_at_price = compare_at_price | money_with_currency - - # Checks if product handle does not match the closest product's handle (i.e. product card) - # and if the currency code is enabled for product cards - elsif product.handle != closest.product.handle and settings.currency_code_enabled_product_cards - assign price = price | money_with_currency - assign compare_at_price = compare_at_price | money_with_currency - - else - assign price = price | money - assign compare_at_price = compare_at_price | money - endif --%} - -
    - {% if show_sale_price_first == false and show_compare_price %} - - {{ 'content.price_regular' | t }}  - {{- compare_at_price -}} - - {% endif %} - - {% if show_compare_price %} - - {{ 'content.price_sale' | t }}  - {{ price | default: ' ' }} - - {% else %} - {{ price | default: ' ' }} - {% endif %} - - {% if show_sale_price_first == true and show_compare_price %} - - {{ 'content.price_regular' | t }}  - {{- compare_at_price -}} - - {% endif %} - {%- if selected_variant.unit_price and show_unit_price %} - {%- liquid - if product.handle == closest.product.handle and settings.currency_code_enabled_product_pages - assign unit_price = selected_variant.unit_price | money_with_currency - elsif product.handle != closest.product.handle and settings.currency_code_enabled_product_cards - assign unit_price = selected_variant.unit_price | money_with_currency - else - assign unit_price = selected_variant.unit_price | money - endif - -%} - {% render 'unit-price', price: unit_price, measurement: selected_variant.unit_price_measurement %} - {%- endif -%} -
    diff --git a/snippets/product-card-badges.liquid b/snippets/product-card-badges.liquid deleted file mode 100644 index 62b7b1856..000000000 --- a/snippets/product-card-badges.liquid +++ /dev/null @@ -1,77 +0,0 @@ -{%- doc -%} - Renders product badges for the product card. - - @param {object} product - The product object. - @param {object} settings - The theme settings object. - - @example - {% render 'product-card-badges', product: product, settings: settings %} -{%- enddoc -%} - -
    - {%- if product.available == false or product.compare_at_price > product.price and product.available -%} -
    - {%- if product.available == false -%} - {{ 'content.product_badge_sold_out' | t }} - {%- elsif product.compare_at_price > product.price -%} - {{ 'content.product_badge_sale' | t }} - {%- endif -%} -
    - {%- endif -%} -
    - -{% stylesheet %} - .product-badges { - --badge-inset: max(var(--padding-xs), calc((var(--border-radius) + var(--padding-xs)) * (1 - cos(45deg)))); - - position: absolute; - z-index: var(--layer-flat); - } - - .product-badges--bottom-left { - bottom: calc(var(--badge-inset) + var(--padding-block-start)); - left: calc(var(--badge-inset) + var(--padding-inline-start)); - } - - .product-badges--top-left { - top: calc(var(--badge-inset) + var(--padding-block-start)); - left: calc(var(--badge-inset) + var(--padding-inline-start)); - } - - .product-badges--top-right { - top: calc(var(--badge-inset) + var(--padding-block-start)); - right: calc(var(--badge-inset) + var(--padding-inline-start)); - } - - .product-badges__badge { - --badge-font-size: var(--font-size--xs); - - display: flex; - align-items: center; - justify-content: center; - text-align: center; - color: var(--color-foreground); - background: var(--color-background); - font-size: var(--badge-font-size); - font-family: var(--badge-font-family); - font-weight: var(--badge-font-weight); - text-transform: var(--badge-text-transform); - border-radius: var(--badge-border-radius); - } - - .product-badges__badge--rectangle { - padding-block: var(--badge-rectangle-padding-block); - padding-inline: var(--badge-rectangle-padding-inline); - } -{% endstylesheet %} diff --git a/snippets/product-card-variant-url.liquid b/snippets/product-card-variant-url.liquid deleted file mode 100644 index 9609fc439..000000000 --- a/snippets/product-card-variant-url.liquid +++ /dev/null @@ -1,27 +0,0 @@ -{%- doc -%} - Logic to determine which variant URL to use (matching swatch selection logic) - - @param {object} product - The product object - - @example - {% render 'product-card-variant-url', product: product %} -{%- enddoc -%} - -{% liquid - assign variant_to_link = product.selected_or_first_available_variant - assign combined_listing_count = product.options_with_values | map: 'values' | map: 'product_url' | compact | size - - # For now if it's combined listing, we don't need to do anything. - unless combined_listing_count > 0 - # Simple direct check: which variant owns the featured image? - if product.featured_media - for variant in product.variants - if variant.featured_media.id == product.featured_media.id - assign variant_to_link = variant - break - endif - endfor - endif - endunless -%} -{{- variant_to_link.url -}} diff --git a/snippets/product-card.liquid b/snippets/product-card.liquid deleted file mode 100644 index cd65fb150..000000000 --- a/snippets/product-card.liquid +++ /dev/null @@ -1,228 +0,0 @@ -{%- doc -%} - This snippet is used to render a product card. - It is used in the product block, featured product block, and the product card block. - The product object is null or when placeholders are rendered. - - @param {object} product - The product object - @param {object} children - The children of the product card - @param {object} [block] - The block object - @param {number} [product_card_gap] - The gap between the product card children (overrides block settings) -{%- enddoc -%} - -{% assign block_settings = block.settings %} - -{% style %} - {% if request.visual_preview_mode %} - product-card-link { - width: 100%; - min-width: 250px; - } - {% endif %} -{% endstyle %} - -{% liquid - assign has_quick_add = false - if settings.quick_add and product.available - assign has_quick_add = true - endif - - assign has_mobile_quick_add = false - if has_quick_add and settings.mobile_quick_add - assign has_mobile_quick_add = true - endif - - assign product_card_id = 'product-card-link-' | append: block.id | append: '-' | append: product.id - assign product_card_gap_value = product_card_gap | default: block_settings.product_card_gap - - # Logic to determine which variant URL to use (matching swatch selection logic) - assign variant_to_link = product.selected_or_first_available_variant - assign combined_listing_count = product.options_with_values | map: 'values' | map: 'product_url' | compact | size - assign no_swatch_selected = null - - unless combined_listing_count > 0 - # Simple direct check: which variant owns the featured image? - if product.featured_media - assign found_variant = false - - for variant in product.variants - if variant.featured_media.id == product.featured_media.id - assign variant_to_link = variant - assign found_variant = true - break - endif - endfor - - # Check if we need to set no_swatch_selected - unless found_variant - # Featured image is not a variant image - # Check if product has swatches - for option in product.options_with_values - assign swatch_count = option.values | map: 'swatch' | compact | size - if swatch_count > 1 - # Multiple swatches exist but featured image doesn't match any - assign no_swatch_selected = true - break - endif - endfor - endunless - endif - endunless - - if settings.transition_to_main_product - assign featured_image = variant_to_link.featured_image - if featured_image == blank - assign featured_image = product.featured_media.preview_image - endif - - if featured_image != blank - assign featured_media_url = featured_image | image_url: width: 500 - endif - endif - - assign onboarding = false - if product.id == empty or product == blank - assign onboarding = true - endif -%} - -{%- if settings.transition_to_main_product -%} - -{%- endif -%} - - - - {{ product.title }} - - -
    - {{ children }} -
    -
    -{%- if settings.transition_to_main_product -%} -
    -{%- endif -%} - -{% stylesheet %} - product-card-link, - :not(product-card-link) product-card { - width: 100%; - } - - .product-card__placeholder-image svg { - height: 100%; - } - - @media screen and (max-width: 749px) { - .product-card slideshow-arrows .slideshow-control { - display: none; - } - } - - /* Hide the variant swatches for product cards that show a swatches variant picker */ - :is(.product-card):has(swatches-variant-picker-component) .quick-add .variant-option--swatches { - display: none; - } - - /* Hide "Add" button for single option product cards that show a swatches variant picker */ - :is(.product-card:not([data-no-swatch-selected])):has(.quick-add__product-form-component--single-option):has( - swatches-variant-picker-component - ) - .quick-add__button--choose { - display: none; - } - - /* Hide "Add" button for single option product cards that show a swatches variant picker */ - :is(.product-card[data-no-swatch-selected]):has(.quick-add__product-form-component--single-option):has( - swatches-variant-picker-component - ) - add-to-cart-component { - display: none; - } - - /* Hide "add" button for multi-variant product cards that don't show a swatches variant picker */ - :is(.product-card):has(.quick-add__product-form-component--multi-variant):not(:has(swatches-variant-picker-component)) - .quick-add__button--add { - display: none; - } - - /* Hover effect for single variant product cards and product blocks */ - - /* stylelint-disable selector-max-specificity */ - :is(.product-card):has(.quick-add__product-form-component--single-variant) .card-gallery:hover { - & .quick-add__button--choose { - display: none; - } - - & .quick-add__button--add { - display: grid; - } - } - - .product-card[data-no-swatch-selected] slideshow-component[data-generic-media-size='1'] slideshow-arrows { - display: none; - } - - .product-card[data-no-swatch-selected] - slideshow-component[data-generic-media-size='1'] - slideshow-arrows:has(+ slideshow-slides slideshow-slide[variant-image]:not([hidden])) { - display: flex; - } - - .product-card .variant-option__swatch svg { - display: none; - } - - .product-card [data-available-count='0'] ~ svg { - display: block; - } -{% endstylesheet %} diff --git a/snippets/product-grid.liquid b/snippets/product-grid.liquid deleted file mode 100644 index 1150b05e5..000000000 --- a/snippets/product-grid.liquid +++ /dev/null @@ -1,216 +0,0 @@ -{%- doc -%} - This snippet is used to render the product grid on collection and search pages. - - @param {object} section - The section object - @param {object} paginate - Pagination object - @param {object} products - Array of product objects - @param {string} [title] - Header of the collection or search results - @param {string} children - List or grid of product cards -{%- enddoc -%} - -{% capture product_card_size %} - {% render 'util-product-grid-card-size' section: section %} -{% endcapture %} -{% assign product_card_size = product_card_size | strip %} - -{% style %} - @media (min-width: 750px) { - {% case section.settings.layout_type %} - {% when 'grid' %} - .product-grid--{{ section.id }}:is(.product-grid--grid) { - --product-grid-columns-desktop: repeat(auto-fill, minmax({{ product_card_size }}, 1fr)); - } - {% when 'organic' %} - {% assign large_span = 2 %} - {% assign row_cycle = 3 %} - {% assign product_cycle = row_cycle | times: 2 %} - {% assign right_large_start_col = 3 %} - .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-child({{ product_cycle }}n + 1) { - grid-column: 1 / span {{ large_span }}; - } - - .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-child({{ product_cycle }}n + 2), - .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-child({{ product_cycle }}n + 5) { - align-self: end; - } - - .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) .product-grid__item:nth-child({{ product_cycle }}n + {{ product_cycle }}) { - grid-column: {{ right_large_start_col }} / span {{ large_span }}; - } - - .product-grid--{{ section.id }}:not([product-grid-view='zoom-out']):is(.product-grid--organic) { - --product-grid-columns-desktop: repeat(4, 1fr); - } - {% endcase %} - - /* This logic helps prevent displaying one column for an large or extra-large product card size on a small screen. We want it to display at least two columns. */ - {% case section.settings.product_card_size %} - {% when 'extra-large' or 'large' %} - @container product-grid (max-width: calc({{ product_card_size }} * 3 + {{ section.settings.columns_gap_horizontal }}px * 2)) { - .product-grid--{{ section.id }}:is(.product-grid--grid) { - --product-grid-columns-desktop: repeat(2, 1fr); - } - } - {% endcase %} - - /* When zoomed out, fit as many 100px-wide columns as possible */ - .product-grid--{{ section.id }}:is([product-grid-view='zoom-out']) { - --product-grid-columns-desktop: repeat(auto-fill, minmax(6.25rem, 1fr)); - } - - .product-grid--{{ section.id }}:is([product-grid-view='zoom-out']) .product-grid-view-zoom-out--details { - display: block; - } - - .product-grid--{{ section.id }}:is([product-grid-view='zoom-out']) .product-grid__card { - padding-inline-start: var(--zoom-out-padding-inline-start, 0); - padding-inline-end: var(--zoom-out-padding-inline-end, 0); - padding-block-start: var(--zoom-out-padding-block-start, 0); - padding-block-end: var(--zoom-out-padding-block-end, 0); - } - } -{% endstyle %} - -
    -
    - {% if products.size == 0 %} -
    -

    - {{ 'content.no_products_found' | t }} -

    -

    - {{ 'content.use_fewer_filters_html' | t: link: collection.url, class: 'main-collection-grid__empty-link' }} -

    -
    - {% else %} - - - {% if title %} -

    {{ title }}

    - {% endif %} -
      - {{ children }} -
    - - {% endif %} -
    -
    - -{% comment %} - This script is used to set the grid view on the product grid stored in sessionStorage. Keeping it here helps us prevent seeing the default state. -{% endcomment %} -{% unless request.design_mode %} - -{% endunless %} - -{% stylesheet %} - .product-grid { - --product-grid-gap: var(--product-grid-gap-mobile); - - isolation: isolate; - - @media screen and (min-width: 750px) { - --product-grid-gap: var(--product-grid-gap-desktop); - } - } - - .product-grid slideshow-arrows .slideshow-control { - display: none; - - @media screen and (min-width: 750px) { - display: grid; - } - } - - /* This triggers iOS < 16.4 */ - @supports not (background-color: rgb(from red 150 g b / alpha)) { - /* Force aspect ratio to auto for iOS < 16.4 since it's not compatible with the infinite pagination */ - .product-grid .product-media, - .product-grid .product-media-container { - aspect-ratio: auto; - } - } - - .main-collection-grid { - padding: var(--grid--margin--mobile); - - @media screen and (min-width: 750px) { - padding: var(--padding-block-start) var(--padding-inline-end) var(--padding-block-end) var(--padding-inline-start); - } - } - - .main-collection-grid__empty { - padding-block: var(--padding-6xl); - padding-inline: var(--page-margin); - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - gap: var(--padding-sm); - } - - .main-collection-grid__empty-title { - margin: 0; - } - - .collection-wrapper--full-width .main-collection-grid__title { - margin-left: var(--page-margin); - } - - .collection-wrapper--full-width-on-mobile .main-collection-grid__title { - @media screen and (max-width: 749px) { - margin-left: var(--page-margin); - } - } -{% endstylesheet %} diff --git a/snippets/product-media.liquid b/snippets/product-media.liquid deleted file mode 100644 index 980d9214c..000000000 --- a/snippets/product-media.liquid +++ /dev/null @@ -1,214 +0,0 @@ -{%- doc -%} - Renders a product media component. - - @param {object} media - The product media object. - @param {boolean} [preview_image_only] - Renders only the preview image without controls. - @param {string} [widths] - Image widths for responsive images. - @param {string} [sizes] - Image sizes for responsive images. - @param {string} [loading] - The loading attribute for the image. - @param {object} [block] - The block object. - @param {object} [section] - The section object. - @param {object} [selected_product] - The currently selected product. - @param {boolean} [first_3d_model] - Indicates if this is the first 3D model. - @param {boolean} [is_main_product_media] - Indicates if this is the main product image. - - @example - {% render 'product-media', media: media, preview_image_only: false, loading: 'lazy' %} -{%- enddoc -%} - -{% liquid - assign widths = widths | default: '240, 352, 832, 1200, 1600, 1920, 2560, 3840' -%} - -
    - {% liquid - assign high_res_url = media.preview_image | image_url: width: 3840 - assign fetch_priority = 'auto' - if is_main_product_media - assign fetch_priority = 'high' - endif - assign focal_point_style = '--focal-point: ' | append: media.presentation.focal_point | append: ';' - %} - {{ - media.preview_image - | image_url: width: 3840 - | image_tag: - widths: widths, - alt: media.alt, - sizes: sizes, - loading: loading, - class: 'product-media__image', - transitionToProduct: settings.transition_to_main_product, - data_max_resolution: high_res_url, - fetchpriority: fetch_priority, - style: focal_point_style - }} - - {% unless preview_image_only %} - {%- case media.media_type -%} - {% when 'model' %} - - - - - - - - {%- if first_3d_model -%} - - {%- endif -%} - {% when 'video', 'external_video' %} - {%- render 'video', - video: media, - video_loop: block.settings.video_loop, - widths: widths, - sizes: sizes, - loading: loading, - disable_controls: true, - section_id: section.id - -%} - {% endcase %} - {% endunless %} -
    - -{% stylesheet %} - .product-media { - aspect-ratio: var(--gallery-aspect-ratio, var(--ratio)); - min-height: 0; - min-width: 0; - } - - .product-media__image { - object-position: var(--focal-point, center center); - } - - /*** Media border-radius feature ****/ - @media screen and (min-width: 750px) { - .media-gallery--carousel slideshow-container, - .media-gallery--grid .product-media > * { - border-radius: var(--media-radius, 0); - overflow: hidden; - } - - /* When the CAROUSEL is on the LEFT side */ - .product-information:not(.product-information--media-right) - .media-gallery--carousel.media-gallery--extend - slideshow-container { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - /* When the CAROUSEL is on the RIGHT side */ - .product-information.product-information--media-right - .media-gallery--carousel.media-gallery--extend - slideshow-container { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - /* When the GRID is on the LEFT side */ - .product-information:not(.product-information--media-right) { - /* One column */ - .media-gallery--grid.media-gallery--extend:not(.media-gallery--two-column) .product-media > *, - /* Two column, small first image */ - .media-gallery--grid.media-gallery--extend.media-gallery--two-column:not(.media-gallery--large-first-image) - .product-media-container:nth-of-type(odd) - .product-media - > *, - /* Two column, large first image */ - .media-gallery--grid.media-gallery--extend.media-gallery--two-column.media-gallery--large-first-image - .product-media-container:is(:first-of-type, :nth-of-type(even)) - .product-media - > * { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - - /* When the GRID is on the RIGHT side */ - .product-information.product-information--media-right { - /* One column */ - .media-gallery--grid.media-gallery--extend:not(.media-gallery--two-column) .product-media > *, - /* Two column, small first image */ - .media-gallery--grid.media-gallery--extend.media-gallery--two-column:not(.media-gallery--large-first-image) - .product-media-container:nth-of-type(even) - .product-media - > *, - /* Two column, large first image */ - .media-gallery--grid.media-gallery--extend.media-gallery--two-column.media-gallery--large-first-image - .product-media-container:is(:first-of-type, :nth-of-type(odd)) - .product-media - > * { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - } - } - - ::view-transition-old(gallery-item), - ::view-transition-new(gallery-item) { - animation-duration: 0ms; - } -{% endstylesheet %} diff --git a/snippets/quantity-selector.liquid b/snippets/quantity-selector.liquid deleted file mode 100644 index b42c87a9d..000000000 --- a/snippets/quantity-selector.liquid +++ /dev/null @@ -1,74 +0,0 @@ -{%- doc -%} - This snippet is used to render the quantity selector for a product. - It is used in the product page and the cart page. - - @param {object} product - the product to render the quantity selector for - @param {number} [in_cart_quantity] - the quantity in the cart to set the input value - @param {number} [line_index] - the index of the forloop representing the line on which the quantity selector is rendered - @param {number} [min] - the minimum quantity the input supports - @param {string} [class] - custom class for the quantity selector, optional - @param {boolean} [can_update_quantity] - whether the quantity can be updated, defaults to true -{%- enddoc -%} - -{% liquid - assign variant = product.selected_or_first_available_variant -%} - - - - - - diff --git a/snippets/quick-add-modal.liquid b/snippets/quick-add-modal.liquid deleted file mode 100644 index 000258043..000000000 --- a/snippets/quick-add-modal.liquid +++ /dev/null @@ -1,434 +0,0 @@ - - - -
    -
    -
    - -{% stylesheet %} - .quick-add-modal { - padding: 0; - border: var(--style-border-popover); - height: fit-content; - overflow: hidden; - min-height: 500px; - box-shadow: 0 5px 30px rgb(0 0 0 / var(--opacity-15)); - - @media screen and (max-width: 750px) { - position: fixed; - display: block; - margin: auto 0 0 0; - min-height: unset; - max-width: 100%; - border-radius: 0; - } - } - - .quick-add-modal[open] { - @media screen and (min-width: 750px) { - display: flex; - } - } - - .quick-add-modal .view-more-details__wrapper { - @media screen and (max-width: 750px) { - display: none; - } - } - - .quick-add-modal[open] { - animation: modalSlideInTop var(--animation-speed) var(--animation-easing) forwards; - } - - .quick-add-modal.dialog-closing { - animation: modalSlideOutTop var(--animation-speed) var(--animation-easing) forwards; - } - - .quick-add-modal__close { - position: absolute; - top: var(--margin-2xs); - right: var(--margin-2xs); - transition: transform 0.15s var(--animation-timing-bounce); - z-index: var(--layer-raised); - } - - .quick-add-modal__close:active { - transform: scale(0.8); - } - - .quick-add-modal__content { - display: grid; - grid-template-columns: repeat(7, 1fr); - grid-template-rows: 100% 1fr; - position: relative; - max-width: var(--wide-content-width); - overflow-y: auto; - max-height: 100vh; - - @media screen and (max-width: 750px) { - grid-template-columns: repeat(4, 1fr); - grid-template-rows: auto; - padding-inline: var(--padding-xl); - padding-block: var(--padding-xl); - gap: var(--gap-lg); - flex: 1; - min-height: 0; - overflow-y: auto; - height: auto; /* Prevent a bug in Safari where height:fit-content is not respected */ - max-height: 100vh; - } - } - - .quick-add-modal__content .media-gallery--grid .media-gallery__grid { - grid-template-columns: 1fr; - } - - .quick-add-modal__content .media-gallery--grid.media-gallery--two-column .product-media-container:first-child { - grid-column: auto; - } - - .quick-add-modal__content { - /* One column */ - .media-gallery--grid:not(.media-gallery--two-column) .product-media > *, - /* Two column, small first image */ - .media-gallery--grid.media-gallery--two-column:not(.media-gallery--large-first-image) - .product-media-container:nth-of-type(odd) - .product-media > *, - /* Two column, large first image */ - .media-gallery--grid.media-gallery--two-column.media-gallery--large-first-image - .product-media-container:is(:first-of-type, :nth-of-type(even)) - .product-media > *, - /* Carousel */ - .media-gallery--carousel slideshow-container { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - - .quick-add-modal__content .view-more-details__wrapper { - display: flex; - justify-content: flex-start; - width: 100%; - } - - .view-more-details__wrapper .view-more-details { - display: flex; - align-items: center; - width: fit-content; - } - - .quick-add-modal__content .product-header { - @media screen and (max-width: 750px) { - display: flex; - flex-direction: column; - grid-column: 2 / -1; - grid-row: 1; - padding-right: var(--padding-2xl); - } - } - - .quick-add-modal__content .product-header a:not(product-price *) { - @media screen and (max-width: 749px) { - font-size: var(--font-size--md); - font-weight: 500; - color: inherit; - width: fit-content; - } - } - - .quick-add-modal__content variant-picker, - .quick-add-modal__content product-form-component { - @media screen and (max-width: 750px) { - grid-column: 1 / -1; - } - } - - .quick-add-modal__content .variant-picker__form { - display: block; - } - - .quick-add-modal__content .variant-option + .variant-option { - margin-top: var(--padding-lg); - } - - .quick-add-modal__content .product-media-container__zoom-button { - cursor: default; - } - - .quick-add-modal__content .product-details { - grid-column: 4 / -1; - grid-row: 1 / span 2; - display: flex; - flex-direction: column; - height: 100%; - min-height: 0; - - dialog[open] & { - animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both; - animation-delay: 0.1s; - } - - @media screen and (max-width: 750px) { - grid-column: 2 / span 2; - grid-row: span 1; - overflow-y: auto; - max-height: 100%; - height: 100%; - } - } - - .quick-add-modal__content > * { - min-height: 0; - } - - .quick-add-modal__content .product-details :is(.view-product-title, .buy-buttons-block) { - flex: 0 0 auto; - } - - .quick-add-modal__content .product-details .variant-picker { - --product-swatches-padding-block-end: 0px; - - flex: 1 1 auto; - overflow-y: auto; - min-height: 0; - padding-block-end: calc( - var(--product-swatches-padding-block-end) + var(--focus-outline-offset) + var(--focus-outline-width) - ); - } - - .quick-add-modal__content .variant-option--swatches { - padding-inline-start: var(--padding-2xs); - } - - .quick-add-modal__content .variant-option--swatches legend { - margin-inline-start: calc(-1 * var(--padding-2xs)); - } - - .quick-add-modal__content:not(:has(.product-information__media)) .product-details { - grid-column: 1 / -1; - } - - .quick-add-modal__content .view-product-title { - display: flex; - padding-block: 0; - /* Prevent overlap between title and close button */ - padding-inline: 0 calc(var(--minimum-touch-target) / 2); - } - - .quick-add-modal__content .view-product-title a { - color: inherit; - text-decoration: none; - text-align: left; - font-size: var(--font-size--2xl); - font-weight: 600; - line-height: 1.2; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; - text-overflow: ellipsis; - transition: color 0.2s var(--animation-easing); - } - - .quick-add-modal__content .view-product-title { - display: flex; - } - - .quick-add-modal__content - .product-details - *:not( - .group-block, - .group-block-content, - .buy-buttons-block, - .buy-buttons-block *, - .view-product-title, - .view-product-title *, - variant-picker, - variant-picker *, - product-price, - product-price *, - product-inventory, - product-inventory *, - .view-more-details__wrapper, - .view-more-details__wrapper * - ) { - @media screen and (min-width: 750px) { - /* stylelint-disable-next-line declaration-no-important */ - display: none !important; - } - } - - .quick-add-modal__content - .group-block:not( - :has( - .buy-buttons-block, - .buy-buttons-block *, - .view-product-title, - .view-product-title *, - variant-picker, - variant-picker *, - product-price, - product-price *, - product-inventory, - product-inventory *, - .view-more-details__wrapper, - .view-more-details__wrapper * - ), - .buy-buttons-block - ) { - display: none; - } - - @media screen and (min-width: 750px) { - .quick-add-modal__content .group-block-content { - gap: min(var(--gap-2xl), var(--gap)); - } - - .quick-add-modal__content .media-gallery__grid { - gap: min(var(--gap-2xs), var(--image-gap)); - border-radius: var(--style-border-radius-popover, 0); - } - - .quick-add-modal__content .media-gallery--grid .product-media img { - border-radius: 0; - } - - .quick-add-modal__content .media-gallery--grid .product-media-container:first-child { - border-top-right-radius: var(--style-border-radius-popover, 0); - } - - .quick-add-modal__content .media-gallery--grid .product-media-container:last-child { - border-bottom-right-radius: var(--style-border-radius-popover, 0); - } - } - - .quick-add-modal__content .product-details > .group-block { - padding: var(--padding-2xl); - max-height: 100%; - } - - .quick-add-modal__content slideshow-slide:not([aria-hidden='false']) { - content-visibility: auto; - } - - .quick-add-modal__content .product-information__media { - width: 100%; - grid-column: 1 / span 1; - grid-row: 1; - position: relative; - top: 0; - animation: fadeIn 0.4s var(--animation-timing-fade-in) both; - - @media screen and (min-width: 750px) { - position: sticky; - grid-column: 1 / 4; - overflow-y: auto; - -ms-overflow-style: none; - scrollbar-width: none; - } - - &::-webkit-scrollbar { - display: none; - } - } - - .quick-add-modal__content .product-information__media media-gallery { - pointer-events: none; - - @media screen and (min-width: 750px) { - position: absolute; - inset: 0; - } - } - - .quick-add-modal media-gallery { - padding: 0; - } - - .quick-add-modal__content .product-information__media slideshow-arrows { - display: none; - } - - .quick-add-modal__content .product-information__media slideshow-container { - display: block; - } - - .quick-add-modal__content .product-information__media slideshow-slides { - display: flex; - flex-direction: column; - gap: var(--gap-2xs); - overflow: visible; - scroll-snap-type: none; - } - - .quick-add-modal__content .product-information__media slideshow-slide { - width: 100%; - flex: none; - scroll-snap-align: unset; - position: relative; - transform: none; - opacity: 1; - visibility: visible; - transition: opacity 0.3s var(--animation-easing); - } - - .quick-add-modal__content .product-information__media slideshow-slide[aria-hidden='true'] { - @media screen and (max-width: 750px) { - display: none; - } - } - - .quick-add-modal__content .product-information__media slideshow-slide:nth-child(1) { - animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both; - } - - .quick-add-modal__content .product-information__media slideshow-slide:nth-child(2) { - animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both; - animation-delay: 0.05s; - } - - .quick-add-modal__content .product-information__media slideshow-slide:nth-child(3) { - animation: fadeSlideIn 0.3s var(--animation-timing-fade-in) both; - animation-delay: 0.1s; - } - - .quick-add-modal__content .product-information__media slideshow-controls { - display: none; - } - - .quick-add-modal__content .sticky-content, - .quick-add-modal__content .sticky-content--desktop { - top: 0; - } - - .quick-add-modal__content .text-block.rte:not(product-price), - .quick-add-modal__content .view-more-details__wrapper { - display: none; - } - - @keyframes fadeSlideIn { - from { - opacity: 0; - transform: translateY(10px); - } - - to { - opacity: 1; - transform: translateY(0); - } - } -{% endstylesheet %} diff --git a/snippets/quick-add.liquid b/snippets/quick-add.liquid deleted file mode 100644 index dddff3652..000000000 --- a/snippets/quick-add.liquid +++ /dev/null @@ -1,324 +0,0 @@ -{%- doc -%} - Renders a quick add component. - - @param {object} product - The product object - @param {string} section_id - The section ID - @param {object} [block] - The block object -{%- enddoc -%} - -{% liquid - assign product_form_id = 'QuickAdd-ProductForm-' | append: product.id | append: '-' | append: block.id - assign add_to_cart_text = 'actions.add' | t - - # Logic to determine which variant to use (matching swatch selection logic from product-card) - assign variant_to_use = product.selected_or_first_available_variant - assign combined_listing_count = product.options_with_values | map: 'values' | map: 'product_url' | compact | size - - unless combined_listing_count > 0 - assign first_image = product.media.first - assign variant_images = product.images | where: 'attached_to_variant?', true - # Get swatchable options (options that have swatch values) - assign swatch_variant_picker = null - for option in product.options_with_values - assign swatch_count = option.values | map: 'swatch' | compact | size - if swatch_count > 0 - assign swatch_variant_picker = option - break - endif - endfor - - if swatch_variant_picker - assign swatch_count = swatch_variant_picker.values | map: 'swatch' | compact | size - - if swatch_count == 1 - # Single swatch: use that variant - assign variant_to_use = swatch_variant_picker.values.first.variant - elsif swatch_count > 1 - if first_image and variant_images contains first_image - # First image is a variant image - find which variant it belongs to - for option_value in swatch_variant_picker.values - if option_value.variant.featured_media.id == first_image.id - assign variant_to_use = option_value.variant - break - endif - endfor - elsif variant_images.size == 0 - # No variants have images - use first swatch variant - assign variant_to_use = swatch_variant_picker.values.first.variant - endif - # else: First image is NOT a variant image - keep default (selected_or_first_available_variant) - endif - endif - endunless - - if variant_to_use.available - assign can_add_to_cart = true - else - assign can_add_to_cart = false - endif -%} - - - -
    - {%- form 'product', product, id: product_form_id, novalidate: 'novalidate', data-type: 'add-to-cart-form' -%} - - - {% comment %} If there is one variant option but it's swatches or if it's a single variant product, then use add to cart button {% endcomment %} - {%- if product.variants.size == 1 or product.options.size == 1 -%} - {% render 'add-to-cart-button', - add_to_cart_text: add_to_cart_text, - class: 'button quick-add__button quick-add__button--add', - can_add_to_cart: can_add_to_cart, - icon_only_on_mobile: true, - product: product - %} - {%- endif -%} - {%- if product.variants.size > 1 -%} - - {%- endif -%} - {%- endform -%} -
    -
    - -{% stylesheet %} - /* Quick Add */ - .quick-add { - --quick-add-offset: var(--padding-sm); - --quick-add-top: calc(var(--quick-add-offset) + var(--padding-block-start)); - --quick-add-right: calc(var(--quick-add-offset) + var(--padding-inline-end)); - --quick-add-bottom: calc(var(--quick-add-offset) + var(--padding-block-end)); - --quick-add-left: calc(var(--quick-add-offset) + var(--padding-inline-end)); - - position: absolute; - display: var(--quick-add-mobile-display, none); - flex-direction: column; - justify-content: flex-end; - inset: max(var(--quick-add-top), calc((var(--border-radius) + var(--quick-add-top)) * (1 - cos(45deg)))) - max(var(--quick-add-right), calc((var(--border-radius) + var(--quick-add-right)) * (1 - cos(45deg)))) - max(var(--quick-add-bottom), calc((var(--border-radius) + var(--quick-add-bottom)) * (1 - cos(45deg)))) - max(var(--quick-add-left), calc((var(--border-radius) + var(--quick-add-left)) * (1 - cos(45deg)))); - width: auto; - height: auto; - z-index: var(--layer-raised); - cursor: default; - pointer-events: none; - - @media screen and (min-width: 750px) { - --quick-add-offset: var(--padding-md); - - display: var(--quick-add-display, flex); - } - } - - .quick-add .variant-option__button-label input[data-option-available='false'] { - cursor: not-allowed; - } - - .quick-add[class*='color-scheme-'] { - background-color: transparent; - } - - .quick-add__button { - display: grid; - padding: var(--padding-xs); - align-items: center; - background-color: var(--color-background); - color: var(--color-foreground); - border-color: transparent; - box-shadow: var(--shadow-popover); - pointer-events: all; - position: relative; - overflow: hidden; - border-radius: 100px; - - @media screen and (min-width: 750px) { - display: none; - padding: var(--padding-xs) var(--padding-sm); - } - - .quick-add[stay-visible] & { - display: grid; - } - } - - .quick-add__button .add-to-cart-text { - gap: 0; - line-height: 1; - grid-row: 1 / span 1; - grid-column: 1 / span 1; - animation: none; - - @media screen and (min-width: 750px) { - /* offset button padding to show a round button in a collapsed state */ - margin-inline: calc(var(--padding-sm) * -1); - padding-inline: var(--padding-xs); - } - } - - .quick-add__button .add-to-cart-text--added { - position: relative; - grid-row: 1 / span 1; - grid-column: 1 / span 1; - justify-self: end; - line-height: 1; - - @media screen and (min-width: 750px) { - width: 0; - } - } - - .quick-add__button .add-to-cart-text__content { - width: 0; - opacity: 0; - transform: translateX(1em); - transition: width var(--animation-speed) ease-in-out, opacity var(--animation-speed) ease-in-out, - transform var(--animation-speed) ease-in-out; - interpolate-size: allow-keywords; - will-change: width, opacity, transform; - } - - @container (min-width: 99px) { - .quick-add[stay-visible] .add-to-cart-text, - .quick-add__button:is(:focus, :hover) .add-to-cart-text { - gap: var(--gap-2xs); - - @media screen and (min-width: 750px) { - /* offset button padding to show a round button in a collapsed state */ - margin-inline: 0; - padding-inline: 0; - } - } - - .quick-add[stay-visible] .add-to-cart-text__content, - .quick-add__button:is(:focus, :hover) .add-to-cart-text__content { - width: fit-content; - opacity: 1; - transform: translateX(0); - } - } - - .quick-add__button.atc-added .add-to-cart-text { - opacity: 0; - } - - .quick-add__button.atc-added .add-to-cart-text--added { - opacity: 1; - width: auto; - - @supports (width: calc-size(auto, size)) { - width: calc-size(auto, size); - } - } - - .quick-add__button.atc-added .add-to-cart-text { - animation-name: atc-fade-out; - } - - .quick-add__button.atc-added .add-to-cart-text--added { - animation-name: atc-fade-in; - } - - .quick-add__product-form-component { - height: 100%; - } - - .quick-add__product-form-component .shopify-product-form { - display: flex; - justify-content: flex-end; - align-items: flex-end; - container-type: inline-size; - height: 100%; - } - - .quick-add-modal .product-media { - width: 100%; - height: 100%; - } - - .quick-add-modal deferred-media { - display: none; - } - - .quick-add-modal .media-gallery--carousel slideshow-component { - --cursor: default; - } - - @keyframes atc-fade-in { - from { - opacity: 0; - transform: translateX(1em); - position: absolute; - } - - to { - opacity: 1; - transform: translateX(0); - position: inherit; - } - } - - @keyframes atc-fade-out { - from { - opacity: 1; - transform: translateX(0); - position: inherit; - } - - to { - opacity: 0; - transform: translateX(-1em); - position: absolute; - } - } -{% endstylesheet %} diff --git a/snippets/resource-card.liquid b/snippets/resource-card.liquid deleted file mode 100644 index cafab93b0..000000000 --- a/snippets/resource-card.liquid +++ /dev/null @@ -1,288 +0,0 @@ -{%- doc -%} - Renders a card for displaying various resource types (products, collections, articles, pages). - - @param {object} resource - The product or collection resource to render - @param {string} resource_type - The type of resource to render. - @param {string} [collection_thumbnails] - The style of the collection card. Can be 'single' or 'multiple'. Defaults to 'single' - @param {string} [style] - The style of the card. Can be 'default' or 'overlay' - @param {number} [image_width] - The maximum width of the image, value influences the srcset attribute. Defaults to 1200px. - @param {string} [image_aspect_ratio] - The aspect ratio to display the image. Defaults to image's natural ratio - @param {boolean} [image_hover] - Whether to show a secondary image on hover and focus - @param {string} [image_sizes] - The sizes attribute for responsive images. Defaults to 'auto' -{%- enddoc -%} - -{% liquid - if image_aspect_ratio == blank or image_aspect_ratio == 'adapt' - assign ratio = resource.featured_image.aspect_ratio - else - assign ratio = image_aspect_ratio - endif - assign image_width = image_width | default: 1200 - assign widths = '240, 352, 832, 1200' - assign image_sizes = image_sizes | default: 'auto' - assign single_thumbnail_collection = false - if resource_type == 'collection' and collection_thumbnails != 'multiple' - assign single_thumbnail_collection = true - endif - - if resource_type == 'product' and settings.transition_to_main_product - assign featured_media_url = resource.selected_or_first_available_variant.featured_image | image_url: width: image_width - if featured_media_url == blank - assign featured_media_url = resource.featured_media.preview_image | image_url: width: image_width - endif - endif -%} - -{%- if resource_type == 'product' and settings.transition_to_main_product -%} - -{%- endif -%} -
    - - - {{ resource.title }} - - -
    - {%- if resource_type == 'product' or single_thumbnail_collection -%} - {% assign featured_image = resource.featured_image | default: resource.featured_media.preview_image %} - {% liquid - assign primary_focal_point_style = '' - if resource.media[0].presentation.focal_point != blank - assign primary_focal_point_style = 'object-position: ' | append: resource.media[0].presentation.focal_point | append: ';' - endif - %} - {%- if featured_image != blank -%} - {{ - featured_image - | image_url: width: image_width - | image_tag: - loading: 'lazy', - class: 'resource-card__image', - widths: widths, - sizes: image_sizes, - transitionToProduct: settings.transition_to_main_product, - data-media-id: featured_image.id, - style: primary_focal_point_style - }} - {%- if image_hover and resource.media.size > 1 -%} - {% liquid - assign secondary_focal_point_style = '' - if resource.media[1].presentation.focal_point != blank - assign secondary_focal_point_style = 'object-position: ' | append: resource.media[1].presentation.focal_point | append: ';' - endif - %} - {{ - resource.media[1] - | image_url: width: image_width - | image_tag: - loading: 'lazy', - class: 'resource-card__image resource-card__image--secondary', - widths: widths, - sizes: image_sizes, - transitionToProduct: settings.transition_to_main_product, - data-media-id: resource.media[1].id, - style: secondary_focal_point_style - }} - {%- endif -%} - {%- else -%} - - {%- endif -%} - {%- elsif resource_type == 'collection' -%} - {%- if resource.products.size > 0 -%} -
    - {% assign resource_products = resource.products | where: 'featured_image' %} - {% for product in resource_products limit: 4 %} - {{ - product.featured_image - | image_url: width: image_width - | image_tag: loading: 'lazy', class: 'resource-card__collection-image', sizes: image_sizes, widths: widths - }} - {% endfor %} -
    - {%- endif -%} - {%- endif -%} -
    - -
    -

    - {{- resource.title -}} -

    - - {% if resource_type == 'product' %} - {% render 'price', product_resource: resource, show_unit_price: true %} - {% elsif resource_type == 'collection' and single_thumbnail_collection == false %} -

    - {{- 'content.search_results_resource_products_count' | t: count: resource.all_products_count -}} -

    - {% else %} -

    - {{- resource.excerpt | default: resource.content | strip_html | truncate: 65 -}} -

    - {% endif %} -
    -
    -{%- if resource_type == 'product' and settings.transition_to_main_product -%} -
    -{%- endif -%} - -{% stylesheet %} - .resource-card { - --resource-card-secondary-image-opacity: 0; - --resource-card-primary-image-opacity: calc(1 - var(--resource-card-secondary-image-opacity)); - - display: flex; - flex-direction: column; - row-gap: var(--padding-xs); - position: relative; - text-decoration: none; - height: 100%; - opacity: 0; - animation: fadeIn var(--animation-speed-medium) var(--animation-timing-fade-in) forwards; - } - - .resource-card__link { - position: absolute; - inset: 0; - z-index: 1; - } - - .resource-card__content { - display: flex; - flex-direction: column; - color: var(--color-foreground); - gap: var(--padding-3xs); - - .price { - font-weight: 500; - } - } - - .resource-card[data-resource-type='article'] .resource-card__content, - .resource-card[data-resource-type='page'] .resource-card__content { - gap: var(--padding-xs); - } - - .resource-card__image { - aspect-ratio: var(--resource-card-aspect-ratio, auto); - object-fit: cover; - border-radius: var(--resource-card-corner-radius); - opacity: var(--resource-card-primary-image-opacity); - } - - .resource-card__image--secondary { - position: absolute; - top: 0; - opacity: var(--resource-card-secondary-image-opacity); - border-radius: var(--resource-card-corner-radius); - } - - .resource-card__media:empty { - display: none; - } - - .resource-card__image-placeholder { - padding: var(--padding-sm); - font-size: var(--font-size--lg); - line-height: var(--line-height--display-loose); - word-break: break-word; - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - aspect-ratio: var(--resource-card-aspect-ratio, auto); - border-radius: var(--resource-card-corner-radius); - color: var(--color-foreground); - } - - .resource-card__title { - margin-block: 0; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - overflow: hidden; - line-height: 1.3; - } - - .resource-card__title.paragraph { - line-height: 1.3; - } - - .resource-card--overlay { - height: 100%; - - &::before { - content: ''; - position: absolute; - inset: 50% 0 0; - background: var(--gradient-image-overlay); - border-radius: var(--resource-card-corner-radius); - pointer-events: none; - z-index: var(--layer-flat); - } - } - - .resource-card--overlay .resource-card__image { - height: 100%; - } - - .resource-card--overlay .resource-card__content { - position: absolute; - inset: auto 0 0; - padding: var(--padding-lg) var(--padding-lg) var(--padding-sm); - z-index: var(--layer-raised); - } - - .resource-card--overlay .resource-card__title { - color: var(--color-white); - } - - /* Collection images */ - .resource-card__image-wrapper { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: var(--gap-2xs); - } - - .resource-card__collection-image { - aspect-ratio: 1 / 1; - object-fit: cover; - border-radius: calc(var(--card-corner-radius) - (var(--padding-xs) / 2)); - } - - .resource-card__subtext { - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - margin-block-start: 0; - } - - .resource-card__subtext.paragraph { - font-size: var(--font-size--body-sm); - line-height: var(--line-height--body-tight); - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - } - - .resource-card:has(.resource-card__image--secondary) { - &:hover, - &:focus { - --resource-card-secondary-image-opacity: 1; - } - } -{% endstylesheet %} diff --git a/snippets/resource-image.liquid b/snippets/resource-image.liquid deleted file mode 100644 index af6f306c8..000000000 --- a/snippets/resource-image.liquid +++ /dev/null @@ -1,214 +0,0 @@ -{%- doc -%} - Unified Resource Image Component - - Renders responsive images for resource list contexts (featured-blog, collection-card, etc). - Consolidates common image rendering logic across resource components. - - @param {string} content_type - Type of content: 'articles' | 'collections' - @param {object} [image_source] - Image object for articles (auto-determined for collections) - @param {string} parent_block_id - Parent block ID for CSS targeting - @param {object} block_settings - Block settings object - @param {object} [section_settings] - Section settings for layout-aware sizing - @param {string} [block_attributes] - Block shopify attributes for theme editor - - @example - {% render 'resource-image', - content_type: 'articles', - image_source: article.image, - parent_block_id: block.id, - block_settings: block.settings, - section_settings: section.settings, - block_attributes: block.shopify_attributes - %} - @example - {% render 'resource-image', - content_type: 'collections', - image_source: blank, - parent_block_id: block.id, - block_settings: block.settings, - section_settings: section.settings, - block_attributes: block.shopify_attributes - %} -{%- enddoc -%} - -{% liquid - # Parameter validation and defaults - assign content_type = content_type | default: 'collections' - assign parent_block_id = parent_block_id | default: '' - assign block_settings = block_settings | default: empty - assign section_settings = section_settings | default: empty - assign block_attributes = block_attributes | default: '' - - # Early return if required parameters missing - unless parent_block_id != blank and block_settings != empty - echo '' - break - endunless - - # Determine image source based on content type - if content_type == 'articles' - assign image_resource = image_source - elsif content_type == 'collections' - assign collection = closest.collection - assign image_resource = collection.image - if image_resource == blank - assign image_resource = collection.products.first.featured_image - endif - else - assign image_resource = image_source - endif - - # Calculate aspect ratio - assign ratio = 1 - case block_settings.image_ratio - when 'landscape' - assign ratio = '16 / 9' - when 'portrait' - assign ratio = '4 / 5' - when 'square' - assign ratio = '1 / 1' - when 'adapt' - assign ratio = image_resource.aspect_ratio - endcase - - if ratio == 0 or ratio == null - assign ratio = 1 - endif - - # Generate responsive image attributes - assign sizes = '(min-width: 750px) 50vw, 100vw' - assign lazy_sizes = 'auto, ' | append: sizes - assign loading = 'eager' - - # Layout-aware sizing for resource lists - if section_settings.layout_type - case section_settings.layout_type - when 'grid', 'carousel' - assign calculated_width = 100 | divided_by: section_settings.columns | append: 'vw' - assign sizes = '(min-width: 750px) [calc-width], 100vw' | replace: '[calc-width]', calculated_width - when 'editorial', 'bento' - assign loading = 'lazy' - assign sizes = lazy_sizes - endcase - endif - - assign widths = '240, 352, 832, 1200, 1600, 1920, 2560, 3840' - - # Generate placeholder info based on content type - if content_type == 'articles' - assign placeholder_prefix = 'blog-apparel-' - assign placeholder_variants = 3 - elsif content_type == 'collections' - assign placeholder_prefix = 'collection-apparel-' - assign placeholder_variants = 4 - else - assign placeholder_prefix = 'detailed-apparel-' - assign placeholder_variants = 3 - endif - - # Calculate placeholder variant from parent block ID - assign block_parts = parent_block_id | split: '-' - assign content_index = block_parts.last | default: 0 - assign variant = content_index | modulo: placeholder_variants | plus: 1 - assign placeholder_name = placeholder_prefix | append: variant -%} - -{% comment %} Apply aspect ratio to parent component {% endcomment %} -{% style %} - {% if content_type == 'articles' %} - .featured-blog-posts-card[data-block-id="{{ parent_block_id }}"] { - --ratio: {{ ratio }}; - } - {% elsif content_type == 'collections' %} - .collection-card[data-block-id="{{ parent_block_id }}"] { - --ratio: {{ ratio }}; - } - {% endif %} -{% endstyle %} - -{% if image_resource != blank %} - -{% else %} - -{% endif %} - -{% stylesheet %} - .resource-image { - position: relative; - display: flex; - width: 100%; - height: 100%; - z-index: var(--layer-base); - overflow: hidden; - max-width: 100%; - max-height: 100%; - aspect-ratio: var(--ratio); - } - - .resource-image .image-block__image { - object-fit: cover; - width: 100%; - height: 100%; - } - - .resource-image--placeholder { - width: 100%; - height: 100%; - } -{% endstylesheet %} diff --git a/snippets/resource-list-carousel.liquid b/snippets/resource-list-carousel.liquid deleted file mode 100644 index 2dc0bc1ca..000000000 --- a/snippets/resource-list-carousel.liquid +++ /dev/null @@ -1,61 +0,0 @@ -{%- doc -%} - Renders a carousel of predictive search results cards - - @param {string} ref - The ref of the slideshow - @param {object} slides - An array of HTML for the slides to display in the carousel - @param {number} slide_count - The number of slides to display in the carousel - @param {object} settings - The block or sections settings from the parent block/section. - @param {string} [slide_width_max] - The maximum width of the slides in the carousel. - - @example - {% render 'resource-list-carousel', slides: slides, slide_count: slide_count, settings: block.settings %} -{%- enddoc -%} - -{% liquid - assign slideshow_ref = ref | default: 'resourceListCarousel' - if settings.section_width == 'page-width' - assign slideshow_gutters = 'start end' - else - assign slideshow_gutters = null - endif -%} - -{% capture slides %} - {% for item in slides limit: slides.size %} - {% render 'slideshow-slide' - index : forloop.index0, - children : item, - class : 'resource-list__slide' - %} - {% endfor %} -{% endcapture %} - -{% if settings.icons_style != 'none' %} - {% capture slideshow_arrows %} - {% render 'slideshow-arrows', icon_style: settings.icons_style, icon_shape: settings.icons_shape %} - {% endcapture %} -{% endif %} - - diff --git a/snippets/resource-list.liquid b/snippets/resource-list.liquid deleted file mode 100644 index 975597b56..000000000 --- a/snippets/resource-list.liquid +++ /dev/null @@ -1,176 +0,0 @@ -{%- doc -%} - Resource List Component - - Renders a complete resource list with automatic layout switching. - Supports grid, bento, carousel, and editorial layouts with mobile fallbacks. - - @param {string} list_items - Raw HTML string of list items for grid layout - @param {object} list_items_array - Array of list item HTML strings for complex layouts - @param {object} settings - Section settings object containing layout configuration - @param {string} [carousel_ref] - Base reference name for carousel components (default: 'resourceListCarousel') - @param {number} slide_count - Number of slides for carousel layouts - @param {string} content_type - Type of content: 'products' | 'collections' | 'articles' - @param {string} [test_id] - Data test ID for the main resource list - - @example - {% render 'resource-list', - list_items: list_items, - list_items_array: list_items_array, - settings: section.settings, - carousel_ref: 'featuredBlog', - slide_count: max_items, - content_type: 'articles', - test_id: 'collections-list-grid' - %} - - Expected `settings` object properties: - - layout_type: 'grid' | 'bento' | 'carousel' | 'editorial' - - columns: Number of columns for grid/carousel - - mobile_columns: Number of columns on mobile - - columns_gap: Gap between columns in pixels - - rows_gap: Gap between rows in pixels (grid only) - - bento_gap: Gap for bento layout in pixels - - mobile_card_size: Mobile card size for carousel - - carousel_on_mobile: Boolean for mobile carousel fallback -{%- enddoc -%} - -{% liquid - assign list_items = list_items | default: '' - assign list_items_array = list_items_array | default: empty - assign settings = settings | default: empty - assign carousel_ref = carousel_ref | default: 'resourceListCarousel' - assign slide_count = slide_count | default: 0 - assign content_type = content_type | default: 'collections' - assign test_id = test_id | default: '' - - unless settings != empty - echo '' - break - endunless - - assign layout_type = settings.layout_type | default: 'grid' - assign columns = settings.columns | default: 3 - assign mobile_columns = settings.mobile_columns | default: 2 - assign columns_gap = settings.columns_gap | default: 16 - assign rows_gap = settings.rows_gap | default: 16 - assign bento_gap = settings.bento_gap | default: 16 - assign mobile_card_size = settings.mobile_card_size | default: '60cqw' - assign slide_width_max = '450px' - - case layout_type - when 'grid' - assign resource_list_classes = 'resource-list--grid' - capture resource_list_styles - echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;' - echo '--resource-list-row-gap-desktop: ' | append: rows_gap | append: 'px;' - echo '--resource-list-columns: repeat(' | append: columns | append: ', 1fr);' - echo '--resource-list-columns-mobile: repeat(' | append: mobile_columns | append: ', 1fr);' - echo '--column-count-mobile: ' | append: mobile_columns | append: ';' - endcapture - - when 'bento' - assign resource_list_classes = 'resource-list--bento' - capture resource_list_styles - echo '--resource-list-column-gap-desktop: ' | append: bento_gap | append: 'px;' - echo '--bento-gap: var(--resource-list-column-gap);' - endcapture - - when 'carousel' - assign resource_list_classes = 'resource-list__carousel' - capture resource_list_styles - echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;' - echo '--column-count: ' | append: columns | append: ';' - echo '--column-count-mobile: 1;' - echo '--mobile-card-size: ' | append: mobile_card_size | append: ';' - endcapture - - when 'editorial' - assign resource_list_classes = 'resource-list--editorial' - capture resource_list_styles - echo '--resource-list-column-gap-desktop: ' | append: columns_gap | append: 'px;' - endcapture - endcase - - # Trim whitespace from styles - assign resource_list_styles = resource_list_styles | strip -%} - -
    - {% case settings.layout_type %} - {% when 'grid' %} - {{ list_items }} - - {% when 'bento' %} - {% render 'bento-grid', items: list_items_array %} - - {% when 'carousel' %} - {% render 'resource-list-carousel', - ref: carousel_ref, - slides: list_items_array, - slide_count: slide_count, - settings: settings, - slide_width_max: slide_width_max - %} - - {% when 'editorial' %} - {% case content_type %} - {% when 'products' %} - {% render 'editorial-product-grid', items: list_items_array %} - {% when 'articles' %} - {% render 'editorial-blog-grid', items: list_items_array %} - {% else %} - {% render 'editorial-collection-grid', items: list_items_array %} - {% endcase %} - {% endcase %} -
    - -{% comment %} Mobile carousel for non-carousel layouts {% endcomment %} -{% if settings.layout_type != 'carousel' and settings.carousel_on_mobile %} - {% liquid - assign mobile_carousel_gap = settings.columns_gap | default: 16 - if settings.layout_type == 'bento' - assign mobile_carousel_gap = settings.bento_gap | default: 16 - endif - %} - - -{% endif %} diff --git a/snippets/scripts.liquid b/snippets/scripts.liquid deleted file mode 100644 index 79ea774b9..000000000 --- a/snippets/scripts.liquid +++ /dev/null @@ -1,283 +0,0 @@ - - -{% if settings.transition_to_main_product %} - {% # theme-check-disable ParserBlockingScript %} - - {% # theme-check-enable %} -{% endif %} - - - - - - - - - -{% if template.name == 'collection' or template.name == 'search' %} - - - - -{% endif %} - - - - - - - -{% if settings.show_add_discount_code %} - -{% endif %} - - - - - - - - - - - - - - - - - - - - -{% if localization.available_countries.size > 1 or localization.available_languages.size > 1 %} - -{% endif %} - -{% if template == 'product' %} - -{% endif %} - -{% if settings.transition_to_main_product %} - -{% endif %} - - - - diff --git a/snippets/search-modal.liquid b/snippets/search-modal.liquid deleted file mode 100644 index 3bde8a24f..000000000 --- a/snippets/search-modal.liquid +++ /dev/null @@ -1,109 +0,0 @@ - - - - - {% render 'predictive-search', - input_id: 'cmdk-input', - search_test_id: 'search-component--modal', - products_test_id: 'products-list-default--modal' - %} - - - -{% stylesheet %} - /* Search modal style */ - .search-modal { - --search-border-radius: var(--style-border-radius-popover); - --search-border-width: var(--style-border-width); - } - - .search-modal__button { - display: flex; - align-items: center; - justify-content: center; - } - - .search-modal__content { - /* Approx set the top so when the content is at max height, the modal is centered */ - --modal-top-margin: calc(50dvh - var(--modal-max-height) / 2 - 2rem); - --modal-width: 66dvw; - - padding: 0; - border: var(--style-border-popover); - - @media screen and (min-width: 750px) { - width: var(--modal-width); - margin-block-start: var(--modal-top-margin); - overflow: hidden; - } - } - - /* Hide the default dialog backdrop on small screens */ - @media screen and (max-width: 749px) { - .search-modal__content::backdrop { - display: none; - } - } - - .dialog-modal[open].search-modal__content { - transform-origin: bottom center; - animation: search-element-slide-in-bottom 300ms var(--ease-out-quad) forwards; - border-radius: var(--search-border-radius); - box-shadow: var(--shadow-popover); - - @media screen and (max-width: 749px) { - border-radius: 0; - } - } - - .dialog-modal.search-modal__content.dialog-closing { - animation: search-element-slide-out-bottom 200ms var(--ease-out-quad) forwards; - } - - .search-modal__content[open] { - display: flex; - } - - .search-modal__content :is(.predictive-search-dropdown, .predictive-search-form__content-wrapper) { - position: relative; - } - - /* Predictive search header tweaks for small screens */ - @media screen and (max-width: 749px) { - .dialog-modal - .predictive-search-form__header:has( - .predictive-search__reset-button:not(.predictive-search__reset-button[hidden]) - )::before { - content: ''; - position: absolute; - right: calc(var(--padding-sm) + var(--minimum-touch-target)); - top: 0; - bottom: 0; - width: var(--border-width-sm); - background-color: var(--color-border); - } - - .dialog-modal - .predictive-search-form__header:has( - .predictive-search__reset-button:not(.predictive-search__reset-button[hidden]) - ) - > .predictive-search__close-modal-button { - &::before { - content: none; - } - } - } -{% endstylesheet %} diff --git a/snippets/search.liquid b/snippets/search.liquid deleted file mode 100644 index 271471c15..000000000 --- a/snippets/search.liquid +++ /dev/null @@ -1,52 +0,0 @@ -{%- doc -%} - Renders the search action button. - - @param {string} [style] - The style of the search action. - @param {string} [class] - Additional classes for the search action. - - @example - {% render 'search', style: 'default', class: 'custom-class' %} -{%- enddoc -%} - -{% unless style == 'none' %} - - - -{% endunless %} - -{% stylesheet %} - .search-action { - --search-border-radius: var(--style-border-radius-inputs); - --search-border-width: var(--style-border-width-inputs); - - display: flex; - } - - .header__column--center .search-action { - width: auto; - flex-grow: 1; - } - - :is(.header__column--left, .header__column--center) .search-action { - @media screen and (min-width: 750px) { - margin-inline: calc(var(--padding-lg) * -1); - } - } - - .header__column--right .search-action { - @media screen and (min-width: 750px) { - margin-inline: calc(var(--gap-md) * -1) calc(var(--gap-xs) * -1); - } - } -{% endstylesheet %} diff --git a/snippets/section.liquid b/snippets/section.liquid deleted file mode 100644 index 1bb190b59..000000000 --- a/snippets/section.liquid +++ /dev/null @@ -1,97 +0,0 @@ -{%- doc -%} - Renders a wrapper section - - @param {section} section - The section object - @param {string} children - The children of the section -{%- enddoc -%} - -
    -
    -
    - {% render 'background-media', - background_media: section.settings.background_media, - background_video: section.settings.video, - background_video_position: section.settings.video_position, - background_image: section.settings.background_image, - background_image_position: section.settings.background_image_position - %} -
    - -
    - {% if section.settings.toggle_overlay %} - {% render 'overlay', settings: section.settings, layer: '0' %} - {% endif %} - -
    - {{ children }} -
    -
    -
    - -{% stylesheet %} - .section-wrapper { - --section-height-offset: 0px; - } - - .section[data-shopify-visual-preview] { - min-height: var(--section-preview-height); - padding-top: 0; - } - - .section[data-shopify-visual-preview] .custom-section-background { - display: none; - } - - body:has(> #header-group > .header-section > #header-component[transparent]):not( - :has(> #header-group > .header-section + .shopify-section) - ) - > main - > .section-wrapper:first-child { - --section-height-offset: var(--header-group-height, 0); - } - - .custom-section-background { - grid-column: 1 / -1; - } - - .custom-section-content { - z-index: var(--layer-flat); - } -{% endstylesheet %} diff --git a/snippets/size-style.liquid b/snippets/size-style.liquid deleted file mode 100644 index 1b863451a..000000000 --- a/snippets/size-style.liquid +++ /dev/null @@ -1,33 +0,0 @@ -{%- comment -%} - Intended for blocks and sections that provide values for all the referenced settings. - Accepts: - settings: {block.settings || section.settings} -{%- endcomment -%} - -{%- if settings.width == 'custom' -%} - --size-style-width: - {{- settings.custom_width }}%; -{%- elsif settings.width == 'fill' -%} - --size-style-width: 100%; -{%- else -%} - --size-style-width: {{ settings.width }}; -{%- endif -%} - -{%- if settings.height == 'custom' -%} - --size-style-height: - {{- settings.custom_height }}%; -{%- elsif settings.height == 'fill' -%} - --size-style-height: 100%; -{%- else -%} - --size-style-height: {{ settings.height }}; -{%- endif -%} - -{% if settings.width_mobile == 'custom' %} - --size-style-width-mobile: - {{- settings.custom_width_mobile }}%; --size-style-width-mobile-min: - {{- settings.custom_width_mobile }}%; -{%- elsif settings.width_mobile == 'fill' -%} - --size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem; -{%- elsif settings.width_mobile == 'fit-content' -%} - --size-style-width-mobile: {{ settings.width_mobile }}; --size-style-width-mobile-min: {{ settings.width_mobile }}; -{%- endif -%} diff --git a/snippets/skip-to-content-link.liquid b/snippets/skip-to-content-link.liquid deleted file mode 100644 index 15d8e34e5..000000000 --- a/snippets/skip-to-content-link.liquid +++ /dev/null @@ -1,16 +0,0 @@ -{%- doc -%} - Renders a skip to content link, visible on focus only. - Parent element must have position: relative to ensure proper positioning. - - @param {string} href - The URL to skip to, usually an id like "#MainContent". - @param {string} text - The text to display, in the form of a translation key for a locale file. - - @example - {% render 'skip-to-content-link', href: '#MainContent', text: 'Skip to main content' %} -{%- enddoc -%} - - {{ text | t }} - diff --git a/snippets/slideshow-arrow.liquid b/snippets/slideshow-arrow.liquid deleted file mode 100644 index 70c511a9e..000000000 --- a/snippets/slideshow-arrow.liquid +++ /dev/null @@ -1,49 +0,0 @@ -{%- doc -%} - Renders a slideshow arrow control - - @param {string} action - { 'previous' | 'next' } The action to perform when the arrow is clicked. - @param {string} [icon_style] - { 'arrow' | 'chevron' } The style of the icon, defaults to 'arrow'. - @param {string} [icon_shape] - { 'none' | 'circle' | 'square' } The shape of the icon background, defaults to 'none'. - @param {string} [icon_size] - { 'small' | 'medium' | 'large' } The size of the icon, defaults to 'medium'. - - @example - {%- render 'slideshow-arrow', action: 'previous' -%} -{%- enddoc -%} - -{%- liquid - assign icon_name = 'arrow' - assign style = icon_style | default: 'arrow' - assign shape = icon_shape | default: 'none' - - if icon_style contains 'chevron' - assign icon_name = 'caret' - endif - - if icon_style contains 'large' - assign icon_size = 'large' - endif --%} - - diff --git a/snippets/slideshow-arrows.liquid b/snippets/slideshow-arrows.liquid deleted file mode 100644 index 5f32be972..000000000 --- a/snippets/slideshow-arrows.liquid +++ /dev/null @@ -1,29 +0,0 @@ -{%- doc -%} - Renders arrow controls for a slideshow component. - Assumes arrows are placed on top of media. - When icon shape is 'none', component uses mixed-blend-mode to ensure visibility. - - @param {string} [class] - The class name to apply to the slideshow-arrows component - @param {string} [icon_style] - The style of the icon, defaults to 'arrow' - @param {string} [icon_shape] - The shape of the icon background (none, circle, square), defaults to 'none' - @param {string} [arrows_position] - { 'left' | 'center' | 'right' } The position of the arrows, defaults to 'center' - - @example - {%- render 'slideshow-arrows' -%} -{%- enddoc -%} - -{%- liquid - if arrows_position == null - assign arrows_position = 'center' - endif --%} - - - {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: icon_shape -%} - {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: icon_shape -%} - diff --git a/snippets/slideshow-controls.liquid b/snippets/slideshow-controls.liquid deleted file mode 100644 index 89f9badec..000000000 --- a/snippets/slideshow-controls.liquid +++ /dev/null @@ -1,191 +0,0 @@ -{%- doc -%} - Renders controls for a slider component - - @param {string} [style] - { 'dots' | 'counter' | 'thumbnails' | 'none' } The display style of the controls - @param {boolean} [autoplay] - Whether the controls will display an autoplay option - @param {number} [item_count] - The total number of slides - @param {boolean} [show_arrows] - Whether the controls will display arrows - @param {boolean} [arrows_on_media] - Whether the controls will display as floating icons on the media - @param {boolean} [controls_on_media] - Whether the controls will display as floating controls on the media - @param {media[]} [thumbnails] - Array of media to be displayed as thumbnails, sorted. - @param {string} [pagination_position] - { 'left' | 'center' | 'right' } Sets the pagination position, defaults to 'center' if none passed - @param {string} [icon_style] - The style of the icon, defaults to 'arrow' - @param {string} [shape] - The shape of the control, defaults to 'square' - @param {string} [aspect_ratio] - The aspect ratio of thumbnails, if applicable. defaults to 'adapt' - @param {string} [class] - Additional classes to apply to the controls - @param {boolean} [secondary] - Whether the controls are secondary - - @example - {%- render 'slideshow-controls', style: 'dots', item_count: 10 -%} -{%- enddoc -%} - -{%- liquid - if aspect_ratio == null - assign aspect_ratio = 'adapt' - endif - - if pagination_position == null - assign pagination_position = 'center' - endif - - assign show_arrows_separately = false - if style == 'thumbnails' and arrows_on_media == false - assign show_arrows_separately = true - # Specific case - we want to show the arrows with the thumbnails if everything is off media and centered. - if controls_on_media == false and pagination_position == 'center' - assign show_arrows_separately = false - endif - elsif controls_on_media == true and arrows_on_media == false - assign show_arrows_separately = true - endif - - if pagination_position == 'left' or pagination_position == 'right' - assign scroll_mode = 'vertical' - else - assign scroll_mode = 'horizontal' - endif --%} - - - {% if show_arrows_separately == false and show_arrows and pagination_position != 'left' %} -
    - {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%} - - {% if pagination_position == 'right' %} - {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%} - {% endif %} -
    - {% endif %} - - {% if autoplay %} - - - {% endif %} - - {% case style %} - {% when 'thumbnails' %} - -
    - {% for media in thumbnails %} - - {% endfor %} -
    -
    - {% when 'counter' %} -
    - 1/{{ item_count -}} -
    - {% when 'dots' %} -
      - {% for i in (1..item_count) %} -
    1. - -
    2. - {% endfor %} -
    - {% endcase %} - - {% if show_arrows_separately == false and show_arrows and pagination_position != 'right' %} -
    - {% if pagination_position == 'left' %} - {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%} - {% endif %} - - {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%} -
    - {% endif %} -
    - -{% if show_arrows_separately and show_arrows %} -
    - {%- render 'slideshow-arrow', action: 'previous', icon_style: icon_style, icon_shape: shape -%} - {%- render 'slideshow-arrow', action: 'next', icon_style: icon_style, icon_shape: shape -%} -
    -{% endif %} diff --git a/snippets/slideshow-slide.liquid b/snippets/slideshow-slide.liquid deleted file mode 100644 index c6f7f1f7a..000000000 --- a/snippets/slideshow-slide.liquid +++ /dev/null @@ -1,42 +0,0 @@ -{%- doc -%} - Renders a slideshow slide component. - - @param {number} index - the index of the slide - @param {string} [children] - The content of the slideshow slide - @param {string} [class] - HTML class attribute of the slideshow slide - @param {string} [style] - HTML style attribute of the slideshow slide - @param {string} [attributes] - Additional HTML attributes to add to the slideshow slide - @param {boolean} [hidden] - Hidden slides will not be shown in the slideshow - @param {string} [slide_id] - The unique id assigned to the slide amongst all slides in the slideshow - @param {string} [media_fit] - { 'cover', 'contain' } - CSS property for how the media should be fit in the slide - - @example - {% render 'slideshow-slide', index: 0, children: imageElement, slide_id: 'slide-1', hidden: false, media_fit: 'cover' %} -{%- enddoc -%} - -{%- liquid - assign class = class | strip | strip_newlines - assign style = style | strip | strip_newlines --%} - - diff --git a/snippets/slideshow.liquid b/snippets/slideshow.liquid deleted file mode 100644 index 28aa284e7..000000000 --- a/snippets/slideshow.liquid +++ /dev/null @@ -1,77 +0,0 @@ -{%- doc -%} - Renders a slideshow component. - Condiional component and slideshow controls. - - @param {object[]} slides - the slides of the slideshow - @param {string} [ref] - the ref of the slideshow component - @param {string} [class] - HTML class attribute of the slideshow component - @param {string} [controls] - the controls of the slideshow component - @param {string} [style] - HTML style attribute of the slideshow component - @param {boolean} [autoplay] - whether the slideshow will autoplay - @param {number} [autoplay_speed] - the speed of the slideshow autoplay - @param {boolean} [auto_hide_controls] - whether to hide slideshow-controls when the scroller is smaller than the viewport - @param {boolean} [infinite] - whether the slideshow will loop - @param {number} [initial_slide] - the 0-based index of the initial slide, defaults to 0 - @param {string} [slideshow_gutters] - the gutter positions to render. Set width with CSS variables --gutter-slide-width - @param {number} [slide_count] - the total number of slides - @param {string} [slide_size] - the height of the slides - @param {boolean} [show_arrows] - whether the slideshow will render a slideshow-arrows component - @param {string} [slideshow_arrows] - a custom slideshow-arrows component to render instead of the default - @param {string} [icon_style] - The style of the icon, defaults to 'arrow' - @param {string} [arrows_position] - The position of the arrows, defaults to 'bottom' - @param {string} [attributes] - Additional attributes to add to the slideshow component - @param {boolean} [header] - The title of the slideshow - - @example - {% render 'slideshow', slides: slides, slide_count: collection.products.size, ref: 'mobileSlideshow' %} -{%- enddoc -%} - -{% assign class = class | strip %} -{% assign style = style | strip %} - - - {% if header != blank %} - {{ header }} - {% endif %} - - {% if show_arrows and disabled != true %} - {% render 'slideshow-arrows', icon_style: icon_style, arrows_position: arrows_position %} - {% endif %} - {% if slideshow_arrows and disabled != true %} - {{ slideshow_arrows }} - {% endif %} - - {{ slides }} - - - {{ controls }} - diff --git a/snippets/sorting.liquid b/snippets/sorting.liquid deleted file mode 100644 index 6f9bb46ce..000000000 --- a/snippets/sorting.liquid +++ /dev/null @@ -1,361 +0,0 @@ -{%- doc -%} - Renders the sorting component. - - @param {object} results - The results of the search - @param {string} sort_by - The current sort by - @param {string} filter_style - The filter style - @param {string} [suffix] - { 'desktop' | 'mobile' | 'overflow' } Used on `form` attributes to connect inputs to a form[id] - @param {string} [sort_position] - { 'desktop' | 'mobile' } Used in a data-testID selector for automated testing - @param {boolean} should_use_select_on_mobile - Whether to use a select element for the sorting component on mobile - @param {string} section_id - The section ID -{%- enddoc -%} - - - {% liquid - assign default_sort_by = results.default_sort_by - for option in results.sort_options - if option.value == sort_by - assign status = option.name - endif - endfor - %} - - - - -
    - - - {% for option in results.sort_options %} - - {% endfor %} - -
    -
    -
    - -{% stylesheet %} - .sorting-filter__container { - display: flex; - align-items: center; - justify-content: space-between; - padding-inline: var(--drawer-padding) 0; - padding-block: var(--padding-sm); - margin-inline-end: var(--margin-md); - position: relative; - } - - .sorting-filter__container .facets__label { - font-size: var(--font-h4--size); - } - - .sorting-filter__select-wrapper { - display: flex; - position: relative; - border-radius: var(--variant-picker-button-radius); - align-items: center; - overflow: clip; - padding: var(--padding-2xs) var(--padding-xs); - } - - .sorting-filter__select-wrapper:has(:focus-visible) { - outline: var(--focus-outline-width) solid currentcolor; - outline-offset: var(--focus-outline-offset); - } - - .sorting-filter__select-wrapper:has(:focus-visible) .sorting-filter__select { - outline: none; - } - - .sorting-filter__container .sorting-filter__select { - appearance: none; - border: 0; - margin: 0; - cursor: pointer; - width: 100%; - padding-inline-end: var(--icon-size-2xs); - text-align: right; - - /* Needed for Safari */ - text-align-last: right; - } - - .sorting-filter__select .icon { - position: absolute; - right: var(--padding-md); - top: 50%; - transform: translateY(-50%); - width: var(--icon-size-2xs); - height: var(--icon-size-2xs); - pointer-events: none; - } - - .sorting-filter { - @media screen and (min-width: 750px) { - z-index: var(--facets-upper-z-index); - } - } - - .sorting-filter__options { - display: flex; - right: 0; - flex-direction: column; - gap: var(--margin-3xs); - padding: calc(var(--drawer-padding) / 2); - color: var(--color-foreground); - overflow-y: auto; - scrollbar-width: none; - -ms-overflow-style: none; - - &::-webkit-scrollbar { - display: none; - } - } - - .sorting-filter__option { - cursor: pointer; - display: grid; - grid-template-columns: var(--icon-size-sm) 1fr; - gap: var(--margin-2xs); - min-width: 180px; - padding: var(--padding-2xs) calc(var(--drawer-padding) / 2) var(--padding-2xs) var(--padding-2xs); - - &:hover { - border-radius: calc(var(--style-border-radius-popover) / 2); - background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8)); - } - - &:focus { - border-radius: calc(var(--style-border-radius-popover) / 2); - } - } - - .sorting-filter__input { - display: none; - - &:checked + .sorting-filter__checkmark + .sorting-filter__label { - font-weight: 500; - } - } - - .sorting-filter__checkmark { - visibility: hidden; - } - - *:checked ~ .sorting-filter__checkmark { - visibility: visible; - } - - .sorting-filter__label { - cursor: pointer; - pointer-events: none; - } - - .facets-toggle--no-filters .sorting-filter__select-wrapper { - @media screen and (max-width: 749px) { - padding-inline-start: 0; - } - } - - .facets-mobile-wrapper .sorting-filter .facets__panel { - padding-inline: 0; - position: relative; - } - - .facets-mobile-wrapper .sorting-filter .facets__status { - display: none; - } - - .facets-mobile-wrapper:has(> :nth-child(2)) .sorting-filter .sorting-filter__options { - left: 0; - right: unset; - } - - .facets-mobile-wrapper .sorting-filter .facets__label { - margin-inline-end: var(--margin-2xs); - font-size: var(--font-paragraph--size); - color: var(--color-foreground-muted); - } - - .facets-mobile-wrapper .sorting-filter__options { - border-radius: var(--style-border-radius-popover); - position: absolute; - top: 0; - right: 0; - width: max-content; - min-width: var(--facets-panel-min-width); - max-width: var(--facets-panel-width); - max-height: var(--facets-panel-height); - z-index: var(--facets-upper-z-index); - box-shadow: var(--shadow-popover); - border: var(--style-border-popover); - background-color: var(--color-background); - overflow-y: hidden; - padding: var(--padding-sm); - gap: var(--gap-sm); - } - - .facets-toggle .sorting-filter__container { - @media screen and (max-width: 749px) { - padding: 0; - } - } - - .facets-toggle .sorting-filter__container .facets__label { - @media screen and (max-width: 749px) { - display: none; - } - } - - .facets-toggle .sorting-filter::before { - @media screen and (max-width: 749px) { - display: none; - } - } - - .facets--drawer .sorting-filter { - @media screen and (min-width: 750px) { - display: none; - } - } - - .sorting-filter__options { - block-size: 0; - overflow-y: clip; - opacity: 0; - interpolate-size: allow-keywords; - transition: content-visibility var(--animation-speed-slow) allow-discrete, - padding-block var(--animation-speed-slow) var(--animation-easing), - opacity var(--animation-speed-slow) var(--animation-easing), - block-size var(--animation-speed-slow) var(--animation-easing); - } - - details[open] .sorting-filter__options { - opacity: 1; - block-size: auto; - - @starting-style { - block-size: 0; - opacity: 0; - overflow-y: clip; - } - - &:focus-within { - overflow-y: visible; - } - } -{% endstylesheet %} diff --git a/snippets/spacing-padding.liquid b/snippets/spacing-padding.liquid deleted file mode 100644 index 5e00f2319..000000000 --- a/snippets/spacing-padding.liquid +++ /dev/null @@ -1,11 +0,0 @@ -{%- comment -%} - Intended for blocks and sections that provide values for all the referenced settings. - -
    - - Accepts: - settings: {block.settings || section.settings} -{%- endcomment -%} - ---padding-block-start: {{ settings.padding-block-start | default: 0 }}px; --padding-block-end:{{- settings.padding-block-end | default: 0 -}}px; ---padding-inline-start:{{ settings.padding-inline-start | default: 0 }}px; --padding-inline-end:{{- settings.padding-inline-end | default: 0 -}}px; diff --git a/snippets/spacing-style.liquid b/snippets/spacing-style.liquid deleted file mode 100644 index bfbc62173..000000000 --- a/snippets/spacing-style.liquid +++ /dev/null @@ -1,36 +0,0 @@ -{%- doc -%} - Renders CSS variables for spacing (padding and margin) styles with responsive scaling. - Intended for blocks and sections that provide values for all the referenced settings. - - @param {object} settings - The block or section settings object containing spacing values - - @example -
    -{%- enddoc -%} -{%- liquid - assign scale_min = 20 - assign keys = 'padding-block-start,padding-block-end,padding-inline-start,padding-inline-end' | split: ',' - - for key in keys - assign value = settings[key] - - if value != blank - echo '--' - echo key - echo ': ' - - if value > scale_min - echo 'max(' - echo scale_min - echo 'px, calc(var(--spacing-scale) * ' - echo value - echo 'px))' - else - echo value - echo 'px' - endif - - echo ';' - endif - endfor --%} diff --git a/snippets/strikethrough-variant.liquid b/snippets/strikethrough-variant.liquid deleted file mode 100644 index f5e85ee2a..000000000 --- a/snippets/strikethrough-variant.liquid +++ /dev/null @@ -1,11 +0,0 @@ -{% unless product_option.available %} - - {% # 25deg %} - - -{% endunless %} diff --git a/snippets/stylesheets.liquid b/snippets/stylesheets.liquid deleted file mode 100644 index 88668ee40..000000000 --- a/snippets/stylesheets.liquid +++ /dev/null @@ -1,2 +0,0 @@ -{{ 'overflow-list.css' | asset_url | preload_tag: as: 'style' }} -{{ 'base.css' | asset_url | stylesheet_tag: preload: true }} diff --git a/snippets/submenu-font-styles.liquid b/snippets/submenu-font-styles.liquid deleted file mode 100644 index 92d071c7c..000000000 --- a/snippets/submenu-font-styles.liquid +++ /dev/null @@ -1,48 +0,0 @@ -{%- comment -%} - Derives CSS variables from the menu typography settings for 2nd and 3rd level menu items. - Accepts: - settings: {block.settings} -{%- endcomment -%} - ---menu-parent-font-family: var(--font-{{ settings.type_font_primary_link }}--family); --menu-parent-font-style: -var(--font- -{{- settings.type_font_primary_link -}} ---style); --menu-parent-font-weight: var(--font- -{{- settings.type_font_primary_link -}} ---weight); --menu-parent-font-case: -{% if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif %}; -{% case settings.menu_font_style %} - {% when 'regular' %} - --menu-parent-font-size: var(--menu-font-md--size); --menu-parent-font-line-height: - var(--menu-font-md--line-height); --menu-parent-font-color: var(--color-foreground); - --menu-parent-active-font-color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - {% when 'inverse' %} - --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height: - var(--menu-font-sm--line-height); --menu-parent-font-color: rgb(var(--color-foreground-rgb) / - var(--opacity-subdued-text)); --menu-parent-active-font-color: var(--color-foreground); - {% when 'inverse_large' %} - --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height: - var(--menu-font-sm--line-height); --menu-parent-font-color: rgb(var(--color-foreground-rgb) / - var(--opacity-subdued-text)); --menu-parent-active-font-color: var(--color-foreground); -{% endcase %} ---menu-child-font-family: var(--font-{{ settings.type_font_primary_link }}--family); --menu-child-font-style: -var(--font- -{{- settings.type_font_primary_link -}} ---style); --menu-child-font-weight: var(--font- -{{- settings.type_font_primary_link -}} ---weight); --menu-child-font-case: -{% if settings.type_case_primary_link == 'uppercase' %}uppercase{% else %}none{% endif %}; -{% case settings.menu_font_style %} - {% when 'regular' %} - --menu-child-font-size: var(--menu-font-sm--size); --menu-child-font-line-height: var(--menu-font-sm--line-height); - --menu-child-font-color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - --menu-child-active-font-color: var(--color-foreground); - {% when 'inverse' %} - --menu-child-font-size: var(--menu-font-md--size); --menu-child-font-line-height: var(--menu-font-md--line-height); - --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: rgb(var(--color-foreground-rgb) / - var(--opacity-subdued-text)); - {% when 'inverse_large' %} - --menu-child-font-size: var(--menu-font-xl--size); --menu-child-font-line-height: var(--menu-font-xl--line-height); - --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: rgb(var(--color-foreground-rgb) / - var(--opacity-subdued-text)); -{% endcase %} diff --git a/snippets/swatch.liquid b/snippets/swatch.liquid deleted file mode 100644 index a8bf87d28..000000000 --- a/snippets/swatch.liquid +++ /dev/null @@ -1,41 +0,0 @@ -{%- doc -%} - Renders a swatch - - @param {object} swatch - a swatch object - @param {object} [variant_image] - an alternate image - @param {string} [mode] - one of 'unscaled' or 'filter' - - @example - {% render 'swatch', swatch: swatch, variant_image: variant_image, mode: 'unscaled' %} -{%- enddoc -%} - -{% liquid - assign swatch_value = null - if settings.show_variant_image and variant_image - assign swatch_image_width = settings.variant_swatch_width | times: 2 - assign swatch_image_url = variant_image | image_url: width: swatch_image_width - assign swatch_value = 'url(' | append: swatch_image_url | append: ')' - elsif swatch.image - assign swatch_image_url = swatch.image | image_url: width: 80 - assign swatch_value = 'url(' | append: swatch_image_url | append: ')' - elsif swatch.color - assign swatch_value = 'rgb(' | append: swatch.color.rgb | append: ')' - endif - - case mode - when 'unscaled' - assign extra_classes = ' swatch--unscaled' - when 'filter' - assign extra_classes = ' swatch--filter' - when 'pill' - assign extra_classes = ' swatch--pill' - else - assign extra_classes = '' - endcase -%} - - - diff --git a/snippets/tax-info.liquid b/snippets/tax-info.liquid deleted file mode 100644 index 3c16eaee0..000000000 --- a/snippets/tax-info.liquid +++ /dev/null @@ -1,84 +0,0 @@ -{%- comment -%} - Intended for use in a block similar to the text block. - - Accepts: - has_discounts_enabled: {boolean} - whether discounts are enabled -{%- endcomment -%} - - - {%- if cart.duties_included and cart.taxes_included -%} - {%- if shop.shipping_policy.body == blank -%} - {%- if has_discounts_enabled -%} - {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts' | t }} - {%- else -%} - {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy' | t }} - {%- endif -%} - {%- else -%} - {%- if has_discounts_enabled -%} - {{ - 'content.duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html' - | t: link: shop.shipping_policy.url - }} - {%- else -%} - {{ - 'content.duties_and_taxes_included_shipping_at_checkout_with_policy_html' - | t: link: shop.shipping_policy.url - }} - {%- endif -%} - {%- endif -%} - {%- elsif cart.duties_included == false and cart.taxes_included -%} - {%- if shop.shipping_policy.body == blank -%} - {%- if has_discounts_enabled -%} - {{ 'content.duties_and_taxes_included_shipping_at_checkout_without_policy_without_discounts' | t }} - {%- else -%} - {{ 'content.taxes_included_shipping_at_checkout_without_policy' | t }} - {%- endif -%} - {%- else -%} - {%- if has_discounts_enabled -%} - {{ - 'content.duties_and_taxes_included_shipping_at_checkout_with_policy_without_discounts_html' - | t: link: shop.shipping_policy.url - }} - {%- else -%} - {{ 'content.taxes_included_shipping_at_checkout_with_policy_html' | t: link: shop.shipping_policy.url }} - {%- endif -%} - {%- endif -%} - {%- elsif cart.duties_included and cart.taxes_included == false -%} - {%- if shop.shipping_policy.body == blank -%} - {%- if has_discounts_enabled -%} - {{ 'content.duties_included_taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts' | t }} - {%- else -%} - {{ 'content.duties_included_taxes_at_checkout_shipping_at_checkout_without_policy' | t }} - {%- endif -%} - {%- else -%} - {%- if has_discounts_enabled -%} - {{ - 'content.duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html' - | t: link: shop.shipping_policy.url - }} - {%- else -%} - {{ - 'content.duties_included_taxes_at_checkout_shipping_at_checkout_with_policy_html' - | t: link: shop.shipping_policy.url - }} - {%- endif -%} - {%- endif -%} - {%- elsif cart.duties_included == false and cart.taxes_included == false -%} - {%- if shop.shipping_policy.body == blank -%} - {%- if has_discounts_enabled -%} - {{ 'content.taxes_at_checkout_shipping_at_checkout_without_policy_without_discounts' | t }} - {%- else -%} - {{ 'content.taxes_at_checkout_shipping_at_checkout_without_policy' | t }} - {%- endif -%} - {%- else -%} - {%- if has_discounts_enabled -%} - {{ - 'content.taxes_at_checkout_shipping_at_checkout_with_policy_without_discounts_html' - | t: link: shop.shipping_policy.url - }} - {%- else -%} - {{ 'content.taxes_at_checkout_shipping_at_checkout_with_policy_html' | t: link: shop.shipping_policy.url }} - {%- endif -%} - {%- endif -%} - {%- endif -%} - diff --git a/snippets/text.liquid b/snippets/text.liquid deleted file mode 100644 index f5526be2e..000000000 --- a/snippets/text.liquid +++ /dev/null @@ -1,218 +0,0 @@ -{%- doc -%} - Intended for use in a block similar to the text block. - - @param {string} [class] - custom class to define in addition to text-block classes - @param {string} [fallback_text] - fallback text if settings.text does not exist - @param {object} [block] - The block object - @param {string} [width] - width of the text block -{%- enddoc -%} - -{% liquid - assign block_settings = block.settings - assign plain_text = block_settings.text | strip_newlines | strip_html | strip - assign text_width = width | default: block_settings.width - - if block_settings.font_size contains 'heading-lg' or block_settings.font_size contains 'heading-xl' - assign type = 'display' - elsif block_settings.font_size contains 'heading' - assign type = 'heading' - else - assign type = 'body' - endif - if block_settings.type_preset == 'rte' or block_settings.type_preset == 'paragraph' - assign is_rte = true - endif - - capture text_block_classes - if text_width == '100%' - echo 'text-block--align-' | append: block_settings.alignment - if block_settings.max_width == 'none' - echo ' text-block--full-width ' - endif - endif - if block_settings.type_preset == 'custom' - echo ' custom-typography ' - if block_settings.font_size != '' - echo ' custom-font-size ' - endif - if block_settings.color != '' - echo ' custom-color ' - endif - endif - if block_settings.background - echo ' text-block--background ' - endif - if is_rte - echo ' rte ' - endif - endcapture -%} - -{% capture attributes %} - class="{{ class }} spacing-style text-block text-block--{{ block.id }} {{ block_settings.type_preset }} - {{ text_block_classes }} - " - - style=" - {% render 'spacing-padding', settings: block_settings %} - {% render 'typography-style', settings: block_settings %} - --width: {{ text_width }}; - --max-width: var(--max-width--{{ type }}-{{ block_settings.max_width }}); - {% if text_width == "100%" %} - --text-align: {{ block_settings.alignment }}; - {% endif %} - {% if block_settings.background %} - --text-background-color: {{ block_settings.background_color | default: 'rgb(255 255 255 / 1.0)' }}; - --text-corner-radius: {{ block_settings.corner_radius }}px; - --text-padding: max(var(--padding-2xs), calc((var(--text-corner-radius) + var(--padding-xs)) * (1 - cos(45deg)))); - {% endif %} - " - - {{ block.shopify_attributes }} -{% endcapture %} -{% liquid - # {{ attributes }} must be on the immediate HTML parent of the text to preserve - # the click-to-edit connection in the theme editor. Any break between the text, - # including if-statements, will break the connection. - - assign element = 'div' - if is_rte - assign element = 'rte-formatter' - endif -%} - -{% if fallback_text != blank and plain_text == blank %} -
    - {{ fallback_text }} -
    -{% elsif plain_text != blank %} - <{{ element }} {{ attributes }}> - {{ block.settings.text }} - -{% endif %} - -{% stylesheet %} - :root { - --text-align-default: left; - } - - [style*='--horizontal-alignment: center'] .text-block { - --text-align-default: center; - } - - [style*='--horizontal-alignment: flex-end'] .text-block { - --text-align-default: right; - } - - [style*='--horizontal-alignment: flex-start'] > .text-block { - --text-align-default: left; - } - - [style*='--horizontal-alignment: center'] > .text-block { - --text-align-default: center; - } - - [style*='--horizontal-alignment: flex-end'] > .text-block { - --text-align-default: right; - } - - .text-block { - width: var(--width); - max-width: 100%; - display: flex; - flex-direction: column; - align-items: var(--horizontal-alignment); - } - - .text-block > * { - width: var(--width); - max-width: var(--max-width, 100%); - text-align: var(--text-align, var(--text-align-default)); - text-wrap: var(--text-wrap); - } - - .text-block:not(.text-block--full-width).rte, - .text-block:not(.text-block--full-width).paragraph { - /* Safari doesn't support pretty, so fallback to balance */ - text-wrap: balance; - text-wrap: pretty; - } - - .text-block:not(.text-block--full-width):is(.h1, .h2, .h3, .h4, .h5, .h6) { - text-wrap: balance; - } - - /* Hide underline unless text is using paragraph styles. */ - .text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) a { - text-decoration-color: transparent; - } - - .text-block h1, - .text-block.h1 > * { - margin-block: var(--font-h1--spacing); - } - - .text-block h2, - .text-block.h2 > * { - margin-block: var(--font-h2--spacing); - } - - .text-block h3, - .text-block.h3 > * { - margin-block: var(--font-h3--spacing); - } - - .text-block h4, - .text-block.h4 > * { - margin-block: var(--font-h4--spacing); - } - - .text-block h5, - .text-block.h5 > * { - margin-block: var(--font-h5--spacing); - } - - .text-block h6, - .text-block.h6 > * { - margin-block: var(--font-h6--spacing); - } - - .text-block p, - .text-block.p > * { - margin-block: var(--font-paragraph--spacing); - } - - .text-block > *:first-child { - margin-block-start: 0; - } - - .text-block > *:last-child { - margin-block-end: 0; - } - - .text-block--align-center, - .text-block--align-center > * { - margin-inline: auto; - } - - .text-block--align-right, - .text-block--align-right > * { - margin-inline-start: auto; - } - - .text-block--background { - background-color: var(--text-background-color); - border-radius: var(--text-corner-radius); - - /* To avoid text being cropped when using a border radius we add a minimum padding. */ - padding-block-start: max(var(--text-padding), var(--padding-block-start, 0)); - padding-block-end: max(var(--text-padding), var(--padding-block-end, 0)); - padding-inline-start: max(var(--text-padding), var(--padding-inline-start, 0)); - padding-inline-end: max(var(--text-padding), var(--padding-inline-end, 0)); - } - - .custom-color, - .custom-color > :is(h1, h2, h3, h4, h5, h6, p, *) { - color: var(--color); - } -{% endstylesheet %} diff --git a/snippets/theme-editor.liquid b/snippets/theme-editor.liquid deleted file mode 100644 index c34f0907d..000000000 --- a/snippets/theme-editor.liquid +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/snippets/theme-styles-variables.liquid b/snippets/theme-styles-variables.liquid deleted file mode 100644 index cda55ed00..000000000 --- a/snippets/theme-styles-variables.liquid +++ /dev/null @@ -1,566 +0,0 @@ -{% style %} - {%- liquid - assign primary_font_bold = settings.type_body_font | font_modify: 'weight', 'bold' - assign primary_font_italic = settings.type_body_font | font_modify: 'style', 'italic' - assign primary_font_bold_italic = primary_font_bold | font_modify: 'style', 'italic' - %} - - {{ settings.type_body_font | font_face: font_display: 'swap' }} - {{ primary_font_bold | font_face: font_display: 'swap' }} - {{ primary_font_italic | font_face: font_display: 'swap' }} - {{ primary_font_bold_italic | font_face: font_display: 'swap' }} - - {% if settings.type_subheading_font != settings.type_body_font %} - {%- liquid - assign secondary_font_bold = settings.type_subheading_font | font_modify: 'weight', 'bold' - assign secondary_font_italic = settings.type_subheading_font | font_modify: 'style', 'italic' - assign secondary_font_bold_italic = secondary_font_bold | font_modify: 'style', 'italic' - %} - - {{ settings.type_subheading_font | font_face: font_display: 'swap' }} - {{ secondary_font_bold | font_face: font_display: 'swap' }} - {{ secondary_font_italic | font_face: font_display: 'swap' }} - {{ secondary_font_bold_italic | font_face: font_display: 'swap' }} - {% endif %} - - {% if settings.type_heading_font != settings.type_body_font and settings.type_heading_font != settings.type_subheading_font %} - {%- liquid - assign tertiary_font_bold = settings.type_heading_font | font_modify: 'weight', 'bold' - assign tertiary_font_italic = settings.type_heading_font | font_modify: 'style', 'italic' - assign tertiary_font_bold_italic = tertiary_font_bold | font_modify: 'style', 'italic' - %} - - {{ settings.type_heading_font | font_face: font_display: 'swap' }} - {{ tertiary_font_bold | font_face: font_display: 'swap' }} - {{ tertiary_font_italic | font_face: font_display: 'swap' }} - {{ tertiary_font_bold_italic | font_face: font_display: 'swap' }} - {% endif %} - - {% if settings.type_accent_font != settings.type_body_font and settings.type_accent_font != settings.type_subheading_font and settings.type_accent_font != settings.type_heading_font %} - {%- liquid - assign accent_font_bold = settings.type_accent_font | font_modify: 'weight', 'bold' - assign accent_font_italic = settings.type_accent_font | font_modify: 'style', 'italic' - assign accent_font_bold_italic = accent_font_bold | font_modify: 'style', 'italic' - %} - - {{ settings.type_accent_font | font_face: font_display: 'swap' }} - {{ accent_font_bold | font_face: font_display: 'swap' }} - {{ accent_font_italic | font_face: font_display: 'swap' }} - {{ accent_font_bold_italic | font_face: font_display: 'swap' }} - {% endif %} - - :root { - /* Page Layout */ - --sidebar-width: 25rem; - --narrow-content-width: 36rem; - --normal-content-width: 42rem; - --wide-content-width: 46rem; - --narrow-page-width: 90rem; - --normal-page-width: 120rem; - --wide-page-width: 150rem; - - /* Section Heights */ - --section-height-small: 15rem; - --section-height-medium: 25rem; - --section-height-large: 35rem; - - @media screen and (min-width: 40em) { - --section-height-small: 40svh; - --section-height-medium: 55svh; - --section-height-large: 70svh; - } - - @media screen and (min-width: 60em) { - --section-height-small: 50svh; - --section-height-medium: 65svh; - --section-height-large: 80svh; - } - - /* Letter spacing */ - --letter-spacing-sm: 0.06em; - --letter-spacing-md: 0.13em; - - /* Font families */ - --font-body--family: {{ settings.type_body_font.family }}, {{ settings.type_body_font.fallback_families }}; - --font-body--style: {{ settings.type_body_font.style }}; - --font-body--weight: {{ settings.type_body_font.weight }}; - --font-subheading--family: {{ settings.type_subheading_font.family }}, {{ settings.type_subheading_font.fallback_families }}; - --font-subheading--style: {{ settings.type_subheading_font.style }}; - --font-subheading--weight: {{ settings.type_subheading_font.weight }}; - --font-heading--family: {{ settings.type_heading_font.family }}, {{ settings.type_heading_font.fallback_families }}; - --font-heading--style: {{ settings.type_heading_font.style }}; - --font-heading--weight: {{ settings.type_heading_font.weight }}; - --font-accent--family: {{ settings.type_accent_font.family }}, {{ settings.type_accent_font.fallback_families }}; - --font-accent--style: {{ settings.type_accent_font.style }}; - --font-accent--weight: {{ settings.type_accent_font.weight }}; - - /* Margin sizes */ - --font-h1--spacing: 0.25em; - --font-h2--spacing: 0.25em; - --font-h3--spacing: 0.25em; - --font-h4--spacing: 0.25em; - --font-h5--spacing: 0.25em; - --font-h6--spacing: 0.25em; - --font-paragraph--spacing: 0.5em; - - /* Heading colors */ - --font-h1--color: var(--color-foreground-heading); - --font-h2--color: var(--color-foreground-heading); - --font-h3--color: var(--color-foreground-heading); - --font-h4--color: var(--color-foreground-heading); - --font-h5--color: var(--color-foreground-heading); - --font-h6--color: var(--color-foreground-heading); - - /** Z-Index / Layering */ - --layer-section-background: -2; - --layer-lowest: -1; - --layer-base: 0; - --layer-flat: 1; - --layer-raised: 2; - --layer-heightened: 4; - --layer-sticky: 8; - --layer-window-overlay: 10; - --layer-header-menu: 12; - --layer-overlay: 16; - --layer-menu-drawer: 18; - --layer-temporary: 20; - - /* Max-width / Measure */ - --max-width--body-normal: 50ch; - --max-width--body-narrow: 35ch; - - --max-width--heading-normal: 50ch; - --max-width--heading-narrow: 30ch; - - --max-width--display-normal: 20ch; - --max-width--display-narrow: 15ch; - --max-width--display-tight: 5ch; - - /* Letter-spacing / Tracking */ - --letter-spacing--display-tight: -0.03em; - --letter-spacing--display-normal: 0em; - --letter-spacing--display-loose: 0.03em; - - --letter-spacing--heading-tight: -0.03em; - --letter-spacing--heading-normal: 0em; - --letter-spacing--heading-loose: 0.03em; - - --letter-spacing--body-tight: -0.03em; - --letter-spacing--body-normal: 0em; - --letter-spacing--body-loose: 0.03em; - - /* Line height / Leading */ - --line-height: 1; - - --line-height--display-tight: 1; - --line-height--display-normal: 1.1; - --line-height--display-loose: 1.2; - - --line-height--heading-tight: 1.15; - --line-height--heading-normal: 1.25; - --line-height--heading-loose: 1.35; - - --line-height--body-tight: 1.2; - --line-height--body-normal: 1.4; - --line-height--body-loose: 1.6; - - /* Typography presets */ - {% liquid - assign font_sizes = "paragraph, h1, h2, h3, h4, h5, h6" | split: ", " - assign fluid_size_cutoff = 48 - assign absolute_font_size_min = 10 - - comment - Build an array of font sizes and sort it - endcomment - assign font_size_values = '' - for font_size in font_sizes - assign size_setting = 'type_size_[font_size]' | replace: '[font_size]', font_size - assign size_setting_value = settings[size_setting] | times: 1 - - comment - If the font size is less than 100, pad it with a 0 - This is because we end up with an array of strings, which | sort filter can't order "correctly") - endcomment - if size_setting_value < 100 - assign size_setting_value = '0[size_setting_value]' | replace: '[size_setting_value]', size_setting_value - endif - - assign font_size_values = font_size_values | append: '[size_setting_value],' | replace: '[size_setting_value]', size_setting_value - endfor - - assign font_size_values = font_size_values | split: ',' | uniq | sort_natural - - comment - For each font size S, find the next smaller size S-1, and determine the minimum for S - The calculation depends on the size of S-1 (over or under the cutoff) - endcomment - for font_size in font_sizes - assign size_setting = 'type_size_[font_size]' | replace: '[font_size]', font_size - assign font_size_value = settings[size_setting] | times: 1 - assign font_size_string = '[font_size_value]' | replace: '[font_size_value]', font_size_value - assign index = font_size_values | find_index: font_size_string - - if font_size_value >= fluid_size_cutoff - - comment - Calculate the minimum size for each font size - endcomment - assign fluid_font_size_min = font_size_value - - if index == 0 - assign fluid_font_size_min = absolute_font_size_min - else - assign next_font_size_index = index | minus: 1 - assign next_font_size_value = font_size_values[next_font_size_index] - assign next_font_size_value_number = next_font_size_value | times: 1 - - comment - If the next bigger font size under the fluid cutoff, we use keep a 4px buffer - endcomment - if next_font_size_value_number < fluid_size_cutoff - assign fluid_font_size_min = next_font_size_value_number | plus: 4 - if font_size_value < fluid_font_size_min - assign fluid_font_size_min = font_size_value - endif - else - assign fluid_font_size_min = next_font_size_value | times: 1 - endif - endif - - comment - Calculate the fluid and maximum size for each font size - endcomment - assign fluid_size_min_rem = fluid_font_size_min | divided_by: 16.0 - assign fluid_size = font_size_value | times: 0.1 - assign fluid_size_max_rem = font_size_value | divided_by: 16.0 - - echo '--font-size--[font_size]: clamp([fluid_size_min_rem]rem, [fluid_size]vw, [fluid_size_max_rem]rem);' | replace: '[font_size]', font_size | replace: '[fluid_size_min_rem]', fluid_size_min_rem | replace: '[fluid_size]', fluid_size | replace: '[fluid_size_max_rem]', fluid_size_max_rem - else - assign fluid_size_rem = font_size_value | divided_by: 16.0 - echo '--font-size--[font_size]: [fluid_size_rem]rem;' | replace: '[font_size]', font_size | replace: '[fluid_size_rem]', fluid_size_rem - endif - endfor - - assign type_presets = "paragraph, h1, h2, h3, h4, h5, h6" | split: ", " - - for preset_name in type_presets - assign preset_size = '--font-size--[preset_name]' | replace: '[preset_name]', preset_name - assign preset_line_height = 'type_line_height_[preset_name]' | replace: '[preset_name]', preset_name - - if preset_name == 'paragraph' - assign preset_font = '--font-body--family' - assign preset_style = '--font-body--style' - assign preset_weight = '400' - assign preset_case = '--font-body--case' - assign preset_letter_spacing = 'body-normal' - - echo '--font-[preset_name]--weight: [preset_weight];' | replace: '[preset_name]', preset_name | replace: '[preset_weight]', preset_weight - echo '--font-[preset_name]--letter-spacing: var(--letter-spacing--[preset_letter_spacing]);' | replace: '[preset_name]', preset_name | replace: '[preset_letter_spacing]', preset_letter_spacing - else - assign preset_font_id = 'type_font_[preset_name]' | replace: '[preset_name]', preset_name - assign preset_font = '--font-[preset_font]--family' | replace: '[preset_font]', settings[preset_font_id] - assign preset_style = '--font-[preset_font]--style' | replace: '[preset_font]', settings[preset_font_id] - assign preset_weight = '--font-[preset_font]--weight' | replace: '[preset_font]', settings[preset_font_id] - assign preset_case = 'type_case_[preset_name]' | replace: '[preset_name]', preset_name - assign preset_letter_spacing = 'type_letter_spacing_[preset_name]' | replace: '[preset_name]', preset_name - - echo '--font-[preset_name]--weight: var([preset_weight]);' | replace: '[preset_name]', preset_name | replace: '[preset_weight]', preset_weight - echo '--font-[preset_name]--letter-spacing: var(--letter-spacing--[preset_letter_spacing]);' | replace: '[preset_name]', preset_name | replace: '[preset_letter_spacing]', settings[preset_letter_spacing] - endif - - echo '--font-[preset_name]--size: var([preset_size]);' | replace: '[preset_name]', preset_name | replace: '[preset_size]', preset_size - echo '--font-[preset_name]--family: var([preset_font]);' | replace: '[preset_name]', preset_name | replace: '[preset_font]', preset_font - echo '--font-[preset_name]--style: var([preset_style]);' | replace: '[preset_name]', preset_name | replace: '[preset_style]', preset_style - echo '--font-[preset_name]--case: [preset_case];' | replace: '[preset_name]', preset_name | replace: '[preset_case]', settings[preset_case] - echo '--font-[preset_name]--line-height: var(--line-height--[preset_line_height]);' | replace: '[preset_name]', preset_name | replace: '[preset_line_height]', settings[preset_line_height] - endfor - %} - - /* Hardcoded font sizes */ - --font-size--2xs: 0.625rem; - --font-size--xs: 0.8125rem; - --font-size--sm: 0.875rem; - --font-size--md: 1rem; - --font-size--lg: 1.125rem; - --font-size--xl: 1.25rem; - --font-size--2xl: 1.5rem; - --font-size--3xl: 2rem; - --font-size--4xl: 2.5rem; - --font-size--5xl: 3rem; - --font-size--6xl: 3.5rem; - - /* Menu font sizes */ - --menu-font-sm--size: 0.875rem; - --menu-font-sm--line-height: calc(1.1 + 0.5 * min(16 / 14)); - --menu-font-md--size: 1rem; - --menu-font-md--line-height: calc(1.1 + 0.5 * min(16 / 16)); - --menu-font-lg--size: 1.125rem; - --menu-font-lg--line-height: calc(1.1 + 0.5 * min(16 / 18)); - --menu-font-xl--size: 1.25rem; - --menu-font-xl--line-height: calc(1.1 + 0.5 * min(16 / 20)); - --menu-font-2xl--size: 1.75rem; - --menu-font-2xl--line-height: calc(1.1 + 0.5 * min(16 / 28)); - - /* Colors */ - --color-error: #8B0000; - --color-success: #006400; - --color-white: #FFFFFF; - --color-white-rgb: 255 255 255; - --color-black: #000000; - --color-instock: #3ED660; - --color-lowstock: #EE9441; - --color-outofstock: #C8C8C8; - - /* Opacity */ - --opacity-5: 0.05; - --opacity-8: 0.08; - --opacity-10: 0.1; - --opacity-15: 0.15; - --opacity-20: 0.2; - --opacity-25: 0.25; - --opacity-30: 0.3; - --opacity-40: 0.4; - --opacity-50: 0.5; - --opacity-60: 0.6; - --opacity-70: 0.7; - --opacity-80: 0.8; - --opacity-85: 0.85; - --opacity-90: 0.9; - --opacity-subdued-text: var(--opacity-70); - - --shadow-button: 0 2px 3px rgb(0 0 0 / 20%); - --gradient-image-overlay: linear-gradient(to top, rgb(0 0 0 / 0.5), transparent); - - /* Spacing */ - --margin-3xs: 0.125rem; - --margin-2xs: 0.3rem; - --margin-xs: 0.5rem; - --margin-sm: 0.7rem; - --margin-md: 0.8rem; - --margin-lg: 1rem; - --margin-xl: 1.25rem; - --margin-2xl: 1.5rem; - --margin-3xl: 1.75rem; - --margin-4xl: 2rem; - --margin-5xl: 3rem; - --margin-6xl: 5rem; - - --scroll-margin: 50px; - - --padding-3xs: 0.125rem; - --padding-2xs: 0.25rem; - --padding-xs: 0.5rem; - --padding-sm: 0.7rem; - --padding-md: 0.8rem; - --padding-lg: 1rem; - --padding-xl: 1.25rem; - --padding-2xl: 1.5rem; - --padding-3xl: 1.75rem; - --padding-4xl: 2rem; - --padding-5xl: 3rem; - --padding-6xl: 4rem; - - --gap-3xs: 0.125rem; - --gap-2xs: 0.3rem; - --gap-xs: 0.5rem; - --gap-sm: 0.7rem; - --gap-md: 0.9rem; - --gap-lg: 1rem; - --gap-xl: 1.25rem; - --gap-2xl: 2rem; - --gap-3xl: 3rem; - - --spacing-scale-sm: 0.6; - --spacing-scale-md: 0.7; - --spacing-scale-default: 1.0; - - /* Checkout buttons gap */ - --checkout-button-gap: 10px; - - /* Borders */ - --style-border-width: 1px; - --style-border-radius-xs: 0.2rem; - --style-border-radius-sm: 0.6rem; - --style-border-radius-md: 0.8rem; - --style-border-radius-50: 50%; - --style-border-radius-lg: 1rem; - --style-border-radius-pills: {{ settings.pills_border_radius }}px; - --style-border-radius-inputs: {{ settings.inputs_border_radius }}px; - --style-border-radius-buttons-primary: {{ settings.button_border_radius_primary }}px; - --style-border-radius-buttons-secondary: {{ settings.button_border_radius_secondary }}px; - --style-border-width-primary: {{ settings.primary_button_border_width }}px; - --style-border-width-secondary: {{ settings.secondary_button_border_width }}px; - --style-border-width-inputs: {{ settings.input_border_width }}px; - --style-border-radius-popover: {{ settings.popover_border_radius }}px; - --style-border-popover: {{ settings.popover_border_width }}px {{ settings.popover_border }} rgb(var(--color-border-rgb) / {{ settings.popover_border_opacity }}%); - --style-border-drawer: {{ settings.drawer_border_width }}px {{ settings.drawer_border }} rgb(var(--color-border-rgb) / {{ settings.drawer_border_opacity }}%); - --style-border-swatch-opacity: {{ settings.variant_swatch_border_opacity }}%; - --style-border-swatch-width: {{ settings.variant_swatch_border_width }}px; - --style-border-swatch-style: {{ settings.variant_swatch_border_style }}; - - /* Animation */ - --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1); - --ease-out-quad: cubic-bezier(0.32, 0.72, 0, 1); - --animation-speed-fast: 0.0625s; - --animation-speed: 0.125s; - --animation-speed-slow: 0.2s; - --animation-speed-medium: 0.15s; - --animation-easing: ease-in-out; - --animation-slideshow-easing: cubic-bezier(0.4, 0, 0.2, 1); - --drawer-animation-speed: 0.2s; - --animation-values-slow: var(--animation-speed-slow) var(--animation-easing); - --animation-values: var(--animation-speed) var(--animation-easing); - --animation-values-fast: var(--animation-speed-fast) var(--animation-easing); - --animation-values-allow-discrete: var(--animation-speed) var(--animation-easing) allow-discrete; - --animation-timing-hover: cubic-bezier(0.25, 0.46, 0.45, 0.94); - --animation-timing-active: cubic-bezier(0.5, 0, 0.75, 0); - --animation-timing-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); - --animation-timing-default: cubic-bezier(0, 0, 0.2, 1); - --animation-timing-fade-in: cubic-bezier(0.16, 1, 0.3, 1); - --animation-timing-fade-out: cubic-bezier(0.4, 0, 0.2, 1); - - /* View transitions */ - /* View transition old */ - --view-transition-old-main-content: var(--animation-speed) var(--animation-easing) both fadeOut; - - /* View transition new */ - --view-transition-new-main-content: var(--animation-speed) var(--animation-easing) both fadeIn, var(--animation-speed) var(--animation-easing) both slideInTopViewTransition; - - /* Focus */ - --focus-outline-width: 0.09375rem; - --focus-outline-offset: 0.2em; - - /* Badges */ - --badge-blob-padding-block: 1px; - --badge-blob-padding-inline: 12px 8px; - --badge-rectangle-padding-block: 1px; - --badge-rectangle-padding-inline: 6px; - @media screen and (min-width: 750px) { - --badge-blob-padding-block: 4px; - --badge-blob-padding-inline: 16px 12px; - --badge-rectangle-padding-block: 4px; - --badge-rectangle-padding-inline: 10px; - } - - /* Icons */ - --icon-size-2xs: 0.6rem; - --icon-size-xs: 0.85rem; - --icon-size-sm: 1.25rem; - --icon-size-md: 1.375rem; - --icon-size-lg: 1.5rem; - --icon-stroke-width: {% if settings.icon_stroke == 'thin' %}1px{% elsif settings.icon_stroke == 'heavy' %}2px{% else %}1.5px{% endif %}; - - /* Input */ - --input-email-min-width: 200px; - --input-search-max-width: 650px; - --input-padding-y: 0.8rem; - --input-padding-x: 0.8rem; - --input-padding: var(--input-padding-y) var(--input-padding-x); - --input-box-shadow-width: var(--style-border-width-inputs); - --input-box-shadow: 0 0 0 var(--input-box-shadow-width) var(--color-input-border); - --input-box-shadow-focus: 0 0 0 calc(var(--input-box-shadow-width) + 0.5px) var(--color-input-border); - --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); - --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); - --input-textarea-min-height: 55px; - - /* Button size */ - --button-size-sm: 30px; - --button-size-md: 36px; - --button-size: var(--minimum-touch-target); - --button-padding-inline: 24px; - --button-padding-block: 16px; - - /* Button font-family */ - --button-font-family-primary: var(--font-{{ settings.type_font_button_primary }}--family); - --button-font-family-secondary: var(--font-{{ settings.type_font_button_secondary }}--family); - - /* Button text case */ - --button-text-case: {{ settings.button_text_case }}; - --button-text-case-primary: {{ settings.button_text_case_primary }}; - --button-text-case-secondary: {{ settings.button_text_case_secondary }}; - - /* Borders */ - --border-color: rgb(var(--color-border-rgb) / var(--opacity-50)); - --border-width-sm: 1px; - --border-width-md: 2px; - --border-width-lg: 5px; - - /* Drawers */ - --drawer-inline-padding: 25px; - --drawer-menu-inline-padding: 2.5rem; - --drawer-header-block-padding: 20px; - --drawer-content-block-padding: 10px; - --drawer-header-desktop-top: 0rem; - --drawer-padding: calc(var(--padding-sm) + 7px); - --drawer-height: 100dvh; - --drawer-width: 95vw; - --drawer-max-width: 500px; - - /* Variant Picker Swatches */ - --variant-picker-swatch-width-unitless: {{ settings.variant_swatch_width }}; - --variant-picker-swatch-height-unitless: {{ settings.variant_swatch_height }}; - --variant-picker-swatch-width: {{ settings.variant_swatch_width | append: 'px' }}; - --variant-picker-swatch-height: {{ settings.variant_swatch_height | append: 'px' }}; - --variant-picker-swatch-radius: {{ settings.variant_swatch_radius | append: 'px' }}; - --variant-picker-border-width: {{ settings.variant_swatch_border_width | append: 'px' }}; - --variant-picker-border-style: {{ settings.variant_swatch_border_style }}; - --variant-picker-border-opacity: {{ settings.variant_swatch_border_opacity | append: '%' }}; - - /* Variant Picker Buttons */ - --variant-picker-button-radius: {{ settings.variant_button_radius | append: 'px' }}; - --variant-picker-button-border-width: {{ settings.variant_button_border_width | append: 'px' }}; - - /* Slideshow */ - --slideshow-controls-size: 3.5rem; - --slideshow-controls-icon: 2rem; - --peek-next-slide-size: 3rem; - - /* Utilities */ - --backdrop-opacity: 0.15; - --backdrop-color-rgb: var(--color-shadow-rgb); - --minimum-touch-target: 44px; - --disabled-opacity: 0.5; - --skeleton-opacity: 0.025; - - /* Shapes */ - --shape--circle: circle(50% at center); - --shape--sunburst: polygon(100% 50%,94.62% 55.87%,98.3% 62.94%,91.57% 67.22%,93.3% 75%,85.7% 77.39%,85.36% 85.36%,77.39% 85.7%,75% 93.3%,67.22% 91.57%,62.94% 98.3%,55.87% 94.62%,50% 100%,44.13% 94.62%,37.06% 98.3%,32.78% 91.57%,25% 93.3%,22.61% 85.7%,14.64% 85.36%,14.3% 77.39%,6.7% 75%,8.43% 67.22%,1.7% 62.94%,5.38% 55.87%,0% 50%,5.38% 44.13%,1.7% 37.06%,8.43% 32.78%,6.7% 25%,14.3% 22.61%,14.64% 14.64%,22.61% 14.3%,25% 6.7%,32.78% 8.43%,37.06% 1.7%,44.13% 5.38%,50% 0%,55.87% 5.38%,62.94% 1.7%,67.22% 8.43%,75% 6.7%,77.39% 14.3%,85.36% 14.64%,85.7% 22.61%,93.3% 25%,91.57% 32.78%,98.3% 37.06%,94.62% 44.13%); - --shape--diamond: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); - --shape--blob: polygon(85.349% 11.712%, 87.382% 13.587%, 89.228% 15.647%, 90.886% 17.862%, 92.359% 20.204%, 93.657% 22.647%, 94.795% 25.169%, 95.786% 27.752%, 96.645% 30.382%, 97.387% 33.048%, 98.025% 35.740%, 98.564% 38.454%, 99.007% 41.186%, 99.358% 43.931%, 99.622% 46.685%, 99.808% 49.446%, 99.926% 52.210%, 99.986% 54.977%, 99.999% 57.744%, 99.975% 60.511%, 99.923% 63.278%, 99.821% 66.043%, 99.671% 68.806%, 99.453% 71.565%, 99.145% 74.314%, 98.724% 77.049%, 98.164% 79.759%, 97.433% 82.427%, 96.495% 85.030%, 95.311% 87.529%, 93.841% 89.872%, 92.062% 91.988%, 89.972% 93.796%, 87.635% 95.273%, 85.135% 96.456%, 82.532% 97.393%, 79.864% 98.127%, 77.156% 98.695%, 74.424% 99.129%, 71.676% 99.452%, 68.918% 99.685%, 66.156% 99.844%, 63.390% 99.942%, 60.624% 99.990%, 57.856% 99.999%, 55.089% 99.978%, 52.323% 99.929%, 49.557% 99.847%, 46.792% 99.723%, 44.031% 99.549%, 41.273% 99.317%, 38.522% 99.017%, 35.781% 98.639%, 33.054% 98.170%, 30.347% 97.599%, 27.667% 96.911%, 25.024% 96.091%, 22.432% 95.123%, 19.907% 93.994%, 17.466% 92.690%, 15.126% 91.216%, 12.902% 89.569%, 10.808% 87.761%, 8.854% 85.803%, 7.053% 83.703%, 5.418% 81.471%, 3.962% 79.119%, 2.702% 76.656%, 1.656% 74.095%, 0.846% 71.450%, 0.294% 68.740%, 0.024% 65.987%, 0.050% 63.221%, 0.343% 60.471%, 0.858% 57.752%, 1.548% 55.073%, 2.370% 52.431%, 3.283% 49.819%, 4.253% 47.227%, 5.249% 44.646%, 6.244% 42.063%, 7.211% 39.471%, 8.124% 36.858%, 8.958% 34.220%, 9.711% 31.558%, 10.409% 28.880%, 11.083% 26.196%, 11.760% 23.513%, 12.474% 20.839%, 13.259% 18.186%, 14.156% 15.569%, 15.214% 13.012%, 16.485% 10.556%, 18.028% 8.261%, 19.883% 6.211%, 22.041% 4.484%, 24.440% 3.110%, 26.998% 2.057%, 29.651% 1.275%, 32.360% 0.714%, 35.101% 0.337%, 37.859% 0.110%, 40.624% 0.009%, 43.391% 0.016%, 46.156% 0.113%, 48.918% 0.289%, 51.674% 0.533%, 54.425% 0.837%, 57.166% 1.215%, 59.898% 1.654%, 62.618% 2.163%, 65.322% 2.750%, 68.006% 3.424%, 70.662% 4.197%, 73.284% 5.081%, 75.860% 6.091%, 78.376% 7.242%, 80.813% 8.551%, 83.148% 10.036%, 85.349% 11.712%); - - /* Buy buttons */ - --height-buy-buttons: calc(var(--padding-lg) * 2 + var(--icon-size-sm)); - - /* Card image width and height variables */ - --card-width-small: 10rem; - - --height-small: 10rem; - --height-medium: 11.5rem; - --height-large: 13rem; - --height-full: 100vh; - - @media screen and (min-width: 750px) { - --height-small: 17.5rem; - --height-medium: 21.25rem; - --height-large: 25rem; - } - - /* Modal */ - --modal-max-height: 65dvh; - - /* Card styles for search */ - --card-bg-hover: rgb(var(--color-foreground-rgb) / var(--opacity-5)); - --card-border-hover: rgb(var(--color-foreground-rgb) / var(--opacity-30)); - --card-border-focus: rgb(var(--color-foreground-rgb) / var(--opacity-10)); - - /* Cart */ - --cart-primary-font-family: var(--font-body--family); - --cart-primary-font-style: var(--font-body--style); - --cart-primary-font-weight: var(--font-body--weight); - --cart-secondary-font-family: var(--font-{{ settings.cart_price_font }}--family); - --cart-secondary-font-style: var(--font-{{ settings.cart_price_font }}--style); - --cart-secondary-font-weight: var(--font-{{ settings.cart_price_font }}--weight); - } -{% endstyle %} diff --git a/snippets/timeline-scope.liquid b/snippets/timeline-scope.liquid deleted file mode 100644 index 67c1cfe02..000000000 --- a/snippets/timeline-scope.liquid +++ /dev/null @@ -1,11 +0,0 @@ -{%- liquid - assign timeline_scope = '' - - for index in (1..count) - assign scope = '--prefix-index, ' | replace: 'prefix', prefix | replace: 'index', index - assign timeline_scope = timeline_scope | append: scope - endfor - - assign timeline_scope = timeline_scope | strip | split: ',' | compact | join: ',' --%} -{{- timeline_scope -}} diff --git a/snippets/typography-style.liquid b/snippets/typography-style.liquid deleted file mode 100644 index c7aff6a36..000000000 --- a/snippets/typography-style.liquid +++ /dev/null @@ -1,75 +0,0 @@ -{%- comment -%} - Intended for blocks and sections that provide values for all the referenced settings. - -
    - - Accepts: - settings: {settings || section.settings} -{%- endcomment -%} - -{% assign preset = preset | default: settings.type_preset %} - -{%- capture variables -%} - {%- if preset != 'rte' and settings.color != "" -%} - --color: {{ settings.color }}; - {%- endif -%} - {%- if preset == 'custom' -%} - {% liquid - unless type - comment - When choosing to customize the font, picking a specific font size - determines the type of text block. - endcomment - if settings.font_size != '' - assign font_size_value = settings.font_size | split: 'rem' | first | times: 1.0 - - if font_size_value > 4.5 - assign type = 'display' - elsif font_size_value > 3.5 - assign type = 'heading' - else - assign type = 'body' - endif - endif - endunless - %} - {%- if settings.font_size != blank -%} - {%- liquid - assign font_size_rem = settings.font_size | split: 'rem' | first | times: 1.0 - assign fluid_size_cutoff_rem = 3.0 - - if font_size_rem >= fluid_size_cutoff_rem - assign target_viewport = 1400 - assign vw_value = font_size_rem | times: 16 | divided_by: target_viewport | times: 100 - - assign scale_factor = font_size_rem | divided_by: fluid_size_cutoff_rem - assign base_min_rem = 3.0 - assign scaling_bonus_rem = scale_factor | minus: 1 | times: 0.25 - assign dynamic_min_rem = base_min_rem | plus: scaling_bonus_rem - endif - -%} - {%- if font_size_rem >= fluid_size_cutoff_rem -%} - --font-size: clamp({{ dynamic_min_rem }}rem, {{ vw_value }}vw, {{ settings.font_size }}); - {%- else -%} - --font-size: {{ settings.font_size }}; - {%- endif -%} - {%- endif -%} - {%- if settings.weight != blank -%} - --font-weight: {{ settings.weight }}; - {% else %} - --font-weight: {{ settings.font | replace: 'family', 'weight' }}; - {%- endif -%} - --font-family: {{ settings.font }}; - --text-transform: {{ settings.case }}; - --text-wrap: {{ settings.wrap }}; - {% if settings.type_preset == 'custom' and settings.font_size == blank %} - --line-height--display: var(--line-height--display-{{ settings.line_height }}); - --line-height--heading: var(--line-height--heading-{{ settings.line_height }}); - --line-height--body: var(--line-height--body-{{ settings.line_height }}); - {% else %} - --line-height: var(--line-height--{{ type }}-{{ settings.line_height }}); - {% endif %} - --letter-spacing: var(--letter-spacing--{{ type }}-{{ settings.letter_spacing }}); - {%- endif -%} -{%- endcapture -%} -{{- variables | strip | strip_newlines -}} diff --git a/snippets/unit-price.liquid b/snippets/unit-price.liquid deleted file mode 100644 index 6d9ba4d59..000000000 --- a/snippets/unit-price.liquid +++ /dev/null @@ -1,16 +0,0 @@ -{%- doc -%} - Renders the unit price, including its measurement. - - @param {object} price - The unit price (money or string). - @param {object} measurement - The unit_price_measurement object. - - @example - {% render 'unit-price', price: variant.unit_price, measurement: variant.unit_price_measurement %} - - @example - {% render 'unit-price', price: line_item.unit_price | money_with_currency, measurement: line_item.unit_price_measurement } -{%- enddoc -%} - - {{ 'accessibility.unit_price' | t }} - {{ price | unit_price_with_measurement: measurement }} - diff --git a/snippets/util-autofill-img-size-attr.liquid b/snippets/util-autofill-img-size-attr.liquid deleted file mode 100644 index 79dbf1e40..000000000 --- a/snippets/util-autofill-img-size-attr.liquid +++ /dev/null @@ -1,75 +0,0 @@ -{%- doc -%} - Echo a sizes attribute for an tag based on a minimum image size. - - @param {number} card_size - The minimum pixel-width of the product card. - @param {number} [card_gap] - The pixel-width of the gap between product cards. - @param {number} [max_breakpoint] - The maximum pixel-width to calculate breakpoints for. - @param {number} [min_breakpoint] - The minimum pixel-width before defaulting to 50vw. - - @example - {% capture size_attribute %} - {% render 'util-autofill-img-size-attr' card_size: 400 %} - {% endcapture %} - {% assign size_attribute = size_attribute | strip %} - {{ image_url | image_tag: sizes: size_attribute }} -{%- enddoc -%} - -{% liquid - # Defense: ensure card_size and card_gap are numbers - assign card_size = card_size | strip | replace: 'px', '' | plus: 0 - - if card_gap - assign card_gap = card_gap | strip | replace: 'px', '' | plus: 0 - else - assign card_gap = 0 - endif - - assign card_size_with_gap = card_size | plus: card_gap - - assign max_breakpoint = max_breakpoint | default: 2000 - - assign min_breakpoint = min_breakpoint | default: 750 - - # Calculate maximum number of columns at max width - assign max_cols = max_breakpoint | divided_by: card_size_with_gap | floor - - assign sizes_attr = '' - - # Calculate breakpoints dynamically based on card size - # Start with max columns and work down - for i in (1..max_cols) - # Current number of columns we're calculating for - assign current_cols = max_cols | minus: i | plus: 1 - - # Skip if we're down to 1 column - if current_cols < 2 - break - endif - - # Calculate the minimum width needed for this many columns - assign min_width_needed = current_cols | times: card_size_with_gap - - if min_width_needed < min_breakpoint - break - endif - - assign percentage = 100 | divided_by: current_cols - - # Build up the sizes attribute - if sizes_attr != '' - assign sizes_attr = sizes_attr | append: ', ' - endif - assign sizes_attr = sizes_attr | append: '(min-width: ' | append: min_width_needed | append: 'px) ' | append: percentage | append: 'vw' - endfor - - # Add tablet size (50vw) and mobile size (100vw) fallbacks - if sizes_attr != '' - assign sizes_attr = sizes_attr | append: ', ' - endif - assign sizes_attr = sizes_attr | append: '(min-width: ' | append: min_breakpoint | append: 'px) 50vw' - - assign sizes_attr = sizes_attr | append: ', 100vw' - - # Echo the sizes attribute - echo sizes_attr -%} diff --git a/snippets/util-mega-menu-img-sizes-attr.liquid b/snippets/util-mega-menu-img-sizes-attr.liquid deleted file mode 100644 index a8ce818a5..000000000 --- a/snippets/util-mega-menu-img-sizes-attr.liquid +++ /dev/null @@ -1,87 +0,0 @@ -{%- doc -%} - Calculate the sizes attribute for mega menu images based on menu type and grid configuration. - - @param {string} menu_content_type - Type of menu: 'collection_images', 'featured_products', or 'featured_collections' - @param {object} settings - Theme settings object containing page width configuration - @param {number} [grid_columns] - Number of grid columns for the mega menu - @param {number} [grid_columns_tablet] - Number of grid columns for tablet view - @param {number} [grid_columns_collection_images] - Grid columns when menu_content_type is 'collection_images' with < 5 items - @param {number} [parent_links_size] - Number of parent links (for collection images special case) - @param {number} [columns_per_item] - Columns each item occupies (2 for collection images, 1 for products) - - @example - {% capture image_sizes %} - {% render 'util-mega-menu-img-sizes-attr', - menu_content_type: 'collection_images', - settings: settings, - grid_columns: 8, - grid_columns_tablet: 4, - columns_per_item: 2 - %} - {% endcapture %} - - {{ image | image_url: width: 1024 | image_tag: sizes: image_sizes }} -{%- enddoc -%} - -{% liquid - # Early exit for featured collections - if menu_content_type == 'featured_collections' - echo '300px' - break - endif - - # Define breakpoints and max widths based on page width setting - case settings.page_width - when 'narrow' - assign page_max_width = '90rem' - assign breakpoint = '95rem' - when 'normal' - assign page_max_width = '120rem' - assign breakpoint = '125rem' - when 'wide' - assign page_max_width = '150rem' - assign breakpoint = '155rem' - endcase - - # Common values - # Gap between items in pixels (numeric for calculations) - # Page margins (with unit for direct use in calc()) - assign gap = 20 - assign margins = '80px' - assign grid_tablet = grid_columns_tablet | default: 4 - - # Set up grid configuration based on menu type - case menu_content_type - when 'collection_images' - assign cols_per_item = columns_per_item | default: 2 - assign grid_desktop = grid_columns | default: 8 - - # Special case: fewer than 5 collection images - if parent_links_size < 5 - assign grid_desktop = grid_columns_collection_images | default: grid_desktop - endif - - when 'featured_products' - assign cols_per_item = 1 - assign grid_desktop = grid_columns | default: 6 - endcase - - # Calculate gaps for each breakpoint - assign items_desktop = grid_desktop | divided_by: cols_per_item - assign items_tablet = grid_tablet | divided_by: cols_per_item - assign gaps_desktop_px = items_desktop | minus: 1 | times: gap | append: 'px' - assign gaps_tablet_px = items_tablet | minus: 1 | times: gap | append: 'px' -%} - -{%- capture sizes -%} - {%- comment -%} Large viewports with fixed page width {%- endcomment -%} - (min-width: {{ breakpoint }}) calc(({{ page_max_width }} - {{ margins }} - {{ gaps_desktop_px }}) * {{ cols_per_item }} / {{ grid_desktop }}), - - {%- comment -%} Desktop viewports {%- endcomment -%} - (min-width: 990px) calc((100vw - {{ margins }} - {{ gaps_desktop_px }}) * {{ cols_per_item }} / {{ grid_desktop }}), - - {%- comment -%} Tablet {%- endcomment -%} - calc((100vw - {{ margins }} - {{ gaps_tablet_px }}) / {{ grid_tablet }}) -{%- endcapture -%} - -{{ sizes | strip_newlines | strip }} diff --git a/snippets/util-product-grid-card-size.liquid b/snippets/util-product-grid-card-size.liquid deleted file mode 100644 index fdbcd0f42..000000000 --- a/snippets/util-product-grid-card-size.liquid +++ /dev/null @@ -1,45 +0,0 @@ -{%- doc -%} - Output the minimum product card size for cards in a product grid (main collection and search results). - - @param {object} section - Section object that contains the product card block. - - @example - {% capture product_card_size %} - {% render 'util-product-grid-card-size' section: section %} - {% endcapture %} -{%- enddoc -%} - -{% liquid - if section.settings.layout_type == 'organic' - if section.settings.product_grid_width == 'centered' - assign product_card_size = '250px' - else - assign product_card_size = '260px' - endif - elsif section.settings.product_grid_width == 'centered' - # Hardcoded values for product card size when width set to 'centered' - case section.settings.product_card_size - when 'small' - assign product_card_size = '165px' - when 'medium' - assign product_card_size = '250px' - when 'large' - assign product_card_size = '340px' - when 'extra-large' - assign product_card_size = '480px' - endcase - else - # Hardcoded values for product card size when width set to 'full-width' - case section.settings.product_card_size - when 'small' - assign product_card_size = '180px' - when 'medium' - assign product_card_size = '260px' - when 'large' - assign product_card_size = '365px' - when 'extra-large' - assign product_card_size = '530px' - endcase - endif - echo product_card_size -%} diff --git a/snippets/util-product-media-sizes-attr.liquid b/snippets/util-product-media-sizes-attr.liquid deleted file mode 100644 index 8458af158..000000000 --- a/snippets/util-product-media-sizes-attr.liquid +++ /dev/null @@ -1,142 +0,0 @@ -{%- doc -%} - Calculate the sizes attribute for product media images in the product media gallery. - - @param {object} block - Block object containing media gallery settings - @param {object} section - Section object containing layout settings - @param {object} settings - Theme settings object containing page width configuration - @param {boolean} [is_first_image] - Whether this is the first image (for large_first_image mode) - @param {boolean} [is_single_column] - Whether the layout is single column (carousel or one-column grid) - @param {boolean} [needs_both_sizes] - Whether we need to calculate different sizes for first and other images - - @example - {% capture media_sizes %} - {% render 'util-product-media-sizes-attr', block: block, section: section, settings: settings, is_single_column: is_single_column %} - {% endcapture %} - {% assign media_sizes = media_sizes | strip %} - {{ media | image_url: width: 800 | image_tag: sizes: media_sizes }} -{%- enddoc -%} - -{%- liquid - assign block_settings = block.settings - # Constants - assign page_margin = '40px' - # Section gap divided by 2 (used for single column layouts) - assign gap_half = section.settings.gap | divided_by: 2 | append: 'px' - # Section gap divided by 4 (used for two column layouts where each column gets half of the half gap) - assign gap_quarter = section.settings.gap | divided_by: 4 | append: 'px' - # Image gap divided by 2 (space between images in grid) - assign image_gap_half = block_settings.image_gap | divided_by: 2 | append: 'px' - - assign is_single_column = is_single_column | default: false - assign needs_both_sizes = needs_both_sizes | default: false - - # Determine which size calculation to use - assign calculate_single_column = false - assign calculate_grid_column = false - - if needs_both_sizes - if is_first_image - assign calculate_single_column = true - else - assign calculate_grid_column = true - endif - elsif is_single_column - assign calculate_single_column = true - else - assign calculate_grid_column = true - endif - - # Set up default sizes - if calculate_single_column - # Default for carousel or single column grid (or first image in large_first_image mode) - if section.settings.equal_columns == false - assign default_sizes = '(min-width: 750px) calc(100vw - 25rem - [gap_half]), 100vw' | replace: '[gap_half]', gap_half - else - assign default_sizes = '(min-width: 750px) calc(50vw - [gap_half]), 100vw' | replace: '[gap_half]', gap_half - endif - else - # Default for two column grid - includes image gap and quarter section gap - if section.settings.equal_columns == false - assign default_sizes = '(min-width: 750px) calc((100vw - 25rem) / 2 - [gap_quarter] - [image_gap_half]), 100vw' | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half - else - assign default_sizes = '(min-width: 750px) calc(50vw / 2 - [gap_quarter] - [image_gap_half]), 100vw' | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half - endif - endif - - # Override for center-aligned content - if section.settings.content_width == 'content-center-aligned' - # Define breakpoints and base sizes based on page width - # Breakpoints are the page width setting + margin (where 2 x margin is 80px = 5rem) - case settings.page_width - when 'narrow' - assign breakpoint = '95rem' - assign media_base_size_equal_columns = '45rem' - assign media_base_size_unequal_columns = '65rem' - when 'normal' - assign breakpoint = '125rem' - assign media_base_size_equal_columns = '60rem' - assign media_base_size_unequal_columns = '95rem' - when 'wide' - assign breakpoint = '155rem' - assign media_base_size_equal_columns = '75rem' - assign media_base_size_unequal_columns = '125rem' - endcase - - # Select the appropriate base size - if section.settings.equal_columns - assign media_base_size = media_base_size_equal_columns - else - assign media_base_size = media_base_size_unequal_columns - endif - - # Calculate large screen size base - if block_settings.extend_media - assign large_size_base = '[media_base_size] + (100vw - [breakpoint])' | replace: '[media_base_size]', media_base_size | replace: '[breakpoint]', breakpoint - else - assign large_size_base = media_base_size - endif - - # Calculate medium screen size - if section.settings.equal_columns - assign medium_base = '50vw' - else - assign medium_base = '100vw - 25rem' - endif - - # Build calculation based on column type - if calculate_grid_column - # Grid column calculation - includes image gap - assign medium_base = '([medium_base]) / 2' | replace: '[medium_base]', medium_base - # Build the complete large size expression - assign large_size_expr = '([large_size_base]) / 2 - [image_gap_half]' | replace: '[large_size_base]', large_size_base | replace: '[image_gap_half]', image_gap_half - assign large_size = 'calc([large_size_expr])' | replace: '[large_size_expr]', large_size_expr - - if block_settings.extend_media - assign medium_size = 'calc([medium_base] - [page_margin] - [gap_quarter] - [image_gap_half] + [page_margin])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half - else - assign medium_size = 'calc([medium_base] - [page_margin] - [gap_quarter] - [image_gap_half])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half - endif - assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], 100vw' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size - else - # Single column calculation - if block_settings.extend_media - assign large_size = 'calc([large_size_base])' | replace: '[large_size_base]', large_size_base - else - assign large_size = large_size_base - endif - - if block_settings.extend_media - assign medium_size = 'calc([medium_base] - [page_margin] - [gap_half])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_half]', gap_half - else - assign medium_size = 'calc([medium_base] - [page_margin] - [gap_half] - [page_margin])' | replace: '[medium_base]', medium_base | replace: '[page_margin]', page_margin | replace: '[gap_half]', gap_half - endif - assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], 100vw' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size - endif - else - # Use default sizes - assign sizes = default_sizes - endif - - # Echo the sizes attribute - echo sizes --%} diff --git a/snippets/variant-main-picker.liquid b/snippets/variant-main-picker.liquid deleted file mode 100644 index b29424a74..000000000 --- a/snippets/variant-main-picker.liquid +++ /dev/null @@ -1,512 +0,0 @@ -{%- doc -%} - Renders a default variant picker, used to display the variant picker in the variants block. - - @param {object} product_resource - The product object. - @param {object} [block] - The block object -{%- enddoc -%} - -{% assign block_settings = block.settings %} - -{% unless product_resource.has_only_default_variant %} - {% liquid - assign button_background_brightness = section.settings.color_scheme.settings.foreground | color_brightness - if button_background_brightness < 105 - assign strikethrough_color_mix = '#000' - else - assign strikethrough_color_mix = '#fff' - endif - %} - -
    - {%- for product_option in product_resource.options_with_values -%} - {%- liquid - assign swatch_count = product_option.values | map: 'swatch' | compact | size - assign variant_style = block_settings.variant_style - - if swatch_count > 0 and block_settings.show_swatches - if block_settings.variant_style == 'dropdown' - assign variant_style = 'swatch_dropdown' - else - assign variant_style = 'swatch' - endif - endif - - if variant_style == 'buttons' and settings.variant_button_width == 'equal-width-buttons' - assign fieldset_id = section.id | append: '-' | append: product_resource.id | append: '-' | append: product_option.name | handleize - assign option_id_attribute = 'data-option-id="' | append: fieldset_id | append: '"' - assign longest_value = 0 - endif - -%} - - {%- if variant_style == 'swatch' or block_settings.variant_style == 'buttons' -%} -
    - - {{ product_option.name | escape -}} - {%- if variant_style == 'swatch' -%} - {{ product_option.selected_value }} - {%- endif %} - - {%- for product_option_value in product_option.values -%} - {% if product_option_value.size > longest_value and option_id_attribute %} - {% assign longest_value = product_option_value.size %} - {% endif %} - - {%- endfor -%} - {% if option_id_attribute %} - {% style %} - [data-option-id="{{ fieldset_id }}"] { - --variant-ch: {{ longest_value }}ch; - } - {% endstyle %} - {% endif %} -
    - {%- elsif block_settings.variant_style == 'dropdowns' -%} - {% - # There is an opportunity to build a custom select component that will allow us to style the select element further (animation for dropdown, swatches shown in the dropdown options, etc) - # It's too bad as it mean rebuilding baked in behaviours but I think we've already done that for the locale selectors - # in dawn. So it might mean more time spent in setting it up but worth it for future updates/styling. - %} - {% liquid - assign property_being_updated = false - if settings.variant_swatch_width != settings.variant_swatch_height - assign property_being_updated = true - # (original width / original height) x new height (20px at the moment) = new width - assign new_width = settings.variant_swatch_width | times: 1.0 | divided_by: settings.variant_swatch_height | times: 20 - endif - %} - -
    - -
    - - -
    -
    - {%- endif -%} - {%- endfor -%} - - -
    -
    -{% endunless %} - -{% stylesheet %} - .variant-picker { - width: 100%; - } - - .variant-picker__form { - display: flex; - flex-direction: column; - gap: var(--padding-lg); - width: 100%; - } - - .variant-picker[data-shopify-visual-preview] { - min-width: 300px; - padding-inline-start: max(4px, var(--padding-inline-start)); - } - - .variant-option { - --options-border-radius: var(--variant-picker-button-radius); - --options-border-width: var(--variant-picker-button-border-width); - --variant-option-padding-inline: var(--padding-md); - } - - .variant-option--swatches { - --options-border-radius: var(--variant-picker-swatch-radius); - - width: 100%; - } - - .variant-option--swatches-disabled { - pointer-events: none; - cursor: not-allowed; - } - - .variant-option--swatches > overflow-list { - justify-content: var(--product-swatches-alignment); - - @media (max-width: 749px) { - justify-content: var(--product-swatches-alignment-mobile); - } - } - - .variant-option--buttons { - display: flex; - flex-wrap: wrap; - gap: var(--gap-sm); - margin: 0; - padding: 0; - border: none; - } - - .variant-option--buttons legend { - padding: 0; - margin-block-end: var(--margin-xs); - } - - .variant-option__swatch-value { - padding-inline-start: var(--padding-xs); - color: rgb(var(--color-foreground-rgb) / var(--opacity-70)); - } - - .variant-option__button-label { - --variant-picker-stroke-color: var(--color-variant-border); - - display: flex; - flex: 0 0 calc(3ch + 1.3em); - align-items: center; - position: relative; - padding-block: var(--padding-sm); - padding-inline: var(--padding-lg); - border: var(--style-border-width) solid var(--color-variant-border); - border-radius: var(--options-border-radius); - border-width: var(--options-border-width); - overflow: clip; - justify-content: center; - min-height: calc(3ch + 1.3em); - min-width: fit-content; - white-space: nowrap; - background-color: var(--color-variant-background); - color: var(--color-variant-text); - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - - &:hover { - background-color: var(--color-variant-hover-background); - border-color: var(--color-variant-hover-border); - color: var(--color-variant-hover-text); - } - - @media screen and (min-width: 750px) { - padding: var(--padding-xs) var(--variant-option-padding-inline); - } - } - - .variant-option__button-label__text { - text-align: left; - text-wrap: auto; - } - - .variant-option--equal-width-buttons { - --variant-min-width: clamp(44px, calc(var(--variant-option-padding-inline) * 2 + var(--variant-ch)), 100%); - - display: grid; - grid-template-columns: repeat(auto-fit, minmax(var(--variant-min-width), 1fr)); - - .variant-option__button-label { - min-width: var(--variant-min-width); - } - - .variant-option__button-label__text { - text-align: center; - text-wrap: balance; - } - } - - .variant-option__button-label:has(:focus-visible) { - --variant-picker-stroke-color: var(--color-foreground); - - border-color: var(--color-foreground); - outline: var(--focus-outline-width) solid var(--color-foreground); - outline-offset: var(--focus-outline-offset); - } - - .variant-option__button-label--has-swatch { - --focus-outline-radius: var(--variant-picker-swatch-radius); - - padding: 0; - border: none; - display: block; - flex-basis: auto; - min-height: auto; - } - - .variant-option__button-label:has(:checked) { - color: var(--color-selected-variant-text); - background-color: var(--color-selected-variant-background); - border-color: var(--color-selected-variant-border); - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - - &:hover { - background-color: var(--color-selected-variant-hover-background); - border-color: var(--color-selected-variant-hover-border); - color: var(--color-selected-variant-hover-text); - } - } - - .variant-option__button-label:has([data-option-available='false']) { - color: rgb(var(--color-variant-text-rgb) / var(--opacity-60)); - } - - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch { - --focus-outline: var(--focus-outline-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55)); - - outline: var(--focus-outline); - outline-offset: var(--focus-outline-offset); - } - - .facets__inputs-list--swatches-grid .variant-option__button-label:has(:focus-visible) .swatch { - --focus-outline: var(--focus-outline-width) solid currentcolor; - - outline: var(--focus-outline); - outline-offset: var(--focus-outline-offset); - } - - .facets__inputs-list--swatches-grid .variant-option__button-label:has(:focus-visible) { - outline: none; - } - - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover { - outline: none; - } - - .variant-option__button-label--has-swatch:hover { - outline: var(--focus-outline-width) solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55)); - outline-offset: var(--focus-outline-offset); - } - - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:has(:checked) { - --focus-outline: none; - } - - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:has(:checked) .swatch { - outline: var(--focus-outline); - outline-offset: var(--focus-outline-offset); - } - - .variant-option__button-label--has-swatch:has(:checked) { - --focus-outline: var(--focus-outline-width) solid var(--color-foreground); - - outline: var(--focus-outline); - outline-offset: var(--focus-outline-offset); - } - - /* This triggers iOS < 16.4. The outline bug is not recognized as a lack of @supports */ - @supports not (background-color: rgb(from red 150 g b / alpha)) { - /** There is a bug in safari < 16.4 that causes the outline to not follow the elements border radius. This is a workaround. **/ - .variant-option__button-label--has-swatch:has(:checked), - .variant-option__button-label:has(:focus-visible) .swatch, - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch { - outline: none; - position: relative; - overflow: visible; - } - - .variant-option__button-label--has-swatch:has(:checked)::after, - .variant-option__button-label:has(:focus-visible) .swatch::after, - .facets__inputs-list--swatches-grid .variant-option__button-label--has-swatch:hover .swatch::after { - content: ''; - position: absolute; - inset: calc(-1 * var(--focus-outline-offset)); - border: var(--focus-outline); - border-radius: var(--focus-outline-radius, 50%); - background-color: transparent; - display: inherit; - } - } - - .variant-option__button-label:has([data-option-available='false']):has(:checked) { - --variant-picker-stroke-color: rgb(var(--color-variant-text-rgb) / var(--opacity-60)); - - background-color: inherit; - color: rgb(var(--color-variant-text-rgb) / var(--opacity-60)); - border-color: var(--color-selected-variant-border); - } - - .variant-option__button-label input, - .variant-option--images input { - /* remove the checkbox from the page flow */ - position: absolute; - - /* set the dimensions to match those of the label */ - inset: 0; - - /* hide it */ - opacity: 0; - margin: 0; - cursor: pointer; - width: 100%; - height: 100%; - } - - .variant-option__button-label svg { - position: absolute; - top: 0; - left: 0; - cursor: pointer; - pointer-events: none; - stroke-width: var(--style-border-width); - stroke: var(--variant-picker-stroke-color); - } - - .variant-option__select-wrapper { - display: flex; - position: relative; - border: var(--style-border-width-inputs) solid var(--color-border); - border-radius: var(--style-border-radius-inputs); - align-items: center; - margin-top: var(--margin-2xs); - overflow: clip; - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - } - - .variant-option__select-wrapper:has(.swatch) { - --variant-picker-swatch-width: 20px; - --variant-picker-swatch-height: 20px; - } - - .variant-option__select-wrapper:hover { - border-color: var(--color-variant-hover-border); - } - - .variant-option__select:focus-visible { - outline: var(--focus-outline-width) solid currentcolor; - outline-offset: var(--focus-outline-offset); - } - - .variant-option__select { - padding-block: var(--padding-md); - padding-inline: var(--padding-lg) calc(var(--padding-lg) + var(--icon-size-2xs)); - appearance: none; - border: 0; - width: 100%; - margin: 0; - cursor: pointer; - } - - .variant-option__select-wrapper .icon { - position: absolute; - right: var(--padding-md); - top: 50%; - transform: translateY(-50%); - width: var(--icon-size-2xs); - height: var(--icon-size-2xs); - pointer-events: none; - } - - .variant-option__select--has-swatch { - padding-inline-start: calc((2 * var(--padding-sm)) + var(--variant-picker-swatch-width)); - } - - .variant-option__select-wrapper .swatch { - position: absolute; - top: 50%; - left: var(--padding-md); - transform: translateY(-50%); - } - - .variant-picker--center, - .variant-picker--center .variant-option { - text-align: center; - align-items: center; - justify-content: center; - width: 100%; - } - - .variant-picker--right, - .variant-picker--right .variant-option { - text-align: right; - justify-content: right; - } -{% endstylesheet %} diff --git a/snippets/variant-quick-add.liquid b/snippets/variant-quick-add.liquid deleted file mode 100644 index d67f086ad..000000000 --- a/snippets/variant-quick-add.liquid +++ /dev/null @@ -1,101 +0,0 @@ -{%- doc -%} - Renders a quick-add variant picker, used to display the variant picker in the quick-add modal. - - @param {object} product_resource - The product object. -{%- enddoc -%} - - - {%- for product_option in product_resource.options_with_values -%} - {%- liquid - assign swatch_count = product_option.values | map: 'swatch' | compact | size - assign variant_style = '' - - if swatch_count > 0 - assign variant_style = 'swatch' - else - assign fieldset_id = section.id | append: '-' | append: product_resource.id | append: '-' | append: product_option.name | handleize - assign option_id_attribute = 'data-option-id="' | append: fieldset_id | append: '"' - assign longest_value = 0 - endif - -%} - -
    - - {{ product_option.name | escape -}} - {%- if variant_style == 'swatch' and product_resource.options_with_values.size > 1 -%} - {{ product_option.selected_value }} - {%- endif %} - - {%- for product_option_value in product_option.values -%} - {% if product_option_value.size > longest_value and option_id_attribute %} - {% assign longest_value = product_option_value.size %} - {% endif %} - - {% liquid - assign featured_media = product_option_value.variant.featured_media - - # If the variant has no featured media, and we have a combined listing product, then fall back to using the - # featured media of the child product that is linked to this option value. - if featured_media == blank and product_option_value.product_url - assign featured_media = product_option_value.variant.product.featured_media - endif - %} - - - {%- endfor -%} - {% if option_id_attribute %} - {% style %} - [data-option-id="{{ fieldset_id }}"] { - --variant-ch: {{ longest_value }}ch; - } - {% endstyle %} - {% endif %} -
    - {%- endfor -%} - - -
    diff --git a/snippets/variant-swatches.liquid b/snippets/variant-swatches.liquid deleted file mode 100644 index 6380efaf1..000000000 --- a/snippets/variant-swatches.liquid +++ /dev/null @@ -1,165 +0,0 @@ -{%- doc -%} - Renders a swatches variant picker, used within the product-swatches block. - - @param {object} product_resource - The product object, which contains variants and options. - @param {boolean} [has_option_selected] - Whether an option is already selected. - - @example - {% render 'variant-swatches', product_resource: product %} -{%- enddoc -%} - - -
    - {%- for product_option in product_resource.options_with_values -%} - {%- liquid - assign swatch_count = product_option.values | map: 'swatch' | compact | size - -%} - - {% if swatch_count == 0 %} - {% continue %} - {% endif %} - - {%- liquid - assign product_has_combined_listing = closest.product.options_with_values | map: 'values' | map: 'product_url' | compact | size - - # Only apply our custom logic if nothing is selected (initial page load) - if has_option_selected != true and product_has_combined_listing == 0 - # Logic to determine which swatch should be pre-selected - assign first_image = product_resource.media.first - assign variant_images = product_resource.images | where: 'attached_to_variant?', true - assign swatch_to_preselect = null - if swatch_count == 1 - # Single swatch: Always pre-select it - assign swatch_to_preselect = product_option.values.first - elsif swatch_count > 1 - if first_image and variant_images contains first_image - # First image is a variant image - find which variant it belongs to - for option_value in product_option.values - if option_value.variant.featured_media.id == first_image.id - assign swatch_to_preselect = option_value - break - endif - endfor - elsif variant_images.size == 0 - # No variants have images - pre-select first swatch - assign swatch_to_preselect = product_option.values.first - else - assign none_checked = true - endif - # else: First image is NOT a variant image - don't pre-select any swatch - endif - endif - - for value in product_resource.selected_variant.options - if value.swatch - assign swatch_to_preselect = value - endif - endfor - - # Identify which option position this swatch option is - # Use product_option.position which is the actual position among ALL options - assign swatch_option_position = product_option.position - assign swatch_option_key = 'option' | append: swatch_option_position - -%} - -
    - {% capture children %} - {%- for product_option_value in product_option.values -%} - {% liquid - # We look for the right featured media to show when hovering/clicking on the swatch. - # Most of the time there should be an image associated to the option-value. - assign featured_media = product_option_value.variant.featured_media - - # If the option is available, the swatch should be shown as available. - assign available_count = 0 - if product_option.available - assign available_count = 1 - endif - - if featured_media == blank - if product_option_value.variant == blank - # It could happen that the particular product_option_value.variant is nil - # (see https://shopify.dev/docs/api/liquid/objects/product_option_value#product_option_value-variant). - # We look for the first available variant in that option (e.g. Color) that has a featured media. - for variant in product_resource.variants - if variant.available and variant[swatch_option_key] == product_option_value.name and variant.featured_media - assign featured_media = variant.featured_media - assign first_available_variant = variant - break - endif - endfor - elsif product_option_value.product_url - # If the variant has no featured media, and we have a combined listing product, - # then fall back to using the featured media of the child product that is linked - # to this option value. - assign featured_media = product_option_value.variant.product.featured_media - endif - endif - - if has_option_selected != true and product_has_combined_listing == 0 - # Determine if this swatch should be checked - assign is_checked = false - if swatch_to_preselect != nil and swatch_to_preselect.id == product_option_value.id - assign is_checked = true - assign none_checked = false - endif - endif - %} - -
  • - -
  • - {%- endfor -%} -
  • - -
  • - {% endcapture %} - - {% render 'overflow-list', children: children, ref: 'overflowList', defer: true %} -
    - {%- endfor -%} - -
    -
    diff --git a/snippets/video.liquid b/snippets/video.liquid deleted file mode 100644 index 36e8a0fd9..000000000 --- a/snippets/video.liquid +++ /dev/null @@ -1,216 +0,0 @@ -{%- doc -%} - Renders a video element, from a video object (
    -{% stylesheet %} - .featured-product-section .section-content-wrapper { - grid-template-columns: 1fr; - display: grid; - overflow: hidden; - @media (min-width: 750px) { - grid-template-columns: 1fr 1fr; - } - } - - /* Here I should maybe set the width to auto when the ratio is set to adapt */ - .featured-product-section .product-media-container.constrain-height { - /* arbitrary offset value based on average theme spacing and header height */ - --viewport-offset: 400px; - --constrained-min-height: var(--visual-preview--height, 80dvh); - - @media screen and (min-width: 750px) { - --viewport-offset: 300px; - } - } - - .featured-product-section .product-grid__card { - --padding-block: 20px; - --padding-inline: 20px; - - @media screen and (min-width: 750px) { - --padding-block: 40px; - --padding-inline: 40px; - } - } - - @media screen and (max-width: 749px) { - .featured-product-section .media-block { - order: -1; - } - } -{% endstylesheet %} {% schema %} { diff --git a/sections/footer.liquid b/sections/footer.liquid index ed0e25f0a..eeb1fead0 100644 --- a/sections/footer.liquid +++ b/sections/footer.liquid @@ -47,44 +47,7 @@
    -{% stylesheet %} - /* Mobile: Single column layout (base styles) */ - .footer-content { - display: grid; - grid-template-columns: 1fr; - gap: var(--footer-gap); - } - @media screen and (min-width: 750px) and (max-width: 989px) { - .footer-content { - grid-template-columns: repeat(min(var(--grid-columns), 3), 1fr); - grid-auto-flow: row; - } - .footer-content--isolated-grid-item-tablet > :last-child { - grid-column: 1 / -1; - } - } - - @media screen and (min-width: 990px) { - .footer-content { - grid-template-columns: repeat(var(--grid-columns), 1fr); - } - - /* Single item centered */ - .footer-content[style*='--grid-columns: 1'] { - justify-items: center; - } - - .footer-content--isolated-grid-item-desktop > :last-child { - grid-column: 1 / -1; - } - } - /* Two-column layout on mobile for footer menus */ - .footer-content.footer-content--mobile-columns { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - -{% endstylesheet %} {% schema %} { diff --git a/sections/hero-splash.liquid b/sections/hero-splash.liquid index ff43143da..55fa9b386 100644 --- a/sections/hero-splash.liquid +++ b/sections/hero-splash.liquid @@ -69,9 +69,11 @@ endif assign fetch_priority = 'auto' + assign loading = 'lazy' if section.index == 1 assign fetch_priority = 'high' + assign loading = 'eager' endif %} @@ -88,7 +90,9 @@ alt: section.settings.image_1.alt, class: 'hero__image', sizes: sizes, - fetchpriority: fetch_priority + fetchpriority: fetch_priority, + loading: loading, + decoding: 'async' }} {%- endif -%} @@ -112,7 +116,9 @@ alt: section.settings.video_1.alt, class: 'hero__video-poster', sizes: sizes, - fetchpriority: fetch_priority_poster + fetchpriority: fetch_priority_poster, + loading: loading, + decoding: 'async' }} {%- endif -%} {{ @@ -140,7 +146,9 @@ alt: section.settings.image_2.alt, class: 'hero__image', sizes: sizes, - fetchpriority: fetch_priority + fetchpriority: fetch_priority, + loading: loading, + decoding: 'async' }} {%- endif -%} @@ -157,7 +165,9 @@ height: section.settings.video_2.preview_image.height, alt: section.settings.video_2.alt, class: 'hero__video-poster', - sizes: sizes + sizes: sizes, + loading: loading, + decoding: 'async' }} {%- endif -%} {{ @@ -189,7 +199,9 @@ height: section.settings.image_1.height, alt: '', class: 'hero__image', - sizes: sizes + sizes: sizes, + loading: 'lazy', + decoding: 'async' }} {% endif %} {% if has_image_2 %} @@ -202,7 +214,9 @@ height: section.settings.image_2.height, alt: '', class: 'hero__image', - sizes: sizes + sizes: sizes, + loading: 'lazy', + decoding: 'async' }} {% endif %} {% if has_media == false and is_transparent %} @@ -289,182 +303,7 @@ {% endif %} -{% stylesheet %} - .hero-wrapper { - --hero-height-offset: 0px; - } - - /* Being extra specific in the selector for performance reasons */ - body:has(> #header-group > .header-section > #header-component) .hero-wrapper:first-child { - --hero-height-offset: var(--header-height, 0px); - } - - .hero { - position: relative; - min-height: calc(var(--hero-min-height) - var(--hero-height-offset)); - } - - .hero[data-shopify-visual-preview] { - --hero-min-height: 600px; - - min-height: 600px; - } - - .hero__container { - position: relative; - overflow: hidden; - border: var(--hero-border-width) var(--hero-border-style) rgb(var(--color-border-rgb) / var(--hero-border-opacity)); - min-height: inherit; - align-items: var(--vertical-alignment-mobile); - justify-content: var(--horizontal-alignment); - z-index: var(--layer-base); - - @media screen and (min-width: 750px) { - align-items: var(--vertical-alignment); - } - } - - .hero__content-wrapper.page-width { - grid-column: 2 / 3; - } - - .hero__content-wrapper { - position: relative; - inset: 0; - z-index: var(--layer-flat); - } - - .hero__content-wrapper .group-block-content { - position: relative; - } - - .hero__media-wrapper { - position: absolute; - inset: 0; - display: grid; - grid-column: 1 / -1; - grid-template-columns: repeat(var(--hero-media-count, 1), 1fr); - } - - .hero--auto .hero__image, - .hero--auto .hero__video { - aspect-ratio: var(--hero-media-aspect-ratio); - } - - .hero--no-blocks-auto-height { - :is(.hero__image, .hero__video) { - width: 100%; - aspect-ratio: auto; - } - - .hero__media-wrapper { - /* When there are no blocks and the height is auto, allow the image to appear. */ - position: relative; - } - } - - .hero__image, - .hero__video, - .hero__video-poster { - height: 100%; - width: 100%; - object-fit: cover; - object-position: center center; - overflow: hidden; - position: relative; - z-index: var(--layer-base); - } - - .hero__video-wrapper { - position: relative; - } - - .hero__video-poster { - position: absolute; - } - - .hero__link { - position: absolute; - inset: 0; - grid-column: 1 / -1; - } - - .hero__media-wrapper, - .hero__content-wrapper { - pointer-events: none; - - :is(a, button, input, textarea, select) { - pointer-events: auto; - } - } - - .hero__content-wrapper--design-mode * { - pointer-events: auto; - } - - .hero[data-blur-shadow='true'] { - --blurred-reflection-filter-saturate: saturate(1.5); - --blurred-reflection-mask-image: linear-gradient(to bottom, #000 0%, #000 60%, transparent 100%); - --blurred-reflection-box-shadow: rgb(0 0 0 / 5%) 0 0 1rem; - --blurred-reflection-filter-blur: blur(20px); - --blurred-reflection-scale: scale(2, 1.25); - --blurred-reflection-padding-block-end: 60px; - } - - .hero[data-blur-shadow='true'] .hero__container::before { - content: ''; - position: absolute; - inset: 0; - box-shadow: var(--blurred-reflection-box-shadow); - mix-blend-mode: overlay; - pointer-events: none; - z-index: -1; - } - - .hero__blurred-image { - position: absolute; - inset: 0; - z-index: -1; - mask-image: var(--blurred-reflection-mask-image); - filter: var(--blurred-reflection-filter-saturate); - pointer-events: none; - transform: translateY(50%); - overflow: hidden; - } - - .hero__blurred-image img, - .hero__blurred-image svg { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - object-position: center center; - filter: var(--blurred-reflection-filter-blur); - opacity: var(--blur-opacity); - transform: var(--blurred-reflection-scale); - padding-block-end: var(--blurred-reflection-padding-block-end); - - &:not(:only-child) { - width: 50%; - - &:last-child { - right: 0; - left: auto; - } - } - } - - .hero-splash--over-header { - --hero-height-offset: 0px; - } - - :root[data-hero-over-header='true'][data-hero-in-view='true'] .hero-splash--over-header .hero__container { - padding-bottom: calc(var(--padding-block-end, 0px) + var(--header-group-height, 0px)); - } - -{% endstylesheet %} {% javascript %} diff --git a/sections/hero.liquid b/sections/hero.liquid index 02edcb5df..066c6b448 100644 --- a/sections/hero.liquid +++ b/sections/hero.liquid @@ -48,9 +48,11 @@ endif assign fetch_priority = 'auto' + assign loading = 'lazy' if section.index == 1 assign fetch_priority = 'high' + assign loading = 'eager' endif %} @@ -67,7 +69,9 @@ alt: section.settings.image_1.alt, class: 'hero__image', sizes: sizes, - fetchpriority: fetch_priority + fetchpriority: fetch_priority, + loading: loading, + decoding: 'async' }} {%- endif -%} @@ -91,7 +95,9 @@ alt: section.settings.video_1.alt, class: 'hero__video-poster', sizes: sizes, - fetchpriority: fetch_priority_poster + fetchpriority: fetch_priority_poster, + loading: loading, + decoding: 'async' }} {%- endif -%} {{ @@ -119,7 +125,9 @@ alt: section.settings.image_2.alt, class: 'hero__image', sizes: sizes, - fetchpriority: fetch_priority + fetchpriority: fetch_priority, + loading: loading, + decoding: 'async' }} {%- endif -%} @@ -136,7 +144,9 @@ height: section.settings.video_2.preview_image.height, alt: section.settings.video_2.alt, class: 'hero__video-poster', - sizes: sizes + sizes: sizes, + loading: loading, + decoding: 'async' }} {%- endif -%} {{ @@ -168,7 +178,9 @@ height: section.settings.image_1.height, alt: '', class: 'hero__image', - sizes: sizes + sizes: sizes, + loading: 'lazy', + decoding: 'async' }} {% endif %} {% if has_image_2 %} @@ -181,7 +193,9 @@ height: section.settings.image_2.height, alt: '', class: 'hero__image', - sizes: sizes + sizes: sizes, + loading: 'lazy', + decoding: 'async' }} {% endif %} {% if has_media == false %} diff --git a/sections/logo.liquid b/sections/logo.liquid index b8c6f0cfe..45bd4af49 100644 --- a/sections/logo.liquid +++ b/sections/logo.liquid @@ -74,49 +74,7 @@
-{% stylesheet %} - .logo-section { - width: calc(var(--logo-width) + var(--padding-inline-start) + var(--padding-inline-end)); - max-width: 100%; - max-height: calc(var(--logo-height, 100%) + var(--padding-block-start) + var(--padding-block-end)); - font-size: var(--logo-height); - display: flex; - @media screen and (max-width: 750px) { - max-height: calc( - var(--logo-height-mobile, var(--logo-height, 100%)) + var(--padding-block-start) + var(--padding-block-end) - ); - font-size: var(--logo-height-mobile, var(--logo-height)); - width: calc( - var(--logo-width-mobile, var(--logo-width)) + var(--padding-inline-start) + var(--padding-inline-end) - ); - } - } - - .logo-section--center { - margin-inline: auto; - } - - .logo-section--flex-end { - margin-inline-start: auto; - } - - .logo-section--flex-start { - margin-inline-end: auto; - } - - .logo-section__image-wrapper { - display: flex; - width: 100%; - max-width: 100%; - max-height: 100%; - } - - .logo-section__image { - object-fit: contain; - width: 100%; - } -{% endstylesheet %} {% schema %} { diff --git a/sections/main-collection-list.liquid b/sections/main-collection-list.liquid index 0995c7ad7..55b31e7e4 100644 --- a/sections/main-collection-list.liquid +++ b/sections/main-collection-list.liquid @@ -33,10 +33,42 @@ {% assign section_collections = section_collections | split: ',' %} {% endif %} + {% liquid + assign eager_count = 1 + case section.settings.layout_type + when 'grid' + assign eager_count = section.settings.columns | default: 4 + when 'carousel' + assign eager_count = 1 + when 'bento' + assign eager_count = 1 + when 'editorial' + assign eager_count = 1 + endcase + assign should_eager_load = false + if section.index == 1 + assign should_eager_load = true + endif + %} + {% capture list_items %} {% for collection in section_collections limit: max_items %} + {% liquid + assign image_loading = 'lazy' + assign image_fetchpriority = 'auto' + if should_eager_load and forloop.index <= eager_count + assign image_loading = 'eager' + assign image_fetchpriority = 'high' + endif + %}
- {% content_for 'block', type: '_collection-card', id: 'static-collection-card', closest.collection: collection %} + {% content_for 'block', + type: '_collection-card', + id: 'static-collection-card', + closest.collection: collection, + image_loading: image_loading, + image_fetchpriority: image_fetchpriority + %}
{% unless forloop.last %} diff --git a/sections/marquee.liquid b/sections/marquee.liquid index 899e2ba0b..6c22ab175 100644 --- a/sections/marquee.liquid +++ b/sections/marquee.liquid @@ -37,58 +37,7 @@ -{% stylesheet %} - marquee-component { - display: block; - width: 100%; - overflow: hidden; - } - .marquee__wrapper { - display: flex; - gap: var(--marquee-gap); - width: fit-content; - white-space: nowrap; - } - - .marquee__content { - min-width: max-content; - display: flex; - gap: var(--marquee-gap); - } - - .marquee__content :is(p, h1, h2, h3, h4, h5, h6) { - white-space: nowrap; - } - - .marquee__content .marquee__repeated-items * { - max-width: none; - } - - .marquee__repeated-items { - min-width: max-content; - display: flex; - gap: var(--marquee-gap); - align-items: center; - justify-content: center; - } - - .marquee__repeated-items > * { - align-content: center; - } - - @media (prefers-reduced-motion: no-preference) { - marquee-component:not([data-disabled]) .marquee__wrapper { - animation: marquee-motion var(--marquee-speed) linear infinite var(--marquee-direction); - } - } - - @keyframes marquee-motion { - to { - transform: translate3d(calc(-50% - (var(--marquee-gap) / 2)), 0, 0); - } - } -{% endstylesheet %} {% schema %} { diff --git a/sections/media-with-content.liquid b/sections/media-with-content.liquid index 6ecdfcbf3..7521adc57 100644 --- a/sections/media-with-content.liquid +++ b/sections/media-with-content.liquid @@ -46,156 +46,7 @@ {% content_for 'block', type: '_content-without-appearance', id: 'content' %} -{% stylesheet %} - .section--page-width { - &.media-with-content { - grid-template-areas: 'margin-left media margin-right' 'margin-left content margin-right'; - @media screen and (min-width: 750px) { - /* Wide proportion is media 3.5 parts, content 2.5 parts. Which equals 7|5. So divide the central column by 7+5 and multiply accordingly */ - --media-with-content-grid-columns: var(--full-page-grid-margin) - calc((var(--full-page-grid-central-column-width) / 12) * 7) - calc((var(--full-page-grid-central-column-width) / 12) * 5) var(--full-page-grid-margin); - - grid-template-areas: 'margin-left media content margin-right'; - } - } - - &.media-with-content--media-right { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: var(--full-page-grid-margin) - calc((var(--full-page-grid-central-column-width) / 12) * 5) - calc((var(--full-page-grid-central-column-width) / 12) * 7) var(--full-page-grid-margin); - - grid-template-areas: 'margin-left content media margin-right'; - } - } - - &.media-with-content--medium { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: var(--full-page-grid-margin) - repeat(2, calc(var(--full-page-grid-central-column-width) / 2)) var(--full-page-grid-margin); - } - } - - &.media-with-content--narrow.media-with-content--media-right { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: var(--full-page-grid-margin) - calc((var(--full-page-grid-central-column-width) / 3) * 2) - calc(var(--full-page-grid-central-column-width) / 3) var(--full-page-grid-margin); - } - } - - &.media-with-content--narrow { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: var(--full-page-grid-margin) - calc(var(--full-page-grid-central-column-width) / 3) - calc((var(--full-page-grid-central-column-width) / 3) * 2) var(--full-page-grid-margin); - } - } - } - - .section--full-width { - &.media-with-content--media-right { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: 2.5fr 3.5fr; - - grid-template-areas: 'content media'; - } - } - - &.media-with-content--medium { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: 1fr 1fr; - } - } - - &.media-with-content--narrow { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: 2fr 4fr; - } - } - - &.media-with-content--narrow.media-with-content--media-right { - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: 4fr 2fr; - } - } - } - - /* Keep the CSS specificity lower assuming that liquid won't assign this class with a full width section */ - .media-with-content.media-with-content--media-extend { - grid-template-columns: var(--media-with-content-grid-columns); - grid-template-areas: 'media media media' 'margin-left content margin-right'; - - @media screen and (min-width: 750px) { - grid-template-areas: 'media media content margin-right'; - } - } - - .media-with-content--media-extend.media-with-content--media-right { - @media screen and (min-width: 750px) { - grid-template-areas: 'margin-left content media media'; - } - } - - .media-with-content--media-right { - @media screen and (min-width: 750px) { - grid-template-areas: 'margin-left content media media'; - } - } - - .media-with-content { - --media-with-content-grid-columns: var(--full-page-grid-with-margins); - - grid-template-columns: var(--media-with-content-grid-columns); - grid-template-areas: 'media media media' 'content content content'; - - @media screen and (min-width: 750px) { - --media-with-content-grid-columns: 3.5fr 2.5fr; - - /* Default desktop layout is wide media, on the left, in full page section */ - grid-template-areas: 'media content'; - } - - .media-block { - grid-area: media; - } - - .media-with-content__content { - grid-area: content; - } - - /* Inner blocks spacing */ - .media-with-content__content > .group-block-content { - padding-inline: var(--page-margin); - padding-block: calc(2 * var(--page-margin)); - - @media screen and (min-width: 750px) { - padding-block: var(--page-margin); - } - } - - &.section--page-width .media-with-content__content > .group-block-content { - padding-inline: 0; - - @media screen and (min-width: 750px) { - padding-inline-start: var(--page-margin); - } - } - - &.section--page-width.media-with-content--media-right .media-with-content__content > .group-block-content { - padding-inline-end: var(--page-margin); - padding-inline-start: 0; - } - } - - .media-with-content[data-shopify-visual-preview] { - --hero-min-height: 500px; - - min-height: 500px; - } -{% endstylesheet %} {% schema %} { diff --git a/sections/password.liquid b/sections/password.liquid index 1079bc48f..3cdf60e22 100644 --- a/sections/password.liquid +++ b/sections/password.liquid @@ -35,168 +35,7 @@ -{% stylesheet %} - .section-password { - flex-grow: 1; - display: flex; - } - .password-main-content { - flex: 1; - display: flex; - flex-direction: column; - } - - .password-enter { - display: flex; - flex-direction: column; - align-items: center; - gap: var(--gap-sm); - padding-block: var(--padding-xl); - } - - .password-enter__powered-by { - margin: 0; - display: flex; - align-items: center; - gap: var(--padding-xs); - height: 1em; - - a { - display: flex; - } - - svg { - display: inline; - height: 1.3em; - color: var(--color-foreground); - } - } - - .password-enter__links { - display: flex; - align-items: center; - gap: var(--gap-2xl); - - @media screen and (max-width: 749px) { - flex-direction: column; - gap: var(--gap-sm); - } - } - - .password-enter__admin-link { - margin: 0; - } - - .password-enter__button { - height: var(--minimum-touch-target); - background-color: transparent; - color: var(--color-primary); - cursor: pointer; - text-decoration: underline; - - &:hover { - color: var(--color-primary-hover); - text-decoration: none; - } - } - - .password-dialog { - max-width: 100vw; - max-height: 100svh; - width: 100vw; - height: 100svh; - border: none; - transition: opacity var(--animation-values), display var(--animation-speed) allow-discrete, - overlay var(--animation-speed) allow-discrete; - - &::backdrop { - display: none; - } - } - - .password-dialog[open] { - opacity: 1; - top: 0; - left: 0; - } - - @starting-style { - .password-dialog[open] { - opacity: 0; - } - } - - .password-dialog:not([open]) { - opacity: 0; - } - - @starting-style { - .password-dialog:not([open]) { - opacity: 1; - } - } - - .password-dialog__close-button { - cursor: pointer; - } - - .password-dialog__header { - position: absolute; - top: 0; - right: 0; - padding: var(--padding-lg); - z-index: var(--layer-raised); - } - - .password-dialog__content { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: var(--padding-lg); - height: 100%; - transition: transform var(--animation-values); - } - - .password-dialog__content .email-signup__message { - padding-block-start: var(--padding-xl); - } - - .password-dialog[open] .password-dialog__content { - transform: translateY(0); - } - - @starting-style { - .password-dialog[open] .password-dialog__content { - transform: translateY(1em); - } - } - - .password-dialog:not([open]) .password-dialog__content { - transform: translateY(1em); - } - - @starting-style { - .password-dialog:not([open]) .password-dialog__content { - transform: translateY(0); - } - } - - .storefront-password-form { - max-width: 400px; - width: 100%; - } - - .email-signup__input-group, - .password-dialog__submit-button { - width: 100%; - - @media screen and (min-width: 750px) { - width: auto; - } - } -{% endstylesheet %} {% schema %} { diff --git a/sections/predictive-search.liquid b/sections/predictive-search.liquid index 132437283..5025f2e8b 100644 --- a/sections/predictive-search.liquid +++ b/sections/predictive-search.liquid @@ -161,475 +161,7 @@ {%- endif -%} -{% stylesheet %} - input[type='search']::-webkit-search-decoration { - -webkit-appearance: none; /* stylelint-disable-line */ - } - .predictive-search-dropdown { - display: flex; - flex-direction: column; - position: relative; - top: 0; - left: 0; - right: 0; - z-index: var(--layer-base); - } - - .search-action .predictive-search { - z-index: calc(var(--layer-header-menu) + 2); - } - - .search-action .search-modal .predictive-search { - z-index: var(--layer-window-overlay); - } - - .header__column--right .predictive-search-form__content-wrapper { - right: 0; - left: unset; - } - - .search-modal .predictive-search-form__content-wrapper { - width: 100%; - - @media screen and (min-width: 750px) { - height: fit-content; - } - } - - .dialog-modal .predictive-search-form__header-inner { - @media screen and (min-width: 750px) { - border: 0; - } - } - - .header[transparent] :is(.predictive-search):not(:focus-within) { - background-color: transparent; - } - - .header[transparent] .predictive-search-form__header-inner { - border-color: var(--color-foreground); - } - - .search-modal__content .predictive-search-form__content { - max-height: var(--modal-max-height); - } - - .predictive-search:has(.predictive-search-dropdown) .search-input { - outline-color: transparent; - } - - .predictive-search:has(.predictive-search-dropdown) .predictive-search-form__header-inner:focus-within { - border-top-color: transparent; - border-right-color: transparent; - border-left-color: transparent; - - @media screen and (max-width: 749px) { - border-bottom-color: transparent; - } - } - - .predictive-search:has(.predictive-search-dropdown[aria-expanded='true']) - .predictive-search-form__header-inner:focus-within { - border-top-color: transparent; - border-right-color: transparent; - border-left-color: transparent; - border-radius: var(--search-border-radius); - - @media screen and (max-width: 749px) { - border-radius: var(--style-border-radius-inputs); - } - } - - .dialog-modal .predictive-search-form__header { - border: 0; - border-radius: 0; - background-color: var(--color-background); - border-bottom: var(--style-border-width) solid var(--color-border); - - @media screen and (min-width: 750px) { - padding: var(--padding-2xs) var(--padding-2xs) 0; - border-bottom: var(--search-border-width) solid var(--color-border); - } - - @media screen and (max-width: 749px) { - transition: box-shadow 0.2s ease; - box-shadow: none; - } - } - - .search-action .predictive-search:has(.predictive-search-dropdown) .predictive-search-form__header:focus-within { - border-radius: var(--search-border-radius) var(--search-border-radius) 0 0; - transition: box-shadow var(--animation-speed) var(--animation-easing); - background-color: var(--color-background); - - @media screen and (max-width: 749px) { - border-radius: var(--style-border-radius-inputs) var(--style-border-radius-inputs) 0 0; - } - } - - @media screen and (max-width: 749px) { - .dialog-modal .predictive-search__close-modal-button { - padding-inline-start: var(--margin-xs); - margin-inline-start: 0; - } - } - - .dialog-modal[open] { - @media screen and (max-width: 749px) { - border-radius: 0; - } - } - - .dialog-modal .predictive-search-form__header:has(.predictive-search-form__header-inner:focus-within) { - @media screen and (min-width: 750px) { - border-bottom-color: transparent; - } - } - - @media screen and (max-width: 749px) { - .dialog-modal { - .predictive-search__reset-button-icon { - display: none; - } - - .predictive-search__reset-button-text { - display: block; - } - - .predictive-search-form__content { - /* The parent has overflow auto, we want to prevent a double scrollbar during animation */ - max-height: 100%; - } - - .predictive-search-form__content-wrapper { - box-shadow: none; - } - - .predictive-search-form__header { - box-shadow: none; - } - - .predictive-search-form__footer { - padding-block: var(--padding-2xl); - } - } - } - - .predictive-search-results__pill { - font-weight: 500; - white-space: nowrap; - color: var(--color-foreground); - transition: background-color var(--animation-speed-medium) var(--animation-timing-hover), - box-shadow var(--animation-speed-medium) var(--animation-timing-bounce), - transform var(--animation-speed-medium) var(--animation-timing-bounce); - margin: 2px; - - &:hover { - transform: scale(1.03); - box-shadow: 0 2px 5px rgb(0 0 0 / var(--opacity-8)); - } - } - - .predictive-search-results__pill mark { - background-color: transparent; - font-weight: 200; - color: rgb(var(--color-foreground-rgb) / var(--opacity-80)); - } - - .predictive-search-results__pill:focus, - .predictive-search-results__pill:hover, - .predictive-search-results__card--query:is([aria-selected='true'], :focus-within) .predictive-search-results__pill { - --pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-8)); - - background-color: var(--pill-background-color); - outline: var(--border-width-sm) solid var(--color-border); - border: var(--border-width-sm); - text-decoration: none; - } - - .predictive-search-results__title { - display: flex; - justify-content: space-between; - align-items: center; - font-size: var(--font-size--body-md); - font-weight: 500; - margin-block: var(--margin-sm) var(--margin-xs); - width: 100%; - text-transform: var(--title-case); - - &:first-of-type { - margin-block-start: 0; - } - - @media screen and (max-width: 749px) { - margin-block: var(--margin-lg) var(--margin-sm); - } - } - - .predictive-search-results__wrapper.predictive-search-results__wrapper-queries { - margin-bottom: var(--margin-lg); - padding-inline: var(--padding-xl); - gap: var(--gap-2xs); - } - - .predictive-search-results__card { - flex: 0 0 auto; - scroll-snap-align: start; - scroll-margin-block: calc(var(--title-font-size) + var(--title-margin-block) + var(--padding-sm)) - calc(var(--padding-xl) + var(--button-padding-block) * 2); - transition: transform var(--animation-speed-medium) var(--animation-timing-default), - background-color var(--animation-speed-medium) var(--animation-timing-hover), - border-color var(--animation-speed-medium) var(--animation-timing-hover); - - &:nth-last-child(3) { - scroll-snap-align: end; - } - - &:active { - transform: scale(0.97); - transition: transform 100ms var(--animation-timing-active); - } - } - - .recently-viewed-wrapper .predictive-search-results__card { - opacity: 1; - transform: translateY(0); - transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); - } - - .recently-viewed-wrapper.removing .predictive-search-results__card { - opacity: 0; - transform: translateY(-10px); - pointer-events: none; - } - - .predictive-search-results__card--product, - .recently-viewed-wrapper .predictive-search-results__card--product { - &:active { - transform: scale(0.97); - transition: transform 100ms var(--animation-timing-active); - } - - &:hover { - background-color: var(--card-bg-hover); - border-radius: var(--product-corner-radius); - padding: calc(var(--padding-2xs) + 2px); - margin: calc((var(--padding-2xs) + 2px) * -1); - } - - &:is([aria-selected='true'].keyboard-focus, &:focus-visible, &:has(.resource-card:focus-visible)) { - background-color: var(--card-bg-hover); - padding: calc(var(--padding-2xs) + 1px); - margin: calc((var(--padding-2xs) + 1px) * -1); - outline: var(--border-width-sm) solid var(--color-border); - border-radius: calc(var(--product-corner-radius) + 1px); - border-color: var(--card-border-focus); - } - } - - .predictive-search-results__card:not(.predictive-search-results__card--product) { - padding: var(--padding-sm); - border: var(--border-width-sm) solid var(--color-border); - border-radius: var(--card-corner-radius); - width: 60cqi; - content-visibility: visible; - - @media screen and (min-width: 750px) { - width: 27.5cqi; - } - - &:hover { - border-color: var(--card-border-hover); - background-color: var(--card-bg-hover); - } - - &[aria-selected='true'].keyboard-focus { - border-color: var(--card-border-hover); - background-color: var(--card-bg-hover); - } - - &:active { - transform: scale(0.97); - transition: transform var(--animation-speed-medium) var(--animation-timing-active); - } - } - - @keyframes search-element-scale-in { - 0% { - transform: scale(0.95); - opacity: 0; - } - - 40% { - opacity: 1; - } - - 100% { - transform: scale(1); - opacity: 1; - } - } - - @keyframes search-element-scale-out { - 0% { - transform: scale(1); - opacity: 1; - } - - 100% { - transform: scale(0.95); - opacity: 0; - } - } - - @keyframes search-element-slide-in-top { - from { - margin-top: calc(var(--modal-top-margin) + var(--padding-sm)); - opacity: 0; - } - - to { - margin-top: var(--modal-top-margin); - opacity: 1; - } - } - - @keyframes search-element-slide-out-top { - from { - margin-top: var(--modal-top-margin); - opacity: 1; - } - - to { - margin-top: calc(var(--modal-top-margin) + var(--padding-sm)); - opacity: 0; - } - } - - @keyframes content-slide { - from { - transform: translateY(var(--slide-from, 0)); - opacity: var(--slide-opacity-from, 1); - } - - to { - transform: translateY(var(--slide-to, 0)); - opacity: var(--slide-opacity-to, 1); - } - } - - .predictive-search-results__list { - --slide-width: 27.5%; - --slideshow-gap: var(--gap-md); - - /* Make space for the outline to be visible */ - padding-block-start: var(--border-width-sm); - } - - .predictive-search-results__list slideshow-arrows { - @media screen and (max-width: 749px) { - display: none; - } - } - - .predictive-search-results__no-results { - animation-delay: 100ms; - transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-in); - } - - .predictive-search-results__no-results, - .predictive-search-results__wrapper, - .predictive-search-results__wrapper-products .predictive-search-results__card { - animation: search-element-slide-up var(--animation-speed-medium) var(--animation-timing-bounce) backwards; - } - - .predictive-search-results__no-results:last-child { - margin-block: var(--margin-lg); - text-align: center; - } - - slideshow-slide .resource-card { - /* stylelint-disable-next-line declaration-no-important */ - animation-delay: 0ms !important; - } - - .predictive-search-results__list, - .predictive-search-results__wrapper { - animation-duration: var(--animation-speed-medium); - } - - .predictive-search-results__wrapper-queries { - animation-delay: 50ms; - } - - .predictive-search-results__list:nth-of-type(2) { - animation-delay: 150ms; - } - - .predictive-search-results__list:nth-of-type(3) { - animation-delay: 200ms; - } - - .predictive-search-results__list:nth-of-type(4) { - animation-delay: 250ms; - } - - .predictive-search-results__list:last-child { - margin-block-end: 0; - } - - [data-resource-type] { - /* stylelint-disable-next-line declaration-no-important */ - animation-delay: 0ms !important; - } - - .predictive-search-results__no-results.removing, - .predictive-search-results__wrapper.removing { - animation: search-element-slide-down var(--animation-speed-medium) var(--animation-timing-fade-out) forwards; - } - - .predictive-search-results__card.removing { - animation: fadeOut var(--animation-speed-medium) var(--animation-timing-fade-out) forwards; - } - - .predictive-search-results__wrapper { - transition: opacity var(--animation-speed-medium) var(--animation-timing-fade-in); - } - - @keyframes search-element-slide-up { - from { - opacity: 0; - transform: translateY(8px); - } - - to { - opacity: 1; - transform: translateY(0); - } - } - - @keyframes search-element-slide-down { - from { - opacity: 1; - transform: translateY(0); - } - - to { - opacity: 0; - transform: translateY(8px); - } - } - - .predictive-search-results__card--query { - transition: transform var(--animation-speed-medium) var(--animation-timing-bounce); - transform-origin: center; - - &:active { - transform: scale(0.97); - } - } -{% endstylesheet %} {% schema %} { diff --git a/snippets/product-media.liquid b/snippets/product-media.liquid index 980d9214c..b85b5852e 100644 --- a/snippets/product-media.liquid +++ b/snippets/product-media.liquid @@ -18,6 +18,7 @@ {% liquid assign widths = widths | default: '240, 352, 832, 1200, 1600, 1920, 2560, 3840' + assign loading = loading | default: 'lazy' %}
{{ 'accessibility.play_model' | t }} diff --git a/snippets/resource-image.liquid b/snippets/resource-image.liquid index af6f306c8..b3a05bd8a 100644 --- a/snippets/resource-image.liquid +++ b/snippets/resource-image.liquid @@ -10,6 +10,9 @@ @param {object} block_settings - Block settings object @param {object} [section_settings] - Section settings for layout-aware sizing @param {string} [block_attributes] - Block shopify attributes for theme editor + @param {string} [loading] - Image loading attribute ('eager' | 'lazy') + @param {string} [fetch_priority] - Image fetch priority ('high' | 'auto' | 'low') + @param {string} [decoding] - Image decoding hint ('async' | 'auto' | 'sync') @example {% render 'resource-image', @@ -78,7 +81,9 @@ # Generate responsive image attributes assign sizes = '(min-width: 750px) 50vw, 100vw' assign lazy_sizes = 'auto, ' | append: sizes - assign loading = 'eager' + assign loading = loading | default: 'lazy' + assign fetch_priority = fetch_priority | default: 'auto' + assign decoding = decoding | default: 'async' # Layout-aware sizing for resource lists if section_settings.layout_type @@ -87,7 +92,6 @@ assign calculated_width = 100 | divided_by: section_settings.columns | append: 'vw' assign sizes = '(min-width: 750px) [calc-width], 100vw' | replace: '[calc-width]', calculated_width when 'editorial', 'bento' - assign loading = 'lazy' assign sizes = lazy_sizes endcase endif @@ -152,7 +156,13 @@ {{ image_resource | image_url: width: 3840 - | image_tag: widths: widths, class: 'image-block__image', sizes: sizes, loading: loading + | image_tag: + widths: widths, + class: 'image-block__image', + sizes: sizes, + loading: loading, + fetchpriority: fetch_priority, + decoding: decoding }}
{% else %} diff --git a/snippets/stylesheets.liquid b/snippets/stylesheets.liquid index 88668ee40..756f21504 100644 --- a/snippets/stylesheets.liquid +++ b/snippets/stylesheets.liquid @@ -1,2 +1,24 @@ {{ 'overflow-list.css' | asset_url | preload_tag: as: 'style' }} {{ 'base.css' | asset_url | stylesheet_tag: preload: true }} + +{%- liquid + assign optional_css_tokens = 'collection-links-component,featured-blog-posts,featured-product-section,hero--splash,logo-section,marquee__wrapper,media-with-content,section-password,predictive-search,footer-content' | split: ',' + assign load_optional_css = false + + for token in optional_css_tokens + if content_for_layout contains token + assign load_optional_css = true + break + endif + endfor +-%} + +{%- if load_optional_css or request.design_mode -%} + + +{%- endif -%} diff --git a/snippets/theme-styles-variables.liquid b/snippets/theme-styles-variables.liquid index be90411ff..f4ef30566 100644 --- a/snippets/theme-styles-variables.liquid +++ b/snippets/theme-styles-variables.liquid @@ -566,27 +566,4 @@ --cart-secondary-font-weight: var(--font-{{ settings.cart_price_font }}--weight); } -/* 1) Load your custom font file */ -@font-face { - font-family: 'Gangster Grotesk'; - src: url('{{ "GangsterGrotesk-Regular.woff" | asset_url }}') format('woff'); - font-weight: 400; - font-style: normal; - font-display: swap; -} - -/* 2) Override the theme CSS variables to use your family */ -:root { - --font-body--family: 'Gangster Grotesk', sans-serif; - --font-subheading--family: 'Gangster Grotesk', sans-serif; - --font-heading--family: 'Gangster Grotesk', sans-serif; - --font-accent--family: 'Gangster Grotesk', sans-serif; - - /* optional if the theme reads these */ - --font-body--weight: 400; - --font-subheading--weight: 400; - --font-heading--weight: 400; - --font-accent--weight: 400; -} - {% endstyle %} diff --git a/templates/index.json b/templates/index.json index e3273838e..60c44d7b1 100644 --- a/templates/index.json +++ b/templates/index.json @@ -1360,7 +1360,7 @@ "layout_type": "carousel", "carousel_on_mobile": true, "post_limit": 6, - "columns": 2, + "columns": 3, "mobile_columns": "2", "mobile_card_size": "60cqw", "columns_gap": 16, @@ -2133,15 +2133,15 @@ "open_by_default": true, "provider": "instagram", "feed_url": "", - "max_items": 10, + "max_items": 12, "show_captions": false, "open_new_tab": true, "image_ratio": "portrait", - "columns": 4, - "columns_gap": 12, - "mobile_card_size": "75cqw", + "columns": 5, + "columns_gap": 16, + "mobile_card_size": "60cqw", "slide_width_max": 520, - "icons_style": "arrow", + "icons_style": "chevron", "icons_shape": "circle", "color_scheme": "scheme-1", "hover_color_scheme": "scheme-8", From f9283d689e2933e48808b52cdf750ad7236ebfd0 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 02:15:48 +0000 Subject: [PATCH 1190/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index 60c44d7b1..47846c755 100644 --- a/templates/index.json +++ b/templates/index.json @@ -2133,7 +2133,7 @@ "open_by_default": true, "provider": "instagram", "feed_url": "", - "max_items": 12, + "max_items": 20, "show_captions": false, "open_new_tab": true, "image_ratio": "portrait", From 1f71f45a0e2a0df0b5a404c0adc196721938bfb3 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 02:21:22 +0000 Subject: [PATCH 1191/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index 60c44d7b1..47846c755 100644 --- a/templates/index.json +++ b/templates/index.json @@ -2133,7 +2133,7 @@ "open_by_default": true, "provider": "instagram", "feed_url": "", - "max_items": 12, + "max_items": 20, "show_captions": false, "open_new_tab": true, "image_ratio": "portrait", From bd7aa19133a27b9cef8b0eb89d69d6d7d1955616 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 03:15:56 +0000 Subject: [PATCH 1192/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/templates/index.json b/templates/index.json index 47846c755..d7f8e61b0 100644 --- a/templates/index.json +++ b/templates/index.json @@ -1656,7 +1656,7 @@ "width": "100%", "max_width": "normal", "alignment": "center", - "type_preset": "h6", + "type_preset": "paragraph", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1784,7 +1784,7 @@ "width": "100%", "max_width": "normal", "alignment": "center", - "type_preset": "h6", + "type_preset": "paragraph", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1912,7 +1912,7 @@ "width": "100%", "max_width": "normal", "alignment": "center", - "type_preset": "h6", + "type_preset": "paragraph", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1947,7 +1947,6 @@ "group_dCTtg4", "group_EjXULC" ], - "disabled": true, "name": "t:names.icons_with_text", "settings": { "content_direction": "row", @@ -2209,8 +2208,8 @@ "order": [ "section_qNUGrK", "section_HrfhEB", - "section_TTRARa", "section_z7Mh7j", + "section_TTRARa", "section_zk7ykz", "section_REkpVR", "section_3hPHCr" From df1c6bf94e3bffa29983879a8a7fd8a2b81a3af5 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 03:17:30 +0000 Subject: [PATCH 1193/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- sections/footer-group.json | 126 ++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/sections/footer-group.json b/sections/footer-group.json index 42fdd76a4..f2c32b45a 100644 --- a/sections/footer-group.json +++ b/sections/footer-group.json @@ -14,65 +14,6 @@ "migrated_footer_content": { "type": "section", "blocks": { - "group_zRaGfW": { - "type": "group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-end", - "vertical_alignment": "flex-start", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": { - "icon_aBedxk": { - "type": "icon", - "name": "t:names.icon", - "settings": { - "icon": "price_tag", - "image_upload": "shopify://shop_images/Golden_Bee_Icon_White.svg", - "width": 24, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - } - }, - "block_order": [ - "icon_aBedxk" - ] - }, "group_tbFfTQ": { "type": "group", "name": "Email signup", @@ -102,8 +43,8 @@ "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", + "toggle_overlay": true, + "overlay_color": "#f8b5c4", "overlay_style": "solid", "gradient_direction": "to top", "link": "", @@ -247,6 +188,65 @@ "email_signup_NcLwNb" ] }, + "group_zRaGfW": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-end", + "vertical_alignment": "flex-start", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": { + "icon_aBedxk": { + "type": "icon", + "name": "t:names.icon", + "settings": { + "icon": "price_tag", + "image_upload": "shopify://shop_images/Golden_Bee_Icon_White.svg", + "width": 24, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + } + }, + "block_order": [ + "icon_aBedxk" + ] + }, "group_cGJPxi": { "type": "group", "name": "t:names.group", @@ -383,8 +383,8 @@ } }, "block_order": [ - "group_zRaGfW", "group_tbFfTQ", + "group_zRaGfW", "group_cGJPxi" ], "name": "Footer", @@ -413,7 +413,7 @@ "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", - "padding-block-start": 44, + "padding-block-start": 0, "padding-block-end": 44, "padding-inline-start": 0, "padding-inline-end": 0 From 4fbf907a66c9c2ecbc8dc4dda4c423c4c788b0a5 Mon Sep 17 00:00:00 2001 From: Morg Date: Wed, 11 Feb 2026 19:17:39 +1300 Subject: [PATCH 1194/1275] fix: avoid double borders in search modal --- assets/sections-optional.css | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/sections-optional.css b/assets/sections-optional.css index 45f03c6a0..3a129d6b2 100644 --- a/assets/sections-optional.css +++ b/assets/sections-optional.css @@ -797,9 +797,8 @@ input[type='search']::-webkit-search-decoration { } .dialog-modal .predictive-search-form__header-inner { - @media screen and (min-width: 750px) { - border: 0; - } + border: 0; + box-shadow: none; } .header[transparent] :is(.predictive-search):not(:focus-within) { From eaf8ea8ea3e509985e98268d8dc891ef10d85ba5 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 06:20:51 +0000 Subject: [PATCH 1195/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden From 7e5a79e141adf656d21f6ea408cf57ddc45c4930 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 08:34:33 +0000 Subject: [PATCH 1196/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 2732 +++++++++++++++++++++--------------------- 1 file changed, 1366 insertions(+), 1366 deletions(-) diff --git a/templates/index.json b/templates/index.json index d7f8e61b0..b80f5c844 100644 --- a/templates/index.json +++ b/templates/index.json @@ -139,7 +139,7 @@ "button_K6nQmt": { "type": "button", "settings": { - "label": "Shop Golden", + "label": "SHOP GOLDEN", "link": "shopify://collections/all", "open_in_new_tab": false, "style_class": "link", @@ -256,551 +256,490 @@ "padding-inline-end": 16 } }, - "section_TTRARa": { + "section_z7Mh7j": { "type": "section", "blocks": { - "accordion_iAgAPB": { - "type": "accordion", - "name": "t:names.accordion", + "group_NwJWWa": { + "type": "group", "settings": { - "icon": "caret", - "dividers": true, - "type_preset": "h5", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, "inherit_color_scheme": true, - "color_scheme": "scheme-5", + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", "border": "none", "border_width": 1, "border_opacity": 100, "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, "blocks": { - "accordion_row_VXFwUN": { - "type": "accordion_row", - "name": "t:names.accordion_row", + "icon_CMbwYr": { + "type": "icon", "settings": { - "heading": "Honey Soda", - "right_heading": "Shop Golden", - "heading_links_enabled": true, - "heading_link": "shopify://collections/all", - "right_heading_link": "shopify://collections/all", - "collapsible": false, - "open_by_default": true, - "group_mode": "shared", - "color_scheme": "scheme-1", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 44, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "h2", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 + "icon": "eye", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + }, + "group_BE3cGt": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "group_pzRHb6": { - "type": "group", - "name": "t:names.group", + "text_my9Cbb": { + "type": "text", "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 0, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

100% All Natural Ingredients

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "padding-inline-start": 16, + "padding-inline-end": 16 }, - "blocks": { - "product_card_X4xJbc": { - "type": "product-card", - "name": "t:names.product_card", - "settings": { - "product": "golden-lemon-manuka", - "product_card_gap": 16, - "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "product_card_gallery_e9bC3k": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_wB8C4M": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Shop Lemon

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "h4", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-primary)", - "background": false, - "background_color": "#00000003", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "product_card_group_CXCGtg": { - "type": "_product-card-group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "product_card_gallery_e9bC3k", - "text_wB8C4M", - "product_card_group_CXCGtg" - ] - }, - "product_card_8UqxLN": { - "type": "product-card", - "name": "t:names.product_card", - "settings": { - "product": "blackcurrant-manuka-soda", - "product_card_gap": 16, - "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "product_card_gallery_gTxQBR": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_namg8Y": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Shop Blackcurrant

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "h4", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-primary)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "product_card_gallery_gTxQBR", - "text_namg8Y" - ] - }, - "product_card_QJqw7z": { - "type": "product-card", - "name": "t:names.product_card", - "settings": { - "product": "kanuka-kola", - "product_card_gap": 16, - "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "product_card_gallery_tRjrqx": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_nK6pKR": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Shop Kola

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "h4", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-primary)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "product_card_gallery_tRjrqx", - "text_nK6pKR" - ] - } + "blocks": {} + } + }, + "block_order": [ + "text_my9Cbb" + ] + } + }, + "block_order": [ + "icon_CMbwYr", + "group_BE3cGt" + ] + }, + "group_dCTtg4": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "icon_rbUdf3": { + "type": "icon", + "settings": { + "icon": "heart", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + }, + "group_7b4EWj": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_TtQ8WD": { + "type": "text", + "settings": { + "text": "

Sweetened with Mānuka Honey

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 }, - "block_order": [ - "product_card_X4xJbc", - "product_card_8UqxLN", - "product_card_QJqw7z" - ] + "blocks": {} } }, "block_order": [ - "group_pzRHb6" + "text_TtQ8WD" ] + } + }, + "block_order": [ + "icon_rbUdf3", + "group_7b4EWj" + ] + }, + "group_EjXULC": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "icon_rfrE68": { + "type": "icon", + "settings": { + "icon": "silhouette", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} }, - "accordion_row_Q9VzCU": { + "group_8FxjKk": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_FjYhjj": { + "type": "text", + "settings": { + "text": "

New Zealand grown fruit

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_FjYhjj" + ] + } + }, + "block_order": [ + "icon_rfrE68", + "group_8FxjKk" + ] + } + }, + "block_order": [ + "group_NwJWWa", + "group_dCTtg4", + "group_EjXULC" + ], + "name": "t:names.icons_with_text", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 16, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 44, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 44, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_TTRARa": { + "type": "section", + "blocks": { + "accordion_iAgAPB": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h5", + "inherit_color_scheme": true, + "color_scheme": "scheme-5", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_VXFwUN": { "type": "accordion_row", "name": "t:names.accordion_row", "settings": { - "heading": "Low Cal", - "right_heading": "Mānuka Honey", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", + "heading": "Honey Soda", + "right_heading": "Shop Golden", + "heading_links_enabled": true, + "heading_link": "shopify://collections/all", + "right_heading_link": "shopify://collections/all", "collapsible": false, - "open_by_default": false, - "group_mode": "split", + "open_by_default": true, + "group_mode": "shared", "color_scheme": "scheme-1", - "hover_color_scheme": "scheme-4", - "left_hover_color_scheme": "scheme-1", - "right_hover_color_scheme": "scheme-1", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", "summary_padding_block_start": 16, "summary_padding_block_end": 16, "summary_padding_inline_start": 16, "summary_padding_inline_end": 16, - "content_padding_block_start": 0, - "content_padding_block_end": 0, - "content_padding_inline_start": 0, - "content_padding_inline_end": 0, + "content_padding_block_start": 16, + "content_padding_block_end": 44, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, "heading_type_preset": "h2", - "right_heading_type_preset": "", + "right_heading_type_preset": "h2", "heading_min_size": 1.1, "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "group_HdYCtg": { - "type": "group", - "name": "Left", - "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-start", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 0, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fill", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "group_MbJwhG": { - "type": "group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "image_P9wXUc": { - "type": "image", - "name": "t:names.image", - "settings": { - "link": "", - "image_ratio": "adapt", - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "image_P9wXUc" - ] - }, - "group_dTTjFC": { - "type": "group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "group_MbJwhG", - "group_dTTjFC" - ] - }, - "group_rWtahp": { + "icon": "none", + "width": 20 + }, + "blocks": { + "group_pzRHb6": { "type": "group", - "name": "Right", + "name": "t:names.group", "settings": { - "content_direction": "column", + "content_direction": "row", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", "vertical_alignment": "center", @@ -809,7 +748,7 @@ "vertical_alignment_flex_direction_column": "center", "enable_sticky": false, "sticky_offset": 0, - "gap": 12, + "gap": 0, "width": "fill", "custom_width": 100, "width_mobile": "fill", @@ -837,136 +776,164 @@ "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": {} - } - }, - "block_order": [ - "group_HdYCtg", - "group_rWtahp" - ] - }, - "accordion_row_6GXUWf": { - "type": "accordion_row", - "name": "t:names.accordion_row", - "settings": { - "heading": "All Natural", - "right_heading": "Vitamin C", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "split", - "color_scheme": "scheme-1", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": {} - }, - "accordion_row_mrmmNj": { - "type": "accordion_row", - "name": "t:names.accordion_row", - "settings": { - "heading": "Product of", - "right_heading": "Aotearoa", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": true, - "group_mode": "shared", - "color_scheme": "scheme-1", - "hover_color_scheme": "scheme-1", - "left_hover_color_scheme": "scheme-1", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 44, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "slideshow_block_eCimjd": { - "type": "slideshow_block", - "name": "Slideshow", - "settings": { - "icons_style": "chevron", - "slideshow_controls_style": "none", - "autoplay": false, - "autoplay_speed": 4, - "slide_height": "large", - "padding-block-start": 0, - "padding-block-end": 16, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, "blocks": { - "slide_ty67PV": { - "type": "_slide", - "name": "t:names.slide", + "product_card_X4xJbc": { + "type": "product-card", + "name": "t:names.product_card", "settings": { - "media_type_1": "image", - "image_1": "shopify://shop_images/shutterstock_1715090482.webp", - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-end", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "flex-end", - "gap": 12, + "product": "golden-lemon-manuka", + "product_card_gap": 16, "inherit_color_scheme": false, - "color_scheme": "scheme-6", - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "gradient", - "gradient_direction": "to top", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "text_aYnLyh": { + "product_card_gallery_e9bC3k": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_wB8C4M": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Shop Lemon

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-primary)", + "background": false, + "background_color": "#00000003", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_card_group_CXCGtg": { + "type": "_product-card-group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "product_card_gallery_e9bC3k", + "text_wB8C4M", + "product_card_group_CXCGtg" + ] + }, + "product_card_8UqxLN": { + "type": "product-card", + "name": "t:names.product_card", + "settings": { + "product": "blackcurrant-manuka-soda", + "product_card_gap": 16, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "product_card_gallery_gTxQBR": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_namg8Y": { "type": "text", "name": "t:names.text", "settings": { - "text": "
Beehives on the way to Wharariki Beach, Cape Farewell
", - "width": "fit-content", + "text": "

Shop Blackcurrant

", + "width": "100%", "max_width": "normal", - "alignment": "left", - "type_preset": "h6", + "alignment": "center", + "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "var(--color-foreground)", + "color": "var(--color-primary)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -979,51 +946,60 @@ } }, "block_order": [ - "text_aYnLyh" + "product_card_gallery_gTxQBR", + "text_namg8Y" ] }, - "slide_xxA3Bt": { - "type": "_slide", - "name": "t:names.slide", + "product_card_QJqw7z": { + "type": "product-card", + "name": "t:names.product_card", "settings": { - "media_type_1": "image", - "image_1": "shopify://shop_images/iStock-641225382.jpg", - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-end", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "flex-end", - "gap": 12, + "product": "kanuka-kola", + "product_card_gap": 16, "inherit_color_scheme": false, - "color_scheme": "scheme-6", - "toggle_overlay": true, - "overlay_color": "#00000026", - "overlay_style": "gradient", - "gradient_direction": "to top", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "text_iAAQQC": { + "product_card_gallery_tRjrqx": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_nK6pKR": { "type": "text", "name": "t:names.text", "settings": { - "text": "
Farewell Spit, Golden bay
", - "width": "fit-content", + "text": "

Shop Kola

", + "width": "100%", "max_width": "normal", - "alignment": "left", - "type_preset": "h6", + "alignment": "center", + "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "var(--color-foreground)", + "color": "var(--color-primary)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -1036,55 +1012,57 @@ } }, "block_order": [ - "text_iAAQQC" + "product_card_gallery_tRjrqx", + "text_nK6pKR" ] } }, "block_order": [ - "slide_ty67PV", - "slide_xxA3Bt" + "product_card_X4xJbc", + "product_card_8UqxLN", + "product_card_QJqw7z" ] } }, "block_order": [ - "slideshow_block_eCimjd" + "group_pzRHb6" ] }, - "accordion_row_3KkWB7": { + "accordion_row_Q9VzCU": { "type": "accordion_row", - "name": "Accordion row", + "name": "t:names.accordion_row", "settings": { - "heading": "Hawke's Bay", - "right_heading": "Lemons", + "heading": "Low Cal", + "right_heading": "Mānuka Honey", "heading_links_enabled": false, "heading_link": "", "right_heading_link": "", - "collapsible": true, + "collapsible": false, "open_by_default": false, - "group_mode": "shared", - "color_scheme": "scheme-5", - "hover_color_scheme": "scheme-1", + "group_mode": "split", + "color_scheme": "scheme-1", + "hover_color_scheme": "scheme-4", "left_hover_color_scheme": "scheme-1", "right_hover_color_scheme": "scheme-1", "summary_padding_block_start": 16, "summary_padding_block_end": 16, "summary_padding_inline_start": 16, "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, + "content_padding_block_start": 0, + "content_padding_block_end": 0, + "content_padding_inline_start": 0, + "content_padding_inline_end": 0, "heading_type_preset": "h2", - "right_heading_type_preset": "match", + "right_heading_type_preset": "", "heading_min_size": 1.1, "heading_max_size": 1.6, "icon": "none", "width": 20 }, "blocks": { - "group_F7Tqp6": { + "group_HdYCtg": { "type": "group", - "name": "Lemons", + "name": "Left", "settings": { "content_direction": "row", "vertical_on_mobile": true, @@ -1095,12 +1073,12 @@ "vertical_alignment_flex_direction_column": "center", "enable_sticky": false, "sticky_offset": 0, - "gap": 12, + "gap": 0, "width": "fill", "custom_width": 100, "width_mobile": "fill", "custom_width_mobile": 100, - "height": "fit", + "height": "fill", "custom_height": 100, "inherit_color_scheme": true, "color_scheme": "", @@ -1111,8 +1089,8 @@ "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": true, - "overlay_color": "rgba(0,0,0,0)", + "toggle_overlay": false, + "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", "link": "", @@ -1124,107 +1102,133 @@ "padding-inline-end": 0 }, "blocks": { - "text_EwKyjR": { - "type": "text", - "name": "t:names.text", + "group_MbJwhG": { + "type": "group", + "name": "t:names.group", "settings": { - "text": "

Golden’s Meyer lemons are grown and pressed at our partner orchards on Hawke’s Bay’s eastern edge, right where the Wairoa River meets the Pacific Ocean. Meyer lemons are naturally sweeter, softer and more aromatic than standard varieties, so the citrus lift feels rounded rather than sharp. We use mostly single-strength juice, which means the flavour shifts subtly with the season, and that real acidity keeps our honey sweetness balanced and the finish clean, with a natural hit of vitamin C from real lemon.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": {} + "blocks": { + "image_P9wXUc": { + "type": "image", + "name": "t:names.image", + "settings": { + "link": "", + "image_ratio": "adapt", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_P9wXUc" + ] }, - "image_GYyybQ": { - "type": "image", - "name": "t:names.image", + "group_dTTjFC": { + "type": "group", + "name": "t:names.group", "settings": { - "image": "shopify://shop_images/lemon_white_background.png", - "link": "", - "image_ratio": "adapt", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, "width": "fill", "custom_width": 100, - "width_mobile": "fit-content", + "width_mobile": "fill", "custom_width_mobile": 100, "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", "border": "none", "border_width": 1, "border_opacity": 100, "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 44, - "padding-block-end": 44, - "padding-inline-start": 44, - "padding-inline-end": 44 + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} } }, "block_order": [ - "text_EwKyjR", - "image_GYyybQ" + "group_MbJwhG", + "group_dTTjFC" ] - } - }, - "block_order": [ - "group_F7Tqp6" - ] - }, - "accordion_row_cwYKwF": { - "type": "accordion_row", - "name": "Accordion row", - "settings": { - "heading": "Otago", - "right_heading": "Blackcurrants", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "shared", - "color_scheme": "scheme-2", - "hover_color_scheme": "scheme-1", - "left_hover_color_scheme": "scheme-1", - "right_hover_color_scheme": "scheme-1", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "match", - "heading_min_size": 1.2, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "group_7mFNTK": { + }, + "group_rWtahp": { "type": "group", - "name": "Blackcurrants", + "name": "Right", "settings": { - "content_direction": "row", + "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-start", + "vertical_alignment": "center", "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", @@ -1235,7 +1239,7 @@ "custom_width": 100, "width_mobile": "fill", "custom_width_mobile": 100, - "height": "fill", + "height": "fit", "custom_height": 100, "inherit_color_scheme": true, "color_scheme": "", @@ -1258,81 +1262,27 @@ "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "text_FEnK3E": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where bright days and cool nights help the fruit ripen slowly and build real intensity. That makes for a darker berry flavour with a clean, tangy edge. Blackcurrants are naturally rich in anthocyanins, the plant pigments that give the fruit its deep purple colour and are studied for their antioxidant role, and they’re also a strong natural source of vitamin C. The benefits are a nice extra, but we chose Otago blackcurrants for a simpler reason: they taste amazing.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "image_EDeJpJ": { - "type": "image", - "name": "t:names.image", - "settings": { - "image": "shopify://shop_images/blackcurrant_white_background.png", - "link": "", - "image_ratio": "adapt", - "width": "fill", - "custom_width": 50, - "width_mobile": "fill", - "custom_width_mobile": 50, - "height": "fill", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 44, - "padding-block-end": 44, - "padding-inline-start": 44, - "padding-inline-end": 44 - }, - "blocks": {} - } - }, - "block_order": [ - "text_FEnK3E", - "image_EDeJpJ" - ] + "blocks": {} } }, "block_order": [ - "group_7mFNTK" + "group_HdYCtg", + "group_rWtahp" ] }, - "accordion_row_dipeVh": { + "accordion_row_6GXUWf": { "type": "accordion_row", - "name": "Accordion row", + "name": "t:names.accordion_row", "settings": { - "heading": "Golden Hour", - "right_heading": "Blog", - "heading_links_enabled": true, - "heading_link": "shopify://blogs/golden-hour", - "right_heading_link": "shopify://blogs/golden-hour", - "collapsible": false, - "open_by_default": true, - "group_mode": "shared", - "color_scheme": "", + "heading": "All Natural", + "right_heading": "Vitamin C", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "scheme-1", "hover_color_scheme": "", "left_hover_color_scheme": "", "right_hover_color_scheme": "", @@ -1341,112 +1291,100 @@ "summary_padding_inline_start": 16, "summary_padding_inline_end": 16, "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": {} + }, + "accordion_row_mrmmNj": { + "type": "accordion_row", + "name": "t:names.accordion_row", + "settings": { + "heading": "Product of", + "right_heading": "Aotearoa", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": true, + "group_mode": "shared", + "color_scheme": "scheme-1", + "hover_color_scheme": "scheme-1", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, "content_padding_block_end": 44, "content_padding_inline_start": 16, "content_padding_inline_end": 16, - "heading_type_preset": "", - "right_heading_type_preset": "match", + "heading_type_preset": "h2", + "right_heading_type_preset": "", "heading_min_size": 1.1, "heading_max_size": 1.6, "icon": "none", "width": 20 }, "blocks": { - "blog_summary_carousel_eixRQp": { - "type": "blog-summary-carousel", - "name": "Blog summary carousel", + "slideshow_block_eCimjd": { + "type": "slideshow_block", + "name": "Slideshow", "settings": { - "blog": "golden-hour", - "layout_type": "carousel", - "carousel_on_mobile": true, - "post_limit": 6, - "columns": 3, - "mobile_columns": "2", - "mobile_card_size": "60cqw", - "columns_gap": 16, - "rows_gap": 16, "icons_style": "chevron", - "icons_shape": "none", - "section_width": "full-width", - "gap": 12, - "color_scheme": "", - "padding-block-start": 16, - "padding-block-end": 16 + "slideshow_controls_style": "none", + "autoplay": false, + "autoplay_speed": 4, + "slide_height": "large", + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "static-blog-title": { - "type": "_featured-blog-posts-title", - "disabled": true, - "static": true, - "settings": { - "text": "", - "padding_block_start": 0, - "padding_block_end": 0, - "padding_inline_start": 0, - "padding_inline_end": 0, - "left_heading": "", - "right_heading": "", - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 0, - "heading_max_size": 0, - "width": "fit-content", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "static-blog-post-card": { - "type": "_featured-blog-posts-card", - "static": true, + "slide_ty67PV": { + "type": "_slide", + "name": "t:names.slide", "settings": { - "article": "", - "alignment": "left", - "gap": 8, - "inherit_color_scheme": true, - "color_scheme": "", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "media_type_1": "image", + "image_1": "shopify://shop_images/shutterstock_1715090482.webp", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-end", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 12, + "inherit_color_scheme": false, + "color_scheme": "scheme-6", + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 }, "blocks": { - "image": { - "type": "_featured-blog-posts-image", - "static": true, - "settings": { - "image_ratio": "square", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0 - }, - "blocks": {} - }, - "title": { - "type": "_heading", - "static": true, + "text_aYnLyh": { + "type": "text", + "name": "t:names.text", "settings": { - "type_preset": "rte", + "text": "
Beehives on the way to Wharariki Beach, Cape Farewell
", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1454,518 +1392,580 @@ "case": "none", "wrap": "pretty", "color": "var(--color-foreground)", - "text": "", - "read_only": false, - "alignment": "left", - "show_alignment": true, + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, "blocks": {} - }, - "blog-post-info-text": { - "type": "_blog-post-info-text", - "static": true, - "settings": { - "show_date": true, - "show_author": true, - "type_preset": "", - "alignment": "left", - "show_alignment": true, - "padding-block-start": 12, - "padding-block-end": 0 - }, - "blocks": {} - }, - "blog-post-description": { - "type": "_blog-post-description", - "static": true, - "settings": { - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "padding-block-start": 16, - "padding-block-end": 0 - }, - "blocks": {} - } - }, - "block_order": [] - } - }, - "block_order": [] - } - }, - "block_order": [ - "blog_summary_carousel_eixRQp" - ] - } - }, - "block_order": [ - "accordion_row_VXFwUN", - "accordion_row_Q9VzCU", - "accordion_row_6GXUWf", - "accordion_row_mrmmNj", - "accordion_row_3KkWB7", - "accordion_row_cwYKwF", - "accordion_row_dipeVh" - ] - } - }, - "block_order": [ - "accordion_iAgAPB" - ], - "name": "t:names.large_logo", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "space-between", - "gap": 12, - "section_width": "full-width", - "section_height": "", - "section_height_custom": 40, - "color_scheme": "scheme-1", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 0, - "border_opacity": 100, - "split_divider_color": "#d9d9d9", - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - } - }, - "section_z7Mh7j": { - "type": "section", - "blocks": { - "group_NwJWWa": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "icon_CMbwYr": { - "type": "icon", - "settings": { - "icon": "eye", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - }, - "group_BE3cGt": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_my9Cbb": { - "type": "text", - "settings": { - "text": "

100% All Natural Ingredients

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 + } + }, + "block_order": [ + "text_aYnLyh" + ] + }, + "slide_xxA3Bt": { + "type": "_slide", + "name": "t:names.slide", + "settings": { + "media_type_1": "image", + "image_1": "shopify://shop_images/iStock-641225382.jpg", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-end", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 12, + "inherit_color_scheme": false, + "color_scheme": "scheme-6", + "toggle_overlay": true, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": { + "text_iAAQQC": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "
Farewell Spit, Golden bay
", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_iAAQQC" + ] + } }, - "blocks": {} + "block_order": [ + "slide_ty67PV", + "slide_xxA3Bt" + ] } }, "block_order": [ - "text_my9Cbb" + "slideshow_block_eCimjd" ] - } - }, - "block_order": [ - "icon_CMbwYr", - "group_BE3cGt" - ] - }, - "group_dCTtg4": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "icon_rbUdf3": { - "type": "icon", - "settings": { - "icon": "heart", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} }, - "group_7b4EWj": { - "type": "group", + "accordion_row_3KkWB7": { + "type": "accordion_row", + "name": "Accordion row", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "heading": "Hawke's Bay", + "right_heading": "Lemons", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "scheme-5", + "hover_color_scheme": "scheme-1", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "scheme-1", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 }, "blocks": { - "text_TtQ8WD": { - "type": "text", + "group_F7Tqp6": { + "type": "group", + "name": "Lemons", "settings": { - "text": "

Sweetened with Mānuka Honey

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-start", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": true, + "overlay_color": "rgba(0,0,0,0)", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", "padding-block-start": 0, "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_EwKyjR": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden’s Meyer lemons are grown and pressed at our partner orchards on Hawke’s Bay’s eastern edge, right where the Wairoa River meets the Pacific Ocean. Meyer lemons are naturally sweeter, softer and more aromatic than standard varieties, so the citrus lift feels rounded rather than sharp. We use mostly single-strength juice, which means the flavour shifts subtly with the season, and that real acidity keeps our honey sweetness balanced and the finish clean, with a natural hit of vitamin C from real lemon.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "image_GYyybQ": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/lemon_white_background.png", + "link": "", + "image_ratio": "adapt", + "width": "fill", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100, + "height": "fit", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 44, + "padding-block-end": 44, + "padding-inline-start": 44, + "padding-inline-end": 44 + }, + "blocks": {} + } }, - "blocks": {} + "block_order": [ + "text_EwKyjR", + "image_GYyybQ" + ] } }, "block_order": [ - "text_TtQ8WD" + "group_F7Tqp6" ] - } - }, - "block_order": [ - "icon_rbUdf3", - "group_7b4EWj" - ] - }, - "group_EjXULC": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "icon_rfrE68": { - "type": "icon", - "settings": { - "icon": "silhouette", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} }, - "group_8FxjKk": { - "type": "group", + "accordion_row_cwYKwF": { + "type": "accordion_row", + "name": "Accordion row", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, + "heading": "Otago", + "right_heading": "Blackcurrants", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "scheme-2", + "hover_color_scheme": "scheme-1", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "scheme-1", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "match", + "heading_min_size": 1.2, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "group_7mFNTK": { + "type": "group", + "name": "Blackcurrants", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-start", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_FEnK3E": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where bright days and cool nights help the fruit ripen slowly and build real intensity. That makes for a darker berry flavour with a clean, tangy edge. Blackcurrants are naturally rich in anthocyanins, the plant pigments that give the fruit its deep purple colour and are studied for their antioxidant role, and they’re also a strong natural source of vitamin C. The benefits are a nice extra, but we chose Otago blackcurrants for a simpler reason: they taste amazing.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "image_EDeJpJ": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/blackcurrant_white_background.png", + "link": "", + "image_ratio": "adapt", + "width": "fill", + "custom_width": 50, + "width_mobile": "fill", + "custom_width_mobile": 50, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 44, + "padding-block-end": 44, + "padding-inline-start": 44, + "padding-inline-end": 44 + }, + "blocks": {} + } + }, + "block_order": [ + "text_FEnK3E", + "image_EDeJpJ" + ] + } + }, + "block_order": [ + "group_7mFNTK" + ] + }, + "accordion_row_dipeVh": { + "type": "accordion_row", + "name": "Accordion row", + "settings": { + "heading": "Golden Hour", + "right_heading": "Blog", + "heading_links_enabled": true, + "heading_link": "shopify://blogs/golden-hour", + "right_heading_link": "shopify://blogs/golden-hour", + "collapsible": false, + "open_by_default": true, + "group_mode": "shared", "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 44, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 }, "blocks": { - "text_FjYhjj": { - "type": "text", + "blog_summary_carousel_eixRQp": { + "type": "blog-summary-carousel", + "name": "Blog summary carousel", "settings": { - "text": "

New Zealand grown fruit

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 + "blog": "golden-hour", + "layout_type": "carousel", + "carousel_on_mobile": true, + "post_limit": 6, + "columns": 3, + "mobile_columns": "2", + "mobile_card_size": "60cqw", + "columns_gap": 16, + "rows_gap": 16, + "icons_style": "chevron", + "icons_shape": "none", + "section_width": "full-width", + "gap": 12, + "color_scheme": "", + "padding-block-start": 16, + "padding-block-end": 16 }, - "blocks": {} + "blocks": { + "static-blog-title": { + "type": "_featured-blog-posts-title", + "disabled": true, + "static": true, + "settings": { + "text": "", + "padding_block_start": 0, + "padding_block_end": 0, + "padding_inline_start": 0, + "padding_inline_end": 0, + "left_heading": "", + "right_heading": "", + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 0, + "heading_max_size": 0, + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "static-blog-post-card": { + "type": "_featured-blog-posts-card", + "static": true, + "settings": { + "article": "", + "alignment": "left", + "gap": 8, + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image": { + "type": "_featured-blog-posts-image", + "static": true, + "settings": { + "image_ratio": "square", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0 + }, + "blocks": {} + }, + "title": { + "type": "_heading", + "static": true, + "settings": { + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "text": "", + "read_only": false, + "alignment": "left", + "show_alignment": true, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "blog-post-info-text": { + "type": "_blog-post-info-text", + "static": true, + "settings": { + "show_date": true, + "show_author": true, + "type_preset": "", + "alignment": "left", + "show_alignment": true, + "padding-block-start": 12, + "padding-block-end": 0 + }, + "blocks": {} + }, + "blog-post-description": { + "type": "_blog-post-description", + "static": true, + "settings": { + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "padding-block-start": 16, + "padding-block-end": 0 + }, + "blocks": {} + } + }, + "block_order": [] + } + }, + "block_order": [] } }, "block_order": [ - "text_FjYhjj" + "blog_summary_carousel_eixRQp" ] } }, "block_order": [ - "icon_rfrE68", - "group_8FxjKk" + "accordion_row_VXFwUN", + "accordion_row_Q9VzCU", + "accordion_row_6GXUWf", + "accordion_row_mrmmNj", + "accordion_row_3KkWB7", + "accordion_row_cwYKwF", + "accordion_row_dipeVh" ] } }, "block_order": [ - "group_NwJWWa", - "group_dCTtg4", - "group_EjXULC" + "accordion_iAgAPB" ], - "name": "t:names.icons_with_text", + "name": "t:names.large_logo", "settings": { - "content_direction": "row", + "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", "vertical_alignment": "center", "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "gap": 16, + "vertical_alignment_flex_direction_column": "space-between", + "gap": 12, "section_width": "full-width", "section_height": "", - "section_height_custom": 44, - "color_scheme": "", + "section_height_custom": 40, + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", "border": "none", - "border_width": 1, + "border_width": 0, "border_opacity": 100, "split_divider_color": "#d9d9d9", "border_radius": 0, @@ -1973,8 +1973,8 @@ "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", - "padding-block-start": 44, - "padding-block-end": 44, + "padding-block-start": 0, + "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 } From 442a4dc58afd45fd83b326cc26bc698abc7ade29 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 23:55:12 +0000 Subject: [PATCH 1197/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index b80f5c844..ade087c19 100644 --- a/templates/index.json +++ b/templates/index.json @@ -707,7 +707,7 @@ "type": "accordion_row", "name": "t:names.accordion_row", "settings": { - "heading": "Honey Soda", + "heading": "Low Cal Honey Soda", "right_heading": "Shop Golden", "heading_links_enabled": true, "heading_link": "shopify://collections/all", From f6c31de2a933258b39f2ddcbd0b3d7ab1f96c286 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Feb 2026 10:11:49 +1300 Subject: [PATCH 1198/1275] Add Mapbox stockist accordion row --- assets/sections-optional.css | 161 +++ assets/stockist-mapbox.js | 371 ++++++ blocks/accordion.liquid | 3 + blocks/accordion_row_stockist_mapbox.liquid | 1119 +++++++++++++++++++ blocks/stockist_location.liquid | 70 ++ sections/stockist-mapbox.liquid | 411 +++++++ snippets/stylesheets.liquid | 2 +- 7 files changed, 2136 insertions(+), 1 deletion(-) create mode 100644 assets/stockist-mapbox.js create mode 100644 blocks/accordion_row_stockist_mapbox.liquid create mode 100644 blocks/stockist_location.liquid create mode 100644 sections/stockist-mapbox.liquid diff --git a/assets/sections-optional.css b/assets/sections-optional.css index 3a129d6b2..0d31bc470 100644 --- a/assets/sections-optional.css +++ b/assets/sections-optional.css @@ -1227,3 +1227,164 @@ input[type='search']::-webkit-search-decoration { transform: scale(0.97); } } + + /* stockist-mapbox.liquid */ + .stockist-mapbox { + --stockist-map-height: 560px; + --stockist-map-height-mobile: 360px; + --stockist-text-align: left; + --stockist-marker-color: #000000; + } + + .stockist-mapbox__inner { + display: flex; + flex-direction: column; + gap: var(--gap, var(--padding-lg)); + } + + .stockist-mapbox__header { + display: flex; + flex-direction: column; + gap: var(--padding-xs); + text-align: var(--stockist-text-align); + } + + .stockist-mapbox__subheading p { + margin: 0; + } + + .stockist-mapbox__intro { + max-width: 60ch; + } + + .stockist-mapbox__intro p { + margin: 0; + } + + .stockist-mapbox__search { + display: flex; + flex-direction: column; + gap: var(--padding-xs); + } + + .stockist-mapbox__search-row { + display: flex; + gap: var(--padding-xs); + flex-wrap: wrap; + } + + .stockist-mapbox__search-input { + flex: 1 1 220px; + min-width: 0; + border: var(--style-border-width-inputs) solid var(--color-input-border); + border-radius: var(--style-border-radius-inputs); + padding: var(--padding-xs) var(--padding-sm); + background: var(--color-input-background); + color: var(--color-foreground); + } + + .stockist-mapbox__content { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); + gap: var(--gap, var(--padding-lg)); + align-items: start; + } + + .stockist-mapbox[data-layout='map-left'] .stockist-mapbox__content { + grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); + } + + .stockist-mapbox[data-layout='map-left'] .stockist-mapbox__map { + order: -1; + } + + .stockist-mapbox__list { + border: var(--style-border-width) solid var(--color-border); + border-radius: var(--style-border-radius-inputs); + padding: var(--padding-md); + max-height: var(--stockist-map-height); + overflow: auto; + background: var(--color-background); + } + + .stockist-mapbox__item { + border-top: var(--style-border-width) solid var(--color-border); + padding-block: var(--padding-sm); + } + + .stockist-mapbox__item:first-child { + border-top: 0; + padding-top: 0; + } + + .stockist-mapbox__item-button { + background: none; + border: 0; + padding: 0; + width: 100%; + text-align: left; + color: inherit; + cursor: pointer; + } + + .stockist-mapbox__item-title { + font-weight: 600; + } + + .stockist-mapbox__item-meta { + color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); + font-size: var(--font-size--sm); + } + + .stockist-mapbox__item-distance { + margin-top: var(--padding-2xs); + font-size: var(--font-size--sm); + } + + .stockist-mapbox__map { + border: var(--style-border-width) solid var(--color-border); + border-radius: var(--style-border-radius-inputs); + min-height: var(--stockist-map-height); + height: var(--stockist-map-height); + overflow: hidden; + } + + .stockist-mapbox__marker { + width: 12px; + height: 12px; + border-radius: 999px; + background: var(--stockist-marker-color); + border: 2px solid var(--color-background); + box-shadow: 0 0 0 1px var(--color-border); + cursor: pointer; + } + + .stockist-mapbox__marker.is-active { + transform: scale(1.2); + } + + .stockist-mapbox__placeholder { + border: var(--style-border-width) dashed var(--color-border); + padding: var(--padding-lg); + text-align: center; + background: var(--color-background); + } + + @media screen and (max-width: 989px) { + .stockist-mapbox__content { + grid-template-columns: minmax(0, 1fr); + } + + .stockist-mapbox__map { + order: -1; + } + } + + @media screen and (max-width: 749px) { + .stockist-mapbox__map, + .stockist-mapbox__list { + max-height: none; + height: auto; + min-height: var(--stockist-map-height-mobile); + } + } diff --git a/assets/stockist-mapbox.js b/assets/stockist-mapbox.js new file mode 100644 index 000000000..9d11d2dd5 --- /dev/null +++ b/assets/stockist-mapbox.js @@ -0,0 +1,371 @@ +const MAPBOX_JS_URL = 'https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js'; +const MAPBOX_CSS_URL = 'https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css'; +const MAPBOX_PROMISE_KEY = '__stockistMapboxPromise'; + +function loadMapboxCss() { + if (document.querySelector('link[data-mapbox-gl-css]')) return; + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = MAPBOX_CSS_URL; + link.dataset.mapboxGlCss = 'true'; + document.head.appendChild(link); +} + +function loadMapbox() { + if (window.mapboxgl) return Promise.resolve(window.mapboxgl); + if (window[MAPBOX_PROMISE_KEY]) return window[MAPBOX_PROMISE_KEY]; + loadMapboxCss(); + window[MAPBOX_PROMISE_KEY] = new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.src = MAPBOX_JS_URL; + script.async = true; + script.onload = () => resolve(window.mapboxgl); + script.onerror = () => reject(new Error('Failed to load Mapbox GL JS')); + document.head.appendChild(script); + }); + return window[MAPBOX_PROMISE_KEY]; +} + +function parseCenter(value) { + if (!value) return null; + const parts = value + .split(',') + .map((part) => Number.parseFloat(part.trim())) + .filter((part) => Number.isFinite(part)); + if (parts.length < 2) return null; + return [parts[1], parts[0]]; +} + +function toNumber(value) { + if (value === null || value === undefined || value === '') return null; + const parsed = Number.parseFloat(value); + return Number.isFinite(parsed) ? parsed : null; +} + +function toRadians(value) { + return (value * Math.PI) / 180; +} + +function haversineDistance(origin, target) { + const R = 6371; + const dLat = toRadians(target[1] - origin[1]); + const dLng = toRadians(target[0] - origin[0]); + const lat1 = toRadians(origin[1]); + const lat2 = toRadians(target[1]); + const a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.sin(dLng / 2) * Math.sin(dLng / 2) * Math.cos(lat1) * Math.cos(lat2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; +} + +class StockistMapbox extends HTMLElement { + connectedCallback() { + if (this.dataset.stockistMapboxInitialized === 'true') return; + this.dataset.stockistMapboxInitialized = 'true'; + + this.token = this.dataset.mapboxToken || ''; + this.mapStyle = this.dataset.mapStyle || 'mapbox://styles/mapbox/light-v11'; + this.defaultCenter = parseCenter(this.dataset.defaultCenter) || [0, 0]; + this.defaultZoom = Number.parseInt(this.dataset.defaultZoom || '6', 10); + this.sortByDistance = this.dataset.sortByDistance === 'true'; + this.showDistance = this.dataset.showDistance === 'true'; + this.emptyText = this.dataset.emptyText || 'Add stockists to show them here.'; + + this.resultsEl = this.querySelector('[data-results]'); + this.mapEl = this.querySelector('[data-map]'); + this.searchForm = this.querySelector('[data-search]'); + this.searchInput = this.querySelector('[data-search-input]'); + this.geoButton = this.querySelector('[data-geolocate]'); + + this.locations = this.loadLocations(); + this.activeId = null; + this.origin = null; + this.markers = new Map(); + + this.renderList(); + this.setupSearch(); + this.setupGeolocate(); + + if (!this.token) { + this.renderMapPlaceholder('Mapbox access token required.'); + return; + } + + if (this.mapEl) { + loadMapbox() + .then((mapboxgl) => this.initMap(mapboxgl)) + .catch(() => { + this.renderMapPlaceholder('Unable to load the map.'); + }); + } + } + + loadLocations() { + const dataScript = this.querySelector('[data-stockist-data]'); + if (!dataScript) return []; + try { + const raw = JSON.parse(dataScript.textContent || '[]'); + return raw.map((location, index) => { + const lat = toNumber(location.lat); + const lng = toNumber(location.lng); + return { + id: location.id || `stockist-${index}`, + name: location.name || 'Stockist', + address_line_1: location.address_line_1 || '', + address_line_2: location.address_line_2 || '', + city: location.city || '', + region: location.region || '', + postal_code: location.postal_code || '', + country: location.country || '', + phone: location.phone || '', + website: location.website || '', + notes: location.notes || '', + lat, + lng, + distanceKm: null, + order: index + }; + }); + } catch (error) { + return []; + } + } + + renderMapPlaceholder(text) { + if (!this.mapEl) return; + this.mapEl.innerHTML = ''; + const placeholder = document.createElement('div'); + placeholder.className = 'stockist-mapbox__placeholder'; + placeholder.textContent = text; + this.mapEl.appendChild(placeholder); + } + + setupSearch() { + if (!this.searchForm || !this.searchInput) return; + this.searchForm.addEventListener('submit', (event) => { + event.preventDefault(); + const query = this.searchInput.value.trim(); + if (!query) return; + this.searchLocation(query); + }); + } + + setupGeolocate() { + if (!this.geoButton) return; + this.geoButton.addEventListener('click', () => { + if (!navigator.geolocation) return; + navigator.geolocation.getCurrentPosition( + (position) => { + const coords = [position.coords.longitude, position.coords.latitude]; + this.setOrigin(coords); + if (this.map) { + this.map.flyTo({ center: coords, zoom: Math.max(this.map.getZoom(), 10) }); + this.addSearchMarker(coords); + } + }, + () => {} + ); + }); + } + + async searchLocation(query) { + if (!this.token) return; + const url = new URL(`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json`); + url.searchParams.set('access_token', this.token); + url.searchParams.set('limit', '1'); + const response = await fetch(url.toString()); + if (!response.ok) return; + const data = await response.json(); + if (!data.features || !data.features.length) return; + const [lng, lat] = data.features[0].center; + const coords = [lng, lat]; + this.setOrigin(coords); + if (this.map) { + this.map.flyTo({ center: coords, zoom: Math.max(this.map.getZoom(), 10) }); + this.addSearchMarker(coords); + } + } + + setOrigin(coords) { + this.origin = coords; + if (!coords) { + this.locations.forEach((location) => { + location.distanceKm = null; + }); + this.renderList(); + return; + } + this.locations.forEach((location) => { + if (location.lat === null || location.lng === null) { + location.distanceKm = null; + return; + } + location.distanceKm = haversineDistance(coords, [location.lng, location.lat]); + }); + this.renderList(); + } + + getSortedLocations() { + const list = [...this.locations]; + if (this.sortByDistance && this.origin) { + list.sort((a, b) => { + if (a.distanceKm === null) return 1; + if (b.distanceKm === null) return -1; + return a.distanceKm - b.distanceKm; + }); + return list; + } + list.sort((a, b) => a.order - b.order); + return list; + } + + renderList() { + if (!this.resultsEl) return; + this.resultsEl.innerHTML = ''; + const locations = this.getSortedLocations(); + if (!locations.length) { + const placeholder = document.createElement('div'); + placeholder.className = 'stockist-mapbox__placeholder'; + placeholder.textContent = this.emptyText; + this.resultsEl.appendChild(placeholder); + return; + } + const fragment = document.createDocumentFragment(); + locations.forEach((location) => { + const item = document.createElement('div'); + item.className = 'stockist-mapbox__item'; + if (this.activeId === location.id) item.classList.add('is-active'); + + const button = document.createElement('button'); + button.className = 'stockist-mapbox__item-button'; + button.type = 'button'; + button.addEventListener('click', () => this.focusLocation(location)); + + const title = document.createElement('div'); + title.className = 'stockist-mapbox__item-title'; + title.textContent = location.name; + button.appendChild(title); + + const meta = document.createElement('div'); + meta.className = 'stockist-mapbox__item-meta'; + const addressLines = []; + if (location.address_line_1) addressLines.push(location.address_line_1); + if (location.address_line_2) addressLines.push(location.address_line_2); + const locality = [location.city, location.region, location.postal_code] + .filter(Boolean) + .join(' '); + if (locality) addressLines.push(locality); + if (location.country) addressLines.push(location.country); + + addressLines.forEach((line) => { + const lineEl = document.createElement('div'); + lineEl.textContent = line; + meta.appendChild(lineEl); + }); + + if (location.phone) { + const phoneEl = document.createElement('a'); + phoneEl.href = `tel:${location.phone}`; + phoneEl.textContent = location.phone; + meta.appendChild(phoneEl); + } + + if (location.website) { + const websiteEl = document.createElement('a'); + websiteEl.href = location.website; + websiteEl.target = '_blank'; + websiteEl.rel = 'noopener'; + websiteEl.textContent = location.website.replace(/^https?:\/\//, ''); + meta.appendChild(websiteEl); + } + + if (location.notes) { + const notesEl = document.createElement('div'); + notesEl.textContent = location.notes; + meta.appendChild(notesEl); + } + + button.appendChild(meta); + + if (this.showDistance && location.distanceKm !== null) { + const distance = document.createElement('div'); + distance.className = 'stockist-mapbox__item-distance'; + distance.textContent = `${location.distanceKm.toFixed(1)} km`; + button.appendChild(distance); + } + + item.appendChild(button); + fragment.appendChild(item); + }); + this.resultsEl.appendChild(fragment); + } + + focusLocation(location) { + if (!location) return; + this.activeId = location.id; + this.setActiveMarker(location.id); + this.renderList(); + if (this.map && location.lat !== null && location.lng !== null) { + this.map.flyTo({ + center: [location.lng, location.lat], + zoom: Math.max(this.map.getZoom(), 12) + }); + } + } + + setActiveMarker(id) { + this.markers.forEach((marker, markerId) => { + marker.getElement().classList.toggle('is-active', markerId === id); + }); + } + + addSearchMarker(coords) { + if (!this.map || !coords) return; + if (!this.searchMarker) { + this.searchMarker = new window.mapboxgl.Marker().setLngLat(coords).addTo(this.map); + return; + } + this.searchMarker.setLngLat(coords); + } + + initMap(mapboxgl) { + mapboxgl.accessToken = this.token; + const mapCenter = this.defaultCenter; + + this.map = new mapboxgl.Map({ + container: this.mapEl, + style: this.mapStyle, + center: mapCenter, + zoom: this.defaultZoom + }); + + const locationsWithCoords = this.locations.filter((location) => location.lat !== null && location.lng !== null); + locationsWithCoords.forEach((location) => { + const markerEl = document.createElement('div'); + markerEl.className = 'stockist-mapbox__marker'; + markerEl.addEventListener('click', () => this.focusLocation(location)); + const marker = new mapboxgl.Marker(markerEl) + .setLngLat([location.lng, location.lat]) + .addTo(this.map); + this.markers.set(location.id, marker); + }); + + this.map.on('load', () => { + this.map.resize(); + }); + + const details = this.closest('details'); + if (details) { + details.addEventListener('toggle', () => { + if (details.open && this.map) { + this.map.resize(); + } + }); + } + } +} + +if (!customElements.get('stockist-mapbox')) { + customElements.define('stockist-mapbox', StockistMapbox); +} diff --git a/blocks/accordion.liquid b/blocks/accordion.liquid index a72a06642..597d8af97 100644 --- a/blocks/accordion.liquid +++ b/blocks/accordion.liquid @@ -109,6 +109,9 @@ }, { "type": "accordion_row_social" + }, + { + "type": "accordion_row_stockist_mapbox" } ], "settings": [ diff --git a/blocks/accordion_row_stockist_mapbox.liquid b/blocks/accordion_row_stockist_mapbox.liquid new file mode 100644 index 000000000..a3bf36ff7 --- /dev/null +++ b/blocks/accordion_row_stockist_mapbox.liquid @@ -0,0 +1,1119 @@ +{% assign block_settings = block.settings %} +{% assign row_classes = 'accordion-row' %} +{% assign row_color_scheme_id = block_settings.color_scheme %} +{% if row_color_scheme_id == blank and section.settings.color_scheme != blank %} + {% assign row_color_scheme_id = section.settings.color_scheme %} +{% endif %} +{% if row_color_scheme_id != blank %} + {% assign row_classes = row_classes | append: ' color-' | append: row_color_scheme_id %} +{% endif %} +{% assign row_hover_scheme_id = block_settings.hover_color_scheme %} +{% if row_hover_scheme_id == blank %} + {% assign row_hover_scheme_id = row_color_scheme_id %} +{% endif %} + +{% assign left_hover_override = block_settings.left_hover_color_scheme %} +{% assign right_hover_override = block_settings.right_hover_color_scheme %} +{% assign left_hover_scheme_id = left_hover_override | default: row_hover_scheme_id %} +{% assign right_hover_scheme_id = right_hover_override | default: row_hover_scheme_id %} +{% assign has_split_hover_scheme = false %} +{% if left_hover_override != blank or right_hover_override != blank %} + {% assign has_split_hover_scheme = true %} +{% endif %} + +{% assign row_has_custom_scheme = false %} +{% if block_settings.color_scheme != blank %} + {% assign row_has_custom_scheme = true %} +{% endif %} + +{% assign has_reveal_content = true %} + +{% assign is_collapsible = false %} +{% if has_reveal_content and block_settings.collapsible %} + {% assign is_collapsible = true %} +{% endif %} + +{% if has_reveal_content %} + {% assign row_classes = row_classes | append: ' accordion-row--has-reveal' %} +{% endif %} + +{% assign show_right_heading = false %} +{% if block_settings.right_heading != blank %} + {% assign show_right_heading = true %} +{% endif %} + +{% assign header_links_enabled = false %} +{% if block_settings.heading_links_enabled %} + {% assign header_links_enabled = true %} +{% endif %} +{% assign left_heading_link = block_settings.heading_link %} +{% assign right_heading_link = block_settings.right_heading_link %} + +{% assign show_left_heading = false %} +{% if block_settings.heading != blank %} + {% assign show_left_heading = true %} +{% elsif block_settings.icon != blank and block_settings.icon != 'none' %} + {% assign show_left_heading = true %} +{% elsif block_settings.image_upload != blank %} + {% assign show_left_heading = true %} +{% endif %} + +{% assign header_classes = 'details__header' %} +{% if show_left_heading %} + {% assign header_classes = header_classes | append: ' details__header--has-left' %} +{% else %} + {% assign header_classes = header_classes | append: ' details__header--no-left' %} +{% endif %} +{% if show_right_heading %} + {% assign header_classes = header_classes | append: ' details__header--has-right' %} +{% endif %} +{% if show_right_heading and show_left_heading == false %} + {% assign header_classes = header_classes | append: ' details__header--right-only' %} +{% endif %} + +{% assign has_custom_summary_padding = false %} +{% assign has_custom_content_padding = false %} + +{% assign summary_padding_block_start_value = block_settings.summary_padding_block_start | default: 0 | times: 1 %} +{% assign summary_padding_block_end_value = block_settings.summary_padding_block_end | default: 0 | times: 1 %} +{% assign summary_padding_inline_start_value = block_settings.summary_padding_inline_start | default: 0 | times: 1 %} +{% assign summary_padding_inline_end_value = block_settings.summary_padding_inline_end | default: 0 | times: 1 %} + +{% if summary_padding_block_start_value != 0 or summary_padding_block_end_value != 0 or summary_padding_inline_start_value != 0 or summary_padding_inline_end_value != 0 %} + {% assign has_custom_summary_padding = true %} +{% endif %} + +{% assign content_padding_block_start_value = block_settings.content_padding_block_start | default: 0 | times: 1 %} +{% assign content_padding_block_end_value = block_settings.content_padding_block_end | default: 0 | times: 1 %} +{% assign content_padding_inline_start_value = block_settings.content_padding_inline_start | default: 0 | times: 1 %} +{% assign content_padding_inline_end_value = block_settings.content_padding_inline_end | default: 0 | times: 1 %} + +{% if content_padding_block_start_value != 0 or content_padding_block_end_value != 0 or content_padding_inline_start_value != 0 or content_padding_inline_end_value != 0 %} + {% assign has_custom_content_padding = true %} +{% endif %} + +{% assign has_row_custom_padding = false %} +{% if has_custom_summary_padding or has_custom_content_padding %} + {% assign has_row_custom_padding = true %} +{% endif %} + +{% capture inline_styles %} + {% if summary_padding_block_start_value != 0 %}--accordion-header-padding-block-start: {{ summary_padding_block_start_value }}px;{% endif %} + {% if summary_padding_block_end_value != 0 %}--accordion-header-padding-block-end: {{ summary_padding_block_end_value }}px;{% endif %} + {% if summary_padding_inline_start_value != 0 %}--accordion-header-padding-inline-start: {{ summary_padding_inline_start_value }}px;{% endif %} + {% if summary_padding_inline_end_value != 0 %}--accordion-header-padding-inline-end: {{ summary_padding_inline_end_value }}px;{% endif %} + {% if content_padding_block_start_value != 0 %}--accordion-content-padding-block-start: {{ content_padding_block_start_value }}px;{% endif %} + {% if content_padding_block_end_value != 0 %}--accordion-content-padding-block-end: {{ content_padding_block_end_value }}px;{% endif %} + {% if content_padding_inline_start_value != 0 %}--accordion-content-padding-inline-start: {{ content_padding_inline_start_value }}px;{% endif %} + {% if content_padding_inline_end_value != 0 %}--accordion-content-padding-inline-end: {{ content_padding_inline_end_value }}px;{% endif %} + {% if block_settings.heading_type_preset != blank %} + --accordion-heading-font-family: var(--font-{{ block_settings.heading_type_preset }}--family); + --accordion-heading-font-style: var(--font-{{ block_settings.heading_type_preset }}--style); + --accordion-heading-font-weight: var(--font-{{ block_settings.heading_type_preset }}--weight); + --accordion-heading-text-case: var(--font-{{ block_settings.heading_type_preset }}--case); + --accordion-heading-line-height: var(--font-{{ block_settings.heading_type_preset }}--line-height); + --accordion-heading-base-size: var(--font-{{ block_settings.heading_type_preset }}--size); + {% endif %} + {% if block_settings.right_heading_type_preset != blank and block_settings.right_heading_type_preset != 'match' %} + --accordion-right-heading-font-family: var(--font-{{ block_settings.right_heading_type_preset }}--family); + --accordion-right-heading-font-style: var(--font-{{ block_settings.right_heading_type_preset }}--style); + --accordion-right-heading-font-weight: var(--font-{{ block_settings.right_heading_type_preset }}--weight); + --accordion-right-heading-text-case: var(--font-{{ block_settings.right_heading_type_preset }}--case); + --accordion-right-heading-line-height: var(--font-{{ block_settings.right_heading_type_preset }}--line-height); + --accordion-right-heading-base-size: var(--font-{{ block_settings.right_heading_type_preset }}--size); + {% endif %} + {% assign heading_min_numeric = block_settings.heading_min_size | default: 0 | times: 1 %} + {% assign heading_max_numeric = block_settings.heading_max_size | default: 0 | times: 1 %} + {% if heading_min_numeric > 0 %}--accordion-heading-min-size: {{ heading_min_numeric }}rem;{% endif %} + {% if heading_max_numeric > 0 %}--accordion-heading-max-size: {{ heading_max_numeric }}rem;{% endif %} + {% if heading_min_numeric == 0 and heading_max_numeric == 0 %} + --accordion-heading-size: var(--accordion-heading-base-size, var(--summary-font-size)); + --accordion-right-heading-size: var(--accordion-right-heading-base-size, var(--accordion-heading-base-size, var(--summary-font-size))); + {% endif %} + {% if has_row_custom_padding %} + --padding-inline-start: 0px; + --padding-inline-end: 0px; + --padding-block-start: 0px; + --padding-block-end: 0px; + --padding-inline-start-negative: 0px; + --padding-inline-end-negative: 0px; + --padding-block-start-negative: 0px; + --padding-block-end-negative: 0px; + {% endif %} +{% endcapture %} + +{% capture header_styles %} + {% if summary_padding_block_start_value != 0 %}padding-block-start: {{ summary_padding_block_start_value }}px;{% endif %} + {% if summary_padding_block_end_value != 0 %}padding-block-end: {{ summary_padding_block_end_value }}px;{% endif %} + {% if summary_padding_inline_start_value != 0 %}padding-inline-start: {{ summary_padding_inline_start_value }}px;{% endif %} + {% if summary_padding_inline_end_value != 0 %}padding-inline-end: {{ summary_padding_inline_end_value }}px;{% endif %} +{% endcapture %} + +{% capture content_styles %} + {% if content_padding_block_start_value != 0 %}padding-block-start: {{ content_padding_block_start_value }}px;{% endif %} + {% if content_padding_block_end_value != 0 %}padding-block-end: {{ content_padding_block_end_value }}px;{% endif %} + {% if content_padding_inline_start_value != 0 %}padding-inline-start: {{ content_padding_inline_start_value }}px;{% endif %} + {% if content_padding_inline_end_value != 0 %}padding-inline-end: {{ content_padding_inline_end_value }}px;{% endif %} +{% endcapture %} + +{% assign stockist_blocks = block.blocks | where: 'type', 'stockist_location' %} + +
+ + {% if is_collapsible %} +
+ + + {% if show_right_heading %} + + {% if is_collapsible %} + + + {{- 'icon-caret.svg' | inline_asset_content -}} + + + {% endif %} + {% if header_links_enabled and right_heading_link != blank %} + + {{ block_settings.right_heading }} + + {% else %} + {{ block_settings.right_heading }} + {% endif %} + + {% endif %} + + +
+ {% if block_settings.intro_text != blank %} +
{{ block_settings.intro_text }}
+ {% endif %} + + {% if block_settings.show_search %} + + +
+ + + {% if block_settings.show_geolocate %} + + {% endif %} +
+ + {% endif %} + +
+
+
+
+ + +
+
+
+ {% else %} +
+
+ + {% if show_right_heading %} + + {% if header_links_enabled and right_heading_link != blank %} + + {{ block_settings.right_heading }} + + {% else %} + {{ block_settings.right_heading }} + {% endif %} + + {% endif %} +
+
+ {% if block_settings.intro_text != blank %} +
{{ block_settings.intro_text }}
+ {% endif %} + + {% if block_settings.show_search %} + + {% endif %} + +
+
+
+
+ + +
+
+
+ {% endif %} +
+
+ + + +{% stylesheet %} + .accordion-row { + width: 100%; + position: relative; + overflow: hidden; + --accordion-caret-gap: 12px; + --accordion-hover-background: rgb(var(--color-foreground-rgb, 255 255 255) / 0.08); + --accordion-hover-color: var(--color-foreground); + --accordion-hover-border: rgb(var(--color-border-rgb, var(--color-foreground-rgb, 0 0 0)) / 0.2); + --accordion-open-background: var(--color-background); + --accordion-open-color: inherit; + --accordion-open-border: rgb(var(--color-border-rgb, var(--color-foreground-rgb, 0 0 0)) / 0.2); + --accordion-divider-thickness: var(--golden-gridline-thickness, var(--style-border-width, 1px)); + } + + .accordion-row::before { + content: ''; + position: absolute; + top: calc(var(--padding-block-start, 0px) * -1); + bottom: calc(var(--padding-block-end, 0px) * -1); + left: calc(var(--padding-inline-start, 0px) * -1); + right: calc(var(--padding-inline-end, 0px) * -1); + background-color: var(--color-background); + z-index: -1; + } + + .accordion-row__inner { + display: block; + } + + .accordion-row__group--left { + margin-inline-end: auto; + } + + .accordion-row__group--right { + margin-inline-start: auto; + } + + .details__icon { + height: auto; + margin-inline-end: var(--margin-xs); + } + + .details__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--margin-md); + transition: background-color 160ms var(--ease-out), color 160ms var(--ease-out); + padding-block-start: var(--accordion-header-padding-block-start, var(--padding-sm)); + padding-block-end: var(--accordion-header-padding-block-end, var(--padding-sm)); + padding-inline-start: var(--accordion-header-padding-inline-start, var(--padding-inline-start, 0px)); + padding-inline-end: var(--accordion-header-padding-inline-end, var(--padding-inline-end, 0px)); + } + + .details__header--has-right { + gap: var(--margin-lg); + } + + .details__heading { + display: inline-flex; + align-items: center; + gap: var(--margin-xs); + justify-content: flex-start; + flex: 1; + min-width: 0; + color: inherit; + font-family: var(--accordion-heading-font-family, var(--summary-font-family)); + font-style: var(--accordion-heading-font-style, var(--summary-font-style)); + font-weight: var(--accordion-heading-font-weight, var(--summary-font-weight)); + line-height: var(--accordion-heading-line-height, var(--summary-font-line-height)); + text-transform: var(--accordion-heading-text-case, var(--summary-font-case)); + font-size: var( + --accordion-heading-size, + clamp( + var(--accordion-heading-min-size, 1rem), + calc( + var(--accordion-heading-min-size, 1rem) + + ( + var(--accordion-heading-max-size, 3.4rem) - + var(--accordion-heading-min-size, 1rem) + ) * + clamp( + 0, + ( + 100vw - + var(--accordion-heading-min-breakpoint, 20rem) + ) / + max( + 0.001rem, + var(--accordion-heading-max-breakpoint, 48rem) - + var(--accordion-heading-min-breakpoint, 20rem) + ), + 1 + ) + ), + var(--accordion-heading-max-size, 3.4rem) + ) + ); + } + + .details__heading--right { + margin-inline-start: auto; + text-align: right; + justify-content: flex-end; + } + + .details__header:not(.details__header--has-right) { + justify-content: flex-start; + } + + .details__header:not(.details__header--has-right) .details__heading--left { + flex: 1 1 100%; + width: auto; + max-width: none; + } + + .details__header:not(.details__header--has-right) .details__heading--left .details__label { + width: 100%; + } + + .details__header:not(.details__header--has-right) .details__heading--left .accordion-row__link { + width: fit-content; + } + + .details__header--right-only { + justify-content: flex-end; + } + + .details__header--right-only .details__heading--left { + display: none; + } + + .details__header--right-only .details__heading--right { + flex: 1 1 100%; + width: auto; + max-width: none; + margin-inline-start: 0; + } + + .details__header--right-only .details__heading--right .details__label { + width: 100%; + } + + .details__header--right-only .details__heading--right .accordion-row__link { + width: fit-content; + } + + .details__heading--right .details__label { + font-family: var(--accordion-right-heading-font-family, var(--accordion-heading-font-family, var(--summary-font-family))); + font-style: var(--accordion-right-heading-font-style, var(--accordion-heading-font-style, var(--summary-font-style))); + font-weight: var(--accordion-right-heading-font-weight, var(--accordion-heading-font-weight, var(--summary-font-weight))); + line-height: var(--accordion-right-heading-line-height, var(--accordion-heading-line-height, var(--summary-font-line-height))); + text-transform: var(--accordion-right-heading-text-case, var(--accordion-heading-text-case, var(--summary-font-case))); + font-size: var( + --accordion-right-heading-size, + var( + --accordion-heading-size, + clamp( + var(--accordion-heading-min-size, 1rem), + calc( + var(--accordion-heading-min-size, 1rem) + + ( + var(--accordion-heading-max-size, 3.4rem) - + var(--accordion-heading-min-size, 1rem) + ) * + clamp( + 0, + ( + 100vw - + var(--accordion-heading-min-breakpoint, 20rem) + ) / + max( + 0.001rem, + var(--accordion-heading-max-breakpoint, 48rem) - + var(--accordion-heading-min-breakpoint, 20rem) + ), + 1 + ) + ), + var(--accordion-heading-max-size, 3.4rem) + ) + ) + ); + } + + .details__label { + display: inline-block; + color: inherit; + } + + .accordion-row__link { + font: inherit; + color: inherit; + text-decoration: none; + text-transform: inherit; + } + + .details__caret { + display: inline-flex; + margin-inline-start: var(--accordion-caret-gap); + opacity: 0; + transform: translateX(4px); + transition: opacity var(--animation-speed) var(--animation-easing), transform var(--animation-speed) var(--animation-easing); + } + + .accordion-row:hover .details__caret, + details[open] .details__caret { + opacity: 1; + transform: translateX(0); + } + + .details__caret .svg-wrapper { + display: inline-flex; + } + + .details__header, + .details-content { + border-block-start: var(--accordion-divider-thickness) solid transparent; + border-block-end: var(--accordion-divider-thickness) solid transparent; + transition: background-color var(--animation-speed) var(--animation-easing), + border-color var(--animation-speed) var(--animation-easing); + } + + .accordion-row:hover .details__header, + .accordion-row:hover .details-content { + background-color: var(--accordion-hover-background); + border-color: var(--accordion-hover-border); + color: var(--accordion-hover-color); + } + + .accordion-row:hover .details__heading, + .accordion-row:hover .details__label, + .accordion-row:hover .details__caret .svg-wrapper, + details[open] .details__heading, + details[open] .details__label, + details[open] .details__caret .svg-wrapper { + color: inherit; + } + + .details-content { + padding-block-start: var(--accordion-content-padding-block-start, var(--padding-md)); + padding-block-end: var(--accordion-content-padding-block-end, var(--padding-md)); + padding-inline-start: var(--accordion-content-padding-inline-start, var(--padding-inline-start, 0px)); + padding-inline-end: var(--accordion-content-padding-inline-end, var(--padding-inline-end, 0px)); + color: inherit; + } + + .accordion-row__group-hidden { + display: none !important; + } +{% endstylesheet %} + +{% schema %} +{ + "name": "Stockist map row", + "tag": null, + "blocks": [ + { "type": "stockist_location" } + ], + "settings": [ + { + "type": "text", + "id": "heading", + "label": "Heading", + "default": "Stockists" + }, + { + "type": "text", + "id": "right_heading", + "label": "Right heading", + "info": "Optional heading displayed on the right side of the row." + }, + { + "type": "checkbox", + "id": "heading_links_enabled", + "label": "Enable header links", + "default": false + }, + { + "type": "url", + "id": "heading_link", + "label": "Left heading link", + "visible_if": "{{ block.settings.heading_links_enabled }}" + }, + { + "type": "url", + "id": "right_heading_link", + "label": "Right heading link", + "visible_if": "{{ block.settings.heading_links_enabled }}" + }, + { + "type": "checkbox", + "id": "collapsible", + "label": "Collapsible", + "default": true + }, + { + "type": "checkbox", + "id": "open_by_default", + "label": "Open row by default", + "default": false, + "visible_if": "{{ block.settings.collapsible == true }}" + }, + { + "type": "header", + "content": "Mapbox" + }, + { + "type": "richtext", + "id": "intro_text", + "label": "Intro text" + }, + { + "type": "text", + "id": "mapbox_token", + "label": "Mapbox access token" + }, + { + "type": "text", + "id": "map_style", + "label": "Mapbox style URL", + "default": "mapbox://styles/mapbox/light-v11" + }, + { + "type": "text", + "id": "default_center", + "label": "Default map center (lat,lng)", + "default": "-36.8485,174.7633" + }, + { + "type": "range", + "id": "default_zoom", + "label": "Default zoom", + "min": 2, + "max": 16, + "step": 1, + "default": 6 + }, + { + "type": "select", + "id": "layout", + "label": "Layout", + "options": [ + { "value": "map-right", "label": "Map right" }, + { "value": "map-left", "label": "Map left" } + ], + "default": "map-right" + }, + { + "type": "checkbox", + "id": "show_search", + "label": "Show search", + "default": true + }, + { + "type": "text", + "id": "search_label", + "label": "Search label", + "default": "Search location" + }, + { + "type": "text", + "id": "search_placeholder", + "label": "Search placeholder", + "default": "Search by city or postcode" + }, + { + "type": "text", + "id": "search_button_label", + "label": "Search button label", + "default": "Search" + }, + { + "type": "checkbox", + "id": "show_geolocate", + "label": "Show 'Near me' button", + "default": true + }, + { + "type": "text", + "id": "geolocate_label", + "label": "Near me label", + "default": "Use my location" + }, + { + "type": "checkbox", + "id": "sort_by_distance", + "label": "Sort by distance when searching", + "default": true + }, + { + "type": "checkbox", + "id": "show_distance", + "label": "Show distance", + "default": true + }, + { + "type": "text", + "id": "empty_text", + "label": "Empty state text", + "default": "Add stockists to this row to show them on the map." + }, + { + "type": "color", + "id": "marker_color", + "label": "Marker color", + "default": "#1c1c1c" + }, + { + "type": "range", + "id": "map_height", + "label": "Map height", + "min": 240, + "max": 900, + "step": 20, + "unit": "px", + "default": 520 + }, + { + "type": "range", + "id": "map_height_mobile", + "label": "Map height (mobile)", + "min": 200, + "max": 700, + "step": 20, + "unit": "px", + "default": 360 + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Row colour scheme" + }, + { + "type": "color_scheme", + "id": "hover_color_scheme", + "label": "Row hover colour scheme" + }, + { + "type": "color_scheme", + "id": "left_hover_color_scheme", + "label": "Left hover colour scheme", + "info": "Applies when the left heading is hovered or selected." + }, + { + "type": "color_scheme", + "id": "right_hover_color_scheme", + "label": "Right hover colour scheme", + "info": "Applies when the right heading is hovered or selected." + }, + { + "type": "header", + "content": "Summary padding" + }, + { + "type": "range", + "id": "summary_padding_block_start", + "label": "Top padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "summary_padding_block_end", + "label": "Bottom padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "summary_padding_inline_start", + "label": "Left padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "summary_padding_inline_end", + "label": "Right padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "header", + "content": "Content padding" + }, + { + "type": "range", + "id": "content_padding_block_start", + "label": "Top padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 12 + }, + { + "type": "range", + "id": "content_padding_block_end", + "label": "Bottom padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 24 + }, + { + "type": "range", + "id": "content_padding_inline_start", + "label": "Left padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 24 + }, + { + "type": "range", + "id": "content_padding_inline_end", + "label": "Right padding", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 24 + }, + { + "type": "header", + "content": "Heading typography" + }, + { + "type": "select", + "id": "heading_type_preset", + "label": "Heading style", + "options": [ + { "value": "", "label": "t:options.default" }, + { "value": "paragraph", "label": "t:options.paragraph" }, + { "value": "h1", "label": "t:options.h1" }, + { "value": "h2", "label": "t:options.h2" }, + { "value": "h3", "label": "t:options.h3" }, + { "value": "h4", "label": "t:options.h4" }, + { "value": "h5", "label": "t:options.h5" }, + { "value": "h6", "label": "t:options.h6" } + ], + "default": "h6", + "info": "t:info.edit_presets_in_theme_settings" + }, + { + "type": "select", + "id": "right_heading_type_preset", + "label": "Right heading style", + "options": [ + { "value": "match", "label": "Match left heading" }, + { "value": "paragraph", "label": "t:options.paragraph" }, + { "value": "h1", "label": "t:options.h1" }, + { "value": "h2", "label": "t:options.h2" }, + { "value": "h3", "label": "t:options.h3" }, + { "value": "h4", "label": "t:options.h4" }, + { "value": "h5", "label": "t:options.h5" }, + { "value": "h6", "label": "t:options.h6" } + ], + "default": "match", + "info": "t:info.edit_presets_in_theme_settings" + }, + { + "type": "range", + "id": "heading_min_size", + "label": "Minimum text size", + "min": 0, + "max": 2.5, + "step": 0.1, + "unit": "rem", + "default": 0 + }, + { + "type": "range", + "id": "heading_max_size", + "label": "Maximum text size", + "min": 0, + "max": 3.5, + "step": 0.1, + "unit": "rem", + "default": 0 + }, + { + "type": "header", + "content": "Icon" + }, + { + "type": "select", + "id": "icon", + "label": "Icon", + "options": [ + { "value": "none", "label": "None" }, + { "value": "apple", "label": "Apple" }, + { "value": "arrow", "label": "Arrow" }, + { "value": "banana", "label": "Banana" }, + { "value": "bottle", "label": "Bottle" }, + { "value": "box", "label": "Box" }, + { "value": "carrot", "label": "Carrot" }, + { "value": "chat_bubble", "label": "Chat bubble" }, + { "value": "check_box", "label": "Check box" }, + { "value": "clipboard", "label": "Clipboard" }, + { "value": "dairy", "label": "Dairy" }, + { "value": "dairy_free", "label": "Dairy free" }, + { "value": "dryer", "label": "Dryer" }, + { "value": "eye", "label": "Eye" }, + { "value": "fire", "label": "Fire" }, + { "value": "gluten_free", "label": "Gluten free" }, + { "value": "heart", "label": "Heart" }, + { "value": "iron", "label": "Iron" }, + { "value": "leaf", "label": "Leaf" }, + { "value": "leather", "label": "Leather" }, + { "value": "lightning_bolt", "label": "Lightning bolt" }, + { "value": "lipstick", "label": "Lipstick" }, + { "value": "lock", "label": "Lock" }, + { "value": "map_pin", "label": "Map pin" }, + { "value": "nut_free", "label": "Nut free" }, + { "value": "pants", "label": "Pants" }, + { "value": "paw", "label": "Paw" }, + { "value": "recycle", "label": "Recycle" }, + { "value": "shirt", "label": "Shirt" }, + { "value": "shoe", "label": "Shoe" }, + { "value": "snowflake", "label": "Snowflake" }, + { "value": "star", "label": "Star" }, + { "value": "sun", "label": "Sun" }, + { "value": "thumbs_up", "label": "Thumbs up" }, + { "value": "trophy", "label": "Trophy" }, + { "value": "washing", "label": "Washing" } + ], + "default": "none" + }, + { + "type": "image_picker", + "id": "image_upload", + "label": "Icon image" + }, + { + "type": "range", + "id": "width", + "label": "Icon size", + "min": 12, + "max": 96, + "step": 1, + "unit": "px", + "default": 20 + } + ], + "presets": [ + { + "name": "Stockist map row" + } + ] +} +{% endschema %} diff --git a/blocks/stockist_location.liquid b/blocks/stockist_location.liquid new file mode 100644 index 000000000..422587344 --- /dev/null +++ b/blocks/stockist_location.liquid @@ -0,0 +1,70 @@ +{% schema %} +{ + "name": "Stockist location", + "tag": null, + "settings": [ + { + "type": "text", + "id": "name", + "label": "Name", + "default": "Stockist" + }, + { + "type": "text", + "id": "address_line_1", + "label": "Address line 1" + }, + { + "type": "text", + "id": "address_line_2", + "label": "Address line 2" + }, + { + "type": "text", + "id": "city", + "label": "City" + }, + { + "type": "text", + "id": "region", + "label": "Region" + }, + { + "type": "text", + "id": "postal_code", + "label": "Postcode" + }, + { + "type": "text", + "id": "country", + "label": "Country", + "default": "New Zealand" + }, + { + "type": "text", + "id": "lat", + "label": "Latitude" + }, + { + "type": "text", + "id": "lng", + "label": "Longitude" + }, + { + "type": "text", + "id": "phone", + "label": "Phone" + }, + { + "type": "url", + "id": "website", + "label": "Website" + }, + { + "type": "textarea", + "id": "notes", + "label": "Notes" + } + ] +} +{% endschema %} diff --git a/sections/stockist-mapbox.liquid b/sections/stockist-mapbox.liquid new file mode 100644 index 000000000..cd7133857 --- /dev/null +++ b/sections/stockist-mapbox.liquid @@ -0,0 +1,411 @@ +{%- liquid + assign stockist_blocks = section.blocks | where: 'type', 'stockist' +-%} + +
+
+
+ {% if section.settings.heading != blank or section.settings.subheading != blank %} +
+ {% if section.settings.heading != blank %} +

+ {{ section.settings.heading | escape }} +

+ {% endif %} + {% if section.settings.subheading != blank %} +
+ {{ section.settings.subheading }} +
+ {% endif %} +
+ {% endif %} + + + {% if section.settings.show_search %} + + {% endif %} + +
+
+
+
+ + +
+
+
+ + + +{% schema %} +{ + "name": "Stockist map (Mapbox)", + "tag": "section", + "class": "stockist-mapbox-section", + "disabled_on": { + "groups": ["header", "footer"] + }, + "settings": [ + { + "type": "text", + "id": "heading", + "label": "Heading", + "default": "Find Golden near you" + }, + { + "type": "richtext", + "id": "subheading", + "label": "Subheading", + "default": "

Search by city or postcode to find stockists nearby.

" + }, + { + "type": "text", + "id": "mapbox_token", + "label": "Mapbox access token" + }, + { + "type": "text", + "id": "map_style", + "label": "Mapbox style URL", + "default": "mapbox://styles/mapbox/light-v11" + }, + { + "type": "text", + "id": "default_center", + "label": "Default map center (lat,lng)", + "default": "-36.8485,174.7633" + }, + { + "type": "range", + "id": "default_zoom", + "label": "Default zoom", + "min": 2, + "max": 16, + "step": 1, + "default": 6 + }, + { + "type": "select", + "id": "layout", + "label": "Layout", + "options": [ + { + "value": "map-right", + "label": "Map right" + }, + { + "value": "map-left", + "label": "Map left" + } + ], + "default": "map-right" + }, + { + "type": "checkbox", + "id": "show_search", + "label": "Show search", + "default": true + }, + { + "type": "text", + "id": "search_label", + "label": "Search label", + "default": "Search location" + }, + { + "type": "text", + "id": "search_placeholder", + "label": "Search placeholder", + "default": "Search by city or postcode" + }, + { + "type": "text", + "id": "search_button_label", + "label": "Search button label", + "default": "Search" + }, + { + "type": "checkbox", + "id": "show_geolocate", + "label": "Show 'Near me' button", + "default": true + }, + { + "type": "text", + "id": "geolocate_label", + "label": "Near me label", + "default": "Use my location" + }, + { + "type": "checkbox", + "id": "sort_by_distance", + "label": "Sort by distance when searching", + "default": true + }, + { + "type": "checkbox", + "id": "show_distance", + "label": "Show distance", + "default": true + }, + { + "type": "text", + "id": "empty_text", + "label": "Empty state text", + "default": "Add stockists to this section to show them on the map." + }, + { + "type": "color", + "id": "marker_color", + "label": "Marker color", + "default": "#1c1c1c" + }, + { + "type": "range", + "id": "map_height", + "label": "Map height (desktop)", + "min": 320, + "max": 900, + "step": 10, + "unit": "px", + "default": 560 + }, + { + "type": "range", + "id": "map_height_mobile", + "label": "Map height (mobile)", + "min": 240, + "max": 640, + "step": 10, + "unit": "px", + "default": 360 + }, + { + "type": "select", + "id": "text_alignment", + "label": "Text alignment", + "options": [ + { + "value": "left", + "label": "t:options.left" + }, + { + "value": "center", + "label": "t:options.center" + }, + { + "value": "right", + "label": "t:options.right" + } + ], + "default": "center" + }, + { + "type": "header", + "content": "t:content.layout" + }, + { + "type": "select", + "id": "section_width", + "label": "Section width", + "options": [ + { + "value": "page-width", + "label": "t:options.page" + }, + { + "value": "full-width", + "label": "t:options.full" + } + ], + "default": "page-width" + }, + { + "type": "range", + "id": "gap", + "label": "Block gap", + "min": 0, + "max": 80, + "step": 1, + "unit": "px", + "default": 24 + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "t:content.color_scheme", + "default": "scheme-1" + }, + { + "type": "header", + "content": "t:content.padding" + }, + { + "type": "range", + "id": "padding-block-start", + "label": "Top padding", + "min": 0, + "max": 128, + "step": 4, + "unit": "px", + "default": 48 + }, + { + "type": "range", + "id": "padding-block-end", + "label": "Bottom padding", + "min": 0, + "max": 128, + "step": 4, + "unit": "px", + "default": 48 + } + ], + "blocks": [ + { + "type": "stockist", + "name": "Stockist", + "settings": [ + { + "type": "text", + "id": "name", + "label": "Name" + }, + { + "type": "text", + "id": "address_line_1", + "label": "Address line 1" + }, + { + "type": "text", + "id": "address_line_2", + "label": "Address line 2" + }, + { + "type": "text", + "id": "city", + "label": "City" + }, + { + "type": "text", + "id": "region", + "label": "Region" + }, + { + "type": "text", + "id": "postal_code", + "label": "Postcode" + }, + { + "type": "text", + "id": "country", + "label": "Country" + }, + { + "type": "text", + "id": "lat", + "label": "Latitude" + }, + { + "type": "text", + "id": "lng", + "label": "Longitude" + }, + { + "type": "text", + "id": "phone", + "label": "Phone" + }, + { + "type": "url", + "id": "website", + "label": "Website" + }, + { + "type": "text", + "id": "notes", + "label": "Notes" + } + ] + } + ], + "presets": [ + { + "name": "Stockist map (Mapbox)" + } + ] +} +{% endschema %} diff --git a/snippets/stylesheets.liquid b/snippets/stylesheets.liquid index 756f21504..93525af2a 100644 --- a/snippets/stylesheets.liquid +++ b/snippets/stylesheets.liquid @@ -2,7 +2,7 @@ {{ 'base.css' | asset_url | stylesheet_tag: preload: true }} {%- liquid - assign optional_css_tokens = 'collection-links-component,featured-blog-posts,featured-product-section,hero--splash,logo-section,marquee__wrapper,media-with-content,section-password,predictive-search,footer-content' | split: ',' + assign optional_css_tokens = 'collection-links-component,featured-blog-posts,featured-product-section,hero--splash,logo-section,marquee__wrapper,media-with-content,section-password,predictive-search,footer-content,stockist-mapbox' | split: ',' assign load_optional_css = false for token in optional_css_tokens From 1686e5282e8c990892cc7c11f1ea373b167a7989 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:59:37 +0000 Subject: [PATCH 1199/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/templates/index.json b/templates/index.json index ade087c19..864c461b2 100644 --- a/templates/index.json +++ b/templates/index.json @@ -2119,6 +2119,56 @@ "padding-inline-end": 0 }, "blocks": { + "accordion_row_stockist_mapbox_B3RxhB": { + "type": "accordion_row_stockist_mapbox", + "name": "Stockist map row", + "settings": { + "heading": "Stockists", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "intro_text": "", + "mapbox_token": "pk.eyJ1Ijoic3RheWdvbGRlbiIsImEiOiJjbWU4MHR0ZGkwN3VnMmpwdzRhdTk1ZXJwIn0.B_Ut6dgFJ6Bmnl44MbAZ9g", + "map_style": "mapbox://styles/staygolden/cmlk28ba200k401sl49f76nhy", + "default_center": "-36.8485,174.7633", + "default_zoom": 6, + "layout": "map-right", + "show_search": true, + "search_label": "Search location", + "search_placeholder": "Search by city or postcode", + "search_button_label": "Search", + "show_geolocate": true, + "geolocate_label": "Use my location", + "sort_by_distance": true, + "show_distance": true, + "empty_text": "Add stockists to this row to show them on the map.", + "marker_color": "#1c1c1c", + "map_height": 520, + "map_height_mobile": 360, + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 44, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": {} + }, "accordion_row_social_J3z8ak": { "type": "accordion_row_social", "name": "Social feed row", @@ -2165,6 +2215,7 @@ } }, "block_order": [ + "accordion_row_stockist_mapbox_B3RxhB", "accordion_row_social_J3z8ak" ] } From 06534c82bb5209fb9137b81c461f0d92fc14339f Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:01:20 +0000 Subject: [PATCH 1200/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index 864c461b2..a78194891 100644 --- a/templates/index.json +++ b/templates/index.json @@ -2133,7 +2133,7 @@ "intro_text": "", "mapbox_token": "pk.eyJ1Ijoic3RheWdvbGRlbiIsImEiOiJjbWU4MHR0ZGkwN3VnMmpwdzRhdTk1ZXJwIn0.B_Ut6dgFJ6Bmnl44MbAZ9g", "map_style": "mapbox://styles/staygolden/cmlk28ba200k401sl49f76nhy", - "default_center": "-36.8485,174.7633", + "default_center": "", "default_zoom": 6, "layout": "map-right", "show_search": true, From 604f6c55e040870280016cfaaedbf8dcdb9451e4 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Feb 2026 16:43:15 +1300 Subject: [PATCH 1201/1275] Fix double accordion divider lines --- assets/base.css | 6 ++++++ blocks/accordion_row_stockist_mapbox.liquid | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/base.css b/assets/base.css index 6014799b4..477a795bb 100644 --- a/assets/base.css +++ b/assets/base.css @@ -5058,6 +5058,12 @@ accordion-custom { } } +accordion-custom .details__header, +accordion-custom .details-content { + border-block-start: 0; + border-block-end: 0; +} + accordion-custom[data-disable-on-mobile='true'] summary { @media screen and (max-width: 749px) { cursor: auto; diff --git a/blocks/accordion_row_stockist_mapbox.liquid b/blocks/accordion_row_stockist_mapbox.liquid index a3bf36ff7..6f0deb0c0 100644 --- a/blocks/accordion_row_stockist_mapbox.liquid +++ b/blocks/accordion_row_stockist_mapbox.liquid @@ -667,8 +667,6 @@ .details__header, .details-content { - border-block-start: var(--accordion-divider-thickness) solid transparent; - border-block-end: var(--accordion-divider-thickness) solid transparent; transition: background-color var(--animation-speed) var(--animation-easing), border-color var(--animation-speed) var(--animation-easing); } From 715341ed37a90af34914cb62b42d84d201b58c5c Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 01:00:02 +0000 Subject: [PATCH 1202/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/index.json b/templates/index.json index 47846c755..a0c546e40 100644 --- a/templates/index.json +++ b/templates/index.json @@ -930,7 +930,7 @@ "name": "t:names.slide", "settings": { "media_type_1": "image", - "image_1": "shopify://shop_images/shutterstock_1715090482.webp", + "image_1": "shopify://shop_images/Beehives_Small_47eb5127-3cc9-4480-81ef-ca28c340227f.webp", "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", @@ -987,7 +987,7 @@ "name": "t:names.slide", "settings": { "media_type_1": "image", - "image_1": "shopify://shop_images/iStock-641225382.jpg", + "image_1": "shopify://shop_images/Farewell_Spit_Small_cf2dc2e0-144d-49cc-851f-7e4cf3238554.webp", "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", From e951d3c6c40cbf5a9cedf8ef47d6b7efb413cae9 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 01:00:18 +0000 Subject: [PATCH 1203/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index a0c546e40..3b63c39b3 100644 --- a/templates/index.json +++ b/templates/index.json @@ -1154,7 +1154,7 @@ "type": "image", "name": "t:names.image", "settings": { - "image": "shopify://shop_images/lemon_white_background.png", + "image": "shopify://shop_images/Lemon_Small_794ba3d1-63b8-4bf4-8bbd-54186f097c22.webp", "link": "", "image_ratio": "adapt", "width": "fill", From ad5b945d3088b8575162658d27837eff1fd4d8c9 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 01:00:34 +0000 Subject: [PATCH 1204/1275] Update from Shopify for theme horizon/main Committed from shop: Golden From 50e313cee51b80f26d60530565fe5e3417167349 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 01:01:20 +0000 Subject: [PATCH 1205/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.json b/templates/page.json index 12a775a97..a943cb405 100644 --- a/templates/page.json +++ b/templates/page.json @@ -89,7 +89,7 @@ "type": "image", "name": "t:names.image", "settings": { - "image": "shopify://shop_images/me_and_james.jpg", + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", "link": "", "image_ratio": "landscape", "width": "fill", From 83f91e0339cb6d0283e1109d67c13f723c125d5e Mon Sep 17 00:00:00 2001 From: Morg Date: Tue, 3 Mar 2026 15:25:18 +1300 Subject: [PATCH 1206/1275] Sync theme from horizon/main and fix single-slide media arrows --- assets/base.css | 6 - assets/sections-optional.css | 166 +- assets/stockist-mapbox.js | 371 --- blocks/_product-media-gallery.liquid | 19 +- blocks/accordion.liquid | 3 - blocks/accordion_row_stockist_mapbox.liquid | 1117 -------- blocks/stockist_location.liquid | 70 - sections/footer-group.json | 126 +- sections/stockist-mapbox.liquid | 411 --- snippets/stylesheets.liquid | 2 +- templates/index.json | 2740 +++++++++---------- templates/page.json | 2 +- 12 files changed, 1422 insertions(+), 3611 deletions(-) delete mode 100644 assets/stockist-mapbox.js delete mode 100644 blocks/accordion_row_stockist_mapbox.liquid delete mode 100644 blocks/stockist_location.liquid delete mode 100644 sections/stockist-mapbox.liquid diff --git a/assets/base.css b/assets/base.css index 477a795bb..6014799b4 100644 --- a/assets/base.css +++ b/assets/base.css @@ -5058,12 +5058,6 @@ accordion-custom { } } -accordion-custom .details__header, -accordion-custom .details-content { - border-block-start: 0; - border-block-end: 0; -} - accordion-custom[data-disable-on-mobile='true'] summary { @media screen and (max-width: 749px) { cursor: auto; diff --git a/assets/sections-optional.css b/assets/sections-optional.css index 0d31bc470..45f03c6a0 100644 --- a/assets/sections-optional.css +++ b/assets/sections-optional.css @@ -797,8 +797,9 @@ input[type='search']::-webkit-search-decoration { } .dialog-modal .predictive-search-form__header-inner { - border: 0; - box-shadow: none; + @media screen and (min-width: 750px) { + border: 0; + } } .header[transparent] :is(.predictive-search):not(:focus-within) { @@ -1227,164 +1228,3 @@ input[type='search']::-webkit-search-decoration { transform: scale(0.97); } } - - /* stockist-mapbox.liquid */ - .stockist-mapbox { - --stockist-map-height: 560px; - --stockist-map-height-mobile: 360px; - --stockist-text-align: left; - --stockist-marker-color: #000000; - } - - .stockist-mapbox__inner { - display: flex; - flex-direction: column; - gap: var(--gap, var(--padding-lg)); - } - - .stockist-mapbox__header { - display: flex; - flex-direction: column; - gap: var(--padding-xs); - text-align: var(--stockist-text-align); - } - - .stockist-mapbox__subheading p { - margin: 0; - } - - .stockist-mapbox__intro { - max-width: 60ch; - } - - .stockist-mapbox__intro p { - margin: 0; - } - - .stockist-mapbox__search { - display: flex; - flex-direction: column; - gap: var(--padding-xs); - } - - .stockist-mapbox__search-row { - display: flex; - gap: var(--padding-xs); - flex-wrap: wrap; - } - - .stockist-mapbox__search-input { - flex: 1 1 220px; - min-width: 0; - border: var(--style-border-width-inputs) solid var(--color-input-border); - border-radius: var(--style-border-radius-inputs); - padding: var(--padding-xs) var(--padding-sm); - background: var(--color-input-background); - color: var(--color-foreground); - } - - .stockist-mapbox__content { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); - gap: var(--gap, var(--padding-lg)); - align-items: start; - } - - .stockist-mapbox[data-layout='map-left'] .stockist-mapbox__content { - grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); - } - - .stockist-mapbox[data-layout='map-left'] .stockist-mapbox__map { - order: -1; - } - - .stockist-mapbox__list { - border: var(--style-border-width) solid var(--color-border); - border-radius: var(--style-border-radius-inputs); - padding: var(--padding-md); - max-height: var(--stockist-map-height); - overflow: auto; - background: var(--color-background); - } - - .stockist-mapbox__item { - border-top: var(--style-border-width) solid var(--color-border); - padding-block: var(--padding-sm); - } - - .stockist-mapbox__item:first-child { - border-top: 0; - padding-top: 0; - } - - .stockist-mapbox__item-button { - background: none; - border: 0; - padding: 0; - width: 100%; - text-align: left; - color: inherit; - cursor: pointer; - } - - .stockist-mapbox__item-title { - font-weight: 600; - } - - .stockist-mapbox__item-meta { - color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); - font-size: var(--font-size--sm); - } - - .stockist-mapbox__item-distance { - margin-top: var(--padding-2xs); - font-size: var(--font-size--sm); - } - - .stockist-mapbox__map { - border: var(--style-border-width) solid var(--color-border); - border-radius: var(--style-border-radius-inputs); - min-height: var(--stockist-map-height); - height: var(--stockist-map-height); - overflow: hidden; - } - - .stockist-mapbox__marker { - width: 12px; - height: 12px; - border-radius: 999px; - background: var(--stockist-marker-color); - border: 2px solid var(--color-background); - box-shadow: 0 0 0 1px var(--color-border); - cursor: pointer; - } - - .stockist-mapbox__marker.is-active { - transform: scale(1.2); - } - - .stockist-mapbox__placeholder { - border: var(--style-border-width) dashed var(--color-border); - padding: var(--padding-lg); - text-align: center; - background: var(--color-background); - } - - @media screen and (max-width: 989px) { - .stockist-mapbox__content { - grid-template-columns: minmax(0, 1fr); - } - - .stockist-mapbox__map { - order: -1; - } - } - - @media screen and (max-width: 749px) { - .stockist-mapbox__map, - .stockist-mapbox__list { - max-height: none; - height: auto; - min-height: var(--stockist-map-height-mobile); - } - } diff --git a/assets/stockist-mapbox.js b/assets/stockist-mapbox.js deleted file mode 100644 index 9d11d2dd5..000000000 --- a/assets/stockist-mapbox.js +++ /dev/null @@ -1,371 +0,0 @@ -const MAPBOX_JS_URL = 'https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js'; -const MAPBOX_CSS_URL = 'https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css'; -const MAPBOX_PROMISE_KEY = '__stockistMapboxPromise'; - -function loadMapboxCss() { - if (document.querySelector('link[data-mapbox-gl-css]')) return; - const link = document.createElement('link'); - link.rel = 'stylesheet'; - link.href = MAPBOX_CSS_URL; - link.dataset.mapboxGlCss = 'true'; - document.head.appendChild(link); -} - -function loadMapbox() { - if (window.mapboxgl) return Promise.resolve(window.mapboxgl); - if (window[MAPBOX_PROMISE_KEY]) return window[MAPBOX_PROMISE_KEY]; - loadMapboxCss(); - window[MAPBOX_PROMISE_KEY] = new Promise((resolve, reject) => { - const script = document.createElement('script'); - script.src = MAPBOX_JS_URL; - script.async = true; - script.onload = () => resolve(window.mapboxgl); - script.onerror = () => reject(new Error('Failed to load Mapbox GL JS')); - document.head.appendChild(script); - }); - return window[MAPBOX_PROMISE_KEY]; -} - -function parseCenter(value) { - if (!value) return null; - const parts = value - .split(',') - .map((part) => Number.parseFloat(part.trim())) - .filter((part) => Number.isFinite(part)); - if (parts.length < 2) return null; - return [parts[1], parts[0]]; -} - -function toNumber(value) { - if (value === null || value === undefined || value === '') return null; - const parsed = Number.parseFloat(value); - return Number.isFinite(parsed) ? parsed : null; -} - -function toRadians(value) { - return (value * Math.PI) / 180; -} - -function haversineDistance(origin, target) { - const R = 6371; - const dLat = toRadians(target[1] - origin[1]); - const dLng = toRadians(target[0] - origin[0]); - const lat1 = toRadians(origin[1]); - const lat2 = toRadians(target[1]); - const a = - Math.sin(dLat / 2) * Math.sin(dLat / 2) + - Math.sin(dLng / 2) * Math.sin(dLng / 2) * Math.cos(lat1) * Math.cos(lat2); - const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - return R * c; -} - -class StockistMapbox extends HTMLElement { - connectedCallback() { - if (this.dataset.stockistMapboxInitialized === 'true') return; - this.dataset.stockistMapboxInitialized = 'true'; - - this.token = this.dataset.mapboxToken || ''; - this.mapStyle = this.dataset.mapStyle || 'mapbox://styles/mapbox/light-v11'; - this.defaultCenter = parseCenter(this.dataset.defaultCenter) || [0, 0]; - this.defaultZoom = Number.parseInt(this.dataset.defaultZoom || '6', 10); - this.sortByDistance = this.dataset.sortByDistance === 'true'; - this.showDistance = this.dataset.showDistance === 'true'; - this.emptyText = this.dataset.emptyText || 'Add stockists to show them here.'; - - this.resultsEl = this.querySelector('[data-results]'); - this.mapEl = this.querySelector('[data-map]'); - this.searchForm = this.querySelector('[data-search]'); - this.searchInput = this.querySelector('[data-search-input]'); - this.geoButton = this.querySelector('[data-geolocate]'); - - this.locations = this.loadLocations(); - this.activeId = null; - this.origin = null; - this.markers = new Map(); - - this.renderList(); - this.setupSearch(); - this.setupGeolocate(); - - if (!this.token) { - this.renderMapPlaceholder('Mapbox access token required.'); - return; - } - - if (this.mapEl) { - loadMapbox() - .then((mapboxgl) => this.initMap(mapboxgl)) - .catch(() => { - this.renderMapPlaceholder('Unable to load the map.'); - }); - } - } - - loadLocations() { - const dataScript = this.querySelector('[data-stockist-data]'); - if (!dataScript) return []; - try { - const raw = JSON.parse(dataScript.textContent || '[]'); - return raw.map((location, index) => { - const lat = toNumber(location.lat); - const lng = toNumber(location.lng); - return { - id: location.id || `stockist-${index}`, - name: location.name || 'Stockist', - address_line_1: location.address_line_1 || '', - address_line_2: location.address_line_2 || '', - city: location.city || '', - region: location.region || '', - postal_code: location.postal_code || '', - country: location.country || '', - phone: location.phone || '', - website: location.website || '', - notes: location.notes || '', - lat, - lng, - distanceKm: null, - order: index - }; - }); - } catch (error) { - return []; - } - } - - renderMapPlaceholder(text) { - if (!this.mapEl) return; - this.mapEl.innerHTML = ''; - const placeholder = document.createElement('div'); - placeholder.className = 'stockist-mapbox__placeholder'; - placeholder.textContent = text; - this.mapEl.appendChild(placeholder); - } - - setupSearch() { - if (!this.searchForm || !this.searchInput) return; - this.searchForm.addEventListener('submit', (event) => { - event.preventDefault(); - const query = this.searchInput.value.trim(); - if (!query) return; - this.searchLocation(query); - }); - } - - setupGeolocate() { - if (!this.geoButton) return; - this.geoButton.addEventListener('click', () => { - if (!navigator.geolocation) return; - navigator.geolocation.getCurrentPosition( - (position) => { - const coords = [position.coords.longitude, position.coords.latitude]; - this.setOrigin(coords); - if (this.map) { - this.map.flyTo({ center: coords, zoom: Math.max(this.map.getZoom(), 10) }); - this.addSearchMarker(coords); - } - }, - () => {} - ); - }); - } - - async searchLocation(query) { - if (!this.token) return; - const url = new URL(`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json`); - url.searchParams.set('access_token', this.token); - url.searchParams.set('limit', '1'); - const response = await fetch(url.toString()); - if (!response.ok) return; - const data = await response.json(); - if (!data.features || !data.features.length) return; - const [lng, lat] = data.features[0].center; - const coords = [lng, lat]; - this.setOrigin(coords); - if (this.map) { - this.map.flyTo({ center: coords, zoom: Math.max(this.map.getZoom(), 10) }); - this.addSearchMarker(coords); - } - } - - setOrigin(coords) { - this.origin = coords; - if (!coords) { - this.locations.forEach((location) => { - location.distanceKm = null; - }); - this.renderList(); - return; - } - this.locations.forEach((location) => { - if (location.lat === null || location.lng === null) { - location.distanceKm = null; - return; - } - location.distanceKm = haversineDistance(coords, [location.lng, location.lat]); - }); - this.renderList(); - } - - getSortedLocations() { - const list = [...this.locations]; - if (this.sortByDistance && this.origin) { - list.sort((a, b) => { - if (a.distanceKm === null) return 1; - if (b.distanceKm === null) return -1; - return a.distanceKm - b.distanceKm; - }); - return list; - } - list.sort((a, b) => a.order - b.order); - return list; - } - - renderList() { - if (!this.resultsEl) return; - this.resultsEl.innerHTML = ''; - const locations = this.getSortedLocations(); - if (!locations.length) { - const placeholder = document.createElement('div'); - placeholder.className = 'stockist-mapbox__placeholder'; - placeholder.textContent = this.emptyText; - this.resultsEl.appendChild(placeholder); - return; - } - const fragment = document.createDocumentFragment(); - locations.forEach((location) => { - const item = document.createElement('div'); - item.className = 'stockist-mapbox__item'; - if (this.activeId === location.id) item.classList.add('is-active'); - - const button = document.createElement('button'); - button.className = 'stockist-mapbox__item-button'; - button.type = 'button'; - button.addEventListener('click', () => this.focusLocation(location)); - - const title = document.createElement('div'); - title.className = 'stockist-mapbox__item-title'; - title.textContent = location.name; - button.appendChild(title); - - const meta = document.createElement('div'); - meta.className = 'stockist-mapbox__item-meta'; - const addressLines = []; - if (location.address_line_1) addressLines.push(location.address_line_1); - if (location.address_line_2) addressLines.push(location.address_line_2); - const locality = [location.city, location.region, location.postal_code] - .filter(Boolean) - .join(' '); - if (locality) addressLines.push(locality); - if (location.country) addressLines.push(location.country); - - addressLines.forEach((line) => { - const lineEl = document.createElement('div'); - lineEl.textContent = line; - meta.appendChild(lineEl); - }); - - if (location.phone) { - const phoneEl = document.createElement('a'); - phoneEl.href = `tel:${location.phone}`; - phoneEl.textContent = location.phone; - meta.appendChild(phoneEl); - } - - if (location.website) { - const websiteEl = document.createElement('a'); - websiteEl.href = location.website; - websiteEl.target = '_blank'; - websiteEl.rel = 'noopener'; - websiteEl.textContent = location.website.replace(/^https?:\/\//, ''); - meta.appendChild(websiteEl); - } - - if (location.notes) { - const notesEl = document.createElement('div'); - notesEl.textContent = location.notes; - meta.appendChild(notesEl); - } - - button.appendChild(meta); - - if (this.showDistance && location.distanceKm !== null) { - const distance = document.createElement('div'); - distance.className = 'stockist-mapbox__item-distance'; - distance.textContent = `${location.distanceKm.toFixed(1)} km`; - button.appendChild(distance); - } - - item.appendChild(button); - fragment.appendChild(item); - }); - this.resultsEl.appendChild(fragment); - } - - focusLocation(location) { - if (!location) return; - this.activeId = location.id; - this.setActiveMarker(location.id); - this.renderList(); - if (this.map && location.lat !== null && location.lng !== null) { - this.map.flyTo({ - center: [location.lng, location.lat], - zoom: Math.max(this.map.getZoom(), 12) - }); - } - } - - setActiveMarker(id) { - this.markers.forEach((marker, markerId) => { - marker.getElement().classList.toggle('is-active', markerId === id); - }); - } - - addSearchMarker(coords) { - if (!this.map || !coords) return; - if (!this.searchMarker) { - this.searchMarker = new window.mapboxgl.Marker().setLngLat(coords).addTo(this.map); - return; - } - this.searchMarker.setLngLat(coords); - } - - initMap(mapboxgl) { - mapboxgl.accessToken = this.token; - const mapCenter = this.defaultCenter; - - this.map = new mapboxgl.Map({ - container: this.mapEl, - style: this.mapStyle, - center: mapCenter, - zoom: this.defaultZoom - }); - - const locationsWithCoords = this.locations.filter((location) => location.lat !== null && location.lng !== null); - locationsWithCoords.forEach((location) => { - const markerEl = document.createElement('div'); - markerEl.className = 'stockist-mapbox__marker'; - markerEl.addEventListener('click', () => this.focusLocation(location)); - const marker = new mapboxgl.Marker(markerEl) - .setLngLat([location.lng, location.lat]) - .addTo(this.map); - this.markers.set(location.id, marker); - }); - - this.map.on('load', () => { - this.map.resize(); - }); - - const details = this.closest('details'); - if (details) { - details.addEventListener('toggle', () => { - if (details.open && this.map) { - this.map.resize(); - } - }); - } - } -} - -if (!customElements.get('stockist-mapbox')) { - customElements.define('stockist-mapbox', StockistMapbox); -} diff --git a/blocks/_product-media-gallery.liquid b/blocks/_product-media-gallery.liquid index 856c070a7..262acad49 100644 --- a/blocks/_product-media-gallery.liquid +++ b/blocks/_product-media-gallery.liquid @@ -47,16 +47,7 @@ endif assign render_slideshow_arrows = false - - if selected_product.media.size <= 1 - assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' - else - assign slideshow_class = '' - - if block_settings.media_presentation == 'carousel' - assign render_slideshow_arrows = true - endif - endif + assign slideshow_class = '' if slideshow_controls_style == 'thumbnails' assign pagination_position = block_settings.thumbnail_position @@ -101,6 +92,14 @@ endif assign has_image_drop = sorted_media | has: 'media_type', 'image' + # Arrow visibility should match visible slides after variant filtering. + if sorted_media.size <= 1 + assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' + assign render_slideshow_arrows = false + elsif block_settings.media_presentation == 'carousel' + assign render_slideshow_arrows = true + endif + # Determine if we're in single column mode (carousel or grid with one column) assign is_single_column = false if block_settings.media_presentation == 'carousel' or sorted_media.size == 1 or block_settings.media_presentation == 'grid' and block_settings.media_columns == 'one' diff --git a/blocks/accordion.liquid b/blocks/accordion.liquid index 597d8af97..a72a06642 100644 --- a/blocks/accordion.liquid +++ b/blocks/accordion.liquid @@ -109,9 +109,6 @@ }, { "type": "accordion_row_social" - }, - { - "type": "accordion_row_stockist_mapbox" } ], "settings": [ diff --git a/blocks/accordion_row_stockist_mapbox.liquid b/blocks/accordion_row_stockist_mapbox.liquid deleted file mode 100644 index 6f0deb0c0..000000000 --- a/blocks/accordion_row_stockist_mapbox.liquid +++ /dev/null @@ -1,1117 +0,0 @@ -{% assign block_settings = block.settings %} -{% assign row_classes = 'accordion-row' %} -{% assign row_color_scheme_id = block_settings.color_scheme %} -{% if row_color_scheme_id == blank and section.settings.color_scheme != blank %} - {% assign row_color_scheme_id = section.settings.color_scheme %} -{% endif %} -{% if row_color_scheme_id != blank %} - {% assign row_classes = row_classes | append: ' color-' | append: row_color_scheme_id %} -{% endif %} -{% assign row_hover_scheme_id = block_settings.hover_color_scheme %} -{% if row_hover_scheme_id == blank %} - {% assign row_hover_scheme_id = row_color_scheme_id %} -{% endif %} - -{% assign left_hover_override = block_settings.left_hover_color_scheme %} -{% assign right_hover_override = block_settings.right_hover_color_scheme %} -{% assign left_hover_scheme_id = left_hover_override | default: row_hover_scheme_id %} -{% assign right_hover_scheme_id = right_hover_override | default: row_hover_scheme_id %} -{% assign has_split_hover_scheme = false %} -{% if left_hover_override != blank or right_hover_override != blank %} - {% assign has_split_hover_scheme = true %} -{% endif %} - -{% assign row_has_custom_scheme = false %} -{% if block_settings.color_scheme != blank %} - {% assign row_has_custom_scheme = true %} -{% endif %} - -{% assign has_reveal_content = true %} - -{% assign is_collapsible = false %} -{% if has_reveal_content and block_settings.collapsible %} - {% assign is_collapsible = true %} -{% endif %} - -{% if has_reveal_content %} - {% assign row_classes = row_classes | append: ' accordion-row--has-reveal' %} -{% endif %} - -{% assign show_right_heading = false %} -{% if block_settings.right_heading != blank %} - {% assign show_right_heading = true %} -{% endif %} - -{% assign header_links_enabled = false %} -{% if block_settings.heading_links_enabled %} - {% assign header_links_enabled = true %} -{% endif %} -{% assign left_heading_link = block_settings.heading_link %} -{% assign right_heading_link = block_settings.right_heading_link %} - -{% assign show_left_heading = false %} -{% if block_settings.heading != blank %} - {% assign show_left_heading = true %} -{% elsif block_settings.icon != blank and block_settings.icon != 'none' %} - {% assign show_left_heading = true %} -{% elsif block_settings.image_upload != blank %} - {% assign show_left_heading = true %} -{% endif %} - -{% assign header_classes = 'details__header' %} -{% if show_left_heading %} - {% assign header_classes = header_classes | append: ' details__header--has-left' %} -{% else %} - {% assign header_classes = header_classes | append: ' details__header--no-left' %} -{% endif %} -{% if show_right_heading %} - {% assign header_classes = header_classes | append: ' details__header--has-right' %} -{% endif %} -{% if show_right_heading and show_left_heading == false %} - {% assign header_classes = header_classes | append: ' details__header--right-only' %} -{% endif %} - -{% assign has_custom_summary_padding = false %} -{% assign has_custom_content_padding = false %} - -{% assign summary_padding_block_start_value = block_settings.summary_padding_block_start | default: 0 | times: 1 %} -{% assign summary_padding_block_end_value = block_settings.summary_padding_block_end | default: 0 | times: 1 %} -{% assign summary_padding_inline_start_value = block_settings.summary_padding_inline_start | default: 0 | times: 1 %} -{% assign summary_padding_inline_end_value = block_settings.summary_padding_inline_end | default: 0 | times: 1 %} - -{% if summary_padding_block_start_value != 0 or summary_padding_block_end_value != 0 or summary_padding_inline_start_value != 0 or summary_padding_inline_end_value != 0 %} - {% assign has_custom_summary_padding = true %} -{% endif %} - -{% assign content_padding_block_start_value = block_settings.content_padding_block_start | default: 0 | times: 1 %} -{% assign content_padding_block_end_value = block_settings.content_padding_block_end | default: 0 | times: 1 %} -{% assign content_padding_inline_start_value = block_settings.content_padding_inline_start | default: 0 | times: 1 %} -{% assign content_padding_inline_end_value = block_settings.content_padding_inline_end | default: 0 | times: 1 %} - -{% if content_padding_block_start_value != 0 or content_padding_block_end_value != 0 or content_padding_inline_start_value != 0 or content_padding_inline_end_value != 0 %} - {% assign has_custom_content_padding = true %} -{% endif %} - -{% assign has_row_custom_padding = false %} -{% if has_custom_summary_padding or has_custom_content_padding %} - {% assign has_row_custom_padding = true %} -{% endif %} - -{% capture inline_styles %} - {% if summary_padding_block_start_value != 0 %}--accordion-header-padding-block-start: {{ summary_padding_block_start_value }}px;{% endif %} - {% if summary_padding_block_end_value != 0 %}--accordion-header-padding-block-end: {{ summary_padding_block_end_value }}px;{% endif %} - {% if summary_padding_inline_start_value != 0 %}--accordion-header-padding-inline-start: {{ summary_padding_inline_start_value }}px;{% endif %} - {% if summary_padding_inline_end_value != 0 %}--accordion-header-padding-inline-end: {{ summary_padding_inline_end_value }}px;{% endif %} - {% if content_padding_block_start_value != 0 %}--accordion-content-padding-block-start: {{ content_padding_block_start_value }}px;{% endif %} - {% if content_padding_block_end_value != 0 %}--accordion-content-padding-block-end: {{ content_padding_block_end_value }}px;{% endif %} - {% if content_padding_inline_start_value != 0 %}--accordion-content-padding-inline-start: {{ content_padding_inline_start_value }}px;{% endif %} - {% if content_padding_inline_end_value != 0 %}--accordion-content-padding-inline-end: {{ content_padding_inline_end_value }}px;{% endif %} - {% if block_settings.heading_type_preset != blank %} - --accordion-heading-font-family: var(--font-{{ block_settings.heading_type_preset }}--family); - --accordion-heading-font-style: var(--font-{{ block_settings.heading_type_preset }}--style); - --accordion-heading-font-weight: var(--font-{{ block_settings.heading_type_preset }}--weight); - --accordion-heading-text-case: var(--font-{{ block_settings.heading_type_preset }}--case); - --accordion-heading-line-height: var(--font-{{ block_settings.heading_type_preset }}--line-height); - --accordion-heading-base-size: var(--font-{{ block_settings.heading_type_preset }}--size); - {% endif %} - {% if block_settings.right_heading_type_preset != blank and block_settings.right_heading_type_preset != 'match' %} - --accordion-right-heading-font-family: var(--font-{{ block_settings.right_heading_type_preset }}--family); - --accordion-right-heading-font-style: var(--font-{{ block_settings.right_heading_type_preset }}--style); - --accordion-right-heading-font-weight: var(--font-{{ block_settings.right_heading_type_preset }}--weight); - --accordion-right-heading-text-case: var(--font-{{ block_settings.right_heading_type_preset }}--case); - --accordion-right-heading-line-height: var(--font-{{ block_settings.right_heading_type_preset }}--line-height); - --accordion-right-heading-base-size: var(--font-{{ block_settings.right_heading_type_preset }}--size); - {% endif %} - {% assign heading_min_numeric = block_settings.heading_min_size | default: 0 | times: 1 %} - {% assign heading_max_numeric = block_settings.heading_max_size | default: 0 | times: 1 %} - {% if heading_min_numeric > 0 %}--accordion-heading-min-size: {{ heading_min_numeric }}rem;{% endif %} - {% if heading_max_numeric > 0 %}--accordion-heading-max-size: {{ heading_max_numeric }}rem;{% endif %} - {% if heading_min_numeric == 0 and heading_max_numeric == 0 %} - --accordion-heading-size: var(--accordion-heading-base-size, var(--summary-font-size)); - --accordion-right-heading-size: var(--accordion-right-heading-base-size, var(--accordion-heading-base-size, var(--summary-font-size))); - {% endif %} - {% if has_row_custom_padding %} - --padding-inline-start: 0px; - --padding-inline-end: 0px; - --padding-block-start: 0px; - --padding-block-end: 0px; - --padding-inline-start-negative: 0px; - --padding-inline-end-negative: 0px; - --padding-block-start-negative: 0px; - --padding-block-end-negative: 0px; - {% endif %} -{% endcapture %} - -{% capture header_styles %} - {% if summary_padding_block_start_value != 0 %}padding-block-start: {{ summary_padding_block_start_value }}px;{% endif %} - {% if summary_padding_block_end_value != 0 %}padding-block-end: {{ summary_padding_block_end_value }}px;{% endif %} - {% if summary_padding_inline_start_value != 0 %}padding-inline-start: {{ summary_padding_inline_start_value }}px;{% endif %} - {% if summary_padding_inline_end_value != 0 %}padding-inline-end: {{ summary_padding_inline_end_value }}px;{% endif %} -{% endcapture %} - -{% capture content_styles %} - {% if content_padding_block_start_value != 0 %}padding-block-start: {{ content_padding_block_start_value }}px;{% endif %} - {% if content_padding_block_end_value != 0 %}padding-block-end: {{ content_padding_block_end_value }}px;{% endif %} - {% if content_padding_inline_start_value != 0 %}padding-inline-start: {{ content_padding_inline_start_value }}px;{% endif %} - {% if content_padding_inline_end_value != 0 %}padding-inline-end: {{ content_padding_inline_end_value }}px;{% endif %} -{% endcapture %} - -{% assign stockist_blocks = block.blocks | where: 'type', 'stockist_location' %} - -
- - {% if is_collapsible %} -
- - - {% if show_right_heading %} - - {% if is_collapsible %} - - - {{- 'icon-caret.svg' | inline_asset_content -}} - - - {% endif %} - {% if header_links_enabled and right_heading_link != blank %} - - {{ block_settings.right_heading }} - - {% else %} - {{ block_settings.right_heading }} - {% endif %} - - {% endif %} - - -
- {% if block_settings.intro_text != blank %} -
{{ block_settings.intro_text }}
- {% endif %} - - {% if block_settings.show_search %} - - {% endif %} - -
-
-
-
- - -
-
-
- {% else %} -
-
- - {% if show_right_heading %} - - {% if header_links_enabled and right_heading_link != blank %} - - {{ block_settings.right_heading }} - - {% else %} - {{ block_settings.right_heading }} - {% endif %} - - {% endif %} -
-
- {% if block_settings.intro_text != blank %} -
{{ block_settings.intro_text }}
- {% endif %} - - {% if block_settings.show_search %} - - {% endif %} - -
-
-
-
- - -
-
-
- {% endif %} -
-
- - - -{% stylesheet %} - .accordion-row { - width: 100%; - position: relative; - overflow: hidden; - --accordion-caret-gap: 12px; - --accordion-hover-background: rgb(var(--color-foreground-rgb, 255 255 255) / 0.08); - --accordion-hover-color: var(--color-foreground); - --accordion-hover-border: rgb(var(--color-border-rgb, var(--color-foreground-rgb, 0 0 0)) / 0.2); - --accordion-open-background: var(--color-background); - --accordion-open-color: inherit; - --accordion-open-border: rgb(var(--color-border-rgb, var(--color-foreground-rgb, 0 0 0)) / 0.2); - --accordion-divider-thickness: var(--golden-gridline-thickness, var(--style-border-width, 1px)); - } - - .accordion-row::before { - content: ''; - position: absolute; - top: calc(var(--padding-block-start, 0px) * -1); - bottom: calc(var(--padding-block-end, 0px) * -1); - left: calc(var(--padding-inline-start, 0px) * -1); - right: calc(var(--padding-inline-end, 0px) * -1); - background-color: var(--color-background); - z-index: -1; - } - - .accordion-row__inner { - display: block; - } - - .accordion-row__group--left { - margin-inline-end: auto; - } - - .accordion-row__group--right { - margin-inline-start: auto; - } - - .details__icon { - height: auto; - margin-inline-end: var(--margin-xs); - } - - .details__header { - display: flex; - align-items: center; - justify-content: space-between; - gap: var(--margin-md); - transition: background-color 160ms var(--ease-out), color 160ms var(--ease-out); - padding-block-start: var(--accordion-header-padding-block-start, var(--padding-sm)); - padding-block-end: var(--accordion-header-padding-block-end, var(--padding-sm)); - padding-inline-start: var(--accordion-header-padding-inline-start, var(--padding-inline-start, 0px)); - padding-inline-end: var(--accordion-header-padding-inline-end, var(--padding-inline-end, 0px)); - } - - .details__header--has-right { - gap: var(--margin-lg); - } - - .details__heading { - display: inline-flex; - align-items: center; - gap: var(--margin-xs); - justify-content: flex-start; - flex: 1; - min-width: 0; - color: inherit; - font-family: var(--accordion-heading-font-family, var(--summary-font-family)); - font-style: var(--accordion-heading-font-style, var(--summary-font-style)); - font-weight: var(--accordion-heading-font-weight, var(--summary-font-weight)); - line-height: var(--accordion-heading-line-height, var(--summary-font-line-height)); - text-transform: var(--accordion-heading-text-case, var(--summary-font-case)); - font-size: var( - --accordion-heading-size, - clamp( - var(--accordion-heading-min-size, 1rem), - calc( - var(--accordion-heading-min-size, 1rem) + - ( - var(--accordion-heading-max-size, 3.4rem) - - var(--accordion-heading-min-size, 1rem) - ) * - clamp( - 0, - ( - 100vw - - var(--accordion-heading-min-breakpoint, 20rem) - ) / - max( - 0.001rem, - var(--accordion-heading-max-breakpoint, 48rem) - - var(--accordion-heading-min-breakpoint, 20rem) - ), - 1 - ) - ), - var(--accordion-heading-max-size, 3.4rem) - ) - ); - } - - .details__heading--right { - margin-inline-start: auto; - text-align: right; - justify-content: flex-end; - } - - .details__header:not(.details__header--has-right) { - justify-content: flex-start; - } - - .details__header:not(.details__header--has-right) .details__heading--left { - flex: 1 1 100%; - width: auto; - max-width: none; - } - - .details__header:not(.details__header--has-right) .details__heading--left .details__label { - width: 100%; - } - - .details__header:not(.details__header--has-right) .details__heading--left .accordion-row__link { - width: fit-content; - } - - .details__header--right-only { - justify-content: flex-end; - } - - .details__header--right-only .details__heading--left { - display: none; - } - - .details__header--right-only .details__heading--right { - flex: 1 1 100%; - width: auto; - max-width: none; - margin-inline-start: 0; - } - - .details__header--right-only .details__heading--right .details__label { - width: 100%; - } - - .details__header--right-only .details__heading--right .accordion-row__link { - width: fit-content; - } - - .details__heading--right .details__label { - font-family: var(--accordion-right-heading-font-family, var(--accordion-heading-font-family, var(--summary-font-family))); - font-style: var(--accordion-right-heading-font-style, var(--accordion-heading-font-style, var(--summary-font-style))); - font-weight: var(--accordion-right-heading-font-weight, var(--accordion-heading-font-weight, var(--summary-font-weight))); - line-height: var(--accordion-right-heading-line-height, var(--accordion-heading-line-height, var(--summary-font-line-height))); - text-transform: var(--accordion-right-heading-text-case, var(--accordion-heading-text-case, var(--summary-font-case))); - font-size: var( - --accordion-right-heading-size, - var( - --accordion-heading-size, - clamp( - var(--accordion-heading-min-size, 1rem), - calc( - var(--accordion-heading-min-size, 1rem) + - ( - var(--accordion-heading-max-size, 3.4rem) - - var(--accordion-heading-min-size, 1rem) - ) * - clamp( - 0, - ( - 100vw - - var(--accordion-heading-min-breakpoint, 20rem) - ) / - max( - 0.001rem, - var(--accordion-heading-max-breakpoint, 48rem) - - var(--accordion-heading-min-breakpoint, 20rem) - ), - 1 - ) - ), - var(--accordion-heading-max-size, 3.4rem) - ) - ) - ); - } - - .details__label { - display: inline-block; - color: inherit; - } - - .accordion-row__link { - font: inherit; - color: inherit; - text-decoration: none; - text-transform: inherit; - } - - .details__caret { - display: inline-flex; - margin-inline-start: var(--accordion-caret-gap); - opacity: 0; - transform: translateX(4px); - transition: opacity var(--animation-speed) var(--animation-easing), transform var(--animation-speed) var(--animation-easing); - } - - .accordion-row:hover .details__caret, - details[open] .details__caret { - opacity: 1; - transform: translateX(0); - } - - .details__caret .svg-wrapper { - display: inline-flex; - } - - .details__header, - .details-content { - transition: background-color var(--animation-speed) var(--animation-easing), - border-color var(--animation-speed) var(--animation-easing); - } - - .accordion-row:hover .details__header, - .accordion-row:hover .details-content { - background-color: var(--accordion-hover-background); - border-color: var(--accordion-hover-border); - color: var(--accordion-hover-color); - } - - .accordion-row:hover .details__heading, - .accordion-row:hover .details__label, - .accordion-row:hover .details__caret .svg-wrapper, - details[open] .details__heading, - details[open] .details__label, - details[open] .details__caret .svg-wrapper { - color: inherit; - } - - .details-content { - padding-block-start: var(--accordion-content-padding-block-start, var(--padding-md)); - padding-block-end: var(--accordion-content-padding-block-end, var(--padding-md)); - padding-inline-start: var(--accordion-content-padding-inline-start, var(--padding-inline-start, 0px)); - padding-inline-end: var(--accordion-content-padding-inline-end, var(--padding-inline-end, 0px)); - color: inherit; - } - - .accordion-row__group-hidden { - display: none !important; - } -{% endstylesheet %} - -{% schema %} -{ - "name": "Stockist map row", - "tag": null, - "blocks": [ - { "type": "stockist_location" } - ], - "settings": [ - { - "type": "text", - "id": "heading", - "label": "Heading", - "default": "Stockists" - }, - { - "type": "text", - "id": "right_heading", - "label": "Right heading", - "info": "Optional heading displayed on the right side of the row." - }, - { - "type": "checkbox", - "id": "heading_links_enabled", - "label": "Enable header links", - "default": false - }, - { - "type": "url", - "id": "heading_link", - "label": "Left heading link", - "visible_if": "{{ block.settings.heading_links_enabled }}" - }, - { - "type": "url", - "id": "right_heading_link", - "label": "Right heading link", - "visible_if": "{{ block.settings.heading_links_enabled }}" - }, - { - "type": "checkbox", - "id": "collapsible", - "label": "Collapsible", - "default": true - }, - { - "type": "checkbox", - "id": "open_by_default", - "label": "Open row by default", - "default": false, - "visible_if": "{{ block.settings.collapsible == true }}" - }, - { - "type": "header", - "content": "Mapbox" - }, - { - "type": "richtext", - "id": "intro_text", - "label": "Intro text" - }, - { - "type": "text", - "id": "mapbox_token", - "label": "Mapbox access token" - }, - { - "type": "text", - "id": "map_style", - "label": "Mapbox style URL", - "default": "mapbox://styles/mapbox/light-v11" - }, - { - "type": "text", - "id": "default_center", - "label": "Default map center (lat,lng)", - "default": "-36.8485,174.7633" - }, - { - "type": "range", - "id": "default_zoom", - "label": "Default zoom", - "min": 2, - "max": 16, - "step": 1, - "default": 6 - }, - { - "type": "select", - "id": "layout", - "label": "Layout", - "options": [ - { "value": "map-right", "label": "Map right" }, - { "value": "map-left", "label": "Map left" } - ], - "default": "map-right" - }, - { - "type": "checkbox", - "id": "show_search", - "label": "Show search", - "default": true - }, - { - "type": "text", - "id": "search_label", - "label": "Search label", - "default": "Search location" - }, - { - "type": "text", - "id": "search_placeholder", - "label": "Search placeholder", - "default": "Search by city or postcode" - }, - { - "type": "text", - "id": "search_button_label", - "label": "Search button label", - "default": "Search" - }, - { - "type": "checkbox", - "id": "show_geolocate", - "label": "Show 'Near me' button", - "default": true - }, - { - "type": "text", - "id": "geolocate_label", - "label": "Near me label", - "default": "Use my location" - }, - { - "type": "checkbox", - "id": "sort_by_distance", - "label": "Sort by distance when searching", - "default": true - }, - { - "type": "checkbox", - "id": "show_distance", - "label": "Show distance", - "default": true - }, - { - "type": "text", - "id": "empty_text", - "label": "Empty state text", - "default": "Add stockists to this row to show them on the map." - }, - { - "type": "color", - "id": "marker_color", - "label": "Marker color", - "default": "#1c1c1c" - }, - { - "type": "range", - "id": "map_height", - "label": "Map height", - "min": 240, - "max": 900, - "step": 20, - "unit": "px", - "default": 520 - }, - { - "type": "range", - "id": "map_height_mobile", - "label": "Map height (mobile)", - "min": 200, - "max": 700, - "step": 20, - "unit": "px", - "default": 360 - }, - { - "type": "color_scheme", - "id": "color_scheme", - "label": "Row colour scheme" - }, - { - "type": "color_scheme", - "id": "hover_color_scheme", - "label": "Row hover colour scheme" - }, - { - "type": "color_scheme", - "id": "left_hover_color_scheme", - "label": "Left hover colour scheme", - "info": "Applies when the left heading is hovered or selected." - }, - { - "type": "color_scheme", - "id": "right_hover_color_scheme", - "label": "Right hover colour scheme", - "info": "Applies when the right heading is hovered or selected." - }, - { - "type": "header", - "content": "Summary padding" - }, - { - "type": "range", - "id": "summary_padding_block_start", - "label": "Top padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 0 - }, - { - "type": "range", - "id": "summary_padding_block_end", - "label": "Bottom padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 0 - }, - { - "type": "range", - "id": "summary_padding_inline_start", - "label": "Left padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 0 - }, - { - "type": "range", - "id": "summary_padding_inline_end", - "label": "Right padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 0 - }, - { - "type": "header", - "content": "Content padding" - }, - { - "type": "range", - "id": "content_padding_block_start", - "label": "Top padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 12 - }, - { - "type": "range", - "id": "content_padding_block_end", - "label": "Bottom padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 24 - }, - { - "type": "range", - "id": "content_padding_inline_start", - "label": "Left padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 24 - }, - { - "type": "range", - "id": "content_padding_inline_end", - "label": "Right padding", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 24 - }, - { - "type": "header", - "content": "Heading typography" - }, - { - "type": "select", - "id": "heading_type_preset", - "label": "Heading style", - "options": [ - { "value": "", "label": "t:options.default" }, - { "value": "paragraph", "label": "t:options.paragraph" }, - { "value": "h1", "label": "t:options.h1" }, - { "value": "h2", "label": "t:options.h2" }, - { "value": "h3", "label": "t:options.h3" }, - { "value": "h4", "label": "t:options.h4" }, - { "value": "h5", "label": "t:options.h5" }, - { "value": "h6", "label": "t:options.h6" } - ], - "default": "h6", - "info": "t:info.edit_presets_in_theme_settings" - }, - { - "type": "select", - "id": "right_heading_type_preset", - "label": "Right heading style", - "options": [ - { "value": "match", "label": "Match left heading" }, - { "value": "paragraph", "label": "t:options.paragraph" }, - { "value": "h1", "label": "t:options.h1" }, - { "value": "h2", "label": "t:options.h2" }, - { "value": "h3", "label": "t:options.h3" }, - { "value": "h4", "label": "t:options.h4" }, - { "value": "h5", "label": "t:options.h5" }, - { "value": "h6", "label": "t:options.h6" } - ], - "default": "match", - "info": "t:info.edit_presets_in_theme_settings" - }, - { - "type": "range", - "id": "heading_min_size", - "label": "Minimum text size", - "min": 0, - "max": 2.5, - "step": 0.1, - "unit": "rem", - "default": 0 - }, - { - "type": "range", - "id": "heading_max_size", - "label": "Maximum text size", - "min": 0, - "max": 3.5, - "step": 0.1, - "unit": "rem", - "default": 0 - }, - { - "type": "header", - "content": "Icon" - }, - { - "type": "select", - "id": "icon", - "label": "Icon", - "options": [ - { "value": "none", "label": "None" }, - { "value": "apple", "label": "Apple" }, - { "value": "arrow", "label": "Arrow" }, - { "value": "banana", "label": "Banana" }, - { "value": "bottle", "label": "Bottle" }, - { "value": "box", "label": "Box" }, - { "value": "carrot", "label": "Carrot" }, - { "value": "chat_bubble", "label": "Chat bubble" }, - { "value": "check_box", "label": "Check box" }, - { "value": "clipboard", "label": "Clipboard" }, - { "value": "dairy", "label": "Dairy" }, - { "value": "dairy_free", "label": "Dairy free" }, - { "value": "dryer", "label": "Dryer" }, - { "value": "eye", "label": "Eye" }, - { "value": "fire", "label": "Fire" }, - { "value": "gluten_free", "label": "Gluten free" }, - { "value": "heart", "label": "Heart" }, - { "value": "iron", "label": "Iron" }, - { "value": "leaf", "label": "Leaf" }, - { "value": "leather", "label": "Leather" }, - { "value": "lightning_bolt", "label": "Lightning bolt" }, - { "value": "lipstick", "label": "Lipstick" }, - { "value": "lock", "label": "Lock" }, - { "value": "map_pin", "label": "Map pin" }, - { "value": "nut_free", "label": "Nut free" }, - { "value": "pants", "label": "Pants" }, - { "value": "paw", "label": "Paw" }, - { "value": "recycle", "label": "Recycle" }, - { "value": "shirt", "label": "Shirt" }, - { "value": "shoe", "label": "Shoe" }, - { "value": "snowflake", "label": "Snowflake" }, - { "value": "star", "label": "Star" }, - { "value": "sun", "label": "Sun" }, - { "value": "thumbs_up", "label": "Thumbs up" }, - { "value": "trophy", "label": "Trophy" }, - { "value": "washing", "label": "Washing" } - ], - "default": "none" - }, - { - "type": "image_picker", - "id": "image_upload", - "label": "Icon image" - }, - { - "type": "range", - "id": "width", - "label": "Icon size", - "min": 12, - "max": 96, - "step": 1, - "unit": "px", - "default": 20 - } - ], - "presets": [ - { - "name": "Stockist map row" - } - ] -} -{% endschema %} diff --git a/blocks/stockist_location.liquid b/blocks/stockist_location.liquid deleted file mode 100644 index 422587344..000000000 --- a/blocks/stockist_location.liquid +++ /dev/null @@ -1,70 +0,0 @@ -{% schema %} -{ - "name": "Stockist location", - "tag": null, - "settings": [ - { - "type": "text", - "id": "name", - "label": "Name", - "default": "Stockist" - }, - { - "type": "text", - "id": "address_line_1", - "label": "Address line 1" - }, - { - "type": "text", - "id": "address_line_2", - "label": "Address line 2" - }, - { - "type": "text", - "id": "city", - "label": "City" - }, - { - "type": "text", - "id": "region", - "label": "Region" - }, - { - "type": "text", - "id": "postal_code", - "label": "Postcode" - }, - { - "type": "text", - "id": "country", - "label": "Country", - "default": "New Zealand" - }, - { - "type": "text", - "id": "lat", - "label": "Latitude" - }, - { - "type": "text", - "id": "lng", - "label": "Longitude" - }, - { - "type": "text", - "id": "phone", - "label": "Phone" - }, - { - "type": "url", - "id": "website", - "label": "Website" - }, - { - "type": "textarea", - "id": "notes", - "label": "Notes" - } - ] -} -{% endschema %} diff --git a/sections/footer-group.json b/sections/footer-group.json index f2c32b45a..42fdd76a4 100644 --- a/sections/footer-group.json +++ b/sections/footer-group.json @@ -14,6 +14,65 @@ "migrated_footer_content": { "type": "section", "blocks": { + "group_zRaGfW": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-end", + "vertical_alignment": "flex-start", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": { + "icon_aBedxk": { + "type": "icon", + "name": "t:names.icon", + "settings": { + "icon": "price_tag", + "image_upload": "shopify://shop_images/Golden_Bee_Icon_White.svg", + "width": 24, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + } + }, + "block_order": [ + "icon_aBedxk" + ] + }, "group_tbFfTQ": { "type": "group", "name": "Email signup", @@ -43,8 +102,8 @@ "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": true, - "overlay_color": "#f8b5c4", + "toggle_overlay": false, + "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", "link": "", @@ -188,65 +247,6 @@ "email_signup_NcLwNb" ] }, - "group_zRaGfW": { - "type": "group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-end", - "vertical_alignment": "flex-start", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": { - "icon_aBedxk": { - "type": "icon", - "name": "t:names.icon", - "settings": { - "icon": "price_tag", - "image_upload": "shopify://shop_images/Golden_Bee_Icon_White.svg", - "width": 24, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - } - }, - "block_order": [ - "icon_aBedxk" - ] - }, "group_cGJPxi": { "type": "group", "name": "t:names.group", @@ -383,8 +383,8 @@ } }, "block_order": [ - "group_tbFfTQ", "group_zRaGfW", + "group_tbFfTQ", "group_cGJPxi" ], "name": "Footer", @@ -413,7 +413,7 @@ "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", - "padding-block-start": 0, + "padding-block-start": 44, "padding-block-end": 44, "padding-inline-start": 0, "padding-inline-end": 0 diff --git a/sections/stockist-mapbox.liquid b/sections/stockist-mapbox.liquid deleted file mode 100644 index cd7133857..000000000 --- a/sections/stockist-mapbox.liquid +++ /dev/null @@ -1,411 +0,0 @@ -{%- liquid - assign stockist_blocks = section.blocks | where: 'type', 'stockist' --%} - -
-
-
- {% if section.settings.heading != blank or section.settings.subheading != blank %} -
- {% if section.settings.heading != blank %} -

- {{ section.settings.heading | escape }} -

- {% endif %} - {% if section.settings.subheading != blank %} -
- {{ section.settings.subheading }} -
- {% endif %} -
- {% endif %} - - - {% if section.settings.show_search %} - - {% endif %} - -
-
-
-
- - -
-
-
- - - -{% schema %} -{ - "name": "Stockist map (Mapbox)", - "tag": "section", - "class": "stockist-mapbox-section", - "disabled_on": { - "groups": ["header", "footer"] - }, - "settings": [ - { - "type": "text", - "id": "heading", - "label": "Heading", - "default": "Find Golden near you" - }, - { - "type": "richtext", - "id": "subheading", - "label": "Subheading", - "default": "

Search by city or postcode to find stockists nearby.

" - }, - { - "type": "text", - "id": "mapbox_token", - "label": "Mapbox access token" - }, - { - "type": "text", - "id": "map_style", - "label": "Mapbox style URL", - "default": "mapbox://styles/mapbox/light-v11" - }, - { - "type": "text", - "id": "default_center", - "label": "Default map center (lat,lng)", - "default": "-36.8485,174.7633" - }, - { - "type": "range", - "id": "default_zoom", - "label": "Default zoom", - "min": 2, - "max": 16, - "step": 1, - "default": 6 - }, - { - "type": "select", - "id": "layout", - "label": "Layout", - "options": [ - { - "value": "map-right", - "label": "Map right" - }, - { - "value": "map-left", - "label": "Map left" - } - ], - "default": "map-right" - }, - { - "type": "checkbox", - "id": "show_search", - "label": "Show search", - "default": true - }, - { - "type": "text", - "id": "search_label", - "label": "Search label", - "default": "Search location" - }, - { - "type": "text", - "id": "search_placeholder", - "label": "Search placeholder", - "default": "Search by city or postcode" - }, - { - "type": "text", - "id": "search_button_label", - "label": "Search button label", - "default": "Search" - }, - { - "type": "checkbox", - "id": "show_geolocate", - "label": "Show 'Near me' button", - "default": true - }, - { - "type": "text", - "id": "geolocate_label", - "label": "Near me label", - "default": "Use my location" - }, - { - "type": "checkbox", - "id": "sort_by_distance", - "label": "Sort by distance when searching", - "default": true - }, - { - "type": "checkbox", - "id": "show_distance", - "label": "Show distance", - "default": true - }, - { - "type": "text", - "id": "empty_text", - "label": "Empty state text", - "default": "Add stockists to this section to show them on the map." - }, - { - "type": "color", - "id": "marker_color", - "label": "Marker color", - "default": "#1c1c1c" - }, - { - "type": "range", - "id": "map_height", - "label": "Map height (desktop)", - "min": 320, - "max": 900, - "step": 10, - "unit": "px", - "default": 560 - }, - { - "type": "range", - "id": "map_height_mobile", - "label": "Map height (mobile)", - "min": 240, - "max": 640, - "step": 10, - "unit": "px", - "default": 360 - }, - { - "type": "select", - "id": "text_alignment", - "label": "Text alignment", - "options": [ - { - "value": "left", - "label": "t:options.left" - }, - { - "value": "center", - "label": "t:options.center" - }, - { - "value": "right", - "label": "t:options.right" - } - ], - "default": "center" - }, - { - "type": "header", - "content": "t:content.layout" - }, - { - "type": "select", - "id": "section_width", - "label": "Section width", - "options": [ - { - "value": "page-width", - "label": "t:options.page" - }, - { - "value": "full-width", - "label": "t:options.full" - } - ], - "default": "page-width" - }, - { - "type": "range", - "id": "gap", - "label": "Block gap", - "min": 0, - "max": 80, - "step": 1, - "unit": "px", - "default": 24 - }, - { - "type": "color_scheme", - "id": "color_scheme", - "label": "t:content.color_scheme", - "default": "scheme-1" - }, - { - "type": "header", - "content": "t:content.padding" - }, - { - "type": "range", - "id": "padding-block-start", - "label": "Top padding", - "min": 0, - "max": 128, - "step": 4, - "unit": "px", - "default": 48 - }, - { - "type": "range", - "id": "padding-block-end", - "label": "Bottom padding", - "min": 0, - "max": 128, - "step": 4, - "unit": "px", - "default": 48 - } - ], - "blocks": [ - { - "type": "stockist", - "name": "Stockist", - "settings": [ - { - "type": "text", - "id": "name", - "label": "Name" - }, - { - "type": "text", - "id": "address_line_1", - "label": "Address line 1" - }, - { - "type": "text", - "id": "address_line_2", - "label": "Address line 2" - }, - { - "type": "text", - "id": "city", - "label": "City" - }, - { - "type": "text", - "id": "region", - "label": "Region" - }, - { - "type": "text", - "id": "postal_code", - "label": "Postcode" - }, - { - "type": "text", - "id": "country", - "label": "Country" - }, - { - "type": "text", - "id": "lat", - "label": "Latitude" - }, - { - "type": "text", - "id": "lng", - "label": "Longitude" - }, - { - "type": "text", - "id": "phone", - "label": "Phone" - }, - { - "type": "url", - "id": "website", - "label": "Website" - }, - { - "type": "text", - "id": "notes", - "label": "Notes" - } - ] - } - ], - "presets": [ - { - "name": "Stockist map (Mapbox)" - } - ] -} -{% endschema %} diff --git a/snippets/stylesheets.liquid b/snippets/stylesheets.liquid index 93525af2a..756f21504 100644 --- a/snippets/stylesheets.liquid +++ b/snippets/stylesheets.liquid @@ -2,7 +2,7 @@ {{ 'base.css' | asset_url | stylesheet_tag: preload: true }} {%- liquid - assign optional_css_tokens = 'collection-links-component,featured-blog-posts,featured-product-section,hero--splash,logo-section,marquee__wrapper,media-with-content,section-password,predictive-search,footer-content,stockist-mapbox' | split: ',' + assign optional_css_tokens = 'collection-links-component,featured-blog-posts,featured-product-section,hero--splash,logo-section,marquee__wrapper,media-with-content,section-password,predictive-search,footer-content' | split: ',' assign load_optional_css = false for token in optional_css_tokens diff --git a/templates/index.json b/templates/index.json index a78194891..3b63c39b3 100644 --- a/templates/index.json +++ b/templates/index.json @@ -139,7 +139,7 @@ "button_K6nQmt": { "type": "button", "settings": { - "label": "SHOP GOLDEN", + "label": "Shop Golden", "link": "shopify://collections/all", "open_in_new_tab": false, "style_class": "link", @@ -256,490 +256,551 @@ "padding-inline-end": 16 } }, - "section_z7Mh7j": { + "section_TTRARa": { "type": "section", "blocks": { - "group_NwJWWa": { - "type": "group", + "accordion_iAgAPB": { + "type": "accordion", + "name": "t:names.accordion", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, + "icon": "caret", + "dividers": true, + "type_preset": "h5", "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", + "color_scheme": "scheme-5", "border": "none", "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, "blocks": { - "icon_CMbwYr": { - "type": "icon", - "settings": { - "icon": "eye", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - }, - "group_BE3cGt": { - "type": "group", + "accordion_row_VXFwUN": { + "type": "accordion_row", + "name": "t:names.accordion_row", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "heading": "Honey Soda", + "right_heading": "Shop Golden", + "heading_links_enabled": true, + "heading_link": "shopify://collections/all", + "right_heading_link": "shopify://collections/all", + "collapsible": false, + "open_by_default": true, + "group_mode": "shared", + "color_scheme": "scheme-1", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 44, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "h2", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 }, "blocks": { - "text_my9Cbb": { - "type": "text", + "group_pzRHb6": { + "type": "group", + "name": "t:names.group", "settings": { - "text": "

100% All Natural Ingredients

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 0, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", "padding-block-start": 0, "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-inline-start": 0, + "padding-inline-end": 0 }, - "blocks": {} - } - }, - "block_order": [ - "text_my9Cbb" - ] - } - }, - "block_order": [ - "icon_CMbwYr", - "group_BE3cGt" - ] - }, - "group_dCTtg4": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "icon_rbUdf3": { - "type": "icon", - "settings": { - "icon": "heart", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - }, - "group_7b4EWj": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_TtQ8WD": { - "type": "text", - "settings": { - "text": "

Sweetened with Mānuka Honey

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - } - }, - "block_order": [ - "text_TtQ8WD" - ] - } - }, - "block_order": [ - "icon_rbUdf3", - "group_7b4EWj" - ] - }, - "group_EjXULC": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 16, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "icon_rfrE68": { - "type": "icon", - "settings": { - "icon": "silhouette", - "width": 32, - "link": "", - "open_in_new_tab": false - }, - "blocks": {} - }, - "group_8FxjKk": { - "type": "group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 4, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_FjYhjj": { - "type": "text", - "settings": { - "text": "

New Zealand grown fruit

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 + "blocks": { + "product_card_X4xJbc": { + "type": "product-card", + "name": "t:names.product_card", + "settings": { + "product": "golden-lemon-manuka", + "product_card_gap": 16, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "product_card_gallery_e9bC3k": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_wB8C4M": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Shop Lemon

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-primary)", + "background": false, + "background_color": "#00000003", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_card_group_CXCGtg": { + "type": "_product-card-group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "product_card_gallery_e9bC3k", + "text_wB8C4M", + "product_card_group_CXCGtg" + ] + }, + "product_card_8UqxLN": { + "type": "product-card", + "name": "t:names.product_card", + "settings": { + "product": "blackcurrant-manuka-soda", + "product_card_gap": 16, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "product_card_gallery_gTxQBR": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_namg8Y": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Shop Blackcurrant

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-primary)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "product_card_gallery_gTxQBR", + "text_namg8Y" + ] + }, + "product_card_QJqw7z": { + "type": "product-card", + "name": "t:names.product_card", + "settings": { + "product": "kanuka-kola", + "product_card_gap": 16, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "product_card_gallery_tRjrqx": { + "type": "_product-card-gallery", + "settings": { + "image_ratio": "portrait", + "enable_rotate_toggle": true, + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_nK6pKR": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Shop Kola

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-primary)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "product_card_gallery_tRjrqx", + "text_nK6pKR" + ] + } }, - "blocks": {} + "block_order": [ + "product_card_X4xJbc", + "product_card_8UqxLN", + "product_card_QJqw7z" + ] } }, "block_order": [ - "text_FjYhjj" + "group_pzRHb6" ] - } - }, - "block_order": [ - "icon_rfrE68", - "group_8FxjKk" - ] - } - }, - "block_order": [ - "group_NwJWWa", - "group_dCTtg4", - "group_EjXULC" - ], - "name": "t:names.icons_with_text", - "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "gap": 16, - "section_width": "full-width", - "section_height": "", - "section_height_custom": 44, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "split_divider_color": "#d9d9d9", - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "padding-block-start": 44, - "padding-block-end": 44, - "padding-inline-start": 0, - "padding-inline-end": 0 - } - }, - "section_TTRARa": { - "type": "section", - "blocks": { - "accordion_iAgAPB": { - "type": "accordion", - "name": "t:names.accordion", - "settings": { - "icon": "caret", - "dividers": true, - "type_preset": "h5", - "inherit_color_scheme": true, - "color_scheme": "scheme-5", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "accordion_row_VXFwUN": { + }, + "accordion_row_Q9VzCU": { "type": "accordion_row", "name": "t:names.accordion_row", "settings": { - "heading": "Low Cal Honey Soda", - "right_heading": "Shop Golden", - "heading_links_enabled": true, - "heading_link": "shopify://collections/all", - "right_heading_link": "shopify://collections/all", + "heading": "Low Cal", + "right_heading": "Mānuka Honey", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", "collapsible": false, - "open_by_default": true, - "group_mode": "shared", + "open_by_default": false, + "group_mode": "split", "color_scheme": "scheme-1", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", + "hover_color_scheme": "scheme-4", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "scheme-1", "summary_padding_block_start": 16, "summary_padding_block_end": 16, "summary_padding_inline_start": 16, "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 44, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, + "content_padding_block_start": 0, + "content_padding_block_end": 0, + "content_padding_inline_start": 0, + "content_padding_inline_end": 0, "heading_type_preset": "h2", - "right_heading_type_preset": "h2", + "right_heading_type_preset": "", "heading_min_size": 1.1, "heading_max_size": 1.6, "icon": "none", "width": 20 }, "blocks": { - "group_pzRHb6": { + "group_HdYCtg": { + "type": "group", + "name": "Left", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-start", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 0, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "group_MbJwhG": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_P9wXUc": { + "type": "image", + "name": "t:names.image", + "settings": { + "link": "", + "image_ratio": "adapt", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_P9wXUc" + ] + }, + "group_dTTjFC": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "group_MbJwhG", + "group_dTTjFC" + ] + }, + "group_rWtahp": { "type": "group", - "name": "t:names.group", + "name": "Right", "settings": { - "content_direction": "row", + "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", "vertical_alignment": "center", @@ -748,7 +809,7 @@ "vertical_alignment_flex_direction_column": "center", "enable_sticky": false, "sticky_offset": 0, - "gap": 0, + "gap": 12, "width": "fill", "custom_width": 100, "width_mobile": "fill", @@ -776,164 +837,136 @@ "padding-inline-start": 0, "padding-inline-end": 0 }, + "blocks": {} + } + }, + "block_order": [ + "group_HdYCtg", + "group_rWtahp" + ] + }, + "accordion_row_6GXUWf": { + "type": "accordion_row", + "name": "t:names.accordion_row", + "settings": { + "heading": "All Natural", + "right_heading": "Vitamin C", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "scheme-1", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": {} + }, + "accordion_row_mrmmNj": { + "type": "accordion_row", + "name": "t:names.accordion_row", + "settings": { + "heading": "Product of", + "right_heading": "Aotearoa", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": true, + "group_mode": "shared", + "color_scheme": "scheme-1", + "hover_color_scheme": "scheme-1", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 44, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "slideshow_block_eCimjd": { + "type": "slideshow_block", + "name": "Slideshow", + "settings": { + "icons_style": "chevron", + "slideshow_controls_style": "none", + "autoplay": false, + "autoplay_speed": 4, + "slide_height": "large", + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, "blocks": { - "product_card_X4xJbc": { - "type": "product-card", - "name": "t:names.product_card", - "settings": { - "product": "golden-lemon-manuka", - "product_card_gap": 16, - "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "product_card_gallery_e9bC3k": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_wB8C4M": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Shop Lemon

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "h4", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-primary)", - "background": false, - "background_color": "#00000003", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "product_card_group_CXCGtg": { - "type": "_product-card-group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "product_card_gallery_e9bC3k", - "text_wB8C4M", - "product_card_group_CXCGtg" - ] - }, - "product_card_8UqxLN": { - "type": "product-card", - "name": "t:names.product_card", + "slide_ty67PV": { + "type": "_slide", + "name": "t:names.slide", "settings": { - "product": "blackcurrant-manuka-soda", - "product_card_gap": 16, + "media_type_1": "image", + "image_1": "shopify://shop_images/Beehives_Small_47eb5127-3cc9-4480-81ef-ca28c340227f.webp", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-end", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 12, "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "color_scheme": "scheme-6", + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 }, "blocks": { - "product_card_gallery_gTxQBR": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_namg8Y": { + "text_aYnLyh": { "type": "text", "name": "t:names.text", "settings": { - "text": "

Shop Blackcurrant

", - "width": "100%", + "text": "
Beehives on the way to Wharariki Beach, Cape Farewell
", + "width": "fit-content", "max_width": "normal", - "alignment": "center", - "type_preset": "h4", + "alignment": "left", + "type_preset": "h6", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "var(--color-primary)", + "color": "var(--color-foreground)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -946,60 +979,51 @@ } }, "block_order": [ - "product_card_gallery_gTxQBR", - "text_namg8Y" + "text_aYnLyh" ] }, - "product_card_QJqw7z": { - "type": "product-card", - "name": "t:names.product_card", + "slide_xxA3Bt": { + "type": "_slide", + "name": "t:names.slide", "settings": { - "product": "kanuka-kola", - "product_card_gap": 16, + "media_type_1": "image", + "image_1": "shopify://shop_images/Farewell_Spit_Small_cf2dc2e0-144d-49cc-851f-7e4cf3238554.webp", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-end", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-end", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 12, "inherit_color_scheme": false, - "color_scheme": "scheme-1", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "color_scheme": "scheme-6", + "toggle_overlay": true, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 }, "blocks": { - "product_card_gallery_tRjrqx": { - "type": "_product-card-gallery", - "settings": { - "image_ratio": "portrait", - "enable_rotate_toggle": true, - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_nK6pKR": { + "text_iAAQQC": { "type": "text", "name": "t:names.text", "settings": { - "text": "

Shop Kola

", - "width": "100%", + "text": "
Farewell Spit, Golden bay
", + "width": "fit-content", "max_width": "normal", - "alignment": "center", - "type_preset": "h4", + "alignment": "left", + "type_preset": "h6", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "var(--color-primary)", + "color": "var(--color-foreground)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -1012,57 +1036,55 @@ } }, "block_order": [ - "product_card_gallery_tRjrqx", - "text_nK6pKR" + "text_iAAQQC" ] } }, "block_order": [ - "product_card_X4xJbc", - "product_card_8UqxLN", - "product_card_QJqw7z" + "slide_ty67PV", + "slide_xxA3Bt" ] } }, "block_order": [ - "group_pzRHb6" + "slideshow_block_eCimjd" ] }, - "accordion_row_Q9VzCU": { + "accordion_row_3KkWB7": { "type": "accordion_row", - "name": "t:names.accordion_row", + "name": "Accordion row", "settings": { - "heading": "Low Cal", - "right_heading": "Mānuka Honey", + "heading": "Hawke's Bay", + "right_heading": "Lemons", "heading_links_enabled": false, "heading_link": "", "right_heading_link": "", - "collapsible": false, + "collapsible": true, "open_by_default": false, - "group_mode": "split", - "color_scheme": "scheme-1", - "hover_color_scheme": "scheme-4", + "group_mode": "shared", + "color_scheme": "scheme-5", + "hover_color_scheme": "scheme-1", "left_hover_color_scheme": "scheme-1", "right_hover_color_scheme": "scheme-1", "summary_padding_block_start": 16, "summary_padding_block_end": 16, "summary_padding_inline_start": 16, "summary_padding_inline_end": 16, - "content_padding_block_start": 0, - "content_padding_block_end": 0, - "content_padding_inline_start": 0, - "content_padding_inline_end": 0, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, "heading_type_preset": "h2", - "right_heading_type_preset": "", + "right_heading_type_preset": "match", "heading_min_size": 1.1, "heading_max_size": 1.6, "icon": "none", "width": 20 }, "blocks": { - "group_HdYCtg": { + "group_F7Tqp6": { "type": "group", - "name": "Left", + "name": "Lemons", "settings": { "content_direction": "row", "vertical_on_mobile": true, @@ -1073,12 +1095,12 @@ "vertical_alignment_flex_direction_column": "center", "enable_sticky": false, "sticky_offset": 0, - "gap": 0, + "gap": 12, "width": "fill", "custom_width": 100, "width_mobile": "fill", "custom_width_mobile": 100, - "height": "fill", + "height": "fit", "custom_height": 100, "inherit_color_scheme": true, "color_scheme": "", @@ -1089,8 +1111,8 @@ "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", + "toggle_overlay": true, + "overlay_color": "rgba(0,0,0,0)", "overlay_style": "solid", "gradient_direction": "to top", "link": "", @@ -1102,133 +1124,107 @@ "padding-inline-end": 0 }, "blocks": { - "group_MbJwhG": { - "type": "group", - "name": "t:names.group", + "text_EwKyjR": { + "type": "text", + "name": "t:names.text", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

Golden’s Meyer lemons are grown and pressed at our partner orchards on Hawke’s Bay’s eastern edge, right where the Wairoa River meets the Pacific Ocean. Meyer lemons are naturally sweeter, softer and more aromatic than standard varieties, so the citrus lift feels rounded rather than sharp. We use mostly single-strength juice, which means the flavour shifts subtly with the season, and that real acidity keeps our honey sweetness balanced and the finish clean, with a natural hit of vitamin C from real lemon.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "image_P9wXUc": { - "type": "image", - "name": "t:names.image", - "settings": { - "link": "", - "image_ratio": "adapt", - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "image_P9wXUc" - ] + "blocks": {} }, - "group_dTTjFC": { - "type": "group", - "name": "t:names.group", + "image_GYyybQ": { + "type": "image", + "name": "t:names.image", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, + "image": "shopify://shop_images/Lemon_Small_794ba3d1-63b8-4bf4-8bbd-54186f097c22.webp", + "link": "", + "image_ratio": "adapt", "width": "fill", "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", + "width_mobile": "fit-content", + "custom_width_mobile": 100, + "height": "fit", "border": "none", "border_width": 1, "border_opacity": 100, "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "placeholder_color": "", + "padding-block-start": 44, + "padding-block-end": 44, + "padding-inline-start": 44, + "padding-inline-end": 44 }, "blocks": {} } }, "block_order": [ - "group_MbJwhG", - "group_dTTjFC" + "text_EwKyjR", + "image_GYyybQ" ] - }, - "group_rWtahp": { + } + }, + "block_order": [ + "group_F7Tqp6" + ] + }, + "accordion_row_cwYKwF": { + "type": "accordion_row", + "name": "Accordion row", + "settings": { + "heading": "Otago", + "right_heading": "Blackcurrants", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "scheme-2", + "hover_color_scheme": "scheme-1", + "left_hover_color_scheme": "scheme-1", + "right_hover_color_scheme": "scheme-1", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "h2", + "right_heading_type_preset": "match", + "heading_min_size": 1.2, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "group_7mFNTK": { "type": "group", - "name": "Right", + "name": "Blackcurrants", "settings": { - "content_direction": "column", + "content_direction": "row", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", - "vertical_alignment": "center", + "vertical_alignment": "flex-start", "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", @@ -1239,7 +1235,7 @@ "custom_width": 100, "width_mobile": "fill", "custom_width_mobile": 100, - "height": "fit", + "height": "fill", "custom_height": 100, "inherit_color_scheme": true, "color_scheme": "", @@ -1262,62 +1258,83 @@ "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": {} + "blocks": { + "text_FEnK3E": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where bright days and cool nights help the fruit ripen slowly and build real intensity. That makes for a darker berry flavour with a clean, tangy edge. Blackcurrants are naturally rich in anthocyanins, the plant pigments that give the fruit its deep purple colour and are studied for their antioxidant role, and they’re also a strong natural source of vitamin C. The benefits are a nice extra, but we chose Otago blackcurrants for a simpler reason: they taste amazing.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "image_EDeJpJ": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/blackcurrant_white_background.png", + "link": "", + "image_ratio": "adapt", + "width": "fill", + "custom_width": 50, + "width_mobile": "fill", + "custom_width_mobile": 50, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 44, + "padding-block-end": 44, + "padding-inline-start": 44, + "padding-inline-end": 44 + }, + "blocks": {} + } + }, + "block_order": [ + "text_FEnK3E", + "image_EDeJpJ" + ] } }, "block_order": [ - "group_HdYCtg", - "group_rWtahp" + "group_7mFNTK" ] }, - "accordion_row_6GXUWf": { - "type": "accordion_row", - "name": "t:names.accordion_row", - "settings": { - "heading": "All Natural", - "right_heading": "Vitamin C", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "split", - "color_scheme": "scheme-1", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": {} - }, - "accordion_row_mrmmNj": { + "accordion_row_dipeVh": { "type": "accordion_row", - "name": "t:names.accordion_row", + "name": "Accordion row", "settings": { - "heading": "Product of", - "right_heading": "Aotearoa", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, + "heading": "Golden Hour", + "right_heading": "Blog", + "heading_links_enabled": true, + "heading_link": "shopify://blogs/golden-hour", + "right_heading_link": "shopify://blogs/golden-hour", + "collapsible": false, "open_by_default": true, "group_mode": "shared", - "color_scheme": "scheme-1", - "hover_color_scheme": "scheme-1", - "left_hover_color_scheme": "scheme-1", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", "right_hover_color_scheme": "", "summary_padding_block_start": 16, "summary_padding_block_end": 16, @@ -1327,64 +1344,109 @@ "content_padding_block_end": 44, "content_padding_inline_start": 16, "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "", + "heading_type_preset": "", + "right_heading_type_preset": "match", "heading_min_size": 1.1, "heading_max_size": 1.6, "icon": "none", "width": 20 }, "blocks": { - "slideshow_block_eCimjd": { - "type": "slideshow_block", - "name": "Slideshow", + "blog_summary_carousel_eixRQp": { + "type": "blog-summary-carousel", + "name": "Blog summary carousel", "settings": { + "blog": "golden-hour", + "layout_type": "carousel", + "carousel_on_mobile": true, + "post_limit": 6, + "columns": 3, + "mobile_columns": "2", + "mobile_card_size": "60cqw", + "columns_gap": 16, + "rows_gap": 16, "icons_style": "chevron", - "slideshow_controls_style": "none", - "autoplay": false, - "autoplay_speed": 4, - "slide_height": "large", - "padding-block-start": 0, - "padding-block-end": 16, - "padding-inline-start": 0, - "padding-inline-end": 0 + "icons_shape": "none", + "section_width": "full-width", + "gap": 12, + "color_scheme": "", + "padding-block-start": 16, + "padding-block-end": 16 }, "blocks": { - "slide_ty67PV": { - "type": "_slide", - "name": "t:names.slide", + "static-blog-title": { + "type": "_featured-blog-posts-title", + "disabled": true, + "static": true, + "settings": { + "text": "", + "padding_block_start": 0, + "padding_block_end": 0, + "padding_inline_start": 0, + "padding_inline_end": 0, + "left_heading": "", + "right_heading": "", + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 0, + "heading_max_size": 0, + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "static-blog-post-card": { + "type": "_featured-blog-posts-card", + "static": true, "settings": { - "media_type_1": "image", - "image_1": "shopify://shop_images/shutterstock_1715090482.webp", - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-end", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "flex-end", - "gap": 12, - "inherit_color_scheme": false, - "color_scheme": "scheme-6", - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "gradient", - "gradient_direction": "to top", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "article": "", + "alignment": "left", + "gap": 8, + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "text_aYnLyh": { - "type": "text", - "name": "t:names.text", + "image": { + "type": "_featured-blog-posts-image", + "static": true, "settings": { - "text": "
Beehives on the way to Wharariki Beach, Cape Farewell
", - "width": "fit-content", - "max_width": "normal", - "alignment": "left", - "type_preset": "h6", + "image_ratio": "square", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0 + }, + "blocks": {} + }, + "title": { + "type": "_heading", + "static": true, + "settings": { + "type_preset": "rte", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1392,56 +1454,36 @@ "case": "none", "wrap": "pretty", "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, + "text": "", + "read_only": false, + "alignment": "left", + "show_alignment": true, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, "blocks": {} - } - }, - "block_order": [ - "text_aYnLyh" - ] - }, - "slide_xxA3Bt": { - "type": "_slide", - "name": "t:names.slide", - "settings": { - "media_type_1": "image", - "image_1": "shopify://shop_images/iStock-641225382.jpg", - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-end", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-end", - "vertical_alignment_flex_direction_column": "flex-end", - "gap": 12, - "inherit_color_scheme": false, - "color_scheme": "scheme-6", - "toggle_overlay": true, - "overlay_color": "#00000026", - "overlay_style": "gradient", - "gradient_direction": "to top", - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": { - "text_iAAQQC": { - "type": "text", - "name": "t:names.text", + }, + "blog-post-info-text": { + "type": "_blog-post-info-text", + "static": true, "settings": { - "text": "
Farewell Spit, Golden bay
", - "width": "fit-content", - "max_width": "normal", + "show_date": true, + "show_author": true, + "type_preset": "", "alignment": "left", - "type_preset": "h6", + "show_alignment": true, + "padding-block-start": 12, + "padding-block-end": 0 + }, + "blocks": {} + }, + "blog-post-description": { + "type": "_blog-post-description", + "static": true, + "settings": { + "type_preset": "rte", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -1449,523 +1491,482 @@ "case": "none", "wrap": "pretty", "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "padding-block-start": 16, + "padding-block-end": 0 }, "blocks": {} } }, - "block_order": [ - "text_iAAQQC" - ] + "block_order": [] } }, - "block_order": [ - "slide_ty67PV", - "slide_xxA3Bt" - ] + "block_order": [] } }, "block_order": [ - "slideshow_block_eCimjd" + "blog_summary_carousel_eixRQp" ] - }, - "accordion_row_3KkWB7": { - "type": "accordion_row", - "name": "Accordion row", - "settings": { - "heading": "Hawke's Bay", - "right_heading": "Lemons", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "shared", - "color_scheme": "scheme-5", - "hover_color_scheme": "scheme-1", - "left_hover_color_scheme": "scheme-1", - "right_hover_color_scheme": "scheme-1", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 + } + }, + "block_order": [ + "accordion_row_VXFwUN", + "accordion_row_Q9VzCU", + "accordion_row_6GXUWf", + "accordion_row_mrmmNj", + "accordion_row_3KkWB7", + "accordion_row_cwYKwF", + "accordion_row_dipeVh" + ] + } + }, + "block_order": [ + "accordion_iAgAPB" + ], + "name": "t:names.large_logo", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "gap": 12, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 40, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 0, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_z7Mh7j": { + "type": "section", + "blocks": { + "group_NwJWWa": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "icon_CMbwYr": { + "type": "icon", + "settings": { + "icon": "eye", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + }, + "group_BE3cGt": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "group_F7Tqp6": { - "type": "group", - "name": "Lemons", + "text_my9Cbb": { + "type": "text", "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-start", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": true, - "overlay_color": "rgba(0,0,0,0)", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

100% All Natural Ingredients

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_EwKyjR": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Golden’s Meyer lemons are grown and pressed at our partner orchards on Hawke’s Bay’s eastern edge, right where the Wairoa River meets the Pacific Ocean. Meyer lemons are naturally sweeter, softer and more aromatic than standard varieties, so the citrus lift feels rounded rather than sharp. We use mostly single-strength juice, which means the flavour shifts subtly with the season, and that real acidity keeps our honey sweetness balanced and the finish clean, with a natural hit of vitamin C from real lemon.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "image_GYyybQ": { - "type": "image", - "name": "t:names.image", - "settings": { - "image": "shopify://shop_images/lemon_white_background.png", - "link": "", - "image_ratio": "adapt", - "width": "fill", - "custom_width": 100, - "width_mobile": "fit-content", - "custom_width_mobile": 100, - "height": "fit", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 44, - "padding-block-end": 44, - "padding-inline-start": 44, - "padding-inline-end": 44 - }, - "blocks": {} - } + "padding-inline-start": 16, + "padding-inline-end": 16 }, - "block_order": [ - "text_EwKyjR", - "image_GYyybQ" - ] + "blocks": {} } }, "block_order": [ - "group_F7Tqp6" + "text_my9Cbb" ] - }, - "accordion_row_cwYKwF": { - "type": "accordion_row", - "name": "Accordion row", + } + }, + "block_order": [ + "icon_CMbwYr", + "group_BE3cGt" + ] + }, + "group_dCTtg4": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "icon_rbUdf3": { + "type": "icon", "settings": { - "heading": "Otago", - "right_heading": "Blackcurrants", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "shared", - "color_scheme": "scheme-2", - "hover_color_scheme": "scheme-1", - "left_hover_color_scheme": "scheme-1", - "right_hover_color_scheme": "scheme-1", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "match", - "heading_min_size": 1.2, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 + "icon": "heart", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} + }, + "group_7b4EWj": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "group_7mFNTK": { - "type": "group", - "name": "Blackcurrants", + "text_TtQ8WD": { + "type": "text", "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-start", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fill", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

Sweetened with Mānuka Honey

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_FEnK3E": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where bright days and cool nights help the fruit ripen slowly and build real intensity. That makes for a darker berry flavour with a clean, tangy edge. Blackcurrants are naturally rich in anthocyanins, the plant pigments that give the fruit its deep purple colour and are studied for their antioxidant role, and they’re also a strong natural source of vitamin C. The benefits are a nice extra, but we chose Otago blackcurrants for a simpler reason: they taste amazing.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "image_EDeJpJ": { - "type": "image", - "name": "t:names.image", - "settings": { - "image": "shopify://shop_images/blackcurrant_white_background.png", - "link": "", - "image_ratio": "adapt", - "width": "fill", - "custom_width": 50, - "width_mobile": "fill", - "custom_width_mobile": 50, - "height": "fill", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 44, - "padding-block-end": 44, - "padding-inline-start": 44, - "padding-inline-end": 44 - }, - "blocks": {} - } + "padding-inline-start": 16, + "padding-inline-end": 16 }, - "block_order": [ - "text_FEnK3E", - "image_EDeJpJ" - ] + "blocks": {} } }, "block_order": [ - "group_7mFNTK" + "text_TtQ8WD" ] + } + }, + "block_order": [ + "icon_rbUdf3", + "group_7b4EWj" + ] + }, + "group_EjXULC": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "icon_rfrE68": { + "type": "icon", + "settings": { + "icon": "silhouette", + "width": 32, + "link": "", + "open_in_new_tab": false + }, + "blocks": {} }, - "accordion_row_dipeVh": { - "type": "accordion_row", - "name": "Accordion row", + "group_8FxjKk": { + "type": "group", "settings": { - "heading": "Golden Hour", - "right_heading": "Blog", - "heading_links_enabled": true, - "heading_link": "shopify://blogs/golden-hour", - "right_heading_link": "shopify://blogs/golden-hour", - "collapsible": false, - "open_by_default": true, - "group_mode": "shared", - "color_scheme": "", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 44, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 4, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": { - "blog_summary_carousel_eixRQp": { - "type": "blog-summary-carousel", - "name": "Blog summary carousel", + "text_FjYhjj": { + "type": "text", "settings": { - "blog": "golden-hour", - "layout_type": "carousel", - "carousel_on_mobile": true, - "post_limit": 6, - "columns": 3, - "mobile_columns": "2", - "mobile_card_size": "60cqw", - "columns_gap": 16, - "rows_gap": 16, - "icons_style": "chevron", - "icons_shape": "none", - "section_width": "full-width", - "gap": 12, - "color_scheme": "", - "padding-block-start": 16, - "padding-block-end": 16 - }, - "blocks": { - "static-blog-title": { - "type": "_featured-blog-posts-title", - "disabled": true, - "static": true, - "settings": { - "text": "", - "padding_block_start": 0, - "padding_block_end": 0, - "padding_inline_start": 0, - "padding_inline_end": 0, - "left_heading": "", - "right_heading": "", - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 0, - "heading_max_size": 0, - "width": "fit-content", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "static-blog-post-card": { - "type": "_featured-blog-posts-card", - "static": true, - "settings": { - "article": "", - "alignment": "left", - "gap": 8, - "inherit_color_scheme": true, - "color_scheme": "", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "image": { - "type": "_featured-blog-posts-image", - "static": true, - "settings": { - "image_ratio": "square", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0 - }, - "blocks": {} - }, - "title": { - "type": "_heading", - "static": true, - "settings": { - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "text": "", - "read_only": false, - "alignment": "left", - "show_alignment": true, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "blog-post-info-text": { - "type": "_blog-post-info-text", - "static": true, - "settings": { - "show_date": true, - "show_author": true, - "type_preset": "", - "alignment": "left", - "show_alignment": true, - "padding-block-start": 12, - "padding-block-end": 0 - }, - "blocks": {} - }, - "blog-post-description": { - "type": "_blog-post-description", - "static": true, - "settings": { - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "padding-block-start": 16, - "padding-block-end": 0 - }, - "blocks": {} - } - }, - "block_order": [] - } + "text": "

New Zealand grown fruit

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 }, - "block_order": [] + "blocks": {} } }, "block_order": [ - "blog_summary_carousel_eixRQp" + "text_FjYhjj" ] } }, "block_order": [ - "accordion_row_VXFwUN", - "accordion_row_Q9VzCU", - "accordion_row_6GXUWf", - "accordion_row_mrmmNj", - "accordion_row_3KkWB7", - "accordion_row_cwYKwF", - "accordion_row_dipeVh" + "icon_rfrE68", + "group_8FxjKk" ] } }, "block_order": [ - "accordion_iAgAPB" + "group_NwJWWa", + "group_dCTtg4", + "group_EjXULC" ], - "name": "t:names.large_logo", + "disabled": true, + "name": "t:names.icons_with_text", "settings": { - "content_direction": "column", + "content_direction": "row", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", "vertical_alignment": "center", "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "space-between", - "gap": 12, + "vertical_alignment_flex_direction_column": "center", + "gap": 16, "section_width": "full-width", "section_height": "", - "section_height_custom": 40, - "color_scheme": "scheme-1", + "section_height_custom": 44, + "color_scheme": "", "background_media": "none", "video_position": "cover", "background_image_position": "cover", "border": "none", - "border_width": 0, + "border_width": 1, "border_opacity": 100, "split_divider_color": "#d9d9d9", "border_radius": 0, @@ -1973,8 +1974,8 @@ "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", - "padding-block-start": 0, - "padding-block-end": 0, + "padding-block-start": 44, + "padding-block-end": 44, "padding-inline-start": 0, "padding-inline-end": 0 } @@ -2119,56 +2120,6 @@ "padding-inline-end": 0 }, "blocks": { - "accordion_row_stockist_mapbox_B3RxhB": { - "type": "accordion_row_stockist_mapbox", - "name": "Stockist map row", - "settings": { - "heading": "Stockists", - "right_heading": "", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "intro_text": "", - "mapbox_token": "pk.eyJ1Ijoic3RheWdvbGRlbiIsImEiOiJjbWU4MHR0ZGkwN3VnMmpwdzRhdTk1ZXJwIn0.B_Ut6dgFJ6Bmnl44MbAZ9g", - "map_style": "mapbox://styles/staygolden/cmlk28ba200k401sl49f76nhy", - "default_center": "", - "default_zoom": 6, - "layout": "map-right", - "show_search": true, - "search_label": "Search location", - "search_placeholder": "Search by city or postcode", - "search_button_label": "Search", - "show_geolocate": true, - "geolocate_label": "Use my location", - "sort_by_distance": true, - "show_distance": true, - "empty_text": "Add stockists to this row to show them on the map.", - "marker_color": "#1c1c1c", - "map_height": 520, - "map_height_mobile": 360, - "color_scheme": "", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 44, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "h2", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": {} - }, "accordion_row_social_J3z8ak": { "type": "accordion_row_social", "name": "Social feed row", @@ -2215,7 +2166,6 @@ } }, "block_order": [ - "accordion_row_stockist_mapbox_B3RxhB", "accordion_row_social_J3z8ak" ] } @@ -2259,8 +2209,8 @@ "order": [ "section_qNUGrK", "section_HrfhEB", - "section_z7Mh7j", "section_TTRARa", + "section_z7Mh7j", "section_zk7ykz", "section_REkpVR", "section_3hPHCr" diff --git a/templates/page.json b/templates/page.json index 12a775a97..a943cb405 100644 --- a/templates/page.json +++ b/templates/page.json @@ -89,7 +89,7 @@ "type": "image", "name": "t:names.image", "settings": { - "image": "shopify://shop_images/me_and_james.jpg", + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", "link": "", "image_ratio": "landscape", "width": "fill", From 454e5bfaa05c3c4e2acadd00e2201919d76400ec Mon Sep 17 00:00:00 2001 From: Morg Date: Tue, 3 Mar 2026 15:25:18 +1300 Subject: [PATCH 1207/1275] Sync theme from horizon/main and fix single-slide media arrows --- blocks/_product-media-gallery.liquid | 19 +++++++++---------- templates/index.json | 6 +++--- templates/page.json | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/blocks/_product-media-gallery.liquid b/blocks/_product-media-gallery.liquid index 856c070a7..262acad49 100644 --- a/blocks/_product-media-gallery.liquid +++ b/blocks/_product-media-gallery.liquid @@ -47,16 +47,7 @@ endif assign render_slideshow_arrows = false - - if selected_product.media.size <= 1 - assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' - else - assign slideshow_class = '' - - if block_settings.media_presentation == 'carousel' - assign render_slideshow_arrows = true - endif - endif + assign slideshow_class = '' if slideshow_controls_style == 'thumbnails' assign pagination_position = block_settings.thumbnail_position @@ -101,6 +92,14 @@ endif assign has_image_drop = sorted_media | has: 'media_type', 'image' + # Arrow visibility should match visible slides after variant filtering. + if sorted_media.size <= 1 + assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' + assign render_slideshow_arrows = false + elsif block_settings.media_presentation == 'carousel' + assign render_slideshow_arrows = true + endif + # Determine if we're in single column mode (carousel or grid with one column) assign is_single_column = false if block_settings.media_presentation == 'carousel' or sorted_media.size == 1 or block_settings.media_presentation == 'grid' and block_settings.media_columns == 'one' diff --git a/templates/index.json b/templates/index.json index 47846c755..3b63c39b3 100644 --- a/templates/index.json +++ b/templates/index.json @@ -930,7 +930,7 @@ "name": "t:names.slide", "settings": { "media_type_1": "image", - "image_1": "shopify://shop_images/shutterstock_1715090482.webp", + "image_1": "shopify://shop_images/Beehives_Small_47eb5127-3cc9-4480-81ef-ca28c340227f.webp", "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", @@ -987,7 +987,7 @@ "name": "t:names.slide", "settings": { "media_type_1": "image", - "image_1": "shopify://shop_images/iStock-641225382.jpg", + "image_1": "shopify://shop_images/Farewell_Spit_Small_cf2dc2e0-144d-49cc-851f-7e4cf3238554.webp", "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", @@ -1154,7 +1154,7 @@ "type": "image", "name": "t:names.image", "settings": { - "image": "shopify://shop_images/lemon_white_background.png", + "image": "shopify://shop_images/Lemon_Small_794ba3d1-63b8-4bf4-8bbd-54186f097c22.webp", "link": "", "image_ratio": "adapt", "width": "fill", diff --git a/templates/page.json b/templates/page.json index 12a775a97..a943cb405 100644 --- a/templates/page.json +++ b/templates/page.json @@ -89,7 +89,7 @@ "type": "image", "name": "t:names.image", "settings": { - "image": "shopify://shop_images/me_and_james.jpg", + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", "link": "", "image_ratio": "landscape", "width": "fill", From 399cd653f143e8733ce80a568ea9683bcc750619 Mon Sep 17 00:00:00 2001 From: Morg Date: Tue, 3 Mar 2026 15:25:18 +1300 Subject: [PATCH 1208/1275] Sync theme from horizon/main and fix single-slide media arrows --- blocks/_product-media-gallery.liquid | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/blocks/_product-media-gallery.liquid b/blocks/_product-media-gallery.liquid index 5e286c74b..170704b07 100644 --- a/blocks/_product-media-gallery.liquid +++ b/blocks/_product-media-gallery.liquid @@ -47,16 +47,7 @@ endif assign render_slideshow_arrows = false - - if selected_product.media.size <= 1 - assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' - else - assign slideshow_class = '' - - if block_settings.media_presentation == 'carousel' - assign render_slideshow_arrows = true - endif - endif + assign slideshow_class = '' if slideshow_controls_style == 'thumbnails' assign pagination_position = block_settings.thumbnail_position @@ -101,6 +92,14 @@ endif assign has_image_drop = sorted_media | has: 'media_type', 'image' + # Arrow visibility should match visible slides after variant filtering. + if sorted_media.size <= 1 + assign slideshow_class = 'product-media-gallery__slideshow--single-media slideshow--single-media' + assign render_slideshow_arrows = false + elsif block_settings.media_presentation == 'carousel' + assign render_slideshow_arrows = true + endif + # Determine if we're in single column mode (carousel or grid with one column) assign is_single_column = false if block_settings.media_presentation == 'carousel' or sorted_media.size == 1 or block_settings.media_presentation == 'grid' and block_settings.media_columns == 'one' From e11cee1c2ef7cc6c34fe494a778a420549497e82 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 02:46:30 +0000 Subject: [PATCH 1209/1275] Update from Shopify for theme horizon/main Committed from shop: Golden From 01dc9c99c2e5ab9d7586cb59a6ce57afcaf2a517 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 03:13:29 +0000 Subject: [PATCH 1210/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.story.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/templates/page.story.json b/templates/page.story.json index 62f449c0f..68027160d 100644 --- a/templates/page.story.json +++ b/templates/page.story.json @@ -71,6 +71,8 @@ "align_baseline": true, "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, "gap": 18, "width": "fill", "custom_width": 100, @@ -111,6 +113,8 @@ "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, "gap": 6, "width": "custom", "custom_width": 100, @@ -237,7 +241,7 @@ "name": "t:names.hero_bottom_aligned", "settings": { "media_type_1": "image", - "image_1": "shopify://shop_images/DSCN0444.jpg", + "image_1": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", "media_type_2": "image", "link": "", "open_in_new_tab": false, @@ -250,7 +254,7 @@ "vertical_alignment_flex_direction_column": "flex-end", "gap": 16, "section_width": "page-width", - "section_height": "large", + "section_height": "full-screen", "section_height_custom": 50, "color_scheme": "scheme-6", "toggle_overlay": true, @@ -298,7 +302,7 @@ "settings": { "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. As the wind dropped, I returned to a question I had been mulling for some time: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

New Zealand is world-renowned for its mānuka honey and its world-class orchards, yet no local drinks brand had meaningfully brought those two strengths together. No one has created flavours that genuinely express New Zealand provenance with mānuka honey at the centre, or clearly told the story of where those flavours come from and who grows them.

Was it just taste? Could honey, fruit and sparkling water make a good soda? I wondered if the honey would drown out the fruit or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you do not get from refined sugar or other sweeteners. I was hooked. From there the idea was clear: a New Zealand drinks brand built on local honey and fruit, anchored in the supply chains I knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees and learnt how produce moves from tree to shelf through packhouses, cold stores and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery syrups or sweeteners.

Following a degree in cultural anthropology and work on commercial film productions between Wellington and Auckland, my appetite to build something of my own grew. The more I worked on other brands’ stories, the more I found myself imagineering the products I would rather champion and the stories I would rather tell. One idea kept surfacing: pair New Zealand honey with fruit, made here with the supply chains I knew first-hand. We grow world-class fruit and mānuka; provenance is rarely front and centre. San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench-scale trials, pilot runs, and several rounds of recipe refinement with support from Callaghan Innovation and food scientists at Massey University. It turns out that working with real ingredients is harder to get spot-on than using hyper-processed alternatives, but the result was worth it. I completed an MBA to sharpen the plan, spent a brief spell in tech, then backed myself to launch Golden in 2024: a soda built on New Zealand honey and fruit to answer the gap I had noticed years earlier.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. The result is light, crisp and balanced.


Made in New Zealand.

", "width": "100%", - "max_width": "none", + "max_width": "normal", "alignment": "left", "type_preset": "paragraph", "font": "var(--font-body--family)", @@ -366,7 +370,9 @@ "overlay_style": "solid", "gradient_direction": "to top", "padding-block-start": 48, - "padding-block-end": 48 + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 } } }, From 3728919cb87835f4b543ff839a88c816f9364c7d Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 03:16:34 +0000 Subject: [PATCH 1211/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.ingredients.json | 358 ++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 templates/page.ingredients.json diff --git a/templates/page.ingredients.json b/templates/page.ingredients.json new file mode 100644 index 000000000..92919f706 --- /dev/null +++ b/templates/page.ingredients.json @@ -0,0 +1,358 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

FAQs

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + } + }, + "block_order": [ + "heading", + "page-content" + ], + "settings": { + "content_direction": "column", + "gap": 24, + "color_scheme": "", + "padding-block-start": 24, + "padding-block-end": 24 + } + }, + "section_jKDfRf": { + "type": "section", + "blocks": { + "group_jm3eVb": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_Aa3UJH": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_dKYbRd": { + "type": "accordion_row", + "settings": { + "heading": "Refund Policy", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_AHwwCk": { + "type": "text", + "settings": { + "text": "

Our goal is for every customer to be totally satisfied with their purchase. If this isn't the case, let us know and we'll do our best to work with you to make it right.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_AHwwCk" + ] + }, + "accordion_row_tL6whA": { + "type": "accordion_row", + "settings": { + "heading": "Shipping", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_WVyUeL": { + "type": "text", + "settings": { + "text": "

We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_WVyUeL" + ] + }, + "accordion_row_qEx4kN": { + "type": "accordion_row", + "settings": { + "heading": "Manufacturing", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_xnNT8G": { + "type": "text", + "settings": { + "text": "

Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_xnNT8G" + ] + } + }, + "block_order": [ + "accordion_row_dKYbRd", + "accordion_row_tL6whA", + "accordion_row_qEx4kN" + ] + } + }, + "block_order": [ + "accordion_Aa3UJH" + ] + } + }, + "block_order": [ + "group_jm3eVb" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jKDfRf" + ] +} From a869bd1e05ffe7f997fb13d9530ff26525585f54 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 03:16:53 +0000 Subject: [PATCH 1212/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.ingredients.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.ingredients.json b/templates/page.ingredients.json index 92919f706..1ae1ef374 100644 --- a/templates/page.ingredients.json +++ b/templates/page.ingredients.json @@ -16,7 +16,7 @@ "type": "text", "name": "Title", "settings": { - "text": "

FAQs

", + "text": "

Ingredients

", "width": "100%", "max_width": "normal", "alignment": "left", From 68df77b2bdbf79de5e049d2dc35070185a294ccf Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 03:17:50 +0000 Subject: [PATCH 1213/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.honey.json | 384 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 templates/page.honey.json diff --git a/templates/page.honey.json b/templates/page.honey.json new file mode 100644 index 000000000..68027160d --- /dev/null +++ b/templates/page.honey.json @@ -0,0 +1,384 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + } + }, + "block_order": [ + "heading", + "page-content" + ], + "disabled": true, + "settings": { + "content_direction": "column", + "gap": 32, + "color_scheme": "", + "padding-block-start": 40, + "padding-block-end": 80 + } + }, + "hero_awffPH": { + "type": "hero", + "blocks": { + "group_PCHa8M": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-end", + "align_baseline": true, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 18, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "group_zGGymc": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 6, + "width": "custom", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_wc9Ym3": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Introducing

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_TV9hBj": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Our Story

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_wc9Ym3", + "text_TV9hBj" + ] + }, + "text_dNBLYt": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Founder (Morg) on the left; my mate James in green.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "group_zGGymc", + "text_dNBLYt" + ] + } + }, + "block_order": [ + "group_PCHa8M" + ], + "name": "t:names.hero_bottom_aligned", + "settings": { + "media_type_1": "image", + "image_1": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "media_type_2": "image", + "link": "", + "open_in_new_tab": false, + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 16, + "section_width": "page-width", + "section_height": "full-screen", + "section_height_custom": 50, + "color_scheme": "scheme-6", + "toggle_overlay": true, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "blurred_reflection": false, + "reflection_opacity": 75, + "padding-block-start": 40, + "padding-block-end": 40 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. As the wind dropped, I returned to a question I had been mulling for some time: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

New Zealand is world-renowned for its mānuka honey and its world-class orchards, yet no local drinks brand had meaningfully brought those two strengths together. No one has created flavours that genuinely express New Zealand provenance with mānuka honey at the centre, or clearly told the story of where those flavours come from and who grows them.

Was it just taste? Could honey, fruit and sparkling water make a good soda? I wondered if the honey would drown out the fruit or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you do not get from refined sugar or other sweeteners. I was hooked. From there the idea was clear: a New Zealand drinks brand built on local honey and fruit, anchored in the supply chains I knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees and learnt how produce moves from tree to shelf through packhouses, cold stores and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery syrups or sweeteners.

Following a degree in cultural anthropology and work on commercial film productions between Wellington and Auckland, my appetite to build something of my own grew. The more I worked on other brands’ stories, the more I found myself imagineering the products I would rather champion and the stories I would rather tell. One idea kept surfacing: pair New Zealand honey with fruit, made here with the supply chains I knew first-hand. We grow world-class fruit and mānuka; provenance is rarely front and centre. San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench-scale trials, pilot runs, and several rounds of recipe refinement with support from Callaghan Innovation and food scientists at Massey University. It turns out that working with real ingredients is harder to get spot-on than using hyper-processed alternatives, but the result was worth it. I completed an MBA to sharpen the plan, spent a brief spell in tech, then backed myself to launch Golden in 2024: a soda built on New Zealand honey and fruit to answer the gap I had noticed years earlier.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. The result is light, crisp and balanced.


Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "button", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "page-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "hero_awffPH", + "section_jq6wGK" + ] +} From c126e2207b304dcd0abe892540a6538b1a6c6a2c Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 18:43:20 +0000 Subject: [PATCH 1214/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.press.json | 271 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 templates/page.press.json diff --git a/templates/page.press.json b/templates/page.press.json new file mode 100644 index 000000000..a943cb405 --- /dev/null +++ b/templates/page.press.json @@ -0,0 +1,271 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + }, + "group_B4L8Dp": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_MMdTDx": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "link": "", + "image_ratio": "landscape", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_description_AJbKWt": { + "type": "product-description", + "name": "t:names.product_description", + "settings": { + "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_MMdTDx", + "product_description_AJbKWt" + ] + } + }, + "block_order": [ + "heading", + "page-content", + "group_B4L8Dp" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "full-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jq6wGK" + ] +} From 0c344a95ccb66c99641a9982c4038e1e8512a110 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 18:44:37 +0000 Subject: [PATCH 1215/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.careers.json | 271 ++++++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 templates/page.careers.json diff --git a/templates/page.careers.json b/templates/page.careers.json new file mode 100644 index 000000000..a943cb405 --- /dev/null +++ b/templates/page.careers.json @@ -0,0 +1,271 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + }, + "group_B4L8Dp": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_MMdTDx": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "link": "", + "image_ratio": "landscape", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_description_AJbKWt": { + "type": "product-description", + "name": "t:names.product_description", + "settings": { + "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_MMdTDx", + "product_description_AJbKWt" + ] + } + }, + "block_order": [ + "heading", + "page-content", + "group_B4L8Dp" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "full-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jq6wGK" + ] +} From b7e426f84fdd1f4989aa7fb1ea88e235917330a6 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 19:04:13 +0000 Subject: [PATCH 1216/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.keeper-club.json | 271 ++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 templates/page.keeper-club.json diff --git a/templates/page.keeper-club.json b/templates/page.keeper-club.json new file mode 100644 index 000000000..a943cb405 --- /dev/null +++ b/templates/page.keeper-club.json @@ -0,0 +1,271 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + }, + "group_B4L8Dp": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_MMdTDx": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "link": "", + "image_ratio": "landscape", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_description_AJbKWt": { + "type": "product-description", + "name": "t:names.product_description", + "settings": { + "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_MMdTDx", + "product_description_AJbKWt" + ] + } + }, + "block_order": [ + "heading", + "page-content", + "group_B4L8Dp" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "full-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jq6wGK" + ] +} From 3ceacd8bf5380362f7b3461da8ecbf5164814557 Mon Sep 17 00:00:00 2001 From: Morg Date: Wed, 4 Mar 2026 23:33:32 +1300 Subject: [PATCH 1217/1275] Social feed: prefer AVIF/WebP image URLs with fallback --- assets/social-feed.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/assets/social-feed.js b/assets/social-feed.js index 1c653bec8..293a780c9 100644 --- a/assets/social-feed.js +++ b/assets/social-feed.js @@ -88,7 +88,7 @@ class SocialFeed { } if (image) { - image.src = data.media_url || data.thumbnail_url || ''; + image.src = this.resolveImageUrl(data); image.alt = data.caption ? data.caption.slice(0, 160) : 'Social post'; image.addEventListener( 'load', @@ -104,6 +104,39 @@ class SocialFeed { } }); } + + resolveImageUrl(data) { + const getStringUrl = (value) => (typeof value === 'string' && value.trim().length > 0 ? value.trim() : ''); + + const media = data?.media || {}; + const images = data?.images || {}; + const candidates = [ + // Prefer explicit modern formats from the feed when available. + data?.media_url_avif, + data?.thumbnail_url_avif, + data?.media_url_webp, + data?.thumbnail_url_webp, + media?.avif?.url, + media?.avif, + images?.avif?.url, + images?.avif, + media?.webp?.url, + media?.webp, + images?.webp?.url, + images?.webp, + // Fallback to legacy/default image URLs. + data?.media_url, + data?.thumbnail_url, + media?.jpeg?.url, + media?.jpg?.url, + media?.png?.url, + images?.jpeg?.url, + images?.jpg?.url, + images?.png?.url, + ]; + + return candidates.map(getStringUrl).find(Boolean) || ''; + } } const initSocialFeeds = () => { From d92382a8ed1874b425141fe261253b2c2943c114 Mon Sep 17 00:00:00 2001 From: Morg Date: Wed, 4 Mar 2026 23:33:32 +1300 Subject: [PATCH 1218/1275] Social feed: prefer AVIF/WebP image URLs with fallback --- assets/social-feed.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/assets/social-feed.js b/assets/social-feed.js index 1c653bec8..293a780c9 100644 --- a/assets/social-feed.js +++ b/assets/social-feed.js @@ -88,7 +88,7 @@ class SocialFeed { } if (image) { - image.src = data.media_url || data.thumbnail_url || ''; + image.src = this.resolveImageUrl(data); image.alt = data.caption ? data.caption.slice(0, 160) : 'Social post'; image.addEventListener( 'load', @@ -104,6 +104,39 @@ class SocialFeed { } }); } + + resolveImageUrl(data) { + const getStringUrl = (value) => (typeof value === 'string' && value.trim().length > 0 ? value.trim() : ''); + + const media = data?.media || {}; + const images = data?.images || {}; + const candidates = [ + // Prefer explicit modern formats from the feed when available. + data?.media_url_avif, + data?.thumbnail_url_avif, + data?.media_url_webp, + data?.thumbnail_url_webp, + media?.avif?.url, + media?.avif, + images?.avif?.url, + images?.avif, + media?.webp?.url, + media?.webp, + images?.webp?.url, + images?.webp, + // Fallback to legacy/default image URLs. + data?.media_url, + data?.thumbnail_url, + media?.jpeg?.url, + media?.jpg?.url, + media?.png?.url, + images?.jpeg?.url, + images?.jpg?.url, + images?.png?.url, + ]; + + return candidates.map(getStringUrl).find(Boolean) || ''; + } } const initSocialFeeds = () => { From cadb366f6cb80c7012136dbcaa1f93ae9171c0ff Mon Sep 17 00:00:00 2001 From: Morg Date: Wed, 4 Mar 2026 23:33:32 +1300 Subject: [PATCH 1219/1275] Social feed: prefer AVIF/WebP image URLs with fallback --- assets/social-feed.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/assets/social-feed.js b/assets/social-feed.js index 1c653bec8..293a780c9 100644 --- a/assets/social-feed.js +++ b/assets/social-feed.js @@ -88,7 +88,7 @@ class SocialFeed { } if (image) { - image.src = data.media_url || data.thumbnail_url || ''; + image.src = this.resolveImageUrl(data); image.alt = data.caption ? data.caption.slice(0, 160) : 'Social post'; image.addEventListener( 'load', @@ -104,6 +104,39 @@ class SocialFeed { } }); } + + resolveImageUrl(data) { + const getStringUrl = (value) => (typeof value === 'string' && value.trim().length > 0 ? value.trim() : ''); + + const media = data?.media || {}; + const images = data?.images || {}; + const candidates = [ + // Prefer explicit modern formats from the feed when available. + data?.media_url_avif, + data?.thumbnail_url_avif, + data?.media_url_webp, + data?.thumbnail_url_webp, + media?.avif?.url, + media?.avif, + images?.avif?.url, + images?.avif, + media?.webp?.url, + media?.webp, + images?.webp?.url, + images?.webp, + // Fallback to legacy/default image URLs. + data?.media_url, + data?.thumbnail_url, + media?.jpeg?.url, + media?.jpg?.url, + media?.png?.url, + images?.jpeg?.url, + images?.jpg?.url, + images?.png?.url, + ]; + + return candidates.map(getStringUrl).find(Boolean) || ''; + } } const initSocialFeeds = () => { From af5dd8e852d693bc5291e8caa4a07ed55a4a1de4 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 10:35:21 +0000 Subject: [PATCH 1220/1275] Update from Shopify for theme horizon/main Committed from shop: Golden From ebc7f88a881db8af6b5f035af7d37aedbe6ebc98 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:10:38 +0000 Subject: [PATCH 1221/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 76 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 5 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 92919f706..4e5bfa73f 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -56,6 +56,71 @@ "padding-block-end": 24 } }, + "section_inTUGG": { + "type": "section", + "blocks": { + "text_zxEmKe": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

The Basics

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_zxEmKe" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, "section_jKDfRf": { "type": "section", "blocks": { @@ -122,7 +187,7 @@ "accordion_row_dKYbRd": { "type": "accordion_row", "settings": { - "heading": "Refund Policy", + "heading": "What is Golden?", "right_heading": "", "heading_links_enabled": false, "heading_link": "shopify://policies/refund-policy", @@ -153,7 +218,7 @@ "text_AHwwCk": { "type": "text", "settings": { - "text": "

Our goal is for every customer to be totally satisfied with their purchase. If this isn't the case, let us know and we'll do our best to work with you to make it right.

", + "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", "width": "100%", "max_width": "none", "alignment": "left", @@ -185,7 +250,7 @@ "settings": { "heading": "Shipping", "right_heading": "", - "heading_links_enabled": false, + "heading_links_enabled": true, "heading_link": "", "right_heading_link": "", "collapsible": true, @@ -216,7 +281,7 @@ "settings": { "text": "

We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.

", "width": "100%", - "max_width": "normal", + "max_width": "none", "alignment": "left", "type_preset": "rte", "font": "var(--font-body--family)", @@ -277,7 +342,7 @@ "settings": { "text": "

Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.

", "width": "100%", - "max_width": "normal", + "max_width": "none", "alignment": "left", "type_preset": "rte", "font": "var(--font-body--family)", @@ -353,6 +418,7 @@ }, "order": [ "main", + "section_inTUGG", "section_jKDfRf" ] } From 808ef93fff88d05a6a2726f65f1d02785be517c7 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:27:57 +0000 Subject: [PATCH 1222/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 4e5bfa73f..bf67f7306 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -218,7 +218,7 @@ "text_AHwwCk": { "type": "text", "settings": { - "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", + "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", "width": "100%", "max_width": "none", "alignment": "left", @@ -248,7 +248,7 @@ "accordion_row_tL6whA": { "type": "accordion_row", "settings": { - "heading": "Shipping", + "heading": "What makes Golden different from normal soda?", "right_heading": "", "heading_links_enabled": true, "heading_link": "", @@ -279,7 +279,7 @@ "text_WVyUeL": { "type": "text", "settings": { - "text": "

We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.

", + "text": "", "width": "100%", "max_width": "none", "alignment": "left", From 9c8b9b121a38ae7611f5f56c688609657ee083ad Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:29:44 +0000 Subject: [PATCH 1223/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index bf67f7306..f754207fd 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -248,7 +248,7 @@ "accordion_row_tL6whA": { "type": "accordion_row", "settings": { - "heading": "What makes Golden different from normal soda?", + "heading": "", "right_heading": "", "heading_links_enabled": true, "heading_link": "", @@ -279,7 +279,7 @@ "text_WVyUeL": { "type": "text", "settings": { - "text": "", + "text": "

We use honey instead of refined sugar and let real fruit and juice do the heavy lifting. It’s full-flavour, without the syrupy finish. Learn more about our Ingredients here.

", "width": "100%", "max_width": "none", "alignment": "left", From 4acdf2333b1cac2461331865f9efca811a2fa08b Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:30:02 +0000 Subject: [PATCH 1224/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index f754207fd..7a5db5f8c 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -248,7 +248,7 @@ "accordion_row_tL6whA": { "type": "accordion_row", "settings": { - "heading": "", + "heading": "What makes Golden different from normal soda?", "right_heading": "", "heading_links_enabled": true, "heading_link": "", From 24ff1bd2eb78819e7a681654f18c60a009e3779d Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:30:25 +0000 Subject: [PATCH 1225/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 7a5db5f8c..aaa46b171 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -218,7 +218,7 @@ "text_AHwwCk": { "type": "text", "settings": { - "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", + "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", "width": "100%", "max_width": "none", "alignment": "left", From 6f53eab763d0339f754d652785eac4fac1301402 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:38:10 +0000 Subject: [PATCH 1226/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index aaa46b171..99f763493 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -309,7 +309,7 @@ "accordion_row_qEx4kN": { "type": "accordion_row", "settings": { - "heading": "Manufacturing", + "heading": "Is Golden sparkling?", "right_heading": "", "heading_links_enabled": false, "heading_link": "", From fa7c32436595f6a500246592bf5c841b1fb0b0eb Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:51:00 +0000 Subject: [PATCH 1227/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 435 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 429 insertions(+), 6 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 99f763493..531a41771 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -306,7 +306,7 @@ "text_WVyUeL" ] }, - "accordion_row_qEx4kN": { + "accordion_row_RE6EF9": { "type": "accordion_row", "settings": { "heading": "Is Golden sparkling?", @@ -337,10 +337,10 @@ "width": 20 }, "blocks": { - "text_xnNT8G": { + "text_7wmChr": { "type": "text", "settings": { - "text": "

Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.

", + "text": "

Yes. Golden is lightly carbonated, designed to be refreshing rather than aggressively fizzy. Learn more

", "width": "100%", "max_width": "none", "alignment": "left", @@ -364,14 +364,14 @@ } }, "block_order": [ - "text_xnNT8G" + "text_7wmChr" ] } }, "block_order": [ "accordion_row_dKYbRd", "accordion_row_tL6whA", - "accordion_row_qEx4kN" + "accordion_row_RE6EF9" ] } }, @@ -414,11 +414,434 @@ "padding-inline-start": 0, "padding-inline-end": 0 } + }, + "section_FJ98Qz": { + "type": "section", + "blocks": { + "text_bm8BEf": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Ingredients & Nutrition

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_bm8BEf" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_wAbT8L": { + "type": "section", + "blocks": { + "group_PJGqRM": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_D4ELYq": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_KKetzA": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden sweetened with honey or sugar?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_cFQKU3": { + "type": "text", + "settings": { + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_cFQKU3" + ] + }, + "accordion_row_qefK3P": { + "type": "accordion_row", + "settings": { + "heading": "How much honey is in a can?", + "right_heading": "", + "heading_links_enabled": true, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_zeNPA7": { + "type": "text", + "settings": { + "text": "

We use honey instead of refined sugar and let real fruit and juice do the heavy lifting. It’s full-flavour, without the syrupy finish. Learn more about our Ingredients here.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_zeNPA7" + ] + }, + "accordion_row_AQ4r9a": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden sparkling?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_FJy6J4": { + "type": "text", + "settings": { + "text": "

Yes. Golden is lightly carbonated, designed to be refreshing rather than aggressively fizzy. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_FJy6J4" + ] + }, + "accordion_row_YTk3R7": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden sparkling?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_Td4wED": { + "type": "text", + "settings": { + "text": "

Yes. Golden is lightly carbonated, designed to be refreshing rather than aggressively fizzy. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_Td4wED" + ] + } + }, + "block_order": [ + "accordion_row_KKetzA", + "accordion_row_qefK3P", + "accordion_row_AQ4r9a", + "accordion_row_YTk3R7" + ] + } + }, + "block_order": [ + "accordion_D4ELYq" + ] + } + }, + "block_order": [ + "group_PJGqRM" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } } }, "order": [ "main", "section_inTUGG", - "section_jKDfRf" + "section_jKDfRf", + "section_FJ98Qz", + "section_wAbT8L" ] } From 1f799f5702afe39ecc4105710832005810a94c69 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:34:35 +0000 Subject: [PATCH 1228/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 531a41771..e4e22ff2b 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -638,7 +638,7 @@ "text_zeNPA7": { "type": "text", "settings": { - "text": "

We use honey instead of refined sugar and let real fruit and juice do the heavy lifting. It’s full-flavour, without the syrupy finish. Learn more about our Ingredients here.

", + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All products: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From 64bfbd92c9aebe1b8848ee1ab9e9e72945153385 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:35:03 +0000 Subject: [PATCH 1229/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index e4e22ff2b..869d010ea 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -638,7 +638,7 @@ "text_zeNPA7": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All products: Lemon / Blackcurrant / Kola

", + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From afd449d895cebaa182d313f97e76facca05bfa37 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:41:42 +0000 Subject: [PATCH 1230/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 869d010ea..6230b6e2f 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -668,7 +668,7 @@ "accordion_row_AQ4r9a": { "type": "accordion_row", "settings": { - "heading": "Is Golden sparkling?", + "heading": "How many calories are in a can?", "right_heading": "", "heading_links_enabled": false, "heading_link": "", @@ -699,7 +699,7 @@ "text_FJy6J4": { "type": "text", "settings": { - "text": "

Yes. Golden is lightly carbonated, designed to be refreshing rather than aggressively fizzy. Learn more

", + "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From f5e1c881e756777064dfb1866e5f1e0d3430c76e Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:42:55 +0000 Subject: [PATCH 1231/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 6230b6e2f..2a8fad617 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -729,7 +729,7 @@ "accordion_row_YTk3R7": { "type": "accordion_row", "settings": { - "heading": "Is Golden sparkling?", + "heading": "What are the ingredients in each flavour?", "right_heading": "", "heading_links_enabled": false, "heading_link": "", From e2be43d3f43e46ca5c3a09d84a647693f27adb88 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:44:25 +0000 Subject: [PATCH 1232/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 2a8fad617..95ed6f6e9 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -760,7 +760,7 @@ "text_Td4wED": { "type": "text", "settings": { - "text": "

Yes. Golden is lightly carbonated, designed to be refreshing rather than aggressively fizzy. Learn more

", + "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From 24e62684b07f8355ab82dddda815822143f52f3a Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:46:53 +0000 Subject: [PATCH 1233/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 95ed6f6e9..d561a7941 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -760,7 +760,7 @@ "text_Td4wED": { "type": "text", "settings": { - "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more: Lemon / Blackcurrant / Kola

", + "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From a00b3ae9a20da62d03dea748ccbd091008c2400f Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:53:31 +0000 Subject: [PATCH 1234/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 64 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index d561a7941..64d4d9142 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -786,13 +786,75 @@ "block_order": [ "text_Td4wED" ] + }, + "accordion_row_zcemUV": { + "type": "accordion_row", + "settings": { + "heading": "Does Golden contain caffeine?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_DR8ELg": { + "type": "text", + "settings": { + "text": "

No. We use natural kola nut for that classic cola flavour, but our extraction removes the naturally occurring caffeine. We’d rather leave the buzz to coffee and keep Golden crisp, family-friendly, and well out of the energy drink lane. Kānuka Kola is for staying golden, not staying awake.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_DR8ELg" + ] } }, "block_order": [ "accordion_row_KKetzA", "accordion_row_qefK3P", "accordion_row_AQ4r9a", - "accordion_row_YTk3R7" + "accordion_row_YTk3R7", + "accordion_row_zcemUV" ] } }, From 46d93608829d26960e26cd8ae6ebcce0d4a7076d Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 01:53:46 +0000 Subject: [PATCH 1235/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 126 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 64d4d9142..1224f8ebd 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -847,6 +847,128 @@ "block_order": [ "text_DR8ELg" ] + }, + "accordion_row_RVaXVd": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden vegan?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_QXqGpn": { + "type": "text", + "settings": { + "text": "

Golden contain honey, so it won’t suit everyone who follows a strict vegan diet.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_QXqGpn" + ] + }, + "accordion_row_RB47aL": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden gluten-free?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_yxmzyP": { + "type": "text", + "settings": { + "text": "

Our Low Cal sodas are gluten-free. Kānuka Kola is the exception, it contains barley and therefore gluten. Always check the can for the definitive ingredient statement, and contact us if you need extra reassurance. Learn more: Contact

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_yxmzyP" + ] } }, "block_order": [ @@ -854,7 +976,9 @@ "accordion_row_qefK3P", "accordion_row_AQ4r9a", "accordion_row_YTk3R7", - "accordion_row_zcemUV" + "accordion_row_zcemUV", + "accordion_row_RVaXVd", + "accordion_row_RB47aL" ] } }, From 382c09a0435c7d455675ee11537ff56b83bff424 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 01:56:52 +0000 Subject: [PATCH 1236/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 64 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 1224f8ebd..d6956bb0e 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -969,6 +969,67 @@ "block_order": [ "text_yxmzyP" ] + }, + "accordion_row_xrA3p6": { + "type": "accordion_row", + "settings": { + "heading": "Does Golden contain allergens?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_FbEEdt": { + "type": "text", + "settings": { + "text": "

All allergens are listed on the can. Gluten is the only common allergen we declare, and it’s only in our Kānuka Kola (barley). Our other flavours contain honey and fruit. If you’re unsure, reach out. Learn more: Contact

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_FbEEdt" + ] } }, "block_order": [ @@ -978,7 +1039,8 @@ "accordion_row_YTk3R7", "accordion_row_zcemUV", "accordion_row_RVaXVd", - "accordion_row_RB47aL" + "accordion_row_RB47aL", + "accordion_row_xrA3p6" ] } }, From df95f0c547df787ecc9e69671514790953e8e322 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 02:09:08 +0000 Subject: [PATCH 1237/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 1634 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 1632 insertions(+), 2 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index d6956bb0e..ee938aa8a 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -193,7 +193,7 @@ "heading_link": "shopify://policies/refund-policy", "right_heading_link": "", "collapsible": true, - "open_by_default": false, + "open_by_default": true, "group_mode": "shared", "color_scheme": "", "hover_color_scheme": "", @@ -1083,6 +1083,1628 @@ "padding-inline-start": 0, "padding-inline-end": 0 } + }, + "section_TxwdbN": { + "type": "section", + "blocks": { + "text_nEACtf": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Sourcing & Made Here

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_nEACtf" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_MYiJ6Y": { + "type": "section", + "blocks": { + "group_WqGUhY": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_7XxUGW": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_DnFp3t": { + "type": "accordion_row", + "settings": { + "heading": "Where is Golden made?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_yk9XUV": { + "type": "text", + "settings": { + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_yk9XUV" + ] + }, + "accordion_row_YWGzYD": { + "type": "accordion_row", + "settings": { + "heading": "Where do your lemons come from?", + "right_heading": "", + "heading_links_enabled": true, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_3c9Ypx": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_3c9Ypx" + ] + }, + "accordion_row_MjExrH": { + "type": "accordion_row", + "settings": { + "heading": "Where do your blackcurrants come from?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_VTxXYq": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_VTxXYq" + ] + }, + "accordion_row_ttY9eg": { + "type": "accordion_row", + "settings": { + "heading": "What’s the difference between mānuka and kānuka honey?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_F7FC4H": { + "type": "text", + "settings": { + "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_F7FC4H" + ] + }, + "accordion_row_RdP7Ry": { + "type": "accordion_row", + "settings": { + "heading": "What does “single-strength juice” mean?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_C6JY9B": { + "type": "text", + "settings": { + "text": "

No. We use natural kola nut for that classic cola flavour, but our extraction removes the naturally occurring caffeine. We’d rather leave the buzz to coffee and keep Golden crisp, family-friendly, and well out of the energy drink lane. Kānuka Kola is for staying golden, not staying awake.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_C6JY9B" + ] + } + }, + "block_order": [ + "accordion_row_DnFp3t", + "accordion_row_YWGzYD", + "accordion_row_MjExrH", + "accordion_row_ttY9eg", + "accordion_row_RdP7Ry" + ] + } + }, + "block_order": [ + "accordion_7XxUGW" + ] + } + }, + "block_order": [ + "group_WqGUhY" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_WLfRDg": { + "type": "section", + "blocks": { + "text_4nfYcp": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Drinking & Storing

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_4nfYcp" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_K4qMeC": { + "type": "section", + "blocks": { + "group_PyzmdL": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_Enx6DJ": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_yte38r": { + "type": "accordion_row", + "settings": { + "heading": "What does Golden taste like?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_WJqkUz": { + "type": "text", + "settings": { + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_WJqkUz" + ] + }, + "accordion_row_cimyUE": { + "type": "accordion_row", + "settings": { + "heading": "How should I store Golden?", + "right_heading": "", + "heading_links_enabled": true, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_GpYUdE": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_GpYUdE" + ] + }, + "accordion_row_hB4jzw": { + "type": "accordion_row", + "settings": { + "heading": "What’s the shelf life?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_qjMfDz": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_qjMfDz" + ] + }, + "accordion_row_m44XDg": { + "type": "accordion_row", + "settings": { + "heading": "Is Golden suitable for kids or during pregnancy?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_yRETMM": { + "type": "text", + "settings": { + "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_yRETMM" + ] + } + }, + "block_order": [ + "accordion_row_yte38r", + "accordion_row_cimyUE", + "accordion_row_hB4jzw", + "accordion_row_m44XDg" + ] + } + }, + "block_order": [ + "accordion_Enx6DJ" + ] + } + }, + "block_order": [ + "group_PyzmdL" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_QUUP8R": { + "type": "section", + "blocks": { + "text_gDXQNf": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Ordering & Delivery

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_gDXQNf" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_9apWjb": { + "type": "section", + "blocks": { + "group_V48zLr": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_c3JbYe": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_jMDGWg": { + "type": "accordion_row", + "settings": { + "heading": "Where can I buy Golden?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_XfT8Km": { + "type": "text", + "settings": { + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_XfT8Km" + ] + }, + "accordion_row_9CEpHc": { + "type": "accordion_row", + "settings": { + "heading": "How much is shipping, and is there free shipping?", + "right_heading": "", + "heading_links_enabled": true, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_YhzN88": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_YhzN88" + ] + }, + "accordion_row_XpB99V": { + "type": "accordion_row", + "settings": { + "heading": "How long does delivery take, including rural?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_T8Jrzx": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_T8Jrzx" + ] + }, + "accordion_row_fG9kdN": { + "type": "accordion_row", + "settings": { + "heading": "What if my order arrives damaged or missing?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_KLrdk7": { + "type": "text", + "settings": { + "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_KLrdk7" + ] + } + }, + "block_order": [ + "accordion_row_jMDGWg", + "accordion_row_9CEpHc", + "accordion_row_XpB99V", + "accordion_row_fG9kdN" + ] + } + }, + "block_order": [ + "accordion_c3JbYe" + ] + } + }, + "block_order": [ + "group_V48zLr" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_TwHJAy": { + "type": "section", + "blocks": { + "text_kLGHVE": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Wholesale

", + "width": "fit-content", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + } + }, + "block_order": [ + "text_kLGHVE" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 48, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + }, + "section_QpAe7R": { + "type": "section", + "blocks": { + "group_tfrPGy": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 32, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-5", + "background_media": "image", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "hero-apparel-1", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_B4wgkh": { + "type": "accordion", + "name": "t:names.accordion", + "settings": { + "icon": "caret", + "dividers": true, + "type_preset": "h6", + "inherit_color_scheme": true, + "color_scheme": "", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "accordion_row_zXkeFe": { + "type": "accordion_row", + "settings": { + "heading": "Do you offer wholesale?", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "shopify://policies/refund-policy", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_MmxANc": { + "type": "text", + "settings": { + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_MmxANc" + ] + }, + "accordion_row_RNKeVQ": { + "type": "accordion_row", + "settings": { + "heading": "How do I become a stockist?", + "right_heading": "", + "heading_links_enabled": true, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 16, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.6, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_TCiQji": { + "type": "text", + "settings": { + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_TCiQji" + ] + } + }, + "block_order": [ + "accordion_row_zXkeFe", + "accordion_row_RNKeVQ" + ] + } + }, + "block_order": [ + "accordion_B4wgkh" + ] + } + }, + "block_order": [ + "group_tfrPGy" + ], + "name": "t:names.split_showcase", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 0, + "section_width": "full-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + } } }, "order": [ @@ -1090,6 +2712,14 @@ "section_inTUGG", "section_jKDfRf", "section_FJ98Qz", - "section_wAbT8L" + "section_wAbT8L", + "section_TxwdbN", + "section_MYiJ6Y", + "section_WLfRDg", + "section_K4qMeC", + "section_QUUP8R", + "section_9apWjb", + "section_TwHJAy", + "section_QpAe7R" ] } From a9382521cab12fa940aefe3ceae6d102d5069267 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 02:12:32 +0000 Subject: [PATCH 1238/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.ingredients.json | 184 ++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) diff --git a/templates/page.ingredients.json b/templates/page.ingredients.json index 1ae1ef374..88c27d3c6 100644 --- a/templates/page.ingredients.json +++ b/templates/page.ingredients.json @@ -56,6 +56,189 @@ "padding-block-end": 24 } }, + "hero_7Rjb99": { + "type": "hero", + "blocks": { + "group_BHaLjm": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "flex-start", + "align_baseline": true, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 18, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "group_gcJtqF": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 6, + "width": "custom", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "text_CKrBf3": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Ingredients

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_CKrBf3" + ] + }, + "text_jcaAGH": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

We make things that work better and last longer. Our products solve real problems with clean design and honest materials.

", + "width": "fit-content", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "group_gcJtqF", + "text_jcaAGH" + ] + } + }, + "block_order": [ + "group_BHaLjm" + ], + "name": "t:names.hero_bottom_aligned", + "settings": { + "media_type_1": "image", + "image_1": "shopify://shop_images/iStock-641225382.jpg", + "media_type_2": "image", + "link": "", + "open_in_new_tab": false, + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "flex-end", + "gap": 16, + "section_width": "full-width", + "section_height": "large", + "section_height_custom": 50, + "color_scheme": "scheme-5", + "toggle_overlay": true, + "overlay_color": "#00000026", + "overlay_style": "gradient", + "gradient_direction": "to top", + "blurred_reflection": false, + "reflection_opacity": 75, + "padding-block-start": 40, + "padding-block-end": 40 + } + }, "section_jKDfRf": { "type": "section", "blocks": { @@ -353,6 +536,7 @@ }, "order": [ "main", + "hero_7Rjb99", "section_jKDfRf" ] } From 7fb274b2415b98b8a0d776dc421354e5f0c53062 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 09:58:18 +0000 Subject: [PATCH 1239/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index ee938aa8a..519474f7e 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -102,7 +102,7 @@ "section_width": "full-width", "section_height": "", "section_height_custom": 50, - "color_scheme": "", + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", @@ -461,7 +461,7 @@ "section_width": "full-width", "section_height": "", "section_height_custom": 50, - "color_scheme": "", + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", @@ -1130,7 +1130,7 @@ "section_width": "full-width", "section_height": "", "section_height_custom": 50, - "color_scheme": "", + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", @@ -1246,7 +1246,7 @@ "text_yk9XUV": { "type": "text", "settings": { - "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "text": "

Golden is made in New Zealand. We keep our supply chain as local and traceable as we can. Learn more: Ingredients

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1307,7 +1307,7 @@ "text_3c9Ypx": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "text": "

Our Meyer lemons are grown on Hawke’s Bay’s eastern edge, near Wairoa, where the Wairoa River meets the Pacific Ocean. Learn more: Lemon

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1368,7 +1368,7 @@ "text_VTxXYq": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where cool nights help build bold berry intensity. Learn more: Blackcurrant

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1429,7 +1429,7 @@ "text_F7FC4H": { "type": "text", "settings": { - "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "text": "

They’re both New Zealand native honeys, but they’re made from different trees and they taste different. Mānuka tends to be darker and more intense, and it’s the one that can be independently graded and certified under the UMF™ system. Kānuka is typically lighter and more floral. We use both for a softer sweetness and more flavour than refined sugar. Learn more: Ingredients

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1613,7 +1613,7 @@ "section_width": "full-width", "section_height": "", "section_height_custom": 50, - "color_scheme": "", + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", @@ -2455,7 +2455,7 @@ "section_width": "full-width", "section_height": "", "section_height_custom": 50, - "color_scheme": "", + "color_scheme": "scheme-1", "background_media": "none", "video_position": "cover", "background_image_position": "cover", From 056eb15fb4a7d23cdbfeeed21796119f200df89c Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:00:07 +0000 Subject: [PATCH 1240/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 519474f7e..44bf61a1b 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1246,7 +1246,7 @@ "text_yk9XUV": { "type": "text", "settings": { - "text": "

Golden is made in New Zealand. We keep our supply chain as local and traceable as we can. Learn more: Ingredients

", + "text": "

Golden is made in New Zealand. We build our drinks around local honey and fruit, and we work with trusted local partners to turn those ingredients into something clean, bright, and properly refreshing. We care about traceability because it keeps the product honest, and because good ingredients deserve to be treated like the main event, not a flavouring. Learn more: Ingredients

", "width": "100%", "max_width": "none", "alignment": "left", From ac3f1d5ae31d6f3ddd90cd1f45f3858efd5ed039 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:00:59 +0000 Subject: [PATCH 1241/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 44bf61a1b..bd8eef3b6 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1368,7 +1368,7 @@ "text_VTxXYq": { "type": "text", "settings": { - "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa, where cool nights help build bold berry intensity. Learn more: Blackcurrant

", + "text": "

Our blackcurrants come from Otago in the deep south of Aotearoa. The cooler climate and cold nights slow things down, which helps the fruit build real intensity. That’s where you get that deep purple colour, bold berry flavour, and the clean tang that makes blackcurrant so satisfying in a soda. Learn more: Blackcurrant

", "width": "100%", "max_width": "none", "alignment": "left", From 30aa9b328f3de79a7483906a8859c80cb8645f6b Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:01:57 +0000 Subject: [PATCH 1242/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index bd8eef3b6..fcfe1aaa7 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1490,7 +1490,7 @@ "text_C6JY9B": { "type": "text", "settings": { - "text": "

No. We use natural kola nut for that classic cola flavour, but our extraction removes the naturally occurring caffeine. We’d rather leave the buzz to coffee and keep Golden crisp, family-friendly, and well out of the energy drink lane. Kānuka Kola is for staying golden, not staying awake.

", + "text": "

Single-strength juice is real juice, pressed and used as juice, not concentrated and rebuilt. It’s one of the reasons Golden tastes clean and natural, and it’s also why the flavour can shift subtly through the year. Fruit has seasons, and we like the fact you can taste that. Learn more: Ingredients

", "width": "100%", "max_width": "none", "alignment": "left", From 755b235998d4ad00ee0e4dee6080158c0c95875f Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:03:20 +0000 Subject: [PATCH 1243/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index fcfe1aaa7..f157080c7 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1729,7 +1729,7 @@ "text_WJqkUz": { "type": "text", "settings": { - "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "text": "

Bright and clean. Honey brings a soft sweetness, fruit adds depth, and acidity keeps the finish crisp rather than syrupy. Learn more: Learn more

", "width": "100%", "max_width": "none", "alignment": "left", From b696ef1b10bcb66755db8cbf27311c76e5223707 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:03:48 +0000 Subject: [PATCH 1244/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index f157080c7..4b8e2867e 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1790,7 +1790,7 @@ "text_GpYUdE": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "text": "

Store unopened cans somewhere cool and dry. Chill before drinking for the cleanest, brightest flavour.

", "width": "100%", "max_width": "none", "alignment": "left", From 1462cac76cd5e9942f73fbe05c1350fd43db6cb1 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:04:11 +0000 Subject: [PATCH 1245/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 4b8e2867e..e247235fb 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1851,7 +1851,7 @@ "text_qjMfDz": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "text": "

Best-before is printed on the can. We recommend enjoying it cold and fresh for peak flavour.

", "width": "100%", "max_width": "none", "alignment": "left", From b888ac83ca3532e25e658d4bd74691fa71e497bc Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:04:46 +0000 Subject: [PATCH 1246/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index e247235fb..b3e4f3ca9 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -1912,7 +1912,7 @@ "text_yRETMM": { "type": "text", "settings": { - "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "text": "

Golden is non-alcoholic. For kids, pregnancy, or caffeine sensitivity, check the ingredient panel and choose what fits your needs. Learn more: Kola

", "width": "100%", "max_width": "none", "alignment": "left", From df78e4144330c834f6e3c78825bd97ee9514247b Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 19:53:40 +0000 Subject: [PATCH 1247/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index b3e4f3ca9..2d66082a2 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -638,7 +638,7 @@ "text_zeNPA7": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. Learn more: All Drinks: Lemon / Blackcurrant / Kola

", "width": "100%", "max_width": "none", "alignment": "left", From 19ac468891243e01065eb28db9bd8927a85d72da Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 20:00:22 +0000 Subject: [PATCH 1248/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index 2d66082a2..b23d660c8 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -2150,7 +2150,7 @@ "text_XfT8Km": { "type": "text", "settings": { - "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "text": "

You can order online, or pick it up from selected stockists around New Zealand. Find a store: Store Locator

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2211,7 +2211,7 @@ "text_YhzN88": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "text": "

Shipping rates and any free-shipping thresholds are listed in our shipping policy and shown at checkout. Learn more: Shipping

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2272,7 +2272,7 @@ "text_T8Jrzx": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range sits at 59–63 calories per 330 mL can. For comparison, a 330 mL can of classic Coke is about 139 calories. You’ll find calories clearly listed on the can and on each product page nutrition panel. Learn more: Lemon / Blackcurrant / Kola

", + "text": "

Timing depends on region and rural routes. We outline typical delivery windows in our shipping policy. Learn more: Shipping policy

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2333,7 +2333,7 @@ "text_KLrdk7": { "type": "text", "settings": { - "text": "

Each flavour has a full ingredient list on-pack and on its product page. That’s the definitive source. Learn more on our Ingredients page or on each product page: Lemon / Blackcurrant / Kola

", + "text": "

Email us ASAP with your order number and photos, and we’ll sort it quickly. Learn more: Returns / Contact: Contact

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2571,7 +2571,7 @@ "text_MmxANc": { "type": "text", "settings": { - "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "text": "

Yes. If you’d like to stock Golden, head to our wholesale page and apply there. Learn more: Wholesale

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2632,7 +2632,7 @@ "text_TCiQji": { "type": "text", "settings": { - "text": "

It varies by flavour. Our Low-Cal Soda range uses 13.3g of honey per serving (about one tablespoon). The exact amount for each flavour is listed on the can and on each product page nutrition panel. All Drinks: Lemon / Blackcurrant / Kola

", + "text": "

Apply via our wholesale page and we’ll follow up with pricing, ordering info, and next steps. Get started: Wholesale

", "width": "100%", "max_width": "none", "alignment": "left", From cf2ab30157ad5aa22d39056015995891e7f5e9d5 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 20:01:40 +0000 Subject: [PATCH 1249/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.faq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.faq.json b/templates/page.faq.json index b23d660c8..447d12d04 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -218,7 +218,7 @@ "text_AHwwCk": { "type": "text", "settings": { - "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more

", + "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn More: Ingredients

", "width": "100%", "max_width": "none", "alignment": "left", From 005cb906e0397fee6137c798adc17abd60610476 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 06:54:08 +0000 Subject: [PATCH 1250/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.json b/templates/index.json index 3b63c39b3..d1024f00d 100644 --- a/templates/index.json +++ b/templates/index.json @@ -114,7 +114,7 @@ "text_fBYKHx": { "type": "text", "settings": { - "text": "

Low-cal sparkling soda from Aotearoa, New Zealand sweetened with Golden Bay mānuka honey and flavoured with locally grown fruits

", + "text": "

Low-cal sparkling soda from Aotearoa, New Zealand. Sweetened with Golden Bay mānuka honey and flavoured with locally grown fruits

", "width": "100%", "max_width": "none", "alignment": "left", From 743905f04b9b5bab9ffbdfe62aa0e08a5b50d768 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:07:35 +0000 Subject: [PATCH 1251/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.story.json | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/templates/page.story.json b/templates/page.story.json index 68027160d..36046e93d 100644 --- a/templates/page.story.json +++ b/templates/page.story.json @@ -148,7 +148,7 @@ "type": "text", "name": "t:names.heading", "settings": { - "text": "

Introducing

", + "text": "

Starting Golden

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -270,37 +270,11 @@ "section_jq6wGK": { "type": "section", "blocks": { - "text_7En9gM": { - "type": "text", - "name": "t:names.heading", - "settings": { - "text": "

Starting Golden

", - "width": "100%", - "max_width": "none", - "alignment": "left", - "type_preset": "h2", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground-heading)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, "text_azwx93": { "type": "text", "name": "t:names.text", "settings": { - "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. As the wind dropped, I returned to a question I had been mulling for some time: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

New Zealand is world-renowned for its mānuka honey and its world-class orchards, yet no local drinks brand had meaningfully brought those two strengths together. No one has created flavours that genuinely express New Zealand provenance with mānuka honey at the centre, or clearly told the story of where those flavours come from and who grows them.

Was it just taste? Could honey, fruit and sparkling water make a good soda? I wondered if the honey would drown out the fruit or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you do not get from refined sugar or other sweeteners. I was hooked. From there the idea was clear: a New Zealand drinks brand built on local honey and fruit, anchored in the supply chains I knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees and learnt how produce moves from tree to shelf through packhouses, cold stores and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery syrups or sweeteners.

Following a degree in cultural anthropology and work on commercial film productions between Wellington and Auckland, my appetite to build something of my own grew. The more I worked on other brands’ stories, the more I found myself imagineering the products I would rather champion and the stories I would rather tell. One idea kept surfacing: pair New Zealand honey with fruit, made here with the supply chains I knew first-hand. We grow world-class fruit and mānuka; provenance is rarely front and centre. San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench-scale trials, pilot runs, and several rounds of recipe refinement with support from Callaghan Innovation and food scientists at Massey University. It turns out that working with real ingredients is harder to get spot-on than using hyper-processed alternatives, but the result was worth it. I completed an MBA to sharpen the plan, spent a brief spell in tech, then backed myself to launch Golden in 2024: a soda built on New Zealand honey and fruit to answer the gap I had noticed years earlier.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. The result is light, crisp and balanced.


Made in New Zealand.

", + "text": "

I grew up in Hawke's Bay. I was surrounded by orchards and vineyards, by people whose livelihoods depended on things they could not fully control. Like a lot of people who grew up around those industries, I spent my teenage summers working on the coastal orchards around Bay View. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees, and learnt how produce moves from branch to shelf through pack-houses, cold stores, and dispatch. That kind of work shaped me in ways I have carried ever since. Before I had any vocabulary for provenance or supply chains, I understood something far more immediate: that a bottle of wine on the shelf or a bag of apples at the supermarket was the result of weather, timing, labour, judgement, and luck all lining up. A mixture of science and hard work, sunshine and water, all coming together in this beautiful dance every harvest. I understood how fragile that dance was, too. A hailstorm, a late frost, a long dry spell. You could do everything right and still watch a season go sideways. Once you have been part of that work, even briefly, you stop seeing products as things that just appear.


Wine reinforced that way of seeing. I had grown up around it, worked in it, watched how a bottle could carry the fingerprint of a particular place and a particular year. Season, soil, sun, all folded into the story. Some of the language around wine is theatre, of course, but it is theatre that still points back to land, season, and labour. If you have ever picked grapes in the bay or worked a season on an orchard, you know that what ends up in someone's hand is the visible end of something much larger. That stayed with me when I left, because for a few seasons at least, I had been part of that chain myself.

Soda occupied a very different place in my life, and I want to be clear about that, because it matters. I loved soda as a kid, and I love it now. It belonged to trips to the dairy after school with a mate, beach days, road trips, hot afternoons, salty snacks, and cold cans passed around without ceremony. Some of the best memories of growing up have sugar on their breath. I never set out to challenge soda. I wanted to build something that could stand proudly among the brands and flavours I already loved.

Only later, when I started thinking about building a drinks brand, did I notice how much story soda sold and how little of it pointed back to ingredients, land, or supply chain. They gave you flavour as spectacle, happiness as branding, a lifestyle in aluminium shining your aspirations right back at you. The great soft drink brands were brilliant at selling a mood, a colour, a sense of belonging. They made those worlds feel real. But once I started looking at the category through a founder's eyes rather than a consumer's, that distance between the story and the substance began to look less like an oversight and more like an opportunity.

That lens did not come from nowhere. I had studied anthropology after high school, then worked in commercial storytelling on film productions, helping other brands say what they meant with conviction. Both left me with a habit of reading products the way you read a text: what is it saying, what is it hiding, who is it for. Over time, though, I found myself less interested in telling other people's stories and more interested in backing one of my own.

Golden came from two observations I could not shake. Soda sold enormous amounts of story while saying very little about what was actually in the can. Honey, meanwhile, had a remarkable story and real value in overseas markets, but had found its way into surprisingly few everyday products beyond the jar. For all its provenance and flavour, very little innovation had been done to expand the formats honey was sold in. It struck me that honey deserved to be a hero ingredient, not just a pantry staple.

The honey side took shape gradually. Mānuka had already been through its own gold rush in New Zealand, most of the conversation wrapped up in export pricing, health claims, and the value of the jar itself. But when I started speaking to people in the industry, what stood out was how little anyone had done with honey as an ingredient in other formats. Understandable. Beekeeping is hard enough without trying to invent consumer products on top of it. But it meant honey's story, flavour, and provenance were largely locked in the pantry.

I kept coming back to fruit, too. I had grown up around orchards and knew first-hand how good New Zealand fruit could be. So the two threads converged. What if a soda went completely the other way? What if it said, plainly and proudly, this is what is in the can? No secret formula. No fog. Just excellent ingredients, clearly named and clearly sourced.

At first, it was more instinct than plan. The idea became real in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. I had been turning the question over for a while: could a soda be light, clean, and full-flavoured using only New Zealand honey and fruit? I wondered if the honey would drown out the fruit, or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you simply do not get from refined sugar. The pairing made sense, both in flavour and in story, and once I could taste that for myself, what had seemed unusual began to feel obvious.


From there, Golden took shape. Lemons from the East Coast groves of the North Island. Mānuka honey from hives around Golden Bay. Fruit and honey from places with character, in a drink that lets those places show through. Wine has always done this well: told you where something came from, and made you care. I wanted to bring that same openness into soda, a category that had never really bothered.I had no interest in dressing it up as self-improvement. Too much of the drinks market leans on nutritional theatre, diagnosing some problem in your life and presenting a can as the answer. Fix your gut. Fix your focus. Fix your energy. I wanted nothing to do with that. Make something delicious. Use ingredients that are honest and traceable. Let people see what they are drinking.

Golden is my answer to that.

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -339,7 +313,6 @@ } }, "block_order": [ - "text_7En9gM", "text_azwx93", "button_ekeYYJ" ], @@ -353,8 +326,8 @@ "horizontal_alignment_flex_direction_column": "center", "vertical_alignment_flex_direction_column": "center", "gap": 25, - "section_width": "page-width", - "section_height": "small", + "section_width": "full-width", + "section_height": "", "section_height_custom": 50, "color_scheme": "", "background_media": "none", From 79b1867b5eb756ad174d0c3b4ba6d4e56920e055 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 23:24:47 +0000 Subject: [PATCH 1252/1275] Update from Shopify for theme horizon/main Committed from shop: Golden --- templates/page.story.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.story.json b/templates/page.story.json index 36046e93d..695aba841 100644 --- a/templates/page.story.json +++ b/templates/page.story.json @@ -274,7 +274,7 @@ "type": "text", "name": "t:names.text", "settings": { - "text": "

I grew up in Hawke's Bay. I was surrounded by orchards and vineyards, by people whose livelihoods depended on things they could not fully control. Like a lot of people who grew up around those industries, I spent my teenage summers working on the coastal orchards around Bay View. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees, and learnt how produce moves from branch to shelf through pack-houses, cold stores, and dispatch. That kind of work shaped me in ways I have carried ever since. Before I had any vocabulary for provenance or supply chains, I understood something far more immediate: that a bottle of wine on the shelf or a bag of apples at the supermarket was the result of weather, timing, labour, judgement, and luck all lining up. A mixture of science and hard work, sunshine and water, all coming together in this beautiful dance every harvest. I understood how fragile that dance was, too. A hailstorm, a late frost, a long dry spell. You could do everything right and still watch a season go sideways. Once you have been part of that work, even briefly, you stop seeing products as things that just appear.


Wine reinforced that way of seeing. I had grown up around it, worked in it, watched how a bottle could carry the fingerprint of a particular place and a particular year. Season, soil, sun, all folded into the story. Some of the language around wine is theatre, of course, but it is theatre that still points back to land, season, and labour. If you have ever picked grapes in the bay or worked a season on an orchard, you know that what ends up in someone's hand is the visible end of something much larger. That stayed with me when I left, because for a few seasons at least, I had been part of that chain myself.

Soda occupied a very different place in my life, and I want to be clear about that, because it matters. I loved soda as a kid, and I love it now. It belonged to trips to the dairy after school with a mate, beach days, road trips, hot afternoons, salty snacks, and cold cans passed around without ceremony. Some of the best memories of growing up have sugar on their breath. I never set out to challenge soda. I wanted to build something that could stand proudly among the brands and flavours I already loved.

Only later, when I started thinking about building a drinks brand, did I notice how much story soda sold and how little of it pointed back to ingredients, land, or supply chain. They gave you flavour as spectacle, happiness as branding, a lifestyle in aluminium shining your aspirations right back at you. The great soft drink brands were brilliant at selling a mood, a colour, a sense of belonging. They made those worlds feel real. But once I started looking at the category through a founder's eyes rather than a consumer's, that distance between the story and the substance began to look less like an oversight and more like an opportunity.

That lens did not come from nowhere. I had studied anthropology after high school, then worked in commercial storytelling on film productions, helping other brands say what they meant with conviction. Both left me with a habit of reading products the way you read a text: what is it saying, what is it hiding, who is it for. Over time, though, I found myself less interested in telling other people's stories and more interested in backing one of my own.

Golden came from two observations I could not shake. Soda sold enormous amounts of story while saying very little about what was actually in the can. Honey, meanwhile, had a remarkable story and real value in overseas markets, but had found its way into surprisingly few everyday products beyond the jar. For all its provenance and flavour, very little innovation had been done to expand the formats honey was sold in. It struck me that honey deserved to be a hero ingredient, not just a pantry staple.

The honey side took shape gradually. Mānuka had already been through its own gold rush in New Zealand, most of the conversation wrapped up in export pricing, health claims, and the value of the jar itself. But when I started speaking to people in the industry, what stood out was how little anyone had done with honey as an ingredient in other formats. Understandable. Beekeeping is hard enough without trying to invent consumer products on top of it. But it meant honey's story, flavour, and provenance were largely locked in the pantry.

I kept coming back to fruit, too. I had grown up around orchards and knew first-hand how good New Zealand fruit could be. So the two threads converged. What if a soda went completely the other way? What if it said, plainly and proudly, this is what is in the can? No secret formula. No fog. Just excellent ingredients, clearly named and clearly sourced.

At first, it was more instinct than plan. The idea became real in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. I had been turning the question over for a while: could a soda be light, clean, and full-flavoured using only New Zealand honey and fruit? I wondered if the honey would drown out the fruit, or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you simply do not get from refined sugar. The pairing made sense, both in flavour and in story, and once I could taste that for myself, what had seemed unusual began to feel obvious.


From there, Golden took shape. Lemons from the East Coast groves of the North Island. Mānuka honey from hives around Golden Bay. Fruit and honey from places with character, in a drink that lets those places show through. Wine has always done this well: told you where something came from, and made you care. I wanted to bring that same openness into soda, a category that had never really bothered.I had no interest in dressing it up as self-improvement. Too much of the drinks market leans on nutritional theatre, diagnosing some problem in your life and presenting a can as the answer. Fix your gut. Fix your focus. Fix your energy. I wanted nothing to do with that. Make something delicious. Use ingredients that are honest and traceable. Let people see what they are drinking.

Golden is my answer to that.

", + "text": "

I grew up in Hawke's Bay. I was surrounded by orchards and vineyards, by people whose livelihoods depended on things they could not fully control. Like a lot of people who grew up around those industries, I spent my teenage summers working on the coastal orchards around Bay View. Strawberries before sunrise. Apples and peaches through the heat. Sometimes potatoes pulled from the soil for the orchard store. I packed fruit, thinned trees, and learnt how produce moves from branch to shelf through pack-houses, cold stores, and dispatch. That kind of work shaped me in ways I have carried ever since. Before I had any vocabulary for provenance or supply chains, I understood something far more immediate: that a bottle of wine on the shelf or a bag of apples at the supermarket was the result of weather, timing, labour, judgement, and luck all lining up. A mixture of science and hard work, sunshine and water, all coming together in this beautiful dance every harvest. I understood how fragile that dance was, too. A hailstorm, a late frost, a long dry spell. You could do everything right and still watch a season go sideways. Once you have been part of that work, even briefly, you stop seeing products as things that just appear.

Wine reinforced that way of seeing. I had grown up around it, worked in it, watched how a bottle could carry the fingerprint of a particular place and a particular year. Season, soil, sun, all folded into the story. Some of the language around wine is theatre, of course, but it is theatre that still points back to land, season, and labour. If you have ever picked grapes in the bay or worked a season on an orchard, you know that what ends up in someone's hand is the visible end of something much larger. That stayed with me when I left, because for a few seasons at least, I had been part of that chain myself.

Soda occupied a very different place in my life, and I want to be clear about that, because it matters. I loved soda as a kid, and I love it now. It belonged to trips to the dairy after school with a mate, beach days, road trips, hot afternoons, salty snacks, and cold cans passed around without ceremony. Some of the best memories of growing up have sugar on their breath. I never set out to challenge soda. I wanted to build something that could stand proudly among the brands and flavours I already loved.

Only later, when I started thinking about building a drinks brand, did I notice how much story soda sold and how little of it pointed back to ingredients, land, or supply chain. They gave you flavour as spectacle, happiness as branding, a lifestyle in aluminium shining your aspirations right back at you. The great soft drink brands were brilliant at selling a mood, a colour, a sense of belonging. They made those worlds feel real. But once I started looking at the category through a founder's eyes rather than a consumer's, that distance between the story and the substance began to look less like an oversight and more like an opportunity.

That lens did not come from nowhere. I had studied anthropology after high school, then worked in commercial storytelling on film productions, helping other brands say what they meant with conviction. Both left me with a habit of reading products the way you read a text: what is it saying, what is it hiding, who is it for. Over time, though, I found myself less interested in telling other people's stories and more interested in backing one of my own.

Golden came from two observations I could not shake. Soda sold enormous amounts of story while saying very little about what was actually in the can. Honey, meanwhile, had a remarkable story and real value in overseas markets, but had found its way into surprisingly few everyday products beyond the jar. For all its provenance and flavour, very little innovation had been done to expand the formats honey was sold in. It struck me that honey deserved to be a hero ingredient, not just a pantry staple.

The honey side took shape gradually. Mānuka had already been through its own gold rush in New Zealand, most of the conversation wrapped up in export pricing, health claims, and the value of the jar itself. But when I started speaking to people in the industry, what stood out was how little anyone had done with honey as an ingredient in other formats. Understandable. Beekeeping is hard enough without trying to invent consumer products on top of it. But it meant honey's story, flavour, and provenance were largely locked in the pantry.

I kept coming back to fruit, too. I had grown up around orchards and knew first-hand how good New Zealand fruit could be. So the two threads converged. What if a soda went completely the other way? What if it said, plainly and proudly, this is what is in the can? No secret formula. No fog. Just excellent ingredients, clearly named and clearly sourced.

At first, it was more instinct than plan. The idea became real in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂. I had been turning the question over for a while: could a soda be light, clean, and full-flavoured using only New Zealand honey and fruit? I wondered if the honey would drown out the fruit, or if the acidity would cut too sharply. It did neither. The soda was bright and refreshing, with a honey note you simply do not get from refined sugar. The pairing made sense, both in flavour and in story, and once I could taste that for myself, what had seemed unusual began to feel obvious.

From there, Golden took shape. Lemons from the East Coast groves of the North Island. Mānuka honey from hives around Golden Bay. Fruit and honey from places with character, in a drink that lets those places show through. Wine has always done this well: told you where something came from, and made you care. I wanted to bring that same openness into soda, a category that had never really bothered.I had no interest in dressing it up as self-improvement. Too much of the drinks market leans on nutritional theatre, diagnosing some problem in your life and presenting a can as the answer. Fix your gut. Fix your focus. Fix your energy. I wanted nothing to do with that. Make something delicious. Use ingredients that are honest and traceable. Let people see what they are drinking.

Golden is my answer to that.

", "width": "100%", "max_width": "normal", "alignment": "left", From 3316fd91162d68a12248fd7a2988308ff3365bb5 Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 12:27:33 +1300 Subject: [PATCH 1253/1275] Sync from Shopify live theme horizon/main (145519607947) --- apps/social-feed | 1 + 1 file changed, 1 insertion(+) create mode 160000 apps/social-feed diff --git a/apps/social-feed b/apps/social-feed new file mode 160000 index 000000000..b1114ad42 --- /dev/null +++ b/apps/social-feed @@ -0,0 +1 @@ +Subproject commit b1114ad42dd2235ee4ca1f7dbf83dccbd85d9e18 From bf32f32d726a0d94ff5a02c1f6256c88946ca103 Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 12:28:26 +1300 Subject: [PATCH 1254/1275] Revert "Sync from Shopify live theme horizon/main (145519607947)" This reverts commit 3316fd91162d68a12248fd7a2988308ff3365bb5. --- apps/social-feed | 1 - 1 file changed, 1 deletion(-) delete mode 160000 apps/social-feed diff --git a/apps/social-feed b/apps/social-feed deleted file mode 160000 index b1114ad42..000000000 --- a/apps/social-feed +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b1114ad42dd2235ee4ca1f7dbf83dccbd85d9e18 From 10ad01bc48285a2cdcd2caa8ed4de5229e656589 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 04:29:52 +0000 Subject: [PATCH 1255/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/page.shipping.json | 271 +++++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 templates/page.shipping.json diff --git a/templates/page.shipping.json b/templates/page.shipping.json new file mode 100644 index 000000000..a943cb405 --- /dev/null +++ b/templates/page.shipping.json @@ -0,0 +1,271 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + }, + "group_B4L8Dp": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_MMdTDx": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "link": "", + "image_ratio": "landscape", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_description_AJbKWt": { + "type": "product-description", + "name": "t:names.product_description", + "settings": { + "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_MMdTDx", + "product_description_AJbKWt" + ] + } + }, + "block_order": [ + "heading", + "page-content", + "group_B4L8Dp" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "full-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jq6wGK" + ] +} From 277f91ebc40175d966a3684f186adc4b35e53eeb Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 04:30:19 +0000 Subject: [PATCH 1256/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/page.returns.json | 271 ++++++++++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 templates/page.returns.json diff --git a/templates/page.returns.json b/templates/page.returns.json new file mode 100644 index 000000000..a943cb405 --- /dev/null +++ b/templates/page.returns.json @@ -0,0 +1,271 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

{{ closest.page.title }}

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + }, + "group_B4L8Dp": { + "type": "group", + "name": "t:names.group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 12, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "image_MMdTDx": { + "type": "image", + "name": "t:names.image", + "settings": { + "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", + "link": "", + "image_ratio": "landscape", + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "placeholder_color": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "product_description_AJbKWt": { + "type": "product-description", + "name": "t:names.product_description", + "settings": { + "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", + "width": "100%", + "max_width": "normal", + "alignment": "right", + "type_preset": "h6", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "image_MMdTDx", + "product_description_AJbKWt" + ] + } + }, + "block_order": [ + "heading", + "page-content", + "group_B4L8Dp" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_jq6wGK": { + "type": "section", + "blocks": { + "text_7En9gM": { + "type": "text", + "name": "t:names.heading", + "settings": { + "text": "

Starting Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "center", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_azwx93": { + "type": "text", + "name": "t:names.text", + "settings": { + "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 16, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "button_ekeYYJ": { + "type": "button", + "name": "t:names.button", + "settings": { + "label": "Shop Golden", + "link": "shopify://collections/all", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_7En9gM", + "text_azwx93", + "button_ekeYYJ" + ], + "name": "t:names.rich_text_section", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "center", + "vertical_alignment_flex_direction_column": "center", + "gap": 25, + "section_width": "full-width", + "section_height": "small", + "section_height_custom": 50, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 44, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + } + } + }, + "order": [ + "main", + "section_jq6wGK" + ] +} From 9507940817365339b32d27b8f3a5e7400a25a78c Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 17:36:41 +1300 Subject: [PATCH 1257/1275] Implement SEO phase 1 foundation --- docs/seo-phase1-admin-checklist.md | 57 ++ layout/theme.liquid | 2 + sections/header.liquid | 24 +- snippets/meta-tags.liquid | 181 ++++- snippets/structured-data-breadcrumbs.liquid | 82 ++ snippets/structured-data-website.liquid | 15 + templates/collection.json | 4 +- templates/index.json | 2 +- templates/page.faq.json | 6 +- templates/page.ingredients.json | 799 ++++++++------------ templates/page.returns.json | 377 ++++----- templates/page.shipping.json | 377 ++++----- templates/product.json | 2 +- 13 files changed, 1078 insertions(+), 850 deletions(-) create mode 100644 docs/seo-phase1-admin-checklist.md create mode 100644 snippets/structured-data-breadcrumbs.liquid create mode 100644 snippets/structured-data-website.liquid diff --git a/docs/seo-phase1-admin-checklist.md b/docs/seo-phase1-admin-checklist.md new file mode 100644 index 000000000..16d86b632 --- /dev/null +++ b/docs/seo-phase1-admin-checklist.md @@ -0,0 +1,57 @@ +# SEO Phase 1 Admin Checklist + +This theme work adds the template and schema changes for Phase 1. A few store-admin steps are still required before everything is live. + +## 1. Create crawlable policy pages + +Create these pages in Shopify Admin and assign the matching template: + +- Title: `Shipping` + Handle: `shipping` + Theme template: `page.shipping` + +- Title: `Returns` + Handle: `returns` + Theme template: `page.returns` + +The FAQ now links to these pages instead of blocked `/policies/...` URLs. + +## 2. Confirm page templates + +Confirm these pages are using the intended templates: + +- `Ingredients` -> `page.ingredients` +- `FAQ` -> `page.faq` + +## 3. Update collection SEO fields + +In Shopify Admin, fill in the SEO title and meta description fields for: + +- `honey-soda` +- `low-cal-manuka-soda` +- `lemon` +- `blackcurrant` +- `kanuka-kola` + +The theme now has fallback metadata, but native Shopify SEO fields should still be populated for the final copy. + +## 4. Add or verify social profile links + +In Theme Settings, fill in the brand social URLs you want exposed in Organization schema: + +- Facebook +- Instagram +- YouTube +- TikTok +- Pinterest +- X / Twitter +- LinkedIn + +## 5. Optional: enable noindex control + +If you want page-level noindex control in admin, create a boolean metafield definition: + +- Namespace and key: `custom.seo_noindex` +- Applies to: products, collections, pages, blogs, and articles + +When set to `true`, the theme outputs `noindex,follow` for that resource. diff --git a/layout/theme.liquid b/layout/theme.liquid index 96d652ee7..599ffa12c 100644 --- a/layout/theme.liquid +++ b/layout/theme.liquid @@ -24,6 +24,8 @@ > {%- render 'meta-tags' -%} + {%- render 'structured-data-website' -%} + {%- render 'structured-data-breadcrumbs' -%} {%- render 'stylesheets' -%} {%- render 'fonts' -%} {%- render 'scripts' -%} diff --git a/sections/header.liquid b/sections/header.liquid index d43b3fc10..71e41ba7f 100644 --- a/sections/header.liquid +++ b/sections/header.liquid @@ -175,15 +175,33 @@ endif %} +{% capture same_as_links_raw %} + {% if settings.social_facebook_link != blank %}{{ settings.social_facebook_link }}||{% endif %} + {% if settings.social_instagram_link != blank %}{{ settings.social_instagram_link }}||{% endif %} + {% if settings.social_youtube_link != blank %}{{ settings.social_youtube_link }}||{% endif %} + {% if settings.social_tiktok_link != blank %}{{ settings.social_tiktok_link }}||{% endif %} + {% if settings.social_pinterest_link != blank %}{{ settings.social_pinterest_link }}||{% endif %} + {% if settings.social_twitter_link != blank %}{{ settings.social_twitter_link }}||{% endif %} + {% if settings.social_linkedin_link != blank %}{{ settings.social_linkedin_link }}||{% endif %} +{% endcapture %} +{% assign same_as_links = same_as_links_raw | split: '||' | compact %} + @@ -200,7 +218,7 @@ data-scroll-direction="none" > {%- if request.page_type == 'index' -%} -

{{ shop.name }}

+

{{ shop.name }}

{%- endif -%} {% for row in rows %} {% liquid diff --git a/snippets/meta-tags.liquid b/snippets/meta-tags.liquid index e4bd0f0a2..579fb2154 100644 --- a/snippets/meta-tags.liquid +++ b/snippets/meta-tags.liquid @@ -17,10 +17,11 @@ > {%- liquid - assign og_title = page_title | default: shop.name + assign seo_title = page_title | default: shop.name + assign seo_description = page_description | default: shop.description | default: shop.name assign og_url = canonical_url | default: request.origin assign og_type = 'website' - assign og_description = page_description | default: shop.description | default: shop.name + assign seo_noindex = false if request.page_type == 'product' assign og_type = 'product' @@ -29,6 +30,157 @@ elsif request.page_type == 'password' assign og_url = request.origin endif + + case request.page_type + when 'product' + if product.metafields.custom.seo_noindex.value == true + assign seo_noindex = true + endif + + when 'article' + if article.metafields.custom.seo_noindex.value == true + assign seo_noindex = true + endif + + if seo_description == blank + assign seo_description = article.excerpt_or_content | strip_html | strip_newlines | truncatewords: 32 + endif + + when 'collection' + if collection.metafields.custom.seo_noindex.value == true + assign seo_noindex = true + endif + + if seo_title == collection.title + case collection.handle + when 'honey-soda' + assign seo_title = 'New Zealand Honey Soda Drinks | Golden' + when 'low-cal-manuka-soda' + assign seo_title = 'Low-Cal Mānuka Soda | Golden' + when 'lemon' + assign seo_title = 'Lemon Mānuka Soda | Golden' + when 'blackcurrant' + assign seo_title = 'Blackcurrant Mānuka Soda | Golden' + when 'kanuka-kola' + assign seo_title = 'Kānuka Kola | Golden' + when 'gift-card' + assign seo_title = 'Golden Gift Card | Golden' + endcase + endif + + if seo_description == blank + if collection.description != blank + assign seo_description = collection.description | strip_html | strip_newlines | truncatewords: 32 + else + case collection.handle + when 'honey-soda' + assign seo_description = 'Shop Golden honey sodas from New Zealand, sweetened with mānuka and kānuka honey and built around real fruit for a lighter, cleaner finish.' + when 'low-cal-manuka-soda' + assign seo_description = 'Explore Golden low-cal mānuka sodas from New Zealand, made with real fruit, no refined sugar, and a crisp clean finish.' + when 'lemon' + assign seo_description = 'Shop Lemon Mānuka Soda, Golden''s low-cal honey-sweetened lemonade made with real lemon juice and New Zealand mānuka honey.' + when 'blackcurrant' + assign seo_description = 'Shop Blackcurrant Mānuka Soda, a low-cal New Zealand honey soda balancing bold blackcurrant tang with mānuka honey.' + when 'kanuka-kola' + assign seo_description = 'Shop Kānuka Kola, Golden''s honey-sweetened New Zealand cola made with kānuka honey, kola nut extract, and lemon juice.' + when 'gift-card' + assign seo_description = 'Give Golden as a gift with a digital gift card for our New Zealand-made honey sodas.' + endcase + endif + endif + + when 'page' + if page.metafields.custom.seo_noindex.value == true + assign seo_noindex = true + endif + + if seo_title == page.title + case page.handle + when 'ingredients' + assign seo_title = 'Ingredients, Honey & Fruit Provenance | Golden' + when 'our-story' + assign seo_title = 'Our Story | New Zealand Honey Soda Brand | Golden' + when 'faq' + assign seo_title = 'FAQs | Golden Honey Soda | Golden' + when 'store-location' + assign seo_title = 'Where To Buy Golden | Stockists In New Zealand' + when 'wholesale' + assign seo_title = 'Wholesale Honey Soda | Golden' + when 'contact' + assign seo_title = 'Contact Golden | Customer Support' + when 'press' + assign seo_title = 'Press | Golden Honey Soda | Golden' + when 'save-bees' + assign seo_title = 'Bees & Pollination | Golden' + when 'careers' + assign seo_title = 'Careers | Golden' + when 'keepersclub' + assign seo_title = 'Keeper Club | Golden' + when 'sponsorship' + assign seo_title = 'Sponsorship | Golden' + endcase + endif + + if seo_description == blank + if page.content != blank + assign seo_description = page.content | strip_html | strip_newlines | truncatewords: 32 + else + case page.handle + when 'ingredients' + assign seo_description = 'Learn what goes into Golden: mānuka and kānuka honey, real New Zealand fruit, no refined sugar, and the sourcing standards behind our low-cal honey sodas.' + when 'our-story' + assign seo_description = 'Read how Golden started in Aotearoa and why we build low-cal sodas around New Zealand honey, fruit, and traceable local ingredients.' + when 'faq' + assign seo_description = 'Answers about Golden''s ingredients, honey, nutrition, sourcing, shipping, wholesale, and where to buy our New Zealand honey sodas.' + when 'store-location' + assign seo_description = 'Find Golden stockists and stores across New Zealand and discover where to buy our honey-sweetened sodas in person.' + when 'wholesale' + assign seo_description = 'Stock Golden''s New Zealand-made honey sodas. Wholesale information, ordering, and product details for cafes, retailers, and hospitality.' + when 'contact' + assign seo_description = 'Get in touch with Golden for customer support, stockist leads, wholesale questions, or general enquiries about our New Zealand honey sodas.' + when 'press' + assign seo_description = 'Press information, brand background, and assets for Golden, the New Zealand honey soda brand built around mānuka honey and local fruit.' + when 'save-bees' + assign seo_description = 'See how Golden thinks about bees, pollination, and the ecosystems that sit behind New Zealand honey and local fruit.' + when 'careers' + assign seo_description = 'Work with Golden, the New Zealand honey soda brand built around mānuka and kānuka honey, local fruit, and bold better-for-you drinks.' + when 'keepersclub' + assign seo_description = 'Join Keeper Club for early access, product news, and updates from Golden, the New Zealand honey soda brand built around local ingredients.' + when 'sponsorship' + assign seo_description = 'Talk to Golden about sponsorships, community partnerships, and collaborations aligned with our New Zealand honey soda brand.' + endcase + endif + endif + + when 'blog' + if blog.metafields.custom.seo_noindex.value == true + assign seo_noindex = true + endif + + if seo_title == blog.title + case blog.handle + when 'ingredients' + assign seo_title = 'Ingredients, Honey & Sourcing Notes | Golden' + when 'golden-hour' + assign seo_title = 'Golden Hour | News, Culture & Launch Updates | Golden' + endcase + endif + + if seo_description == blank + case blog.handle + when 'ingredients' + assign seo_description = 'Notes on mānuka honey, kānuka honey, fruit sourcing, ingredients, and what goes into Golden''s New Zealand-made honey sodas.' + when 'golden-hour' + assign seo_description = 'Golden Hour is our space for company news, product developments, cultural collaborations, and behind-the-scenes updates as Golden grows.' + endcase + endif + endcase + + if seo_description == blank + assign seo_description = shop.description | default: shop.name + endif + + assign seo_description = seo_description | strip_html | strip_newlines | replace: ' ', ' ' | strip %} {%- if page_image -%} - {{ page_title }} + {{ seo_title }} {%- if current_tags %} – tagged "{{ current_tags | join: ', ' }}"{% endif -%} {%- if current_page != 1 %} – Page {{ current_page }}{% endif -%} - {%- unless page_title contains shop.name %} – {{ shop.name }}{% endunless -%} + {%- unless seo_title contains shop.name %} – {{ shop.name }}{% endunless -%} -{% if page_description %} + + +{% if seo_noindex %} {% endif %} diff --git a/snippets/structured-data-breadcrumbs.liquid b/snippets/structured-data-breadcrumbs.liquid new file mode 100644 index 000000000..7526d41a5 --- /dev/null +++ b/snippets/structured-data-breadcrumbs.liquid @@ -0,0 +1,82 @@ +{% liquid + assign root_url = request.origin | append: routes.root_url +%} + +{% case request.page_type %} + {% when 'collection', 'product', 'article', 'page' %} + +{% endcase %} diff --git a/snippets/structured-data-website.liquid b/snippets/structured-data-website.liquid new file mode 100644 index 000000000..daad284b2 --- /dev/null +++ b/snippets/structured-data-website.liquid @@ -0,0 +1,15 @@ +{% if request.page_type == 'index' %} + +{% endif %} diff --git a/templates/collection.json b/templates/collection.json index db060dc31..6dcf70f09 100644 --- a/templates/collection.json +++ b/templates/collection.json @@ -16,7 +16,7 @@ "type": "text", "name": "Title", "settings": { - "text": "

Our Flavours

", + "text": "

{% case closest.collection.handle %}{% when 'honey-soda' %}New Zealand Honey Sodas{% when 'low-cal-manuka-soda' %}Low-Cal Mānuka Sodas{% when 'lemon' %}Lemon Mānuka Soda{% when 'blackcurrant' %}Blackcurrant Mānuka Soda{% when 'kanuka-kola' %}Kānuka Kola{% else %}{{ closest.collection.title }}{% endcase %}

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -42,7 +42,7 @@ "type": "text", "name": "Description", "settings": { - "text": "{{ closest.collection.description }}", + "text": "{% if closest.collection.description != blank %}{{ closest.collection.description }}{% else %}{% case closest.collection.handle %}{% when 'honey-soda' %}

Golden builds sparkling sodas around New Zealand honey and real fruit. This is the place to shop the full range, from bright mānuka lemon to bold blackcurrant and our honey-led take on kola.

{% when 'low-cal-manuka-soda' %}

Explore Golden's low-cal mānuka soda range: lighter-bodied sparkling drinks made in New Zealand with real fruit, no refined sugar, and a clean finish.

{% when 'lemon' %}

Lemon Mānuka Soda pairs fresh lemon juice with New Zealand mānuka honey for a rounded, crisp take on classic lemonade.

{% when 'blackcurrant' %}

Blackcurrant Mānuka Soda balances deep Otago blackcurrant intensity with the softer sweetness and character of New Zealand mānuka honey.

{% when 'kanuka-kola' %}

Kānuka Kola is Golden's New Zealand honey-led twist on cola, built with kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch finish.

{% endcase %}{% endif %}", "width": "fit-content", "max_width": "normal", "alignment": "left", diff --git a/templates/index.json b/templates/index.json index d1024f00d..64e5d2b95 100644 --- a/templates/index.json +++ b/templates/index.json @@ -114,7 +114,7 @@ "text_fBYKHx": { "type": "text", "settings": { - "text": "

Low-cal sparkling soda from Aotearoa, New Zealand. Sweetened with Golden Bay mānuka honey and flavoured with locally grown fruits

", + "text": "

Low-cal sparkling soda from Aotearoa, New Zealand. Sweetened with Golden Bay mānuka honey and flavoured with locally grown fruits

", "width": "100%", "max_width": "none", "alignment": "left", diff --git a/templates/page.faq.json b/templates/page.faq.json index 447d12d04..1c41d9204 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -2211,7 +2211,7 @@ "text_YhzN88": { "type": "text", "settings": { - "text": "

Shipping rates and any free-shipping thresholds are listed in our shipping policy and shown at checkout. Learn more: Shipping

", + "text": "

Shipping rates and any free-shipping thresholds are listed on our shipping page and shown at checkout. Learn more: Shipping

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2272,7 +2272,7 @@ "text_T8Jrzx": { "type": "text", "settings": { - "text": "

Timing depends on region and rural routes. We outline typical delivery windows in our shipping policy. Learn more: Shipping policy

", + "text": "

Timing depends on region and rural routes. We outline typical delivery windows on our shipping page. Learn more: Shipping

", "width": "100%", "max_width": "none", "alignment": "left", @@ -2333,7 +2333,7 @@ "text_KLrdk7": { "type": "text", "settings": { - "text": "

Email us ASAP with your order number and photos, and we’ll sort it quickly. Learn more: Returns / Contact: Contact

", + "text": "

Email us ASAP with your order number and photos, and we’ll sort it quickly. Learn more: Returns / Contact: Contact

", "width": "100%", "max_width": "none", "alignment": "left", diff --git a/templates/page.ingredients.json b/templates/page.ingredients.json index 88c27d3c6..c9ff38cf6 100644 --- a/templates/page.ingredients.json +++ b/templates/page.ingredients.json @@ -12,22 +12,48 @@ "main": { "type": "main-page", "blocks": { + "eyebrow": { + "type": "text", + "name": "Eyebrow", + "settings": { + "text": "

Inside the can

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, "heading": { "type": "text", - "name": "Title", + "name": "Heading", "settings": { "text": "

Ingredients

", "width": "100%", "max_width": "normal", "alignment": "left", "type_preset": "h2", - "font": "var(--font-primary--family)", - "font_size": "", + "font": "var(--font-body--family)", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "", + "color": "var(--color-foreground-heading)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -38,505 +64,318 @@ }, "blocks": {} }, - "page-content": { - "type": "page-content", - "settings": {}, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is built around a simple idea: use New Zealand honey and real fruit to make soda feel lighter, cleaner, and more rooted in place. This page is the public version of what we want customers, retailers, and search engines to understand clearly: what sweetens Golden, what flavours it, and what standards we use when we talk about ingredients.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, "blocks": {} - } - }, - "block_order": [ - "heading", - "page-content" - ], - "settings": { - "content_direction": "column", - "gap": 24, - "color_scheme": "", - "padding-block-start": 24, - "padding-block-end": 24 - } - }, - "hero_7Rjb99": { - "type": "hero", - "blocks": { - "group_BHaLjm": { - "type": "group", - "name": "t:names.group", + }, + "sweetens-heading": { + "type": "text", + "name": "Section heading", "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "flex-start", - "align_baseline": true, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 18, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

What sweetens Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "sweetens-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

We use mānuka and kānuka honey instead of refined sugar. Mānuka brings darker, more resinous depth; kānuka is lighter and more floral. We use each where it makes sense for flavour balance rather than treating honey like a background sweetener. For the exact ingredient order and definitive nutrition statement, always check the can and the relevant product page.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "group_gcJtqF": { - "type": "group", - "name": "t:names.group", - "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 6, - "width": "custom", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "text_CKrBf3": { - "type": "text", - "name": "t:names.heading", - "settings": { - "text": "

Ingredients

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "h2", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "text_CKrBf3" - ] - }, - "text_jcaAGH": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

We make things that work better and last longer. Our products solve real problems with clean design and honest materials.

", - "width": "fit-content", - "max_width": "none", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } + "blocks": {} + }, + "flavour-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

What flavours Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, - "block_order": [ - "group_gcJtqF", - "text_jcaAGH" - ] - } - }, - "block_order": [ - "group_BHaLjm" - ], - "name": "t:names.hero_bottom_aligned", - "settings": { - "media_type_1": "image", - "image_1": "shopify://shop_images/iStock-641225382.jpg", - "media_type_2": "image", - "link": "", - "open_in_new_tab": false, - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "flex-end", - "gap": 16, - "section_width": "full-width", - "section_height": "large", - "section_height_custom": 50, - "color_scheme": "scheme-5", - "toggle_overlay": true, - "overlay_color": "#00000026", - "overlay_style": "gradient", - "gradient_direction": "to top", - "blurred_reflection": false, - "reflection_opacity": 75, - "padding-block-start": 40, - "padding-block-end": 40 - } - }, - "section_jKDfRf": { - "type": "section", - "blocks": { - "group_jm3eVb": { - "type": "group", + "blocks": {} + }, + "flavour-copy": { + "type": "text", + "name": "Section copy", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "space-between", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 32, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fill", - "custom_height": 100, - "inherit_color_scheme": false, - "color_scheme": "scheme-5", - "background_media": "image", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "hero-apparel-1", + "text": "

Our core range is built around real New Zealand fruit and botanical ingredients. Lemon Mānuka Soda uses lemon juice. Blackcurrant Mānuka Soda is built around Central Otago blackcurrants. Kānuka Kola uses kola nut extract alongside lemon juice for its cola profile. Where we can, we lean on single-strength juice because it tastes closer to the fruit itself.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "accordion_Aa3UJH": { - "type": "accordion", - "name": "t:names.accordion", - "settings": { - "icon": "caret", - "dividers": true, - "type_preset": "h6", - "inherit_color_scheme": true, - "color_scheme": "", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": { - "accordion_row_dKYbRd": { - "type": "accordion_row", - "settings": { - "heading": "Refund Policy", - "right_heading": "", - "heading_links_enabled": false, - "heading_link": "shopify://policies/refund-policy", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "shared", - "color_scheme": "", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "text_AHwwCk": { - "type": "text", - "settings": { - "text": "

Our goal is for every customer to be totally satisfied with their purchase. If this isn't the case, let us know and we'll do our best to work with you to make it right.

", - "width": "100%", - "max_width": "none", - "alignment": "left", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "text_AHwwCk" - ] - }, - "accordion_row_tL6whA": { - "type": "accordion_row", - "settings": { - "heading": "Shipping", - "right_heading": "", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "split", - "color_scheme": "", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "text_WVyUeL": { - "type": "text", - "settings": { - "text": "

We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "text_WVyUeL" - ] - }, - "accordion_row_qEx4kN": { - "type": "accordion_row", - "settings": { - "heading": "Manufacturing", - "right_heading": "", - "heading_links_enabled": false, - "heading_link": "", - "right_heading_link": "", - "collapsible": true, - "open_by_default": false, - "group_mode": "split", - "color_scheme": "", - "hover_color_scheme": "", - "left_hover_color_scheme": "", - "right_hover_color_scheme": "", - "summary_padding_block_start": 16, - "summary_padding_block_end": 16, - "summary_padding_inline_start": 16, - "summary_padding_inline_end": 16, - "content_padding_block_start": 16, - "content_padding_block_end": 16, - "content_padding_inline_start": 16, - "content_padding_inline_end": 16, - "heading_type_preset": "", - "right_heading_type_preset": "match", - "heading_min_size": 1.1, - "heading_max_size": 1.6, - "icon": "none", - "width": 20 - }, - "blocks": { - "text_xnNT8G": { - "type": "text", - "settings": { - "text": "

Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } - }, - "block_order": [ - "text_xnNT8G" - ] - } - }, - "block_order": [ - "accordion_row_dKYbRd", - "accordion_row_tL6whA", - "accordion_row_qEx4kN" - ] - } + "blocks": {} + }, + "leaveout-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

What we leave out

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "leaveout-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden does not use refined sugar to sweeten the range. Our focus is on honey-led sweetness, acidity, fruit, and botanical flavour, with a clean finish rather than a syrupy one. We are careful not to overstate purity claims, so the can and product page remain the definitive source for each SKU.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nutrition-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

How we talk about nutrition

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nutrition-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Calories and honey content vary by flavour. Our Low-Cal Soda range sits around 59 to 63 calories per 330 mL can, and we call those numbers out clearly on pack and on product pages. If you are shopping for specific dietary needs, the can is the final reference point. Kānuka Kola contains barley and therefore gluten.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "made-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Made in New Zealand

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "made-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden is made in New Zealand. We work with local honey and fruit, and we care about traceability because provenance is part of the product, not just the marketing. If you want the product-by-product view, start with our three flavours above, then use the FAQ for broader sourcing and nutrition questions.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, - "block_order": [ - "accordion_Aa3UJH" - ] + "blocks": {} } }, "block_order": [ - "group_jm3eVb" + "eyebrow", + "heading", + "intro", + "sweetens-heading", + "sweetens-copy", + "flavour-heading", + "flavour-copy", + "leaveout-heading", + "leaveout-copy", + "nutrition-heading", + "nutrition-copy", + "made-heading", + "made-copy" ], - "name": "t:names.split_showcase", "settings": { - "content_direction": "row", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "gap": 0, - "section_width": "full-width", - "section_height": "", - "section_height_custom": 50, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "split_divider_color": "#d9d9d9", - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "content_direction": "column", + "gap": 12, + "color_scheme": "scheme-1", + "padding-block-start": 44, + "padding-block-end": 44 } } }, "order": [ - "main", - "hero_7Rjb99", - "section_jKDfRf" + "main" ] } diff --git a/templates/page.returns.json b/templates/page.returns.json index a943cb405..d243bb37a 100644 --- a/templates/page.returns.json +++ b/templates/page.returns.json @@ -14,15 +14,15 @@ "blocks": { "heading": { "type": "text", - "name": "Title", + "name": "Heading", "settings": { - "text": "

{{ closest.page.title }}

", + "text": "

Returns

", "width": "100%", - "max_width": "none", + "max_width": "normal", "alignment": "left", - "type_preset": "h3", - "font": "var(--font-primary--family)", - "font_size": "", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", @@ -38,134 +38,144 @@ }, "blocks": {} }, - "page-content": { - "type": "page-content", - "settings": {}, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is a food and beverage product, so returns are handled differently from general merchandise. This page explains how we deal with damaged items, incorrect orders, and issues that need fast support.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, "blocks": {} }, - "group_B4L8Dp": { - "type": "group", - "name": "t:names.group", + "damaged-heading": { + "type": "text", + "name": "Section heading", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

Damaged or incorrect orders

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "damaged-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

If something arrives damaged, leaking, or not what you ordered, contact us as soon as possible with your order number and clear photos. We will review the issue and make it right where appropriate.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "image_MMdTDx": { - "type": "image", - "name": "t:names.image", - "settings": { - "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", - "link": "", - "image_ratio": "landscape", - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fill", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "product_description_AJbKWt": { - "type": "product-description", - "name": "t:names.product_description", - "settings": { - "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", - "width": "100%", - "max_width": "normal", - "alignment": "right", - "type_preset": "h6", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } + "blocks": {} + }, + "mind-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Change of mind

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, - "block_order": [ - "image_MMdTDx", - "product_description_AJbKWt" - ] - } - }, - "block_order": [ - "heading", - "page-content", - "group_B4L8Dp" - ], - "settings": { - "content_direction": "column", - "gap": 16, - "color_scheme": "scheme-6", - "padding-block-start": 44, - "padding-block-end": 44 - } - }, - "section_jq6wGK": { - "type": "section", - "blocks": { - "text_7En9gM": { + "blocks": {} + }, + "mind-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Because Golden is a consumable product, change-of-mind returns are not automatically treated the same way as unopened general retail goods. If you have an issue, get in touch before sending anything back so we can confirm the right next step.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "include-heading": { "type": "text", - "name": "t:names.heading", + "name": "Section heading", "settings": { - "text": "

Starting Golden

", + "text": "

What to include when you contact us

", "width": "100%", "max_width": "normal", - "alignment": "center", + "alignment": "left", "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", @@ -178,21 +188,21 @@ "background_color": "#00000026", "corner_radius": 0, "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} }, - "text_azwx93": { + "include-copy": { "type": "text", - "name": "t:names.text", + "name": "Section copy", "settings": { - "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "text": "

Please include your order number, the email used at checkout, a short description of the issue, and photos where relevant. The clearer the first message, the faster we can sort it.

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "paragraph", + "type_preset": "rte", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -203,69 +213,88 @@ "background": false, "background_color": "#00000026", "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "resolution-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

How refunds or replacements are handled

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} }, - "button_ekeYYJ": { - "type": "button", - "name": "t:names.button", + "resolution-copy": { + "type": "text", + "name": "Section copy", "settings": { - "label": "Shop Golden", - "link": "shopify://collections/all", - "open_in_new_tab": true, - "style_class": "link", - "width": "fit-content", - "custom_width": 100, - "width_mobile": "fit-content", - "custom_width_mobile": 100 + "text": "

If a claim is approved, we may offer a replacement, store credit, or refund depending on the issue and stock availability. If you are unsure whether your issue belongs here or on the shipping page, contact us and we will point you to the fastest path.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} } }, "block_order": [ - "text_7En9gM", - "text_azwx93", - "button_ekeYYJ" + "heading", + "intro", + "damaged-heading", + "damaged-copy", + "mind-heading", + "mind-copy", + "include-heading", + "include-copy", + "resolution-heading", + "resolution-copy" ], - "name": "t:names.rich_text_section", "settings": { "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "gap": 25, - "section_width": "full-width", - "section_height": "small", - "section_height_custom": 50, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "split_divider_color": "#d9d9d9", - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", + "gap": 12, + "color_scheme": "scheme-1", "padding-block-start": 44, - "padding-block-end": 24, - "padding-inline-start": 0, - "padding-inline-end": 0 + "padding-block-end": 44 } } }, "order": [ - "main", - "section_jq6wGK" + "main" ] } diff --git a/templates/page.shipping.json b/templates/page.shipping.json index a943cb405..5874f6c70 100644 --- a/templates/page.shipping.json +++ b/templates/page.shipping.json @@ -14,15 +14,15 @@ "blocks": { "heading": { "type": "text", - "name": "Title", + "name": "Heading", "settings": { - "text": "

{{ closest.page.title }}

", + "text": "

Shipping

", "width": "100%", - "max_width": "none", + "max_width": "normal", "alignment": "left", - "type_preset": "h3", - "font": "var(--font-primary--family)", - "font_size": "", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", @@ -38,134 +38,144 @@ }, "blocks": {} }, - "page-content": { - "type": "page-content", - "settings": {}, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

This page is the crawlable version of our shipping policy for customers and search engines. Checkout remains the live source for exact charges, but this page explains how Golden handles dispatch, delivery timing, rural orders, and what to do if something goes wrong.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, "blocks": {} }, - "group_B4L8Dp": { - "type": "group", - "name": "t:names.group", + "dispatch-heading": { + "type": "text", + "name": "Section heading", "settings": { - "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "flex-start", - "vertical_alignment_flex_direction_column": "center", - "enable_sticky": false, - "sticky_offset": 0, - "gap": 12, - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fit", - "custom_height": 100, - "inherit_color_scheme": true, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", - "link": "", - "open_in_new_tab": false, - "placeholder": "", + "text": "

Dispatch windows

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "dispatch-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

We aim to dispatch orders promptly after they are placed. Processing times can move around public holidays, product launches, and wholesale demand, so checkout timing and email updates remain the live source once an order is placed.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 0, "padding-block-end": 0, "padding-inline-start": 0, "padding-inline-end": 0 }, - "blocks": { - "image_MMdTDx": { - "type": "image", - "name": "t:names.image", - "settings": { - "image": "shopify://shop_images/Me_and_James_Small_89ee07dc-f60c-40e3-9291-e32b07895cb1.webp", - "link": "", - "image_ratio": "landscape", - "width": "fill", - "custom_width": 100, - "width_mobile": "fill", - "custom_width_mobile": 100, - "height": "fill", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - }, - "product_description_AJbKWt": { - "type": "product-description", - "name": "t:names.product_description", - "settings": { - "text": "

My mate James in green, me, Morg, founder of Golden, on the left.

", - "width": "100%", - "max_width": "normal", - "alignment": "right", - "type_preset": "h6", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} - } + "blocks": {} + }, + "timing-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Delivery timing

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, - "block_order": [ - "image_MMdTDx", - "product_description_AJbKWt" - ] - } - }, - "block_order": [ - "heading", - "page-content", - "group_B4L8Dp" - ], - "settings": { - "content_direction": "column", - "gap": 16, - "color_scheme": "scheme-6", - "padding-block-start": 44, - "padding-block-end": 44 - } - }, - "section_jq6wGK": { - "type": "section", - "blocks": { - "text_7En9gM": { + "blocks": {} + }, + "timing-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Delivery times depend on region and carrier conditions. Urban addresses will generally move faster than rural addresses, and longer-distance routes can take more time than local shipments. We send tracking details once an order is on the move.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "rates-heading": { "type": "text", - "name": "t:names.heading", + "name": "Section heading", "settings": { - "text": "

Starting Golden

", + "text": "

Shipping rates

", "width": "100%", "max_width": "normal", - "alignment": "center", + "alignment": "left", "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", @@ -178,21 +188,21 @@ "background_color": "#00000026", "corner_radius": 0, "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} }, - "text_azwx93": { + "rates-copy": { "type": "text", - "name": "t:names.text", + "name": "Section copy", "settings": { - "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", + "text": "

Shipping rates and any free-shipping thresholds are shown at checkout. That is the live source because rates can change with destination, order size, and promotional offers.

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "paragraph", + "type_preset": "rte", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -203,69 +213,88 @@ "background": false, "background_color": "#00000026", "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "issues-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Damaged, missing, or delayed orders

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} }, - "button_ekeYYJ": { - "type": "button", - "name": "t:names.button", + "issues-copy": { + "type": "text", + "name": "Section copy", "settings": { - "label": "Shop Golden", - "link": "shopify://collections/all", - "open_in_new_tab": true, - "style_class": "link", - "width": "fit-content", - "custom_width": 100, - "width_mobile": "fit-content", - "custom_width_mobile": 100 + "text": "

If your order arrives damaged, incomplete, or unusually delayed, email us with your order number and photos if relevant. The fastest way to resolve an issue is to contact us as soon as you spot it. For returns and replacements, use our returns page alongside the details in your order confirmation.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 }, "blocks": {} } }, "block_order": [ - "text_7En9gM", - "text_azwx93", - "button_ekeYYJ" + "heading", + "intro", + "dispatch-heading", + "dispatch-copy", + "timing-heading", + "timing-copy", + "rates-heading", + "rates-copy", + "issues-heading", + "issues-copy" ], - "name": "t:names.rich_text_section", "settings": { "content_direction": "column", - "vertical_on_mobile": true, - "horizontal_alignment": "flex-start", - "vertical_alignment": "center", - "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", - "vertical_alignment_flex_direction_column": "center", - "gap": 25, - "section_width": "full-width", - "section_height": "small", - "section_height_custom": 50, - "color_scheme": "", - "background_media": "none", - "video_position": "cover", - "background_image_position": "cover", - "border": "none", - "border_width": 1, - "border_opacity": 100, - "split_divider_color": "#d9d9d9", - "border_radius": 0, - "toggle_overlay": false, - "overlay_color": "#00000026", - "overlay_style": "solid", - "gradient_direction": "to top", + "gap": 12, + "color_scheme": "scheme-1", "padding-block-start": 44, - "padding-block-end": 24, - "padding-inline-start": 0, - "padding-inline-end": 0 + "padding-block-end": 44 } } }, "order": [ - "main", - "section_jq6wGK" + "main" ] } diff --git a/templates/product.json b/templates/product.json index 6bd2dd5f3..b674fcf24 100644 --- a/templates/product.json +++ b/templates/product.json @@ -113,7 +113,7 @@ "type": "text", "name": "t:names.title", "settings": { - "text": "

{{ closest.product.title }}

", + "text": "

{{ closest.product.title }}

", "width": "100%", "max_width": "normal", "alignment": "left", From bdbcc657c581a1bf19be40970462e7f9e603ae44 Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 17:46:31 +1300 Subject: [PATCH 1258/1275] Add SEO phase 2 authority content cluster --- docs/seo-phase2-admin-checklist.md | 61 +++ snippets/meta-tags.liquid | 53 ++- templates/blog.json | 29 +- templates/page.faq.json | 10 +- templates/page.how-golden-is-made.json | 381 ++++++++++++++++++ templates/page.ingredients.json | 56 ++- templates/page.manuka-vs-kanuka.json | 381 ++++++++++++++++++ templates/page.new-zealand-honey.json | 381 ++++++++++++++++++ .../page.where-our-honey-comes-from.json | 381 ++++++++++++++++++ 9 files changed, 1725 insertions(+), 8 deletions(-) create mode 100644 docs/seo-phase2-admin-checklist.md create mode 100644 templates/page.how-golden-is-made.json create mode 100644 templates/page.manuka-vs-kanuka.json create mode 100644 templates/page.new-zealand-honey.json create mode 100644 templates/page.where-our-honey-comes-from.json diff --git a/docs/seo-phase2-admin-checklist.md b/docs/seo-phase2-admin-checklist.md new file mode 100644 index 000000000..371c5594d --- /dev/null +++ b/docs/seo-phase2-admin-checklist.md @@ -0,0 +1,61 @@ +# SEO Phase 2 Admin Checklist + +Phase 2 adds the first authority-content cluster in the theme. These pages need to exist in Shopify Admin before the links and metadata can resolve on the live store. + +## 1. Create the authority pages + +Create these pages and assign the matching template: + +- Title: `New Zealand Honey In Golden` + Handle: `new-zealand-honey` + Theme template: `page.new-zealand-honey` + +- Title: `Mānuka vs Kānuka Honey` + Handle: `manuka-vs-kanuka` + Theme template: `page.manuka-vs-kanuka` + +- Title: `Where Our Honey Comes From` + Handle: `where-our-honey-comes-from` + Theme template: `page.where-our-honey-comes-from` + +- Title: `How Golden Is Made` + Handle: `how-golden-is-made` + Theme template: `page.how-golden-is-made` + +## 2. Place at least one authority link in navigation + +Recommended first placements: + +- Footer menu: `New Zealand Honey In Golden` +- Footer menu: `Mānuka vs Kānuka Honey` +- Optional main menu or About submenu: `How Golden Is Made` + +The pages are already linked from `Ingredients` and `FAQ`, but navigation links help discovery and crawl depth. + +## 3. Use the Ingredients blog as the editorial layer + +The `ingredients` blog template now has an intro. Publish at least two real articles so the blog is not an empty shell: + +- `What is mānuka honey?` +- `Why Golden uses honey instead of refined sugar` + +If you want more, the next best articles are: + +- `Mānuka vs kānuka honey` +- `Where Golden's fruit comes from` +- `What makes a better-for-you soda` + +## 4. Keep SEO fields aligned with the page intent + +The theme now includes fallback titles and descriptions for the new pages, but the final production move should still be: + +- confirm each page title matches the H1 +- confirm Shopify SEO title and meta description match the page intent +- avoid rewriting these pages into generic founder-story copy + +## 5. Keep claims tight + +These pages are written to build authority without drifting into unsupported health claims. Keep that standard when editing: + +- talk about flavour, provenance, sourcing, process, and nutrition facts +- avoid disease, treatment, or therapeutic promises unless legally supported diff --git a/snippets/meta-tags.liquid b/snippets/meta-tags.liquid index 579fb2154..09027bc44 100644 --- a/snippets/meta-tags.liquid +++ b/snippets/meta-tags.liquid @@ -32,11 +32,42 @@ endif case request.page_type + when 'index' + if seo_title == shop.name + assign seo_title = 'New Zealand Honey Soda & Low-Cal Sparkling Drinks | Golden' + endif + + if seo_description == blank or seo_description == shop.description or seo_description == shop.name + assign seo_description = 'Golden makes low-cal sparkling drinks in New Zealand, sweetened with mānuka and kānuka honey and flavoured with real local fruit.' + endif + when 'product' if product.metafields.custom.seo_noindex.value == true assign seo_noindex = true endif + if seo_title == product.title + case product.handle + when 'golden-lemon-manuka' + assign seo_title = 'Lemon Mānuka Soda | New Zealand Honey Soda | Golden' + when 'blackcurrant-manuka-soda' + assign seo_title = 'Blackcurrant Mānuka Soda | New Zealand Honey Soda | Golden' + when 'kanuka-kola' + assign seo_title = 'Kānuka Kola | Honey-Sweetened New Zealand Cola | Golden' + endcase + endif + + if seo_description == blank + case product.handle + when 'golden-lemon-manuka' + assign seo_description = 'Shop Lemon Mānuka Soda, Golden''s low-cal sparkling drink made in New Zealand with real lemon juice and mānuka honey.' + when 'blackcurrant-manuka-soda' + assign seo_description = 'Shop Blackcurrant Mānuka Soda, a low-cal New Zealand honey soda built with Otago blackcurrants and mānuka honey.' + when 'kanuka-kola' + assign seo_description = 'Shop Kānuka Kola, Golden''s honey-sweetened New Zealand cola made with kānuka honey, kola nut extract, and lemon juice.' + endcase + endif + when 'article' if article.metafields.custom.seo_noindex.value == true assign seo_noindex = true @@ -98,10 +129,20 @@ case page.handle when 'ingredients' assign seo_title = 'Ingredients, Honey & Fruit Provenance | Golden' + when 'honey' + assign seo_title = 'New Zealand Honey In Golden | Mānuka, Kānuka & Provenance | Golden' + when 'new-zealand-honey' + assign seo_title = 'New Zealand Honey In Golden | Mānuka, Kānuka & Provenance | Golden' + when 'manuka-vs-kanuka' + assign seo_title = 'Mānuka vs Kānuka Honey | What''s the Difference? | Golden' + when 'where-our-honey-comes-from' + assign seo_title = 'Where Our Honey Comes From | New Zealand Sourcing | Golden' + when 'how-golden-is-made' + assign seo_title = 'How Golden Is Made | New Zealand Honey Soda Process | Golden' when 'our-story' assign seo_title = 'Our Story | New Zealand Honey Soda Brand | Golden' when 'faq' - assign seo_title = 'FAQs | Golden Honey Soda | Golden' + assign seo_title = 'FAQs | Ingredients, Orders & Stockists | Golden' when 'store-location' assign seo_title = 'Where To Buy Golden | Stockists In New Zealand' when 'wholesale' @@ -128,6 +169,16 @@ case page.handle when 'ingredients' assign seo_description = 'Learn what goes into Golden: mānuka and kānuka honey, real New Zealand fruit, no refined sugar, and the sourcing standards behind our low-cal honey sodas.' + when 'honey' + assign seo_description = 'Learn why Golden builds soda around New Zealand honey, how mānuka and kānuka differ, and what provenance means in our drinks.' + when 'new-zealand-honey' + assign seo_description = 'Learn why Golden builds soda around New Zealand honey, how mānuka and kānuka differ, and what provenance means in our drinks.' + when 'manuka-vs-kanuka' + assign seo_description = 'A plain-English guide to mānuka vs kānuka honey, covering flavour, provenance, grading, and why Golden uses both.' + when 'where-our-honey-comes-from' + assign seo_description = 'See how Golden thinks about New Zealand honey sourcing, traceability, seasonal supply, and choosing mānuka and kānuka for flavour.' + when 'how-golden-is-made' + assign seo_description = 'Follow how Golden turns New Zealand honey, fruit, water, and carbonation into a low-cal sparkling soda made in Aotearoa.' when 'our-story' assign seo_description = 'Read how Golden started in Aotearoa and why we build low-cal sodas around New Zealand honey, fruit, and traceable local ingredients.' when 'faq' diff --git a/templates/blog.json b/templates/blog.json index 0b0aeaa62..9187568fd 100644 --- a/templates/blog.json +++ b/templates/blog.json @@ -38,6 +38,32 @@ }, "blocks": {} }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "{% case closest.blog.handle %}{% when 'ingredients' %}

The Ingredients Journal is where Golden explains New Zealand honey, mānuka vs kānuka, fruit provenance, and how our low-cal sparkling drinks are made.

{% when 'golden-hour' %}

Golden Hour is where we share product news, collaborations, launches, and the people and places shaping the brand.

{% endcase %}", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 24, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, "static-blog-post-card": { "type": "_blog-post-card", "static": true, @@ -118,7 +144,8 @@ } }, "block_order": [ - "title" + "title", + "intro" ], "settings": { "color_scheme": "", diff --git a/templates/page.faq.json b/templates/page.faq.json index 1c41d9204..6058e3442 100644 --- a/templates/page.faq.json +++ b/templates/page.faq.json @@ -218,7 +218,7 @@ "text_AHwwCk": { "type": "text", "settings": { - "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn More: Ingredients

", + "text": "

Golden is low-calorie, lightly sparkling soda sweetened with New Zealand honey and built with real fruit and juice. Clean, bright flavour with a crisp finish. Learn more: Ingredients / New Zealand Honey

", "width": "100%", "max_width": "none", "alignment": "left", @@ -279,7 +279,7 @@ "text_WVyUeL": { "type": "text", "settings": { - "text": "

We use honey instead of refined sugar and let real fruit and juice do the heavy lifting. It’s full-flavour, without the syrupy finish. Learn more about our Ingredients here.

", + "text": "

We use honey instead of refined sugar and let real fruit and juice do the heavy lifting. It’s full-flavour, without the syrupy finish. Learn more about our ingredients and why New Zealand honey matters in this guide.

", "width": "100%", "max_width": "none", "alignment": "left", @@ -577,7 +577,7 @@ "text_cFQKU3": { "type": "text", "settings": { - "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. Learn more

", + "text": "

Honey. We use mānuka and kānuka honey for a softer sweetness and more character than refined sugar. New Zealand Honey / Mānuka vs Kānuka

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1246,7 +1246,7 @@ "text_yk9XUV": { "type": "text", "settings": { - "text": "

Golden is made in New Zealand. We build our drinks around local honey and fruit, and we work with trusted local partners to turn those ingredients into something clean, bright, and properly refreshing. We care about traceability because it keeps the product honest, and because good ingredients deserve to be treated like the main event, not a flavouring. Learn more: Ingredients

", + "text": "

Golden is made in New Zealand. We build our drinks around local honey and fruit, and we work with trusted local partners to turn those ingredients into something clean, bright, and properly refreshing. We care about traceability because it keeps the product honest, and because good ingredients deserve to be treated like the main event, not a flavouring. Learn more: How Golden Is Made

", "width": "100%", "max_width": "none", "alignment": "left", @@ -1429,7 +1429,7 @@ "text_F7FC4H": { "type": "text", "settings": { - "text": "

They’re both New Zealand native honeys, but they’re made from different trees and they taste different. Mānuka tends to be darker and more intense, and it’s the one that can be independently graded and certified under the UMF™ system. Kānuka is typically lighter and more floral. We use both for a softer sweetness and more flavour than refined sugar. Learn more: Ingredients

", + "text": "

They’re both New Zealand native honeys, but they’re made from different trees and they taste different. Mānuka tends to be darker and more intense, and it’s the one that can be independently graded and certified under the UMF™ system. Kānuka is typically lighter and more floral. We use both for a softer sweetness and more flavour than refined sugar. Learn more: Mānuka vs Kānuka

", "width": "100%", "max_width": "none", "alignment": "left", diff --git a/templates/page.how-golden-is-made.json b/templates/page.how-golden-is-made.json new file mode 100644 index 000000000..f598fd8fa --- /dev/null +++ b/templates/page.how-golden-is-made.json @@ -0,0 +1,381 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "eyebrow": { + "type": "text", + "name": "Eyebrow", + "settings": { + "text": "

Process note

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "heading": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

How Golden Is Made

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is made by starting with ingredients that have real flavour on their own, then balancing them into a sparkling drink that feels clean rather than syrupy. This page is the public process view: enough detail to build trust, without pretending that every manufacturing detail belongs in a consumer-facing SEO page.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "ingredients-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

It starts with honey, fruit, and water

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "ingredients-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden begins with New Zealand honey, real fruit or botanical flavour inputs, water, acidity, and carbonation. That sounds simple, but the hard part is getting the balance right. Honey behaves differently from refined sugar, and fruit behaves differently from a generic flavour system. That is why our process starts with ingredients, not with a marketing brief.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "balance-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Then the flavour balance gets refined

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "balance-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden is designed to finish crisp, not sticky. That means the honey level, fruit intensity, acidity, and carbonation all have to work together. The process is part formulation and part restraint: enough honey to feel rounded, enough fruit to taste real, enough sparkle to keep the whole thing bright. The final flavour has to feel like a drink you want again, not a proof-of-concept ingredient demo.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "packing-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Carbonation, packing, and consistency

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "packing-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Once the recipe is locked, the goal is to protect flavour and keep the result consistent from can to can. That means working with trusted production partners, following food-safety standards, and making sure the finished product actually tastes like the concept promised. Customers should not need to guess whether Golden is a serious drinks brand. The process should make that clear.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nz-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Why made in New Zealand matters

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nz-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Made in New Zealand is not just a patriotic line on the can. It connects the product to the honey, the fruit, the people, and the standards behind it. For search, that helps Golden compete as a trusted New Zealand honey soda brand rather than just another flavoured drink. For customers, it turns provenance into something concrete.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

See the ingredients in context

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Read Ingredients for the ingredient overview, New Zealand Honey In Golden for the honey rationale, and shop the range to see how the process lands in the finished drinks.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "eyebrow", + "heading", + "intro", + "ingredients-heading", + "ingredients-copy", + "balance-heading", + "balance-copy", + "packing-heading", + "packing-copy", + "nz-heading", + "nz-copy", + "next-heading", + "next-copy" + ], + "settings": { + "content_direction": "column", + "gap": 12, + "color_scheme": "scheme-1", + "padding-block-start": 44, + "padding-block-end": 44 + } + } + }, + "order": [ + "main" + ] +} diff --git a/templates/page.ingredients.json b/templates/page.ingredients.json index c9ff38cf6..3a91d36cd 100644 --- a/templates/page.ingredients.json +++ b/templates/page.ingredients.json @@ -349,6 +349,58 @@ "padding-inline-end": 0 }, "blocks": {} + }, + "deeper-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Go deeper

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "deeper-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

If you are here for the authority layer rather than just the ingredient label, read our guides to New Zealand honey in Golden, mānuka vs kānuka, where our honey comes from, and how Golden is made.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} } }, "block_order": [ @@ -364,7 +416,9 @@ "nutrition-heading", "nutrition-copy", "made-heading", - "made-copy" + "made-copy", + "deeper-heading", + "deeper-copy" ], "settings": { "content_direction": "column", diff --git a/templates/page.manuka-vs-kanuka.json b/templates/page.manuka-vs-kanuka.json new file mode 100644 index 000000000..a27857958 --- /dev/null +++ b/templates/page.manuka-vs-kanuka.json @@ -0,0 +1,381 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "eyebrow": { + "type": "text", + "name": "Eyebrow", + "settings": { + "text": "

Plain-English guide

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "heading": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

Mānuka vs Kānuka Honey

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Mānuka and kānuka are both native New Zealand honeys, but they are not interchangeable. They come from different trees, they taste different, and they carry different reputations in the market. Golden uses both because the point is not to chase a buzzword. The point is to use the right honey for the right flavour.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "trees-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Same country, different trees

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "trees-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Mānuka honey comes from the mānuka tree. Kānuka honey comes from the kānuka tree. Both are part of Aotearoa's native landscape, but the honeys they produce are distinct enough that anyone talking seriously about flavour should treat them separately.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "taste-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

How they taste

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "taste-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Mānuka usually has a darker, stronger profile with more earthy or resinous depth. Kānuka is generally lighter, softer, and more floral. That is why Golden does not treat honey as a neutral sweetener. It changes the shape of the drink. You can feel that most clearly across Lemon Mānuka Soda, Blackcurrant Mānuka Soda, and Kānuka Kola.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "grading-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Grading, certification, and reputation

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "grading-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Mānuka is the New Zealand honey most commonly discussed in connection with grading and certification systems such as UMF or MGO. Kānuka is usually talked about less in that language and more in terms of flavour and style. For Golden, the important point is not to borrow health-market prestige. It is to be clear about the ingredient and honest about why it is there.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "golden-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Why Golden uses both

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "golden-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden uses mānuka where we want more depth and character. We use kānuka where a lighter floral sweetness serves the recipe better. That decision is about finished flavour, not marketing hierarchy. If you want the bigger provenance picture, read New Zealand Honey In Golden and Where Our Honey Comes From.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Read next

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

For the sourcing view, go to Where Our Honey Comes From. For the brand-level explanation, go to New Zealand Honey In Golden. To see the flavour differences in practice, shop the range.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "eyebrow", + "heading", + "intro", + "trees-heading", + "trees-copy", + "taste-heading", + "taste-copy", + "grading-heading", + "grading-copy", + "golden-heading", + "golden-copy", + "next-heading", + "next-copy" + ], + "settings": { + "content_direction": "column", + "gap": 12, + "color_scheme": "scheme-1", + "padding-block-start": 44, + "padding-block-end": 44 + } + } + }, + "order": [ + "main" + ] +} diff --git a/templates/page.new-zealand-honey.json b/templates/page.new-zealand-honey.json new file mode 100644 index 000000000..91cdddbe4 --- /dev/null +++ b/templates/page.new-zealand-honey.json @@ -0,0 +1,381 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "eyebrow": { + "type": "text", + "name": "Eyebrow", + "settings": { + "text": "

Authority guide

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "heading": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

New Zealand Honey In Golden

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is not a soda brand that happens to add honey at the end. We build the range around New Zealand honey from the start because it changes the flavour, the finish, and the provenance story. This page explains why honey matters in Golden, which honeys we use, and how we talk about them without drifting into vague wellness language or overclaiming.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "why-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Why honey sits at the centre

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "why-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Honey does more than sweeten Golden. It gives the drinks a softer, rounder finish than refined sugar and it ties the brand directly to a real New Zealand ingredient category with global recognition. That matters for flavour, but it also matters for trust. When people search for a New Zealand honey drink, we want the answer to be obvious and defensible.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "types-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Which honeys we use

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "types-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden uses mānuka and kānuka honey. They are both native New Zealand honeys, but they do not taste the same. Mānuka tends to be darker, richer, and more resinous. Kānuka is usually lighter and more floral. We choose between them for flavour balance, not because one sounds more fashionable than the other. If you want the side-by-side explanation, read our mānuka vs kānuka guide.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "provenance-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Provenance matters more than buzzwords

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "provenance-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

For Golden, provenance means knowing that the honey is from New Zealand, understanding the style of honey we are using, and keeping the product story grounded in traceable ingredients rather than lifestyle fluff. Supply can move with season and harvest conditions, so the can label and the relevant product page remain the definitive source for any SKU-specific ingredient statement. If you want more detail on sourcing, start with where our honey comes from.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "claims-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

What we do and do not claim

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "claims-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

We talk about honey in Golden in terms of flavour, sourcing, ingredient quality, and product philosophy. We do not use this site to make broad medical or therapeutic claims about the drinks. That keeps the content more credible for customers and more durable for search. The point is simple: Golden is a New Zealand honey soda brand with real ingredient choices, not a soft drink dressed up in borrowed wellness language.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Keep reading

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Go deeper with our guides to mānuka vs kānuka, where our honey comes from, and how Golden is made. Or shop the range in New Zealand Honey Sodas.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "eyebrow", + "heading", + "intro", + "why-heading", + "why-copy", + "types-heading", + "types-copy", + "provenance-heading", + "provenance-copy", + "claims-heading", + "claims-copy", + "next-heading", + "next-copy" + ], + "settings": { + "content_direction": "column", + "gap": 12, + "color_scheme": "scheme-1", + "padding-block-start": 44, + "padding-block-end": 44 + } + } + }, + "order": [ + "main" + ] +} diff --git a/templates/page.where-our-honey-comes-from.json b/templates/page.where-our-honey-comes-from.json new file mode 100644 index 000000000..04cf80ee1 --- /dev/null +++ b/templates/page.where-our-honey-comes-from.json @@ -0,0 +1,381 @@ +/* + * ------------------------------------------------------------ + * IMPORTANT: The contents of this file are auto-generated. + * + * This file may be updated by the Shopify admin theme editor + * or related systems. Please exercise caution as any changes + * made to this file may be overwritten. + * ------------------------------------------------------------ + */ +{ + "sections": { + "main": { + "type": "main-page", + "blocks": { + "eyebrow": { + "type": "text", + "name": "Eyebrow", + "settings": { + "text": "

Sourcing note

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h6", + "font": "var(--font-accent--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "heading": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

Where Our Honey Comes From

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h2", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden was built with New Zealand honey at its centre, and that means origin matters. We want customers to understand not just that the drinks contain honey, but that the honey is part of a broader local ingredient system. This page explains how we think about sourcing, traceability, and seasonal variation without pretending that every batch tells the same tidy story.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nz-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

New Zealand first

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "nz-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden prioritises New Zealand-sourced honey because that is the foundation of the brand. Golden started with Golden Bay mānuka honey as a reference point, and that benchmark still shapes how we think about depth, clarity, and regional character. We do not treat origin as a decorative label. It is part of what makes the drinks recognisably ours.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "trace-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Traceability over vague origin stories

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "trace-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

What matters most in sourcing is that the honey is clearly identified, handled properly, and supported by supplier-level traceability. That is more useful than throwing around a romantic origin story with no verifiable detail behind it. Where a product page or can provides SKU-specific ingredient detail, that should always be treated as the final word for that product.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "season-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Seasonality and supply are real

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "season-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Honey harvests shift with climate, flowering windows, and regional supply. That means good sourcing is not about pretending every season is identical. It is about keeping the quality bar consistent while being transparent that harvest conditions can change. Search engines and customers both respond better to that kind of specificity than to generic claims about purity or perfection.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "fit-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

How honey fits with the rest of the range

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "fit-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Golden pairs honey with real fruit and botanical inputs, not with a generic flavour-base. That is why sourcing stories make more sense when read together. If you want the broader ingredient explanation, read Ingredients. If you want the process view, read How Golden Is Made.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-heading": { + "type": "text", + "name": "Section heading", + "settings": { + "text": "

Shop and read next

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 16, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "next-copy": { + "type": "text", + "name": "Section copy", + "settings": { + "text": "

Start with New Zealand Honey In Golden if you want the brand-level view, or Mānuka vs Kānuka if you want the flavour comparison. To see those ingredients in context, shop New Zealand Honey Sodas.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "eyebrow", + "heading", + "intro", + "nz-heading", + "nz-copy", + "trace-heading", + "trace-copy", + "season-heading", + "season-copy", + "fit-heading", + "fit-copy", + "next-heading", + "next-copy" + ], + "settings": { + "content_direction": "column", + "gap": 12, + "color_scheme": "scheme-1", + "padding-block-start": 44, + "padding-block-end": 44 + } + } + }, + "order": [ + "main" + ] +} From 5fcb4f7b7db55ab31cbb33e993abf9c14e1953bf Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 18:08:41 +1300 Subject: [PATCH 1259/1275] Add ingredients blog article drafts --- docs/ingredients-blog-drafts/README.md | 18 +++++ .../what-is-manuka-honey.md | 63 +++++++++++++++++ ...den-uses-honey-instead-of-refined-sugar.md | 67 +++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 docs/ingredients-blog-drafts/README.md create mode 100644 docs/ingredients-blog-drafts/what-is-manuka-honey.md create mode 100644 docs/ingredients-blog-drafts/why-golden-uses-honey-instead-of-refined-sugar.md diff --git a/docs/ingredients-blog-drafts/README.md b/docs/ingredients-blog-drafts/README.md new file mode 100644 index 000000000..33ea03ca6 --- /dev/null +++ b/docs/ingredients-blog-drafts/README.md @@ -0,0 +1,18 @@ +# Ingredients Blog Drafts + +These drafts are for Shopify Admin article publishing. The blog content itself does not live in the theme repository, so these files are the publish-ready source material. + +## Current drafts + +- `what-is-manuka-honey.md` +- `why-golden-uses-honey-instead-of-refined-sugar.md` + +## Publish checklist + +For each article: + +1. Create a new article in the `ingredients` blog. +2. Use the `title`, `handle`, `seo_title`, `meta_description`, and `excerpt` from the file front matter. +3. Paste the article body into Shopify's article editor. +4. Add a relevant featured image. +5. Publish one article first, then the second a few days later rather than dropping both at once. diff --git a/docs/ingredients-blog-drafts/what-is-manuka-honey.md b/docs/ingredients-blog-drafts/what-is-manuka-honey.md new file mode 100644 index 000000000..09f5ace9f --- /dev/null +++ b/docs/ingredients-blog-drafts/what-is-manuka-honey.md @@ -0,0 +1,63 @@ +--- +title: What Is Mānuka Honey? +blog: ingredients +handle: what-is-manuka-honey +seo_title: What Is Mānuka Honey? | Golden Ingredients Journal +meta_description: A plain-English guide to mānuka honey, what makes it distinct in New Zealand, how it tastes, and why Golden uses it in soda. +excerpt: Mānuka honey is one of New Zealand's best-known ingredients. Here is what it is, how it tastes, and how Golden uses it without drifting into hype. +internal_links: + - /pages/new-zealand-honey + - /pages/manuka-vs-kanuka + - /products/golden-lemon-manuka + - /products/blackcurrant-manuka-soda +--- + +# What Is Mānuka Honey? + +Mānuka honey is one of New Zealand's best-known ingredient categories, but it often gets flattened into a single idea. People hear the name and think of a premium health-store product, a grading system, or a price tag. Those things are part of the market around mānuka honey, but they are not the whole story. + +At the simplest level, mānuka honey is honey made from nectar gathered from the mānuka tree, which is native to Aotearoa New Zealand. Like any honey, it reflects place, flowering conditions, season, and handling. The reason it matters to Golden is more grounded than the internet's version of the category: mānuka has a distinctive flavour, real regional identity, and a strong connection to New Zealand provenance. + +## Why people know the name + +Mānuka honey has become internationally visible because New Zealand built a strong identity around it. That identity sits partly in flavour and origin, and partly in the grading and certification language often used in retail honey. If you have spent any time around the category, you have probably seen references to systems such as UMF or MGO. + +That grading language matters in the honey world, but it is not the only thing that makes mānuka meaningful. For a drinks brand like Golden, the more relevant question is simpler: what does mānuka actually bring to the finished drink? + +## What mānuka honey tastes like + +Mānuka tends to be darker, richer, and more resinous than a mild table honey. It can bring a deeper sweetness and more character than refined sugar, which is exactly why it works in soda. Refined sugar sweetens without saying much. Mānuka contributes sweetness and flavour at the same time. + +That does not mean every drink should be loud or heavy. The job is balance. In Golden, mānuka works best when it supports fruit and acidity rather than smothering them. It helps create a rounded finish that still feels bright and refreshing. + +You can see that most clearly in drinks like [Lemon Mānuka Soda](/products/golden-lemon-manuka) and [Blackcurrant Mānuka Soda](/products/blackcurrant-manuka-soda), where the honey changes the shape of the flavour rather than just acting as a sweetener. + +## Why Golden uses mānuka honey + +Golden uses mānuka honey because it does three useful things at once. + +First, it improves flavour. The sweetness feels softer and more natural in the context of fruit and carbonation than refined sugar usually does. + +Second, it gives the brand a real New Zealand ingredient foundation. Golden is not trying to sound local by borrowing scenery and language while using generic inputs. The honey is part of the product's identity. + +Third, it makes the brand more specific. Search is increasingly crowded with vague "better-for-you" drink positioning. Saying "New Zealand honey soda" is more concrete, more credible, and easier for people to understand than trying to out-generic the rest of the wellness shelf. + +If you want the broader version of that story, read [New Zealand Honey In Golden](/pages/new-zealand-honey). + +## What this does not mean + +Talking clearly about mānuka honey does not require pretending every honey conversation is a medical one. At Golden, we talk about mānuka in terms of flavour, provenance, product philosophy, and ingredient quality. We are not using the drinks category to make broad therapeutic promises. + +That matters for trust. It is better to say exactly what the ingredient is doing in the can than to inflate the story until it stops sounding believable. + +## Where kānuka fits in + +Mānuka is not the only honey Golden uses. We also use kānuka honey, which is generally lighter and more floral. The difference matters because the point is not to force one honey into every flavour. The point is to choose the honey that suits the drink. + +If you want the side-by-side explanation, go to [Mānuka vs Kānuka Honey](/pages/manuka-vs-kanuka). + +## The short version + +Mānuka honey matters to Golden because it is flavourful, recognisably New Zealand, and strong enough to carry real provenance into a finished drink. That is a much better foundation than using generic sweetener language and hoping people fill in the rest. + +If you want to taste it in context, start with [Lemon Mānuka Soda](/products/golden-lemon-manuka) or [Blackcurrant Mānuka Soda](/products/blackcurrant-manuka-soda). If you want the bigger picture, read [Where Our Honey Comes From](/pages/where-our-honey-comes-from). diff --git a/docs/ingredients-blog-drafts/why-golden-uses-honey-instead-of-refined-sugar.md b/docs/ingredients-blog-drafts/why-golden-uses-honey-instead-of-refined-sugar.md new file mode 100644 index 000000000..d12c413b8 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-golden-uses-honey-instead-of-refined-sugar.md @@ -0,0 +1,67 @@ +--- +title: Why Golden Uses Honey Instead of Refined Sugar +blog: ingredients +handle: why-golden-uses-honey-instead-of-refined-sugar +seo_title: Why Golden Uses Honey Instead of Refined Sugar | Golden Ingredients Journal +meta_description: Why Golden builds soda around New Zealand honey instead of refined sugar, and how that changes flavour, provenance, and the way the drink finishes. +excerpt: Golden does not use refined sugar to sweeten the range. Here is why honey makes more sense for flavour, provenance, and a cleaner finish. +internal_links: + - /pages/ingredients + - /pages/new-zealand-honey + - /pages/how-golden-is-made + - /collections/honey-soda +--- + +# Why Golden Uses Honey Instead of Refined Sugar + +Golden does not use refined sugar to sweeten the range. That choice was never about chasing a fashionable ingredient line. It came from the way the drinks tasted when we built them around New Zealand honey instead. + +If you start with a generic sweetener, you usually end up needing the rest of the formula to do more work. If you start with honey, the sweetness already has character. That gives the drink a better base to build from. + +## Flavour comes first + +The clearest reason Golden uses honey is taste. + +Refined sugar does its job, but it is mostly anonymous. Honey has its own shape. It can be floral, rich, light, or resinous depending on the style. In Golden, that matters because the honey is not fighting the fruit. It is part of the flavour structure. + +That is why the drinks aim for a rounded sweetness and a crisp finish rather than the heavy, syrupy feel people often associate with mainstream soft drink. + +This is easiest to understand when you compare the range side by side. [Lemon Mānuka Soda](/products/golden-lemon-manuka) needs brightness and lift. [Blackcurrant Mānuka Soda](/products/blackcurrant-manuka-soda) needs enough depth to hold up against a darker fruit profile. [Kānuka Kola](/products/kanuka-kola) needs sweetness that supports the kola profile without dragging it down. Refined sugar would not do those jobs in quite the same way. + +## Honey adds provenance, not just sweetness + +Golden is a New Zealand drinks brand. Using New Zealand honey makes the product more rooted in place. + +That matters commercially and editorially. From a product perspective, it creates a clear ingredient story. From a search perspective, it gives Golden a category that is specific enough to own: New Zealand honey soda. + +That is much stronger than leaning on broad language like "wellness" or "better-for-you" without saying what the product is actually made of. Honey gives the site a real ingredient entity to build around, which is one reason we are expanding content around sourcing, mānuka vs kānuka, and how Golden is made. + +For the brand-level explanation, read [New Zealand Honey In Golden](/pages/new-zealand-honey). + +## The finish matters + +Golden is designed to finish clean rather than sticky. Honey helps with that when it is balanced properly with fruit, acidity, and carbonation. + +This is also where sloppy product language can cause confusion. Saying a drink uses honey does not automatically mean it is lighter. The finished result still depends on the formulation. Golden's low-cal range sits at 59 to 63 calories per 330 mL can, and that is the fairer comparison point if someone wants to understand where the product sits. + +The point is not that honey is magic. The point is that it lets us build a drink that tastes more alive than one sweetened with refined sugar alone. + +## What we are not claiming + +Choosing honey over refined sugar does not give a brand permission to make exaggerated health claims. That is not the lane Golden needs to be in. + +We talk about flavour, provenance, ingredient choice, and the way the product is made. We show the nutrition facts. We link back to the ingredient and sourcing pages. That is enough to build trust without turning a soda into a fake supplement. + +If you want the ingredient overview, go to [Ingredients](/pages/ingredients). If you want the process view, go to [How Golden Is Made](/pages/how-golden-is-made). + +## Why this matters for the brand + +Honey makes Golden more distinctive. It gives the drinks a recognisable New Zealand ingredient base, a clearer product story, and a better flavour signature than a generic refined-sugar formula would. + +That is good product logic, but it is also good search logic. People can discover Golden through ingredients, provenance, and category fit instead of only through brand-name searches. That is exactly what we want the site to support. + +## The short version + +Golden uses honey instead of refined sugar because it tastes better in the finished drink, gives the brand a stronger New Zealand ingredient identity, and supports the cleaner finish we want the range to have. + +If you want to see how that lands in the actual products, start with [New Zealand Honey Sodas](/collections/honey-soda). From c7ed2fb7b97357c2b7d4803cbc47a2da71755f18 Mon Sep 17 00:00:00 2001 From: Morg Date: Thu, 12 Mar 2026 18:31:04 +1300 Subject: [PATCH 1260/1275] Add expanded ingredients blog authority drafts --- docs/ingredients-blog-drafts/README.md | 31 +++++ .../how-honey-changes-the-flavor-of-soda.md | 57 ++++++++ ...ead-mgo-and-umf-on-a-manuka-honey-label.md | 70 ++++++++++ ...ow-to-tell-if-manuka-honey-is-authentic.md | 70 ++++++++++ .../monofloral-vs-multifloral-manuka-honey.md | 63 +++++++++ ...what-does-low-cal-actually-mean-in-soda.md | 62 +++++++++ .../what-is-a-honey-soda.md | 62 +++++++++ .../what-makes-a-better-for-you-soda.md | 67 +++++++++ .../where-goldens-fruit-comes-from.md | 47 +++++++ .../why-golden-is-made-in-new-zealand.md | 45 +++++++ ...why-meyer-lemons-from-hawkes-bay-matter.md | 38 ++++++ ...-zealand-origin-matters-in-manuka-honey.md | 55 ++++++++ ...why-otago-blackcurrants-taste-different.md | 40 ++++++ .../why-provenance-matters-in-drinks.md | 50 +++++++ docs/seo-competitor-content-ideas.md | 127 ++++++++++++++++++ 15 files changed, 884 insertions(+) create mode 100644 docs/ingredients-blog-drafts/how-honey-changes-the-flavor-of-soda.md create mode 100644 docs/ingredients-blog-drafts/how-to-read-mgo-and-umf-on-a-manuka-honey-label.md create mode 100644 docs/ingredients-blog-drafts/how-to-tell-if-manuka-honey-is-authentic.md create mode 100644 docs/ingredients-blog-drafts/monofloral-vs-multifloral-manuka-honey.md create mode 100644 docs/ingredients-blog-drafts/what-does-low-cal-actually-mean-in-soda.md create mode 100644 docs/ingredients-blog-drafts/what-is-a-honey-soda.md create mode 100644 docs/ingredients-blog-drafts/what-makes-a-better-for-you-soda.md create mode 100644 docs/ingredients-blog-drafts/where-goldens-fruit-comes-from.md create mode 100644 docs/ingredients-blog-drafts/why-golden-is-made-in-new-zealand.md create mode 100644 docs/ingredients-blog-drafts/why-meyer-lemons-from-hawkes-bay-matter.md create mode 100644 docs/ingredients-blog-drafts/why-new-zealand-origin-matters-in-manuka-honey.md create mode 100644 docs/ingredients-blog-drafts/why-otago-blackcurrants-taste-different.md create mode 100644 docs/ingredients-blog-drafts/why-provenance-matters-in-drinks.md create mode 100644 docs/seo-competitor-content-ideas.md diff --git a/docs/ingredients-blog-drafts/README.md b/docs/ingredients-blog-drafts/README.md index 33ea03ca6..65848a1e0 100644 --- a/docs/ingredients-blog-drafts/README.md +++ b/docs/ingredients-blog-drafts/README.md @@ -6,6 +6,19 @@ These drafts are for Shopify Admin article publishing. The blog content itself d - `what-is-manuka-honey.md` - `why-golden-uses-honey-instead-of-refined-sugar.md` +- `how-to-read-mgo-and-umf-on-a-manuka-honey-label.md` +- `how-to-tell-if-manuka-honey-is-authentic.md` +- `monofloral-vs-multifloral-manuka-honey.md` +- `why-new-zealand-origin-matters-in-manuka-honey.md` +- `what-is-a-honey-soda.md` +- `what-makes-a-better-for-you-soda.md` +- `how-honey-changes-the-flavor-of-soda.md` +- `what-does-low-cal-actually-mean-in-soda.md` +- `where-goldens-fruit-comes-from.md` +- `why-meyer-lemons-from-hawkes-bay-matter.md` +- `why-otago-blackcurrants-taste-different.md` +- `why-provenance-matters-in-drinks.md` +- `why-golden-is-made-in-new-zealand.md` ## Publish checklist @@ -16,3 +29,21 @@ For each article: 3. Paste the article body into Shopify's article editor. 4. Add a relevant featured image. 5. Publish one article first, then the second a few days later rather than dropping both at once. + +## Suggested publish order + +1. `what-is-manuka-honey.md` +2. `why-golden-uses-honey-instead-of-refined-sugar.md` +3. `what-is-a-honey-soda.md` +4. `what-makes-a-better-for-you-soda.md` +5. `how-honey-changes-the-flavor-of-soda.md` +6. `what-does-low-cal-actually-mean-in-soda.md` +7. `how-to-read-mgo-and-umf-on-a-manuka-honey-label.md` +8. `how-to-tell-if-manuka-honey-is-authentic.md` +9. `why-new-zealand-origin-matters-in-manuka-honey.md` +10. `monofloral-vs-multifloral-manuka-honey.md` +11. `where-goldens-fruit-comes-from.md` +12. `why-meyer-lemons-from-hawkes-bay-matter.md` +13. `why-otago-blackcurrants-taste-different.md` +14. `why-provenance-matters-in-drinks.md` +15. `why-golden-is-made-in-new-zealand.md` diff --git a/docs/ingredients-blog-drafts/how-honey-changes-the-flavor-of-soda.md b/docs/ingredients-blog-drafts/how-honey-changes-the-flavor-of-soda.md new file mode 100644 index 000000000..f065030a8 --- /dev/null +++ b/docs/ingredients-blog-drafts/how-honey-changes-the-flavor-of-soda.md @@ -0,0 +1,57 @@ +--- +title: How Honey Changes the Flavor of Soda +blog: ingredients +handle: how-honey-changes-the-flavor-of-soda +seo_title: How Honey Changes the Flavor of Soda | Golden Ingredients Journal +meta_description: Honey changes soda by reshaping sweetness, finish, and flavour balance. Here is how Golden uses that difference across the range. +excerpt: Honey does more than sweeten soda. It changes the shape of the drink, especially when paired with fruit and carbonation. +internal_links: + - /pages/ingredients + - /products/golden-lemon-manuka + - /products/blackcurrant-manuka-soda + - /products/kanuka-kola +--- + +# How Honey Changes the Flavor of Soda + +Most people think about sweetener as a background decision. In soda, it is not. The sweetener affects how the whole drink lands. + +That is why honey matters so much in Golden. It does not just replace refined sugar. It changes the way sweetness, fruit, acidity, and carbonation work together. + +## Honey gives sweetness more shape + +Refined sugar tends to read as a straight line. It sweetens effectively, but it does not add much personality of its own. + +Honey is different. It can feel softer, rounder, and more layered. Even before you get into the difference between mānuka and kānuka, honey already changes the way a drink opens and closes on the palate. + +## The finish is different + +One of the biggest differences is in the finish. + +When a soda is too refined-sugar-heavy, the sweetness can feel blunt and lingering. Honey, used carefully, can create a fuller sweetness without making the finish feel syrupy. That matters because Golden is designed to end crisp. + +## Honey helps fruit read more naturally + +This is where the pairing becomes most obvious. + +In [Lemon Mānuka Soda](/products/golden-lemon-manuka), the honey rounds out the acid line from the lemon without flattening the brightness. In [Blackcurrant Mānuka Soda](/products/blackcurrant-manuka-soda), it gives the berry intensity something deeper to sit on. In [Kānuka Kola](/products/kanuka-kola), it helps turn a nostalgic cola profile into something more ingredient-led and less generic. + +## Not all honey tastes the same + +Another important point is that honey is not one single flavour. + +Mānuka tends to bring more depth and darker character. Kānuka tends to be lighter and more floral. That is why Golden uses both. The point is not to treat honey as a universal swap. The point is to choose the right honey for the recipe. + +## This is why the category works + +If Golden only used honey to make a label claim, it would not be worth the effort. The reason the category holds up is that the ingredient actually changes the finished drink. + +That is what makes `honey soda` a real category rather than a superficial marketing phrase. + +For the broader ingredient view, go to [Ingredients](/pages/ingredients). For the category-level explanation, go to [What Is a Honey Soda?](/blogs/ingredients/what-is-a-honey-soda) + +## The short version + +Honey changes soda by giving sweetness more personality, helping fruit feel more grounded, and supporting a cleaner finish when the drink is balanced properly. + +That is why Golden is built around it. diff --git a/docs/ingredients-blog-drafts/how-to-read-mgo-and-umf-on-a-manuka-honey-label.md b/docs/ingredients-blog-drafts/how-to-read-mgo-and-umf-on-a-manuka-honey-label.md new file mode 100644 index 000000000..a9f6303ce --- /dev/null +++ b/docs/ingredients-blog-drafts/how-to-read-mgo-and-umf-on-a-manuka-honey-label.md @@ -0,0 +1,70 @@ +--- +title: How To Read MGO and UMF on a Mānuka Honey Label +blog: ingredients +handle: how-to-read-mgo-and-umf-on-a-manuka-honey-label +seo_title: How To Read MGO and UMF on a Mānuka Honey Label | Golden Ingredients Journal +meta_description: A plain-English guide to MGO and UMF on mānuka honey labels, what they mean, how they differ, and what they do not tell you on their own. +excerpt: MGO and UMF are the two label systems people see most often on mānuka honey. Here is how to read them without getting lost in jargon. +internal_links: + - /pages/new-zealand-honey + - /pages/manuka-vs-kanuka + - /pages/ingredients +--- + +# How To Read MGO and UMF on a Mānuka Honey Label + +If you have looked at mānuka honey for more than a minute, you have probably seen two terms over and over again: `MGO` and `UMF`. + +They matter, but they are also one of the easiest places for brands to overwhelm people with half-explained numbers. The useful version is much simpler. MGO and UMF are two ways of helping you understand whether a mānuka honey is authentic and how it has been graded. + +## What MGO means + +MGO stands for methylglyoxal. It is one of the compounds most closely associated with mānuka honey and one of the reasons mānuka is treated as a distinct category rather than just another floral honey. + +On a label, an MGO number tells you how much methylglyoxal is present in the honey. In simple terms, a higher number means a higher concentration of that compound. + +That does not mean the biggest number is automatically the right choice for every person or every use. It just means the honey is carrying a higher measured level of MGO. + +## What UMF means + +UMF stands for Unique Mānuka Factor. It is a grading system and trademark used to certify genuine mānuka honey against a broader set of measures than one single number alone. + +That matters because real trust in mānuka honey is not just about intensity. It is also about authenticity, purity, and quality assurance. + +In practice, a UMF label tells customers that the honey has been assessed under a recognised standard rather than described with a vague marketing phrase. + +## Why both appear together + +Many strong mānuka brands show both MGO and UMF because they help customers read the honey from two angles. + +MGO gives you a direct compound number. UMF gives you a broader quality framework. Together, they give the buyer more confidence than either would on its own. + +That is one reason why serious brands talk about testing, traceability, and source alongside the number on the jar. + +## What these numbers do not tell you on their own + +MGO and UMF are useful, but they are not the whole story. + +They do not tell you: + +- whether the brand is transparent about origin +- whether the product is clearly traceable +- whether the producer is credible +- whether the flavour profile suits what you want + +They also do not replace plain old common sense. If a label is heavy on dramatic claims and light on source, testing, or who actually made the honey, that is worth noticing. + +## Why this matters to Golden + +Golden is not selling jars of mānuka honey as its main category, but we still benefit from helping people understand the honey world properly. If someone discovers Golden through honey-related search, they should land on a site that actually understands the category rather than borrowing the language loosely. + +That is why we explain mānuka and kānuka clearly, keep provenance central, and make the can or product page the final source for SKU-level ingredient detail. + +If you want the broader honey view, read [New Zealand Honey In Golden](/pages/new-zealand-honey). If you want the flavour difference, read [Mānuka vs Kānuka Honey](/pages/manuka-vs-kanuka). + +## The short version + +MGO is a compound reading. UMF is a broader quality and authenticity system. Both are useful. Neither should be read in isolation from source, traceability, and brand credibility. + +That is the practical way to read a mānuka label without getting lost in hype. + diff --git a/docs/ingredients-blog-drafts/how-to-tell-if-manuka-honey-is-authentic.md b/docs/ingredients-blog-drafts/how-to-tell-if-manuka-honey-is-authentic.md new file mode 100644 index 000000000..356cedeac --- /dev/null +++ b/docs/ingredients-blog-drafts/how-to-tell-if-manuka-honey-is-authentic.md @@ -0,0 +1,70 @@ +--- +title: How To Tell If Mānuka Honey Is Authentic +blog: ingredients +handle: how-to-tell-if-manuka-honey-is-authentic +seo_title: How To Tell If Mānuka Honey Is Authentic | Golden Ingredients Journal +meta_description: A practical guide to checking if mānuka honey is authentic, including New Zealand origin, testing, traceability, and the warning signs of weak labels. +excerpt: Authentic mānuka honey should be clear about source, testing, and traceability. Here is what to check before you trust the label. +internal_links: + - /pages/new-zealand-honey + - /pages/where-our-honey-comes-from + - /pages/ingredients +--- + +# How To Tell If Mānuka Honey Is Authentic + +Mānuka honey is valuable enough that authenticity matters. That is not marketing drama. It is just the reality of a premium category with global demand and a lot of confusing labels floating around it. + +If you want the short version, authentic mānuka honey should be easy to interrogate. The more a brand hides behind vague words, the less confidence you should have in what is actually in the jar. + +## Start with New Zealand origin + +Real mānuka honey should be clearly tied to New Zealand origin. That should not be buried in fine print or left to implication. + +If a brand wants the New Zealand mānuka reputation, it should be willing to state where the product is sourced, packed, and tested. Stronger brands do not make you guess. + +## Look for credible grading and testing + +One of the easiest warning signs is a label that sounds technical without actually telling you much. + +Clear MGO or UMF information is more useful than vague terms like `active`, `bioactive`, or other invented rating language that leaves the customer doing guesswork. A credible brand should also be able to explain what its label system means in plain English. + +## Traceability matters + +The best honey brands talk openly about traceability because it is one of the clearest trust signals in the category. + +That can mean batch-level information, source-region visibility, or a clearer `hive to home` style supply-chain story. The point is not that every customer will check every detail. The point is that the details exist. + +## Look at how the brand talks + +A good authenticity page usually sounds specific. It tells you who made the honey, where it came from, how it is tested, and what the label means. + +A weak one leans on mystery, inflated wellness language, or emotional claims without showing the operational proof underneath. + +That difference matters for Golden too. If we want to be discovered through honey search, the site has to sound like it knows the category and respects the customer's ability to check the details. + +## Price alone is not enough + +Some people assume the highest price means the strongest authenticity. It does not. + +Mānuka honey is expensive for real reasons, including limited flowering windows, remote harvesting conditions, testing, and supply-chain control. But price alone is not proof. A premium-looking jar still needs clear source and clear standards behind it. + +## What this means for Golden + +Golden is not trying to out-jar the jar-honey category. But we are trying to be a trusted New Zealand honey soda brand. That means the site has to show the same seriousness around ingredients, provenance, and transparency that people expect from credible honey producers. + +That is why our honey pages focus on source, flavour, and traceability instead of pretending that honey talk only exists to support a vague wellness halo. + +If you want to see how we think about sourcing, go to [Where Our Honey Comes From](/pages/where-our-honey-comes-from). If you want the brand-level ingredient rationale, go to [New Zealand Honey In Golden](/pages/new-zealand-honey). + +## The short version + +To judge whether mānuka honey is authentic, check: + +- New Zealand origin +- credible grading or certification +- clear traceability +- transparent brand language + +If the product is easy to verify, it is usually easier to trust. + diff --git a/docs/ingredients-blog-drafts/monofloral-vs-multifloral-manuka-honey.md b/docs/ingredients-blog-drafts/monofloral-vs-multifloral-manuka-honey.md new file mode 100644 index 000000000..9ce61ba78 --- /dev/null +++ b/docs/ingredients-blog-drafts/monofloral-vs-multifloral-manuka-honey.md @@ -0,0 +1,63 @@ +--- +title: Monofloral vs Multifloral Mānuka Honey +blog: ingredients +handle: monofloral-vs-multifloral-manuka-honey +seo_title: Monofloral vs Multifloral Mānuka Honey | Golden Ingredients Journal +meta_description: What monofloral and multifloral mānuka honey mean, how they differ, and why the distinction matters for flavour, authenticity, and expectations. +excerpt: Monofloral and multifloral mānuka are not the same thing. Here is what each term means and why it matters. +internal_links: + - /pages/new-zealand-honey + - /pages/manuka-vs-kanuka + - /pages/ingredients +--- + +# Monofloral vs Multifloral Mānuka Honey + +One of the easiest ways to get lost in mānuka honey is to assume every jar labelled `mānuka` is the same. It is not. + +One of the most important distinctions is whether the honey is `monofloral` or `multifloral`. + +## What monofloral means + +Monofloral mānuka honey comes predominantly from mānuka nectar. In practical terms, it is the more singular expression of mānuka as a honey style. + +That usually means a more concentrated mānuka identity in the finished honey, both in flavour and in how the product is positioned in the market. + +## What multifloral means + +Multifloral mānuka honey includes mānuka nectar, but it is not exclusively or predominantly that one source in the same way. Other floral sources contribute to the finished honey. + +That does not automatically make it inferior. It just makes it different. + +In some cases, multifloral mānuka can be a more approachable everyday honey because the flavour is softer and less intense. + +## Why the distinction matters + +The difference matters because these two products create different expectations. + +If someone wants a more singular mānuka expression, monofloral makes sense. If someone wants a broader honey style with mānuka in the mix, multifloral may be the better fit. + +What matters most is that the label is honest and specific rather than letting the customer assume every mānuka reference means exactly the same thing. + +## Where flavour comes in + +This distinction is not only about testing language. It affects taste. + +Monofloral mānuka is often associated with more depth, stronger character, and a more recognisable mānuka profile. Multifloral mānuka can feel softer, more blended, and easier to use across everyday food routines. + +That is relevant to Golden because we care about what the ingredient does in the finished product, not just how it sounds on a label. + +## Why Golden talks about this at all + +Golden is not a jar-honey shop, but it benefits from speaking clearly about the honey world. If someone lands on Golden through mānuka search, they should find a brand that actually understands flavour, origin, and category distinctions. + +That is also why we talk about both mānuka and kānuka. The point is to be exact about the ingredient, not to use one famous word as a catch-all. + +For the broader ingredient view, go to [Ingredients](/pages/ingredients). For the flavour difference between the two native honeys we use, go to [Mānuka vs Kānuka Honey](/pages/manuka-vs-kanuka). + +## The short version + +Monofloral mānuka is a more singular mānuka expression. Multifloral mānuka includes mānuka but not in the same dominant way. + +Neither term should be treated as decoration. They tell you something real about the product and help set better expectations before you buy. + diff --git a/docs/ingredients-blog-drafts/what-does-low-cal-actually-mean-in-soda.md b/docs/ingredients-blog-drafts/what-does-low-cal-actually-mean-in-soda.md new file mode 100644 index 000000000..fe24f5ac0 --- /dev/null +++ b/docs/ingredients-blog-drafts/what-does-low-cal-actually-mean-in-soda.md @@ -0,0 +1,62 @@ +--- +title: What Does Low-Cal Actually Mean in Soda? +blog: ingredients +handle: what-does-low-cal-actually-mean-in-soda +seo_title: What Does Low-Cal Actually Mean in Soda? | Golden Ingredients Journal +meta_description: Low-cal should mean something measurable in soda. Here is how to think about calories, comparisons, and product transparency without the marketing fog. +excerpt: Low-cal is only useful if it is anchored to real per-can numbers and a clear category comparison. Here is the practical version. +internal_links: + - /pages/ingredients + - /pages/faq + - /collections/honey-soda +--- + +# What Does Low-Cal Actually Mean in Soda? + +`Low-cal` is one of those phrases that sounds clear until you ask one simple question: compared with what? + +In drinks, the useful version of low-cal is not a mood. It is a measurable reduction that the customer can see on the can or the product page. + +## The per-can number matters most + +The first thing to look for is the actual calorie count per serving size that people really drink. + +If a brand is loud about being low-cal but quiet about what that means per can, that is usually a sign the language is doing more work than the product. + +## Comparison should stay in category + +The fairest way to read low-cal is against the category the drink is replacing. + +For soda, that usually means comparing the product against conventional full-sugar soft drinks rather than against still water, black coffee, or something else that is not really in the same decision set. + +## Low-cal does not erase the rest of the drink + +A lower calorie count can be meaningful, but it does not make the product automatically good. + +You still want to know: + +- what is sweetening it +- what else is in it +- how it tastes +- whether it actually works as a replacement + +That is why Golden talks about ingredients and flavour alongside calories rather than trying to let the calorie number carry the whole brand story. + +## Where Golden fits + +Golden's low-cal positioning makes sense because it is visible and specific. The range sits well below conventional full-sugar soda on a per-can basis, while still trying to taste like a drink people would actually choose again. + +That is a more useful claim than the vague idea that lower calories somehow turn a soda into a health product. + +## Why search cares about this + +Queries like `low calorie soda`, `low sugar soda`, and `better-for-you soda` are all category-definition searches. If Golden wants to rank there, the site needs pages and articles that explain what those phrases mean in real terms. + +That makes this kind of article more than filler. It helps Google understand how Golden fits the category. + +For the ingredient overview, go to [Ingredients](/pages/ingredients). For the product-level numbers, use the product pages and [FAQ](/pages/faq). + +## The short version + +Low-cal in soda should mean a clearly lower calorie count than conventional soda, stated in a way people can actually verify. Anything vaguer than that is mostly branding. + diff --git a/docs/ingredients-blog-drafts/what-is-a-honey-soda.md b/docs/ingredients-blog-drafts/what-is-a-honey-soda.md new file mode 100644 index 000000000..5bb889d4f --- /dev/null +++ b/docs/ingredients-blog-drafts/what-is-a-honey-soda.md @@ -0,0 +1,62 @@ +--- +title: What Is a Honey Soda? +blog: ingredients +handle: what-is-a-honey-soda +seo_title: What Is a Honey Soda? | Golden Ingredients Journal +meta_description: A honey soda is a sparkling drink built around honey instead of refined sugar. Here is what that means in practice and how Golden approaches the category. +excerpt: Honey soda is still a young category, which is exactly why Golden needs to define it clearly. Here is what it is and what it is not. +internal_links: + - /collections/honey-soda + - /pages/ingredients + - /pages/new-zealand-honey +--- + +# What Is a Honey Soda? + +Honey soda is exactly what it sounds like: a sparkling soft drink built around honey instead of treating refined sugar as the default sweetener. + +That sounds straightforward, but it matters because the category still is not well defined. If Golden wants to own search around `New Zealand honey soda`, the site has to explain the category before the internet does it badly on our behalf. + +## It is still a soda + +The first useful clarification is that a honey soda is still a soda. It is not pretending to be a supplement, a tonic, or a piece of medical equipment. + +What changes is the ingredient philosophy. Instead of using generic refined sugar and then layering flavour on top, a honey soda starts with a sweetener that already has its own character. + +## Honey changes the shape of the drink + +Honey sweetens differently from refined sugar. In the right recipe, it can feel softer, rounder, and less blunt. It can also carry more flavour identity on its own, especially when paired properly with fruit and acidity. + +That is what makes a honey soda interesting. The sweetness is part of the flavour profile, not just the background. + +## Golden's version of the category + +Golden builds honey soda around New Zealand mānuka and kānuka honey, real fruit, and a cleaner finish than mainstream syrup-heavy soft drink. + +That is why the product is easiest to understand as a category stack: + +- soda +- honey soda +- New Zealand honey soda +- low-cal honey soda + +The more precisely we define it, the easier it becomes for search engines and customers to understand what Golden actually is. + +## What a honey soda is not + +A honey soda is not automatically better just because the can says `honey`. The finished product still has to taste good, be transparent about its ingredients, and be honest about what it is. + +At Golden, we do not need the category to sound mystical. We need it to sound specific. + +## Why this matters for discovery + +Most beverage sites leave too much work for the customer. They say things like `crafted`, `vibrant`, or `better-for-you` without naming the actual product category. + +Golden has a chance to do the opposite. If someone searches for a sparkling drink made with honey, we should have a page and an article that answer that directly. + +If you want the ingredient view, go to [Ingredients](/pages/ingredients). If you want to shop the finished drinks, start with [New Zealand Honey Sodas](/collections/honey-soda). + +## The short version + +A honey soda is a sparkling soft drink built around honey rather than refined sugar. Golden's version is a New Zealand honey soda category, which is much more ownable than vague wellness-drink language and much more honest than pretending the product is anything other than a very well-made soda. + diff --git a/docs/ingredients-blog-drafts/what-makes-a-better-for-you-soda.md b/docs/ingredients-blog-drafts/what-makes-a-better-for-you-soda.md new file mode 100644 index 000000000..12ee76d91 --- /dev/null +++ b/docs/ingredients-blog-drafts/what-makes-a-better-for-you-soda.md @@ -0,0 +1,67 @@ +--- +title: What Makes a Better-for-You Soda? +blog: ingredients +handle: what-makes-a-better-for-you-soda +seo_title: What Makes a Better-for-You Soda? | Golden Ingredients Journal +meta_description: A better-for-you soda should be clearer about sugar, calories, ingredients, and what it is replacing. Here is how Golden thinks about that category. +excerpt: Better-for-you is one of the most overused phrases in drinks. Here is the stricter version that is actually useful. +internal_links: + - /pages/ingredients + - /collections/honey-soda + - /pages/how-golden-is-made +--- + +# What Makes a Better-for-You Soda? + +`Better-for-you` is one of the loosest phrases in drinks. It can mean almost anything, which is exactly why most brand uses of it are not very helpful. + +A better version of the phrase is to treat it as a comparison, not a halo. Better than what? Better in which way? And can the customer see the difference on the can? + +## It should be easier to understand + +A better-for-you soda should be easier to read than a conventional soda, not harder. + +That means clear ingredient logic, visible nutrition facts, and no need to reverse-engineer the product from a wall of marketing language. + +## It should improve at least one real tradeoff + +For a soda, the most obvious tradeoffs are usually: + +- sugar +- calories +- ingredient transparency +- flavour quality + +A better-for-you soda does not need to win every category to be worth buying. But it should clearly improve at least one meaningful part of the tradeoff without making the drink miserable. + +## It should still taste like something you want again + +This is where a lot of drinks fall apart. They are technically better in one metric, but they no longer feel like a real replacement for the thing they are asking you to stop drinking. + +Golden takes the opposite view. If the drink does not feel satisfying, the category story does not matter. + +## It should not pretend to be medicine + +This is another useful filter. A better-for-you soda can be lower in sugar, lower in calories, more transparent, or more ingredient-led than conventional soda. That does not turn it into a cure-all. + +Keeping that distinction clear makes the product more credible and makes the content more durable in search. + +## Where Golden sits + +Golden aims to be a better-for-you soda in a strict sense: + +- low-cal +- honey-led instead of refined-sugar-led +- built around real fruit +- transparent about the category + +That is stronger than trying to sound like a vague wellness beverage with no clear category spine. + +For the ingredient detail, go to [Ingredients](/pages/ingredients). For the process view, go to [How Golden Is Made](/pages/how-golden-is-made). + +## The short version + +A better-for-you soda should be better in a way you can actually verify: lower sugar, lower calories, clearer ingredients, stronger flavour logic, or some combination of those. + +That is a much more useful standard than the phrase by itself. + diff --git a/docs/ingredients-blog-drafts/where-goldens-fruit-comes-from.md b/docs/ingredients-blog-drafts/where-goldens-fruit-comes-from.md new file mode 100644 index 000000000..c164387f2 --- /dev/null +++ b/docs/ingredients-blog-drafts/where-goldens-fruit-comes-from.md @@ -0,0 +1,47 @@ +--- +title: Where Golden's Fruit Comes From +blog: ingredients +handle: where-goldens-fruit-comes-from +seo_title: Where Golden's Fruit Comes From | Golden Ingredients Journal +meta_description: Golden's fruit sourcing starts with places that can actually explain the finished flavour, including Hawke's Bay Meyer lemons and Otago blackcurrants. +excerpt: Fruit provenance matters in Golden for the same reason honey provenance matters: it changes flavour and gives the product a real sense of place. +internal_links: + - /pages/ingredients + - /products/golden-lemon-manuka + - /products/blackcurrant-manuka-soda +--- + +# Where Golden's Fruit Comes From + +Honey is one half of the Golden story. Fruit is the other. + +That matters because honey alone does not make a drink complete. The fruit has to carry its own weight, and the best way to do that is to source fruit that can actually explain the finished flavour rather than simply fill out an ingredient list. + +## Fruit provenance is not decorative + +When brands talk about provenance badly, it can sound like borrowed romance. The useful version is simpler. + +If the fruit comes from a place known for producing a specific quality, and that quality is visible in the drink, then provenance is part of the flavour story rather than just a label flourish. + +## Hawke's Bay Meyer lemons + +Golden's lemon story starts in Hawke's Bay, near Wairoa on the eastern edge of the region. + +That matters because good Meyer lemons bring brightness, fragrance, and a fuller citrus character than a more generic lemon profile would. In a sparkling drink, that difference shows up immediately. + +## Otago blackcurrants + +Golden's blackcurrants come from Otago in the deep south of Aotearoa. + +That cooler climate and those colder nights help produce blackcurrants with real colour, intensity, and tang. That is why blackcurrant can feel vivid rather than flat when it is done properly. + +## Why this matters to the brand + +If Golden wants to rank as a trusted New Zealand honey soda brand, the site has to show that provenance is not limited to the honey. The fruit story matters too. + +That is one reason ingredient pages, FAQ answers, and blog articles should point to specific places and specific ingredients instead of leaning only on broad brand language. + +## The short version + +Golden's fruit comes from places that help explain the finished drinks: Hawke's Bay for Meyer lemons and Otago for blackcurrants. That makes the product story more believable and the flavour story more precise. + diff --git a/docs/ingredients-blog-drafts/why-golden-is-made-in-new-zealand.md b/docs/ingredients-blog-drafts/why-golden-is-made-in-new-zealand.md new file mode 100644 index 000000000..c943f3955 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-golden-is-made-in-new-zealand.md @@ -0,0 +1,45 @@ +--- +title: Why Golden Is Made in New Zealand +blog: ingredients +handle: why-golden-is-made-in-new-zealand +seo_title: Why Golden Is Made in New Zealand | Golden Ingredients Journal +meta_description: Golden is made in New Zealand because the ingredients, identity, and trust story all depend on that connection being real. +excerpt: Made in New Zealand is not a decorative line for Golden. It is part of how the product makes sense. +internal_links: + - /pages/how-golden-is-made + - /pages/new-zealand-honey + - /collections/honey-soda +--- + +# Why Golden Is Made in New Zealand + +`Made in New Zealand` can be used lazily by brands that want the halo without doing much with it. That is not the role it plays in Golden. + +For Golden, being made in New Zealand is part of the product logic itself. + +## The ingredients already point here + +Golden is built around New Zealand honey and local fruit provenance. Once those ingredients become central to the brand, making the drink in New Zealand stops being a nice extra and starts looking like the obvious way to keep the whole story coherent. + +## It keeps the product more honest + +A brand that talks heavily about place should be able to show that place in the way the product is actually made. + +That is why `made in New Zealand` matters here. It helps align the ingredient story, the supply chain, and the finished product rather than splitting them into separate narratives. + +## It builds trust at home and overseas + +Locally, made in New Zealand supports the idea that Golden is a serious drinks brand rooted in Aotearoa rather than a brand borrowing local language for effect. + +Overseas, it helps turn the site into a more credible answer for people searching for New Zealand honey drinks, honey soda, or mānuka-led products. + +## This is also a search signal + +Search engines respond well to specific, repeated, verifiable facts. `Made in New Zealand` is one of those. So are the linked concepts around honey source, fruit source, and how Golden is made. + +That is why pages, product copy, and blog content should keep reinforcing the same truth from different angles. + +## The short version + +Golden is made in New Zealand because the brand, the ingredients, and the trust story all work better when that connection is real. + diff --git a/docs/ingredients-blog-drafts/why-meyer-lemons-from-hawkes-bay-matter.md b/docs/ingredients-blog-drafts/why-meyer-lemons-from-hawkes-bay-matter.md new file mode 100644 index 000000000..21ca0f0a0 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-meyer-lemons-from-hawkes-bay-matter.md @@ -0,0 +1,38 @@ +--- +title: Why Meyer Lemons From Hawke's Bay Matter +blog: ingredients +handle: why-meyer-lemons-from-hawkes-bay-matter +seo_title: Why Meyer Lemons From Hawke's Bay Matter | Golden Ingredients Journal +meta_description: Hawke's Bay Meyer lemons matter because they bring aroma, softness, and brightness that shape Golden's Lemon Mānuka Soda. +excerpt: Lemon is never just lemon in a serious drink. Here is why Hawke's Bay Meyer lemons matter in Golden. +internal_links: + - /products/golden-lemon-manuka + - /pages/ingredients + - /blogs/ingredients/where-goldens-fruit-comes-from +--- + +# Why Meyer Lemons From Hawke's Bay Matter + +Lemon drinks are easy to oversimplify. On paper, the flavour sounds familiar enough that people assume the ingredient barely matters. + +In practice, it matters a lot. The lemon choice shapes the aroma, the acidity, the sweetness balance, and the overall character of the drink. + +## Why Meyer lemons are different + +Meyer lemons usually give a softer, fuller citrus profile than a harsher, one-dimensional lemon note. That makes them especially useful in a sparkling drink where the acid line needs to stay bright without becoming aggressive. + +## Why Hawke's Bay matters + +Hawke's Bay has a long relationship with fruit growing, and that matters because Golden is trying to build a drinks brand around ingredients with real place behind them. + +When the site says the Meyer lemons come from Hawke's Bay near Wairoa, that should not feel like a random detail. It should help explain why the finished drink tastes the way it does. + +## How it shows up in Golden + +In [Lemon Mānuka Soda](/products/golden-lemon-manuka), the Meyer lemon does not work alone. It is paired with mānuka honey and carbonation, which means the citrus needs enough personality to stay vivid without taking over the whole drink. + +That is exactly where the ingredient earns its place. + +## The short version + +Hawke's Bay Meyer lemons matter because they bring the kind of citrus profile that lets Lemon Mānuka Soda feel bright, rounded, and recognisably built from real ingredients rather than generic lemon flavour. diff --git a/docs/ingredients-blog-drafts/why-new-zealand-origin-matters-in-manuka-honey.md b/docs/ingredients-blog-drafts/why-new-zealand-origin-matters-in-manuka-honey.md new file mode 100644 index 000000000..b49b3e058 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-new-zealand-origin-matters-in-manuka-honey.md @@ -0,0 +1,55 @@ +--- +title: Why New Zealand Origin Matters in Mānuka Honey +blog: ingredients +handle: why-new-zealand-origin-matters-in-manuka-honey +seo_title: Why New Zealand Origin Matters in Mānuka Honey | Golden Ingredients Journal +meta_description: Why New Zealand origin matters in mānuka honey, from authenticity and regulation to provenance, taste, and consumer trust. +excerpt: Mānuka honey is not just a flavour category. Origin matters, and New Zealand is central to how people understand authenticity in the space. +internal_links: + - /pages/new-zealand-honey + - /pages/where-our-honey-comes-from + - /pages/how-golden-is-made +--- + +# Why New Zealand Origin Matters in Mānuka Honey + +When people talk about mānuka honey, they are not only talking about sweetness. They are talking about origin, authenticity, and trust. + +That is why New Zealand origin matters so much in this category. It is part of how customers decide whether they are looking at a real, serious product or a weak imitation of one. + +## Origin is part of the category + +Mānuka is tied closely to New Zealand in the public imagination for a reason. The ingredient category has been shaped here, tested here, and built into an export trust story that people around the world already recognise. + +That does not mean origin is just branding. It means the product story is inseparable from the place it comes from. + +## Authenticity is easier to defend + +New Zealand origin gives mānuka honey a much stronger authenticity framework. That includes the way producers talk about traceability, testing, and standards. + +When brands are specific about where the honey comes from and how it is verified, customers can make better decisions. That is good for buyers, but it also protects the category itself. + +## Provenance changes how the product feels + +Origin matters emotionally as well as technically. A honey tied to a real landscape, real beekeeping conditions, and a transparent supply chain feels more grounded than one that only leans on abstract wellness language. + +Golden benefits from this too. If we want to be known as a trusted New Zealand honey soda brand, the site has to connect the drinks back to actual New Zealand ingredients and places. + +## This is bigger than export language + +For Golden, New Zealand origin does not exist just to support overseas trust signals. It also matters locally. + +A local brand that uses New Zealand honey and fruit should sound like it is proud of those ingredients and willing to explain them properly. That is part of what gives a small brand authority. + +## Why this matters in search + +Search engines and AI systems look for specific, repeated, trustworthy signals. `New Zealand honey`, `mānuka`, `traceability`, `made in New Zealand`, and `source` are all clearer and more durable than generic lifestyle phrases. + +That is why origin content is not filler. It is part of the information architecture that helps Golden get discovered by people who are searching for real honey-led products from New Zealand. + +If you want the sourcing view, read [Where Our Honey Comes From](/pages/where-our-honey-comes-from). If you want the process view, read [How Golden Is Made](/pages/how-golden-is-made). + +## The short version + +New Zealand origin matters in mānuka honey because it supports authenticity, trust, and provenance all at once. For Golden, that same logic helps turn honey from an ingredient claim into a credible brand foundation. + diff --git a/docs/ingredients-blog-drafts/why-otago-blackcurrants-taste-different.md b/docs/ingredients-blog-drafts/why-otago-blackcurrants-taste-different.md new file mode 100644 index 000000000..a86ffbc64 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-otago-blackcurrants-taste-different.md @@ -0,0 +1,40 @@ +--- +title: Why Otago Blackcurrants Taste Different +blog: ingredients +handle: why-otago-blackcurrants-taste-different +seo_title: Why Otago Blackcurrants Taste Different | Golden Ingredients Journal +meta_description: Otago blackcurrants bring deep colour, sharp tang, and real intensity to Golden's Blackcurrant Mānuka Soda. Here is why the region matters. +excerpt: Blackcurrants from Otago carry a flavour intensity that makes them ideal for soda. Here is why place matters so much with this fruit. +internal_links: + - /products/blackcurrant-manuka-soda + - /pages/ingredients + - /blogs/ingredients/where-goldens-fruit-comes-from +--- + +# Why Otago Blackcurrants Taste Different + +Blackcurrant is one of those flavours that either feels alive or feels flat. There is not much middle ground. + +That is why Otago matters in Golden's blackcurrant story. The region helps produce the kind of fruit that can hold onto its identity in a sparkling drink rather than fading into a vague berry impression. + +## Cool climate helps build intensity + +Otago's cooler conditions and colder nights slow things down. That matters because slower development can help fruit build more concentrated flavour, stronger colour, and cleaner tang. + +Those are exactly the qualities you want if you are trying to make a blackcurrant soda that tastes real instead of generic. + +## Why blackcurrant needs backbone + +Blackcurrant is a deep flavour. If the fruit is weak, the finished drink can feel muddy very quickly. + +If the fruit is strong, you get something much more satisfying: deep purple colour, real berry intensity, and enough brightness to keep the flavour lifted. + +## How Golden uses it + +[Blackcurrant Mānuka Soda](/products/blackcurrant-manuka-soda) works because the blackcurrant and mānuka honey support each other. The fruit brings depth and tang. The honey rounds the edges and gives the drink a fuller finish. + +That balance only works if the blackcurrant carries enough character of its own. + +## The short version + +Otago blackcurrants taste different because the region helps produce fruit with more intensity, colour, and tang. In Golden, that makes the difference between a generic berry soda and a blackcurrant drink worth remembering. diff --git a/docs/ingredients-blog-drafts/why-provenance-matters-in-drinks.md b/docs/ingredients-blog-drafts/why-provenance-matters-in-drinks.md new file mode 100644 index 000000000..1ca563229 --- /dev/null +++ b/docs/ingredients-blog-drafts/why-provenance-matters-in-drinks.md @@ -0,0 +1,50 @@ +--- +title: Why Provenance Matters in Drinks +blog: ingredients +handle: why-provenance-matters-in-drinks +seo_title: Why Provenance Matters in Drinks | Golden Ingredients Journal +meta_description: Provenance matters in drinks when it helps explain flavour, sourcing, and trust. Here is why Golden treats provenance as part of the product. +excerpt: Provenance only matters when it has a real link to flavour, source, and trust. For Golden, that link is the whole point. +internal_links: + - /pages/new-zealand-honey + - /pages/where-our-honey-comes-from + - /blogs/ingredients/where-goldens-fruit-comes-from +--- + +# Why Provenance Matters in Drinks + +Provenance is one of those words that gets used so badly it can start to sound meaningless. But the word itself is not the problem. The problem is when brands use it without proving anything. + +In drinks, provenance matters when it helps explain three things: + +- where the ingredients come from +- why they taste the way they do +- why the customer should trust the story + +## Provenance should explain flavour + +If the ingredient source changes the finished flavour, provenance is relevant. + +That is true for Golden's honey and it is true for Golden's fruit. A product built around New Zealand mānuka and kānuka honey, Hawke's Bay Meyer lemons, and Otago blackcurrants should sound more specific than a drink built from generic sweetener and flavour systems. + +## Provenance builds trust when it is verifiable + +The strongest provenance stories are the ones that can survive scrutiny. + +That means being specific about source, region, and ingredient logic rather than using a lot of soft-focus language about nature, craft, or purity. + +## This is especially important in honey + +Mānuka honey is already a trust-sensitive category. People care about authenticity, origin, and traceability. If Golden wants to rank and win in honey-related search, provenance has to be part of the site's knowledge layer. + +That is why the brand needs pages and articles that treat provenance as information, not poetry. + +## Why it matters for a soda brand + +Most soda brands do not bother with provenance because their ingredients do not reward that kind of scrutiny. Golden is different. + +If the brand is serious about being a New Zealand honey soda brand, then provenance is not optional. It is one of the clearest reasons the product deserves to exist in the first place. + +## The short version + +Provenance matters in drinks when it makes the product more understandable and more trustworthy. In Golden, it does both. diff --git a/docs/seo-competitor-content-ideas.md b/docs/seo-competitor-content-ideas.md new file mode 100644 index 000000000..5a0069b6c --- /dev/null +++ b/docs/seo-competitor-content-ideas.md @@ -0,0 +1,127 @@ +# Competitor Content Patterns For Golden + +This note summarizes the official content patterns reviewed across: + +- Egmont Honey +- The True Honey Co. +- Comvita +- Manukora +- Mānuka Health +- OLIPOP +- Steens Honey + +## What these brands are doing well + +### 1. Category-definition content + +These brands do not assume the customer already understands the category. + +- Comvita: `What is Mānuka Honey?` +- Manukora: `What is Manuka Honey?`, `Manuka Tree` +- OLIPOP: `What Is Prebiotic Soda?` + +This is important because Google and AI search need clean pages that define the thing in plain language. + +### 2. Authenticity and trust content + +The strongest honey brands repeatedly explain: + +- how authenticity is checked +- what grading systems mean +- why New Zealand origin matters +- how traceability works +- how to avoid fake or misleading products + +Examples: + +- Egmont: `UMF vs. MGO Grading`, trace and quality sections +- The True Honey Co.: `6 ways to avoid buying fake manuka honey` +- Comvita: UMF testing and trust pages +- Manukora: traceability guides +- Mānuka Health: authenticity and MGO/UMF explainers + +### 3. Provenance and source storytelling + +The best brands make place part of the product. + +- Egmont: remote South Taranaki, farm/hive/factory control +- True Honey: remote forests, helicopter access, hive-to-home +- Comvita: remote regions, decades of beekeeping heritage +- Mānuka Health: single-origin stories and traceability + +This is especially relevant for Golden because provenance is one of the few ways the brand can feel bigger than “just another soda.” + +### 4. Ingredient science, but simplified + +Brands in both honey and functional soda explain ingredients without writing like an academic paper. + +- Comvita / Mānuka Health: MGO, UMF, compounds, testing +- OLIPOP: prebiotic fiber, OLISMART, why the formula is different + +The pattern is: + +- define the ingredient +- explain why it matters +- explain how to read the label +- avoid making the page unreadable + +### 5. Lifestyle and ritual framing + +The top brands connect ingredients to routines. + +- Manukora: daily ritual, first month with mānuka +- OLIPOP: soda alternative, digestive-health routine +- Steens / Egmont: recipes and usage moments + +This matters for Golden, but it should stay grounded. The site should talk about routine, taste, replacement, and ritual without pretending a soda is medicine. + +## Clear topic clusters that show up repeatedly + +- What is it? +- How is it different? +- How do I know it is real? +- What do the grades mean? +- Where does it come from? +- Why does source matter? +- How do I use it? +- What makes this brand different? + +## What Golden should do with this + +Golden should not try to copy honey-jar brands page for page. The better move is to adapt the proven content structure to a New Zealand honey soda category: + +- `What is a honey soda?` +- `Why Golden uses honey instead of refined sugar` +- `How honey changes the flavour of soda` +- `How to read MGO and UMF on a mānuka label` +- `How to tell if mānuka honey is authentic` +- `Why New Zealand origin matters in mānuka honey` +- `What makes a better-for-you soda` +- `What does low-cal actually mean in soda` +- `Where Golden's fruit comes from` +- `Why provenance matters in drinks` + +## Source links reviewed + +- https://egmonthoney.com/pages/how-to-use-manuka-honey +- https://egmonthoney.com/pages/grade-everyday-use-multifloral-manuka-honey +- https://egmonthoney.com/pages/about-egmont-honey +- https://truehoney.co.nz/blogs/the-true-honey-co-blog/6-ways-to-avoid-buying-fake-manuka-honey +- https://truehoney.co.nz/blogs/the-true-honey-co-blog/not-all-honeys-are-equal-here-s-why +- https://truehoney.co.nz/blogs/the-true-honey-co-blog/all-things-nice-how-to-store-your-manuka-honey +- https://comvita.co.nz/blogs/the-buzz/what-is-manuka-honey +- https://comvita.co.nz/blogs/the-buzz/the-umf-4-factor-quality-assurance-test-for-manuka-honey +- https://comvita.co.nz/pages/what-is-manuka-honey +- https://manukora.com/blogs/honey-guide/back-to-the-source-traceability +- https://manukora.com/blogs/honey-guide/manuka-tree +- https://manukora.com/blogs/honey-guide/how-to-choose-manuka-honey +- https://us.manukahealth.com/en/pages/authenticity +- https://us.manukahealth.com/blogs/articles/umf-certifications +- https://us.manukahealth.com/blogs/articles/understanding-mgo-ratings-how-to-choose-the-right-manuka-honey-for-you +- https://drinkolipop.com/blogs/digest/what-is-prebiotic-soda +- https://drinkolipop.com/blogs/digest/what-makes-olipop-different +- https://drinkolipop.com/blogs/digest/what-is-olismart-get-to-know-the-ingredients-in-olipop +- https://drinkolipop.com/blogs/digest/olipop-achieves-nutrastrong-prebiotic-verified-product-certification +- https://www.mpi.govt.nz/food-business/honey-bee-products-processing-requirements/manuka-honey-testing +- https://www.umf.org.nz/ + From 03d8ef9bd7b34b8f12b0249203e7ebceab9619a6 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 00:51:06 +1300 Subject: [PATCH 1261/1275] Implement SEO phase 3 commercial and trust pages --- docs/seo-phase3-admin-checklist.md | 27 ++ snippets/meta-tags.liquid | 18 +- templates/collection.json | 479 +++++++++++++++++++++++- templates/page.contact.json | 73 ++-- templates/page.store-locator.json | 572 ++++++++++++++++++++++------- templates/page.wholesale.json | 112 +++++- templates/product.json | 143 +++++++- 7 files changed, 1236 insertions(+), 188 deletions(-) create mode 100644 docs/seo-phase3-admin-checklist.md diff --git a/docs/seo-phase3-admin-checklist.md b/docs/seo-phase3-admin-checklist.md new file mode 100644 index 000000000..8e8d4409b --- /dev/null +++ b/docs/seo-phase3-admin-checklist.md @@ -0,0 +1,27 @@ +# SEO Phase 3 Admin Checklist + +1. Confirm these pages use the intended templates: + - `Store Locator` -> `page.store-locator` + - `Wholesale` -> `page.wholesale` + - `Contact` -> `page.contact` + +2. Add real stockist content to the `Store Locator` page body in Shopify admin. + - Best case: a crawlable city + retailer list in HTML. + - Acceptable fallback: a locator embed plus a short text list of key cities or retail partners. + - Avoid leaving the page body empty long term. + +3. Confirm these authority pages exist in Shopify admin, because collection and product pages now link to them: + - `/pages/ingredients` + - `/pages/new-zealand-honey` + - `/pages/how-golden-is-made` + - `/pages/where-our-honey-comes-from` + - `/pages/manuka-vs-kanuka` + +4. Review each product description in Shopify admin. + - The theme now adds stronger generic proof and trust content. + - The product description should still stay specific to the flavour itself. + +5. Sanity-check the live button destinations once this theme is on preview. + - Store locator -> contact / wholesale / ingredients + - Collection authority cards -> ingredients / New Zealand honey / how Golden is made + - Product accordions -> ingredients / honey / shipping / returns / contact diff --git a/snippets/meta-tags.liquid b/snippets/meta-tags.liquid index 09027bc44..dae06833f 100644 --- a/snippets/meta-tags.liquid +++ b/snippets/meta-tags.liquid @@ -144,11 +144,17 @@ when 'faq' assign seo_title = 'FAQs | Ingredients, Orders & Stockists | Golden' when 'store-location' - assign seo_title = 'Where To Buy Golden | Stockists In New Zealand' + assign seo_title = 'Where To Buy Golden Honey Soda | Stockists In New Zealand' + when 'stockists' + assign seo_title = 'Where To Buy Golden Honey Soda | Stockists In New Zealand' when 'wholesale' - assign seo_title = 'Wholesale Honey Soda | Golden' + assign seo_title = 'Wholesale New Zealand Honey Soda | Golden' when 'contact' assign seo_title = 'Contact Golden | Customer Support' + when 'shipping' + assign seo_title = 'Shipping Information | Golden Honey Soda' + when 'returns' + assign seo_title = 'Returns & Refunds | Golden Honey Soda' when 'press' assign seo_title = 'Press | Golden Honey Soda | Golden' when 'save-bees' @@ -184,11 +190,17 @@ when 'faq' assign seo_description = 'Answers about Golden''s ingredients, honey, nutrition, sourcing, shipping, wholesale, and where to buy our New Zealand honey sodas.' when 'store-location' - assign seo_description = 'Find Golden stockists and stores across New Zealand and discover where to buy our honey-sweetened sodas in person.' + assign seo_description = 'Find where to buy Golden in New Zealand and explore stockists carrying our honey-sweetened, low-cal sparkling sodas.' + when 'stockists' + assign seo_description = 'Find where to buy Golden in New Zealand and explore stockists carrying our honey-sweetened, low-cal sparkling sodas.' when 'wholesale' assign seo_description = 'Stock Golden''s New Zealand-made honey sodas. Wholesale information, ordering, and product details for cafes, retailers, and hospitality.' when 'contact' assign seo_description = 'Get in touch with Golden for customer support, stockist leads, wholesale questions, or general enquiries about our New Zealand honey sodas.' + when 'shipping' + assign seo_description = 'Read Golden''s shipping information for delivery timing, order updates, and where we send our New Zealand-made honey sodas.' + when 'returns' + assign seo_description = 'See Golden''s returns and refund information, plus how to contact us if there is an issue with your honey soda order.' when 'press' assign seo_description = 'Press information, brand background, and assets for Golden, the New Zealand honey soda brand built around mānuka honey and local fruit.' when 'save-bees' diff --git a/templates/collection.json b/templates/collection.json index 6dcf70f09..2ce9918c7 100644 --- a/templates/collection.json +++ b/templates/collection.json @@ -246,10 +246,487 @@ "padding-block-start": 0, "padding-block-end": 64 } + }, + "section_authority": { + "type": "section", + "blocks": { + "text_HGq4es": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

{% case closest.collection.handle %}{% when 'honey-soda' %}Why Golden builds soda around New Zealand honey{% when 'low-cal-manuka-soda' %}Why Golden keeps these sodas low-cal{% else %}Why Golden tastes different{% endcase %}

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_Mr2qBv": { + "type": "text", + "name": "Intro", + "settings": { + "text": "{% case closest.collection.handle %}{% when 'low-cal-manuka-soda' %}

Golden keeps these sparkling drinks low-cal by building flavour around New Zealand honey, fruit, acidity, and balance instead of chasing a heavy syrupy finish. The result is a lighter-bodied soda with real ingredient character.

{% else %}

Golden's commercial pages now need to do more than sell cans. They also need to show Google and shoppers why these drinks are distinct: New Zealand honey, real fruit, no refined sugar, and a traceable made-in-Aotearoa process.

{% endcase %}", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 12, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "group_fFCQ6q": { + "type": "group", + "name": "Authority links", + "settings": { + "content_direction": "row", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "stretch", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 24, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fit", + "custom_height": 100, + "inherit_color_scheme": true, + "color_scheme": "", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": { + "group_ingredients": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "text_ingredients_heading": { + "type": "text", + "settings": { + "text": "

Ingredients

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_ingredients_copy": { + "type": "text", + "settings": { + "text": "

See how Golden uses mānuka and kānuka honey, real fruit, and no refined sugar across the range.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button_ingredients": { + "type": "button", + "settings": { + "label": "Explore ingredients", + "link": "/pages/ingredients", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_ingredients_heading", + "text_ingredients_copy", + "button_ingredients" + ] + }, + "group_honey": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "text_honey_heading": { + "type": "text", + "settings": { + "text": "

Mānuka & kānuka honey

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_honey_copy": { + "type": "text", + "settings": { + "text": "

Learn what makes New Zealand honey distinct, how mānuka and kānuka differ, and why provenance matters in Golden.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button_honey": { + "type": "button", + "settings": { + "label": "Read about honey", + "link": "/pages/new-zealand-honey", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_honey_heading", + "text_honey_copy", + "button_honey" + ] + }, + "group_process": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "text_process_heading": { + "type": "text", + "settings": { + "text": "

How Golden is made

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "text_process_copy": { + "type": "text", + "settings": { + "text": "

Follow how Golden turns honey, fruit, water, and carbonation into a balanced sparkling drink made in New Zealand.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button_process": { + "type": "button", + "settings": { + "label": "See the process", + "link": "/pages/how-golden-is-made", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "text_process_heading", + "text_process_copy", + "button_process" + ] + } + }, + "block_order": [ + "group_ingredients", + "group_honey", + "group_process" + ] + } + }, + "block_order": [ + "text_HGq4es", + "text_Mr2qBv", + "group_fFCQ6q" + ], + "name": "Collection authority", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "center", + "gap": 24, + "section_width": "page-width", + "section_height": "", + "section_height_custom": 50, + "color_scheme": "scheme-6", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "split_divider_color": "#d9d9d9", + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "padding-block-start": 48, + "padding-block-end": 64 + } } }, "order": [ "section", - "main" + "main", + "section_authority" ] } diff --git a/templates/page.contact.json b/templates/page.contact.json index 8142115db..e520c90aa 100644 --- a/templates/page.contact.json +++ b/templates/page.contact.json @@ -12,22 +12,22 @@ "main": { "type": "main-page", "blocks": { - "content": { + "heading": { "type": "text", - "name": "t:names.content", + "name": "Title", "settings": { - "text": "{{ closest.page.content }}", + "text": "

Contact Golden

", "width": "100%", - "max_width": "narrow", - "alignment": "center", - "type_preset": "rte", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", "font": "var(--font-primary--family)", "font_size": "", "line_height": "normal", "letter_spacing": "normal", "case": "none", "wrap": "pretty", - "color": "", + "color": "var(--color-foreground-heading)", "background": false, "background_color": "#00000026", "corner_radius": 0, @@ -37,14 +37,47 @@ "padding-inline-end": 0 }, "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Use this page for customer support, order issues, stockist leads, wholesale questions, press requests, or general enquiries about Golden's New Zealand honey sodas.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} } }, "block_order": [ - "content" + "heading", + "intro", + "page-content" ], "settings": { "content_direction": "column", - "gap": 44, + "gap": 16, "color_scheme": "", "padding-block-start": 44, "padding-block-end": 44 @@ -65,7 +98,7 @@ "vertical_alignment_flex_direction_column": "flex-start", "enable_sticky": false, "sticky_offset": 0, - "gap": 32, + "gap": 20, "width": "fill", "custom_width": 100, "width_mobile": "fill", @@ -94,15 +127,14 @@ "padding-inline-end": 40 }, "blocks": { - "text_JQDJFp": { + "text_heading": { "type": "text", - "name": "t:names.text", "settings": { - "text": "

Contact

", + "text": "

Customer support, stockists, and quick answers

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "h3", + "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -120,17 +152,16 @@ }, "blocks": {} }, - "text_4k7reC": { + "text_copy": { "type": "text", - "name": "t:names.text", "settings": { - "text": "

Got a question, a stockist lead, or just want to say hi? Fill out the form and we’ll get back to you as soon as we can. For order help, include your order number and the email you used at checkout so we can sort it quickly.

", + "text": "

For order help, include your order number and the email used at checkout so we can sort it quickly. For stockist leads or wholesale questions, tell us where you are based and what kind of account you run.

Before contacting us, the quickest answers may already be on these pages: FAQs, Shipping, Returns, Store locator, and Wholesale.

If you want to understand the product before reaching out, start with our ingredients and New Zealand honey pages.

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "paragraph", + "type_preset": "rte", "font": "var(--font-body--family)", - "font_size": "", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", @@ -148,8 +179,8 @@ } }, "block_order": [ - "text_JQDJFp", - "text_4k7reC" + "text_heading", + "text_copy" ] }, "group_pacYPp": { diff --git a/templates/page.store-locator.json b/templates/page.store-locator.json index f719200f6..65ed20999 100644 --- a/templates/page.store-locator.json +++ b/templates/page.store-locator.json @@ -16,7 +16,7 @@ "type": "text", "name": "Title", "settings": { - "text": "

{{ closest.page.title }}

", + "text": "

Where to Buy Golden in New Zealand

", "width": "100%", "max_width": "none", "alignment": "left", @@ -38,25 +38,121 @@ }, "blocks": {} }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is available through selected stockists, retailers, and hospitality partners across New Zealand. Use the stockist details on this page to check the latest availability, as individual ranges can vary by store.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, "page-content": { "type": "page-content", "settings": {}, "blocks": {} }, - "group_B4L8Dp": { + "outro": { + "type": "text", + "name": "Support note", + "settings": { + "text": "

If you cannot find Golden nearby yet, ask your local store to stock it or send us a stockist lead and we will point them to our wholesale team.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 8, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "heading", + "intro", + "page-content", + "outro" + ], + "settings": { + "content_direction": "column", + "gap": 16, + "color_scheme": "scheme-6", + "padding-block-start": 44, + "padding-block-end": 44 + } + }, + "section_buying_path": { + "type": "section", + "blocks": { + "text_heading": { + "type": "text", + "name": "Heading", + "settings": { + "text": "

Stockists, wholesale, and what to know before you buy

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h4", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "group_cards": { "type": "group", - "name": "t:names.group", + "name": "Cards", "settings": { - "content_direction": "column", + "content_direction": "row", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", - "vertical_alignment": "center", + "vertical_alignment": "stretch", "align_baseline": false, "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", "enable_sticky": false, "sticky_offset": 0, - "gap": 12, + "gap": 24, "width": "fill", "custom_width": 100, "width_mobile": "fill", @@ -85,164 +181,366 @@ "padding-inline-end": 0 }, "blocks": { - "image_MMdTDx": { - "type": "image", - "name": "t:names.image", + "group_shoppers": { + "type": "group", "settings": { - "image": "shopify://shop_images/DSCN0444.webp", + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", "link": "", - "image_ratio": "landscape", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "heading": { + "type": "text", + "settings": { + "text": "

Looking for Golden?

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "copy": { + "type": "text", + "settings": { + "text": "

Golden's honey-sweetened, low-cal sparkling sodas are turning up in more retailers and hospitality venues across Aotearoa. Availability can vary by location, so contact us if you need help finding the right stockist.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button": { + "type": "button", + "settings": { + "label": "Contact Golden", + "link": "/pages/contact", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } + }, + "block_order": [ + "heading", + "copy", + "button" + ] + }, + "group_stockists": { + "type": "group", + "settings": { + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, "width": "fill", "custom_width": 100, "width_mobile": "fill", "custom_width_mobile": 100, "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", "border": "none", "border_width": 1, "border_opacity": 100, "border_radius": 0, - "placeholder_color": "", - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "heading": { + "type": "text", + "settings": { + "text": "

Become a stockist

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "copy": { + "type": "text", + "settings": { + "text": "

If you run a retailer, cafe, or hospitality venue and want to stock Golden, start with our wholesale page. It explains the brand, product fit, and where to contact us for ordering.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button": { + "type": "button", + "settings": { + "label": "Wholesale enquiries", + "link": "/pages/wholesale", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } }, - "blocks": {} + "block_order": [ + "heading", + "copy", + "button" + ] }, - "product_description_AJbKWt": { - "type": "product-description", - "name": "t:names.product_description", + "group_background": { + "type": "group", "settings": { - "text": "

My mate James in green, me, Morg, founder of Golden, on the right.

", - "width": "100%", - "max_width": "normal", - "alignment": "right", - "type_preset": "h6", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "content_direction": "column", + "vertical_on_mobile": true, + "horizontal_alignment": "flex-start", + "vertical_alignment": "center", + "align_baseline": false, + "horizontal_alignment_flex_direction_column": "flex-start", + "vertical_alignment_flex_direction_column": "space-between", + "enable_sticky": false, + "sticky_offset": 0, + "gap": 16, + "width": "fill", + "custom_width": 100, + "width_mobile": "fill", + "custom_width_mobile": 100, + "height": "fill", + "custom_height": 100, + "inherit_color_scheme": false, + "color_scheme": "scheme-1", + "background_media": "none", + "video_position": "cover", + "background_image_position": "cover", + "border": "none", + "border_width": 1, + "border_opacity": 100, + "border_radius": 0, + "toggle_overlay": false, + "overlay_color": "#00000026", + "overlay_style": "solid", + "gradient_direction": "to top", + "link": "", + "open_in_new_tab": false, + "placeholder": "", + "padding-block-start": 24, + "padding-block-end": 24, + "padding-inline-start": 24, + "padding-inline-end": 24 + }, + "blocks": { + "heading": { + "type": "text", + "settings": { + "text": "

What is in the can?

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "h5", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "copy": { + "type": "text", + "settings": { + "text": "

Golden is built around New Zealand honey, real fruit, and a no-refined-sugar approach. If you are comparing the range before buying, start with our ingredients and honey pages.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "button": { + "type": "button", + "settings": { + "label": "Explore ingredients", + "link": "/pages/ingredients", + "open_in_new_tab": false, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + } }, - "blocks": {} + "block_order": [ + "heading", + "copy", + "button" + ] } }, "block_order": [ - "image_MMdTDx", - "product_description_AJbKWt" + "group_shoppers", + "group_stockists", + "group_background" ] } }, "block_order": [ - "heading", - "page-content", - "group_B4L8Dp" - ], - "settings": { - "content_direction": "column", - "gap": 16, - "color_scheme": "scheme-6", - "padding-block-start": 44, - "padding-block-end": 44 - } - }, - "section_jq6wGK": { - "type": "section", - "blocks": { - "text_7En9gM": { - "type": "text", - "name": "t:names.heading", - "settings": { - "text": "

Starting Golden

", - "width": "100%", - "max_width": "normal", - "alignment": "center", - "type_preset": "h4", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground-heading)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "text_azwx93": { - "type": "text", - "name": "t:names.text", - "settings": { - "text": "

Golden began in the galley of a small yacht bound for Kawau Island. A spoon of mānuka honey. A pot of stovetop berry syrup. A SodaStream bottle on its last burp of CO₂.

As the wind dropped, I came back to a question that had been chewing me all summer: could a soda be light, clean and full-flavoured using only New Zealand honey and fruit?

It felt obvious once I said it out loud. New Zealand is world-renowned for mānuka honey and we grow world-class fruit, but no local drinks brand had meaningfully brought those two strengths together. No one had put honey at the centre and built flavours that clearly express where they come from, and who grows them.

I wasn’t sure it would work. I wondered if the honey would swamp the fruit, or if the acidity would cut too sharply.

It did neither.

The first batch was bright and refreshing, with honey notes you simply don’t get from refined sugar or chemical sweeteners. I was hooked. And the mission snapped into focus: build a New Zealand drinks brand rooted in local honey and fruit, anchored in the supply chains I already knew.

I spent my teenage summers working long days on the coastal orchards around Bay View, Napier. Strawberries before sunrise. Apples and peaches through the heat of the day. Potatoes pulled from the soil for the orchard store in the evening.

I packed fruit, thinned trees, and learnt how produce moves from tree to shelf, through pack-houses, cold stores, and export dispatch. Work like that gives you a bias for hard-working ingredients and straight processes. No shortcuts. No mystery chemicals.

Later, I collected a few pieces of paper (and a sobering amount of debt) across Mt Aspiring College, Victoria University, Auckland University and AUT, then cut my teeth on advertising sets as an assistant director. I poured my energy into selling other people’s products and the longer I did, the stronger the itch to build something of my own. The more I worked ads for New Zealand’s boring oligopolies, the more I found myself “imagineering” the products I’d rather champion, and the stories I’d rather tell.

One idea kept resurfacing, motivated strongly by nostalgia for my time working the harvest: pair New Zealand honey with fruit, made here, from ingredients with real provenance.

San Pellegrino announces Italy. Our fruit-growing regions and mānuka forests deserve an equivalent. Golden is my answer.

That quick galley batch set everything in motion. Over the next three years I kept testing: bench trials, pilot runs, and round after round of refinement with support from Callaghan Innovation and food scientists at Massey University. Real ingredients are harder to get spot-on than hyper-processed alternatives, but the results are worth it.

In 2024, I backed myself, stepping away from a tech company I was working for at the time, and launched Golden.

We sweeten with mānuka and kānuka honey, flavour with real New Zealand fruit, and use no refined sugar. Familiar flavours, reimagined with hard-working ingredients. Things we grow here. Light, balanced and full-flavour sodas.

Made in New Zealand.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 16, - "padding-block-end": 16, - "padding-inline-start": 16, - "padding-inline-end": 16 - }, - "blocks": {} - }, - "button_ekeYYJ": { - "type": "button", - "name": "t:names.button", - "settings": { - "label": "Shop Golden", - "link": "shopify://collections/all", - "open_in_new_tab": true, - "style_class": "link", - "width": "fit-content", - "custom_width": 100, - "width_mobile": "fit-content", - "custom_width_mobile": 100 - }, - "blocks": {} - } - }, - "block_order": [ - "text_7En9gM", - "text_azwx93", - "button_ekeYYJ" + "text_heading", + "group_cards" ], - "name": "t:names.rich_text_section", + "name": "Store locator support", "settings": { "content_direction": "column", "vertical_on_mobile": true, "horizontal_alignment": "flex-start", "vertical_alignment": "center", "align_baseline": false, - "horizontal_alignment_flex_direction_column": "center", + "horizontal_alignment_flex_direction_column": "flex-start", "vertical_alignment_flex_direction_column": "center", - "gap": 25, - "section_width": "full-width", - "section_height": "small", + "gap": 24, + "section_width": "page-width", + "section_height": "", "section_height_custom": 50, "color_scheme": "", "background_media": "none", @@ -257,13 +555,13 @@ "overlay_color": "#00000026", "overlay_style": "solid", "gradient_direction": "to top", - "padding-block-start": 44, - "padding-block-end": 24 + "padding-block-start": 12, + "padding-block-end": 64 } } }, "order": [ "main", - "section_jq6wGK" + "section_buying_path" ] } diff --git a/templates/page.wholesale.json b/templates/page.wholesale.json index 0875307f1..ed3e84476 100644 --- a/templates/page.wholesale.json +++ b/templates/page.wholesale.json @@ -11,9 +11,73 @@ "sections": { "main": { "type": "main-page", + "blocks": { + "heading": { + "type": "text", + "name": "Title", + "settings": { + "text": "

Wholesale Golden

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "h3", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground-heading)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "intro": { + "type": "text", + "name": "Intro", + "settings": { + "text": "

Golden is a New Zealand-made range of honey-sweetened, low-cal sparkling sodas built around mānuka and kānuka honey, real fruit, and no refined sugar. This page is for retailers, cafes, bottle stores, and hospitality venues looking to stock the range.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 16, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + }, + "page-content": { + "type": "page-content", + "settings": {}, + "blocks": {} + } + }, + "block_order": [ + "heading", + "intro", + "page-content" + ], "settings": { "content_direction": "column", - "gap": 44, + "gap": 16, "color_scheme": "", "padding-block-start": 44, "padding-block-end": 44 @@ -34,7 +98,7 @@ "vertical_alignment_flex_direction_column": "flex-start", "enable_sticky": false, "sticky_offset": 0, - "gap": 32, + "gap": 20, "width": "fill", "custom_width": 100, "width_mobile": "fill", @@ -63,15 +127,14 @@ "padding-inline-end": 40 }, "blocks": { - "text_Wzrbxm": { + "text_heading": { "type": "text", - "name": "t:names.text", "settings": { - "text": "

Wholesale

", + "text": "

For retailers, cafes, and hospitality

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "h3", + "type_preset": "h4", "font": "var(--font-body--family)", "font_size": "1rem", "line_height": "normal", @@ -89,17 +152,16 @@ }, "blocks": {} }, - "text_wholesale_info": { + "text_copy": { "type": "text", - "name": "t:names.text", "settings": { - "text": "

For wholesale enquiries in New Zealand, contact us via this stockist form, or email us at wholesale@staygolden.co.nz.

", + "text": "

Golden gives buyers a different soft drink proposition: New Zealand honey instead of refined sugar, real fruit, and a lighter-bodied profile designed for modern grocery, cafe, and beverage fridges.

  • Made in New Zealand
  • Sweetened with mānuka and kānuka honey across the range
  • No refined sugar
  • Clear provenance story for honey and fruit

If you want to understand the ingredient and sourcing side before ordering, start with our Ingredients, New Zealand honey, and How Golden is made pages.

", "width": "100%", "max_width": "normal", "alignment": "left", - "type_preset": "paragraph", + "type_preset": "rte", "font": "var(--font-body--family)", - "font_size": "", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", @@ -115,17 +177,30 @@ }, "blocks": {} }, - "text_wholesale_note": { + "button_upstock": { + "type": "button", + "settings": { + "label": "Order on Upstock", + "link": "https://www.upstock.app/wholesalers/golden", + "open_in_new_tab": true, + "style_class": "link", + "width": "fit-content", + "custom_width": 100, + "width_mobile": "fit-content", + "custom_width_mobile": 100 + }, + "blocks": {} + }, + "text_note": { "type": "text", - "name": "t:names.text", "settings": { - "text": "

We primarily use Upstock for wholesale ordering here.

", + "text": "

For wholesale enquiries in New Zealand, use the form on this page or email wholesale@staygolden.co.nz. If you are looking for a nearby retailer rather than opening an account, head to the store locator.

", "width": "100%", "max_width": "normal", "alignment": "left", "type_preset": "paragraph", "font": "var(--font-body--family)", - "font_size": "", + "font_size": "1rem", "line_height": "normal", "letter_spacing": "normal", "case": "none", @@ -143,9 +218,10 @@ } }, "block_order": [ - "text_Wzrbxm", - "text_wholesale_info", - "text_wholesale_note" + "text_heading", + "text_copy", + "button_upstock", + "text_note" ] }, "group_iEqhzJ": { diff --git a/templates/product.json b/templates/product.json index b674fcf24..5c47eb7f8 100644 --- a/templates/product.json +++ b/templates/product.json @@ -135,6 +135,17 @@ }, "blocks": {} }, + "review_x1PHrA": { + "type": "review", + "settings": { + "stars_style": "shaded", + "show_number": true, + "rating_color": "foreground", + "type_preset": "paragraph", + "alignment": "left" + }, + "blocks": {} + }, "price_tVjtKg": { "type": "price", "settings": { @@ -160,6 +171,7 @@ }, "block_order": [ "text_xpVMaM", + "review_x1PHrA", "price_tVjtKg" ] }, @@ -189,6 +201,58 @@ }, "blocks": {} }, + "text_m31sRd": { + "type": "text", + "name": "Flavour summary", + "settings": { + "text": "{% case closest.product.handle %}{% when 'golden-lemon-manuka' %}

Lemon Mānuka Soda is built around real lemon juice and New Zealand mānuka honey for a bright, rounded finish that lands closer to fresh lemonade than conventional sugary soda.

{% when 'blackcurrant-manuka-soda' %}

Blackcurrant Mānuka Soda pairs deep New Zealand blackcurrant character with mānuka honey, giving the fruit more depth and a cleaner finish than refined sugar alone.

{% when 'kanuka-kola' %}

Kānuka Kola is Golden's New Zealand take on cola, blending kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch note without refined sugar.

{% else %}

Golden builds sparkling drinks around New Zealand honey, real fruit, and a lighter, cleaner finish than standard soft drink formulas.

{% endcase %}", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-primary--family)", + "font_size": "", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, + "text_qD9uCf": { + "type": "text", + "name": "Trust points", + "settings": { + "text": "
    {% case closest.product.handle %}{% when 'kanuka-kola' %}
  • Sweetened with New Zealand kānuka honey
  • {% when 'golden-lemon-manuka' %}
  • Sweetened with New Zealand mānuka honey and built around real lemon juice
  • {% when 'blackcurrant-manuka-soda' %}
  • Sweetened with New Zealand mānuka honey and built around bold blackcurrant character
  • {% else %}
  • Sweetened with New Zealand honey
  • {% endcase %}
  • Made in New Zealand
  • No refined sugar
  • Read more about our ingredients, honey sourcing, and production process.
", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 8, + "padding-inline-start": 16, + "padding-inline-end": 16 + }, + "blocks": {} + }, "variant_picker_R3rGDr": { "type": "variant-picker", "settings": { @@ -240,7 +304,6 @@ "accordion_Yyf6z8": { "type": "accordion", "name": "t:names.accordion", - "disabled": true, "settings": { "icon": "caret", "dividers": true, @@ -260,7 +323,7 @@ "accordion_row_tGJFzd": { "type": "accordion_row", "settings": { - "heading": "Return policy", + "heading": "Ingredients & flavour", "right_heading": "", "heading_links_enabled": false, "heading_link": "", @@ -291,7 +354,7 @@ "text_GbNfwY": { "type": "text", "settings": { - "text": "

Our goal is for every customer to be totally satisfied with their purchase. If this isn't the case, let us know and we'll do our best to work with you to make it right.

", + "text": "{% case closest.product.handle %}{% when 'golden-lemon-manuka' %}

This flavour combines real lemon juice with New Zealand mānuka honey for a bright, clean finish and a more rounded sweetness than a refined-sugar lemonade.

{% when 'blackcurrant-manuka-soda' %}

This flavour balances rich blackcurrant intensity with New Zealand mānuka honey, giving it depth and a cleaner finish than a standard blackcurrant soft drink.

{% when 'kanuka-kola' %}

This flavour uses kānuka honey, kola nut extract, lemon juice, and a butterscotch note to create Golden's New Zealand take on cola.

{% else %}

This flavour is built around New Zealand honey and real fruit or spice ingredients for a lighter, more balanced sparkling drink.

{% endcase %}

For the full brand-wide ingredient approach, visit our Ingredients page.

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -321,7 +384,7 @@ "accordion_row_UzUGxH": { "type": "accordion_row", "settings": { - "heading": "Shipping", + "heading": "Honey, provenance & made in New Zealand", "right_heading": "", "heading_links_enabled": false, "heading_link": "", @@ -352,7 +415,7 @@ "text_wJqtkL": { "type": "text", "settings": { - "text": "

We will work quickly to ship your order as soon as possible. Once your order has shipped, you will receive an email with further information. Delivery times vary depending on your location.

", + "text": "

Golden sweetens with New Zealand mānuka and kānuka honey rather than refined sugar, and every flavour is made in Aotearoa. Provenance matters to us because the honey, fruit, and process are part of what makes the final drink taste clean and distinct.

Read more about our New Zealand honey, how we think about sourcing, and mānuka vs kānuka honey.

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -382,7 +445,7 @@ "accordion_row_wAtz4b": { "type": "accordion_row", "settings": { - "heading": "Manufacturing", + "heading": "Shipping", "right_heading": "", "heading_links_enabled": false, "heading_link": "", @@ -413,7 +476,7 @@ "text_CnFWer": { "type": "text", "settings": { - "text": "

Our products are manufactured both locally and globally. We carefully select our manufacturing partners to ensure our products are high quality and a fair value.

", + "text": "

We move quickly to dispatch orders and send tracking details once your order is on the way. Delivery timing depends on your location and the carrier handling your order.

See the full Shipping page for delivery information and order updates.

", "width": "100%", "max_width": "normal", "alignment": "left", @@ -439,18 +502,82 @@ "block_order": [ "text_CnFWer" ] + }, + "accordion_row_Rp3JxQ": { + "type": "accordion_row", + "settings": { + "heading": "Returns & support", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "split", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 0, + "summary_padding_block_end": 0, + "summary_padding_inline_start": 12, + "summary_padding_inline_end": 12, + "content_padding_block_start": 12, + "content_padding_block_end": 12, + "content_padding_inline_start": 24, + "content_padding_inline_end": 24, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1, + "heading_max_size": 1.4, + "icon": "none", + "width": 24 + }, + "blocks": { + "text_ML4kYx": { + "type": "text", + "settings": { + "text": "

If there is an issue with your order, let us know and we will work to put it right. Start with our Returns page or contact us directly for support.

", + "width": "100%", + "max_width": "normal", + "alignment": "left", + "type_preset": "rte", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_ML4kYx" + ] } }, "block_order": [ "accordion_row_tGJFzd", "accordion_row_UzUGxH", - "accordion_row_wAtz4b" + "accordion_row_wAtz4b", + "accordion_row_Rp3JxQ" ] } }, "block_order": [ "group_icgrde", "text_aEtTtq", + "text_m31sRd", + "text_qD9uCf", "variant_picker_R3rGDr", "buy_buttons_eYQEYi", "accordion_Yyf6z8" From 89536659c9c5ecaf7f0f1d419a403d1fbfd3ec2b Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 08:08:10 +1300 Subject: [PATCH 1262/1275] Add SEO phase 4 search ops and authority playbooks --- ...gle-merchant-center-search-console-plan.md | 193 ++++++++++++++ docs/offsite-authority-targets.md | 236 ++++++++++++++++++ docs/search-console-query-buckets.csv | 8 + docs/store-locator-content-pack.md | 81 ++++++ docs/store-locator-page-body.html | 44 ++++ 5 files changed, 562 insertions(+) create mode 100644 docs/google-merchant-center-search-console-plan.md create mode 100644 docs/offsite-authority-targets.md create mode 100644 docs/search-console-query-buckets.csv create mode 100644 docs/store-locator-content-pack.md create mode 100644 docs/store-locator-page-body.html diff --git a/docs/google-merchant-center-search-console-plan.md b/docs/google-merchant-center-search-console-plan.md new file mode 100644 index 000000000..721da1c83 --- /dev/null +++ b/docs/google-merchant-center-search-console-plan.md @@ -0,0 +1,193 @@ +# Google Merchant Center And Search Console Plan + +Written on March 13, 2026. + +This is the next search-operations layer after the theme work. It is the part that helps Google trust Golden's product data, understand coverage across product and content pages, and measure whether the non-branded work is actually landing. + +## Official Sources + +- Search Console setup: https://support.google.com/webmasters/answer/34592 +- Search Console sitemaps: https://support.google.com/webmasters/answer/7451001 +- Search Console URL Inspection: https://support.google.com/webmasters/answer/9012289 +- Search Console Performance report: https://support.google.com/webmasters/answer/7576553 +- AI features and website guidance: https://developers.google.com/search/docs/appearance/ai-features +- Merchant listing structured data: https://developers.google.com/search/docs/appearance/structured-data/merchant-listing +- Product snippets: https://developers.google.com/search/docs/appearance/structured-data/product-snippet +- Search Console shipping and returns settings: https://developers.google.com/search/blog/2025/10/shipping-returns-settings-in-search-console +- Merchant Center support for richer product pages: https://support.google.com/merchants/answer/14994083 +- Local free listings availability: https://support.google.com/merchants/answer/14632409 +- Manufacturer Center support: https://support.google.com/manufacturers/answer/6124116 +- Search Console branded traffic filter and query groups: https://developers.google.com/search/blog/2025/10/easier-performance-analysis-search-console + +## What Golden Needs First + +1. One verified Search Console domain property for `staygolden.co.nz`. +2. One Merchant Center account using a single clean Shopify sync source. +3. Accurate shipping and returns information in Merchant Center or Search Console. +4. Product data that matches the landing pages exactly. +5. A measurement setup that separates branded, commercial, authority, and local-discovery queries. + +## Search Console Setup + +### 1. Verify The Domain Property + +Set up a domain property for `staygolden.co.nz`, not just a URL-prefix property. This keeps the full site under one reporting surface, including protocol changes and locale paths. + +### 2. Submit The Sitemap Index + +Submit: + +- `https://staygolden.co.nz/sitemap.xml` + +Then monitor whether the key URLs become discovered and indexed: + +- home page +- core collections +- core product pages +- ingredients page +- New Zealand honey page +- where our honey comes from +- how Golden is made +- store locator +- shipping +- returns +- wholesale +- contact +- ingredients blog index +- first 3 to 5 ingredient articles + +### 3. Use URL Inspection On Priority URLs + +When a page changes materially, inspect it and request indexing only for: + +- pages whose titles, copy, or internal links materially changed +- new authority pages +- new articles + +Do not mass-request every page every time. + +### 4. Build The Reporting Views That Matter + +Track these buckets separately: + +- branded: `golden`, `stay golden`, `golden soda` +- commercial honey soda: `honey soda`, `manuka soda`, `honey soft drink` +- commercial low-cal: `low cal soda`, `low sugar soda nz`, `better for you soda` +- authority honey: `what is manuka honey`, `manuka vs kanuka`, `new zealand honey` +- local discovery: `where to buy golden`, `golden stockists`, city + brand queries + +If the branded traffic filter and query groups are available on the property, use them. If they are not available yet, replicate the same buckets in your export workflow. + +### 5. Watch The Right Search Console Reports + +Highest priority: + +- Performance +- Page indexing +- Merchant listings +- Product snippets +- Core Web Vitals + +The AI features guidance from Google is clear on the important point: AI search traffic still rolls into the normal `Web` search type. Do not create a separate reporting system that assumes AI traffic lives somewhere else. + +## Merchant Center Setup + +### 1. Clean Up The Account Foundations + +Confirm: + +- business information is complete +- website is claimed and verified +- free listings are enabled +- shipping is accurate +- returns are accurate + +As of October 21, 2025, Search Console shipping and returns settings can be used by identified online merchant sites, and Google notes those settings can take precedence over on-page structured data where applicable. That means the settings need to match the site and policy pages exactly. + +### 2. Use One Source Of Truth For Product Data + +Do not let feed data, structured data, and landing page copy drift apart. + +For each SKU, keep these aligned: + +- product title +- description +- price +- availability +- image +- brand +- GTIN or MPN +- shipping and returns + +### 3. Tighten The Feed Attributes + +For Golden, the feed titles should be explicit rather than poetic. + +Recommended format: + +- `Lemon Manuka Honey Soda - 250ml x 12 - Golden` +- `Blackcurrant Manuka Honey Soda - 250ml x 12 - Golden` +- `Kanuka Kola Honey Soda - 250ml x 12 - Golden` + +Recommended feed details: + +- submit GTIN if the product has a real barcode +- if there is no GTIN, submit `brand` plus a real manufacturer-assigned `mpn` +- do not invent GTINs +- use `item_group_id` only if there are real variant groups +- include rich product details such as sweetener, origin, fruit source, refined sugar, and drink type + +### 4. Improve The Product Pages For Merchant Surfaces + +Google's richer product page guidance points in the same direction as the SEO work already done: + +- longer, more complete descriptions +- more product highlights +- more structured product details +- more images +- clear policies + +For Golden, the missing pieces are mostly product operations rather than theme code: + +- add final ingredient lists in text where needed +- add any nutrition specifics that should be visible in text +- make sure each product image set is complete +- keep shipping and returns consistent between Merchant Center and site policies + +### 5. Do Not Force Local Free Listings Unless Golden Has Its Own Retail Locations + +Local free listings are available in New Zealand, but they are meant for merchants with their own local inventory or pickup locations. Third-party stockists are not the same thing as Golden-owned retail locations. If Golden does not operate its own local retail inventory, skip local free listings and focus on: + +- standard free listings +- accurate product pages +- the stockist page +- retailer citation pages + +### 6. Consider Manufacturer Center + +If Golden is acting as the brand owner and can supply authoritative product data, Manufacturer Center is worth evaluating. It can help Google understand brand-owned product facts more directly. + +## The Weekly Operating Rhythm + +Every week: + +1. Check Search Console Performance for non-branded impressions and clicks. +2. Check Merchant listings and Product snippets for warnings. +3. Check whether the newest authority pages are indexed. +4. Review the stockist page for changes that require text updates. +5. Note any pages that are getting impressions but weak CTR. + +Every month: + +1. Refresh the top query buckets. +2. Re-check feed titles and descriptions. +3. Review shipping and returns settings against the live site. +4. Add new internal links from fresh articles into commercial pages. + +## Golden-Specific Priority Order + +1. Verify or clean up Search Console domain property. +2. Submit sitemap and inspect all new authority and trust pages. +3. Clean Merchant Center shipping and returns. +4. Check feed titles, GTIN or MPN, and product detail depth for the 3 core SKUs. +5. Monitor non-branded query movement before expanding the product set or writing more content. diff --git a/docs/offsite-authority-targets.md b/docs/offsite-authority-targets.md new file mode 100644 index 000000000..cfdfd9d6a --- /dev/null +++ b/docs/offsite-authority-targets.md @@ -0,0 +1,236 @@ +# Off-Site Authority Targets + +Written on March 13, 2026. + +This is the off-site layer that can help Golden become easier for Google to trust as a real New Zealand drinks brand with genuine honey provenance, rather than just a standalone Shopify site. + +## How To Think About Off-Site SEO For Golden + +The goal is not random backlinks. + +The goal is to build: + +- brand entity consistency +- retailer and distributor citations +- category relevance in food, beverage, and honey contexts +- New Zealand origin trust +- export trust signals that are still believable for a young brand + +## Priority 1: Foundational Trust And Country-Of-Origin Signals + +### FernMark + +Why it matters: + +- strong country-of-origin trust signal for overseas discovery +- useful for export-facing credibility if Golden qualifies + +Source: + +- https://www.fermark.co.nz/about-fermark/ + +Action: + +- assess eligibility and application timing +- if approved, surface FernMark on key trust pages and in press materials + +### Buy NZ Made + +Why it matters: + +- local trust and discoverability signal +- useful directory and badge value for a product explicitly leaning into New Zealand provenance + +Source: + +- https://buynz.org.nz/ + +Action: + +- assess licensing fit +- if approved, get listed and link back to the Golden site + +## Priority 2: Industry And Honey-Specific Credibility + +### Apiculture New Zealand + +Why it matters: + +- credible honey-industry context +- useful for supplier relationships, awards, and sector legitimacy + +Sources: + +- https://apinz.org.nz/ +- https://www.apinz.org.nz/Category?Action=View&Category_id=534 + +Action: + +- pursue relationship, sponsorship, or award-entry opportunities where Golden fits as a honey-based beverage +- use honey-supplier stories and industry participation on-site once real + +### UMF Honey Association + +Why it matters: + +- extremely strong trust entity in the manuka space + +Source: + +- https://www.umf.org.nz/ + +Action: + +- do not force direct membership unless Golden can make compliant UMF-linked claims through its supply chain and product format +- if Golden is not eligible, pursue supplier-level proof and co-citation instead of pretending to be a UMF honey brand + +## Priority 3: Awards That Create Searchable Third-Party Proof + +### New Zealand Food Awards + +Why it matters: + +- awards coverage creates strong third-party citations +- useful for retailer trust and export conversations + +Source: + +- https://www.nzfoodawards.org.nz/ + +Action: + +- review beverage-category fit and entry timing +- if entering, line up product photography and clear ingredient story in advance + +### Outstanding Food Producer Awards + +Why it matters: + +- well-known New Zealand food recognition program +- can create strong citation pages and press angles + +Source: + +- https://outstandingfoodproducer.co.nz/ + +Action: + +- review beverage eligibility +- submit once packaging, photography, and product descriptions are final + +## Priority 4: Trade Distribution And Retail Discovery + +### Upstock + +Why it matters: + +- already aligned to Golden's wholesale path +- valuable B2B citation and retailer discovery channel + +Source: + +- https://www.upstock.app/wholesalers/golden + +Action: + +- keep the profile complete +- make sure brand description, imagery, and product naming match the site and Merchant Center + +### Foodstuffs Supplier Pathways + +Why it matters: + +- distribution access matters more than almost any single backlink in FMCG +- retailer listings and store pages become discovery surfaces if range gets picked up + +Sources: + +- https://www.foodstuffs-supplier.co.nz/ +- https://www.foodstuffs.co.nz/about-us/emerging-supplier-and-brand-owners + +Action: + +- use the current origin, ingredient, and category story as the supplier pitch +- when listings go live on retailer sites, make sure naming matches the canonical product titles + +## Priority 5: Trade And Founder Media + +### FMCG Business + +Why it matters: + +- category-relevant trade audience +- useful for retailer awareness and category legitimacy + +Source: + +- https://www.fmcgbusiness.co.nz/ + +Pitch angle: + +- New Zealand honey reimagined as soda +- provenance-led challenger drinks brand + +### SupermarketNews + +Why it matters: + +- grocery and retail decision-maker audience + +Sources: + +- https://supermarketnews.co.nz/ +- https://intermedianz.co.nz/publications/supermarketnews/ + +Pitch angle: + +- new premium soft drink proposition for modern grocery +- local ingredient story with shelf differentiation + +### Idealog + +Why it matters: + +- founder and brand-building audience +- useful for brand searches and entrepreneurship citations + +Source: + +- https://idealog.co.nz/ + +Pitch angle: + +- from ad world to building a provenance-first New Zealand soda brand + +## Priority 6: Export-Oriented Visibility + +### NZTE Food And Beverage Support + +Why it matters: + +- export credibility and market-entry support +- useful if Golden wants overseas discovery that is still anchored in official New Zealand channels + +Source: + +- https://www.nzte.govt.nz/page/food-and-beverage + +Action: + +- use NZTE support when the domestic positioning and proof points are already clean +- do not push export PR before the domestic entity signals are solid + +## What To Do First + +1. Finish the stockist page with real retailer text. +2. Keep Upstock profile and site copy aligned. +3. Build a shortlist of 5 media and award targets, not 25. +4. Apply only for trust marks and awards Golden can support cleanly. +5. Use every real off-site mention as a reason to strengthen the on-site evidence pages. + +## What Not To Do + +- do not buy generic SEO links +- do not chase honey certifications you cannot legally or credibly use +- do not pitch export media before the site and product data are consistent +- do not let retailer pages publish with weak or inconsistent product naming diff --git a/docs/search-console-query-buckets.csv b/docs/search-console-query-buckets.csv new file mode 100644 index 000000000..241657378 --- /dev/null +++ b/docs/search-console-query-buckets.csv @@ -0,0 +1,8 @@ +bucket,regex,intent,priority,primary_landing_pages +branded,"golden|stay golden|drink golden|golden soda",Brand demand,High,"/, /collections/honey-soda" +commercial_honey_soda,"honey soda|manuka soda|honey soft drink|honey sparkling drink",Bottom and mid funnel,High,"/collections/honey-soda, /products/golden-lemon-manuka, /products/blackcurrant-manuka-soda, /products/kanuka-kola" +commercial_low_cal,"low cal soda|low calorie soda|low sugar soda nz|better for you soda",Category expansion,High,"/collections/low-cal-manuka-soda, /products/*" +authority_honey,"what is manuka honey|manuka vs kanuka|new zealand honey|kanuka honey|manuka honey label|mgo|umf",Authority and trust,High,"/pages/new-zealand-honey, /pages/manuka-vs-kanuka, /pages/where-our-honey-comes-from, /blogs/ingredients/*" +authority_provenance,"where does golden honey come from|where is golden made|new zealand fruit|honey provenance|made in new zealand soda",Trust and brand understanding,Medium,"/pages/how-golden-is-made, /pages/where-our-honey-comes-from, /pages/ingredients" +local_stockists,"where to buy golden|golden stockists|golden auckland|golden wellington|golden christchurch",Local discovery,Medium,"/pages/store-location, /pages/wholesale, /pages/contact" +policy_support,"golden shipping|golden returns|golden contact|golden wholesale",Support and trust,Low,"/pages/shipping, /pages/returns, /pages/contact, /pages/wholesale" diff --git a/docs/store-locator-content-pack.md b/docs/store-locator-content-pack.md new file mode 100644 index 000000000..1bccb6ae8 --- /dev/null +++ b/docs/store-locator-content-pack.md @@ -0,0 +1,81 @@ +# Store Locator Content Pack + +Use this pack to turn `/pages/store-location` into a crawlable stockist page instead of a map-only or embed-only page. + +## Goal + +Make the stockist page useful for: + +- people searching `where to buy Golden` +- people searching `Golden stockists` +- city-based discovery like `Golden soda Auckland` +- Google understanding that Golden is carried by real retailers in real places + +## What To Put In The Shopify Page Body + +The page body should include: + +1. A short paragraph explaining that stock can vary by store. +2. A plain HTML list of stockists grouped by region or city. +3. Real retailer names in text. +4. Suburb or city names in text. +5. Optional retailer links where they exist. +6. A `Last updated` date in text. + +Do not rely on: + +- an embed with no text around it +- only suburb pins on a map +- screenshots or images of store lists + +## Required Fields Per Stockist + +Each retailer entry should contain, where possible: + +- retailer name +- suburb +- city +- street address +- stock note such as `core range`, `lemon + blackcurrant`, or `selected flavours` +- optional website link +- last verified month + +## Recommended Region Order + +Use the regions where Golden actually has coverage. If coverage is thin, start with only the cities that are real. + +Suggested order: + +1. Auckland +2. Waikato / Bay of Plenty +3. Wellington +4. Nelson / Tasman +5. Canterbury +6. Otago +7. Southland + +## Publish Method + +1. Paste the HTML from [store-locator-page-body.html](/Users/grom/morgpork/golden/.claude/worktrees/seo-phase1-dev/docs/store-locator-page-body.html) into the `Store Locator` page body in Shopify admin. +2. Replace every placeholder before publishing. +3. Keep the heading levels intact. +4. Update the `Last updated` line every time the list changes materially. + +## Editorial Rules + +- Keep city headings in plain text: `Auckland`, `Wellington`, `Christchurch`. +- Use one line per retailer. +- If a stockist only carries a few flavours, say so. +- If availability changes often, say `call ahead for current flavour availability`. +- Link to retailer pages only if the URL is stable and public. +- If a city has no stockists yet, omit it. Do not publish empty headings. + +## Minimum Viable Version + +If you do not have the full national list ready yet, publish: + +- Auckland +- Wellington +- Christchurch + +That is still materially better than a generic page with no stockist text. diff --git a/docs/store-locator-page-body.html b/docs/store-locator-page-body.html new file mode 100644 index 000000000..606845a7d --- /dev/null +++ b/docs/store-locator-page-body.html @@ -0,0 +1,44 @@ +

Golden is available through selected stockists, retailers, and hospitality partners across New Zealand. Range and flavour availability can vary by store, so call ahead if you are looking for a specific flavour.

+ +

Last updated: [Month Day, Year]

+ +

Buy Golden online

+

If there is not a stockist near you yet, you can still shop the range online.

+ + +

Golden stockists by region

+

Use the list below to find retailers carrying Golden. We recommend checking current availability directly with the store if you are chasing a specific flavour.

+ +

Auckland

+
    +
  • [Retailer name], [Suburb], Auckland - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
  • [Retailer name], [Suburb], Auckland - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
  • [Retailer name], [Suburb], Auckland - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
+ +

Wellington

+
    +
  • [Retailer name], [Suburb], Wellington - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
  • [Retailer name], [Suburb], Wellington - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
+ +

Christchurch

+
    +
  • [Retailer name], [Suburb], Christchurch - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
  • [Retailer name], [Suburb], Christchurch - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
+ +

[Add next real city or region]

+
    +
  • [Retailer name], [Suburb], [City] - [Street address if useful] - [Core range / selected flavours] - [Month Year verified]
  • +
+ +

Want Golden near you?

+

If your local retailer does not stock Golden yet, ask them to get in touch via our wholesale page, or send us a stockist lead through contact.

+ +

What is in Golden?

+

Golden is made in New Zealand and built around manuka and kanuka honey, real fruit, and no refined sugar. If you want to understand the range before buying, start with our ingredients page and our guide to New Zealand honey.

From 3a8c0d24d6be2e4116cd747260625b3dc52cac0c Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:32:29 +0000 Subject: [PATCH 1263/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/page.store-locator.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/templates/page.store-locator.json b/templates/page.store-locator.json index 65ed20999..c8af2c393 100644 --- a/templates/page.store-locator.json +++ b/templates/page.store-locator.json @@ -281,7 +281,7 @@ "style_class": "link", "width": "fit-content", "custom_width": 100, - "width_mobile": "fit-content", + "width_mobile": "custom", "custom_width_mobile": 100 }, "blocks": {} @@ -393,7 +393,7 @@ "style_class": "link", "width": "fit-content", "custom_width": 100, - "width_mobile": "fit-content", + "width_mobile": "custom", "custom_width_mobile": 100 }, "blocks": {} @@ -505,7 +505,7 @@ "style_class": "link", "width": "fit-content", "custom_width": 100, - "width_mobile": "fit-content", + "width_mobile": "custom", "custom_width_mobile": 100 }, "blocks": {} @@ -556,7 +556,9 @@ "overlay_style": "solid", "gradient_direction": "to top", "padding-block-start": 12, - "padding-block-end": 64 + "padding-block-end": 64, + "padding-inline-start": 0, + "padding-inline-end": 0 } } }, From fa01371711de7fcb4082439b7ab4a3b08c1e9243 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 10:47:44 +1300 Subject: [PATCH 1264/1275] Add stockist locator widget --- assets/store-locator.css | 225 +++++++++++ assets/store-locator.js | 538 ++++++++++++++++++++++++++ docs/store-locator-content-pack.md | 2 + docs/store-locator-sheet-template.csv | 3 + docs/store-locator-widget-setup.md | 75 ++++ sections/store-locator-map.liquid | 334 ++++++++++++++++ templates/page.store-locator.json | 32 ++ 7 files changed, 1209 insertions(+) create mode 100644 assets/store-locator.css create mode 100644 assets/store-locator.js create mode 100644 docs/store-locator-sheet-template.csv create mode 100644 docs/store-locator-widget-setup.md create mode 100644 sections/store-locator-map.liquid diff --git a/assets/store-locator.css b/assets/store-locator.css new file mode 100644 index 000000000..321128e49 --- /dev/null +++ b/assets/store-locator.css @@ -0,0 +1,225 @@ +.store-locator-widget { + display: grid; + gap: 24px; +} + +.store-locator-widget__intro { + max-width: 68rem; + display: grid; + gap: 12px; +} + +.store-locator-widget__heading, +.store-locator-widget__body { + margin: 0; +} + +.store-locator-widget__shell { + display: grid; + gap: 24px; +} + +.store-locator-widget__panel, +.store-locator-widget__map-shell { + border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10)); + background: rgb(var(--color-foreground-rgb) / var(--opacity-2, 0.02)); +} + +.store-locator-widget__panel { + padding: 20px; + display: grid; + gap: 18px; + align-content: start; +} + +.store-locator-widget__toolbar { + display: grid; + gap: 12px; +} + +.store-locator-widget__search { + width: 100%; + border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-15)); + background: var(--color-background); + color: var(--color-foreground); + min-height: 52px; + padding: 14px 16px; + font: inherit; +} + +.store-locator-widget__search::placeholder { + color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); +} + +.store-locator-widget__count, +.store-locator-widget__status, +.store-locator-widget__cta-copy { + margin: 0; + color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); +} + +.store-locator-widget__filters { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.store-locator-widget__filter { + border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-15)); + background: transparent; + color: var(--color-foreground); + border-radius: 999px; + padding: 10px 14px; + cursor: pointer; + font: inherit; + transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease; +} + +.store-locator-widget__filter:hover, +.store-locator-widget__filter:focus-visible { + border-color: var(--store-locator-accent); +} + +.store-locator-widget__filter.is-active { + background: var(--store-locator-accent); + border-color: var(--store-locator-accent); + color: #111; +} + +.store-locator-widget__results { + display: grid; + gap: 12px; +} + +.store-locator-widget__card { + border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10)); + background: var(--color-background); + padding: 16px; + display: grid; + gap: 10px; + cursor: pointer; + transition: border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease; +} + +.store-locator-widget__card:hover, +.store-locator-widget__card:focus-visible { + border-color: rgb(var(--color-foreground-rgb) / var(--opacity-30)); + transform: translateY(-1px); +} + +.store-locator-widget__card.is-active { + border-color: var(--store-locator-accent); + box-shadow: 0 0 0 1px var(--store-locator-accent); +} + +.store-locator-widget__card-top, +.store-locator-widget__card-meta, +.store-locator-widget__card-actions { + display: flex; + flex-wrap: wrap; + gap: 8px 12px; + align-items: center; +} + +.store-locator-widget__card-name, +.store-locator-widget__card-address, +.store-locator-widget__card-notes { + margin: 0; +} + +.store-locator-widget__card-name { + font-size: 1.05rem; +} + +.store-locator-widget__badge { + display: inline-flex; + align-items: center; + border-radius: 999px; + background: rgb(var(--color-foreground-rgb) / var(--opacity-5)); + color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); + padding: 6px 10px; + font-size: 0.8rem; + line-height: 1; +} + +.store-locator-widget__card-link { + color: var(--color-foreground); + text-decoration: none; + border-bottom: 1px solid transparent; +} + +.store-locator-widget__card-link:hover, +.store-locator-widget__card-link:focus-visible { + border-color: currentColor; +} + +.store-locator-widget__cta { + border-top: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10)); + padding-top: 16px; + display: grid; + gap: 12px; +} + +.store-locator-widget__map-shell { + position: relative; + min-height: var(--store-locator-map-height-mobile); + overflow: hidden; +} + +.store-locator-widget__map { + width: 100%; + height: var(--store-locator-map-height-mobile); +} + +.store-locator-widget__map-shell .mapboxgl-map { + width: 100%; + height: 100%; +} + +.store-locator-widget__marker { + width: 18px; + height: 18px; + border-radius: 999px; + background: var(--store-locator-accent); + border: 2px solid var(--color-background); + box-shadow: 0 0 0 1px rgb(var(--color-foreground-rgb) / var(--opacity-15)); +} + +.store-locator-widget__marker.is-active { + transform: scale(1.2); +} + +.store-locator-widget__popup { + display: grid; + gap: 6px; +} + +.store-locator-widget__popup p { + margin: 0; +} + +@media screen and (min-width: 990px) { + .store-locator-widget__shell:not(.store-locator-widget__shell--list-only) { + grid-template-columns: minmax(0, 0.92fr) minmax(320px, 1.08fr); + align-items: start; + } + + .store-locator-widget__shell--sticky .store-locator-widget__map-shell { + position: sticky; + top: calc(var(--header-height, 0px) + 24px); + } + + .store-locator-widget__map-shell { + min-height: var(--store-locator-map-height-desktop); + } + + .store-locator-widget__map { + height: var(--store-locator-map-height-desktop); + } + + .store-locator-widget__results { + max-height: calc(var(--store-locator-map-height-desktop) - 164px); + overflow: auto; + padding-inline-end: 6px; + } +} diff --git a/assets/store-locator.js b/assets/store-locator.js new file mode 100644 index 000000000..9331a5099 --- /dev/null +++ b/assets/store-locator.js @@ -0,0 +1,538 @@ +(function () { + const initialized = new WeakSet(); + + document.addEventListener('DOMContentLoaded', () => initAll(document)); + document.addEventListener('shopify:section:load', (event) => initAll(event.target)); + + function initAll(root) { + root.querySelectorAll('[data-store-locator]').forEach((node) => { + if (initialized.has(node)) return; + initialized.add(node); + initLocator(node); + }); + } + + async function initLocator(root) { + const config = readConfig(root); + const refs = { + search: root.querySelector('[data-store-locator-search]'), + count: root.querySelector('[data-store-locator-count]'), + filters: root.querySelector('[data-store-locator-filters]'), + status: root.querySelector('[data-store-locator-status]'), + results: root.querySelector('[data-store-locator-results]'), + map: root.querySelector('[data-store-locator-map]'), + }; + + const state = { + locations: [], + filteredLocations: [], + activeRegion: 'All', + activeLocationId: null, + markers: new Map(), + searchTerm: '', + map: null, + popup: null, + }; + + refs.search?.addEventListener('input', (event) => { + state.searchTerm = event.target.value.trim().toLowerCase(); + filterAndRender(state, refs, config); + }); + + refs.filters?.addEventListener('click', (event) => { + const filterButton = event.target.closest('[data-region]'); + if (!filterButton) return; + state.activeRegion = filterButton.dataset.region || 'All'; + renderRegionFilters(state, refs); + filterAndRender(state, refs, config); + }); + + refs.results?.addEventListener('click', (event) => { + const card = event.target.closest('[data-location-id]'); + if (!card) return; + selectLocation(card.dataset.locationId, state, refs, { fly: true, scroll: false }); + }); + + refs.results?.addEventListener('keydown', (event) => { + if (event.key !== 'Enter' && event.key !== ' ') return; + const card = event.target.closest('[data-location-id]'); + if (!card) return; + event.preventDefault(); + selectLocation(card.dataset.locationId, state, refs, { fly: true, scroll: false }); + }); + + if (!config.sheetUrl) { + renderStatus( + refs, + config.designMode ? config.sheetHelpText || config.configText : config.configText + ); + return; + } + + renderStatus(refs, config.loadingText); + + try { + const csvText = await fetchCsv(config.sheetUrl); + const rows = parseCsv(csvText); + const locations = normalizeLocations(rows); + + if (!locations.length) { + throw new Error(config.emptyText); + } + + state.locations = locations; + state.filteredLocations = locations; + + if (config.enableMap && refs.map && config.mapboxToken && window.mapboxgl) { + state.map = createMap(refs.map, config); + state.popup = new window.mapboxgl.Popup({ + closeButton: false, + offset: 16, + }); + createMarkers(state, refs); + } + + renderRegionFilters(state, refs); + filterAndRender(state, refs, config); + } catch (error) { + console.error('Store locator failed to load', error); + renderStatus(refs, config.errorText); + } + } + + function readConfig(root) { + return { + sheetUrl: resolveSheetUrl(root.dataset.sheetUrl || ''), + mapboxToken: root.dataset.mapboxToken || '', + mapStyle: root.dataset.mapStyle || 'mapbox://styles/mapbox/light-v11', + enableMap: root.dataset.enableMap === 'true', + defaultLat: Number.parseFloat(root.dataset.defaultLat || '-41.2865'), + defaultLng: Number.parseFloat(root.dataset.defaultLng || '174.7762'), + defaultZoom: Number.parseFloat(root.dataset.defaultZoom || '4.6'), + designMode: root.dataset.designMode === 'true', + loadingText: root.dataset.loadingText || 'Loading stockists...', + emptyText: root.dataset.emptyText || 'No stockists match that search yet.', + errorText: + root.dataset.errorText || 'We could not load the stockist data right now.', + configText: + root.dataset.configText || + 'Store data is being updated. Please shop online or contact us in the meantime.', + sheetHelpText: + root.dataset.sheetHelpText || + 'Add a public Google Sheet or CSV URL in the section settings to load stockists.', + }; + } + + function resolveSheetUrl(rawUrl) { + const url = rawUrl.trim(); + if (!url) return ''; + + const match = url.match(/docs\.google\.com\/spreadsheets\/d\/([a-zA-Z0-9-_]+)/); + if (!match) return url; + + const gidMatch = url.match(/[?#&]gid=([0-9]+)/); + const gid = gidMatch ? gidMatch[1] : '0'; + return `https://docs.google.com/spreadsheets/d/${match[1]}/export?format=csv&gid=${gid}`; + } + + async function fetchCsv(url) { + const response = await fetch(url, { credentials: 'omit' }); + + if (!response.ok) { + throw new Error(`CSV request failed with ${response.status}`); + } + + return response.text(); + } + + function parseCsv(text) { + const source = text.replace(/^\uFEFF/, ''); + const rows = []; + let cell = ''; + let row = []; + let inQuotes = false; + + for (let index = 0; index < source.length; index += 1) { + const character = source[index]; + const nextCharacter = source[index + 1]; + + if (character === '"') { + if (inQuotes && nextCharacter === '"') { + cell += '"'; + index += 1; + } else { + inQuotes = !inQuotes; + } + } else if (character === ',' && !inQuotes) { + row.push(cell); + cell = ''; + } else if ((character === '\n' || character === '\r') && !inQuotes) { + if (character === '\r' && nextCharacter === '\n') { + index += 1; + } + + row.push(cell); + if (row.some((value) => value.trim() !== '')) { + rows.push(row); + } + row = []; + cell = ''; + } else { + cell += character; + } + } + + row.push(cell); + if (row.some((value) => value.trim() !== '')) { + rows.push(row); + } + + if (!rows.length) return []; + + const headers = rows[0].map(normalizeHeader); + return rows.slice(1).map((values) => { + const rowObject = {}; + headers.forEach((header, index) => { + rowObject[header] = (values[index] || '').trim(); + }); + return rowObject; + }); + } + + function normalizeHeader(value) { + return value + .toLowerCase() + .trim() + .replace(/[^\w\s-]/g, '') + .replace(/[\s-]+/g, '_'); + } + + function normalizeLocations(rows) { + const locations = rows + .map((row, index) => buildLocation(row, index)) + .filter(Boolean) + .sort(compareLocations); + + return locations; + } + + function buildLocation(row, index) { + const latitude = parseCoordinate(findValue(row, [ + 'latitude', + 'lat', + 'y', + 'map_latitude', + ])); + const longitude = parseCoordinate(findValue(row, [ + 'longitude', + 'lng', + 'lon', + 'long', + 'x', + 'map_longitude', + ])); + + if (Number.isNaN(latitude) || Number.isNaN(longitude)) { + return null; + } + + const name = findValue(row, ['name', 'store', 'stockist', 'location']); + if (!name) return null; + + const address = findValue(row, ['address', 'street', 'street_address']); + const suburb = findValue(row, ['suburb', 'neighbourhood']); + const city = findValue(row, ['city', 'town']); + const region = findValue(row, ['region', 'state', 'province']) || city; + const website = sanitizeUrl(findValue(row, ['website', 'url', 'link'])); + const notes = findValue(row, ['notes', 'stock_note', 'stock_notes', 'range', 'details']); + const postcode = findValue(row, ['postcode', 'zip']); + const country = findValue(row, ['country']) || 'New Zealand'; + const featured = toBoolean(findValue(row, ['featured', 'is_featured'])); + const sort = Number.parseInt(findValue(row, ['sort', 'order', 'priority']) || '', 10); + const retailerType = findValue(row, ['type', 'retailer_type', 'category']); + + const addressParts = [address, suburb, city, region, postcode, country].filter(Boolean); + + return { + id: `location-${index + 1}`, + name, + address, + suburb, + city, + region, + country, + postcode, + website, + notes, + featured, + retailerType, + sort: Number.isNaN(sort) ? Number.MAX_SAFE_INTEGER : sort, + latitude, + longitude, + directionsUrl: buildDirectionsUrl(addressParts.join(', '), latitude, longitude), + searchIndex: [name, address, suburb, city, region, country, notes, retailerType] + .filter(Boolean) + .join(' ') + .toLowerCase(), + addressLabel: addressParts.join(', '), + }; + } + + function findValue(row, aliases) { + for (const alias of aliases) { + if (row[alias]) return row[alias]; + } + return ''; + } + + function parseCoordinate(value) { + const source = String(value || '').trim(); + if (!source) return Number.NaN; + return Number.parseFloat(source.replace(',', '.')); + } + + function sanitizeUrl(value) { + const source = String(value || '').trim(); + if (!source) return ''; + if (/^https?:\/\//i.test(source)) return source; + return `https://${source}`; + } + + function toBoolean(value) { + return /^(1|true|yes|y)$/i.test(String(value || '').trim()); + } + + function compareLocations(left, right) { + if (left.sort !== right.sort) return left.sort - right.sort; + if (left.featured !== right.featured) return Number(right.featured) - Number(left.featured); + if (left.region !== right.region) return left.region.localeCompare(right.region); + return left.name.localeCompare(right.name); + } + + function buildDirectionsUrl(addressLabel, latitude, longitude) { + const query = addressLabel || `${latitude},${longitude}`; + return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(query)}`; + } + + function renderRegionFilters(state, refs) { + if (!refs.filters) return; + + const regions = Array.from( + new Set(state.locations.map((location) => location.region || location.city).filter(Boolean)) + ); + + if (!regions.length) { + refs.filters.hidden = true; + refs.filters.innerHTML = ''; + return; + } + + const buttons = ['All', ...regions] + .map((region) => { + const isActive = state.activeRegion === region; + return ` + + `; + }) + .join(''); + + refs.filters.hidden = false; + refs.filters.innerHTML = buttons; + } + + function filterAndRender(state, refs, config) { + const filteredLocations = state.locations.filter((location) => { + const matchesRegion = + state.activeRegion === 'All' || (location.region || location.city) === state.activeRegion; + const matchesSearch = + !state.searchTerm || location.searchIndex.includes(state.searchTerm); + return matchesRegion && matchesSearch; + }); + + state.filteredLocations = filteredLocations; + + if (!filteredLocations.length) { + refs.count.textContent = config.emptyText; + renderStatus(refs, config.emptyText); + refs.results.innerHTML = ''; + updateMarkers(state, []); + return; + } + + refs.status.textContent = ''; + refs.count.textContent = `${filteredLocations.length} stockist${filteredLocations.length === 1 ? '' : 's'}`; + refs.results.innerHTML = filteredLocations.map((location) => buildCardMarkup(location)).join(''); + + if (!filteredLocations.some((location) => location.id === state.activeLocationId)) { + state.activeLocationId = filteredLocations[0].id; + } + + updateActiveCard(refs, state.activeLocationId); + updateMarkers(state, filteredLocations); + fitMapToResults(state, filteredLocations); + } + + function buildCardMarkup(location) { + const metaBadges = [location.city, location.region, location.retailerType] + .filter(Boolean) + .slice(0, 3) + .map((value) => `${escapeHtml(value)}`) + .join(''); + + const actions = [ + location.website + ? `Website` + : '', + `Directions`, + ] + .filter(Boolean) + .join(''); + + return ` +
+
+

${escapeHtml(location.name)}

+ ${location.featured ? 'Featured' : ''} +
+ ${metaBadges ? `
${metaBadges}
` : ''} + ${location.addressLabel ? `

${escapeHtml(location.addressLabel)}

` : ''} + ${location.notes ? `

${escapeHtml(location.notes)}

` : ''} +
${actions}
+
+ `; + } + + function renderStatus(refs, text) { + if (!refs.status) return; + refs.status.textContent = text || ''; + } + + function createMap(container, config) { + window.mapboxgl.accessToken = config.mapboxToken; + return new window.mapboxgl.Map({ + container, + style: config.mapStyle, + center: [config.defaultLng, config.defaultLat], + zoom: config.defaultZoom, + cooperativeGestures: true, + }); + } + + function createMarkers(state, refs) { + if (!state.map) return; + + state.locations.forEach((location) => { + const markerElement = document.createElement('button'); + markerElement.type = 'button'; + markerElement.className = 'store-locator-widget__marker'; + markerElement.setAttribute('aria-label', `View ${location.name} on map`); + + markerElement.addEventListener('click', () => { + selectLocation(location.id, state, refs, { fly: true, scroll: true }); + }); + + const marker = new window.mapboxgl.Marker({ element: markerElement }) + .setLngLat([location.longitude, location.latitude]) + .addTo(state.map); + + state.markers.set(location.id, { marker, element: markerElement, location }); + }); + } + + function updateMarkers(state, filteredLocations) { + if (!state.markers.size) return; + + const visibleIds = new Set(filteredLocations.map((location) => location.id)); + state.markers.forEach(({ marker, element, location }, locationId) => { + const markerNode = marker.getElement(); + markerNode.style.display = visibleIds.has(locationId) ? '' : 'none'; + element.classList.toggle('is-active', locationId === state.activeLocationId); + + if (locationId === state.activeLocationId && state.popup && state.map) { + state.popup + .setLngLat([location.longitude, location.latitude]) + .setHTML(buildPopupMarkup(location)) + .addTo(state.map); + } + }); + } + + function fitMapToResults(state, filteredLocations) { + if (!state.map || !filteredLocations.length) return; + + if (filteredLocations.length === 1) { + const onlyLocation = filteredLocations[0]; + state.map.flyTo({ + center: [onlyLocation.longitude, onlyLocation.latitude], + zoom: 12, + }); + return; + } + + const bounds = new window.mapboxgl.LngLatBounds(); + filteredLocations.forEach((location) => { + bounds.extend([location.longitude, location.latitude]); + }); + + state.map.fitBounds(bounds, { + padding: 56, + maxZoom: 11.5, + duration: 700, + }); + } + + function selectLocation(locationId, state, refs, options) { + state.activeLocationId = locationId; + updateActiveCard(refs, locationId); + updateMarkers(state, state.filteredLocations); + + const markerRecord = state.markers.get(locationId); + if (options.fly && markerRecord && state.map) { + state.map.flyTo({ + center: [markerRecord.location.longitude, markerRecord.location.latitude], + zoom: 13, + }); + } + + if (options.scroll) { + const activeCard = refs.results.querySelector(`[data-location-id="${locationId}"]`); + activeCard?.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); + } + } + + function updateActiveCard(refs, locationId) { + refs.results + .querySelectorAll('[data-location-id]') + .forEach((card) => card.classList.toggle('is-active', card.dataset.locationId === locationId)); + } + + function buildPopupMarkup(location) { + return ` +
+ ${escapeHtml(location.name)} + ${location.addressLabel ? `

${escapeHtml(location.addressLabel)}

` : ''} + ${location.notes ? `

${escapeHtml(location.notes)}

` : ''} +
+ `; + } + + function escapeHtml(value) { + return String(value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } +})(); diff --git a/docs/store-locator-content-pack.md b/docs/store-locator-content-pack.md index 1bccb6ae8..f9e8e7fe1 100644 --- a/docs/store-locator-content-pack.md +++ b/docs/store-locator-content-pack.md @@ -60,6 +60,8 @@ Suggested order: 2. Replace every placeholder before publishing. 3. Keep the heading levels intact. 4. Update the `Last updated` line every time the list changes materially. +5. If you want the map widget to use the same data source, align the Google Sheet to [store-locator-sheet-template.csv](/Users/grom/morgpork/golden/.claude/worktrees/seo-phase1-dev/docs/store-locator-sheet-template.csv). +6. Follow [store-locator-widget-setup.md](/Users/grom/morgpork/golden/.claude/worktrees/seo-phase1-dev/docs/store-locator-widget-setup.md) to connect the sheet and Mapbox token in the theme editor. ## Editorial Rules diff --git a/docs/store-locator-sheet-template.csv b/docs/store-locator-sheet-template.csv new file mode 100644 index 000000000..8308f018b --- /dev/null +++ b/docs/store-locator-sheet-template.csv @@ -0,0 +1,3 @@ +name,address,suburb,city,region,postcode,country,latitude,longitude,website,notes,retailer_type,featured,sort +[Retailer name],[Street address],[Suburb],Auckland,Auckland,1010,New Zealand,-36.8485,174.7633,https://example.com,Core range,cafe,false,10 +[Retailer name],[Street address],[Suburb],Wellington,Wellington,6011,New Zealand,-41.2865,174.7762,https://example.com,Selected flavours,retailer,true,20 diff --git a/docs/store-locator-widget-setup.md b/docs/store-locator-widget-setup.md new file mode 100644 index 000000000..f5fc5eec8 --- /dev/null +++ b/docs/store-locator-widget-setup.md @@ -0,0 +1,75 @@ +# Store Locator Widget Setup + +Use this after the `Store locator map` section is added to the `Store Locator` page template. + +## What The Widget Needs + +- a public Google Sheet or CSV URL +- latitude and longitude for every stockist row +- a Mapbox public access token if you want the interactive map + +## Recommended Google Sheet Columns + +Match the header row in [store-locator-sheet-template.csv](/Users/grom/morgpork/golden/.claude/worktrees/seo-phase1-dev/docs/store-locator-sheet-template.csv): + +- `name` +- `address` +- `suburb` +- `city` +- `region` +- `postcode` +- `country` +- `latitude` +- `longitude` +- `website` +- `notes` +- `retailer_type` +- `featured` +- `sort` + +## Google Sheet Setup + +1. Put one stockist per row. +2. Make sure `latitude` and `longitude` are plain decimal values. +3. Share the sheet publicly or publish it as CSV. +4. Copy either: + - the Google Sheet share URL, or + - the direct CSV URL + +The widget will convert a normal Google Sheets URL into a CSV export URL automatically. + +## Theme Editor Setup + +In the `Store Locator` page template section: + +1. Paste the Google Sheet URL into `Google Sheet or CSV URL`. +2. Paste your Mapbox public token into `Mapbox access token`. +3. Keep `Enable Mapbox map` on if you want the map. +4. Leave the default map centre at New Zealand unless you want a different starting view. +5. Save and test the page on desktop and mobile. + +## Data Notes + +- `featured` accepts `true`, `yes`, or `1` +- `sort` is optional and controls manual ordering +- `retailer_type` can be values like `Cafe`, `Grocer`, `Bottle shop`, or `Stockist` +- `notes` is where you can say `core range`, `selected flavours`, or `call ahead for current availability` + +## Failure States To Check + +If the widget does not load: + +- confirm the sheet is publicly accessible +- confirm every row has valid `latitude` and `longitude` +- confirm the Mapbox token is a public browser token +- confirm the page is using the `page.store-locator` template + +If the map is blank but the list loads: + +- the token is missing or invalid +- the token does not allow the styles or APIs being used + +If nothing loads: + +- check the browser console for blocked sheet requests +- test the CSV URL directly in a browser tab diff --git a/sections/store-locator-map.liquid b/sections/store-locator-map.liquid new file mode 100644 index 000000000..407d27d2f --- /dev/null +++ b/sections/store-locator-map.liquid @@ -0,0 +1,334 @@ +{% liquid + assign has_map = false + if section.settings.enable_map and section.settings.mapbox_access_token != blank + assign has_map = true + endif +%} + +{{ 'store-locator.css' | asset_url | stylesheet_tag }} + + +{% if has_map %} + + +{% endif %} + +
+
+
+ {% if section.settings.heading != blank or section.settings.body != blank %} +
+ {% if section.settings.heading != blank %} +

{{ section.settings.heading }}

+ {% endif %} + {% if section.settings.body != blank %} +
{{ section.settings.body }}
+ {% endif %} +
+ {% endif %} + +
+
+
+ + +

+ {{ section.settings.loading_text }} +

+
+ + + +
+ {{ section.settings.loading_text }} +
+ +
+ + {% if section.settings.cta_label != blank and section.settings.cta_url != blank %} +
+ {% if section.settings.cta_text != blank %} +

{{ section.settings.cta_text }}

+ {% endif %} + + {{ section.settings.cta_label }} + +
+ {% endif %} +
+ + {% if has_map %} +
+ +
+ {% endif %} +
+
+
+ +{% schema %} +{ + "name": "Store locator map", + "settings": [ + { + "type": "paragraph", + "content": "Publishes a searchable stockist list from a public Google Sheet or CSV. Recommended columns: name, address, suburb, city, region, latitude, longitude, website, notes, featured, sort." + }, + { + "type": "text", + "id": "heading", + "label": "Heading", + "default": "Search stockists" + }, + { + "type": "richtext", + "id": "body", + "label": "Intro copy", + "default": "

Search by city, suburb, or retailer name to find Golden near you.

" + }, + { + "type": "header", + "content": "Data source" + }, + { + "type": "text", + "id": "sheet_url", + "label": "Google Sheet or CSV URL", + "info": "Accepts a published CSV URL or a standard Google Sheets share URL." + }, + { + "type": "text", + "id": "sheet_help_text", + "label": "Missing sheet help text", + "default": "Add a public Google Sheet or CSV URL in the section settings to load stockists." + }, + { + "type": "header", + "content": "Map" + }, + { + "type": "checkbox", + "id": "enable_map", + "label": "Enable Mapbox map", + "default": true + }, + { + "type": "text", + "id": "mapbox_access_token", + "label": "Mapbox access token" + }, + { + "type": "text", + "id": "mapbox_style", + "label": "Mapbox style", + "default": "mapbox://styles/mapbox/light-v11" + }, + { + "type": "text", + "id": "default_lat", + "label": "Default latitude", + "default": "-41.2865" + }, + { + "type": "text", + "id": "default_lng", + "label": "Default longitude", + "default": "174.7762" + }, + { + "type": "text", + "id": "default_zoom", + "label": "Default zoom", + "default": "4.6" + }, + { + "type": "text", + "id": "map_aria_label", + "label": "Map accessibility label", + "default": "Map of Golden stockists" + }, + { + "type": "checkbox", + "id": "sticky_map_desktop", + "label": "Sticky map on desktop", + "default": true + }, + { + "type": "range", + "id": "map_height_mobile", + "label": "Map height on mobile", + "min": 240, + "max": 640, + "step": 20, + "unit": "px", + "default": 320 + }, + { + "type": "range", + "id": "map_height_desktop", + "label": "Map height on desktop", + "min": 360, + "max": 900, + "step": 20, + "unit": "px", + "default": 640 + }, + { + "type": "color", + "id": "accent_color", + "label": "Accent colour", + "default": "#d8a93a" + }, + { + "type": "header", + "content": "Text" + }, + { + "type": "text", + "id": "search_placeholder", + "label": "Search placeholder", + "default": "Search by city, suburb, or store name" + }, + { + "type": "text", + "id": "loading_text", + "label": "Loading text", + "default": "Loading stockists..." + }, + { + "type": "text", + "id": "empty_state_text", + "label": "Empty-state text", + "default": "No stockists match that search yet." + }, + { + "type": "text", + "id": "error_text", + "label": "Error text", + "default": "We could not load the stockist data right now." + }, + { + "type": "text", + "id": "config_text", + "label": "Missing-config text", + "default": "Store data is being updated. Please shop online or contact us in the meantime." + }, + { + "type": "header", + "content": "Fallback call to action" + }, + { + "type": "text", + "id": "cta_text", + "label": "CTA copy", + "default": "Cannot find a nearby stockist yet?" + }, + { + "type": "text", + "id": "cta_label", + "label": "CTA label", + "default": "Wholesale enquiries" + }, + { + "type": "url", + "id": "cta_url", + "label": "CTA link" + }, + { + "type": "color_scheme", + "id": "color_scheme", + "label": "Colour scheme", + "default": "scheme-1" + }, + { + "type": "header", + "content": "Padding" + }, + { + "type": "range", + "id": "padding-block-start", + "label": "Top padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "padding-block-end", + "label": "Bottom padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + } + ], + "presets": [] +} +{% endschema %} diff --git a/templates/page.store-locator.json b/templates/page.store-locator.json index c8af2c393..811e64550 100644 --- a/templates/page.store-locator.json +++ b/templates/page.store-locator.json @@ -110,6 +110,37 @@ "padding-block-end": 44 } }, + "store_locator_widget": { + "type": "store-locator-map", + "settings": { + "heading": "Search stockists", + "body": "

Search by city, suburb, or retailer name to find Golden near you.

", + "sheet_url": "", + "sheet_help_text": "Add a public Google Sheet or CSV URL in the section settings to load stockists.", + "enable_map": true, + "mapbox_access_token": "", + "mapbox_style": "mapbox://styles/mapbox/light-v11", + "default_lat": "-41.2865", + "default_lng": "174.7762", + "default_zoom": "4.6", + "map_aria_label": "Map of Golden stockists", + "sticky_map_desktop": true, + "map_height_mobile": 320, + "map_height_desktop": 640, + "accent_color": "#d8a93a", + "search_placeholder": "Search by city, suburb, or store name", + "loading_text": "Loading stockists...", + "empty_state_text": "No stockists match that search yet.", + "error_text": "We could not load the stockist data right now.", + "config_text": "Store data is being updated. Please shop online or contact us in the meantime.", + "cta_text": "Cannot find a nearby stockist yet?", + "cta_label": "Wholesale enquiries", + "cta_url": "/pages/wholesale", + "color_scheme": "scheme-1", + "padding-block-start": 12, + "padding-block-end": 12 + } + }, "section_buying_path": { "type": "section", "blocks": { @@ -564,6 +595,7 @@ }, "order": [ "main", + "store_locator_widget", "section_buying_path" ] } From 1e52d0f934e7f54eba435e1ca65d3a5b9b96e978 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 00:05:19 +0000 Subject: [PATCH 1265/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- templates/page.store-locator.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/page.store-locator.json b/templates/page.store-locator.json index 811e64550..183988573 100644 --- a/templates/page.store-locator.json +++ b/templates/page.store-locator.json @@ -118,7 +118,7 @@ "sheet_url": "", "sheet_help_text": "Add a public Google Sheet or CSV URL in the section settings to load stockists.", "enable_map": true, - "mapbox_access_token": "", + "mapbox_access_token": "pk.eyJ1Ijoic3RheWdvbGRlbiIsImEiOiJjbW1vNHc0b24wNDM1MnBvZzh1NWF2azFxIn0.UVvTRiiQIrQBOH63d_QH1g", "mapbox_style": "mapbox://styles/mapbox/light-v11", "default_lat": "-41.2865", "default_lng": "174.7762", From e22cbae66e9adf7d6ccf88550e0451303f2ecf47 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 16:33:35 +1300 Subject: [PATCH 1266/1275] Implement UX pass for loading, logo motion, and wholesale --- assets/base.css | 2 +- assets/image-loading-state.js | 92 +++++++- blocks/_header-logo.liquid | 36 +++- blocks/_product-card-gallery.liquid | 6 + sections/product-information.liquid | 17 +- snippets/card-gallery.liquid | 4 +- templates/index.json | 3 + templates/page.wholesale.json | 313 +++++++++++++++++++--------- 8 files changed, 359 insertions(+), 114 deletions(-) diff --git a/assets/base.css b/assets/base.css index 6014799b4..a1b3aa804 100644 --- a/assets/base.css +++ b/assets/base.css @@ -3,7 +3,7 @@ } :root { - --image-placeholder-color: #eed484; + --image-placeholder-color: #e1b87f; } body { diff --git a/assets/image-loading-state.js b/assets/image-loading-state.js index 92c1dccef..2030352ef 100644 --- a/assets/image-loading-state.js +++ b/assets/image-loading-state.js @@ -1,8 +1,92 @@ const LOADED_ATTR = 'data-image-loaded'; const PROMOTED_ATTR = 'data-image-priority-promoted'; +const PLACEHOLDER_ASSIGNED_ATTR = 'data-placeholder-color-assigned'; const PROMOTE_ROOT_MARGIN = '800px 0px'; +const PLACEHOLDER_COLORS = [ + '#E1B87F', + '#DB6B30', + '#92ACA0', + '#F8B5C4', + '#0F486E', + '#A62D3B', + '#EED484', +]; +const PLACEHOLDER_HOST_SELECTORS = [ + 'placeholder-image', + '.placeholder-image', + '.product-media', + '.product-media-container', + '.card-gallery', + '.media-block__media', +]; let priorityObserver = null; +let placeholderColorBag = []; +let lastAssignedPlaceholderColor = ''; + +function shuffleColors(colors) { + const next = [...colors]; + for (let index = next.length - 1; index > 0; index -= 1) { + const swapIndex = Math.floor(Math.random() * (index + 1)); + [next[index], next[swapIndex]] = [next[swapIndex], next[index]]; + } + return next; +} + +function getNextPlaceholderColor() { + if (!placeholderColorBag.length) { + placeholderColorBag = shuffleColors(PLACEHOLDER_COLORS); + + if ( + placeholderColorBag.length > 1 && + lastAssignedPlaceholderColor && + placeholderColorBag[0] === lastAssignedPlaceholderColor + ) { + const swapIndex = placeholderColorBag.findIndex( + (color, index) => index > 0 && color !== lastAssignedPlaceholderColor + ); + + if (swapIndex > 0) { + [placeholderColorBag[0], placeholderColorBag[swapIndex]] = [ + placeholderColorBag[swapIndex], + placeholderColorBag[0], + ]; + } + } + } + + const nextColor = placeholderColorBag.shift() || PLACEHOLDER_COLORS[0]; + lastAssignedPlaceholderColor = nextColor; + return nextColor; +} + +function isHeaderLogoImage(img) { + return ( + img.classList.contains('header-logo__image') || + Boolean(img.closest('.header-logo')) + ); +} + +function findPlaceholderHost(img) { + for (const selector of PLACEHOLDER_HOST_SELECTORS) { + const host = img.closest(selector); + if (host) return host; + } + + return img; +} + +function assignPlaceholderColor(img) { + if (!(img instanceof HTMLImageElement) || isHeaderLogoImage(img)) return; + + const host = findPlaceholderHost(img); + if (!(host instanceof HTMLElement) || host.getAttribute(PLACEHOLDER_ASSIGNED_ATTR) === 'true') { + return; + } + + host.style.setProperty('--image-placeholder-color', getNextPlaceholderColor()); + host.setAttribute(PLACEHOLDER_ASSIGNED_ATTR, 'true'); +} function markLoaded(img) { if (!img || img.getAttribute(LOADED_ATTR) === 'true') return; @@ -11,16 +95,22 @@ function markLoaded(img) { function handleImage(img) { if (!(img instanceof HTMLImageElement)) return; + if (isHeaderLogoImage(img)) { + markLoaded(img); + return; + } if (priorityObserver && img.loading === 'lazy') { priorityObserver.observe(img); } - if (img.complete && img.naturalWidth > 0) { + if (img.complete) { markLoaded(img); return; } + assignPlaceholderColor(img); + img.addEventListener('load', () => markLoaded(img), { once: true }); img.addEventListener('error', () => markLoaded(img), { once: true }); } diff --git a/blocks/_header-logo.liquid b/blocks/_header-logo.liquid index 4d8cf0557..5baaad71e 100644 --- a/blocks/_header-logo.liquid +++ b/blocks/_header-logo.liquid @@ -29,16 +29,25 @@ endif %} +{% liquid + assign logo_tag = 'a' + if request.page_type == 'index' + assign logo_tag = 'span' + endif +%} + {% comment %} Output all logo variants, use CSS to hide/show the appropriate one based on the .header[transparent] selector {% endcomment %} -

Ingredients, New Zealand honey, and How Golden is made pages.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "rte", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 + "blocks": { + "accordion_row_drinks": { + "type": "accordion_row", + "settings": { + "heading": "The drinks", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 0, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.4, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_drinks": { + "type": "text", + "settings": { + "text": "

Golden is a New Zealand-made soda range sweetened with mānuka and kānuka honey. Low-cal. No refined sugar. Real fruit where it belongs. Clean, bright flavour built to feel lighter than standard soft drink.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_drinks" + ] + }, + "accordion_row_fit": { + "type": "accordion_row", + "settings": { + "heading": "Where it fits", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 0, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.4, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_fit": { + "type": "text", + "settings": { + "text": "

Built for modern fridges. Grocery, cafes, bottle stores, and hospitality. Easy to explain, easy to pour, and distinct enough to sit apart from classic soft drinks and zero-sugar options.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_fit" + ] + }, + "accordion_row_ordering": { + "type": "accordion_row", + "settings": { + "heading": "Ordering", + "right_heading": "", + "heading_links_enabled": false, + "heading_link": "", + "right_heading_link": "", + "collapsible": true, + "open_by_default": false, + "group_mode": "shared", + "color_scheme": "", + "hover_color_scheme": "", + "left_hover_color_scheme": "", + "right_hover_color_scheme": "", + "summary_padding_block_start": 16, + "summary_padding_block_end": 16, + "summary_padding_inline_start": 16, + "summary_padding_inline_end": 16, + "content_padding_block_start": 0, + "content_padding_block_end": 16, + "content_padding_inline_start": 16, + "content_padding_inline_end": 16, + "heading_type_preset": "", + "right_heading_type_preset": "match", + "heading_min_size": 1.1, + "heading_max_size": 1.4, + "icon": "none", + "width": 20 + }, + "blocks": { + "text_ordering": { + "type": "text", + "settings": { + "text": "

Order on Upstock. For account questions, use the form on this page or email wholesale@staygolden.co.nz. Looking for a nearby shop instead? Try the store locator.

", + "width": "100%", + "max_width": "none", + "alignment": "left", + "type_preset": "paragraph", + "font": "var(--font-body--family)", + "font_size": "1rem", + "line_height": "normal", + "letter_spacing": "normal", + "case": "none", + "wrap": "pretty", + "color": "var(--color-foreground)", + "background": false, + "background_color": "#00000026", + "corner_radius": 0, + "padding-block-start": 0, + "padding-block-end": 0, + "padding-inline-start": 0, + "padding-inline-end": 0 + }, + "blocks": {} + } + }, + "block_order": [ + "text_ordering" + ] + } }, - "blocks": {} + "block_order": [ + "accordion_row_drinks", + "accordion_row_fit", + "accordion_row_ordering" + ] }, "button_upstock": { "type": "button", @@ -190,38 +342,11 @@ "custom_width_mobile": 100 }, "blocks": {} - }, - "text_note": { - "type": "text", - "settings": { - "text": "

For wholesale enquiries in New Zealand, use the form on this page or email wholesale@staygolden.co.nz. If you are looking for a nearby retailer rather than opening an account, head to the store locator.

", - "width": "100%", - "max_width": "normal", - "alignment": "left", - "type_preset": "paragraph", - "font": "var(--font-body--family)", - "font_size": "1rem", - "line_height": "normal", - "letter_spacing": "normal", - "case": "none", - "wrap": "pretty", - "color": "var(--color-foreground)", - "background": false, - "background_color": "#00000026", - "corner_radius": 0, - "padding-block-start": 0, - "padding-block-end": 0, - "padding-inline-start": 0, - "padding-inline-end": 0 - }, - "blocks": {} } }, "block_order": [ - "text_heading", - "text_copy", - "button_upstock", - "text_note" + "accordion_4z4XvE", + "button_upstock" ] }, "group_iEqhzJ": { @@ -297,24 +422,10 @@ } }, "block_order": [] - }, - "spacer_VrBciU": { - "type": "spacer", - "settings": { - "size": "pixel", - "percent_size": 100, - "pixel_size": 16, - "custom_mobile_size": false, - "size_mobile": "percent", - "percent_size_mobile": 100, - "pixel_size_mobile": 120 - }, - "blocks": {} } }, "block_order": [ - "contact_form_dYBJUe", - "spacer_VrBciU" + "contact_form_dYBJUe" ] } }, From 8a72747611b48b7324896a8e82438b6d79c7e724 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 03:43:30 +0000 Subject: [PATCH 1267/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden From 77d3ed52667a415ef486a75681f3625b2d3960ab Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 17:56:37 +1300 Subject: [PATCH 1268/1275] Scope header logo animation to home and remove product divider --- blocks/_header-logo.liquid | 6 +++--- sections/product-information.liquid | 23 ----------------------- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/blocks/_header-logo.liquid b/blocks/_header-logo.liquid index 5baaad71e..0d665c0c8 100644 --- a/blocks/_header-logo.liquid +++ b/blocks/_header-logo.liquid @@ -47,7 +47,7 @@ {% if logo_tag == 'a' %} href="{{ routes.root_url }}" {% endif %} - class="size-style spacing-style header-logo{% if logo_tag == 'a' %} header-logo--interactive{% endif %}" + class="size-style spacing-style header-logo{% if logo_tag == 'a' %} header-logo--interactive{% endif %}{% if request.page_type == 'index' %} header-logo--home-animated{% endif %}" style=" {% render 'size-style', settings: block_settings %} {% render 'spacing-style', settings: block_settings %} @@ -163,13 +163,13 @@ } @media (hover: hover) and (pointer: fine) { - .header-logo:is(:hover, :focus-visible) .header-logo__image-container { + .header-logo--home-animated:is(:hover, :focus-visible) .header-logo__image-container { transform: rotate(30deg); } } @media (hover: none), (pointer: coarse) { - .header-logo--interactive:active .header-logo__image-container { + .header-logo--home-animated:active .header-logo__image-container { transform: rotate(30deg); } } diff --git a/sections/product-information.liquid b/sections/product-information.liquid index 890c17901..f65a6fc9a 100644 --- a/sections/product-information.liquid +++ b/sections/product-information.liquid @@ -278,31 +278,8 @@ @media screen and (min-width: 750px) { .product-information__grid--half .product-information__media { - position: relative; align-self: start; } - - .product-information__grid--half .product-information__media::after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - width: var(--golden-gridline-thickness, var(--section-gridline-width, 1px)); - background-color: var( - --section-gridline-color, - var(--golden-gridline-color, rgba(0, 0, 0, 0.12)) - ); - pointer-events: none; - z-index: 1; - } - - .product-information__grid--half.product-information--media-left .product-information__media::after { - right: calc(var(--golden-gridline-thickness, var(--section-gridline-width, 1px)) * -0.5); - } - - .product-information__grid--half.product-information--media-right .product-information__media::after { - left: calc(var(--golden-gridline-thickness, var(--section-gridline-width, 1px)) * -0.5); - } } /* Wider sidebar for large screens */ From aea6306ba5f593261d335b5896aac9e43f647d6a Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 17:56:37 +1300 Subject: [PATCH 1269/1275] Scope header logo animation to home and remove product divider --- blocks/_header-logo.liquid | 6 +++--- sections/product-information.liquid | 23 ----------------------- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/blocks/_header-logo.liquid b/blocks/_header-logo.liquid index 5baaad71e..0d665c0c8 100644 --- a/blocks/_header-logo.liquid +++ b/blocks/_header-logo.liquid @@ -47,7 +47,7 @@ {% if logo_tag == 'a' %} href="{{ routes.root_url }}" {% endif %} - class="size-style spacing-style header-logo{% if logo_tag == 'a' %} header-logo--interactive{% endif %}" + class="size-style spacing-style header-logo{% if logo_tag == 'a' %} header-logo--interactive{% endif %}{% if request.page_type == 'index' %} header-logo--home-animated{% endif %}" style=" {% render 'size-style', settings: block_settings %} {% render 'spacing-style', settings: block_settings %} @@ -163,13 +163,13 @@ } @media (hover: hover) and (pointer: fine) { - .header-logo:is(:hover, :focus-visible) .header-logo__image-container { + .header-logo--home-animated:is(:hover, :focus-visible) .header-logo__image-container { transform: rotate(30deg); } } @media (hover: none), (pointer: coarse) { - .header-logo--interactive:active .header-logo__image-container { + .header-logo--home-animated:active .header-logo__image-container { transform: rotate(30deg); } } diff --git a/sections/product-information.liquid b/sections/product-information.liquid index 890c17901..f65a6fc9a 100644 --- a/sections/product-information.liquid +++ b/sections/product-information.liquid @@ -278,31 +278,8 @@ @media screen and (min-width: 750px) { .product-information__grid--half .product-information__media { - position: relative; align-self: start; } - - .product-information__grid--half .product-information__media::after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - width: var(--golden-gridline-thickness, var(--section-gridline-width, 1px)); - background-color: var( - --section-gridline-color, - var(--golden-gridline-color, rgba(0, 0, 0, 0.12)) - ); - pointer-events: none; - z-index: 1; - } - - .product-information__grid--half.product-information--media-left .product-information__media::after { - right: calc(var(--golden-gridline-thickness, var(--section-gridline-width, 1px)) * -0.5); - } - - .product-information__grid--half.product-information--media-right .product-information__media::after { - left: calc(var(--golden-gridline-thickness, var(--section-gridline-width, 1px)) * -0.5); - } } /* Wider sidebar for large screens */ From d8721a32c5695734af07213e4a1a61451ae37435 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 18:56:16 +1300 Subject: [PATCH 1270/1275] Add editorial page headers and split dividers --- config/settings_schema.json | 11 + sections/main-page.liquid | 619 +++++++++++++++++++++++++++++++++++- sections/section.liquid | 9 +- snippets/breadcrumbs.liquid | 128 ++++++++ snippets/section.liquid | 29 +- 5 files changed, 755 insertions(+), 41 deletions(-) create mode 100644 snippets/breadcrumbs.liquid diff --git a/config/settings_schema.json b/config/settings_schema.json index b47ff4a99..49ba7331c 100644 --- a/config/settings_schema.json +++ b/config/settings_schema.json @@ -1939,5 +1939,16 @@ "default": "equal-width-buttons" } ] + }, + { + "name": "Pages", + "settings": [ + { + "type": "checkbox", + "id": "enable_page_header_breadcrumbs", + "label": "Show page header breadcrumbs by default", + "default": true + } + ] } ] diff --git a/sections/main-page.liquid b/sections/main-page.liquid index b6ed2ab5f..7b03dc5ae 100644 --- a/sections/main-page.liquid +++ b/sections/main-page.liquid @@ -1,24 +1,345 @@ +{% liquid + assign page_header_enabled = section.settings.enable_page_header + assign page_header_media_enabled = false + if page_header_enabled and section.settings.page_header_show_media + assign page_header_media_enabled = true + endif + + assign page_header_title = section.settings.page_header_title | strip + if page_header_title == blank + assign page_header_title = page.title + endif + + assign page_header_media_height = 'auto' + assign page_header_media_height_mobile = 'auto' + case section.settings.page_header_media_height + when '50svh' + assign page_header_media_height = '50svh' + assign page_header_media_height_mobile = '30svh' + when '60svh' + assign page_header_media_height = '60svh' + assign page_header_media_height_mobile = '50svh' + when '80svh' + assign page_header_media_height = '80svh' + assign page_header_media_height_mobile = '70svh' + when '100svh' + assign page_header_media_height = '100svh' + assign page_header_media_height_mobile = '100svh' + endcase + + assign page_header_align_items = 'flex-start' + case section.settings.page_header_text_alignment + when 'center' + assign page_header_align_items = 'center' + when 'right' + assign page_header_align_items = 'flex-end' + endcase + + assign page_header_classes = 'main-page__header-shell' + if section.settings.page_header_media_width == 'full' + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--full' + else + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--' | append: section.settings.page_header_media_width + if section.settings.page_header_media_position == 'right' + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--media-right' + endif + endif + + if page_header_media_enabled == false + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--no-media' + endif + + assign page_header_fixed_media = false + if section.settings.page_header_media_height != 'auto' or section.settings.page_header_media_width == 'full' + assign page_header_fixed_media = true + endif + + assign page_header_show_breadcrumbs = false + if request.page_type == 'page' and page_header_enabled and section.settings.show_breadcrumbs and settings.enable_page_header_breadcrumbs + assign page_header_show_breadcrumbs = true + endif +%}
-
-
- {% content_for 'blocks' %} +
+ {% if page_header_enabled %} +
+
+
+ {% if page_header_media_enabled %} +
+ {% if section.settings.page_header_media_type == 'video' and section.settings.page_header_video != blank %} + {% capture page_header_video_style %} + --page-header-video-fit: {{ section.settings.page_header_video_fit }}; + {% endcapture %} + {% render 'video', + video: section.settings.page_header_video, + video_autoplay: section.settings.page_header_video_autoplay, + video_loop: section.settings.page_header_video_loop, + video_class: 'main-page__header-media-asset main-page__header-media-asset--video', + video_style: page_header_video_style | strip, + section_id: section.id + %} + {% elsif section.settings.page_header_image != blank %} + {% capture page_header_image_style %} + --page-header-image-fit: {{ section.settings.page_header_image_fit }}; + {% endcapture %} + {% render 'image', + image: section.settings.page_header_image, + class: 'main-page__header-media-asset', + style: page_header_image_style | strip + %} + {% else %} +
+ {{ 'hero-apparel-1' | placeholder_svg_tag }} +
+ {% endif %} +
+ {% endif %} + +
+
+ {% if section.settings.page_header_caption != blank %} +

{{ section.settings.page_header_caption }}

+ {% endif %} + +
+ {% if page_header_title != blank %} +

{{ page_header_title }}

+ {% endif %} + + {% if section.settings.page_header_text != blank %} +
+ {{ section.settings.page_header_text }} +
+ {% endif %} +
+
+
+
+
+ + {% if page_header_show_breadcrumbs %} +
+
+ {% render 'breadcrumbs', + current_title: page_header_title, + parent_1_label: section.settings.page_header_breadcrumb_parent_label, + parent_1_link: section.settings.page_header_breadcrumb_parent_link, + parent_2_label: section.settings.page_header_breadcrumb_parent_2_label, + parent_2_link: section.settings.page_header_breadcrumb_parent_2_link + %} +
+
+ {% endif %} +
+ {% endif %} + +
+
+ {% content_for 'blocks' %} +
+{% stylesheet %} + .main-page { + row-gap: 0; + } + + .main-page__content { + width: 100%; + } + + .main-page__header { + width: 100%; + } + + .main-page__header-hero, + .main-page__header-breadcrumbs { + background-color: var(--color-background); + } + + .main-page__header-shell { + display: grid; + background-color: var(--color-background); + } + + .main-page__header-shell--no-media { + grid-template-columns: minmax(0, 1fr); + } + + .main-page__header-shell--full { + grid-template-columns: minmax(0, 1fr); + position: relative; + } + + .main-page__header-shell--full .main-page__header-media, + .main-page__header-shell--full .main-page__header-copy-wrapper { + grid-column: 1; + grid-row: 1; + } + + .main-page__header-shell--full .main-page__header-copy-wrapper { + position: relative; + z-index: 1; + } + + .main-page__header-media { + position: relative; + min-height: var(--page-header-media-height-mobile); + } + + .main-page__header-copy-wrapper { + display: flex; + align-items: var(--page-header-content-align-items); + justify-content: var(--page-header-content-justify); + min-height: var(--page-header-media-height-mobile); + padding: clamp(24px, 4vw, 56px) var(--page-margin); + } + + .main-page__header-shell--no-media .main-page__header-copy-wrapper { + min-height: auto; + } + + .main-page__header-copy { + width: min(100%, 48rem); + display: flex; + flex-direction: column; + gap: 1rem; + text-align: var(--page-header-text-align); + } + + .main-page__header-text-stack { + display: flex; + flex-direction: column; + gap: 1rem; + } + + .main-page__header-caption { + margin: 0; + } + + .main-page__header-title { + margin: 0; + } + + .main-page__header-body > *:first-child { + margin-top: 0; + } + + .main-page__header-body > *:last-child { + margin-bottom: 0; + } + + .main-page__header-media-asset { + display: block; + width: 100%; + height: 100%; + } + + img.main-page__header-media-asset { + object-fit: var(--page-header-image-fit, cover); + } + + .main-page__header-media--fixed .main-page__header-media-asset { + position: absolute; + inset: 0; + } + + deferred-media.main-page__header-media-asset { + background-color: var(--color-background); + } + + deferred-media.main-page__header-media-asset :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) { + object-fit: var(--page-header-video-fit, cover); + } + + .main-page__header-media:not(.main-page__header-media--fixed) img.main-page__header-media-asset { + position: static; + height: auto; + } + + .main-page__header-media-asset--placeholder { + min-height: inherit; + } + + .main-page__header-breadcrumbs { + border-top: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10)); + } + + .main-page__header-breadcrumbs-inner { + width: min(var(--page-width), 100%); + margin: 0 auto; + padding: 1rem var(--page-margin); + } + + @media screen and (min-width: 750px) { + .main-page__header-shell--wide { + grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); + } + + .main-page__header-shell--wide.main-page__header-shell--media-right { + grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); + } + + .main-page__header-shell--medium { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .main-page__header-shell--narrow { + grid-template-columns: minmax(0, 4fr) minmax(0, 2fr); + } + + .main-page__header-shell--narrow.main-page__header-shell--media-right { + grid-template-columns: minmax(0, 2fr) minmax(0, 4fr); + } + + .main-page__header-shell--media-right .main-page__header-media { + order: 1; + } + + .main-page__header-shell--media-right .main-page__header-copy-wrapper { + order: 0; + } + + .main-page__header-media { + min-height: var(--page-header-media-height); + } + + .main-page__header-copy-wrapper { + min-height: var(--page-header-media-height); + padding: clamp(32px, 5vw, 72px); + } + + .main-page__header-breadcrumbs-inner { + padding-block: 1.25rem; + } + } +{% endstylesheet %} + {% schema %} { "name": "t:names.page", @@ -61,6 +382,274 @@ "unit": "px", "default": 12 }, + { + "type": "header", + "content": "Page header" + }, + { + "type": "checkbox", + "id": "enable_page_header", + "label": "Enable editorial page header", + "default": false + }, + { + "type": "text", + "id": "page_header_caption", + "label": "Eyebrow", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "text", + "id": "page_header_title", + "label": "Title override", + "info": "Leave blank to use the page title.", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "richtext", + "id": "page_header_text", + "label": "Summary", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_text_alignment", + "label": "Text alignment", + "options": [ + { + "value": "left", + "label": "t:options.left" + }, + { + "value": "center", + "label": "t:options.center" + }, + { + "value": "right", + "label": "t:options.right" + } + ], + "default": "left", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_vertical_alignment", + "label": "Content vertical alignment", + "options": [ + { + "value": "flex-start", + "label": "t:options.top" + }, + { + "value": "center", + "label": "t:options.center" + }, + { + "value": "flex-end", + "label": "t:options.bottom" + } + ], + "default": "flex-end", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "checkbox", + "id": "page_header_show_media", + "label": "Show media", + "default": true, + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_media_type", + "label": "Media type", + "options": [ + { + "value": "image", + "label": "t:options.image" + }, + { + "value": "video", + "label": "t:options.video" + } + ], + "default": "image", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media }}" + }, + { + "type": "image_picker", + "id": "page_header_image", + "label": "Image", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'image' }}" + }, + { + "type": "select", + "id": "page_header_image_fit", + "label": "Image fit", + "options": [ + { + "value": "cover", + "label": "t:options.cover" + }, + { + "value": "contain", + "label": "t:options.contain" + } + ], + "default": "cover", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'image' }}" + }, + { + "type": "video", + "id": "page_header_video", + "label": "Video", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "checkbox", + "id": "page_header_video_loop", + "label": "Loop video", + "default": true, + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "checkbox", + "id": "page_header_video_autoplay", + "label": "Autoplay video", + "default": false, + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "select", + "id": "page_header_video_fit", + "label": "Video fit", + "options": [ + { + "value": "cover", + "label": "t:options.cover" + }, + { + "value": "contain", + "label": "t:options.contain" + } + ], + "default": "cover", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "select", + "id": "page_header_media_position", + "label": "Media position", + "options": [ + { + "value": "left", + "label": "t:options.left" + }, + { + "value": "right", + "label": "t:options.right" + } + ], + "default": "left", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_media_width != 'full' }}" + }, + { + "type": "select", + "id": "page_header_media_width", + "label": "Media width", + "options": [ + { + "value": "narrow", + "label": "t:options.narrow" + }, + { + "value": "medium", + "label": "t:options.medium" + }, + { + "value": "wide", + "label": "t:options.wide" + }, + { + "value": "full", + "label": "t:options.full" + } + ], + "default": "full", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_media_height", + "label": "Media height", + "options": [ + { + "value": "auto", + "label": "t:options.auto" + }, + { + "value": "50svh", + "label": "t:options.small" + }, + { + "value": "60svh", + "label": "t:options.medium" + }, + { + "value": "80svh", + "label": "t:options.large" + }, + { + "value": "100svh", + "label": "t:options.full_screen" + } + ], + "default": "60svh", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "color_scheme", + "id": "page_header_color_scheme", + "label": "Header colour scheme", + "default": "scheme-1", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "header", + "content": "Breadcrumbs" + }, + { + "type": "checkbox", + "id": "show_breadcrumbs", + "label": "Show breadcrumbs in page header", + "default": true, + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "text", + "id": "page_header_breadcrumb_parent_label", + "label": "Breadcrumb parent label", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs }}" + }, + { + "type": "url", + "id": "page_header_breadcrumb_parent_link", + "label": "Breadcrumb parent link", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs and section.settings.page_header_breadcrumb_parent_label != blank }}" + }, + { + "type": "text", + "id": "page_header_breadcrumb_parent_2_label", + "label": "Second breadcrumb parent label", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs }}" + }, + { + "type": "url", + "id": "page_header_breadcrumb_parent_2_link", + "label": "Second breadcrumb parent link", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs and section.settings.page_header_breadcrumb_parent_2_label != blank }}" + }, { "type": "color_scheme", "id": "color_scheme", diff --git a/sections/section.liquid b/sections/section.liquid index ef014c12e..b032240a3 100644 --- a/sections/section.liquid +++ b/sections/section.liquid @@ -335,11 +335,18 @@ "default": 100, "visible_if": "{{ section.settings.border != 'none' }}" }, + { + "type": "checkbox", + "id": "enable_split_divider", + "label": "Show split divider", + "info": "Applies to side-by-side sections, including Split Showcase.", + "default": true + }, { "type": "color", "id": "split_divider_color", "label": "Split showcase divider colour", - "info": "Only affects Split Showcase sections.", + "info": "Only affects side-by-side sections when split dividers are enabled.", "default": "#d9d9d9" }, { diff --git a/snippets/breadcrumbs.liquid b/snippets/breadcrumbs.liquid new file mode 100644 index 000000000..7383c4985 --- /dev/null +++ b/snippets/breadcrumbs.liquid @@ -0,0 +1,128 @@ +{%- liquid + assign current_title = current_title | default: '' + if current_title == blank + case request.page_type + when 'page' + assign current_title = page.title + when 'article' + assign current_title = article.title + when 'collection' + assign current_title = collection.title + when 'product' + assign current_title = product.title + endcase + endif + + assign crumb_parent_1_label = parent_1_label | default: '' + assign crumb_parent_1_link = parent_1_link | default: '' + assign crumb_parent_2_label = parent_2_label | default: '' + assign crumb_parent_2_link = parent_2_link | default: '' +-%} + +{%- if current_title != blank -%} + +{%- endif -%} + +{% stylesheet %} + .breadcrumbs { + width: 100%; + } + + .breadcrumbs__list { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.4rem; + list-style: none; + margin: 0; + padding: 0; + font-size: var(--font-size--sm); + line-height: 1.4; + } + + .breadcrumbs__item { + display: inline-flex; + align-items: center; + gap: 0.4rem; + min-width: 0; + } + + .breadcrumbs__link, + .breadcrumbs__current, + .breadcrumbs__separator { + color: inherit; + } + + .breadcrumbs__link { + text-decoration: none; + } + + .breadcrumbs__link:hover, + .breadcrumbs__link:focus-visible { + text-decoration: underline; + } + + .breadcrumbs__current { + opacity: 0.78; + } + + .breadcrumbs__separator { + opacity: 0.55; + } +{% endstylesheet %} diff --git a/snippets/section.liquid b/snippets/section.liquid index b7c4abda1..379e79dc9 100644 --- a/snippets/section.liquid +++ b/snippets/section.liquid @@ -17,24 +17,10 @@ {%- endfor -%} {%- assign show_split_divider = false -%} -{%- if group_block_count > 1 and section.settings.content_direction == 'row' -%} +{%- if section.settings.enable_split_divider and group_block_count > 1 and section.settings.content_direction == 'row' -%} {%- assign show_split_divider = true -%} {%- endif -%} -{%- assign is_split_showcase = false -%} -{%- if section.blocks.size > 0 - and section.settings.content_direction == 'row' - and section.settings.section_height == 'large' - and section.settings.section_width == 'full-width' - and has_only_group_blocks -%} - {%- assign is_split_showcase = true -%} -{%- endif -%} -{%- assign split_mode = '' -%} -{%- if is_split_showcase -%} - {%- assign split_mode = 'carousel' -%} - {%- assign show_split_divider = false -%} -{%- endif -%} -
- {% if is_split_showcase and split_mode == 'carousel' %} - {% render 'split-showcase-carousel', section: section, split_divider_color: split_divider_color %} - {% else %} - {{ children }} - {% endif %} + {{ children }}
From 579e0108e39a5237a7e5d71975860415d17d88bd Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 18:56:16 +1300 Subject: [PATCH 1271/1275] Add editorial page headers and split dividers --- config/settings_schema.json | 11 + sections/main-page.liquid | 619 +++++++++++++++++++++++++++++++++++- sections/section.liquid | 9 +- snippets/breadcrumbs.liquid | 128 ++++++++ snippets/section.liquid | 29 +- 5 files changed, 755 insertions(+), 41 deletions(-) create mode 100644 snippets/breadcrumbs.liquid diff --git a/config/settings_schema.json b/config/settings_schema.json index b47ff4a99..49ba7331c 100644 --- a/config/settings_schema.json +++ b/config/settings_schema.json @@ -1939,5 +1939,16 @@ "default": "equal-width-buttons" } ] + }, + { + "name": "Pages", + "settings": [ + { + "type": "checkbox", + "id": "enable_page_header_breadcrumbs", + "label": "Show page header breadcrumbs by default", + "default": true + } + ] } ] diff --git a/sections/main-page.liquid b/sections/main-page.liquid index b6ed2ab5f..7b03dc5ae 100644 --- a/sections/main-page.liquid +++ b/sections/main-page.liquid @@ -1,24 +1,345 @@ +{% liquid + assign page_header_enabled = section.settings.enable_page_header + assign page_header_media_enabled = false + if page_header_enabled and section.settings.page_header_show_media + assign page_header_media_enabled = true + endif + + assign page_header_title = section.settings.page_header_title | strip + if page_header_title == blank + assign page_header_title = page.title + endif + + assign page_header_media_height = 'auto' + assign page_header_media_height_mobile = 'auto' + case section.settings.page_header_media_height + when '50svh' + assign page_header_media_height = '50svh' + assign page_header_media_height_mobile = '30svh' + when '60svh' + assign page_header_media_height = '60svh' + assign page_header_media_height_mobile = '50svh' + when '80svh' + assign page_header_media_height = '80svh' + assign page_header_media_height_mobile = '70svh' + when '100svh' + assign page_header_media_height = '100svh' + assign page_header_media_height_mobile = '100svh' + endcase + + assign page_header_align_items = 'flex-start' + case section.settings.page_header_text_alignment + when 'center' + assign page_header_align_items = 'center' + when 'right' + assign page_header_align_items = 'flex-end' + endcase + + assign page_header_classes = 'main-page__header-shell' + if section.settings.page_header_media_width == 'full' + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--full' + else + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--' | append: section.settings.page_header_media_width + if section.settings.page_header_media_position == 'right' + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--media-right' + endif + endif + + if page_header_media_enabled == false + assign page_header_classes = page_header_classes | append: ' main-page__header-shell--no-media' + endif + + assign page_header_fixed_media = false + if section.settings.page_header_media_height != 'auto' or section.settings.page_header_media_width == 'full' + assign page_header_fixed_media = true + endif + + assign page_header_show_breadcrumbs = false + if request.page_type == 'page' and page_header_enabled and section.settings.show_breadcrumbs and settings.enable_page_header_breadcrumbs + assign page_header_show_breadcrumbs = true + endif +%}
-
-
- {% content_for 'blocks' %} +
+ {% if page_header_enabled %} +
+
+
+ {% if page_header_media_enabled %} +
+ {% if section.settings.page_header_media_type == 'video' and section.settings.page_header_video != blank %} + {% capture page_header_video_style %} + --page-header-video-fit: {{ section.settings.page_header_video_fit }}; + {% endcapture %} + {% render 'video', + video: section.settings.page_header_video, + video_autoplay: section.settings.page_header_video_autoplay, + video_loop: section.settings.page_header_video_loop, + video_class: 'main-page__header-media-asset main-page__header-media-asset--video', + video_style: page_header_video_style | strip, + section_id: section.id + %} + {% elsif section.settings.page_header_image != blank %} + {% capture page_header_image_style %} + --page-header-image-fit: {{ section.settings.page_header_image_fit }}; + {% endcapture %} + {% render 'image', + image: section.settings.page_header_image, + class: 'main-page__header-media-asset', + style: page_header_image_style | strip + %} + {% else %} +
+ {{ 'hero-apparel-1' | placeholder_svg_tag }} +
+ {% endif %} +
+ {% endif %} + +
+
+ {% if section.settings.page_header_caption != blank %} +

{{ section.settings.page_header_caption }}

+ {% endif %} + +
+ {% if page_header_title != blank %} +

{{ page_header_title }}

+ {% endif %} + + {% if section.settings.page_header_text != blank %} +
+ {{ section.settings.page_header_text }} +
+ {% endif %} +
+
+
+
+
+ + {% if page_header_show_breadcrumbs %} +
+
+ {% render 'breadcrumbs', + current_title: page_header_title, + parent_1_label: section.settings.page_header_breadcrumb_parent_label, + parent_1_link: section.settings.page_header_breadcrumb_parent_link, + parent_2_label: section.settings.page_header_breadcrumb_parent_2_label, + parent_2_link: section.settings.page_header_breadcrumb_parent_2_link + %} +
+
+ {% endif %} +
+ {% endif %} + +
+
+ {% content_for 'blocks' %} +
+{% stylesheet %} + .main-page { + row-gap: 0; + } + + .main-page__content { + width: 100%; + } + + .main-page__header { + width: 100%; + } + + .main-page__header-hero, + .main-page__header-breadcrumbs { + background-color: var(--color-background); + } + + .main-page__header-shell { + display: grid; + background-color: var(--color-background); + } + + .main-page__header-shell--no-media { + grid-template-columns: minmax(0, 1fr); + } + + .main-page__header-shell--full { + grid-template-columns: minmax(0, 1fr); + position: relative; + } + + .main-page__header-shell--full .main-page__header-media, + .main-page__header-shell--full .main-page__header-copy-wrapper { + grid-column: 1; + grid-row: 1; + } + + .main-page__header-shell--full .main-page__header-copy-wrapper { + position: relative; + z-index: 1; + } + + .main-page__header-media { + position: relative; + min-height: var(--page-header-media-height-mobile); + } + + .main-page__header-copy-wrapper { + display: flex; + align-items: var(--page-header-content-align-items); + justify-content: var(--page-header-content-justify); + min-height: var(--page-header-media-height-mobile); + padding: clamp(24px, 4vw, 56px) var(--page-margin); + } + + .main-page__header-shell--no-media .main-page__header-copy-wrapper { + min-height: auto; + } + + .main-page__header-copy { + width: min(100%, 48rem); + display: flex; + flex-direction: column; + gap: 1rem; + text-align: var(--page-header-text-align); + } + + .main-page__header-text-stack { + display: flex; + flex-direction: column; + gap: 1rem; + } + + .main-page__header-caption { + margin: 0; + } + + .main-page__header-title { + margin: 0; + } + + .main-page__header-body > *:first-child { + margin-top: 0; + } + + .main-page__header-body > *:last-child { + margin-bottom: 0; + } + + .main-page__header-media-asset { + display: block; + width: 100%; + height: 100%; + } + + img.main-page__header-media-asset { + object-fit: var(--page-header-image-fit, cover); + } + + .main-page__header-media--fixed .main-page__header-media-asset { + position: absolute; + inset: 0; + } + + deferred-media.main-page__header-media-asset { + background-color: var(--color-background); + } + + deferred-media.main-page__header-media-asset :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) { + object-fit: var(--page-header-video-fit, cover); + } + + .main-page__header-media:not(.main-page__header-media--fixed) img.main-page__header-media-asset { + position: static; + height: auto; + } + + .main-page__header-media-asset--placeholder { + min-height: inherit; + } + + .main-page__header-breadcrumbs { + border-top: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10)); + } + + .main-page__header-breadcrumbs-inner { + width: min(var(--page-width), 100%); + margin: 0 auto; + padding: 1rem var(--page-margin); + } + + @media screen and (min-width: 750px) { + .main-page__header-shell--wide { + grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); + } + + .main-page__header-shell--wide.main-page__header-shell--media-right { + grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); + } + + .main-page__header-shell--medium { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .main-page__header-shell--narrow { + grid-template-columns: minmax(0, 4fr) minmax(0, 2fr); + } + + .main-page__header-shell--narrow.main-page__header-shell--media-right { + grid-template-columns: minmax(0, 2fr) minmax(0, 4fr); + } + + .main-page__header-shell--media-right .main-page__header-media { + order: 1; + } + + .main-page__header-shell--media-right .main-page__header-copy-wrapper { + order: 0; + } + + .main-page__header-media { + min-height: var(--page-header-media-height); + } + + .main-page__header-copy-wrapper { + min-height: var(--page-header-media-height); + padding: clamp(32px, 5vw, 72px); + } + + .main-page__header-breadcrumbs-inner { + padding-block: 1.25rem; + } + } +{% endstylesheet %} + {% schema %} { "name": "t:names.page", @@ -61,6 +382,274 @@ "unit": "px", "default": 12 }, + { + "type": "header", + "content": "Page header" + }, + { + "type": "checkbox", + "id": "enable_page_header", + "label": "Enable editorial page header", + "default": false + }, + { + "type": "text", + "id": "page_header_caption", + "label": "Eyebrow", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "text", + "id": "page_header_title", + "label": "Title override", + "info": "Leave blank to use the page title.", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "richtext", + "id": "page_header_text", + "label": "Summary", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_text_alignment", + "label": "Text alignment", + "options": [ + { + "value": "left", + "label": "t:options.left" + }, + { + "value": "center", + "label": "t:options.center" + }, + { + "value": "right", + "label": "t:options.right" + } + ], + "default": "left", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_vertical_alignment", + "label": "Content vertical alignment", + "options": [ + { + "value": "flex-start", + "label": "t:options.top" + }, + { + "value": "center", + "label": "t:options.center" + }, + { + "value": "flex-end", + "label": "t:options.bottom" + } + ], + "default": "flex-end", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "checkbox", + "id": "page_header_show_media", + "label": "Show media", + "default": true, + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_media_type", + "label": "Media type", + "options": [ + { + "value": "image", + "label": "t:options.image" + }, + { + "value": "video", + "label": "t:options.video" + } + ], + "default": "image", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media }}" + }, + { + "type": "image_picker", + "id": "page_header_image", + "label": "Image", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'image' }}" + }, + { + "type": "select", + "id": "page_header_image_fit", + "label": "Image fit", + "options": [ + { + "value": "cover", + "label": "t:options.cover" + }, + { + "value": "contain", + "label": "t:options.contain" + } + ], + "default": "cover", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'image' }}" + }, + { + "type": "video", + "id": "page_header_video", + "label": "Video", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "checkbox", + "id": "page_header_video_loop", + "label": "Loop video", + "default": true, + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "checkbox", + "id": "page_header_video_autoplay", + "label": "Autoplay video", + "default": false, + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "select", + "id": "page_header_video_fit", + "label": "Video fit", + "options": [ + { + "value": "cover", + "label": "t:options.cover" + }, + { + "value": "contain", + "label": "t:options.contain" + } + ], + "default": "cover", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_show_media and section.settings.page_header_media_type == 'video' }}" + }, + { + "type": "select", + "id": "page_header_media_position", + "label": "Media position", + "options": [ + { + "value": "left", + "label": "t:options.left" + }, + { + "value": "right", + "label": "t:options.right" + } + ], + "default": "left", + "visible_if": "{{ section.settings.enable_page_header and section.settings.page_header_media_width != 'full' }}" + }, + { + "type": "select", + "id": "page_header_media_width", + "label": "Media width", + "options": [ + { + "value": "narrow", + "label": "t:options.narrow" + }, + { + "value": "medium", + "label": "t:options.medium" + }, + { + "value": "wide", + "label": "t:options.wide" + }, + { + "value": "full", + "label": "t:options.full" + } + ], + "default": "full", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "select", + "id": "page_header_media_height", + "label": "Media height", + "options": [ + { + "value": "auto", + "label": "t:options.auto" + }, + { + "value": "50svh", + "label": "t:options.small" + }, + { + "value": "60svh", + "label": "t:options.medium" + }, + { + "value": "80svh", + "label": "t:options.large" + }, + { + "value": "100svh", + "label": "t:options.full_screen" + } + ], + "default": "60svh", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "color_scheme", + "id": "page_header_color_scheme", + "label": "Header colour scheme", + "default": "scheme-1", + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "header", + "content": "Breadcrumbs" + }, + { + "type": "checkbox", + "id": "show_breadcrumbs", + "label": "Show breadcrumbs in page header", + "default": true, + "visible_if": "{{ section.settings.enable_page_header }}" + }, + { + "type": "text", + "id": "page_header_breadcrumb_parent_label", + "label": "Breadcrumb parent label", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs }}" + }, + { + "type": "url", + "id": "page_header_breadcrumb_parent_link", + "label": "Breadcrumb parent link", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs and section.settings.page_header_breadcrumb_parent_label != blank }}" + }, + { + "type": "text", + "id": "page_header_breadcrumb_parent_2_label", + "label": "Second breadcrumb parent label", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs }}" + }, + { + "type": "url", + "id": "page_header_breadcrumb_parent_2_link", + "label": "Second breadcrumb parent link", + "visible_if": "{{ section.settings.enable_page_header and section.settings.show_breadcrumbs and section.settings.page_header_breadcrumb_parent_2_label != blank }}" + }, { "type": "color_scheme", "id": "color_scheme", diff --git a/sections/section.liquid b/sections/section.liquid index ef014c12e..b032240a3 100644 --- a/sections/section.liquid +++ b/sections/section.liquid @@ -335,11 +335,18 @@ "default": 100, "visible_if": "{{ section.settings.border != 'none' }}" }, + { + "type": "checkbox", + "id": "enable_split_divider", + "label": "Show split divider", + "info": "Applies to side-by-side sections, including Split Showcase.", + "default": true + }, { "type": "color", "id": "split_divider_color", "label": "Split showcase divider colour", - "info": "Only affects Split Showcase sections.", + "info": "Only affects side-by-side sections when split dividers are enabled.", "default": "#d9d9d9" }, { diff --git a/snippets/breadcrumbs.liquid b/snippets/breadcrumbs.liquid new file mode 100644 index 000000000..7383c4985 --- /dev/null +++ b/snippets/breadcrumbs.liquid @@ -0,0 +1,128 @@ +{%- liquid + assign current_title = current_title | default: '' + if current_title == blank + case request.page_type + when 'page' + assign current_title = page.title + when 'article' + assign current_title = article.title + when 'collection' + assign current_title = collection.title + when 'product' + assign current_title = product.title + endcase + endif + + assign crumb_parent_1_label = parent_1_label | default: '' + assign crumb_parent_1_link = parent_1_link | default: '' + assign crumb_parent_2_label = parent_2_label | default: '' + assign crumb_parent_2_link = parent_2_link | default: '' +-%} + +{%- if current_title != blank -%} + +{%- endif -%} + +{% stylesheet %} + .breadcrumbs { + width: 100%; + } + + .breadcrumbs__list { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.4rem; + list-style: none; + margin: 0; + padding: 0; + font-size: var(--font-size--sm); + line-height: 1.4; + } + + .breadcrumbs__item { + display: inline-flex; + align-items: center; + gap: 0.4rem; + min-width: 0; + } + + .breadcrumbs__link, + .breadcrumbs__current, + .breadcrumbs__separator { + color: inherit; + } + + .breadcrumbs__link { + text-decoration: none; + } + + .breadcrumbs__link:hover, + .breadcrumbs__link:focus-visible { + text-decoration: underline; + } + + .breadcrumbs__current { + opacity: 0.78; + } + + .breadcrumbs__separator { + opacity: 0.55; + } +{% endstylesheet %} diff --git a/snippets/section.liquid b/snippets/section.liquid index b7c4abda1..379e79dc9 100644 --- a/snippets/section.liquid +++ b/snippets/section.liquid @@ -17,24 +17,10 @@ {%- endfor -%} {%- assign show_split_divider = false -%} -{%- if group_block_count > 1 and section.settings.content_direction == 'row' -%} +{%- if section.settings.enable_split_divider and group_block_count > 1 and section.settings.content_direction == 'row' -%} {%- assign show_split_divider = true -%} {%- endif -%} -{%- assign is_split_showcase = false -%} -{%- if section.blocks.size > 0 - and section.settings.content_direction == 'row' - and section.settings.section_height == 'large' - and section.settings.section_width == 'full-width' - and has_only_group_blocks -%} - {%- assign is_split_showcase = true -%} -{%- endif -%} -{%- assign split_mode = '' -%} -{%- if is_split_showcase -%} - {%- assign split_mode = 'carousel' -%} - {%- assign show_split_divider = false -%} -{%- endif -%} -
- {% if is_split_showcase and split_mode == 'carousel' %} - {% render 'split-showcase-carousel', section: section, split_divider_color: split_divider_color %} - {% else %} - {{ children }} - {% endif %} + {{ children }}
From d3931e3afcac988c2187771dce3a2b7a71b75f4e Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 19:36:03 +1300 Subject: [PATCH 1272/1275] Refactor page layout and fix split dividers --- assets/base.css | 1 + sections/main-page.liquid | 89 ++++++++++++++++++++++++++++++--------- 2 files changed, 71 insertions(+), 19 deletions(-) diff --git a/assets/base.css b/assets/base.css index a1b3aa804..c1829ce8e 100644 --- a/assets/base.css +++ b/assets/base.css @@ -3084,6 +3084,7 @@ product-card:focus-within .card-gallery__rotate-toggle, left: calc((var(--gap, 0px) / 2) * -1); width: 1px; background-color: var(--split-divider-color, var(--split-divider-color-default)); + z-index: 1; pointer-events: none; } diff --git a/sections/main-page.liquid b/sections/main-page.liquid index 7b03dc5ae..d8084944a 100644 --- a/sections/main-page.liquid +++ b/sections/main-page.liquid @@ -59,10 +59,59 @@ if request.page_type == 'page' and page_header_enabled and section.settings.show_breadcrumbs and settings.enable_page_header_breadcrumbs assign page_header_show_breadcrumbs = true endif + + assign suppressed_title_block_id = '' + assign suppressed_intro_block_id = '' + assign main_page_visible_block_count = 0 + assign has_suppressed_legacy_blocks = false + + for block in section.blocks + assign suppress_block = false + + if page_header_enabled and block.type == 'text' + if suppressed_title_block_id == blank + case block.settings.type_preset + when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + assign suppressed_title_block_id = block.id + assign suppress_block = true + endcase + elsif suppressed_intro_block_id == blank + case block.settings.type_preset + when 'rte', 'paragraph' + assign suppressed_intro_block_id = block.id + assign suppress_block = true + endcase + endif + endif + + unless suppress_block + assign main_page_visible_block_count = main_page_visible_block_count | plus: 1 + endunless + endfor + + if suppressed_title_block_id != blank or suppressed_intro_block_id != blank + assign has_suppressed_legacy_blocks = true + endif %}
-
+
+ {% if page_header_enabled and has_suppressed_legacy_blocks %} + + {% endif %} + {% if page_header_enabled %}
@@ -145,23 +194,25 @@
{% endif %} -
-
- {% content_for 'blocks' %} + {% if main_page_visible_block_count > 0 %} +
+
+ {% content_for 'blocks' %} +
-
+ {% endif %}
{% stylesheet %} @@ -384,12 +435,12 @@ }, { "type": "header", - "content": "Page header" + "content": "Page layout" }, { "type": "checkbox", "id": "enable_page_header", - "label": "Enable editorial page header", + "label": "Use editorial page layout", "default": false }, { From 051afc8904a854ab7f96598cae155bdc7fb13a92 Mon Sep 17 00:00:00 2001 From: Morg Date: Fri, 13 Mar 2026 19:36:03 +1300 Subject: [PATCH 1273/1275] Refactor page layout and fix split dividers --- assets/base.css | 1 + sections/main-page.liquid | 89 ++++++++++++++++++++++++++++++--------- 2 files changed, 71 insertions(+), 19 deletions(-) diff --git a/assets/base.css b/assets/base.css index a1b3aa804..c1829ce8e 100644 --- a/assets/base.css +++ b/assets/base.css @@ -3084,6 +3084,7 @@ product-card:focus-within .card-gallery__rotate-toggle, left: calc((var(--gap, 0px) / 2) * -1); width: 1px; background-color: var(--split-divider-color, var(--split-divider-color-default)); + z-index: 1; pointer-events: none; } diff --git a/sections/main-page.liquid b/sections/main-page.liquid index 7b03dc5ae..d8084944a 100644 --- a/sections/main-page.liquid +++ b/sections/main-page.liquid @@ -59,10 +59,59 @@ if request.page_type == 'page' and page_header_enabled and section.settings.show_breadcrumbs and settings.enable_page_header_breadcrumbs assign page_header_show_breadcrumbs = true endif + + assign suppressed_title_block_id = '' + assign suppressed_intro_block_id = '' + assign main_page_visible_block_count = 0 + assign has_suppressed_legacy_blocks = false + + for block in section.blocks + assign suppress_block = false + + if page_header_enabled and block.type == 'text' + if suppressed_title_block_id == blank + case block.settings.type_preset + when 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' + assign suppressed_title_block_id = block.id + assign suppress_block = true + endcase + elsif suppressed_intro_block_id == blank + case block.settings.type_preset + when 'rte', 'paragraph' + assign suppressed_intro_block_id = block.id + assign suppress_block = true + endcase + endif + endif + + unless suppress_block + assign main_page_visible_block_count = main_page_visible_block_count | plus: 1 + endunless + endfor + + if suppressed_title_block_id != blank or suppressed_intro_block_id != blank + assign has_suppressed_legacy_blocks = true + endif %}
-
+
+ {% if page_header_enabled and has_suppressed_legacy_blocks %} + + {% endif %} + {% if page_header_enabled %}
@@ -145,23 +194,25 @@
{% endif %} -
-
- {% content_for 'blocks' %} + {% if main_page_visible_block_count > 0 %} +
+
+ {% content_for 'blocks' %} +
-
+ {% endif %}
{% stylesheet %} @@ -384,12 +435,12 @@ }, { "type": "header", - "content": "Page header" + "content": "Page layout" }, { "type": "checkbox", "id": "enable_page_header", - "label": "Enable editorial page header", + "label": "Use editorial page layout", "default": false }, { From 7fddacfd42a54d65aaf58a7c3aa18ee7cdb507db Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 07:46:54 +0000 Subject: [PATCH 1274/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- blocks/_product-details.liquid | 3 + blocks/dynamic-page-copy.liquid | 395 ++++++++++++++++++++++++++++++++ 2 files changed, 398 insertions(+) create mode 100644 blocks/dynamic-page-copy.liquid diff --git a/blocks/_product-details.liquid b/blocks/_product-details.liquid index 9c5f68f3f..274c0080b 100644 --- a/blocks/_product-details.liquid +++ b/blocks/_product-details.liquid @@ -79,6 +79,9 @@ { "type": "text" }, + { + "type": "dynamic-page-copy" + }, { "type": "icon" }, diff --git a/blocks/dynamic-page-copy.liquid b/blocks/dynamic-page-copy.liquid new file mode 100644 index 000000000..e39bd92dc --- /dev/null +++ b/blocks/dynamic-page-copy.liquid @@ -0,0 +1,395 @@ +{% liquid + assign content_key = block.settings.content_key + assign fallback_text = blank + + case content_key + when 'product_title' + if closest.product != blank + capture fallback_text + echo '

' + echo closest.product.title | escape + echo '

' + endcapture + endif + when 'product_description' + if closest.product != blank + assign fallback_text = closest.product.description + endif + when 'product_flavour_summary' + if closest.product != blank + capture fallback_text + case closest.product.handle + when 'golden-lemon-manuka' + echo "

Lemon Mānuka Soda is built around real lemon juice and New Zealand mānuka honey for a bright, rounded finish that lands closer to fresh lemonade than conventional sugary soda.

" + when 'blackcurrant-manuka-soda' + echo "

Blackcurrant Mānuka Soda pairs deep New Zealand blackcurrant character with mānuka honey, giving the fruit more depth and a cleaner finish than refined sugar alone.

" + when 'kanuka-kola' + echo "

Kānuka Kola is Golden's New Zealand take on cola, blending kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch note without refined sugar.

" + else + echo "

Golden builds sparkling drinks around New Zealand honey, real fruit, and a lighter, cleaner finish than standard soft drink formulas.

" + endcase + endcapture + endif + when 'product_trust_points' + if closest.product != blank + capture fallback_text + echo '
    ' + case closest.product.handle + when 'kanuka-kola' + echo '
  • Sweetened with New Zealand kānuka honey
  • ' + when 'golden-lemon-manuka' + echo '
  • Sweetened with New Zealand mānuka honey and built around real lemon juice
  • ' + when 'blackcurrant-manuka-soda' + echo '
  • Sweetened with New Zealand mānuka honey and built around bold blackcurrant character
  • ' + else + echo '
  • Sweetened with New Zealand honey
  • ' + endcase + echo '
  • Made in New Zealand
  • ' + echo '
  • No refined sugar
  • ' + echo "
  • Read more about our ingredients, honey sourcing, and production process.
  • " + echo '
' + endcapture + endif + when 'product_flavour_accordion' + if closest.product != blank + capture fallback_text + case closest.product.handle + when 'golden-lemon-manuka' + echo '

This flavour combines real lemon juice with New Zealand mānuka honey for a bright, clean finish and a more rounded sweetness than a refined-sugar lemonade.

' + when 'blackcurrant-manuka-soda' + echo '

This flavour balances rich blackcurrant intensity with New Zealand mānuka honey, giving it depth and a cleaner finish than a standard blackcurrant soft drink.

' + when 'kanuka-kola' + echo "

This flavour uses kānuka honey, kola nut extract, lemon juice, and a butterscotch note to create Golden's New Zealand take on cola.

" + else + echo '

This flavour is built around New Zealand honey and real fruit or spice ingredients for a lighter, more balanced sparkling drink.

' + endcase + echo "

For the full brand-wide ingredient approach, visit our Ingredients page.

" + endcapture + endif + when 'collection_title' + if closest.collection != blank + assign collection_title = closest.collection.title + + case closest.collection.handle + when 'honey-soda' + assign collection_title = 'New Zealand Honey Sodas' + when 'low-cal-manuka-soda' + assign collection_title = 'Low-Cal Mānuka Sodas' + when 'lemon' + assign collection_title = 'Lemon Mānuka Soda' + when 'blackcurrant' + assign collection_title = 'Blackcurrant Mānuka Soda' + when 'kanuka-kola' + assign collection_title = 'Kānuka Kola' + endcase + + capture fallback_text + echo '

' + echo collection_title | escape + echo '

' + endcapture + endif + when 'collection_description' + if closest.collection != blank + if closest.collection.description != blank + assign fallback_text = closest.collection.description + else + capture fallback_text + case closest.collection.handle + when 'honey-soda' + echo "

Golden builds sparkling sodas around New Zealand honey and real fruit. This is the place to shop the full range, from bright mānuka lemon to bold blackcurrant and our honey-led take on kola.

" + when 'low-cal-manuka-soda' + echo "

Explore Golden's low-cal mānuka soda range: lighter-bodied sparkling drinks made in New Zealand with real fruit, no refined sugar, and a clean finish.

" + when 'lemon' + echo '

Lemon Mānuka Soda pairs fresh lemon juice with New Zealand mānuka honey for a rounded, crisp take on classic lemonade.

' + when 'blackcurrant' + echo '

Blackcurrant Mānuka Soda balances deep Otago blackcurrant intensity with the softer sweetness and character of New Zealand mānuka honey.

' + when 'kanuka-kola' + echo "

Kānuka Kola is Golden's New Zealand honey-led twist on cola, built with kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch finish.

" + endcase + endcapture + endif + endif + when 'collection_authority_heading' + if closest.collection != blank + assign heading = 'Why Golden tastes different' + + case closest.collection.handle + when 'honey-soda' + assign heading = 'Why Golden builds soda around New Zealand honey' + when 'low-cal-manuka-soda' + assign heading = 'Why Golden keeps these sodas low-cal' + endcase + + capture fallback_text + echo '

' + echo heading | escape + echo '

' + endcapture + endif + when 'collection_authority_intro' + if closest.collection != blank + capture fallback_text + case closest.collection.handle + when 'low-cal-manuka-soda' + echo "

Golden keeps these sparkling drinks low-cal by building flavour around New Zealand honey, fruit, acidity, and balance instead of chasing a heavy syrupy finish. The result is a lighter-bodied soda with real ingredient character.

" + else + echo "

Golden's commercial pages now need to do more than sell cans. They also need to show Google and shoppers why these drinks are distinct: New Zealand honey, real fruit, no refined sugar, and a traceable made-in-Aotearoa process.

" + endcase + endcapture + endif + when 'blog_title' + if closest.blog != blank + capture fallback_text + echo '

' + echo closest.blog.title | escape + echo '

' + endcapture + endif + when 'blog_intro' + if closest.blog != blank + capture fallback_text + case closest.blog.handle + when 'ingredients' + echo "

The Ingredients Journal is where Golden explains New Zealand honey, mānuka vs kānuka, fruit provenance, and how our low-cal sparkling drinks are made.

" + when 'golden-hour' + echo '

Golden Hour is where we share product news, collaborations, launches, and the people and places shaping the brand.

' + endcase + endcapture + endif + endcase +%} + +{% render 'text', fallback_text: fallback_text, block: block %} + +{% schema %} +{ + "name": "Dynamic page copy", + "tag": null, + "settings": [ + { + "type": "select", + "id": "content_key", + "label": "Content source", + "options": [ + { "value": "product_title", "label": "Product title" }, + { "value": "product_description", "label": "Product description" }, + { "value": "product_flavour_summary", "label": "Product flavour summary" }, + { "value": "product_trust_points", "label": "Product trust points" }, + { "value": "product_flavour_accordion", "label": "Product flavour accordion copy" }, + { "value": "collection_title", "label": "Collection title" }, + { "value": "collection_description", "label": "Collection description" }, + { "value": "collection_authority_heading", "label": "Collection authority heading" }, + { "value": "collection_authority_intro", "label": "Collection authority intro" }, + { "value": "blog_title", "label": "Blog title" }, + { "value": "blog_intro", "label": "Blog intro" } + ], + "default": "product_title" + }, + { + "type": "header", + "content": "Layout" + }, + { + "type": "select", + "id": "width", + "label": "Width", + "options": [ + { "value": "fit-content", "label": "Fit" }, + { "value": "100%", "label": "Fill" } + ], + "default": "fit-content" + }, + { + "type": "select", + "id": "max_width", + "label": "Max width", + "options": [ + { "value": "narrow", "label": "Narrow" }, + { "value": "normal", "label": "Normal" }, + { "value": "none", "label": "None" } + ], + "default": "normal" + }, + { + "type": "text_alignment", + "id": "alignment", + "label": "Text alignment", + "default": "left", + "visible_if": "{{ block.settings.width == '100%' }}" + }, + { + "type": "header", + "content": "Typography" + }, + { + "type": "select", + "id": "type_preset", + "label": "Text style", + "options": [ + { "value": "rte", "label": "Default" }, + { "value": "paragraph", "label": "Paragraph" }, + { "value": "h1", "label": "H1" }, + { "value": "h2", "label": "H2" }, + { "value": "h3", "label": "H3" }, + { "value": "h4", "label": "H4" }, + { "value": "h5", "label": "H5" }, + { "value": "h6", "label": "H6" }, + { "value": "custom", "label": "Custom" } + ], + "default": "rte" + }, + { + "type": "select", + "id": "font", + "label": "Font family", + "options": [ + { "value": "var(--font-body--family)", "label": "Body" }, + { "value": "var(--font-subheading--family)", "label": "Subheading" }, + { "value": "var(--font-heading--family)", "label": "Heading" }, + { "value": "var(--font-accent--family)", "label": "Accent" } + ], + "default": "var(--font-body--family)", + "visible_if": "{{ block.settings.type_preset == 'custom' }}" + }, + { + "type": "select", + "id": "font_size", + "label": "Text size", + "options": [ + { "value": "", "label": "Default" }, + { "value": "0.875rem", "label": "14px" }, + { "value": "1rem", "label": "16px" }, + { "value": "1.125rem", "label": "18px" }, + { "value": "1.25rem", "label": "20px" }, + { "value": "1.5rem", "label": "24px" }, + { "value": "2rem", "label": "32px" }, + { "value": "2.5rem", "label": "40px" }, + { "value": "3rem", "label": "48px" } + ], + "default": "", + "visible_if": "{{ block.settings.type_preset == 'custom' }}" + }, + { + "type": "select", + "id": "line_height", + "label": "Line height", + "options": [ + { "value": "tight", "label": "Tight" }, + { "value": "normal", "label": "Normal" }, + { "value": "loose", "label": "Loose" } + ], + "default": "normal", + "visible_if": "{{ block.settings.type_preset == 'custom' }}" + }, + { + "type": "select", + "id": "letter_spacing", + "label": "Letter spacing", + "options": [ + { "value": "tight", "label": "Tight" }, + { "value": "normal", "label": "Normal" }, + { "value": "loose", "label": "Loose" } + ], + "default": "normal", + "visible_if": "{{ block.settings.type_preset == 'custom' }}" + }, + { + "type": "select", + "id": "case", + "label": "Text case", + "options": [ + { "value": "none", "label": "None" }, + { "value": "uppercase", "label": "Uppercase" }, + { "value": "lowercase", "label": "Lowercase" } + ], + "default": "none" + }, + { + "type": "select", + "id": "wrap", + "label": "Text wrap", + "options": [ + { "value": "pretty", "label": "Pretty" }, + { "value": "balance", "label": "Balance" }, + { "value": "nowrap", "label": "No wrap" } + ], + "default": "pretty" + }, + { + "type": "color", + "id": "color", + "label": "Text colour" + }, + { + "type": "checkbox", + "id": "background", + "label": "Enable background", + "default": false + }, + { + "type": "color", + "id": "background_color", + "label": "Background colour", + "default": "#00000026", + "visible_if": "{{ block.settings.background }}" + }, + { + "type": "range", + "id": "corner_radius", + "label": "Corner radius", + "min": 0, + "max": 32, + "step": 1, + "unit": "px", + "default": 0, + "visible_if": "{{ block.settings.background }}" + }, + { + "type": "header", + "content": "Padding" + }, + { + "type": "range", + "id": "padding-block-start", + "label": "Top padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "padding-block-end", + "label": "Bottom padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "padding-inline-start", + "label": "Left padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + }, + { + "type": "range", + "id": "padding-inline-end", + "label": "Right padding", + "min": 0, + "max": 100, + "step": 1, + "unit": "px", + "default": 0 + } + ], + "presets": [] +} +{% endschema %} From df621cf6073b9805bdb2b32ec4707eac09c421e4 Mon Sep 17 00:00:00 2001 From: "shopify[bot]" <79544226+shopify[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 07:47:46 +0000 Subject: [PATCH 1275/1275] Update from Shopify for theme horizon/dev Committed from shop: Golden --- blocks/dynamic-page-copy.liquid | 11 +++++++++-- templates/blog.json | 8 ++++---- templates/collection.json | 16 ++++++++-------- templates/product.json | 20 ++++++++++---------- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/blocks/dynamic-page-copy.liquid b/blocks/dynamic-page-copy.liquid index e39bd92dc..0908366ab 100644 --- a/blocks/dynamic-page-copy.liquid +++ b/blocks/dynamic-page-copy.liquid @@ -317,9 +317,16 @@ "default": "pretty" }, { - "type": "color", + "type": "select", "id": "color", - "label": "Text colour" + "label": "Text colour", + "options": [ + { "value": "", "label": "Default" }, + { "value": "var(--color-foreground)", "label": "Text" }, + { "value": "var(--color-foreground-heading)", "label": "Heading" }, + { "value": "var(--color-primary)", "label": "Link" } + ], + "default": "" }, { "type": "checkbox", diff --git a/templates/blog.json b/templates/blog.json index 9187568fd..f7dfb00fc 100644 --- a/templates/blog.json +++ b/templates/blog.json @@ -13,10 +13,10 @@ "type": "main-blog", "blocks": { "title": { - "type": "text", + "type": "dynamic-page-copy", "name": "Title", "settings": { - "text": "

{{ closest.blog.title }}

", + "content_key": "blog_title", "width": "100%", "max_width": "none", "alignment": "left", @@ -39,10 +39,10 @@ "blocks": {} }, "intro": { - "type": "text", + "type": "dynamic-page-copy", "name": "Intro", "settings": { - "text": "{% case closest.blog.handle %}{% when 'ingredients' %}

The Ingredients Journal is where Golden explains New Zealand honey, mānuka vs kānuka, fruit provenance, and how our low-cal sparkling drinks are made.

{% when 'golden-hour' %}

Golden Hour is where we share product news, collaborations, launches, and the people and places shaping the brand.

{% endcase %}", + "content_key": "blog_intro", "width": "100%", "max_width": "normal", "alignment": "left", diff --git a/templates/collection.json b/templates/collection.json index 2ce9918c7..a61b332bf 100644 --- a/templates/collection.json +++ b/templates/collection.json @@ -13,10 +13,10 @@ "type": "section", "blocks": { "text_tqQTNE": { - "type": "text", + "type": "dynamic-page-copy", "name": "Title", "settings": { - "text": "

{% case closest.collection.handle %}{% when 'honey-soda' %}New Zealand Honey Sodas{% when 'low-cal-manuka-soda' %}Low-Cal Mānuka Sodas{% when 'lemon' %}Lemon Mānuka Soda{% when 'blackcurrant' %}Blackcurrant Mānuka Soda{% when 'kanuka-kola' %}Kānuka Kola{% else %}{{ closest.collection.title }}{% endcase %}

", + "content_key": "collection_title", "width": "100%", "max_width": "normal", "alignment": "left", @@ -39,10 +39,10 @@ "blocks": {} }, "text_twGGkJ": { - "type": "text", + "type": "dynamic-page-copy", "name": "Description", "settings": { - "text": "{% if closest.collection.description != blank %}{{ closest.collection.description }}{% else %}{% case closest.collection.handle %}{% when 'honey-soda' %}

Golden builds sparkling sodas around New Zealand honey and real fruit. This is the place to shop the full range, from bright mānuka lemon to bold blackcurrant and our honey-led take on kola.

{% when 'low-cal-manuka-soda' %}

Explore Golden's low-cal mānuka soda range: lighter-bodied sparkling drinks made in New Zealand with real fruit, no refined sugar, and a clean finish.

{% when 'lemon' %}

Lemon Mānuka Soda pairs fresh lemon juice with New Zealand mānuka honey for a rounded, crisp take on classic lemonade.

{% when 'blackcurrant' %}

Blackcurrant Mānuka Soda balances deep Otago blackcurrant intensity with the softer sweetness and character of New Zealand mānuka honey.

{% when 'kanuka-kola' %}

Kānuka Kola is Golden's New Zealand honey-led twist on cola, built with kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch finish.

{% endcase %}{% endif %}", + "content_key": "collection_description", "width": "fit-content", "max_width": "normal", "alignment": "left", @@ -251,10 +251,10 @@ "type": "section", "blocks": { "text_HGq4es": { - "type": "text", + "type": "dynamic-page-copy", "name": "Heading", "settings": { - "text": "

{% case closest.collection.handle %}{% when 'honey-soda' %}Why Golden builds soda around New Zealand honey{% when 'low-cal-manuka-soda' %}Why Golden keeps these sodas low-cal{% else %}Why Golden tastes different{% endcase %}

", + "content_key": "collection_authority_heading", "width": "100%", "max_width": "normal", "alignment": "left", @@ -277,10 +277,10 @@ "blocks": {} }, "text_Mr2qBv": { - "type": "text", + "type": "dynamic-page-copy", "name": "Intro", "settings": { - "text": "{% case closest.collection.handle %}{% when 'low-cal-manuka-soda' %}

Golden keeps these sparkling drinks low-cal by building flavour around New Zealand honey, fruit, acidity, and balance instead of chasing a heavy syrupy finish. The result is a lighter-bodied soda with real ingredient character.

{% else %}

Golden's commercial pages now need to do more than sell cans. They also need to show Google and shoppers why these drinks are distinct: New Zealand honey, real fruit, no refined sugar, and a traceable made-in-Aotearoa process.

{% endcase %}", + "content_key": "collection_authority_intro", "width": "100%", "max_width": "normal", "alignment": "left", diff --git a/templates/product.json b/templates/product.json index 5c47eb7f8..cc3b0bfe0 100644 --- a/templates/product.json +++ b/templates/product.json @@ -110,10 +110,10 @@ }, "blocks": { "text_xpVMaM": { - "type": "text", + "type": "dynamic-page-copy", "name": "t:names.title", "settings": { - "text": "

{{ closest.product.title }}

", + "content_key": "product_title", "width": "100%", "max_width": "normal", "alignment": "left", @@ -176,10 +176,10 @@ ] }, "text_aEtTtq": { - "type": "text", + "type": "dynamic-page-copy", "name": "Product description", "settings": { - "text": "{{ closest.product.description }}", + "content_key": "product_description", "width": "100%", "max_width": "none", "alignment": "left", @@ -202,10 +202,10 @@ "blocks": {} }, "text_m31sRd": { - "type": "text", + "type": "dynamic-page-copy", "name": "Flavour summary", "settings": { - "text": "{% case closest.product.handle %}{% when 'golden-lemon-manuka' %}

Lemon Mānuka Soda is built around real lemon juice and New Zealand mānuka honey for a bright, rounded finish that lands closer to fresh lemonade than conventional sugary soda.

{% when 'blackcurrant-manuka-soda' %}

Blackcurrant Mānuka Soda pairs deep New Zealand blackcurrant character with mānuka honey, giving the fruit more depth and a cleaner finish than refined sugar alone.

{% when 'kanuka-kola' %}

Kānuka Kola is Golden's New Zealand take on cola, blending kānuka honey, kola nut extract, lemon juice, and a nostalgic butterscotch note without refined sugar.

{% else %}

Golden builds sparkling drinks around New Zealand honey, real fruit, and a lighter, cleaner finish than standard soft drink formulas.

{% endcase %}", + "content_key": "product_flavour_summary", "width": "100%", "max_width": "none", "alignment": "left", @@ -228,10 +228,10 @@ "blocks": {} }, "text_qD9uCf": { - "type": "text", + "type": "dynamic-page-copy", "name": "Trust points", "settings": { - "text": "
    {% case closest.product.handle %}{% when 'kanuka-kola' %}
  • Sweetened with New Zealand kānuka honey
  • {% when 'golden-lemon-manuka' %}
  • Sweetened with New Zealand mānuka honey and built around real lemon juice
  • {% when 'blackcurrant-manuka-soda' %}
  • Sweetened with New Zealand mānuka honey and built around bold blackcurrant character
  • {% else %}
  • Sweetened with New Zealand honey
  • {% endcase %}
  • Made in New Zealand
  • No refined sugar
  • Read more about our ingredients, honey sourcing, and production process.
", + "content_key": "product_trust_points", "width": "100%", "max_width": "none", "alignment": "left", @@ -352,9 +352,9 @@ }, "blocks": { "text_GbNfwY": { - "type": "text", + "type": "dynamic-page-copy", "settings": { - "text": "{% case closest.product.handle %}{% when 'golden-lemon-manuka' %}

This flavour combines real lemon juice with New Zealand mānuka honey for a bright, clean finish and a more rounded sweetness than a refined-sugar lemonade.

{% when 'blackcurrant-manuka-soda' %}

This flavour balances rich blackcurrant intensity with New Zealand mānuka honey, giving it depth and a cleaner finish than a standard blackcurrant soft drink.

{% when 'kanuka-kola' %}

This flavour uses kānuka honey, kola nut extract, lemon juice, and a butterscotch note to create Golden's New Zealand take on cola.

{% else %}

This flavour is built around New Zealand honey and real fruit or spice ingredients for a lighter, more balanced sparkling drink.

{% endcase %}

For the full brand-wide ingredient approach, visit our Ingredients page.

", + "content_key": "product_flavour_accordion", "width": "100%", "max_width": "normal", "alignment": "left",