/* =========================================================================
   fryzjerkosmetyczka — motyw potomny Flatsome
   Arkusz przeniesiony z wizualizacji. Kroje laduje functions.php przez
   wp_enqueue_style, nie @import. Reset zawężony do .fk-app.
   Prefiks klas: fk-
   ========================================================================= */

/* =========================================================================
   FRYZJERKOSMETYCZKA — wizualizacja, wersja 3 „Gabinet"
   Nisza: gabinety kosmetyczne i salony fryzjerskie.
   Jasno, klinicznie, jeden akcent. Zero zaokraglen, zero zlota, zero cieni.
   Prefiks klas: fk-
   ========================================================================= */

/* --- 0. Reset (zawężony do .fk-app) ------------------------------------
   Wewnątrz WordPressa reset nie może być globalny: `ul { list-style: none }`
   skasowałby punktory w treści wpisów, w podsumowaniu koszyka i w oknach
   bramki platnosci. Globalnie zostaja tylko rzeczy bezpieczne. */

.fk-app *, .fk-app *::before, .fk-app *::after { box-sizing: border-box; }
[hidden] { display: none !important; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--head-h) + 16px);
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .fk-app *, .fk-app *::before, .fk-app *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

/* Pas bezpieczeństwa dla układu „w ramce” Flatsome.
   Motyw zdejmuje klasy `boxed` i `framed` filtrem `body_class`, ale to
   zależy od kolejności filtrów. Ta reguła jest od niej niezależna:
   ma wyższą specyficzność (0,2,1) niż `body.boxed` Flatsome (0,1,1),
   więc wygrywa bez względu na to, który arkusz wypisze się później.
   Bez tego `body` dostaje `max-width: 1350px`, a nagłówek, szuflada
   i pasek zakupu — jako `position: fixed` — zostają na pełnej szerokości
   okna i wystają poza treść. */
body.fk-redesign.boxed,
body.fk-redesign.framed { max-width: none; margin-inline: 0; }

body.fk-redesign {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-ui);
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

/* Reset o ZEROWEJ specyficzności. `:where()` nie wnosi wagi, więc
   `:where(.fk-app) :where(ul, ol)` to (0,0,0) — reguła zdejmuje style
   przeglądarki, ale przegrywa z każdą regułą autorską.

   To nie jest kosmetyka. Motyw nadpisuje nagłówek i stopkę, więc koszyk,
   kasa i moje konto renderują się wewnątrz `.fk-app`, a ich wygląd daje
   arkusz WooCommerce selektorami o specyficzności (0,1,0). Reset pisany
   jako `.fk-app ul` miałby (0,1,1) i wygrywał: komunikaty Woo traciłyby
   wcięcie, a przyciski koszyka tło i ramkę. */
:where(.fk-app) :where(ul, ol) { list-style: none; margin: 0; padding: 0; }
:where(.fk-app) :where(figure, blockquote, dl, dd) { margin: 0; }
:where(.fk-app) :where(h1, h2, h3, h4, h5, h6, p) { margin: 0; }

/* Listy wpisane w edytorze muszą odzyskać strukturę — ale TYLKO tam, gdzie
   arkusz ich nie rysuje. `.fk-proza ul` ma własny znacznik (różowa kreska
   przez `::before`) i układ grid; dołożenie tam `disc` dawało DWA znaczniki
   naraz i wcięcie 21,6 px, którego projekt nie przewiduje.
   Listy numerowane w prozie nie mają własnego stylu, więc te przywracamy. */
.fk-app .woocommerce-Tabs-panel ul, .fk-app .fk-tresc ul { list-style: disc; padding-left: 1.35em; }
.fk-app .fk-proza ol, .fk-app .woocommerce-Tabs-panel ol, .fk-app .fk-tresc ol { list-style: decimal; padding-left: 1.35em; }
.fk-app .fk-proza ol li, .fk-app .woocommerce-Tabs-panel li, .fk-app .fk-tresc li { margin-bottom: .4em; }

:where(.fk-app) :where(img, picture, video, svg) { display: block; max-width: 100%; }
:where(.fk-app) :where(img) { height: auto; }
/* Ikona bez klasy = nasza ikona ze sprite'a; bez rozmiaru SVG rozdyma się
   do 300x150 px, więc reguła musi zostać. Ale BEZ prefiksu `.fk-app` w wadze:
   `.fk-app svg:not([class])` to (0,2,0) i wygrywało z regułami komponentów
   w rodzaju `.fk-topbar__usp svg` (0,1,1) — ikony w pasku górnym rosły
   z 14 na 17 px. `:where()` zeruje wagę prefiksu i kolejność wraca do normy. */
:where(.fk-app) svg:not([class]) { width: 17px; height: 17px; flex: none; }

/* Link bez klasy w naszej prozie ma być różowy — celowa decyzja, nie reset. */
/* Waga celowo obniżona przez :where() do (0,1,0).
   Wersja bez niego miala (0,2,1) i bila KAZDA regule kontekstowa pisana
   jako `.fk-foot a` czy `.fk-card__title a` (0,1,1). Skutek zmierzony na
   produkcji: odnosniki w ciemnej stopce renderowaly sie rozem zamiast
   mgla, z kontrastem 3,04 zamiast 7,15 — mimo ze regula naprawiajaca to
   istniala w pliku i wygladala na dzialajaca. */
.fk-app :where(a:not([class])) { color: var(--rose); text-underline-offset: .2em; }
:where(.fk-app) :where(a) { color: inherit; }

:where(.fk-app) :where(button, input, select, textarea) { font: inherit; color: inherit; }
/* Reset przycisków WLASNYCH — z prawdziwą wagą, nie przez `:where()`.
   Poprzednia wersja tej reguły miała (0,0,0) i przegrywała z regułą Flatsome
   `button { padding: 0 1.2em }`, czyli (0,0,1). Skutki były widoczne na
   produkcji: lupa w wyszukiwarce miała **2,78 px** zamiast 17 (padding
   18,624 px zjadał 42-pikselowy przycisk, a `max-width: 100%` domykało
   ikonę do resztki), strzałki karuzel 7 px, a wszystkie przyciski dostawały
   ramkę 1 px i krój Lato z Flatsome.

   Waga (0,1,0): `.fk-app` liczy się jako klasa, `:where()` zeruje resztę.
   To wystarcza, żeby wygrać z selektorem elementu Flatsome, a jednocześnie
   remisuje z komponentami (`.fk-btn`, `.fk-tab`), które stoją NIŻEJ w tym
   pliku — więc to one mają ostatnie słowo. Kolejność w pliku jest tu
   częścią mechanizmu, nie przypadkiem.

   Zakres zawężony do `[class*="fk-"]`: przyciski WooCommerce (koszyk, kasa)
   mają zostać przy swoim wyglądzie. */
.fk-app :where(button[class*="fk-"]) {
  padding: 0;
  /* `margin: 0` nie jest tu na zapas. Flatsome nadaje przyciskom margines
     dolny, a reset przez `:where()` go nie zerował. Zmierzone: kontener
     przełącznika widoku miał 57,44 px przy przyciskach 42 — po wyzerowaniu
     dokładnie 44, czyli przycisk plus obwódka. */
  margin: 0;
  border: 0;
  background: none;
  font: inherit;
  color: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  text-transform: none;
  text-shadow: none;
  box-shadow: none;
  border-radius: 0;
  min-height: 0;
  cursor: pointer;
}

/* Flatsome nadaje `h1–h6` własny krój (Lato). Nasze nagłówki niemal zawsze
   niosą klasę `.fk-h*`, ale nie wszystkie: pytanie w FAQ to `<button>`
   w gołym `<h3>`, więc przez `font: inherit` łapało Lato. Zmieniamy TYLKO
   krój i wersaliki — rozmiary zostają tam, gdzie były. */
.fk-app :where(h1, h2, h3, h4, h5, h6) { font-family: var(--font-display); text-transform: none; color: inherit; }
/* `color: inherit` powyżej nie jest ozdobnikiem. Flatsome ustawia
   `h1–h6 { color: #555 }`, przez co naglówek na ciemnej sekcji miał
   kontrast **2,29** (szary #555 na tle #1F1B1A), a tytuly kart produktów
   renderowaly sie szaro zamiast atramentem. Dziedziczenie oddaje kolor
   sekcji: ciemna daje papier, jasna atrament. */
:where(.fk-app) :where(table) { border-collapse: separate; border-spacing: 0; }

:focus-visible { outline: 2px solid var(--rose); outline-offset: 3px; }

/* --- 1. Tokeny ---------------------------------------------------------- */

:root {
  /* =====================================================================
     PALETA „WARSZTAT” — chłodny grafit i głębokie morze.

     Zastąpiła „Gabinet” (mleko z nutą różu, akcent palisandrowy).
     Sklep sprzedaje autoklawy, fotele i sterylizację — sprzęt, nie kosmetyk.
     Chłodna baza czyta się jak katalog wyposażenia, a nie jak opakowanie
     kremu, i nie kłóci się ze zdjęciami produktów, które przychodzą od
     kilkunastu dostawców na czystej bieli.

     NAZWY TOKENÓW ZOSTAŁY STARE i to jest decyzja, nie przeoczenie.
     `--rose` trzyma dziś morską zielenię, `--blush` chłodny kafel.
     Te cztery nazwy mają ponad sto pięćdziesiąt wystąpień w arkuszach,
     szablonach PHP i skryptach — przemianowanie ich bez interpretera PHP
     pod ręką to ryzyko po cichu zepsutego stylu w miejscu, którego żaden
     test tu nie widzi. Czytaj je jak role: `--rose` = AKCENT MARKI,
     `--blush` = KAFEL POD TREŚCIĄ.

     Każda para sprawdzona liczbowo; progi WCAG 4,5:1 dla tekstu
     i 3,0:1 dla obramowań kontrolek (1.4.11) spełnione bez wyjątku.
     ===================================================================== */
  --paper:        #F6F7F8;   /* chłodny papier, podkład całej strony */
  --paper-2:      #FFFFFF;
  --card:         #FFFFFF;
  --blush:        #E9EDEF;   /* kafel pod treścią — sekcje naprzemienne */
  --sand:         #E9EDEF;   /* alias zgodnościowy */

  --ink:          #161C22;   /* 16,0:1 na papierze */
  --ink-soft:     #3E474F;   /* 8,8:1 */
  --mist:         #646E77;   /* 4,9:1 — najjaśniejszy dopuszczalny dla tekstu */
  --mist-on-dark: #A7B0B8;   /* 7,8:1 na atramencie */

  --line:         #DCE2E6;   /* włoski i obramowania kart — dekoracyjne */
  --line-strong:  #7F8990;   /* obramowania KONTROLEK — 3,3:1, wymóg WCAG 1.4.11 */
  --hair:         rgba(22,28,34,.11);
  --hair-dark:    rgba(246,247,248,.18);

  /* Akcent marki — głębokie morze. Chłodny jak baza, ale nasycony, więc
     niesie uwagę na przyciskach i cenach promocyjnych. */
  --rose:         #15607A;   /* 6,6:1 jako tekst na papierze, biel na nim 7,0:1 */
  --rose-deep:    #0E4557;
  --rose-soft:    #E1EEF3;
  --on-rose:      #FFFFFF;

  /* Kolor funkcyjny, nie brandowy — wyłącznie dostępność towaru.
     Zielen = „jest na stanie" to konwencja, której nie warto lamać.
     Odsunięta od akcentu w stronę czystej zieleni, żeby przy morskim
     błękicie nie czytała się jak drugi odcień tego samego. */
  --stock:        #3F6B45;   /* 5,8:1 na papierze */

  /* Miekki cien — wyłącznie na hover karty, żeby nie zgubić płaskości */
  --cien: 0 2px 10px rgba(22,28,34,.05), 0 14px 32px rgba(22,28,34,.07);

  /* =====================================================================
     DWA KROJE, TRZY ROLE.

     `--font-display` (Lora) niesie nagłówki sekcji i proze. Szeryf z korzeniem
     kaligraficznym czyta sie jak katalog wyposażenia wnetrz, a nie jak panel
     administracyjny — to jest ta „elegancja”, o która chodzi, i bierze sie
     z ksztaltu liter, a nie z dodatkowych ozdobnikow.

     `--font-ui` (Figtree) niesie cała reszte: nazwy produktów, ceny, przyciski,
     nawigacje. Wyzsza wysokość x i szerzej otwarte oczka niż w Interze, więc
     przy 12–16 px — a tam zyje większość tekstu w sklepie — litery nie
     sklejaja sie w plamy. Symbole w rodzaju „QS-BL12B” zostaja bezszeryfowe
     celowo: szeryf myli tam I z l i 1.

     Każda wielkosc w tym arkuszu przeszla w tym kroku w gore — patrz mapa
     w komentarzu nizej. Najmniejszy stopien to dzis 0,72 rem (11,5 px),
     wcześniej 0,58 rem (9,3 px). */
  --font-ui:      'Figtree', 'Helvetica Neue', system-ui, sans-serif;
  --font-display: 'Lora', Georgia, 'Times New Roman', serif;
  --font-proza:   'Lora', Georgia, 'Times New Roman', serif;

  /* Delikatne promienie — miekkosc czyta sie jako beauty, ostrosc jako narzedzia */
  --r-sm:   8px;    /* przyciski, pola, plakietki prostokatne */
  --r-md:  14px;    /* karty, panele, zdjęcia */
  --r-lg:  22px;    /* duze powierzchnie, arkusze */
  --r-pill: 100px;

  --gut: 20px;
  --wrap: 1280px;
  --head-h: 118px;

  /* Wysokość dolnego paska zakladek na telefonie. JEDNA wartość dla trzech
     miejsc: samego paska, odstepu na dole strony i pozycji przyklejonego
     paska zakupu. Wcześniej w dwoch z nich wpisane bylo 56 px, a pasek mial
     naprawde 60 — zmierzone: pasek zakupu konczyl sie 4 px POD krawedzia
     zakladek, a stopka chowala pod nimi ostatnie 4 px. */
  --tabbar-h: 60px;

  --z-sticky: 20;
  --z-head:   60;
  --z-scrim:  75;
  --z-drawer: 80;
  --z-sheet:  90;
  --z-toast:  120;

  --ease: cubic-bezier(.2,.7,.3,1);
}

@media (min-width: 700px)  { :root { --gut: 34px; } }
@media (min-width: 1100px) { :root { --gut: 48px; } }
@media (max-width: 979px)  { :root { --head-h: 100px; } }

/* --- 2. Typografia ------------------------------------------------------
   Jedna rodzina, roznicowana wielkoscia i waga. Zdania, nie wersaliki —
   ALL CAPS z szerokim trakiem to najszybszy sposób na sztuczną elegancje. */

/*
 * Nagłówki schodza w dol i rozsuwaja sie w pionie.
 *
 * Bylo: 4,3 rem (68,8 px) przy interlinii 1,03 i traku -0,03 em. W kolumnie
 * hero szerokiej na 479 px miescilo to SIEDEM ZNAKOW w wierszu, więc zdanie
 * lamalo sie na cztery linijki sklejone niemal bez odstepu. Duzy stopien nie
 * jest tym samym co mocny nagłówek — tu pracowal przeciwko czytaniu.
 *
 * Szeryf ma własna sile kreski, więc nie potrzebuje 500 wagi ani ciasnego
 * traku, żeby wygladac na zdecydowany.
 */
.fk-h1, .fk-h2, .fk-h3 {
  font-family: var(--font-display);
  font-weight: 500;
  letter-spacing: -.012em;
  line-height: 1.14;
  text-wrap: balance;
}
.fk-h1 { font-size: clamp(2.1rem, 1.5rem + 2.2vw, 3.45rem); line-height: 1.1; }
.fk-h2 { font-size: clamp(1.7rem, 1.32rem + 1.45vw, 2.55rem); line-height: 1.16; }
.fk-h3 { font-size: clamp(1.18rem, 1.05rem + .5vw, 1.5rem); line-height: 1.3; letter-spacing: -.008em; }

/* Nazwa produktu zostaje bezszeryfowa mimo klasy `.fk-h1`. Szeryf w ciagu
   „QS-BL12B” rozmywa granice między I, l i 1 — a to jest symbol, po którym
   klient zamawia. */
.fk-buy__title { font-family: var(--font-ui); font-weight: 600; letter-spacing: -.018em; }
.fk-h1 em, .fk-h2 em, .fk-h3 em { font-style: normal; color: var(--rose); }
.fk-ondark .fk-h1 em, .fk-ondark .fk-h2 em, .fk-ondark .fk-h3 em { color: var(--paper); opacity: .58; }

/* Etykieta meta — jedyne miejsce z wersalikami, umiarkowany trak */
.fk-eyebrow {
  display: flex;
  align-items: baseline;
  gap: 10px;
  font-size: .85rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--mist);
  margin-bottom: 18px;
}
.fk-eyebrow--center { justify-content: center; }
.fk-ondark .fk-eyebrow { color: var(--mist-on-dark); }

p.fk-lead {
  font-size: clamp(1.08rem, 1rem + .3vw, 1.25rem);
  font-weight: 400;
  line-height: 1.68;
  color: var(--ink-soft);
  max-width: 34em;
  margin-top: 20px;
}
.fk-ondark p.fk-lead { color: var(--mist-on-dark); }
p.fk-note { font-size: .95rem; color: var(--mist); margin-top: 12px; line-height: 1.6; }

.fk-num, .fk-price, .fk-price-now, .fk-price-old, .fk-price-net, td.fk-td-num {
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
}

/* --- 3. Layout — siatka 12-kolumnowa z celowym przesunieciem ------------ */

.fk-wrap { width: 100%; max-width: var(--wrap); margin-inline: auto; padding-inline: var(--gut); }
.fk-wrap--narrow { max-width: 940px; }

.fk-section { padding-block: clamp(56px, 4rem + 3.5vw, 116px); }
.fk-section--tight { padding-block: clamp(40px, 2.8rem + 1.8vw, 68px); }

.fk-g12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 24px; }
.fk-g12 > * { min-width: 0; }
@media (max-width: 899px) { .fk-g12 { grid-template-columns: minmax(0, 1fr); gap: 20px; } }

/* Nagłówek sekcji: numer w lewej szynie, treść przesunięta do kolumny 4 */
.fk-secno { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; padding-bottom: 14px; margin-bottom: 34px; border-bottom: 1px solid var(--hair); }
@media (min-width: 900px) { .fk-secno { grid-template-columns: 3fr 9fr; gap: 24px; align-items: baseline; } }
.fk-secno .fk-secno__n { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--rose); }
.fk-secno .fk-secno__t { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); }
.fk-ondark .fk-secno { border-bottom-color: var(--hair-dark); }
.fk-ondark .fk-secno .fk-secno__n { color: var(--paper); }
.fk-ondark .fk-secno .fk-secno__t { color: var(--mist-on-dark); }

.fk-sec-head { margin-bottom: 40px; }
.fk-sec-head--split { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; align-items: end; }
@media (min-width: 900px) { .fk-sec-head--split { grid-template-columns: minmax(0, 1fr) auto; } }
.fk-sec-head--center { text-align: center; }
.fk-sec-head--center .fk-eyebrow { justify-content: center; }
.fk-sec-head--center p.fk-lead { margin-inline: auto; }

/* Treść odsunięta od lewej krawędzi — rytm redakcyjny bez centrowania */
@media (min-width: 900px) {
  .fk-offset { grid-column: 4 / 12; }
  .fk-offset--wide { grid-column: 4 / 13; }
  .fk-rail { grid-column: 1 / 4; }
}

.fk-grid { display: grid; gap: 24px; }
.fk-grid > * { min-width: 0; }
.fk-grid--2, .fk-grid--3 { grid-template-columns: minmax(0, 1fr); }
.fk-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 700px)  { .fk-grid--2, .fk-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .fk-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .fk-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

.fk-ondark { background: var(--ink); color: var(--paper); }
.fk-ondark p { color: var(--mist-on-dark); }

.fk-visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.fk-skip { position: absolute; left: 12px; top: -100px; z-index: var(--z-toast); background: var(--ink); color: var(--paper); padding: 13px 20px; font-weight: 500; font-size: .9rem; transition: top .18s var(--ease); }
.fk-skip:focus { top: 12px; }

/* --- 4. Przyciski — zdania, nie wersaliki ------------------------------ */

.fk-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 50px; padding: 13px 24px;
  border: 1px solid transparent;
  border-radius: var(--r-sm);
  font-size: .95rem; font-weight: 500; line-height: 1.2; letter-spacing: -.005em;
  text-decoration: none; cursor: pointer; white-space: nowrap;
  transition: background-color .22s var(--ease), color .22s var(--ease), border-color .22s var(--ease);
}
.fk-btn svg { width: 15px; height: 15px; flex: none; }

.fk-btn.fk-btn--dark   { background: var(--ink); color: var(--paper); }
.fk-btn.fk-btn--dark:hover   { background: var(--rose); }
.fk-btn.fk-btn--rose   { background: var(--rose); color: var(--on-rose); }
.fk-btn.fk-btn--rose:hover   { background: var(--rose-deep); }
.fk-btn.fk-btn--ghost  { background: transparent; color: var(--ink); border-color: var(--ink); }
.fk-btn.fk-btn--ghost:hover  { background: var(--ink); color: var(--paper); }
.fk-btn.fk-btn--light  { background: var(--paper-2); color: var(--ink); border-color: var(--line); }
.fk-btn.fk-btn--light:hover  { background: var(--rose-soft); border-color: var(--rose); }
.fk-btn.fk-btn--onDark { background: var(--paper); color: var(--ink); }
.fk-btn.fk-btn--onDark:hover { background: var(--mist-on-dark); }
.fk-btn.fk-btn--outlineDark { background: transparent; color: var(--paper); border-color: var(--hair-dark); }
.fk-btn.fk-btn--outlineDark:hover { border-color: var(--paper); }

.fk-btn.fk-btn--lg { min-height: 56px; padding: 15px 30px; font-size: 1rem; }
.fk-btn.fk-btn--sm { min-height: 42px; padding: 9px 16px; font-size: .89rem; }
.fk-btn.fk-btn--block { display: flex; width: 100%; white-space: normal; text-align: center; text-wrap: balance; }
.fk-btn[disabled], .fk-btn[aria-disabled='true'] { opacity: .42; cursor: not-allowed; pointer-events: none; }

.fk-link-arrow {
  display: inline-flex; align-items: center; gap: 9px;
  font-size: .95rem; font-weight: 500; color: var(--ink);
  text-decoration: none; white-space: nowrap;
  padding-bottom: 3px; border-bottom: 1px solid var(--ink);
  transition: color .22s var(--ease), border-color .22s var(--ease);
}
.fk-link-arrow:hover { color: var(--rose); border-bottom-color: var(--rose); }
.fk-link-arrow svg { width: 14px; height: 14px; transition: translate .22s var(--ease); }
.fk-link-arrow:hover svg { translate: 5px 0; }
.fk-ondark .fk-link-arrow { color: var(--paper); border-bottom-color: var(--hair-dark); }
.fk-ondark .fk-link-arrow:hover { color: var(--paper); border-bottom-color: var(--paper); }

/* --- 5. Plakietki — bez czerwieni, wystarczy atrament ------------------ */

.fk-badge {
  display: inline-flex; align-items: center; gap: 6px; align-self: flex-start;
  min-height: 22px; padding: 5px 11px;
  border-radius: var(--r-pill);
  font-size: .78rem; font-weight: 600; line-height: 1; letter-spacing: .04em;
  white-space: nowrap;
}
.fk-badge.fk-badge--sale  { background: var(--ink);  color: var(--paper); }
.fk-badge.fk-badge--new   { background: transparent; color: var(--ink); border: 1px solid var(--ink); }
.fk-badge.fk-badge--stock { background: var(--rose-soft); color: var(--rose-deep); }
.fk-badge.fk-badge--b2b   { background: var(--rose); color: var(--on-rose); }
.fk-badge.fk-badge--soft  { background: transparent; color: var(--ink-soft); border: 1px solid var(--line); }

.fk-chip {
  display: inline-flex; align-items: center; gap: 8px;
  min-height: 40px; padding: 8px 15px;
  border: 1px solid var(--line-strong); border-radius: var(--r-pill); background: transparent;
  font-size: .91rem; cursor: pointer; white-space: nowrap;
  transition: border-color .2s var(--ease), color .2s var(--ease);
}
.fk-chip:hover { border-color: var(--rose); color: var(--rose); }
.fk-chip[aria-pressed='true'], .fk-chip.fk-is-on { background: var(--ink); border-color: var(--ink); color: var(--paper); }

