/** Shopify CDN: Minification failed

Line 1028:69 Expected identifier but found whitespace
Line 1029:25 Unexpected bad string token
Line 1029:74 Unterminated string token

**/
/* ==========================================================================
   KOSZYK W STYLU SLEEKA — 1:1 z ich szuflada

   Podpiety <link>iem z `snippets/cart-drawer.liquid` (szuflada na kazdej
   stronie), `sections/cart-drawer-section.liquid` (odpowiedzi Section
   Rendering API) i `sections/main-cart.liquid` (strona koszyka). Wszystkie
   trzy renderuja sie PO `compiled_assets/styles.css`, wiec remis
   specyficznosci rozstrzyga sie na nasza korzysc — mimo to reguly na
   komponentach Horizona sa domierzone klasa, zeby nie zalezec od kolejnosci.

   ZRODLO WARTOSCI
   `sleek-theme-demo.myshopify.com`, szuflada z pozycja w koszyku, zmierzona
   w przegladarce (Playwright) przy 390 i 1440px — `getComputedStyle` kazdego
   elementu, nie odczyt ze zrzutu. Surowe pomiary leza w scratchpadzie jako
   `sc-measure-390.json` i `sc-measure-1440.json`, DOM jako `sc-drawer.html`.
   Kazda liczba siedzi w tokenie w `snippets/sleek-tokens.liquid`, w sekcji
   „koszyk"; tutaj sa tylko nazwy.

   CO SLEEK MA, A CZEGO NIE PRZEPISUJEMY — i dlaczego:
   - pole „zapakuj na prezent za $1" wymaga UKRYTEGO PRODUKTU w sklepie,
     nie da sie go zrobic z motywu;
   - „Estimate Shipping" liczy stawki z `/cart/shipping_rates.json`; sklep
     nie ma skonfigurowanych stref wysylki, wiec panel bylby zawsze pusty.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. NAGLOWEK: „Your cart" + czarna kropka z liczba

   Sleek: `.drawer__header` padding 2rem, gap 2rem miedzy tytulem a paskiem
   wysylki; `.drawer__heading` to `.h3` z gap 1.2rem do licznika; licznik to
   pelne kolo na czerni z bialym tekstem, 2.4rem / 2.8rem od 750px.

   Horizon: tytul `.h4`, plakietka to jasna pigulka na tle tekstu.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   0. WEJSCIE SZUFLADY

   Horizon animuje `right` — czyli WLASCIWOSC UKLADU. Przegladarka przelicza
   przy tym pozycje w kazdej klatce i na telefonie to widac jako szarpanie.
   Sleek przesuwa `transform` (`.drawer__inner transform .6s`), co idzie po
   stronie kompozytora i nie dotyka ukladu.

   Podmieniamy same klatki kluczowe, nie mechanike: klasy `--opening`
   i `--closing` nadaje `assets/theme-drawer.js`, a zamkniecie CZEKA na
   `animationend` (`onAnimationEnd`), wiec animacja musi dalej istniec —
   `animation: none` zawiesiloby szuflade w polowie.

   Selektor z identyfikatorem (1,1,0) bije regule Horizona (0,1,0), wiec
   jego `@keyframes` na `right` nie ma szans dojsc do glosu.
   -------------------------------------------------------------------------- */

#cart-drawer .theme-drawer__dialog--opening {
  animation: sleek-cart-drawer-in var(--duration-drawer) var(--ease-sleek-drawer);
}

#cart-drawer .theme-drawer__dialog--closing {
  animation: sleek-cart-drawer-out var(--duration-drawer) var(--ease-sleek-drawer) forwards;
}

#cart-drawer .theme-drawer__dialog--opening::backdrop {
  animation: sleek-cart-backdrop-in var(--duration-drawer) var(--ease-sleek-drawer);
}

#cart-drawer .theme-drawer__dialog--closing::backdrop {
  animation: sleek-cart-backdrop-out var(--duration-drawer) var(--ease-sleek-drawer) forwards;
}

@keyframes sleek-cart-drawer-in {
  from {
    transform: translateX(100%);
  }
}

@keyframes sleek-cart-drawer-out {
  to {
    transform: translateX(100%);
  }
}

@keyframes sleek-cart-backdrop-in {
  from {
    opacity: 0;
  }
}

@keyframes sleek-cart-backdrop-out {
  to {
    opacity: 0;
  }
}

/* Szerokosc szuflady. Sleek: 46rem, u nas wychodzilo 480px, bo Horizon
   liczy ja z `--drawer-width: 95vw` z limitem. Ponizej 750px zostaje pelna
   szerokosc okna — tak samo jak szuflada menu (patrz `sleek-header.css`). */
@media screen and (min-width: 750px) {
  #cart-drawer .theme-drawer__dialog {
    width: var(--sleek-drawer-width);
    max-width: 100%;
  }
}

cart-drawer-component .theme-drawer__header {
  padding: var(--sleek-cart-pad-inline);
  padding-block-end: 0;
  align-items: flex-start;
}

cart-drawer-component .theme-drawer__title.theme-drawer__title {
  display: flex;
  align-items: center;
  gap: var(--sleek-cart-heading-gap);
  font-size: var(--font-size--h3);
  font-weight: var(--sleek-weight-medium);
}

/* Klasa podwojona: Horizon liczy plakietke wlasna reguly o tej samej wadze. */
cart-drawer-component .theme-drawer__badge.theme-drawer__badge {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--sleek-cart-badge-size);
  height: var(--sleek-cart-badge-size);
  min-width: 0;
  padding: 0;
  border: 0;
  border-radius: var(--sleek-radius-pill);
  background-color: var(--color-foreground);
  color: var(--color-background);
  font-size: var(--sleek-cart-badge-font);
  font-weight: var(--sleek-weight-medium);
  line-height: 1;
}

/* Krzyzyk bez obwodki i bez tla — u Sleeka to samo pole 4rem z glifem.
   Okrag na ich zrzucie to pierscien fokusu, nie ramka przycisku. */
cart-drawer-component .theme-drawer__close-button {
  border: 0;
  background-color: transparent;
  box-shadow: none;
}

@media screen and (min-width: 750px) {
  cart-drawer-component .theme-drawer__badge.theme-drawer__badge {
    width: var(--sleek-cart-badge-size-lg);
    height: var(--sleek-cart-badge-size-lg);
    font-size: var(--sleek-cart-badge-font-lg);
  }
}

/* --------------------------------------------------------------------------
   2. PASEK DO DARMOWEJ WYSYLKI

   Sleek: `free-shipping-goal` to grid z gap 1.2rem; `progress-bar` ma
   wysokosc .5rem, promien 3rem, tor rgba(0,0,0,.1) i wypelnienie pelna
   czernia szerokie na `--percent`.

   Markup nasz (`snippets/sleek-free-shipping.liquid`), bo Horizon nie ma
   takiego komponentu w ogole. Odstep od naglowka jest tutaj, a nie
   w `theme-drawer-header` — ten snippet obsluguje tez inne szuflady.
   -------------------------------------------------------------------------- */

.sleek-cart-goal {
  display: grid;
  gap: var(--sleek-cart-goal-gap);
  padding-inline: var(--sleek-cart-pad-inline);
  margin-block-start: var(--sleek-cart-header-gap);
}

.sleek-cart-goal__label {
  font-size: var(--font-size--paragraph);
  line-height: var(--line-height--body);
}

.sleek-cart-goal__label strong {
  font-weight: var(--sleek-weight-bold);
}

.sleek-cart-goal__bar {
  position: relative;
  height: var(--sleek-cart-progress-height);
  border-radius: var(--sleek-cart-progress-radius);
  background-color: var(--sleek-cart-progress-track);
  overflow: hidden;
}

.sleek-cart-goal__bar::before {
  content: '';
  position: absolute;
  inset-block: 0;
  inset-inline-start: 0;
  width: var(--sleek-cart-goal-percent, 0%);
  border-radius: inherit;
  background-color: var(--color-foreground);
}

/* --------------------------------------------------------------------------
   3. LISTA POZYCJI: ODSTEP ZAMIAST KRESKI

   Sleek trzyma pozycje w `flex` z gap 3.2rem i NIE RYSUJE miedzy nimi
   zadnej linii. Horizon dokłada `border-bottom` plus `padding-bottom`
   i `margin-bottom` — z `snippets/cart-drawer.liquid`, wiec nadpisujemy
   to tutaj, a nie w tamtym pliku (tamten obsluguje takze stan pusty).
   -------------------------------------------------------------------------- */

