/*
 * CNDY Custom CSS for Farmnest Template
 */

/* Bootstrap's modal.js adds "padding-right: 15px" (scrollbar width) inline
   on <body> whenever a modal (e.g. Quick View) opens, to stop page content
   from shifting when the scrollbar disappears. That's solving a problem a
   fluid layout has — this one doesn't: body/.container are fixed at
   var(--cndy-container-width) (1360px) and centered via margin:auto, so
   nothing needed the compensation to begin with.
   It actively broke #header instead: an inline "width: 1360px" set by the
   anmegamenu plugin JS (for its dropdown positioning math) doesn't react to
   body's now-shrunk 1345px content box the way percentage-width children
   do, so it overflowed the new inner edge by exactly the 15px Bootstrap
   added — confirmed live: header only "widens past the border" while a
   modal is open, matching this padding appearing/disappearing. Zeroing it
   out here removes the cause instead of patching the header specifically. */
body.modal-open {
  padding-right: 0 !important;
}

/*****FONTS*****/

@font-face {
  font-family: 'Cabin';
  src: url('../../fonts/Cabin-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Lobster';
  src: url('../../fonts/Lobster-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/*****END: FONTS*****/



/*****VARIABLES*****/

:root {
  /* Fonts */
  --cndy-font-body: 'Cabin', sans-serif;
  --cndy-font-titles: 'Lobster', cursive;

  /* Brand Palette */
  --cndy-pastel-green: #47602F;
  --cndy-candy-pink: #D8958D;
  --cndy-pastel-red: #8E2219;
  --cndy-almost-black: #1F1F1F;
  --cndy-solid-white: #FFFFFF;

  /* Web Palette */
  --cndy-light-gray: #F1F1F1;
  --cndy-dark-gray: #CBCBCB;

  /* Layout */
  --cndy-container-width: 1360px;

  /* Buttons and Forms */

  --cndy-control-minheight: 45px;
}

/*****END: VARIABLES*****/



/*****LAYOUT*****/

/* Fixed-width main on Desktop, unchanged on Mobile */
@media screen and (min-width: 1200px) {
    body {
        background-image: url('../img/cndy-background.png');
        background-attachment: fixed;
        background-position: center top;
        background-repeat: no-repeat;
        background-size: cover;
        width: var(--cndy-container-width);
        margin: auto;
    }
    main {
        flex-wrap: wrap;
        width: var(--cndy-container-width);
        background-color: #FFFFFF;
        margin: 10px auto 50px auto;
        box-shadow: rgb(17, 17, 17) 0px 2px 5px 0px;
    }

    .container {
        width: var(--cndy-container-width);
        max-width: 100%;
        padding: 0px;
    }

}

#wrapper, #product #wrapper {
  padding-top: 42px;
}

.row {
  margin: 0px;
}

/* theme.css's ".container" carries Bootstrap's default 15px side padding
   at every width — the desktop rule above only zeroes it from 1200px up.
   Same zeroing on mobile, so page content runs edge-to-edge there too. */
@media (max-width: 767px) {
  .container {
    padding-left: 0px;
    padding-right: 0px;
  }

  /* Bootstrap column gutters (layout-both-columns.tpl's own
     "col-sm-4 col-md-6" on this id) — separate padding source from
     ".container" above, carries the same 15px at every width. */
  #content-wrapper {
    padding-left: 0px;
    padding-right: 0px;
  }
}

#main .page-content, #main .page-header {
  margin-bottom: unset;
}

/*****END: LAYOUT*****/



/*****TYPOGRAPHY*****/

main,
header,
body,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6,
h1,
h2,
h3,
h4,
h5,
h6,
footer {
  font-family: var(--cndy-font-body);
}

.fancy-bold {
  font-weight: 700;
}

/*****END: TYPOGRAPHY*****/



/*****BUTTONS*****/

.fancy-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  border: 2px solid var(--cndy-almost-black);
  border-radius: 5px;
  padding: 5px 15px;
  min-height: var(--cndy-control-minheight);
  color: var(--cndy-almost-black);
  font-family: var(--cndy-font-body);
  font-size: 18px;
  font-weight: 700;
  text-transform: uppercase;
  text-decoration: none;
  transition: all 100ms linear;
  cursor: pointer;
}

/* Icons: rendered with Font Awesome and are optional */
/* If not added, the default behavior is content: none and the ::before disappears. */

.fancy-btn::before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  content: none;
  display: inline-block;
  font-size: 20px;
  padding-right: 5px;
}

.fancy-primary-btn, .fancy-secondary-btn, .fancy-dropdown-btn {
  background-color: var(--cndy-solid-white);
}

/* border-width restated (not just border-color) on both hover rules below:
   some vendor buttons this gets applied to (e.g. the sticky add-to-cart
   bar's own "btn btn-primary" classes, kept alongside fancy-btn for that
   module's own JS hooks) carry a vendor ":hover { border: 0px solid ... }"
   rule at the same specificity (1 class + :hover) — restating color alone
   left width open to being zeroed by whichever loaded last. */
.fancy-primary-btn:hover {
  border-width: 2px;
  border-color: var(--cndy-pastel-green);
  background-color: var(--cndy-pastel-green);
  color: var(--cndy-solid-white);
}

.fancy-secondary-btn:hover, .fancy-dropdown-btn:hover {
  border-width: 2px;
  border-color: var(--cndy-candy-pink);
  background-color: var(--cndy-candy-pink);
  color: var(--cndy-solid-white);
}

/*****END: BUTTONS*****/



/*****FORMS*****/

/* Due to the extensive confuckulation of forms from many different tacked on modules and vendors,
and the fact that such able coders have made a mess of the CSS structure and used !important
extensively as a result, I am forced here to use !important as well. Queue dramatic music */

input,
textarea,
select {
  background-color: var(--cndy-solid-white); 
  border-radius: 5px;
  border-color: var(--cndy-dark-gray);
  border-width: 2px; 
  border-style: solid;
  min-height: var(--cndy-control-minheight);
  font-weight: 700;
  padding-left: 20px;
  transition: border-color 0.25s ease-in-out;
}

textarea {
  padding-top: 20px;
  padding-bottom: 20px;
}

input[type=text] {
  height: var(--cndy-control-minheight);
}

textarea::placeholder,
input::placeholder,
select:invalid {
  color: var(--cndy-candy-pink);
  opacity: 1;
}

select option:disabled {
  color: var(--cndy-dark-gray);
}

select option {
  color: var(--cndy-almost-black);
}

textarea:active,
textarea.active.focus,
textarea.active:focus,
textarea.focus,
textarea:active.focus,
textarea:active:focus,
textarea:focus,
input:active,
input.active.focus,
input.active:focus,
input.focus,
input:active.focus,
input:active:focus,
input:focus {
  border-color: var(--cndy-almost-black);
  transition: border-color 0.25s ease-in-out;
}


@media (max-width: 1199px) { 

  .fancy-address-field-input,
  .fancy-address-field-select {
      width: 100%;
  }

}

@media screen and (min-width: 1200px) { 

  .fancy-address-field-input, 
  .fancy-address-field-select {
      width: 50%;
  }

}

/* theme.css has ".input-group .form-control:not(:last-child) { border-top-right-radius: 0;
   border-bottom-right-radius: 0; }" — standard Bootstrap input-group styling
   that squares off the side facing the next element (here, the show/hide
   password button), meant for adjoining boxes with no gap between them. This
   theme's show/hide button is absolutely positioned over the input instead,
   so there's no adjoining box to visually merge with — same selector,
   restore the rounding. */

.input-group .form-control:not(:last-child) {
  border-top-right-radius: 5px;
  border-bottom-right-radius: 5px;
}

/* Desktop-only header search button (ps_searchbar.tpl replaces the live
   search box with this on desktop) — icon + label already come from
   fancy-btn/fancy-secondary-btn, just needs a gap between them.
   ".header-right" (theme.css) has no gap of its own between its items —
   same margin-right as "#_desktop_cart"'s own left margin, so Search
   doesn't sit flush against Account. */

.cndy-search-btn-desktop {
  gap: 8px;
  margin-right: 10px;
}

/* Plain search form on the dedicated results page (catalog/listing/search.tpl) —
   no autocomplete JS, so none of the header widget's own layout/positioning
   rules apply here; a simple flex row instead. */

.cndy-search-page-form {
  display: flex;
  align-items: center;
  gap: 15px;
  max-width: 700px;
  margin: 40px auto;
}

.cndy-search-page-form input[type=text] {
  flex: 1;
}

.cndy-search-page-form-field {
  flex: 1;
  min-width: 0;
}

.cndy-search-page-form-field .fancy-address-field-input {
  width: 100%;
}

/* Confirmed live on a 412px phone: the field correctly shrinking (previous
   fix) just exposed the real constraint underneath — the button alone
   ("CREATE ACCOUNT", fancy-btn's own padding) was already 201px, leaving
   only 68px for the field once gap/padding are accounted for. No amount of
   flex-shrink math fixes "not enough room for both side by side"; stacking
   below this width fixes it for both reuses of this class (search's own
   input would hit the same squeeze, just less noticeably with shorter
   placeholder text). */
@media (max-width: 767px) {
  .cndy-search-page-form {
    flex-direction: column;
    align-items: stretch;
  }

  .cndy-search-page-form button {
    width: 100%;
  }
}

/*****END: FORMS*****/



/*****ANNOUNCEMENT BAR BLOCK*****/

/* displayBanner (Anvanto Banners) moved from the old .header-banner
   slot into .header-nav, now a single centered column replacing the old contacts /
   language+currency split (see templates/_partials/header.tpl override). */
#header .header-nav {
  float: none;
  width: 100%;
  min-height: 26px;
  background: var(--cndy-dark-gray);
}

.anbanners-wrapper, .an_banner.an_banner-type1 {
  margin-bottom: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* In the admin interface, create announcement bar banners with a descriptive title (not displayed)
   and content in the text field (displayed) including, if used, Font Awesome icons */ 

#announcement-bar .an_banner-text .an_banner-title {
    display: none;
}

#announcement-bar .an_banner-text p {
    margin-top: 5px;
    margin-bottom: 5px;
    text-transform: uppercase;
    line-height: 1.1;
    font-size: 16px;
    font-weight: 600;
    text-align: center;
}

/* Spacing left/right around Font Awesome icon (in <i> tag, per Font Awesome inline syntax) */

#announcement-bar .an_banner-text i {
    margin-left: 10px;
    margin-right: 10px;
}

