.gbbRemoveCartItemConfirmationMainContainer {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  background-color: rgba(24, 24, 24, 0.8);
  z-index: 1000000000;
}
.gbbRemoveCartItemConfirmationContainerModal {
  position: fixed;
  z-index: 1000000000;
  transform: translate(0, -50%);
  background: #ffff;
  border-radius: 5px;
  text-align: center;
  padding: 10px;
  max-height: 95vh;
  /* left: 5vw;
    top: 5vh;
    right: 5vw; */
  left: 5vw;
  right: 5vw;
  top: 50vh;
}
.gbbRemoveCartItemConfirmationContainerModal {
  display: grid;
  grid-gap: 10px;
}

.gbbCartPageCartProductsContainerHeader {
  display: grid;
  /* grid-template-columns: 1fr 0.2fr; */
  justify-content: space-between;
  align-items: center;
}
.gbbCartPageCartProductsContainerHeaderLabel {
  justify-self: start;
  font-size: 16px;
  font-weight: bold;
}
.gbbCartPageCartProductsModalClose {
  justify-self: end;
  padding: 12px 10px;
  font-weight: bold;
  transform: rotate(45deg);
  font-size: 35px;
  position: absolute;
  top: -8px;
  right: 0px;
  color: #b2b5b9;
  cursor: pointer;
  user-select: none;
}
.gbbCartPageCartModalProductsContainer {
  display: grid;
  grid-auto-flow: column;
  grid-gap: 5px;
  /* overflow-x: auto; */
  overflow-y: auto;
  max-height: 70vh;
}
.gbbCartPageCartModalProductsContainer {
  grid-auto-flow: row;
}
.gbbCartPageCartModalProductContainer {
  display: grid;
  grid-auto-flow: column;
  grid-gap: 10px;
  position: relative;
  padding: 5px;
}
.gbbCartPageCartModalProductContainer {
  grid-template-columns: 0.5fr 3fr;
}

.gbbCartPageCartProductImageContainer {
  display: grid;
  width: 80px;
  height: 80px;
  border: 1px solid #cfc9c9;
  overflow: hidden;
  object-fit: contain;
}
.gbbCartPageCartModalProductImage {
  width: 100%;
  height: 100%;
}
.gbbCartPageCartModalProductTextContainer {
  font-size: 14px;
  /* width: 165px; */
  display: grid;
  grid-template-columns: 1fr 0.2fr;
  justify-content: space-between;
  align-items: start;
  grid-gap: 10px;
}
.gbbCartPageCartModalProductTitle {
  width: 100%;
  text-align: left;
}
.gbbCartModalProductTitleQty {
  display: grid;
  justify-content: start;
  width: unset;
}
.gbbCartPageCartModalProductQuantity {
  justify-self: start;
}
.gbbCartPageCartModalProductPriceQtyContainer {
  display: grid;
  grid-template-columns: 1fr 2fr;
  grid-gap: 5px;
}
.gbbCartPageCartModalProductPrice {
  font-weight: bold;
}
.gbbUnavailableProductsModalFooter {
  display: grid;
  grid-gap: 10px;
}
.gbbCartPageProductsModalFooterBackBtn,
.gbbCartPageProductsModalFooterRemoveBtn {
  padding: 10px 10px;
  text-align: center;
  color: #000;
  border-radius: 5px;
  font-size: 16px;
  cursor: pointer;
  width: 100%;
  font-weight: 500;
  background: black;
  color: white;
  border: none;
}
.gbbCartPageProductsModalFooter {
  display: grid;
  grid-gap: 10px;
  grid-auto-flow: column;
}
.gbbDisabled {
  pointer-events: none;
  opacity: 0.2;
  /* background-color: black; */
}

.gbbExtBundlesHTMLContainer{
  width: 100%;
}

.gbbExtBundleHTMLContainer{
  height: fit-content;
  display: grid;
  grid-template-columns: 1fr 4fr 1.2fr;
  margin: 20px 0px;
  padding: 10px;
  border-radius: 5px;
}


.gbbExtBundleHTMLContainer{
  border: 1px solid #bcbcbc;
}

.gbbExtBundleHTMLContainerSideCart{
  grid-template-columns: 2fr 4fr 1fr;
}

.gbbExtBundleImageContainer{
  /* height: 10%; */
  width: 80%;
}

.gbbExtBundleImage{
  width: 100%;
  object-fit: contain;
  border-radius: 4px;
}

.gbbExtBundleTextContainer{
  padding: 10px;
}

.gbbExtBundleTitle{
  display: grid;
  grid-template-columns: auto 1fr;
  grid-gap: 4px;
}

.gbbExtSideCartBundleTitle{
  grid-template-rows: 1fr 1fr;
  grid-template-columns: auto;
  grid-gap: 0px
}