/* Bez `:has(.cart-form)`: u Sleeka `.drawer__body` ma ten sam padding
   niezaleznie od tego, czy w koszyku cos lezy. Wczesniej stal tu ten warunek,
   bo pusty stan Horizona chcial `padding-inline: 0` — ten stan jest teraz
   ukladem Sleeka (sekcja 8) i tez stoi w marginesie szuflady. */
cart-drawer-component .cart-drawer__items {
  padding-inline: var(--sleek-cart-pad-inline);
  padding-block-start: var(--sleek-cart-body-pad-top);
  padding-block-end: var(--sleek-cart-pad-inline);
}

cart-drawer-component .cart-drawer__items .cart-items__table-row {
  border-bottom: none;
  padding-bottom: 0;
  margin-bottom: var(--sleek-cart-items-gap);
}

cart-drawer-component .cart-drawer__items .cart-items__table-row:last-child {
  margin-bottom: 0;
}

cart-drawer-component .cart-items__table {
  width: 100%;
}

/* --------------------------------------------------------------------------
   4. WIERSZ POZYCJI

   SZEROKOSC KAFLA USTAWIA TOR SIATKI, NIE KOMORKA. `<tr>` ma u Horizona
   `display: grid` z `grid-template-columns: clamp(2.5rem, 15cqi, 7.5rem) …`,
   czyli 15% szerokosci szuflady — `width` na komorce jest bez znaczenia
   i pierwsza proba dala kafel wystajacy na tytul. Zobaczylem to dopiero
   w przegladarce.

   UKLAD POL TEZ JEST ICH, NIE HORIZONA. Sleek: zdjecie | tresc | kolumna
   akcji, a w kolumnie akcji `x` STOI NAD pigulka ilosci. Horizon kladzie
   ilosc pod trescia, a sume linii w trzeciej kolumnie. Przestawiamy obszary:
   trzecia kolumna to ilosc (rozciagnieta na wszystkie wiersze tresci),
   suma linii znika — przy ilosci 1 byla ta sama liczba co cena jednostkowa.
   -------------------------------------------------------------------------- */

cart-drawer-component .cart-items .cart-items__table-row,
cart-drawer-component .cart-items .cart-items__table-row--full-width-variants {
  grid-template-columns: var(--sleek-cart-media) minmax(0, 1fr) auto;
  grid-template-rows: repeat(3, min-content) 1fr;
  grid-template-areas:
    'media details    quantity'
    'media variants   quantity'
    'media unit_price quantity'
    'media error      error';
  column-gap: var(--sleek-cart-item-columns-gap);
  align-items: start;
}

cart-drawer-component .cart-items .cart-items__price {
  display: none;
}

/* Od 750px kafel rosnie do 10rem — zmierzone u nich przy 1440px. Rosnie
   RAZEM z torem siatki, inaczej zdjecie wyszloby poza swoja kolumne
   (ta sama pulapka co przy pierwszym podejsciu). */
@media screen and (min-width: 750px) {
  cart-drawer-component .cart-items .cart-items__table-row,
  cart-drawer-component .cart-items .cart-items__table-row--full-width-variants {
    grid-template-columns: var(--sleek-cart-media-lg) minmax(0, 1fr) auto;
  }

  cart-drawer-component .cart-items .cart-items__media-container {
    width: var(--sleek-cart-media-lg);
    height: var(--sleek-cart-media-lg);
  }
}

/* Kafel. Sleek: 8rem kwadrat, promien .6rem, `object-fit: cover`.
   Tlo kafla jest siatka bezpieczenstwa — przy `cover` zdjecie i tak
   wypelnia caly kadr, wiec widac je tylko gdy zdjecia brak. */
.cart-items .cart-items__media-container {
  width: var(--sleek-cart-media);
  height: var(--sleek-cart-media);
  aspect-ratio: 1;
  border-radius: var(--sleek-radius-block-sm);
  background-color: var(--sleek-bg-secondary);
  overflow: hidden;
}

.cart-items .cart-items__media-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Kolumna tresci: tytul, wariant, cena — gap .8rem, jak u nich. */
cart-drawer-component .cart-items .cart-items__product-info,
cart-drawer-component .cart-items .cart-items__variants-wrapper,
cart-drawer-component .cart-items .cart-items__unit-price-wrapper {
  margin-block: 0;
}

/* Warunek na wnuku zostaje jako siatka bezpieczenstwa: gdyby kolejny
   produkt z hurtowni przyszedl bez zadnej opcji, `<dl>` wypadnie puste
   i wtedy padding jest zbedny. Przy normalnym produkcie warunek jest
   spelniony i odstep dziala. */
cart-drawer-component .cart-items .cart-items__variants-wrapper:not(:has(> dl:empty)) {
  padding-block-start: var(--sleek-cart-details-gap);
}

cart-drawer-component .cart-items .cart-items__unit-price-wrapper {
  padding-block-start: var(--sleek-cart-details-gap);
}

/* Tytul: `.text-pcard-title` Sleeka — 17.92px, waga 500, pelna czern.
   Klasa podwojona, bo Horizon nadaje calej komorce `.cart-items__details`
   kolor przygaszony i dziedziczy go tytul. */
.cart-items .cart-items__title.cart-items__title {
  color: var(--color-foreground);
  font-size: var(--sleek-pcard-title-size);
  font-weight: var(--sleek-pcard-title-weight);
  line-height: var(--sleek-pcard-title-line-height);
}

/* Wariant: `.text-sm .text-subtext` — 14.4px, tekst przygaszony. */
.cart-items .cart-items__variants {
  color: rgb(var(--color-foreground-rgb) / var(--opacity-70));
  font-size: var(--font-size--sm);
}

/* Cena jednostkowa: 1.6rem waga 500, PELNA CZERN. Horizon renderuje ja
   `--font-size--sm` i dziedziczy przygaszony kolor komorki. */
.cart-items .cart-items__unit-price-wrapper.cart-items__unit-price-wrapper {
  color: var(--color-foreground);
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
}

/* --------------------------------------------------------------------------
   5. KOLUMNA AKCJI: `x` NAD PIGULKA ILOSCI

   `.cart-items__quantity-controls` dostaje `display: contents`, zeby jego
   dzieci — pigulka i przycisk usuwania — staly sie bezposrednimi dziecmi
   kolumny i mogly sie w niej ustawic. Bez tego pigulka i kosz zostaja
   sklejone w jednym rzedzie, bo to ICH kontener nimi steruje.

   Wysokosc kolumny liczy sie sama: 3rem (`x`) + 1.6rem (odstep) + 4rem
   (pigulka) = 8.6rem, czyli dokladnie tyle, ile ma wiersz u Sleeka.
   -------------------------------------------------------------------------- */

cart-drawer-component .cart-items .cart-items__quantity {
  flex-direction: column;
  align-items: flex-end;
  justify-content: flex-start;
  gap: var(--sleek-cart-item-gap);
  width: auto;
  margin-block-start: 0;
}

cart-drawer-component .cart-items .cart-items__quantity-controls {
  display: contents;
}

/* `x` idzie na gore kolumny i wysuwa sie o 7px poza jej krawedz, zeby
   sam glif stal w linii z prawa krawedzia tresci — Sleek robi to samo
   ujemnym marginesem, nie mniejszym paddingiem.

   Przycisk jest rodzenstwem pigulki w `quantity-controls`, ktore ma
   `display: contents` — oba sa wiec dziecmi obszaru `quantity`, a `order`
   stawia `x` nad pigulka. Strona koszyka uzywa wlasnego snippetu
   (`sleek-cart-table.liquid`) i tej reguly nie widzi. */
cart-drawer-component .cart-items .cart-items__remove.cart-items__remove {
  order: -1;
  width: var(--sleek-cart-remove-size);
  height: var(--sleek-cart-remove-size);
  min-height: 0;
  margin-inline-end: var(--sleek-cart-remove-offset);
}

cart-drawer-component .cart-items .cart-items__remove svg {
  width: var(--sleek-cart-remove-glyph);
  height: var(--sleek-cart-remove-glyph);
}

/* Sam napis chowamy TYLKO w szufladzie — tam kontrolka jest ikona.
   `clip-path` zamiast `display:none`, zeby czytnik ekranu go zachowal. */
