/** Shopify CDN: Minification failed

Line 1547:27 Expected identifier but found "."
Line 4260:0 Unexpected "}"
Line 4312:0 Unexpected "}"
Line 4332:0 Unexpected "}"

**/
* {
  box-sizing: border-box;
}

body {
  color: var(--color-foreground);
  background: var(--color-background);
  display: flex;
  flex-direction: column;
  margin: 0;
  min-height: 100svh;
  font-variation-settings: 'slnt' 0;
}

:root {
  --hover-lift-amount: 4px;
  --hover-scale-amount: 1.03;
  --hover-subtle-zoom-amount: 1.015;
  --hover-shadow-color: var(--color-shadow);
  --hover-transition-duration: 0.25s;
  --hover-transition-timing: ease-out;
  --surface-transition-duration: 0.3s;
  --surface-transition-timing: var(--ease-out-quad);
}

html {
  /* Firefox */
  scrollbar-width: thin;
  scrollbar-color: rgb(var(--color-foreground-rgb) / var(--opacity-40)) var(--color-background);
  scroll-behavior: smooth;
}

html[scroll-lock] {
  overflow: hidden;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

img {
  width: 100%;
  height: auto;
}

input,
textarea,
select {
  font: inherit;
  border-radius: var(--style-border-radius-inputs);
}

input:hover {
  background-color: var(--color-input-hover-background);
}

/** override ios and firefox defaults */
select {
  background-color: var(--color-background);
  color: currentcolor;
}

.collection-card,
.featured-blog-posts-card {
  width: 100%;
  position: relative;
  height: 100%;
}

/* 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 {
    aspect-ratio: 99;
    height: 100%;
  }

  .collection-card__inner,
  .featured-blog-posts-card__inner {
    display: flex;
    flex-direction: column;
    height: 100%;
  }

  .collection-card__content,
  .featured-blog-posts-card__content {
    flex-shrink: 0;
  }

  &:not(.collection-card--image-bg) .collection-card__content,
  .featured-blog-posts-card__content {
    height: auto;
  }
}

.collection-card__inner,
.featured-blog-posts-card__inner {
  width: 100%;
  overflow: hidden;
  position: relative;
  display: flex;
  flex-direction: column;
  z-index: var(--layer-flat);
  pointer-events: none;
}

.collection-card__content,
.featured-blog-posts-card__content {
  display: flex;
  position: relative;
  height: 100%;
  width: 100%;
  gap: var(--gap);
}

.collection-card__link,
.featured-blog-posts-card__link {
  position: absolute;
  inset: 0;

  /* allows focus outline to have radius in supported browsers */
  border-radius: var(--border-radius);
}

.product-card,
.collection-card,
.resource-card,
.predictive-search-results__card--product,
.predictive-search-results__card {
  position: relative;
  transition: transform var(--hover-transition-duration) var(--hover-transition-timing),
    box-shadow var(--hover-transition-duration) var(--hover-transition-timing);
  z-index: var(--layer-flat);
}

.product-card__link {
  position: absolute;
  inset: 0;
}

.product-card__content {
  position: relative;
}

.product-card__content {
  cursor: pointer;
}

.product-card__content slideshow-component {
  --cursor: pointer;
}

.predictive-search-results__card .product-card,
.predictive-search-results__card .collection-card,
.predictive-search-results__card .resource-card {
  transition: none;
  will-change: auto;
}

@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,
  .card-hover-effect-lift .predictive-search-results__card:hover {
    transform: translateY(calc(-1 * var(--hover-lift-amount)));
  }

  .card-hover-effect-lift .header .product-card:hover,
  .card-hover-effect-lift .header .collection-card:hover,
  .card-hover-effect-lift .header .resource-card:hover,
  .card-hover-effect-lift .header-drawer .product-card:hover,
  .card-hover-effect-lift .header-drawer .collection-card:hover,
  .card-hover-effect-lift .header-drawer .resource-card:hover {
    transform: none;
  }

  .card-hover-effect-scale .product-card:hover,
  .card-hover-effect-scale .collection-card:hover,
  .card-hover-effect-scale .resource-card:hover,
  .card-hover-effect-scale .predictive-search-results__card:hover {
    transform: scale(var(--hover-scale-amount));
  }

  .card-hover-effect-scale .header .product-card:hover,
  .card-hover-effect-scale .header .collection-card:hover,
  .card-hover-effect-scale .header .resource-card:hover,
  .card-hover-effect-scale .header-drawer .product-card:hover,
  .card-hover-effect-scale .header-drawer .collection-card:hover,
  .card-hover-effect-scale .header-drawer .resource-card:hover {
    transform: none;
  }

  .card-hover-effect-subtle-zoom .card-gallery,
  .card-hover-effect-subtle-zoom .collection-card__image,
  .card-hover-effect-subtle-zoom .product-card__image,
  .card-hover-effect-subtle-zoom .resource-card__image {
    overflow: hidden;
    transition: transform var(--hover-transition-duration) var(--hover-transition-timing);
  }

  .predictive-search-results__card .card-gallery,
  .predictive-search-results__card .collection-card__image,
  .predictive-search-results__card .product-card__image,
  .predictive-search-results__card .resource-card__image {
    transition: none;
  }

  .card-hover-effect-subtle-zoom .product-card:hover .card-gallery,
  .card-hover-effect-subtle-zoom .collection-card:hover .collection-card__image,
  .card-hover-effect-subtle-zoom .product-card:hover .product-card__image,
  .card-hover-effect-subtle-zoom .resource-card:hover .resource-card__image,
  .card-hover-effect-subtle-zoom .predictive-search-results__card:hover {
    transform: scale(var(--hover-subtle-zoom-amount));
  }

  .card-hover-effect-subtle-zoom .header .product-card:hover .card-gallery,
  .card-hover-effect-subtle-zoom .header .collection-card:hover .collection-card__image,
  .card-hover-effect-subtle-zoom .header .product-card:hover .product-card__image,
  .card-hover-effect-subtle-zoom .header .resource-card:hover .resource-card__image,
  .card-hover-effect-subtle-zoom .header-drawer .product-card:hover .card-gallery,
  .card-hover-effect-subtle-zoom .header-drawer .collection-card:hover .collection-card__image,
  .card-hover-effect-subtle-zoom .header-drawer .product-card:hover .product-card__image,
  .card-hover-effect-subtle-zoom .header-drawer .resource-card:hover .resource-card__image {
    transform: none;
  }

  .predictive-search-results__card .product-card:hover,
  .predictive-search-results__card .collection-card:hover,
  .predictive-search-results__card .resource-card:hover,
  .header .product-card:hover,
  .header .collection-card:hover,
  .header .resource-card:hover,
  .header-drawer .product-card:hover,
  .header-drawer .collection-card:hover,
  .header-drawer .resource-card:hover {
    transform: none;
    box-shadow: none;
  }
}

dialog {
  /* the ::backdrop inherits from the originating element, custom properties must be set on the dialog element */
  --backdrop-color-rgb: var(--color-shadow-rgb);

  background-color: var(--color-background);
  color: var(--color-foreground);
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

.wrap-text {
  overflow-wrap: break-word;
  word-break: break-word;
  hyphens: auto;
}

p:empty {
  display: none;
}

:first-child:is(p, h1, h2, h3, h4, h5, h6),
:first-child:empty + :where(p, h1, h2, h3, h4, h5, h6) {
  margin-block-start: 0;
}

/* Remove bottom margin from last text item, or previous to last if the last is empty */
:last-child:is(p, h1, h2, h3, h4, h5, h6),
:where(p, h1, h2, h3, h4, h5, h6):nth-child(2):has(+ :last-child:empty) {
  margin-block-end: 0;
}

/* view transitions */
@media (prefers-reduced-motion: no-preference) {
  @view-transition {
    navigation: auto;
  }

  /* Keep page interactive while view transitions are running */
  :root {
    view-transition-name: none;
  }

  /* Have the root transition during page navigation */
  html:active-view-transition-type(page-navigation),
  html:active-view-transition-type(product-image-transition) {
    view-transition-name: root-custom;
  }

  ::view-transition {
    pointer-events: none;
  }

  html:active-view-transition-type(page-navigation) main[data-page-transition-enabled='true'] {
    view-transition-name: main-content;
  }

  html:active-view-transition-type(page-navigation) main[data-product-transition='true'][data-template*='product'] {
    view-transition-name: none;
  }

  ::view-transition-old(main-content) {
    animation: var(--view-transition-old-main-content);
  }

  ::view-transition-new(main-content) {
    animation: var(--view-transition-new-main-content);
  }

  html:active-view-transition-type(product-image-transition) {
    [data-view-transition-type='product-image-transition'] {
      view-transition-name: product-image-transition;
    }

    [data-view-transition-type='product-details'] {
      view-transition-name: product-details;
    }
  }

  ::view-transition-group(product-image-transition) {
    z-index: 1;
  }

  ::view-transition-group(product-image-transition),
  ::view-transition-group(product-details) {
    animation-duration: var(--animation-speed);
    animation-timing-function: var(--animation-easing);
  }

  ::view-transition-old(product-image-transition),
  ::view-transition-new(product-image-transition) {
    block-size: 100%;
    overflow: hidden;
    object-fit: cover;
    animation-duration: 0.25s;
    animation-timing-function: var(--animation-easing);
  }

  ::view-transition-new(product-details) {
    animation: var(--view-transition-new-main-content);
  }
}

/* Focus */
*:focus-visible {
  outline: var(--focus-outline-width) solid currentcolor;
  outline-offset: var(--focus-outline-offset);
}

@supports not selector(:focus-visible) {
  *:focus {
    outline: var(--focus-outline-width) solid currentcolor;
    outline-offset: var(--focus-outline-offset);
  }
}

.focus-inset {
  outline-offset: calc(var(--focus-outline-width) * -1);
}

/* Layout */
.content-for-layout {
  flex: 1;
}

/* Set up page widths & margins */
.page-width-wide,
.page-width-normal,
.page-width-narrow,
.page-width-content {
  --page-margin: 16px;
}

@media screen and (min-width: 750px) {
  .page-width-wide,
  .page-width-normal,
  .page-width-narrow,
  .page-width-content {
    --page-margin: 40px;
  }
}

.page-width-wide {
  /* NOTE: This results in a page width of 2400px because of how we set up margins with grid */
  --page-content-width: var(--wide-page-width);
  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));
}

.page-width-normal {
  --page-content-width: var(--normal-page-width);
  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));
}

.page-width-narrow,
.page-width-content {
  /* NOTE: This results in a page width of 1400px because of how we set up margins with grid */
  --page-content-width: var(--narrow-page-width);
  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));
}

.page-width-content {
  --page-content-width: var(--normal-content-width);
  --page-width: calc(var(--page-content-width) + (var(--page-margin) * 2));
}

/* Section width full vs. page
   The reason we use a grid to contain the section is to allow for the section to have a
   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-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);

  /* 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)
  );

  /* Offset for full-width sections to account for the page margin,
  used for Marquee — note that --util-page-margin-offset doesn't work here */
  --full-page-margin-inline-offset: calc(((100vw - var(--full-page-grid-central-column-width)) / 2) * -1);

  width: 100%;

  /* This is required to make background images work, which are <img> rendered absolutely */
  position: relative;

  /* Set up the grid */
  display: grid;
  grid-template-columns: var(--full-page-grid-with-margins);
  min-height: var(--section-min-height, 'auto');
}

/* Place all direct children in the center column by default */
.section > * {
  grid-column: 2;
}

/* Make the actual section background transparent, and instead apply it to a separate sibling element to enable stacking with hero shadow  */
.shopify-section:not(.header-section) :is(.section, .cart__summary-container) {
  background: transparent;
}

.shopify-section:not(.header-section):has(.section) {
  position: relative;
}

.shopify-section:not(.header-section) .section-background {
  content: '';
  position: absolute;
  inset: 0;
  z-index: var(--layer-section-background);
}

/* For page-width sections, all content goes in the center column */
.section--page-width > * {
  grid-column: 2;
}

/* For full-width sections, content spans all columns */
.section--full-width > * {
  grid-column: 1 / -1;
}

@media screen and (max-width: 749px) {
  .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 > * {
  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 > * {
  grid-column: 1 / -1;

  @media screen and (min-width: 750px) {
    padding-left: var(--page-margin);
    padding-right: var(--page-margin);
  }
}

/* Some section content break out to full width of the page */
.section > .force-full-width {
  grid-column: 1 / -1;
}

.section--height-small {
  --section-min-height: var(--section-height-small);
}

.section--height-medium {
  --section-min-height: var(--section-height-medium);
}

.section--height-large {
  --section-min-height: var(--section-height-large);
}

.section--height-full-screen {
  --section-min-height: 100svh;
}

.section-content-wrapper.section-content-wrapper {
  min-height: calc(var(--section-min-height, 'auto') - var(--section-height-offset, 0px));
  position: relative;
  width: 100%;
  height: 100%;
}

/* Utility */

.hidden {
  /* stylelint-disable-next-line declaration-no-important */
  display: none !important;
}

@media screen and (max-width: 749px) {
  .hidden--mobile,
  .mobile\:hidden {
    /* stylelint-disable-next-line declaration-no-important */
    display: none !important;
  }
}

@media screen and (min-width: 750px) {
  .hidden--desktop,
  .desktop\:hidden {
    /* stylelint-disable-next-line declaration-no-important */
    display: none !important;
  }
}

.hide-when-empty:empty {
  /* stylelint-disable-next-line declaration-no-important */
  display: none !important;
}

.visually-hidden:not(:focus, :active) {
  /* stylelint-disable-next-line declaration-no-important */
  position: absolute !important;
  overflow: hidden;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  clip: rect(0 0 0 0);
  /* stylelint-disable-next-line declaration-no-important */
  word-wrap: normal !important;
}

@media screen and (max-width: 749px) {
  .is-visually-hidden-mobile:not(:focus, :active) {
    /* stylelint-disable-next-line declaration-no-important */
    position: absolute !important;
    overflow: hidden;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    clip: rect(0 0 0 0);
    /* stylelint-disable-next-line declaration-no-important */
    word-wrap: normal !important;
  }
}

.contents {
  display: contents;
}

.flex {
  display: flex;
  gap: var(--gap-md);
}

.grid {
  --centered-column-number: 12;
  --full-width-column-number: 14;
  --centered: column-1 / span var(--centered-column-number);
  --full-width: column-0 / span var(--full-width-column-number);

  display: flex;
  flex-direction: column;
}

@media screen and (min-width: 750px) {
  .grid {
    display: grid;
    gap: 0;
    grid-template-columns: var(--margin-4xl) repeat(var(--centered-column-number), minmax(0, 1fr)) var(--margin-4xl);
    grid-template-areas: 'column-0 column-1 column-2 column-3 column-4 column-5 column-6 column-7 column-8 column-9 column-10 column-11 column-12 column-13';
  }
}

@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;
  }
}

.flex {
  display: flex;
  gap: var(--gap-md);
}

.flip-x {
  scale: -1 1;
}

.flip-y {
  scale: 1 -1;
}

.list-unstyled {
  margin: 0;
  padding: 0;
  list-style: none;
}

.skip-to-content-link {
  position: absolute;
  overflow: hidden;
  height: 1px;
  left: -99999px;
  /* stylelint-disable-next-line declaration-no-important */
  word-wrap: normal !important;
}

.skip-to-content-link:focus {
  z-index: var(--layer-temporary);
  overflow: auto;
  width: auto;
  height: auto;
  padding: var(--padding-lg) var(--padding-4xl);
  left: var(--margin-lg);
  top: var(--margin-lg);
  background-color: var(--color-background);
  box-shadow: 0 0 0 var(--focus-outline-offset) var(--color-background);
}

.text-left {
  --text-align: left;

  text-align: left;
}

.text-center {
  --text-align: center;

  text-align: center;
}

.text-right {
  --text-align: right;

  text-align: right;
}

.text-inherit {
  color: inherit;
}

.user-select-text {
  user-select: text;
}

.justify-left {
  justify-content: left;
}

.justify-center {
  justify-content: center;
}

.justify-right {
  justify-content: right;
}

