/* assets/css/store-utilities.css — Phase A Bootstrap-compatible subset.
 *
 * Single-purpose utility classes: spacing, display/flex, position,
 * typography, colors/backgrounds, borders/shadow/rounded. Rules copied
 * verbatim from the self-hosted assets/vendor/bootstrap/bootstrap.min.css
 * (Bootstrap 5.3.2) — filtered to classes actually used by the store
 * frontend. See assets/css/store-framework.css header for the extraction
 * method and current (unlinked) status.
 */

/* ===== Spacing / Display-Flex / Position / Typography / Colors-Backgrounds / Borders-Shadow ===== */

/* ---- spacing ---- */
.m-0 {
  margin:0!important;
}
.mx-auto {
  margin-right:auto!important;
  margin-left:auto!important;
}
.my-2 {
  margin-top:.5rem!important;
  margin-bottom:.5rem!important;
}
.mt-1 {
  margin-top:.25rem!important;
}
.mt-2 {
  margin-top:.5rem!important;
}
.mt-3 {
  margin-top:1rem!important;
}
.mt-4 {
  margin-top:1.5rem!important;
}
.mt-5 {
  margin-top:3rem!important;
}
.mt-auto {
  margin-top:auto!important;
}
.me-2 {
  margin-right:.5rem!important;
}
.me-3 {
  margin-right:1rem!important;
}
.me-auto {
  margin-right:auto!important;
}
.mb-0 {
  margin-bottom:0!important;
}
.mb-1 {
  margin-bottom:.25rem!important;
}
.mb-2 {
  margin-bottom:.5rem!important;
}
.mb-3 {
  margin-bottom:1rem!important;
}
.ms-1 {
  margin-left:.25rem!important;
}
.ms-2 {
  margin-left:.5rem!important;
}
.ms-auto {
  margin-left:auto!important;
}
.p-0 {
  padding:0!important;
}
.p-3 {
  padding:1rem!important;
}
.px-1 {
  padding-right:.25rem!important;
  padding-left:.25rem!important;
}
.px-3 {
  padding-right:1rem!important;
  padding-left:1rem!important;
}
.py-2 {
  padding-top:.5rem!important;
  padding-bottom:.5rem!important;
}
.py-4 {
  padding-top:1.5rem!important;
  padding-bottom:1.5rem!important;
}
.py-5 {
  padding-top:3rem!important;
  padding-bottom:3rem!important;
}
.pt-4 {
  padding-top:1.5rem!important;
}
.pb-3 {
  padding-bottom:1rem!important;
}
@media (min-width:992px) {
  .mb-lg-0 {
    margin-bottom:0!important;
  }
}

/* ---- display-flex ---- */
.d-inline {
  display:inline!important;
}
.d-inline-block {
  display:inline-block!important;
}
.d-grid {
  display:grid!important;
}
.d-flex {
  display:flex!important;
}
.d-inline-flex {
  display:inline-flex!important;
}
.d-none {
  display:none!important;
}
.flex-column {
  flex-direction:column!important;
}
.flex-grow-1 {
  flex-grow:1!important;
}
.flex-shrink-0 {
  flex-shrink:0!important;
}
.flex-wrap {
  flex-wrap:wrap!important;
}
.justify-content-end {
  justify-content:flex-end!important;
}
.justify-content-center {
  justify-content:center!important;
}
.justify-content-between {
  justify-content:space-between!important;
}
.align-items-start {
  align-items:flex-start!important;
}
.align-items-center {
  align-items:center!important;
}
.align-self-start {
  align-self:flex-start!important;
}
.gap-2 {
  gap:.5rem!important;
}
.gap-3 {
  gap:1rem!important;
}
.gap-4 {
  gap:1.5rem!important;
}
@media (min-width:576px) {
  .d-sm-flex {
    display:flex!important;
  }
}
/* Real bug fix, not new utilities: .d-lg-flex/.d-lg-none/.d-md-inline-flex
   are used throughout the templates (mobile-only nav/filter toggles, the
   cart indicator's text+total, the info-bar working-hours span) but were
   never actually extracted into this Bootstrap subset — same gap as the
   missing .col-lg-9 found earlier. Without .d-lg-none, the mobile "Меню"
   hamburger and the category page's "Филтри" toggle stayed visible on
   desktop too, sitting redundantly next to the real desktop nav/sidebar;
   without .d-lg-flex, the cart's "Количка / total" text has never shown
   on desktop at all. */