cart-drawer-component .cart-items .cart-items__remove-label {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Pigulka ilosci: 90x40, przyciski 35px. Horizon domyslnie rozciaga ja
   na `--quantity-selector-width` i `flex: 1 1`, wiec zajmowala cala
   szerokosc komorki.

   TE SAME WYMIARY OBOWIAZUJA NA STRONIE KOSZYKA — zmierzone u Sleeka
   na `/cart`: `.cart-quantity` 90x40, promien 24px, przyciski 35x38.
   Dlatego reguly nizej maja dwa selektory zamiast jednego; osobny
   zestaw dla strony byl by kopia tych samych liczb. */
cart-drawer-component .cart-items .quantity-selector,
.cart-page .cart-items .quantity-selector {
  --quantity-selector-width: var(--sleek-cart-qty-width);

  flex: 0 0 auto;
  width: var(--sleek-cart-qty-width);
  height: var(--sleek-cart-qty-height);
  min-height: var(--sleek-cart-qty-height);
  border-radius: var(--sleek-radius-button);
  align-self: auto;
}

/* TRESC PIGULKI WYLEWALA SIE POZA NIA. Pole liczby ma wlasne
   `min-width` (~33px, przegladarka liczy je z `size`), wiec moje `width`
   nic nie robilo: 35 + 33 + 35 = 103px w pudelku 90px i `+` wychodzil
   14px za prawa krawedz — dokladnie to bylo widac na telefonie.
   Do tego przyciski dostawaly `min-height: 48px` z `.button`, czyli byly
   WYZSZE niz pigulka (40px), wiec glify siedzialy poza jej obrysem.

   Lekarstwo jest po obu stronach: przyciski dostaja staly udzial
   (`flex-basis`), a pole liczby `min-width: 0` — bez tego flexbox nie
   ma prawa go scisnac, choćby brakowalo miejsca. */
cart-drawer-component .cart-items .quantity-selector :is(.quantity-minus, .quantity-plus),
.cart-page .cart-items .quantity-selector :is(.quantity-minus, .quantity-plus) {
  flex: 0 0 var(--sleek-cart-qty-button);
  width: var(--sleek-cart-qty-button);
  min-width: 0;
  height: 100%;
  min-height: 0;
  align-self: stretch;
}

cart-drawer-component .cart-items .quantity-selector input[type='number'],
.cart-page .cart-items .quantity-selector input[type='number'] {
  flex: 1 1 auto;
  color: var(--color-foreground);
  width: auto;
  min-width: 0;
  padding-inline: 0;
  font-size: var(--font-size--paragraph);
  text-align: center;
}

/* Kolumna akcji miala 1px paddingu, przez co pigulka konczyla sie pikselem
   przed krawedzia tresci. */
cart-drawer-component .cart-items .cart-items__quantity,
.cart-page .cart-items .cart-items__quantity {
  padding: 0;
}

/* --------------------------------------------------------------------------
   6. STOPKA

   Sleek: kreska u gory, padding 1.6rem 2rem 2.4rem, grid gap 1.6rem.
   Dalej: rzad „ikona + napis" oddzielony kreskami, potem suma, nota
   podatkowa i para przyciskow.
   -------------------------------------------------------------------------- */

cart-drawer-component .cart-drawer__summary {
  --cart-drawer-summary-padding: var(--sleek-cart-pad-inline);

  display: grid;
  gap: var(--sleek-cart-footer-gap);
  align-items: initial;
  padding: var(--sleek-cart-footer-pad-top) var(--sleek-cart-pad-inline) var(--sleek-cart-footer-pad-bottom);
  border-block-start: var(--style-border-width) solid var(--sleek-border-color);
  mask-image: none;
}

/* Sleek nie stawia drugiej kreski nad suma — jedyna jest ta pod rzedem
   ikon. Horizon dokłada wlasna z `cart-drawer.liquid`. */
cart-drawer-component .cart-drawer__summary .cart__summary-totals,
cart-drawer-component .cart-totals:not(:has(.cart-actions)) {
  border-block-start: 0;
  padding-block-start: 0;
  margin-block-start: 0;
}

cart-drawer-component .cart-totals {
  display: grid;
  gap: var(--sleek-cart-footer-gap);
}

/* --------------------------------------------------------------------------
   6a. RZAD „ORDER NOTE / COUPON"

   Sleek: `flex` z gap 2.4rem, kazdy element to ikona 2rem + napis 1.6rem
   z odstepem .8rem, calosc w ramce z kresek u gory i u dolu.

   ODSTEPSTWO, KTORE WIDAC: u Sleeka klikniecie otwiera arkusz wyjezdzajacy
   od dolu. U nas to dalej `<details>` Horizona, wiec tresc wysuwa sie
   NAD rzedem jako panel (`position: absolute`) — pchniecie jej w dol
   rozepchneloby stopke i zaslonilo przyciski. Zachowanie inne, uklad ten sam.
   -------------------------------------------------------------------------- */

/* JEDNA KRESKA NAD RZEDEM, NIE DWIE. Stopka ma juz swoja `border-block-start`
   na pelnej szerokosci; `border-block` na tym rzedzie dokladalo drugą, 16px
   nizej. U Sleeka gorna linia nad rzedem ikon to spod pola „gift wrap" —
   my tego pola nie mamy, wiec zostaje sama kreska stopki.

   Rzad jest siatka 1fr 1fr, a nie flexem z odstepem: dwie pozycje maja
   dzielic pasek na POLOWE, kazda wysrodkowana we wlasnym polu. Kreska
   miedzy nimi to `::before` rodzica — kreska na dziecku dobijalaby do gory
   i dolu paska, a ma konczyc sie na wysokosci tresci. */
cart-drawer-component .cart-actions {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
  align-items: center;

  /* GORNY ODSTEP DAJE STOPKA, NIE TEN RZAD. Jego wlasny padding-block
     dokladal sie do 16px paddingu stopki i nad napisami bylo 33px, a pod
     nimi 17 — kreski nie stały w rownych odleglosciach od tresci. */
  padding-block: 0 var(--sleek-cart-addons-pad);
  margin-block-start: 0;
  border-block-start: 0;
  border-block-end: var(--style-border-width) solid var(--sleek-border-color);
}

/* Auto-margines z `.svg-wrapper` juz nie dziala (klasa zdjeta w markupie),
   ale zerujemy go tez tutaj — ta sama pulapka wroci przy kazdej nastepnej
   ikonie wstawionej do tego rzedu. */
cart-drawer-component .cart-actions__icon {
  margin: 0;
}

cart-drawer-component .cart-actions::before {
  content: '';
  position: absolute;
  inset-inline-start: 50%;
  top: 50%;
  translate: -50% -50%;
  width: var(--style-border-width);
  height: var(--sleek-cart-addon-divider);
  background-color: var(--sleek-border-color);
}

/* Kreska miedzy pozycjami jest u Horizona osobnym elementem — w rzedzie
   nie ma czego dzielic. */
cart-drawer-component .cart-actions__divider {
  display: none;
}

cart-drawer-component .cart-actions > *,
cart-drawer-component .cart-actions accordion-custom,
cart-drawer-component .cart-actions details {
  width: 100%;
}

cart-drawer-component .cart-actions :is(.cart-note__summary, .cart-discount__summary) {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--sleek-cart-addon-gap);
  padding: 0;
  min-height: 0;
}

cart-drawer-component .cart-actions__icon,
cart-drawer-component .cart-actions__icon svg {
  width: var(--sleek-cart-addon-icon);
  height: var(--sleek-cart-addon-icon);
  flex-shrink: 0;
}

/* PODKRESLENIE JEST ANIMOWANE, NIE PRZELACZANE.
   Wczesniej stalo tu `text-decoration: underline` z przezroczystym kolorem,
   ktory na hoverze stawal sie widoczny — kreska pojawiala sie w calosci,
   od razu, i czytalo sie to slabiej niz kazdy inny link w sklepie.
   `text-decoration` nie jest animowalne, wiec kreska nie ma jak przejechac.

   Ta sama technika co w stopce i mega menu: gradient o zerowej szerokosci
   dojezdza od prawej do lewej. */
cart-drawer-component .cart-actions :is(.cart-note__label, .cart-discount__label) {
  --sleek-link-underline: var(--style-border-width);

  font-size: var(--font-size--paragraph);
  background-image: linear-gradient(to right, currentcolor, currentcolor);
  background-repeat: no-repeat;
  background-size: 0 var(--sleek-link-underline);
  background-position: right bottom;
  transition: background-size var(--animation-speed-slow) var(--ease-sleek);
}