@media (max-width: 767px) {
  #announcement-bar .an_banner-text p {
    font-size: 12px;
  }

  #announcement-bar .an_banner-text i {
    margin-left: 5px;
    margin-right: 5px;
  }
}

/* Deconfuckulation of front.css triple negation CSS */

.an_banner.an_banner-type1 .an_banner-text p:not(.an_banner-title) {
    line-height: 1.1;
    margin: 0;
}

/*****END: ANNOUNCEMENT BAR BLOCK*****/



/******HEADER******/

@media screen and (min-width: 1200px) {

  #container_logo {
    margin: 0;
    padding: 30px 40px;
  }

  .header-center {
    margin: 0;
    padding: 0;
    min-height: unset;
  }

  .header-right {
    padding-right: 0px;
}

.header-left {
  padding: 0px;
}

#header_logo {
  position: relative;
  top: 0px;
  transform: scale(1);
  opacity: 1;
  transition: transform 0.25s linear;
  max-height: 80px;
}

#header_logo:hover {
  transform: scale(1.02);
  opacity: 1;
  transition: transform 0.25s ease-in-out;
}

} /* This was a missing closing confaculating large part of mobile */

/* Was inside the desktop-only (min-width:1200px) block above — the
   magnifying-glass icon overlaid inside the input, making search box +
   button read as one element, only ever applied on desktop. Below
   1200px the button fell back to default styling instead: a visually
   separate box next to the input. Nothing about this positioning is
   actually desktop-specific, so it belongs outside that block. */
#header .search-widget form button[type=submit] {
    top: 50%;
    right: 0px;
    transform: translateY(-50%);
    padding: 10px;
    display: flex;
    align-items: center;
    color: var(--cndy-almost-black);
    position: absolute;
    background: transparent;
    border: none;
    cursor: pointer;
}

/* @starting-style here (a prior attempt at fixing this exact input's
   focus-transition not playing) removed — it was the one thing uniquely
   different about this input's CSS compared to every other input on the
   site (which all animate correctly via the plain "input"/"input:focus"
   rules, FORMS section, that this element already inherits from too).
   No JS anywhere touches this input's focus/blur (confirmed directly in
   ps_searchbar.js, the actual initializer — not theme.js). Removing it
   didn't fix it either though — DevTools' Animations panel confirmed a
   real border-color transition IS registered on focus, it just still
   renders as an instant snap. This is the only input on the site with
   jQuery UI Autocomplete attached, which updates ARIA attributes
   (aria-expanded etc.) on this exact element right as it's focused —
   a known trigger for browsers skipping a transition's intermediate
   frames when unrelated DOM/attribute mutations land on the same
   element in the same tick. will-change hints the browser to prep this
   property for animation ahead of time instead of getting caught by
   that mutation. */
#header .search-widget form input[type=text] {
  will-change: border-color;
}

#header .search-widget form input[type=text]:focus {
  transition: border-color 0.25s ease-in-out;
}

#header .search-widget form input[type=text]::placeholder {
  color: var(--cndy-dark-gray);
}

/* font-family/weight/display normally come from .fancy-btn::before (the
   desktop Account button has that class) — restated here so this icon also
   works standalone, on the mobile menu's plain Account row (.anmm-link,
   no .fancy-btn). */
.btn-icon-account-before::before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  display: inline-block;
  content: "\f007";
}

/* font-family/weight/display restated (not relying on .fancy-btn::before) —
   used on Add to Cart (has .fancy-btn already, so this is redundant there
   but harmless) and both "Buy now" buttons (product page + category grid,
   neither has .fancy-btn — each already has its own complete button
   styling of its own, this is only ever the icon). One class, no
   ancestor-scoped chain, added directly wherever this icon is wanted. */
.btn-icon-cart-plus-before::before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  display: inline-block;
  content: "\f217";
}

.btn-icon-cart-before::before {
  content: "\f07a";
}

.btn-icon-search-submit-before::before {
  content: "\f35a";
}

.btn-icon-search-before::before {
  content: "\f002";
}

.blockcart-inactive {
    display: none;
}

#_desktop_cart {
    margin: 0px 0px 0px 10px;
}

/* ".blockcart-link-price" (ps_shoppingcart.tpl) is "display: flex" (from
   .fancy-btn) — flex containers collapse plain whitespace text nodes
   between children, so the literal space in the template between
   ".blockcart-price" and ".blockcart-count" renders as nothing ("$86.60(8)"
   instead of "$86.60 (8)"). Explicit margin restores it. */
.blockcart-count {
  margin-left: 4px;
}

/* Cart badge (ps_shoppingcart.tpl, ".blockcart-link-price") shows
   "$X.XX (N)" — too wide for the mobile header row, icon + count only
   there. Media-query scoped (not an ID) since price/count share one
   template regardless of which header row ends up displaying it. */
@media (max-width: 991px) {
  .blockcart-link-price .blockcart-price {
    display: none;
  }

  /* Hiding the price alone still leaves the full fancy-btn "pill" look
     (border, padding, uppercase, min-height) — still too wide for the
     mobile row (confirmed live: it was pushing past the screen edge next
     to the logo). Icon + bare count instead, no button chrome. */
  #_mobile_cart .blockcart-link-price {
    border: none;
    padding: 0;
    min-height: auto;
    background: transparent;
    font-size: 14px;
  }

  #_mobile_cart .blockcart-link-price:hover {
    background: transparent;
    border: none;
  }
}

/* "cart-refreshing" + ".cndy-btn-spinner" are set by
   assets/js/add-to-cart-link.js on the clicked "Add to cart" button itself,
   between the click and the header cart total actually updating. The
   button's own content is swapped for the spinner element directly (JS),
   rather than overlaying it via CSS ::after — an absolutely-positioned
   overlay needs the button to actually establish a positioning context,
   and something else in the cascade was apparently already winning that
   fight, since the previous ::after version never appeared. Swapping real
   content sidesteps that entirely. */
.add-to-cart.cart-refreshing {
    pointer-events: none;
}

/* Icon now comes from the single, self-contained ".btn-icon-cart-plus-before"
   class (BUTTONS section below) instead of a 4-class ancestor-scoped chain,
   so hiding it during the spinner only needs to match that one class too. */
.btn-icon-cart-plus-before.cart-refreshing::before {
    display: none;
}

.cndy-btn-spinner {
    display: inline-block;
    width: 18px;
    height: 18px;
    border: 2px solid var(--cndy-dark-gray);
    border-top-color: var(--cndy-solid-white);
    border-radius: 50%;
    animation: cndy-cart-spin 0.6s linear infinite;
}

@keyframes cndy-cart-spin {
    to {
        transform: rotate(360deg);
    }
}

/* checkout-address-toggle.js auto-submits the delivery address form when
   "use this address for invoice too" changes (full page reload, no partial
   step refresh exists server-side — see that file's comment). The round
   trip is slow enough that a click on Continue during it would fire
   against stale form state, so this blocks the whole form and shows the
   same spinner style as the add-to-cart button while the submit is in
   flight. Class is only ever added right before form.submit() and never
   removed by JS on purpose — the page navigates away, so there's nothing
   to clean up. */
.js-address-form.cndy-form-submitting {
    position: relative;
    pointer-events: none;
    opacity: 0.5;
}

.js-address-form.cndy-form-submitting::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 32px;
    height: 32px;
    margin: -16px 0 0 -16px;
    border: 3px solid var(--cndy-dark-gray);
    border-top-color: var(--cndy-solid-white);
    border-radius: 50%;
    animation: cndy-cart-spin 0.6s linear infinite;
}

/* addresses.tpl marks "#delivery-address"/"#invoice-address" with this
   class only when both are forced open together on a genuinely first-ever
   checkout ($cndyForceInvoiceForm) — each still renders its own inline
   "Continue"+Cancel via address-form.tpl's own form_buttons block
   (untouched, still gets the real $form_has_continue_button — an earlier
   attempt passed false there instead and it silently switched to a
   completely different "Save"+Cancel pair, not just hidden the button).
   Hiding that whole inline footer here, purely visually, avoids the
   duplicate without touching which branch address-form.tpl itself takes;
   the single footer Continue in addresses.tpl's own footer covers both. */
.js-hide-inline-continue .form-footer {
    display: none;
}

/* addresses.tpl's footer Continue button (".js-address-footer-continue") is
   only marked with this class when $form_has_continue_button is true — in
   that state address-form.tpl already renders its own inline Continue
   inside "#js-invoice-address-block", so this one starts hidden to avoid
   showing two Continue buttons at once. checkout-address-toggle.js reveals
   it (by removing this class) only when it hides that inline one, i.e. when
   merging the invoice address back into the shipping one. */
.js-address-footer-continue {
    display: none;
}

/* theme.css's ".address-selector" (checkout addresses step: the saved-address
   cards) uses "align-items: flex-start" — each card sizes to its own content,
   so a short address and a long one sitting side by side end up different
   heights, with the Edit/Delete footer landing wherever that card's text
   happens to end instead of lining up across the row. Switching to "stretch"
   makes every card in the row match the tallest one; card itself needs to
   become a flex column (it's a plain block otherwise) so "margin-top: auto"
   on its footer can push Edit/Delete down to the bottom of that now-taller
   box instead of leaving the extra space sitting below the footer. */
body#checkout section.checkout-step .address-selector {
    align-items: stretch;
}

body#checkout section.checkout-step .address-item {
    display: flex;
    flex-direction: column;
}

/* The divider line was theme.css's own "header { border-bottom: 2px solid
   #e5e5e5 }" — sits right after the address text, so on a short address
   it's still up near the top while margin-top:auto has already pushed
   Edit/Delete down to the bottom, leaving the line and the buttons visibly
   split apart instead of lining up together at the bottom edge across
   cards. Moving the line onto the footer itself (border-top instead of the
   header's border-bottom) keeps it directly above Edit/Delete wherever that
   ends up, so it travels down together with the buttons. */
body#checkout section.checkout-step .address-item header {
    border-bottom: none;
}

body#checkout section.checkout-step .address-footer {
    margin-top: auto;
    border-top: 2px solid #e5e5e5;
}

/* Mobile header row (hidden-lg-up, ".mobile-header" in header.tpl):
   hamburger/cart/wishlist/user-info are plain "float-xs-right" (each new
   one stacks to the left of the previous), and ".top-logo" (#_mobile_logo)
   has no float at all — it just drops to its own line below them. Turning
   the row into flex makes float irrelevant, and "order" places the logo
   right next to the hamburger instead of floating stacking order deciding
   for it. Exact left/right arrangement of hamburger vs cart isn't settled
   yet — this just gets everything onto one row instead of two. */