/* --- 6. Nagłówek -------------------------------------------------------- */

.fk-topbar { background: var(--ink); color: var(--mist-on-dark); font-size: .85rem; }
.fk-topbar__in { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-height: 40px; flex-wrap: wrap; }
.fk-topbar__usp { display: flex; align-items: center; gap: 26px; }
.fk-topbar__usp li { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.fk-topbar__usp svg { width: 14px; height: 14px; color: var(--mist-on-dark); flex: none; }
.fk-topbar__side { display: flex; align-items: center; gap: 20px; }
.fk-topbar__side a { display: flex; align-items: center; gap: 7px; text-decoration: none; white-space: nowrap; transition: color .2s var(--ease); }
.fk-topbar__side a:hover { color: var(--paper); }
.fk-topbar__side svg { width: 14px; height: 14px; flex: none; }
@media (max-width: 979px) {
  .fk-topbar__usp li:nth-child(n+2) { display: none; }
  .fk-topbar__side a:nth-child(n+2) { display: none; }
}

.fk-vat { display: flex; align-items: center; border: 1px solid var(--hair-dark); border-radius: var(--r-pill); overflow: hidden; }
.fk-vat__btn {
  min-height: 26px; padding: 5px 13px;
  font-size: .82rem; font-weight: 500; line-height: 1;
  color: var(--mist-on-dark); white-space: nowrap;
  transition: background-color .22s var(--ease), color .22s var(--ease);
}
.fk-vat__btn[aria-pressed='true'] { background: var(--paper); color: var(--ink); }

.fk-head { position: sticky; top: 0; z-index: var(--z-head); background: var(--paper); border-bottom: 1px solid var(--hair); }
.fk-head__in { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 24px; min-height: 78px; }
.fk-head__logo { display: flex; align-items: center; flex: none; }
.fk-head__logo img { width: auto; height: 40px; }
@media (max-width: 979px) { .fk-head__logo img { height: 32px; } }

.fk-search { position: relative; width: 100%; max-width: 500px; margin-inline: auto; }
/* `position: relative` nie dla ozdoby: to kontener odniesienia dla listy
   podpowiedzi. Bez niego kotwicą zostałoby `.fk-search`, które obejmuje
   także wiersz „Popularne” — lista wypadałaby pod nim, nie pod polem. */
/*
 * `margin: 0` NIE jest ozdobnikiem.
 *
 * Flatsome ma `form { margin-bottom: 1.3em }`, a `.fk-search__field` jest
 * formularzem. Przy 16 px to 20,8 px martwego pasa pod polem, wewnątrz
 * przyklejonego nagłówka — `.fk-search` mierzyl 67 px zamiast 46 px.
 * Zerowanie stalo wcześniej wyłącznie w zapytaniu medialnym dla telefonu,
 * więc na komputerze odstep zostawal.
 */
.fk-search__field { position: relative; display: flex; align-items: stretch; min-height: 46px; margin: 0; padding-left: 16px; border: 1px solid var(--line-strong); border-radius: var(--r-pill); background: var(--paper-2); transition: border-color .22s var(--ease), box-shadow .22s var(--ease); }
.fk-search__field:focus-within { border-color: var(--rose); box-shadow: 0 0 0 3px rgba(21,96,122,.16); }

/*
 * SZARY PROSTOKAT PO KLIKNIECIU W POLE.
 *
 * Flatsome: `input[type="search"]:focus { box-shadow: 0 0 5px #ccc }`.
 * Pole ma zerowy promien (zaokraglony jest formularz wokol niego), więc
 * po kliknieciu w owalna wyszukiwarkę wyskakiwala szara PROSTOKATNA
 * poswiata, wystajaca poza owal.
 *
 * Reguly zerujacej juz probowalismy — `.fk-search .fk-search__input` to
 * (0,2,0), a selektor Flatsome ma atrybut, pseudoklase i element, czyli
 * (0,2,1). Przegrywalismy o ten jeden element. Dopisana pseudoklasa daje
 * (0,3,0) i ta sama regula wreszcie dziala.
 */
.fk-search .fk-search__input:focus,
.fk-search .fk-search__input:focus-visible { box-shadow: none; outline: 0; }
/* Zakotwiczone w rodzicu, i to nie dla urody. Flatsome stylizuje pole
   selektorem z atrybutem — `input[type="search"]` ma wagę (0,1,1)
   i bije samo `.fk-search__input` (0,1,0). Na produkcji wyglądało to tak, że
   wewnątrz zaokrąglonej pigułki siedział drugi, prostokątny ramka-w-ramce:
   obwódka 1 px #ddd, białe tło i wewnętrzny cień. Dwie klasy dają (0,2,0),
   co wygrywa z klasą plus elementem. */
.fk-search .fk-search__input {
  flex: 1 1 auto; min-width: 0; align-self: stretch;
  padding: 10px 4px; margin: 0;
  border: 0; border-radius: 0; box-shadow: none;
  /* Jawnie kolorem, nie skrótem: `background: none` bywało zjadane przez
     regułę Flatsome i pole zostawało białe wewnątrz pigułki. */
  background-color: transparent; background-image: none;
  height: auto; min-height: 0;
  font-size: .96rem; outline: none;
}
.fk-search__input::placeholder { color: var(--mist); }
.fk-search__go { flex: none; width: 42px; display: grid; place-items: center; color: var(--ink); transition: color .2s var(--ease); }
.fk-search__go:hover { color: var(--rose); }
.fk-search__go svg { width: 17px; height: 17px; }
/* Podpowiedzi wyszukiwarki na żywo (Flatsome + devbridge autocomplete).
   Wtyczka nadaje kontenerowi `.autocomplete-suggestions` INLINE `position`,
   `top`, `left` i `width` wyliczone względem układu starego nagłówka —
   w naszym wylądowałyby obok pola. Zerujemy je i pozycjonujemy listę sami
   względem `.fk-search`, który ma `position: relative`. Stąd `!important`:
   przegrywać ze stylem inline inaczej się nie da. */
.fk-search__live { position: absolute; inset-inline: 0; top: calc(100% + 6px); z-index: 5; }
.fk-search__live .autocomplete-suggestions { position: static !important; width: 100% !important; max-height: min(60vh, 420px) !important; overflow-y: auto; border: 1px solid var(--line-strong); border-radius: var(--r-md); background: var(--paper); box-shadow: var(--cien); }
.fk-search__live .autocomplete-suggestion { display: flex; gap: 10px; align-items: center; padding: 9px 12px; font-size: .92rem; line-height: 1.35; color: var(--ink); cursor: pointer; }
.fk-search__live .autocomplete-suggestion + .autocomplete-suggestion { border-top: 1px solid var(--line); }
.fk-search__live .autocomplete-suggestion img { flex: none; width: 34px; height: 34px; object-fit: cover; border-radius: var(--r-sm); }
.fk-search__live .autocomplete-selected { background: var(--paper-2); }
/* Flatsome dorzuca `.loading` na czas zapytania — u nas to jedyny sygnał,
   bo nie używamy jego klasy `.button` z własnym spinnerem. */
.fk-search__go.loading { opacity: .45; }


/* Wyjątek dla szuflady. Reguła wyżej chowa pole w nagłówku na wąskim
   ekranie — słusznie, bo nie ma tam na nie miejsca. Ale zamiennika nie było
   żadnego, więc poniżej 980 px sklepu nie dało się przeszukać. Dwie klasy
   dają (0,2,0) i wygrywają z regułą ukrywającą. */
.fk-drawer__search { padding: 14px var(--gut) 0; }
@media (max-width: 979px) { .fk-drawer .fk-search { display: block; max-width: none; } }

.fk-head__acts { display: flex; align-items: center; gap: 2px; flex: none; }
.fk-iconbtn { position: relative; display: grid; place-items: center; width: 44px; height: 44px; color: var(--ink); text-decoration: none; transition: color .2s var(--ease); }
.fk-iconbtn:hover { color: var(--rose); }
.fk-iconbtn svg { width: 20px; height: 20px; }
.fk-iconbtn__count { position: absolute; top: 5px; right: 2px; min-width: 18px; height: 18px; padding: 0 5px; display: grid; place-items: center; border-radius: var(--r-pill); background: var(--rose); color: var(--on-rose); font-size: .75rem; font-weight: 600; line-height: 1; }
.fk-burger { display: none; }
@media (max-width: 979px) { .fk-burger { display: grid; } }

/* --- 7. Nawigacja — zdania, nie wersaliki ------------------------------ */

.fk-nav { border-bottom: 1px solid var(--hair); background: var(--paper); }
/* Jeden rząd, przewijany poziomo — nie zawijanie.
   Zawijanie przy ośmiu długich nazwach dawało dwa nierówne wiersze, w których
   nie widać było, gdzie kończy się jedna kategoria, a zaczyna druga.
   Rząd z przewijaniem trzyma rytm i czyta się jak pasek nawigacji. */
/* BEZ `overflow-x: auto`.

   Element przewijany tworzy kontekst PRZYCINANIA — panel z podkategoriami
   (395 px wysokości) pod paskiem o wysokości 52 px znikal w calosci.
   Zmierzone w izolacji, zanim to poszlo na serwer.

   Pasek pokazuje teraz czolowke dzialow plus pozycje „Wszystkie kategorie",
   więc nie ma czego przewijac. Gdyby nazwy urosly, lista zawija sie
   do drugiego rzedu zamiast chowac pozycje poza kadrem. */
/*
 * PASEK KATEGORII: JEDEN WIERSZ, ZAWSZE.
 *
 * Bylo `flex-wrap: wrap`. Zmierzone na wgranej stronie przy oknie 1440 px:
 * szesc pozycji potrzebuje 1191 px, a kadr daje 1184 — brakuje SIEDMIU pikseli,
 * więc „Wszystkie kategorie" spada do drugiego wiersza, a pasek rosnie z 52
 * do 105 px. Przy wąskim laptopie (1100–1280 px) zawija sie jeszcze wiecej.
 *
 * Nazwy kategorii sa dane z katalogu — nie da sie ich przyciac tak, żeby
 * mieścily sie zawsze. Zamiast liczyc na to, ze sie zmieszcza, pasek przewija
 * sie w bok, gdy braknie miejsca. Panel rozwijany tego nie dotyczy: jego
 * blokiem zawierajacym jest `.fk-wrap` LEZACY POZA tym przewijaniem, a obciecie
 * przez `overflow` omija elementy, których blok zawierajacy jest przodkiem
 * elementu obcinajacego.
 */
.fk-nav__list { display: flex; flex-wrap: nowrap; align-items: stretch; gap: 0; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.fk-nav__list::-webkit-scrollbar { display: none; }
.fk-nav__list > li { flex: none; }
.fk-nav__list > li + li { border-left: 1px solid var(--hair); }
.fk-nav__list > li { display: flex; }
.fk-nav__link {
  display: flex; align-items: center; gap: 6px;
  padding: 14px 18px 14px 0; margin-right: 8px;
  font-size: .95rem; font-weight: 500;
  text-decoration: none; color: var(--ink-soft);
  white-space: nowrap; position: relative;
  transition: color .22s var(--ease);
}
.fk-nav__link::after { content: ''; position: absolute; left: 0; right: 18px; bottom: 9px; height: 1px; background: var(--rose); scale: 0 1; transform-origin: left; transition: scale .26s var(--ease); }
.fk-nav__link:hover { color: var(--ink); }
.fk-nav__link:hover::after, .fk-nav__item:hover > .fk-nav__link::after { scale: 1 1; }
.fk-nav__link svg { width: 11px; height: 11px; opacity: .45; }
.fk-nav__link.fk-nav__link--hot { color: var(--rose); }

/*
 * PANEL ROZWIJANY KOTWICZY SIE DO KADRU STRONY, NIE DO POZYCJI W PASKU.
 *
 * Bylo: `position: relative` na `<li>` plus panel szeroki na minimum 620 px,
 * przyklejony do lewej krawędzi tej pozycji. Skutkiem byly dwa wyjscia poza
 * ekran naraz, zmierzone przy oknie 1440 px:
 *
 *  • „Meble kosmetyczne" zaczyna sie na 958 px, więc panel siegal 1578 —
 *    138 px za prawa krawedz okna i 225 px za kadr strony;
 *  • „Wszystkie kategorie" mialo regule „ostatnia pozycja kotwiczy do prawej",
 *    ale po zawinieciu paska bylo pierwsza pozycja DRUGIEGO wiersza — panel
 *    lecial więc 319 px za LEWA krawedz.
 *
 * Ta druga regula byla zgadywaniem: zakladala, ze kolejność w liscie odpowiada
 * polozeniu na ekranie. Kotwiczenie do `.fk-wrap` usuwa problem u źródła —
 * panel ma dokladnie szerokosc kadru strony, więc z definicji nie może z niego
 * wyjsc, niezależnie od tego, która pozycje otworzono i ile ich jest.
 */
.fk-nav .fk-wrap { position: relative; }
.fk-nav__item { position: static; }
.fk-mega {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 5;
  padding: 30px;
  background: var(--paper-2); border: 1px solid var(--line);
  opacity: 0; visibility: hidden; translate: 0 4px;
  transition: opacity .2s var(--ease), translate .2s var(--ease), visibility .2s;
}
.fk-nav__item:hover > .fk-mega, .fk-nav__item:focus-within > .fk-mega { opacity: 1; visibility: visible; translate: 0 0; }
.fk-mega__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }
.fk-mega__col h3 { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); margin-bottom: 13px; padding-bottom: 8px; border-bottom: 1px solid var(--hair); }
.fk-mega__col li + li { margin-top: 1px; }
.fk-mega__col a { display: block; padding: 5px 0; font-size: .94rem; text-decoration: none; color: var(--ink-soft); transition: color .16s var(--ease); }
.fk-mega__col a:hover { color: var(--rose); }
/* Pasek kategorii znika na telefonie i tablecie.

   Powiela szuflade: te same dzialy sa pod hamburgerem i pod „Katalogiem"
   w dolnym pasku. Przy nazwach dlugosci „Wyposażenie salonu fryzjerskiego"
   miescily sie dwie pozycje na ekran, a pas zabieral 59 px pod PRZYKLEJONYM
   naglowkiem na KAZDEJ stronie.

   Ta regula istniala od poczatku — przez pewien czas znosil ja pozniejszy
   `display: block` z sekcji o telefonie. Dlatego stoi tu komentarz: żeby
   nastepna proba „naprawy paska na mobile" zaczela sie od pytania, po co
   ten pasek na telefonie w ogole. */
@media (max-width: 979px) { .fk-nav { display: none; } }

.fk-scrim { position: fixed; inset: 0; z-index: var(--z-scrim); background: rgba(13, 18, 23, .55); opacity: 0; transition: opacity .28s var(--ease); }
.fk-scrim.fk-is-open { opacity: 1; }

.fk-drawer { position: fixed; top: 0; bottom: 0; left: 0; z-index: var(--z-drawer); width: min(370px, 90vw); display: flex; flex-direction: column; background: var(--paper); translate: -100% 0; transition: translate .3s var(--ease); }
.fk-drawer { border-radius: 0 var(--r-lg) var(--r-lg) 0; }
.fk-drawer.fk-is-open { translate: 0 0; }
/* --- Koszyk boczny -----------------------------------------------------
   Lustrzane odbicie szuflady menu: ta wjeżdża z prawej. Treść pochodzi
   z `woocommerce_mini_cart()`, więc stylizujemy klasy WooCommerce — ale
   tylko wewnątrz `.fk-cart`, żeby nie ruszać koszyka na jego własnej stronie. */
.fk-cart { position: fixed; top: 0; bottom: 0; right: 0; z-index: var(--z-drawer); width: min(400px, 92vw); display: flex; flex-direction: column; background: var(--paper); border-radius: var(--r-lg) 0 0 var(--r-lg); box-shadow: var(--cien); translate: 100% 0; transition: translate .3s var(--ease); }
.fk-cart.fk-is-open { translate: 0 0; }
.fk-cart__head { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px var(--gut); border-bottom: 1px solid var(--hair); flex: none; }
.fk-cart__head h2 { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); }
.fk-cart__body { flex: 1 1 auto; overflow-y: auto; padding: 16px var(--gut) 24px; }
/* 46 px odstępu z prawej, nie 26. Przycisk usuwania stoi w rogu i przy
   ciasnym marginesie długa nazwa produktu dochodziła wprost pod „×”.
   Krążek z tłem i obwódką dodatkowo oddziela go od tekstu. */

.fk-drawer__head { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px var(--gut); border-bottom: 1px solid var(--hair); flex: none; }
.fk-drawer__head img { height: 28px; width: auto; }
.fk-drawer__body { flex: 1 1 auto; overflow-y: auto; padding: 6px var(--gut) 22px; }
.fk-drawer__foot { flex: none; padding: 16px var(--gut); padding-bottom: max(16px, env(safe-area-inset-bottom)); border-top: 1px solid var(--hair); display: grid; gap: 8px; }
.fk-acc__btn { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; min-height: 54px; padding: 15px 0; border-bottom: 1px solid var(--hair); font-size: 1rem; font-weight: 500; text-align: left; line-height: 1.3; }
.fk-acc__btn svg { width: 13px; height: 13px; flex: none; transition: rotate .22s var(--ease); }
.fk-acc__btn[aria-expanded='true'] svg { rotate: 180deg; }
.fk-acc__panel { padding: 6px 0 14px; }
.fk-acc__panel a { display: block; min-height: 44px; padding: 11px 12px; font-size: .95rem; color: var(--ink-soft); text-decoration: none; }
.fk-acc__panel a:hover { background: var(--rose-soft); color: var(--rose-deep); }

.fk-tabbar { display: none; }
@media (max-width: 979px) {
  .fk-tabbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-sticky); display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); background: var(--paper-2); border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom); }
  .fk-tabbar__i { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; height: var(--tabbar-h); padding: 8px 2px; font-size: .78rem; font-weight: 500; color: var(--mist); text-decoration: none; }
  .fk-tabbar__i svg { width: 19px; height: 19px; }
  .fk-tabbar__i[aria-current='page'] { color: var(--ink); }
  .fk-tabbar__i[aria-current='page']::before { content: ''; position: absolute; top: 0; left: 50%; translate: -50% 0; width: 26px; height: 2px; background: var(--rose); }
  .fk-tabbar__i .fk-tabbar__dot { position: absolute; top: 5px; right: 50%; margin-right: -19px; min-width: 16px; height: 16px; padding: 0 4px; display: grid; place-items: center; background: var(--rose); color: var(--on-rose); font-size: .72rem; font-weight: 600; line-height: 1; }
  body { padding-bottom: calc(var(--tabbar-h) + env(safe-area-inset-bottom)); }
}

/* --- 8. HERO — jasny kadr, produkt w prawej części, tekst w pustce ----- */

/*
 * HERO: dwie kolumny, zdjęcie w ramce.
 *
 * `overflow: hidden` zostaje — przytrzymuje luk dekoracyjny i plakietke, która
 * wychodzi poza krawedz sceny.
 */
.fk-hero { position: relative; background: var(--paper); border-bottom: 1px solid var(--hair); overflow: hidden; }

/* Jedyny czysto dekoracyjny ksztalt na stronie glownej: miekka lułna plama
   w kolorze akcentu za scena. Buduje glebie, której plaski kafel nie ma,
   i nie zabiera ani jednego piksela czytelnosci — lezy pod trescia. */
.fk-hero::before {
  content: '';
  position: absolute;
  z-index: 0;
  right: -12vw;
  top: -26vh;
  width: min(74vw, 880px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, var(--rose-soft) 0%, rgba(225,238,243,0) 68%);
  pointer-events: none;
}
.fk-hero__in { position: relative; z-index: 1; }
.fk-hero__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 32px;
  align-items: center;
  padding-block: clamp(30px, 2.2rem + 2.2vw, 68px) clamp(26px, 2rem + 1.6vw, 48px);
}
@media (min-width: 900px) {
  .fk-hero__grid { grid-template-columns: minmax(0, 1.04fr) minmax(0, 1fr); gap: clamp(32px, 3.4vw, 64px); }
}

/* --- Scena ------------------------------------------------------------- */

.fk-hero__scena { position: relative; }

.fk-hero__pic {
  display: block;
  margin: 0;
  border-radius: var(--r-lg);
  overflow: hidden;
  background: var(--paper-2);
  box-shadow: 0 2px 8px rgba(22,28,34,.05), 0 32px 64px -26px rgba(22,28,34,.3);
}

/* 4:3 przy zrodle 1200x800 — skalowanie w dol i 89% szerokosci kadru.
   Poprzednio: skalowanie w gore o 6% i 56% kadru. */
.fk-hero__bg {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: 50% 52%;
}

/* Plakietka wychodzi za krawedz sceny — to ona robi wrazenie warstw.
   Na wąskim ekranie wraca do srodka, bo tam każdy piksel poza kadrem
   to pasek przewijania w poziomie. */
.fk-hero__znak {
  position: absolute;
  left: 14px;
  bottom: 14px;
  z-index: 2;
  display: grid;
  gap: 3px;
  padding: 13px 17px;
  border: 1px solid var(--hair);
  border-radius: var(--r-md);
  background: var(--paper-2);
  box-shadow: var(--cien);
  text-decoration: none;
  transition: translate .24s var(--ease), box-shadow .24s var(--ease);
}
@media (min-width: 900px) { .fk-hero__znak { left: -22px; bottom: 26px; } }

/*
 * Na telefonie plakietka SCHODZI ze zdjecia.
 *
 * Ramka ma tam 335x251 px, a plakietka okolo 170x90 — lezac na zdjeciu,
 * zaslaniala jedna pilata cała podstawe fotela. Na scenie z wybranym produktem
 * to juz nie jest ozdobnik na tle, tylko przykrycie towaru, który ma być
 * bohaterem tego miejsca.
 */
@media (max-width: 599px) {
  .fk-hero__znak {
    position: static;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 3px 12px;
    margin-top: 12px;
    box-shadow: none;
  }
  .fk-hero__znakk { flex: 1 0 100%; }
  .fk-hero__znak:hover { translate: 0 0; box-shadow: none; }
}
.fk-hero__znak:hover { translate: 0 -3px; box-shadow: 0 6px 18px rgba(22,28,34,.1), 0 22px 44px -18px rgba(22,28,34,.3); }
.fk-hero__znakk { display: flex; align-items: center; gap: 7px; font-size: .74rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--mist); }
.fk-hero__znakk svg { width: 13px; height: 13px; flex: none; color: var(--rose); }
.fk-hero__znakt { display: block; font-size: 1.12rem; font-weight: 600; letter-spacing: -.01em; color: var(--ink); }
.fk-hero__znakd { display: block; font-size: .8rem; color: var(--mist); }

/* Na telefonie scena idzie PRZED slowem: w sklepie ze sprzetem produkt jest
   hakiem, nie deklaracja. Pasy nizej zostaja tekstem do gory — tam kontekst
   musi poprzedzic zdjecie. */
@media (max-width: 899px) {
  .fk-hero__scena { order: -1; }
}

.fk-hero__mark { display: flex; align-items: baseline; gap: 10px; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--rose); margin-bottom: 22px; }

/* Pasek faktow biegnie pod OBIEMA kolumnami, nie w kolumnie tekstu. Przy
   szerokosci calego kadru trzy liczby maja miejsce na jeden wiersz podpisu
   zamiast na trzy. */
.fk-hero__facts {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr));
  gap: 0;
  border-top: 1px solid var(--hair);
  padding-bottom: clamp(30px, 2.4rem + 1.6vw, 56px);
}
.fk-hero__f { padding: 18px 0 0; }
@media (min-width: 620px) {
  .fk-hero__f + .fk-hero__f { padding-left: clamp(18px, 2.2vw, 34px); border-left: 1px solid var(--hair); }
  .fk-hero__f { padding-right: clamp(10px, 1.4vw, 22px); }
}
.fk-hero__f .fk-hero__fv { display: block; font-size: clamp(1.3rem, 1.1rem + .8vw, 1.75rem); font-weight: 500; letter-spacing: -.03em; line-height: 1; }
.fk-hero__f .fk-hero__fk { display: block; font-size: .85rem; color: var(--mist); margin-top: 7px; line-height: 1.4; }
.fk-hero__ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 30px; }