@media (min-width:768px) {
  .d-md-inline-flex {
    display:inline-flex!important;
  }
}
@media (min-width:992px) {
  .d-lg-flex {
    display:flex!important;
  }
  .d-lg-none {
    display:none!important;
  }
  .order-lg-1 {
    order:1!important;
  }
  .order-lg-2 {
    order:2!important;
  }
}

/* ---- position ---- */
.position-relative {
  position:relative!important;
}
.position-absolute {
  position:absolute!important;
}
.top-0 {
  top:0!important;
}
.start-100 {
  left:100%!important;
}
.translate-middle {
  transform:translate(-50%,-50%)!important;
}
.w-100 {
  width:100%!important;
}
.h-100 {
  height:100%!important;
}

/* ---- typography ---- */
.h4,.h5,.h6 {
  margin-top:0;
  margin-bottom:.5rem;
  font-weight:500;
  line-height:1.2;
  color:var(--bs-heading-color);
}
.h4 {
  font-size:calc(1.275rem + .3vw);
}
@media (min-width:1200px) {
  .h4 {
    font-size:1.5rem;
  }
}
.h5 {
  font-size:1.25rem;
}
.h6 {
  font-size:1rem;
}
.small {
  font-size:.875em;
}
.fs-5 {
  font-size:1.25rem!important;
}
.fw-semibold {
  font-weight:600!important;
}
.fw-bold {
  font-weight:700!important;
}
.text-end {
  text-align:right!important;
}
.text-center {
  text-align:center!important;
}
.text-decoration-none {
  text-decoration:none!important;
}
.text-uppercase {
  text-transform:uppercase!important;
}
@media (min-width:768px) {
  .text-md-start {
    text-align:left!important;
  }
  .text-md-end {
    text-align:right!important;
  }
}

/* ---- colors-backgrounds ---- */
.link-light {
  color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;
  -webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;
  text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;
}
.link-light:focus,.link-light:hover {
  color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;
  -webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;
  text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;
}
.text-primary {
  --bs-text-opacity:1;
  color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important;
}
.text-secondary {
  --bs-text-opacity:1;
  color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important;
}
.text-success {
  --bs-text-opacity:1;
  color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important;
}
.text-info {
  --bs-text-opacity:1;
  color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important;
}
.text-danger {
  --bs-text-opacity:1;
  color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important;
}
.text-light {
  --bs-text-opacity:1;
  color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important;
}
.text-white {
  --bs-text-opacity:1;
  color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important;
}
.text-muted {
  --bs-text-opacity:1;
  color:var(--bs-secondary-color)!important;
}
.bg-primary {
  --bs-bg-opacity:1;
  background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important;
}
.bg-secondary {
  --bs-bg-opacity:1;
  background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important;
}
.bg-light {
  --bs-bg-opacity:1;
  background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important;
}
.bg-dark {
  --bs-bg-opacity:1;
  background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important;
}
.bg-white {
  --bs-bg-opacity:1;
  background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important;
}
.bg-secondary-subtle {
  background-color:var(--bs-secondary-bg-subtle)!important;
}
.bg-info-subtle {
  background-color:var(--bs-info-bg-subtle)!important;
}

/* ---- borders-shadow ---- */
.shadow-sm {
  box-shadow:var(--bs-box-shadow-sm)!important;
}
.border {
  border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
.border-top {
  border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
.border-bottom {
  border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
.border-success {
  --bs-border-opacity:1;
  border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important;
}
.rounded {
  border-radius:var(--bs-border-radius)!important;
}
.rounded-pill {
  border-radius:var(--bs-border-radius-pill)!important;
}
/* Missing from the original Phase-A Bootstrap-subset extraction — found
   Phase 11 via a real Lighthouse/manual audit: 3 real .visually-hidden
   uses already existed in the markup (search label, homepage SEO
   heading, sort-select label) with no rule backing the class, so all 3
   were rendering visibly instead of screen-reader-only this whole time. */
.visually-hidden {
  position:absolute!important;
  width:1px!important;
  height:1px!important;
  padding:0!important;
  margin:-1px!important;
  overflow:hidden!important;
  clip:rect(0,0,0,0)!important;
  white-space:nowrap!important;
  border:0!important;
}