.mobile-header {
  display: flex;
  align-items: center;
}

.mobile-header #menu-icon {
  order: 1;
}

.mobile-header .top-logo {
  order: 2;
  margin: 0 auto 0 15px;
}

.mobile-header #_mobile_cart {
  order: 3;
}

.mobile-header #_mobile_an_wishlist-nav {
  order: 4;
}

.mobile-header #_mobile_user_info {
  order: 5;
}

/* Same fix, second layout variant (an_width_on_mobile == 992 picks
   ".tablet-h" above; anything else falls into this ".tablet-v" branch,
   header.tpl's {if}/{else}) — same drop-to-a-new-line issue, no
   ".mobile-header" wrapper class here to hook into, so scoped to the
   nav variant itself instead. */
.header-nav.tablet-v .mobile {
  display: flex;
  align-items: center;
}

.header-nav.tablet-v .mobile #menu-icon {
  order: 1;
}

.header-nav.tablet-v .mobile .top-logo {
  order: 2;
  margin: 0 auto 0 15px;
}

.header-nav.tablet-v .mobile #_mobile_cart {
  order: 3;
}

/* Checkout's minimized header (checkout/_partials/header.tpl, active via
   an_theme's "orderpage_minimize" setting) — logo centered and linked home,
   cart (+ account, same displayTopRight hook) pinned to the right instead
   of the default two-column logo/search layout, since search was dropped
   from this page entirely. */
.checkout-header-block {
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
}

.checkout-header-cart {
    position: absolute;
    right: 0;
    margin-right: 30px;
}

/* displayTopRight (same hook) also renders ps_customersignin's Account
   link — .user-info is its own direct wrapper (ps_customersignin.tpl) —
   hidden here since only the cart was wanted in the checkout header. */
.checkout-header-cart .user-info {
    display: none;
}

/*****END: HEADER*****/



/*****MENU*****/

/* Vertical rhythm: the header's own content (logo, Search/Account/Cart)
   sits 30px below the announcement bar above it via "#container_logo"'s
   own padding (custom.css, HEADER section) — the closest thing this theme
   has to a "standard" vertical gap between stacked sections. The menu bar
   and the home slider banner below it had none at all (margin:0px here,
   and no margin-bottom on ".an_homeslider-block" either — see HOME SLIDER
   section), so menu/banner/newsletter all butted up against each other.
   Matching that same 30px here (and on ".an_homeslider-block" below)
   gives menu→banner and banner→newsletter the same breathing room as
   header→content, instead of an inconsistent mix of "some gap" and "zero
   gap" between sections. */
.header-menu {
  background: none;
  border-top: none;
  margin: 0 0 15px 0;
}

.header-menu .container {
  width: auto;
  margin: 0 40px;
  padding: 0px;
  background: var(--cndy-candy-pink);
  border-radius: 5px;  
}

.anmm-menu-wrapper {
  padding: 0px 0px 0px 15px;
}

.anmm-link {
  padding: 0px 20px;
  height: var(--cndy-control-minheight);
  line-height: 1;
  font-family: var(--cndy-font-titles);
  font-size: 25px;
}

/* .open (below) needs to match this background too, not just :hover — the
   menu's JS (anmegamenu/views/js/front.js) removes ".open" only after a
   300ms setTimeout on mouseleave, but native :hover reverts the background
   the instant the pointer actually leaves. For that whole 300ms window
   (moving away without entering the dropdown), the text below was still
   pink from ".open" while the background had already reverted to the
   menu bar's own pink — same variable, so the text visually vanished
   until ".open" finally caught up. Keeping the background tied to ".open"
   too means both revert together, no mismatched window. */
.anmm-menu-item:hover,
.anmm-menu-item.open {
  background: var(--cndy-light-gray);
}

.anmm-menu-horizontal.open .anmm-title, 
.anmm-menu-horizontal.open .anmm-link-arrow,
.anmm-menu-horizontal.open .anmm-link-arrow-desktop {
  color: var(--cndy-candy-pink);
}

.anmm-link-arrow-desktop {
  display: block;
}

.anmm-link-arrow {
  color: var(--cndy-almost-black);
  font-size: 20px;
  width: unset;
}

.cndy-menu-home .anmm-title {
  display: none;
}

.cndy-menu-home .anmm-link::before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  display: inline-block;
  font-size: 20px;
  content: "\f015";
  color: var(--cndy-almost-black);
}

.cndy-menu-home .anmm-link:hover::before {
  color: var(--cndy-candy-pink);
}

.anmm-dropdown {
  background: var(--cndy-solid-white);
  border: 5px solid var(--cndy-light-gray);
  border-radius: 5px;
  line-height: var(--menu-link-line-height);
  margin-top: -10px;
  padding: 0px;
  overflow: auto;
  max-height: calc(100vh - 180px);
  transition: opacity .3s ease-in-out, margin .3s ease;
  opacity: 0;
}

.anmm-dropdown-content {
  margin: 0px;
  padding: 5px;
  width: fit-content !important;
}

.anmm-dropdown-content a {
  min-width: 270px; 
  background: var(--cndy-solid-white);
}

.anmm-dropdown-content a:hover {
  background: var(--cndy-light-gray);
  border: none;
  border-radius: 5px;
  transition: background .3s ease-in-out;
}

.anmm-column {
  padding: 0px;
}

.anmm-brand-list .anmm-brand {
  padding: 5px 10px;
  margin: 5px;
  font-size: 18px;
}

a.anmm-brand {
  font-size: 18px;
  font-weight: 500;
  text-transform: uppercase;
}

.anmm-category-title {
  margin: 0px;
}

.anmm-category-title a {
  padding: 5px 10px;
  margin: 5px;
  font-size: 18px;
  font-weight: 500;
  text-transform: uppercase;
}

@media (min-width: 992px) {
  .anmm-menu-horizontal .anmm-dropdown {
    box-shadow: none;
  }
}

/* Mobile menu panel (assets/js/mobile-menu.js opens/fills it — see that
   file for why the vendor's own markup/CSS here was previously dead).
   ".mobile-menu-visible" beats the vendor's own "display:none" (one more
   class = higher specificity, no !important needed); the vendor's own
   "@media (min-width:992px){ display:none !important }" still wins on
   desktop regardless of this class, which is exactly what's wanted. */
.amegamenu_mobile-cover.mobile-menu-visible,
.amegamenu_mobile-modal.mobile-menu-visible {
  display: block;
}

/* #mobile_top_menu_wrapper (the actual panel, theme.css) has its OWN
   separate "display:none" — toggling the modal alone left this still
   hidden, so only the dark transparent overlay showed. Same specificity
   trick as above. theme.css also caps it at "max-width:280px" (a narrow
   sidebar); overriding to fill the screen instead, matching the
   reference. */
.amegamenu_mobile-modal.mobile-menu-visible #mobile_top_menu_wrapper {
  display: block;
  max-width: none;
  width: 100%;
}

.mobile-menu-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.mobile-menu-title {
  font-weight: 700;
  font-size: 20px;
}

.mobile-menu-home-link {
  display: block;
  padding: 12px 29px;
  border-bottom: 1px solid var(--cndy-light-gray);
  color: var(--cndy-almost-black);
}

.menu-home .anmm-link-title::before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  content: "\f015";
  margin-right: .4em;
  display: inline-block;
}

/* The cloned copy inside .anmm-list-mobile needs to drop the desktop
   hover-flyout treatment (absolute positioning, opacity-only visibility,
   fixed min-widths for a multi-column layout) in favor of a plain
   in-flow accordion — the original desktop menu (not cloned) is
   untouched, so none of this affects it. */
.anmm-list-mobile .anmm-menu-item {
  display: block;
  position: static;
}

/* ".mobile-menu-fixed .anmm-link" (not scoped to .anmm-list-mobile) covers
   the standalone Account row too — it's a sibling of .anmm-list-mobile, not
   inside it, since mobile-menu.js wipes/re-clones that div's own contents
   on every refresh (would delete a static link placed inside it). */
.anmm-list-mobile .anmm-link,
.mobile-menu-fixed .anmm-link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 29px;
  border-bottom: 1px solid var(--cndy-light-gray);
}

/* Account row: text on the left, icon on the right, spanning the full row
   like the category rows above (label left, chevron right). row-reverse
   flips the DOM/flex order (the icon is a ::before, so it's always first)
   without touching the markup; space-between still pins the first/last
   flex item to each edge same as before, just with icon/text swapped —
   icon (now first along the reversed axis) lands at the row's right edge,
   text (now last) at its left edge. Extra top spacing + its own
   border-top separates it from the category list, since it's not really
   "one of them". Same specificity as ".mobile-menu-fixed .anmm-link"
   above (2 classes) — needs to come AFTER it in the file to win their
   shared "justify-content" on the tie. */
.mobile-menu-fixed .btn-icon-account-before {
  flex-direction: row-reverse;
  justify-content: space-between;
  margin-top: 15px;
  border-top: 2px solid var(--cndy-light-gray);
}

/* The cloned trigger link already carries the desktop's own arrow icon
   (".anmm-link-arrow"/".anmm-link-arrow-desktop") — without hiding it, our
   own "::after" chevron rendered right next to it, looking like a single
   garbled double-arrow glyph. */
.anmm-list-mobile .anmm-link-arrow,
.anmm-list-mobile .anmm-link-arrow-desktop {
  display: none;
}

.anmm-list-mobile .mobile-has-dropdown > .anmm-link::after {
  content: "\276F";
  font-size: 14px;
  transition: transform 0.2s ease;
}

.anmm-list-mobile .mobile-expanded > .anmm-link::after {
  transform: rotate(90deg);
}

/* Vendor's own dropdown-css module (anmegamenu/views/css/front.css) sets
   "visibility: hidden" on the base ".anmm-dropdown" rule — only removed
   via ".anmm-menu-item.open .anmm-dropdown", a class our own accordion
   doesn't use (".mobile-expanded" instead) — needs restating here too.
   On top of that, its OWN "@media (max-width: 991px)" block (same file,
   ~line 734) redefines ".anmm-dropdown:not(.anmm-dropdown-vertical)" for
   its own (drill-down, not accordion) mobile menu: "position: fixed",
   "top"/"left"/"width" all !important, and — the actual culprit, since
   display:block alone doesn't fight it — "transform: translateX(-100%)",
   only cancelled by ITS class ".mobile-open", not ours. Confirmed live:
   the expanded item reserved the right amount of space (display:block +
   position:static already won) but rendered empty, because the content
   was still being painted 100% of its own width off-screen to the left.
   Matching specificity (2 classes each) + !important where they used it. */
