/* ============================================================
 * Testowe karty produktu /produkt/test-karta-a…d/ — cztery projekty karty.
 * Treść wstawia szablon woodmart-child/inc/karta-testowa/szablon.php (korzeń .dm-kt-strona).
 * Plik robi cztery rzeczy:
 *  1. przywraca makiecie style, których nie ma motyw (galeria, FAQ, typografia),
 *  2. wypuszcza stronę na pełną szerokość okna (motyw trzyma treść w kolumnie 1200 px),
 *  3. skaluje stałe szerokości z makiety (1320/1240 px) do szerokości ekranu,
 *  4. składa kolumny: ≤1240 px, ≤1024 px i ≤720 px.
 * ============================================================ */

/* ————— podstawa ————— */
.dm-kt-strona { width: 100%; background: #f5f7f8; font-family: "Satoshi", Arial, Helvetica, sans-serif; font-weight: 500; color: #767676; }
.dm-kt-strona a { color: #000000; text-decoration: none; }
.dm-kt-strona a:hover { color: #242424; text-decoration: underline; }
.dm-kt-strona a:focus-visible, .dm-kt-strona button:focus-visible, .dm-kt-strona input:focus-visible { outline: 2px solid #242424; outline-offset: 2px; }
.dm-kt-strona button { font: inherit; cursor: pointer; }
.dm-kt-strona h1, .dm-kt-strona h2, .dm-kt-strona h3, .dm-kt-strona h4, .dm-kt-strona p, .dm-kt-strona ul, .dm-kt-strona ol, .dm-kt-strona figure { margin: 0; }
.dm-kt-strona h1, .dm-kt-strona h2, .dm-kt-strona h3 { text-transform: none; letter-spacing: normal; }
.dm-kt-strona img { max-width: 100%; }
.dm-kt-strona input, .dm-kt-strona textarea { box-shadow: none; }

/* ————— pełna szerokość ————— */
/* Motyw zamyka treść w kolumnie 1200 px (page-szeroka / wd-page-1200). Strona główna ma iść
   na całą szerokość okna, więc wychodzimy z kolumny. Szerokość okna bez paska przewijania
   podaje karta-testowa.js w zmiennej --dm-kt-okno; 100vw to zapas, gdyby skrypt się nie wczytał. */
.dm-kt-strona { width: var(--dm-kt-okno, 100vw); margin-left: calc(50% - var(--dm-kt-okno, 100vw) / 2); }
.dm-kt-strona > section, .dm-kt-strona > div { padding-left: 40px !important; padding-right: 40px !important; box-sizing: border-box; }
.dm-kt-strona [style*="width: 1320px"], .dm-kt-strona [style*="width: 1240px"] { width: 100% !important; max-width: 1560px; }
/* motyw dokłada pływający uchwyt bocznego panelu — na tej stronie nie ma czego otwierać, a zachodzi na treść */
body.page .wd-sidebar-opener { display: none !important; }

@media (prefers-reduced-motion: reduce) {
  .dm-kt-strona .dm-foto, .dm-kt-strona .dm-foto-akt { transition: none; }
}


/* ————— galeria, FAQ i drobiazgi z makiet ————— */
.dm-kt-strona .dm-foto { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; visibility: hidden; transition: opacity 0.25s ease, visibility 0s linear 0.25s; }
.dm-kt-strona .dm-foto-akt { opacity: 1; visibility: visible; transition: opacity 0.25s ease, visibility 0s; }
.dm-kt-strona .dm-mini { padding: 0; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 10px; overflow: hidden; width: 92px; height: 92px; display: block; }
.dm-kt-strona .dm-mini:hover { border-color: #242424; }
.dm-kt-strona .dm-mini-akt { border: 2px solid #242424; }
.dm-kt-strona .dm-faq { background: #ffffff; border: 1px solid #e5e7eb; border-radius: 10px; }
.dm-kt-strona .dm-faq + .dm-faq { margin-top: 12px; }
.dm-kt-strona .dm-faq > summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 24px; min-height: 44px; padding: 16px 22px; font-size: 18px; color: #242424; }
.dm-kt-strona .dm-faq > summary::-webkit-details-marker { display: none; }
.dm-kt-strona .dm-faq > summary .dm-znak::before { content: "+"; }
.dm-kt-strona .dm-faq[open] > summary .dm-znak::before { content: "\2212"; }
.dm-kt-strona .dm-faq[open] > summary { border-bottom: 1px solid #e5e7eb; }
.dm-kt-strona .dm-znak { flex: none; width: 28px; height: 28px; border-radius: 14px; background: #f5f7f8; color: #242424; font-size: 17px; line-height: 28px; text-align: center; }

/* ————— prawdziwe elementy WooCommerce wstawione w makietę ————— */
.dm-kt-strona .dm-kt-cena .price { font-size: 30px; font-weight: 700; color: #242424; }
.dm-kt-strona .dm-kt-cena .price .woocommerce-Price-amount { white-space: nowrap; }
.dm-kt-strona form.variations_form { margin: 0; }
.dm-kt-strona .variations { width: 100%; border: 0; margin: 0 0 14px; }
.dm-kt-strona .variations td, .dm-kt-strona .variations th { display: block; padding: 0; border: 0; text-align: left; }
.dm-kt-strona .variations .label { font-size:15px; font-weight: 700; color: #242424; padding-bottom: 8px; }
.dm-kt-strona .variations .value { padding-bottom: 16px; }
.dm-kt-strona .variations select { width: 100%; height: 52px; padding: 0 16px; border: 1px solid #d1d5db; border-radius: 10px; background: #ffffff; font: inherit; font-size:16px; color: #242424; }
.dm-kt-strona .single_variation_wrap .woocommerce-variation-price { margin-bottom: 12px; font-size: 22px; font-weight: 700; color: #242424; }
.dm-kt-strona .quantity input { height: 52px; border: 1px solid #d1d5db; border-radius: 35px; text-align: center; }
.dm-kt-strona button.single_add_to_cart_button { height: 52px; padding: 0 28px; border: 0; border-radius: 35px; background: #000000; color: #ffffff; font-size: 16px; }
.dm-kt-strona .stpro-price-inline, .dm-kt-strona .stpro-price-box { margin: 0 0 4px; }


/* ————— konfigurator (projekt B) i przełącznik trybu (projekt D) ————— */
.dm-kt-strona .dm-kaf { box-sizing: border-box; display: flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: 2px; min-height: 60px; padding: 10px 14px; border: 1px solid #e5e7eb; border-radius: 10px; background: #ffffff; color: #242424; text-align: left; transition: border-color 0.15s ease, background-color 0.15s ease; }
.dm-kt-strona .dm-kaf:hover { border-color: #242424; }
.dm-kt-strona .dm-kaf-akt { border-color: #242424; background: #f5f7f8; box-shadow: inset 0 0 0 1px #242424; }
.dm-kt-strona .dm-cena { box-sizing: border-box; display: flex; align-items: center; justify-content: flex-end; min-height: 46px; padding: 0 16px; border: 1px solid #e5e7eb; border-radius: 10px; background: #ffffff; color: #242424; font-size:16px; transition: border-color 0.15s ease, background-color 0.15s ease; }
.dm-kt-strona .dm-cena:hover { border-color: #242424; }
.dm-kt-strona .dm-cena-akt { border-color: #242424; background: #242424; color: #ffffff; }
.dm-kt-strona .dm-faq { border: 1px solid #e5e7eb; border-radius: 10px; background: #ffffff; padding: 18px 22px; }
.dm-kt-strona .dm-faq > summary { cursor: pointer; list-style: none; font-size: 18px; color: #242424; display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 28px; }
.dm-kt-strona .dm-faq > summary::-webkit-details-marker { display: none; }
.dm-kt-strona .dm-faq > summary::after { content: ""; flex: none; width: 10px; height: 10px; border-right: 2px solid #242424; border-bottom: 2px solid #242424; transform: rotate(45deg) translate(-3px, -3px); }
.dm-kt-strona .dm-faq[open] > summary::after { transform: rotate(225deg) translate(-3px, -3px); }
/* w projekcie B wyboru dokonuje się kafelkami — listy WooCommerce zostają, ale schowane */
.dm-kt-b .variations { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.dm-kt-b .single_variation_wrap .woocommerce-variation-price { display: none; }
.dm-kt-b .woocommerce-variation-add-to-cart { display: flex; align-items: center; gap: 14px; }

/* projekt B: kafelki konfiguratora nieco mniejsze — mieszczą się bez przewijania */
.dm-kt-b .dm-kaf { min-height: 52px !important; padding: 9px 14px !important; gap: 0 !important; }
.dm-kt-b .dm-kaf > span:first-child { font-size:16px !important; }
.dm-kt-b .dm-kaf > span + span, .dm-kt-b .dm-kaf .dm-kaf-cena { font-size: 12px !important; }
.dm-kt-b [style*="grid-template-columns: repeat(3, minmax(0, 1fr))"][style*="gap: 12px"] { gap: 10px !important; }
.dm-kt-b .dm-cena { min-height: 40px !important; padding: 0 12px !important; font-size:15px !important; }

/* dolna belka: trzy części — produkt, zamówienia telefoniczne, cena z przyciskiem.
   Wtyczka StonePro trzyma w prawym dolnym rogu pływający guzik (z-index 9999, 108 × 60 px),
   więc rezerwujemy mu miejsce, żeby nie zasłaniał „Dodaj do koszyka”. */
.dm-kt-b [style*="position: sticky; bottom: 0"] { z-index: 20 !important; }
.dm-kt-b [style*="position: sticky; bottom: 0"] [style*="min-height: 88px"] { gap: 24px !important; padding-right: 130px !important; }
@media (max-width: 720px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] [style*="min-height: 88px"] { padding-right: 76px !important; }
}
@media (max-width: 1100px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] [style*="min-height: 88px"] > div:nth-child(2) { display: none !important; }
}

/* projekt B: pasek miniatur pod dużym zdjęciem — najechanie zmienia duże zdjęcie, strzałki przewijają */
.dm-kt-b .dm-b-mini { cursor: pointer; transition: border-color 0.2s ease, box-shadow 0.2s ease; }
.dm-kt-b .dm-b-mini:hover, .dm-kt-b .dm-b-mini:focus-visible { border-color: #242424 !important; }
.dm-kt-b .dm-b-mini-akt { border-color: #242424 !important; box-shadow: inset 0 0 0 1px #242424; }
.dm-kt-b .dm-b-mini-lista { scrollbar-width: thin; }
.dm-kt-b .dm-b-mini-lista::-webkit-scrollbar { height: 6px; }
.dm-kt-b .dm-b-mini-lista::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
.dm-kt-b .dm-b-strzalka { cursor: pointer; }
.dm-kt-b .dm-b-strzalka[hidden] { display: none !important; }
.dm-kt-b .dm-b-strzalka:hover:not(:disabled) { border-color: #242424 !important; }
/* model 3D w galerii: kafelek ze znakiem „3D” i iframe w pudełku dużego zdjęcia (600 × 600, na telefonie 100% × 600) */
.dm-kt-b .dm-b-3d-znak { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: 999px; background: #ffffff; color: #242424; font-size: 15px; font-weight: 600; line-height: 1; box-shadow: 0 4px 14px -6px rgba(0, 0, 0, 0.35); }
.dm-kt-b .dm-b-3d { display: block; width: 600px; max-width: 100%; height: 600px; border: 1px solid #e5e7eb; border-radius: 16px; background: #eceef1; }

/* ————— ≤1240 px: siatki produktów z 5–6 kolumn na 3 ————— */
@media (max-width: 1240px) {
  .dm-kt-strona > section, .dm-kt-strona > div { padding-left: 24px !important; padding-right: 24px !important; }
  .dm-kt-strona [style*="grid-template-columns: repeat(6"], .dm-kt-strona [style*="grid-template-columns: repeat(5"] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .dm-kt-strona [style*="grid-column: span 2"] { grid-column: span 1 !important; }
}

/* ————— ≤1024 px: układy dwukolumnowe (zdjęcie + tekst) na jedną kolumnę ————— */
@media (max-width: 1024px) {
  .dm-kt-strona [style*="grid-template-columns: minmax(0, 2fr)"],
  .dm-kt-strona [style*="grid-template-columns: 380px"], .dm-kt-strona [style*="grid-template-columns: 320px"],
  .dm-kt-strona [style*="grid-template-columns: 600px"], .dm-kt-strona [style*="grid-template-columns: 540px"],
  .dm-kt-strona [style*="grid-template-columns: 272px"],
  .dm-kt-strona [style*="minmax(0, 1fr) 470px"], .dm-kt-strona [style*="minmax(0, 1fr) 700px"],
  .dm-kt-strona [style*="minmax(0, 1fr) minmax(0, 660px)"], .dm-kt-strona [style*="minmax(0, 1fr) 360px 230px"],
  .dm-kt-strona [style*="minmax(0, 3fr)"], .dm-kt-strona [style*="grid-template-columns: minmax(0, 1fr) auto"] { grid-template-columns: minmax(0, 1fr) !important; }
  .dm-kt-strona [style*="grid-template-columns: repeat(4"] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .dm-kt-strona [style*="grid-row: 1 / span 3"] { grid-row: auto !important; grid-column: 1 !important; }
  .dm-kt-strona .dm-bl-panel > .dm-bl-art { grid-template-columns: minmax(0, 1fr) !important; }
  .dm-kt-strona [style*="width: 400px"], .dm-kt-strona [style*="width: 320px"], .dm-kt-strona [style*="width: 660px"] { width: auto !important; max-width: 100%; }
  .dm-kt-strona [style*="align-items: stretch"][style*="gap: 20px"] { flex-wrap: wrap !important; }
  .dm-kt-strona [style*="width: 194px"] { width: calc(33.333% - 14px) !important; }
  .dm-kt-strona [style*="height: 460px"] { height: 420px !important; }
  .dm-kt-strona [style*="-webkit-line-clamp: 2"] { -webkit-line-clamp: 4 !important; }
  .dm-kt-strona [style*="justify-content: space-between"] { flex-wrap: wrap !important; }
}

/* ————— ≤720 px: telefon ————— */
@media (max-width: 720px) {
  .dm-kt-strona [style*="grid-template-columns"] { grid-template-columns: minmax(0, 1fr) !important; }
  .dm-kt-strona [style*="grid-template-rows: repeat(2"] { grid-template-rows: auto !important; }
  .dm-kt-strona ul[style*="grid-template-columns"] > li[style*="border-left"] { border-left: 0 !important; border-top: 1px solid #f0f1f3; }
  .dm-kt-strona > section, .dm-kt-strona > div { padding-left: 16px !important; padding-right: 16px !important; }
  .dm-kt-strona [style*="padding: 88px 0"] { padding-top: 48px !important; padding-bottom: 48px !important; }
  .dm-kt-strona [style*="font-size: 36px"] { font-size: 26px !important; }
  .dm-kt-strona [style*="font-size: 34px"], .dm-kt-strona [style*="font-size: 32px"] { font-size: 24px !important; }
  .dm-kt-strona [style*="font-size: 26px"] { font-size: 22px !important; }
  .dm-kt-strona [style*="width: 210px"], .dm-kt-strona [style*="width: 236px"], .dm-kt-strona [style*="width: 60px"][style*="height: 60px"] { width: auto !important; }
  .dm-kt-strona [style*="width: 194px"] { width: 100% !important; }
  .dm-kt-strona [style*="height: 220px"] { min-height: 180px; }
  .dm-kt-strona a[href^="mailto"] { overflow-wrap: anywhere; }
  .dm-kt-strona a[style*="border-radius: 35px"], .dm-kt-strona button[style*="border-radius: 35px"] { white-space: normal !important; max-width: 100%; text-align: center; padding-left: 18px !important; padding-right: 18px !important; }

}


/* ═══════════ TELEFON I TABLET: karta produktu B ═══════════
   Cztery poprawki zgłoszone przez Tomasza 18.09:
   1. belka nad paskiem StonePro, z ceną i przyciskiem
   2. kafelki parametrów po trzy w rzędzie zamiast na całą szerokość
   3. cennik po trzy ceny w rzędzie (naturalnie: trzy grubości szkła)
   4. zdjęcia produktów powiązanych kwadratowe, po dwa w rzędzie */

/* zdjęcia w kafelkach produktów są kwadratowe — nie kadrujemy ich do paska */
.dm-kt-strona [style*="height: 286px"][style*="object-fit: cover"] { height: auto !important; aspect-ratio: 1 / 1; }

/* ————— belka nad paskiem StonePro (poniżej 768 px pasek jest widoczny dla wszystkich) ————— */
@media (max-width: 767px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] { bottom: var(--dm-nav-h, 0px) !important; }
  /* poniżej 768 px pływający guzik StonePro jest ukryty — odzyskujemy zarezerwowane miejsce */
  .dm-kt-b [style*="position: sticky; bottom: 0"] [style*="min-height: 88px"] {
    min-height: 0 !important; gap: 10px !important; padding: 9px 0 !important; padding-right: 0 !important;
  }
  /* lewa część: mniejsza miniatura, tytuł i parametry po jednej linii z wielokropkiem */
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) { gap: 9px !important; min-width: 0; flex: 1 1 auto; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) img { width: 38px !important; height: 38px !important; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) span[style*="font-size: 16px"],
  .dm-kt-b .dm-b-wybor {
    display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) span[style*="font-size: 16px"] { font-size:14px !important; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] .dm-b-wybor { font-size: 11px !important; }
  /* prawa część: cena i przycisk muszą się zmieścić obok siebie */
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(3) { gap: 10px !important; flex: none; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] span[style*="font-size: 22px"] { font-size:16px !important; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] span[style*="font-size: 13px"] { font-size: 10px !important; }
  .dm-kt-b .dm-b-do-koszyka { height: 40px !important; padding: 0 15px !important; font-size:14px !important; }
}

/* ————— ≤720 px: kafelki parametrów i cennik ————— */
@media (max-width: 720px) {
  .dm-kt-b [role="group"][aria-label="Rozmiar tablicy"],
  .dm-kt-b [role="group"][aria-label="Grubość panelu"] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 8px !important; }
  .dm-kt-b [role="group"][aria-label="Przezroczystość"] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 8px !important; }
  .dm-kt-b .dm-kaf { min-height: 46px !important; padding: 7px 9px !important; }
  .dm-kt-b .dm-kaf > span:first-child { font-size:14px !important; }
  .dm-kt-b .dm-kaf > span + span, .dm-kt-b .dm-kaf .dm-kaf-cena { font-size: 11px !important; }

  /* cennik: nazwa rozmiaru nad rzędem, pod nią trzy ceny — po jednej na grubość */
  .dm-kt-b [role="table"] [role="row"] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 6px !important; }
  .dm-kt-b [role="table"] [role="row"] > [role="rowheader"] { grid-column: 1 / -1 !important; font-size:15px !important; }
  .dm-kt-b [role="table"] [role="row"] > [role="columnheader"]:first-child { grid-column: 1 / -1 !important; }
  .dm-kt-b [role="table"] .dm-cena { min-height: 38px !important; padding: 0 8px !important; font-size:14px !important; justify-content: center !important; }

  /* produkty powiązane: dwa w rzędzie na większych telefonach */
  .dm-kt-b [style*="grid-template-columns: repeat(4, minmax(0, 1fr))"] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 12px !important; }
  .dm-kt-b [style*="grid-template-columns: repeat(4, minmax(0, 1fr))"] a { padding: 10px !important; gap: 10px !important; }
  .dm-kt-b [style*="grid-template-columns: repeat(4, minmax(0, 1fr))"] span[style*="font-size: 17px"] { font-size:15px !important; min-height: 40px !important; }
  .dm-kt-b [style*="grid-template-columns: repeat(4, minmax(0, 1fr))"] span[style*="font-size: 15px"] { font-size:14px !important; }
}

/* ————— ≤430 px: wąski telefon, jeden produkt w rzędzie ————— */
@media (max-width: 430px) {
  .dm-kt-b [style*="grid-template-columns: repeat(4, minmax(0, 1fr))"] { grid-template-columns: minmax(0, 1fr) !important; }
}

/* ═══════════ poprawki z 18.09 (druga tura) ═══════════ */

/* 1. Okruszki mają stykać się z górną belką — motyw daje <main> 40 px paddingu */
main:has(> .dm-kt-strona) { padding-top: 0 !important; }

/* 2. Telefon: cena detaliczna i linia B2B po prawej, w jednej linii z tytułem produktu.
      Belka łamała się przez regułę flex-wrap: wrap z zakresu ≤1024 px — tu ją cofamy. */
@media (max-width: 767px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] [style*="min-height: 88px"] {
    flex-wrap: nowrap !important; gap: 8px !important;
  }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) img { width: 34px !important; height: 34px !important; }
  /* prawa strona: cena nad linią B2B, obie wyrównane do prawej krawędzi */
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(3) { gap: 8px !important; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(3) > div:first-child { align-items: flex-end !important; gap: 1px !important; }
  /* linia B2B jest długa — pozwalamy jej się złamać zamiast rozpychać belkę */
  .dm-kt-b [style*="position: sticky; bottom: 0"] span[style*="color: #2e7d32"] {
    white-space: normal !important; font-size: 10px !important; line-height: 1.2 !important; text-align: right;
  }
  /* mniejszy przycisk, żeby ceny zmieściły się obok tytułu */
  .dm-kt-b .dm-b-do-koszyka { height: 38px !important; padding: 0 13px !important; font-size: 12px !important; }
}

/* krótsza etykieta przycisku na telefonie */
.dm-kt-b .dm-b-etyk-kr { display: none; }

/* Telefon: w belce nie zmieszczą się naraz tytuł, parametry, dwie ceny i pełny przycisk.
   Zostawiamy to, co się zmienia przy wyborze — parametry wariantu. Tytuł produktu jest
   zbędny, bo klient stoi na karcie tego produktu. */
@media (max-width: 767px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) img { display: none !important; }
  .dm-kt-b [style*="position: sticky; bottom: 0"] > div > div:nth-child(1) span[style*="font-size: 16px"] { display: none !important; }
  /* parametry wariantu mogą zająć dwa wiersze — nie urywamy „bez przezierności" */
  .dm-kt-b [style*="position: sticky; bottom: 0"] .dm-b-wybor {
    font-size: 12px !important; line-height: 1.25 !important; color: #242424 !important;
    white-space: normal !important; display: -webkit-box !important;
    -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .dm-kt-b .dm-b-etyk-dl { display: none; }
  .dm-kt-b .dm-b-etyk-kr { display: inline; }
  /* linia B2B łamie się na dwa wiersze zamiast rozpychać belkę */
  .dm-kt-b [style*="position: sticky; bottom: 0"] span[style*="color: #2e7d32"] { max-width: 116px; }
}

/* Telefon: guzik „do góry" motywu (A.scrollToTop, z-index 350) zachodził na prawą
   krawędź „Do koszyka" — kciuk trafiał w przewijanie zamiast w zakup.
   Belka idzie nad niego (ale pod panele boczne z-index 500), a sam guzik
   przesuwamy nad belkę i pasek StonePro. */
@media (max-width: 767px) {
  .dm-kt-b [style*="position: sticky; bottom: 0"] { z-index: 400 !important; }
  .dm-kt-strona ~ * .scrollToTop, .scrollToTop { bottom: calc(var(--dm-nav-h, 0px) + 84px) !important; }
}

/* ---------------------------------------------------------------------------
   Guziki WooCommerce na karcie. Własna wtyczka motywu przegrywa z arkuszem Woo,
   bo jego selektor „.woocommerce button.button.alt” jest bardziej szczegółowy
   niż „.dm-kt-strona button.single_add_to_cart_button”. Stąd te reguły.
   --------------------------------------------------------------------------- */
.woocommerce .dm-kt-strona button.single_add_to_cart_button,
.woocommerce .dm-kt-strona button.button.alt,
.dm-kt-strona button.single_add_to_cart_button {
	height: 52px; padding: 0 28px; border: 0; border-radius: 35px;
	background: #000000; color: #ffffff; font-size: 16px; font-weight: 500;
}
.woocommerce .dm-kt-strona button.single_add_to_cart_button:hover,
.woocommerce .dm-kt-strona button.button.alt:hover,
.dm-kt-strona button.single_add_to_cart_button:hover { background: #242424; }

/* Kafelki produktów powiązanych: zdjęcie kwadratowe jak na stronie głównej. */
.dm-kt-strona .dm-powiazane img,
.dm-kt-strona .products img { aspect-ratio: 1 / 1; object-fit: cover; }

/* ---------------------------------------------------------------------------
   Pole „Dodaj zdjęcia" (StonePro) wchodzi do wiersza dodawania do koszyka jako
   trzeci element obok ilości i guzika. Wiersz jest flexem bez zawijania, a samo
   pole ma 617 px przy 670 px karty — guzik wypadał poza kartę.
   Pole dostaje własną linię, ilość i guzik schodzą pod nie.
   --------------------------------------------------------------------------- */
.dm-kt-strona .woocommerce-variation-add-to-cart,
.dm-kt-strona form.cart { flex-wrap: wrap !important; row-gap: 16px; }
.dm-kt-strona .wc-dnd-file-upload { flex: 1 0 100% !important; max-width: 100%; }

/* ---------------------------------------------------------------------------
   Przełącznik trzeciej osi w cenniku (np. przezierność).
   Widoczna jest ZAWSZE jedna tabela — wcześniej panele stały jeden pod drugim
   i strona rosła o całą dodatkową tabelę. Działa bez JavaScriptu: ukryte pola
   wyboru stoją przed panelami, a arkusz sięga do nich selektorem rodzeństwa.
   Kolory marki: aktywny guzik czarny, nieaktywny biały z obrysem.
   --------------------------------------------------------------------------- */
.dm-kt-strona .dm-tryb-radio { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.dm-kt-strona .dm-tryb-grupa { display: flex; align-items: center; gap: 8px; }
.dm-kt-strona .dm-tryb { flex: 1; min-height: 44px; padding: 0 12px; border: 1px solid #d1d5db; border-radius: 35px; background: #ffffff; color: #333333; font-size:15px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease; }
.dm-kt-strona .dm-tryb:hover { border-color: #242424; }

/* aktywny guzik i widoczny panel — po jednej regule na każdą wartość osi */
.dm-kt-strona #dm-cennik-0:checked ~ .dm-tryb-grupa label[for="dm-cennik-0"],
.dm-kt-strona #dm-cennik-1:checked ~ .dm-tryb-grupa label[for="dm-cennik-1"],
.dm-kt-strona #dm-cennik-2:checked ~ .dm-tryb-grupa label[for="dm-cennik-2"],
.dm-kt-strona #dm-cennik-3:checked ~ .dm-tryb-grupa label[for="dm-cennik-3"] {
	border-color: #242424; background: #242424; color: #ffffff; font-weight: 500;
}
.dm-kt-strona .dm-tryb-radio:focus-visible ~ .dm-tryb-grupa label[for="dm-cennik-0"],
.dm-kt-strona #dm-cennik-1:focus-visible ~ .dm-tryb-grupa label[for="dm-cennik-1"],
.dm-kt-strona #dm-cennik-2:focus-visible ~ .dm-tryb-grupa label[for="dm-cennik-2"],
.dm-kt-strona #dm-cennik-3:focus-visible ~ .dm-tryb-grupa label[for="dm-cennik-3"] {
	outline: 2px solid #242424; outline-offset: 2px;
}

/* Chowamy panele TYLKO tam, gdzie jest przełącznik. Przy jednej osi ceny
   (84 ze 150 produktów) pól wyboru nie ma i panel ma być widoczny. */
.dm-kt-strona .dm-tryb-radio ~ .dm-cennik-panel { display: none !important; }
.dm-kt-strona #dm-cennik-0:checked ~ .dm-cennik-panel[data-dm-panel="0"],
.dm-kt-strona #dm-cennik-1:checked ~ .dm-cennik-panel[data-dm-panel="1"],
.dm-kt-strona #dm-cennik-2:checked ~ .dm-cennik-panel[data-dm-panel="2"],
.dm-kt-strona #dm-cennik-3:checked ~ .dm-cennik-panel[data-dm-panel="3"] { display: flex !important; }

/* ---------------------------------------------------------------------------
   Moduł „Inne nasze przydatne usługi” (klasy dm-j), wklejany w opisy produktów
   widgetem „html” Elementora. Jego arkusz siedział w opisie w znaczniku <style>,
   a filtr czyszczący zostawiał z niego goły CSS jako tekst na stronie. Arkusz
   jest nasz, więc jego miejsce jest tutaj; w opisie zostaje sam markup.
   Ujemne marginesy z oryginału zdjęte — nasza karta ma własne odstępy.
   --------------------------------------------------------------------------- */
.dm-kt-strona .dm-j{display:flex;align-items:center;background:#faf9f7;color:#767676;margin-bottom:60px}
.dm-kt-strona .dm-j *{box-sizing:border-box}
.dm-kt-strona .dm-j__foto{position:relative;width:46%;flex-shrink:0;align-self:center}
.dm-kt-strona .dm-j__foto img{width:100%;height:auto;display:block}
.dm-kt-strona .dm-j__podpis{position:absolute;left:22px;bottom:20px;background:rgba(12,12,11,.72);color:#fff;font-size:12px;line-height:1.4;padding:7px 14px;border-radius:9999px}
.dm-kt-strona .dm-j__tresc{flex-grow:1;display:flex;flex-direction:column;justify-content:center;gap:18px;padding:48px clamp(28px,3.5vw,80px)}
.dm-kt-strona .dm-j__tresc>*{max-width:820px}
.dm-kt-strona .dm-j__tresc h2{margin:0;color:#242424;font-weight:500;letter-spacing:-.01em;font-size:34px;line-height:1.2}
.dm-kt-strona .dm-j__proza{display:flex;flex-direction:column;gap:11px;font-size:16.5px;line-height:1.65}
.dm-kt-strona .dm-j__proza p{margin:0}
.dm-kt-strona .dm-j__proza strong{color:#242424;font-weight:600}
.dm-kt-strona .dm-j__pole{display:flex;align-items:center;gap:18px;padding:28px 24px;border:2px dashed #b9c9a0;border-radius:12px;background:#fff;text-decoration:none;color:inherit;transition:border-color .2s ease,background .2s ease}
.dm-kt-strona .dm-j__pole:hover, .dm-kt-strona .dm-j__pole.jest{border-color:#8fa86a;background:#f7faf2}
.dm-kt-strona .dm-j__pole svg{flex-shrink:0}
.dm-kt-strona .dm-j__opis{display:flex;flex-direction:column;gap:3px;flex-grow:1}
.dm-kt-strona .dm-j__opis strong{font-size:16px;font-weight:600;color:#242424}
.dm-kt-strona .dm-j__opis span{font-size:12.5px}
.dm-kt-strona .dm-j__wybierz{flex-shrink:0;padding:12px 24px;border-radius:9999px;background:#32373c;color:#fff;font-size:13px;font-weight:600;text-transform:uppercase;white-space:nowrap}
.dm-kt-strona .dm-j__stopka{display:flex;align-items:center;gap:30px;padding-top:18px;margin-top:2px;border-top:1px solid #e6e6e6}
.dm-kt-strona .dm-j__cena{font-size:22px;font-weight:700;color:#242424;line-height:1.2}
.dm-kt-strona .dm-j__termin{font-size:12.5px}
.dm-kt-strona .dm-j__cta{margin-left:auto;flex-shrink:0;display:inline-flex;align-items:center;gap:9px;padding:13px 26px;border:1.5px solid #32373c;border-radius:9999px;background:transparent;color:#32373c;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;text-decoration:none;white-space:nowrap;transition:background .2s ease,color .2s ease}
.dm-kt-strona .dm-j__cta:hover{background:#32373c;color:#fff}
@media(max-width:1024px){ .dm-kt-strona .dm-j__tresc{padding:38px 34px;gap:16px} .dm-kt-strona .dm-j__tresc h2{font-size:28px}}
@media(max-width:860px){ .dm-kt-strona .dm-j{flex-direction:column;margin-bottom:20px} .dm-kt-strona .dm-j__foto{width:100%} .dm-kt-strona .dm-j__pole{flex-wrap:wrap} .dm-kt-strona .dm-j__wybierz{margin-left:62px} .dm-kt-strona .dm-j__stopka{flex-wrap:wrap;gap:22px} .dm-kt-strona .dm-j__cta{margin-left:0;width:100%;justify-content:center}}
@media(max-width:480px){ .dm-kt-strona .dm-j__tresc{padding:28px 22px} .dm-kt-strona .dm-j__tresc h2{font-size:24px} .dm-kt-strona .dm-j__pole{padding:20px 18px;gap:14px} .dm-kt-strona .dm-j__wybierz{margin-left:0;width:100%;text-align:center}}

/* ---------------------------------------------------------------------------
   Cennik przy jednej osi ceny: siatka kafelków zamiast wierszy przez całą
   szerokość. Wymiar i cena stoją w tym samym kafelku, po cztery w rzędzie —
   dzięki temu tabela z dziesięcioma rozmiarami nie rozciąga strony.
   Kafelki mają te same atrybuty co konfigurator, więc klikanie działa.
   --------------------------------------------------------------------------- */
.dm-kt-strona .dm-cennik-kafle {
	display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px;
}
@media (max-width: 1024px) { .dm-kt-strona .dm-cennik-kafle { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 720px)  { .dm-kt-strona .dm-cennik-kafle { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.dm-kt-strona .dm-cennik-kafle .dm-kaf[disabled] { opacity: 0.45; cursor: not-allowed; }

/* Moduł „Poprawa jakości zdjęć” ma iść przez całą szerokość strony, a siedzi
   w kolumnie opisu (880 px z 1440 px karty). Szerokość okna bez paska
   przewijania podaje karta.js w --dm-okno; bez skryptu zostaje jak było. */
.dm-kt-strona .dm-j { max-width: none; }

/* Odkąd zdanie zapowiadające kafelki kategorii przeniosło się do sekcji 8, pas
   „Poprawa jakości zdjęć” bywa OSTATNI w kolumnie opisu — wtedy jego 60 px
   dolnego marginesu dokłada się do 88 px paddingu sekcji i zostaje 148 px
   pustego tła. Margines jest potrzebny tylko wtedy, gdy pod pasem coś jeszcze
   stoi. Zmierzone 19.09.2026 na #18529. */
.dm-kt-strona .dm-j:last-child { margin-bottom: 0; }

/* …a sama sekcja opisu traci wtedy dolny padding i następna po niej zaczyna się
   50 px niżej (zamiast 88 + 88 = 176 px). Uwaga Tomasza 19.09: ma być 40–60 px. */
.dm-kt-strona > div:has( .dm-j:last-child ) { padding-bottom: 0 !important; }
.dm-kt-strona > div:has( .dm-j:last-child ) + div { padding-top: 50px !important; }

/* ---------------------------------------------------------------------------
   Pole ilości: pigułka „− 1 +”, jak w starym sklepie. Guziki po bokach mają
   zaokrąglone tylko skrajne rogi, pole w środku jest proste. Wysokość równa
   guzikowi „Dodaj do koszyka” (52 px), odstęp 10 px jak w oryginale.
   --------------------------------------------------------------------------- */
.dm-kt-strona form.cart .quantity { display: flex; align-items: stretch; }
.dm-kt-strona form.cart .quantity .dm-ilosc {
	flex: none; width: 36px; height: 52px; padding: 0;
	border: 1px solid #d1d5db; background: #ffffff; color: #767676;
	font-size: 16px; line-height: 1; cursor: pointer;
	display: flex; align-items: center; justify-content: center;
	transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.dm-kt-strona form.cart .quantity .dm-ilosc-mniej { border-radius: 35px 0 0 35px; border-right: 0; }
.dm-kt-strona form.cart .quantity .dm-ilosc-wiecej { border-radius: 0 35px 35px 0; border-left: 0; }
.dm-kt-strona form.cart .quantity .dm-ilosc:hover { background: #f5f7f8; color: #242424; border-color: #242424; }
.dm-kt-strona form.cart .quantity .dm-ilosc:disabled { opacity: 0.4; cursor: default; background: #ffffff; color: #767676; border-color: #d1d5db; }

.dm-kt-strona form.cart .quantity input.qty {
	flex: none; width: 46px; height: 52px; padding: 0;
	border: 1px solid #d1d5db; border-radius: 0; background: #ffffff;
	text-align: center; font-size:16px; color: #242424; -moz-appearance: textfield;
}
.dm-kt-strona form.cart .quantity input.qty::-webkit-outer-spin-button,
.dm-kt-strona form.cart .quantity input.qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* ---------------------------------------------------------------------------
   Komunikat WooCommerce „dodano do koszyka”. Domyślny ma niebieską ramkę,
   szare tło i szary guzik — nic z palety marki. Tutaj: biała karta z zielonym
   paskiem po lewej, guzik do koszyka czarny, „Kontynuuj zakupy” oliwkowy.
   --------------------------------------------------------------------------- */
.dm-kt-strona .woocommerce-message,
.dm-tresc .woocommerce-message {
	display: flex; flex-direction: column; align-items: flex-start; gap: 14px;
	margin: 0 0 20px; padding: 18px 22px;
	border: 1px solid #e5e7eb; border-left: 4px solid var( --szalwia, #c2d197 ); border-radius: 12px;
	background: #ffffff; color: #242424;
	font-size: 15px; line-height: 1.5;
}
/* domyślna „ptaszka” Woodmarta rysuje się pseudoelementem w lewym marginesie */
.dm-kt-strona .woocommerce-message::before,
.dm-tresc .woocommerce-message::before { display: none; }

/* oba guziki w jednym wierszu, pod tekstem */
.dm-kt-strona .woocommerce-message > .dm-kom-guziki,
.dm-tresc .woocommerce-message > .dm-kom-guziki { display: flex; flex-wrap: wrap; gap: 10px; }

.dm-kt-strona .woocommerce-message .button,
.dm-tresc .woocommerce-message .button {
	margin: 0; flex: none;
	min-height: 44px; padding: 0 24px; border: 0; border-radius: 35px;
	display: inline-flex; align-items: center; justify-content: center;
	font-size: 14px; font-weight: 500; text-decoration: none;
	background: #242424; color: #ffffff;
	transition: background 0.2s ease, color 0.2s ease;
}
.dm-kt-strona .woocommerce-message .button:hover,
.dm-tresc .woocommerce-message .button:hover { background: #000000; color: #ffffff; }

/* „Kontynuuj zakupy” — oliwkowy, stoi tuż obok czarnego, bez odpychania na prawo */
.dm-kt-strona .woocommerce-message .dm-kontynuuj,
.dm-tresc .woocommerce-message .dm-kontynuuj {
	background: var( --szalwia, #c2d197 ); color: #242424;
}
.dm-kt-strona .woocommerce-message .dm-kontynuuj:hover,
.dm-tresc .woocommerce-message .dm-kontynuuj:hover { background: #b2c383; color: #242424; }

@media (max-width: 720px) {
	.dm-kt-strona .woocommerce-message,
	.dm-tresc .woocommerce-message { padding: 16px 18px; }
	.dm-kt-strona .woocommerce-message .dm-kom-guziki,
	.dm-tresc .woocommerce-message .dm-kom-guziki { width: 100%; }
	.dm-kt-strona .woocommerce-message .button,
	.dm-tresc .woocommerce-message .button { flex: 1 1 140px; }
}

/* Niebieska obwódka wokół komunikatu to nie ramka, tylko domyślny pierścień
   fokusu przeglądarki: WooCommerce daje komunikatowi tabindex="-1" i ustawia
   na nim kursor, żeby czytnik ekranu go przeczytał. Nie kasujemy go (byłby to
   krok wstecz w dostępności) — malujemy na czarno. */
.dm-kt-strona .woocommerce-message:focus,
.dm-kt-strona .woocommerce-message:focus-visible,
.dm-tresc .woocommerce-message:focus,
.dm-tresc .woocommerce-message:focus-visible {
	outline: 2px solid #242424; outline-offset: 2px;
}

/* Kafelki kategorii ze zdjęciem: pięć w rzędzie schodzi na trzy przy 1240 px
   (reguła ogólna wyżej), ale ogólna reguła telefonu spłaszcza KAŻDĄ siatkę do
   jednej kolumny — a pięć kwadratowych zdjęć jedno pod drugim to ~2000 px
   przewijania. Po dwa w rzędzie, jak kafelki produktów na stronie głównej.
   Musi stać na końcu pliku: ta sama waga co reguła ogólna, wygrywa kolejność. */
@media (max-width: 720px) {
	.dm-kt-strona .dm-kat-siatka { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 12px; }
	.dm-kt-strona .dm-kat-siatka > a { padding: 10px; gap: 8px; }
	.dm-kt-strona .dm-kat-siatka > a span { font-size:16px; }
	.dm-kt-strona .dm-kat-siatka > a span + span { font-size:14px; }
}

/* ---------------------------------------------------------------------------
   Kafelki-odnośniki (produkty powiązane, kategorie) to całe płytki, nie linki
   w prozie. Ogólna reguła `.dm-kt-strona a:hover` podkreślała im po najechaniu
   cały tekst — tytuł, cenę i napis na guziku. Podkreślenie zostaje tam, gdzie
   ma sens: w treści opisu. Zamiast niego kafelek produktu czerni guzik.
   --------------------------------------------------------------------------- */
.dm-kt-strona .dm-pow-kafel:hover,
.dm-kt-strona .dm-kat-siatka > a:hover { text-decoration: none; }

.dm-kt-strona .dm-pow-guzik { transition: background 0.2s ease, color 0.2s ease; }
/* `color` z !important, bo guzik ma kolor w atrybucie style — a ten bije każdą
   regułę z arkusza. Tło nie potrzebuje wyjątku, bo w atrybucie go nie ma. */
.dm-kt-strona .dm-pow-kafel:hover .dm-pow-guzik,
.dm-kt-strona .dm-pow-kafel:focus-visible .dm-pow-guzik { background: #242424; color: #ffffff !important; }

/* Pod cennikiem stało 176 px pustego tła (88 px paddingu sekcji + 88 px
   następnej), a że obie sekcje mają to samo tło, czytało się to jak dziura.
   Uwaga Tomasza 19.09: 50 → 80 → 40 → 60 px, a na koniec rozłożone po równo.
   Całe 60 px leżało po stronie następnej sekcji, więc szare tło kończyło się
   dokładnie na krawędzi tabeli i obie sekcje do siebie przylegały. Teraz po
   60 px z każdej strony, czyli 120 px treść-do-treści. Żadna sekcja nie dotyka
   swojej treści. Górny padding sekcji cennika też 60 px — w stylu inline ma 88,
   więc bez tego sekcja była u góry wyższa niż u dołu. */
.dm-kt-strona .dm-cennik-sekcja { padding-top: 60px !important; padding-bottom: 60px !important; }
/* Sekcja pod cennikiem (kafelki cech) też symetrycznie: w stylu inline ma
   88 px u dołu, więc bez tego była niższa u góry niż u dołu. */
.dm-kt-strona .dm-cennik-sekcja + div { padding-top: 60px !important; padding-bottom: 60px !important; }

/* Wybrana cegiełka w cenniku ma być czarna jak komórka w tabeli dwuosiowej
   (uwaga Tomasza 19.09). Zakres tylko na cennik — kafelki konfiguratora nad nim
   zostają jasne, bo tam czerń biłaby się z paskiem podsumowania.
   `!important` przy kolorze, bo napisy w kafelku mają kolor w atrybucie style. */
.dm-kt-strona .dm-cennik-kafle .dm-kaf-akt {
	background: #242424; border-color: #242424; box-shadow: none;
}
.dm-kt-strona .dm-cennik-kafle .dm-kaf-akt,
.dm-kt-strona .dm-cennik-kafle .dm-kaf-akt span { color: #ffffff !important; }

/* Zielona ramka z ceną B2B (.stpro-price-inline z wtyczki stpro-b2b) stoi tuż nad
   ilością i guzikiem zakupu. Kontener daje 18 px i partner widział jeden zlepiony
   blok — Tomasz poprosił o 30 px. Margines wisi na SAMEJ RAMCE, nie na #formularz,
   bo między nimi potrafi wejść jeszcze inny element (u nas: pole uploadu zdjęć
   wtyczki dndmfu); wtedy reguła na sąsiedztwie by nie zadziałała.
   Gość niezalogowany ramki nie widzi, więc jego układ zostaje bez zmian. */
.dm-kt-strona .stpro-price-inline { margin-bottom: 12px; }