.title--aligned-center {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.background-image-container {
  overflow: hidden;
  position: absolute;
  inset: 0;
  opacity: var(--image-opacity);
}

.background-image-container img,
.background-image-container svg {
  object-fit: cover;
  width: 100%;
  height: 100%;
}

.background-image-fit img,
.background-image-fit svg {
  object-fit: contain;
}

.svg-wrapper {
  color: currentcolor;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  width: var(--icon-size-sm);
  height: var(--icon-size-sm);
  pointer-events: none;
}

.svg-wrapper--smaller {
  width: var(--icon-size-2xs);
  height: var(--icon-size-2xs);
}

.svg-wrapper--small {
  width: var(--icon-size-xs);
  height: var(--icon-size-xs);
}

.svg-wrapper > svg {
  width: var(--icon-size-sm);
  height: var(--icon-size-sm);
}

.relative {
  position: relative;
}

/* Icons */
.icon-success,
.icon-error {
  width: var(--icon-size-md);
  height: var(--icon-size-md);
  flex-shrink: 0;
}

.icon-success {
  color: var(--color-success);
}

.icon-error {
  fill: var(--color-error);
}

.icon-default {
  fill: currentColor;
}

[data-placeholder='true'] * {
  cursor: default;
}

slideshow-component [data-placeholder='true'] * {
  cursor: grab;
}

/* Base text and heading styles */
body,
.paragraph:not(.button),
.paragraph > * {
  font-family: var(--font-paragraph--family);
  font-style: var(--font-paragraph--style);
  font-weight: var(--font-paragraph--weight);
  font-size: var(--font-paragraph--size);
  line-height: var(--font-paragraph--line-height);
  text-transform: var(--font-paragraph--case);
  -webkit-font-smoothing: antialiased;
  color: var(--color, var(--color-foreground));
}

/* 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,
  select.paragraph.paragraph {
    font-size: max(1rem, var(--font-paragraph--size));
  }
}

.paragraph > small {
  font-size: smaller;
}

/* Typography presets */

h1,
.h1.h1,
.text-block.h1 > * {
  font-family: var(--lua-font-ui);
  font-style: var(--font-h1--style);
  font-weight: var(--font-h1--weight);
  font-size: var(--font-h1--size);
  line-height: var(--font-h1--line-height);
  letter-spacing: var(--font-h1--letter-spacing);
  text-transform: var(--font-h1--case);
  color: var(--color, var(--font-h1-color));
}

@media screen and (max-width: 1200px) {
  input.h1.h1,
  textarea.h1.h1,
  select.h1.h1 {
    font-size: max(1rem, var(--font-h1--size));
  }
}

h2,
.h2.h2,
.text-block.h2 > * {
  font-family: var(--font-h2--family);
  font-style: var(--font-h2--style);
  font-weight: var(--font-h2--weight);
  font-size: var(--font-h2--size);
  line-height: var(--font-h2--line-height);
  letter-spacing: var(--font-h2--letter-spacing);
  text-transform: var(--font-h2--case);
  color: var(--color, var(--font-h2-color));
}

@media screen and (max-width: 1200px) {
  input.h2.h2,
  textarea.h2.h2,
  select.h2.h2 {
    font-size: max(1rem, var(--font-h2--size));
  }
}

h3,
.h3,
.h3.h3,
.text-block.h3 > * {
  font-family: var(--font-h3--family);
  font-style: var(--font-h3--style);
  font-weight: var(--font-h3--weight);
  font-size: var(--font-h3--size);
  line-height: var(--font-h3--line-height);
  letter-spacing: var(--font-h3--letter-spacing);
  text-transform: var(--font-h3--case);
  color: var(--color, var(--font-h3-color));
}

@media screen and (max-width: 1200px) {
  input.h3,
  textarea.h3,
  select.h3 {
    font-size: max(1rem, var(--font-h3--size));
  }
}

h4,
.h4.h4,
.text-block.h4 > * {
  font-family: var(--font-h4--family);
  font-style: var(--font-h4--style);
  font-weight: var(--font-h4--weight);
  font-size: var(--font-h4--size);
  line-height: var(--font-h4--line-height);
  letter-spacing: var(--font-h4--letter-spacing);
  text-transform: var(--font-h4--case);
  color: var(--color, var(--font-h4-color));
}

@media screen and (max-width: 1200px) {
  input.h4.h4,
  textarea.h4.h4,
  select.h4.h4 {
    font-size: max(1rem, var(--font-h4--size));
  }
}

h5,
.h5.h5,
.text-block.h5 > * {
  font-family: var(--font-h5--family);
  font-style: var(--font-h5--style);
  font-weight: var(--font-h5--weight);
  font-size: var(--font-h5--size);
  line-height: var(--font-h5--line-height);
  letter-spacing: var(--font-h5--letter-spacing);
  text-transform: var(--font-h5--case);
  color: var(--color, var(--font-h5-color));
}

@media screen and (max-width: 1200px) {
  input.h5.h5,
  textarea.h5.h5,
  select.h5.h5 {
    font-size: max(1rem, var(--font-h5--size));
  }
}

h6,
.h6.h6,
.text-block.h6 > * {
  font-family: var(--font-h6--family);
  font-style: var(--font-h6--style);
  font-weight: var(--font-h6--weight);
  font-size: var(--font-h6--size);
  line-height: var(--font-h6--line-height);
  letter-spacing: var(--font-h6--letter-spacing);
  text-transform: var(--font-h6--case);
  color: var(--color, var(--font-h6-color));
}

@media screen and (max-width: 1200px) {
  input.h6.h6,
  textarea.h6.h6,
  select.h6.h6 {
    font-size: max(1rem, var(--font-h6--size));
  }
}

:first-child:is(.h1, .h2, .h3, .h4, .h5, .h6) {
  margin-block-start: 0;
}

:last-child:is(.h1, .h2, .h3, .h4, .h5, .h6) {
  margin-block-end: 0;
}

/* Links */
a {
  --button-color: var(--color, var(--color-primary));

  color: var(--button-color);
  text-decoration-color: transparent;
  text-decoration-thickness: 0.075em;
  text-underline-offset: 0.125em;
  transition: text-decoration-color var(--animation-speed) var(--animation-easing),
    color var(--animation-speed) var(--animation-easing);
}

:is(h1, h2, h3, h4, h5, h6, p) > a:hover {
  --button-color: var(--color, var(--color-primary-hover));
}

/* Add underline to text using our paragraph styles only. */
p:not(.h1, .h2, .h3, .h4, .h5, .h6) a:where(:not(.button, .button-primary, .button-secondary)),
.rte
  :is(p, ul, ol, table):not(.h1, .h2, .h3, .h4, .h5, .h6)
  a:where(:not(.button, .button-primary, .button-secondary)) {
  text-decoration-color: currentcolor;

  &:hover {
    text-decoration-color: transparent;
    color: var(--color-primary-hover);
  }
}

.container-background-image {
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center center;
}

details[open] .summary-closed {
  display: none;
}

details:not([open]) .summary-open {
  display: none;
}

details[open] > summary .icon-animated > svg {
  transform: rotate(180deg);
}

/* iOS fix: hide the default arrow on the summary */
summary::-webkit-details-marker {
  display: none;
}

/* 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 {
  margin-top: calc(var(--header-group-height) * -1);
}

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) {
  z-index: calc(var(--layer-sticky) - 1);
}

/* Featured collection block */
.featured-collection-block {
  width: 100%;
}

/* Product grid */
.product-grid-container {
  display: block;
  width: 100%;
  padding-block: var(--padding-block-start) var(--padding-block-end);

  @media screen and (min-width: 750px) {
    display: grid;
  }
}

.product-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--product-grid-gap);
  margin: auto;
  padding: 0;
  list-style: none;
}

@media screen and (min-width: 750px) {
  .product-grid {
    grid-template-columns: var(--product-grid-columns-desktop);
  }
}

.product-grid :is(h3, p) {
  margin: 0;
}

.product-grid__item {
  border: var(--product-card-border-width) solid rgb(var(--color-border-rgb) / var(--product-card-border-opacity));
}

.product-grid--organic[product-grid-view='default'] .product-grid__item {
  height: fit-content;
}

.product-grid__card.product-grid__card {
  display: flex;
  flex-flow: column nowrap;
      gap: 18px;
  align-items: var(--product-card-alignment);
  text-decoration: none;
  color: var(--color, var(--color-foreground));
  padding-block: var(--padding-block-start) var(--padding-block-end);
  padding-inline: var(--padding-inline-start) var(--padding-inline-end);
  overflow: hidden;
}

[product-grid-view='zoom-out'] .product-grid__card {
  row-gap: var(--padding-xs);
}

[product-grid-view='default'] {
  --product-grid-gap: 16px;
  --padding-block-start: 24px;
  --padding-block-end: 24px;
  --padding-inline-start: 0px;
  --padding-inline-end: 0px;
}

[product-grid-view='default'] .product-grid__item {
  padding-block: 0;
}

[product-grid-view='mobile-single'],
.product-grid-mobile--large {
  @media screen and (max-width: 749px) {
    grid-template-columns: 1fr;
  }
}

.product-grid__card .group-block > * {
  @media screen and (max-width: 749px) {
    flex-direction: column;
  }
}

ul[product-grid-view='zoom-out'] .product-grid__card > * {
  display: none;
}

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) {
  display: none;
}

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-view-zoom-out--details {
  display: none;
}

.product-grid-view-zoom-out--details .h4,
.product-grid-view-zoom-out--details span,
.product-grid-view-zoom-out--details s {
  font-size: var(--font-size--xs);
  font-family: var(--font-paragraph--family);
}

.product-grid-view-zoom-out--details span {
  font-weight: 500;
}

.product-grid-view-zoom-out--details .h4 {
  line-height: 1.3;
  font-weight: 400;
}

.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 > * > * {
  line-height: 1.2;
}

@media (prefers-reduced-motion: no-preference) {
  :root:active-view-transition-type(product-grid) {
    details[open] floating-panel-component {
      view-transition-name: panel-content;

      .checkbox *,
      .facets__pill-label {
        transition: none;
      }

      .facets--vertical & {
        view-transition-name: none;
      }
    }

    .product-grid {
      view-transition-name: product-grid;
    }

    footer {
      view-transition-name: footer;
    }

    .product-grid__item,
    floating-panel-component {
      transition: none;
    }
  }
}

::view-transition-group(panel-content) {
  z-index: 1;
}

::view-transition-new(product-grid) {
  animation-delay: 150ms;
  animation-name: fadeInUp;
  animation-duration: var(--animation-speed);
  animation-timing-function: var(--animation-easing);
}

results-list[initialized] {
  .product-grid__item {
    transition: opacity var(--animation-speed) var(--animation-easing),
      transform var(--animation-speed) var(--animation-easing);

    @starting-style {
      opacity: 0;
      transform: translateY(10px);
    }
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(10px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Collection and product list cards have equal heights */
:is(.product-grid__item, .resource-list__item) .product-card {
  display: grid;
  height: 100%;
}

/* Video background */
.video-background,
.video-background * {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
}

.video-background--cover * {
  object-fit: cover;
}

.video-background--contain * {
  object-fit: contain;
}

.text-block {
  width: 100%;
}

.text-block > *:first-child,
.text-block > *:first-child:empty + * {
  margin-block-start: 0;
}

.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 + * {
  margin-block-start: 0;
}

/* Dialog */
.dialog-modal {
  border: none;
  box-shadow: var(--shadow-popover);

  @media screen and (min-width: 750px) {
    border-radius: var(--style-border-radius-popover);
    max-width: var(--normal-content-width);
  }

  @media screen and (max-width: 749px) {
    max-width: 100%;
    max-height: 100%;
    height: 100dvh;
    width: 100dvw;
    padding: var(--padding-md);
  }
}

.dialog-modal::backdrop {
  transition: backdrop-filter var(--animation-speed) var(--animation-easing);
  backdrop-filter: brightness(1);
  background: rgb(var(--backdrop-color-rgb) / var(--backdrop-opacity));
}

.dialog-modal[open] {
  animation: elementSlideInTop var(--animation-speed) var(--animation-easing) forwards;

  &::backdrop {
    animation: backdropFilter var(--animation-speed) var(--animation-easing) forwards;
    transition: opacity var(--animation-speed) var(--animation-easing);
  }
}

.dialog-modal.dialog-closing {
  animation: elementSlideOutTop var(--animation-speed) var(--animation-easing) forwards;

  &::backdrop {
    opacity: 0;
  }
}

/* stylelint-disable value-keyword-case */
.dialog-drawer {
  --dialog-drawer-opening-animation: move-and-fade;
  --dialog-drawer-closing-animation: move-and-fade;
}

.dialog-drawer--right {
  --dialog-drawer-opening-animation: move-and-fade;
  --dialog-drawer-closing-animation: move-and-fade;
}
/* stylelint-enable value-keyword-case */

.dialog-drawer[open] {
  --start-x: var(--custom-transform-from, 100%);
  --end-x: var(--custom-transform-to, 0px);
  --start-opacity: 1;

  animation: var(--dialog-drawer-opening-animation) var(--animation-speed) var(--animation-easing) forwards;
}

.dialog-drawer[open].dialog-closing {
  --start-x: 0px;
  --end-x: 100%;
  --start-opacity: 1;
  --end-opacity: 1;

  animation: var(--dialog-drawer-closing-animation) var(--animation-speed) var(--animation-easing);
}

.dialog-drawer--right[open] {
  --start-x: -100%;
  --start-opacity: 1;
}

.dialog-drawer--right[open].dialog-closing {
  --start-x: 0px;
  --end-x: -100%;
  --start-opacity: 1;
  --end-opacity: 1;

  animation: var(--dialog-drawer-closing-animation) var(--animation-speed) var(--animation-easing);
}

/* Buttons */
.button,
.button-secondary,
button.shopify-payment-button__button--unbranded {
  --text-align: center;

  display: grid;
  align-content: center;
  text-decoration: none;
  text-align: var(--text-align);
  color: var(--button-color);
  appearance: none;
  background-color: var(--button-background-color);
  border: none;
  font-family: var(--font-paragraph--family);
  font-style: var(--font-paragraph--style);
  font-size: var(--font-paragraph--size);
  line-height: var(--font-paragraph--line-height);
  margin-block: 0;
  transition: color var(--animation-speed) var(--animation-easing),
    box-shadow var(--animation-speed) var(--animation-easing),
    background-color var(--animation-speed) var(--animation-easing);
  cursor: pointer;
  width: fit-content;
  box-shadow: inset 0 0 0 var(--button-border-width) var(--button-border-color);
  padding-block: var(--button-padding-block);
  padding-inline: var(--button-padding-inline);
}

.button {
  font-family: var(--button-font-family-primary);
  text-transform: var(--button-text-case-primary);
  border-radius: var(--style-border-radius-buttons-primary);
}

.button:not(.button-secondary, .button-unstyled) {
  outline-color: var(--button-background-color);
}

.button-secondary {
  font-family: var(--button-font-family-secondary);
  text-transform: var(--button-text-case-secondary);
  border-radius: var(--style-border-radius-buttons-secondary);
}

button.shopify-payment-button__button--unbranded {
  font-family: var(--button-font-family-primary);
  text-transform: var(--button-text-case-primary);
}

textarea,
input {
  background-color: var(--color-input-background);
  border-color: var(--color-input-border);
}

textarea::placeholder,
input::placeholder {
  color: var(--color-input-text);
}

textarea:not(:placeholder-shown)::placeholder,
input:not(:placeholder-shown)::placeholder {
  opacity: 0;
}

/* The declaration above is messing with buttons that have an attribute of hidden as it overwrites the display value */
.button[hidden] {
  display: none;
}

.button[aria-disabled='true'],
.button-secondary[aria-disabled='true'],
.button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.button,
button.shopify-payment-button__button--unbranded {
  --button-color: var(--color-primary-button-text);
  --button-background-color: var(--color-primary-button-background);
  --button-border-color: var(--color-primary-button-border);
  --button-border-width: var(--style-border-width-primary);
}

.button:hover,
button.shopify-payment-button__button--unbranded:hover:not([disabled]) {
  --button-color: var(--color-primary-button-hover-text);
  --button-background-color: var(--color-primary-button-hover-background);
  --button-border-color: var(--color-primary-button-hover-border);
}

.button-secondary {
  --button-color: var(--color-secondary-button-text);
  --button-background-color: var(--color-secondary-button-background);
  --button-border-color: var(--color-secondary-button-border);
  --button-border-width: var(--style-border-width-secondary);
}

.button-secondary:hover {
  --button-color: var(--color-secondary-button-hover-text);
  --button-background-color: var(--color-secondary-button-hover-background);
  --button-border-color: var(--color-secondary-button-hover-border);
}

/* Needed to override the default Shopify styles */
button.shopify-payment-button__button--unbranded:hover:not([disabled]) {
  background-color: var(--button-background-color);
}

.button-unstyled {
  display: block;
  padding: 0;
  background-color: inherit;
  color: inherit;
  border: 0;
  border-radius: 0;
  overflow: hidden;
  box-shadow: none;
  font-family: var(--font-paragraph--family);
  font-style: var(--font-paragraph--style);
  font-size: var(--font-paragraph--size);
}

.button-unstyled:hover {
  background-color: inherit;
}

.button-unstyled--with-icon {
  color: var(--color-foreground);
  display: flex;
  gap: var(--gap-2xs);
  align-items: center;
}

.button-unstyled--transparent {
  background-color: transparent;
  box-shadow: none;
}

/* Show more */

.show-more__button {
  color: var(--color-primary);
  cursor: pointer;
}

.show-more__button:hover {
  @media screen and (min-width: 750px) {
    color: var(--color-primary-hover);
  }
}

.show-more__label {
  text-align: start;
  font-size: var(--font-size--body-md);
  font-family: var(--font-paragraph--family);
}

.show-more__button .svg-wrapper {
  width: var(--icon-size-xs);
  height: var(--icon-size-xs);
}

.show-more[data-expanded='true'] .show-more__label--more,
.show-more[data-expanded='false'] .show-more__label--less {
  display: none;
}

.link {
  display: inline-block;
  text-align: center;
}

shopify-accelerated-checkout,
shopify-accelerated-checkout-cart {
  --shopify-accelerated-checkout-button-border-radius: var(--style-border-radius-buttons-primary);
  --shopify-accelerated-checkout-button-block-size: var(--height-buy-buttons);
}

.product-form-buttons:has(..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);
}

/* Collapsible row */

.icon-caret svg {
  transition: transform var(--animation-speed) var(--animation-easing);
}

.icon-caret--forward svg {
  transform: rotate(-90deg);
}

.icon-caret--backward svg {
  transform: rotate(90deg);
}

summary {
  display: flex;
  align-items: center;
  cursor: pointer;
  list-style: none;
  padding-block: var(--padding-sm);
}

summary:hover {
  color: var(--color-primary-hover);
}

summary .svg-wrapper {
  margin-inline-start: auto;
  height: var(--icon-size-xs);
  width: var(--icon-size-xs);
  transition: transform var(--animation-speed) var(--animation-easing);
}

/* Shared plus/minus icon animations */
summary .icon-plus :is(.horizontal, .vertical),
.show-more__button .icon-plus :is(.horizontal, .vertical) {
  transition: transform var(--animation-speed) var(--animation-easing);
  transform: rotate(0deg);
  transform-origin: 50% 50%;
  opacity: 1;
}

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,
.show-more:where([data-expanded='true']) .show-more__button .icon-plus .vertical {
  transform: rotate(90deg);
  opacity: 0;
}

/* Product Media */
media-gallery {
  display: block;
  width: 100%;
}

:where(media-gallery, .product-grid__item) {
  .media-gallery__grid {
    grid-template-columns: 1fr;
    gap: var(--image-gap);
  }
}

.product-media-gallery__slideshow--single-media slideshow-container {
  @media screen and (max-width: 749px) {
    grid-area: unset;
  }
}

:not(.dialog-zoomed-gallery) > .product-media-container {
  /* width and overflow forces children to shrink to parent width */
  --slide-width: round(up, 100%, 1px);

  display: flex;
  aspect-ratio: var(--gallery-aspect-ratio, var(--media-preview-ratio));
  max-height: var(--constrained-height);
  width: 100%;

  /* Relative position needed for video and 3d models */
  position: relative;
  overflow: hidden;

  &:where(.constrain-height) {
    /* arbitrary offset value based on average theme spacing and header height */
    --viewport-offset: 400px;
    --constrained-min-height: 300px;
    --constrained-height: max(var(--constrained-min-height), calc(100vh - var(--viewport-offset)));

    margin-right: auto;
    margin-left: auto;
  }
}

media-gallery:where(.media-gallery--grid) .media-gallery__grid {
  display: none;
}

media-gallery.media-gallery--grid .media-gallery__grid .product-media-container {
  /* Needed for safari to stretch to full grid height */
  height: 100%;
}

.product-media :is(deferred-media, product-model) {
  position: absolute;
}

@media screen and (max-width: 749px) {
  .product-media-container.constrain-height {
    max-height: none;
  }
}

@media screen and (min-width: 750px) {
  .product-media-container.constrain-height {
    --viewport-offset: var(--header-height, 100px);
    --constrained-min-height: 500px;
  }

  body:has(header-component[transparent]) .product-media-container.constrain-height {
    --viewport-offset: 0px;
  }

  .media-gallery--two-column .media-gallery__grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .media-gallery--large-first-image .product-media-container:first-child,
  .media-gallery--two-column .product-media-container:only-child {
    /* First child spans 2 columns */
    grid-column: span 2;
  }

  /* Display grid view as a carousel on mobile, grid on desktop */
  media-gallery:is(.media-gallery--grid) slideshow-component {
    display: none;
  }

  media-gallery:where(.media-gallery--grid) .media-gallery__grid {
    display: grid;
  }
}

.product-media-container--model {
  /* Usefull when view in your space is shown */
  flex-direction: column;
}

.shopify-model-viewer-ui__controls-area {
  bottom: calc(var(--minimum-touch-target) + var(--padding-sm));
}

.product-media-container img {
  aspect-ratio: inherit;
  object-fit: contain;
}

.product-media-container.media-fit-contain img {
  object-position: center center;
}

.product-media-container.media-fit {
  --product-media-fit: cover;

  img {
    object-fit: var(--product-media-fit);
  }
}

/* Media gallery zoom dialog */
.product-media-container__zoom-button {
  position: absolute;
  width: 100%;
  height: 100%;
  z-index: var(--layer-flat);
  cursor: zoom-in;
  background-color: transparent;

  &:hover {
    background-color: transparent;
  }
}

zoom-dialog dialog {
  width: 100vw;
  height: 100vh;
  border: none;
  margin: 0;
  padding: 0;
  max-width: 100%;
  max-height: 100%;
  background: #fff;
  opacity: 0;
  transition: opacity var(--animation-speed) var(--animation-easing);
  scrollbar-width: none;

  &[open] {
    opacity: 1;
  }

  @media (prefers-reduced-motion: no-preference) {
    scroll-behavior: smooth;
  }

  &::backdrop {
    background: transparent;
  }
}

/* Animate the UI elements in only after the view transition is complete */
.close-button {
  position: fixed;
  top: var(--margin-lg);
  right: var(--margin-lg);
  width: var(--minimum-touch-target);
  height: var(--minimum-touch-target);
  z-index: var(--layer-flat);
  background-color: transparent;
  display: flex;
  align-items: center;
  justify-content: center;

  /* For the outline radius */
  border-radius: 50%;
}

/* This triggers iOS < 16.4. The outline bug is not recognized as a lack of @supports */

@supports not (background-color: rgb(from red 150 g b / alpha)) {
  /**
    There is a bug in safari < 16.4 that causes the outline to not follow the elements border radius. This is a workaround.
    Using element selector to increase specificity.
  **/

  .close-button:focus-visible {
    outline: none;
    overflow: visible;
  }

  .close-button:focus-visible::after {
    content: '';
    position: absolute;
    inset: calc(-1 * var(--focus-outline-offset));
    border: var(--focus-outline-width) solid currentColor;
    border-radius: 50%;
    display: inherit;
  }
}

.dialog--closed .close-button {
  animation: elementSlideOutBottom calc(var(--animation-speed) * 0.5) var(--animation-easing) forwards;
}

.dialog-thumbnails-list-container {
  position: fixed;
  width: 100%;
  bottom: 0;
  display: flex;
  z-index: var(--layer-raised);
}

.dialog-thumbnails-list {
  position: relative;
  display: inline-flex;
  flex-direction: row;
  gap: 8px;
  bottom: 0;
  overflow-x: auto;
  opacity: 0;
  padding: var(--padding-lg);
  margin-inline: auto;
  scrollbar-width: none;
  animation: thumbnailsSlideInBottom calc(var(--animation-speed) * 0.75) var(--animation-easing) forwards;
  animation-delay: calc(var(--animation-speed) * 1.5);
}

.dialog--closed .dialog-thumbnails-list {
  animation: thumbnailsSlideOutBottom var(--animation-speed) var(--animation-easing) forwards;
}

@media screen and (min-width: 750px) {
  .dialog-thumbnails-list {
    position: fixed;
    flex-direction: column;
    inset: 50% var(--margin-lg) auto auto;
    right: 0;
    max-height: calc(100vh - 200px);
    overflow-y: auto;
    animation: thumbnailsSlideInTop calc(var(--animation-speed) * 0.5) var(--animation-easing) forwards;
    animation-delay: calc(var(--animation-speed) * 2);
  }

  .dialog--closed .dialog-thumbnails-list {
    animation: thumbnailsSlideOutTop var(--animation-speed) var(--animation-easing) forwards;
  }
}

.dialog-thumbnails-list__thumbnail {
  width: var(--thumbnail-width);
  height: auto;
  transition: transform var(--animation-speed) var(--animation-easing);
  flex-shrink: 0;
  border-radius: var(--media-radius);

  img {
    height: 100%;
    object-fit: cover;
    border-radius: var(--media-radius);
    aspect-ratio: var(--aspect-ratio);
  }

  &:is([aria-selected='true']) {
    outline: var(--focus-outline-width) solid currentcolor;
    outline-offset: calc(var(--focus-outline-offset) / 2);
    border: var(--style-border-width) solid rgb(var(--color-border-rgb) / var(--media-border-opacity));
  }
}

.close-button:hover {
  background-color: transparent;
  opacity: 0.8;
}

.close-button svg {
  width: var(--icon-size-xs);
  height: var(--icon-size-xs);
}

/* Product media */
.product-media {
  display: flex;
  flex: 1;
}

/* If the product media is already providing an image cover, hide images provided by sibling deferred-media */
.product-media__image ~ * .deferred-media__poster-image {
  display: none;
}

/* If the product media is playing, hide the preview image */
.product-media-container:has(.deferred-media__playing) .product-media__image {
  opacity: 0;
  transition: opacity var(--animation-speed) var(--animation-easing);
}

/* Deferred media & Product model  */
:is(product-model, deferred-media) {
  /* Height needed to make sure when it's set to be stretched, it takes the full height */
  height: 100%;
  width: 100%;
  position: relative;
}

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) {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;

  /* Required to make sure the absolute position respects the padding of the wrapper: */
  padding: inherit;
}

slideshow-slide .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {
  bottom: var(--padding-sm);
  right: var(--padding-sm);
}

.dialog-zoomed-gallery .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {
  /* Move the controls above the thumbnails. Need to calculate the height of the thumbnails list */
  bottom: calc(var(--thumbnail-width) / var(--media-preview-ratio) + var(--padding-lg) * 2);
  right: var(--padding-lg);
}

@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 {
    /* 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 {
    /* Position the controls just above the counter */
    bottom: calc(var(--minimum-touch-target) + var(--padding-sm));
  }

  .dialog-zoomed-gallery .shopify-model-viewer-ui__controls-area.shopify-model-viewer-ui__controls-area {
    /* Move the controls up to match the padding on the thumbnails */
    bottom: var(--padding-lg);

    /* Move the controls to the left of the thumbnails list on the right */
    right: calc(var(--thumbnail-width) + var(--padding-lg) * 2);
  }
}