.anmm-list-mobile .anmm-dropdown {
  display: none;
  visibility: visible;
  position: static;
  top: auto;
  left: auto;
  width: 100%;
  transform: none;
  opacity: 1;
  max-height: none;
  margin: 0;
  padding: 0 0 0 15px;
  border: none;
  border-radius: 0;
  background: var(--cndy-light-gray);
}

.anmm-list-mobile .mobile-expanded > .anmm-dropdown {
  display: block;
}

/* Part of the vendor's own drill-down back-navigation (theme.css) —
   irrelevant here since expanding is in-place, not a drill-down. */
.anmm-list-mobile .anmm-menu-btn-back {
  display: none;
}

/* Vendor's own ".anmm-dropdown-content { width: fit-content !important }"
   (desktop multi-column sizing) needs matching !important to override —
   no amount of extra specificity beats an !important declaration. */
.anmm-list-mobile .anmm-dropdown-content {
  width: 100% !important;
  padding: 0;
}

.anmm-list-mobile .anmm-dropdown-content a {
  display: block;
  min-width: 0;
  padding: 10px 29px;
}

/*****END: MENU*****/



/*****BREADCRUMB*****/

.breadcrumb-wrapper {
  background-color: var(--cndy-light-gray);
  margin: 5px 40px 0px 40px;
  border-radius: 5px;
  min-height: 0px;
}

.breadcrumb-wrapper .container {
  width: 100%;
}

.breadcrumb {
  padding: 5px 0px;
}

/* Scoped to the category page (body id="{$page.page_name}") — this was
   originally meant only to show "Home > All Candy" on a top-level category.
   Left unscoped, it also un-hid the depth-1 breadcrumb on cart/checkout,
   where it shouldn't show at all. */
body#category .breadcrumb[data-depth="1"] {
  display: block;
}

.breadcrumb li a {
  color: var(--cndy-almost-black);
}

.breadcrumb li a:hover {
  color: var(--cndy-dark-gray);
}

.breadcrumb li:after {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  display: inline-block;
  font-size: 12px;
  content: "\f0da";
  color: var(--cndy-dark-gray);
  margin: 0px;
  padding: 0px 3px;
}

.breadcrumb li:first-child a {
  display: none;
}

.breadcrumb ol:before {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  display: inline-block;
  font-size: 12px;
  content: "\f015";
  color: var(--cndy-dark-gray);
  margin: 0px;
  padding: 0px 0px 0px 10px;
}

/* Login page: hide the breadcrumb entirely (body id="{$page.page_name}",
   "authentication" here) — it's a normal 2-item trail ("Home > Log in to
   your account"), not the depth-1 case above, just not wanted on this page. */
body#authentication .breadcrumb-wrapper {
  display: none;
}

/*****END: BREADCRUMB*****/



/*****HOMEPAGE*****/

.wrapper-middle-home {
  display: none;
}

/*****END: HOMEPAGE*****/



/*****NEWSLETTER BLOCK*****/

.block_newsletter-wrapper .container {
  background: var(--cndy-candy-pink);
}

/* Newsletter signup: error/success message covers the panel entirely
   instead of printing below the form. Ps_EmailSubscription's PHP injects
   <p class="alert alert-danger|alert-success block_newsletter_alert"> as raw
   HTML directly into the fetched template output — it does NOT go through
   the $msg/$nw_error Smarty vars the theme's own .tpl checks for (those are
   never actually populated in this setup, confirmed by testing). assets/js/
   newsletter.js wraps that <p> in ".block_newsletter_alert-wrapper" (same
   class for both outcomes) and, for errors only, adds a dismiss button as
   its sibling — so the overlay positioning below lives on the wrapper, not
   the <p> itself, letting the message and button stack vertically inside
   it. Hides everything else (title, conditions, form) via :has(). */
.block_newsletter {
  position: relative;
  padding: 40px;
  min-height: unset;
}

.block_newsletter #block-newsletter-label {
    font-family: var(--cndy-font-titles);
}

.block_newsletter #block-newsletter-label {
    line-height: 1;
    margin: 0px 0px 10px 0px;
    max-width: unset;
}

/* theme.css has ".block_newsletter p { max-width: 400px; }" lets it win without !important. */
.block_newsletter p {
    max-width: unset;
    margin: 0px 0px 20px 0px;
}

/* theme.css has ".block_newsletter form { position: relative }" — that makes
   the form (not .block_newsletter) the nearest positioned ancestor, so our
   absolutely positioned alert was covering only the form's own box (sized to
   its content, sitting wherever flex placed it) instead of the whole panel.
   Nothing else in the form relies on it being positioned (checked: no
   position:absolute children), so it's safe to cancel it here. */
.block_newsletter form {
  position: static;
}

.block_newsletter form .input-wrapper {
  position: relative;
}

/* theme.css has ".block_newsletter form input[type=text] { border: 0 !important;
   background: #F3F3F3 !important; ... }" (1 class + 1 attr = same specificity
   as ours), so matching the selector exactly lets source order (this file
   loads after theme.css) decide, no need to out-specify it. Brings this
   field in line with the border + focus-highlight treatment the generic
   `input` rule (FORMS section above) gives every other form on the site. */
.block_newsletter form input[type=text] {
  background: var(--cndy-solid-white) !important;
  border: 2px solid var(--cndy-dark-gray) !important;
  border-radius: 5px;
}

.block_newsletter form input[type=text]:focus {
  border-color: var(--cndy-almost-black) !important;
}

.block_newsletter form button[type=submit] i {
  color: var(--cndy-almost-black);
}

.block_newsletter form button[type=submit] {
  top: 50%;
  bottom: auto;
  transform: translateY(-50%);
}

/* theme.css has ".block_newsletter p { max-width: 445px; margin: 0 0 36px; }"
   (1 class + 1 element = higher specificity than a lone class), which was
   capping this to a small pill instead of covering the panel. Scoping our
   selector as ".block_newsletter .block_newsletter_alert" (2 classes) beats
   it on normal specificity rules, no !important needed. */

.block_newsletter .block_newsletter_alert-wrapper {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  z-index: 2;
  padding: 2rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: var(--cndy-light-gray);
}

.block_newsletter .block_newsletter_alert {
  max-width: none;
  margin: 0 0 1rem 0;
  font-size: 1.0625rem;
}

/* theme.css doesn't just style ".alert-success"/".alert-danger" generically
   (1 class) — it also has "#footer .block_newsletter form .alert-danger"
   (theme.css:13822, an ID + 2 classes + 1 element), which beat this rule's
   first version (3 plain classes, no ID) regardless of class count, since
   an ID always outweighs any number of classes. Prefixing "#footer" here
   too (the newsletter block only ever renders inside #footer on pages
   where it isn't hidden outright — checkout hides it via
   "body#checkout .block_newsletter-wrapper" below) matches that ID and
   then wins on class count (4 vs 2), no !important needed. Kept as its own
   rule (not folded into the one above) so the two outcomes stay easy to
   restyle differently later if that's ever wanted. */
#footer .block_newsletter .block_newsletter_alert.alert-success,
#footer .block_newsletter .block_newsletter_alert.alert-danger {
  background-color: transparent;
  border-color: transparent;
  color: inherit;
}

.block_newsletter .block_newsletter_alert-wrapper .block_newsletter_alert:last-child {
  margin-bottom: 0;
}

.block_newsletter:has(.block_newsletter_alert) > h2,
.block_newsletter:has(.block_newsletter_alert) > p,
.block_newsletter:has(.block_newsletter_alert) form > *:not(.block_newsletter_alert-wrapper) {
  visibility: hidden;
}

/* Dismiss button, injected by assets/js/newsletter.js below the message —
   errors only, so the customer can dismiss and retry with a different
   email. Uses the site's shared "fancy-btn fancy-secondary-btn" classes
   (same as e.g. the header Search button) for its look, so no dedicated
   styling is needed here. */

/* Checkout: the newsletter block rides along in the same displayFooterWrapper
   hook output as the rest of the footer (About Us, Customer Care...), so it
   can't be excluded from checkout/_partials/footer.tpl at the template
   level without also losing that content — hide just this block here. */
body#checkout .block_newsletter-wrapper {
  display: none;
}

/*****END: NEWSLETTER BLOCK*****/



/*****CATEGORY*****/

.block-category {
  padding: 0px;
  display: inline;
}

.block-category h1 {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  margin: 0px 25px;
  font-size: 50px;
}

#fancy-category-description {
  margin: 10px 25px 0px 25px;
}

#category-top {
  margin: 25px 25px 40px 25px;
}

#js-product-list-top {
  display: block;
}

#js-product-list-top .products-sort-order {
  display: unset;
}

.products-selection .sort-by {
  padding-right: 15px;
}

.products-sort-order .dropdown-menu {
  background: var(--cndy-solid-white);
  border: 5px solid var(--cndy-light-gray);
  border-radius: 5px;
  transition: opacity .3s ease-in-out, margin .3s ease;
  margin-top: 5px;
  width: 13rem;
  min-width: fit-content;
}

.products-sort-order .select-list {
    display: block;
    margin: 5px 10px;
    padding: 5px 10px;
    font-size: 18px;
    text-transform: uppercase;
}

.products-sort-order .select-list:hover {
  background-color: var(--cndy-light-gray);
  border: none;
  border-radius: 5px;
  color: var(--cndy-dark-gray);
}

.leftColPopup .products-selection {
  padding: 0px;
}

#js-product-list {
  padding: 0px 15px;
}

#products .product-miniature {
  padding: 0px 25px 25px 25px;
}

.product-miniature .thumbnail-container-image {
  border: none;
}

.product-flags .product-flag {
  margin: 0px 0px 5px 0px;
  line-height: 15px;
  padding: 5px;
  font-size: 12px;
  min-width: 60px;
}

.product-flag.discount-percentage {
  display: none;
}

#products .product-title,
.product-miniature .product-title {
  margin: 0px 0px 15px 0px;
  text-align: center;
  line-height: 1;
  min-height: 3rem;
}

#products .product-title a,
.product-miniature .product-title a {
  font-size: 25px;
  color: var(--cndy-candy-pink);
}

.product-price-wrap {
  justify-content: center;
  align-items: center;
}

.price {
  font-size: 25px;
}

.price-colored {
  color: var(--cndy-pastel-green);
}

#products .regular-price {
  color: var(--cndy-dark-gray);
  text-decoration: none;
}

.pagination {
  margin: 0px;
}