/* Segmentacja ruchu — dwa wejscia, bez pudelek */
.fk-picks { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; margin-top: 34px; border-top: 1px solid var(--hair); }
@media (min-width: 560px) { .fk-picks { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.fk-pick { display: flex; flex-direction: column; gap: 5px; padding: 20px 0; border-bottom: 1px solid var(--hair); text-decoration: none; transition: padding-left .28s var(--ease); }
@media (min-width: 560px) { .fk-pick + .fk-pick { padding-left: 24px; border-left: 1px solid var(--hair); } }
.fk-pick:hover { padding-left: 10px; }
@media (min-width: 560px) { .fk-pick + .fk-pick:hover { padding-left: 34px; } }
.fk-pick__k { display: flex; align-items: center; gap: 8px; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--rose); }
.fk-pick__k svg { width: 13px; height: 13px; flex: none; }
.fk-pick__t { display: block; font-size: 1.12rem; font-weight: 500; letter-spacing: -.02em; line-height: 1.25; }
.fk-pick__d { display: block; font-size: .91rem; color: var(--mist); line-height: 1.5; }

/* --- 9. Pasek zaufania -------------------------------------------------- */

.fk-trust { border-bottom: 1px solid var(--hair); background: var(--paper); }
.fk-trust__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
@media (min-width: 900px) { .fk-trust__list { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.fk-trust__i { display: flex; align-items: flex-start; gap: 13px; padding: 22px 20px 22px 0; }
@media (min-width: 900px) { .fk-trust__i + .fk-trust__i { padding-left: 26px; border-left: 1px solid var(--hair); } }
.fk-trust__i .fk-trust__ic { flex: none; color: var(--rose); margin-top: 1px; }
.fk-trust__i .fk-trust__ic svg { width: 19px; height: 19px; }
.fk-trust__i .fk-trust__t { display: block; font-size: .95rem; font-weight: 500; line-height: 1.35; }
.fk-trust__i .fk-trust__d { display: block; font-size: .89rem; color: var(--mist); line-height: 1.5; margin-top: 3px; }
@media (max-width: 560px) {
  .fk-trust__i { flex-direction: column; gap: 9px; padding: 18px 12px 18px 0; }
  .fk-trust__i:nth-child(2n) { padding-left: 14px; border-left: 1px solid var(--hair); }
}

/* --- 10. Siatka kategorii ----------------------------------------------
   Style siatki stoja w sekcji 44 na koncu arkusza, razem z reszta zmian
   z tego wydania. Tu zostaje sam nagłówek, żeby numeracja sekcji sie zgadzala. */

/* --- 11. Pasy ze zdjeciem — jasne, produkt w kadrze, tekst w pustce ---- */

.fk-band { position: relative; background: var(--paper); border-block: 1px solid var(--hair); }
.fk-band__in { position: relative; z-index: 1; }
.fk-band__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 30px;
  align-items: center;
  padding-block: clamp(44px, 3.5rem + 2vw, 84px);
}
@media (min-width: 900px) {
  .fk-band__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(34px, 4vw, 70px); }
  /* Wariant „prawy”: slowo po prawej, scena po lewej. Kolejność w ZNACZNIKU
     zostaje ta sama (tekst pierwszy), więc czytnik ekranu i telefon dostaja
     kontekst przed zdjeciem — przestawiamy wyłącznie obraz. */
  .fk-band--right .fk-band__box   { order: 2; }
  .fk-band--right .fk-band__scena { order: 1; }
}

.fk-band__scena { position: relative; }
.fk-band__pic {
  display: block;
  margin: 0;
  border-radius: var(--r-lg);
  overflow: hidden;
  background: var(--paper-2);
  box-shadow: 0 2px 8px rgba(22,28,34,.05), 0 26px 54px -26px rgba(22,28,34,.26);
}
.fk-band__bg {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: 50% 50%;
}

/* Na telefonie kolejność zostaje taka, jak w znaczniku: slowo, potem zdjecie.
   Bez wstepu ujecie autoklawu nie mówi nic. */

.fk-band__ul { display: grid; gap: 13px; margin-top: 24px; }
.fk-band__ul li { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 12px; align-items: start; font-size: .96rem; line-height: 1.55; color: var(--ink-soft); }
.fk-band__ul svg { width: 16px; height: 16px; color: var(--rose); margin-top: 4px; }
.fk-band__ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }

/* Dane liczbowe w pasie — zamiast cytatu na zdjeciu */
.fk-band__figs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px; margin-top: 26px; }
.fk-band__fig { border-top: 1px solid var(--ink); padding-top: 11px; }
.fk-band__fig .fk-band__figv { display: block; font-size: clamp(1.25rem, 1.05rem + .7vw, 1.6rem); font-weight: 500; letter-spacing: -.03em; line-height: 1; }
.fk-band__fig .fk-band__figk { display: block; font-size: .87rem; color: var(--mist); margin-top: 6px; line-height: 1.45; }

/* --- 12. Karta produktu (siatka) --------------------------------------- */

.fk-prods { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 236px), 1fr)); gap: 18px; }
.fk-prods > * { min-width: 0; }
.fk-prods--wide { grid-template-columns: repeat(auto-fill, minmax(min(100%, 268px), 1fr)); }

/* Prog 268 px jest za wysoki na male tablety i telefony w poziomie: przy
   oknie 600 px zawartość ma 536 px, a dwie kolumny potrzebuja 2x268 + 18 px
   odstepu = 554. Siatka schodzila wtedy do JEDNEJ karty na rzad, szerokiej
   na 536 px. Nizej trzymamy ten sam prog, co zwykla siatka. */
@media (max-width: 767px) {
  .fk-prods--wide { grid-template-columns: repeat(auto-fill, minmax(min(100%, 236px), 1fr)); }
}

.fk-card { position: relative; display: flex; flex-direction: column; background: var(--card); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; transition: border-color .26s var(--ease), box-shadow .26s var(--ease), translate .26s var(--ease); }
/* Obwodka po najechaniu bierze sie z tokenu, nie z wartości wpisanej
   na sztywno. Poprzedni `#DDD0C9` byl pudrowym brazem ze starej palety
   i po jej zmianie zostalby jedynym cieplym pikselem na chlodnej stronie. */
.fk-card:hover { border-color: var(--line-strong); box-shadow: var(--cien); translate: 0 -3px; }
/* Kadr zdjęcia: BIALE tlo i bez trybu mieszania.

   Bylo: pudrowe tlo `--blush` plus `mix-blend-mode: multiply` na obrazku.
   Zamysl byl taki, ze zdjęcia maja biale tlo, więc biel wymnozy sie do
   pudru i produkt „usiadzie" na kolorze marki. Sprawdzone na wgranym
   sklepie: tla zdjec faktycznie sa czysto biale (255,255,255 we wszystkich
   czterech naroznikach probki).

   Tylko ze `multiply` nie dotyka wyłącznie tla — mnozy CALY obrazek.
   Każdy jasny piksel samego produktu dostaje rozowa tinte i tracil jasnosc:
   bialy fotel, chromowana noga czy jasna tapicerka wtapialy sie w kafelek.
   Przy katalogu, w którym zdjęcia pochodzia od kilkunastu dostawcow, to
   zaklad o to, ze każdy produkt jest ciemny.

   Biel `--paper-2` jest tym samym kolorem, co tlo zdjec, więc krawedz pliku
   znika sama — bez sztuczek z mieszaniem. Mniejszy padding daje produktowi
   więcej miejsca w tym samym kafelku. */
.fk-card__media {
  position: relative;
  aspect-ratio: 4 / 5;
  background: var(--paper-2);
  border-bottom: 1px solid var(--hair);
  overflow: hidden;
}
.fk-card__media img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  padding: 8%;
  transition: scale .5s var(--ease);
}
.fk-card:hover .fk-card__media img { scale: 1.05; }
.fk-card__flags { position: absolute; top: 11px; left: 11px; display: flex; flex-direction: column; align-items: flex-start; gap: 5px; z-index: 2; }
.fk-card__fav { position: absolute; top: 8px; right: 8px; z-index: 3; display: grid; place-items: center; width: 40px; height: 40px; color: var(--mist); transition: color .2s var(--ease); }
.fk-card__fav:hover { color: var(--ink); }
.fk-card__fav svg { width: 17px; height: 17px; }

/* Cialo karty. Trzy poprawki czytelnosci naraz:

   • marka schodzi na 10 px i traci część rozstrzelenia — przy Interze
     wersaliki z `letter-spacing: .11em` rozjezdzaly sie na tyle, ze nazwa
     producenta czytala sie dluzej niż nazwa produktu pod nia;
   • tytul rosnie do 1 rem i dostaje TRZY wiersze zamiast dwoch — nazwy
     w tym katalogu potrafia mieć 60 znakow („Gabbiano fotel barberski
     President old leather zielony"), a uciecie po dwoch gubilo wariant
     kolorystyczny, czyli jedyna rzecz odrozniajaca sasiednie kafle;
   • wiekszy odstep między marka a tytulem, mniejszy w reszcie — grupowanie
     mówi, co z czym idzie. */
.fk-card__body { display: flex; flex-direction: column; gap: 5px; padding: 16px 16px 18px; flex: 1 1 auto; }
.fk-card__brand { font-size: .74rem; font-weight: 600; letter-spacing: .085em; text-transform: uppercase; color: var(--mist); margin-bottom: 1px; }
.fk-card__title { font-size: 1rem; font-weight: 500; letter-spacing: -.011em; line-height: 1.34; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.fk-card__title a { text-decoration: none; }
.fk-card__title a::after { content: ''; position: absolute; inset: 0; z-index: 1; }
.fk-card__meta { display: flex; align-items: center; gap: 8px; font-size: .87rem; color: var(--mist); }
.fk-card__meta .fk-card__dot { width: 6px; height: 6px; border-radius: 50%; background: var(--stock); flex: none; }
.fk-card__meta .fk-card__dot--low { background: var(--ink); }

.fk-card__prices { margin-top: auto; padding-top: 12px; }
.fk-price-row { display: flex; align-items: baseline; flex-wrap: wrap; gap: 9px; }
.fk-price-now { font-size: 1.16rem; font-weight: 500; letter-spacing: -.025em; line-height: 1.1; }
.fk-price-old { font-size: .88rem; color: var(--mist); text-decoration: line-through; }
.fk-price-net { font-size: .85rem; color: var(--mist); display: block; margin-top: 2px; }
.fk-price-lease { display: block; margin-top: 5px; font-size: .85rem; color: var(--rose); }
/* `display: contents` — opakowanie znika z układu kafelka, więc ceny
   i przycisk zachowują się dokładnie jak wcześniej. Dopiero widok listy
   nadaje mu własny układ. */
.fk-card__side { display: contents; }
.fk-card__buy { position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin-top: 14px; }

/* Przycisk „do koszyka" przychodzi z rdzenia WooCommerce z klasa `.button`,
   a motyw nadrzedny daje tej klasie `margin-right: 1em; margin-bottom: 1em`.
   Zmierzone na wgranym sklepie (telefon 375 px): przycisk mial 122 px
   w kolumnie 137 px i zostawialo mu 14 px martwego pola pod soba. Odstepy
   w karcie ustawia siatka, więc marginesy z zewnatrz zerujemy. */
.fk-card__buy .button { margin: 0; }

/* Rdzeń wypisuje obok przycisku `<span class="screen-reader-text">` z nazwa
   produktu. To pelnoprawne dziecko siatki, więc gdyby zostalo w ukladzie,
   zajeloby druga kolumne i zepchnelo lupke do nastepnego rzedu. Na produkcji
   wyjmuje go z układu arkusz WooCommerce; powtarzamy to u siebie, żeby karta
   nie zalezala od cudzej reguly. */
.fk-card__buy > .screen-reader-text { position: absolute; }

/* Napis w przycisku karty moze sie zlamac na kazdej szerokosci. Regula
   ogolna `.fk-btn` trzyma `white-space: nowrap`, a produkt zewnetrzny albo
   wariant przynosi dowolnie dlugi tekst — zmierzone na probce: przy 600
   i 1024 px napis „Sprawdz dostepnosc u dostawcy" wychodzil poza przycisk.
   Wczesniej zgoda na lamanie obowiazywala tylko ponizej 600 px. */
.fk-card__buy .fk-btn { white-space: normal; line-height: 1.25; text-wrap: balance; }
.fk-card__cmp { position: relative; z-index: 2; display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: .85rem; color: var(--mist); }
.fk-card__cmp input { width: 15px; height: 15px; accent-color: var(--rose); flex: none; }

/* --- 13. Karuzela ------------------------------------------------------- */

.fk-rail-wrap { position: relative; }
.fk-railx {
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(232px, 1fr);
  gap: 18px;
  overflow-x: auto; scroll-snap-type: x mandatory;
  margin-inline: calc(var(--gut) * -1);
  padding-inline: var(--gut);
  scroll-padding-inline: var(--gut);
  scrollbar-width: none;
  padding-block: 4px;
}
.fk-railx::-webkit-scrollbar { display: none; }
.fk-railx > * { scroll-snap-align: start; min-width: 0; }
@media (min-width: 700px) { .fk-railx { grid-auto-columns: minmax(268px, 1fr); } }

.fk-rail-nav { display: flex; gap: 8px; }
.fk-rail-nav__b { display: grid; place-items: center; width: 46px; height: 46px; border: 1px solid var(--line); background: transparent; color: var(--ink); transition: background-color .22s var(--ease), color .22s var(--ease), border-color .22s var(--ease); }
.fk-rail-nav__b:hover { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.fk-rail-nav__b svg { width: 15px; height: 15px; }
@media (max-width: 899px) { .fk-rail-nav { display: none; } }

/* --- 14. Kreator — jedyna ciemna sekcja na stronie --------------------- */

.fk-conf { background: var(--ink); color: var(--paper); }
.fk-conf__in { display: grid; grid-template-columns: minmax(0, 1fr); gap: 40px; }
@media (min-width: 1000px) { .fk-conf__in { grid-template-columns: minmax(0, .9fr) minmax(0, 1fr); gap: 60px; align-items: start; } }
.fk-conf__kol { display: grid; gap: 30px; align-content: start; }
.fk-conf__steps { display: grid; gap: 26px; }
.fk-conf__step { display: grid; gap: 12px; }
.fk-conf__lab { display: flex; align-items: baseline; gap: 11px; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist-on-dark); }
.fk-conf__lab .fk-conf__no { flex: none; color: var(--paper); }
.fk-conf__opts { display: flex; flex-wrap: wrap; gap: 8px; }
.fk-conf__opt {
  min-height: 44px; padding: 11px 18px;
  background: transparent; border: 1px solid var(--hair-dark); border-radius: var(--r-pill);
  color: var(--paper); font-size: .92rem; line-height: 1.2;
  white-space: nowrap;
  transition: background-color .22s var(--ease), color .22s var(--ease), border-color .22s var(--ease);
}
.fk-conf__opt:hover { border-color: var(--paper); }
.fk-conf__opt[aria-pressed='true'] { background: var(--paper); border-color: var(--paper); color: var(--ink); font-weight: 500; }

/* isolation: miniaturki maja mix-blend-mode: multiply. Bez własnej grupy blendowania
   mieszalyby sie z ciemnym tlem sekcji, a nie z bialym panelem. */
.fk-conf__out { background: var(--paper-2); color: var(--ink); padding: 28px; border-radius: var(--r-lg); isolation: isolate; }
@media (min-width: 700px) { .fk-conf__out { padding: 36px; } }
.fk-conf__outHead { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; flex-wrap: wrap; padding-bottom: 18px; border-bottom: 1px solid var(--ink); }
.fk-conf__outHead .fk-conf__outT { font-size: clamp(1.25rem, 1.05rem + .8vw, 1.7rem); font-weight: 500; letter-spacing: -.025em; line-height: 1.1; }
.fk-conf__list { display: grid; margin-top: 4px; }
.fk-conf__row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 16px; align-items: baseline; padding: 13px 0; border-bottom: 1px solid var(--hair); }
.fk-conf__row .fk-conf__rn { font-size: .95rem; line-height: 1.4; }
.fk-conf__row .fk-conf__rq { display: block; font-size: .85rem; color: var(--mist); margin-top: 3px; }
.fk-conf__row .fk-conf__rp { font-size: .97rem; font-weight: 500; white-space: nowrap; }
.fk-conf__sum { display: grid; gap: 5px; margin-top: 20px; padding: 20px; border-radius: var(--r-md); background: var(--blush); }
.fk-conf__sumRow { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; }
.fk-conf__sumRow .fk-conf__sk { font-size: .91rem; color: var(--mist); }
.fk-conf__sumRow .fk-conf__sv { font-size: 1rem; }
.fk-conf__sumRow--total { padding-top: 11px; margin-top: 5px; border-top: 1px solid var(--ink); }
.fk-conf__sumRow--total .fk-conf__sk { color: var(--ink); font-weight: 500; }
.fk-conf__sumRow--total .fk-conf__sv { font-size: clamp(1.5rem, 1.25rem + 1vw, 2rem); font-weight: 500; letter-spacing: -.03em; }
.fk-conf__lease { display: flex; align-items: center; gap: 13px; margin-top: 14px; padding: 15px 17px; border-radius: var(--r-md); background: var(--rose); color: var(--on-rose); font-size: .92rem; line-height: 1.5; }
.fk-conf__lease svg { width: 19px; height: 19px; flex: none; }
.fk-conf__lease b { font-weight: 600; }
.fk-conf__acts { display: grid; gap: 10px; margin-top: 18px; }
@media (min-width: 560px) { .fk-conf__acts { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* --- 15. Zakładki profili ---------------------------------------------- */

.fk-tabs { display: flex; gap: 0; overflow-x: auto; margin-inline: calc(var(--gut) * -1); padding-inline: var(--gut); scrollbar-width: none; border-bottom: 1px solid var(--hair); }
.fk-tabs::-webkit-scrollbar { display: none; }
.fk-tab {
  display: flex; align-items: center; gap: 9px;
  min-height: 52px; padding: 15px 20px 15px 0; margin-right: 14px;
  font-size: .97rem; font-weight: 500; line-height: 1.2; letter-spacing: -.015em;
  white-space: nowrap; color: var(--mist);
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  transition: color .22s var(--ease), border-color .22s var(--ease);
}
.fk-tab svg { width: 16px; height: 16px; flex: none; }
.fk-tab:hover { color: var(--ink); }
.fk-tab[aria-selected='true'] { color: var(--ink); border-bottom-color: var(--ink); }
.fk-tabpanel { margin-top: 30px; }
.fk-tabpanel__intro { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 13px; align-items: start; padding: 0 0 22px; margin-bottom: 24px; border-bottom: 1px solid var(--hair); font-family: var(--font-proza); font-size: 1.04rem; font-weight: 400; line-height: 1.62; color: var(--ink-soft); max-width: 58em; }
.fk-tabpanel__intro svg { width: 17px; height: 17px; color: var(--rose); margin-top: 5px; }

/* --- 16. Blok B2B — powierzchnia akcentowa ---------------------------- */




/* --- 17. FAQ ------------------------------------------------------------ */

.fk-faq { border-top: 1px solid var(--ink); }
.fk-faq__i { border-bottom: 1px solid var(--hair); }
.fk-faq__q {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 20px;
  width: 100%; min-height: 62px; padding: 22px 0;
  text-align: left;
  font-size: clamp(1.02rem, .96rem + .35vw, 1.28rem);
  font-weight: 500; letter-spacing: -.02em; line-height: 1.32;
  transition: color .22s var(--ease);
}
.fk-faq__q:hover { color: var(--rose); }
.fk-faq__q svg { width: 15px; height: 15px; flex: none; margin-top: 5px; color: var(--mist); transition: rotate .26s var(--ease); }
.fk-faq__q[aria-expanded='true'] svg { rotate: 45deg; }
.fk-faq__a { padding: 0 0 26px; max-width: 60em; }
.fk-faq__a p { font-family: var(--font-proza); font-size: 1.04rem; font-weight: 400; line-height: 1.7; color: var(--ink-soft); }
.fk-faq__a p + p { margin-top: 13px; }
.fk-faq__a .fk-faq__tldr { display: block; padding: 0 0 14px 18px; margin-bottom: 14px; border-left: 2px solid var(--rose); font-family: var(--font-ui); font-size: 1rem; font-weight: 500; line-height: 1.55; color: var(--ink); }

/* --- 18. Tabele --------------------------------------------------------- */

.fk-tablewrap { overflow-x: auto; border-top: 1px solid var(--ink); }
.fk-table { width: 100%; min-width: 520px; font-size: .95rem; }
.fk-table th, .fk-table td { padding: 15px 18px 15px 0; text-align: left; border-bottom: 1px solid var(--hair); vertical-align: top; }
.fk-table thead th { font-size: .79rem; font-weight: 600; letter-spacing: .11em; text-transform: uppercase; color: var(--mist); white-space: nowrap; }
.fk-table tbody th { font-weight: 500; width: 38%; color: var(--ink); }
.fk-table .fk-table__hi { font-weight: 500; color: var(--rose); }
.fk-tablewrap--dane .fk-table { min-width: 0; }
.fk-tablewrap--dane .fk-table th[scope='row'] { width: 46%; }

/* --- 19. GEO ------------------------------------------------------------ */

.fk-geo__in { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px; }
@media (min-width: 900px) { .fk-geo__in { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 52px; } }
.fk-geo__card { padding: 30px; border-radius: var(--r-lg); background: var(--paper-2); border: 1px solid var(--line); }
.fk-geo__dl { display: grid; gap: 18px; margin-top: 24px; }
.fk-geo__dl > div { display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 13px; align-items: start; }
.fk-geo__dl svg { width: 16px; height: 16px; color: var(--rose); margin-top: 4px; }
/* `display` i `margin` jawnie, bo Flatsome nadaje `dt` wartość
   `inline-block`, a `dd` własny margines. Efekt zmierzony na produkcji:
   etykieta i wartość lądowały w jednej linii obok siebie, a przy wartości
   łamanej `<br>` etykieta wypadała POD pierwszymi wierszami — czyli
   „ROB-MATIC… / wyłącznie wysyłkowo / SPRZEDAŻ w całej Polsce”. */
.fk-geo__dl dt { display: block; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); margin: 0; }
.fk-geo__dl dd { display: block; font-size: .98rem; line-height: 1.55; margin: 3px 0 0; overflow-wrap: anywhere; }
.fk-rail-nav[hidden] { display: none; }
.fk-rail-nav__b:disabled { opacity: .3; cursor: default; }
.fk-rail-nav__b:disabled:hover { border-color: var(--line); }
.fk-geo__zones { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 13px; }

/* --- 20. Stopka --------------------------------------------------------- */

.fk-foot { background: var(--ink); color: var(--mist-on-dark); }
.fk-foot__top { display: grid; grid-template-columns: minmax(0, 1fr); gap: 40px; padding-block: 60px; }
@media (min-width: 700px)  { .fk-foot__top { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1050px) { .fk-foot__top { grid-template-columns: minmax(0, 1.5fr) repeat(3, minmax(0, 1fr)); gap: 48px; } }
.fk-foot__logo img { height: 40px; width: auto; filter: brightness(0) invert(1); }
.fk-foot h2 { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--paper); margin-bottom: 18px; padding-bottom: 11px; border-bottom: 1px solid var(--hair-dark); }
.fk-foot__col li + li { margin-top: 9px; }

/* Reset a:not([class]) malowal linki na ciemnym akcentem — komplet kontekstow naraz */
.fk-foot .fk-eyebrow { color: var(--mist-on-dark); }
.fk-foot a, .fk-news a, .fk-topbar a, .fk-conf a:not([class]),
.fk-hero a:not([class]), .fk-band a:not([class]), .fk-stickybuy a:not([class]) { color: var(--mist-on-dark); }
.fk-foot a:hover, .fk-news a:hover { color: var(--paper); }

.fk-foot__col a { font-size: .95rem; text-decoration: none; transition: color .2s var(--ease); }
.fk-foot__nap { display: grid; gap: 11px; margin-top: 24px; font-size: .95rem; }
.fk-foot__nap a { display: flex; align-items: center; gap: 10px; text-decoration: none; overflow-wrap: anywhere; }
.fk-foot__nap svg { width: 15px; height: 15px; color: var(--mist-on-dark); flex: none; }
.fk-foot__pay { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 22px; }
.fk-foot__pay span { padding: 6px 11px; border: 1px solid var(--hair-dark); font-size: .82rem; }
.fk-foot__bot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; padding-block: 22px; border-top: 1px solid var(--hair-dark); font-size: .88rem; }
.fk-foot__bot ul { display: flex; flex-wrap: wrap; gap: 22px; }
.fk-foot__bot a { text-decoration: none; }