@media (prefers-reduced-motion: no-preference) and (hover: hover) and (pointer: fine) {
  cart-drawer-component .cart-actions summary:hover :is(.cart-note__label, .cart-discount__label) {
    background-size: 100% var(--sleek-link-underline);
    background-position: left bottom;
  }
}

/* Plusik Horizona jest zbedny — w rzedzie nie ma miejsca na wskaznik
   rozwiniecia, a Sleek go nie ma. */
cart-drawer-component .cart-actions .cart-totals__icon {
  display: none;
}

cart-drawer-component .cart-actions .details-content {
  position: absolute;
  inset-inline: 0;
  bottom: calc(100% + var(--sleek-cart-addons-pad));
  z-index: 2;
  padding: var(--sleek-cart-pad-inline);
  border-radius: var(--sleek-radius-textarea);
  background-color: var(--color-background);
  box-shadow: var(--sleek-header-shadow);
}

/* --------------------------------------------------------------------------
   6b. SUMA I NOTA PODATKOWA

   Sleek: „Estimated total" i kwota to oba `.h4` waga 500, w jednym rzedzie
   ze `space-between`; nota podatkowa 1.6rem, przygaszona, z podkreslonym
   linkiem do polityki wysylki.
   -------------------------------------------------------------------------- */

cart-drawer-component .cart-totals__container {
  display: grid;
  gap: var(--space-3);
}

/* PUSTY POJEMNIK RAT ZJADAL ODSTEP. `{{ form | payment_terms }}` renderuje
   sam formularz z ukrytymi polami, gdy nie ma czego pokazac — element ma
   zerowa wysokosc, ale jako element siatki bierze SWOJ odstep. Miedzy suma
   a nota podatkowa wychodzilo przez to 16px zamiast 8. Chowamy go tylko
   wtedy, gdy naprawde nic nie renderuje; z aktywnymi ratami wraca sam. */
cart-drawer-component .cart-totals__installments:not(:has(shopify-payment-terms)) {
  display: none;
}


cart-drawer-component .cart-totals__total-label,
cart-drawer-component .cart-totals__total-value {
  font-size: var(--font-size--h4);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--line-height--body-tight);
}

/* --------------------------------------------------------------------------
   6c. PRZYCISKI: „View cart" + „Check out" w jednym rzedzie 3:5

   Sleek dzieli je `flex-3` / `flex-5`, gap .8rem, oba 4.8rem wysokie
   i w pelni zaokraglone. Drugi jest na #e9e9e9 bez obwodki.

   PORTFELE (Shop Pay / PayPal / G Pay) ZNIKAJA — Sleek nie ma ich ani
   w szufladzie, ani na stronie koszyka. Wylaczone USTAWIENIEM
   `show_accelerated_checkout_buttons`, nie chowane CSS-em: inaczej edytor
   pokazywalby „wlaczone", a na stronie nic by nie bylo. To jedyna zmiana
   w tej robocie, ktora dotyka sprzedazy, a nie wygladu.
   -------------------------------------------------------------------------- */

cart-drawer-component .cart__ctas {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  gap: var(--sleek-cart-cta-gap);
}

/* SKROT KONTRA LONGHAND, wersja „min-height kontra height": Horizon daje
   przyciskowi kasy `height: clamp(25px, var(--height-buy-buttons), 55px)`,
   czyli TWARDA wysokosc. Nasze `min-height` przegrywalo z tym bezszelestnie
   — przycisk mial 52px zamiast 48. Nadpisujemy ta sama wlasciwoscia. */
cart-drawer-component .cart__ctas .cart__view-cart-button,
cart-drawer-component .cart__ctas .cart__checkout-button {
  height: var(--sleek-cart-cta-height);
  min-height: var(--sleek-cart-cta-height);
  padding-block: 0;
  padding-inline: var(--space-6);
  border-radius: var(--sleek-radius-button);
  font-weight: var(--sleek-weight-medium);
}

cart-drawer-component .cart__ctas .cart__view-cart-button {
  flex: var(--sleek-cart-cta-grow-secondary) 1 0;
  border: 0;
  background-color: var(--sleek-cart-cta-secondary-bg);
  color: var(--color-foreground);
}

cart-drawer-component .cart__ctas .cart__checkout-button {
  flex: var(--sleek-cart-cta-grow-primary) 1 0;
}

/* ==========================================================================
   7. STRONA KOSZYKA (/cart)

   WLASNY MARKUP, NIE PRZEROBIONY HORIZON. Tabela pozycji renderuje sie
   z `snippets/sleek-cart-table.liquid`, ktory jest przepisany ze
   struktury Sleeka — dlatego ponizej nie ma ani jednej reguly walczacej
   z komponentem motywu. Klasy sa nasze (`sleek-cart__*`), wiec nie ma
   remisow specyficznosci i nie trzeba niczego podwajac.

   Szuflada renderuje sie dalej z `cart-products.liquid` i uzywa sekcji
   1-6 tego arkusza. Te dwa uklady nie dziela ze soba zadnej reguly.

   ZMIERZONE na `sleek-theme-demo.myshopify.com/cart` (root 10px):

     okno 1440                          okno 390
     sekcja      padding-block 100px    48px
     kontener    padding-inline 50px    15px
     tytul       48/500/60/-0.96px      38.4/48
     pasek       max 500px, 24/60px     16/48px
     tabela      1325px                 345px
     kolumny     530/265/265/265        jedna
     naglowek    16/500/26/-0.32px      ukryty
     wiersz      161px, border-top      131.5px (pierwszy bez gornego
                 1px #E6E6E6            paddingu)
     komorka     padding-block 30px     0 gora / 30 dol
                 padding-inline-end 30
     kafel       100px, promien 6px     80px
     odstep      16px kafel-tekst       16px
     tytul poz.  17.92/500/26.88        to samo
     wariant     14.4/400/22, czern 69% to samo
     Remove      14.4/400/20, podkr.    to samo
     cena        16/500/26              przy tytule, do prawej
     ilosc       90x40, promien 24      to samo
     stopka      460px, margin 40px     pelna szerokosc
     pigulka     obwodka 1px, promien   to samo
                 30px, padding 16px
     suma        22/500/32/-0.44px      17.6/25.6
     przycisk    48px, promien 24px     to samo
   ========================================================================== */

/* -- 7a. RAMA STRONY ------------------------------------------------------ */

/* JEDNA KOLUMNA. Horizon robi z tej strony dwie (`1fr min(50vw,
   --sidebar-width)`) i ma na to regule (0,3,0)
   `.section--page-width .cart-page:has(.cart-summary--extend)`, wiec
   selektor musi byc co najmniej tak mocny. */
.cart-page.cart-page,
.section--page-width .cart-page.cart-page:has(.cart-summary--extend) {
  display: block;
  grid-column: 2;

  /* Margines strony koszyka jest inny niz reszty sklepu: u Sleeka 50px,
     u nas globalnie 12px. Odejmujemy te 12px, bo siatka sekcji juz
     odsunela tresc o tyle od krawedzi okna. */
  padding-inline: max(
    calc(var(--sleek-cartpage-page-pad) - var(--sleek-page-margin)),
    var(--safe-area-inset-left, 0px)
  );
}

.cart-page .cart-page__title {
  text-align: center;
}

/* Tytul to ich `hd2`, czyli nasz `display-2` — ta sama skala
   clamp(38.4px -> 48px) i interlinia 1.25, ktora daje dokladnie 60/48px.
   Klasa podwojona, bo `blocks/_cart-title.liquid` nadaje `.cart-title h1`
   wlasny preset (0,1,1). */
.cart-page .cart-title.cart-title h1 {
  font-size: var(--sleek-cartpage-title-size);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--sleek-cartpage-title-leading);
  letter-spacing: var(--sleek-cartpage-title-tracking);
}

/* Pasek darmowej wysylki: wysrodkowany, wlasny limit szerokosci.
   Odstepy sa marginesami, nie `gap` — kazda granica ma inna wartosc. */
.cart-page .cart-page__goal .sleek-cart-goal {
  max-inline-size: var(--sleek-cartpage-goal-width);
  margin-block: var(--sleek-cartpage-goal-gap-before) var(--sleek-cartpage-goal-gap-after);
  margin-inline: auto;
  padding-inline: 0;
  text-align: center;
}