.pagination .page-list {
  justify-content: center;
}

.pagination .page-list li {
  margin: 0px 10px;
  padding: 0px
}

.pagination .page-list a {
  line-height: 40px;
  width: 100%;
  min-width: 40px;
  color: var(--cndy-almost-black);
  padding: 0px 10px;
}

.pagination .page-list a:hover { 
  color: var(--cndy-solid-white);
}

.pagination .page-list a:hover {
  color: inherit;
}

.pagination .page-list .current a {
  background: transparent;
}

.current, .current:hover {
  background: var(--cndy-dark-gray);
  border-color: var(--cndy-dark-gray);
}

/*****END: CATEGORY*****/



/*****PRODUCT GRID BLOCK*****/

/* Product titles: decorative Lobster script instead of the theme's default Cabin */
.product-miniature .product-title a {
  font-family: var(--cndy-font-titles);
}

a.thumbnail.product-thumbnail {
  transform: scale(1.0);
  transition: transform 0.5s ease-in-out;
}

a.thumbnail.product-thumbnail:hover {
  transform: scale(1.05);
  transition: transform 0.5s ease-in-out;
}

/* Category grid: "Buy now" replaces the old quick-view magnifying glass and
   opens the same popup — via assets/js/buy-now.js, which emits PrestaShop's
   own "clickQuickView" event directly (the theme's built-in click handler
   for data-link-action="quickview" turned out to be tied to the old icon's
   .quick-view class specifically). Always visible — no hover fade/fly-in,
   unlike the icon it replaces. */

.product-miniature .btn-buy-now {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  margin-top: 12px;
  padding: 10px 16px;
  border: 2px solid var(--cndy-almost-black);
  border-radius: 4px;
  background: transparent;
  color: var(--cndy-almost-black);
  font-weight: 700;
  text-transform: uppercase;
  text-decoration: none;
  transition: all 100ms linear;
}

.product-miniature .btn-buy-now:hover {
  border-color: var(--cndy-pastel-green);
  background-color: var(--cndy-pastel-green);
  color: var(--cndy-solid-white);
}

/*****END: PRODUCT GRID BLOCK*****/



/*****PRODUCT PAGE*****/

.product-flags {
  padding: 10px 0 0 10px;
}

.product-page-stars {
  margin: 0px;
}

#product #content {
  margin: 0px;
}

.product-mainblock {
  margin: 0px 25px;
}

.productblock-image,
.productblock-image {
  padding: 0px;
}

.an_productpage-slider-main {
  border: 2px solid var(--cndy-light-gray);
  border-radius: 5px;
}

.an_productpage-slider-main .slick-arrow,
.an_productpage-slider-main .slick-dots {
  display: none !important;
}

.an_productpage-slider-nav {
  margin: 10px 0px 0px 0px;
}

/* theme.css has ".an_productpage-slider-nav .slick-track { margin-left: 0; }",
   cancelling Slick's own default centering (base ".slick-track" rule sets
   "margin-left: auto; margin-right: auto;"). Restoring both margins here
   centers the thumbnail row under the main image whenever it's narrower
   than the gallery (up to 4 photos, per how many fit today without needing
   to scroll) instead of always sitting flush left. */
.an_productpage-slider-nav .slick-track {
  margin-left: auto;
  margin-right: auto;
}

.an_productpage-slider.an_productpage-slider-nav img {
  border: 2px solid var(--cndy-light-gray);
  border-radius: 5px;
}

.nav-slide-selected:before {
  border-color: var(--cndy-candy-pink) !important;
  border: 2px solid var(--cndy-light-gray);
  border-radius: 5px;
}

.modal-body h1, .page-product h1 {
    margin: 0px;
    line-height: 1;
    font-family: var(--cndy-font-titles);
}

h1[itemprop="name"] {
  font-family: var(--cndy-font-titles);
  font-size: 50px;
  color: var(--cndy-candy-pink);
  margin-bottom: 20px;
}

.productblock-content {
  padding: 0px 0px 0px 40px;
}

.product-prices .current-price-discounted .price {
  color: var(--cndy-pastel-green);
}

.product-discount,
.product-discount .regular-price {
  color: var(--cndy-dark-gray);
  font-size: 16px;
  text-decoration: none;
}

.an_productextratabs-accordion .card-body {
  line-height: 1.1;
}

/* .product-add-to-cart (the shared parent of .product-quantity and
   .quantity_availability, where Add to Cart lives) is "display: flex;
   align-items: center;" in theme.css, which should already vertically
   center the two against each other regardless of height. If something
   else is overriding that align-items, force it here directly instead of
   hunting further through theme.css's several overlapping/older rulesets
   for this same widget. */

/* .product-quantity gets "style="height: 55px;"" set inline by JS (not in
   any .tpl) — taller than its own 45px content, so the content sits inside
   a bigger box than .quantity_availability has, throwing off the alignment
   even with align-self: center correct on both. Inline styles only lose to
   !important, no amount of selector specificity gets around one. */

.product-quantity,
.quantity_availability {
  align-self: center;
  margin: 0;
}

.product-quantity {
  height: auto;
}

/* theme.css has ".product-add-to-cart .qty { height: 55px; ... }" — same
   fixed height, one level further in (.qty wraps .input-group). Same
   selector, just the property that needs changing, loaded after so it wins
   on source order — no !important needed here, unlike .product-quantity
   above (that one's fighting an inline style, this one's plain CSS). */

.product-add-to-cart .qty {
  height: auto;
}

.product-quantity .input-group {
  display: flex;
  align-items: center;
  gap: 8px;
  width: auto;
}

/* theme.css has ".product-quantity #quantity_wanted { background: #ececec;
   border: 0; height: 40px; padding: 0 8px 0px 17px; border-radius: 0px; }"
   (1 class + 1 id) — more specific than the generic `input` rule (FORMS
   section, a lone type selector), so it was winning on every property that
   rule sets, not just the ones we cared about (hence the grey background
   nobody asked for). Our selector adds .input-group on top of the same
   #quantity_wanted, so it already out-specifies theirs — but every property
   has to be spelled out here to actually contest it; leaving one out (like
   background, last time) just lets theirs through uncontested. box-sizing
   is explicit too, since their padding would otherwise add on top of the
   45px height instead of being included in it, throwing off the alignment
   with the buttons and Add to Cart beside it. */

.product-quantity .input-group #quantity_wanted {
  box-sizing: border-box;
  background-color: var(--cndy-solid-white);
  border: 2px solid var(--cndy-dark-gray);
  border-radius: 5px;
  height: var(--cndy-control-minheight);
  padding: 0;
  flex: none;
  width: 60px;
  text-align: center;
  transition: border-color 0.25s ease-in-out;
}

/* Our own border declaration above is unconditional (not scoped to :focus),
   so at this specificity it also blocks the generic `input:focus` rule
   (FORMS section) the same way it blocked the plain `input` background —
   same fix: restate it here instead of relying on the weaker generic rule. */

.product-quantity .input-group #quantity_wanted:focus {
  border-color: var(--cndy-almost-black);
}

/* theme.css has ".bootstrap-touchspin .btn-touchspin { background-color: #fff; height: 1.36rem; }"
   and ".bootstrap-touchspin .btn-touchspin:hover { background-color: #f1f1f1; }"
   (2 classes = higher specificity than .fancy-secondary-btn's 1 class), which
   was winning on background-color (at rest and hover) and forcing a ~22px
   height — only border-color (untouched by those rules) was changing, and
   the buttons stayed shorter than Add to Cart. Scoped !important here rather
   than on .fancy-btn/.fancy-secondary-btn generally, since those need to
   stay untouched everywhere else they're used. */

.product-quantity .btn-touchspin {
  border-radius: 5px !important;
  background-color: var(--cndy-solid-white) !important;
  color: var(--cndy-almost-black) !important;
  height: var(--cndy-control-minheight) !important;
}

.product-quantity .btn-touchspin:hover {
  background-color: var(--cndy-candy-pink) !important;
  color: var(--cndy-solid-white) !important;
}

/* Add to Cart normally gets its height from the shared .fancy-btn
   min-height (45px, BUTTONS section) — decoupled here so it tracks
   --cndy-control-minheight instead, staying in sync with the
   quantity selector beside it without changing height on every other
   fancy-btn button sitewide (Account, cart, Discover, Subscribe...).

   Restoring the "add-to-cart" class (needed for an_stickyaddtocart's JS
   hook, see product-add-to-cart.tpl) also pulled in theme.css's own
   ".product-actions .add-to-cart { height: 55px; ... }" and
   ".product-actions .add-to-cart:not(.buynow-button) { min-height: 55px; ... }"
   — the second one is 3 classes, more specific than a plain 2-class
   selector here, so it was winning regardless of load order; and neither
   was contested on "height" specifically since our old rule only declared
   min-height. Selector below is 4 classes (beats theirs outright, no
   !important needed) and declares both properties explicitly. */

.quantity_availability .add .fancy-addtocart-btn.add-to-cart {
  height: var(--cndy-control-minheight);
  min-height: var(--cndy-control-minheight);
  margin-left: 100px;
}


.product-add-to-cart .qty {
  width: fit-content;
}

.product-add-to-cart .qty .input-group .input-group-btn,
.product-add-to-cart .qty .input-group .input-group-btn>.btn {
  width: 45px;
}

/*****CART/STICKY QUANTITY STEPPER: match the product-page style*****/

/* Colors/border/hover for these buttons come from the shared .fancy-btn /
   .fancy-secondary-btn classes (added at runtime by
   assets/js/quantity-buttons.js) — same as the product page's own
   ".product-quantity .btn-touchspin" — so a future fancy-btn restyle
   doesn't need to be re-applied here too. Only what's genuinely specific
   to each widget's own layout stays below: sizing (fancy-btn's own
   padding/min-height is meant for text buttons like "Add to cart", too
   wide for a bare icon square) and fighting the couple of vendor
   properties fancy-btn's class-only specificity can't out-rank on its
   own (noted per rule). */

/* Checked the real rendered DOM/computed styles instead of guessing from
   theme.css alone (that file also has an unrelated, seemingly-unused
   ".input-group-btn-vertical" ruleset for a stacked-arrows layout — not
   what's actually live here). The button that's actually live already
   carries TouchSpin's plain "btn-touchspin" class (matched by
   quantity-buttons.js, same as the product page), horizontal like the
   product page's own — just squeezed into a fixed-width, overflow:hidden,
   heavily !important'd wrapper ("#cart .input-group.bootstrap-touchspin",
   "#cart .product-line-grid-right .input-group .input-group-btn>.btn",
   theme.css:12161-12206). These selectors match those chains 1-for-1 (id +
   same classes) so they win on source order for anything NOT !important;
   properties theme.css itself flagged !important need it here too. */