.dbbExtBundleId{
  display: grid;
  grid-template-columns: auto 1fr;
  grid-gap: 4px;
}

.gbbExtBundleTitleLabel, .gbbExtBundleIdLabel, .gbbExtBundleContentsTextLabel{
  font-weight: 800;
}

.gbbExtPriceAndRemoveContainer{
  text-align: right;
  padding: 10px;
}

.gbbExtPriceContainer{
  display: grid;
  grid-template-columns: 1fr auto;
  grid-gap: 5px;
}

.gbbExtBundleOriginalPriceContainer{
  text-decoration: line-through;
  font-size: smaller;
}

.gbbExtBundleDiscountedPrice{
  font-weight: 900;
}

.gbbExtNoDiscountPrice{
  grid-template-columns: 1fr;
}
.gbbExtBundleRemoveContainerButton{
  display: flex;
  float: right;
}

.gbbExtBundleRemoveButton{
  color: red;
  cursor: pointer; 
  width: fit-content;
}

@media (min-width: 1023px) {
  .gbbCartPageProductsModalFooter {
    grid-template-columns: 1fr 1fr;
  }
  .gbbRemoveCartItemConfirmationContainerModal{
    left: 30vw;
    right: 30vw;
  }
}


.gbbExtBundleUpsellContainer:not(:empty){
  display: grid;
  margin: 5% 0;
  border-radius: 5px;
  grid-gap: 5px;
}

.gbbExtBundleRedirectButton {
  display: grid;
  justify-content: center;
  align-items: center;
  /* background: black; */
  /* color: white; */
  /* padding: 5px; */
  cursor: pointer;
  width: 100%;
  border: 2px solid gray;
  border-radius: 5px;
  min-height: 45px;
  text-align: center;
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
  padding-inline: 10px;
}

.gbbExtHide{
  display: none;
}

.gbbOfferWidgetFieldSet {
  border-radius: 5px;
  border: 1.5px solid #00000047;
  padding: 10px;
  text-align: left;
}
.gbbOfferWidgetTitle{
  color: black;
  font-weight: 600;
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
}

.gbbOfferWidgetBody{
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
}
.gbbOfferWidgetBody .gbbOfferWidgetDetailsSec .gbbOfferWidgetImg{
  height: 50px;
  width: 50px;
  min-width: 50px;
  min-height: 50px;
  border-radius:5px;
  object-fit: cover;
}
.gbbOfferWidgetBody .gbbOfferWidgetDetailsSec{
  display: flex;
  align-items: center;
  gap: 10px;
}
.gbbOfferWidgetBody .gbbOfferWidgetDetailsSec .gbbOfferWidgetDescription{
  font-size: 12px;
  text-align: left;
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
}
.gbbOfferWidgetBody .gbbOfferWidgetBtnSec .gbbOfferWidgetRedirectBtn{
  background: none;
  outline: none;
  border: none;
  /* background-color: black;
  color: white; */
  padding: 5px;
  border-radius: 5px;
  cursor: pointer;
  /* white-space: nowrap; */
  overflow: hidden;
  /* text-overflow: ellipsis; */
  width: 100px;
  /* height: 30px; */
  /* display: inline-block; */
  font-size: 10px;
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  min-height: 30px;
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
}
.gbbSpinnerLoaderContainer {
  display: flex;
  justify-content: center;
  align-items: center;
}
.gbbSpinnerLoader {
  width: 12px;
  height: 12px;
  border: 2px solid;
  border-bottom-color: transparent;
  border-radius: 50%;
  display: inline-block;
  box-sizing: border-box;
  animation: spinnerLoaderRoatation .5s linear infinite;
}
.gbbExtBundleRedirectButton .gbbSpinnerLoader{
  width: 20px;
  height: 20px;
}

.gbbExtProductCardPrice--hidden{
  visibility: hidden !important;
}