.fk-news { display: grid; grid-template-columns: minmax(0, 1fr); gap: 26px; align-items: center; padding: 40px 0; border-bottom: 1px solid var(--hair-dark); }
@media (min-width: 850px) { .fk-news { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 52px; } }
.fk-news__form { display: flex; gap: 12px; flex-wrap: wrap; }
.fk-news__form input { flex: 1 1 220px; min-width: 0; min-height: 50px; padding: 12px 0; border: 0; border-bottom: 1px solid var(--hair-dark); background: transparent; color: var(--paper); font-size: .98rem; }
.fk-news__form input::placeholder { color: rgba(233,238,241,.52); }
.fk-news__form input:focus { outline: none; border-bottom-color: var(--paper); }

/* --- 21. Archiwum ------------------------------------------------------- */

.fk-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 9px; padding-block: 18px; font-size: .87rem; color: var(--mist); }
.fk-crumbs a { text-decoration: none; }
.fk-crumbs a:hover { color: var(--rose); }
.fk-crumbs svg { width: 10px; height: 10px; opacity: .5; }

.fk-archead { padding-bottom: 30px; border-bottom: 1px solid var(--ink); }
.fk-archead__row { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; align-items: end; }
@media (min-width: 900px) { .fk-archead__row { grid-template-columns: minmax(0, 1fr) auto; } }
.fk-archead__desc { max-width: 58ch; margin-top: 16px; font-family: var(--font-proza); font-size: 1.04rem; font-weight: 400; line-height: 1.68; color: var(--ink-soft); }
.fk-archead__desc.fk-is-clamped { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.fk-archead__more { margin-top: 10px; font-size: .91rem; font-weight: 500; color: var(--rose); border-bottom: 1px solid var(--rose); padding-bottom: 2px; }

.fk-arch { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px; align-items: start; padding-block: 30px; }
@media (min-width: 1100px) { .fk-arch { grid-template-columns: 250px minmax(0, 1fr); gap: 48px; } }

.fk-side { display: none; }
@media (min-width: 1100px) { .fk-side { display: block; position: sticky; top: calc(var(--head-h) + 18px); } }
.fk-side__box { padding-bottom: 22px; margin-bottom: 22px; border-bottom: 1px solid var(--hair); }
.fk-side__box:last-child { border-bottom: 0; }
.fk-side__box h2 { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); margin-bottom: 14px; }
.fk-side__opts { display: grid; gap: 1px; }
.fk-side__opt { display: flex; align-items: center; gap: 11px; min-height: 38px; padding: 5px 0; font-size: .94rem; cursor: pointer; transition: color .18s var(--ease); }
.fk-side__opt:hover { color: var(--rose); }
.fk-side__opt input { width: 15px; height: 15px; accent-color: var(--rose); flex: none; }
.fk-side__opt .fk-side__n { flex: 1 1 auto; min-width: 0; }
.fk-side__opt .fk-side__c { font-size: .85rem; color: var(--mist); font-variant-numeric: tabular-nums; }

.fk-range { display: grid; gap: 11px; }
.fk-range__vals { display: flex; justify-content: space-between; font-size: .88rem; }
.fk-range input[type='range'] {
  -webkit-appearance: none; appearance: none; width: 100%; height: 26px;
  background-color: transparent; background-repeat: no-repeat; background-position: center;
  background-size: 100% 1px; background-image: linear-gradient(var(--line), var(--line));
  cursor: pointer;
}
.fk-range input[type='range']::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 13px; height: 13px; background: var(--ink); cursor: pointer; }
.fk-range input[type='range']::-moz-range-thumb { width: 13px; height: 13px; border: 0; background: var(--ink); cursor: pointer; }

.fk-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px; padding-bottom: 20px; }
.fk-toolbar__l { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.fk-toolbar__cnt { font-size: .91rem; color: var(--mist); }
.fk-toolbar__cnt b { color: var(--ink); font-weight: 500; font-variant-numeric: tabular-nums; }
.fk-select {
  min-height: 42px; padding: 9px 34px 9px 15px;
  border: 1px solid var(--line-strong); border-radius: var(--r-sm); background-color: var(--paper-2);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236A675E' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center; background-size: 13px;
  font-size: .92rem; cursor: pointer; appearance: none;
}
.fk-filtbtn { display: inline-flex; }
@media (min-width: 1100px) { .fk-filtbtn { display: none; } }

.fk-active { display: flex; flex-wrap: wrap; gap: 7px; padding-bottom: 18px; }
.fk-active__x { display: inline-flex; align-items: center; gap: 7px; min-height: 32px; padding: 5px 7px 5px 13px; border: 1px solid var(--rose); border-radius: var(--r-pill); color: var(--rose-deep); font-size: .87rem; }
.fk-active__x button { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; color: var(--rose-deep); }
.fk-active__x button:hover { background: var(--rose-soft); }
.fk-active__x svg { width: 11px; height: 11px; }

.fk-empty { grid-column: 1 / -1; padding: 64px 24px; text-align: center; border-radius: var(--r-md); background: var(--paper-2); border: 1px solid var(--line); }
.fk-empty svg { width: 34px; height: 34px; margin: 0 auto 16px; color: var(--line); }

.fk-sheet { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-sheet); display: flex; flex-direction: column; max-height: 88vh; max-height: 88dvh; background: var(--paper); translate: 0 100%; transition: translate .3s var(--ease); }
.fk-sheet { border-radius: var(--r-lg) var(--r-lg) 0 0; }
.fk-sheet.fk-is-open { translate: 0 0; }
.fk-sheet__head { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px var(--gut); border-bottom: 1px solid var(--ink); flex: none; }
.fk-sheet__head h2 { font-size: 1.3rem; font-weight: 500; letter-spacing: -.025em; }
.fk-sheet__body { flex: 1 1 auto; overflow-y: auto; padding: 6px var(--gut) 18px; }
.fk-sheet__foot { flex: none; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1px; padding: 14px var(--gut); padding-bottom: max(14px, env(safe-area-inset-bottom)); border-top: 1px solid var(--hair); background: var(--paper-2); }
.fk-sheet__foot .fk-btn { white-space: normal; padding-inline: 14px; text-wrap: balance; }
.fk-sheet__grip { width: 36px; height: 2px; background: var(--line); margin: 9px auto 0; flex: none; }

.fk-loadmore { display: grid; justify-items: center; gap: 16px; margin-top: 40px; }
.fk-loadbar { width: min(240px, 62%); height: 1px; background: var(--line); overflow: hidden; }
.fk-loadbar span { display: block; height: 100%; background: var(--ink); }

/* --- 22. Strona produktu ------------------------------------------------ */

.fk-pdp { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px; padding-block: 14px 48px; align-items: start; }
@media (min-width: 1000px) { .fk-pdp { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 56px; } }

.fk-gal { display: grid; gap: 12px; }
@media (min-width: 640px) { .fk-gal { grid-template-columns: 84px minmax(0, 1fr); } }
.fk-gal__thumbs { display: flex; gap: 10px; overflow-x: auto; scrollbar-width: none; order: 2; }
.fk-gal__thumbs::-webkit-scrollbar { display: none; }
@media (min-width: 640px) { .fk-gal__thumbs { flex-direction: column; overflow-x: visible; order: 0; } }
.fk-gal__t { flex: none; width: 76px; height: 76px; padding: 7px; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--paper-2); cursor: pointer; transition: background-color .2s var(--ease), border-color .2s var(--ease); }
.fk-gal__t img { width: 100%; height: 100%; object-fit: contain; mix-blend-mode: multiply; }
.fk-gal__t[aria-selected='true'] { background: var(--rose-soft); border-color: var(--rose); }
/*
 * Rama galerii nie narzuca juz proporcji ani tla.
 *
 * Zostaly po jednym zdjeciu podmienianym przez miniatury: ramka 4:5 na kolorze
 * `--blush`, w której obrazek zajmowal 86% i byl mnozony przez tlo. Po przejsciu
 * na karuzele kadr ma 1:1, więc pod torem zostawal 88-pikselowy pas pudru —
 * i to w nim laadowaly „Powieksz" oraz licznik, jeden na drugim.
 *
 * `mix-blend-mode: multiply` znika z tych samych powodow, co wcześniej z kart:
 * mnozy CALY obrazek, nie samo tlo, więc bialy fotel i chromowana noga traca
 * jasnosc. Tlo toru jest bialoe, czyli tego samego koloru co tlo zdjec.
 */
.fk-gal__main { position: relative; border-radius: var(--r-lg); overflow: hidden; }
.fk-gal__kadr img { mix-blend-mode: normal; }
.fk-gal__t img { mix-blend-mode: normal; }
.fk-gal__zoom { position: absolute; right: 14px; bottom: 14px; display: flex; align-items: center; gap: 7px; min-height: 34px; border-radius: var(--r-pill); padding: 8px 13px; background: var(--paper); border: 1px solid var(--line); font-size: .85rem; }
.fk-gal__zoom svg { width: 13px; height: 13px; }
.fk-gal__flags { position: absolute; top: 14px; left: 14px; display: flex; flex-direction: column; align-items: flex-start; gap: 7px; }

.fk-buy { display: grid; gap: 18px; }
.fk-buy__brand { display: flex; align-items: center; gap: 13px; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); }
.fk-buy__title { font-size: clamp(1.6rem, 1.25rem + 1.5vw, 2.5rem); font-weight: 500; letter-spacing: -.03em; line-height: 1.08; }
.fk-buy__rate { display: flex; align-items: center; gap: 10px; font-size: .89rem; color: var(--mist); }
.fk-buy__stars { display: flex; gap: 2px; color: var(--rose); }
.fk-buy__stars svg { width: 13px; height: 13px; }

.fk-buy__pricebox { display: grid; gap: 7px; padding: 20px 0; border-block: 1px solid var(--ink); }
.fk-buy__pricerow { display: flex; align-items: baseline; flex-wrap: wrap; gap: 13px; }
.fk-buy__now { font-size: clamp(1.9rem, 1.5rem + 1.4vw, 2.6rem); font-weight: 500; letter-spacing: -.035em; line-height: 1; }
.fk-buy__old { font-size: 1rem; color: var(--mist); text-decoration: line-through; }
.fk-buy__alt { font-size: .92rem; color: var(--mist); }
.fk-buy__omni { font-size: .87rem; color: var(--mist); padding-top: 8px; }
.fk-buy__save { display: inline-flex; align-items: center; gap: 7px; align-self: flex-start; padding: 4px 10px; background: var(--ink); color: var(--paper); font-size: .82rem; font-weight: 500; }

.fk-buy__lease { display: flex; align-items: center; gap: 15px; padding: 16px 18px; border-radius: var(--r-md); background: var(--rose); color: var(--on-rose); }
.fk-buy__lease .fk-buy__leaseIc { flex: none; color: rgba(255,255,255,.85); }
.fk-buy__lease .fk-buy__leaseIc svg { width: 21px; height: 21px; }
.fk-buy__lease .fk-buy__leaseT { font-size: .94rem; line-height: 1.5; }
.fk-buy__lease .fk-buy__leaseT b { font-size: 1.14rem; font-weight: 600; }
.fk-buy__lease .fk-buy__leaseA { margin-left: auto; flex: none; font-size: .88rem; color: #FFFFFF; border-bottom: 1px solid rgba(255,255,255,.6); padding-bottom: 2px; text-decoration: none; white-space: nowrap; }

.fk-buy__stock { display: flex; align-items: center; gap: 11px; font-size: .94rem; }
.fk-buy__stock .fk-buy__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--stock); flex: none; }
.fk-buy__stock b { color: var(--stock); font-weight: 600; }
.fk-buy__ship { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 12px; align-items: start; padding: 15px 17px; border-radius: var(--r-md); background: var(--blush); font-size: .93rem; line-height: 1.55; color: var(--ink-soft); }
.fk-buy__ship svg { width: 17px; height: 17px; margin-top: 3px; color: var(--rose); }
.fk-buy__ship b { font-weight: 600; color: var(--ink); }

.fk-var { display: grid; gap: 11px; }
.fk-var__lab { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); }
.fk-var__lab b { color: var(--ink); }
.fk-var__opts { display: flex; flex-wrap: wrap; gap: 9px; }
.fk-var__o { position: relative; width: 42px; height: 42px; border: 1px solid var(--line-strong); border-radius: 50%; cursor: pointer; transition: border-color .2s var(--ease); }
.fk-var__o:hover { border-color: var(--ink); }
.fk-var__o[aria-pressed='true'] { border-color: var(--ink); box-shadow: inset 0 0 0 2px var(--paper); }
.fk-var__o .fk-var__sw { position: absolute; inset: 4px; border-radius: 50%; }

.fk-buyrow { display: flex; flex-wrap: wrap; gap: 10px; }
.fk-qty { display: flex; align-items: stretch; min-height: 54px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); overflow: hidden; flex: none; }
.fk-qty button { width: 44px; display: grid; place-items: center; color: var(--ink-soft); transition: background-color .18s var(--ease); }
.fk-qty button:hover { background: var(--paper-2); }
.fk-qty svg { width: 14px; height: 14px; }
.fk-qty input { width: 50px; min-width: 0; border: 0; border-inline: 1px solid var(--line); text-align: center; font-size: .98rem; font-variant-numeric: tabular-nums; background: none; -moz-appearance: textfield; }
.fk-qty input::-webkit-outer-spin-button, .fk-qty input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.fk-buyrow .fk-btn--cart { flex: 1 1 220px; min-height: 54px; }

.fk-usps { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
.fk-usps__i { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 11px; padding: 16px 14px 16px 0; border-top: 1px solid var(--hair); font-size: .89rem; line-height: 1.5; color: var(--mist); }
.fk-usps__i:nth-child(2n) { padding-left: 16px; border-left: 1px solid var(--hair); }
.fk-usps__i svg { width: 16px; height: 16px; color: var(--rose); margin-top: 3px; }
.fk-usps__i b { display: block; font-size: .92rem; font-weight: 500; color: var(--ink); margin-bottom: 2px; }

.fk-bundle { padding: 22px; border-radius: var(--r-md); background: var(--blush); }
.fk-bundle__h { display: flex; align-items: center; gap: 9px; font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--rose); }
.fk-bundle__h svg { width: 15px; height: 15px; }
.fk-bundle__list { display: grid; gap: 12px; margin-top: 18px; }
.fk-bundle__i { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; gap: 13px; align-items: center; }
.fk-bundle__i img { width: 44px; height: 44px; object-fit: contain; border-radius: var(--r-sm); background: var(--paper-2); padding: 4px; mix-blend-mode: multiply; }
.fk-bundle__i .fk-bundle__n { font-size: .91rem; line-height: 1.4; }
.fk-bundle__i .fk-bundle__p { font-size: .91rem; white-space: nowrap; }
.fk-bundle__foot { display: flex; align-items: center; justify-content: space-between; gap: 13px; flex-wrap: wrap; margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--ink); }
.fk-bundle__tot { font-size: .89rem; color: var(--mist); }
.fk-bundle__tot b { font-size: 1.24rem; font-weight: 500; letter-spacing: -.03em; color: var(--ink); }
.fk-bundle__tot .fk-bundle__old { text-decoration: line-through; }

.fk-stickybuy { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-sticky); background: var(--ink); color: var(--paper); translate: 0 110%; transition: translate .3s var(--ease); }
.fk-stickybuy.fk-is-on { translate: 0 0; }
.fk-stickybuy__in { display: flex; align-items: center; gap: 16px; padding-block: 12px; }
.fk-stickybuy__img { width: 44px; height: 44px; object-fit: contain; flex: none; background: var(--paper-2); padding: 3px; }
.fk-stickybuy__t { flex: 1 1 auto; min-width: 0; }
.fk-stickybuy__n { font-size: .91rem; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
/* Pasek zakupu jest szklem: nad jasna treścią --mist-on-dark spada do 4,2:1 */
.fk-stickybuy__p { font-size: .87rem; color: var(--mist-on-dark); }
.fk-stickybuy__p b { color: var(--paper); font-size: 1.08rem; font-weight: 500; letter-spacing: -.025em; }
@media (max-width: 979px) {
  .fk-stickybuy { bottom: calc(var(--tabbar-h) + env(safe-area-inset-bottom)); }
  .fk-stickybuy__img, .fk-stickybuy__n { display: none; }
  .fk-stickybuy__in { padding-block: 9px; }
  .fk-stickybuy .fk-btn { flex: 1 1 auto; }
}

.fk-ptabs { border-bottom: 1px solid var(--hair); }
.fk-ptabs__list { display: flex; gap: 0; overflow-x: auto; scrollbar-width: none; margin-inline: calc(var(--gut) * -1); padding-inline: var(--gut); }
.fk-ptabs__list::-webkit-scrollbar { display: none; }
.fk-ptab { min-height: 52px; padding: 16px 0; margin-right: 28px; font-size: .97rem; font-weight: 500; letter-spacing: -.015em; line-height: 1.2; white-space: nowrap; color: var(--mist); border-bottom: 2px solid transparent; margin-bottom: -1px; transition: color .22s var(--ease), border-color .22s var(--ease); }
.fk-ptab:hover { color: var(--ink); }
.fk-ptab[aria-selected='true'] { color: var(--ink); border-bottom-color: var(--ink); }
.fk-ppanel { padding-block: 38px; }

.fk-proza { max-width: 62ch; font-family: var(--font-proza); }
.fk-proza h3 { font-family: var(--font-display); font-size: clamp(1.18rem, 1.04rem + .55vw, 1.5rem); font-weight: 600; letter-spacing: -.008em; line-height: 1.3; margin-top: 30px; margin-bottom: 12px; }
.fk-proza h3:first-child { margin-top: 0; }
.fk-proza p { font-size: 1.06rem; font-weight: 400; line-height: 1.72; color: var(--ink-soft); overflow-wrap: break-word; }
.fk-proza p + p { margin-top: 14px; }
.fk-proza ul { display: grid; gap: 9px; margin-top: 14px; }
/* Pozycja listy NIE jest siatką.

   Była: `grid-template-columns: 16px minmax(0,1fr)` — kreska z `::before`
   zajmowała pierwszą komórkę, treść drugą. Działało, dopóki `<li>` miało
   dokładnie JEDNO dziecko. Treść z edytora ma ich więcej:
   `<strong>Etykieta</strong> — opis...` to dwa elementy siatki, więc tekst
   po pogrubieniu spadał do NASTĘPNEGO wiersza, prosto w kolumnę szerokości
   16 px. Zmierzone na wgranym wpisie: pozycja listy miała 325 px wysokości
   i łamała się po jednym słowie w linii.

   Znacznik wychodzi więc z układu (`position: absolute`), a `<li>` zostaje
   zwykłym blokiem — wtedy liczba dzieci przestaje mieć znaczenie. */
.fk-proza ul li {
  position: relative;
  padding-left: 28px;
  font-size: 1.02rem;
  font-weight: 400;
  line-height: 1.6;
  color: var(--ink-soft);
}
.fk-proza ul li::before {
  content: '';
  position: absolute;
  left: 0;
  /* Pół wiersza w dół — kreska trafia w oś pierwszej linii tekstu,
     a nie w jej górną krawędź. */
  top: .78em;
  width: 14px;
  height: 1px;
  background: var(--rose);
}

.fk-fit { display: grid; grid-template-columns: minmax(0, 1fr); gap: 24px; padding-top: 4px; }
@media (min-width: 800px) { .fk-fit { grid-template-columns: minmax(0, 1fr) 260px; gap: 40px; align-items: center; } }
.fk-fit__dims { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin-top: 20px; }
.fk-fit__d { border-top: 1px solid var(--ink); padding-top: 11px; }
.fk-fit__d .fk-fit__dv { display: block; font-size: clamp(1.4rem, 1.2rem + .8vw, 1.8rem); font-weight: 500; letter-spacing: -.03em; line-height: 1; }
.fk-fit__d .fk-fit__dk { display: block; font-size: .85rem; color: var(--mist); margin-top: 6px; }
.fk-fit__viz { position: relative; aspect-ratio: 1 / 1; border: 1px solid var(--line); border-radius: var(--r-md); display: grid; place-items: center; background: var(--paper-2); }
.fk-fit__viz .fk-fit__box { width: 52%; height: 52%; border-radius: var(--r-sm); background: var(--rose); display: grid; place-items: center; color: var(--on-rose); font-size: .82rem; font-weight: 500; text-align: center; padding: 6px; line-height: 1.4; }
.fk-fit__viz .fk-fit__cap { position: absolute; bottom: 9px; left: 50%; translate: -50% 0; font-size: .81rem; color: var(--mist); white-space: nowrap; }

.fk-rev { display: grid; gap: 0; }
.fk-rev__i { padding: 24px 0; border-top: 1px solid var(--hair); }
.fk-rev__who { display: flex; align-items: center; gap: 13px; }
.fk-rev__who div span { display: block; font-size: .87rem; color: var(--mist); margin-top: 2px; }
.fk-rev__av { display: grid; place-items: center; width: 40px; height: 40px; flex: none; background: var(--rose-soft); color: var(--rose-deep); font-size: .89rem; font-weight: 600; }
.fk-rev__nm { font-size: .96rem; font-weight: 500; line-height: 1.2; }
.fk-rev__st { display: flex; gap: 2px; color: var(--rose); margin-top: 14px; }
.fk-rev__st svg { width: 13px; height: 13px; }
.fk-rev__tx { font-family: var(--font-proza); font-size: 1.02rem; font-weight: 400; line-height: 1.7; color: var(--ink-soft); margin-top: 11px; }
.fk-rev__ver { display: inline-flex; align-items: center; gap: 7px; margin-top: 12px; font-size: .85rem; color: var(--stock); }
.fk-rev__ver svg { width: 13px; height: 13px; }

/* --- 23. Reveal / toast ------------------------------------------------- */

.fk-anim .fk-reveal { opacity: 0; translate: 0 16px; transition: opacity .6s var(--ease), translate .6s var(--ease); }
.fk-anim .fk-reveal.fk-is-in { opacity: 1; translate: 0 0; }
@media (prefers-reduced-motion: reduce) { .fk-anim .fk-reveal { opacity: 1; translate: 0 0; } }

.fk-toast { position: fixed; left: 50%; bottom: 24px; z-index: var(--z-toast); translate: -50% 130%; display: flex; align-items: center; gap: 13px; max-width: min(430px, calc(100vw - 32px)); padding: 15px 19px; border-radius: var(--r-md); background: var(--ink); color: var(--paper); font-size: .94rem; line-height: 1.45; transition: translate .32s var(--ease); }
.fk-toast.fk-is-on { translate: -50% 0; }
.fk-toast svg { width: 18px; height: 18px; flex: none; color: var(--mist-on-dark); }
@media (max-width: 979px) { .fk-toast { bottom: calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 16px); } }

/* --- 24. Dotyk --------------------------------------------------------- */

@media (pointer: coarse) {
  .fk-card__fav { width: 44px; height: 44px; }
  .fk-btn.fk-btn--sm { min-height: 44px; }
  .fk-link-arrow { min-height: 44px; align-items: center; }
  .fk-archead__more { display: inline-flex; align-items: center; min-height: 44px; }
  .fk-side__opt { min-height: 44px; }
  .fk-side__opt input { width: 19px; height: 19px; }
  .fk-vat__btn { min-height: 40px; padding: 10px 15px; }
  .fk-geo__dl dd a { display: inline-flex; align-items: center; min-height: 44px; }
}