:is(deferred-media, .video-placeholder-wrapper).border-style {
  /* Apply the border radius to the video */
  overflow: hidden;
}

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;
    outline-offset: var(--focus-outline-offset);
  }

  @supports not selector(:focus-visible) {
    &:has(:focus) {
      outline: var(--focus-outline-width) solid currentcolor;
      outline-offset: var(--focus-outline-offset);
    }
  }
}

.deferred-media__poster-button {
  width: 100%;
  height: 100%;
  aspect-ratio: var(--video-aspect-ratio, auto);
}

.deferred-media__poster-button.deferred-media__playing {
  opacity: 0;
  transition: opacity 0.3s ease;
}

deferred-media img {
  height: 100%;
  object-fit: cover;
  transition: opacity 0.3s ease;
}

deferred-media iframe {
  width: 100%;
  height: 100%;
  border: none;
  aspect-ratio: var(--size-style-aspect-ratio, auto);
}

deferred-media[data-media-loaded] img {
  opacity: 0;
}

.deferred-media__poster-icon,
.video-placeholder-wrapper__poster-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.deferred-media__poster-icon svg,
.video-placeholder-wrapper__poster-icon svg {
  width: var(--button-size);
  height: var(--button-size);
  color: var(--color-white);
  filter: drop-shadow(var(--shadow-button));

  &:hover {
    color: rgb(var(--color-white-rgb) / var(--opacity-80));
  }

  @media screen and (min-width: 750px) {
    width: 4rem;
    height: 4rem;
  }
}

deferred-media[class] :is(.deferred-media__poster-button img, .deferred-media__poster-button ~ video) {
  /* only apply this on the video block not product media */
  object-fit: cover;
  height: 100%;
  aspect-ratio: var(--size-style-aspect-ratio, auto);
}

.button-shopify-xr {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: var(--padding-md);
}

.button-shopify-xr > svg {
  width: var(--icon-size-sm);
  height: var(--icon-size-sm);
  margin-inline-end: var(--margin-md);
}

.button-shopify-xr[data-shopify-xr-hidden] {
  display: none;
}

/* 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-height: 16px;
  --min-width: 16px;

  /* mobile values */
  --scaling-factor: 0.5;
  --max-swatch-size: 28px;
  --max-pill-size: 20px;
  --max-filter-size: 32px;

  /* From the settings */
  --offset-swatch-width: calc(var(--variant-picker-swatch-width-unitless) - var(--min-width-unitless));
  --offset-swatch-height: calc(var(--variant-picker-swatch-height-unitless) - var(--min-height-unitless));

  /**
    Offset values are obtained from the following formulas:
      offset-width = width - min-width
      offset-height = height - min-height

    The offset-scaled-width and heigth are obtained by extending the line from
    [min,min] to [W,H] and taking the intersection with a square that starts at
    [min,min] and ends at [max,max].

    The extending line forms right angle triangles with the [min,min]->[max,max]
    box that enable us to derive the following formulas

    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-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)
  );

  /* 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)
  );

  display: block;
  background: var(--swatch-background);
  background-position: var(--swatch-focal-point, center);
  border-radius: var(--variant-picker-swatch-radius);
  border: var(--style-border-swatch-width) var(--style-border-swatch-style) var(--color-border);
  width: var(--swatch-width);
  height: var(--swatch-height);

  /* This is different than `background-size: cover` because we use `box-sizing: border-box`,
   * doing it like makes the background clip under the border without repeating.
   */
  background-size: var(--swatch-width) var(--swatch-height);

  &.swatch--unavailable {
    border-style: dashed;
  }

  &.swatch--unscaled {
    /* for when you want fixed sizing (e.g. pdp) */
    --swatch-width: var(--variant-picker-swatch-width);
    --swatch-height: var(--variant-picker-swatch-height);
  }

  &.swatch--filter {
    --swatch-width: var(--max-filter-size);
    --swatch-height: var(--max-filter-size);

    border-radius: var(--variant-picker-swatch-radius);
  }

  &.swatch--pill {
    --swatch-width: var(--max-pill-size);
    --swatch-height: var(--max-pill-size);

    border-radius: var(--variant-picker-swatch-radius);
  }

  /* swatches in filters and pills always have a border  */
  &.swatch--filter,
  &.swatch--pill {
    --style-border-swatch-width: var(--variant-picker-border-width);
    --style-border-swatch-style: var(--variant-picker-border-style);
    --color-border: rgb(var(--color-foreground-rgb) / var(--variant-picker-border-opacity));
  }

  &.swatch--variant-image {
    background-size: cover;
  }

  @media screen and (min-width: 750px) {
    /* desktop values */
    --max-swatch-size: 32px;
    --max-pill-size: 16px;
    --max-filter-size: 28px;
    --scaling-factor: 0.65;
  }
}

.variant-picker .variant-option--buttons label:has(.swatch) {
  border-radius: var(--variant-picker-swatch-radius);
}

.sticky-content {
  position: sticky;
  top: var(--sticky-header-offset, 0);
  z-index: var(--layer-flat);
}

@media screen and (min-width: 750px) {
  .sticky-content--desktop,
  .sticky-content--desktop.full-height--desktop > .group-block {
    position: sticky;
    top: var(--sticky-header-offset, 0);
    z-index: var(--layer-flat);
  }
}

.price,
.compare-at-price,
.unit-price {
  white-space: nowrap;
}

.unit-price {
  display: block;
  font-size: min(0.85em, var(--font-paragraph--size));
  color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));
}

.tax-note.tax-note.tax-note {
  font-size: min(0.85em, var(--font-paragraph--size));
  font-weight: var(--font-paragraph--weight);
  color: rgb(var(--color-foreground-rgb) / var(--opacity-subdued-text));
}

product-price.text-block:is(.h1, .h2, .h3, .h4, .h5, .h6) > *:not(.tax-note) {
  margin-block: 0;
}

.compare-at-price {
  opacity: 0.4;
  text-decoration-line: line-through;
  text-decoration-thickness: 1.5px;
}

.card-gallery {
  position: relative;
}

@container (max-width: 70px) {
  .card-gallery:hover .quick-add__button {
    display: none;
  }
}

/* Drawer */
.drawer {
  background-color: var(--color-background);
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: var(--sidebar-width);
  z-index: var(--layer-raised);
  transform: translateX(-120%);
  transition: transform var(--animation-speed) var(--animation-easing);
}

.drawer[data-open='true'] {
  transform: translateX(0);
}

.drawer-toggle {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
}

.drawer__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--drawer-header-block-padding) var(--drawer-inline-padding);
}

.drawer__title {
  font-size: var(--font-h2--size);
  margin: 0;
}

.drawer__close {
  width: var(--minimum-touch-target);
  height: var(--minimum-touch-target);
}

.drawer__content {
  display: block;
  padding: var(--drawer-content-block-padding) var(--drawer-inline-padding);
  width: 100%;
}

/* Background overlay */
.background-overlay {
  position: relative;

  &::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: var(--background-overlay-color, rgb(0 0 0 / 15%));
  }
}

/* Spacing style */
.spacing-style {
  --spacing-scale: var(--spacing-scale-md);

  @media screen and (min-width: 990px) {
    --spacing-scale: var(--spacing-scale-default);
  }

  /* Must disable this, when you use these with calc and another unit type, things break — see logo.liquid */
  /* stylelint-disable length-zero-no-unit */
  --padding-block: 0px;
  --padding-block-start: var(--padding-block, 0px);
  --padding-block-end: var(--padding-block, 0px);
  --padding-inline: 0px;
  --padding-inline-start: var(--padding-inline, 0px);
  --padding-inline-end: var(--padding-inline, 0px);
  --margin-block: 0px;
  --margin-block-start: var(--margin-block, 0px);
  --margin-block-end: var(--margin-block, 0px);
  --margin-inline: 0px;
  --margin-inline-start: var(--margin-inline, 0px);
  --margin-inline-end: var(--margin-inline, 0px);
}

.spacing-style,
.inherit-spacing {
  padding-block: calc(var(--padding-block-start) + var(--section-top-offset, 0px)) var(--padding-block-end);
  padding-inline: var(--padding-inline-start) var(--padding-inline-end);
  margin-block: var(--margin-block-start) var(--margin-block-end);
  margin-inline: var(--margin-inline-start) var(--margin-inline-end);
}


/* Size style */
.size-style {
  width: var(--size-style-width-mobile, var(--size-style-width));
  height: var(--size-style-height-mobile, var(--size-style-height));

  @media screen and (min-width: 750px) {
    width: var(--size-style-width);
    height: var(--size-style-height);
  }
}

/* Custom Typography style */
.custom-typography,
.custom-typography > * {
  font-family: var(--font-family);
  font-weight: var(--font-weight);
  text-transform: var(--text-transform);
  text-wrap: var(--text-wrap);
  line-height: var(--line-height);
  letter-spacing: var(--letter-spacing);
}

.custom-typography {
  h1 {
    line-height: var(--line-height--display, var(--line-height));
  }

  h2,
  h3,
  h4 {
    line-height: var(--line-height--heading, var(--line-height));
  }

  p {
    line-height: var(--line-height--body, var(--line-height));
  }
}

.custom-font-size,
.custom-font-size > * {
  font-size: var(--font-size);
}

.custom-font-weight,
.custom-font-weight > * {
  font-weight: var(--weight);
}

/* Border override style */
.border-style {
  border-width: var(--border-width);
  border-style: var(--border-style);
  border-color: var(--border-color);
  border-radius: var(--border-radius);
}

/* Gap scaling style */
.gap-style,
.layout-panel-flex {
  --gap-scale: var(--spacing-scale-md);

  @media screen and (min-width: 990px) {
    --gap-scale: var(--spacing-scale-default);
  }
}

.layout-panel-flex {
  display: flex;
  gap: var(--gap);
  height: 100%;
}

.layout-panel-flex--row {
  flex-flow: row var(--flex-wrap);
  justify-content: var(--horizontal-alignment);
  align-items: var(--vertical-alignment);
}

.layout-panel-flex--column {
  flex-flow: column var(--flex-wrap);
  align-items: var(--horizontal-alignment);
  justify-content: var(--vertical-alignment);
}

@media screen and (max-width: 749px) {
  .mobile-column {
    flex-flow: column nowrap;
    align-items: var(--horizontal-alignment);
    justify-content: var(--vertical-alignment-mobile);
  }

  .layout-panel-flex--row:not(.mobile-column) {
    flex-wrap: var(--flex-wrap-mobile);

    > .menu {
      flex: 1 1 min-content;
    }

    > .text-block {
      flex: 1 1 var(--max-width--display-tight);
    }

    > .image-block {
      flex: 1 1 var(--size-style-width-mobile-min);
    }

    > .button {
      flex: 0 0 fit-content;
    }
  }
}

@media (min-width: 750px) {
  .layout-panel-flex {
    flex-direction: var(--flex-direction);
  }
}

/* Form fields */
.field {
  position: relative;
  width: 100%;
  display: flex;
  transition: box-shadow var(--animation-speed) ease;
}

.field__input {
  flex-grow: 1;
  text-align: left;
  border-radius: var(--style-border-radius-inputs);
  transition: box-shadow var(--animation-speed) ease, background-color var(--animation-speed) ease;
  padding: var(--input-padding);
  box-shadow: var(--input-box-shadow);
  background-color: var(--color-input-background);
  color: var(--color-input-text);
  border: none;
  outline: none;
  font-size: var(--font-paragraph--size);

  &:autofill {
    background-color: var(--color-input-background);
    color: var(--color-input-text);
  }
}