#cart .input-group.bootstrap-touchspin {
  border-radius: 0;
  overflow: visible;
  width: auto;
  gap: 20px;
  margin-right: 10px;
}

#cart .product-line-grid-right .input-group .input-group-btn > .btn {
  border: 2px solid var(--cndy-almost-black) !important;
  border-radius: 5px;
  background-color: var(--cndy-solid-white);
  color: var(--cndy-almost-black);
  width: var(--cndy-control-minheight) !important;
  /* theme.css's own ".bootstrap-touchspin .btn-touchspin { height: 1.36rem }"
     (~22px) was still winning on height specifically — this rule never
     contested it, only width — so the button rendered a squashed rectangle
     (45px wide, ~22px tall) instead of matching the square quantity input
     beside it. */
  height: var(--cndy-control-minheight) !important;
  /* Confirmed live: even with the 45px width declared above, the parent
     ".input-group" is a flex row with several elements crammed into a
     narrow cart line (buttons, quantity, price, remove icon) — with
     flex-shrink at its default of 1, the row was compressing this button
     down to 36px actual rendered width to fit, while height (the flex
     container's cross-axis, unaffected by shrink) stayed correctly at
     45px. That's the real "narrow rectangle" — width was the one actually
     wrong, not height. flex-shrink: 0 stops it from ever being compressed
     below its declared width. */
  flex-shrink: 0;
  display: flex !important;
  align-items: center;
  justify-content: center;
}

/* The base rule above wins against theme.css via !important + higher
   specificity — which also means it wins against .fancy-secondary-btn:hover
   (a plain 2-class selector) for the SAME reason, blocking the hover color
   change. Same selector chain + :hover beats both. */
#cart .product-line-grid-right .input-group .input-group-btn > .btn:hover {
  background-color: var(--cndy-candy-pink) !important;
  border-color: var(--cndy-candy-pink) !important;
  color: var(--cndy-solid-white);
}

#cart .product-line-grid-right .input-group.bootstrap-touchspin .form-control {
  background: var(--cndy-solid-white);
  border: 2px solid var(--cndy-dark-gray) !important;
  border-radius: 5px;
  width: var(--cndy-control-minheight) !important;
  height: var(--cndy-control-minheight) !important;
  /* Same flex-shrink compression as the +/- buttons just above (same flex
     row, same default flex-shrink: 1) — this input was getting squeezed
     narrower than its declared width too. */
  flex-shrink: 0;
}

#cart .product-line-grid-right .input-group.bootstrap-touchspin .form-control:focus {
  border-color: var(--cndy-almost-black) !important;
}

.fancy-product-price {
  display: flex;
  padding: 0px;
}

.fancy-product-price div {
  line-height: 35px;
  margin: 0px 5px 0px 0px;
}

.fancy-product-price div.regular-price {
  position: relative;
  bottom: -4px;
} 

.fancy-product-price .product-price-qty {
  color: var(--cndy-candy-pink);
  font-weight: 700;
  padding: 0px 0px 0px 10px;
  position: relative;
  bottom: -4px;
}

.fancy-total {
  padding: 0px 0px 0px 15px;
}

.regular-price {
  color: var(--cndy-dark-gray);
  font-size: 16px;
}

/* Sticky add-to-cart bar: its +/- buttons aren't TouchSpin at all — plain
   divs inserted by an_stickyaddtocart's own front.js
   (".quantity-button.quantity-up"/".quantity-down", already flanking the
   input left/right in the DOM). front.css restyles them with "border: 0
   !important" and an unscoped "width: 35px" — the !important border has
   to be matched with our own (same var() fancy-btn itself uses, so it
   still tracks a fancy-btn restyle); width just needs equal-or-later
   specificity, which this already has (same 2-class selector, loaded
   after front.css). */

.an_stickyAddToCart.an_stickyAddToCart .an_stickyAddToCart-qty-container {
  border-radius: 0;
  overflow: visible;
  gap: 8px;
}

/* Same selector as front.css's own (doubled ".an_stickyAddToCart" class is
   its own specificity trick, matched here) — loaded after it, so this wins
   on source order alone, no !important needed. */
.an_stickyAddToCart.an_stickyAddToCart .an_stickyAddToCart-qty {
  background: var(--cndy-solid-white);
  border: 2px solid var(--cndy-dark-gray);
  border-radius: 5px;
  min-width: var(--cndy-control-minheight);
  text-align: center;
}

.an_stickyAddToCart.an_stickyAddToCart .an_stickyAddToCart-qty:focus {
  border-color: var(--cndy-almost-black);
}

/* front.css's ".an_stickyAddToCart .quantity-button" sets "border: 0
   !important" — a real border can't win against that without matching
   !important ourselves, so this fakes one with box-shadow instead (a
   property front.css never touches here, so no specificity fight at all).
   Colors still reference the same fancy-btn variables, so a future
   fancy-btn restyle (border color, hover color) still carries over. */
.an_stickyAddToCart .quantity-button {
  width: var(--cndy-control-minheight);
  box-shadow: inset 0 0 0 2px var(--cndy-almost-black);
}

.an_stickyAddToCart .quantity-button:hover {
  box-shadow: inset 0 0 0 2px var(--cndy-candy-pink);
}

.an_stickyAddToCart .js-an_stickyAddToCart-add-to-cart .fa-cart-plus {
  margin-right: 5px;
}

/*****END: CART/STICKY QUANTITY STEPPER*****/

/* Cart page, mobile: cart-detailed-product-line.tpl now renders a SECOND
   trash icon (".cndy-remove-from-cart-mobile") right inside the quantity
   column, hidden on desktop via "hidden-md-up" — the original
   (".remove-item-wrap", theme.css pins it "position:absolute; top:-2px;
   right:0" below 767px, disconnected from the stepper) is hidden on
   mobile instead via "hidden-sm-down". Just needs the shared row to
   actually lay the two out side by side. */
@media (max-width: 767px) {
  .cndy-qty-row-mobile {
    display: flex;
    align-items: center;
    gap: 8px;
  }

  .cndy-remove-from-cart-mobile {
    width: var(--cndy-control-minheight);
    flex: none;
  }
}

.product-quantities-label,
.product-brand-label,
.product-sku-label {
  font-size: 18px;
  margin: 0px;
}

.product-quantities-number,
.product-brand-link,
.product-sku-sku {
  font-weight: 900;
}

.product-brand-link {
  text-decoration: underline;
}

.product-brand-link:hover {
  color: var(--cndy-candy-pink);
  text-decoration: underline;
}

.an-bi-item-head {
  margin-top: -3px;
  margin-bottom: 0px;
  line-height: 1rem;
}

.an-bi-item {
  padding: 0px 0px 20px 0px;
}

.an-bi-image {
  flex: 40px 0 0;
  width: 40px;
  margin-right: 15px;
  text-align: center;
}

.an-bi-image img {
  max-height: 40px;
}

.an-bi-title {
  font-weight: 900;
}

#accordion {
    margin: 40px 25px 0px 25px;
}

/*****END: PRODUCT PAGE*****/



/*****FEATURED PRODUCTS*****/

#product .featured-products h2, .product-accessories .h1 {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  margin: 0px 25px 20px 25px;
  font-size: 50px;
  text-transform: none;
}

#product .featured-products .products {
  margin: 0px 20px;
}

@media (min-width: 992px) {
  .product-accessories .owl-carousel .owl-stage-outer {
    padding: 0px;
    margin: 0px;
  }
}

#product .product-accessories .products {
  padding: 0px 25px;
}

/*****END: FEATURED PRODUCTS*****/



/*****CART*****/

@media (max-width: 767px) {
  .cart-item .product-line-grid .product-line-actions .col-xs-2, .cart-item .product-line-grid .product-line-actions .col-xs-12 {
    position: static;
    padding: 0px;
  }
}

#cart #wrapper {
  padding-top: 42px;
}

.cart-grid {
  padding: 0px 10px;
}

.cart-grid .card-block h1 {
  margin: 10px 0px 20px 0px;
  line-height: 1;
  font-family: var(--cndy-font-titles);
}

.cart-grid-body .cart-overview {
  border: 2px solid var(--cndy-light-gray);
  border-radius: 5px;
}

#cart .cart-item {
  border: none;
  padding: 20px;
}

.product-image.media-middle img {
  border: 2px solid var(--cndy-light-gray);
  border-radius: 5px;
}

.cart-line-product-actions i {
    background: transparent;
    color: unset;
    border: none;
    width: var(--cndy-control-minheight);
    padding: 10px 0px;
    height: 40px;
}

.cart-line-product-actions i:hover {
    background: transparent;
}

.product-line-grid-right .cart-line-product-actions .remove-from-cart, .product-line-grid-right .product-price .remove-from-cart {
    color: unset;
    display: inline-block;
    margin: 0px;
    padding: 0px;
}

.cart-grid-right {
  padding: 0px 15px;
  margin-top: 60px;
}

.cart-detailed-totals .card-block.cart-summary-totals {
  margin: 0px;
  padding: 0px;
  border: none;
}

.cart-summary-title {
  color: var(--cndy-almost-black);
  text-align: center;
}

.cart-summary-value {
  font-size: 40px;
  color: var(--cndy-candy-pink);
  font-weight: 900;
  text-align: center;
  padding: 0px;
}

.cart-summary-blurb {
  padding: 0px 20px;
  font-size: 16px;
  line-height: 1.1rem;
}

.cart-detailed-actions {
  padding: 10px 20px 20px 20px;
  border: 0;
}

.fancy-checkout-btn {
  font-size: 24px;
  height: 90px;
}

.fancy-checkout-btn:before,
.fancy-checkout-btn:after {
  font-family: "Font Awesome 7 Free";
  font-weight: 900;
  content: "\f105\f105\f105";
  display: inline-block;
  font-size: 18px;
  margin: 0px 10px;
  padding: 0px;
  letter-spacing: 5px;
}

.fancy-checkout-btn i {
  width: fit-content;
  margin: 0px 5px;
  font-size: 18px;
}

.cart-grid-body .no-items {
  text-align: center;
  width: 100%;
}

/*****END: CART*****/



/*****CMS PAGE*****/

#cms #wrapper {
    padding-top: 42px;
}

.page-cms #content-wrapper {
  padding: 0px 40px;
}

#cms .page-header {
  margin: 0px;
}