@media (max-width: 979px) {
  .fk-vat__btn { min-height: 40px; padding: 10px 15px; }
  .fk-geo__dl dd a { display: inline-flex; align-items: center; min-height: 44px; }
  /* Emulacja mobilna nie zawsze raportuje pointer:coarse — domykamy progiem szerokosci */
  .fk-head__logo { min-height: 44px; align-items: center; }
  .fk-select { min-height: 44px; }
  .fk-var__o { width: 44px; height: 44px; }
  .fk-card__fav { width: 44px; height: 44px; }
  .fk-btn.fk-btn--sm { min-height: 44px; }
  .fk-link-arrow { min-height: 44px; align-items: center; }
  .fk-archead__more { display: inline-flex; align-items: center; min-height: 44px; }
  .fk-side__opt { min-height: 44px; }
  /* Cztery ikony akcji sciskaly logotyp — reszta jest w dolnym pasku */
  .fk-head__acts .fk-iconbtn:not(:last-child) { display: none; }
  .fk-head__in { gap: 14px; }
  .fk-gal__t { width: 62px; height: 62px; }
}

/* --- 25. Karta produktu: jedna dluga strona ze sticky spisem treści -----
   Zakładki chowały 80% treści przed użytkownikiem i przed wyszukiwarka.
   Uklad "one long page + sticky TOC" to obecny standard dla produktów
   wysokiego zaangazowania. */

.fk-doc { display: grid; grid-template-columns: minmax(0, 1fr); gap: 34px; padding-block: 40px 10px; align-items: start; }
@media (min-width: 1000px) { .fk-doc { grid-template-columns: 250px minmax(0, 1fr); gap: 60px; } }

.fk-toc { display: none; }
@media (min-width: 1000px) {
  .fk-toc { display: block; position: sticky; top: calc(var(--head-h) + 24px); }
}
.fk-toc__h { font-size: .79rem; font-weight: 600; letter-spacing: .13em; text-transform: uppercase; color: var(--mist); padding-bottom: 11px; border-bottom: 1px solid var(--ink); }
.fk-toc__list { display: grid; margin-top: 4px; }
.fk-toc__a {
  display: block; padding: 10px 0 10px 14px;
  border-left: 2px solid transparent;
  font-size: .95rem; color: var(--mist); text-decoration: none;
  transition: color .2s var(--ease), border-color .2s var(--ease);
}
.fk-toc__a:hover { color: var(--ink); }
.fk-toc__a.fk-is-here { color: var(--ink); border-left-color: var(--rose); font-weight: 500; }

/* Pasek spisu na waskich ekranach — przewijany poziomo, przyklejony pod naglowkiem */
.fk-toc-bar { position: sticky; top: var(--head-h); z-index: 10; background: var(--paper); border-bottom: 1px solid var(--hair); }
@media (min-width: 1000px) { .fk-toc-bar { display: none; } }
.fk-toc-bar__list { display: flex; gap: 0; overflow-x: auto; scrollbar-width: none; margin-inline: calc(var(--gut) * -1); padding-inline: var(--gut); }
.fk-toc-bar__list::-webkit-scrollbar { display: none; }
.fk-toc-bar__a {
  display: flex; align-items: center; min-height: 48px;
  padding: 14px 0; margin-right: 24px;
  font-size: .94rem; font-weight: 500; white-space: nowrap;
  color: var(--mist); text-decoration: none;
  border-bottom: 2px solid transparent; margin-bottom: -1px;
  transition: color .2s var(--ease), border-color .2s var(--ease);
}
.fk-toc-bar__a.fk-is-here { color: var(--ink); border-bottom-color: var(--ink); }

.fk-doc__sec { padding-bottom: 44px; margin-bottom: 44px; border-bottom: 1px solid var(--hair); scroll-margin-top: calc(var(--head-h) + 72px); }
.fk-doc__sec:last-child { border-bottom: 0; margin-bottom: 0; }
.fk-doc__h { font-size: clamp(1.3rem, 1.1rem + .8vw, 1.75rem); font-weight: 500; letter-spacing: -.025em; line-height: 1.15; margin-bottom: 20px; }

/* --- 26. Szkło — wyłącznie powierzchnie unoszące się nad treścią --------
   Nie kafle i nie karty (pod nimi nie ma czego rozmywać). Tylko to, pod czym
   realnie przewija się zawartość: nagłówek, paski, nakładki. */

:root {
  --szklo-jasne:  rgba(248, 250, 251, .86);
  --szklo-panel:  rgba(255, 255, 255, .88);
  --szklo-ciemne: rgba(17, 22, 27, .86);
  --szklo-blur:   saturate(1.5) blur(18px);
}

.fk-head,
.fk-tabbar,
.fk-toc-bar {
  background: var(--szklo-jasne);
  -webkit-backdrop-filter: var(--szklo-blur);
  backdrop-filter: var(--szklo-blur);
}
.fk-drawer, .fk-sheet {
  background: var(--szklo-panel);
  -webkit-backdrop-filter: var(--szklo-blur);
  backdrop-filter: var(--szklo-blur);
}
.fk-stickybuy {
  background: var(--szklo-ciemne);
  -webkit-backdrop-filter: var(--szklo-blur);
  backdrop-filter: var(--szklo-blur);
}
.fk-scrim {
  background: rgba(31, 27, 26, .42);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}
/* Pigułka zoomu leży bezpośrednio na zdjęciu produktu — tu rozmycie ma sens */
.fk-gal__zoom {
  background: rgba(255, 255, 255, .68);
  border-color: var(--hair);
  -webkit-backdrop-filter: saturate(1.4) blur(12px);
  backdrop-filter: saturate(1.4) blur(12px);
}

/* Pod półprzezroczystym nagłówkiem drobny tekst traci zapas kontrastu
   (na ciemnej sekcji przewijającej się pod spodem --mist spada do 2,7:1).
   Dlatego wewnątrz szkła tekst pomocniczy idzie o stopień ciemniej. */
.fk-head .fk-search__input::placeholder { color: var(--ink-soft); }
/* Pasek mobilny tez jest szklem — etykiety w --mist spadaly do 3,3:1
   nad ciemna sekcja przewijajaca sie pod spodem. */
.fk-tabbar .fk-tabbar__i { color: var(--ink-soft); }
.fk-head .fk-nav__link--hot,
.fk-toc-bar .fk-toc-bar__a.fk-is-here { color: var(--rose-deep); }

/* Brak wsparcia dla backdrop-filter = pełne krycie, nigdy przezroczysty pasek */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .fk-head, .fk-tabbar, .fk-toc-bar { background: var(--paper); }
  .fk-drawer, .fk-sheet { background: var(--paper); }
  .fk-stickybuy { background: var(--ink); }
  .fk-scrim { background: rgba(13, 18, 23, .62); }
  .fk-gal__zoom { background: var(--paper); }
}

/* Użytkownik, który prosi o mniej przezroczystości, dostaje pełne krycie */
@media (prefers-reduced-transparency: reduce) {
  .fk-head, .fk-tabbar, .fk-toc-bar, .fk-drawer, .fk-sheet, .fk-gal__zoom {
    background: var(--paper);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
  .fk-stickybuy { background: var(--ink); -webkit-backdrop-filter: none; backdrop-filter: none; }
  .fk-scrim { background: rgba(13, 18, 23, .66); -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* --- 27. Loader --------------------------------------------------------
   Zasłania stronę, więc MUSI umieć zniknąć bez JS-a: chowa go animacja CSS
   z `forwards`, a skrypt tylko przyspiesza to po zdarzeniu `load`. */

.fk-loader {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: grid;
  place-items: center;
  background: var(--paper);
  animation: fk-loader-out .45s var(--ease) 1.9s forwards;
}
.fk-loader.fk-is-done { animation: fk-loader-out .45s var(--ease) forwards; }

@keyframes fk-loader-out {
  to { opacity: 0; visibility: hidden; pointer-events: none; }
}

.fk-loader__in { display: grid; justify-items: center; gap: 22px; width: min(280px, 62vw); }
.fk-loader__mark {
  font-size: .79rem;
  font-weight: 600;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--mist);
}
.fk-loader__bar { width: 100%; height: 1px; background: var(--line); overflow: hidden; }
.fk-loader__bar span {
  display: block;
  height: 100%;
  width: 0;
  background: var(--ink);
  animation: fk-loader-bar 1.9s var(--ease) forwards;
}
.fk-loader.fk-is-done .fk-loader__bar span { width: 100%; transition: width .25s var(--ease); animation: none; }

@keyframes fk-loader-bar {
  0%   { width: 0; }
  55%  { width: 62%; }
  100% { width: 92%; }
}

/* Bez JS-a i przy zredukowanym ruchu loader nie może zablokować strony */
@media (prefers-reduced-motion: reduce) {
  .fk-loader { animation: none; opacity: 0; visibility: hidden; pointer-events: none; }
}

/* --- 28. Szkielety podczas filtrowania --------------------------------- */

.fk-skel { background: var(--paper); }
.fk-skel__media { aspect-ratio: 4 / 5; background: var(--blush); }
.fk-skel__body { display: grid; gap: 9px; padding: 18px 18px 20px; }
.fk-skel__l { height: 10px; border-radius: var(--r-pill); background: var(--blush); }
.fk-skel__l--s { width: 42%; }
.fk-skel__l--m { width: 82%; }
.fk-skel__l--p { width: 54%; height: 16px; margin-top: 6px; }

.fk-skel__media, .fk-skel__l {
  background-image: linear-gradient(100deg, transparent 20%, rgba(13,18,23,.055) 45%, transparent 70%);
  background-size: 220% 100%;
  background-repeat: no-repeat;
  animation: fk-shimmer 1.15s linear infinite;
}
@keyframes fk-shimmer {
  from { background-position: 180% 0; }
  to   { background-position: -80% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .fk-skel__media, .fk-skel__l { animation: none; }
}

/* --- 29. Efekty -------------------------------------------------------- */

/*
 * USUNIETO STAD TRZY BLOKI I WARTO WIEDZIEC, DLACZEGO.
 *
 * 1. Poswiata `.fk-hero::after` / `.fk-band::after` chronila czytelnosc tekstu
 *    LEZACEGO NA ZDJECIU. Zdjęcie siedzi dzis w ramce obok tekstu, więc nie
 *    ma czego przykrywac — a poswiata byla ostatnim miejscem z cieplym
 *    mlekiem starej palety.
 *
 * 2. Zapas 118% wysokości pod paralakse. Paralaksy nie ma: żaden skrypt nie
 *    ustawial `translate` na tych obrazach. Sam zapas robil za to realna
 *    szkode — to on kazal przeglądarce skalowac panorame W GORE.
 *
 * 3. Wejscia `.fk-anim`: pojawianie sie zdjec i kaskada `[data-stagger]`.
 *    Klasa `.fk-anim` nie pada w zadnym szablonie ani skrypcie w calym
 *    wdrozeniu, a na zywej stronie `.fk-anim`, `.fk-reveal`, `[data-stagger]`
 *    i `.fk-is-in` maja po ZERO wystapien. Te reguly nie mogly sie wykonac.
 */

/* Podniesienie glownych przycisków — miekko, bez skoku */
.fk-btn.fk-btn--rose:hover, .fk-btn.fk-btn--dark:hover { box-shadow: var(--cien); }


/* Miniatura galerii i próbka koloru reaguja na kursor */
.fk-gal__t:hover { border-color: var(--rose); }
.fk-var__o:hover { scale: 1.06; }
.fk-var__o { transition: border-color .2s var(--ease), scale .2s var(--ease); }

@media (prefers-reduced-motion: reduce) {
  .fk-hero__znak, .fk-kat, .fk-card { transition: none; }
}

/* --- 30. Hero i pasy na telefonie -------------------------------------- */

/* Ramki scen sa dzis zwyklymi blokami w biegu siatki — zadnego pozycjonowania
   absolutnego, więc nic nie zapada sie do zerowej wysokosci. */

/*
 * Ta sekcja opisywala zdjęcie rozciagniete na cała sekcje i trzymane
 * w ryzach marginesem wewnetrznym. Po przejsciu na sceny w ramce zostalo
 * z niej kilka regul, które juz tylko przeszkadzaly — zmierzone w ramce
 * o szerokosci 390 px:
 *
 *  • `padding: 12px var(--gut) 0` na ramce sceny wcinal zdjęcie DRUGI RAZ
 *    (raz robi to juz `.fk-wrap`), więc obraz mial 295 px zamiast 335;
 *  • `aspect-ratio: 3 / 2` bilo ustawienie 4:3 z reguly podstawowej;
 *  • `border-radius` na samym obrazie dublowal zaokraglenie ramki;
 *  • `order` na `.fk-hero__facts` i `.fk-hero__rule` wskazywal elementy,
 *    których nie ma juz w tym kontenerze (pasek faktow wyszedl z kolumny
 *    tekstu pod cała siatke), a `flex-direction` na `.fk-band` — sekcje,
 *    która nie jest juz kontenerem elastycznym.
 */
@media (max-width: 899px) {
  .fk-hero__grid  { padding-block: 20px 30px; }
  .fk-band__grid  { padding-block: 26px 38px; }
  .fk-hero__mark  { margin-bottom: 12px; }
  .fk-hero__box p.fk-lead { margin-top: 14px; font-size: 1.05rem; line-height: 1.6; }
  .fk-picks       { margin-top: 20px; }
  .fk-pick        { padding: 16px 0; gap: 4px; }
  .fk-hero__f .fk-hero__fk { font-size: .88rem; margin-top: 5px; }
}

/* Waski ekran: liczby w dwoch kolumnach, trzecia na calej szerokosci.
   Bez pionowych kresek potrzebne sa poziome — inaczej trzeci fakt wklei sie
   w poprzedni wiersz. */
@media (max-width: 619px) {
  .fk-hero__facts { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 18px; }
  .fk-hero__f:nth-child(3) { grid-column: 1 / -1; border-top: 1px solid var(--hair); margin-top: 2px; }
}

/* --- 31. Miniaturki w kreatorze ---------------------------------------- */

.fk-conf__row { grid-template-columns: 54px minmax(0, 1fr) auto; gap: 14px; align-items: center; }
.fk-conf__rimg {
  width: 54px; height: 54px;
  object-fit: contain;
  padding: 5px;
  background: var(--blush);
  border-radius: var(--r-sm);
  mix-blend-mode: multiply;
}
/* Na wąskim ekranie cena schodzi do drugiego rzedu. Trzy kolumny zostawialy
   nazwie 140 px, więc łamała sie na cztery linie i wiersz rosl do 147 px. */
@media (max-width: 560px) {
  .fk-conf__row { grid-template-columns: 44px minmax(0, 1fr);
    grid-template-areas: "img nazwa" "img cena"; column-gap: 11px; row-gap: 2px; align-items: start; }
  .fk-conf__rimg { grid-area: img; width: 44px; height: 44px; padding: 4px; align-self: start; }
  .fk-conf__rn { grid-area: nazwa; }
  .fk-conf__rp { grid-area: cena; justify-self: end; }
}

/* --- 32. Zdjęcie przy długim tekście ----------------------------------- */

/* Wprowadzenie do sekcji: treść i kadr obok siebie. Zdjęcie nie jest ozdoba —
   przerywa sciane tekstu tam, gdzie czytelnik zaczyna odpadac. */
.fk-txtimg { display: grid; grid-template-columns: minmax(0, 1fr); gap: 28px; align-items: center; margin-bottom: 44px; }
@media (min-width: 900px) { .fk-txtimg { grid-template-columns: minmax(0, 1fr) minmax(0, .82fr); gap: 56px; } }
.fk-txtimg--rev .fk-txtimg__media { order: -1; }
.fk-txtimg .fk-sec-head { margin-bottom: 0; }
.fk-txtimg__media { border-radius: var(--r-lg); overflow: hidden; background: var(--blush); }
/* max-height, bo w jednej kolumnie 4:3 na szerokosci 860 px daje 645 px wysokości
   — płyta zdjęcia zamiast ilustracji. Powyżej progu kolumna sama ogranicza szerokosc. */
.fk-txtimg__media img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; max-height: 380px; object-fit: cover; object-position: 50% 42%; }
@media (min-width: 900px) { .fk-txtimg__media img { aspect-ratio: 5 / 4; max-height: none; } }

/* Wstawka w prozie — pelna szerokosc kolumny tekstu, z podpisem */
.fk-figura { margin: 28px 0; }
.fk-figura img { display: block; width: 100%; height: auto; border-radius: var(--r-md); }
.fk-figura figcaption { margin-top: 11px; font-family: var(--font-ui); font-size: .89rem; font-weight: 400; color: var(--mist); line-height: 1.5; }

/* Kolumna ze zdjeciem przy bloku tekstowym w archiwum */
.fk-txtside { display: grid; grid-template-columns: minmax(0, 1fr); gap: 30px; align-items: start; }
/* Prog 1240 px, a nie 1000: w archiwum ten blok siedzi juz w kolumnie obok
   filtrow (250 px + 48 px), więc wcześniej obie kolumny robia sie za waskie. */
@media (min-width: 1240px) { .fk-txtside { grid-template-columns: minmax(0, 1fr) 260px; gap: 44px; } }
.fk-txtside__media { border-radius: var(--r-lg); overflow: hidden; background: var(--blush); }
@media (min-width: 1240px) { .fk-txtside__media { position: sticky; top: calc(var(--head-h) + 20px); } }
/* Pionowy kadr 4:5 tylko wtedy, gdy siedzi w waskiej kolumnie obok tekstu.
   W jednej kolumnie rozpychal sie do 880x1100 px — stad poziomy kadr i limit. */
.fk-txtside__media img { display: block; width: 100%; height: auto; aspect-ratio: 3 / 2; max-height: 400px; object-fit: cover; object-position: 50% 45%; }
@media (min-width: 1240px) { .fk-txtside__media img { aspect-ratio: 4 / 5; max-height: none; } }

/* =========================================================================
   32b. Czytelnosc: kontrasty, minimalne rozmiary tekstu, cele dotykowe

   Wszystkie ponizsze reguly powstaly z pomiaru na produkcji przy 375 px,
   nie z oka. Wartości kontrastu liczone wzgledem faktycznego tla przodka.
   ========================================================================= */

/* Tytul karty produktu to <h3> z odnosnikiem w srodku. Naglówek juz
   dziedziczy kolor, ale <a> ma własny kolor z motywu nadrzednego — stad
   jawne `inherit`. Roz zostaje na najechaniu, gdzie niesie znaczenie. */
.fk-card__title a { color: inherit; text-decoration: none; }
.fk-card__title a:hover { color: var(--rose); }

/* Jasny panel WEWNATRZ ciemnej sekcji.

   `.fk-ondark p` ma wage (0,1,1) i siega do każdego akapitu w sekcji —
   także do tych na bialym panelu podsumowania kreatora. Efekt zmierzony:
   tekst #ADA5A2 na bialym tle, kontrast **2,42**. Regula ponizej ma (0,2,1)
   i przywraca kolory dla jasnego tla. */
.fk-ondark .fk-conf__out p,
.fk-ondark .fk-conf__out .fk-lead,
.fk-ondark .fk-conf__out .fk-note,
.fk-ondark .fk-conf__out .fk-eyebrow,
.fk-ondark .fk-conf__out .fk-conf__sk { color: var(--mist); }
.fk-ondark .fk-conf__out a { color: var(--ink); }
.fk-ondark .fk-conf__out a:hover { color: var(--rose); }

@media (max-width: 699px) {

  /* Podloga rozmiaru dla etykiet wersalikowych. Projekt uzywa .69rem (11 px),
     co na monitorze czyta sie jak subtelnosc, a na telefonie jak problem.
     Zmierzone: 65 elementow ponizej 12 px. */
  .fk-eyebrow,
  .fk-secno__n,
  .fk-secno__t,
  .fk-foot h2,
  .fk-side__box h2,
  .fk-cart__head h2 { font-size: .84rem; }

  .fk-hero__fk { font-size: .89rem; }
  .fk-hero__mark { font-size: .85rem; }

  /* Cele dotykowe. Odnosniki w stopce mialy 18 px wysokości — ponizej
     każdego progu dostepnosci. Wysokość dokladamy wypelnieniem, żeby nie
     ruszac odstepow między kolumnami. */
  .fk-foot__col a,
  .fk-foot__nap a { display: inline-flex; align-items: center; min-height: 40px; }
  .fk-conf__rn a { display: inline-block; padding-block: 6px; }
}

/* --- Pas marek ---------------------------------------------------------
   Bez plikow logo pokazujemy nazwe jako sygnature typograficzna. Pas
   rownych napisow czyta sie lepiej niż pas nierownych JPG-ow, a gdy
   sklep wgra miniatury do terminow, obrazy pojawia sie same. */
.fk-marki { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 168px), 1fr)); gap: 1px; margin-top: 34px; background: var(--line); border: 1px solid var(--line); }
.fk-marka { position: relative; display: grid; place-items: center; gap: 6px; min-height: 108px; padding: 20px 16px; background: var(--paper); text-decoration: none; color: var(--ink); transition: background-color .2s var(--ease); }
.fk-marka:hover { background: var(--blush); }
.fk-marka__logo { max-width: 132px; max-height: 46px; width: auto; height: auto; object-fit: contain; mix-blend-mode: multiply; }
.fk-marka__nazwa { font-size: 1.04rem; font-weight: 500; letter-spacing: -.02em; text-align: center; line-height: 1.25; }
.fk-marka__ile { font-size: .81rem; color: var(--mist); font-variant-numeric: tabular-nums; }
@media (max-width: 599px) { .fk-marka { min-height: 88px; padding: 16px 12px; } .fk-marka__nazwa { font-size: .96rem; } }


/* --- Przełącznik widoku na archiwum -------------------------------------
   Kafelki albo lista. Lista daje więcej tekstu na ekran i lepiej się
   porównuje przy sprzęcie, gdzie liczy się opis, a nie zdjęcie. */
/* Przełącznik widoku z etykietą. Dwie ikony obok siebie nie mówią,
   która jest którą, dopóki się ich nie kliknęło.

   `align-self: center` i `align-items: stretch` nie są kosmetyką. Pasek
   narzędzi to wiersz flex, który domyślnie ROZCIĄGA dzieci do swojej
   wysokości. Zmierzone: kontener 59 px przy przyciskach 44 px — tło
   kontenera wychodziło wtedy górą i dołem jako gruba brązowa ramka.

   Tło kontenera zamienione na zwykłą obwódkę w kolorze linii; kreska
   między przyciskami idzie z `border-left` drugiego, a nie z prześwitu. */
.fk-widok {
  display: inline-flex;
  align-self: center;
  align-items: stretch;
  flex: none;
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--paper-2);
  overflow: hidden;
}
.fk-widok__b {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 42px;
  padding: 0 15px;
  background: none;
  color: var(--mist);
  font-size: .89rem;
  font-weight: 500;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color .18s var(--ease), color .18s var(--ease);
}
.fk-widok__b + .fk-widok__b { border-left: 1px solid var(--line); }
.fk-widok__b:hover { background: var(--blush); color: var(--ink); }
.fk-widok__b[aria-pressed="true"] { background: var(--ink); color: var(--paper); }
.fk-widok__b[aria-pressed="true"] + .fk-widok__b,
.fk-widok__b:has(+ .fk-widok__b[aria-pressed="true"]) { border-left-color: var(--ink); }
.fk-widok__b[aria-pressed="true"]:hover { background: var(--ink); color: var(--paper); }
.fk-widok__b svg { width: 16px; height: 16px; flex: none; }
@media (max-width: 479px) { .fk-widok__b span { display: none; } .fk-widok__b { padding: 0 15px; } }

/* Reszta paska w tej samej osi i o tej samej wysokości co przełącznik —
   select sortowania miał 39 px przy przyciskach 44 i wisiał nierówno. */
.fk-toolbar__l { align-items: center; }
.fk-toolbar .woocommerce-ordering select { min-height: 44px; }

/* --- Widok listy --------------------------------------------------------
   Wiersz zamiast kafelka: zdjęcie w stałej kolumnie, opis po środku,
   cena i przycisk przy prawej krawędzi. Kwoty stoją wtedy w jednej osi
   przez całą listę i da się je porównywać wzrokiem.

   Ramka schodzi do jednej kreski pod wierszem — pudełko wokół każdej
   pozycji przy dwudziestu wierszach robi się szumem. */
/* Klasa podwojona CELOWO. Regula telefonu `.fk-prods { repeat(2, ...) }`
   w sekcji 33 ma te sama wage (0,1,0) i stoi nizej w arkuszu, wiec wygrywala
   kolejnoscia: na telefonie „lista" rozpadala sie na DWIE kolumny wierszy.
   Zmierzone przy 360 px: wiersz 155 px, z czego 108 px zdjecia — na nazwe
   produktu zostawalo 21 px szerokosci, na cene i przycisk po 61 px. */