.field__input:is(:focus, :hover) {
  box-shadow: var(--input-box-shadow-focus);
  background-color: var(--color-input-hover-background);
}

.field__input--button-radius {
  border-radius: var(--style-border-radius-buttons-primary);
}

.field__input--button-padding {
  padding-inline: var(--padding-3xl);
}

.field__label {
  color: rgb(var(--color-input-text-rgb) / var(--opacity-80));
  font-size: var(--font-paragraph--size);
  left: var(--input-padding-x);
  top: 50%;
  transform: translateY(-50%);
  margin-bottom: 0;
  pointer-events: none;
  position: absolute;
  transition: top var(--animation-speed) ease, font-size var(--animation-speed) ease;
}

/* RTE styles */
.rte,
.shopify-policy__title {
  :is(h1, h2, h3, h4, h5, h6) {
    margin-block: clamp(1.5rem, 1em * 3.3, 2.5rem) clamp(1rem, 1em * 0.25, 2rem);
  }

  :first-child:is(p, h1, h2, h3, h4, h5, h6),
  :first-child:empty + :is(p, h1, h2, h3, h4, h5, h6) {
    margin-block-start: 0;
  }

  ul,
  ol {
    margin-block-start: 0;
    padding-inline-start: 1.5em;
  }

  /* Only apply margin-block-end to the higher level list, not nested lists */
  :is(ul, ol):not(:is(ul, ol) :is(ul, ol)) {
    margin-block-end: 1em;
  }

  blockquote {
    margin-inline: 1.5em 2.3em;
    margin-block: 3.8em;
    padding-inline-start: 0.8em;
    border-inline-start: 1.5px solid rgb(var(--color-foreground-rgb) / var(--opacity-25));
    font-style: italic;
    font-weight: 500;
  }

  .rte-table-wrapper {
    overflow-x: auto;
  }

  table {
    /* stylelint-disable-next-line declaration-no-important */
    width: 100% !important;
    border-collapse: collapse;
  }

  tr:not(:has(td)),
  thead {
    background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5));
    font-weight: bold;
    text-transform: uppercase;
  }

  tr:has(td) {
    border-bottom: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-10));
  }

  th,
  td {
    text-align: start;
    padding-inline: var(--padding-md);
    padding-block: var(--padding-sm);
  }
}

.shopify-policy__container {
  padding-block: var(--padding-xl);
}

.checkbox {
  --checkbox-size: 22px;
  --checkbox-top: 50%;
  --checkbox-left: 1.5px;
  --checkbox-offset: 3px;
  --checkbox-border-radius: 7px;
  --checkbox-label-padding: 8px;
  --checkbox-path-opacity: 0;
  --checkbox-cursor: pointer;
  --checkbox-border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55));

  position: relative;
  display: flex;
  align-items: center;

  @media screen and (min-width: 750px) {
    --checkbox-size: 16px;
    --checkbox-border-radius: 5px;
    --checkbox-label-padding: 6px;
  }

  &:has(.checkbox__input:checked) {
    --checkbox-path-opacity: 1;
  }

  &.checkbox--disabled {
    --checkbox-cursor: not-allowed;
  }
}

.checkbox__input {
  position: absolute;
  opacity: 0;
  margin: 0;
  width: var(--checkbox-size);
  height: var(--checkbox-size);

  /* Outline is on the SVG instead, to allow it to have border-radius */
  &:focus-visible {
    outline: none;
  }

  &:focus-visible + .checkbox__label .icon-checkmark {
    outline: var(--focus-outline-width) solid currentcolor;
    outline-offset: var(--focus-outline-offset);
  }

  &:checked + .checkbox__label .icon-checkmark {
    background-color: var(--color-foreground);
    border-color: var(--color-foreground);
  }

  &:disabled + .checkbox__label .icon-checkmark {
    background-color: var(--input-disabled-background-color);
    border-color: var(--input-disabled-border-color);
  }
}

.checkbox__label {
  position: relative;
  display: inline-flex;
  cursor: var(--checkbox-cursor);
  line-height: var(--checkbox-size);
  min-width: var(--minimum-touch-target);
}

.checkbox .icon-checkmark {
  height: var(--checkbox-size);
  width: var(--checkbox-size);
  flex-shrink: 0;
  border: var(--checkbox-border);
  border-radius: var(--checkbox-border-radius);
  background-color: var(--color-background);
}

.checkbox__label-text {
  padding-inline-start: var(--checkbox-label-padding);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.checkbox .icon-checkmark path {
  stroke: var(--color-background);
  opacity: var(--checkbox-path-opacity);
  transition: opacity var(--animation-speed) var(--animation-easing);
}

.checkbox__input:disabled + .checkbox__label {
  color: var(--input-disabled-text-color);
}

/* Add to cart button */
.button[id^='BuyButtons-ProductSubmitButton-'] {
  position: relative;
  overflow: hidden;
}

/* Cart bubble */
.cart-bubble {
  --cart-padding: 0.2em;

  position: relative;
  width: 20px;
  aspect-ratio: 1;
  border-radius: 50%;
  border-width: 0;
  display: flex;
  line-height: normal;
  align-items: center;
  justify-content: center;
  color: var(--color-primary-button-text);
  padding-inline: var(--cart-padding);
}

.cart-bubble__background {
  position: absolute;
  inset: 0;
  background-color: var(--color-primary-button-background);
  border-radius: var(--style-border-radius-lg);
}

.cart-bubble__text {
  font-size: var(--font-size--3xs);
  z-index: var(--layer-flat);
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Quantity selector */
.quantity-selector {
  --quantity-selector-width: 124px;
  min-height: 62px;

  display: flex;
  justify-content: space-between;
  align-items: center;
  color: var(--color-input-text);
  background-color: var(--color-input-background);
  border: 1px solid #E6E6E6;
  border-radius: var(--style-border-radius-inputs);
  box-shadow: 0 8px 18px rgba(0,0,0,.05);
  flex: 1 1 var(--quantity-selector-width);
  align-self: stretch;
  transition: background-color var(--animation-speed) var(--animation-easing);

  &:hover {
  background-color: #FFFFFF;
  border-color: #24C1C6;
  box-shadow: 0 10px 24px rgba(36,193,198,.10);
}
}

.product-form-buttons:has(.add-to-cart-button.button-secondary) .quantity-selector {
  border-radius: var(--style-border-radius-buttons-secondary);
}

.quantity-selector :is(.quantity-minus, .quantity-plus) {
  /* Unset button styles */
  padding: 0;
  background: transparent;
  box-shadow: none;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  width: var(--minimum-touch-target);
  height: var(--minimum-touch-target);
  flex-shrink: 0;
  color: var(--color-input-text);
  transition: all .2s ease;
}
.quantity-selector :is(.quantity-minus, .quantity-plus):hover{
    color:#24C1C6;
}

.quantity-selector .quantity-minus {
  border-start-start-radius: var(--style-border-radius-inputs);
  border-end-start-radius: var(--style-border-radius-inputs);
}

.quantity-selector .quantity-plus {
  border-start-end-radius: var(--style-border-radius-inputs);
  border-end-end-radius: var(--style-border-radius-inputs);
}

.product-details .quantity-selector {
  border-radius: var(--style-border-radius-buttons-primary);
}

.product-details .quantity-selector .quantity-minus {
  border-start-start-radius: var(--style-border-radius-buttons-primary);
  border-end-start-radius: var(--style-border-radius-buttons-primary);
}

.product-details .quantity-selector .quantity-plus {
  border-start-end-radius: var(--style-border-radius-buttons-primary);
  border-end-end-radius: var(--style-border-radius-buttons-primary);
}

.quantity-selector .svg-wrapper {
  transition: transform var(--animation-speed) var(--animation-easing);
}

.quantity-selector svg {
  width: var(--icon-size-xs);
  height: var(--icon-size-xs);
}

:is(.quantity-minus, .quantity-plus):active .svg-wrapper {
  transform: scale(0.9);
}

.quantity-selector input[type='number'] {
  margin: 0;
  text-align: center;
  border: none;
  appearance: none;
  max-width: calc(var(--quantity-selector-width) - var(--minimum-touch-target) * 2);
  border-radius: var(--style-border-radius-buttons);
  color: var(--color-input-text);
  background-color: transparent;
}

/* Chrome, Safari, Edge, Opera */
.quantity-selector input[type='number']::-webkit-inner-spin-button,
.quantity-selector input[type='number']::-webkit-outer-spin-button {
  appearance: none;
}

/* Firefox */
.quantity-selector input[type='number'] {
  appearance: textfield;
}

/* Pills (used in facets and predictive search) */

.pills__pill {
  --pills-pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15));

  color: var(--color-foreground);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--gap-sm);
  min-width: 48px;
  padding: 6px 12px;
  border-radius: var(--style-border-radius-pills);
  cursor: pointer;
  background-color: var(--pills-pill-background-color);
  transition: background-color var(--animation-speed) var(--animation-easing);

  &:hover {
    --pills-pill-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));
  }

  @media screen and (max-width: 749px) {
    padding: var(--padding-xs) var(--padding-md);
  }
}

.pills__pill > .svg-wrapper {
  --close-icon-opacity: 0.4;
  --icon-stroke-width: 1px;

  color: var(--color-foreground);
}

.pills__pill--swatch {
  @media screen and (max-width: 749px) {
    padding-inline-start: var(--padding-sm);
  }
}

.pills__pill--swatch .swatch {
  margin-right: -4px;
}

.pills__pill--desktop-small {
  @media screen and (min-width: 750px) {
    font-size: var(--font-size--xs);
  }
}

/* Fly to cart animation */
fly-to-cart {
  --offset-y: 10px;

  position: fixed;
  width: var(--width, 40px);
  height: var(--height, 40px);
  left: 0;
  top: 0;
  z-index: calc(infinity);
  pointer-events: none;
  border-radius: var(--style-border-radius-buttons-primary);
  overflow: hidden;
  object-fit: cover;
  background-size: cover;
  background-position: center;
  opacity: 0;
  background-color: var(--color-foreground);
  translate: var(--start-x, 0) var(--start-y, 0);
  transform: translate(-50%, -50%);
  animation-name: travel-x, travel-y, travel-scale;
  animation-timing-function: var(--x-timing), var(--y-timing), var(--scale-timing);
  animation-duration: 0.6s;
  animation-composition: accumulate;
  animation-fill-mode: both;
}

fly-to-cart.fly-to-cart--main {
  --x-timing: cubic-bezier(0.7, -5, 0.98, 0.5);
  --y-timing: cubic-bezier(0.15, 0.57, 0.9, 1.05);
  --scale-timing: cubic-bezier(0.85, 0.05, 0.96, 1);
}

fly-to-cart.fly-to-cart--quick {
  --x-timing: cubic-bezier(0, -0.1, 1, 0.32);
  --y-timing: cubic-bezier(0, 0.92, 0.92, 1.04);
  --scale-timing: cubic-bezier(0.86, 0.08, 0.98, 0.98);

  animation-duration: 0.6s;
}

fly-to-cart.fly-to-cart--sticky {
  --x-timing: cubic-bezier(0.98, -0.8, 0.92, 0.5);
  --y-timing: cubic-bezier(0.14, 0.56, 0.92, 1.04);
  --scale-timing: cubic-bezier(0.86, 0.08, 0.98, 0.98);
  --radius: var(--style-border-radius-buttons-primary);

  @media (max-width: 749px) {
    --x-timing: cubic-bezier(0.98, -0.1, 0.92, 0.5);
  }

  animation-duration: 0.8s;
}

@keyframes travel-scale {
  0% {
    opacity: var(--start-opacity, 1);
  }

  5% {
    opacity: 1;
  }

  100% {
    border-radius: 50%;
    opacity: 1;
    transform: translate(-50%, calc(-50% + var(--offset-y))) scale(0.25);
  }
}

@keyframes travel-x {
  to {
    translate: var(--travel-x, 0) 0;
  }
}

@keyframes travel-y {
  to {
    translate: 0 var(--travel-y, 0);
  }
}

/* ------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------ */

/* Animation declarations - to be kept at the bottom of the file for ease of find */
@keyframes grow {
  0% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.2);
  }

  100% {
    transform: scale(1);
  }
}

@keyframes move-and-fade {
  from {
    transform: translate(var(--start-x, 0), var(--start-y, 0));
    opacity: var(--start-opacity, 0);
  }

  to {
    transform: translate(var(--end-x, 0), var(--end-y, 0));
    opacity: var(--end-opacity, 1);
  }
}

@keyframes slideInTopViewTransition {
  from {
    transform: translateY(100px);
  }
}

@keyframes elementSlideInTop {
  from {
    margin-top: var(--padding-sm);
    opacity: 0;
  }

  to {
    margin-top: 0;
    opacity: 1;
  }
}

@keyframes elementSlideOutTop {
  from {
    transform: translateY(0);
    opacity: 1;
  }

  to {
    transform: translateY(var(--padding-sm));
    opacity: 0;
  }
}

@keyframes elementSlideInBottom {
  from {
    transform: translateY(calc(-1 * var(--padding-sm)));
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes elementSlideOutBottom {
  from {
    transform: translateY(0);
    opacity: 1;
  }

  to {
    transform: translateY(calc(-1 * var(--padding-sm)));
    opacity: 0;
  }
}

@keyframes thumbnailsSlideInTop {
  from {
    transform: translateY(calc(-50% + var(--margin-lg)));
    opacity: 0;
  }

  to {
    transform: translateY(-50%);
    opacity: 1;
  }
}

@keyframes thumbnailsSlideOutTop {
  from {
    transform: translateY(-50%);
    opacity: 1;
  }

  to {
    transform: translateY(calc(-50% + var(--margin-lg)));
    opacity: 0;
  }
}

@keyframes thumbnailsSlideInBottom {
  from {
    transform: translateY(100%);
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes thumbnailsSlideOutBottom {
  from {
    transform: translateY(0);
    opacity: 1;
  }

  to {
    transform: translateY(100%);
    opacity: 0;
  }
}

@keyframes search-element-slide-in-bottom {
  0% {
    transform: translateY(20px);
    opacity: 0;
  }

  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes search-element-slide-out-bottom {
  0% {
    transform: translateY(0);
    opacity: 1;
  }

  100% {
    transform: translateY(20px);
    opacity: 0;
  }
}

@keyframes dialogZoom {
  from {
    opacity: 1;
    transform: scale(1) translateY(0);
  }

  to {
    opacity: 0;
    transform: scale(0.95) translateY(1em);
  }
}

@keyframes thumbnail-selected {
  0%,
  100% {
    box-shadow: 0 0 0 2px transparent;
    scale: 0.9;
  }

  50% {
    box-shadow: 0 0 0 2px #000;
    scale: 1;
  }
}

@keyframes backdropFilter {
  from {
    backdrop-filter: brightness(1);
  }

  to {
    backdrop-filter: brightness(0.75);
  }
}

@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes modalSlideInTop {
  from {
    transform: translateY(var(--padding-sm));
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes modalSlideOutTop {
  from {
    transform: translateY(0);
    opacity: 1;
  }

  to {
    transform: translateY(var(--padding-sm));
    opacity: 0;
  }
}

.bubble {
  display: inline-flex;
  height: calc(var(--variant-picker-swatch-height) / 1.5);
  font-size: var(--font-size--xs);
  border-radius: 20px;
  min-width: 20px;
  padding: 0 6px;
  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10-25));
  color: var(--color-foreground);
  align-items: center;
  justify-content: center;
}

.bubble svg {
  width: 12px;
  height: 12px;
}

.top-shadow::before {
  content: '';
  box-shadow: 0 0 10px var(--color-shadow);
  position: absolute;
  z-index: var(--layer-lowest);
  inset: 0;
  clip-path: inset(-50px 0 0 0); /* stylelint-disable-line */
}

@media (min-width: 750px) {
  .top-shadow--mobile::before {
    display: none;
  }
}

.bottom-shadow::before {
  content: '';
  box-shadow: 0 0 10px var(--color-shadow);
  position: absolute;
  z-index: var(--layer-lowest);
  inset: 0;
  clip-path: inset(0 0 -50px 0); /* stylelint-disable-line */
}

@media (min-width: 750px) {
  .bottom-shadow--mobile::before {
    display: none;
  }
}

.video-placeholder-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
  aspect-ratio: var(--size-style-aspect-ratio, auto);
}

:not(deferred-media) > .video-placeholder-wrapper {
  width: var(--video-placeholder-width);
}

.video-placeholder-wrapper > * {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

/*
 * Slideshow Component
 */
slideshow-component {
  --cursor: grab;
  --slide-offset: 6px;

  position: relative;
  display: flex;
  flex-direction: column;
  timeline-scope: var(--slideshow-timeline);
}

slideshow-component.slideshow--content-below-media slideshow-slide {
  display: grid;
}

.slideshow--content-below-media slideshow-slide :is(.slide__image-container, .slide__content) {
  position: static;
}

.slideshow--content-below-media slideshow-slide {
  grid-template-rows: var(--grid-template-rows);

  @media screen and (min-width: 750px) {
    grid-template-rows: var(--grid-template-rows-desktop);
  }
}

.slide__content {
  opacity: 0;
  animation: slide-reveal both linear;
  animation-timeline: var(--slideshow-timeline);

  @media (prefers-reduced-motion) {
    opacity: 1;
    animation: none;
  }
}

.slideshow--single-media {
  --cursor: default;
}

a slideshow-component {
  --cursor: pointer;
}

/*
 * Slideshow Slides
 */
slideshow-slides {
  width: 100%;
  position: relative;
  display: flex;
  overflow-x: scroll;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-color: transparent transparent;
  scrollbar-width: none;
  gap: var(--slideshow-gap, 0);
  cursor: var(--cursor);
  min-height: var(--slide-min-height);

  @media (prefers-reduced-motion) {
    scroll-behavior: auto;
  }

  &::-webkit-scrollbar {
    width: 0;
  }

  &::-webkit-scrollbar-track {
    background: transparent;
  }

  &::-webkit-scrollbar-thumb {
    background: transparent;
    border: none;
  }

  @media screen and (min-width: 750px) {
    min-height: var(--slide-min-height-desktop);
  }
}

slideshow-component[disabled='true'] slideshow-slides {
  overflow: hidden;
}

slideshow-component[mobile-disabled] slideshow-slides {
  @media screen and (max-width: 749px) {
    overflow: hidden;
  }
}

slideshow-slide {
  position: relative;
  scroll-snap-align: center;
  width: var(--slide-width, 100%);
  max-height: 100%;
  flex-shrink: 0;
  view-timeline-name: var(--slideshow-timeline);
  view-timeline-axis: inline;
  content-visibility: auto;
  contain-intrinsic-size: auto none;
  border-radius: var(--corner-radius, 0);
  overflow: hidden;

  slideshow-component[actioned] &,
  &[aria-hidden='false'] {
    content-visibility: visible;
  }

  slideshow-component slideshow-slide:not([aria-hidden='false']) {
    content-visibility: hidden;
  }

  &[hidden]:not([reveal]) {
    display: none;
  }

  /* Make inactive slides appear clickable */
  &[aria-hidden='true'] {
    cursor: pointer;
  }
}

slideshow-slide .slide__image-container--rounded {
  border-radius: var(--corner-radius, 0);
}

slideshow-slide.product-media-container--tallest {
  content-visibility: visible;
}

@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
    ) {
    content-visibility: auto;

    slideshow-component[actioned] & {
      content-visibility: visible;
    }
  }
}

/*
 * Collection and Resource list carousels have peeking slides on both sides.
 * 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
  ) {
  content-visibility: auto;

  slideshow-component[actioned] & {
    content-visibility: visible;
  }
}

/*
 * 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 {
  content-visibility: visible;
}

slideshow-slides[gutters*='start'] {
  padding-inline-start: var(--gutter-slide-width, 0);
  scroll-padding-inline-start: var(--gutter-slide-width, 0);
}

slideshow-slides[gutters*='end'] {
  padding-inline-end: var(--gutter-slide-width, 0);
}

slideshow-component[dragging] {
  --cursor: grabbing;

  * {
    pointer-events: none;
  }
}

slideshow-component[dragging] slideshow-arrows {
  display: none;
}

slideshow-container {
  width: 100%;
  display: block;
  position: relative;
  grid-area: container;
  container-type: inline-size;
}

@media screen and (min-width: 750px) {
  .media-gallery--carousel slideshow-component:has(slideshow-controls[thumbnails]) {
    &:has(slideshow-controls[pagination-position='right']) {
      display: grid;
      grid-template:
        'container controls' auto
        'arrows controls' min-content
        / 1fr auto;
    }

    &:has(slideshow-controls[pagination-position='left']) {
      display: grid;
      grid-template:
        'controls container' auto
        'controls arrows' min-content
        / auto 1fr;
    }

    slideshow-controls[pagination-position='left'] {
      order: -1;
    }
  }
}

/* Slideshow Play/Pause */
.slideshow-control:is(.icon-pause, .icon-play) {
  color: var(--color-active);

  &:hover {
    color: var(--color-hover);
  }

  svg {
    display: none;
  }
}

slideshow-component:is([autoplay]) {
  &:is([paused]) {
    .icon-play > svg {
      display: block;
    }
  }

  &:not([paused]) {
    .icon-pause > svg {
      display: block;
    }
  }
}

/* Slideshow Arrows */
slideshow-arrows {
  --cursor-previous: w-resize;
  --cursor-next: e-resize;

  position: absolute;
  inset: 0;
  display: flex;
  z-index: var(--layer-heightened);
  pointer-events: none;
  mix-blend-mode: difference;
  align-items: flex-end;

  &[position='left'] {
    justify-content: flex-start;
    padding-inline: var(--padding-xs);
  }

  &[position='right'] {
    justify-content: flex-end;
    padding-inline: var(--padding-xs);
  }

  &[position='center'] {
    justify-content: space-between;
    align-items: center;
  }
}

slideshow-arrows:has(.slideshow-control--shape-square),
slideshow-arrows:has(.slideshow-control--shape-circle) {
  mix-blend-mode: normal;
}

slideshow-component[disabled='true'] slideshow-arrows {
  display: none;
}

slideshow-arrows .slideshow-control {
  pointer-events: auto;
  opacity: 0;
  min-height: var(--minimum-touch-target);
  min-width: var(--minimum-touch-target);
  padding: 0 var(--padding-xs);
  color: var(--color-white);
}

slideshow-arrows .slideshow-control.slideshow-control--style-none {
  display: none;
}

.media-gallery--carousel slideshow-arrows .slideshow-control {
  padding-inline: 0 var(--padding-md);
  opacity: 1;
}

.card-gallery slideshow-arrows .slideshow-control {
  /* Align icons with quick-add button */
  padding-inline: var(--padding-xl);

  @container (max-width: 249px) {
    padding-inline: 0 var(--padding-sm);
  }
}

: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;
}

@keyframes arrowsSlideIn {
  from {
    transform: translate(var(--padding-sm), 0);
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes slide-reveal {
  0% {
    translate: calc(var(--slideshow-slide-offset, 6) * 1rem) 0;
    opacity: 0;
  }

  50% {
    opacity: 1;
  }

  100% {
    translate: calc(var(--slideshow-slide-offset, 6) * -1rem) 0;
    opacity: 0;
  }
}

.block-resource-list {
  display: flex;
  flex-direction: column;
  row-gap: var(--gap);
  min-width: 0;
  min-height: 0;
  container-type: inline-size;
  container-name: resource-list;
}

.section-resource-list,
.section-carousel {
  row-gap: var(--gap);
}

.section-resource-list__content {
  display: flex;
  flex-direction: column;
  align-items: var(--horizontal-alignment);
  gap: var(--gap);
  width: 100%;
}

.section-resource-list__content:empty {
  display: none;
}

.section-resource-list__header:is(:empty, :has(.group-block-content:empty)),
.section-resource-list__content:empty {
  display: none;
}

.section-resource-list.section--full-width product-card-link > .group-block,
.section-carousel.section--full-width product-card-link > .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));
  }
}