.cart-page .cart-page__title + .cart-page__items {
  margin-block-start: var(--sleek-cartpage-table-gap);
}

/* -- 7b. TABELA ----------------------------------------------------------- */

.sleek-cart__table {
  inline-size: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}

/* PROPORCJE KOLUMN: 40 / 20 / 20 / 20 procent. Zmierzone u Sleeka przy
   tabeli 1325px: 530 / 265 / 265 / 265. `table-layout: fixed` sprawia,
   ze przegladarka bierze je wprost, zamiast liczyc z tresci — bez tego
   dluga nazwa produktu rozpychalaby pierwsza kolumne. */
.sleek-cart__table th:first-child,
.sleek-cart__table td:first-child {
  inline-size: var(--sleek-cartpage-col-product);
}

.sleek-cart__table th:not(:first-child),
.sleek-cart__table td:not(:first-child) {
  inline-size: var(--sleek-cartpage-col-rest);
}

/* Naglowek kolumn. */
.sleek-cart__th {
  padding: var(--sleek-cartpage-head-pad-block) var(--sleek-cartpage-cell-gap)
    var(--sleek-cartpage-head-pad-block) 0;
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--font-paragraph--line-height);
  letter-spacing: var(--font-h6--letter-spacing);
  text-align: start;
  vertical-align: middle;
}

.sleek-cart__th:last-child {
  padding-inline-end: 0;
}

/* Wiersz pozycji. KRESKA JEST NA GORZE, nie pod spodem — dzieki temu
   ostatnia pozycja nie konczy sie linia nad podsumowaniem, a pierwsza
   ma linie oddzielajaca ja od naglowka kolumn. */
.sleek-cart__table--dividers .sleek-cart__row {
  border-top: var(--style-border-width) solid var(--sleek-cartpage-row-border);
}

.sleek-cart__cell {
  padding-block: var(--sleek-cartpage-cell-pad-block);
  padding-inline: 0 var(--sleek-cartpage-cell-gap);
  vertical-align: middle;
}

.sleek-cart__cell:last-child {
  padding-inline-end: 0;
}

/* -- 7c. KOLUMNA PRODUKTU ------------------------------------------------- */

/* Kafel i tekst obok siebie, wyrownane do GORY — nie do srodka. Przy
   dwuwierszowej nazwie tekst ma zaczynac sie na wysokosci gornej
   krawedzi zdjecia. */
.sleek-cart__product {
  display: flex;
  align-items: flex-start;
  gap: var(--sleek-cartpage-media-gap);
}

.sleek-cart__media {
  flex: 0 0 var(--sleek-cartpage-media);
  inline-size: var(--sleek-cartpage-media);
  block-size: var(--sleek-cartpage-media);
  overflow: hidden;
  border-radius: var(--sleek-radius-block-sm);
  background-color: var(--sleek-bg-secondary);
}

.sleek-cart__image {
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
}

/* Kolumna tekstu. Odstep 8px miedzy blokami to ich `gap-2`. */
.sleek-cart__info {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--sleek-cartpage-info-gap);
  min-inline-size: 0;
}

/* Tytul i cena w jednym wierszu. `flex-wrap` sprawia, ze przy dlugiej
   nazwie kwota schodzi nizej zamiast sciskac tytul do trzech linii —
   to jest zachowanie Sleeka, sprawdzone podmiana tytulu na ich stronie. */
.sleek-cart__title-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--sleek-cartpage-title-gap);
  inline-size: 100%;
}

.sleek-cart__title {
  color: var(--color-foreground);
  font-size: var(--sleek-pcard-title-size);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--sleek-cartpage-item-title-leading);
  text-decoration: none;
  text-transform: var(--product-title-case);
  overflow-wrap: break-word;
}

/* Wariant: 14.4px w czerni 69%. To ICH wartosc (`--color-subtext`),
   inna niz nasze `--opacity-70` uzywane w szufladzie. */
.sleek-cart__options {
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--sleek-cartpage-title-gap);
  margin: 0;
  color: var(--sleek-cartpage-variant-color);
  font-size: var(--sleek-cartpage-variant-size);
  line-height: var(--sleek-cartpage-variant-leading);
}

.sleek-cart__option {
  display: flex;
  gap: var(--sleek-cartpage-title-gap);
}

.sleek-cart__option-name,
.sleek-cart__option-value {
  margin: 0;
}

.sleek-cart__selling-plan,
.sleek-cart__discounts {
  margin: 0;
  padding: 0;
  color: var(--sleek-cartpage-variant-color);
  font-size: var(--sleek-cartpage-variant-size);
  line-height: var(--sleek-cartpage-variant-leading);
  list-style: none;
}

/* „Remove": podkreslony link, nie przycisk. */
.sleek-cart__remove {
  padding: 0;
  border: 0;
  background: none;
  color: var(--color-foreground);
  font-size: var(--sleek-cartpage-remove-size);
  font-weight: var(--sleek-weight-regular);
  line-height: var(--sleek-cartpage-remove-leading);
  text-decoration: underline;
  text-underline-offset: var(--space-1);
  cursor: pointer;
}

@media (hover: hover) and (pointer: fine) {
  .sleek-cart__remove:hover {
    text-decoration-color: transparent;
  }
}

.sleek-cart__remove {
  transition: text-decoration-color var(--duration-hover) var(--ease-sleek);
}

/* Blad linii (np. limit stanu magazynowego). */
.sleek-cart__error {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  color: var(--color-price-sale);
  font-size: var(--font-size--sm);
}

.sleek-cart__error.hidden {
  display: none;
}

.sleek-cart__error .svg-wrapper {
  flex-shrink: 0;
  inline-size: var(--icon-size-xs);
  block-size: var(--icon-size-xs);
}

/* -- 7d. CENA, ILOSC, SUMA ------------------------------------------------ */

.sleek-cart__price {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0 var(--space-2);
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--font-paragraph--line-height);
}

/* Cena przeceniona jest CZERWONA, a obok stoi przekreslona regularna.
   Klasa jest nasza, wiec nie trzeba jej lapac przez `:has()` po
   sasiedztwie `<s>`, jak w markupie Horizona. */
.sleek-cart__price-current--sale {
  color: var(--color-price-sale);
}

.sleek-cart__price-compare {
  color: var(--sleek-cartpage-variant-color);
  font-weight: var(--sleek-weight-regular);
  text-decoration: line-through;
}

/* Cena przy tytule gra tylko na telefonie. */
.sleek-cart__price-mobile {
  display: none;
}

/* Pigulka stoi przy LEWEJ krawedzi kolumny, w jednej linii z naglowkiem
   „Quantity" — zmierzone u Sleeka: kolumna zaczyna sie na x845, pigulka
   na x846. Wysrodkowanie odsuwalo ja od naglowka i rzad wygladal na
   rozjechany. */
.sleek-cart__quantity {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}

/* Pigulka ilosci: 90x40, promien 24px, tlo przezroczyste, obrys 1px.
   Horizon domyslnie rozciaga ja na cala komorke i daje jej ramke pola
   formularza.

   OBRYS RYSUJE `box-shadow`, NIE `border` — i to nie jest ozdobnik.
   Ramka weszlaby do pudelka kontrolki, wiec przy `inline-size: 90px`
   na tresc zostaloby 88px i przyciski 35+35 razem z polem liczby
   nie zmiescilyby sie w zadeklarowanej szerokosci. Cien lezy poza
   ukladem i nie zabiera ani piksela.

   U SLEEKA TEN CIEN WISI NA POLU LICZBY, U NAS NA PIGULCE — bo ich
   przyciski sa `position: absolute` na krawedziach, a pole ma
   `width: 100%` z paddingiem na ich szerokosc, wiec obrysowuje cala
   kontrolke. Nasze przyciski sa zwyklymi elementami flexa i pole
   zajmuje sam srodek; cien na nim obrysowalby wylacznie srodek. */

   DWA SELEKTORY, bo pigulka renderuje sie w dwoch miejscach wiersza:
   w kolumnie „Quantity" (desktop) i w rzedzie akcji w kolumnie produktu
   (telefon). Bez drugiego brala rozmiar Horizona — zmierzone 126x52
   zamiast 90x40. */