.fk-prods.fk-prods--lista { grid-template-columns: minmax(0, 1fr); gap: 0; border-top: 1px solid var(--hair); }

.fk-prods--lista .fk-card {
  display: grid;
  grid-template-columns: 108px minmax(0, 1fr);
  gap: 18px;
  align-items: center;
  padding: 16px 4px;
  background: none;
  border: 0;
  border-bottom: 1px solid var(--hair);
  border-radius: 0;
}
.fk-prods--lista .fk-card:hover { background: var(--paper-2); }
.fk-prods--lista .fk-card__media { aspect-ratio: 1 / 1; border-radius: var(--r-sm); }
.fk-prods--lista .fk-card__media { border-bottom: 0; }
.fk-prods--lista .fk-card__fav { top: 8px; right: 8px; }

.fk-prods--lista .fk-card__body { padding: 0; gap: 4px; }
.fk-prods--lista .fk-card__title { -webkit-line-clamp: 2; font-size: 1.02rem; }

@media (min-width: 760px) {
  .fk-prods--lista .fk-card { grid-template-columns: 124px minmax(0, 1fr); gap: 24px; padding: 18px 6px; }

  /* Opakowanie przestaje być przezroczyste i staje się prawą kolumną. */
  .fk-prods--lista .fk-card__body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(196px, auto); column-gap: 28px; align-items: center; }
  .fk-prods--lista .fk-card__body > * { grid-column: 1; }
  .fk-prods--lista .fk-card__side { display: grid; grid-column: 2; grid-row: 1 / -1; gap: 10px; justify-items: end; align-content: center; }
  .fk-prods--lista .fk-card__prices { justify-items: end; text-align: right; }
  .fk-prods--lista .fk-card__buy { margin: 0; }
}

/* Poniżej 760 px lista też jest wierszem — tyle że węższym:
   miniatura | nazwa, a pod nią cena z przyciskiem.

   Przedtem cena i przycisk stały jedno pod drugim, a przycisk brał całą
   szerokość kolumny tekstu — przy 600–759 px ciemny pas miał 354–485 px
   i był najcięższą rzeczą w wierszu, cięższą niż nazwa produktu. */
@media (max-width: 759px) {
  .fk-prods--lista .fk-card { grid-template-columns: 96px minmax(0, 1fr); gap: 14px; align-items: start; padding: 14px 2px; }

  /* Trzy wiersze nazwy jak w kafelkach — rozróżnienie wariantów (45 g / 12 g,
     kolor) siedzi w tym katalogu na końcu nazwy. */
  .fk-prods--lista .fk-card__title { font-size: .95rem; -webkit-line-clamp: 3; }
  .fk-prods--lista .fk-card__meta { display: none; }

  /* Cena z lewej, przycisk z prawej w naturalnej szerokości. Gdy obu nie da
     się zmieścić w jednym wierszu, przycisk schodzi pod cenę, zamiast
     ściskać kwotę albo łamać ją w pół. */
  .fk-prods--lista .fk-card__side { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 8px 12px; margin-top: 8px; }
  .fk-prods--lista .fk-card__prices { margin-top: 0; padding-top: 0; }
  .fk-prods--lista .fk-card__buy { flex: 0 1 auto; min-width: 104px; margin: 0 0 0 auto; grid-template-columns: minmax(0, 1fr); }

  /* Lupka powtarza to, co robi już cały wiersz (nakładka na tytule
     obejmuje kartę), a w wąskiej kolumnie zabiera miejsce przyciskowi. */
  .fk-prods--lista .fk-card__buy .fk-btn--ghost { display: none; }

  /* Serce zostaje 44×44, ale wciśnięte w róg miniatury: odsunięte o 8 px
     zasłaniało jej prawą połowę. */
  .fk-prods--lista .fk-card__fav { top: 0; right: 0; }
}

/* --- Lista wpisów -------------------------------------------------------
   Karta wpisu bez ramki: zdjęcie, data, tytul, zajawka. Siatka rozsuwa
   sie sama, więc przy jednym wpisie nie zostaje sierocy kafelek na 1/3
   szerokosci, tylko rzad o normalnej proporcji. */
.fk-wpisy { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); gap: 34px 26px; margin-top: 34px; }
.fk-wpis { display: grid; gap: 14px; align-content: start; }
.fk-wpis__media { display: block; aspect-ratio: 3 / 2; border-radius: var(--r-md); overflow: hidden; background: var(--blush); }
.fk-wpis__media img { width: 100%; height: 100%; object-fit: cover; transition: scale .5s var(--ease); }
.fk-wpis:hover .fk-wpis__media img { scale: 1.03; }
.fk-wpis__media:empty { display: none; }
.fk-wpis__body { display: grid; gap: 8px; }
.fk-wpis__title { font-size: clamp(1.12rem, 1rem + .5vw, 1.4rem); font-weight: 500; letter-spacing: -.025em; line-height: 1.25; }
.fk-wpis__title a { color: inherit; text-decoration: none; }
.fk-wpis__title a:hover { color: var(--rose); }
.fk-wpis__lead { font-family: var(--font-proza); font-size: 1rem; font-weight: 400; line-height: 1.6; color: var(--ink-soft); }

/* Stronicowanie z rdzenia WordPressa — nadajemy mu wygląd reszty. */
.pagination, .navigation.pagination { margin-top: 40px; padding-top: 22px; border-top: 1px solid var(--hair); }
.pagination .nav-links, .navigation.pagination .nav-links { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.pagination .page-numbers { display: grid; place-items: center; min-width: 40px; height: 40px; padding: 0 12px; border: 1px solid var(--line); border-radius: var(--r-sm); font-size: .94rem; color: var(--ink); text-decoration: none; }
.pagination .page-numbers:hover { border-color: var(--rose); color: var(--rose); }
.pagination .page-numbers.current { background: var(--ink); border-color: var(--ink); color: var(--paper); }

/* --- Mini-koszyk w szufladzie ------------------------------------------
   Własny znacznik, bo `woocommerce_mini_cart()` nie daje regulacji ilosci.
   Uklad: zdjęcie w lewej kolumnie, nazwa i wiersz akcji w prawej, przycisk
   usuwania w rogu — z własnym miejscem, nie nad tekstem. */
.fk-cart__in { display: block; }
.fk-cart__pusto { color: var(--mist); font-size: .96rem; }

.fk-mini { display: grid; gap: 4px; transition: opacity .18s var(--ease); }
.fk-mini.fk-is-busy { opacity: .5; pointer-events: none; }

.fk-mini__i { position: relative; display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 13px; align-items: start; padding: 14px 40px 14px 0; border-bottom: 1px solid var(--hair); }
.fk-mini__i:last-child { border-bottom: 0; }

.fk-mini__img { grid-row: span 2; width: 58px; height: 58px; object-fit: contain; mix-blend-mode: multiply; background: var(--paper-2); border-radius: var(--r-sm); }
.fk-mini__t { font-size: .94rem; line-height: 1.4; color: var(--ink); text-decoration: none; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.fk-mini__t:hover { color: var(--rose); }
.fk-mini__row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 8px; }
.fk-mini__cena { font-size: .95rem; font-weight: 500; font-variant-numeric: tabular-nums; white-space: nowrap; }

.fk-mini__x { position: absolute; right: 0; top: 12px; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: var(--paper-2); border: 1px solid var(--line); color: var(--mist); font-size: 1rem; line-height: 1; }
.fk-mini__x:hover { border-color: var(--rose); color: var(--rose); }

.fk-qty { display: inline-flex; align-items: center; border: 1px solid var(--line-strong); border-radius: var(--r-pill); overflow: hidden; }
.fk-qty__b { width: 32px; height: 30px; display: grid; place-items: center; background: var(--paper-2); color: var(--ink); font-size: 1rem; line-height: 1; }
.fk-qty__b:hover { background: var(--blush); }
.fk-qty__v { min-width: 30px; text-align: center; font-size: .92rem; font-variant-numeric: tabular-nums; }

.fk-mini__sum { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--ink); font-size: 1.02rem; }
.fk-mini__akcje { display: grid; gap: 9px; margin-top: 16px; }
.fk-mini__akcje .fk-btn { width: 100%; }


/* =========================================================================
   33. Telefon: karty, pasek narzedzi, pasek kategorii

   Zmierzone przy 375 px przed poprawka: karta 335×675 px, z czego samo
   zdjęcie 333×416. Jedna karta zajmowala więcej niż ekran, więc przegladanie
   katalogu bylo przewijaniem zdjec, nie porownywaniem produktow.
   ========================================================================= */

@media (max-width: 599px) {

  /* Dwie kolumny zamiast jednej. Przy 375 px daje karte ~160 px — dosc,
     żeby rozpoznac produkt, i dwa razy więcej pozycji na ekran. */
  .fk-prods { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }

  /* Kwadrat zamiast 4:5. Wysokość karty spada o okolo jedna trzecia,
     a zdjęcie produktu na bialym tle i tak nie wypełnia kadru. */
  .fk-card__media { aspect-ratio: 1 / 1; }
  .fk-card__media img { padding: 7%; }
  .fk-card__body { padding: 12px 12px 14px; gap: 4px; }
  /* Trzy wiersze, nie dwa. W kolumnie 137 px dwa wiersze urywaly nazwe na
     „CLARESA ZEL BUDUJACY...", a w tym katalogu rozroznienie siedzi na koncu
     nazwy (45 g / 12 g, kolor) — pięć kafli wygladalo identycznie. */
  .fk-card__title { font-size: .92rem; -webkit-line-clamp: 3; }
  .fk-card__brand { font-size: .78rem; }
  .fk-card__buy { grid-template-columns: minmax(0, 1fr); margin-top: 10px; }
  .fk-card__buy .fk-btn--ghost { display: none; }

  /* Napis w przycisku: wezsze wyscielenie i zgoda na zlamanie wiersza.
     Krótsza etykieta („Do koszyka") idzie z PHP, ale produkt zewnetrzny albo
     wariant może przyniesc dowolnie dlugi tekst, a `white-space: nowrap`
     z reguly ogolnej wypychal go poza ciemne tlo — karta obcinala go wtedy
     po obu stronach i na ekranie stalo „ODAJ DO KOSZYK". */
  .fk-card__buy .fk-btn { padding-inline: 10px; }
  /* Rozmiar zostaje 44x44 — zmienia sie tylko odsuniecie od rogu.
     Wcześniej ta regula zbijala serce do 34 px i wygrywala z dwiema
     wczesniejszymi, które celowo podnosily je do 44 na dotyku. Najmniejszy
     cel dotykowy lapal więc akurat tam, gdzie jest najwazniejszy. */
  .fk-card__fav { top: 6px; right: 6px; }

  /* Pasek narzedzi mial 226 px wysokości — cztery elementy jeden pod drugim.
     Teraz dwa rzedy: licznik z filtrami, pod spodem widok i sortowanie. */
  .fk-toolbar { display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .fk-toolbar__l { display: flex; align-items: center; gap: 10px; flex-wrap: nowrap; }
  .fk-toolbar__l .woocommerce-ordering { flex: 1 1 auto; min-width: 0; }
  .fk-toolbar__l .woocommerce-ordering select { width: 100%; min-height: 44px; }
  .fk-toolbar__cnt { font-size: .88rem; }

  /* Pole szukania w szufladzie mialo przycisk 42×28 — ponizej progu dotyku. */
  .fk-drawer .fk-search__field { min-height: 50px; }
  .fk-drawer .fk-search__go { min-height: 48px; }
}

/* Pasek kategorii: zapas z boku i sygnal, ze da sie przewijac.
   Bez zapasu pierwsza i ostatnia pozycja dotykaly krawędzi ekranu,
   a nic nie mowilo, ze lista idzie dalej. */
.fk-nav { position: relative; }
.fk-nav .fk-wrap { position: relative; }
/* `margin: 0` jawnie. Flatsome nadaje `ul` margines dolny 1.3em, a nasz
   reset list idzie przez `:where()`, czyli z wagą zerową — przegrywał.
   Zmierzone: pasek 83 px wysokości przy liście 61 i odnośnikach 52,
   czyli 22 px pustki pod kategoriami. */
.fk-nav__list { margin: 0; padding-inline: 2px; }
.fk-nav__list > li { margin: 0; }
.fk-nav__link { padding-inline: 16px; }

/* Gradient sygnalizujacy przewijanie zniknal razem z przewijaniem paska. */


/* =========================================================================
   34. Strony tresciowe zlozone UX Builderem (regulamin, polityka, zwroty)

   Te strony maja przypisany szablon Flatsome `page-blank`, który WYGRYWA
   z naszym `page.php` — WordPress bierze szablon strony przed szablonem
   ogolnym. Trafiaja więc do naszego nagłówka i stopki, ale bez typografii
   projektu: regulamin to 38 tysiecy znakow zlozonych domyslnym krojem
   Flatsome, na pelna szerokosc kolumny.

   Nie przejmujemy tych stron szablonem, bo builder ma prawo ukladac na nich
   kolumny i sekcje. Nadajemy tylko typografie, a szerokosc do czytania
   ograniczamy na SAMYCH akapitach i listach — dzięki temu uklad z buildera
   zostaje nietkniety, a tekst przestaje biec przez 1184 px.
   ========================================================================= */

.fk-app .content-area { font-family: var(--font-ui); color: var(--ink); }

.fk-app .content-area p,
.fk-app .content-area li,
.fk-app .content-area dd { max-width: 70ch; }

.fk-app .content-area p {
  font-family: var(--font-proza);
  font-size: 1.02rem;
  font-weight: 400;
  line-height: 1.7;
  color: var(--ink-soft);
  margin: 0 0 1.05em;
}

.fk-app .content-area h1,
.fk-app .content-area h2,
.fk-app .content-area h3,
.fk-app .content-area h4 {
  font-family: var(--font-ui);
  font-weight: 500;
  letter-spacing: -.025em;
  line-height: 1.2;
  color: var(--ink);
  margin: 1.7em 0 .55em;
}
.fk-app .content-area h1:first-child,
.fk-app .content-area h2:first-child,
.fk-app .content-area h3:first-child { margin-top: 0; }

.fk-app .content-area h1 { font-size: clamp(1.9rem, 1.5rem + 1.8vw, 2.8rem); }
.fk-app .content-area h2 { font-size: clamp(1.35rem, 1.15rem + .9vw, 1.85rem); }
.fk-app .content-area h3 { font-size: clamp(1.12rem, 1rem + .5vw, 1.38rem); }
.fk-app .content-area h4 { font-size: 1.02rem; }

.fk-app .content-area ul,
.fk-app .content-area ol { margin: 0 0 1.15em; padding-left: 1.35em; }
.fk-app .content-area ul { list-style: disc; }
.fk-app .content-area ol { list-style: decimal; }
.fk-app .content-area li { font-family: var(--font-proza); font-weight: 400; line-height: 1.65; color: var(--ink-soft); margin-bottom: .42em; }

.fk-app .content-area a { color: var(--rose); text-underline-offset: .2em; }
.fk-app .content-area a:hover { color: var(--rose-deep); }

.fk-app .content-area strong,
.fk-app .content-area b { font-weight: 500; color: var(--ink); }

.fk-app .content-area table { width: 100%; max-width: 100%; border-collapse: collapse; margin: 0 0 1.4em; font-size: .96rem; }
.fk-app .content-area th,
.fk-app .content-area td { padding: 11px 14px; border-bottom: 1px solid var(--hair); text-align: left; vertical-align: top; }
.fk-app .content-area th { font-weight: 500; color: var(--ink); border-bottom-color: var(--ink); }

.fk-app .content-area blockquote { margin: 0 0 1.3em; padding-left: 18px; border-left: 2px solid var(--rose); color: var(--ink-soft); }

/* Dlugi regulamin bez oddechu z gory i z dolu wyglada jak wklejony. */
.fk-app .content-area > .row:first-child { padding-top: clamp(28px, 3vw, 52px); }
.fk-app .content-area > .row:last-child { padding-bottom: clamp(36px, 4vw, 72px); }


/* =========================================================================
   35. Telefon: szuflada z kategoriami, powrót o poziom wyżej, dotyk

   Trzy braki zmierzone na zywym sklepie:

   * `.fk-drawer__menu` nie mialo ANI JEDNEJ reguly w tym arkuszu — lista
     w szufladzie dostawala wygląd od Flatsome: punktory, margines 1.3em
     pod lista i odnosniki bez pola dotyku.
   * Archiwum nie miało drogi w gore. Wejscie na podkategorie z Google
     konczylo sie w slepej uliczce.
   * Dolny pasek nie dawał ZADNEGO znaku, ze dotkniecie zostalo przyjete.
     Zmierzony czas odpowiedzi serwera to 3,3–4,2 s — przez te cztery
     sekundy przycisk wygladal na martwy, więc dotykalo sie go drugi raz.
   ========================================================================= */

/* --- Menu i kategorie w szufladzie ------------------------------------- */

.fk-drawer__menu {
  list-style: none;
  margin: 0;
  padding: 0;
}
.fk-drawer__menu li { margin: 0; }

.fk-drawer__menu a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 48px;
  padding: 6px 2px;
  border-bottom: 1px solid var(--hair);
  color: var(--ink);
  font-size: .97rem;
  font-weight: 500;
  text-decoration: none;
}
.fk-drawer__menu a:hover,
.fk-drawer__menu a:active { color: var(--rose-deep); }

/* Podpozycje menu (depth 2) — wciecie zamiast osobnego rozwijania. */
.fk-drawer__menu .sub-menu {
  list-style: none;
  margin: 0;
  padding: 0 0 6px 14px;
}
.fk-drawer__menu .sub-menu a {
  min-height: 42px;
  border-bottom: 0;
  color: var(--ink-soft);
  font-size: .93rem;
  font-weight: 400;
}

.fk-drawer__lab {
  margin: 22px 0 2px;
  font-size: .78rem;
  font-weight: 600;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--mist);
}

/* Licznik produktów — informacja drugiego planu, więc bez wagi i koloru. */
.fk-drawer__ile {
  flex: none;
  font-size: .82rem;
  font-weight: 400;
  font-variant-numeric: tabular-nums;
  color: var(--mist);
}

.fk-drawer__all {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin-top: 4px;
  color: var(--rose);
  font-size: .92rem;
  font-weight: 500;
  text-decoration: underline;
  text-underline-offset: .22em;
}
.fk-drawer__all:hover { color: var(--rose-deep); }

/* --- Powrót do kategorii nadrzednej ------------------------------------ */

.fk-wroc {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 40px;
  margin-bottom: 6px;
  color: var(--mist);
  font-size: .91rem;
  font-weight: 500;
  text-decoration: none;
  transition: color .18s var(--ease);
}
.fk-wroc b { font-weight: 600; color: var(--ink-soft); }
.fk-wroc svg { width: 15px; height: 15px; flex: none; }
.fk-wroc:hover { color: var(--rose-deep); }
.fk-wroc:hover b { color: var(--rose-deep); }

/* Strzalka odjezdza w lewo — kierunek ruchu mówi, dokad prowadzi odnosnik. */
.fk-wroc svg { transition: translate .18s var(--ease); }
.fk-wroc:hover svg { translate: -3px 0; }

/* --- Reakcja na dotkniecie -------------------------------------------- */

/* `manipulation` wylacza czekanie na drugie stukniecie (zoom). Reszta
   zdejmuje szara plame Androida, bo mamy własny stan wcisniecia. */
.fk-tabbar__i,
.fk-drawer__menu a,
.fk-iconbtn,
.fk-btn {
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

.fk-tabbar__i { transition: background-color .12s var(--ease), color .12s var(--ease); }
.fk-tabbar__i:active { background: var(--blush); color: var(--ink); }
.fk-drawer__menu a:active { background: var(--blush); }

/* Pozycja, która czeka na odpowiedź serwera. Klase zdejmuje `pageshow`,
   więc powrót z pamieci wstecz nie zostawia jej zapalonej. */
.fk-tabbar__i.fk-is-czeka { background: var(--blush); color: var(--ink); }

/* Kreska postepu u gory ekranu. Nie zna prawdziwego postepu — pokazuje,
   ze zadanie ruszylo, i zatrzymuje sie przed koncem, zamiast klamac. */
.fk-postep {
  position: fixed;
  top: 0;
  left: 0;
  z-index: calc(var(--z-toast) + 1);
  width: 100%;
  height: 2px;
  transform-origin: 0 50%;
  scale: 0 1;
  background: var(--rose);
  opacity: 0;
  pointer-events: none;
}
.fk-postep.fk-is-on {
  scale: 1 1;
  opacity: 1;
  transition: scale 2.6s cubic-bezier(.12, .78, .28, 1), opacity .12s linear;
}

@media (prefers-reduced-motion: reduce) {
  .fk-postep.fk-is-on { transition: opacity .12s linear; scale: 1 1; }
  .fk-wroc svg { transition: none; }
  .fk-wroc:hover svg { translate: 0 0; }
}


/* =========================================================================
   36. Nagłówek w wersji mobilnej

   Zmierzone przy 375 px, zanim cokolwiek ruszylem:

     kolumny siatki .fk-head__in : 44px 23px 240px
     wiersze                     : 46px 44px      <- DWA wiersze
     logo                        : 23 x 32 px
     koszyk                      : x=20  y=102    <- pod hamburgerem,
                                                     ponizej nagłówka (105 px)

   Dwie usterki naraz, obie z jednej przyczyny.

   `.fk-head__in` dostalo `grid-template-columns: auto minmax(0,1fr) auto`
   napisane pod TROJE dzieci: logo, szukajka, akcje. Ponizej 980 px pojawia
   sie czwarte — hamburger — i wszystko przesuwa sie o jedna pozycje:

     kolumna 1 (auto)  hamburger   zamiast logo
     kolumna 2 (1fr)   LOGO        zamiast szukajki
     kolumna 3 (auto)  szukajka    zamiast akcji
     kolumna 4          NIE ISTNIEJE -> koszyk laduje w drugim wierszu

   Stad jedno i drugie: logo dostalo `1fr` i zostalo scisniete do 23 px
   przez szukajke, która w kolumnie `auto` wzięła swoja naturalna szerokosc
   240 px, a koszyk wypadl poza naglowek.

   Uklad na telefonie: hamburger, logo i koszyk w jednym wierszu, szukajka
   przez cała szerokosc pod nimi. Szukajka zostaje widoczna, bo przy katalogu
   z tysiacem pozycji to główna droga do produktu — a nie da sie jej zmiescic
   w tym samym wierszu bez zabicia logo drugi raz.
   ========================================================================= */

/* Do 979 px hamburger jest widoczny, więc dzieci jest czworo — siatka musi
   mieć cztery kolumny. Na tablecie wszystko miesci sie w jednym wierszu:
   44 + 163 + 44 + odstepy zostawia szukajce ponad 400 px. */
@media (max-width: 979px) {

  .fk-head__in {
    grid-template-columns: auto auto minmax(0, 1fr) auto;
    grid-template-areas: "burger logo szukaj akcje";
  }

  .fk-burger     { grid-area: burger; }
  .fk-head__logo { grid-area: logo; }
  .fk-search     { grid-area: szukaj; }
  .fk-head__acts { grid-area: akcje; }

  /* Logo ma proporcje 998:183. Bez `flex: none` kolumna elastyczna sciskala
     je razem z obrazkiem — `width: auto` nie broni sie przed kurczeniem. */
  .fk-head__logo { justify-content: flex-start; }
  .fk-head__logo img { flex: none; width: auto; height: 30px; }
}

/* Ponizej 768 px jeden wiersz przestaje wystarczac: logo i szukajka zaczynaja
   walczyc o te sama przestrzen. Szukajka schodzi wtedy pod spod, na cała
   szerokosc — zostaje widoczna, bo przy katalogu z tysiacem pozycji to główna
   droga do produktu.

   `max-width: 500px` z reguly bazowej NIE jest tu nadpisywane celowo: przy
   375 px kolumna ma 335 px i limit nie działa, a gdyby dwuwierszowy uklad
   kiedys siegnal szerszych ekranow, pas szukania nie rozjedzie sie na
   pol metra. Zmierzone przy 979 px bez tego limitu: 911 px szerokosci. */
@media (max-width: 767px) {

  .fk-head__in {
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas:
      "burger logo   akcje"
      "szukaj szukaj szukaj";
    column-gap: 12px;
    row-gap: 8px;
    min-height: 0;
    padding-block: 9px 11px;
  }

  /* Flatsome nadaje FORMULARZOWI margines dolny 1.3em regula
     `blockquote, dl, figure, form, ol, p, pre, ul { margin-bottom: 1.3em }`
     — swoistosc (0,0,1), a nasz reset idzie przez `:where()`, czyli (0,0,0).
     Ta sama rodzina regul zjadla wcześniej pasek kategorii przez `ul`.

     Zmierzone na wgranym sklepie: opakowanie szukajki 67 px przy polu 46 px,
     czyli 21 px pustki doklejone do PRZYKLEJONEGO nagłówka na każdej stronie.
     Po zerowaniu nagłówek schodzi ze 140 do 119 px. W izolacji tego nie bylo
     widac, bo tam nie ma arkusza Flatsome. */

  /* Nagłówek jest przyklejony, więc każdy piksel zjada widok katalogu.
     Wysokości pola nie da sie tu zejsc ponizej 46 px bez ruszania kroju
     w środku — tyle wymaga sama treść inputa — więc oszczedzamy na
     marginesach wewnetrznych, nie na polu dotyku.
     Zmierzone po zmianie: nagłówek 119 px, w tym wiersz 44 + wiersz 46. */
  .fk-search__field { padding-left: 14px; }
  .fk-search__go { width: 40px; }
}

/* Pasek kategorii: przy 375 px pierwsza pozycja miala 258 px na 335 px
   ekranu, czyli widac bylo jedna kategorie i skrawek drugiej — nic nie
   mowilo, ze lista idzie dalej. Mniejszy krok i ciasniejszy oddech
   pokazuja trzecia pozycje, a ona jest calym sygnalem przewijania. */
/* Wygląd paska na telefonie przejela sekcja 37 (pastylki) — tu zostala
   tylko kotwica historyczna, żeby nie szukać dwoch miejsc naraz. */


/* =========================================================================
   37. Sekcja obnizek + pasek kategorii na telefonie
   ========================================================================= */

/* --- Mapa obnizek po kategoriach --------------------------------------- */

/* Sekcja dostaje własne tlo, bo zastapila ciemna „Strefe firm" i bez tego
   strona główna miala w tym miejscu pięć jasnych sekcji pod rzad. Pudrowy,
   nie atrament — obnizki maja zachecac, a nie stawiac sciane. */
.fk-rab { background: var(--sand); }

.fk-rab__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
  margin-top: 30px;
}
@media (min-width: 620px)  { .fk-rab__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .fk-rab__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.fk-rab__k {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-content: start;
  gap: 2px 14px;
  min-height: 132px;
  padding: 20px 20px 18px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--paper-2);
  text-decoration: none;
  transition: border-color .2s var(--ease), background-color .2s var(--ease), translate .2s var(--ease);
}
.fk-rab__k:hover { border-color: var(--ink); background: var(--paper); translate: 0 -2px; }