.resource-list--carousel-mobile {
  display: block;

  @media screen and (min-width: 750px) {
    display: none;
  }
}

.resource-list {
  --resource-list-mobile-gap-max: 9999px;
  --resource-list-column-gap: min(var(--resource-list-column-gap-desktop), var(--resource-list-mobile-gap-max));
  --resource-list-row-gap: min(var(--resource-list-row-gap-desktop), var(--resource-list-mobile-gap-max));

  width: 100%;

  @media screen and (max-width: 749px) {
    --resource-list-mobile-gap-max: 12px;
  }

  @container resource-list (max-width: 749px) {
    --resource-list-mobile-gap-max: 12px;
  }
}

.resource-list--grid {
  display: grid;
  gap: var(--resource-list-row-gap) var(--resource-list-column-gap);
  grid-template-columns: var(--resource-list-columns-mobile);

  @media screen and (min-width: 750px) {
    grid-template-columns: var(--resource-list-columns);
  }

  @container resource-list (max-width: 449px) {
    grid-template-columns: var(--resource-list-columns-mobile);
  }

  @container resource-list(min-width: 450px) and (max-width: 749px) {
    --resource-list-columns-per-row: 3;

    grid-template-columns: repeat(var(--resource-list-columns-per-row), 1fr);

    /* Avoid orphan in last row when there are 4, 7, or 10 items */
    &:has(.resource-list__item:first-child:nth-last-child(3n + 1)),
    /* Clean two full rows when there are 8 items */
    &:has(.resource-list__item:first-child:nth-last-child(8n)) {
      --resource-list-columns-per-row: 4;
    }
  }

  @container resource-list (min-width: 750px) {
    grid-template-columns: repeat(var(--resource-list-columns-per-row), 1fr);

    &:has(.resource-list__item:first-child:nth-last-child(n + 9)) {
      --resource-list-columns-per-row: 5;
    }

    &:has(.resource-list__item:first-child:nth-last-child(n + 7):nth-last-child(-n + 8)) {
      --resource-list-columns-per-row: 4;
    }

    &:has(.resource-list__item:first-child:nth-last-child(6)) {
      --resource-list-columns-per-row: 3;
    }

    &:has(.resource-list__item:first-child:nth-last-child(5)) {
      --resource-list-columns-per-row: 5;
    }

    &:has(.resource-list__item:first-child:nth-last-child(-n + 4)) {
      --resource-list-columns-per-row: 4;
    }
  }

  @container resource-list (min-width: 1200px) {
    &:has(.resource-list__item:first-child:nth-last-child(6)) {
      --resource-list-columns-per-row: 6;
    }
  }
}

.resource-list__item {
  height: 100%;
  color: var(--color-foreground);
  text-decoration: none;
}

.resource-list__carousel {
  --slide-width: 60vw;

  width: 100%;
  position: relative;
  container-type: inline-size;
  container-name: resource-list-carousel;

  .slideshow-control[disabled] {
    display: none;
  }

  .slideshow-control--next {
    margin-inline-start: auto;
  }
}

@container resource-list-carousel (max-width: 749px) {
  .resource-list__carousel .resource-list__slide {
    --slide-width: clamp(150px, var(--mobile-card-size, 60cqw), var(--slide-width-max));
  }
}

@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)
    );
    --fallback-slide-width: clamp(150px, var(--mobile-card-size, 60cqw), var(--slide-width-max));
    --slide-width: var(--section-slide-width, var(--fallback-slide-width));
  }
}

.resource-list__carousel slideshow-slides {
  gap: var(--resource-list-column-gap);

  /* Add padding to prevent hover animations from being clipped in slideshow
     15px accommodates:
     - Scale effect (9px on each side from 1.03 scale)
     - Lift effect (4px upward movement)
     - Shadow (15px spread with -5px offset)
     Using 16px for better alignment with our spacing scale */

  margin-block: -16px;
  padding-block: 16px;
}

.resource-list__carousel slideshow-arrows {
  padding-inline: var(--util-page-margin-offset);
}

.resource-list__carousel .resource-list__slide {
  width: var(--slide-width);
  flex: 0 0 auto;
  scroll-snap-align: start;
  min-width: 0;
}

/* Base styles */
.group-block,
.group-block-content {
  position: relative;
}

.group-block:has(> video-background-component),
.group-block:has(> .background-image-container) {
  overflow: hidden;
}

.group-block-content {
  height: 100%;
  width: 100%;
}

/* Container styles */
.section-content-wrapper.section-content-wrapper:where(.layout-panel-flex) .group-block--fill {
  flex: 1;
}

/* Flex behavior for width variants */
.layout-panel-flex--row > .group-block--width-fit {
  flex: 0;
}

.layout-panel-flex--row > .group-block--width-fill {
  flex: 1;
}

.layout-panel-flex--row > .group-block--width-custom {
  flex-basis: var(--size-style-width);
}

/* Dimension utilities - Height */
.group-block--height-fit {
  height: auto;
}

.group-block--height-custom,
.group-block--height-fill {
  height: var(--size-style-height);
}

/* Flex behavior for height variants */
.layout-panel-flex--column > .group-block--height-fit {
  flex: 0 1 auto;
}

.layout-panel-flex--column > .group-block--height-fill {
  flex: 1;
}

.layout-panel-flex--column > .group-block--height-custom {
  flex-basis: var(--size-style-height);
}

accordion-custom {
  details {
    &::details-content,
    .details-content {
      block-size: 0;
      overflow-y: clip;
      opacity: 0;
      interpolate-size: allow-keywords;
      transition: content-visibility var(--animation-speed-slow) allow-discrete,
        padding-block var(--animation-speed-slow) var(--animation-easing),
        opacity var(--animation-speed-slow) var(--animation-easing),
        block-size var(--animation-speed-slow) var(--animation-easing);
    }

    /* Disable transitions when the content toggle is not caused by the direct user interaction, e.g. opening the filters on mobile. */
    &:not(:focus-within)::details-content,
    &:not(:focus-within) .details-content {
      transition: none;
    }

    &:not([open]) {
      &::details-content,
      .details-content {
        padding-block: 0;
      }
    }

    &[open] {
      &::details-content,
      .details-content {
        opacity: 1;
        block-size: auto;

        @starting-style {
          block-size: 0;
          opacity: 0;
          overflow-y: clip;
        }

        &:focus-within {
          overflow-y: visible;
        }
      }
    }
  }
}

accordion-custom[data-disable-on-mobile='true'] summary {
  @media screen and (max-width: 749px) {
    cursor: auto;
  }
}

accordion-custom[data-disable-on-desktop='true'] summary {
  @media screen and (min-width: 750px) {
    cursor: auto;
  }
}

text-component {
  --shimmer-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
  --shimmer-color-light: rgb(var(--color-foreground-rgb) / var(--opacity-10));
  --shimmer-speed: 1.25s;

  display: inline-block;
  position: relative;
  transition: color var(--animation-speed-slow) ease;
  line-height: 1;

  &::after {
    content: attr(value);
    position: absolute;
    inset: 0;
    color: transparent;
    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-clip: text;
    background-size: 200% 100%;
    background-position: 100% 0;
    place-content: center;
  }

  &[shimmer] {
    color: transparent;

    &::after {
      opacity: 1;
      animation: text-shimmer var(--shimmer-speed) infinite linear;
    }
  }
}

@keyframes text-shimmer {
  0% {
    background-position: 100% 0;
  }

  100% {
    background-position: -100% 0;
  }
}

/* Animation transitions */
.transition-background-color {
  transition: background-color var(--animation-speed-medium) ease-in-out;
}

.transition-transform {
  transition: transform var(--animation-speed-medium) var(--animation-timing-bounce);
}

.transition-border-color {
  transition: border-color var(--animation-speed-medium) var(--animation-timing-hover);
}

/* Global scrollbar styles */

/* Webkit browsers */
::-webkit-scrollbar {
  width: 20px;
}

::-webkit-scrollbar-track {
  background-color: transparent;
}

::-webkit-scrollbar-thumb {
  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-40));
  border-radius: 20px;
  border: 6px solid transparent;
  background-clip: content-box;
  transition: background-color 0.2s;
}

::-webkit-scrollbar-thumb:hover {
  background-color: rgb(var(--color-foreground-rgb) / var(--opacity-60));
}

@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}

/* Product card title truncation - applied only to zoom-out view */
[product-grid-view='zoom-out'] :is(.product-card, .product-grid__card) :is(h4, .h4) {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: 3;
}

/* Product card title truncation - applied on mobile regardless of view */
@media screen and (max-width: 749px) {
  :is(.product-card, .product-grid__card) :is(h4, .h4) {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    -webkit-line-clamp: 3;
  }
}

.product-card:hover,
.collection-card:hover,
.resource-card:hover,
.predictive-search-results__card--product:hover,
.predictive-search-results__card:hover {
  position: relative;
  z-index: var(--layer-raised);
  transition: transform var(--hover-transition-duration) var(--hover-transition-timing),
    box-shadow var(--hover-transition-duration) var(--hover-transition-timing);
}

.header .product-card:hover,
.header .collection-card:hover,
.header .resource-card:hover,
.header-drawer .product-card:hover,
.header-drawer .collection-card:hover,
.header-drawer .resource-card:hover {
  z-index: auto;
  transform: none;
  box-shadow: none;
}

/* Prevent iOS zoom on input focus by ensuring minimum 16px font size on mobile */
@media screen and (max-width: 1200px) {
  input,
  textarea,
  select,
  /* Higher specificity to override type preset classes like .paragraph, .h1, etc. */
  .paragraph.paragraph input,
  .paragraph.paragraph textarea,
  .paragraph.paragraph select,
  .h1.h1 input,
  .h1.h1 textarea,
  .h1.h1 select,
  .h2.h2 input,
  .h2.h2 textarea,
  .h2.h2 select,
  .h3.h3 input,
  .h3.h3 textarea,
  .h3.h3 select,
  .h4.h4 input,
  .h4.h4 textarea,
  .h4.h4 select,
  .h5.h5 input,
  .h5.h5 textarea,
  .h5.h5 select,
  .h6.h6 input,
  .h6.h6 textarea,
  .h6.h6 select {
    font-size: max(1rem, 100%);
  }
}
/*==================================================
        LUA PETS • BUTTON V4
==================================================*/

/*
  Rebuilt 02/08/2026 from a supplied reference ("quiero que el botón del
  carrito se vea así, hazlo premium"). What the previous V4 got wrong,
  measured against that image rather than guessed:
  - Text and icon rendered near-black, because the colour comes from the
    scheme's primary_button_text (#0A0F0E in scheme-1). The reference is
    white, so it is forced white here — scoped to this button only, so no
    other primary button in the theme changes.
  - `inset 0 -3px 0 rgba(0,0,0,.10)` drew a hard dark lip along the
    bottom edge, which read as plastic, not premium. Replaced by a
    1px inner highlight along the TOP edge, which is what gives a real
    button its sense of light coming from above.
  - Weight 400 at normal tracking. The reference is heavy and widely
    tracked; both are set here rather than left to the theme default.
*/
button.lua-add-to-cart {
  position: relative;
  overflow: hidden;

  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;

  /* 02/08/2026: el mismo degradado que el disco del badge de ahorro y la
     barra del pie (#3f6f6c -> #18acb1), a petición ("quiero que el botón
     de agregar al carrito tenga el mismo degradado que el badge"). */
  background: linear-gradient(100deg, #3f6f6c, #18acb1) !important;

  border: 0;
  border-radius: 14px;
  height: 60px;
  padding: 0 26px;

  color: #ffffff !important;
  font-family: var(--lua-font-ui, var(--font-subheading--family));
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;

  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.28),
    0 10px 26px rgba(31, 122, 120, 0.32);
  transition:
    filter 0.25s ease,
    transform 0.18s ease,
    box-shadow 0.25s ease;
}

/* The icon inherits the same white, and is sized to sit with the caps. */
button.lua-add-to-cart .add-to-cart-icon,
button.lua-add-to-cart .add-to-cart-icon svg,
button.lua-add-to-cart .lua-btn-label {
  color: #ffffff;
}

button.lua-add-to-cart .add-to-cart-icon svg {
  width: 19px;
  height: 19px;
}
button.lua-add-to-cart::before{
    content:"";
    position:absolute;
    top:0;
    left:-35%;
    width:30%;
    height:100%;
    pointer-events:none;

    background:linear-gradient(
        90deg,
        rgba(255,255,255,0),
        rgba(255,255,255,.12),
        rgba(255,255,255,0)
    );

    transform:skewX(-20deg);

    animation:luaButtonShine 7s ease-in-out infinite;
}


/*
  Hover brightens the gradient instead of flattening it to a solid colour
  (the old rule set `background:#2FCACD`, which threw the gradient away on
  hover — the button visibly changed shape of light, not just tone).
*/
button.lua-add-to-cart:hover {
  filter: brightness(1.06);
  transform: translateY(-1px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.34),
    0 14px 32px rgba(31, 122, 120, 0.38);
}

button.lua-add-to-cart:active {
  transform: translateY(0);
  filter: brightness(0.98);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.2),
    0 6px 16px rgba(31, 122, 120, 0.3);
}

