From 50e8b45479f633304b9d725a007c7e7f628f9ae1 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 12:09:18 -0500 Subject: [PATCH 1/8] Perf: Make scroll event listeners passive --- assets/header.js | 2 +- assets/localization.js | 4 ++-- assets/scrolling.js | 32 ++++++++++++++++---------------- assets/zoom-dialog.js | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/assets/header.js b/assets/header.js index a67565c26..90cab5a2b 100644 --- a/assets/header.js +++ b/assets/header.js @@ -192,7 +192,7 @@ class HeaderComponent extends Component { this.#observeStickyPosition(stickyMode === 'always'); if (stickyMode === 'scroll-up' || stickyMode === 'always') { - document.addEventListener('scroll', this.#handleWindowScroll); + document.addEventListener('scroll', this.#handleWindowScroll, { passive: true }); } } } diff --git a/assets/localization.js b/assets/localization.js index 6d47cbb96..e21cd5495 100644 --- a/assets/localization.js +++ b/assets/localization.js @@ -24,7 +24,7 @@ class LocalizationFormComponent extends Component { this.refs.search && this.refs.search.addEventListener('keydown', this.#onSearchKeyDown); this.refs.countryList && this.refs.countryList.addEventListener('keydown', this.#onContainerKeyDown); - this.refs.countryList && this.refs.countryList.addEventListener('scroll', this.#onCountryListScroll); + this.refs.countryList && this.refs.countryList.addEventListener('scroll', this.#onCountryListScroll, { passive: true }); // Resizing the language input can be expensive for browsers that don't support field-sizing: content. // Spliting it into separate tasks at least helps when there are multiple localization forms on the page. @@ -515,7 +515,7 @@ class DrawerLocalizationComponent extends Component { const countryList = localizationForm.querySelector('.country-selector-form__wrapper'); if (target.open) { - if (countryList) countryList.addEventListener('scroll', this.#onCountryListScroll); + if (countryList) countryList.addEventListener('scroll', this.#onCountryListScroll, { passive: true }); onAnimationEnd(target, localizationForm.focusSearchInput); } else { countryList?.removeEventListener('scroll', this.#onCountryListScroll); diff --git a/assets/scrolling.js b/assets/scrolling.js index 57739db13..db39e6e1a 100644 --- a/assets/scrolling.js +++ b/assets/scrolling.js @@ -89,7 +89,7 @@ export class Scroller { this.#onScrollEnd = options.onScrollEnd; this.element = element; - this.element.addEventListener('scroll', this.#handleScroll); + this.element.addEventListener('scroll', this.#handleScroll, { passive: true }); } /** @@ -342,25 +342,25 @@ export function scrollIntoView(element, { ancestor, behavior = 'smooth', block = const scrollTop = ancestor.scrollHeight > ancestor.clientHeight ? calculateScrollOffset( - block, - ancestorRect.top, - ancestor.clientHeight, - elemRect.top, - elemRect.height, - ancestor.scrollTop - ) + block, + ancestorRect.top, + ancestor.clientHeight, + elemRect.top, + elemRect.height, + ancestor.scrollTop + ) : ancestor.scrollTop; const scrollLeft = ancestor.scrollWidth > ancestor.clientWidth ? calculateScrollOffset( - inline, - ancestorRect.left, - ancestor.clientWidth, - elemRect.left, - elemRect.width, - ancestor.scrollLeft - ) + inline, + ancestorRect.left, + ancestor.clientWidth, + elemRect.left, + elemRect.width, + ancestor.scrollLeft + ) : ancestor.scrollLeft; ancestor.scrollTo({ top: scrollTop, left: scrollLeft, behavior }); @@ -372,7 +372,7 @@ class ScrollHint extends HTMLElement { #rafId = null; connectedCallback() { - this.addEventListener('scroll', this.#handleScroll); + this.addEventListener('scroll', this.#handleScroll, { passive: true }); this.#resizeObserver.observe(this); } diff --git a/assets/zoom-dialog.js b/assets/zoom-dialog.js index acdff63ed..8fa54e27f 100644 --- a/assets/zoom-dialog.js +++ b/assets/zoom-dialog.js @@ -28,7 +28,7 @@ export class ZoomDialog extends Component { connectedCallback() { super.connectedCallback(); - this.refs.dialog.addEventListener('scroll', this.handleScroll); + this.refs.dialog.addEventListener('scroll', this.handleScroll, { passive: true }); } disconnectedCallback() { @@ -275,7 +275,7 @@ function getMostVisibleElement(elements) { current.intersectionRatio > prev.intersectionRatio ? current : prev ); observer.disconnect(); - resolve(/** @type {HTMLElement} */ (mostVisible.target)); + resolve(/** @type {HTMLElement} */(mostVisible.target)); }, { threshold: Array.from({ length: 100 }, (_, i) => i / 100), From e5771396be1278860c703e552162b0b7283b81c0 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 12:10:46 -0500 Subject: [PATCH 2/8] Perf: Disable slide-reveal on mobile --- assets/base.css | 346 ++++++++++++++++++++++-------------------------- 1 file changed, 159 insertions(+), 187 deletions(-) diff --git a/assets/base.css b/assets/base.css index 91012cce3..6d2295a13 100644 --- a/assets/base.css +++ b/assets/base.css @@ -78,6 +78,7 @@ select { /* Editorial layout */ .resource-list:not(.hidden--desktop) .collection-card--flexible-aspect-ratio, .resource-list:not(.hidden--desktop) .blog-post-card--flexible-aspect-ratio { + .collection-card__image, .featured-blog-posts-card__image, .blog-placeholder-svg { @@ -168,6 +169,7 @@ select { } @media (any-pointer: fine) and (prefers-reduced-motion: no-preference) { + .card-hover-effect-lift .product-card:hover, .card-hover-effect-lift .collection-card:hover, .card-hover-effect-lift .resource-card:hover, @@ -277,7 +279,7 @@ p:empty { } :first-child:is(p, h1, h2, h3, h4, h5, h6), -:first-child:empty + :where(p, h1, h2, h3, h4, h5, h6) { +:first-child:empty+ :where(p, h1, h2, h3, h4, h5, h6) { margin-block-start: 0; } @@ -389,6 +391,7 @@ p:empty { } @media screen and (min-width: 750px) { + .page-width-wide, .page-width-normal, .page-width-narrow, @@ -425,19 +428,14 @@ p:empty { full-width background image even if the section content is constrained by the page width. Do not try to rewrite this to max-width: --page-width; margin: 0 auto;, it doesn't work. */ .section { - --full-page-grid-central-column-width: min( - var(--page-width) - var(--page-margin) * 2, - calc(100% - var(--page-margin) * 2) - ); + --full-page-grid-central-column-width: min(var(--page-width) - var(--page-margin) * 2, + calc(100% - var(--page-margin) * 2)); --full-page-grid-margin: minmax(var(--page-margin), 1fr); - --full-page-grid-with-margins: var(--full-page-grid-margin) var(--full-page-grid-central-column-width) - var(--full-page-grid-margin); + --full-page-grid-with-margins: var(--full-page-grid-margin) var(--full-page-grid-central-column-width) var(--full-page-grid-margin); /* Utility variable gives the grid's first column width. Provides an offset width for components like carousels */ - --util-page-margin-offset: max( - var(--page-margin), - calc((100% - min(var(--page-content-width), 100% - var(--page-margin) * 2)) / 2) - ); + --util-page-margin-offset: max(var(--page-margin), + calc((100% - min(var(--page-content-width), 100% - var(--page-margin) * 2)) / 2)); /* Offset for full-width sections to account for the page margin, used for Marquee — note that --util-page-margin-offset doesn't work here */ @@ -455,7 +453,7 @@ p:empty { } /* Place all direct children in the center column by default */ -.section > * { +.section>* { grid-column: 2; } @@ -476,28 +474,28 @@ p:empty { } /* For page-width sections, all content goes in the center column */ -.section--page-width > * { +.section--page-width>* { grid-column: 2; } /* For full-width sections, content spans all columns */ -.section--full-width > * { +.section--full-width>* { grid-column: 1 / -1; } @media screen and (max-width: 749px) { - .section--mobile-full-width > * { + .section--mobile-full-width>* { grid-column: 1 / -1; } } /* Some page-width sections should still extend all the way to the right edge of the page, e.g. collection carousel */ -.section--page-width.section--full-width-right > * { +.section--page-width.section--full-width-right>* { grid-column: 2 / 4; } /* For full-width sections with margin, content still spans full width but with space on the sides */ -.section--full-width.section--full-width-margin > * { +.section--full-width.section--full-width-margin>* { grid-column: 1 / -1; @media screen and (min-width: 750px) { @@ -507,7 +505,7 @@ p:empty { } /* Some section content break out to full width of the page */ -.section > .force-full-width { +.section>.force-full-width { grid-column: 1 / -1; } @@ -542,6 +540,7 @@ p:empty { } @media screen and (max-width: 749px) { + .hidden--mobile, .mobile\:hidden { /* stylelint-disable-next-line declaration-no-important */ @@ -550,6 +549,7 @@ p:empty { } @media screen and (min-width: 750px) { + .hidden--desktop, .desktop\:hidden { /* stylelint-disable-next-line declaration-no-important */ @@ -623,11 +623,8 @@ p:empty { @media screen and (min-width: 1400px) { .grid { grid-template-columns: - 1fr repeat( - var(--centered-column-number), - minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number))) - ) - 1fr; + 1fr repeat(var(--centered-column-number), + minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))) 1fr; } } @@ -733,7 +730,7 @@ p:empty { height: var(--icon-size-xs); } -.svg-wrapper > svg { +.svg-wrapper>svg { width: var(--icon-size-sm); height: var(--icon-size-sm); } @@ -773,7 +770,7 @@ slideshow-component [data-placeholder='true'] * { /* Base text and heading styles */ body, .paragraph:not(.button), -.paragraph > *, +.paragraph>*, .text-block.paragraph :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-paragraph--family); font-style: var(--font-paragraph--style); @@ -787,6 +784,7 @@ body, /* Ensure inputs with type presets maintain minimum 16px on mobile to prevent iOS zoom */ @media screen and (max-width: 1200px) { + input.paragraph.paragraph, input.paragraph.paragraph:not([type]), textarea.paragraph.paragraph, @@ -795,7 +793,7 @@ body, } } -.paragraph > small { +.paragraph>small { font-size: smaller; } @@ -803,7 +801,7 @@ body, h1, .h1.h1, -.text-block.h1 > *, +.text-block.h1>*, .text-block.h1 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h1--family); font-style: var(--font-h1--style); @@ -816,6 +814,7 @@ h1, } @media screen and (max-width: 1200px) { + input.h1.h1, textarea.h1.h1, select.h1.h1 { @@ -825,7 +824,7 @@ h1, h2, .h2.h2, -.text-block.h2 > *, +.text-block.h2>*, .text-block.h2 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h2--family); font-style: var(--font-h2--style); @@ -838,6 +837,7 @@ h2, } @media screen and (max-width: 1200px) { + input.h2.h2, textarea.h2.h2, select.h2.h2 { @@ -848,7 +848,7 @@ h2, h3, .h3, .h3.h3, -.text-block.h3 > *, +.text-block.h3>*, .text-block.h3 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h3--family); font-style: var(--font-h3--style); @@ -861,6 +861,7 @@ h3, } @media screen and (max-width: 1200px) { + input.h3, textarea.h3, select.h3 { @@ -870,7 +871,7 @@ h3, h4, .h4.h4, -.text-block.h4 > *, +.text-block.h4>*, .text-block.h4 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h4--family); font-style: var(--font-h4--style); @@ -883,6 +884,7 @@ h4, } @media screen and (max-width: 1200px) { + input.h4.h4, textarea.h4.h4, select.h4.h4 { @@ -892,7 +894,7 @@ h4, h5, .h5.h5, -.text-block.h5 > *, +.text-block.h5>*, .text-block.h5 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h5--family); font-style: var(--font-h5--style); @@ -905,6 +907,7 @@ h5, } @media screen and (max-width: 1200px) { + input.h5.h5, textarea.h5.h5, select.h5.h5 { @@ -914,7 +917,7 @@ h5, h6, .h6.h6, -.text-block.h6 > *, +.text-block.h6>*, .text-block.h6 :is(h1, h2, h3, h4, h5, h6) { font-family: var(--font-h6--family); font-style: var(--font-h6--style); @@ -927,6 +930,7 @@ h6, } @media screen and (max-width: 1200px) { + input.h6.h6, textarea.h6.h6, select.h6.h6 { @@ -954,7 +958,7 @@ a { color var(--animation-speed) var(--animation-easing); } -:is(h1, h2, h3, h4, h5, h6, p) > a:hover { +:is(h1, h2, h3, h4, h5, h6, p)>a:hover { --button-color: var(--color, var(--color-primary-hover)); } @@ -983,7 +987,7 @@ details:not([open]) .summary-open { display: none; } -details[open] > summary .icon-animated > svg { +details[open]>summary .icon-animated>svg { transform: rotate(180deg); } @@ -993,17 +997,17 @@ summary::-webkit-details-marker { } /* When header is transparent, pull the first main content section up to sit under the floating header */ -body:has(.header[transparent]) .content-for-layout > .shopify-section:first-child { +body:has(.header[transparent]) .content-for-layout>.shopify-section:first-child { margin-top: calc(var(--header-group-height) * -1); } -body:has(.header[transparent]) #header-group > .header-section { +body:has(.header[transparent]) #header-group>.header-section { z-index: var(--layer-sticky); } /* All other header group content should be beneath the floating header, but above the rest of the page content */ -body:has(.header[transparent]) #header-group > *:not(.header-section) { +body:has(.header[transparent]) #header-group>*:not(.header-section) { z-index: calc(var(--layer-sticky) - 1); } @@ -1085,13 +1089,13 @@ body:has(.header[transparent]) #header-group > *:not(.header-section) { } } -.product-grid__card .group-block > * { +.product-grid__card .group-block>* { @media screen and (max-width: 749px) { flex-direction: column; } } -ul[product-grid-view='zoom-out'] .product-grid__card > * { +ul[product-grid-view='zoom-out'] .product-grid__card>* { display: none; } @@ -1099,21 +1103,17 @@ ul[product-grid-view='zoom-out'] .product-grid__card .card-gallery { display: block; } -[product-grid-view='zoom-out'] - .card-gallery - > :is(quick-add-component, .product-badges, slideshow-component > slideshow-controls) { +[product-grid-view='zoom-out'] .card-gallery> :is(quick-add-component, .product-badges, slideshow-component > slideshow-controls) { display: none; } -ul[product-grid-view='zoom-out'] .card-gallery > img { +ul[product-grid-view='zoom-out'] .card-gallery>img { display: block; } [product-grid-view='zoom-out'] { - --product-grid-columns-desktop: repeat( - 10, - minmax(clamp(50px, calc(100% - 9 * var(--product-grid-gap)) / 10, 80px), 1fr) - ); + --product-grid-columns-desktop: repeat(10, + minmax(clamp(50px, calc(100% - 9 * var(--product-grid-gap)) / 10, 80px), 1fr)); } .product-grid-view-zoom-out--details { @@ -1136,15 +1136,15 @@ ul[product-grid-view='zoom-out'] .card-gallery > img { font-weight: 400; } -.product-grid-view-zoom-out--details > span.h6, -.product-grid-view-zoom-out--details > div.h6 > product-price { +.product-grid-view-zoom-out--details>span.h6, +.product-grid-view-zoom-out--details>div.h6>product-price { display: inline-block; line-height: 0; margin-top: var(--margin-2xs); } -.product-grid-view-zoom-out--details > span.h6 > *, -.product-grid-view-zoom-out--details > div.h6 > * > * { +.product-grid-view-zoom-out--details>span.h6>*, +.product-grid-view-zoom-out--details>div.h6>*>* { line-height: 1.2; } @@ -1242,18 +1242,18 @@ results-list[initialized] { width: 100%; } -.text-block > *:first-child, -.text-block > *:first-child:empty + * { +.text-block>*:first-child, +.text-block>*:first-child:empty+* { margin-block-start: 0; } -.text-block > *:last-child, -.text-block > *:has(+ *:last-child:empty) { +.text-block>*:last-child, +.text-block>*:has(+ *:last-child:empty) { margin-block-end: 0; } /* This is to deal with the margin applied to the p when custom styles are enabled. The p isn't the first child anymore due to the style tag */ -.text-block > style + * { +.text-block>style+* { margin-block-start: 0; } @@ -1309,6 +1309,7 @@ results-list[initialized] { --dialog-drawer-opening-animation: move-and-fade; --dialog-drawer-closing-animation: move-and-fade; } + /* stylelint-enable value-keyword-case */ .dialog-drawer[open] { @@ -1524,8 +1525,7 @@ shopify-accelerated-checkout-cart { --shopify-accelerated-checkout-button-block-size: var(--height-buy-buttons); } -.product-form-buttons:has(.add-to-cart-button.button-secondary) - :is(shopify-accelerated-checkout, shopify-accelerated-checkout-cart) { +.product-form-buttons:has(.add-to-cart-button.button-secondary) :is(shopify-accelerated-checkout, shopify-accelerated-checkout-cart) { --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-secondary); --shopify-accelerated-checkout-button-block-size: var(--height-buy-buttons); } @@ -1572,14 +1572,14 @@ summary .icon-plus :is(.horizontal, .vertical), opacity: 1; } -details[open] > summary .icon-plus .horizontal, -.details-open > summary .icon-plus .horizontal, +details[open]>summary .icon-plus .horizontal, +.details-open>summary .icon-plus .horizontal, .show-more:where([data-expanded='true']) .show-more__button .icon-plus .horizontal { transform: rotate(90deg); } -details[open] > summary .icon-plus .vertical, -.details-open > summary .icon-plus .vertical, +details[open]>summary .icon-plus .vertical, +.details-open>summary .icon-plus .vertical, .show-more:where([data-expanded='true']) .show-more__button .icon-plus .vertical { transform: rotate(90deg); opacity: 0; @@ -1604,7 +1604,7 @@ media-gallery { } } -:not(.dialog-zoomed-gallery) > .product-media-container { +:not(.dialog-zoomed-gallery)>.product-media-container { --slide-width: 100%; display: flex; @@ -1905,7 +1905,7 @@ zoom-dialog dialog { } /* If the product media is already providing an image cover, hide images provided by sibling deferred-media */ -.product-media__image ~ * .deferred-media__poster-image { +.product-media__image~* .deferred-media__poster-image { display: none; } @@ -1926,7 +1926,7 @@ zoom-dialog dialog { product-model model-viewer, /* Media that have a poster button sibling providing the size should be absolute-positioned. Otherwise, it should be a block to rely on its own size */ -:is(deferred-media, product-model) > .deferred-media__poster-button ~ *:not(template) { +:is(deferred-media, product-model)>.deferred-media__poster-button~*:not(template) { display: block; position: absolute; top: 0; @@ -1951,16 +1951,14 @@ slideshow-slide .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui_ } @media screen and (max-width: 749px) { - slideshow-component:has(:not(.mobile\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter)) - .shopify-model-viewer-ui__controls-area { + slideshow-component:has(:not(.mobile\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter)) .shopify-model-viewer-ui__controls-area { /* Position the controls just above the counter */ bottom: calc(var(--minimum-touch-target) + var(--padding-sm)); } } @media screen and (min-width: 750px) { - slideshow-component:has(:not(.desktop\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter)) - .shopify-model-viewer-ui__controls-area { + slideshow-component:has(:not(.desktop\:hidden) :is(.slideshow-controls__dots, .slideshow-controls__counter)) .shopify-model-viewer-ui__controls-area { /* Position the controls just above the counter */ bottom: calc(var(--minimum-touch-target) + var(--padding-sm)); } @@ -1980,6 +1978,7 @@ slideshow-slide .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui_ } deferred-media { + /* The overflow hidden in the deferred-media won't let the button show the focus ring */ &:has(:focus-visible) { outline: var(--focus-outline-width) solid currentcolor; @@ -2067,7 +2066,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p padding: var(--padding-md); } -.button-shopify-xr > svg { +.button-shopify-xr>svg { width: var(--icon-size-sm); height: var(--icon-size-sm); margin-inline-end: var(--margin-md); @@ -2080,8 +2079,10 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p /* Swatches */ .swatch { --color-border: rgb(var(--color-foreground-rgb) / var(--style-border-swatch-opacity)); - --min-width-unitless: 15.9999; /* want to avoid division by 0 */ - --min-height-unitless: 15.9999; /* want to avoid division by 0 */ + --min-width-unitless: 15.9999; + /* want to avoid division by 0 */ + --min-height-unitless: 15.9999; + /* want to avoid division by 0 */ --min-height: 16px; --min-width: 16px; @@ -2110,27 +2111,19 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p We also want the result to always be smaller than the input (pdp > everywhere else) by some scaling factor. */ - --offset-scaled-width: calc( - var(--scaling-factor) * var(--offset-swatch-width) / var(--offset-swatch-height) * var(--offset-max-swatch-size) - ); - --offset-scaled-height: calc( - var(--scaling-factor) * var(--offset-swatch-height) / var(--offset-swatch-width) * var(--offset-max-swatch-size) - ); + --offset-scaled-width: calc(var(--scaling-factor) * var(--offset-swatch-width) / var(--offset-swatch-height) * var(--offset-max-swatch-size)); + --offset-scaled-height: calc(var(--scaling-factor) * var(--offset-swatch-height) / var(--offset-swatch-width) * var(--offset-max-swatch-size)); --offset-max-swatch-size: calc(var(--max-swatch-size) - var(--min-width)); /* width = min(m + sU, (m + s * W'/H' * M'), M) */ - --swatch-width: min( - calc(var(--min-width) + var(--scaling-factor) * var(--offset-swatch-width) * 1px), - calc(var(--min-width) + var(--offset-scaled-width)), - var(--max-swatch-size) - ); + --swatch-width: min(calc(var(--min-width) + var(--scaling-factor) * var(--offset-swatch-width) * 1px), + calc(var(--min-width) + var(--offset-scaled-width)), + var(--max-swatch-size)); /* height = min(m + sV, (m + s * H'/W' * M'), M) */ - --swatch-height: min( - calc(var(--min-height) + var(--scaling-factor) * var(--offset-swatch-height) * 1px), - calc(var(--min-height) + var(--offset-scaled-height)), - var(--max-swatch-size) - ); + --swatch-height: min(calc(var(--min-height) + var(--scaling-factor) * var(--offset-swatch-height) * 1px), + calc(var(--min-height) + var(--offset-scaled-height)), + var(--max-swatch-size)); display: block; background: var(--swatch-background); @@ -2201,7 +2194,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p --variant-option-padding-inline: var(--padding-md); } -.variant-option + .variant-option { +.variant-option+.variant-option { margin-top: var(--padding-lg); } @@ -2216,7 +2209,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p } } -.variant-option--swatches > overflow-list { +.variant-option--swatches>overflow-list { justify-content: var(--product-swatches-alignment); @media screen and (max-width: 749px) { @@ -2244,12 +2237,12 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p } @media (prefers-reduced-motion: no-preference) { + .variant-option__button-label, .variant-option__select-wrapper, .variant-option__button-label::before, .variant-option__button-label::after, - .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true']) - .variant-option__button-label__pill, + .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true']) .variant-option__button-label__pill, .variant-option__button-label:not(.variant-option__button-label--has-swatch) svg line:last-of-type { transition-duration: var(--animation-speed); transition-timing-function: var(--animation-easing); @@ -2263,8 +2256,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p transition-property: clip-path; } - .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true']) - .variant-option__button-label__pill { + .variant-option__button-label:has([data-previous-checked='true'], [data-current-checked='true']) .variant-option__button-label__pill { transition-property: transform; } @@ -2357,8 +2349,8 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p } } - &:has([data-previous-checked='true']) ~ label:has([data-current-checked='true']), - &:has(:checked) ~ label { + &:has([data-previous-checked='true'])~label:has([data-current-checked='true']), + &:has(:checked)~label { .variant-option__button-label__pill { left: 0; right: unset; @@ -2369,20 +2361,17 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p --pill-offset: calc(100% + 1px); } - &:has(:checked) ~ label { + &:has(:checked)~label { --pill-offset: calc(-100% - 1px); } - &:has([data-current-checked='true']):first-of-type - ~ label:last-of-type:not(.variant-option__button-label--has-swatch), + &:has([data-current-checked='true']):first-of-type~label:last-of-type:not(.variant-option__button-label--has-swatch), &:not(:has(:checked)):has(~ label > :checked):not(.variant-option__button-label--has-swatch) { --clip: 0 0 0 100%; } - &:not(:has([data-current-checked='true'])):first-of-type:has(~ label:last-of-type > :checked):not( - .variant-option__button-label--has-swatch - ), - &:has(:checked) ~ label:not(.variant-option__button-label--has-swatch) { + &:not(:has([data-current-checked='true'])):first-of-type:has(~ label:last-of-type > :checked):not(.variant-option__button-label--has-swatch), + &:has(:checked)~label:not(.variant-option__button-label--has-swatch) { --clip: 0 100% 0 0; } @@ -2399,13 +2388,11 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p /* the more complex selector rules here produce the wrap around effect for first/last variants */ .variant-option--buttons:has(:nth-of-type(3)) { - .variant-option__button-label:has([data-current-checked='true']):first-of-type ~ label:last-of-type { + .variant-option__button-label:has([data-current-checked='true']):first-of-type~label:last-of-type { --pill-offset: calc(100% + 1px); } - .variant-option__button-label:not(:has([data-current-checked='true'])):first-of-type:has( - ~ label:last-of-type > :checked - ) { + .variant-option__button-label:not(:has([data-current-checked='true'])):first-of-type:has(~ label:last-of-type > :checked) { --pill-offset: calc(-100% - 1px); } } @@ -2498,6 +2485,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p /* 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 { @@ -2578,8 +2566,9 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p } @media screen and (min-width: 750px) { + .sticky-content--desktop, - .sticky-content--desktop.full-height--desktop > .group-block { + .sticky-content--desktop.full-height--desktop>.group-block { position: sticky; top: var(--sticky-header-offset, 0); z-index: var(--layer-flat); @@ -2604,7 +2593,7 @@ deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__p color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text)); } -product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { +product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6)>*:not(.tax-note) { margin-block: 0; } @@ -2741,7 +2730,7 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { /* Custom Typography style */ .custom-typography, -.custom-typography > * { +.custom-typography>* { font-family: var(--font-family); font-weight: var(--font-weight); text-transform: var(--text-transform); @@ -2767,12 +2756,12 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { } .custom-font-size, -.custom-font-size > * { +.custom-font-size>* { font-size: var(--font-size); } .custom-font-weight, -.custom-font-weight > * { +.custom-font-weight>* { font-weight: var(--font-weight); } @@ -2822,19 +2811,19 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { .layout-panel-flex--row:not(.mobile-column) { flex-wrap: var(--flex-wrap-mobile); - > .menu { + >.menu { flex: 1 1 min-content; } - > .text-block { + >.text-block { flex: 1 1 var(--max-width--display-tight); } - > .image-block { + >.image-block { flex: 1 1 var(--size-style-width-mobile-min); } - > .button { + >.button { flex: 0 0 fit-content; } } @@ -2906,7 +2895,7 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { } :first-child:is(p, h1, h2, h3, h4, h5, h6), - :first-child:empty + :is(p, h1, h2, h3, h4, h5, h6) { + :first-child:empty+ :is(p, h1, h2, h3, h4, h5, h6) { margin-block-start: 0; } @@ -3003,17 +2992,17 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { outline: none; } - &:focus-visible + .checkbox__label .icon-checkmark { + &:focus-visible+.checkbox__label .icon-checkmark { outline: var(--focus-outline-width) solid currentcolor; outline-offset: var(--focus-outline-offset); } - &:checked + .checkbox__label .icon-checkmark { + &:checked+.checkbox__label .icon-checkmark { background-color: var(--color-foreground); border-color: var(--color-foreground); } - &:disabled + .checkbox__label .icon-checkmark { + &:disabled+.checkbox__label .icon-checkmark { background-color: var(--input-disabled-background-color); border-color: var(--input-disabled-border-color); } @@ -3049,7 +3038,7 @@ product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) { transition: opacity var(--animation-speed) var(--animation-easing); } -.checkbox__input:disabled + .checkbox__label { +.checkbox__input:disabled+.checkbox__label { color: var(--input-disabled-text-color); } @@ -3167,15 +3156,15 @@ input[type='radio'] { } /* Shared styles for radio buttons and checkboxes */ -:where(input[type='radio']) + label, -:where(input[type='checkbox']) + label { +:where(input[type='radio'])+label, +:where(input[type='checkbox'])+label { display: inline; vertical-align: middle; cursor: pointer; } -:where(input[type='radio']):disabled + label, -:where(input[type='checkbox']):disabled + label { +:where(input[type='radio']):disabled+label, +:where(input[type='checkbox']):disabled+label { color: var(--input-disabled-text-color); cursor: not-allowed; } @@ -3394,7 +3383,7 @@ label:has(input[type='checkbox']:disabled) { } } -.pills__pill > .svg-wrapper { +.pills__pill>.svg-wrapper { --close-icon-opacity: 0.4; --icon-stroke-width: 1px; @@ -3510,11 +3499,8 @@ fly-to-cart.fly-to-cart--sticky { --facets-vertical-col-width: 6; grid-template-columns: - 1fr repeat( - var(--centered-column-number), - minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number))) - ) - 1fr; + 1fr repeat(var(--centered-column-number), + minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))) 1fr; } @media screen and (min-width: 990px) { @@ -3527,15 +3513,12 @@ fly-to-cart.fly-to-cart--sticky { @media screen and (min-width: 750px) { grid-column: 1 / -1; grid-template-columns: - minmax(var(--page-margin), 1fr) repeat( - var(--centered-column-number), - minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number))) - ) - minmax(var(--page-margin), 1fr); + minmax(var(--page-margin), 1fr) repeat(var(--centered-column-number), + minmax(0, calc((var(--page-width) - var(--page-margin) * 2) / var(--centered-column-number)))) minmax(var(--page-margin), 1fr); } } -.collection-wrapper:has(.facets--vertical) .facets-block-wrapper--vertical:not(.hidden) ~ .main-collection-grid { +.collection-wrapper:has(.facets--vertical) .facets-block-wrapper--vertical:not(.hidden)~.main-collection-grid { @media screen and (min-width: 750px) { grid-column: var(--facets-vertical-col-width) / var(--full-width-column-number); } @@ -3548,18 +3531,14 @@ fly-to-cart.fly-to-cart--sticky { } } -:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile) - [product-grid-view='default'] - .product-grid__card { +:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile) [product-grid-view='default'] .product-grid__card { @media screen and (max-width: 749px) { padding-inline-start: max(var(--padding-xs), var(--padding-inline-start)); padding-inline-end: max(var(--padding-xs), var(--padding-inline-end)); } } -:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile) - [product-grid-view='mobile-single'] - .product-grid__card { +:is(.collection-wrapper--full-width, .collection-wrapper--full-width-on-mobile) [product-grid-view='mobile-single'] .product-grid__card { @media screen and (max-width: 749px) { padding-inline-start: max(var(--padding-xs), var(--padding-inline-start)); padding-inline-end: max(var(--padding-xs), var(--padding-inline-end)); @@ -3773,6 +3752,7 @@ fly-to-cart.fly-to-cart--sticky { } @keyframes thumbnail-selected { + 0%, 100% { box-shadow: 0 0 0 2px transparent; @@ -3863,7 +3843,8 @@ fly-to-cart.fly-to-cart--sticky { position: absolute; z-index: var(--layer-lowest); inset: 0; - clip-path: inset(-50px 0 0 0); /* stylelint-disable-line */ + clip-path: inset(-50px 0 0 0); + /* stylelint-disable-line */ } @media screen and (min-width: 750px) { @@ -3878,7 +3859,8 @@ fly-to-cart.fly-to-cart--sticky { position: absolute; z-index: var(--layer-lowest); inset: 0; - clip-path: inset(0 0 -50px 0); /* stylelint-disable-line */ + clip-path: inset(0 0 -50px 0); + /* stylelint-disable-line */ } @media screen and (min-width: 750px) { @@ -3894,11 +3876,11 @@ fly-to-cart.fly-to-cart--sticky { aspect-ratio: var(--size-style-aspect-ratio, auto); } -:not(deferred-media) > .video-placeholder-wrapper { +:not(deferred-media)>.video-placeholder-wrapper { width: var(--video-placeholder-width); } -.video-placeholder-wrapper > * { +.video-placeholder-wrapper>* { width: 100%; height: 100%; object-fit: cover; @@ -3941,7 +3923,8 @@ slideshow-component.slideshow--content-below-media slideshow-slide { animation-timeline: var(--slideshow-timeline); } - @media (prefers-reduced-motion) { + @media screen and (max-width: 749px), + (prefers-reduced-motion) { opacity: 1; animation: none; } @@ -4059,12 +4042,10 @@ slideshow-slide.product-media-container--tallest { } @media screen and (max-width: 749px) { + /* Media gallery has a peeking slide on the right side always, and on the left side when the current slide is the last one */ - .media-gallery--hint - :is( - slideshow-slide:has(+ slideshow-slide[aria-hidden='false']:last-of-type), - slideshow-slide[aria-hidden='false'] + slideshow-slide - ) { + .media-gallery--hint :is(slideshow-slide:has(+ slideshow-slide[aria-hidden='false']:last-of-type), + slideshow-slide[aria-hidden='false'] + slideshow-slide) { content-visibility: auto; slideshow-component[actioned] & { @@ -4078,11 +4059,8 @@ slideshow-slide.product-media-container--tallest { * Card galleries preview the next or previous images on 'pointerenter', so we * try to kick load them beforehand (they are lazy loaded otherwise). */ -:is(.resource-list__carousel, .card-gallery) - :is( - slideshow-slide:has(+ slideshow-slide[aria-hidden='false']), - slideshow-slide[aria-hidden='false'] + slideshow-slide - ) { +:is(.resource-list__carousel, .card-gallery) :is(slideshow-slide:has(+ slideshow-slide[aria-hidden='false']), + slideshow-slide[aria-hidden='false'] + slideshow-slide) { content-visibility: auto; slideshow-component[actioned] & { @@ -4094,7 +4072,7 @@ slideshow-slide.product-media-container--tallest { * Be specific about HTML children structure to avoid targeting nested slideshows. * Ensure that the content is 'visible' while scrolling instead of 'auto' to avoid issues in Safari. */ -slideshow-component:is([dragging], [transitioning], :hover) > slideshow-container > slideshow-slides > slideshow-slide { +slideshow-component:is([dragging], [transitioning], :hover)>slideshow-container>slideshow-slides>slideshow-slide { content-visibility: visible; } @@ -4167,13 +4145,13 @@ slideshow-container { slideshow-component:is([autoplay]) { &:is([paused]) { - .icon-play > svg { + .icon-play>svg { display: block; } } &:not([paused]) { - .icon-pause > svg { + .icon-pause>svg { display: block; } } @@ -4244,11 +4222,7 @@ slideshow-arrows .slideshow-control.slideshow-control--style-none { } } -:not(.media-gallery--carousel) - > :is(slideshow-component:hover, slideshow-component:focus-within):not(:has(slideshow-controls:hover)) - > slideshow-container - > slideshow-arrows - .slideshow-control { +:not(.media-gallery--carousel)> :is(slideshow-component:hover, slideshow-component:focus-within):not(:has(slideshow-controls:hover))>slideshow-container>slideshow-arrows .slideshow-control { animation: arrowsSlideIn var(--animation-speed) var(--animation-easing) forwards; } @@ -4301,11 +4275,10 @@ slideshow-arrows .slideshow-control.slideshow-control--style-none { display: none; } -:where(.section-resource-list.section--full-width) product-card[data-product-transition] > .group-block, -:where(.section-carousel.section--full-width) product-card[data-product-transition] > .group-block { +:where(.section-resource-list.section--full-width) product-card[data-product-transition]>.group-block, +:where(.section-carousel.section--full-width) product-card[data-product-transition]>.group-block { @media screen and (max-width: 749px) { - padding-inline: max(var(--padding-xs), var(--padding-inline-start)) - max(var(--padding-xs), var(--padding-inline-end)); + padding-inline: max(var(--padding-xs), var(--padding-inline-start)) max(var(--padding-xs), var(--padding-inline-end)); } } @@ -4421,10 +4394,7 @@ slideshow-arrows .slideshow-control.slideshow-control--style-none { @container resource-list-carousel (min-width: 750px) { .resource-list__carousel .resource-list__slide { - --section-slide-width: calc( - (100% - (var(--resource-list-column-gap) * (var(--column-count) - 1)) - var(--peek-next-slide-size)) / - var(--column-count) - ); + --section-slide-width: calc((100% - (var(--resource-list-column-gap) * (var(--column-count) - 1)) - var(--peek-next-slide-size)) / var(--column-count)); --fallback-slide-width: clamp(150px, var(--mobile-card-size, 60cqw), var(--slide-width-max)); --slide-width: var(--section-slide-width, var(--fallback-slide-width)); } @@ -4477,15 +4447,15 @@ slideshow-arrows .slideshow-control.slideshow-control--style-none { } /* Flex behavior for width variants */ -.layout-panel-flex--row > .group-block--width-fit { +.layout-panel-flex--row>.group-block--width-fit { flex: 0; } -.layout-panel-flex--row > .group-block--width-fill { +.layout-panel-flex--row>.group-block--width-fill { flex: 1; } -.layout-panel-flex--row > .group-block--width-custom { +.layout-panel-flex--row>.group-block--width-custom { flex-basis: var(--size-style-width); } @@ -4500,20 +4470,21 @@ slideshow-arrows .slideshow-control.slideshow-control--style-none { } /* Flex behavior for height variants */ -.layout-panel-flex--column > .group-block--height-fit { +.layout-panel-flex--column>.group-block--height-fit { flex: 0 1 auto; } -.layout-panel-flex--column > .group-block--height-fill { +.layout-panel-flex--column>.group-block--height-fill { flex: 1; } -.layout-panel-flex--column > .group-block--height-custom { +.layout-panel-flex--column>.group-block--height-custom { flex-basis: var(--size-style-height); } accordion-custom { details { + &::details-content, .details-content { block-size: 0; @@ -4533,6 +4504,7 @@ accordion-custom { } &:not([open]) { + &::details-content, .details-content { padding-block: 0; @@ -4540,6 +4512,7 @@ accordion-custom { } &[open] { + &::details-content, .details-content { opacity: 1; @@ -4589,12 +4562,10 @@ text-component { opacity: 0; transition: opacity var(--animation-speed-slow) var(--animation-easing); pointer-events: none; - background-image: linear-gradient( - -85deg, - var(--shimmer-text-color) 10%, - var(--shimmer-color-light) 50%, - var(--shimmer-text-color) 90% - ); + background-image: linear-gradient(-85deg, + var(--shimmer-text-color) 10%, + var(--shimmer-color-light) 50%, + var(--shimmer-text-color) 90%); background-clip: text; background-size: 200% 100%; background-position: 100% 0; @@ -4715,6 +4686,7 @@ text-component { /* Prevent iOS zoom on input focus by ensuring minimum 16px font size on mobile */ @media screen and (max-width: 1200px) { + input, textarea, select, @@ -4943,4 +4915,4 @@ product-recommendations:has([data-has-recommendations='false']) { opacity: var(--atc-opacity, 1); translate: 0px var(--atc-destination, 0px); } -} +} \ No newline at end of file From 68c63c75f478895b188a24a44d34813bd76c6e2c Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 12:12:00 -0500 Subject: [PATCH 3/8] Perf: Defer predictive-search.js loading --- snippets/search-modal.liquid | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/snippets/search-modal.liquid b/snippets/search-modal.liquid index 26ade7e56..452f31c8e 100644 --- a/snippets/search-modal.liquid +++ b/snippets/search-modal.liquid @@ -3,11 +3,24 @@ type="module" > - + Date: Mon, 16 Mar 2026 12:15:08 -0500 Subject: [PATCH 4/8] Perf: Optimize mobile image sizes to 50vw --- snippets/card-gallery.liquid | 4 ++-- snippets/util-autofill-img-size-attr.liquid | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/snippets/card-gallery.liquid b/snippets/card-gallery.liquid index 31de0c1e5..c3865a3ca 100644 --- a/snippets/card-gallery.liquid +++ b/snippets/card-gallery.liquid @@ -11,7 +11,7 @@ {% liquid assign product = closest.product assign block_settings = block.settings - assign image_sizes = '(min-width: 750px) 50vw, 100vw' + assign image_sizes = '(min-width: 750px) 50vw, 50vw' # Check if product has badges and determine position assign has_badges = false @@ -39,7 +39,7 @@ 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 sizes_attribute = '(min-width: 750px) [viewport_width]vw, 50vw' | replace: '[viewport_width]', viewport_width assign image_sizes = sizes_attribute | strip endif diff --git a/snippets/util-autofill-img-size-attr.liquid b/snippets/util-autofill-img-size-attr.liquid index 08d0b8b0d..1a0e5af44 100644 --- a/snippets/util-autofill-img-size-attr.liquid +++ b/snippets/util-autofill-img-size-attr.liquid @@ -66,7 +66,7 @@ endif assign sizes_attr = sizes_attr | append: '(min-width: ' | append: min_breakpoint | append: 'px) 50vw' - assign sizes_attr = sizes_attr | append: ', 100vw' + assign sizes_attr = sizes_attr | append: ', 50vw' # Echo the sizes attribute echo sizes_attr From 41edaae5f47fd3062e1a4958445f8447aa90a4d2 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 12:37:11 -0500 Subject: [PATCH 5/8] Optimize responsive images sizes on mobile --- sections/hero.liquid | 2 +- snippets/product-media.liquid | 2 +- snippets/resource-card.liquid | 2 +- snippets/util-product-media-sizes-attr.liquid | 12 ++++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sections/hero.liquid b/sections/hero.liquid index 4abcf4726..d3dacba57 100644 --- a/sections/hero.liquid +++ b/sections/hero.liquid @@ -102,7 +102,7 @@ assign sizes = '(min-width: 750px) ' | append: media_width_desktop | append: ', ' | append: media_width_mobile assign widths = '832, 1200, 1600, 1920, 2560, 3840' assign sizes_mobile = media_width_mobile - assign mobile_widths = '416, 600, 800, 1200, 1600' + assign mobile_widths = '165, 360, 535, 750, 1070, 1500' assign mobile_widths_array = mobile_widths | split: ', ' assign fetch_priority = 'auto' diff --git a/snippets/product-media.liquid b/snippets/product-media.liquid index 37f46c10f..7f8f1811c 100644 --- a/snippets/product-media.liquid +++ b/snippets/product-media.liquid @@ -18,7 +18,7 @@ {%- enddoc -%} {% liquid - assign widths = widths | default: '240, 352, 832, 1200, 1600, 1920, 2560, 3840' + assign widths = widths | default: '165, 360, 535, 750, 1070, 1500, 1920, 2560, 3840' assign ref_image_to_transition = '' if settings.transition_to_main_product assign ref_image_to_transition = 'imagesToTransition[]' diff --git a/snippets/resource-card.liquid b/snippets/resource-card.liquid index 5ffb95953..4195087e2 100644 --- a/snippets/resource-card.liquid +++ b/snippets/resource-card.liquid @@ -18,7 +18,7 @@ assign ratio = image_aspect_ratio endif assign image_width = image_width | default: 1200 - assign widths = '240, 352, 832, 1200' + assign widths = '165, 360, 535, 750, 1070, 1500' assign image_sizes = image_sizes | default: 'auto' assign single_thumbnail_collection = false if resource_type == 'collection' and collection_thumbnails != 'multiple' diff --git a/snippets/util-product-media-sizes-attr.liquid b/snippets/util-product-media-sizes-attr.liquid index 8458af158..5b4f1b820 100644 --- a/snippets/util-product-media-sizes-attr.liquid +++ b/snippets/util-product-media-sizes-attr.liquid @@ -50,16 +50,16 @@ 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 + assign default_sizes = '(min-width: 750px) calc(100vw - 25rem - [gap_half]), calc(100vw - 3rem)' | replace: '[gap_half]', gap_half else - assign default_sizes = '(min-width: 750px) calc(50vw - [gap_half]), 100vw' | replace: '[gap_half]', gap_half + assign default_sizes = '(min-width: 750px) calc(50vw - [gap_half]), calc(100vw - 3rem)' | 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 + assign default_sizes = '(min-width: 750px) calc((100vw - 25rem) / 2 - [gap_quarter] - [image_gap_half]), calc(100vw - 3rem)' | 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 + assign default_sizes = '(min-width: 750px) calc(50vw / 2 - [gap_quarter] - [image_gap_half]), calc(100vw - 3rem)' | replace: '[gap_quarter]', gap_quarter | replace: '[image_gap_half]', image_gap_half endif endif @@ -116,7 +116,7 @@ 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 + assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], calc(100vw - 3rem)' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size else # Single column calculation if block_settings.extend_media @@ -130,7 +130,7 @@ 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 + assign sizes = '(min-width: [breakpoint]) [large_size], (min-width: 750px) [medium_size], calc(100vw - 3rem)' | replace: '[breakpoint]', breakpoint | replace: '[large_size]', large_size | replace: '[medium_size]', medium_size endif else # Use default sizes From bc5cc1b3c29e2cedba87cea872b81e0f6225d3a2 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 12:57:16 -0500 Subject: [PATCH 6/8] Perf: Lazy-load predictive search JS on intent --- commits.txt | Bin 0 -> 1060 bytes snippets/search-modal.liquid | 55 +++- themes.txt | Bin 0 -> 19996 bytes themes_utf8.txt | 341 ++++++++++++++++++++++++ tmp_diff.txt | 0 tmp_log.txt | Bin 0 -> 28978 bytes tmp_log_utf8.txt | 484 +++++++++++++++++++++++++++++++++++ 7 files changed, 872 insertions(+), 8 deletions(-) create mode 100644 commits.txt create mode 100644 themes.txt create mode 100644 themes_utf8.txt create mode 100644 tmp_diff.txt create mode 100644 tmp_log.txt create mode 100644 tmp_log_utf8.txt diff --git a/commits.txt b/commits.txt new file mode 100644 index 0000000000000000000000000000000000000000..ba15705106bc8f2113e32743abec089307b38045 GIT binary patch literal 1060 zcmZ9LTTjA35QXR2#Q(65`hXFN5`8lgBZ($PVA=`zt<@1NH`w94W9jR^bus23y7J z0^Pf9+m;>hu4e-f5|6M!x%Q})EnR=g+Z!U3NG(wdZV$+F;srDdqSo9SN33iLgAD0E zX0TJcuo3!+a}t-Sd$!JJ0JARgfHlVJ(rpjyfqbT{0FEN(jy6ME5=-`i9Ba>2oK=w$ zHmzH96I0dfH~%sIF~Xzc_rcw_zSrac|1123rMjykOHeXgO0OGu_(JedvZ)wLbDrZ zL>QW}E|F5|q*?x5)ggYZTQmonB{9_WbR1Ecs`Ki9iA5O;zd{PDea1OP7bEDc`lP9d zQ`IB49(^6N2LJF+$gJk&JNlZ~Eo)uhISdv=+06L_jiy_Cgc4^gAS(+^m-^bQa5Fe` r!Op?m=f%h~5c`->{0C;p`cEtG`Z;HV=7UoiCe*dhr}vwGT~+-C1Ln19 literal 0 HcmV?d00001 diff --git a/snippets/search-modal.liquid b/snippets/search-modal.liquid index 26ade7e56..24ab4b15e 100644 --- a/snippets/search-modal.liquid +++ b/snippets/search-modal.liquid @@ -3,12 +3,6 @@ type="module" > - - - - + + {% stylesheet %} /* Search modal style */ .search-modal { diff --git a/themes.txt b/themes.txt new file mode 100644 index 0000000000000000000000000000000000000000..d1a578b3462d3ad7824f5b9d3378857163cad191 GIT binary patch literal 19996 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 literal 0 HcmV?d00001 diff --git a/themes_utf8.txt b/themes_utf8.txt new file mode 100644 index 000000000..b7d4e9e9b --- /dev/null +++ b/themes_utf8.txt @@ -0,0 +1,341 @@ +node.exe : Ôò¡ÔöÇ info ÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò« +En C:\Users\sergi\AppData\Roam +ing\npm\shopify.ps1: 24 +Carácter: 5 ++ & "node$exe" "$basedir/ +node_modules/@shopify/cli/bin/ +run.js" $ar ... ++ ~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +~~~~~~~~~~~ + + CategoryInfo : + NotSpecified: (Ôò¡ÔöÇ in + fo ÔöÇ...ÔöÇÔöÇÔöÇÔöÇÔò«: + String) [], RemoteExcepti +on + + FullyQualifiedErrorId : + NativeCommandError + +Ôöé + + Ôöé +Ôöé name + role + id Ôöé +Ôöé ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ +öÇÔöÇÔöÇ ÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ Ôöé +Ôöé + +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ + ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ Ôöé +Ôöé S26 Launch + +[live] #1830457 Ôöé +Ôöé + + 18050 Ôöé +Ôöé GO TO Launch | Master +Branch +[unpublished] #1263191 Ôöé +Ôöé + + 32706 Ôöé +Ôöé 2.0 Migration | Back up + +[unpublished] #1265306 Ôöé +Ôöé + + 50146 Ôöé +Ôöé 2.0 Migration | Launch +theme | CS - QA +[unpublished] #1581097 Ôöé +Ôöé + + 94338 Ôöé +Ôöé Copy of 2.0 Migration | +Main - Upsell Plus +[unpublished] #1581207 Ôöé +Ôöé + + 38850 Ôöé +Ôöé CS Review | 2.0 +Migration + [unpublished] #1605083 +Ôöé +Ôöé + + 46402 Ôöé +Ôöé S24 Launch Theme + +[unpublished] #1605461 Ôöé +Ôöé + + 93442 Ôöé +Ôöé Loop On-Store Exchange + +[unpublished] #1627669 Ôöé +Ôöé + + 79106 Ôöé +Ôöé Do-not-delete GO TO +Launch 21-05-24 +[unpublished] #1635402 Ôöé +Ôöé + + 05602 Ôöé +Ôöé Dawn + +[unpublished] #1645178 Ôöé +Ôöé + + 38882 Ôöé +Ôöé BIS-form-sms-optional + +[unpublished] #1676338 Ôöé +Ôöé + + 79074 Ôöé +Ôöé S25 | Live Site + +[unpublished] #1708626 Ôöé +Ôöé + + 41186 Ôöé +Ôöé Changes from Josh | +Product Title +[unpublished] #1726773 Ôöé +Ôöé + + 00258 Ôöé +Ôöé Josh Dev Branch + +[unpublished] #1729308 Ôöé +Ôöé + + 26274 Ôöé +Ôöé Josh Summer Season Theme +| Dev +[unpublished] #1737457 Ôöé +Ôöé + + 33666 Ôöé +Ôöé Accordions PDP A/B Test + +[unpublished] #1742391 Ôöé +Ôöé + + 21442 Ôöé +Ôöé Dawn + +[unpublished] #1746026 Ôöé +Ôöé + + 16866 Ôöé +Ôöé S25 | True To Form + +[unpublished] #1749015 Ôöé +Ôöé + + 59330 Ôöé +Ôöé Fit Finder Combinations + +[unpublished] #1755108 Ôöé +Ôöé + + 80290 Ôöé +Ôöé S25 Launch | Referral +Program +[unpublished] #1759910 Ôöé +Ôöé + + 29794 Ôöé +Ôöé F25 Site Launch + +[unpublished] #1763129 Ôöé +Ôöé + + 09858 Ôöé +Ôöé F25 Site Launch | +POSTHOG + [unpublished] #1773665 +Ôöé +Ôöé + + 64898 Ôöé +Ôöé True to Form | Display +inline with Size Chart +[unpublished] #1774398 Ôöé +Ôöé + + 66914 Ôöé +Ôöé Product Discovery +Optimization | Filters + [unpublished] #1776384 +Ôöé +Ôöé + + 08226 Ôöé +Ôöé Navbar preview as Dawn +Theme +[unpublished] #1784344 Ôöé +Ôöé + + 74018 Ôöé +Ôöé Winter 2026 Site Launch +| Duped from F25 Launch +[unpublished] #1785657 Ôöé +Ôöé + + 75394 Ôöé +Ôöé UX Updates Requested By +CEO | Josh +[unpublished] #1790018 Ôöé +Ôöé + + 19170 Ôöé +Ôöé Horizon + +[unpublished] #1790461 Ôöé +Ôöé + + 87042 Ôöé +Ôöé Combined Listing Dawn +v10 +[unpublished] #1797262 Ôöé +Ôöé + + 54114 Ôöé +Ôöé BFCM-25 + +[unpublished] #1799346 Ôöé +Ôöé + + 91362 Ôöé +Ôöé BFCM 2025 | Cyber Week + +[unpublished] #1804339 Ôöé +Ôöé + + 44610 Ôöé +Ôöé Post BFCM Dec 4 + +[unpublished] #1807412 Ôöé +Ôöé + + 75682 Ôöé +Ôöé Technical Performance +Audit +[unpublished] #1812142 Ôöé +Ôöé + + 81762 Ôöé +Ôöé Hotswap Landing Page + +[unpublished] #1813693 Ôöé +Ôöé + + 39938 Ôöé +Ôöé F25 Site Launch | Josh's +audit updates sandbox +[unpublished] #1819885 Ôöé +Ôöé + + 24066 Ôöé +Ôöé Horizon Test Theme | +2026 +[unpublished] #1822540 Ôöé +Ôöé + + 75938 Ôöé +Ôöé skeleton-theme-main + +[unpublished] #1824008 Ôöé +Ôöé + + 76578 Ôöé +Ôöé Updated copy of Dawn + +[unpublished] #1824012 Ôöé +Ôöé + + 04258 Ôöé +Ôöé Updated copy of Dawn + +[unpublished] #1824910 Ôöé +Ôöé + + 86882 Ôöé +Ôöé Copy of F25 Site Launch +(with TTF Widget) +[unpublished] #1828874 Ôöé +Ôöé + + 15842 Ôöé +Ôöé Copy of F25 Site Launch +(No layout shift widget) +[unpublished] #1830205 Ôöé +Ôöé + + 19458 Ôöé +Ôöé QA-S26-Rivka + +[unpublished] #1834794 Ôöé +Ôöé + + 35298 Ôöé +Ôöé ST Rivka Development + +[unpublished] #1836987 Ôöé +Ôöé + + 84290 Ôöé +Ôöé Sale-Preview-Womens-Day + +[unpublished] #1839376 Ôöé +Ôöé + + 63010 Ôöé +Ôöé [ST] Dovetail26 + +[unpublished] #1841171 Ôöé +Ôöé + + 00578 Ôöé +Ôöé Development +(97c0e6-Rivka) + [development] +#1826638 Ôöé +Ôöé + + 39778 Ôöé +Ôöé Development +(c21081-DESKTOP-GCEE73P) + [development] +#1838501 Ôöé +Ôöé + +[yours] 06914 Ôöé +Ôöé + + Ôöé +Ôò░ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ +ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò» + diff --git a/tmp_diff.txt b/tmp_diff.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tmp_log.txt b/tmp_log.txt new file mode 100644 index 0000000000000000000000000000000000000000..5739684c919ca63d899e55b7badb2a7fdf83892b GIT binary patch literal 28978 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 +Date: Tue Mar 10 03:13:41 2026 -0500 + + Fix: Update theme with draft from Shopify + +M assets/base.css +M assets/header.js +M assets/scrolling.js +M assets/view-transitions.js +M assets/zoom-dialog.js +M snippets/image.liquid +M snippets/search-modal.liquid + +commit 5e2763ef982a73ac033fc4dd736c8c3f3418abec +Author: Sergio Tamayo +Date: Tue Mar 10 03:01:42 2026 -0500 + + Fix: Remove CSS nesting to support older Shopify CLI compilers + +M assets/base.css + +commit 7f1e77ba0a3b87f703989e3ebd414b30d7e8fc5b +Merge: 2920bb7 e21fab6 222d994 f63343f 4704275 +Author: Sergio Tamayo +Date: Tue Mar 10 02:57:08 2026 -0500 + + Merge all performance improvements into testing branch + +commit 4704275f117e5d749f9ea75540fee875b2a2ac27 +Author: Sergio Tamayo +Date: Tue Mar 10 02:32:37 2026 -0500 + + Perf: Review render-blocking CSS (no changes needed) + +commit f63343f1d9756c47e3098acd2830aef91802b537 +Author: Sergio Tamayo +Date: Tue Mar 10 02:31:45 2026 -0500 + + Perf: Use native image_tag widths in image.liquid + +M snippets/image.liquid + +commit 222d994c314f0d29113330b4df7c4cbaf735b139 +Author: Sergio Tamayo +Date: Tue Mar 10 02:31:10 2026 -0500 + + Perf: Defer predictive-search.js loading + +M snippets/search-modal.liquid + +commit e21fab6479b74bb2efe2518bf8e2a0cd4a43caa0 +Author: Sergio Tamayo +Date: Tue Mar 10 02:30:02 2026 -0500 + + Perf: Disable slide-reveal animation on mobile devices + +M assets/base.css + +commit 2920bb718aff9f03b53fe9ff95ac01ac2a1e53fa +Author: Sergio Tamayo +Date: Tue Mar 10 02:28:54 2026 -0500 + + Perf: Apply passive true to scroll event listeners + +M assets/header.js +M assets/scrolling.js +M assets/view-transitions.js +M assets/zoom-dialog.js + +commit ec19fb06c5958bb0b290c5635bbf6f69814541dc +Author: Sergio Tamayo +Date: Tue Mar 10 02:22:28 2026 -0500 + + Initial commit of Horizon 3.4.0 theme + +A assets/accordion-custom.js +A assets/anchored-popover.js +A assets/announcement-bar.js +A assets/auto-close-details.js +A assets/base.css +A assets/blog-posts-list.js +A assets/cart-discount.js +A assets/cart-drawer.js +A assets/cart-icon.js +A assets/cart-note.js +A assets/collection-links.js +A assets/comparison-slider.js +A assets/component-cart-items.js +A assets/component-cart-quantity-selector.js +A assets/component-quantity-selector.js +A assets/component.js +A assets/copy-to-clipboard.js +A assets/dialog.js +A assets/drag-zoom-wrapper.js +A assets/events.js +A assets/facets.js +A assets/floating-panel.js +A assets/fly-to-cart.js +A assets/focus.js +A assets/gift-card-recipient-form.js +A assets/global.d.ts +A assets/header-drawer.js +A assets/header-menu.js +A assets/header.js +A assets/icon-account.svg +A assets/icon-add-to-cart.svg +A assets/icon-arrow.svg +A assets/icon-available.svg +A assets/icon-caret.svg +A assets/icon-cart.svg +A assets/icon-checkmark-burst.svg +A assets/icon-checkmark.svg +A assets/icon-chevron-left.svg +A assets/icon-chevron-right.svg +A assets/icon-close.svg +A assets/icon-delete.svg +A assets/icon-discount.svg +A assets/icon-double-chevron.svg +A assets/icon-error.svg +A assets/icon-external.svg +A assets/icon-filter.svg +A assets/icon-filters-close.svg +A assets/icon-grid-default.svg +A assets/icon-grid-dense.svg +A assets/icon-info.svg +A assets/icon-inventory.svg +A assets/icon-menu.svg +A assets/icon-minus.svg +A assets/icon-one-col-mobile.svg +A assets/icon-orders.svg +A assets/icon-pause.svg +A assets/icon-play.svg +A assets/icon-plus.svg +A assets/icon-reset.svg +A assets/icon-search.svg +A assets/icon-shopify.svg +A assets/icon-unavailable.svg +A assets/jsconfig.json +A assets/jumbo-text.js +A assets/layered-slideshow.js +A assets/local-pickup.js +A assets/localization.js +A assets/marquee.js +A assets/media-gallery.js +A assets/media.js +A assets/money-formatting.js +A assets/morph.js +A assets/overflow-list.css +A assets/overflow-list.js +A assets/paginated-list-aspect-ratio.js +A assets/paginated-list.js +A assets/performance.js +A assets/popover-polyfill.js +A assets/predictive-search.js +A assets/price-per-item.js +A assets/product-card.js +A assets/product-custom-property.js +A assets/product-form.js +A assets/product-hotspot.js +A assets/product-inventory.js +A assets/product-price.js +A assets/product-recommendations.js +A assets/product-sku.js +A assets/product-title-truncation.js +A assets/qr-code-generator.js +A assets/qr-code-image.js +A assets/quick-add.js +A assets/quick-order-list.js +A assets/recently-viewed-products.js +A assets/results-list.js +A assets/rte-formatter.js +A assets/scrolling.js +A assets/search-page-input.js +A assets/section-hydration.js +A assets/section-renderer.js +A assets/show-more.js +A assets/slideshow.js +A assets/sticky-add-to-cart.js +A assets/template-giftcard.css +A assets/theme-editor.js +A assets/utilities.js +A assets/variant-picker.js +A assets/video-background.js +A assets/view-transitions.js +A assets/volume-pricing-info.js +A assets/volume-pricing.js +A assets/zoom-dialog.js +A blocks/_accordion-row.liquid +A blocks/_announcement.liquid +A blocks/_blog-post-card.liquid +A blocks/_blog-post-content.liquid +A blocks/_blog-post-description.liquid +A blocks/_blog-post-featured-image.liquid +A blocks/_blog-post-image.liquid +A blocks/_blog-post-info-text.liquid +A blocks/_card.liquid +A blocks/_carousel-content.liquid +A blocks/_cart-products.liquid +A blocks/_cart-summary.liquid +A blocks/_cart-title.liquid +A blocks/_collection-card-image.liquid +A blocks/_collection-card.liquid +A blocks/_collection-image.liquid +A blocks/_collection-info.liquid +A blocks/_collection-link.liquid +A blocks/_content-without-appearance.liquid +A blocks/_content.liquid +A blocks/_divider.liquid +A blocks/_featured-blog-posts-card.liquid +A blocks/_featured-blog-posts-image.liquid +A blocks/_featured-blog-posts-title.liquid +A blocks/_featured-product-gallery.liquid +A blocks/_featured-product-information-carousel.liquid +A blocks/_featured-product-price.liquid +A blocks/_featured-product.liquid +A blocks/_footer-social-icons.liquid +A blocks/_header-logo.liquid +A blocks/_header-menu.liquid +A blocks/_heading.liquid +A blocks/_hotspot-product.liquid +A blocks/_image.liquid +A blocks/_inline-collection-title.liquid +A blocks/_inline-text.liquid +A blocks/_layered-slide.liquid +A blocks/_marquee.liquid +A blocks/_media-without-appearance.liquid +A blocks/_media.liquid +A blocks/_product-card-gallery.liquid +A blocks/_product-card-group.liquid +A blocks/_product-card.liquid +A blocks/_product-details.liquid +A blocks/_product-list-button.liquid +A blocks/_product-list-content.liquid +A blocks/_product-list-text.liquid +A blocks/_product-media-gallery.liquid +A blocks/_search-input.liquid +A blocks/_slide.liquid +A blocks/_social-link.liquid +A blocks/accelerated-checkout.liquid +A blocks/accordion.liquid +A blocks/add-to-cart.liquid +A blocks/button.liquid +A blocks/buy-buttons.liquid +A blocks/collection-card.liquid +A blocks/collection-title.liquid +A blocks/comparison-slider.liquid +A blocks/contact-form-submit-button.liquid +A blocks/contact-form.liquid +A blocks/custom-liquid.liquid +A blocks/email-signup.liquid +A blocks/featured-collection.liquid +A blocks/filters.liquid +A blocks/follow-on-shop.liquid +A blocks/footer-copyright.liquid +A blocks/footer-policy-list.liquid +A blocks/group.liquid +A blocks/icon.liquid +A blocks/image.liquid +A blocks/jumbo-text.liquid +A blocks/logo.liquid +A blocks/menu.liquid +A blocks/page-content.liquid +A blocks/page.liquid +A blocks/payment-icons.liquid +A blocks/popup-link.liquid +A blocks/price.liquid +A blocks/product-card.liquid +A blocks/product-custom-property.liquid +A blocks/product-description.liquid +A blocks/product-inventory.liquid +A blocks/product-recommendations.liquid +A blocks/product-title.liquid +A blocks/quantity.liquid +A blocks/review.liquid +A blocks/sku.liquid +A blocks/social-links.liquid +A blocks/spacer.liquid +A blocks/swatches.liquid +A blocks/text.liquid +A blocks/variant-picker.liquid +A blocks/video.liquid +A config/settings_data.json +A config/settings_schema.json +A layout/password.liquid +A layout/theme.liquid +A locales/bg.json +A locales/cs.json +A locales/cs.schema.json +A locales/da.json +A locales/da.schema.json +A locales/de.json +A locales/de.schema.json +A locales/el.json +A locales/en.default.json +A locales/en.default.schema.json +A locales/es.json +A locales/es.schema.json +A locales/fi.json +A locales/fi.schema.json +A locales/fr.json +A locales/fr.schema.json +A locales/hr.json +A locales/hu.json +A locales/id.json +A locales/it.json +A locales/it.schema.json +A locales/ja.json +A locales/ja.schema.json +A locales/ko.json +A locales/ko.schema.json +A locales/lt.json +A locales/nb.json +A locales/nb.schema.json +A locales/nl.json +A locales/nl.schema.json +A locales/pl.json +A locales/pl.schema.json +A locales/pt-BR.json +A locales/pt-BR.schema.json +A locales/pt-PT.json +A locales/pt-PT.schema.json +A locales/ro.json +A locales/ru.json +A locales/sk.json +A locales/sl.json +A locales/sv.json +A locales/sv.schema.json +A locales/th.json +A locales/th.schema.json +A locales/tr.json +A locales/tr.schema.json +A locales/vi.json +A locales/zh-CN.json +A locales/zh-CN.schema.json +A locales/zh-TW.json +A locales/zh-TW.schema.json +A sections/_blocks.liquid +A sections/carousel.liquid +A sections/collection-links.liquid +A sections/collection-list.liquid +A sections/custom-liquid.liquid +A sections/divider.liquid +A sections/featured-blog-posts.liquid +A sections/featured-product-information.liquid +A sections/featured-product.liquid +A sections/footer-group.json +A sections/footer-utilities.liquid +A sections/footer.liquid +A sections/header-announcements.liquid +A sections/header-group.json +A sections/header.liquid +A sections/hero.liquid +A sections/layered-slideshow.liquid +A sections/logo.liquid +A sections/main-404.liquid +A sections/main-blog-post.liquid +A sections/main-blog.liquid +A sections/main-cart.liquid +A sections/main-collection-list.liquid +A sections/main-collection.liquid +A sections/main-page.liquid +A sections/marquee.liquid +A sections/media-with-content.liquid +A sections/password-footer.liquid +A sections/password.liquid +A sections/predictive-search-empty.liquid +A sections/predictive-search.liquid +A sections/product-hotspots.liquid +A sections/product-information.liquid +A sections/product-list.liquid +A sections/product-recommendations.liquid +A sections/quick-order-list.liquid +A sections/search-header.liquid +A sections/search-results.liquid +A sections/section-rendering-product-card.liquid +A sections/section.liquid +A sections/slideshow.liquid +A snippets/add-to-cart-button.liquid +A snippets/background-media.liquid +A snippets/bento-grid.liquid +A snippets/blog-comment-form.liquid +A snippets/border-override.liquid +A snippets/button.liquid +A snippets/card-gallery.liquid +A snippets/cart-bubble.liquid +A snippets/cart-products.liquid +A snippets/cart-summary.liquid +A snippets/checkbox.liquid +A snippets/collection-card.liquid +A snippets/color-schemes.liquid +A snippets/divider.liquid +A snippets/editorial-blog-grid.liquid +A snippets/editorial-collection-grid.liquid +A snippets/editorial-product-grid.liquid +A snippets/filter-remove-buttons.liquid +A snippets/fonts.liquid +A snippets/format-price.liquid +A snippets/gap-style.liquid +A snippets/gift-card-recipient-form.liquid +A snippets/grid-density-controls.liquid +A snippets/group.liquid +A snippets/header-actions.liquid +A snippets/header-drawer.liquid +A snippets/header-row.liquid +A snippets/icon-or-image.liquid +A snippets/icon.liquid +A snippets/image.liquid +A snippets/jumbo-text.liquid +A snippets/layout-panel-style.liquid +A snippets/link-featured-image.liquid +A snippets/list-filter.liquid +A snippets/localization-form.liquid +A snippets/media.liquid +A snippets/mega-menu-list.liquid +A snippets/menu-font-styles.liquid +A snippets/meta-tags.liquid +A snippets/overflow-list.liquid +A snippets/overlay.liquid +A snippets/pagination-controls.liquid +A snippets/password-layout-styles.liquid +A snippets/predictive-search-empty-state.liquid +A snippets/predictive-search-products-list.liquid +A snippets/predictive-search-resource-carousel.liquid +A snippets/price-filter.liquid +A snippets/price.liquid +A snippets/product-card.liquid +A snippets/product-grid.liquid +A snippets/product-information-content.liquid +A snippets/product-media-gallery-content.liquid +A snippets/product-media.liquid +A snippets/quantity-selector.liquid +A snippets/quick-add-modal.liquid +A snippets/quick-add.liquid +A snippets/resource-card.liquid +A snippets/resource-image.liquid +A snippets/resource-list-carousel.liquid +A snippets/resource-list.liquid +A snippets/scripts.liquid +A snippets/search-modal.liquid +A snippets/search.liquid +A snippets/section.liquid +A snippets/size-style.liquid +A snippets/skip-to-content-link.liquid +A snippets/sku.liquid +A snippets/slideshow-arrow.liquid +A snippets/slideshow-arrows.liquid +A snippets/slideshow-controls.liquid +A snippets/slideshow-slide.liquid +A snippets/slideshow.liquid +A snippets/sorting.liquid +A snippets/spacing-padding.liquid +A snippets/spacing-style.liquid +A snippets/strikethrough-variant.liquid +A snippets/stylesheets.liquid +A snippets/submenu-font-styles.liquid +A snippets/swatch.liquid +A snippets/tax-info.liquid +A snippets/text.liquid +A snippets/theme-editor.liquid +A snippets/theme-styles-variables.liquid +A snippets/typography-style.liquid +A snippets/unit-price.liquid +A snippets/util-autofill-img-size-attr.liquid +A snippets/util-mega-menu-img-sizes-attr.liquid +A snippets/util-product-grid-card-size.liquid +A snippets/util-product-media-sizes-attr.liquid +A snippets/variant-main-picker.liquid +A snippets/variant-swatches.liquid +A snippets/video.liquid +A snippets/volume-pricing-info.liquid +A templates/404.json +A templates/article.json +A templates/blog.json +A templates/cart.json +A templates/collection.json +A templates/gift_card.liquid +A templates/index.json +A templates/list-collections.json +A templates/page.contact.json +A templates/page.json +A templates/password.json +A templates/product.json +A templates/search.json From fe29debe2004a0b24e9e43772376c669d0fa1ab9 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Mon, 16 Mar 2026 15:44:54 -0500 Subject: [PATCH 7/8] Perf: Add mobile toggle to disable heavy reveals and transitions --- assets/base.css | 23 +++++++++++++++++++++++ config/settings_schema.json | 7 +++++++ layout/theme.liquid | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/assets/base.css b/assets/base.css index 91012cce3..2f141d692 100644 --- a/assets/base.css +++ b/assets/base.css @@ -3748,6 +3748,29 @@ fly-to-cart.fly-to-cart--sticky { } } +/* ============================================================================ + Mobile Performance - Disabled Animations Override + ============================================================================ */ +@media screen and (max-width: 749px) { + body.animations-disabled-mobile * { + /* Disable all CSS Scroll-Driven reveals (native feature used heavily in this theme) */ + animation-timeline: none !important; + } + + body.animations-disabled-mobile .slide__content { + /* Specifically prevent the slide reveal animation to load instantly */ + animation: none !important; + opacity: 1 !important; + translate: 0 0 !important; + } + + /* Disable costly View Transition animations on mobile */ + body.animations-disabled-mobile::view-transition-old(*), + body.animations-disabled-mobile::view-transition-new(*) { + animation: none !important; + } +} + @keyframes search-element-slide-out-bottom { 0% { transform: translateY(0); diff --git a/config/settings_schema.json b/config/settings_schema.json index 9a27dce58..d299bd625 100644 --- a/config/settings_schema.json +++ b/config/settings_schema.json @@ -1403,6 +1403,13 @@ "label": "t:settings.add_to_cart_animation", "default": true }, + { + "type": "checkbox", + "id": "disable_animations_mobile", + "label": "Disable animations on mobile", + "info": "Improves performance by disabling scroll reveals and page transitions on small screens.", + "default": true + }, { "type": "select", "id": "card_hover_effect", diff --git a/layout/theme.liquid b/layout/theme.liquid index 2b6b6a151..085987f94 100644 --- a/layout/theme.liquid +++ b/layout/theme.liquid @@ -38,7 +38,7 @@ {{ content_for_header }} - + {% render 'skip-to-content-link', href: '#MainContent', text: 'accessibility.skip_to_text' %}
{% sections 'header-group' %} From b54fc0594061fd6ab53ed2eb1b72d268311d8b07 Mon Sep 17 00:00:00 2001 From: Sergio Tamayo Date: Wed, 18 Mar 2026 00:56:38 -0500 Subject: [PATCH 8/8] predictive-search-lazyload --- themes.txt | Bin 19996 -> 2 bytes themes_utf8.txt | 342 +-------------------------------- tmp_log.txt | Bin 28978 -> 2 bytes tmp_log_utf8.txt | 485 +---------------------------------------------- 4 files changed, 2 insertions(+), 825 deletions(-) diff --git a/themes.txt b/themes.txt index d1a578b3462d3ad7824f5b9d3378857163cad191..46b134b197f35e75e0784bedbf94a8dd124693b1 100644 GIT binary patch literal 2 JcmezW4*&xG0sa60 literal 19996 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 diff --git a/themes_utf8.txt b/themes_utf8.txt index b7d4e9e9b..5f282702b 100644 --- a/themes_utf8.txt +++ b/themes_utf8.txt @@ -1,341 +1 @@ -node.exe : Ôò¡ÔöÇ info ÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò« -En C:\Users\sergi\AppData\Roam -ing\npm\shopify.ps1: 24 -Carácter: 5 -+ & "node$exe" "$basedir/ -node_modules/@shopify/cli/bin/ -run.js" $ar ... -+ ~~~~~~~~~~~~~~~~~~~~~~~~ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -~~~~~~~~~~~ - + CategoryInfo : - NotSpecified: (Ôò¡ÔöÇ in - fo ÔöÇ...ÔöÇÔöÇÔöÇÔöÇÔò«: - String) [], RemoteExcepti -on - + FullyQualifiedErrorId : - NativeCommandError - -Ôöé - - Ôöé -Ôöé name - role - id Ôöé -Ôöé ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔ -öÇÔöÇÔöÇ ÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ Ôöé -Ôöé - -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ - ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ Ôöé -Ôöé S26 Launch - -[live] #1830457 Ôöé -Ôöé - - 18050 Ôöé -Ôöé GO TO Launch | Master -Branch -[unpublished] #1263191 Ôöé -Ôöé - - 32706 Ôöé -Ôöé 2.0 Migration | Back up - -[unpublished] #1265306 Ôöé -Ôöé - - 50146 Ôöé -Ôöé 2.0 Migration | Launch -theme | CS - QA -[unpublished] #1581097 Ôöé -Ôöé - - 94338 Ôöé -Ôöé Copy of 2.0 Migration | -Main - Upsell Plus -[unpublished] #1581207 Ôöé -Ôöé - - 38850 Ôöé -Ôöé CS Review | 2.0 -Migration - [unpublished] #1605083 -Ôöé -Ôöé - - 46402 Ôöé -Ôöé S24 Launch Theme - -[unpublished] #1605461 Ôöé -Ôöé - - 93442 Ôöé -Ôöé Loop On-Store Exchange - -[unpublished] #1627669 Ôöé -Ôöé - - 79106 Ôöé -Ôöé Do-not-delete GO TO -Launch 21-05-24 -[unpublished] #1635402 Ôöé -Ôöé - - 05602 Ôöé -Ôöé Dawn - -[unpublished] #1645178 Ôöé -Ôöé - - 38882 Ôöé -Ôöé BIS-form-sms-optional - -[unpublished] #1676338 Ôöé -Ôöé - - 79074 Ôöé -Ôöé S25 | Live Site - -[unpublished] #1708626 Ôöé -Ôöé - - 41186 Ôöé -Ôöé Changes from Josh | -Product Title -[unpublished] #1726773 Ôöé -Ôöé - - 00258 Ôöé -Ôöé Josh Dev Branch - -[unpublished] #1729308 Ôöé -Ôöé - - 26274 Ôöé -Ôöé Josh Summer Season Theme -| Dev -[unpublished] #1737457 Ôöé -Ôöé - - 33666 Ôöé -Ôöé Accordions PDP A/B Test - -[unpublished] #1742391 Ôöé -Ôöé - - 21442 Ôöé -Ôöé Dawn - -[unpublished] #1746026 Ôöé -Ôöé - - 16866 Ôöé -Ôöé S25 | True To Form - -[unpublished] #1749015 Ôöé -Ôöé - - 59330 Ôöé -Ôöé Fit Finder Combinations - -[unpublished] #1755108 Ôöé -Ôöé - - 80290 Ôöé -Ôöé S25 Launch | Referral -Program -[unpublished] #1759910 Ôöé -Ôöé - - 29794 Ôöé -Ôöé F25 Site Launch - -[unpublished] #1763129 Ôöé -Ôöé - - 09858 Ôöé -Ôöé F25 Site Launch | -POSTHOG - [unpublished] #1773665 -Ôöé -Ôöé - - 64898 Ôöé -Ôöé True to Form | Display -inline with Size Chart -[unpublished] #1774398 Ôöé -Ôöé - - 66914 Ôöé -Ôöé Product Discovery -Optimization | Filters - [unpublished] #1776384 -Ôöé -Ôöé - - 08226 Ôöé -Ôöé Navbar preview as Dawn -Theme -[unpublished] #1784344 Ôöé -Ôöé - - 74018 Ôöé -Ôöé Winter 2026 Site Launch -| Duped from F25 Launch -[unpublished] #1785657 Ôöé -Ôöé - - 75394 Ôöé -Ôöé UX Updates Requested By -CEO | Josh -[unpublished] #1790018 Ôöé -Ôöé - - 19170 Ôöé -Ôöé Horizon - -[unpublished] #1790461 Ôöé -Ôöé - - 87042 Ôöé -Ôöé Combined Listing Dawn -v10 -[unpublished] #1797262 Ôöé -Ôöé - - 54114 Ôöé -Ôöé BFCM-25 - -[unpublished] #1799346 Ôöé -Ôöé - - 91362 Ôöé -Ôöé BFCM 2025 | Cyber Week - -[unpublished] #1804339 Ôöé -Ôöé - - 44610 Ôöé -Ôöé Post BFCM Dec 4 - -[unpublished] #1807412 Ôöé -Ôöé - - 75682 Ôöé -Ôöé Technical Performance -Audit -[unpublished] #1812142 Ôöé -Ôöé - - 81762 Ôöé -Ôöé Hotswap Landing Page - -[unpublished] #1813693 Ôöé -Ôöé - - 39938 Ôöé -Ôöé F25 Site Launch | Josh's -audit updates sandbox -[unpublished] #1819885 Ôöé -Ôöé - - 24066 Ôöé -Ôöé Horizon Test Theme | -2026 -[unpublished] #1822540 Ôöé -Ôöé - - 75938 Ôöé -Ôöé skeleton-theme-main - -[unpublished] #1824008 Ôöé -Ôöé - - 76578 Ôöé -Ôöé Updated copy of Dawn - -[unpublished] #1824012 Ôöé -Ôöé - - 04258 Ôöé -Ôöé Updated copy of Dawn - -[unpublished] #1824910 Ôöé -Ôöé - - 86882 Ôöé -Ôöé Copy of F25 Site Launch -(with TTF Widget) -[unpublished] #1828874 Ôöé -Ôöé - - 15842 Ôöé -Ôöé Copy of F25 Site Launch -(No layout shift widget) -[unpublished] #1830205 Ôöé -Ôöé - - 19458 Ôöé -Ôöé QA-S26-Rivka - -[unpublished] #1834794 Ôöé -Ôöé - - 35298 Ôöé -Ôöé ST Rivka Development - -[unpublished] #1836987 Ôöé -Ôöé - - 84290 Ôöé -Ôöé Sale-Preview-Womens-Day - -[unpublished] #1839376 Ôöé -Ôöé - - 63010 Ôöé -Ôöé [ST] Dovetail26 - -[unpublished] #1841171 Ôöé -Ôöé - - 00578 Ôöé -Ôöé Development -(97c0e6-Rivka) - [development] -#1826638 Ôöé -Ôöé - - 39778 Ôöé -Ôöé Development -(c21081-DESKTOP-GCEE73P) - [development] -#1838501 Ôöé -Ôöé - -[yours] 06914 Ôöé -Ôöé - - Ôöé -Ôò░ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇ -ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò» - + \ No newline at end of file diff --git a/tmp_log.txt b/tmp_log.txt index 5739684c919ca63d899e55b7badb2a7fdf83892b..46b134b197f35e75e0784bedbf94a8dd124693b1 100644 GIT binary patch literal 2 JcmezW4*&xG0sa60 literal 28978 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 -Date: Tue Mar 10 03:13:41 2026 -0500 - - Fix: Update theme with draft from Shopify - -M assets/base.css -M assets/header.js -M assets/scrolling.js -M assets/view-transitions.js -M assets/zoom-dialog.js -M snippets/image.liquid -M snippets/search-modal.liquid - -commit 5e2763ef982a73ac033fc4dd736c8c3f3418abec -Author: Sergio Tamayo -Date: Tue Mar 10 03:01:42 2026 -0500 - - Fix: Remove CSS nesting to support older Shopify CLI compilers - -M assets/base.css - -commit 7f1e77ba0a3b87f703989e3ebd414b30d7e8fc5b -Merge: 2920bb7 e21fab6 222d994 f63343f 4704275 -Author: Sergio Tamayo -Date: Tue Mar 10 02:57:08 2026 -0500 - - Merge all performance improvements into testing branch - -commit 4704275f117e5d749f9ea75540fee875b2a2ac27 -Author: Sergio Tamayo -Date: Tue Mar 10 02:32:37 2026 -0500 - - Perf: Review render-blocking CSS (no changes needed) - -commit f63343f1d9756c47e3098acd2830aef91802b537 -Author: Sergio Tamayo -Date: Tue Mar 10 02:31:45 2026 -0500 - - Perf: Use native image_tag widths in image.liquid - -M snippets/image.liquid - -commit 222d994c314f0d29113330b4df7c4cbaf735b139 -Author: Sergio Tamayo -Date: Tue Mar 10 02:31:10 2026 -0500 - - Perf: Defer predictive-search.js loading - -M snippets/search-modal.liquid - -commit e21fab6479b74bb2efe2518bf8e2a0cd4a43caa0 -Author: Sergio Tamayo -Date: Tue Mar 10 02:30:02 2026 -0500 - - Perf: Disable slide-reveal animation on mobile devices - -M assets/base.css - -commit 2920bb718aff9f03b53fe9ff95ac01ac2a1e53fa -Author: Sergio Tamayo -Date: Tue Mar 10 02:28:54 2026 -0500 - - Perf: Apply passive true to scroll event listeners - -M assets/header.js -M assets/scrolling.js -M assets/view-transitions.js -M assets/zoom-dialog.js - -commit ec19fb06c5958bb0b290c5635bbf6f69814541dc -Author: Sergio Tamayo -Date: Tue Mar 10 02:22:28 2026 -0500 - - Initial commit of Horizon 3.4.0 theme - -A assets/accordion-custom.js -A assets/anchored-popover.js -A assets/announcement-bar.js -A assets/auto-close-details.js -A assets/base.css -A assets/blog-posts-list.js -A assets/cart-discount.js -A assets/cart-drawer.js -A assets/cart-icon.js -A assets/cart-note.js -A assets/collection-links.js -A assets/comparison-slider.js -A assets/component-cart-items.js -A assets/component-cart-quantity-selector.js -A assets/component-quantity-selector.js -A assets/component.js -A assets/copy-to-clipboard.js -A assets/dialog.js -A assets/drag-zoom-wrapper.js -A assets/events.js -A assets/facets.js -A assets/floating-panel.js -A assets/fly-to-cart.js -A assets/focus.js -A assets/gift-card-recipient-form.js -A assets/global.d.ts -A assets/header-drawer.js -A assets/header-menu.js -A assets/header.js -A assets/icon-account.svg -A assets/icon-add-to-cart.svg -A assets/icon-arrow.svg -A assets/icon-available.svg -A assets/icon-caret.svg -A assets/icon-cart.svg -A assets/icon-checkmark-burst.svg -A assets/icon-checkmark.svg -A assets/icon-chevron-left.svg -A assets/icon-chevron-right.svg -A assets/icon-close.svg -A assets/icon-delete.svg -A assets/icon-discount.svg -A assets/icon-double-chevron.svg -A assets/icon-error.svg -A assets/icon-external.svg -A assets/icon-filter.svg -A assets/icon-filters-close.svg -A assets/icon-grid-default.svg -A assets/icon-grid-dense.svg -A assets/icon-info.svg -A assets/icon-inventory.svg -A assets/icon-menu.svg -A assets/icon-minus.svg -A assets/icon-one-col-mobile.svg -A assets/icon-orders.svg -A assets/icon-pause.svg -A assets/icon-play.svg -A assets/icon-plus.svg -A assets/icon-reset.svg -A assets/icon-search.svg -A assets/icon-shopify.svg -A assets/icon-unavailable.svg -A assets/jsconfig.json -A assets/jumbo-text.js -A assets/layered-slideshow.js -A assets/local-pickup.js -A assets/localization.js -A assets/marquee.js -A assets/media-gallery.js -A assets/media.js -A assets/money-formatting.js -A assets/morph.js -A assets/overflow-list.css -A assets/overflow-list.js -A assets/paginated-list-aspect-ratio.js -A assets/paginated-list.js -A assets/performance.js -A assets/popover-polyfill.js -A assets/predictive-search.js -A assets/price-per-item.js -A assets/product-card.js -A assets/product-custom-property.js -A assets/product-form.js -A assets/product-hotspot.js -A assets/product-inventory.js -A assets/product-price.js -A assets/product-recommendations.js -A assets/product-sku.js -A assets/product-title-truncation.js -A assets/qr-code-generator.js -A assets/qr-code-image.js -A assets/quick-add.js -A assets/quick-order-list.js -A assets/recently-viewed-products.js -A assets/results-list.js -A assets/rte-formatter.js -A assets/scrolling.js -A assets/search-page-input.js -A assets/section-hydration.js -A assets/section-renderer.js -A assets/show-more.js -A assets/slideshow.js -A assets/sticky-add-to-cart.js -A assets/template-giftcard.css -A assets/theme-editor.js -A assets/utilities.js -A assets/variant-picker.js -A assets/video-background.js -A assets/view-transitions.js -A assets/volume-pricing-info.js -A assets/volume-pricing.js -A assets/zoom-dialog.js -A blocks/_accordion-row.liquid -A blocks/_announcement.liquid -A blocks/_blog-post-card.liquid -A blocks/_blog-post-content.liquid -A blocks/_blog-post-description.liquid -A blocks/_blog-post-featured-image.liquid -A blocks/_blog-post-image.liquid -A blocks/_blog-post-info-text.liquid -A blocks/_card.liquid -A blocks/_carousel-content.liquid -A blocks/_cart-products.liquid -A blocks/_cart-summary.liquid -A blocks/_cart-title.liquid -A blocks/_collection-card-image.liquid -A blocks/_collection-card.liquid -A blocks/_collection-image.liquid -A blocks/_collection-info.liquid -A blocks/_collection-link.liquid -A blocks/_content-without-appearance.liquid -A blocks/_content.liquid -A blocks/_divider.liquid -A blocks/_featured-blog-posts-card.liquid -A blocks/_featured-blog-posts-image.liquid -A blocks/_featured-blog-posts-title.liquid -A blocks/_featured-product-gallery.liquid -A blocks/_featured-product-information-carousel.liquid -A blocks/_featured-product-price.liquid -A blocks/_featured-product.liquid -A blocks/_footer-social-icons.liquid -A blocks/_header-logo.liquid -A blocks/_header-menu.liquid -A blocks/_heading.liquid -A blocks/_hotspot-product.liquid -A blocks/_image.liquid -A blocks/_inline-collection-title.liquid -A blocks/_inline-text.liquid -A blocks/_layered-slide.liquid -A blocks/_marquee.liquid -A blocks/_media-without-appearance.liquid -A blocks/_media.liquid -A blocks/_product-card-gallery.liquid -A blocks/_product-card-group.liquid -A blocks/_product-card.liquid -A blocks/_product-details.liquid -A blocks/_product-list-button.liquid -A blocks/_product-list-content.liquid -A blocks/_product-list-text.liquid -A blocks/_product-media-gallery.liquid -A blocks/_search-input.liquid -A blocks/_slide.liquid -A blocks/_social-link.liquid -A blocks/accelerated-checkout.liquid -A blocks/accordion.liquid -A blocks/add-to-cart.liquid -A blocks/button.liquid -A blocks/buy-buttons.liquid -A blocks/collection-card.liquid -A blocks/collection-title.liquid -A blocks/comparison-slider.liquid -A blocks/contact-form-submit-button.liquid -A blocks/contact-form.liquid -A blocks/custom-liquid.liquid -A blocks/email-signup.liquid -A blocks/featured-collection.liquid -A blocks/filters.liquid -A blocks/follow-on-shop.liquid -A blocks/footer-copyright.liquid -A blocks/footer-policy-list.liquid -A blocks/group.liquid -A blocks/icon.liquid -A blocks/image.liquid -A blocks/jumbo-text.liquid -A blocks/logo.liquid -A blocks/menu.liquid -A blocks/page-content.liquid -A blocks/page.liquid -A blocks/payment-icons.liquid -A blocks/popup-link.liquid -A blocks/price.liquid -A blocks/product-card.liquid -A blocks/product-custom-property.liquid -A blocks/product-description.liquid -A blocks/product-inventory.liquid -A blocks/product-recommendations.liquid -A blocks/product-title.liquid -A blocks/quantity.liquid -A blocks/review.liquid -A blocks/sku.liquid -A blocks/social-links.liquid -A blocks/spacer.liquid -A blocks/swatches.liquid -A blocks/text.liquid -A blocks/variant-picker.liquid -A blocks/video.liquid -A config/settings_data.json -A config/settings_schema.json -A layout/password.liquid -A layout/theme.liquid -A locales/bg.json -A locales/cs.json -A locales/cs.schema.json -A locales/da.json -A locales/da.schema.json -A locales/de.json -A locales/de.schema.json -A locales/el.json -A locales/en.default.json -A locales/en.default.schema.json -A locales/es.json -A locales/es.schema.json -A locales/fi.json -A locales/fi.schema.json -A locales/fr.json -A locales/fr.schema.json -A locales/hr.json -A locales/hu.json -A locales/id.json -A locales/it.json -A locales/it.schema.json -A locales/ja.json -A locales/ja.schema.json -A locales/ko.json -A locales/ko.schema.json -A locales/lt.json -A locales/nb.json -A locales/nb.schema.json -A locales/nl.json -A locales/nl.schema.json -A locales/pl.json -A locales/pl.schema.json -A locales/pt-BR.json -A locales/pt-BR.schema.json -A locales/pt-PT.json -A locales/pt-PT.schema.json -A locales/ro.json -A locales/ru.json -A locales/sk.json -A locales/sl.json -A locales/sv.json -A locales/sv.schema.json -A locales/th.json -A locales/th.schema.json -A locales/tr.json -A locales/tr.schema.json -A locales/vi.json -A locales/zh-CN.json -A locales/zh-CN.schema.json -A locales/zh-TW.json -A locales/zh-TW.schema.json -A sections/_blocks.liquid -A sections/carousel.liquid -A sections/collection-links.liquid -A sections/collection-list.liquid -A sections/custom-liquid.liquid -A sections/divider.liquid -A sections/featured-blog-posts.liquid -A sections/featured-product-information.liquid -A sections/featured-product.liquid -A sections/footer-group.json -A sections/footer-utilities.liquid -A sections/footer.liquid -A sections/header-announcements.liquid -A sections/header-group.json -A sections/header.liquid -A sections/hero.liquid -A sections/layered-slideshow.liquid -A sections/logo.liquid -A sections/main-404.liquid -A sections/main-blog-post.liquid -A sections/main-blog.liquid -A sections/main-cart.liquid -A sections/main-collection-list.liquid -A sections/main-collection.liquid -A sections/main-page.liquid -A sections/marquee.liquid -A sections/media-with-content.liquid -A sections/password-footer.liquid -A sections/password.liquid -A sections/predictive-search-empty.liquid -A sections/predictive-search.liquid -A sections/product-hotspots.liquid -A sections/product-information.liquid -A sections/product-list.liquid -A sections/product-recommendations.liquid -A sections/quick-order-list.liquid -A sections/search-header.liquid -A sections/search-results.liquid -A sections/section-rendering-product-card.liquid -A sections/section.liquid -A sections/slideshow.liquid -A snippets/add-to-cart-button.liquid -A snippets/background-media.liquid -A snippets/bento-grid.liquid -A snippets/blog-comment-form.liquid -A snippets/border-override.liquid -A snippets/button.liquid -A snippets/card-gallery.liquid -A snippets/cart-bubble.liquid -A snippets/cart-products.liquid -A snippets/cart-summary.liquid -A snippets/checkbox.liquid -A snippets/collection-card.liquid -A snippets/color-schemes.liquid -A snippets/divider.liquid -A snippets/editorial-blog-grid.liquid -A snippets/editorial-collection-grid.liquid -A snippets/editorial-product-grid.liquid -A snippets/filter-remove-buttons.liquid -A snippets/fonts.liquid -A snippets/format-price.liquid -A snippets/gap-style.liquid -A snippets/gift-card-recipient-form.liquid -A snippets/grid-density-controls.liquid -A snippets/group.liquid -A snippets/header-actions.liquid -A snippets/header-drawer.liquid -A snippets/header-row.liquid -A snippets/icon-or-image.liquid -A snippets/icon.liquid -A snippets/image.liquid -A snippets/jumbo-text.liquid -A snippets/layout-panel-style.liquid -A snippets/link-featured-image.liquid -A snippets/list-filter.liquid -A snippets/localization-form.liquid -A snippets/media.liquid -A snippets/mega-menu-list.liquid -A snippets/menu-font-styles.liquid -A snippets/meta-tags.liquid -A snippets/overflow-list.liquid -A snippets/overlay.liquid -A snippets/pagination-controls.liquid -A snippets/password-layout-styles.liquid -A snippets/predictive-search-empty-state.liquid -A snippets/predictive-search-products-list.liquid -A snippets/predictive-search-resource-carousel.liquid -A snippets/price-filter.liquid -A snippets/price.liquid -A snippets/product-card.liquid -A snippets/product-grid.liquid -A snippets/product-information-content.liquid -A snippets/product-media-gallery-content.liquid -A snippets/product-media.liquid -A snippets/quantity-selector.liquid -A snippets/quick-add-modal.liquid -A snippets/quick-add.liquid -A snippets/resource-card.liquid -A snippets/resource-image.liquid -A snippets/resource-list-carousel.liquid -A snippets/resource-list.liquid -A snippets/scripts.liquid -A snippets/search-modal.liquid -A snippets/search.liquid -A snippets/section.liquid -A snippets/size-style.liquid -A snippets/skip-to-content-link.liquid -A snippets/sku.liquid -A snippets/slideshow-arrow.liquid -A snippets/slideshow-arrows.liquid -A snippets/slideshow-controls.liquid -A snippets/slideshow-slide.liquid -A snippets/slideshow.liquid -A snippets/sorting.liquid -A snippets/spacing-padding.liquid -A snippets/spacing-style.liquid -A snippets/strikethrough-variant.liquid -A snippets/stylesheets.liquid -A snippets/submenu-font-styles.liquid -A snippets/swatch.liquid -A snippets/tax-info.liquid -A snippets/text.liquid -A snippets/theme-editor.liquid -A snippets/theme-styles-variables.liquid -A snippets/typography-style.liquid -A snippets/unit-price.liquid -A snippets/util-autofill-img-size-attr.liquid -A snippets/util-mega-menu-img-sizes-attr.liquid -A snippets/util-product-grid-card-size.liquid -A snippets/util-product-media-sizes-attr.liquid -A snippets/variant-main-picker.liquid -A snippets/variant-swatches.liquid -A snippets/video.liquid -A snippets/volume-pricing-info.liquid -A templates/404.json -A templates/article.json -A templates/blog.json -A templates/cart.json -A templates/collection.json -A templates/gift_card.liquid -A templates/index.json -A templates/list-collections.json -A templates/page.contact.json -A templates/page.json -A templates/password.json -A templates/product.json -A templates/search.json + \ No newline at end of file