@keyframes spinnerLoaderRoatation {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

.gbbUpsellCard {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-areas:
    "media content"
    "button button";
  align-items: center;
  gap: 10px;
  padding: 12px;
  border: 1px solid var(--upsell-card-border-color, #e1e1e1);
  border-radius: var(--upsell-card-radius, 12px);
  background-color: var(--upsell-card-bg, #ffffff);
  font-family: var(--upsell-card-font-family, inherit);
  line-height: 1.4;
  text-align: left;
  overflow: hidden;
}
.gbbUpsellCard, .gbbUpsellCard * {
  box-sizing: border-box;
}
.gbbUpsellCardMedia {
  grid-area: media;
  box-sizing: border-box;
  width: 65px;
  height: 65px;
  border: 1px solid rgba(0, 0, 0, 0.1);
  border-radius: 12px;
  overflow: hidden;
}
.gbbUpsellCardMediaImage {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* "contains" shows the whole image, so the tile behind it would sit bare. A blurred copy of the
   same image fills it instead, painted from the URL the card writes into --upsell-card-media-image. */
.gbbUpsellCardMedia[data-image-fit="contains"] {
  position: relative;
}
.gbbUpsellCardMedia[data-image-fit="contains"]::before {
  content: "";
  position: absolute;
  /* Bleeds past every edge so the blur's own soft border falls outside the tile, which clips it. */
  inset: -20%;
  background-image: var(--upsell-card-media-image);
  background-size: cover;
  background-position: center;
  filter: blur(10px);
}
.gbbUpsellCardMedia[data-image-fit="contains"] .gbbUpsellCardMediaImage {
  position: relative;
  object-fit: contain;
}
.gbbUpsellCardContent {
  grid-area: content;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 4px;
  min-width: 0;
}
.gbbUpsellCardTitle {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  color: var(--upsell-card-headline-color, #1a1a1a);
  font-size: 16px;
  font-weight: 600;
  overflow-wrap: anywhere;
  overflow: hidden;
}
.gbbUpsellCardDescription {
  color: var(--upsell-card-body-color, #6d727f);
  font-size: 14px;
  text-wrap: pretty;
  overflow-wrap: anywhere;
}
.gbbUpsellCardPriceRow {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 4px;
}
.gbbUpsellCardBundlePrice {
  color: var(--upsell-card-headline-color, #1a1a1a);
  font-size: 16px;
  font-weight: 600;
  white-space: nowrap;
}
.gbbUpsellCardRegularPrice {
  color: var(--upsell-card-body-color, #6d727f);
  font-size: 15px;
  text-decoration: line-through;
  white-space: nowrap;
}
.gbbUpsellCardPill {
  padding: 4px 10px;
  border-radius: 999px;
  background-color: #37784a;
  color: #ffffff;
  font-size: 12px;
  font-weight: 700;
  white-space: nowrap;
}
.gbbUpsellCardButton {
  grid-area: button;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  min-width: 0;
  min-height: 45px;
  padding: 8px 16px;
  border: 1px solid var(--upsell-card-button-border-color, transparent);
  border-radius: var(--upsell-card-button-radius, 5px);
  background-color: var(--upsell-card-button-bg, #1a1a1a);
  background-image: none;
  box-shadow: none;
  color: var(--upsell-card-button-text-color, #ffffff);
  font-family: inherit;
  font-size: 16px;
  font-weight: 500;
  text-transform: none;
  letter-spacing: normal;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}
.gbbUpsellCardButtonLabel {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow-wrap: normal;
  word-break: normal;
}
.gbbUpsellCardButtonSeparator {
  flex: 0 0 auto;
}
.gbbUpsellCardButtonPrice {
  flex: 0 0 auto;
}
.gbbUpsellCardButton .gbbSpinnerLoader {
  width: 20px;
  height: 20px;
}
.gbbUpsellCard[data-upsell-layout="SPLIT"] {
  grid-template-areas: "media content";
  grid-template-columns: 38% 1fr;
  align-items: stretch;
  gap: 0;
  padding: 0;
}
.gbbUpsellCard[data-upsell-layout="SPLIT"] .gbbUpsellCardMedia {
  width: auto;
  height: auto;
  border: 0;
  border-radius: 0;
  min-height: 150px;
}
.gbbUpsellCard[data-upsell-layout="SPLIT"] .gbbUpsellCardContent {
  gap: 6px;
  padding: 12px;
}
.gbbUpsellCard[data-upsell-layout="SPLIT"] .gbbUpsellCardButton {
  margin-top: 6px;
}

.gbbExtBodyScrollLock {
  overflow: hidden;
}
.gbbExtUpsellModal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1000000000;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  /* 6px on phones, 14px from 1024px up, ramping between â€” no media query. Applies to the
     M&M and PB dialogs alike, since both sit inside this one overlay.
     0.03125 = (14 - 6) / (1024 - 768). */
  padding: clamp(6px, 6px + (100vw - 768px) * 0.03125, 14px);
  background-color: rgba(24, 24, 24, 0.8);
  font-family: inherit;
  font-size: 16px;
  line-height: 1.4;
  text-align: left;
  transition: opacity 200ms ease;
}
.gbbExtUpsellModal, .gbbExtUpsellModal * {
  box-sizing: border-box;
}
/* In the document so the builder can mount into a container that is really in it â€” invisible, and not
   hit-tested, until reveal(). */
/* Also the animation's start frame: the shell is inserted with this class and reveal() removes it,
   so opacity and transform animate from here. The mount that happens in between guarantees a paint,
   without which the browser would jump straight to the end state. */
.gbbExtUpsellModalHidden {
  visibility: hidden;
  opacity: 0;
}
.gbbExtUpsellModalHidden .gbbExtUpsellModalDialog {
  transform: translateY(28px);
  opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
  .gbbExtUpsellModal {
    transition: none;
  }
  .gbbExtUpsellModalDialog {
    transition: none;
  }
  .gbbExtUpsellModalHidden .gbbExtUpsellModalDialog {
    transform: none;
  }
}
.gbbExtUpsellModalDialog {
  position: relative;
  width: 100%;
  max-width: min(100%, 1500px);
  max-height: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 12px;
  background-color: var(--upsell-card-popup-bg, #ffffff);
  background-image: none;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);
  color: #1a1a1a;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transition: transform 260ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 200ms ease;
  /* opacity ONLY â€” never transform. `will-change: transform` makes this a containing block for
     position:fixed descendants, so every overlay the builder opens inside the dialog (variant
     modal, drawers) would be positioned against the DIALOG instead of the viewport. Measured:
     a fixed inset:0 child came back as the dialog's 600x300 box rather than the 1200x800 viewport.
     The entry transform still animates; it just no longer traps anything permanently. */
  will-change: opacity;
}
/* Product Bundle is a fixed-contents list and reads better narrow. Mix & Match keeps the wide
   default above: it mounts the full-page builder, which 500px would squeeze. */
.gbbExtUpsellModalDialogCompact {
  max-width: min(100%, 500px);
}
/* ...and Mix & Match takes the full height as well as the full width. That builder owns its own
   scrolling body and sticky footer, so a dialog sized to its content leaves the footer floating
   mid-overlay instead of pinned to the bottom. Scoped by the ABSENCE of the compact class, which
   is set only for Product Bundle (giftBoxLogicv1.js#open, options.isCompactDialog) â€” a third
   engine mounted in this popup would inherit this until it is given a marker of its own. */
.gbbExtUpsellModalDialog:not(.gbbExtUpsellModalDialogCompact) {
  height: 100%;
}
/* The dialog carries no padding of its own, so this border spans it edge to edge. */
/* Not sticky: the header is a flex row the dialog never scrolls, and the content below is the
   scroll container. That is why it needs no z-index â€” nothing can paint over it, where a sticky
   header inside the scroller lost to the builder's own z-index 2. */
.gbbExtUpsellModalHeader {
  flex: 0 0 auto;
  display: flex;
  align-items: flex-start;
  padding: 12px 14px;
  border-bottom: 1px solid #e7e7e7;
  background-color: var(--upsell-card-popup-bg, #ffffff);
}
.gbbExtUpsellModalTitle {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  min-width: 0;
  margin: 0;
  /* The 5px puts the close button's centre on the first line's, at these two elements' sizes. */
  padding: 5px 12px 0 0;
  color: #1a1a1a;
  font-family: inherit;
  font-size: 19px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: normal;
  text-transform: none;
  overflow-wrap: anywhere;
  overflow: hidden;
}
.gbbExtUpsellModalContent {
  flex: 1 1 auto;
  /* Without this a flex child refuses to shrink below its content and the dialog grows instead. */
  min-height: 0;
  /* No media query: below 768px the middle term is NEGATIVE so the 0px floor wins, and it
     reaches the 14px ceiling at 1024px. 0.0547 is the slope between those two widths,
     14 / (1024 - 768). Mobile therefore gets nothing and desktop the full inset. */
  padding: clamp(0px, (100vw - 768px) * 0.0547, 14px);
  overflow-y: auto;
}
/* PB's builder is a compact widget that needs the dialog to inset it. The M&M full-page builder
   brings its own page padding, so the base rule above leaves it alone rather than doubling it. */
.gbbExtUpsellModalDialogCompact .gbbExtUpsellModalContent {
  padding: 14px 14px 0 14px;
}
/* FUNCTIONAL_STACK paints its own full-bleed panel, so the dialog must not inset it as well. Reads
   the design off the HOST â€” the layout element carries it too, but that lives inside the shadow
   root and no selector out here can see it. */
.gbbExtUpsellModalDialogCompact .gbbExtUpsellModalContent:has(.gbbPbWidgetWrapper[data-gbb-pb-design="FUNCTIONAL_STACK"]) {
  padding: 0;
}
.gbbExtUpsellModalClose svg {
  width: 20px;
  height: 20px;
  fill: currentColor;
}
.gbbExtUpsellModalClose {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  min-width: 0;
  margin: 0 0 0 auto;
  padding: 0;
  border: 0;
  border-radius: 999px;
  background-color: var(--upsell-card-popup-icon-bg, #f1f2f4);
  background-image: none;
  box-shadow: none;
  color: var(--upsell-card-popup-icon-color, #6d727f);
  font-family: inherit;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}
