/* Minification failed. Returning unminified contents.
(17,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(18,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(19,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(20,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(21,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(22,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(23,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(24,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(25,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(30,17): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-arrow-size'
(31,18): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-arrow-size'
(32,22): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-arrow-bg'
(33,25): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-radius'
(41,16): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-accent'
(46,22): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-arrow-bg-hover'
(50,16): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-accent-contrast'
(65,22): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-dot-color'
(66,25): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-radius'
(72,22): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-dot-color-active'
(94,29): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-focus-ring'
(116,25): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-radius'
(127,24): run-time error CSS1039: Token not allowed after unary operator: '-cbi-car-accent'
 */
.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
/* =============================================================================
 * cbi-carousel.css — house styling for cbiCarousel (Splide)
 * -----------------------------------------------------------------------------
 * Load order: Splide core CSS  ->  THIS FILE  ->  (page CSS).
 * Scope: every cbiCarousel instance gets the `.cbi-splide` marker class (added
 * by cbiCarousel.build), so these overrides hit both auto-discovered strips
 * and the programmatic gallery without leaking onto any unrelated Splide.
 *
 * Everything is driven by the variables below. This intentionally does NOT
 * impose a look — it inherits CBI's existing palette. Point these at your real
 * brand tokens once (here, or override per-page) and every carousel follows.
 * ============================================================================= */

.cbi-splide {
    /* Brand hooks — override these to match the site. Defaults are neutral. */
    --cbi-car-accent: #1f1f1f; /* arrows + active dot */
    --cbi-car-accent-contrast: #ffffff; /* icon/text on the accent */
    --cbi-car-arrow-bg: rgba(0, 0, 0, 0.04);
    --cbi-car-arrow-bg-hover: var(--cbi-car-accent);
    --cbi-car-arrow-size: 2.5rem;
    --cbi-car-dot-color: rgba(0, 0, 0, 0.22);
    --cbi-car-dot-color-active: var(--cbi-car-accent);
    --cbi-car-focus-ring: #2563eb; /* keyboard focus only */
    --cbi-car-radius: 0; /* CBI is square-cornered; bump for pills */
}

/* ---- arrows -------------------------------------------------------------- */
.cbi-splide .splide__arrow {
    width: var(--cbi-car-arrow-size);
    height: var(--cbi-car-arrow-size);
    background: var(--cbi-car-arrow-bg);
    border-radius: var(--cbi-car-radius);
    opacity: 1;
    transition: background-color 0.15s ease, opacity 0.15s ease;
}

.cbi-splide .splide__arrow svg {
    width: 1.1em;
    height: 1.1em;
    fill: var(--cbi-car-accent);
    transition: fill 0.15s ease;
}

.cbi-splide .splide__arrow:hover:not(:disabled) {
    background: var(--cbi-car-arrow-bg-hover);
}

.cbi-splide .splide__arrow:hover:not(:disabled) svg {
    fill: var(--cbi-car-accent-contrast);
}

.cbi-splide .splide__arrow:disabled {
    opacity: 0.3;
    cursor: default;
}

/* ---- pagination dots ----------------------------------------------------- */
.cbi-splide .splide__pagination {
    position: static;
    margin-top: 1rem;
}

.cbi-splide .splide__pagination__page {
    background: var(--cbi-car-dot-color);
    border-radius: var(--cbi-car-radius);
    opacity: 1;
    transition: background-color 0.15s ease, transform 0.15s ease;
}

.cbi-splide .splide__pagination__page.is-active {
    background: var(--cbi-car-dot-color-active);
    transform: scale(1.3);
}

/* ---- related-strip cards -------------------------------------------------
 * The shop's .product-card / .grid-item are absolutely positioned for the
 * Isotope masonry grid. Inside a carousel slide that removes them from flow,
 * so the slide measures empty, Splide sizes the track short, and the cards
 * paint down over the pagination. Force them back into normal flow here
 * (scoped to carousel slides only — the masonry grid is untouched).
 * ------------------------------------------------------------------------- */
.cbi-splide .splide__slide .grid-item,
.cbi-splide .splide__slide .product-card {
    position: static;
    box-sizing: border-box;
    margin-bottom: 0;
}

/* ---- keyboard focus (visible for keyboard users, not mouse clicks) ------- */
.cbi-splide .splide__arrow:focus-visible,
.cbi-splide .splide__pagination__page:focus-visible,
.cbi-splide .splide__slide:focus-visible {
    outline: 2px solid var(--cbi-car-focus-ring);
    outline-offset: 2px;
}

/* ---- gallery thumbnail track (used by the product-detail gallery) --------
 * The thumbnail Splide runs in isNavigation mode; its active slide gets
 * .is-active. A quiet ring is enough to show which image is showing. The
 * gallery markup opts in by adding .cbi-splide--thumbs to its thumbnail root.
 * ------------------------------------------------------------------------- */
.cbi-splide--thumbs {
    margin-top: 0.75rem;
}

.cbi-splide--thumbs .splide__slide img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.cbi-splide--thumbs .splide__slide {
    cursor: pointer;
    border: 2px solid transparent;
    border-radius: var(--cbi-car-radius);
    opacity: 0.6;
    transition: opacity 0.15s ease, border-color 0.15s ease;
}

.cbi-splide--thumbs .splide__slide:hover {
    opacity: 1;
}

.cbi-splide--thumbs .splide__slide.is-active {
    opacity: 1;
    border-color: var(--cbi-car-accent);
}

/* ---- video thumbnail play badge -----------------------------------------
 * A real video frame paints behind a centered play-circle so the video thumb
 * reads as "playable" in the rail. The frame comes from the <video> element
 * (preload="auto" + #t=0.1 fragment); this centers the badge over it.
 * ------------------------------------------------------------------------- */
.cbi-gallery-thumb--video {
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
    aspect-ratio: 1 / 1;
}

.cbi-gallery-thumb--video video {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.cbi-gallery-thumb--video .fa-play-circle {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: 1.75rem;
    color: #fff;
    text-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
    pointer-events: none;
}

/* ---- reduced motion ------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
    .cbi-splide .splide__arrow,
    .cbi-splide .splide__arrow svg,
    .cbi-splide .splide__pagination__page,
    .cbi-splide--thumbs .splide__slide {
        transition: none;
    }
}