#cms .page-header h1 {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  font-size: 50px;
  margin: 0px 0px 40px 0px;
}

.page-content.page-cms h2 {
  text-align: left;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  font-size: 30px;
  margin: 40px 0px 0px 0px;
}

#cms h3 {
  text-align: left;
  font-family: var(--cndy-font-body);
  line-height: 1;
  font-size: 20px;
  font-weight: 900;
  margin: 25px 0px 0px 0px;
}

#cms #content p {
  text-align: justify;
  margin: 10px 0px 0px 0px;
}

/*****END: CMS PAGE*****/



/*****SEARCH PAGE*****/

#search #main h2 {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  font-size: 50px;
  margin: 0px !important;
}

/*****END: SEARCH PAGE*****/



/*****BLOG*****/

#module-anblog-list #wrapper,
#module-anblog-blog #wrapper,
#module-anblog-category #wrapper {
    padding-top: 42px;
}

#module-anblog-list #content-wrapper h1,
#module-anblog-blog .blog-title,
.blog-content-wrapper h1 {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  font-size: 50px;
  margin: 0px;
}

.blog-item-type-1 .title {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  font-size: 30px;
  margin: 40px 0px 0px 0px;
}

.blog-item .blog-meta span,
.blog-detail .blog-meta span {
  color: var(--cndy-almost-black);
  font-size: 18px;
  line-height: 1;
  margin: 10px 0px 0px 0px;
}

.blog-item .blog-meta {
  margin: 0px 0px 10px 0px;
  padding: 0px;
  font-size: unset;
}

.blog-content-wrapper {
  margin: 0;
}

.blog-detail .blog-meta {
  margin: 0px 0px 10px 0px;
  padding: 0px;
  font-size: unset;
  display: block;
  text-align: center;
}

.blog-detail .blog-description {
  font-weight: unset;
  line-height: 1;
  font-size: 18px;
  padding: 40px 40px 0px 40px;
}

.blog-detail .blog-description p {
  margin: 0px 0px 15px 0px;
  text-align: justify;
}

.blog-detail .blog-image {
  margin: 20px 0px 0px 0px;
}

.blog-image img {
  border-radius: 5px;
}

/*****END: BLOG*****/



/*****FOOTER******/

.footer-container {
  background: var(--cndy-almost-black);
  padding: 0px;
}

/* theme.css has "#checkout.checkout-minimize .footer-container { background: #fff; ... }"
   (id + 2 classes) — made sense back when the minimized checkout footer
   only showed the copyright bar; now that displayFooter's About Us content
   renders there too (checkout/_partials/footer.tpl), it needs the same dark
   background as everywhere else. Same selector to win on it. */
#checkout.checkout-minimize .footer-container {
  background: var(--cndy-almost-black);
}

.footer-container .container {
  padding: 0px;
}

.footer-container .container .row {
  margin: 0px;
}

.footer-left {
  display: none;
}

.footer-container .anbanners-wrapper {
  align-items: start;
  display: inline;
}

.footer-container .an_banner.an_banner-type1 .an_banner-content {
  padding: 0px;
}

.footer-container .an_banner.an_banner-type1 {
  display: inline-block;
  vertical-align: top;
  justify-content: normal;
  padding: 0px;
}

.footer-container .an_banner.an_banner-type1 .an_banner-text {
  display: inline-block;  
}

.footer-container .an_banner.an_banner-type1 div.an_banner-text {
  padding: 40px;
}

.footer-container .an_banner.an_banner-type1 .an_banner-text .an_banner-title {
  margin-top: 0px;
  margin-bottom: 15px;
  font-family: var(--cndy-font-titles);
}

#footer .anbanners-wrapper p.an_banner-title {
  color: var(--cndy-candy-pink);
  font-size: 27px;
}

.an_banner.an_banner-type1 .an_banner-text p:not(.an_banner-title) {
  line-height: 1.5;
}

.fancy-footer-block {
  display: flex;
  flex-wrap: nowrap;
  flex-direction: row;
}

.fancy-footer-rte {
  display: flex;
}

.fancy-footer-icon {
  padding-right: 10px;
  color: var(--cndy-candy-pink);
  position: relative;
  top: 3px;
}

.fancy-footer-newline {
  clear: left;
  margin-top: 10px;
}

.fancy-footer-social {
  font-size: 30px;
  margin-top: 20px;
  margin-right: 15px;
  left: -2px;
}

img.fancy-payment-method {
  width: 60px !important;
  margin-right: 10px;
  margin-bottom: 10px;
}

.copyright-container {
    background: var(--cndy-dark-gray);
    margin: 0px;
}

/*****END: FOOTER******/



/*****SOCKET******/

.copyright-container .container, .copyright-container .container .row {
  padding: 0px;
}

.an_copyright {
  margin: 15px 25px;
  padding: 0px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.fancy-socket-logo {
  display: inline-block;
  float: left;
}

.fancy-socket-blurb {
  display: inline-block;
  float: right;
}

#footer .copyright-container p {
  text-align: right;
  font-size: 11px;
  line-height: 1.5;
}

/* an_stickyaddtocart's front.js adds an inline padding-bottom to #footer
   (equal to the sticky bar's height) whenever the sticky add-to-cart bar
   is visible, so the fixed bar doesn't cover the footer/socket — but it
   leaves an ugly blank white gap between the socket and the bar instead.
   !important is needed here since it's overriding an inline style set
   directly by JS, not a stylesheet rule. */
#footer {
  padding-bottom: 0 !important;
}

/*****END: SOCKET******/



/*****LOGIN PAGE*****/

/* Login page: two-column account gate (existing customer login left,
   create-account CTA right). Wider content area; columns stretch to equal
   height so both "Already customer?" / "New customer" titles land on the
   same line, and the divider between them runs the full height. */
.page-authentication #content {
  max-width: 1100px;
}

/* Drop the generic "Log in to your account" H1: each column now has its own
   "Already customer?" / "New customer" heading at the same level instead. */
.page-authentication .page-header {
  display: none;
}

.account-gate {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  padding: 40px 0;
}

.account-gate-login h3,
.account-gate-register h3 {
  text-align: center;
}

.account-gate-register {
  display: flex;
  flex-direction: column;
  text-align: center;
}

/* .register-cta (the <section>) is the only direct child of
   .account-gate-register — it has to be a flex column itself and grow to
   fill the stretched column, otherwise flex:1 on .register-cta-body below
   has no flex container to grow inside and is simply ignored. */
.register-cta {
  flex: 1;
  display: flex;
  flex-direction: column;
}

/* Keep the paragraph right under the title, but push the CTA button down to
   the bottom of the column so it lands on the same line as "Sign in". */
.register-cta-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.register-cta-body .btn {
  align-self: center;
}

/* The old single-column form capped its fields at 350px and floats them at
   50% width (theme.css sets width:50% on .col-md-6, not max-width — so the
   field stayed narrow even after the max-width override below). */
.account-gate-login #login-form .form-group .col-md-6 {
  width: 100%;
  max-width: 100%;
  float: none;
  padding-right: 5px;
}

/* Sign in + Help on the same row instead of stacked. The parent theme gives
   .form-footer a 23px bottom margin (theme.css: margin:38px -15px 23px),
   which pushed "Sign in" that much above the column's true bottom edge —
   throwing off alignment with "Create account", which sits flush at the
   bottom via justify-content:space-between. Reset the margin so both
   buttons land on the same line. */
.account-gate-login #login-form .form-footer {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 24px 0 0;
}

@media (min-width: 768px) {
  .account-gate-register {
    border-left: 1px solid;
    padding-left: 40px;
  }

  .account-gate-login {
    padding-right: 40px;
  }
}

/*****END: LOGIN PAGE*****/



/*****CART: NEVER SHOW THE SLIDE-OUT PREVIEW*****/

.sb-open .sb-menu-right {
  transform: translateX(100%);
}
.sb-overlay {
  display: none !important;
}

/*****END: CART NEVER SHOW THE SLIDE-OUT PREVIEW*****/



/*****CHECKOUT FLOW*****/

#checkout.checkout-minimize .header-block {
  margin: 20px 0px 40px 0px;
}

.step-title {
  text-align: left;
  font-family: var(--cndy-font-titles);
  color: var(--cndy-dark-gray);
  font-weight: 400;
  font-size: 30px;
  padding: 10px 0px 15px 0px;
  min-height: fit-content;
}

.-current .step-title {
  color: var(--cndy-candy-pink);
}

#checkout .card.js-cart {
  margin: 0;
  padding: 20px 20px 30px 20px;
  background-color: var(--cndy-light-gray);
  border: none;
  border-radius: 5px;
}

#checkout .card-block .checkout-summary-items {
  text-align: center;
  font-family: var(--cndy-font-titles);
  font-weight: 400;
  line-height: 1;
  font-size: 40px;
  text-transform: capitalize;
  padding: 10px 0px 0px 0px;
}

body#checkout #cart-subtotal-products {
  border: none;
}

#checkout .cart-total.cart-summary-line {
  border: none;
}

body#checkout .product-amount {
  max-width: unset;
}

body#checkout #cart-summary-product-list .media-body .product-name {
  font-weight: 400;
  line-height: 1;
}

body#checkout #cart-summary-product-list .media-body .product-quantity {
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--cndy-candy-pink);
}

body#checkout #cart-summary-product-list img {
  border: 2px solid var(--cndy-dark-gray);
  border-radius: 5px;
}

.cart-summary-title {
  font-family: var(--cndy-font-titles);
}

#checkout .cart-total, #checkout .card-block p {
  margin: 0;
}

.continue {
  float: right;
  margin-bottom: 40px;
}

body#checkout section.checkout-step .form-footer,
body#checkout section.checkout-step .identity-continue {
  margin: 0px;
}

body#checkout .nav-item .nav-link.active,
body#checkout .nav-item .nav-link.active:hover {
  border-width: 2px;
  border-color: var(--cndy-candy-pink);
  background-color: var(--cndy-candy-pink);
  color: var(--cndy-solid-white);
  cursor: default;
}

body#checkout .nav-item .nav-link:hover {
  color: var(--cndy-solid-white);
}

body#checkout section.checkout-step .form-group .col-md-6, body#checkout section.checkout-step .form-control-valign {
  width: 100%;
  padding: 0px;
}

body#checkout section.checkout-step .form-group {
  margin: 0px 0px 15px 0px;
}

.fancy-address-subtitle {
  font-family: var(--cndy-font-titles);
  font-weight: 400;
  line-height: 1;
  font-size: 30px;
  color: var(--cndy-almost-black);
  padding: 10px 0px;
}