@media (prefers-reduced-motion: reduce) {
  button.lua-add-to-cart,
  button.lua-add-to-cart:hover,
  button.lua-add-to-cart:active {
    transition: none;
    transform: none;
  }

  button.lua-add-to-cart::before {
    animation: none;
  }
}

/*======================================
LUA PETS • GLOBO VARIANTS
======================================*/

.globo-style-button{

    border-radius:16px !important;

    border:1px solid #DCE7EA !important;

    background:#fff !important;

    color:#2F3B3D !important;

    font-weight:600 !important;

    font-size:21px;

    letter-spacing:.04em;

    padding:10px 22px !important;

    transition:.25s ease;

    text-transform:uppercase;

    width:18px;
height:18px;
margin-right:12px;
opacity:.95;

}

.globo-style-button:hover{

    transition:.25s ease;

transform:translateY(-2px);

box-shadow:
0 16px 28px rgba(120,216,214,.30);
}

.globo-style-button.active,
.globo-style-button.selected,
.globo-style-button.checked{

    background:#93DEDB !important;

    border-color:#93DEDB !important;

    color:#184E56 !important;

}
/* ==========================================
   LUA PETS - Add to Cart Animation
   ========================================== */

.add-to-cart-button{
    animation: luaCartPulse 5s ease-in-out infinite;
    transform-origin:center;
}

@keyframes luaCartPulse{

    0%,100%{
        transform:scale(1);
    }

    4%{
        transform:scale(1.02);
    }

    8%{
        transform:scale(1);
    }

}/*=============================
      LUA PETS HERO V2
==============================*/


}/*=================================
      LUA PETS PREMIUM BUTTONS
==================================*/

.hero__content-wrapper a.button{
    min-width:250px;
    height:68px;
    border-radius:18px;
    font-weight:700;
    font-size:18px;
    letter-spacing:.4px;
    transition:all .35s ease;
}

/* BOTÓN PRINCIPAL */

.hero__content-wrapper .button{
    min-width:230px;
    height:64px;

    border-radius:22px;

background: linear-gradient(
    180deg,
    #A7ECEC 0%,
    #95E2E3 45%,
    #86D7DA 100%
) !important;
    color:#1D383C !important;

    font-size:17px;
    font-weight:700;

    border:1px solid rgba(255,255,255,.65);

    transition:all .35s cubic-bezier(.22,1,.36,1);

    box-shadow:
        0 16px 40px rgba(118,217,219,.35),
        inset 0 1px 0 rgba(255,255,255,.85);
}

/* BOTÓN SECUNDARIO */

.hero__content-wrapper a.button:last-of-type:hover{

    background:rgba(155,230,228,.18);
border:1px solid #9BE6E4;
color:#ffffff;
backdrop-filter:blur(10px);
}

}

/* HOVER */

..hero__content-wrapper .button:hover{

    background:linear-gradient(
        180deg,
        #B9F4F4 0%,
        #98E6E6 100%
    ) !important;

    transform:translateY(-5px);

    box-shadow:
        0 26px 55px rgba(118,217,219,.45),
        inset 0 1px 0 rgba(255,255,255,.9);

    border-color:white;
}
}/*=============================
      HERO LAYOUT PREMIUM
==============================*/

.hero__content-wrapper .group-block-content{
    display:flex;
    flex-direction:column;
    align-items:flex-start;
    gap:18px;
}

.hero__content-wrapper h1,
.hero__content-wrapper .jumbo-text{
    margin:0;
}

.hero__content-wrapper p{
    margin:0;
}

.hero__content-wrapper .button{
    margin-top:8px;
}

.hero__content-wrapper{
    padding-left:80px;
}/* ===== LUA PETS PREMIUM HEADER ===== */

.shopify-section-header,
.header-wrapper,
header{
    transition:.35s ease;
}

.shopify-section-header.scrolled,
.header-wrapper.scrolled,
header.scrolled{

    background:rgba(255,255,255,.82);
    backdrop-filter:blur(18px);
    -webkit-backdrop-filter:blur(18px);

    box-shadow:
    0 8px 30px rgba(0,0,0,.08);

}
/* ===========================
   LUA PETS PREMIUM PRODUCT CARD
=========================== */

.product-card{
    transition:.35s ease;
}

.product-card__content{
    border-radius:22px;
    overflow:hidden;
    transition:.35s ease;
    background:#fff;
}

.product-card:hover{
    transform:translateY(-6px);
}

.product-card:hover .product-card__content{
    box-shadow:
        0 10px 35px rgba(0,0,0,.08),
        0 2px 8px rgba(0,0,0,.04);
}/* ===== HERO BUTTON OVERRIDE ===== */


.hero__content-wrapper a.button{
    background:#8EDDDC !important;
    background-image:none !important;
    border:1px solid rgba(255,255,255,.45) !important;
    color:#16363D !important;
}

.hero__content-wrapper a.button:hover{
    background:#9CE7E6 !important;
}/*=================================
    LUA PETS HERO V3
==================================*/

.hero__content-wrapper{
    padding-left:60px;
    padding-top:55px;
}

.hero__content-wrapper .group-block-content{
    max-width:560px;
}.hero__content-wrapper .group-block{
    gap:22px !important;
}.hero__content-wrapper h1,
.hero__content-wrapper .jumbo-text{

    max-width:680px;

    line-height:.96;

    letter-spacing:-2px;

    text-shadow:
        0 8px 30px rgba(0,0,0,.20);
}.hero__content-wrapper p{

    max-width:500px;

    font-size:19px;

    line-height:1.7;

    font-weight:500;

    opacity:.96;
}/* ===== LUA PETS TRUST BADGE ===== */

.hero__content-wrapper p:has(strong),
.hero__content-wrapper .trust-badge{

    display:flex;
    align-items:center;
    gap:10px;

    font-size:22px;
    font-weight:600;

    color:white;
}

.hero__content-wrapper .trust-badge strong{

    color:#FFF4B3;

    letter-spacing:2px;

    font-size:24px;

    text-shadow:
        0 0 10px rgba(255,236,140,.35);
}

/*========== LUA PETS PREMIUM LABEL ==========*/

.hero__content-wrapper .rte:first-child,
.hero__content-wrapper .text-block:first-child{

    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;

    width:fit-content;

    padding:0;

    background:none;
    border:none;
    box-shadow:none;
    backdrop-filter:none;

  color:#4FB8C2 !important;

    font-size:13px;
    font-weight:700;

    letter-spacing:3px;
    text-transform:uppercase;

    text-shadow:
        0 0 14px rgba(155,231,233,.25);

    margin-bottom:12px;
    
/* ===== CART DRAWER CHECKOUT BUTTON ===== */

.cart__checkout-button {
  --button-background-color: #7FD6D5 !important;
  --button-text-color: #0A0F0E !important;
  --button-border-color: #7FD6D5 !important;

  background: #7FD6D5 !important;
  color: #0A0F0E !important;
  border: 1px solid #7FD6D5 !important;

  border-radius: 14px !important;
  font-weight: 700 !important;
}

.cart__checkout-button:hover {
  --button-background-color: #6CCCCC !important;
  background: #6CCCCC !important;
}
/* CART DRAWER BUTTON */

.lua-cart-button{
    background: linear-gradient(
180deg,
#88E4E4 0%,
#46C8CF 100%
) !important;
    color:#111 !important;
    border:none !important;
    border-radius:14px !important;
    border-bottom:4px solid #21AAB3;
    box-shadow:
0 8px 25px rgba(86,212,214,.35),
0 18px 45px rgba(86,212,214,.20);

    font-size:18px;
    font-weight:700;
    letter-spacing:.3px;

    transition:.25s;
}

.lua-cart-button:hover{

transform:translateY(-2px);

box-shadow:
0 15px 35px rgba(86,212,214,.40),
0 25px 60px rgba(86,212,214,.25);

}
/* TOTAL DEL CARRITO */

.lua-total-price{
    font-size:40px;
    font-weight:700;
    line-height:1;
    letter-spacing:-1px;
    color:#111;
}
.lua-cart-button{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:10px;
}

.lua-cart-button svg{
  width:18px;
  height:18px;
  flex-shrink:0;
}
/* ===== PRODUCT CARD SPACING ===== */

.product-card .text-block {
    margin-bottom: 10px;
}

.product-card product-price {
    display: block;
    margin-top: 8px;
    margin-bottom: 10px;
}
.product-card .contents {
    display: block;
    margin-top: 14px;
}

    
}/* ================================
   LUA PETS - HERO DESKTOP / MOBILE
   ================================ */

/* En escritorio ocultamos el Hero móvil */
@media screen and (min-width: 750px) {
  #shopify-section-template--26628675010886__hero_khndKw {
    display: none !important;
  }
}

/* En móvil ocultamos el Hero escritorio */
@media screen and (max-width: 749px) {
  #shopify-section-template--26628675010886__hero_p9CmMG {
    display: none !important;
  }
}
/* ==========================================================
   LUA PETS DESIGN SYSTEM
========================================================== */

:root{

  --lua-primary:#45C7EA;
  --lua-primary-light:#EAF9FD;

  --lua-dark:#111111;

  --lua-text:#666666;

  --lua-border:#EDF1F5;

  --lua-bg:#F8FAFB;

  --lua-radius:22px;

  --lua-radius-small:16px;

  --lua-shadow:
  0 10px 30px rgba(0,0,0,.05);

  --lua-shadow-hover:
  0 18px 45px rgba(0,0,0,.08);

  --lua-transition:.30s ease;

}
/* ==========================================================
   LUA COMMON
========================================================== */

.lua-container{

max-width:1180px;

margin:auto;

padding:0 20px;

}

.lua-section{

padding:70px 0;

}

.lua-section-alt{

background:var(--lua-bg);

}

.lua-title{

font-size:34px;

line-height:1.15;

font-weight:700;

color:var(--lua-dark);

margin:0;

}

.lua-subtitle{

display:inline-block;

font-size:12px;

letter-spacing:2px;

font-weight:700;

color:var(--lua-primary);

text-transform:uppercase;

margin-bottom:12px;

}

.lua-description{

font-size:17px;

line-height:1.7;

color:var(--lua-text);

max-width:620px;

margin:18px auto 0;

}

@media(max-width:768px){

.lua-section{

padding:55px 0;

}

.lua-title{

font-size:28px;

}

.lua-description{

font-size:15px;

}

}
/* ==========================================================
   LUA CARDS
========================================================== */

.lua-card{

background:white;

border-radius:var(--lua-radius);

padding:30px;

border:1px solid var(--lua-border);

box-shadow:var(--lua-shadow);

transition:var(--lua-transition);

}

.lua-card:hover{

transform:translateY(-6px);

box-shadow:var(--lua-shadow-hover);

}
/* ==========================================================
   LUA ICONS
========================================================== */

.lua-icon,
.lua-benefit-icon{

width:68px;

height:68px;

border-radius:18px;

background:linear-gradient(
180deg,
#F4FDFF,
#EAF9FD
);

display:flex;

align-items:center;

justify-content:center;

color:var(--lua-primary);

margin:0 auto 22px;

transition:.30s ease;

}
.lua-card:hover .lua-icon,
.lua-benefit-card:hover .lua-benefit-icon{

transform:scale(1.08);

}
.lua-benefits,
.lua-benefits *{
  position: relative;
}

.lua-benefits::before,
.lua-benefits::after,
.lua-benefits *::before,
.lua-benefits *::after{
  display: none !important;
}

/* ========================================
   LUA — HOMEPAGE: MOBILE ONLY

   The current homepage was designed mobile-first and is intended to be shown
   on phones and tablets only. A separate desktop homepage will be built later.

   This hides every section of the index template from 990px up — the same
   breakpoint the theme already uses to switch between the mobile and desktop
   heroes, so there is one breakpoint to reason about, not two.

   Scope notes:
   - #MainContent[data-template='index'] limits this to the homepage. Product,
     collection and page templates are untouched.
   - Header and footer live in their own section groups OUTSIDE #MainContent,
     so they keep rendering normally on desktop.
   - A descendant selector (not '>') is required: a cart app injects a wrapper
     div between #MainContent and the sections.

   TO BUILD THE DESKTOP HOMEPAGE:
   Add "class": "lua-desktop" to the schema of each new desktop-only section.
   Anything carrying that class is exempt from this rule and will render on
   desktop, so both versions can coexist without touching this block again.
======================================== */

@media screen and (min-width: 990px) {
  #MainContent[data-template='index'] .shopify-section:not(.lua-desktop) {
    display: none;
  }
}

/* ========================================
   LUA RATING — shared component (snippets/lua-rating.liquid)
   Rendered from multiple sections (Best Sellers carousel, product page, and
   any future placement) so the styling lives once, globally, instead of
   being duplicated per section.

   ONE size everywhere, not one per context. Both values were 13px, a size
   that is not on the brand scale — it was picked to sit beside 13px text
   that no longer exists. They are now 14px, the micro register, and the
   three per-section overrides that existed to reconcile them have been
   removed. A rating is the same object wherever a customer meets it.
======================================== */

.lua-rating {
  --lua-star-size: 14px;
  --lua-rating-value-size: 14px;
  display: inline-flex;
  align-items: center;
  gap: 7px;
}

.lua-rating__stars {
  position: relative;
  display: inline-block;
  flex-shrink: 0;
  line-height: 0;
}

.lua-rating__stars-track,
.lua-rating__stars-fill {
  display: flex;
  gap: 2px;
}

