body{
    overflow: auto;
}

.sx-kiosk .sx-header-row {
    max-width: none;
    margin-left: 0;
    margin-right: 0;
    flex-wrap: nowrap;
    gap: 2px;
    padding: 4px;
}

.sx-kiosk .sx-prep-readout {
    min-width: 56px;
    padding-left: 4px;
    padding-right: 4px;
}

@media (min-width: 640px) {
    .sx-kiosk .sx-header-row {
        gap: 8px;
        padding: 8px 16px;
    }

    .sx-kiosk .sx-prep-readout {
        min-width: 96px;
        padding-left: 12px;
        padding-right: 12px;
    }
}


.fix-width-300 {
    min-width: 300px;
    width: 300px;
}

.fix-width-200 {
    min-width: 200px;
    width: 200px;
}

.fix-width-150 {
    min-width: 150px;
    width: 150px;
}

.fix-width-125 {
    min-width: 125px;
    width: 125px;
}

.fix-width-100 {
    min-width: 100px;
    width: 100px;
}

.fix-width-75 {
    min-width: 75px;
    width: 75px;
}

.fix-width-64 {
    min-width: 64px;
    width: 64px;
}

.fix-width-50 {
    min-width: 50px;
    width: 50px;
}

.fix-width-36 {
    min-width: 36px;
    width: 36px;
}

.fix-width-32 {
    min-width: 32px;
    width: 32px;
}

.fix-width-30 {
    min-width: 30px;
    width: 30px;
}

.fix-width-25 {
    min-width: 25px;
    width: 25px;
}

.fix-height-200 {
    min-height: 200px;
    height: 200px;
}

.fix-height-100 {
    min-height: 100px;
    height: 100px;
}

.fix-height-75 {
    min-height: 75px;
    height: 75px;
}

.fix-height-64 {
    min-height: 64px;
    height: 64px;
}

.fix-height-36 {
    min-height: 36px;
    height: 36px;
}

.fix-height-25 {
    min-height: 36px;
    height: 36px;
}



.btn-64 {
    width: 64px;
    height: 64px;
    font-size: 30px;
}

.btn-64-parent {
    width: 64px;
    height: 128px
}

.btn-round {
    font-size: 1rem;
    border-radius: 10rem;
    padding: .75rem 1rem;
}

.gradient-light-blue {
    background-color: rgba(28,206,234,0.82);
    background: linear-gradient(-45deg, rgba(147,26,222,0.83) 0%, rgba(28,206,234,0.82) 100%);
    background-image: linear-gradient(-45deg, rgba(147, 26, 222, 0.83) 0%, rgba(28, 206, 234, 0.82) 100%);
    background-position-x: initial;
    background-position-y: initial;
    background-size: initial;
    background-repeat-x: initial;
    background-repeat-y: initial;
    background-attachment: initial;
    background-origin: initial;
    background-clip: initial;
    background-color: rgba(28,206,234,0.82);
    color: white;
}

.gradient-light-red {
    background-color: rgba(255, 173, 173, 0.82);
    background: linear-gradient(-45deg, rgba(255, 89, 94, 0.83) 0%, rgba(255, 173, 173, 0.82) 100%);
    background-image: linear-gradient(-45deg, rgba(255, 89, 94, 0.83) 0%, rgba(255, 173, 173, 0.82) 100%);
    background-position-x: initial;
    background-position-y: initial;
    background-size: initial;
    background-repeat-x: initial;
    background-repeat-y: initial;
    background-attachment: initial;
    background-origin: initial;
    background-clip: initial;
    background-color: rgba(255, 173, 173, 0.82);
    color: white;
}


.wwbw {
    word-wrap: break-word
}

.circle {
    border-radius: 50%;
}