body#checkout section.checkout-step .form-control-comment {
  color: var(--cndy-dark-gray);
  font-style: normal;
  position: absolute;
  top: 0px;
  padding: 2px 20px 0px 0px;
  font-style: normal;
  text-transform: uppercase;
  font-size: 0.8em;
  font-weight: 700;
  align-items: center;
  pointer-events: none;
}

@media (max-width: 1199px) { 

  body#checkout section.checkout-step .form-control-comment {
    right: 0px;
  }

}

@media screen and (min-width: 1200px) { 

  body#checkout section.checkout-step .form-control-comment {
    right: 50%;
  }

}

.custom-checkbox-label {
  font-size: 1rem;
}

.custom-checkbox-label em {
  display: none;
}

body#checkout section.checkout-step.-reachable.-complete h1 .step-edit {
  display: flex;
  position: relative;
  float: right;
}

.fancy-password-help-btn {
  float: left;
  text-decoration: none !important;
}

.delivery-options-list {
  margin: 20px 0px 0px 0px;
}

.delivery-options {
  margin: 0px;
}

body#checkout section.checkout-step .delivery-option {
  background: var(--cndy-light-gray);
  border: none;
  border-radius: 5px;
  padding: 10px 15px;
  min-height: 50px;
  margin: 0px 0px 15px 0px;
  display: flex;
  align-items: center;
}

.payment-options {
  margin-top: 15px;
  border: 5px solid #635BFF;
  border-radius: 5px;
  padding: 50px 20px 20px 20px;
  background-image: url('../img/stripe-logo.png');
  background-attachment: fixed;
  background-position: center top;
  background-repeat: no-repeat;
  background-attachment: local;
  background-position-y: 5px;
}

div#checkout-conditions-box {
  display: flex;
  align-items: center;
  width: 100%;
}

body#checkout section.checkout-step #conditions-to-approve {
  padding-top: 40px;
  margin-bottom: 0px;
  margin: auto;
}

#payment-confirmation .ps-shown-by-js {
  align-items: center;
}

button.fancy-btn.fancy-primary-btn.fancy-checkout-btn.center-block.disabled {
  background-color: var(--cndy-light-gray);
  color: var(--cndy-dark-gray);
  border-color: var(--cndy-dark-gray);
  cursor: default;
  transition: all 100ms linear;
}

/*****END: CHECKOUT FLOW*****/



/*****ORDER CONFIRMATION PAGE*****/

.order-confirmation-top-section {
  margin: 0px 10px;
  position: relative;
  display: block;
  border-radius: 0;
}

.order-confimation-title {
  text-align: center;
  font-family: var(--cndy-font-titles);
  line-height: 1;
  margin: 0px 25px;
  font-size: 50px;
}

.order-number-title {
  text-align: center;
  font-family: var(--cndy-font-body);
  font-size: 25px;
  font-weight: 700;
  color: var(--cndy-almost-black);
  margin: 15px 0px 25px 0px;
}

.order-confirmation-blurb-section {
  margin: 20px 0px 0px 0px;
}

.order-confirmation-blurb-section p {
  margin: 0px 0px 10px 0px;
  line-height: 1;
  text-align: left;
}

.order-confirmation-middle-section {
  margin: 30px 25px 0px 25px;
}

/* CNDY: replaced the old raw <table> order-items layout (#order-items and
   its .order-line/.qty rules, previously here) with a card matching the
   checkout sidebar's cart-summary shape, plus two read-only address cards
   alongside it — see order-confirmation-table.tpl for the reasoning and the
   markup these rules style. */

#order-summary-column {
  padding-right: 20px;
}

/* The two columns are plain floated Bootstrap cols by default — nothing
   makes one match the other's height, so the shorter one (the order
   summary, especially with 1 product) just stops well above the taller
   one (two stacked address cards), leaving bare page background below it.
   "row" as a flex container with align-items:stretch makes both columns
   full-height; #order-summary-column then needs to be a flex column itself
   so its one child (.order-summary-card) can flex-grow into that full
   height instead of the column stretching while the card inside it stays
   its own short natural size. #order-addresses-column doesn't need this —
   its own two stacked cards already add up to its natural height, which is
   the tall side setting the row's height in the first place. */
.order-confirmation-middle-section .card-block > .row {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
}

#order-summary-column {
  display: flex;
  flex-direction: column;
}

.order-summary-card,
.order-address-card {
  background-color: var(--cndy-light-gray);
  border-radius: 5px;
  padding: 24px;
}

.order-summary-card {
  flex-grow: 1;
  display: flex;
  flex-direction: column;
}

.order-address-card + .order-address-card {
  margin-top: 20px;
}

.order-summary-card-title {
  text-align: center;
  font-family: var(--cndy-font-titles);
  font-size: 28px;
  margin: 0 0 20px 0;
}

.order-summary-products {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding-bottom: 14px;
  border-bottom: 2px solid var(--cndy-dark-gray);
}

.order-summary-product-line {
  display: flex;
  align-items: center;
  gap: 14px;
}

.order-summary-product-image img {
  width: 56px;
  height: 56px;
  object-fit: cover;
  border: 2px solid var(--cndy-dark-gray);
  border-radius: 5px;
}

.order-summary-product-details {
  flex-grow: 1;
}

.order-summary-product-qty {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--cndy-candy-pink);
}

.order-summary-product-price {
  font-weight: 700;
}

.order-summary-subtotals {
  padding: 14px 0;
  border-bottom: 2px solid var(--cndy-dark-gray);
}

.order-summary-line {
  display: flex;
  justify-content: space-between;
  margin-bottom: 8px;
}

/* Sits AFTER .order-summary-subtotals as its own sibling block specifically
   so that div's own border-bottom lands between Tax and this line, not
   below it — the divider needs to separate this row from the rest, not
   trail all four together. */
.order-summary-total-line {
  padding-top: 14px;
}

/* Same row shape as Subtotal/Shipping/Tax, just bolder to read as the
   actual final figure. Replaced the old big standalone
   .order-summary-total/-label/-value block that used to sit below this
   list (see order-confirmation-table.tpl's comment on why). */
.order-summary-line-total {
  font-weight: 700;
  font-size: 1.1rem;
  color: var(--cndy-candy-pink);
}

.order-address-card-title,
.order-confirmation-account-card h4 {
  text-align: left;
  font-family: var(--cndy-font-titles);
  font-size: 28px;
  margin: 0 0 12px 0;
}

.order-address-card-body {
  line-height: 1.6;
}

.order-address-card-method {
  margin: 14px 0 0 0;
  padding-top: 14px;
  border-top: 2px solid var(--cndy-dark-gray);
}

/* Same light-gray card treatment as .order-summary-card/.order-address-card
   above, applied to the "Create an Account" block that was plain unstyled
   content sitting below them. Now lives inside the same
   .order-confirmation-middle-section > .card-block > .row > .col-md-12
   structure as the row above it (order-confirmation.tpl) instead of trying
   to replicate that positioning with its own margin — confirmed live the
   two didn't actually line up (15px off), and that's simpler than finding
   the exact number to match. */
.order-confirmation-account-card {
  background-color: var(--cndy-light-gray);
  border-radius: 5px;
  padding: 24px;
  margin-top: 30px;
}

/* .cndy-search-page-form's own "margin: 40px auto" centers it as a
   standalone block — right for the search results page (its only content),
   wrong here: it would float centered under this card's own left-aligned
   heading/bullet list instead of lining up with them. Keeps that rule's
   max-width (a full-width input+button row here would look just as
   stretched), drops only the auto-centering. */
.order-confirmation-account-card .cndy-search-page-form {
  margin: 20px 0 0 0;
}

@media (max-width: 991px) {
  #order-summary-column {
    padding-right: 15px;
  }

  #order-addresses-column {
    margin-top: 24px;
  }
}

/*****END: ORDER CONFIRMATION PAGE*****/



/*****PAYMENT ERROR PAGE (stripe_official override)*****/

.payment-error-box {
  background-color: var(--cndy-light-gray);
  border-left: 4px solid var(--cndy-pastel-red);
  border-radius: 5px;
  padding: 24px 24px 20px;
  margin-bottom: 20px;
}

.payment-error-box p {
  margin: 0 0 10px;
}

.payment-error-box p:last-child {
  margin-bottom: 0;
}

.payment-error-fine {
  font-size: 13px;
  opacity: .75;
}

/* margin:auto on the button itself wasn't enough to center it live —
   .fancy-btn's flex/width interaction with the rest of the cascade wasn't
   cooperating. Centering via a flex wrapper instead sidesteps that: it
   doesn't depend on the button's own width/margin resolving any particular
   way, just on the wrapper distributing its child along the main axis. */
.payment-error-actions {
  display: flex;
  justify-content: center;
}

.payment-error-cta {
  max-width: 400px;
  width: 100%;
}

/*****END: PAYMENT ERROR PAGE*****/



/****HOME SLIDER *****/
.an_homeslider.owl-carousel.owl-drag .owl-item .an_homeslider-item img:not(.owl-lazy),
.an_homeslider.owl-carousel.owl-drag .owl-item .an_homeslider-item img.anhs-img-loaded {
    position: absolute;
    top: 25px;
    left: 25px;
    width: calc(100% - 50px);
    height: calc(100% - 50px);
    object-fit: cover;
    border-radius: 5px;
    transform-style: flat;
    -moz-transform-style: flat;
}

.an_homeslider-block {
    margin-bottom: 15px;
}
/****END : HOME SLIDER *****/



/*****PRICE SPLIT (currency / whole / cents)*****/

/* Structure created by assets/js/price-split.js — splits an already-
   rendered, already-localized price string like "$16.95" into these three
   spans wherever it appears on the site. .cndy-price-symbol/-whole are
   plain style hooks (no rule needed yet); .cndy-price-cents is styled as a
   superscript by default.
   "vertical-align: super" (the obvious first choice) was inconsistent
   across contexts — it shifts by a fraction of the font's own metrics, so
   the same rule looked fine on a big product price but sat too high/low
   next to the header cart badge's smaller text. Fixed "top" + resetting
   line-height on all three parts avoids that, at the cost of needing a
   number tuned by eye rather than a keyword. */
.cndy-price-symbol,
.cndy-price-whole,
.cndy-price-cents {
  line-height: 1;
}

.cndy-price-cents {
    font-size: 0.65em;
    position: relative;
    top: 0.185em;
    vertical-align: super;
    left: -0.05em;
}

/*****END: PRICE SPLIT*****/