.lua-rating__stars-track { color: #dfe4e3; }

/*
  02/08/2026. El degradado que estas estrellas llevaron durante un rato se
  retiró el mismo día ("me gustaban más antes"): vuelven al color sólido
  de siempre, un escalón más oscuro a petición. #6ccaca -> #4abdbd, mismo
  matiz (180deg) y misma saturación (47%), sólo 9 puntos menos de
  luminosidad. La definición del degradado se quitó de
  layout/theme.liquid, ya no la usa nadie.
*/
.lua-rating__stars-fill {
  position: absolute;
  inset: 0;
  overflow: hidden;
  color: #4abdbd;
}

.lua-rating .lua-star {
  width: var(--lua-star-size);
  height: var(--lua-star-size);
  flex-shrink: 0;
}

/* A rating is data, not prose: the interface grotesque, never the reading
   serif. This was still on the paragraph family after the typographic
   migration — a mismatch with III-6 rule 1, not a design change. */
.lua-rating__value {
  font-family: var(--lua-font-ui);
  font-size: var(--lua-rating-value-size);
  line-height: 1;
  color: #0a0f0e;
}

/* ========================================
   LUA — LA FICHA DE PRODUCTO: composición 5/7

   Fase 2 de FICHA_PRODUCTO_LuaPets.md, hecha SIN reescribir el bloque de
   compra. La razón es de prioridad, no de pereza: reconstruir la selección de
   variante y el añadir al carrito no se puede verificar desde aquí, y la
   experiencia de compra manda sobre la composición.

   Resultó que no hacía falta. El layout de `product-information` no vive en
   Liquid sino en una variable CSS —--sidebar-width— que decide el ancho de la
   columna de compra. Basta con darle la medida de la marca.

   --sidebar-width es GLOBAL: el cajón de carrito también la usa. Por eso se
   sobreescribe únicamente dentro de la rejilla de producto, nunca en :root.

   La medida es la misma fórmula de doce columnas que usan el hero y el cierre,
   de modo que la columna de compra cae exactamente sobre la línea invisible que
   recorre toda la marca: cinco columnas de doce, 532px a 1440. Con la
   fotografía a la izquierda, la ficha reproduce la composición del cierre.
======================================== */

@media screen and (min-width: 990px) {
  .product-information__grid {
    --lua-margin: 64px;
    --lua-gutter: 24px;
    --lua-col: calc((min(100vw, 1440px) - (var(--lua-margin) * 2) - (var(--lua-gutter) * 11)) / 12);

    --sidebar-width: calc((var(--lua-col) * 5) + (var(--lua-gutter) * 4));
  }
}

/* ========================================
   LUA — LOS TRES REGISTROS TIPOGRÁFICOS

   La marca tiene tres registros (III-6): display, interfaz y lectura. El tema
   expone cuatro ranuras de Shopify (heading, subheading, accent, body) y, por
   encima, variables de PRESET generadas — --font-h1--family y compañía — que
   no son variables de familia: resuelven a lo que diga el desplegable
   `type_font_h1` en el editor de tema.

   Eso era una fragilidad real: toda la tipografía de interfaz de la marca,
   cartelas incluidas, colgaba de un desplegable que alguien podía cambiar sin
   saber lo que tocaba. Estos tres alias apuntan a las FAMILIAS, no a los
   presets, y son el único sitio donde el lenguaje de marca se conecta con la
   configuración del tema.

   Hoy display e interfaz son la misma familia. Se declaran por separado
   porque son registros distintos y pueden divergir; el día que lo hagan, se
   cambia una línea aquí y no cada regla del tema.
======================================== */

:root {
  --lua-font-display: var(--font-heading--family);
  --lua-font-ui: var(--font-heading--family);
  --lua-font-read: var(--font-body--family);
}

/* ========================================
   LUA CARTELA — shared component (snippets/lua-cartela.liquid)

   The brand's smallest recognisable unit. Specified in
   LENGUAJE_VISUAL_LuaPets.md III-9; this block materialises that spec and
   does not extend it. Change III-9 first, this second.

   Lives here rather than in a section stylesheet for the same reason as
   .lua-rating: a cartela is rendered from many places and must be the same
   object in every one of them. Nothing below is per-context.
======================================== */

.lua-cartela {
  display: block;
  /* III-9.3: 20 from the bottom edge of the image it labels. The bottom gap
     (30 minimum) belongs to the layout, not to the component, so callers own
     it — a component that owns its outer spacing stops being reusable. */
  margin-top: 20px;
}

/*
  The rule spans the full width of the image it labels, permanently. It is an
  element rather than a border-top so that the width is its own declaration
  and cannot be inherited or overridden by a caller's border rules.

  It used to rest at 30px and extend to 100% on hover. That was withdrawn on
  31/07/2026 after the design audit, and the reason is worth keeping:

    · Measured against the real containers, 30px was 17.5% of a mobile
      category card and 3.7% of the desktop hero photograph. The same mark
      read as deliberate in one place and as a speck in the other, which
      contradicts the reason the type size is fixed (III-9.4).

    · III-9 requires the cartela to live on packaging, sewn labels, email,
      social and print. FOUR OF THOSE FIVE SURFACES HAVE NO HOVER. A mark
      whose identity depends on an interactive state cannot exist on paper,
      so it cannot be the same object everywhere — which is its whole job.

  A full-width rule under an image is documentary: a museum wall label made
  structural. A short tick that grows on pointer is an ecommerce widget.
  III-9.1 asks for the first.
*/
.lua-cartela__rule {
  display: block;
  width: 100%;
  height: 1px;
  margin-bottom: 10px;
  background-color: #0a0f0e;
}

/*
  The micro register, identical to every label in the brand. Two things are
  fixed on purpose:

  · The SIZE never scales with the viewport. A cartela has to be the same
    object on a phone and on a 27" monitor, which is what lets it be
    recognised without context.

  · The COLOUR is ink, not the soft #4a675d it started with. III-12 declares
    a palette of ink, paper and one accent; #4a675d was a fourth colour that
    never belonged to it. Ink also takes the contrast from 5.74:1 to 19.3:1,
    clearing AAA for 12px type without inventing a new value to get there —
    the fix removes a colour instead of adding one.

  Small type is quietened by its size, not by greying it down. Greyed-out
  secondary text is a UI habit; typography does it with scale.
*/
.lua-cartela__text {
  display: block;
  font-family: var(--lua-font-ui);
  font-size: 12px;
  font-weight: 500;
  line-height: 1.35;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #0a0f0e;

  /*
    Both of these are declared to defend the component from its host, not
    because anything currently needs them.

    text-decoration and font-style are INHERITED properties. Without these two
    lines a cartela placed inside a link would arrive underlined — it only
    renders clean in lua-d-tiles because that section happens to reset the
    underline on its <a> — and a cartela inside an italic context would lean,
    which III-6 rule 6 forbids outright. A component that looks right only
    because of what its host does is not reusable.

    Deliberately NOT declared: text-align and direction. Alignment should
    follow the composition it sits in — a centred block centres its cartela —
    and direction must follow the locale.
  */
  text-decoration: none;
  font-style: normal;
}

/* ========================================
   LUA — EL TÍTULO DE PRODUCTO EN UNA TARJETA (III-14.5)

   El nombre de un producto en una rejilla es INTERFAZ, no lectura. III-6
   reserva Newsreader para texto corrido y sólo texto corrido.

   Llegaba en Newsreader por una cadena que no se ve desde la plantilla: el
   bloque `product-title` usa el preset `rte`, `rte` no fija familia propia y
   el elemento acaba heredando la de `body`, que es --font-paragraph--family
   y de ahí la familia de cuerpo. El desplegable `font` del bloque no puede
   arreglarlo: es un `select` cerrado a las cuatro ranuras de Shopify, sin
   ninguna de los alias de la marca, y además sólo surte efecto con el preset
   `custom`. Por eso la corrección vive aquí y no en las seis plantillas.

   Se declara la familia y nada más. El tamaño y el peso que sirve el preset
   ya están dentro del sistema, y una regla no debe afirmar más de lo que hizo
   falta arreglar.
======================================== */

.product-card__content [ref='productTitleLink'] {
  font-family: var(--lua-font-ui);
}

/* ========================================
   LUA TERMS — shared component (snippets/lua-terms.liquid)

   The shop's purchase facts as a single line. Specified in III-16; this
   materialises that spec and does not extend it.

   Lives here rather than in a section stylesheet for the same reason as the
   cartela and the rating: it is rendered from the Home and from the product
   page, and it has to be the same object in both. Nothing below is
   per-context.

   It is the SAME SPECIMEN as the cartela — 12px, +0.14em, upright, weight 500,
   ink — because the brand states a fact one way. It is NOT a cartela: no rule
   above it, because a cartela's rule spans the image it labels and there is no
   image here.
======================================== */

.lua-terms {
  margin: 0;
  font-family: var(--lua-font-ui);
  font-size: 12px;
  font-weight: 500;
  line-height: 1.35;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #0a0f0e;

  /* Declared to defend the component from its host, exactly as the cartela
     does: both properties are inherited, so a line placed inside a link or an
     italic context would arrive underlined or leaning. */
  text-decoration: none;
  font-style: normal;
}

/*
  The separator is deliberately NOT styled, exactly as the cartela's is not.
  A first draft dimmed it to 0.4 for "hierarchy"; that invented a difference
  between two uses of one specimen, and it would have put a visible glyph at
  roughly 2:1 — below AA. The middle dot is the same ink as the words it
  separates.

  The line MAY wrap on a narrow product column, and wrapping is correct here.
  A cartela may never run to two lines because it labels an image and has to
  match its width; this line labels nothing.
*/

/*
  Announcement bar, mobile only. "Free Shipping • 30-Day Money-Back
  Guarantee" wrapped to two lines at the block's own font-size (14px) below
  749px. One size step down keeps it on one line without shrinking the
  slideshow arrows or touching the shared _announcement block file. Both
  rotating slides share this size so neither jumps mid-rotation.

  Targets .__bar__text directly, not the <slideshow-slide> wrapper: the
  wrapper's font-size is set through the --font-size custom property
  (assets/base.css ".custom-font-size > *"), and that property is set inline
  on the wrapper itself — an external rule on the wrapper can't out-specify
  an inline style. Setting font-size on .__bar__text competes with
  ".custom-font-size > *" on the same element instead, where specificity
  decides normally.
*/
@media screen and (max-width: 749px) {
  .announcement-bar__slide .__bar__text {
    font-size: 0.625rem;
  }
}

/*
  Sticky header, mobile only — 01/08/2026. `enable_sticky_header` is set to
  "always" in sections/header-group.json, and Shopify's own header.liquid
  turns that into `position: sticky` with no per-breakpoint option in the
  schema (only always / on-scroll-up / never, all global). Neutralising it
  above 990px keeps the setting doing its job on mobile, where it was asked
  for, without the desktop header pinning too.

  !important because the native rule lives in header.liquid's own
  {% stylesheet %} block, which content_for_header injects after this file —
  same specificity would let source order decide, and base.css loads first.
*/
@media screen and (min-width: 990px) {
  .header-section:has(> #header-component[sticky='always']),
  .header-section:has(> #header-component[sticky='scroll-up'][data-sticky-state='active']) {
    position: static !important;
  }
}

/*
  Price, 01/08/2026. The price is interface, not reading text (III-14.5) —
  it must stay on the heading/subheading font regardless of what the body
  font is set to. The main product price already gets this via type_preset:
  h6 in the six product templates. This one can't be fixed the same way:
  sections/product-information.liquid's sticky-add-to-cart bar builds its
  own markup with no type_preset, so it falls back to inheriting the body
  font from the page. Matches the h6 default (subheading) directly.
*/
.sticky-add-to-cart__price {
  font-family: var(--font-subheading--family);
}

/*
  Desktop nav in uppercase, 01/08/2026 — desktop-only work, mobile untouched
  by rule. The block's own "type_case_primary_link" setting looked like the
  right lever, but it isn't scoped by breakpoint: blocks/_header-menu.liquid
  and snippets/header-drawer.liquid both render 'menu-font-styles' from the
  SAME block_settings, so setting it to uppercase on the block put the mobile
  drawer ("HOME", "DOGS"...) in uppercase too — caught by opening the drawer
  and looking, not by reading the code. Reverted that setting to "none" and
  moved the transform here instead, gated to >= 990px, so the drawer can
  never see it regardless of which markup variant renders at a given width.
*/
@media screen and (min-width: 990px) {
  .menu-list__link-title {
    text-transform: uppercase;
  }
}

/*
  The "No. <SKU>" cartela line, removed from every product card, every
  width — 01/08/2026, by request ("elimina esto de todas las tarjetas de
  producto"). Previously only hidden on desktop collection cards (as part
  of matching them to Best Sellers, below); this one is unconditional so
  mobile collection cards lose it too. lua-product-cartela.liquid itself
  isn't touched — it's a real block that still renders in the theme
  editor and on any other card that adds it — this only stops it from
  being visible anywhere it currently appears.
*/
.lua-card-cartela {
  display: none;
}

/*
  Collection grid card, matched to the Best Sellers composition — 01/08/2026,
  by request. First pass only reordered the existing flex children; the user
  looked at it and rejected it ("no lo quiero así, quiero que se vea como las
  tarjetas de best sellers que hemos hecho") because the cart control was
  still the native quick-add floating over the photo, not a real button
  sitting next to the price. Desktop only by explicit choice, confirmed
  before touching anything: mobile collection cards keep the cartela and the
  native quick-add they already had, untouched.

  .product-grid-container scopes this to sections/main-collection.liquid and
  sections/search-results.liquid (the only two sections using that wrapper
  class) — it does NOT reach product-recommendations, the cart, or quick-add
  modals, which use `.product-card` too but a different section wrapper.

  Getting the button into the same row as the price needed one real Liquid
  addition: blocks/lua-product-cart-button.liquid, added after the price
  block in every collection template's product-card block_order. It was
  that or dissolve the gallery block's positioning (`display: contents`) to
  pull the native quick-add out with it — rejected because the gallery is
  also what the sale/sold-out badges anchor to, and moving it would have
  broken their position for a saving that wasn't worth it. The native
  quick-add itself was NOT touched: it still exists, still works, and is
  simply hidden here because this new button replaces it on desktop only.

  Layout is CSS Grid, not the flex + order from the first pass: gallery,
  rating and title each span both columns; price and the new cart button are
  the only two items left un-spanned, so the grid's auto-placement drops them
  into the two columns of the same final row without any explicit
  grid-column index.

  Reopens III-14.2 (why the cartela block exists in a collection grid) for
  desktop only: it stops rendering here on purpose, same family of exception
  as lua-trust-bar.liquid and the reopened lua-d-tiles/lua-d-best-sellers.
  Its removal also hides the "No. <SKU>" line, which for this catalogue was
  a raw dropship UUID rather than a real reference code — not a fix, a
  side-effect of no longer showing that field here.

  The price color override answers to the same already-documented problem
  as the rest of `snippets/price.liquid`'s hardcoded style (see "La
  tipografía de lectura cambia a Inter" further up): `product-card .price`
  is written there with its own `!important` and an undocumented green,
  #16835A. That root cause is still open. This only out-specifies it for
  this one context so the price reads like Best Sellers' dark, bold price.

  SECOND PASS, same day: "quiero que sean exactas de fuente, márgenes,
  tamaño de precio, posición, todo." Every value below was taken by reading
  getComputedStyle on the live Best Sellers card, not by eye: card radius
  and shadow, the 16/18/20/18 padding of .luad-bs__body, the title's 16px
  700 weight and 10px margin-top, the price's 19px, the 24px grid gutter and
  the star size (Best Sellers uses the shared component's own 14px default;
  the collection card's lua-product-rating block was overriding it to 15px
  for the PDP, so that 1px was the one real gap found).

  THIRD PASS, same day: "quiero que el precio título etc de las tarjetas de
  producto se vean todas como las de best sellers" — extended from desktop
  only to every width. Everything below except the 4-column grid override
  now applies unconditionally; forcing 4 fixed columns still only makes
  sense at desktop widths (the native grid is 2 columns below 750px by its
  own default, matching "misma medida" was always a desktop-specific ask),
  so that one rule alone stays inside its own min-width:990px block at the
  end of this rule set.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .product-card__content {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  column-gap: 12px;
  /*
    01/08/2026 ("hay mucho margen entre estrellas, título y precio"): the
    native .gap-style class puts its own row-gap here (18px, from
    --product-card-gap) — found by measuring, not guessing — which was
    stacking on top of the margin-top already set on title/price below.
    Zeroed so the only spacing between rows is the margin each row sets on
    itself.
  */
  row-gap: 0;
}

/*
  .lua-also-like entra en este :is el 09/08/2026: la franja "You may also
  like" del pie de las subcategorías reutiliza la misma tarjeta de
  producto letra por letra, así que necesita el mismo diseño compartido
  -- corazón, píldora de colores, cinta de best seller -- sin escribirlo
  de nuevo. Ver sections/lua-collection-also-like.liquid.
*/

/*
  [data-testid='product-list'] entra en este :is el 08/08/2026 ("las
  tarjetas de Discover something new tienen que ser igual que el resto").
  Todo el diseño de la tarjeta de colección —el orden de las filas, los
  18px laterales, el precio en negro, el tamaño de las estrellas— vivía
  limitado a las dos clases de arriba, así que la lista de productos de la
  404 no recibía NINGUNA: salía sin sangrado lateral, con el símbolo de la
  moneda cortado contra el borde, y con el precio en verde porque tampoco
  le llegaba el override de color.

  Se amplía el selector en lugar de copiar las reglas a otro archivo: son
  una docena y duplicarlas era garantizar que un día dejaran de coincidir,
  que es justo lo que había pasado aquí.

  Comprobado que no alcanza la home móvil congelada: su carrusel usa
  .lua-bs__card y ningún contenedor con ese data-testid.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .product-card__content > .card-gallery {
  grid-column: 1 / -1;
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-pdp-rating {
  order: 1;
  grid-column: 1 / -1;
  margin-top: 0;
  padding-inline: 18px;
  padding-top: 10px;
}

/* Matches .luad-bs__rating exactly: Best Sellers never applies the PDP's 15px override, so it stays at the shared component's own 14px/14px default. */
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-pdp-rating__inner {
  --lua-star-size: 14px;
  --lua-rating-value-size: 14px;
}

/*
  01/08/2026 ("no quiero que salga uno encima de otro"): "4.6 (391)" was
  wrapping onto two lines — .lua-rating__value had no white-space set
  (defaults to normal) and its flex parent was sizing it narrower than the
  text needs. Scoped to this card rather than added to the shared
  .lua-rating__value rule in its own block (further up this file): that
  rule also renders inside the frozen mobile home's Best Sellers card, and
  a change there needs its own flagged decision, not a side effect of a
  collection-card fix.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-rating__value {
  white-space: nowrap;
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .product-card__content > a.contents.user-select-text {
  order: 2;
  grid-column: 1 / -1;
  padding-inline: 18px;
}

/*
  SUBTÍTULO DE LA TARJETA (08/08/2026). El título se parte por el separador
  del propio título —ver blocks/product-title.liquid— y la segunda mitad
  baja a su propia línea, más pequeña y en gris.

  Fuera de las tarjetas NO se toca nada: en la ficha de producto el
  subtítulo sigue siendo parte de la misma frase, con su separador
  restaurado por ::before, así que el título se lee exactamente igual que
  antes de este cambio.
*/
.lua-title__sub::before {
  content: ' – ';
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-title__sub {
  display: block;
  margin-top: 4px;
  /*
    11px en móvil y 12 desde tableta. Medido sobre los nueve subtítulos que
    hoy tiene el catálogo, en una tarjeta de 201px: a 12px se recortaban
    seis, a 11px se recortan cuatro. Bajar a 10 dejaba sólo uno recortado
    pero ya no se lee.
  */
  font-size: 11px;
  font-weight: 500;
  line-height: 1.25;
  letter-spacing: 0.01em;
  color: #5b6664;
  /*
    Una línea siempre, recortando con puntos suspensivos si no cabe: es lo
    que mantiene todas las tarjetas de la fila exactamente a la misma
    altura, que era el motivo de la petición.
  */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-title__sub::before {
  content: none;
}

@media screen and (min-width: 750px) {
  :is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .lua-title__sub {
    font-size: 12px;
  }
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .product-card__content > a.contents.user-select-text p {
  margin-top: 8px;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.3;
  color: #0a0f0e;
}

/* .lua-card-cartela is now hidden unconditionally, above — see that rule's own comment. */

/*
  Cart button removed from every collection card, 01/08/2026 ("el botón de
  el carrito puedes quitarlo de las colecciones") — blocks/lua-product-cart-
  button.liquid's block was taken out of every collection template's
  block_order, so .lua-card-cart-btn no longer renders here at all; the
  file itself stays in the repo, just unused for now. Price no longer
  shares its row with anything, so it spans both grid columns and the
  padding/margin that used to separate it from the button next to it was
  trimmed too — that spacing was the biggest single cause of "demasiado
  espacio en blanco" once the button was gone.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) product-price.text-block {
  order: 3;
  grid-column: 1 / -1;
  margin-top: 10px;
  padding-inline: 18px;
  padding-bottom: 14px;
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) product-card .price {
  font-size: 19px !important;
  font-weight: 700 !important;
  color: #0a0f0e !important;
}

/*
  The native quick-add (snippets/quick-add.liquid) is hidden rather than
  restyled: with the cart button gone, this card no longer shows any
  add-to-cart control at all — clicking through to the product page is the
  only path, by the same request that removed the button.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .quick-add {
  display: none;
}

/*
  Card chrome, matched to .luad-bs__card exactly. The native radius (18px)
  and shadow (_product-card-gallery.liquid) were close but not identical,
  and that file also lifts the card on hover — Best Sellers has no hover
  motion at all, so the lift is switched off here too, not just resized.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) product-card {
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(10, 15, 14, 0.04), 0 10px 24px rgba(10, 15, 14, 0.07);
  transition: none;
}

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) product-card:hover {
  transform: none;
  box-shadow: 0 1px 2px rgba(10, 15, 14, 0.04), 0 10px 24px rgba(10, 15, 14, 0.07);
}

@media screen and (min-width: 990px) {
  /*
    Same card size as Best Sellers — 01/08/2026, by request ("quiero que
    todas las tarjetas tengan la misma medida"). The native grid is
    auto-fill (snippets/product-grid.liquid sets --product-grid-columns-
    desktop to `repeat(auto-fill, minmax(<card-size>, 1fr))`), so it was
    fitting 5 across at 1440px instead of the 4 columns Best Sellers uses.
    Fixed to 4 explicit columns and the same 24px gutter on both axes
    (--luad-gutter); !important because the native rule comes from a
    {% style %} tag rendered in the body, after base.css, so at equal
    specificity it would win by source order.
  */
  :is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like) .product-grid {
    --product-grid-columns-desktop: repeat(4, minmax(0, 1fr)) !important;
    gap: 24px !important;
  }
}

/*
  Footer swap, 01/08/2026, by request ("quiero que hagamos esta sección en
  el footer de mi home de escritorio"), confirmed site-wide. EXTENDED TO
  EVERY WIDTH the same day ("quiero el mismo footer pero en la version
  movil, adaptado claro") — this hiding rule lost its `@media
  (min-width: 990px)` wrapper when sections/lua-d-footer.liquid grew a
  mobile layout, since the new footer now covers every breakpoint.

  sections/footer-group.json can't gate its own sections by breakpoint the
  way templates/index.json's home sections can, so the swap happens here:
  the group's original sections (the black newsletter bar, the trust-badges
  app block, footer-utilities) are hidden unconditionally, and
  sections/lua-d-footer.liquid — added to that same group — is the only
  one left rendering, at any width.

  Selectors match by ID suffix (not the full
  "shopify-section-sections--<n>__<key>" string) because the numeric
  group id is an implementation detail that could change; the section key
  after "__" is the stable part, taken straight from footer-group.json.
*/
[id$="__section_xkyWAQ"],
[id$="__178135956432cca26a"],
[id$="__1768264008fca6f01c"],
[id$="__footer_utilities"] {
  display: none;
}

/*
  Announcement bar gradient, 02/08/2026, by request ("dale un ligerísimo
  degradado... para darle como densidad"). The earlier attempt reused the
  footer's dark-teal gradient and read as too strong (removed same day);
  this one stays inside the bar's own native colour instead of introducing
  a second one — the two stops are the live color-scheme-4 background
  (rgb(132, 220, 216), read via getComputedStyle on the live site) shifted
  in HSL, same hue and saturation. First pass (±5% lightness) was
  invisible ("ni se nota"); widened to ±12% so the depth actually reads.
*/
.announcement-bar {
  background: linear-gradient(135deg, #b3eae7, #54cfc9) !important;
}

/*
  The rule that hid the old editor-generated "Questions" accordion
  (section key 1781360111432cd99b) below 990px lived here for a few hours
  on 02/08/2026, while sections/lua-product-faq.liquid was mobile-only.
  Both are gone now: the new FAQ covers every width and the old section
  was removed from all six product templates outright, so there is
  nothing left to hide.
*/

/*
  Fondo blanco roto, 02/08/2026 a petición ("que el resto de la web adopte
  un fondo beige blanco roto muy fino").

  ALCANCE: primero se acotó a escritorio, porque al plantear el impacto el
  usuario eligió dejar la home móvil como estaba. Minutos después pidió
  aplicarlo "a toda la web", y esa segunda decisión es la que vale: la
  media query desapareció y el beige entra a cualquier ancho.

  ESO INCLUYE LA HOME MÓVIL CONGELADA, a sabiendas. Tres de sus secciones
  —lua-premium-categories, lua-life-at-home y lua-contact-info— pintan su
  fondo con var(--color-background) y por tanto pasan de blanco a beige.
  Ninguno de los seis archivos protegidos ni de las siete claves se toca,
  así que check-mobile-frozen.sh sigue en OK: este es precisamente el caso
  que el script NO puede ver, la trampa nº2 de las tres documentadas.
  Queda anotado aquí para que sea una excepción con constancia y no un
  descuido, y basta con devolver la media query para revertirlo.

  Se sigue sin tocar el esquema de color de config/settings_data.json:
  hacerlo desde ahí arrastraría también las tarjetas y los popovers, que
  aquí se quieren blancos.

  Las tarjetas se fuerzan a blanco puro: son las que tienen que despegarse
  del papel, y si adoptaran el mismo beige el contraste desaparecería.
*/
/*
  `html body` y el prefijo `body ` en el resto no son adorno: hay DOS
  hojas que se cargan después de este archivo y pintan lo mismo con la
  misma especificidad, así que por orden de origen ganarían. Una es la
  hoja en línea de los esquemas de color
  (`body, .color-scheme-1, … { background: var(--color-background) }`), la
  otra el paquete compilado de los {% stylesheet %} de cada sección. Un
  selector más específico gana sin depender del orden y sin !important.
*/
html body {
  background-color: #fbfaf7;
}

/* Las secciones que pintan su propio fondo con la variable del esquema. */
body .luad-hero,
body .luad-bs,
body .luad-tiles,
body .luad-story,
body .luad-service,
body .luad-brand-promise,
body .luad-closing,
body .luad-footer__main,
body .lua-categories,
body .lua-lah,
body .lua-contact,
body .shopify-section:not(.header-section) .section-background {
  background-color: #fbfaf7;
}

/* El papel cambia; las tarjetas no. */
body .luad-bs__card,
body .product-grid-container product-card,
body .product-grid__item,
body .lua-faq__item {
  background-color: #ffffff;
}

/* ============================================================
   MEGA-MENÚ DE CATEGORÍAS — 08/08/2026, a una referencia entregada
   ============================================================

   Las subcategorías de Dogs y Cats dejan de ser una lista de enlaces y
   pasan a ser columnas con icono, título y frase, separadas por filetes.

   Todo cuelga de `.mega-menu__link:has(.lua-mm__icon)`, es decir, sólo de
   las entradas que lua-menu-entry ha reconocido. Un menú que no esté
   previsto ahí conserva su aspecto de siempre: esto no puede desbordarse
   a la navegación del resto de la tienda.

   No toca la versión móvil. El menú de móvil es un cajón distinto
   (`header-drawer`), no este.
   ============================================================ */

.mega-menu__link:has(.lua-mm__icon) {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 26px 18px 24px;
  text-align: center;
  text-decoration: none;
}

/*
  El tema NO crea un <li> por enlace: mete los cinco dentro de un mismo
  `li.mega-menu__column`, cada uno en su <div>. Medido en el DOM, no
  supuesto — la primera versión de esto repartía columnas que no existían
  y los cinco salían apilados en una.

  Así que la fila se monta aquí: el <li> pasa a ser una rejilla de
  columnas automáticas iguales, y se estira a todo el ancho del panel
  porque su sitio de origen era una sola celda de 210px.
*/
.mega-menu__list:has(.lua-mm__icon),
.mega-menu__column:has(.lua-mm__icon) {
  grid-column: 1 / -1;
}

.mega-menu__column:has(.lua-mm__icon) {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  align-items: start;
}

/* El filete separa hermanos, así que el primero se queda sin él. */
.mega-menu__column:has(.lua-mm__icon) > div + div {
  border-inline-start: 1px solid rgba(10, 15, 14, 0.08);
}

/*
  UNA ENTRADA SIN RECONOCER NO PUEDE ROMPER LA FILA. Pasó de verdad: en el
  menú de Cats, "Toys" apunta a /collections/cats en vez de a cat-toys —un
  error del menú de navegación, no del tema— y al no estar en el mapa
  salía sin icono, pegada arriba y desalineada respecto a sus cuatro
  vecinas.

  Aquí se le da la misma caja que a las demás y se le reserva el hueco del
  icono con un pseudo-elemento vacío, así la fila se sostiene aunque el
  enlace esté mal apuntado o aunque mañana se añada una subcategoría que
  todavía no tenga dibujo.
*/
.mega-menu__column:has(.lua-mm__icon) .mega-menu__link:not(:has(.lua-mm__icon)) {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 26px 18px 24px;
  text-align: center;
  text-decoration: none;
}

.mega-menu__column:has(.lua-mm__icon) .mega-menu__link:not(:has(.lua-mm__icon))::before {
  content: '';
  display: block;
  width: 48px;
  height: 48px;
}

.mega-menu__column:has(.lua-mm__icon) .mega-menu__link:not(:has(.lua-mm__icon)) .mega-menu__link-title {
  font-family: var(--lua-font-ui, var(--font-paragraph--family));
  font-size: 15px;
  font-weight: 700;
  line-height: 1.25;
  color: #0a0f0e;
}

.lua-mm__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  color: #18acb1;
}

.lua-mm__icon svg {
  /* display:block y medidas explícitas: base.css impone un svg/img global. */
  display: block;
  width: 44px;
  height: 44px;
}

.lua-mm__title {
  font-family: var(--lua-font-ui, var(--font-paragraph--family));
  font-size: 15px;
  font-weight: 700;
  line-height: 1.25;
  color: #0a0f0e;
}

.lua-mm__sub {
  max-width: 22ch;
  font-family: var(--font-paragraph--family);
  font-size: 13px;
  font-weight: 400;
  line-height: 1.4;
  color: #5b6664;
}

/* Sólo el icono responde al puntero: el panel entero quieto. */
.mega-menu__link:has(.lua-mm__icon) .lua-mm__icon {
  transition: transform 0.25s var(--ease-out-quad, ease-out);
}

.mega-menu__link:has(.lua-mm__icon):hover .lua-mm__icon {
  transform: translateY(-2px);
}

.mega-menu__link:has(.lua-mm__icon):hover .lua-mm__title {
  color: #18acb1;
}

@media (prefers-reduced-motion: reduce) {
  .mega-menu__link:has(.lua-mm__icon) .lua-mm__icon {
    transition: none;
  }
}

/*
  El apartado abierto se marca en turquesa con un filete debajo, como en
  la referencia. Se engancha a [aria-expanded] y no a :hover para que
  siga marcado mientras el panel está abierto, también si se abrió con el
  teclado.
*/
.menu-list__link[aria-expanded='true'] {
  position: relative;
  color: #18acb1;
}

.menu-list__link[aria-expanded='true']::after {
  content: '';
  position: absolute;
  inset-inline: 0;
  bottom: -6px;
  height: 2px;
  border-radius: 2px;
  background-color: #18acb1;
}

/* ============================================================
   PÍLDORA "AVAILABLE IN N COLORS" — 08/08/2026, a una referencia
   ============================================================

   Se coloca en la MISMA CELDA de la rejilla que la galería, no encima de
   la tarjeta entera: la tarjeta incluye título y precio, así que un
   position:absolute respecto a ella habría dejado la píldora flotando
   sobre el texto. Compartiendo celda queda anclada al pie de la
   fotografía pase lo que pase con el alto del texto.

   Alcance: sólo las rejillas de producto, igual que el resto de reglas de
   la tarjeta. La home móvil congelada usa su propia tarjeta y no la ve.
   ============================================================ */

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
  .product-card__content
  > .lua-colors {
  /*
    Medido en el DOM: con sólo `grid-row: 1` la píldora se llevaba una
    fila entera de 40px POR ENCIMA de la foto y empujaba toda la tarjeta
    hacia abajo. La galería se coloca automáticamente y caía en la fila 2.
    Hay que anclar las dos a la misma fila, y la regla de al lado se
    encarga de la galería.
  */
  grid-column: 1 / -1;
  grid-row: 1;
  align-self: end;
  justify-self: start;
  z-index: 2;
  margin: 0 0 12px 12px;

  display: inline-flex;
  align-items: center;
  gap: 8px;
  max-width: calc(100% - 24px);
  padding: 6px 12px 6px 8px;
  border-radius: 999px;
  /*
    Sólo el fondo se vuelve translúcido. El texto y los puntos son hijos
    con su propio color, así que bajar el alfa del background no los
    toca; con `opacity` se habrían desvanecido también, que es justo lo
    que no se quiere.

    El desenfoque no es decorativo: a 0.72 de alfa, sobre una fotografía
    con detalle, el texto de 11.5px empezaba a competir con lo que hay
    debajo. Difuminando el fondo se mantiene legible sin subir el alfa.
  */
  background-color: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(7px);
  -webkit-backdrop-filter: blur(7px);
  box-shadow: 0 1px 4px rgba(10, 15, 14, 0.1);
  /* La tarjeta entera es un enlace; esto no debe robarle el clic. */
  pointer-events: none;
}

/*
  Sólo en las tarjetas que llevan píldora, con :has, para no tocar el
  emplazamiento de la galería en las demás.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
  .product-card__content:has(> .lua-colors)
  > .card-gallery {
  grid-row: 1;
}

.lua-colors__mark {
  display: flex;
  flex: 0 0 auto;
  color: #18acb1;
}

.lua-colors__mark svg {
  display: block;
  width: 16px;
  height: 16px;
}

.lua-colors__text {
  font-family: var(--font-paragraph--family);
  font-size: 11.5px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  color: #0a0f0e;
}

.lua-colors__dots {
  display: inline-flex;
  flex: 0 0 auto;
  gap: 3px;
}

.lua-colors__dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  /* El filete es lo único que hace visible un punto blanco. */
  box-shadow: inset 0 0 0 1px rgba(10, 15, 14, 0.18);
}

/* En rejillas estrechas cabe la cifra, no los puntos. */
@media screen and (max-width: 749px) {
  :is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
    .product-card__content
    > .lua-colors {
    padding: 5px 10px 5px 7px;
    gap: 6px;
  }

  .lua-colors__text {
    font-size: 10.5px;
  }

  /*
    En móvil la píldora comparte fila con el corazón, que está en la
    esquina de abajo a la derecha. Con "Available in" delante sumaban más
    que el ancho de la tarjeta y se montaban: medido, 11 de 24 tarjetas
    solapaban. Se queda la cifra, que es lo que informa.
  */
  .lua-colors__pre,
  .lua-colors__dots {
    display: none;
  }
}

/* ============================================================
   SUBCATEGORÍAS EN EL CAJÓN DE MÓVIL — 08/08/2026
   ============================================================

   El cajón enseñaba las subcategorías como texto gris suelto bajo el
   nombre de la categoría: la misma jerarquía visual que un pie de página,
   y sin decir qué hay detrás de cada una. Aquí pasan a ser filas con el
   icono en un disco, el nombre y su frase — el mismo contenido que el
   mega-menú de escritorio, servido por el mismo snippet.

   Todo cuelga de `.lua-mm__icon`, es decir, sólo de las entradas que
   lua-menu-entry reconoce. Los demás enlaces del cajón —Home, Best
   Sellers, Track Order— no se tocan.
   ============================================================ */

.menu-drawer .menu-drawer__menu-item--child:has(.lua-mm__icon) {
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr);
  align-items: center;
  column-gap: 14px;
  row-gap: 2px;
  padding: 10px 0;
}