.circle-200 {
    display: inline-block;
    position: relative;
    width: 200px;
    height: 200px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-100 {
    display: inline-block;
    position: relative;
    width: 100px;
    height: 100px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-64 {
    display: inline-block;
    position: relative;
    width: 64px;
    height: 64px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-50 {
    display: inline-block;
    position: relative;
    width: 50px;
    height: 50px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-40 {
    display: inline-block;
    position: relative;
    width: 40px;
    height: 40px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-24 {
    display: inline-block;
    position: relative;
    width: 24px;
    height: 24px;
    overflow: hidden;
    border-radius: 50%;
}

.circle-25 {
    display: inline-block;
    position: relative;
    width: 25px;
    height: 25px;
    overflow: hidden;
    border-radius: 50%;
}

.square-200 {
    display: inline-block;
    position: relative;
    width: 200px;
    height: 200px;
    overflow: hidden;
}

.square-110 {
    display: inline-block;
    position: relative;
    width: 110px;
    height: 110px;
    overflow: hidden;
}

.square-100 {
    display: inline-block;
    position: relative;
    width: 100px;
    height: 100px;
    overflow: hidden;
}

.square-64 {
    display: inline-block;
    position: relative;
    width: 64px;
    height: 64px;
    overflow: hidden;
}
 
.square-28 {
    display: inline-block;
    position: relative;
    width: 28px;
    height: 28px;
    overflow: hidden;
}
 


@media only screen and (min-width: 0px) and (max-width: 700px) {
    .mobile {
        display: block;
    }

    .desktop {
        display: none;
    }
}

@media only screen and (min-width: 701px) and (max-width: 3000px) {
    .mobile {
        display: none;
    }

    .desktop {
        display: block;
    }
} 
.dropdown-menu[data-bs-popper]{    
      left: auto;    
}

/* print */
.d-print-only {
    display: none;
  }

@media print {
    .d-print-only {
        display: block !important;
    }
}

/* Glow */
.glow-div-green {
    -webkit-box-shadow: 0 0 10px 3px #0f0, 0 0 4px 2px #0f0;
            box-shadow: 0 0 10px 3px #0f0, 0 0 4px 2px #0f0;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
}

.glow-div-red {
    -webkit-box-shadow: 0 0 10px 3px #f00, 0 0 4px 2px #f00;
            box-shadow: 0 0 10px 3px #f00, 0 0 4px 2px #f00;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
}

.glow-div-green-circle {
    box-shadow: 0 0 0 4px white, 0 0 10px 4px #0f0;
    border-radius: 50%;
}

.glow-div-red-circle {
    box-shadow: 0 0 0 4px white, 0 0 10px 4px #f00;
    border-radius: 50%;
}

.glow-div-white {
    -webkit-box-shadow: 0 0 10px 3px #fff, 0 0 4px 2px #fff;
            box-shadow: 0 0 10px 3px #fff, 0 0 4px 2px #fff;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
}

.glow-div{
    -webkit-box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
            box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
    z-index: -1;
    -webkit-animation-name: gradient-shadow;
            animation-name: gradient-shadow;
    -webkit-animation-timing-function: ease;
            animation-timing-function: ease;
    -webkit-animation-duration: 20s;
            animation-duration: 20s;
    -webkit-animation-iteration-count: infinite;
            animation-iteration-count: infinite;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
  }
   
  
  @-webkit-keyframes gradient-shadow {
    0% {
      -webkit-box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
              box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
    }
    20% {
      -webkit-box-shadow: 0 0 10px 3px #0ff,0 0 4px 2px #0ff;
              box-shadow: 0 0 10px 3px #0ff,0 0 4px 2px #0ff;
    }
    40% {
      -webkit-box-shadow: 0 0 10px 3px #0f0,0 0 4px 2px #0f0;
              box-shadow: 0 0 10px 3px #0f0,0 0 4px 2px #0f0;
    }
    60% {
      -webkit-box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
              box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
    }
    80% {
      -webkit-box-shadow: 0 0 10px 3px #f00,0 0 4px 2px #f00;
              box-shadow: 0 0 10px 3px #f00,0 0 4px 2px #f00;
    }
    100% {
      -webkit-box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
              box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
    }
  }
  
  @keyframes gradient-shadow {
    0% {
      -webkit-box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
              box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
    }
    20% {
      -webkit-box-shadow: 0 0 10px 3px #0ff,0 0 4px 2px #0ff;
              box-shadow: 0 0 10px 3px #0ff,0 0 4px 2px #0ff;
    }
    40% {
      -webkit-box-shadow: 0 0 10px 3px #0f0,0 0 4px 2px #0f0;
              box-shadow: 0 0 10px 3px #0f0,0 0 4px 2px #0f0;
    }
    60% {
      -webkit-box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
              box-shadow: 0 0 10px 3px #ffff01,0 0 4px 2px #ffff01;
    }
    80% {
      -webkit-box-shadow: 0 0 10px 3px #f00,0 0 4px 2px #f00;
              box-shadow: 0 0 10px 3px #f00,0 0 4px 2px #f00;
    }
    100% {
      -webkit-box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
              box-shadow: 0 0 10px 3px #C586C0,0 0 4px 2px #C586C0;
    }
  }
  

  .modal.modal-fullscreen .modal-dialog {
    width: 100vw;
    height: 100vh;
    margin: 0;
    padding: 0;
    max-width: none; 
  }
  
  .modal.modal-fullscreen .modal-content {
    height: auto;
    height: 100vh;
    border-radius: 0;
    border: none; 
  }
  
  .modal.modal-fullscreen .modal-body {
    overflow-y: auto;
  }

  .sticky {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    z-index: 1050;
  }


/* ─────────────────────────────────────────────────────────────────────────────
   CARD PRICE - the sale block on a product grid card
   ─────────────────────────────────────────────────────────────────────────────
   One rule set, six templates: Default, Restaurant and Red (Bootstrap), and
   ClothingShop, Black and Gold (Tailwind). The markup stays inline in each
   template, visible where it is edited - deliberately not a directive or an
   ng-include partial, so reading a template never means going to find the thing
   it refers to.

   Luxury, GroceryShop and Green are OUT and must stay out. Luxury positions its
   badge over the photograph in a different DOM subtree; GroceryShop uses a
   three-badge struck/percent/equals formula; Green is a CSS-grid card with its
   own stylesheet. Information design, not a restyle - do not fold them in.

   Theming is the modifier only. Add --card-price-* to a new
   .card-price-block--<name>, never a new copy of the rules. Gold's badge being
   generic red was exactly this rot: markup pasted from Black, colours never
   revisited, and no test can see a colour.

   Lives here rather than tailwindinput.css because site.css is not purged: these
   rules reach the Bootstrap templates too, and need no rebuild to land.
   ────────────────────────────────────────────────────────────────────────── */

.card-price-block {
    --card-price-old-color: rgba(0, 0, 0, .35);
    --card-price-badge-bg: #dc3545;
    --card-price-badge-fg: #fff;
}

.card-price-block--clothing,
.card-price-block--black {
    --card-price-old-color: #737373;   /* neutral-500, on a dark card */
}

.card-price-block--gold {
    --card-price-old-color: #737373;
    --card-price-badge-bg: #d4af37;    /* gold-500 - the template's own accent */
    --card-price-badge-fg: #1a1500;    /* gold-900 - contrast on that gold */
}

.card-price-old {
    text-decoration: line-through;
    text-decoration-color: var(--card-price-old-color);
    color: var(--card-price-old-color);
    margin-right: .35rem;
}

.card-price-badge {
    display: inline-block;
    background: var(--card-price-badge-bg);
    color: var(--card-price-badge-fg);
    border-radius: .25rem;
    padding: .1em .4em;
    font-size: .75em;
    font-weight: 600;
    white-space: nowrap;
}

/* The price on the card is the price you pay; "from" says the cheapest variant
   decides it. It recedes - it is a qualifier, not part of the number. */
.card-price-from {
    font-weight: 400;
    opacity: .65;
}

/* ─────────────────────────────────────────────────────────────────────────────
   VARIANT SELECTOR - the size/colour picker on the product page
   ─────────────────────────────────────────────────────────────────────────────
   Shared by every template, so it cannot assume a background. It used to take
   border-color:currentColor with no background at all, and signal the SELECTED
   option with border-width 1px -> 2px. On the dark Default page that is a
   one-pixel difference in a colour the page never set: the whole control read as
   empty space. Screenshot 2026-09-18.

   Everything here is derived from currentColor with color-mix, so it contrasts
   on any theme without the component needing to know which one it is on. A
   template can still override the tokens if it wants its own accent.

   Selected is a FILL plus weight, never a border weight: 1px -> 2px on selection shifted
   every swatch after it one pixel sideways, and a 1px edge is not an affordance anyway.
   The border stays 2px throughout, and an unselected swatch carries a faint resting fill so
   it reads as a control rather than as running text.
   ────────────────────────────────────────────────────────────────────────── */

.vs-swatch {
    --vs-border: color-mix(in srgb, currentColor 55%, transparent);
    --vs-rest: color-mix(in srgb, currentColor 7%, transparent);
    --vs-fill: color-mix(in srgb, currentColor 28%, transparent);
    --vs-fill-hover: color-mix(in srgb, currentColor 16%, transparent);

    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .35rem;
    /* 44px: the smallest target a finger hits reliably. Was 2.6rem/41.6px. */
    min-width: 2.75rem;
    min-height: 2.75rem;
    padding: .35rem .7rem;
    border: 2px solid var(--vs-border);
    border-radius: 4px;
    background-color: var(--vs-rest);
    cursor: pointer;
    user-select: none;
    font-size: .875rem;
    line-height: 1;
    transition: background-color .15s ease, border-color .15s ease;
}

.vs-swatch:hover { background-color: var(--vs-fill-hover); }

.vs-swatch.is-selected {
    background-color: var(--vs-fill);
    border-color: currentColor;
    font-weight: 600;
}

/* Still clickable on purpose - a shopper set on this size would rather change
   colour than be blocked. Reads as unavailable without becoming unreadable:
   0.35 opacity on a dark page was indistinguishable from absent. */
.vs-swatch.is-unavailable {
    opacity: .6;
    text-decoration: line-through;
    text-decoration-thickness: 1px;
}

/* The question asked and the answer given. Both at full strength - the row that decides
   which SKU gets bought should not be quieter than the description above it. */
.vs-axis-label { opacity: 1; text-transform: uppercase; font-size: .8125rem; }
.vs-axis-value { font-weight: 600; font-size: .9375rem; }

/* "This combination is not available" and the stock line. The first is the one
   message a blocked shopper must be able to read, so it does not whisper. */
.vs-note {
    margin-top: .5rem;
    font-size: .82rem;
    opacity: .9;
}

/* Deliberately not red. This control does not know the template's background, so a fixed
   hue can land on a page the same colour. The word carries it; weight makes it land. */
.vs-sold-out { font-weight: 600; opacity: 1; }

/* Staff reference when taking a phone order - secondary on purpose, but .55 alpha
   on a dark page is past quiet and into absent. */
.vs-sku {
    margin-top: .35rem;
    font-size: .72rem;
    opacity: .7;
    letter-spacing: .05em;
}