.sleek-cart__quantity .quantity-selector,
.sleek-cart__action-mobile .quantity-selector {
  --quantity-selector-width: var(--sleek-cart-qty-width);

  flex: 0 0 auto;
  inline-size: var(--sleek-cart-qty-width);
  block-size: var(--sleek-cart-qty-height);
  min-height: var(--sleek-cart-qty-height);
  border: 0;
  border-radius: var(--sleek-radius-button);
  box-shadow: 0 0 0 var(--style-border-width) var(--sleek-cartpage-field-border);
  background-color: transparent;
  color: var(--color-foreground);
  font-size: var(--font-size--paragraph);
  line-height: var(--font-paragraph--line-height);
}

.sleek-cart__quantity .quantity-selector :is(.quantity-minus, .quantity-plus),
.sleek-cart__action-mobile .quantity-selector :is(.quantity-minus, .quantity-plus) {
  flex: 0 0 var(--sleek-cart-qty-button);
  inline-size: var(--sleek-cart-qty-button);
  min-inline-size: 0;
  block-size: 100%;
  min-height: 0;
  align-self: stretch;
  border-radius: var(--sleek-radius-button);
  background-color: transparent;
  color: var(--color-foreground);
  font-size: var(--sleek-cartpage-qty-glyph);
  opacity: 1;
}

/* Pole liczby: bez wlasnego `min-width` przegladarki (liczy je z atrybutu
   `size`), inaczej tresc wylewa sie poza pigulke. */
.sleek-cart__quantity .quantity-selector input[type='number'],
.sleek-cart__action-mobile .quantity-selector input[type='number'] {
  flex: 1 1 auto;
  inline-size: auto;
  min-inline-size: 0;
  padding-inline: 0;
  color: var(--color-foreground);
  font-size: var(--font-size--paragraph);
  text-align: center;
}

.sleek-cart__line-total,
.sleek-cart__cell--total {
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--font-paragraph--line-height);
}

.sleek-cart__unit-measure {
  color: var(--sleek-cartpage-variant-color);
  font-size: var(--font-size--xs);
  font-weight: var(--sleek-weight-regular);
}

/* Rzad „ilosc + Remove" gra tylko na telefonie. */
.sleek-cart__action-mobile {
  display: none;
}

/* -- 7e. PODSUMOWANIE POD TABELA ------------------------------------------ */

/* Kolumna podsumowania przestaje byc kolumna: staje pod tabela, dosunieta
   do prawej. Wszystkie cztery reguly Horizona od 750px (grid-column 2,
   grid-row 1/-1, subgrid, stretch) zbite jednym blokiem. */
.cart-page .cart-page__summary.cart-page__summary {
  display: flex;
  justify-content: flex-end;
  grid-column: auto;
  grid-row: auto;
  align-self: auto;
  block-size: auto;
  padding-top: 0;
  margin-block-start: var(--sleek-cartpage-footer-gap);
}

.cart-page .cart-summary {
  inline-size: 100%;
  max-inline-size: var(--sleek-cartpage-footer-width);
}

/* Horizon przykleja `__inner` i centruje jego dzieci, bo u niego to
   kolumna obok tabeli. U nas stoi pod nia, wiec nie ma po czym jechac. */
.cart-page .cart-summary__inner {
  position: static;
  align-items: stretch;
  align-self: auto;
  gap: var(--sleek-cartpage-footer-inner-gap);
  padding: 0;
}

/* „Order note" i „Discount" to pigulki w obwodce, jedna pod druga. */
.cart-page .cart-actions {
  gap: var(--sleek-cartpage-footer-inner-gap);
  border: 0;
  margin-block-start: 0;
}

/* Obwodka i oddech karty. */
.cart-page .cart-actions accordion-custom {
  border: var(--style-border-width) solid var(--sleek-cartpage-row-border);
  border-radius: var(--sleek-cartpage-addon-radius);
  padding: var(--sleek-cartpage-addon-pad);
}

/* WNETRZE ROZWINIETEJ KARTY. Elementy jeden pod drugim z odstepem 20px,
   odsuniete od naglowka o 16px. Zmierzone u Sleeka na otwartych kartach:
   `.accordion-details__content` to flex w kolumnie, `gap: 20px`,
   `padding: 16px 0 0`.

   Horizon zostawia tu `display: block` bez odstepu, wiec pole notatki
   dotykalo przycisku „Apply", a caly blok naglowka. */
.cart-page .cart-actions .details-content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--sleek-cartpage-content-gap);
  padding: var(--sleek-cartpage-addon-pad) 0 0;
}

/* Zwinieta karta oddaje padding — inaczej trzyma 16px pustki pod
   naglowkiem, mimo ze tresci nie widac. */
.cart-page .cart-actions details:not([open]) .details-content {
  padding: 0;
}

/* Pole notatki i formularz rabatu biora pelna szerokosc karty. */
.cart-page .cart-actions .details-content > * {
  inline-size: 100%;
}

/* Naglowek karty: ikona, etykieta, chevron. */
.cart-page .cart-actions :is(.cart-note__summary, .cart-discount__summary) {
  gap: var(--sleek-cart-addon-gap);
  padding-block: 0;
  padding-inline: 0;
  min-height: 0;
}

.cart-page .cart-actions :is(.cart-note__label, .cart-discount__label) {
  margin-inline-end: auto;
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--sleek-cartpage-addon-leading);
  letter-spacing: var(--sleek-cartpage-addon-tracking);
}

/* IKONA MA DWA WARIANTY MARKUPU I OBA TRZEBA TRAFIC.

   Przy „Discount" klasa `cart-actions__icon` siedzi na `<span>`
   opakowujacym, a przy „Order note" — na SAMYM `<svg>`. Reguła celujaca
   tylko w `.cart-actions__icon svg` nie znajdowala wiec nic przy notatce
   i jej ikona rozdymala sie do rozmiaru karty (zmierzone: 355x355px).

   Selektor musi obslugiwac oba: sam element z klasa ORAZ jego dziecko. */
.cart-page .cart-actions .cart-actions__icon,
.cart-page .cart-actions .cart-actions__icon svg {
  inline-size: var(--sleek-cart-addon-icon);
  block-size: var(--sleek-cart-addon-icon);
  flex-shrink: 0;
  margin: 0;
}

/* Notatka: szare pole, promien 16px (mniejszy niz pigulka), 80px wysokosci.
   Horizon daje jej `--style-border-radius-inputs` (24px) i biale tlo. */
.cart-page .cart-note__instructions {
  inline-size: 100%;
  min-block-size: var(--sleek-cartpage-field-min-height);
  padding: var(--sleek-cartpage-field-pad-block) var(--sleek-cartpage-field-pad-inline);
  border: var(--style-border-width) solid var(--sleek-cartpage-field-border);
  border-radius: var(--sleek-cartpage-field-radius);
  background-color: var(--sleek-field-bg);
  box-shadow: none;
  color: var(--color-foreground);
  font-size: var(--font-size--paragraph);
}

.cart-page .cart-note__instructions::placeholder {
  color: var(--sleek-cartpage-variant-color);
}

.cart-page .cart-note__inner {
  inline-size: 100%;
  padding-block: 0;
}

/* Pole kodu rabatowego: ta sama metryka, ale promien pigulki (24px) —
   u Sleeka pola jednoliniowe maja promien rowny polowie wysokosci. */
.cart-page .cart-discount__input {
  block-size: var(--sleek-cartpage-control-height);
  padding-block: 0;
  padding-inline: var(--sleek-cartpage-field-pad-inline);
  border: var(--style-border-width) solid var(--sleek-cartpage-field-border);
  border-radius: var(--sleek-radius-button);
  background-color: var(--sleek-field-bg);
  box-shadow: none;
  color: var(--color-foreground);
  font-size: var(--font-size--paragraph);
}

.cart-page .cart-discount__input::placeholder {
  color: var(--sleek-cartpage-variant-color);
}

/* Pole rabatu bierze CALA wolna przestrzen obok przycisku. Horizon daje
   mu `flex-grow: 1`, ale przy naszej wiekszej czcionce i szerszym
   przycisku i tak wychodzilo za waskie — napis „Discount code" byl
   ucinany po polowie. `min-inline-size: 0` jest tu obowiazkowe: bez
   niego element flexa nie zejdzie ponizej swojej tresci i `flex: 1`
   nic nie da. */
.cart-page .cart-discount__form {
  display: flex;
  inline-size: 100%;
  gap: var(--sleek-cartpage-form-gap);
  padding-block: 0;
}