/* Kafel z najglebsza obnizka jest ciemny i na dwie kolumny — sekcja
   potrzebuje jednego punktu wejscia, a nie sześciu rownych kafli. */
@media (min-width: 620px) {
  .fk-rab__k--lider { grid-column: span 2; min-height: 168px; }
}
.fk-rab__k--lider {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--paper);
}
.fk-rab__k--lider:hover { background: var(--ink); border-color: var(--ink); }

.fk-rab__proc {
  grid-column: 1 / -1;
  font-size: clamp(1.9rem, 1.4rem + 2.2vw, 3rem);
  font-weight: 500;
  letter-spacing: -.03em;
  line-height: 1;
  color: var(--rose);
}
.fk-rab__k--lider .fk-rab__proc { color: var(--paper); }

.fk-rab__nazwa {
  grid-column: 1;
  margin-top: 12px;
  font-size: 1rem;
  font-weight: 500;
  color: var(--ink);
}
.fk-rab__k--lider .fk-rab__nazwa { color: var(--paper); font-size: 1.12rem; }

.fk-rab__ile {
  grid-column: 1;
  font-size: .89rem;
  color: var(--mist);
}
.fk-rab__k--lider .fk-rab__ile { color: var(--mist-on-dark); }

.fk-rab__go {
  grid-column: 2;
  grid-row: 2 / span 2;
  align-self: center;
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  color: var(--ink);
  transition: background-color .2s var(--ease), color .2s var(--ease), translate .2s var(--ease);
}
.fk-rab__go svg { width: 15px; height: 15px; }
.fk-rab__k:hover .fk-rab__go { background: var(--ink); color: var(--paper); translate: 3px 0; }
.fk-rab__k--lider .fk-rab__go { border-color: rgba(255,255,255,.34); color: var(--paper); }
.fk-rab__k--lider:hover .fk-rab__go { background: var(--paper); color: var(--ink); }

.fk-rab__stopka {
  margin-top: 20px;
  font-size: .92rem;
  color: var(--mist);
}
.fk-rab__stopka a { color: var(--rose); text-underline-offset: .2em; margin-left: 6px; }
.fk-rab__stopka a:hover { color: var(--rose-deep); }

/* Pasek kategorii na telefonie NIE ISTNIEJE — patrz nizej. Blok pastylek,
   który tu stal, zostal usuniety razem z paskiem: reguly pod progiem 768 px
   nie mialy juz czego stylowac. */


/* --- Plakietka zawezenia archiwum do przecenionych --------------------- */

.fk-filtrpas {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 14px;
  margin: 12px 0 0;
}

.fk-filtrpas__chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-height: 32px;
  padding: 0 13px;
  border-radius: var(--r-pill);
  background: var(--rose);
  color: var(--on-rose);
  font-size: .87rem;
  font-weight: 500;
}
.fk-filtrpas__chip svg { width: 14px; height: 14px; flex: none; }

.fk-filtrpas__off {
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  color: var(--mist);
  font-size: .89rem;
  text-underline-offset: .2em;
}
.fk-filtrpas__off:hover { color: var(--ink); }

@media (max-width: 767px) {
  .fk-filtrpas__off { min-height: 40px; }
}


/* =========================================================================
   38. Opisy pod ikonami nagłówka + format ceny na kafelku
   ========================================================================= */

/* --- Ikona z podpisem -------------------------------------------------- */

/* Zakres celowo zawężony do `.fk-head__acts`: ten sam `.fk-iconbtn` nosi
   hamburger, który podpisu nie ma i ma zostać kwadratem 44x44. */
.fk-head__acts .fk-iconbtn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  width: auto;
  min-width: 58px;
  height: auto;
  min-height: 48px;
  padding: 5px 8px;
}

.fk-iconbtn__t {
  font-size: .74rem;
  font-weight: 500;
  letter-spacing: .03em;
  line-height: 1;
  color: var(--mist);
  transition: color .2s var(--ease);
}
.fk-head__acts .fk-iconbtn:hover .fk-iconbtn__t { color: var(--rose); }

/* Plakietka liczby siedzi przy IKONIE, nie przy krawędzi przycisku —
   przycisk z podpisem jest szerszy, więc `right: 2px` odsunelo ja
   w pusta przestrzen nad tekstem. */
.fk-head__acts .fk-iconbtn__count { top: 2px; right: 12px; }

/* Ponizej 980 px w nagłówku zostaje sam koszyk, a podpisy niesie dolny
   pasek. Drugi komplet napisow tylko podnosilby przyklejony naglowek. */
@media (max-width: 979px) {
  .fk-iconbtn__t { display: none; }
  .fk-head__acts .fk-iconbtn { min-width: 44px; min-height: 44px; padding: 0; }
  .fk-head__acts .fk-iconbtn__count { top: 5px; right: 2px; }
}

/* --- Cena na kafelku: kwota, pod nia podpis ---------------------------- */

/* Kwota nie miala własnego stopnia pisma — dziedziczyla rozmiar karty
   i czytala sie jak zwykly tekst obok nazwy produktu. Klasa `.fk-price-now`
   dotyczyla tylko cen skladanych ręcznie, a listing bierze gotowy HTML
   z `get_price_html()`, czyli `.woocommerce-Price-amount`. */
.fk-price-row .woocommerce-Price-amount,
.fk-price-row .fk-price-now {
  font-size: 1.24rem;
  font-weight: 500;
  letter-spacing: -.025em;
  line-height: 1.15;
  color: var(--ink);
}

/* Cena sprzed obnizki zostaje drobna i przekreslona — inaczej dwie duze
   kwoty obok siebie kaza sie zastanawiac, która obowiazuje. */
.fk-price-row del,
.fk-price-row del .woocommerce-Price-amount {
  font-size: .89rem;
  font-weight: 400;
  color: var(--mist);
}
.fk-price-row ins { text-decoration: none; background: none; }

/* Podpis pod kwota: co to za cena i przy jakiej stawce. */
.fk-price-cap {
  display: block;
  margin-top: 3px;
  font-size: .82rem;
  font-weight: 400;
  line-height: 1.3;
  color: var(--mist);
}

/* W widoku listy kwota i podpis stoja przy prawej krawędzi wiersza. */
.fk-prods--lista .fk-price-cap { text-align: right; }

@media (max-width: 599px) {
  .fk-price-row .woocommerce-Price-amount,
  .fk-price-row .fk-price-now { font-size: 1.08rem; }
  .fk-price-cap { font-size: .8rem; }
}


/* =========================================================================
   39. Wpis bloga — dokument, nie sekcja strony

   Zmierzone na wgranym sklepie przy 1280 px, przed poprawka:

     h1                1169 px
     zdjęcie           1169 x 1169 px   (źródło ma 800 x 800 — rozciagniete)
     akapity            562 px
     odstep gorny       109 px          (padding `.fk-section`)

   Zdjęcie kwadratowe rozciagniete na cała szerokosc kolumny zajmowalo
   POLTORA EKRANU zanim zaczal sie tekst, a tekst zaczynal sie w innej
   kolumnie niż tytul nad nim.
   ========================================================================= */

/*
 * WPIS: kadr szeroki, kolumna tekstu waska, w luce spis tresci.
 *
 * Poprzednia wersja sciskala CALY wpis do 720 px — razem z tytulem i zdjeciem.
 * Zmierzone przy oknie 1440 px: opakowanie mialo 720 px przy 1425 px zawartosci
 * ekranu, więc po obu stronach zostawalo po 350 px pustki. Tekst czytalo sie
 * dobrze, ale wpis wygladal na zapakowany w pudelko.
 *
 * Kadr ma dzis 1120 px. Miare czytania trzyma sama kolumna tekstu (okolo 714 px,
 * czyli 70–75 znakow w wierszu), a miejsce, które przedtem bylo marginesem,
 * zajmuje spis tresci.
 *
 * UWAGA na nazwe: `.fk-wpis` nosi TAKZE karta na liscie wpisow. Reguly układu
 * pelnego wpisu ida więc przez `--pelny`; wcześniej obie warstwy siedzialy na
 * tej samej klasie i karty w siatce dostawaly do 84 px dolnego marginesu
 * z układu strony pojedynczego wpisu.
 */
.fk-wpis--pelny { padding-block: clamp(18px, 2.2vw, 32px) clamp(44px, 5vw, 84px); }
.fk-wpis--pelny.fk-wpis { display: block; }
.fk-wpis__in { max-width: 1120px; }

/* Nagłówek nie idzie na cała szerokosc kadru: tytul na 1024 px znow bylby
   plakatem. Własna, krótsza miara. */
.fk-wpis__naglowek { max-width: 820px; }
.fk-wpis--pelny .fk-h1 { font-size: clamp(1.72rem, 1.25rem + 1.9vw, 2.8rem); }
.fk-wpis--pelny .fk-lead { margin-top: 16px; }

/* Zdjęcie otwierajace bierze caly kadr — to ono ma być szersze od tekstu.
   NIGDY nie skalujemy go w gore: `width: auto` zostawia plik w naturalnym
   rozmiarze, `max-height` pilnuje ujec kwadratowych i pionowych. */
.fk-wpis__foto { margin: 26px 0 34px; }
.fk-wpis__foto img {
  width: auto;
  max-width: 100%;
  max-height: 460px;
  margin-inline: auto;
}

/* Szyna i kolumna. Ponizej 1000 px spis znika (regula w sekcji 27),
   więc zostaje jedna kolumna — z własnym sufitem szerokosci, żeby tekst
   nie rozlal sie na caly kadr. */
.fk-wpis__uklad { display: grid; grid-template-columns: minmax(0, 1fr); gap: 34px; align-items: start; }
@media (min-width: 1000px) {
  .fk-wpis__uklad { grid-template-columns: 250px minmax(0, 1fr); gap: 60px; }
  .fk-wpis__uklad--bezspisu { grid-template-columns: minmax(0, 1fr); }
}
.fk-wpis__tresc { max-width: 740px; }

/* `.fk-proza` przestaje narzucac własne 62ch: miare trzyma juz kolumna,
   a dwie miary naraz to dokladnie ten rozjazd, który naprawiamy. */
.fk-wpis--pelny .fk-proza { max-width: none; }

/* Srodtytuly w dlugim tekscie potrzebuja powietrza nad soba — inaczej
   dziesiec sekcji czyta sie jak jeden blok. */
.fk-wpis__tresc .fk-proza h2 { margin-top: 46px; padding-top: 22px; border-top: 1px solid var(--hair); scroll-margin-top: calc(var(--head-h) + 24px); }
.fk-wpis__tresc .fk-proza h2:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.fk-wpis__tresc .fk-proza h3 { margin-top: 30px; }

.fk-wpis__dalej { margin-top: 44px; padding-top: 22px; border-top: 1px solid var(--ink); }
.fk-wpis__dalej .fk-eyebrow { margin-bottom: 10px; }
/* Etykieta niesie nazwe kategorii z katalogu, więc bywa dluga.
   `.fk-link-arrow` ma `white-space: nowrap` — sluszne przy krotkich
   napisach, ale tutaj przy 390 px odnosnik mial 392 px w kolumnie
   szerokiej na 350 i wypychal CALA strone w bok. */
.fk-wpis__dalej .fk-link-arrow { white-space: normal; align-items: baseline; }
.fk-wpis__dalej .fk-link-arrow svg { flex: none; }

/* Zdjęcia WEWNATRZ treści — te same zasady, co przy otwierajacym. */
.fk-wpis--pelny .fk-proza img { width: auto; max-width: 100%; height: auto; border-radius: var(--r-md); }

@media (max-width: 599px) {
  .fk-wpis__foto img { max-height: 300px; }
  .fk-wpis__tresc .fk-proza h2 { margin-top: 34px; padding-top: 18px; }
}


/* =========================================================================
   40. Opinie z wizytowki Google
   ========================================================================= */

.fk-opinie { background: var(--paper-2); }

.fk-opinie__ocena {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px 12px;
}
.fk-opinie__nota {
  font-size: clamp(1.8rem, 1.4rem + 1.6vw, 2.6rem);
  font-weight: 500;
  letter-spacing: -.03em;
  line-height: 1;
  color: var(--ink);
}
.fk-opinie__ile {
  flex-basis: 100%;
  font-size: .89rem;
  color: var(--mist);
}

/* Gwiazdki znakiem, nie obrazkiem: skaluja sie z pismem i nie dokladaja
   ani jednego zadania sieciowego. */
.fk-gwiazdki { display: inline-flex; gap: 2px; line-height: 1; }
.fk-gwiazdka { color: var(--line-strong); font-size: 1rem; }
.fk-gwiazdka--on { color: var(--rose); }

.fk-opinie__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 14px;
  margin-top: 30px;
}
@media (min-width: 700px)  { .fk-opinie__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .fk-opinie__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.fk-opinia {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin: 0;
  padding: 22px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--paper);
}

/* Cytat bez wcięcia i bez kreski z boku: karta jest juz ramka, a druga
   ramka w środku robi z opinii formularz. */
.fk-opinia__t {
  margin: 0;
  padding: 0;
  border: 0;
  font-family: var(--font-proza);
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  color: var(--ink-soft);
}

.fk-opinia__a {
  margin-top: auto;
  font-size: .92rem;
  font-weight: 500;
  color: var(--ink);
}
.fk-opinia__k {
  display: block;
  font-size: .85rem;
  font-weight: 400;
  color: var(--mist);
}

.fk-opinie__stopka { margin-top: 22px; }


/* =========================================================================
   41. Podglad zdjęcia produktu (lightbox)
   ========================================================================= */

.fk-lupa {
  position: fixed;
  inset: 0;
  z-index: calc(var(--z-toast) + 2);
  display: grid;
  place-items: center;
  padding: clamp(14px, 4vw, 48px);
  opacity: 0;
  transition: opacity .22s var(--ease);
}
.fk-lupa.fk-is-open { opacity: 1; }

.fk-lupa__tlo {
  position: absolute;
  inset: 0;
  background: rgba(13, 18, 23, .84);
  cursor: zoom-out;
}

.fk-lupa__fig {
  position: relative;
  margin: 0;
  max-width: min(1100px, 100%);
  max-height: 100%;
  display: grid;
  place-items: center;
  scale: .97;
  transition: scale .22s var(--ease);
}
.fk-lupa.fk-is-open .fk-lupa__fig { scale: 1; }

/* Zdjęcie NIGDY nie wychodzi poza ekran: ograniczamy obie osie naraz.
   Sama `max-width` przy zdjeciu pionowym pozwolila mu urosnac w dol
   i przyciski nawigacji ladowaly poza widokiem. */
.fk-lupa__img {
  display: block;
  max-width: 100%;
  max-height: calc(100dvh - clamp(28px, 8vw, 96px));
  width: auto;
  height: auto;
  border-radius: var(--r-sm);
  background: var(--paper);
}

.fk-lupa__x,
.fk-lupa__nav {
  position: absolute;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border-radius: var(--r-pill);
  background: rgba(255, 255, 255, .12);
  color: #fff;
  font-size: 1.5rem;
  line-height: 1;
  cursor: pointer;
  transition: background-color .18s var(--ease);
}
.fk-lupa__x:hover,
.fk-lupa__nav:hover { background: rgba(255, 255, 255, .26); }

.fk-lupa__x { top: clamp(10px, 2vw, 22px); right: clamp(10px, 2vw, 22px); }
.fk-lupa__nav { top: 50%; translate: 0 -50%; }
.fk-lupa__nav--w { left: clamp(8px, 2vw, 22px); }
.fk-lupa__nav--d { right: clamp(8px, 2vw, 22px); }

.fk-lupa__licz {
  position: absolute;
  bottom: clamp(10px, 2vw, 22px);
  left: 50%;
  translate: -50% 0;
  margin: 0;
  font-size: .88rem;
  color: rgba(255, 255, 255, .78);
  font-variant-numeric: tabular-nums;
}

/* Na telefonie strzalki schodza na dol, żeby nie lezec na zdjeciu. */
@media (max-width: 599px) {
  .fk-lupa__nav { top: auto; bottom: clamp(10px, 2vw, 22px); translate: none; }
  .fk-lupa__nav--w { left: 22%; }
  .fk-lupa__nav--d { right: 22%; }
  .fk-lupa__img { max-height: calc(100dvh - 150px); }
}

@media (prefers-reduced-motion: reduce) {
  .fk-lupa, .fk-lupa__fig { transition: none; }
  .fk-lupa__fig { scale: 1; }
}


/* =========================================================================
   42. Podkategorie: panel w pasku i grupy w szufladzie
   ========================================================================= */

/* --- Panel pod pozycja paska ------------------------------------------- */

/* Regula „ostatnia pozycja kotwiczy do prawej" zostala usunieta razem
   z kotwiczeniem panelu do pozycji — patrz komentarz przy `.fk-mega`. */

/* Wejscie do dzialow spoza czolowki — odrobine mocniej, bo to nie jest
   kolejna kategoria, tylko droga do calej reszty. */
.fk-nav__item--all > .fk-nav__link { font-weight: 500; }

.fk-mega { border-radius: var(--r-md); box-shadow: var(--cien); }

.fk-mega__col ul { list-style: none; margin: 0; padding: 0; }

.fk-mega__col a {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

/* Licznik pozycji drugim planem — mówi o wielkosci dzialu, ale nie ma
   konkurowac z nazwa. */
.fk-mega__ile {
  flex: none;
  font-size: .82rem;
  font-variant-numeric: tabular-nums;
  color: var(--mist);
}

.fk-mega__all {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid var(--hair);
  width: 100%;
  font-size: .91rem;
  font-weight: 500;
  color: var(--rose);
  text-decoration: none;
}
.fk-mega__all:hover { color: var(--rose-deep); }
.fk-mega__all svg { width: 14px; height: 14px; flex: none; }

/* --- Grupy w szufladzie ------------------------------------------------ */

.fk-drawer__gr { border-bottom: 1px solid var(--hair); }

/* `<details>` niesie własny znacznik trojkata — zdejmujemy go i rysujemy
   swoj, żeby strzalka stala po prawej i obracala sie przy rozwinieciu. */
.fk-drawer__sum {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 48px;
  padding: 6px 26px 6px 2px;
  position: relative;
  color: var(--ink);
  font-size: .97rem;
  font-weight: 500;
  cursor: pointer;
  list-style: none;
}
.fk-drawer__sum::-webkit-details-marker { display: none; }

.fk-drawer__sum::after {
  content: '';
  position: absolute;
  right: 4px;
  top: 50%;
  width: 8px;
  height: 8px;
  border-right: 1.5px solid var(--mist);
  border-bottom: 1.5px solid var(--mist);
  translate: 0 -70%;
  rotate: 45deg;
  transition: rotate .2s var(--ease);
}
.fk-drawer__gr[open] > .fk-drawer__sum::after { rotate: -135deg; translate: 0 -20%; }

.fk-drawer__pod {
  list-style: none;
  margin: 0 0 10px;
  padding: 0 0 0 14px;
  border-left: 1px solid var(--hair);
}
.fk-drawer__pod a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 42px;
  padding: 4px 2px;
  border-bottom: 0;
  color: var(--ink-soft);
  font-size: .93rem;
  font-weight: 400;
  text-decoration: none;
}
.fk-drawer__pod a:hover,
.fk-drawer__pod a:active { color: var(--rose-deep); }
.fk-drawer__pod b { font-weight: 500; color: var(--ink); }


/* =========================================================================
   43. Dwa wejscia na archiwum kategorii zbiorczej (fotele / myjnie)
   ========================================================================= */

.fk-rozdziel {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
  margin: 4px 0 18px;
}
@media (min-width: 620px) { .fk-rozdziel { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 620px; } }

.fk-rozdziel__k {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 58px;
  padding: 0 16px;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--paper-2);
  color: var(--ink);
  font-size: .98rem;
  font-weight: 500;
  text-decoration: none;
  transition: border-color .2s var(--ease), background-color .2s var(--ease), translate .2s var(--ease);
}
.fk-rozdziel__k:hover { border-color: var(--ink); background: var(--blush); translate: 0 -2px; }

/* Pierwsza ikona to znak dzialu, ostatnia to strzalka — dlatego odsuwa sie
   na prawo, a nie stoi przy tekscie. */
.fk-rozdziel__k svg { width: 18px; height: 18px; flex: none; color: var(--rose); }
.fk-rozdziel__k span { flex: 1 1 auto; }
.fk-rozdziel__k svg:last-child { width: 15px; height: 15px; color: var(--mist); transition: translate .2s var(--ease); }
.fk-rozdziel__k:hover svg:last-child { translate: 3px 0; color: var(--ink); }


/* =========================================================================
   44. Siatka kategorii i karuzela galerii
   ========================================================================= */

/* --- Siatka kategorii -------------------------------------------------- */

.fk-katsiatka {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));
  gap: 12px;
  margin-top: 30px;
}

.fk-kat {
  display: grid;
  grid-template-rows: auto 1fr;
  position: relative;
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  background: var(--card);
  overflow: hidden;
  text-decoration: none;
  transition: border-color .24s var(--ease), box-shadow .24s var(--ease), translate .24s var(--ease);
}
.fk-kat:hover { border-color: var(--line-strong); box-shadow: var(--cien); translate: 0 -3px; }

/* Kwadratowy kadr na bieli — ten sam zabieg co przy kartach produktu:
   zdjęcia przychodzą na bialym tle, więc krawedz pliku znika sama. */
.fk-kat__kadr {
  position: relative;
  aspect-ratio: 1 / 1;
  background: var(--paper-2);
  border-bottom: 1px solid var(--hair);
  display: grid;
  place-items: center;
  overflow: hidden;
}
.fk-kat__kadr img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  padding: 12%;
  transition: scale .45s var(--ease);
}
.fk-kat:hover .fk-kat__kadr img { scale: 1.05; }