.menu-drawer .menu-drawer__menu-item--child .lua-mm__icon {
  grid-row: 1 / span 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background-color: #eaf5f5;
  color: #2f8a8d;
}

.menu-drawer .menu-drawer__menu-item--child .lua-mm__icon svg {
  display: block;
  width: 24px;
  height: 24px;
}

.menu-drawer .menu-drawer__menu-item--child .lua-mm__title {
  align-self: end;
  font-family: var(--lua-font-ui, var(--font-paragraph--family));
  font-size: 16px;
  font-weight: 600;
  line-height: 1.2;
  color: #0a0f0e;
}

.menu-drawer .menu-drawer__menu-item--child .lua-mm__sub {
  align-self: start;
  font-family: var(--font-paragraph--family);
  font-size: 13px;
  font-weight: 400;
  line-height: 1.35;
  color: #6b7574;
  /*
    Dos líneas como mucho. "Adventure starts with comfort and control."
    ocupa tres en una columna de 300px y separaba tanto las filas que la
    lista dejaba de leerse como un grupo.
  */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}

/*
  Un poco de aire entre el nombre de la categoría y su lista, y un filete
  que agrupa: sin él, las filas con icono flotaban entre dos titulares
  grandes sin pertenecer a ninguno.
*/
.menu-drawer .menu-drawer__menu--childlist:has(.lua-mm__icon) {
  margin-block: 6px 18px;
  padding-inline-start: 2px;
  border-inline-start: 2px solid #eaf5f5;
  padding-inline-start: 14px;
}

/* ============================================================
   ETIQUETA DE BEST SELLER EN LA TARJETA — 08/08/2026
   ============================================================

   Píldora compacta arriba a la izquierda, con el corazón a su lado en la
   misma línea.

   Antes fue una cinta plegada como la de la home, primero horizontal y
   luego vertical de canto. Las dos ocupaban la esquina del corazón: la
   horizontal obligaba a bajarlo hasta media fotografía y la vertical no
   quedaba bien. La esquina de la derecha tampoco servía —dos de los
   cuatro best sellers tienen descuento, y ahí es donde va esa etiqueta—
   así que la solución es una forma que quepa AL LADO del corazón en vez
   de disputarle el sitio.

   Va en la misma celda de rejilla que la galería, como la píldora de
   colores.
   ============================================================ */

:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
  .product-card__content
  > .lua-bs-ribbon {
  grid-column: 1 / -1;
  grid-row: 1;
  align-self: start;
  justify-self: start;
  z-index: 3;
  margin: 12px 0 0 12px;

  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 34px;
  padding: 0 11px;
  border-radius: 999px;
  background-color: #14969b;
  box-shadow: 0 1px 4px rgba(10, 15, 14, 0.16);
  pointer-events: none;
}

.lua-bs-ribbon__star {
  display: block;
  width: 12px;
  height: 12px;
  color: #ffffff;
}

.lua-bs-ribbon__text {
  font-family: var(--lua-font-ui, var(--font-paragraph--family));
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  color: #ffffff;
}

/*
  EL CORAZÓN SE VA A LA ESQUINA INFERIOR DERECHA. Con eso las cuatro
  esquinas de la fotografía quedan repartidas sin que ninguna se dispute:
  best seller arriba a la izquierda, descuento arriba a la derecha,
  colores abajo a la izquierda y el corazón abajo a la derecha.

  Deja de ser `position: absolute` y pasa a ocupar la misma celda de
  rejilla que la galería. Absoluto se posicionaba respecto a la tarjeta
  ENTERA —que incluye título y precio— así que un `bottom: 12px` lo habría
  dejado debajo del precio en vez de sobre la foto.

  Sólo aquí: en la página de favoritos el corazón sigue siendo absoluto
  dentro de su propio marco, y esa regla vive en lua-wishlist.css.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
  .product-card__content
  > .lua-wish {
  position: static;
  grid-column: 1 / -1;
  grid-row: 1;
  align-self: end;
  justify-self: end;
  z-index: 3;
  margin: 0 12px 12px 0;
}

/*
  En móvil la píldora se encoge. La tarjeta mide 189px, así que con el
  tamaño de escritorio la etiqueta ocupaba el 61% del ancho de la
  fotografía: demasiado peso para lo que es.

  Medidos cuatro tamaños sobre la tarjeta real —51%, 47%, 44% y 42%— y
  elegido el de 8px, que baja al 44%. El siguiente escalón ganaba dos
  puntos y ya se leía mal.
*/
@media screen and (max-width: 749px) {
  :is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
    .product-card__content
    > .lua-bs-ribbon {
    height: 22px;
    gap: 4px;
    padding: 0 7px;
    margin: 10px 0 0 10px;
  }

  .lua-bs-ribbon__star {
    width: 9px;
    height: 9px;
  }

  .lua-bs-ribbon__text {
    font-size: 8px;
    letter-spacing: 0.05em;
  }
}

/*
  Y la galería comparte esa fila SIEMPRE, no sólo cuando hay etiqueta:
  ahora el corazón también vive en ella, y el corazón está en todas las
  tarjetas. Sin esto, cada capa se llevaba una fila propia y empujaba la
  foto hacia abajo.
*/
:is(.product-grid-container, .product-recommendations, [data-testid='product-list'], .lua-also-like)
  .product-card__content
  > .card-gallery {
  grid-row: 1;
}