.cart-page .cart-discount__input {
  flex: 1 1 auto;
  min-inline-size: 0;
}

.cart-page .cart-discount__button {
  flex: 0 0 auto;
}

.cart-page .cart-discount__content {
  block-size: auto;
  inline-size: 100%;
}

/* Przyciski w kartach („Apply", „Calculate"): 48px, promien 24px,
   padding-inline 40px — ta sama metryka co przycisk kasy, tylko szerokosc
   dobiera sie do napisu. */
.cart-page .cart-actions :is(.cart-discount__button, .cart-note__apply) {
  block-size: var(--sleek-cartpage-control-height);
  min-block-size: var(--sleek-cartpage-control-height);
  inline-size: auto;
  padding-block: 0;
  padding-inline: var(--sleek-cartpage-cta-pad-inline);
  border-radius: var(--sleek-radius-button);
  box-shadow: none;
  font-size: var(--font-size--paragraph);
  font-weight: var(--sleek-weight-medium);
  text-transform: capitalize;
  white-space: nowrap;
}

/* IKONA ROZWIJANIA TO CHEVRON, NIE PLUS. Horizon rysuje w tym miejscu
   znak `+`, ktory po otwarciu obraca sie w `x`; Sleek ma zwykly chevron
   obracajacy sie o 180 stopni. Sam glif podmienia `cart-summary.liquid`
   zaleznie od kontekstu — szuflada zostaje przy znaku Horizona. */
.cart-page .cart-actions .cart-totals__icon,
.cart-page .cart-actions .cart-totals__icon svg {
  inline-size: var(--sleek-cartpage-chevron);
  block-size: var(--sleek-cartpage-chevron);
}

.cart-page .cart-actions .cart-totals__icon {
  transition: transform var(--animation-speed) var(--animation-easing);
}

.cart-page .cart-actions details[open] .cart-totals__icon {
  transform: rotate(180deg);
}

/* -- 7f. ODSTEP SEKCJI ---------------------------------------------------- */

/* PROG JEST 990px, NIE 750px — i to nie jest nasz wybor.
   `spacing-style.liquid` zapisuje wartosc z szablonu jako
   `calc(var(--spacing-scale) * 100px)`, a `--spacing-scale` przelacza sie
   w `base.css` wlasnie na 990px (0.7 nizej, 1.0 wyzej). Z szablonu
   wychodzi wiec 70px ponizej 990, podczas gdy Sleek ma tam 48px.

   Nadpisujemy sama WLASCIWOSC, nie zmienna: styl inline ustawia tylko
   `--padding-block-*`, a `padding-block` deklaruje dopiero reguła
   `.spacing-style`, ktora ta bije specyficznoscia. */
@media screen and (max-width: 989px) {
  .cart-page.cart-page {
    padding-block: var(--sleek-cartpage-pad-block-sm);
  }
}

/* -- 7g. TELEFON ---------------------------------------------------------- */

/* Ponizej 750px tabela sklada sie w jedna kolumne: znikaja naglowek
   i trzy prawe komorki, a ich tresc wraca do kolumny produktu —
   cena przy tytule, ilosc i „Remove" w rzedzie pod wariantem.
   Sleek robi to samo klasami `hidden` / `lg:table-cell`. */
@media screen and (max-width: 749px) {
  .cart-page.cart-page {
    padding-inline: max(
      calc(var(--sleek-cartpage-page-pad-sm) - var(--sleek-page-margin)),
      var(--safe-area-inset-left, 0px)
    );
  }

  .cart-page .cart-page__title + .cart-page__items {
    margin-block-start: var(--sleek-cartpage-table-gap-sm);
  }

  .cart-page .cart-page__goal .sleek-cart-goal {
    margin-block: var(--sleek-cartpage-goal-gap-before-sm) var(--sleek-cartpage-goal-gap-after-sm);
  }

  /* Chowamy GRUPE `<thead>`, nie sam wiersz — grupa zostawiona widoczna
     trzyma swoja wysokosc w tabeli. */
  .sleek-cart__head,
  .sleek-cart__cell--price,
  .sleek-cart__cell--quantity,
  .sleek-cart__cell--total {
    display: none;
  }

  /* PROCENTOWE SZEROKOSCI KOLUMN MUSZA ZOSTAC ZDJETE.

     Reguly `td:first-child { inline-size: 40% }` obowiazuja dalej po
     przelaczeniu komorki na `display: block` — liczyly wtedy 40% z
     szerokosci tabeli, czyli 140px zamiast pelnych 345px. Zmierzone:
     kolumna tresci miala 44px, tytul lamal sie na dwie linie, a wiersz
     rosl do 226px wobec ich 131.5px.

     `inline-size: 100%` w tej samej regule co `display: block` tego NIE
     naprawia, bo selektor `.sleek-cart__table td:first-child` jest
     mocniejszy (0,2,1 wobec 0,1,0). Stad osobna reguła celujaca tak samo. */
  .sleek-cart__table th:first-child,
  .sleek-cart__table td:first-child,
  .sleek-cart__table th:not(:first-child),
  .sleek-cart__table td:not(:first-child) {
    inline-size: auto;
  }

  .sleek-cart__table,
  .sleek-cart__table tbody,
  .sleek-cart__row,
  .sleek-cart__cell--product {
    display: block;
    inline-size: 100%;
  }

  /* Pierwsza pozycja nie ma gornego paddingu ani kreski — nad nia nie ma
     juz naglowka kolumn. Zmierzone u Sleeka: ich pierwszy wiersz ma
     131.5px, kolejne 162px, roznica to dokladnie te 30px. */
  .sleek-cart__table--dividers .sleek-cart__row:first-child {
    border-top: 0;
  }

  .sleek-cart__row:first-child .sleek-cart__cell--product {
    padding-block-start: 0;
  }

  .sleek-cart__cell {
    padding-inline-end: 0;
  }

  .sleek-cart__media {
    flex: 0 0 var(--sleek-cartpage-media-sm);
    inline-size: var(--sleek-cartpage-media-sm);
    block-size: var(--sleek-cartpage-media-sm);
  }

  /* Cena wraca do wiersza z tytulem. */
  .sleek-cart__price-mobile {
    display: block;
  }

  .sleek-cart__price-mobile .sleek-cart__price {
    justify-content: flex-end;
  }

  /* Rzad „ilosc + Remove": pigulka po lewej, napis po prawej. */
  .sleek-cart__action-mobile {
    display: flex;
    align-items: center;
    justify-content: space-between;
    inline-size: 100%;
  }

  .sleek-cart__remove--desktop {
    display: none;
  }

  .cart-page .cart-page__summary.cart-page__summary {
    display: block;
  }

  .cart-page .cart-summary {
    max-inline-size: none;
  }

  .cart-page .cart-totals__total-label,
  .cart-page .cart-totals__total-value {
    font-size: var(--sleek-cartpage-subtotal-size-sm);
  }
}

/* --------------------------------------------------------------------------
   8. PUSTA SZUFLADA

   ZRODLO: `sleek-theme-demo.myshopify.com`, `assets/cart.css` + `theme.css`
   (root 10px, wiec 1rem = 10px). Sleek renderuje pusta szuflade tak:

     .drawer__header  — „Your cart" + pasek wysylki, ZOSTAJE
     .drawer__body    — padding-inline 2rem, padding-block-start 1.2rem
       .cart-drawer__empty.text-center.grid.gap-10
         {padding-block-start:3rem; max-width:35rem; margin:0 auto}
         .grid.gap-3 -> <p class="h4"> + .rte
         ul.recommendation-collection.flex-col.gap-4
           li.recommendation-collection-item.blocks-radius
             {border:1px solid rgb(--color-border); padding:1.4rem}
             a.flex.items-center.gap-3
               .recommendation-collection-item__image.blocks-radius-sm {flex:0 0 6.6rem}
               .flex.items-center.justify-between -> h3.h5.font-body-bolder
                                                     + .btn--icon-circle.btn--secondary

   Czego u Sleeka NIE MA, a Horizon renderowal: przycisku „Continue shopping",
   zachety do logowania i osobnego tytulu „Your cart is empty" w miejscu
   naglowka. Wszystkie trzy schodza w `snippets/cart-products.liquid`
   i `snippets/cart-drawer.liquid`.

   ODEJSCIE OD SLEEKA: kadr zdjecia kolekcji jest KWADRATOWY
   (`aspect-ratio: 1` + `cover`). U nich `<img>` bierze proporcje z pliku,
   bo wszystkie zdjecia demo sa kwadratowe; kolekcja ze zdjeciem 3:4
   rozjechalaby wysokosc kafla.
   -------------------------------------------------------------------------- */