.fk-kat__brak { display: grid; place-items: center; color: var(--line-strong); }
.fk-kat__brak svg { width: 30px; height: 30px; }

.fk-kat__tresc {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 13px 14px 15px;
  padding-right: 38px;
}
.fk-kat__t {
  font-size: .96rem;
  font-weight: 500;
  letter-spacing: -.011em;
  line-height: 1.3;
  color: var(--ink);
}
.fk-kat__ile { font-size: .85rem; color: var(--mist); }

/* Strzalka w rogu, nie w wierszu tekstu — nazwa kategorii może zajac dwa
   wiersze i nie ma jej przed czym uciekac. */
.fk-kat__go {
  position: absolute;
  right: 12px;
  bottom: 14px;
  display: grid;
  place-items: center;
  color: var(--mist);
  transition: color .2s var(--ease), translate .2s var(--ease);
}
.fk-kat__go svg { width: 15px; height: 15px; }
.fk-kat:hover .fk-kat__go { color: var(--rose); translate: 3px 0; }

@media (max-width: 479px) {
  .fk-katsiatka { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .fk-kat__tresc { padding: 11px 12px 13px; padding-right: 32px; }
  .fk-kat__t { font-size: .91rem; }
}

/* --- Karuzela galerii -------------------------------------------------- */

.fk-gal__main { position: relative; }

/* Przewijanie robi arkusz. `scroll-snap-type` zatrzymuje tor na kadrze,
   `overscroll-behavior-x: contain` powstrzymuje gest przed cofnieciem
   calej strony, gdy użytkownik dojedzie do konca galerii. */
.fk-gal__tor {
  display: flex;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  border-radius: var(--r-md);
  background: var(--paper-2);
}
.fk-gal__tor::-webkit-scrollbar { display: none; }
.fk-gal__tor:focus-visible { outline: 2px solid var(--rose); outline-offset: 3px; }

.fk-gal__kadr {
  flex: 0 0 100%;
  margin: 0;
  scroll-snap-align: center;
  aspect-ratio: 1 / 1;
  display: grid;
  place-items: center;
  overflow: hidden;
}
.fk-gal__kadr img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  padding: 5%;
}

.fk-gal__strz {
  position: absolute;
  top: 50%;
  translate: 0 -50%;
  z-index: 2;
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  background: var(--paper-2);
  color: var(--ink);
  cursor: pointer;
  box-shadow: var(--cien);
  transition: background-color .18s var(--ease), color .18s var(--ease), opacity .18s var(--ease);
}
.fk-gal__strz:hover { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.fk-gal__strz svg { width: 16px; height: 16px; }
.fk-gal__strz--w { left: 10px; }
.fk-gal__strz--d { right: 10px; }

/* Strzalka na koncu toru gasnie, zamiast znikac — znikajacy przycisk
   przesuwa to, co obok, i reka lapie w pustke. */
.fk-gal__strz[disabled] { opacity: .32; cursor: default; box-shadow: none; }
.fk-gal__strz[disabled]:hover { background: var(--paper-2); color: var(--ink); border-color: var(--line); }

/* Licznik po LEWEJ. Po prawej stoi „Powieksz" i przy 350-pikselowym kadrze
   na telefonie oba pudelka lezaly jedno na drugim — zmierzone: 252–356 px
   kontra 310–358 px. */
.fk-gal__licz {
  position: absolute;
  left: 12px;
  bottom: 12px;
  z-index: 2;
  margin: 0;
  padding: 3px 10px;
  border-radius: var(--r-pill);
  background: rgba(22, 28, 34, .74);
  color: #fff;
  font-size: .82rem;
  font-variant-numeric: tabular-nums;
}

/*
 * Na ekranie dotykowym strzalek NIE MA.
 *
 * Gest przesuniecia palcem jest tam podstawowym sposobem obslugi karuzeli,
 * a dwa przyciski 42x42 px lezace na zdjeciu zaslanialy produkt i — w stanie
 * wyłączonym, przy krancu toru — wygladaly jak zepsuty interfejs. Licznik
 * i miniatury mowia, gdzie jestesmy.
 */
@media (hover: none) {
  .fk-gal__strz { display: none; }
}

/* Na szerokim ekranie strzalki pojawiaja sie dopiero przy najechaniu —
   zdjęcie produktu ma być pierwsza rzecza, która widac. */
@media (hover: hover) and (min-width: 1000px) {
  .fk-gal__strz { opacity: 0; }
  .fk-gal__main:hover .fk-gal__strz,
  .fk-gal__strz:focus-visible { opacity: 1; }
  .fk-gal__main:hover .fk-gal__strz[disabled] { opacity: .32; }
}


/* =========================================================================
   45. Kontrolki WooCommerce — paleta Flatsome i pasek zakupu
   ========================================================================= */

/*
 * FLATSOME MA WLASNE ZMIENNE I NIKT ICH NIGDY NIE USTAWIL.
 *
 * `--fs-color-secondary` to fabryczna terakota #D26E4B. Siedzi na
 * `.button.alt`, `.checkout-button` i `.secondary` — czyli na przycisku
 * „Dodaj do koszyka” i na „Przejdz do płatności”. Na stronie produktu
 * byla to jedyna cieplo-pomaranczowa plama na chlodnej stronie i zarazem
 * NAJWAZNIEJSZY przycisk w sklepie.
 *
 * Scigac to po selektorach znaczy trafiac w koszyk, zamówienie, konto
 * i powiadomienia po kolei, przez lata. Zrodlem jest szescioro zmiennych,
 * więc podmieniamy zrodlo.
 *
 * Deklaracja siedzi na `body`, a nie w `:root`: Flatsome wypisuje swoje
 * `:root` w znaczniku <style> W GLOWIE, więc przy rownej specyficznosci
 * decyduje kolejność, a inline potrafi wyladowac po naszym arkuszu.
 * Wlasnosc niestandardowa zadeklarowana na elemencie PRZESLANIA odziedziczona
 * z `:root` niezależnie od kolejności — to ta sama zasada, która wcześniej
 * kazala wtyczce kreatora trzymac stara palete.
 */
body.fk-redesign {
  --fs-color-primary:                 var(--rose);
  --fs-color-secondary:               var(--rose);
  --fs-color-success:                 var(--stock);
  --fs-color-alert:                   #B3261E;
  --fs-experimental-link-color:       var(--rose);
  --fs-experimental-link-color-hover: var(--rose-deep);
}

/* --- Pasek zakupu ------------------------------------------------------ */

/*
 * Wiersz „ilość + do koszyka” szedl w całości z ustawien fabrycznych Flatsome:
 * 40 px wysokości, zerowy promien, obramowanie #DDD, tlo #F9F9F9 i napis
 * grubosci 700. Reszta strony ma 50-pikselowe przyciski o promieniu 8 px
 * i wadze 500 — ten jeden wiersz wygladal jak wklejony z innego sklepu.
 */
.fk-buy form.cart {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 10px;
  margin: 24px 0 0;
}
.fk-buy form.cart .fpf-fields,
.fk-buy form.cart .fpf-totals { flex: 1 0 100%; }

.fk-buy .quantity,
.fk-buy .ux-quantity {
  flex: 0 0 auto;
  display: flex;
  align-items: stretch;
  height: 52px;
  border: 1px solid var(--line-strong);
  border-radius: var(--r-sm);
  background: var(--paper-2);
  overflow: hidden;
}
.fk-buy .quantity input[type='button'],
.fk-buy .ux-quantity__button {
  width: 40px;
  min-width: 40px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--ink-soft);
  font-size: 1.05rem;
  font-weight: 400;
  line-height: 1;
  cursor: pointer;
  transition: background-color .18s var(--ease), color .18s var(--ease);
}
.fk-buy .quantity input[type='button']:hover,
.fk-buy .ux-quantity__button:hover { background: var(--blush); color: var(--ink); }

.fk-buy .quantity input.qty {
  width: 46px;
  min-width: 46px;
  height: auto;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  text-align: center;
  font-family: var(--font-ui);
  font-size: .98rem;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.fk-buy .quantity input.qty:focus { box-shadow: none; outline: 0; }

/* Przycisk niesie te sama forme co `.fk-btn--rose`. Nie mozemy nadac mu tej
   klasy — znacznik wychodzi z WooCommerce — więc powtarzamy tu ksztalt.
   `flex: 1 1 220px` daje mu caly zapas wiersza: to jest cel tej kolumny. */
.fk-buy .single_add_to_cart_button,
.fk-buy form.cart button[type='submit'] {
  flex: 1 1 220px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 52px;
  padding: 14px 26px;
  border: 1px solid transparent;
  border-radius: var(--r-sm);
  background: var(--rose);
  color: var(--on-rose);
  font-family: var(--font-ui);
  font-size: .98rem;
  font-weight: 600;
  letter-spacing: -.005em;
  line-height: 1.2;
  text-transform: none;
  white-space: normal;
  text-wrap: balance;
  box-shadow: none;
  transition: background-color .22s var(--ease), box-shadow .22s var(--ease);
}
.fk-buy .single_add_to_cart_button:hover,
.fk-buy form.cart button[type='submit']:hover {
  background: var(--rose-deep);
  box-shadow: var(--cien);
}
.fk-buy .single_add_to_cart_button:disabled,
.fk-buy .single_add_to_cart_button.disabled { opacity: .45; cursor: not-allowed; }

/* --- Powiadomienia sklepu --------------------------------------------- */

/* Komunikaty WooCommerce („dodano do koszyka”, błędy płatności) renderuja sie
   poza naszymi szablonami, więc dotad wychodzily w stylu fabrycznym. */
.fk-app .woocommerce-message,
.fk-app .woocommerce-info,
.fk-app .woocommerce-error {
  border-radius: var(--r-md);
  border: 1px solid var(--line);
  background: var(--paper-2);
  color: var(--ink);
  font-family: var(--font-ui);
  font-size: .95rem;
  line-height: 1.55;
}
.fk-app .woocommerce-message { border-left: 3px solid var(--stock); }
.fk-app .woocommerce-info    { border-left: 3px solid var(--rose); }
.fk-app .woocommerce-error   { border-left: 3px solid #B3261E; }

/* Wiersz „nic nie znaleziono". Nie ma miniatury ani ceny, więc nie może
   udawac produktu — `:not(:has(.search-image))` odroznia go bez dodatkowej
   klasy, której i tak nie da sie przekazac przez renderer Flatsome. */
.fk-search__live .autocomplete-suggestion:not(:has(.search-image)) {
  padding: 14px 14px;
  color: var(--ink-soft);
  font-size: .92rem;
  line-height: 1.45;
}
.fk-search__live .autocomplete-suggestion:not(:has(.search-image)) .search-name { font-style: italic; }


/* =========================================================================
   46. Opis produktu — dwie miary w jednej kolumnie
   ========================================================================= */

/*
 * Tekst chce być waski, zdjęcie chce być szerokie. Dotad wygrywalo jedno
 * ustawienie dla obu: `max-width: 62ch` na calym opisie, więc zdjęcia
 * produktowe scieskaly sie do 515 px, a po prawej zostawal pusty pas.
 *
 * Miara wraca na POSZCZEGOLNE elementy tekstowe, a figury jej nie maja.
 */
.fk-proza--opis { max-width: none; }
.fk-proza--opis > p,
.fk-proza--opis > ul,
.fk-proza--opis > ol,
.fk-proza--opis > h3,
.fk-proza--opis > blockquote { max-width: 64ch; }

/* Pierwszy akapit czyta sie jak wstep — wiekszy stopien i pelna czern.
   To jedyne miejsce w opisie, gdzie roznicujemy wage tresci. */
.fk-proza--opis > p:first-of-type {
  font-size: 1.14rem;
  line-height: 1.68;
  color: var(--ink);
}

.fk-proza--opis > p + p { margin-top: 18px; }

/* Srodtytul z hurtowni po zejsciu na `<h3>` dostaje oddech i kreske — bez
   tego szesc akapitow pod rzad czytalo sie jak jeden blok. */
.fk-proza--opis > h3 {
  margin-top: 40px;
  padding-top: 22px;
  border-top: 1px solid var(--hair);
}
.fk-proza--opis > h3:first-child { margin-top: 0; padding-top: 0; border-top: 0; }

/* Figura: ramka i tlo, żeby zdjęcie na bieli nie rozplywalo sie w stronie. */
.fk-proza__fig {
  margin: 30px 0;
  padding: 0;
  border: 1px solid var(--hair);
  border-radius: var(--r-md);
  overflow: hidden;
  background: var(--paper-2);
}
.fk-proza__fig img {
  display: block;
  width: 100%;
  height: auto;
  margin: 0;
}

/* Zdjęcie, które mimo wszystko zostalo w akapicie (tekst obok obrazka
   w tym samym `<p>`) nie może rozpychac kolumny. */
.fk-proza--opis p img { max-width: 100%; height: auto; border-radius: var(--r-sm); }


/* =========================================================================
   47. Koszt rysowania strony glownej
   ========================================================================= */

/*
 * Strona główna ma na telefonie 24 664 px wysokości i 4107 elementow w drzewie.
 * Przeglądarka liczy uklad i maluje CALOSC, chociaz jednorazowo widac
 * mniej niż cztery procent tej wysokosci.
 *
 * `content-visibility: auto` kaze pominac prace nad sekcjami poza ekranem
 * i wykonac ja dopiero przy dojezdzaniu do nich. `contain-intrinsic-size`
 * ze slowem `auto` podaje wysokość zastepcza na pierwsze malowanie,
 * a potem przeglądarka pamieta ZMIERZONA — dzięki temu pasek przewijania
 * nie skacze przy powrocie.
 *
 * 1200 px to mediana zmierzonych wysokości czternastu odroczonych sekcji
 * na telefonie (zakres 807–2577). Im blizej prawdy, tym mniej pasek
 * przewijania zmienia długość przy pierwszym zjezdzie w dol.
 *
 * Pierwsze trzy sekcje (hero, polecane, zaufanie) zostaja poza regula:
 * mieszcza sie w pierwszym ekranie albo tuz pod nim, więc odraczanie ich
 * nic nie daje, a może opoznic najwieksze malowanie.
 *
 * Wewnątrz `main` nie ma ani jednego elementu `position: sticky` lub `fixed`
 * (sprawdzone na wgranej stronie) — a tylko takie ucierpialyby na
 * ograniczeniu, które ta wlasnosc wlacza.
 */
main#treść > section:nth-child(n+4) {
  content-visibility: auto;
  contain-intrinsic-size: auto 1200px;
}

/* Druk i tryb ograniczonego ruchu: nic nie pomijamy. Przy drukowaniu
   pominieta sekcja wyszlaby pusta. */
@media print {
  main#treść > section:nth-child(n+4) { content-visibility: visible; }
}



/* =========================================================================
   49. Filtry archiwum
   ========================================================================= */

/*
 * PANEL W ARKUSZU NA TELEFONIE — i to jest naprawa, nie ozdobnik.
 *
 * `.fk-side` ma `display: none` ponizej 1100 px, a skrypt PRZENOSI ten sam
 * element do arkusza otwieranego przyciskiem „Filtry". Przeniesienie nie
 * zmienia jednak tego, co mówi arkusz stylow — więc panel ladowal w arkuszu
 * dalej ukryty. Zmierzone na wgranej stronie przy 390 px: arkusz otwiera sie
 * i ma 390x180 px, jego treść 390x24 px, a sam panel 0x0.
 *
 * Innymi slowy przycisk „Filtry" na telefonie otwieral PUSTA szuflade.
 */
.fk-sheet .fk-side { display: block; position: static; }

/* --- Formularz --------------------------------------------------------- */

.fk-filtry { display: block; }

/* Dwa pola ceny w jednym wierszu. Etykiety „od" i „do" zostaja widoczne:
   sam znak mysnika między pustymi polami nie mówi, które jest ktore. */
/*
 * `.fk-zakres`, a NIE `.fk-cena`.
 *
 * Pierwsza wersja tego panelu nazwala wiersz „od–do" klasa `.fk-cena`. Taka
 * klasa juz istniala: wtyczka fk-ceny-netto trzyma na niej przełącznik
 * netto/brutto — `.fk-cena { display: none }` i regula pokazujaca wlasciwa
 * wersje ceny. Obie deklaracje maja te sama wage (0,1,0), a arkusz motywu
 * laduje sie PO arkuszu wtyczki, więc wygrywala moja: na każdej karcie
 * produktu w sklepie pokazywaly sie OBIE ceny naraz, brutto i netto.
 *
 * Kontrola `.klasy.py` zglasza dzis taka kolizje sama.
 */
.fk-zakres { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 8px; align-items: center; }
.fk-zakres__p {
  display: flex;
  align-items: center;
  gap: 7px;
  min-height: 46px;
  padding: 0 12px;
  border: 1px solid var(--line-strong);
  border-radius: var(--r-sm);
  background: var(--paper-2);
  transition: border-color .2s var(--ease);
}
.fk-zakres__p:focus-within { border-color: var(--rose); }
.fk-zakres__lab { flex: none; font-size: .87rem; color: var(--mist); }
.fk-zakres__myslnik { color: var(--mist); }

/* Pole liczbowe bez strzalek: przy szerokosci 60 px zjadaly polowe miejsca
   na kwote, a klawiatura numeryczna na telefonie i tak jest szybsza. */
.fk-filtry .fk-zakres__p input {
  width: 100%;
  min-width: 0;
  height: auto;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  font-family: var(--font-ui);
  font-size: .97rem;
  font-variant-numeric: tabular-nums;
  color: var(--ink);
  -moz-appearance: textfield;
}
.fk-filtry .fk-zakres__p input:focus { box-shadow: none; outline: 0; }
.fk-zakres__p input::-webkit-outer-spin-button,
.fk-zakres__p input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.fk-zakres__info { margin-top: 10px; font-size: .85rem; line-height: 1.5; color: var(--mist); }
.fk-zakres__info .woocommerce-Price-amount { color: var(--ink-soft); }

.fk-filtry__akcje { display: grid; gap: 12px; justify-items: center; padding-top: 4px; }
.fk-filtry__czysc { font-size: .89rem; color: var(--mist); text-decoration: underline; text-underline-offset: 3px; }
.fk-filtry__czysc:hover { color: var(--rose); }

/* Na komputerze panel jest widoczny caly czas i sam wysyla sie przyciskiem;
   w arkuszu na telefonie robi to przycisk w stopce, więc drugi byłby
   powtorzeniem tuz nad nim. */
.fk-sheet .fk-filtry__akcje { display: none; }

/* --- Plakietki wlaczonych filtrow -------------------------------------- */

.fk-chipy { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.fk-chipy .fk-chip { min-height: 36px; padding: 6px 13px; font-size: .87rem; text-decoration: none; }
.fk-chipy .fk-chip svg { width: 11px; height: 11px; flex: none; color: var(--mist); }
.fk-chipy .fk-chip:hover svg { color: var(--rose); }
.fk-chip.fk-chip--czysc { border-style: dashed; color: var(--mist); }
.fk-chip.fk-chip--czysc:hover { border-style: solid; color: var(--rose); }



/* =========================================================================
   50. Scena nagłówka: wybrany produkt
   ========================================================================= */

/*
 * Ramka sceny jest odnosnikiem, gdy wlasciciel sklepu wskazal bestsellera
 * (Produkty → Bestseller). Na duzym zdjeciu w nagłówku ludzie klikaja
 * odruchowo — dotad nie dzialo sie nic.
 */
.fk-hero__pic--produkt {
  display: block;
  position: relative;
  text-decoration: none;
  transition: box-shadow .26s var(--ease), translate .26s var(--ease);
}
.fk-hero__pic--produkt:hover {
  translate: 0 -3px;
  box-shadow: 0 4px 14px rgba(22,28,34,.07), 0 38px 70px -26px rgba(22,28,34,.34);
}

/* Zdjęcie produktu MIESCIMY w kadrze, a nie przycinamy.
   Fotografie z katalogu sa kwadratowe i leza na bieli; `cover` w ramce 4:3
   scinalby produkt u gory i u dolu. Gorny margines wiekszy — pod paskiem
   z nazwa i cena. */
.fk-hero__pic--produkt .fk-hero__bg {
  object-fit: contain;
  padding: 16% 9% 7%;
  background: var(--paper-2);
}

/* Pasek z nazwa i cena. Lezy NA zdjeciu, na bialym rozmyciu: zdjęcia
   produktów maja biale tlo, więc pasek nie odcina sie jak naklejka, a tekst
   i tak stoi na jasnym. */
.fk-hero__best {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 2;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 3px 14px;
  padding: 16px 20px 22px;
  background: linear-gradient(to bottom, rgba(255,255,255,.97) 58%, rgba(255,255,255,0));
}
.fk-hero__bestk {
  flex: 1 0 100%;
  font-size: .74rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--rose);
}
.fk-hero__bestn {
  /* Podstawa ZERO, nie `auto`. Przy `auto` pole zglasza szerokosc calej nazwy,
     a zawijanie w kontenerze elastycznym dzieje sie PRZED kurczeniem — więc
     dluga nazwa spychala cenę do osobnego wiersza i pasek rosl. */
  flex: 1 1 0;
  min-width: 0;
  font-size: .97rem;
  font-weight: 500;
  line-height: 1.35;
  color: var(--ink);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.fk-hero__bestc {
  flex: none;
  font-size: 1.06rem;
  font-weight: 600;
  letter-spacing: -.015em;
  color: var(--ink);
  white-space: nowrap;
}
.fk-hero__bestc .woocommerce-Price-amount { color: inherit; }

/* Na telefonie nazwa mieści się w JEDNYM wierszu i stoi w tym samym rzędzie
   co cena. Przy dwóch wierszach pasek miał 123 px na ramce wysokiej na 251 —
   zasłaniał połowę zdjęcia produktu, które ma tu być bohaterem. */
@media (max-width: 599px) {
  .fk-hero__best { padding: 12px 15px 18px; gap: 2px 10px; }
  .fk-hero__bestk { font-size: .7rem; }
  .fk-hero__bestn { font-size: .92rem; -webkit-line-clamp: 1; }
  .fk-hero__bestc { font-size: 1rem; }
}



/* =========================================================================
   51. Ulubione
   ========================================================================= */

/* Serce zapalone. Wypelnienie, nie sama zmiana koloru obrysu: przy ikonie
   rysowanej kreska różnica w samym odcieniu jest ledwie widoczna. */
.fk-card__fav[aria-pressed='true'] { color: var(--rose); }
.fk-card__fav[aria-pressed='true'] svg { fill: currentColor; }

/* Panel korzysta z tej samej konstrukcji co koszyk boczny — rozni sie
   wyłącznie tym, co w nim stoi. */
.fk-cart--ulubione .fk-prods { grid-template-columns: minmax(0, 1fr); gap: 14px; }
.fk-cart--ulubione .fk-card__media { aspect-ratio: 1 / 1; }
.fk-cart--ulubione .fk-note { margin: 8px 0; }


/* Tabela wpisana w edytorze nie ma żadnej klasy — a w poradniku o cenach to
   najważniejszy element na stronie. Zmierzone na wgranym wpisie: trzy kolumny
   liczb sklejone w jeden ciag, bez odstepow i bez linii.

   Wygląd bierzemy z komponentu `.fk-table`, żeby tabela w treści i tabela
   w szablonie nie byly dwiema roznymi rzeczami. Waski ekran przewija ja
   w bok zamiast łamać liczby. */
.fk-proza table {
  display: block;
  width: 100%;
  overflow-x: auto;
  border-collapse: separate;
  border-spacing: 0;
  border-top: 1px solid var(--ink);
  margin: 26px 0;
  font-family: var(--font-ui);
  font-size: .95rem;
}
.fk-proza table th,
.fk-proza table td {
  padding: 14px 20px 14px 0;
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--hair);
}
.fk-proza table thead th {
  font-size: .79rem;
  font-weight: 600;
  letter-spacing: .11em;
  text-transform: uppercase;
  color: var(--mist);
  white-space: nowrap;
}
.fk-proza table tbody th { font-weight: 500; color: var(--ink); }
.fk-proza table td { color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.fk-proza table tr:last-child th,
.fk-proza table tr:last-child td { border-bottom: 0; }