#cart-drawer .sleek-cart-empty {
  /* `cart-drawer-component` zbija interlinie akapitu do 1 dla wierszy
     koszyka — tu wraca zwykla interlinia tekstu Sleeka. */
  --font-paragraph--line-height: var(--sleek-body-line-height);

  display: grid;
  gap: var(--sleek-cart-empty-gap);
  max-width: var(--sleek-cart-empty-width);
  margin-inline: auto;
  padding-block-start: var(--sleek-cart-empty-pad-top);
  text-align: center;
}

#cart-drawer .sleek-cart-empty__intro {
  display: grid;
  gap: var(--sleek-cart-empty-intro-gap);
}

#cart-drawer .sleek-cart-empty__title {
  margin: 0;
  font-size: var(--font-size--h4);
  font-weight: var(--font-h4--weight);
  line-height: var(--font-h4--line-height);
  letter-spacing: var(--font-h4--letter-spacing);
}

#cart-drawer .sleek-cart-empty__lead {
  margin: 0;
  font-size: var(--font-size--paragraph);
  font-weight: var(--font-paragraph--weight);
  line-height: var(--font-paragraph--line-height);
}

#cart-drawer .sleek-cart-empty__list {
  display: flex;
  flex-direction: column;
  gap: var(--sleek-cart-empty-list-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}

#cart-drawer .sleek-cart-empty__item {
  border: var(--style-border-width) solid var(--sleek-border-color);
  border-radius: var(--sleek-radius-block-mobile);
  overflow: hidden;
}

#cart-drawer .sleek-cart-empty__link {
  display: flex;
  align-items: center;
  gap: var(--sleek-cart-empty-item-gap);
  padding: var(--sleek-cart-empty-item-pad);
  color: var(--color-foreground);
  text-decoration: none;
}

#cart-drawer .sleek-cart-empty__thumb {
  flex: 0 0 var(--sleek-cart-empty-thumb);
  width: var(--sleek-cart-empty-thumb);
  aspect-ratio: 1;
  overflow: hidden;
  border-radius: var(--sleek-radius-block-sm);
  background-color: var(--sleek-cart-empty-thumb-bg);
}

#cart-drawer .sleek-cart-empty__thumb-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

#cart-drawer .sleek-cart-empty__content {
  display: flex;
  flex: 1 1 auto;
  align-items: center;
  justify-content: space-between;
  gap: var(--sleek-cart-empty-item-gap);
  min-width: 0;
  text-align: start;
}

#cart-drawer .sleek-cart-empty__name {
  font-size: var(--font-size--h5);
  font-weight: var(--sleek-weight-medium);
  line-height: var(--font-h5--line-height);
  letter-spacing: var(--font-h5--letter-spacing);
}

/* `.btn--icon-circle.btn--secondary`: kolo --buttons-height (4.8rem) na szarym
   tle drugiego przycisku Sleeka, z ikona `.icon--medium` (2rem). */
#cart-drawer .sleek-cart-empty__go {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: var(--sleek-cart-empty-cta-size);
  height: var(--sleek-cart-empty-cta-size);
  border-radius: var(--sleek-radius-pill);
  background-color: var(--sleek-cart-cta-secondary-bg);
  color: var(--color-foreground);
}

#cart-drawer .sleek-cart-empty__go-icon {
  width: var(--sleek-cart-empty-cta-icon);
  height: var(--sleek-cart-empty-cta-icon);
}

/* Sleek zmienia promien kafla na 2rem dopiero od 768px (`.blocks-radius`
   kontra `--blocks-radius-mobile`) — ten sam prog co `.sleek-card`. */
@media screen and (min-width: 768px) {
  #cart-drawer .sleek-cart-empty__item {
    border-radius: var(--sleek-radius-block);
  }
}

/* ==========================================================================
   9. TRZY POPRAWKI ZGLOSZONE Z PRODUKCJI
   ========================================================================== */

/* -- 9a. CENA PRZECENIONA JEST CZERWONA --------------------------------
   ZMIERZONA STRUKTURA, nie zgadnieta. Wiersz koszyka NIE uzywa komponentu
   `product-price` ani klasy `.price` — Horizon renderuje tam gole spany:

     <div class="cart-items__unit-price-wrapper">
       <div>
         <span class="visually-hidden">Sale price</span>
         <span>$134.99</span>                        <- cena, BEZ KLASY
         <span class="visually-hidden">Regular price</span>
         <s class="compare-at-price">$239.99</s>
       </div>
     </div>

   Dlatego celujemy w SPAN BEZ KLASY, ktory ma za soba `.compare-at-price`
   w rodzenstwie. Sama obecnosc `<s>` jest jedynym sygnalem przeceny —
   Horizon nie dodaje tu zadnej klasy „on sale".                        */
.cart-items__unit-price-wrapper > div:has(> .compare-at-price) > span:not(.visually-hidden):not(.compare-at-price) {
  color: var(--color-price-sale);
  font-weight: var(--sleek-weight-bold);
}

/* -- 9b. WARIANT MA BYC WIDOCZNY, NIE UKRYTY --------------------------
   Pod tytulem produktu ma stac nazwa wariantu — „White" przy urzadzeniu,
   „Natural jade" przy rolce. Wczesniej stal tu filtr ukrywajacy opcje
   z jedna wartoscia (mial odciac zrzuty z hurtowni typu „1SET-White,
   United States") i przez to wiersz przy urzadzeniu zostawal PUSTY:
   dziura miedzy tytulem a cena zamiast informacji.

   Naprawione w dwoch miejscach naraz:
     `snippets/cart-products.liquid` — filtr zdjety, pokazujemy kazda opcje
                                       poza `Default Title`
     dane produktu                   — opcja „Color" ma sensowna wartosc

   Smieciowe nazwy opcji naprawia sie w DANYCH, nie ukrywaniem ich
   w motywie: ukryty wiersz i tak zajmuje miejsce w siatce, bo
   `.cart-items__details` ma `display: contents`.                        */

/* ==========================================================================
   10. STEROWANIE POZYCJA: HOVERY I ODDECH POD PASKIEM

   Sleek NIE MA hoveru ani na przyciskach ilosci, ani na `x` — sprawdzone
   w ich `theme.css` (`.quantity__button` ma wylacznie `focus-visible`)
   i zmierzone na ich zywym koszyku: zero regul `:hover` dla obu. To jest
   swiadome odejscie: pole 36x48 bez zadnej reakcji nie daje znac, ze jest
   klikalne, a w szufladzie to jedyne sterowanie, jakie klient ma.

   OBIE REGULY RUSZAJA TLO, wiec siedza w zapytaniu o wskaznik. Na dotyku
   `:hover` nie jest chwilowy — przegladarka trzyma go na ostatnio dotknietym
   elemencie, wiec czerwona plama zostawalaby na `x` po kazdym tapnieciu
   w plus lub minus. `transition` stoi POZA media, zeby powrot do stanu
   spoczynkowego byl plynny takze wtedy, gdy hover przychodzi z klawiatury.
   ========================================================================== */

.cart-items .quantity-minus,
.cart-items .quantity-plus,
.cart-items__remove {
  transition: background-color var(--duration-hover) var(--ease-sleek),
    color var(--duration-hover) var(--ease-sleek);
}

@media (hover: hover) and (pointer: fine) {
  .cart-items .quantity-minus:hover,
  .cart-items .quantity-plus:hover {
    background-color: var(--sleek-cart-ctrl-hover-bg);
  }

  .cart-items__remove:hover {
    background-color: var(--sleek-cart-remove-hover-bg);
    color: var(--sleek-cart-remove-hover-color);
  }
}

/* ODDECH POD PASKIEM DARMOWEJ WYSYLKI.
   Pasek konczyl sie czarna kreska, a zaraz pod nia zaczynalo sie pierwsze
   zdjecie produktu — bez zadnej przerwy. Odstep wisi na PASKU, nie na
   liscie, bo lista pojawia sie tylko przy niepustym koszyku, a pasek stoi
   zawsze (takze w pustym stanie, gdzie tez potrzebuje oddechu). */
.sleek-cart-goal {
  margin-block-end: var(--sleek-cart-goal-space-after);
}
