/*
Theme Name: FATBLACKCAT
Theme URI: https://fatblackcat.io
Author: SOLARDESIGN
Description: Motyw blokowy sklepu FATBLACKCAT. Kierunek premium przez odejmowanie — ciężka czerń, cisza wokół produktu, akcent użyty rzadko. Tokeny w theme.json, nadpisania WooCommerce klasyczne (Fluid Checkout).
Version: 1.133.86
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 8.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: fatblackcat
Tags: block-theme, e-commerce, full-site-editing
*/

/* ==========================================================================
   Uwaga: kolory, typografia i odstępy są w theme.json.
   Ten arkusz dokłada wyłącznie to, czego theme.json nie wyraża.
   Nie duplikuj tu wartości z palety — używaj zmiennych --wp--preset--*.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Poprawki zastane — długi z audytu produkcji
   -------------------------------------------------------------------------- */

/* Divi justował akapity: na wąskim ekranie robiły się rzeki i dziury. */
body,
.wp-block-post-content p,
.entry-content p {
	text-align: left;
	hyphens: none;
}

/* Tekst czytelny: nie szerszy niż ~66 znaków, niezależnie od kontenera. */
.wp-block-post-content > p,
.wp-block-post-content > ul,
.wp-block-post-content > ol {
	max-width: 66ch;
}

/* Nagłówki nie zostawiają sierot. */
h1, h2, h3, h4, h5,
.wp-block-heading {
	text-wrap: balance;
}

/* --------------------------------------------------------------------------
   2. Dostępność
   -------------------------------------------------------------------------- */

:focus-visible {
	outline: 2px solid var(--wp--preset--color--purr);
	outline-offset: 3px;
	border-radius: 2px;
}

/* W sekcjach ciemnych fiolet jako obwódka focusu jest niewidoczny (1,59:1).
   Reguła akcentu: na ciemnym rolę przejmuje biel. */
.is-style-sekcja-ciemna :focus-visible {
	outline-color: var(--wp--preset--color--base);
}

.skip-link:focus {
	position: fixed;
	top: var(--wp--preset--spacing--40);
	left: var(--wp--preset--spacing--40);
	z-index: 999;
	padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40);
	background: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--base);
	border-radius: 2px;
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}

/* --------------------------------------------------------------------------
   3. Nagłówek strony

   Na produkcji logo i pasek koszyka zjadały ~250 px na telefonie, zanim
   zaczynała się treść — przy tym, że mobile ma lepszy CTR i pozycję w Google
   niż desktop. Nagłówek ma się zmieścić w 64 px.
   -------------------------------------------------------------------------- */

.fbc-header {
	/* Trzy pasy: logo, menu, ikony (klient 2026-09-18). Skrajne pasy mają tę
	   samą szerokość (`1fr`), więc menu stoi na osi nagłówka niezależnie od
	   tego, jak szerokie jest logo i ile ikon leży po prawej. */
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: var(--wp--preset--spacing--40);
	min-height: 64px;
	padding-block: var(--wp--preset--spacing--30);
}
.fbc-header > .wp-block-site-logo { justify-self: start; }
.fbc-header__ikony { justify-self: end; align-items: center; }
/* Konto przyjeżdża tu jako pozycja listy z menu, więc poza listą pokazywałoby
   znacznik punktora — a jako `list-item` zajmowałoby też własny wiersz. */
.fbc-header__ikony > .wp-block-navigation-item {
	display: flex;
	align-items: center;
	margin: 0;
	padding: 0;
	list-style: none;
}
/* Stopka menu pełnoekranowego leży pod siatką, na całej szerokości. */
.fbc-header > .fbc-menu-stopka { grid-column: 1 / -1; }
@media (max-width: 781.98px) {
	/* Na telefonie menu zwija się do hamburgera i ten ma stać ZA ikonami
	   (klient 2026-09-18). Trzy pasy zamiast dwóch: bez tego nawigacja i ikony
	   trafiały do tej samej komórki i zawijały się do drugiego wiersza. */
	.fbc-header { grid-template-columns: 1fr auto auto; column-gap: var(--wp--preset--spacing--40); }
	/* Wiersz podany WPROST. Nawigacja stoi w znacznikach przed ikonami, a ma
	   trafić do trzeciej kolumny — przy samym `grid-column` automat przesuwał
	   ikony do drugiego wiersza, bo kursor był już za nimi (klient 2026-09-18:
	   „bez wrapowania"). */
	.fbc-header > .wp-block-site-logo { grid-column: 1; grid-row: 1; }
	.fbc-header__ikony { grid-column: 2; grid-row: 1; flex-wrap: nowrap; }
	.fbc-header > nav.wp-block-navigation { grid-column: 3; grid-row: 1; justify-content: flex-end; }
}

.fbc-header .custom-logo,
.fbc-header .wp-block-site-logo img {
	height: 28px;
	width: auto;
	display: block;
}

/* Nawigacja na produkcji łamała się na dwie linie na desktopie. */
.fbc-header .wp-block-navigation {
	flex-wrap: nowrap;
	white-space: nowrap;
}

.fbc-header .wp-block-navigation__responsive-container-open,
.fbc-header .wp-block-navigation__responsive-container-close {
	padding: var(--wp--preset--spacing--20);
}

/* Bez sierot: przeglądarka nie zostawia pojedynczego słowa w ostatnim
   wierszu akapitu (`text-wrap: pretty`, Chrome 117+, inne ignorują bez
   szkody). Nagłówki mają `balance` tam, gdzie ustawione punktowo — globalnie
   nie, bo zmieniałoby to łamanie hero dostrojone ręcznie. */
p,
li,
dd,
dt,
figcaption,
blockquote,
.fbc-punkty__rozwiniecie > p {
	text-wrap: pretty;
}

/* --------------------------------------------------------------------------
   4. Komponenty
   -------------------------------------------------------------------------- */

/* Etykieta sekcji. Na jasnym tle fioletowa, na ciemnym biała — reguła akcentu. */
.fbc-eyebrow {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.14em;
	color: var(--wp--preset--color--purr);
	margin-block-end: var(--wp--preset--spacing--30);
}
/* Nadlinia jest akapitem, więc otwierając blok zbierała górny margines z rytmu
   akapitów — 13 px doklejone do każdego odstępu nad treścią sekcji. W kodzie
   padding wychodził równy, a optycznie góra była większa od dołu (klient 2026-09-15).
   Odstęp nad nią ma dawać wyłącznie kontener. */
.fbc-eyebrow:first-child { margin-block-start: 0; }
/* Akcent na ciemnym tle jaśniejszym odcieniem: brandowy fiolet ma na Coal
   kontrast 1,59 i jako tekst po prostu znika. #C561BE trzyma tę samą barwę
   i daje 4,62 na Coal oraz 5,15 na Ground dark — AA dla tekstu.
   UWAGA: na Graphite (#313338) to tylko 3,51, czyli poniżej progu.
   Ten odcień jest do tła Coal i ciemniejszego, nie do szarości. */
.is-style-sekcja-ciemna .fbc-eyebrow {
	color: var(--wp--preset--color--purr-light);
}

/* --------------------------------------------------------------------------
   Zestawienia etykieta — wartość: JEDNA konwencja na cały motyw

   Wcześniej `.fbc-spec` miał własną typografię (mono, tabular-nums, rozmiar
   bazowy), a tabele w specyfikacji swoją (sans, `small`). Wychodziły z tego dwa
   różne wyglądy tego samego typu treści, a lista wyglądała jak wyjątek —
   do tego wartość była wizualnie większa od etykiety, bo `dd` nie miało
   ustawionego rozmiaru i dziedziczyło bazowy (klient 2026-09-15).

   Teraz obowiązuje jedno: rozmiar `small`, krój sans, etykieta w `contrast-2`
   i szerokości 40%, wartość w `contrast`, obie do lewej, wiersze oddzielone
   linią. Ta sama reguła obsługuje listy `.fbc-spec` i tabele `.fbc-tabele`,
   więc nowy blok tego typu nie wymaga własnych stylów.
   -------------------------------------------------------------------------- */
.fbc-spec {
	display: flex;
	align-items: baseline;
	gap: var(--wp--preset--spacing--40);
	padding-block: var(--wp--preset--spacing--30);
	border-block-end: 1px solid var(--wp--preset--color--line);
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.5;
}
.is-style-sekcja-ciemna .fbc-spec {
	border-block-end-color: var(--wp--preset--color--line-dark);
}
.fbc-spec dt {
	flex: 0 0 40%;
	color: var(--wp--preset--color--contrast-2);
	margin: 0;
}
.is-style-sekcja-ciemna .fbc-spec dt {
	color: var(--wp--preset--color--contrast-3);
}
.fbc-spec dd {
	flex: 1;
	margin: 0;
	color: var(--wp--preset--color--contrast);
	/* Bez mono i bez `tabular-nums`: kolumna nie jest już wyrównana do prawej,
	   więc nie ma czego wyrównywać cyframi o stałej szerokości. */
	font-variant-numeric: normal;
}
.is-style-sekcja-ciemna .fbc-spec dd {
	color: var(--wp--preset--color--base);
}

/* Plakietka. Fiolet jako powierzchnia — działa na obu tłach. */
.fbc-badge {
	display: inline-block;
	background: var(--wp--preset--color--purr);
	color: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.7rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	padding: 3px var(--wp--preset--spacing--20);
	border-radius: 2px;
}

/* --------------------------------------------------------------------------
   5. Tabele i treści szerokie

   Knowledge Base ma 6 823 słowa i tabele specyfikacji — nie mogą rozpychać
   strony w poziomie.
   -------------------------------------------------------------------------- */

.wp-block-table,
.wp-block-preformatted,
.wp-block-code {
	overflow-x: auto;
}

.wp-block-table table {
	font-variant-numeric: tabular-nums;
}

.wp-block-table th {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.75rem;
	font-weight: 500;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--wp--preset--color--contrast-3);
}

/* --------------------------------------------------------------------------
   6. Obrazy
   -------------------------------------------------------------------------- */

img,
.wp-block-image img {
	max-width: 100%;
	height: auto;
}

/* Produkt na ciemnym tle: brak ramek i cieni, sam przedmiot. */
.is-style-sekcja-ciemna .wp-block-image img {
	border-radius: 2px;
}

/* --------------------------------------------------------------------------
   7. Lista specyfikacji (.fbc-specs)
   -------------------------------------------------------------------------- */

.fbc-specs {
	margin: 0;
	max-width: 46rem;
}

/* Galeria produktu na ciemnym tle — bez ramek, sam przedmiot. */
.is-style-sekcja-ciemna .woocommerce-product-gallery img {
	border-radius: 2px;
}

/* Blok "details" w FAQ: kanciasty, z linią zamiast tła. */
.wp-block-details {
	border-block-end: 1px solid var(--wp--preset--color--line);
	padding-block: var(--wp--preset--spacing--40);
}
.is-style-sekcja-ciemna .wp-block-details {
	border-block-end-color: var(--wp--preset--color--line-dark);
}
.wp-block-details summary {
	cursor: pointer;
	font-weight: 700;
	list-style: none;
}
.wp-block-details summary::-webkit-details-marker { display: none; }
.wp-block-details summary::after {
	content: "+";
	float: right;
	font-family: var(--wp--preset--font-family--mono);
	font-weight: 400;
}
.wp-block-details[open] summary::after { content: "–"; }

/* --------------------------------------------------------------------------
   8. Strona główna
   -------------------------------------------------------------------------- */

/* Pasek danych pod hero. Liczby są argumentem sprzedażowym, więc mono
   i wyrównanie tabelaryczne, a nie ozdobnik. */
.fbc-stat {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	font-variant-numeric: tabular-nums;
	color: var(--wp--preset--color--contrast-3);
	margin: 0;
}
.fbc-stat strong {
	display: block;
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--x-large);
	font-weight: 800;
	letter-spacing: -0.02em;
	color: inherit;
}
.is-style-sekcja-ciemna .fbc-stat { color: var(--wp--preset--color--contrast-3); }
.is-style-sekcja-ciemna .fbc-stat strong { color: var(--wp--preset--color--base); }

/* Górna linia paska danych — cienka, w kolorze linii sekcji. */
.fbc-hero > .wp-block-group[style*="border"] {
	border-top-color: var(--wp--preset--color--line-dark);
}

/* Przycisk obrysowany („ghost") ma jedną definicję — sekcja 18 (kolory przez
   zmienne `--fbc-ghost-*`) i sekcja 24 (kształt). Nie dopisuj tu wariantów:
   nowy kontekst ustawia trzy zmienne, nie własne reguły. */

/* Kolumny na telefonie: WordPress układa je w pion, ale bez odstępu. */
@media (max-width: 781px) {
	.wp-block-columns { gap: var(--wp--preset--spacing--60); }
}

/* --------------------------------------------------------------------------
   8a. Karty produktów („What we are building")

   Trzy karty na jasnym tle. Narożniki ścięte tak samo jak w przyciskach
   (lewy górny i prawy dolny): `corner-shape: bevel` rysuje prawdziwe
   obramowanie, `clip-path` zostaje jako zapas (bez linii, ale z kształtem).
   Ścięcie większe niż w przycisku, bo karta jest większa — 22 px zamiast 10.
   Kadr jest szarą płaszczyzną (base-2) z renderem z alfą w całości
   (`object-fit: contain`), bez kadrowania.
   -------------------------------------------------------------------------- */

.fbc-produkty-karty {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 12px;
	margin-block-start: var(--wp--preset--spacing--70);
}
.fbc-karta-produktu {
	--fbc-sciecie: 22px;
	position: relative;
	display: flex;
	flex-direction: column;
	background: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--line);
	clip-path: polygon(
		var(--fbc-sciecie) 0,
		100% 0,
		100% calc(100% - var(--fbc-sciecie)),
		calc(100% - var(--fbc-sciecie)) 100%,
		0 100%,
		0 var(--fbc-sciecie)
	);
	transition: border-color 250ms ease, transform 350ms cubic-bezier(.2,.7,.2,1);
}
@supports (corner-shape: bevel) {
	.fbc-karta-produktu {
		clip-path: none;
		corner-shape: bevel;
		border-radius: var(--fbc-sciecie) 0 var(--fbc-sciecie) 0;
		/* Bez tego kadr obrazu (własne tło) leży NA skośnej krawędzi i zakrywa
		   linię ramki w lewym górnym rogu; `clip` tnie dzieci do kształtu karty,
		   więc skos jest widoczny z obu stron tak samo. */
		overflow: clip;
	}
}
/* Najazd jak w kartach sekcji „After the box" (8f): fioletowa ramka i lekkie
   uniesienie. Obrys rysowany stożkowym gradientem zdjęty na życzenie klienta
   (2026-09-05). */
@media (hover: hover) {
	.fbc-karta-produktu:hover { border-color: var(--wp--preset--color--purr); transform: translateY(-3px); }
	.fbc-karta-produktu:hover .fbc-karta-produktu__kadr img { transform: scale(1.03); }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-karta-produktu:hover { transform: none; }
}
.fbc-karta-produktu__kadr {
	position: relative;
	/* Kwadrat (klient 2026-09-15): zdjęcia z sesji są niemal kwadratowe, więc
	   w kadrze 4:3 zostawały szerokie puste pasy po bokach. */
	aspect-ratio: 1 / 1;
	overflow: hidden;
	/* Tło jak karty w sklepie i galeria produktu: płyta z ziarnem (klient 2026-09-27:
	   „ujednolić tła — do tego, co jest w sklepie”). Zmienne w woocommerce.css (:root). */
	background-color: var(--fbc-plyta, #e8e8eb);
	background-image: var(--fbc-ziarno);
	background-repeat: repeat;
	border-block-end: 1px solid var(--wp--preset--color--line);
	padding: var(--wp--preset--spacing--50);
	box-sizing: border-box;
}
.fbc-karta-produktu__kadr img {
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: contain;
	object-position: 50% 50%;
	display: block;
	transition: transform 900ms cubic-bezier(.2,.7,.2,1);
}
/* Okładki pedałów (meta `fbc_okladka`, kwadrat o wspólnej geometrii) — JEDNA reguła
   dla kart w sklepie i na stronie głównej (2026-09-27: „to musi być powiązane jedno
   z drugim”): produkt w optycznym środku, oddech 10 % u góry i z boków, 6 % pod
   spodem na wygasający cień. Kadr karty na głównej traci przy nich własny padding. */
.fbc-produkt-karta__kadr img.fbc-okladka,
.fbc-karta-produktu__kadr img.fbc-okladka {
	padding: 10% 10% 6%;
	box-sizing: border-box;
	object-fit: contain;
	object-position: 50% 50%;
}
.fbc-karta-produktu__kadr:has(img.fbc-okladka) { padding: 0; }
/* Drugie ujęcie na hover na kartach głównej — jak w sklepie (woocommerce.css, karty):
   leży nad okładką i przenika się po najechaniu na całą kartę; bez kursora go nie ma. */
@media (hover: hover) {
	.fbc-karta-produktu__kadr .fbc-okladka-hover { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; }
	.fbc-karta-produktu__kadr img { transition: opacity .35s ease, transform 900ms cubic-bezier(.2,.7,.2,1); }
	.fbc-karta-produktu:hover .fbc-karta-produktu__kadr .fbc-okladka-hover { opacity: 1; }
	.fbc-karta-produktu:hover .fbc-karta-produktu__kadr:has(.fbc-okladka-hover) img:not(.fbc-okladka-hover) { opacity: 0; }
}
@media not (hover: hover) { .fbc-karta-produktu__kadr .fbc-okladka-hover { display: none; } }
.fbc-karta-produktu__tresc {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: var(--wp--preset--spacing--50);
}
.fbc-karta-produktu__tresc .fbc-badge { align-self: flex-start; }
.fbc-karta-produktu__tresc h3 { margin-block-start: var(--wp--preset--spacing--40); text-wrap: balance; }
.fbc-karta-produktu__tresc p { margin-block-start: var(--wp--preset--spacing--30); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-2); max-width: 40ch; }
.fbc-karta-produktu__link {
	display: inline-block;
	align-self: flex-start;
	margin-block-start: auto;
	padding-block: var(--wp--preset--spacing--50) 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--purr);
	text-decoration: none;
}
.fbc-karta-produktu__link span { display: inline-block; transition: transform 250ms ease; }
.fbc-karta-produktu__link:hover span { transform: translateX(4px); }
/* Cala karta klikalna (klient 2026-09-16: "wszystkie karty produktow maja sie
   tak zachowywac"). Obszar klikniecia rozciaga warstwa `::after` odnosnika,
   zamiast opakowywac tresc karty w <a>: w drzewie dostepnosci zostaje jeden
   odnosnik z krotka nazwa, a nie blok z badge'em, naglowkiem i akapitem
   w srodku. Karta ma juz `position: relative`, wiec warstwa trzyma sie jej
   krawedzi; kursor rowniez jest na calej karcie, bo to ciagle ten <a>. */
.fbc-karta-produktu__link::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
}
.fbc-badge--obrys { background: transparent; border: 1px solid var(--wp--preset--color--purr); color: var(--wp--preset--color--purr); }

@media (max-width: 899.98px) {
	.fbc-produkty-karty { grid-template-columns: 1fr; }
	.fbc-karta-produktu { --fbc-sciecie: 16px; }
	.fbc-karta-produktu__kadr { aspect-ratio: 1 / 1; }
}

/* --------------------------------------------------------------------------
   8b. Atuty — punkty na renderze

   Jeden render z alfą wprost na tle sekcji (bez płaszczyzny), głowa pedału
   wystaje ponad sekcję; cztery znaczniki w mono; aktywny wypełnia się
   fioletem (powierzchnia, nie tekst). Lista po lewej i znaczniki po prawej
   są tą samą listą — JS je spina, CSS tylko stanami `is-active`.
   Ziarno z hero: sekcja dostaje `fbc-z-ziarnem` i warstwę `.fbc-ziarno`
   na końcu grupy (powody: sekcja 14).
   -------------------------------------------------------------------------- */

.fbc-z-ziarnem {
	position: relative;
	isolation: isolate;
}
.fbc-z-ziarnem > .fbc-ziarno {
	position: absolute;
	inset: 0;
	margin: 0 !important;
	z-index: -1;
	pointer-events: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='z'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23z)' opacity='.09'/%3E%3C/svg%3E");
	background-repeat: repeat;
}

.fbc-punkty {
	position: relative;
	display: grid;
	grid-template-columns: minmax(0, 0.95fr) minmax(0, 1fr);
	/* Etykiety wyprowadzeń wystają 7 % kadru w lewo, więc odstęp musi być
	   większy niż zwykłe 96 px — inaczej lista i etykiety siedziały obok siebie. */
	gap: clamp(6rem, 11vw, 11rem);
	/* Od góry, nie na środku: przy centrowaniu każda zmiana wysokości listy
	   przesuwała nagłówek. */
	align-items: start;
}
.fbc-punkty h2 { max-width: 16ch; text-wrap: balance; }
.fbc-punkty__lista {
	list-style: none;
	margin: var(--wp--preset--spacing--70) 0 0;
	padding: 0;
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
}
/* Jedna typografia dla trzech list rozwijanych (atuty 8b, PurrOS 8f, FAQ):
   siatka numer | tytuł | znak, tytuł 700 w rozmiarze bazowym, interlinia
   1,35, numer mono 400 w rozmiarze small, opis wcięty pod tytuł o kolumnę
   numeru + odstęp. Klient (2026-09-05): „why purrpro ma większe nagłówki —
   ujednolić". Zmienne dzielone z FAQ (`--fbc-faq-nr`, `--fbc-faq-gap`). */
.fbc-punkty { --fbc-faq-nr: 2.4rem; --fbc-faq-gap: var(--wp--preset--spacing--30); }
.fbc-punkty__pozycja {
	display: grid;
	grid-template-columns: var(--fbc-faq-nr) minmax(0, 1fr) 1.5rem;
	gap: var(--fbc-faq-gap);
	align-items: baseline;
	width: 100%;
	padding: var(--wp--preset--spacing--40) 0;
	margin: 0;
	border: 0;
	border-block-end: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 0;
	background: transparent;
	color: var(--wp--preset--color--contrast-3);
	font: inherit;
	font-weight: 700;
	line-height: 1.35;
	text-align: left;
	cursor: pointer;
	transition: color 250ms ease;
}
.fbc-punkty__pozycja .fbc-nr {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;   /* bez pogrubienia z przycisku (klient) */
	color: var(--wp--preset--color--contrast-3);
	transition: color 250ms ease;
}
.fbc-punkty__pozycja:hover,
.fbc-punkty__pozycja.is-active { color: var(--wp--preset--color--base); }
.fbc-punkty__pozycja.is-active .fbc-nr { color: var(--wp--preset--color--purr-light); }
.fbc-punkty__pozycja:focus-visible { outline: 2px solid var(--wp--preset--color--base); outline-offset: 2px; }
/* Znak rozwijania jak w FAQ (8f): dwie kreski, + zwinięte, × otwarte;
   biały na ciemnym, wypchnięty do prawej krawędzi listy. */
.fbc-punkty__znak {
	position: relative;
	align-self: center;
	justify-self: end;
	width: 14px;
	height: 14px;
}
.fbc-punkty__znak::before,
.fbc-punkty__znak::after {
	content: "";
	position: absolute;
	left: 0;
	top: 6px;
	width: 14px;
	height: 2px;
	/* currentColor: zwinięta pozycja jest szara (contrast-3), aktywna i po najeździe biała — znak idzie za tekstem. */
	background: currentColor;
	transition: transform 300ms cubic-bezier(.2,.7,.2,1);
}
.fbc-punkty__znak::after { transform: rotate(90deg); }
.fbc-punkty__pozycja.is-active .fbc-punkty__znak::before { transform: rotate(45deg); }
.fbc-punkty__pozycja.is-active .fbc-punkty__znak::after { transform: rotate(-45deg); }
@media (prefers-reduced-motion: reduce) {
	.fbc-punkty__znak::before, .fbc-punkty__znak::after { transition: none; }
}
/* Rozwijany opis: `max-height` 0 → stała wartość (trzy linie + odstęp),
   ta sama dla każdej pozycji. Dzięki temu w trakcie przejścia zwijanie
   jednej i rozwijanie drugiej sumują się dokładnie do stałej i nic pod
   listą nie drga. Wariant z wierszami siatki (0fr → 1fr) tego nie dawał,
   bo wysokość zależała od treści. */
/* Rezerwa wysokości opisu (stała, żeby lista nie drgała przy przełączaniu):
   cztery linie w paśmie 1200–1439 px (kolumna ok. 430–500 px, najdłuższy
   opis ma 112 znaków, a `text-wrap: pretty` potrafi dołożyć linię), dwie
   linie od 1440 px. Rezerwa musi być ≥ realnej liczbie
   linii, bo `overflow: hidden` obciąłby tekst. Poniżej 1200 px rezerwy nie
   ma — patrz blok przy regułach rozwijania. */
.fbc-punkty { --fbc-opis-h: calc(4 * 1.55em + var(--wp--preset--spacing--40)); }
@media (min-width: 1440px) {
	.fbc-punkty { --fbc-opis-h: calc(3 * 1.55em + var(--wp--preset--spacing--40)); }
}

.fbc-punkty__el { position: relative; border-block-end: 1px solid var(--wp--preset--color--line-dark); }
/* Pasek auto-przełączania pod aktywną pozycją (5 s, atuty.js reaguje na
   `animationend`) — ta sama mechanika co punkty PurrOS (8f). Najazd NIE
   zatrzymuje zegara (klient 2026-09-05: „nie chcę, żeby hover pauzował"). */
.fbc-punkty__pasek { position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: var(--wp--preset--color--purr-light); transform: scaleX(0); transform-origin: left; }
.fbc-punkty__pasek--biegnie { animation: fbc-postep 5s linear forwards; }
@media (prefers-reduced-motion: reduce) { .fbc-punkty__pasek--biegnie { animation: none; } }
.fbc-punkty__el .fbc-punkty__pozycja { border-block-end: 0; }
.fbc-punkty__rozwiniecie {
	max-height: 0;
	overflow: hidden;
	transition: max-height 420ms cubic-bezier(.2,.7,.2,1);
}
.fbc-punkty__rozwiniecie > p {
	margin: 0;
	/* Cała szerokość kolumny — bez sztucznego limitu w ch; przed sierotą
	   chroni globalne `text-wrap: pretty`. Wcięcie = kolumna numeru + odstęp
	   (jak odpowiedź w FAQ), z prawej miejsce na znak. */
	max-width: none;
	min-height: var(--fbc-opis-h);
	padding: 0 calc(1.5rem + var(--fbc-faq-gap)) var(--wp--preset--spacing--40) calc(var(--fbc-faq-nr) + var(--fbc-faq-gap));
	box-sizing: border-box;
	line-height: 1.55;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-punkty__el.is-active .fbc-punkty__rozwiniecie { max-height: var(--fbc-opis-h); }
/* Poniżej 1200 px (układ pionowy) nic nie stoi obok listy, więc opis bierze
   wysokość z treści (wiersz siatki 0fr → 1fr) — pełna szerokość i bez
   ryzyka obcięcia na wąskim telefonie. Blok MUSI stać po regułach bazowych,
   bo przy równej specyficzności decyduje kolejność. */
@media (max-width: 1199.98px) {
	.fbc-punkty__rozwiniecie { max-height: none; display: grid; grid-template-rows: 0fr; transition: grid-template-rows 420ms cubic-bezier(.2,.7,.2,1); }
	.fbc-punkty__rozwiniecie > p { min-height: 0; overflow: hidden; }
	.fbc-punkty__el.is-active .fbc-punkty__rozwiniecie { max-height: none; grid-template-rows: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-punkty__rozwiniecie { transition: none; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-punkty__rozwiniecie { transition: none; }
}
.fbc-punkty__foto {
	margin: 0;
	aspect-ratio: 3 / 4;
	/* Żadnej płaszczyzny pod renderem — pedał stoi wprost na tle sekcji. */
	background: transparent;
	padding: 0;
}
/* Render wyjęty z przepływu siatki: o wysokości wiersza decyduje sama kolumna
   z listą, a render dostaje jej wysokość plus 100 px u góry (grupa nie
   przycina dzieci, więc górna krawędź może wyjść ponad sekcję). Szerokość wynika z proporcji 3:4, więc na ultrawide render
   nie rośnie razem z kolumną, a przy krótszym oknie nie jest przycinany. */
/* Pasmo 1200–1523 px: dwie kolumny, ale render zwyczajnie w prawej,
   w przepływie, bez wystawania i przesunięć (decyzja klienta). */
@media (min-width: 1200px) and (max-width: 1523.98px) {
	.fbc-punkty__foto { width: 100%; }
}
@media (min-width: 1524px) {
	/* Od 1524 px render wychodzi z przepływu. Prawa kolumna to pusty,
	   rozciągnięty na wiersz kontener — nie dokłada nic do wysokości, a render
	   jest w nim wyśrodkowany (na ultrawide siedzi na środku prawej połowy). */
	.fbc-punkty__prawa { position: relative; align-self: stretch; min-height: 0; container-type: size; }
	/* Szerokość: 3/4 z (wysokość kolumny + padding sekcji + 3rem), ale nigdy
	   więcej niż szerokość prawej kolumny (jednostki kontenera `cqh`/`cqw`).
	   Dzięki temu w paśmie 1200–1440 px render nie wchodzi na listę. */
	.fbc-punkty__foto {
		position: absolute;
		left: 50%;
		/* Render wyższy od kolumny o 100 px (decyzja klienta): zaczyna się
		   100 px nad górą listy i kończy z jej dołem. */
		/* Góra jak przedtem: padding sekcji + 3rem nad listą, czyli głowa
		   pedału 48 px ponad sekcją (decyzja klienta: tej pozycji nie ruszać).
		   Wysokość: kolumna + 200 px, więc dół schodzi poniżej listy. */
		top: calc(-1 * clamp(3.5rem, 7vw, 6rem) - 3rem);
		width: min(100cqw, calc((100cqh + 200px) * 3 / 4));
		transform: translateX(-50%);
	}
}
/* Kadr = pudełko obrazu (render ma proporcje 3:4, tak jak pudełko, więc
   `contain` nie zostawia pasów) — procenty znaczników liczą się od niego. */
.fbc-punkty__kadr { position: relative; height: 100%; }
.fbc-punkty__foto img {
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: contain;
	display: block;
}
/* Wyprowadzenia. Etykieta (numer) stoi POZA pedałem i ZA obrazem — jeśli
   pedał na nią nachodzi, pedał wygrywa. Na samym miejscu jest mały cel
   (kwadrat 8 px) NAD obrazem, a między nimi linia 1 px w SVG, którą rysuje
   skrypt z realnych pozycji etykiety i celu (procenty kadru), więc układ
   na telefonie nie wymaga przeliczania. Aktywna linia rysuje się od
   etykiety do celu (stroke-dashoffset), aktywny cel dostaje sonar. */
.fbc-punkt {
	position: absolute;
	z-index: 0;
	left: var(--lx);
	top: var(--ly);
	transform: translate(-50%, -50%);
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--base) 45%, transparent);
	border-radius: 2px;
	background: var(--wp--preset--color--ground-dark);
	color: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.68rem;
	letter-spacing: 0.06em;
	line-height: 1;
	cursor: pointer;
	opacity: 0.75;
	transition: background 250ms ease, border-color 250ms ease, opacity 250ms ease;
}
.fbc-punkt:hover { opacity: 1; border-color: var(--wp--preset--color--base); }
.fbc-punkt.is-active { opacity: 1; background: var(--wp--preset--color--purr); border-color: var(--wp--preset--color--purr); }
.fbc-punkt:focus-visible { outline: 2px solid var(--wp--preset--color--base); outline-offset: 3px; }

.fbc-punkty__linie {
	position: absolute;
	inset: 0;
	z-index: 2;
	width: 100%;
	height: 100%;
	overflow: visible;
	pointer-events: none;
}
.fbc-punkty__linie polyline {
	stroke: var(--wp--preset--color--base);
	stroke-width: 1;
	stroke-linejoin: miter;
	opacity: 0.18;
	transition: opacity 300ms ease;
}
.fbc-punkty__linie polyline.is-active {
	stroke: var(--wp--preset--color--purr-light);
	opacity: 1;
	stroke-dasharray: 1;
	stroke-dashoffset: 1;
	animation: fbc-linia 600ms cubic-bezier(.2,.7,.2,1) forwards;
}
@keyframes fbc-linia { to { stroke-dashoffset: 0; } }

.fbc-punkt__cel {
	position: absolute;
	z-index: 3;
	left: var(--x);
	top: var(--y);
	width: 8px;
	height: 8px;
	transform: translate(-50%, -50%);
	background: var(--wp--preset--color--base);
	border-radius: 1px;
	opacity: 0.55;
	pointer-events: none;
	transition: opacity 250ms ease, background 250ms ease;
}
.fbc-punkt__cel.is-active { opacity: 1; background: var(--wp--preset--color--purr-light); }
.fbc-punkt__cel::before,
.fbc-punkt__cel::after {
	content: "";
	position: absolute;
	inset: -1px;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--purr-light) 90%, transparent);
	border-radius: 1px;
	opacity: 0;
}
.fbc-punkt__cel.is-active::before,
.fbc-punkt__cel.is-active::after { animation: fbc-sonar 2s ease-out infinite; }
.fbc-punkt__cel.is-active::after { animation-delay: 1s; }
@keyframes fbc-sonar {
	0%   { transform: scale(1); opacity: 0.95; }
	70%  { opacity: 0.25; }
	100% { transform: scale(4); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-punkty__linie polyline.is-active { animation: none; stroke-dashoffset: 0; }
	.fbc-punkt__cel.is-active::before { animation: none; opacity: 1; transform: scale(2.2); }
	.fbc-punkt__cel.is-active::after { display: none; }
}

/* Więcej powietrza pod sekcją atutów: render schodzi poniżej listy
   (kolumna + 200 px), więc sam rytm sekcji zostawiał go przy krawędzi. */
.wp-site-blocks main > .alignfull.fbc-punkty-sekcja { padding-block-end: calc(clamp(3.5rem, 7vw, 6rem) + 4rem); }
/* Poświata jak w hero, w prawym górnym rogu, duża. Własna warstwa
   `.fbc-poswiata` z `overflow: hidden`: sekcja sama nie może przycinać
   (głowa pedału ma wystawać), a skalowana poświata musi zostać w kadrze.
   Skala rośnie od narożnika (`transform-origin: 100% 0`), więc krawędzie
   nigdy się nie odsłaniają. Bez siatki — decyzja klienta. */
.fbc-z-ziarnem > .fbc-poswiata {
	position: absolute;
	inset: 0;
	margin: 0 !important;
	z-index: -1;
	overflow: hidden;
	pointer-events: none;
}
.fbc-poswiata::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		radial-gradient(78% 88% at 100% 0%, rgba(118, 0, 112, 0.62) 0%, rgba(118, 0, 112, 0.32) 30%, rgba(118, 0, 112, 0.1) 58%, transparent 78%),
		radial-gradient(34% 38% at 100% 0%, rgba(180, 0, 168, 0.35) 0%, transparent 65%);
	background-repeat: no-repeat, no-repeat;
	transform-origin: 100% 0;
	animation: fbc-dryf-punkty 14s ease-in-out infinite alternate;
}
@keyframes fbc-dryf-punkty {
	from { transform: scale(1); }
	to   { transform: scale(1.14); }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-poswiata::before { animation: none; }
}
/* Cień pod podstawą: szeroka fioletowa plama światła na „podłodze"
   (poświata odbita od blatu) i wąska, czarna elipsa kontaktu tuż pod
   podstawą. Render nie ma cienia w alfie; sama czerń na czerni nie istnieje. */
.fbc-punkty__kadr::before {
	content: "";
	position: absolute;
	left: 4%;
	right: -6%;
	bottom: -4%;
	height: 20%;
	z-index: 0;
	background: radial-gradient(50% 50% at 52% 50%, rgba(118, 0, 112, 0.42) 0%, rgba(118, 0, 112, 0.18) 45%, transparent 72%);
	filter: blur(4px);
	pointer-events: none;
}
.fbc-punkty__cien {
	position: absolute;
	left: 16%;
	right: 4%;
	bottom: 1%;
	height: 8%;
	z-index: 0;
	background: radial-gradient(50% 50% at 50% 50%, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.6) 40%, transparent 70%);
	filter: blur(5px);
	pointer-events: none;
}
.fbc-punkty__kadr > img { position: relative; z-index: 1; }
/* Znaczniki zawsze nad zdjęciem. Na desktopie stoją obok pedału, ale od
   1200 px w dół przesuwają się na samo zdjęcie — i obraz z `z-index: 1`
   przejmował każde stuknięcie; na telefonie żaden znacznik nie reagował
   (audyt 2026-09-23). */
.fbc-punkt { z-index: 2; }

@media (max-width: 1199.98px) {
	.fbc-punkty { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--60); }
	.fbc-punkty__foto { order: -1; aspect-ratio: 4 / 5; }
	.fbc-punkt { left: var(--lxm, var(--lx)); top: var(--lym, var(--ly)); }
}

/* --------------------------------------------------------------------------
   8c. Opinie — zdjęcie na całą szerokość, jeden cytat w rotacji

   Fotografia z sesji w czerni i bieli pod ciemną warstwą; grupa sama jest
   kadrem (`fbc-glos-tlo`), zdjęcie to jej bezpośrednie dziecko na z-index -2,
   ziarno na -1, treść na wierzchu. Linia nad pasem marek jest paskiem
   postępu: tor to linia sekcji, wypełnienie to fiolet skalowany od lewej
   przez czas jednego cytatu (--fbc-glos-czas); najazd wstrzymuje zegar.
   Strzałki 32 px z obrysem w kolorze linii. Cytat trzyma miejsce na trzy
   linie, żeby zmiana tekstu nie ruszała reszty.
   -------------------------------------------------------------------------- */

.fbc-glos-tlo {
	--fbc-glos-czas: 7s;
	min-height: min(88vh, 760px);
	display: flex;
	flex-direction: column;
	justify-content: center;   /* treść na środku sekcji (klient), nie przy dole */
}
/* W kolumnie flexa `margin-inline: auto` od układu constrained centruje
   dzieci — tu ma być lewa krawędź, jak wszędzie. */
.fbc-glos-tlo > * { margin-inline: 0 !important; }
.fbc-glos-tlo__foto {
	position: absolute;
	inset: 0;
	z-index: -2;
	margin: 0 !important;
	max-width: none !important;
	overflow: hidden;
}
.fbc-glos-tlo__foto img {
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: 62% 50%;
	filter: grayscale(1) brightness(0.55) contrast(1.1);
}
.fbc-glos-tlo__foto::after {
	content: "";
	position: absolute;
	inset: 0;
	background:
		linear-gradient(to right, color-mix(in srgb, var(--wp--preset--color--ground-dark) 88%, transparent) 0%, color-mix(in srgb, var(--wp--preset--color--ground-dark) 45%, transparent) 55%, transparent 100%),
		linear-gradient(to top, var(--wp--preset--color--ground-dark) 0%, transparent 45%);
}

.fbc-ocena {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--30);
	margin: 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.08em;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-gwiazdki { letter-spacing: 0.12em; color: var(--wp--preset--color--purr-light); }
.fbc-ocena strong { font-weight: 500; color: var(--wp--preset--color--base); }

.fbc-glos-tlo .fbc-glos {
	min-height: calc(3 * 1.12 * clamp(1.8rem, 3.4vw, 3.4rem) + 3.5rem);
	transition: opacity 320ms ease;
}
.fbc-glos-tlo .fbc-glos--znika { opacity: 0; }
.fbc-glos-tlo .fbc-glos__cytat {
	margin: var(--wp--preset--spacing--50) 0 0;
	max-width: 24ch;
	font-size: clamp(1.8rem, 3.4vw, 3.4rem);
	font-weight: 700;
	letter-spacing: -0.02em;
	line-height: 1.12;
	text-wrap: balance;
}
.fbc-glos__cytat::before { content: "\201C"; color: var(--wp--preset--color--purr-light); margin-inline-end: 0.05em; }
.fbc-glos__cytat::after { content: "\201D"; color: var(--wp--preset--color--purr-light); margin-inline-start: 0.05em; }
.fbc-glos__autor {
	margin-block-start: var(--wp--preset--spacing--40);
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.08em;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-glos__autor b { font-weight: 500; color: var(--wp--preset--color--base); }

.fbc-postep {
	position: relative;
	height: 1px;
	margin-block-start: var(--wp--preset--spacing--80);
	background: var(--wp--preset--color--line-dark);
}
.fbc-postep__wypelnienie {
	position: absolute;
	inset: -1px 0 0;   /* 2 px: linia 1 px w fiolecie ginęła na czerni */
	background: var(--wp--preset--color--purr);
	transform: scaleX(0);
	transform-origin: left center;
}
.fbc-postep__wypelnienie--biegnie { animation: fbc-postep var(--fbc-glos-czas) linear forwards; }
@keyframes fbc-postep { to { transform: scaleX(1); } }
.fbc-postep__nawigacja {
	position: absolute;
	right: 0;
	bottom: var(--wp--preset--spacing--30);
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--30);
}
.fbc-postep__licznik {
	min-width: 5ch;
	text-align: center;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.66rem;
	letter-spacing: 0.12em;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-postep__wstecz,
.fbc-postep__dalej {
	display: inline-grid;
	place-items: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 2px;
	background: transparent;
	color: var(--wp--preset--color--base);
	opacity: 0.7;
	cursor: pointer;
	transition: opacity 200ms ease, border-color 200ms ease;
}
.fbc-postep__wstecz:hover,
.fbc-postep__dalej:hover { opacity: 1; border-color: var(--wp--preset--color--base); }
.fbc-postep__wstecz:focus-visible,
.fbc-postep__dalej:focus-visible { outline: 2px solid var(--wp--preset--color--base); outline-offset: 2px; }
.fbc-postep__odbicie { display: inline-grid; transform: scaleX(-1); }
@media (prefers-reduced-motion: reduce) {
	.fbc-postep__wypelnienie--biegnie { animation: none; }
}

.fbc-przesiadki {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60);
	margin-block-start: var(--wp--preset--spacing--40);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-przesiadki span { color: var(--wp--preset--color--base); opacity: 0.85; }
.fbc-przesiadki .fbc-przesiadki__etyk { color: var(--wp--preset--color--purr-light); opacity: 1; }

/* --------------------------------------------------------------------------
   8d. Baner akcesoriów

   Ciemna wyspa na jasnej sekcji: Ground dark, ścięte narożniki jak w kartach
   (22 px) i ziarno jak w hero. Tekst po lewej, zdjęcie po prawej wtopione
   maską od lewej — zdjęcie produktowe ma ciemny blat, więc szew znika.
   Przycisk i nadlinia biorą wariant ciemny przez klasę `is-style-sekcja-ciemna`
   nadaną w CSS? Nie — variation działa tylko na blokach. Dlatego kolory
   są tu ustawione wprost: biały tekst, ghost-zmienne dla przycisku.
   -------------------------------------------------------------------------- */

.fbc-baner {
	--fbc-sciecie: 22px;
	--fbc-ghost-linia: rgba(255, 255, 255, 0.85);
	--fbc-ghost-plomba: transparent;
	--fbc-ghost-tekst: rgba(255, 255, 255, 0.85);
	position: relative;
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	min-height: 420px;
	color: var(--wp--preset--color--base);
	background: var(--wp--preset--color--ground-dark);
	border: 1px solid var(--wp--preset--color--line-dark);
	overflow: clip;
	clip-path: polygon(
		var(--fbc-sciecie) 0,
		100% 0,
		100% calc(100% - var(--fbc-sciecie)),
		calc(100% - var(--fbc-sciecie)) 100%,
		0 100%,
		0 var(--fbc-sciecie)
	);
}
@supports (corner-shape: bevel) {
	.fbc-baner {
		clip-path: none;
		corner-shape: bevel;
		border-radius: var(--fbc-sciecie) 0 var(--fbc-sciecie) 0;
	}
}
.fbc-baner .fbc-eyebrow { color: var(--wp--preset--color--purr-light); }
.fbc-baner h2 { color: var(--wp--preset--color--base); max-width: 12ch; text-wrap: balance; margin-block-start: var(--wp--preset--spacing--30); font-size: clamp(2.2rem, 3.4vw, 3.6rem) !important; line-height: 1.05; letter-spacing: -0.02em; }
.fbc-baner__tresc {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding: var(--wp--preset--spacing--80) var(--wp--preset--spacing--70);
}
.fbc-baner__lead { margin-block-start: var(--wp--preset--spacing--40); max-width: 40ch; color: var(--wp--preset--color--contrast-3); }
.fbc-baner .wp-block-buttons { margin-block-start: var(--wp--preset--spacing--60); }
/* Przycisk w banerze: biały na ciemnym, jak w sekcji ciemnej. */
.fbc-baner .wp-block-button__link { background: var(--wp--preset--color--base); color: var(--wp--preset--color--contrast); }
.fbc-baner__foto {
	position: relative;
	margin: 0;
	min-height: 320px;
	-webkit-mask-image: linear-gradient(to right, transparent 0%, #000 38%, #000 100%);
	mask-image: linear-gradient(to right, transparent 0%, #000 38%, #000 100%);
}
/* Zdjęcie ma u góry jasną ścianę — przyciemniamy ją, żeby wyspa została
   ciemna; blat na dole zostaje. */
.fbc-baner__foto::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to bottom, color-mix(in srgb, var(--wp--preset--color--ground-dark) 78%, transparent) 0%, color-mix(in srgb, var(--wp--preset--color--ground-dark) 30%, transparent) 45%, transparent 70%);
	pointer-events: none;
}
.fbc-baner__foto img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: 50% 45%;
	display: block;
}
/* Baner z tłem na całą kartę (klient 2026-09-05): scena z Higgsfield ze
   sprężynami po prawej; tekst po lewej na łagodnym ściemnieniu, żeby czytał
   się na jaśniejszej części blatu. Bez kolumny ze zdjęciem. */
.fbc-baner--tlo {
	grid-template-columns: minmax(0, 1fr);
	min-height: 460px;
	background: var(--fbc-baner-tlo) 50% 50% / cover no-repeat, var(--wp--preset--color--ground-dark);
}
.fbc-baner--tlo::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to right, color-mix(in srgb, var(--wp--preset--color--ground-dark) 78%, transparent) 0%, color-mix(in srgb, var(--wp--preset--color--ground-dark) 45%, transparent) 42%, transparent 62%);
	pointer-events: none;
}
.fbc-baner--tlo .fbc-baner__tresc { max-width: 34rem; }
@media (max-width: 899.98px) {
	.fbc-baner--tlo { min-height: 520px; background-position: 72% 50%; }
	.fbc-baner--tlo::before { background: linear-gradient(to bottom, color-mix(in srgb, var(--wp--preset--color--ground-dark) 82%, transparent) 0%, color-mix(in srgb, var(--wp--preset--color--ground-dark) 40%, transparent) 55%, transparent 80%); }
}
@media (max-width: 899.98px) {
	.fbc-baner { grid-template-columns: 1fr; --fbc-sciecie: 16px; }
	.fbc-baner__tresc { padding: var(--wp--preset--spacing--70) var(--wp--preset--spacing--50); }
	.fbc-baner__foto {
		min-height: 260px;
		-webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 30%, #000 100%);
		mask-image: linear-gradient(to bottom, transparent 0%, #000 30%, #000 100%);
	}
}

/* --------------------------------------------------------------------------
   8e. Historia — taśma

   Poziomy pas kart do krawędzi okna (ujemne marginesy równe gutterowi),
   scroll-snap, karta w kadrze w kolorze, reszta czarno-biała. Pas jest
   przyklejony do sekcji wyżej: sekcja ciemna po ciemnej nie ma górnego
   paddingu (sekcja 9), a taśma jest pierwszym dzieckiem grupy. Pasek pod
   taśmą to pozycja przewinięcia (skrypt), strzałki przewijają o kartę.
   Nagłówek dopiero POD taśmą — decyzja klienta.
   -------------------------------------------------------------------------- */

/* Przyklejenie do sekcji wyżej: rdzeń daje blokom w main odstęp 24 px
   (margines), a rytm sekcji (sekcja 9) górny padding — oba selektorem
   z `>` o wyższej specyficzności niż reguła „ciemna po ciemnej", więc
   trzeba tak samo. */
.wp-site-blocks main > .alignfull.fbc-historia-sekcja { margin-block-start: 0; padding-block-start: 0; }
/* Sekcja opinii nad taśmą: dolny padding schodzi do 48 px, żeby pas zdjęć
   siedział tuż pod pasem marek, a nie 96 px niżej. */
.wp-site-blocks main > .alignfull.fbc-glos-tlo { padding-block-end: var(--wp--preset--spacing--70); }
.fbc-tasma { margin: 0; }
/* Taśma sterowana scrollem (historia): pojemnik `.fbc-tasma__lep` przykleja
   się do okna, a wysokość `.fbc-tasma` (ustawiana skryptem) daje drogę
   przewijania równą szerokości ukrytej części taśmy. Klasa `is-scroll`
   nadawana przez historia.js tylko przy ≥ 900 px i bez ograniczenia ruchu. */
.fbc-tasma.is-scroll .fbc-tasma__lep { position: sticky; top: 0; }
.fbc-tasma.is-scroll .fbc-tasma__tor { overflow-x: hidden; scroll-snap-type: none; }
.wp-site-blocks main .fbc-tasma__tor {
	display: flex;
	gap: 12px;
	margin-inline: calc(-1 * var(--fbc-gutter));
	max-width: none;
	padding-inline: var(--fbc-gutter);
	padding-block-end: var(--wp--preset--spacing--20);
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-padding-inline: var(--fbc-gutter);
	scrollbar-width: none;
}
.fbc-tasma__tor::-webkit-scrollbar { display: none; }
.fbc-tasma__tor:focus-visible { outline: 2px solid var(--wp--preset--color--base); outline-offset: -2px; }
.fbc-tasma__karta {
	position: relative;
	flex: 0 0 min(62vw, 880px);
	aspect-ratio: 16 / 10;
	overflow: hidden;
	border-radius: 2px;
	scroll-snap-align: start;
	background: var(--wp--preset--color--contrast);
}
.fbc-tasma__karta img,
.fbc-tasma__karta .fbc-wideo {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	display: block;
	filter: grayscale(1) brightness(0.7);
	transition: filter 700ms ease;
}
.fbc-tasma__karta.is-active img,
.fbc-tasma__karta.is-active .fbc-wideo { filter: grayscale(0) brightness(0.85); }
.fbc-tasma__karta::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, color-mix(in srgb, var(--wp--preset--color--ground-dark) 92%, transparent) 0%, color-mix(in srgb, var(--wp--preset--color--ground-dark) 30%, transparent) 50%, transparent 100%);
}
.fbc-tasma__tekst {
	position: absolute;
	inset-inline: 0;
	bottom: 0;
	z-index: 1;
	padding: var(--wp--preset--spacing--50);
}
.fbc-tasma__tekst .fbc-nr {
	display: block;
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.14em;
	color: var(--wp--preset--color--purr-light);
}
.fbc-tasma__tekst h3 { margin-block-start: var(--wp--preset--spacing--20); }
.fbc-tasma__tekst p { margin-block-start: var(--wp--preset--spacing--30); max-width: 48ch; font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--base-3); }
/* 96 px, nie 32: strzałki stoją nad linią (32 px + 12 px), przy 32 px wchodziły na karty. */
.fbc-tasma .fbc-postep { margin-block-start: var(--wp--preset--spacing--90); }
.fbc-postep__wypelnienie--reczne { transition: transform 120ms linear; }

/* Wideo w karcie: pętla bez dźwięku, przy ograniczonym ruchu sama klatka. */
.fbc-wideo__poster { display: none; position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* Przy ograniczonym ruchu film taśmy ZOSTAJE (decyzja klienta 2026-09-05:
   „film wciąż nie działa" — poster zamiast filmu czytał się jako brak filmu);
   pętla jest wyciszona i bez dźwięku. Poster tylko jako zapas bez JS. */

/* Nagłówek pod taśmą: tekst po lewej, portret założyciela po prawej.
   Portret jest wycięty z tła i wygaszony w alfie od dołu, więc siedzi
   wprost na tle sekcji i „wyrasta” z jej dolnej krawędzi. */
.fbc-historia-naglowek {
	display: grid;
	grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
	gap: var(--wp--preset--spacing--80);
	align-items: end;
	margin-block-start: var(--wp--preset--spacing--80);
}
.fbc-historia-naglowek h2 { max-width: 22ch; text-wrap: balance; }
.fbc-zalozyciel {
	position: relative;
	margin: 0;
	justify-self: end;
	width: min(100%, 32rem);
	/* Od 2026-09-30 zwykłe zdjęcie (bez maski wygaszającej) — nie dochodzi już do krawędzi sekcji. */
}
.fbc-zalozyciel img { width: 100%; height: auto; max-width: none; display: block; }
.fbc-zalozyciel__podpis {
	/* Pod zdjęciem, nie na nim — na zwykłym zdjęciu podpis leżał na bolidzie (2026-09-30). */
	position: static;
	margin-block-start: var(--wp--preset--spacing--30);
	display: grid;
	gap: var(--wp--preset--spacing--10);
}
/* Podpis odręczny — PLACEHOLDER: Caveat 600 hostowany lokalnie, jasny
   fiolet, lekki skos. Do podmiany na skan (SVG) prawdziwego podpisu. */
@font-face {
	font-family: "Caveat";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("assets/fonts/caveat-600-latin-ext.woff2") format("woff2");
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: "Caveat";
	font-style: normal;
	font-weight: 600;
	font-display: swap;
	src: url("assets/fonts/caveat-600-latin.woff2") format("woff2");
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
.fbc-podpis {
	font-family: "Caveat", "Segoe Script", cursive;
	font-weight: 600;
	font-size: clamp(2rem, 3vw, 2.8rem);
	line-height: 1;
	color: var(--wp--preset--color--purr-light);
	transform: rotate(-4deg);
	transform-origin: left bottom;
	white-space: nowrap;
}
.fbc-zalozyciel__rola {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.7rem;
	letter-spacing: 0.1em;
	color: var(--wp--preset--color--contrast-3);
	white-space: nowrap;
}
@media (max-width: 899.98px) {
	.fbc-historia-naglowek { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--60); }
	.fbc-zalozyciel { justify-self: start; width: min(100%, 20rem); }
	.fbc-zalozyciel__podpis { left: 0; }
}
.fbc-historia-naglowek__lead {
	max-width: 52ch;
	margin-block-start: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--contrast-3);
	font-size: var(--wp--preset--font-size--large);
}

@media (max-width: 599.98px) {
	.fbc-tasma__karta { flex-basis: 86vw; aspect-ratio: 4 / 5; }
}

/* --------------------------------------------------------------------------
   8f. Po zakupie — PurrOS, społeczność (wzorzec home-wsparcie) i FAQ (home-faq)

   Jasna sekcja pod historią, bloki oddzielone liniami
   (`.fbc-wsparcie__blok`). Wspólne klocki: `.fbc-etykieta` (mono, szara
   nadlinia bloku), `.fbc-link-dalej` (link ze strzałką, jak w kartach
   produktów) i `.fbc-sciety` (ścięte narożniki jak w przyciskach i kartach:
   `corner-shape: bevel` z zapasem `clip-path`). FAQ to natywne <details>,
   znak +/× rysowany dwoma kreskami, bez skryptu.
   -------------------------------------------------------------------------- */

.fbc-wsparcie { display: block; }
.fbc-wsparcie__naglowek h2 { max-width: 20ch; text-wrap: balance; }
.fbc-wsparcie__lead {
	max-width: 56ch;
	margin-block-start: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--large);
	color: var(--wp--preset--color--contrast-2);
}
.fbc-wsparcie__blok { margin-block-start: var(--wp--preset--spacing--80); }
.fbc-wsparcie__blok + .fbc-wsparcie__blok {
	padding-block-start: var(--wp--preset--spacing--80);
	border-block-start: 1px solid var(--wp--preset--color--line);
}

/* Klocki wspólne. */
.fbc-etykieta {
	margin: 0 0 var(--wp--preset--spacing--30);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-link-dalej {
	display: inline-block;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--purr);
	text-decoration: none;
}
.fbc-link-dalej span { display: inline-block; transition: transform 250ms ease; }
.fbc-link-dalej:hover span { transform: translateX(4px); }
.fbc-sciety {
	--fbc-sciecie: 16px;
	clip-path: polygon(
		var(--fbc-sciecie) 0,
		100% 0,
		100% calc(100% - var(--fbc-sciecie)),
		calc(100% - var(--fbc-sciecie)) 100%,
		0 100%,
		0 var(--fbc-sciecie)
	);
}
@supports (corner-shape: bevel) {
	.fbc-sciety {
		clip-path: none;
		corner-shape: bevel;
		border-radius: var(--fbc-sciecie) 0 var(--fbc-sciecie) 0;
		overflow: clip;
	}
}

/* Blok 1: PurrOS. Tekst po lewej, zrzut aplikacji po prawej w ciemnej ramce
   (aplikacja ma ciemny interfejs, więc ramka w Ground dark szyje się ze zrzutem). */
/* Sekcja PurrOS: pełna wysokość okna, bez paddingu i marginesu (styka się
   z sekcjami wyżej i niżej), kolumny 40 / 60 liczone od krawędzi OKNA ze
   stałym odstępem; siatka na 40 % szerokości prawej kolumny, do prawej
   krawędzi ekranu (klient). */
.wp-site-blocks main > .alignfull.fbc-purros-sekcja {
	position: relative;
	padding-block: 0;
	margin-block: 0;
	min-height: 100dvh;
	overflow: clip;
	background: var(--wp--preset--color--base);
}
/* Sekcja pod spodem bez odstępu bloku — siatka ma się stykać z następną sekcją. */
.wp-site-blocks main > .fbc-purros-sekcja + * { margin-block-start: 0; }
/* Linia pod sekcją (jak wcześniej między PurrOS a kartami), na całą szerokość okna. */
.fbc-purros-sekcja::after {
	content: "";
	position: absolute;
	bottom: 0;
	left: 0;   /* od krawędzi do krawędzi okna (klient) */
	right: 0;
	height: 1px;
	background: var(--wp--preset--color--line);
}
.fbc-purros-sekcja::before {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	/* Od lewej krawędzi prawej kolumny (środek + pół odstępu) + 100 px do prawej
	   krawędzi ekranu: karty zostają na krawędzi kolumny, a siatka zaczyna się
	   100 px dalej (klient) — przy zwężaniu okna karty nie wchodzą na tekst. */
	left: calc(40% + clamp(2rem, 5vw, 5rem) * 0.4 + 100px);   /* start prawej kolumny (40 % + 2/5 odstępu) + 100 px */
	right: 0;
	background-image:
		repeating-linear-gradient(to right, rgba(19, 19, 21, 0.08) 0 1px, transparent 1px 40px),
		repeating-linear-gradient(to bottom, rgba(19, 19, 21, 0.08) 0 1px, transparent 1px 40px);
	pointer-events: none;
}
.fbc-purros {
	position: relative;
	display: grid;
	grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);   /* 40 / 60 (klient) */
	column-gap: clamp(2rem, 5vw, 5rem);   /* ustalony odstęp między kolumnami */
	min-height: 100dvh;
	align-items: center;
}
.fbc-purros__tekst {
	/* Sekcja alignfull ma już wcięcie gutter z układu (root padding), więc bez własnego. */
	padding: clamp(3.5rem, 7vw, 6rem) 0;
	max-width: 33.5rem;   /* 33,5 zamiast 34: przy 1440 px deck przesunięty 100 px w lewo stykał się z listą */
	box-sizing: border-box;
}
.fbc-purros__tekst h2 { max-width: 14ch; text-wrap: balance; }
.fbc-purros__lead { margin-block-start: var(--wp--preset--spacing--40); max-width: 44ch; color: var(--wp--preset--color--contrast-2); font-size: var(--wp--preset--font-size--large); }
.fbc-wsparcie > .fbc-wsparcie__blok:first-child { margin-block-start: 0; }
.fbc-purros__punkty {
	list-style: none;
	margin: var(--wp--preset--spacing--60) 0 0;
	padding: 0;
	border-block-start: 1px solid var(--wp--preset--color--line);
}
/* Punkty w stylu FAQ (8f) i listy atutów (8b): numer mono, tytuł 700,
   znak + / × po prawej, opis rozwijany pod tytułem tylko dla aktywnego. */
.fbc-purros__punkty li {
	position: relative;
	display: grid;
	grid-template-columns: var(--fbc-faq-nr, 2.4rem) minmax(0, 1fr) 1.5rem;
	gap: var(--wp--preset--spacing--20) var(--fbc-faq-gap, var(--wp--preset--spacing--30));   /* row-gap stały, żeby opis w max-height nie potrzebował paddingu */
	align-items: baseline;
	padding-block: var(--wp--preset--spacing--40);
	border-block-end: 1px solid var(--wp--preset--color--line);
	font-weight: 700;
	line-height: 1.35;
	color: var(--wp--preset--color--contrast);
	cursor: pointer;
	outline: 0;
}
.fbc-purros__punkty li:focus-visible { outline: 2px solid var(--wp--preset--color--purr); outline-offset: 4px; }
.fbc-purros__punkty .fbc-nr {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;   /* jak w atutach — jedna typografia list rozwijanych */
	color: var(--wp--preset--color--purr);
}
.fbc-purros__punkty strong { font-weight: 700; }
.fbc-purros__znak { position: relative; align-self: center; width: 14px; height: 14px; justify-self: end; }
.fbc-purros__znak::before,
.fbc-purros__znak::after { content: ""; position: absolute; left: 0; top: 6px; width: 14px; height: 2px; background: currentColor; transition: transform 300ms cubic-bezier(.2,.7,.2,1); }
.fbc-purros__znak::after { transform: rotate(90deg); }
.fbc-purros__punkty li.is-active .fbc-purros__znak::before { transform: rotate(45deg); }
.fbc-purros__punkty li.is-active .fbc-purros__znak::after { transform: rotate(-45deg); }
/* Opis tylko dla aktywnego punktu. Zwijanie i rozwijanie idą tym samym
   przejściem `max-height` między 0 a STAŁĄ wysokością (2 linie + odstęp),
   więc gdy jeden punkt się zwija, a drugi rozwija, suma wysokości listy nie
   zmienia się w żadnej klatce — lewa kolumna nie drga (klient). Wiersze
   siatki 0fr → 1fr (jak w FAQ) nie dawały tej symetrii. */
.fbc-purros__punkty li > span:last-of-type {
	grid-column: 2;
	display: block;
	font-weight: 400;
	color: var(--wp--preset--color--contrast-2);
	/* Rezerwa wysokości = NAJDŁUŻSZY opis w tym paśmie szerokości. Musi być
	   równa realnej liczbie linii, bo `overflow: hidden` inaczej utnie tekst
	   (po tekstach klienta z 2026-09-18 pierwszy opis ma 139 znaków i nie
	   mieścił się w dwóch liniach). Zmierzone: 3 linie od 1600 px, 4 w paśmie
	   1200–1599, 5 poniżej 1200. Wysokość jest stała, żeby przy przełączaniu
	   punktów lista nie drgała. */
	--fbc-opis-h: calc(5 * 1.55em);
}
@media (min-width: 1200px) {
	.fbc-purros__punkty li > span:last-of-type { --fbc-opis-h: calc(4 * 1.55em); }
}
@media (min-width: 1600px) {
	.fbc-purros__punkty li > span:last-of-type { --fbc-opis-h: calc(3 * 1.55em); }
}
.fbc-purros__punkty li > span:last-of-type > i {
	display: block;
	box-sizing: border-box;
	height: var(--fbc-opis-h);   /* stała, żeby 1-liniowy opis ważył tyle samo co 2-liniowy */
	max-height: 0;
	overflow: hidden;
	padding: 0;   /* padding tworzyłby podłogę pod max-height: 0 i psuł symetrię przejść */
	font-style: normal;
	line-height: 1.55;
	transition: max-height 420ms cubic-bezier(.2,.7,.2,1);
}
.fbc-purros__punkty li.is-active > span:last-of-type > i { max-height: var(--fbc-opis-h); }
/* Pasek auto-przełączania pod aktywnym punktem (5 s, purros.js). */
.fbc-purros__pasek { position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: var(--wp--preset--color--purr); transform: scaleX(0); transform-origin: left; }
.fbc-purros.is-auto .fbc-purros__punkty li.is-active .fbc-purros__pasek { animation: fbc-postep 5s linear forwards; }
.fbc-purros__tekst .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--50); }
/* Deck zrzutów PurrOS — wariant D z laboratorium (runda 8), wybrany przez
   klienta. Scena izometryczna (rotateX + rotateZ) z LIMITEM 640 px
   i wyśrodkowana, więc na ultrawide nie rośnie z kolumną. Trzy okna 4:3
   — kadr na detal panelu (object-position), nie cały ekran 16:9 — w trzech
   slotach na osi Y/Z; aktywne okno dostaje slot 1 (przód), reszta cofa się
   (purros.js ustawia data-slot). Zrzuty prawdziwe, bez generatora. */
.fbc-purros__stos {
	position: relative;
	align-self: stretch;
	min-height: 100dvh;
	margin: 0;
}
.fbc-purros__scena {
	position: absolute;
	/* Bez rzutu izometrycznego (klient): karty 16:9 płasko, jedna na drugiej,
	   przesunięte w górę i lekko pomniejszone w głąb; aktywna z przodu.
	   Wyśrodkowane w pionie, dosunięte do prawej. */
	top: 50%;
	left: 0;
	/* Kaskada (klient): aktywna karta najbardziej po lewej i na dole, dotyka
	   lewej krawędzi kolumny; każda kolejna w prawo (7 % i 14 % swojej
	   szerokości) i wyżej, pomniejszona o 5 % na warstwę.
	   Karty na całą szerokość kolumny, zaczepione z lewej (klient: „powiększ,
	   punkt zaczepienia z lewej") — kaskada może wyjść poza prawą krawędź okna. */
	width: 100%;
	aspect-ratio: 16 / 9;
	/* Delikatnie mniejszy cały stos, zaczepiony z lewej na środku wysokości (klient). */
	transform: translateY(-46%) scale(0.9);
	transform-origin: 0 50%;
}

.fbc-purros__okno {
	position: absolute;
	left: 0;
	top: 0;
	width: 100%;
	/* Karta 16:9 (klient). Zrzuty PurrOS są 16:10, więc obraz wypełnia pole pod
	   paskiem okna z lekkim przycięciem dołu (góra z paskiem narzędzi zostaje). */
	aspect-ratio: 16 / 9;
	display: grid;
	grid-template-rows: minmax(0, 1fr);
	transform-origin: 0 0;
	border-radius: 6px;
	background: var(--wp--preset--color--ground-dark);   /* czarne, kryjące podtło (klient): karty z tyłu mają zrzut w 50 %, nie przenikają się i ciemnieją zamiast blednąć */
	/* Bez białej ramki (klient); 2 px ciemnej krawędzi u dołu, do tego dwa miękkie cienie — w dół (na
	   siatkę) i w górę sceny (na kartę za nią, która przez to ciemnieje bez
	   żadnej nakładki). */
	overflow: hidden;
	box-shadow:
		0 2px 0 0 #2a2a2f,
		16px -18px 22px -6px rgba(5, 5, 8, 0.3);   /* cień w prawą górę: mniej rozproszony, słabszy (klient) */
	/* Bez przenikania i bez nakładki (klient): okna kryjące; karta niżej
	   w stosie jest ciemniejsza tylko tam, gdzie pada na nią cień karty
	   z przodu — cień skierowany „w górę" sceny (w stronę kart za nią). */
	opacity: 1;
	transition: transform 900ms cubic-bezier(.2,.7,.2,1), top 900ms cubic-bezier(.2,.7,.2,1);
	backface-visibility: hidden;
}
.fbc-purros__okno img {
	display: block;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: 50% 0;
}
/* Karty z tyłu: zrzut w 50 % krycia na białym, kryjącym podtle. */
.fbc-purros__okno:not([data-slot="1"]) img { opacity: 0.5; filter: grayscale(1); }   /* karty pod spodem: czerń-biel (klient) */
.fbc-purros__okno img { transition: opacity 400ms ease, filter 400ms ease; }
/* Bez udawanego paska okna (klient 2026-09-18: „do screenów aplikacji nie
   dodawaj już okna aplikacji, screen go ma") — zrzuty PurrOS mają własny pasek
   tytułu, a nasz siedział nad nim i wychodziły dwa paski jeden na drugim. */
.fbc-purros__okno[data-slot="1"] { transform: translateY(0) scale(1); z-index: 3; }
.fbc-purros__okno[data-slot="2"] { transform: translate(7%, -9%) scale(0.95); z-index: 2; }
.fbc-purros__okno[data-slot="3"] { transform: translate(14%, -18%) scale(0.9); z-index: 1; }
/* Czwarte okno od 2026-09-18 (komplet zrzutów od klienta): ten sam krok kaskady
   co poprzednie, czyli 7 % w prawo i 9 % w górę na warstwę. */
.fbc-purros__okno[data-slot="4"] { transform: translate(21%, -27%) scale(0.85); z-index: 0; }
@media (prefers-reduced-motion: reduce) {
	.fbc-purros__scena, .fbc-purros__okno, .fbc-purros__punkty li > span:last-of-type > i { transition: none; }
	.fbc-purros.is-auto .fbc-purros__punkty li.is-active .fbc-purros__pasek { animation: none; }
}

/* Blok 2: trzy karty. Hairline, na najeździe fioletowa ramka i lekkie uniesienie. */
.fbc-wsparcie-karty {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));   /* trzy karty od 2026-09-18 (gwarancja skasowana) */
	gap: 12px;
}
.fbc-wsparcie-karta {
	display: flex;
	flex-direction: column;
	padding: var(--wp--preset--spacing--50);
	background: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--line);
	transition: border-color 250ms ease, transform 350ms cubic-bezier(.2,.7,.2,1);
}
/* Ikona karty w kolorze akcentu (klient), nad nadlinią. */
.fbc-wsparcie-karta__ikona {
	display: block;
	width: 32px;
	height: 32px;
	margin-block-end: var(--wp--preset--spacing--40);
	color: var(--wp--preset--color--purr);
}
.fbc-wsparcie-karta__ikona svg { display: block; width: 100%; height: 100%; }
.fbc-wsparcie-karta h3 { text-wrap: balance; }
.fbc-wsparcie-karta > p:not(.fbc-etykieta) {
	margin-block-start: var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--contrast-2);
	max-width: 36ch;
}
.fbc-wsparcie-karta .fbc-link-dalej {
	align-self: flex-start;
	margin-block-start: auto;
	padding-block-start: var(--wp--preset--spacing--50);
}
/* Cała karta klikalna (klient 2026-09-18: „każda karta klikalna") — warstwa
   `::after` odnośnika zamiast opakowywania treści w <a>, tak samo jak
   w kartach produktów: w drzewie dostępności zostaje jeden odnośnik
   z krótką nazwą, a nie blok z nadlinią, nagłówkiem i akapitem w środku. */
.fbc-wsparcie-karta { position: relative; }
.fbc-wsparcie-karta .fbc-link-dalej::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
}
@media (hover: hover) {
	.fbc-wsparcie-karta:hover { border-color: var(--wp--preset--color--purr); transform: translateY(-3px); }
}

/* FAQ (wzorzec home-faq, własna jasna sekcja). Nagłówek przyklejony po lewej, lista po prawej. */
.fbc-faq {
	display: grid;
	grid-template-columns: var(--fbc-dwie-kolumny);
	gap: var(--fbc-dwie-kolumny-gap);
}
/* Odwrócone kolumny (klient): kadr z lewej w węższej kolumnie, tekst z prawej. */
.fbc-recenzja__tekst { order: 2; }
.fbc-recenzja__wideo { order: 1;
	gap: clamp(2.5rem, 6vw, 5rem);
	align-items: start;
}
/* Sam margines okna, bez rezerwy na nagłówek: nagłówek motywu nie jest przyklejony
   (`position: relative`), więc w chwili przyklejenia dawno go nie ma na ekranie,
   a `72px + 24px` zostawiało nad tekstem pustą listwę (klient 2026-09-15).
   `--fbc-naglowek-h` nigdzie nie było zdefiniowane — działał sam fallback 72px. */
.fbc-faq__naglowek { position: sticky; top: var(--wp--preset--spacing--50); }
.fbc-faq__naglowek h3 { max-width: 14ch; text-wrap: balance; }
.fbc-faq__naglowek .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--50); }
.fbc-faq__lista { list-style: none; margin: 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-faq__el { border-block-end: 1px solid var(--wp--preset--color--line); }
/* Kolumna numeru i odstęp siatki — te same wartości wcinają odpowiedź,
   żeby jej lewa krawędź stała dokładnie pod pytaniem. */
.fbc-faq { --fbc-faq-nr: 2.4rem; --fbc-faq-gap: var(--wp--preset--spacing--30); }
.fbc-faq__pytanie {
	display: grid;
	grid-template-columns: var(--fbc-faq-nr) minmax(0, 1fr) 1.5rem;
	gap: var(--fbc-faq-gap);
	align-items: baseline;
	width: 100%;
	padding: var(--wp--preset--spacing--40) 0;
	margin: 0;
	border: 0;
	background: none;
	color: var(--wp--preset--color--contrast);
	font: inherit;
	font-weight: 700;
	line-height: 1.35;
	text-align: start;
	cursor: pointer;
}
.fbc-faq__pytanie:focus-visible { outline: 2px solid var(--wp--preset--color--purr); outline-offset: 4px; }
.fbc-faq__pytanie .fbc-nr {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 400;   /* jak w atutach — jedna typografia list rozwijanych */
	color: var(--wp--preset--color--purr);
}
.fbc-faq__znak {
	position: relative;
	align-self: center;
	width: 14px;
	height: 14px;
	justify-self: end;
}
.fbc-faq__znak::before,
.fbc-faq__znak::after {
	content: "";
	position: absolute;
	left: 0;
	top: 6px;
	width: 14px;
	height: 2px;
	background: var(--wp--preset--color--contrast);
	transition: transform 300ms cubic-bezier(.2,.7,.2,1);
}
.fbc-faq__znak::after { transform: rotate(90deg); }
.fbc-faq__el.is-active .fbc-faq__znak::before { transform: rotate(45deg); }
.fbc-faq__el.is-active .fbc-faq__znak::after { transform: rotate(-45deg); }
/* Rozwinięcie jak w atutach (8b, układ pionowy): wiersz siatki 0fr → 1fr,
   wysokość z treści, płynne przejście w obie strony. */
.fbc-faq__odpowiedz {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows 420ms cubic-bezier(.2,.7,.2,1);
}
.fbc-faq__odpowiedz p {
	min-height: 0;
	overflow: hidden;
	margin: 0;
	padding: 0 calc(1.5rem + var(--fbc-faq-gap)) 0 calc(var(--fbc-faq-nr) + var(--fbc-faq-gap));
	max-width: none;
	line-height: 1.55;
	color: var(--wp--preset--color--contrast-2);
	box-sizing: border-box;
}
.fbc-faq__el.is-active .fbc-faq__odpowiedz { grid-template-rows: 1fr; }
.fbc-faq__el.is-active .fbc-faq__odpowiedz p { padding-block-end: var(--wp--preset--spacing--50); }
@media (prefers-reduced-motion: reduce) {
	.fbc-faq__odpowiedz, .fbc-faq__znak::before, .fbc-faq__znak::after { transition: none; }
}

@media (max-width: 899.98px) {
	.fbc-purros,
	.fbc-faq { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--60); }
	.wp-site-blocks main > .alignfull.fbc-purros-sekcja { min-height: 0; }
	.fbc-purros { min-height: 0; grid-template-columns: 1fr; }
	.fbc-purros-sekcja::before { left: 50%; }
	.fbc-purros__tekst { padding-inline: var(--fbc-gutter); max-width: none; }
	/* W układzie pionowym kolumna jest szeroka i nic nie stoi obok listy, więc
	   opis bierze wysokość z treści — stała rezerwa zostawiałaby tu puste wiersze. */
	.fbc-purros__punkty li > span:last-of-type > i { height: auto; }
	.fbc-purros__punkty li.is-active > span:last-of-type > i { max-height: 20em; }
	.fbc-purros__stos { order: -1; align-self: auto; min-height: 0; aspect-ratio: 4 / 3; overflow: clip; }
	.fbc-purros__scena { transform: translateY(-46%); transform-origin: 0 50%; }

	.fbc-wsparcie-karty { grid-template-columns: 1fr; }
	.fbc-faq__naglowek { position: static; }
	.fbc-faq__odpowiedz p { padding-inline-end: var(--wp--preset--spacing--40); }
}
@media (max-width: 599.98px) {
	.fbc-purros__punkty li { grid-template-columns: 2rem minmax(0, 1fr) 1.5rem; }
	.fbc-faq, .fbc-punkty { --fbc-faq-nr: 2rem; }
}

/* --------------------------------------------------------------------------
   8g. Recenzje wideo — ciemna sekcja z rotacją (wzorzec home-recenzje)

   Tło „jak zawsze": poświata w prawym górnym rogu (warstwa `.fbc-poswiata`
   z 8b, za kadrem), ziarno (`.fbc-ziarno`) i siatka techniczna z hero
   (sekcja 14) pod kolumną tekstu po lewej — `::after` sekcji z maską.
   Jeden kadr i tytuł naraz; przełączanie jak w opiniach (8c): pasek
   postępu `--fbc-recenzje-czas`, strzałki, licznik, tytuł słowo po słowie,
   kadr przez wygaszenie (`--znika`). Skrypt: assets/js/recenzje.js.
   -------------------------------------------------------------------------- */

.fbc-recenzja-sekcja {
	--fbc-siatka-modul: var(--wp--preset--spacing--80);
	--fbc-siatka-linia: rgba(255, 255, 255, 0.045);
	overflow: hidden;
}
.fbc-recenzja-sekcja::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		repeating-linear-gradient(to right, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul)),
		repeating-linear-gradient(to bottom, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul));
	-webkit-mask-image: radial-gradient(42% 60% at 76% 45%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
	mask-image: radial-gradient(42% 60% at 76% 45%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
}
/* Trzy ostatnie sekcje nad stopką (recenzje, FAQ, CTA) dzielą jedną siatkę:
   te same proporcje kolumn i ten sam odstęp — klient: „każda ma różne
   szerokości kolumn i to brzydko wygląda". Zmiana tylko tutaj. */
:root { --fbc-dwie-kolumny: minmax(0, 0.8fr) minmax(0, 1.2fr); --fbc-dwie-kolumny-gap: clamp(2.5rem, 6vw, 5rem); }
.fbc-recenzja { --fbc-recenzje-czas: 7s; position: relative; z-index: 1; }
.fbc-recenzja__uklad {
	display: grid;
	grid-template-columns: var(--fbc-dwie-kolumny);
	gap: var(--fbc-dwie-kolumny-gap);
	align-items: center;
	transition: opacity 320ms ease;
}
.fbc-recenzja--znika .fbc-recenzja__uklad { opacity: 0; }
.fbc-recenzja__tekst h2 { max-width: 16ch; text-wrap: balance; }
.fbc-recenzja__lead {
	margin-block-start: var(--wp--preset--spacing--40);
	max-width: 44ch;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-recenzja__tekst .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--50); color: var(--wp--preset--color--purr-light); }
.fbc-recenzja__wideo {
	--fbc-sciecie: 22px;
	position: relative;
	display: block;
	aspect-ratio: 16 / 9;
	background: var(--wp--preset--color--ground-dark);
	border: 1px solid var(--wp--preset--color--line-dark);
	box-shadow: 0 40px 80px -30px rgba(0, 0, 0, 0.7);
}
.fbc-recenzja__wideo img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	display: block;
	filter: saturate(0.85);
	transition: transform 900ms cubic-bezier(.2,.7,.2,1), filter 400ms ease;
}
.fbc-recenzja__play {
	/* Prawy dolny róg kadru, ścięte narożniki jak w przyciskach (klient). */
	--fbc-sciecie: 10px;
	position: absolute;
	right: var(--wp--preset--spacing--30);
	bottom: var(--wp--preset--spacing--30);
	display: grid;
	place-items: center;
	width: 56px;
	height: 56px;
	background: var(--wp--preset--color--purr);
	color: var(--wp--preset--color--base);
	box-shadow: 0 10px 30px rgba(118, 0, 112, 0.45);
	clip-path: polygon(var(--fbc-sciecie) 0, 100% 0, 100% calc(100% - var(--fbc-sciecie)), calc(100% - var(--fbc-sciecie)) 100%, 0 100%, 0 var(--fbc-sciecie));
	transition: transform 250ms ease, background-color 250ms ease;
}
@supports (corner-shape: bevel) {
	.fbc-recenzja__play { clip-path: none; corner-shape: bevel; border-radius: var(--fbc-sciecie) 0 var(--fbc-sciecie) 0; }
}
.fbc-recenzja__play svg { margin-inline-start: 3px; }
.fbc-recenzja__czas {
	position: absolute;
	left: var(--wp--preset--spacing--30);   /* lewy dolny róg (klient), play w prawym */
	bottom: var(--wp--preset--spacing--30);
	padding: 2px var(--wp--preset--spacing--20);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.06em;
	color: var(--wp--preset--color--base);
	background: rgba(19, 19, 21, 0.75);
	border-radius: 2px;
}
@media (hover: hover) {
	.fbc-recenzja__wideo:hover img { transform: scale(1.03); filter: saturate(1); }
	.fbc-recenzja__wideo:hover .fbc-recenzja__play { transform: scale(1.06); background: var(--wp--preset--color--purr-hover); }
}
/* Pasek postępu — kolory ciemne z 8c; własny zegar, najazd wstrzymuje. */
/* Odliczanie przeniesione na kafle kanałów (klient 2026-09-18: „progressbar
   niech będzie per kanał, bo za dużo linii na raz i się dublują"), więc długa
   kreska z wypełnieniem znika. Element zostaje: trzyma strzałki i licznik,
   które są pozycjonowane względem niego. */
.fbc-recenzja .fbc-postep { margin-block-start: var(--wp--preset--spacing--80); background: transparent; }
.fbc-recenzja .fbc-postep__wypelnienie { display: none; }
/* Pasek kanałów (klient 2026-09-18: „ustaw tytuły kanałów jako przyciski do
   przełączania slajdów"). Ta sama minimalistyczna forma co zakładki rodziny
   w hero: kreska nad nazwą, aktywna na fioletowo i w bieli, żadnych ramek
   ani wypełnień. Kolumny dobierają się same — dopisanie recenzji zostaje
   jednym wierszem w wzorcu. */
/* Liczba kolumn wprost z liczby recenzji (`--fbc-kanaly` podaje wzorzec),
   nie przez `auto-fit`: przy siedmiu nazwach siatka wyliczała OSIEM kolumn,
   ósma zwijała się do zera, ale jej odstęp zostawał i pasek kończył się 18 px
   przed prawą krawędzią. Flex z kolei rozciągał ostatni, niepełny wiersz na
   całą szerokość. Poniżej 1200 px kolumny są cztery, a na telefonie dwie —
   siedmiu nazw nie da się czytelnie zmieścić w jednym wierszu. */
.fbc-recenzja__kanaly {
	display: grid;
	grid-template-columns: repeat(var(--fbc-kanaly, 4), minmax(0, 1fr));
	gap: 18px;
	margin-block-start: var(--wp--preset--spacing--60);
}
@media (max-width: 1199.98px) {
	.fbc-recenzja__kanaly { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
.fbc-recenzja__kanal-kafel {
	position: relative;
	padding: 12px 0 0;
	text-align: start;
	cursor: pointer;
	background: none;
	border: 0;
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
	font-size: 0.78rem;
	font-weight: 600;
	line-height: 1.25;
	color: var(--wp--preset--color--contrast-3);
	transition: border-color 200ms ease, color 200ms ease;
}
@media (hover: hover) {
	.fbc-recenzja__kanal-kafel:hover { border-block-start-color: var(--wp--preset--color--purr-light); color: var(--wp--preset--color--base); }
}
.fbc-recenzja__kanal-kafel.is-aktywny {
	border-block-start-color: var(--wp--preset--color--purr);
	color: var(--wp--preset--color--base);
}
.fbc-recenzja__kanal-kafel:focus-visible { outline: 2px solid var(--wp--preset--color--purr-light); outline-offset: 4px; }
/* Pasek postępu rysowany po kresce nad aktywnym kanałem — ta sama mechanika
   co w zakładkach hero (`fbc-kafel-postep`). W czasie odliczania kreska
   aktywnej pozycji wraca do koloru nieaktywnych, a nad nią narasta fioletowa;
   dwie fioletowe linie jedna na drugiej nic by nie pokazały. Skrypt czeka na
   `animationend` tej warstwy i wchodzi kolejną recenzją. */
.fbc-recenzja__kanal-kafel::after {
	content: "";
	position: absolute;
	inset-block-start: -1px;
	inset-inline-start: 0;
	width: 100%;
	height: 2px;
	background: var(--wp--preset--color--purr);
	transform: scaleX(0);
	transform-origin: left center;
	pointer-events: none;
}
.fbc-recenzja__kanal-kafel.is-odliczanie { border-block-start-color: var(--wp--preset--color--line-dark); }
.fbc-recenzja__kanal-kafel.is-odliczanie::after {
	animation: fbc-kafel-postep var(--fbc-recenzje-czas) linear forwards;
}
@media (prefers-reduced-motion: reduce) {
	.fbc-recenzja__kanal-kafel.is-odliczanie::after { animation: none; }
	.fbc-recenzja__kanal-kafel.is-odliczanie { border-block-start-color: var(--wp--preset--color--purr); }
}
@media (max-width: 599.98px) {
	.fbc-recenzja__kanaly { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
	.fbc-recenzja__kanal-kafel { font-size: 0.72rem; }
}
.fbc-recenzja .fbc-postep__wypelnienie--biegnie { animation: fbc-postep var(--fbc-recenzje-czas) linear forwards; }
@media (max-width: 899.98px) {
	.fbc-recenzja__uklad { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--60); }
	.fbc-recenzja__wideo { --fbc-sciecie: 16px; }
	/* Na telefonie tekst jest u góry — siatka trzyma się górnego pasa. */
	.fbc-recenzja-sekcja::after {
		-webkit-mask-image: radial-gradient(120% 30% at 30% 18%, #000 0%, rgba(0, 0, 0, 0.5) 45%, transparent 78%);
		mask-image: radial-gradient(120% 30% at 30% 18%, #000 0%, rgba(0, 0, 0, 0.5) 45%, transparent 78%);
	}
}

/* --------------------------------------------------------------------------
   8h. Zamknięcie — „Ready to feel it?" z kolumną newslettera

   Dwie kolumny: tekst i przyciski po lewej, po prawej karta newslettera ze
   ściętymi rogami na Ground dark (jak baner akcesoriów). Formularz: pole
   e-mail i przycisk w jednym pasku; komunikat pod spodem (JS albo parametr
   `?newsletter=` po powrocie z admin-post). Zaplecze: inc/newsletter.php.
   -------------------------------------------------------------------------- */

/* Tło sekcji „jak zawsze" (klient: „podłóż nasze tło"): siatka techniczna
   pod tekstem po lewej, poświata i ziarno z warstw 8b. */
.fbc-cta {
	--fbc-siatka-modul: var(--wp--preset--spacing--80);
	--fbc-siatka-linia: rgba(255, 255, 255, 0.045);
	overflow: hidden;
}
.fbc-cta::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		repeating-linear-gradient(to right, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul)),
		repeating-linear-gradient(to bottom, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul));
	-webkit-mask-image: radial-gradient(42% 60% at 22% 50%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
	mask-image: radial-gradient(42% 60% at 22% 50%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
}
.fbc-cta__uklad {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: var(--fbc-dwie-kolumny);
	gap: var(--fbc-dwie-kolumny-gap);
	align-items: center;
}
.fbc-cta__lead { margin-block-start: var(--wp--preset--spacing--50); max-width: 40ch; color: var(--wp--preset--color--contrast-3); }
.fbc-cta__przyciski { display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--30); margin-block-start: var(--wp--preset--spacing--60); }
.fbc-newsletter {
	--fbc-sciecie: 22px;
	--fbc-ghost-linia: rgba(255, 255, 255, 0.85);
	--fbc-ghost-plomba: transparent;
	--fbc-ghost-tekst: rgba(255, 255, 255, 0.85);
	padding: var(--wp--preset--spacing--60);
	background: var(--wp--preset--color--ground-dark);   /* klient przywrócił ciemne tło (2026-09-05, po próbie przezroczystego) */
	border: 1px solid var(--wp--preset--color--line-dark);
}
.fbc-newsletter h3 { margin: 0; text-wrap: balance; }
.fbc-newsletter__opis { margin-block-start: var(--wp--preset--spacing--30); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-3); max-width: 40ch; }
.fbc-newsletter__form { margin-block-start: var(--wp--preset--spacing--50); }
.fbc-newsletter__pulapka { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.fbc-newsletter__pole {
	display: flex;
	gap: var(--wp--preset--spacing--20);
}
.fbc-newsletter__pole input {
	flex: 1;
	min-width: 0;
	padding: 0 var(--wp--preset--spacing--40);
	box-sizing: border-box;
	height: 51px;   /* = wysokość przycisku obok */
	font: inherit;
	color: var(--wp--preset--color--base);
	background: rgba(255, 255, 255, 0.04);
	border: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 2px;
	transition: border-color 200ms ease;
}
.fbc-newsletter__pole input::placeholder { color: var(--wp--preset--color--contrast-3); }
.fbc-newsletter__pole input:focus { outline: 0; border-color: var(--wp--preset--color--purr-light); }
.fbc-newsletter__pole .wp-block-button__link { background: var(--wp--preset--color--base); color: var(--wp--preset--color--contrast); }   /* rozmiar z komponentu (sekcja 18) */
.fbc-newsletter__form.is-wysyla .wp-block-button__link { opacity: 0.6; }
.fbc-newsletter__komunikat {
	margin-block-start: var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--base);
	padding-inline-start: var(--wp--preset--spacing--30);
	border-inline-start: 2px solid var(--wp--preset--color--purr-light);
}
.fbc-newsletter__komunikat.is-err { border-inline-start-color: #e0554f; }
.fbc-newsletter__zgoda { margin-block-start: var(--wp--preset--spacing--40); font-size: 0.72rem; line-height: 1.5; color: var(--wp--preset--color--contrast-3); }
.fbc-newsletter__zgoda a { color: var(--wp--preset--color--contrast-3); text-decoration: underline; text-underline-offset: 0.18em; }
@media (max-width: 899.98px) {
	.fbc-cta__uklad { grid-template-columns: 1fr; gap: var(--wp--preset--spacing--70); }
	.fbc-newsletter { --fbc-sciecie: 16px; padding: var(--wp--preset--spacing--50); }
}
@media (max-width: 479.98px) {
	.fbc-newsletter__pole { flex-direction: column; }
	/* `flex: 1` w kolumnie to podstawa 0 — pole kurczyło się do 23 px. */
	.fbc-newsletter__pole input { flex: none; }
	.fbc-newsletter__pole .wp-block-button__link { width: 100%; }
}

/* --------------------------------------------------------------------------
   9. Rytm pionowy sekcji

   theme.json deklaruje padding w atrybutach wzorców, ale przy alignfull
   i useRootPaddingAwareAlignments WordPress nie renderuje go jako inline style.
   Ustawiamy go tutaj — pewniej i w jednym miejscu.
   -------------------------------------------------------------------------- */

/* Jedna miara oddechu między sekcjami. Element w środku sekcji, który ma stać od
   treści tak daleko, jak treść stoi od krawędzi sekcji (na przykład pas malowany
   na pełną szerokość), sięga po ten token — nie po przybliżenie ze skali odstępów.
   `spacing--80` (64 px) i `spacing--90` (96 px) są stałe, a rytm skaluje się
   z szerokością okna, więc równość trzymałaby się tylko przy jednej szerokości. */
:root { --fbc-rytm: clamp(3.5rem, 7vw, 6rem); }

.wp-site-blocks main > .wp-block-group,
.wp-site-blocks main > .alignfull {
	padding-block: var(--fbc-rytm);
}

/* Hero dostaje więcej powietrza — to pierwsze, co widać. */
.fbc-hero {
	padding-block: clamp(4.5rem, 9vw, 8rem);
}

/* Rytm stopki siedzi w sekcji 25, razem z resztą jej stylów. */

/* Sąsiadujące sekcje w tym samym trybie nie dublują odstępu na styku.
   Zerujemy też odstęp blokowy: rdzeń daje każdej sekcji `margin-block-start:
   24px`, a między dwiema ciemnymi sekcjami ten margines pokazuje BIAŁE tło
   strony — wąski pasek w poprzek ekranu. Było go nie widać, dopóki między
   recenzjami a CTA stało jasne FAQ (klient 2026-09-18: „pod recenzjami
   i przed sekcją CTA jest jakaś biała przerwa"). Padding zostaje jak był,
   bo obie sekcje podają go atrybutem bloku (styl inline) — na styku daje
   96 + 96 px ciemnego oddechu zamiast 96 + 24 białego + 96. */
.is-style-sekcja-ciemna + .is-style-sekcja-ciemna {
	padding-block-start: 0;
	margin-block-start: 0;
}

/* --------------------------------------------------------------------------
   10. Zabezpieczenie przed rozpychaniem strony

   Treść przeniesiona z Divi zawiera własny HTML z klasami .gthome, .bg,
   .glow, .scrim — szeroki na 1440 px i wychodzący poza viewport.
   Do czasu przepisania treści w Fazie 4 trzymamy go w ryzach.
   -------------------------------------------------------------------------- */

/* `clip`, nie `hidden`: `hidden` na html/body robi z body kontener
   przewijania i `position: sticky` w środku przestaje działać (zdjęcie
   w scrollytellingu zjeżdżało razem z treścią). `clip` tnie tak samo,
   ale nie tworzy kontenera przewijania. */
html, body { max-width: 100%; overflow-x: clip; }

/* Miejsce na pasek przewijania rezerwowane tam, gdzie istnieje menu
   pełnoekranowe. Nakładka blokuje przewijanie (`html.has-modal-open
   { overflow: hidden }`), a tam gdzie pasek jest klasyczny — Chrome na
   Windowsie — znika wtedy z układu i wszystko przy prawej krawędzi
   przeskakuje w bok: hamburger stoi w jednym miejscu, krzyżyk pojawia się obok.

   Reguła CELOWO nie jest globalna. Rezerwacja zabiera 15 px szerokości, a gdy
   pasek jest nakładkowy (albo strona akurat się nie przewija), w tym pasie
   prześwituje tło `body` — biały słupek wzdłuż prawej krawędzi ciemnego hero.
   Powyżej 600 px hamburgera nie ma, więc nie ma czego kompensować. */
@media (max-width: 599.98px) {
	html {
		scrollbar-gutter: stable;
	}
}

.wp-block-post-content { max-width: 100%; overflow-x: clip; }

.wp-block-post-content .gthome,
.wp-block-post-content .bg,
.wp-block-post-content .glow,
.wp-block-post-content .scrim,
.wp-block-post-content .in {
	max-width: 100% !important;
	width: auto !important;
	left: auto !important;
	right: auto !important;
	transform: none !important;
}

/* --------------------------------------------------------------------------
   11. Hero — układ dwukolumnowy

   Dopóki kadr produktu nie jest wstawiony, pusta kolumna wygląda jak błąd.
   Kolumna bez treści zapada się zamiast zostawiać dziurę.
   -------------------------------------------------------------------------- */

.fbc-hero .wp-block-column:empty,
.fbc-hero .wp-block-column:has(> figure.wp-block-image img[src=""]) {
	display: none;
}

/* Pasek danych wyrównany do lewej krawędzi treści, nie rozstrzelony. */
.fbc-hero .wp-block-group.is-layout-flex {
	gap: clamp(2rem, 5vw, 4rem);
	justify-content: flex-start;
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
	padding-block-start: var(--wp--preset--spacing--50);
	margin-block-start: var(--wp--preset--spacing--70);
}

/* Nagłówki sekcji do lewej — wyśrodkowanie łamie rytm strony. */
.wp-site-blocks main .wp-block-heading { text-align: left; }

/* Pasek danych pod hero — równa siatka, nie rozstrzelony flex. */
.fbc-stats {
	display: grid !important;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: var(--wp--preset--spacing--50);
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
	padding-block-start: var(--wp--preset--spacing--50);
}

/* Nagłówek: logo nie może stykać się z nawigacją. */
.fbc-header .wp-block-site-logo { margin-inline-end: var(--wp--preset--spacing--60); }
.fbc-header .wp-block-navigation { gap: var(--wp--preset--spacing--40); }

/* Odstępy sekcji na stronie produktu — main jest tam grupą, nie kontenerem. */
main.wp-block-group > .wp-block-group,
main.wp-block-group > .alignfull {
	padding-block: clamp(3.5rem, 7vw, 6rem);
}

/* Render w hero wypełnia kolumnę — kadr jest przycięty do produktu. */
.fbc-hero .wp-block-image { margin: 0; }
.fbc-hero .wp-block-image img {
	width: 100%;
	height: auto;
	max-width: none;
}

/* --------------------------------------------------------------------------
   11a. Hero — film zamiast renderu

   Reel 9:16 bez wycinania tła. Od 782 px kadr wychodzi z kolumny i przykleja
   się do górnej, dolnej i prawej krawędzi hero (50% szerokości); lewą krawędź
   wygasza maska w poświatę, więc niebiesko-fioletowe tło reela znika w tle
   sekcji. Kolumna tekstu dostaje z-index, żeby strefa przejścia nie kładła
   się na nagłówku. Poniżej 782 px hero jest pionowe (tekst → film → liczby),
   więc film zostaje w przepływie, na całą szerokość okna, w kadrze 4:5
   z wygaszoną górą. Przy ograniczonym ruchu zostaje sama klatka.
   -------------------------------------------------------------------------- */

.fbc-hero__film { margin: 0; }
.fbc-hero__film-kadr {
	position: relative;
	/* Bez przycinania (klient 2026-09-18: „rays mają odcięcie z lewej").
	   Promienie wychodzą poza kadr i to właśnie krawędź kadru cięła je pionową
	   linią. Wycinki produktu przycina `.fbc-hero__scena`, która ma własne
	   `overflow: hidden`, więc przy zmianie slajdu nic nie wyjeżdża poza kadr. */
	overflow: visible;
}
.fbc-hero__wideo,
.fbc-hero__tlo,
.fbc-hero__pedaly,
.fbc-hero__wideo-poster {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: 50% 50%;
	display: block;
}
.fbc-hero__wideo-poster { display: none; }

/* Poświata w kadrze (klient 2026-09-18: „fioletowa poświata za pedałami, ale
   nad tłem i bardziej z prawej"). Poświata sekcji (`.fbc-hero::before`) leży
   pod wszystkim, więc od czasu, gdy tło kadru jest nieprzezroczystym zdjęciem,
   w ogóle jej tam nie widać. Ta warstwa stoi między tłem a produktem i świeci
   po prawej stronie kadru, tam gdzie kończy się cokół. `screen` rozjaśnia
   szarość tła zamiast kłaść na niej płaską plamę. */
.fbc-hero__blask {
	position: absolute;
	/* Zapas poza kadrem: snopy wychodzą spoza prawego górnego rogu, a rozmycie
	   rozmywa też krawędzie warstwy. */
	inset: -30%;
	pointer-events: none;
	mix-blend-mode: screen;
	/* Miękka poświata, z której wychodzą snopy. Zostaje na rodzicu, tak samo jak
	   maska — rodzic stoi w miejscu, rusza się dopiero warstwa ze snopami. */
	background-image: radial-gradient(42% 38% at 74% 22%, rgba(118, 0, 112, 0.5) 0%, rgba(118, 0, 112, 0.2) 45%, transparent 76%);
	-webkit-mask-image: radial-gradient(86% 88% at 82% -4%, #000 0%, rgba(0, 0, 0, 0.78) 40%, rgba(0, 0, 0, 0.3) 66%, transparent 88%);
	mask-image: radial-gradient(86% 88% at 82% -4%, #000 0%, rgba(0, 0, 0, 0.78) 40%, rgba(0, 0, 0, 0.3) 66%, transparent 88%);
	filter: blur(4px);
}
/* Same snopy: powtarzany gradient liniowy pod kątem. Szerokość snopa podana
   w pikselach (ok. 84 px światła, 164 px przerwy), każdy z miękkimi brzegami —
   ostra krawędź zmiękczana globalnym rozmyciem dawała przy szerokich pasach
   jednolitą łunę zamiast snopów. */
.fbc-hero__blask::before {
	content: "";
	position: absolute;
	inset: -20%;
	background-image:
		repeating-linear-gradient(
			104deg,
			rgba(118, 0, 112, 0) 0px,
			rgba(150, 0, 140, 0.16) 24px,
			rgba(196, 0, 184, 0.5) 66px,
			rgba(196, 0, 184, 0.5) 108px,
			rgba(150, 0, 140, 0.16) 150px,
			rgba(118, 0, 112, 0) 174px,
			rgba(118, 0, 112, 0) 248px
		);
	/* Przesunięcie o DOKŁADNIE jeden okres wzdłuż osi gradientu, więc pętla wraca
	   w to samo miejsce i nawrotu nie widać (klient 2026-09-18: „czy te raysy mogą
	   się trochę animować?"). Do tego wolny oddech krycia, żeby światło pulsowało,
	   a nie tylko jechało. Maska i poświata zostają na rodzicu — gdyby jechały
	   razem ze snopami, wędrowałaby cała plama światła, a przy nawrocie pętli
	   byłoby widać skok. */
	animation:
		fbc-rays-przesuw 26s linear infinite,
		fbc-rays-oddech 11s ease-in-out infinite alternate;
	will-change: transform, opacity;
}
@keyframes fbc-rays-przesuw {
	from { transform: translate3d(0, 0, 0); }
	to   { transform: translate3d(240.6px, 60.0px, 0); }
}
@keyframes fbc-rays-oddech {
	from { opacity: 0.72; }
	to   { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__blask::before { animation: none; }
}

/* Scena i produkt to dwie warstwy jednego kadru: tło z pustą halą stoi
   nieruchomo, a wycinki pedałów wjeżdżają i wyjeżdżają razem ze slajdem
   (assets/js/hero-slajdy.js). Wszystkie wycinki leżą na sobie w tym samym
   miejscu, więc produkt nie drgnie przy zmianie — zmienia się tylko to, który
   jest widoczny. */
.fbc-hero__scena {
	position: absolute;
	inset: 0;
	overflow: hidden;
}
.fbc-hero__pedaly {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	object-position: 50% 50%;
	display: block;
	opacity: 0;
	/* Skąd wjechać albo dokąd wyjechać — skrypt ustawia znak przed każdą
	   zmianą, żeby kierunek zgadzał się z tym, w którą stronę idziemy. */
	transform: translate3d(var(--fbc-hero-x, 55%), 0, 0) scale(0.96);
	transition: transform 520ms cubic-bezier(.22, .68, .28, 1), opacity 380ms ease;
	will-change: transform, opacity;
	pointer-events: none;
}
.fbc-hero__pedaly.is-aktywny {
	opacity: 1;
	transform: translate3d(0, 0, 0) scale(1);
}
/* Ustawienie pozycji startowej bez animacji — patrz komentarz w skrypcie. */
.fbc-hero__pedaly.is-bez-ruchu { transition: none; }
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__pedaly { transition: opacity 200ms ease; transform: none; }
	.fbc-hero__pedaly.is-aktywny { transform: none; }
}

/* Wybór rodziny pod tekstem: pasek zakładek na całą szerokość kolumny, bez
   ramek i wypełnień (klient 2026-09-16: „bardziej minimalistyczne"). Aktywną
   pozycję znaczy kreska nad nią i jaśniejszy napis — tyle wystarczy, bo kadr
   obok i tak mówi, na czym stoimy. Stoją w miejscu dawnego pasa z liczbami,
   więc trzymają ten sam odstęp od przycisków. */
.fbc-hero__wybor {
	display: grid;
	/* Liczba pozycji z wzorca — produkt schowany w katalogu wypada z hero,
	   a pozostałe dzielą szerokość (2026-09-26: RALLY ukryty). */
	grid-template-columns: repeat(var(--fbc-hero-pozycje, 3), minmax(0, 1fr));
	gap: 18px;
	width: 100%;
	/* Dalej od przycisków niż daje skala (64 px), bo to osobne piętro hero,
	   a nie ciąg dalszy akcji (klient 2026-09-16). */
	margin-block-start: clamp(var(--wp--preset--spacing--80), 9vh, var(--wp--preset--spacing--90));
}
.fbc-hero__kafel {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 3px;
	padding: 12px 0 0;
	text-align: start;
	cursor: pointer;
	background: none;
	border: 0;
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
	transition: border-color 200ms ease, color 200ms ease;
}
.fbc-hero__kafel-nazwa {
	font-size: 0.78rem;
	font-weight: 600;
	line-height: 1.25;
	color: var(--wp--preset--color--contrast-3);
	transition: color 200ms ease;
}
.fbc-hero__kafel-stan {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.6rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
	opacity: 0.7;
}
@media (hover: hover) {
	.fbc-hero__kafel:hover { border-block-start-color: var(--wp--preset--color--purr-light); }
	.fbc-hero__kafel:hover .fbc-hero__kafel-nazwa { color: var(--wp--preset--color--base); }
}
.fbc-hero__kafel.is-aktywny { border-block-start-color: var(--wp--preset--color--purr); }
.fbc-hero__kafel.is-aktywny .fbc-hero__kafel-nazwa { color: var(--wp--preset--color--base); }
.fbc-hero__kafel.is-aktywny .fbc-hero__kafel-stan { color: var(--wp--preset--color--purr-light); opacity: 1; }
.fbc-hero__kafel:focus-visible { outline: 2px solid var(--wp--preset--color--purr-light); outline-offset: 4px; }
/* Pasek postępu samego przewijania rysowany po kresce nad aktywną pozycją
   (klient 2026-09-16). Kreska aktywnej pozycji wraca wtedy do koloru
   nieaktywnych, a nad nią narasta fioletowa — inaczej dwie fioletowe linie
   jedna na drugiej nic by nie pokazały. Najazd na pasek zatrzymuje zegar,
   więc zatrzymuje też ten rysunek: `animation-play-state`, nie znikanie,
   żeby było widać, ile czasu zostało. */
.fbc-hero__kafel::after {
	content: "";
	position: absolute;
	inset-block-start: -1px;
	inset-inline-start: 0;
	width: 100%;
	height: 2px;
	background: var(--wp--preset--color--purr);
	transform: scaleX(0);
	transform-origin: left center;
	pointer-events: none;
}
.fbc-hero__kafel.is-odliczanie { border-block-start-color: var(--wp--preset--color--line-dark); }
.fbc-hero__kafel.is-odliczanie::after {
	animation: fbc-kafel-postep var(--fbc-kafel-czas, 6000ms) linear forwards;
}
.fbc-hero__wybor.is-pauza .fbc-hero__kafel::after { animation-play-state: paused; }
@keyframes fbc-kafel-postep {
	from { transform: scaleX(0); }
	to   { transform: scaleX(1); }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__kafel.is-odliczanie::after { animation: none; }
	.fbc-hero__kafel.is-odliczanie { border-block-start-color: var(--wp--preset--color--purr); }
}
/* Treść kolumny gaśnie na moment przy zmianie slajdu, żeby nie było widać,
   jak nagłówek przeskakuje między długościami. Skrypt podmienia ją w połowie. */
.fbc-hero__tresc { transition: opacity 170ms ease; }
.fbc-hero__tresc.is-zmiana { opacity: 0.25; }
.fbc-hero__tresc.is-zmiana h1 { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__tresc { transition: none; }
	.fbc-hero__tresc.is-zmiana { opacity: 1; }
}
@media (max-width: 599.98px) {
	.fbc-hero__wybor { gap: 0 14px; }
	.fbc-hero__kafel-nazwa { font-size: 0.7rem; }
	.fbc-hero__kafel-stan { font-size: 0.54rem; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__wideo { display: none; }
	.fbc-hero__wideo-poster { display: block; }
}

/* Ruch nad zdjęciem w hero (klient 2026-09-16). Dym odpadł — rozjaśniał tło
   za pedałem i zbierał mu kontrast, a to jedyny produkt na pierwszym ekranie.
   W zamian pyłki w powietrzu: kilkanaście kropek w tle, każda z własnym
   tempem, unoszą się i gasną. Kropki są małe i rzadkie, więc nic nie zasłaniają
   — a kadr i tak ma już bokeh po prawej, do którego się dokładają.
   Ruch wyłącznie przez `transform` i `opacity`. */
/* Pyłki zdjęte na życzenie klienta (2026-09-18, „na moment") — wracają przez
   skasowanie tej jednej reguły; warstwa i jej style zostają nietknięte. */
.fbc-hero__pylki { display: none; }
.fbc-hero__pylki {
	position: absolute;
	inset: 0;
	pointer-events: none;
	overflow: hidden;
	opacity: var(--fbc-pylki-moc, 1);
	/* Maska na produkt (klient 2026-09-16): nad pedałem pyłki nie znikają,
	   tylko przygasają do 30%, więc dalej przelatują przez cały kadr, a nie
	   sypią się po karbonie. Maska siedzi na rodzicu, który stoi w miejscu —
	   na warstwach z animacją jechałaby razem z nimi i przestałaby trzymać się
	   produktu. */
	--fbc-iskra-b: radial-gradient(circle, #fff 0%, #fff 22%, rgba(255, 255, 255, 0.35) 42%, transparent 72%);
	--fbc-iskra-f: radial-gradient(circle, #fff 0%, color-mix(in srgb, var(--wp--preset--color--purr) 65%, #fff) 26%, color-mix(in srgb, var(--wp--preset--color--purr) 80%, transparent) 48%, transparent 74%);
	-webkit-mask-image: radial-gradient(46% 44% at 52% 52%, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.3) 45%, #000 90%);
	mask-image: radial-gradient(46% 44% at 52% 52%, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.3) 45%, #000 90%);
}
.fbc-hero__pylki::before,
.fbc-hero__pylki::after {
	content: "";
	position: absolute;
	inset: -10% -10% -30%;
	background-repeat: no-repeat;
	will-change: transform, opacity;
}
/* Bliższy plan: większe, wyraźniejsze kropki, rozrzucone po całym kadrze
   (klient 2026-09-16: „są tylko z prawej"). Lewa krawędź i tak gaśnie w masce
   hero, więc kropki tam bledną same z siebie. */
.fbc-hero__pylki::before {
	background-image:
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b);
	background-size: 5px 5px, 6px 6px, 4px 4px, 5px 5px, 7px 7px, 4px 4px, 6px 6px, 5px 5px, 4px 4px, 6px 6px, 5px 5px, 4px 4px, 6px 6px, 4px 4px, 5px 5px, 6px 6px, 4px 4px, 5px 5px, 6px 6px, 4px 4px, 5px 5px, 4px 4px;
	background-position: 12% 58%, 24% 14%, 38% 38%, 47% 72%, 58% 24%, 63% 88%, 76% 36%, 88% 12%, 94% 52%, 31% 92%, 16% 36%, 29% 68%, 42% 22%, 54% 48%, 69% 14%, 71% 60%, 80% 86%, 85% 66%, 92% 78%, 20% 50%, 50% 90%, 36% 50%;
	filter: blur(1px);
	opacity: 0.95;
	animation: fbc-pylki-a 26s linear infinite;
}
/* Dalszy plan: drobniejsze i wolniejsze, z lekkim rozmyciem. */
.fbc-hero__pylki::after {
	background-image:
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f),
		var(--fbc-iskra-b),
		var(--fbc-iskra-b),
		var(--fbc-iskra-f);
	background-size: 5px 5px, 6px 6px, 4px 4px, 5px 5px, 7px 7px, 4px 4px, 6px 6px, 5px 5px, 4px 4px, 6px 6px;
	background-position: 12% 58%, 24% 14%, 38% 38%, 47% 72%, 58% 24%, 63% 88%, 76% 36%, 88% 12%, 94% 52%, 31% 92%;
	filter: blur(2px);
	opacity: 0.65;
	animation: fbc-pylki-b 41s linear infinite;
}
/* Jeden obieg to przesunięcie o wysokość pasa z kropkami, więc pętla wraca
   w to samo miejsce i nie widać cięcia. Gaśnięcie na końcach chowa moment,
   w którym kropki wskakują z powrotem na dół. */
@keyframes fbc-pylki-a {
	0%   { transform: translate3d(0, 12%, 0); opacity: 0; }
	18%  { opacity: 0.95; }
	82%  { opacity: 0.95; }
	100% { transform: translate3d(-3%, -14%, 0); opacity: 0; }
}
@keyframes fbc-pylki-b {
	0%   { transform: translate3d(0, 14%, 0); opacity: 0; }
	22%  { opacity: 0.65; }
	78%  { opacity: 0.65; }
	100% { transform: translate3d(4%, -16%, 0); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	.fbc-hero__pylki { display: none; }
}

@media (min-width: 782px) {
	.fbc-hero { position: relative; }
	.fbc-hero > .wp-block-columns > .wp-block-column:first-child { position: relative; z-index: 1; }
	.fbc-hero figure.fbc-hero__film {
		position: absolute;
		top: 0;
		right: 0;
		bottom: 0;
		left: auto;
		width: 50%;
		height: 100%;
		margin: 0;
	}
	.fbc-hero .fbc-hero__film-kadr {
		position: absolute;
		inset: 0;
		/* Bez maski od 2026-09-18: kadr nie ma już własnego tła (zdjęcie to sam
		   cokół na przezroczystości), więc nie ma czego wygaszać — a maska
		   ścinała przy okazji poświatę po lewej stronie kadru. */
	}
}
@media (max-width: 781.98px) {
	/* Telefon (klient 2026-09-18): kadr siada dołem na krawędzi sekcji, góra
	   sekcji prawie bez oddechu, a promieni nie ma wcale — na wąskim ekranie
	   ich pole wypadało nad tekstem, nie przy produkcie. */
	/* Nagłówek leży NA hero (przyklejony, przezroczysty), więc „prawie zero"
	   liczymy od jego dolnej krawędzi: 72 px wysokości nagłówka i tyle.
	   Przy samym 12 px nadlinia wchodziła pod logo. */
	.fbc-hero { padding-block-start: calc(72px + var(--wp--preset--spacing--20)) !important; padding-block-end: 0 !important; }
	.fbc-hero__blask { display: none; }
	.fbc-hero .fbc-hero__film { margin-block-end: 0; }
	/* Przerwa nad kadrem (klient 2026-09-18) składała się z dwóch rzeczy:
	   odstępu między kolumnami (32 px) i własnego marginesu kolumny ze zdjęciem
	   (48 px). Zmierzone razem: 80 px pustego pasa między kaflami a produktem. */
	/* `!important`, bo obie wartości mają bardziej szczegółowe selektory wyżej
	   w pliku: `.fbc-hero > .wp-block-columns.alignfull` (odstęp) i
	   `.fbc-hero > .wp-block-columns > .wp-block-column:last-child` (margines). */
	.fbc-hero > .wp-block-columns.alignfull { row-gap: 0 !important; }
	/* 60 px oddechu, nie zero (klient 2026-09-18: „przesadziliśmy z tą przerwą").
	   Cała przerwa jest teraz jawna w jednym miejscu — pusty pas ze zdjęcia
	   znika przez powiększenie sceny niżej, więc to, co widać, to dokładnie
	   ta wartość. */
	.fbc-hero > .wp-block-columns > .wp-block-column:last-child { margin-block-start: 60px !important; }
	/* Zdjęcia dosunięte dołem: cokół ma stać na krawędzi, a nie wisieć
	   w środku kadru. Do tego powiększenie od dołu — w pliku nad produktem
	   jest pusta scena (produkt zaczyna się na 14,6% wysokości) i to ona
	   robiła dziurę między kaflami a pedałami. Powiększamy SCENĘ, nie same
	   wycinki: te mają własny `transform` od przesuwania slajdów i skala
	   wchodziłaby z nim w konflikt. */
	.fbc-hero .fbc-hero__film-kadr { overflow: hidden; }
	.fbc-hero__tlo,
	.fbc-hero__scena {
		transform: scale(1.22);
		transform-origin: 50% 100%;
	}
	.fbc-hero__tlo,
	.fbc-hero__pedaly { object-position: 50% 100%; }
	.fbc-hero .fbc-hero__film-kadr {
		width: calc(100% + 2 * var(--fbc-gutter));
		margin-inline: calc(-1 * var(--fbc-gutter));
		/* Kadr niższy niż kwadrat zdjęcia, więc `cover` przycina PUSTĄ górę
		   sceny, a nie boki (klient 2026-09-18: nad pedałami zostawała dziura).
		   Produkt zaczyna się na 14,6% wysokości pliku — przy kwadracie widać
		   dolne 100% szerokości i tyle samo wysokości, czyli całą maszynę
		   z cokołem, bez pustego pasa nad nią. */
		aspect-ratio: 1 / 1;
	}
}

/* --------------------------------------------------------------------------
   12. Nawigacja — mniejsza, cięższa, bez wersalików

   Wersaliki brały się z nazw pozycji menu, nie z CSS — poprawione u źródła.
   Tu zostaje typografia: mniejszy stopień i waga 500 zamiast domyślnej.
   -------------------------------------------------------------------------- */

.fbc-header .wp-block-navigation {
	font-size: 0.875rem;
	font-weight: 500;
	letter-spacing: 0;
	text-transform: none;
}
.fbc-header .wp-block-navigation-item__label {
	font-weight: 500;
	text-transform: none;
}

/* Pozycja menu na najechanie: napis zjeżdża w dół i znika, a z góry wjeżdża jego
   kopia (klient 2026-09-16). Dwie kopie jedna pod drugą wstawia assets/js/naglowek.js;
   domyślnie widać dolną, więc ruch do zera przesuwa całość w dół. */
.fbc-rolka {
	position: relative;
	display: inline-block;
	overflow: hidden;
	vertical-align: bottom;
}
.fbc-rolka__tekst,
.fbc-rolka__kopia {
	display: block;
	white-space: nowrap;
	transition: transform 380ms cubic-bezier(0.2, 0.7, 0.2, 1);
}
.fbc-rolka__kopia {
	position: absolute;
	inset-block-start: 0;
	inset-inline-start: 0;
	transform: translateY(-100%);
}
.fbc-header a:hover .fbc-rolka__tekst,
.fbc-header a:focus-visible .fbc-rolka__tekst { transform: translateY(100%); }
.fbc-header a:hover .fbc-rolka__kopia,
.fbc-header a:focus-visible .fbc-rolka__kopia { transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
	.fbc-rolka__tekst,
	.fbc-rolka__kopia { transition: none; }
}

/* Konto klienta to sama ikona — etykietę podmienia assets/js/naglowek.js
   (klient 2026-09-16). Pole kliknięcia zostaje takie jak przy tekście. */
.fbc-header .fbc-konto .wp-block-navigation-item__label {
	display: inline-flex;
	align-items: center;
}
.fbc-header .fbc-konto svg {
	display: block;
	/* Kreska jak w koszyku obok — cieńsza ikona odstawała od reszty (klient 2026-09-16). */
	stroke-width: 1.7;
	width: 21px;
	height: 21px;
}
/* Konto i koszyk stoją obok siebie na końcu paska, w jednej linii i blisko siebie,
   a od pozycji tekstowych dzieli je wyraźny odstęp (klient 2026-09-16). */
.fbc-header .fbc-konto { margin-inline-start: var(--wp--preset--spacing--50); }
/* Bez menu tekstowego obok (hamburger poniżej 1200 px) odstęp przed profilem
   nie ma czego oddzielać i tylko rozpychał ikony (klient 2026-09-26). */
@media (max-width: 1199.98px) { .fbc-header .fbc-konto { margin-inline-start: 0; } }
.fbc-header .wp-block-navigation,
.fbc-header > .wp-block-group { align-items: center; }
.fbc-header .wp-block-woocommerce-mini-cart { margin-inline-start: 0; }
.fbc-header .wc-block-mini-cart__button { padding: 0; display: flex; align-items: center; line-height: 0; }
/* Znaczek z liczbą sztuk jest wierszem tekstu, więc dokladał kilka pikseli pod
   ikoną i koszyk siedział niżej niż konto (zmierzone: 3 px). */
.fbc-header .wc-block-mini-cart__quantity-badge { display: flex; align-items: center; line-height: 0; }
/* Konto siedzi w pozycji menu, koszyk w osobnym bloku obok — dwa różne pudełka
   o różnej wysokości wiersza. Bez tego środki ikon różniły się o 3 px. */
.fbc-header .wp-block-navigation__container > li,
.fbc-header .wp-block-navigation__container > li > a { display: flex; align-items: center; }
.fbc-header .fbc-konto .wp-block-navigation-item__label { line-height: 0; }
/* Oba znaki w tym samym polu i na tej samej wysokości — ikona WooCommerce miała
   32×32 i wypełnioną bryłę, przez co siedziała niżej i wyglądała grubiej. */
/* Jedno pudełko dla obu znaków: konto siedzi w pozycji menu, koszyk w przycisku
   bloku, więc same `align-items` nie wystarczały — środki różniły się o 3 px,
   bo licznik sztuk dokłada wiersz tekstu (klient 2026-09-18: „wciąż na różnym
   poziomie"). Stała wysokość 24 px i wyśrodkowanie w niej zdejmują różnicę
   niezależnie od tego, czy licznik jest widoczny. */
.fbc-header .fbc-konto,
.fbc-header .wc-block-mini-cart__button,
.fbc-header .wc-block-mini-cart__quantity-badge {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 24px;
	line-height: 0;
}
.fbc-header .fbc-konto svg,
.fbc-header .fbc-koszyk-ikona {
	display: block;
	width: 21px;
	height: 21px;
	/* `!important`, bo zestaw reguł dla ciemnego hero ustawia `fill: currentColor`
	   na każdym SVG w nagłówku (specyficzność 0,4,2) i zalewał obrys — na stronie
	   głównej ikony wychodziły wypełnione (klient 2026-09-16). Atrybut `fill="none"`
	   z rysunku nie ma szans, bo CSS bije atrybuty prezentacyjne. */
	fill: none !important;
}
/* Bez podnoszenia na najechanie (klient 2026-09-16) — zostaje sama zmiana koloru,
   ta sama co przy pozycjach tekstowych. */
.fbc-header .wp-block-navigation a:hover .wp-block-navigation-item__label {
	text-decoration: underline;
	text-underline-offset: 4px;
}

/* --------------------------------------------------------------------------
   13. Hero na pełną szerokość

   Treść rozciąga się poza 1120 px, ale nie dotyka krawędzi — margines
   boczny skaluje się z oknem.
   -------------------------------------------------------------------------- */

.fbc-hero > .wp-block-columns.alignfull,
.fbc-hero > .fbc-stats.alignfull {
	padding-inline: clamp(1.5rem, 5vw, 5rem);
	max-width: 100%;
	margin-inline: 0;
}

.fbc-hero > .wp-block-columns.alignfull {
	gap: clamp(2rem, 5vw, 5rem);
}

/* Na szerokim ekranie kolumna tekstowa nie może się rozjechać
   na całą szerokość — tekst przestaje być czytelny powyżej ~60 znaków.
   Limity podane w `ch`, a nie w `rem`: rosną razem z krojem, więc gdy
   typografia skaluje się z szerokością okna, blok tekstu rośnie z nią,
   zamiast zatrzymać się i zostawić dziurę obok renderu. */
.fbc-hero__tresc > * { max-width: 44ch; }

/* Lead ma się łamać po zdaniu, a nie w przypadkowym miejscu. Naturalne
   zawijanie robiło to dobrze tylko przypadkiem — przy szerokim oknie
   „Designed" wskakiwało do pierwszej linii. Podział jest więc jawny,
   ale włącza się dopiero tam, gdzie pierwsze zdanie mieści się w linii:
   potrzebuje 495 px, a kolumna daje tyle od ok. 1300 px szerokości okna.
   Niżej `br` znika i tekst zawija się naturalnie. */
.fbc-hero__tresc p br { display: none; }

@media (min-width: 1300px) {
	.fbc-hero__tresc p br { display: inline; }
}
.fbc-hero__tresc > h1 { max-width: 20ch; }

/* Pasek liczb siedzi w kolumnie z tekstem, żeby nie zabierać wysokości
   renderowi. `auto-fit` w węższym kontenerze układał go 3 + 1 i zostawiał
   sierotę — wymuszamy cztery równe kolumny. Etykiety mogą się złamać
   na dwie linie i to w porządku; pozycji ma być cztery obok siebie. */
.fbc-hero .wp-block-column:first-child > .fbc-stats {
	max-width: none;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--40);
	align-content: start;
}
/* Etykieta „at the pedal face" jest najdłuższa i przy 1440 px łamała się
   na dwie linie, podbijając pasek z 85 na 106 px — a to wysokość odjęta
   renderowi. Skala schodzi razem z szerokością kolumny. */
.fbc-hero .fbc-stat {
	font-size: clamp(0.72rem, 0.58vw, 0.833rem);
}

/* Typografia hero skaluje się z szerokością okna. Bez tego na 2000 px+
   nagłówek zostaje przy 3,5rem, kolumna tekstu przestaje rosnąć
   i między nią a renderem otwiera się pusty pas. */
@media (min-width: 782px) {
	/* !important, bo WordPress generuje klasy `has-*-font-size`
	   właśnie z !important — bez tego nagłówek zostawał na 3,5rem. */
	/* Górne krańce `clamp()` ścięte (klient 2026-09-16: „tekst jest za duży",
	   po pierwszej korekcie „teraz za mały"). Nagłówek rósł do 5,5rem i na
	   szerokim ekranie zjadał kolumnę; teraz przestaje przy ~1850 px i zostaje
	   na 4,1rem, czyli o jedną czwartą niżej niż było. */
	.fbc-hero h1 {
		font-size: clamp(2.5rem, 3.55vw, 4.1rem) !important;
		line-height: 1.05;
	}
	.fbc-hero__tresc > p:not(.fbc-eyebrow) {
		font-size: clamp(1.05rem, 1.02vw, 1.25rem) !important;
	}
	.fbc-hero .fbc-eyebrow {
		font-size: clamp(0.74rem, 0.58vw, 0.9rem);
	}
}
.fbc-hero .fbc-stats > * { margin-block: 0; }

/* --------------------------------------------------------------------------
   14. Poświata, ziarno i siatka w hero

   Fiolet wraca tu jako powierzchnia, nie kolor tekstu — zgodnie z regułą
   z docs/kierunek-artystyczny.md. Wypada po stronie renderu, więc daje mu
   głębię, a nie dotyka kolumny z tekstem, gdzie obniżałby kontrast.
   Świadomie oszczędny: przy kierunku Leica/Sennheiser gradient ma być
   wyczuwalny, nie widowiskowy.

   Trzy warstwy, dwa pseudoelementy — bo tyle jest dostępnych:

   ::before  ziarno + obie poświaty (background-image się stackuje, pierwsza
             warstwa jest na wierzchu). Ziarno MUSI leżeć nad gradientem,
             nie pod nim: łamie pasmowanie, które ciemny fiolet robi
             na 8-bitowych matrycach. Pod gradientem nie miałoby czego łamać.
   ::after   siatka techniczna z maską.

   Zero plików z zewnątrz — siatka to dwa gradienty, ziarno to feTurbulence
   w data-URI (ok. 330 bajtów). Baseline strony to 1 646 KB przy celu <800 KB,
   więc tło nie ma prawa dokładać wagi.
   -------------------------------------------------------------------------- */

.fbc-hero {
	position: relative;
	isolation: isolate;
	overflow: hidden;

	/* Moduł siatki bierzemy ze skali odstępów, żeby nie był przypadkową
	   liczbą — spacing 80 to 64 px. */
	--fbc-siatka-modul: var(--wp--preset--spacing--80);
	--fbc-siatka-linia: rgba(255, 255, 255, 0.045);
}

/* Poświata sekcji zdjęta 2026-09-18 (klient: „jest jeszcze druga z lewej,
   usuń ją"). Świeciła pod całym hero, więc po lewej kładła się za kolumną
   z tekstem — a od czasu, gdy kadr ma własną poświatę (`.fbc-hero__blask`),
   były dwie plamy naraz. Ziarno i siatka zostają: to osobne warstwy
   (`.fbc-ziarno` i `.fbc-hero::after`). */

/* Ziarno — własna warstwa, nieruchoma. Leży nad poświatą (kolejność
   malowania: ::before, potem dzieci elementu, potem ::after), więc łamie
   pasmowanie gradientu; pod gradientem nie miałoby czego łamać.
   NIE wolno go trzymać razem z poświatą na ::before: tamta jest animowana
   transformem, więc szum przesuwałby się i skalował razem z nią. */
.fbc-hero > .fbc-ziarno {
	position: absolute;
	inset: 0;

	/* Zerowanie marginesu jest tu KONIECZNE. WordPress daje dzieciom grupy
	   odstęp blokowy, a element pozycjonowany absolutnie z `inset: 0`
	   i wysokością `auto` przesuwa się o własny margines: warstwa zaczynała
	   się 24 px poniżej górnej krawędzi hero i o tyle samo była niższa,
	   przez co u góry było widać odcięcie szumu. */
	margin: 0;

	z-index: -1;
	pointer-events: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='z'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23z)' opacity='.09'/%3E%3C/svg%3E");
	background-repeat: repeat;
}

/* Siatka techniczna — papier milimetrowy, nie dekoracja. Linie 1 px przy
   4,5% krycia: przy tej wartości siatka jest wyczuwalna, ale nieczytelna,
   czyli robi dokładnie to, co ma. Maska wygasza ją przed renderem po prawej
   (przezroczysta ok. 760 px przy oknie 1440) i nad paskiem liczb u dołu
   (ok. 590 px, pasek zaczyna się na 620) — nie wolno jej tam wejść. */
.fbc-hero::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		repeating-linear-gradient(
			to right,
			var(--fbc-siatka-linia) 0 1px,
			transparent 1px var(--fbc-siatka-modul)
		),
		repeating-linear-gradient(
			to bottom,
			var(--fbc-siatka-linia) 0 1px,
			transparent 1px var(--fbc-siatka-modul)
		);

	-webkit-mask-image: radial-gradient(46% 34% at 16% 38%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
	mask-image: radial-gradient(46% 34% at 16% 38%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
}

@media (max-width: 781px) {
	/* Na telefonie tekst i render dzielą tę samą kolumnę — poświata schodzi
	   wyżej, żeby nie kłaść się na akapicie. Ziarno ma własną warstwę
	   i tej reguły nie dotyczy. */
	.fbc-hero::before {
		background-image:
			radial-gradient(54.7% 23.2% at 65.8% 19.5%, rgba(118, 0, 112, 0.5) 0%, rgba(118, 0, 112, 0.15) 36%, transparent 62%);
	}

	/* Siatka trzyma się górnego pasa — niżej idzie render, a pod nim liczby. */
	.fbc-hero::after {
		-webkit-mask-image: radial-gradient(120% 22% at 30% 12%, #000 0%, rgba(0, 0, 0, 0.5) 45%, transparent 78%);
		mask-image: radial-gradient(120% 22% at 30% 12%, #000 0%, rgba(0, 0, 0, 0.5) 45%, transparent 78%);
	}
}

/* --------------------------------------------------------------------------
   15. Nagłówek nałożony na ciemną sekcję

   Warunkowo: tylko gdy pierwsza sekcja strony jest ciemna. Na stronach
   treści (page.html) nagłówek zostaje normalny — biały na białym byłby
   niewidoczny.
   -------------------------------------------------------------------------- */

.fbc-header {
	/* Układ nagłówka (siatka trzech pasów: logo, menu, ikony) jest w sekcji 2.
	   Tu została sama wysokość — wcześniej ta reguła ustawiała `display: flex`
	   i jako późniejsza wygrywała z siatką, przez co menu stało tuż za logo
	   zamiast na środku (klient 2026-09-18: „menu wcale nie jest na środku"). */
	min-height: 72px;
}

.fbc-header > .wp-block-group {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--40);
}

.fbc-header .wp-block-site-logo,
.fbc-header .wp-block-site-logo img,
.fbc-header .wp-block-navigation,
.fbc-header .wp-block-woocommerce-mini-cart {
	display: flex;
	align-items: center;
	margin-block: 0;
}

/* Strony WooCommerce owijają <main> w `div.woocommerce`; jako drugie dziecko
   `.wp-site-blocks` dostawał odstęp bloków (24 px), który przez absolutny
   nagłówek zapadał się na górę strony i robił biały pasek nad menu (klient). */
.wp-site-blocks > .woocommerce { margin-block-start: 0; }

/* --------------------------------------------------------------------------
   Nagłówek chowany i wracający (klient 2026-09-15)

   Przy górze strony nagłówek leży w układzie tak jak dotąd. Po przewinięciu
   poniżej progu skrypt (assets/js/naglowek.js) daje `<body>` klasę
   `fbc-menu-przyklejone` — nagłówek wisi wtedy nad treścią — i dokłada
   `fbc-menu-schowane`, gdy czytelnik jedzie w dół.

   `--fbc-naglowek-teraz` mówi, ile nagłówka naprawdę zasłania górę okna.
   Elementy przyklejone niżej (kolumna ze zdjęciem produktu) liczą z niej swój
   odstęp, zamiast trzymać stałe 72 px — stąd brała się pusta listwa nad
   zdjęciem po pasku, którego w tym momencie nie było na ekranie.
   -------------------------------------------------------------------------- */

/* Domyślnie 72 px, bo przy górze strony nagłówek stoi w układzie i zajmuje
   swoje miejsce; zeruje się dopiero wtedy, gdy naprawdę zjechał poza ekran. */
:root { --fbc-naglowek-teraz: 72px; }
body.fbc-menu-przyklejone { --fbc-naglowek-teraz: 72px; }
body.fbc-menu-schowane { --fbc-naglowek-teraz: 0px; }

/* Pozycjonowany jest zewnętrzny `<header class="wp-block-template-part">`, nie
   wewnętrzna grupa `.fbc-header` — szablon renderuje dwa zagnieżdżone `<header>`.

   `sticky`, nie `fixed`: nagłówek stoi w układzie strony, więc wyjęcie go z niego
   podnosiło całą treść o jego wysokość — przy każdej zmianie kierunku przewijania
   strona podskakiwała o 72 px (klient 2026-09-15: "menu jakby renderuje się
   podwójnie"). `sticky` zostawia miejsce, które zajmował, więc nic się nie rusza.
   Przyklejenie jest bezwarunkowe; klasy na `<body>` sterują tylko wyglądem i ukryciem. */
.wp-site-blocks > header {
	position: sticky;
	inset-block-start: 0;
	z-index: 60;
	transition: transform 0.28s ease;
}
body.fbc-menu-przyklejone .wp-site-blocks > header {
	background: var(--wp--preset--color--base);
	box-shadow: 0 1px 0 var(--wp--preset--color--line);
}
/* Dodatkowy piksel ponad własną wysokość i cień zdjęty: kreska spod nagłówka
   wypadała dokładnie na krawędzi okna i przy przewijaniu w dół zostawał jasny
   pasek na 1 px (klient 2026-09-15). Wysokość bywa też ułamkowa, więc samo
   `-100%` potrafi zostawić subpiksel. */
body.fbc-menu-schowane .wp-site-blocks > header {
	transform: translateY(calc(-100% - 2px));
	box-shadow: none;
}
@media (prefers-reduced-motion: reduce) {
	body.fbc-menu-przyklejone .wp-site-blocks > header { transition: none; }
}
/* Jedna klatka bez animacji — skrypt nakłada tę klasę, gdy nagłówek ma od razu
   stanąć poza ekranem, zamiast tam dojechać.

   Dotyczy wyłącznie strony z ciemnym hero: tylko tam nagłówek leży nad treścią
   jako `absolute` i przy progu jest już przewinięty, więc przejście na `fixed`
   wracałoby go na górę okna i biały pasek migotałby przez kilkanaście klatek.
   Na pozostałych stronach nagłówek jest `sticky`, stoi już przy górnej krawędzi
   i ma skąd odjechać — tam blokada animacji sprawiała, że menu znikało skokiem
   zamiast zjechać (klient 2026-09-16). */
body:has(.wp-site-blocks main > .is-style-sekcja-ciemna:first-child).fbc-menu-bez-ruchu .wp-site-blocks > header { transition: none; }

/* Na ciemnym hero nagłówek jest biały i przezroczysty. Po przyklejeniu leży już
   nad jasną treścią, więc wraca do ciemnych kolorów, a logo do własnego — tamten
   zestaw reguł wyłącza się sam przez `:not(.fbc-menu-przyklejone)` (niżej). */

body:has(.wp-site-blocks main > .is-style-sekcja-ciemna:first-child) {

	&:not(.fbc-menu-przyklejone) .wp-site-blocks > header {
		position: absolute;
		inset-block-start: 0;
		inset-inline: 0;
		z-index: 20;
		background: transparent;
	}

	/* Otwarta wyszukiwarka (body.fbc-szukaj-otwarte): nagłówek w białym stanie
	   jak po przewinięciu — pasek z polem jest jego przedłużeniem, a nie białym
	   pasem pod przezroczystym menu (klient 2026-09-27: „słabo to wygląda,
	   trzeba dodawać wtedy tło do menu”). Pozycja zostaje ta sama. */
	&.fbc-szukaj-otwarte:not(.fbc-menu-przyklejone) .wp-site-blocks > header {
		background: var(--wp--preset--color--base);
	}

	/* Tu nagłówek leży NAD hero i nie zajmuje miejsca w układzie, więc `absolute`
	   i `fixed` wymieniają się bez skoku — oba są poza układem. `sticky` z reguły
	   ogólnej zająłby miejsce i zepchnął hero w dół o 72 px. */
	&.fbc-menu-przyklejone .wp-site-blocks > header {
		position: fixed;
		inset-block-start: 0;
		inset-inline: 0;
		z-index: 60;
	}

	/* wszystko w nagłówku na biało */
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header,
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header a,
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header .wp-block-navigation-item__label,
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header .wp-block-woocommerce-mini-cart a,
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header svg {
		color: var(--wp--preset--color--base);
		fill: currentColor;
	}

	/* logo jest ciemne — odwracamy je na biel zamiast trzymać drugi plik */
	&:not(.fbc-menu-przyklejone):not(.fbc-szukaj-otwarte) .fbc-header .wp-block-site-logo img {
		filter: brightness(0) invert(1);
	}

	/* hero robi miejsce na nałożony nagłówek */
	& .wp-site-blocks main > .is-style-sekcja-ciemna:first-child {
		padding-block-start: calc(72px + clamp(3.5rem, 7vw, 6rem));
	}

	& .wp-site-blocks { position: relative; }
}

/* Licznik koszyka: kolory zależą od tła nagłówka — reguły w woocommerce.css
   (klient 2026-09-25). Tu tylko kształt. */
.fbc-header .wc-block-mini-cart__badge { border-radius: 2px; }

/* --------------------------------------------------------------------------
   16. Jedna krawędź dla całej strony

   Strona miała cztery różne lewe krawędzie, bo nagłówek chodził na root
   paddingu WordPressa, a sekcje na alignwide — dwa niezależne mechanizmy,
   które nie mają jak się zgodzić.

   Od teraz wcięcie boczne jest jedno i nakłada się DOKŁADNIE RAZ:
   na sekcji pełnej szerokości. Nic w środku sekcji go nie powtarza.
   -------------------------------------------------------------------------- */

:root {
	--fbc-gutter: clamp(1.25rem, 8vw, 8.5rem);
}

/* Ultrawide: bez żadnego limitu szerokości — temat otwarty, do ustalenia
   z klientem (2026-09-25). Dwa podejścia już były i zostały cofnięte:
   limit całej treści do 1728 px powyżej 2000 px (v1.100.0, 20.09 — zwężał
   stronę) i sufit 1728 px tylko na siatkach kart o stałej liczbie kolumn
   (v1.111.5). Pomiar kart na 1920 / 2560 / 3440: `.work/ultrawide-karty.js`. */

/* Warstwa, która trzyma wcięcie — i tylko ona. */
.fbc-header,
.wp-site-blocks main > .alignfull,
.wp-site-blocks main > .has-global-padding {
	max-width: 100%;
	padding-inline: var(--fbc-gutter);
	margin-inline: 0;
}

/* Nagłówek jest flexem, a WordPress dokłada jego dzieciom margin-inline: auto
   z układu "constrained". W flexie auto zjada wolne miejsce — logo dostawało
   przez to 66 px marginesu i uciekało z linii nagłówka.
   !important jest tu konieczne: reguła rdzenia
   `.is-layout-constrained > :where(...) { margin-left: auto !important }`
   nie da się przebić samą specyficznością. */
.fbc-header.wp-block-group > * {
	margin: 0 !important;
	max-width: none;
}
.fbc-header.wp-block-group > .wp-block-group {
	margin-inline-start: auto !important;   /* menu i koszyk do prawej krawędzi */
}

/* Marginesu blokowego też trzeba się pozbyć, nie tylko bocznego: WordPress
   daje drugiemu dziecku grupy odstęp `margin-block-start: 24px`, a we flexie
   z `align-items: center` centrowane jest pudełko RAZEM z marginesem —
   przez co menu i koszyk siedziały 12 px niżej niż logo. */

/* Wcięcie jest już na sekcji, więc treść w środku nie dokłada drugiego.
   Dotyczy alignwide, zagnieżdżonych alignfull i obu bloków hero. */
.wp-site-blocks main .alignwide,
.wp-site-blocks main .alignfull > .alignfull,
.fbc-hero > .wp-block-columns,
.fbc-hero > .fbc-stats {
	max-width: 100%;
	margin-inline: 0;
	padding-inline: 0;
}

.wp-site-blocks main .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull):not(.alignwide)) {
	max-width: 100%;
	margin-inline: 0;
}

/* Wyjątek: długi tekst nie ma prawa ciągnąć się przez cały ekran.
   Ograniczamy miarę wiersza, ale od lewej — krawędź zostaje wspólna. */
.wp-block-post-content p,
.wp-block-woocommerce-product-details p,
.wp-block-woocommerce-product-details li {
	max-width: 72ch;
}

/* Na telefonie: koszyk i hamburger w równym odstępie między rysunkami ikon;
   konto jest w górnym pasku otwartego menu (`.fbc-menu-konto`, klient
   2026-09-26: „za ciasno”, potem „nie jako kolejna linia w menu”). Dawne `order: -1` na koszyku pochodziło sprzed
   przeniesienia konta do grupy ikon. Odstęp 24 px: tyle co flex-gap ikon; przy hamburgerze
   odejmujemy zapas jego przycisku (8 px padding + 5 px pustego pola w SVG)
   od 16 px odstępu kolumn siatki. */
@media (max-width: 599.98px) {
	/* `.fbc-header >` — klasa układu WordPressa (`wp-container-…`) ma tę samą wagę i stoi później. */
	.fbc-header > .fbc-header__ikony { gap: 24px; }
	.fbc-header > nav.wp-block-navigation { margin-inline-start: -5px; }

	/* Ikona powiększona z 24 do 30 px. Dwie cienkie kreski przy 31 px
	   odstępu optycznie „odpływają" od krawędzi — zwarty znak logo po
	   drugiej stronie ma znacznie większą masę. Większy rysunek wypełnia
	   ten sam odstęp i przestaje wyglądać na zagubiony, a wspólna krawędź
	   zostaje nienaruszona. */
	.fbc-header .wp-block-navigation__responsive-container-open svg {
		width: 30px;
		height: 30px;
	}

	/* W gutter ma trafić RYSUNEK ikony, nie pudełko przycisku ani ramka SVG.
	   Zapasy: 8 px paddingu przycisku (powierzchnia dotyku) + pusty margines
	   w samym SVG — viewBox 24×24 z kreskami od x=4 do x=20, czyli po
	   powiększeniu do 30 px daje to 5 px z każdej strony. */
	.fbc-header .wp-block-navigation__responsive-container-open {
		margin-inline-end: calc(-1 * (var(--wp--preset--spacing--20) + 5px));
	}
}

/* Powyżej 600 px hamburgera nie ma i skrajną ikoną jest koszyk — jego glif
   ma 14 px na pudełko 40 px, czyli 13 px zapasu z każdej strony (8 px padding
   przycisku + 5 px pustego marginesu w SVG). Wartości wzięte z pomiaru
   wyrenderowanych pikseli, nie z arkusza: zapas w SVG jest inny dla każdej
   ikony i nie da się go wyliczyć z tokenów. */
@media (min-width: 600px) {
	/* Tylko zewnętrzny element — przy dwóch zagnieżdżonych selektorach
	   margines nakłada się podwójnie. */
	.fbc-header .wp-block-woocommerce-mini-cart {
		margin-inline-end: -13px;
	}
}

/* --------------------------------------------------------------------------
   20. Menu pełnoekranowe na telefonie

   WordPress maluje nakładkę na biało i ustawia czarny tekst, ale nagłówek
   jest u nas przezroczysty nad ciemnym hero i ma białe linki — te dwie
   reguły spotykały się na bieli na bieli. Nakładka jest ciemna zawsze,
   niezależnie od tego, czy strona pod spodem jest jasna czy ciemna:
   pełny ekran to własna powierzchnia, nie przedłużenie sekcji.
   -------------------------------------------------------------------------- */

/* !important na tle: rdzeń maluje nakładkę regułą
   `.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open:not(...)`,
   czyli pięcioma klasami. Da się ją przebić dłuższym selektorem, ale byłby
   kruchy — wystarczy zmiana klasy w rdzeniu i przestaje trafiać. */
/* Animacja wejścia rdzenia (`overlay-menu__fade-in-animation`) kończy się na `transform: translateY(0)`
   z `fill-mode: forwards` — a każdy `transform` robi z nakładki blok zawierający dla `position: fixed`,
   więc krzyżyk i pas pod „MY ACCOUNT” przewijały się z listą zamiast stać (2026-10-01). Samo rozjaśnienie. */
@keyframes fbc-menu-wejscie { from { opacity: 0; } to { opacity: 1; } }
.wp-block-navigation__responsive-container.is-menu-open {
	animation: fbc-menu-wejscie .1s ease-out !important;
	transform: none !important;
	background-color: var(--wp--preset--color--ground-dark) !important;
	color: var(--wp--preset--color--base);

	/* Menu trzyma tę samą krawędź co logo i hamburger. Padding pionowy
	   zostawiamy rdzeniowi — robi miejsce na przycisk zamykania. */
	padding-inline: var(--fbc-gutter) !important;

	/* Zmienne ustawione tutaj, a nie na samej liście: dziedziczą je
	   i kontener treści, i `ul`, a WordPress wyrównuje oba przez nie. */
	--navigation-layout-align: flex-start;
	--navigation-layout-justification-setting: flex-start;
}

.wp-block-navigation__responsive-container.is-menu-open,
.wp-block-navigation__responsive-container.is-menu-open a,
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__label,
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-close {
	color: var(--wp--preset--color--base);
}

/* W nakładce jest miejsce, więc pozycje dostają czytelny stopień
   i odstęp na palec — 44 px to minimum pola dotyku wg WCAG. */
/* Nakładka dziedziczy wyrównanie do prawej z poziomego paska nawigacji.
   Na pełnym ekranie pozycje mają zaczynać się tam, gdzie oko wraca po
   każdej linii — czyli od lewej, w tej samej krawędzi co logo. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
	text-align: start;

	/* Te same zmienne trzeba powtórzyć TUTAJ, nie tylko na nadrzędnym
	   elemencie: klasa `items-justified-right` siedzi bezpośrednio na tej
	   liście, a własność ustawiona na elemencie bije wartość dziedziczoną. */
	--navigation-layout-align: flex-start;
	--navigation-layout-justification-setting: flex-start;
}

/* Przycisk zamykania staje dokładnie tam, gdzie był hamburger — ten sam
   rozmiar rysunku i ta sama korekta, żeby przy otwarciu menu nic nie skoczyło. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-close svg {
	width: 30px;
	height: 30px;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-close {
	margin-inline-end: calc(-1 * (var(--wp--preset--spacing--20) + 5px));
	margin-block-start: -3px;   /* zmierzone: bez tego krzyżyk siada 3 px niżej niż hamburger */
}

/* Biała szpara nad nagłówkiem. WordPress daje dzieciom .wp-site-blocks
   margin-block-start 24 px i zeruje go tylko pierwszemu — a u nas nagłówek
   jest nałożony (poza przepływem), więc pierwszy w przepływie jest <main>
   i to on ten margines dostawał. Margines wychodził na zewnątrz kontenera
   (collapsing margins) i odsłaniał białe tło body.

   Ten sam margines dostaje <footer> jako kolejne dziecko — tam nie kolapsuje,
   tylko zostaje jako 24 px szczeliny między sekcją a stopką, w której też
   prześwieca białe tło body. Rytm pionowy siedzi w paddingach sekcji,
   więc ten margines jest zbędny w obu miejscach. */
.wp-site-blocks main,
.wp-site-blocks > footer,
.wp-site-blocks > *:first-child {
	margin-block-start: 0;
}
/* --------------------------------------------------------------------------
   17. Hero na pełną wysokość okna

   dvh, nie vh — na telefonach pasek adresu chowa się przy przewijaniu
   i vh powoduje skok układu.

   Na desktopie w oknie ma się zmieścić CAŁY hero razem z paskiem liczb,
   bez przewijania. Wysokości są ustalone dla wszystkiego poza renderem —
   to on jest elastyczny i to on oddaje miejsce, gdy okno jest niskie.
   -------------------------------------------------------------------------- */

.fbc-hero {
	min-height: 100vh;          /* zapas dla przeglądarek bez dvh */
	min-height: 100dvh;
	display: flex;
	flex-direction: column;
}

/* Pasek liczb to jeden wiersz przez całą szerokość. Jego wysokość wchodzi
   w budżet 100dvh, więc odstęp nad nim trzymamy krótki — każdy piksel
   zabrany tutaj to piksel mniej dla renderu. */
.fbc-hero .fbc-stats {
	flex: 0 0 auto;
	padding-block-start: var(--wp--preset--spacing--40);
}

/* Pasek admina zabiera górę okna (WordPress robi na niego miejsce marginesem
   na <html>), więc dla zalogowanego edytora "pełne okno" jest o tyle niższe.
   Bez tego dolna krawędź hero wraz z częścią odstępu pod paskiem liczb
   wypadała poniżej ekranu. Odwiedzający tego nie widzą — ale przeglądamy
   stronę zalogowani, więc różnica jest realna w ocenie układu.
   WordPress nie wystawia tu żadnej zmiennej, stąd własna. */
.fbc-hero { --fbc-pasek-admina: 0px; }
body.admin-bar .fbc-hero { --fbc-pasek-admina: 32px; }
@media (max-width: 782px) {
	body.admin-bar .fbc-hero { --fbc-pasek-admina: 46px; }
}

@media (min-width: 782px) and (min-height: 621px) {
	.fbc-hero {
		/* nie min-height — hero ma się ZMIEŚCIĆ, nie rosnąć */
		height: calc(100dvh - var(--fbc-pasek-admina));
	}

	/* Odstęp liczony od wysokości okna, nie szerokości. Sekcja 15 daje hero
	   stały zapas na nałożony nagłówek i odstęp zależny od vw — przy niskim
	   oknie zjadałby całą przestrzeń renderu. !important, bo tamta reguła
	   (`body:has(...) ... .is-style-sekcja-ciemna:first-child`) ma wyższą
	   specyficzność i nie da się jej przebić rozsądnym selektorem. */
	.fbc-hero {
		padding-block-start: calc(72px + clamp(1.5rem, 5vh, 6rem)) !important;
		padding-block-end: clamp(1.5rem, 5vh, 6rem) !important;
	}

	/* Kolumny biorą całą resztę i wolno im się skurczyć (min-height: 0 —
	   bez tego element flex nie zejdzie poniżej rozmiaru swojej treści). */
	.fbc-hero > .wp-block-columns {
		flex: 1 1 auto;
		min-height: 0;
	}
	/* align-self: stretch jest tu kluczowe. Wzorzec ma kolumny wyrównane
	   do środka (`are-vertically-aligned-center`), a to wyłącza rozciąganie —
	   kolumna dostaje wysokość swojej treści, więc `height: 100%` na kadrze
	   nie ma się do czego odnieść i render wychodzi poza hero.
	   Rozciągamy kolumny, a treść centrujemy już w środku. */
	.fbc-hero > .wp-block-columns > .wp-block-column {
		min-height: 0;
		align-self: stretch;
		display: flex;
		flex-direction: column;
		justify-content: center;
	}

	/* Podział kolumn 52/48 ze wzorca ma sens do ok. 1200 px. Wyżej tekst
	   i tak nie rośnie (H1 ma limit 20ch, akapit 34rem), więc nadmiar
	   szerokości jest marnowany — oddajemy go renderowi.
	   !important, bo wzorzec podaje flex-basis stylem inline (52%/48%),
	   a ten bije zwykłe reguły z arkusza. */
	.fbc-hero > .wp-block-columns > .wp-block-column:first-child {
		flex-basis: min(46%, 62rem) !important;
		flex-shrink: 0;   /* bez tego rosnąca kolumna renderu ścieśnia nagłówek */
	}
	.fbc-hero > .wp-block-columns > .wp-block-column:last-child {
		flex-basis: auto !important;
		flex-grow: 1;
	}

	/* Render skaluje się do dostępnej wysokości, trzymając proporcje
	   i prawą krawędź kadru. */
	.fbc-hero .wp-block-image {
		height: 100%;
		min-height: 0;
		display: flex;
		align-items: center;
		justify-content: flex-end;
	}
	.fbc-hero .wp-block-image img {
		width: auto;
		height: auto;
		max-width: 100%;
		max-height: 100%;
	}
}

/* Pasmo 782–1200 px: kolumna tekstu ma tam poniżej 92 px na pozycję i przy
   stałym stopniu etykiety łamały się na 2–3 linie, podbijając pasek z 82 do
   137 px. Ta sama zasada co na telefonie — stopień schodzi razem z szerokością
   okna, zamiast łamać wiersz. Powyżej 1200 px wraca skala z palety. */
@media (min-width: 782px) and (max-width: 1200px) {
	.fbc-hero .fbc-stat {
		font-size: clamp(0.5rem, 1.02vw, 0.833rem);
		line-height: 1.35;
	}
	.fbc-hero .fbc-stat strong {
		font-size: clamp(1rem, 1.85vw, 1.5rem);
		letter-spacing: -0.03em;
	}
}

@media (max-width: 781px) {
	/* Na telefonie tekst i render nie mieszczą się w jednym ekranie —
	   wymuszanie pełnej wysokości ścisnęłoby oba. */
	.fbc-hero {
		min-height: auto;
	}

	/* Kolejność na telefonie: tekst → render → liczby.
	   Liczby siedzą w kolumnie z tekstem, więc samo `order` ich stamtąd
	   nie wyjmie — `display: contents` rozpuszcza kolumnę i jej dzieci
	   stają się elementami tego samego flexa co kolumna z renderem.
	   Odstęp pionowy zdejmujemy z kontenera (gap dotyczyłby wtedy także
	   nagłówka i akapitu) i oddajemy marginesom tych dwóch elementów. */
	.fbc-hero > .wp-block-columns {
		display: flex;
		flex-direction: column;
		gap: 0;
	}
	.fbc-hero > .wp-block-columns > .wp-block-column:first-child {
		display: contents;
	}
	.fbc-hero > .wp-block-columns > .wp-block-column:last-child {
		order: 1;
		margin-block-start: var(--wp--preset--spacing--70);
	}

	/* Cztery pozycje w jednym wierszu także na telefonie. Przy 390 px na
	   pozycję zostaje ~76 px, więc stopień musi zejść razem z szerokością
	   okna — stąd `vw` w clampie zamiast stałej wartości z palety.
	   Najdłuższe etykiety mają 13 znaków („at pedal face", „in the making"),
	   a mono ma szerokość znaku ok. 0,6em: 13 × 0,6 × 9,6 px ≈ 75 px.
	   Selektor taki sam jak w regule desktopowej, żeby wygrać kolejnością. */
	.fbc-hero .wp-block-column:first-child > .fbc-stats {
		order: 2;
		grid-template-columns: repeat(4, minmax(0, 1fr));
		gap: var(--wp--preset--spacing--20);
		margin-block-start: var(--wp--preset--spacing--70);
	}
	.fbc-hero .fbc-stat {
		font-size: clamp(0.55rem, 2.45vw, 0.833rem);
		line-height: 1.35;
	}
	.fbc-hero .fbc-stat strong {
		font-size: clamp(0.95rem, 4.3vw, 1.5rem);
		letter-spacing: -0.03em;
	}
}

/* Krótkie okna (laptopy 13") — pełna wysokość ma sens tylko przy zapasie. */
@media (min-width: 782px) and (max-height: 620px) {
	.fbc-hero { min-height: auto; }
}

/* --------------------------------------------------------------------------
   18. Hovery przycisków — kolor wchodzi od lewej

   Wypełnienie jedzie z lewej do prawej, w tym samym kierunku co czytanie.
   Skala zamiast animowania szerokości: transform nie wywołuje przeliczania
   układu, więc animacja idzie po GPU i nie klatkuje.
   -------------------------------------------------------------------------- */

/* JEDEN komponent przycisku dla całej witryny (klient 2026-09-05: „zrób
   jeden komponent z przyciskami na wszystkie podstrony"). Rozmiar jest tu
   ustawiony WPROST i niczego nie dziedziczy: inline-flex + stała wysokość
   51 px + poziome wypełnienie 28 px, własna interlinia. Wcześniej wysokość
   zależała od interlinii kontekstu (47 / 48 / 51 / 57 px na różnych
   podstronach) i od trzech osobnych nadpisań (Woo, newsletter, karty).
   Kolory i warianty (fiolet / biały / ghost) są niżej i w woocommerce.css;
   tu tylko geometria i krój. Lista selektorów = wszystkie przyciski
   WordPressa i WooCommerce (bloki, klasyczne `.button`, formularze). */
.wp-block-button__link,
.woocommerce .button,
.woocommerce-button,
.single_add_to_cart_button,
.wc-block-components-button:not(.wc-block-components-drawer__close),
.woocommerce input[type="submit"],
.woocommerce button[type="submit"] {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5em;
	box-sizing: border-box;
	min-height: 51px;
	padding: 0 28px;
	margin: 0;
	border: 1px solid transparent;
	font-family: var(--wp--preset--font-family--sans);
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	line-height: 1.2;
	letter-spacing: 0.02em;
	text-align: center;
	text-decoration: none;
	white-space: nowrap;
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
}
@media (max-width: 599.98px) {
	.wp-block-button__link,
	.woocommerce .button,
	.woocommerce-button,
	.single_add_to_cart_button,
	.wc-block-components-button:not(.wc-block-components-drawer__close),
	.woocommerce input[type="submit"],
	.woocommerce button[type="submit"] { min-height: 46px; padding-inline: 22px; }
}

/* Te same reguły dostają przyciski WooCommerce (Add to cart na produkcie,
   koszyk, kasa, mini-koszyk) — klient 2026-09-05: „ujednolić wszystkie
   przyciski w sklepie i na produktach z tym, co mamy na głównej". Selektory
   Woo są dopisane do każdej reguły komponentu, więc definicja zostaje jedna. */
.wp-block-button__link,
.woocommerce .button,
.single_add_to_cart_button,
.wc-block-components-button:not(.wc-block-components-drawer__close) {
	position: relative;
	isolation: isolate;         /* trzyma ::before pod tekstem, nie pod tłem sekcji */
	overflow: hidden;
	transition: color .25s ease, border-color .25s ease;
}

.wp-block-button__link::before,
.woocommerce .button::before,
.single_add_to_cart_button::before,
.wc-block-components-button:not(.wc-block-components-drawer__close)::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: var(--wp--preset--color--purr-hover);
	transform: scaleX(0);
	transform-origin: left center;
	transition: transform .4s cubic-bezier(.22, .7, .26, 1);
}

.wp-block-button__link:hover::before,
.wp-block-button__link:focus-visible::before,
.woocommerce .button:hover::before,
.woocommerce .button:focus-visible::before,
.single_add_to_cart_button:hover::before,
.single_add_to_cart_button:focus-visible::before,
.wc-block-components-button:not(.wc-block-components-drawer__close):hover::before,
.wc-block-components-button:not(.wc-block-components-drawer__close):focus-visible::before {
	transform: scaleX(1);
}

/* Przycisk główny ma już fiolet w tle — wjeżdża jaśniejszy odcień.
   Nadpisujemy hover z theme.json, żeby kolor nie przeskakiwał skokowo
   przed dojechaniem wypełnienia. */
.wp-block-button:not(.is-style-outline) > .wp-block-button__link:hover,
.wp-block-button:not(.is-style-outline) > .wp-block-button__link:focus,
.woocommerce .button:hover,
.woocommerce .button:focus,
.single_add_to_cart_button:hover,
.single_add_to_cart_button:focus,
.wc-block-components-button:not(.wc-block-components-drawer__close):hover,
.wc-block-components-button:not(.wc-block-components-drawer__close):focus {
	background-color: var(--wp--preset--color--purr);
}

/* Przycisk obrysowany („ghost") ma JEDNĄ definicję, a nie osobną na każde tło.
   Komponent czyta trzy zmienne, a sekcja je ustawia — dzięki temu nie mnożą się
   warianty i nowa sekcja nie wymaga dopisywania reguł.

     --fbc-ghost-linia   obrys i tekst w spoczynku (85% krycia, żeby ghost nie
                         konkurował z przyciskiem głównym)
     --fbc-ghost-plomba  wypełnienie wjeżdżające przy najeździe
     --fbc-ghost-tekst   tekst po najeździe, na tle plomby

   Wartości domyślne są dla jasnego tła. Fiolet NIE nadaje się na plombę
   w sekcji ciemnej — ma tam kontrast 1,59 i znika; dlatego na czerni plombą
   jest biel, a tekst schodzi na Coal (16,64, czyta się bez wysiłku). */
/* Wartości obu kontekstów nazwane raz, w jednym miejscu. Reguły niżej tylko
   je przypisują — nie ma gdzie rozjechać liczb. */
:root {
	--fbc-ghost-jasny-linia: color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent);
	--fbc-ghost-jasny-plomba: var(--wp--preset--color--contrast);
	--fbc-ghost-jasny-tekst: var(--wp--preset--color--base);

	--fbc-ghost-ciemny-linia: color-mix(in srgb, var(--wp--preset--color--base) 85%, transparent);
	--fbc-ghost-ciemny-plomba: var(--wp--preset--color--base);
	--fbc-ghost-ciemny-tekst: var(--wp--preset--color--contrast);
}

/* Kontekst domyślny: jasny. */
.wp-block-button.is-style-outline > .wp-block-button__link {
	--fbc-ghost-linia: var(--fbc-ghost-jasny-linia);
	--fbc-ghost-plomba: var(--fbc-ghost-jasny-plomba);
	--fbc-ghost-tekst: var(--fbc-ghost-jasny-tekst);
}

.is-style-sekcja-ciemna .wp-block-button.is-style-outline > .wp-block-button__link {
	--fbc-ghost-linia: var(--fbc-ghost-ciemny-linia);
	--fbc-ghost-plomba: var(--fbc-ghost-ciemny-plomba);
	--fbc-ghost-tekst: var(--fbc-ghost-ciemny-tekst);
}

/* Jasna wyspa wewnątrz ciemnej strony — np. karta na podglądzie systemu.
   Musi stać PO regule ciemnej, żeby wygrać kolejnością przy tej samej
   specyficzności. */
.is-style-sekcja-jasna .wp-block-button.is-style-outline > .wp-block-button__link {
	--fbc-ghost-linia: var(--fbc-ghost-jasny-linia);
	--fbc-ghost-plomba: var(--fbc-ghost-jasny-plomba);
	--fbc-ghost-tekst: var(--fbc-ghost-jasny-tekst);
}

.wp-block-button.is-style-outline > .wp-block-button__link::before {
	background: var(--fbc-ghost-plomba);
}

.wp-block-button.is-style-outline > .wp-block-button__link:hover,
.wp-block-button.is-style-outline > .wp-block-button__link:focus-visible {
	color: var(--fbc-ghost-tekst);
	border-color: var(--fbc-ghost-plomba);
	background: transparent;
}

/* Przycisk BIAŁY na ciemnym (baner akcesoriów, Subscribe w newsletterze):
   plomba w fiolecie marki, po najeździe ramka też fioletowa, tekst biały
   (klient 2026-09-05). Jedna lista selektorów — nowy biały przycisk dopisuje
   się tutaj. */
.fbc-baner .wp-block-button__link,
.fbc-newsletter__pole .wp-block-button__link {
	border: 1px solid var(--wp--preset--color--base);
	/* Po zjeździe kursora tekst i ramka wracają do bieli/czerni z opóźnieniem
	   równym czasowi zjazdu plomby (0,4 s) — inaczej biała ramka i ciemny
	   tekst pokazywały się na jeszcze fioletowym tle (klient: „broken"). */
	transition: color .2s ease .4s, border-color .2s ease .4s;
}
.fbc-baner .wp-block-button__link:hover,
.fbc-baner .wp-block-button__link:focus-visible,
.fbc-newsletter__pole .wp-block-button__link:hover,
.fbc-newsletter__pole .wp-block-button__link:focus-visible {
	transition-delay: 0s, 0s;
}
.fbc-baner .wp-block-button__link::before,
.fbc-newsletter__pole .wp-block-button__link::before {
	background: var(--wp--preset--color--purr);
}
.fbc-baner .wp-block-button:not(.is-style-outline) > .wp-block-button__link:hover,
.fbc-baner .wp-block-button__link:hover,
.fbc-baner .wp-block-button__link:focus-visible,
.fbc-newsletter__pole .wp-block-button__link:hover,
.fbc-newsletter__pole .wp-block-button__link:focus-visible {
	color: var(--wp--preset--color--base);
	border-color: var(--wp--preset--color--purr);
	background: var(--wp--preset--color--base);   /* biel pod plombą do końca przejazdu */
}
@media (prefers-reduced-motion: reduce) {
	.wp-block-button__link::before { transition: none; }
}

/* --------------------------------------------------------------------------
   19. Wejście hero

   Stan początkowy nakłada JavaScript (klasa `fbc-slowa`), a nie HTML.
   Gdyby skrypt nie wystartował, nagłówek po prostu stoi widoczny —
   nigdy nie zostaje ukryty przez CSS, którego nikt nie odwoła.
   -------------------------------------------------------------------------- */

.fbc-slowa .fbc-slowo {
	display: inline-block;
	opacity: 0;
	transform: translateY(0.4em);
	transition:
		opacity   .55s ease,
		transform .55s cubic-bezier(.22, .7, .26, 1);
}

.fbc-slowa--widoczne .fbc-slowo {
	opacity: 1;
	transform: none;
}

/* Liczby zmieniają się co klatkę; ustalona szerokość cyfr trzyma je
   w miejscu, zamiast szarpać etykietą pod spodem. */
.fbc-stat strong {
	font-variant-numeric: tabular-nums;
}

@media (prefers-reduced-motion: reduce) {
	.fbc-hero::before { animation: none; }

	.fbc-slowa .fbc-slowo {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* --------------------------------------------------------------------------
   22. Pozycje menu pełnoekranowego

   Lista, nie stos linków: separatory dzielą pozycje i domykają kolumnę
   do tej samej krawędzi co logo.
   -------------------------------------------------------------------------- */

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
	gap: 0;
	width: 100%;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
	width: 100%;
	border-block-end: 1px solid var(--wp--preset--color--line-dark);
}

/* Ostatnia pozycja też ma kreskę (klient 2026-09-26: „nie zbiegają się
   separatory”) — stopka menu nie rysuje już własnej linii, więc wszystkie
   separatory są jednego rodzaju i w tym samym rytmie. */

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item a {
	display: flex;
	width: 100%;   /* bez tego link kurczy się do tekstu i strzałka nie dochodzi do krawędzi */
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--40);
	padding-block: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--x-large);
	min-height: 44px;   /* minimalne pole dotyku wg WCAG */
	text-align: start;
	text-decoration: none;
}

/* Strzałka rysowana z pseudoelementu, nie ze znaku — nie zależy
   od tego, czy krój ma dany glif. */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item a::after {
	content: "";
	flex: 0 0 auto;
	width: 7px;
	height: 7px;
	border-inline-end: 1.5px solid currentColor;
	border-block-start: 1.5px solid currentColor;
	transform: rotate(45deg);
	opacity: 0.35;
	transition: opacity .2s ease, transform .2s ease;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item a:hover {
	color: var(--wp--preset--color--purr-light);
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item a:hover::after {
	opacity: 1;
	transform: rotate(45deg) translate(2px, -2px);
}

/* --------------------------------------------------------------------------
   23. Stopka menu pełnoekranowego

   Kontakt i sociale na dole nakładki. Element leży w nagłówku, więc poza
   otwartym menu musi być schowany — i to schowany tak, żeby nie zajmował
   miejsca w linii logo.
   -------------------------------------------------------------------------- */

/* Selektor z rodzicem, bo `.fbc-header > .wp-block-group { display: flex }`
   z sekcji nagłówka ma wyższą specyficzność — bez tego stopka wchodziła
   do nagłówka jako zwykła kolumna i rozpychała logo. */
.fbc-header > .fbc-menu-stopka {
	display: none;
}

/* Stopka menu (kontakt i sociale) towarzyszy menu pełnoekranowemu w całym jego
   zakresie — od 2026-09-11 sięga ono 1199 px, nie 599. */
@media (max-width: 1199.98px) {
	/* Stopka przyklejona do dołu ekranu, ale z pełnym tłem nakładki: na niskim ekranie (iPhone z paskami
	   Safari, a zalogowany — jeszcze z paskiem administratora) pozycje menu przewijają się POD nią, a nie
	   przez nią (klient 2026-10-01: Support / Contact / About us nachodziły na „GET IN TOUCH”). Lista
	   dostaje u dołu zapas na wysokość stopki — ostatnią pozycję zawsze da się przewinąć nad nią. */
	html.has-modal-open .fbc-header > .fbc-menu-stopka {
		display: block;
		position: fixed;
		z-index: 100001;   /* nakładka nawigacji siedzi na 100000 */
		inset-inline: 0;
		inset-block-end: 0;
		padding: var(--wp--preset--spacing--50) var(--fbc-gutter) calc(var(--wp--preset--spacing--70) + env(safe-area-inset-bottom, 0px));
		background: var(--wp--preset--color--ground-dark);
		box-shadow: 0 -24px 24px -8px var(--wp--preset--color--ground-dark);
	}
	html.has-modal-open .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		padding-block-end: 240px;
	}

	html.has-modal-open .fbc-header > .fbc-menu-stopka p {
		margin-block: 0;
	}

	/* Grupa ma układ „constrained", więc jej dzieci dostają auto-marginesy do
	   szerokości treści — przy szerokim oknie stopka odjeżdżała od linii menu. */
	html.has-modal-open .fbc-header > .fbc-menu-stopka > * {
		max-width: none !important;
		margin-inline: 0 !important;
	}

	html.has-modal-open .fbc-header > .fbc-menu-stopka .fbc-menu-stopka__mail {
		margin-block-start: var(--wp--preset--spacing--30);
		font-size: var(--wp--preset--font-size--medium);
	}

	html.has-modal-open .fbc-header > .fbc-menu-stopka .fbc-menu-stopka__mail a {
		color: var(--wp--preset--color--base);
		text-decoration: none;
		border-block-end: 1px solid var(--wp--preset--color--purr-light);
		padding-block-end: 2px;
	}

	html.has-modal-open .fbc-header > .fbc-menu-stopka .fbc-menu-stopka__adres {
		margin-block-start: var(--wp--preset--spacing--20);
		font-family: var(--wp--preset--font-family--mono);
		font-size: var(--wp--preset--font-size--small);
		color: var(--wp--preset--color--contrast-3);
	}

	html.has-modal-open .fbc-header > .fbc-menu-stopka .wp-block-social-links {
		margin-block-start: var(--wp--preset--spacing--50);
		gap: var(--wp--preset--spacing--40);
	}
}

/* --------------------------------------------------------------------------
   24. Ścięte narożniki przycisków

   Ścięcie w lewym górnym i prawym dolnym rogu — kierunek zgodny z ruchem
   pedału, a nie symetryczna faza dookoła.

   Haczyk: `clip-path` obcina wszystko, co element maluje, więc przycisk
   obrysowany straciłby linię na skosach i zostałby z otwartymi narożnikami.
   Dlatego linia i wypełnienie idą jako dwie warstwy tła: `border-box` niesie
   kolor linii, `padding-box` wypełnienie. Obszar obramowania to różnica
   między nimi, więc obrys biegnie także po skosie.

   Wypełnienie musi być NIEPRZEZROCZYSTE — półprzezroczyste przepuściłoby
   warstwę linii pod spodem i przycisk zrobiłby się jednolity. Pod przyciskami
   w hero tło ma dokładnie #131315 (zmierzone), więc Ground dark się nie odcina.
   -------------------------------------------------------------------------- */

.wp-block-button__link,
.woocommerce .button,
.single_add_to_cart_button,
.wc-block-components-button:not(.wc-block-components-drawer__close) {
	--fbc-sciecie: 10px;

	/* Kolejność wierzchołków: od ścięcia w lewym górnym rogu, zgodnie
	   z ruchem wskazówek zegara. */
	clip-path: polygon(
		var(--fbc-sciecie) 0,
		100% 0,
		100% calc(100% - var(--fbc-sciecie)),
		calc(100% - var(--fbc-sciecie)) 100%,
		0 100%,
		0 var(--fbc-sciecie)
	);

	/* Zaokrąglenie 2 px zostało w atrybutach wzorca; przy ściętych rogach
	   dawałoby dwa różne języki naraz. Inline, więc trzeba !important. */
	border-radius: 0 !important;
}

/* Przycisk obrysowany („ghost") — bez wypełnienia, tło prześwituje.
   Wcześniejsze podejścia nie działały przy ścięciu:
     • dwie warstwy tła (border-box + padding-box) zostawiają na skosie
       trójkąt koloru linii zamiast linii,
     • nieprzezroczyste wypełnienie w kolorze sekcji było łatką na tle —
       a odkąd poświata dryfuje, taka łatka zaczyna być widoczna.

   Działa jeden `clip-path` z regułą `evenodd`: obrys zewnętrzny i wewnętrzny
   w jednym wielokącie, wnętrze wypada jako dziura. Zostaje pierścień
   o grubości 1 px, ścięty na obu narożnikach, z całkowicie przezroczystym
   środkiem. Wewnętrzne ścięcie jest mniejsze o 0,6 px — to daje na skosie
   1 px prostopadle, czyli tyle samo co na bokach. */
.wp-block-button.is-style-outline > .wp-block-button__link {
	--fbc-sciecie-wnetrze: calc(var(--fbc-sciecie) - 0.6px);
	border: 0;
	background: transparent;
	color: var(--fbc-ghost-linia);
}

.wp-block-button.is-style-outline > .wp-block-button__link::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: var(--fbc-ghost-linia);
	clip-path: polygon(
		evenodd,
		/* obrys zewnętrzny */
		var(--fbc-sciecie) 0,
		100% 0,
		100% calc(100% - var(--fbc-sciecie)),
		calc(100% - var(--fbc-sciecie)) 100%,
		0 100%,
		0 var(--fbc-sciecie),
		/* obrys wewnętrzny — wycina środek */
		calc(1px + var(--fbc-sciecie-wnetrze)) 1px,
		calc(100% - 1px) 1px,
		calc(100% - 1px) calc(100% - 1px - var(--fbc-sciecie-wnetrze)),
		calc(100% - 1px - var(--fbc-sciecie-wnetrze)) calc(100% - 1px),
		1px calc(100% - 1px),
		1px calc(1px + var(--fbc-sciecie-wnetrze))
	);
}

/* Ścięcie natywne, tam gdzie przeglądarka je zna (Chrome 139+).
   `clip-path` wyżej zostaje jako zapas, ale ma wadę nie do obejścia:
   linia 1 px wycięta dwoma krawędziami klipu dostaje antyaliasing z obu
   stron i strzępi się — widać to zwłaszcza na skosach. `corner-shape`
   rysuje prawdziwe obramowanie, więc linia jest ostra, a wnętrze zostaje
   przezroczyste bez sztuczek z pierścieniem. */
@supports (corner-shape: bevel) {
	.wp-block-button__link,
	.woocommerce .button,
	.single_add_to_cart_button,
	.wc-block-components-button:not(.wc-block-components-drawer__close) {
		clip-path: none;
		corner-shape: bevel;
		border-radius: var(--fbc-sciecie) 0 var(--fbc-sciecie) 0 !important;
	}

	.wp-block-button.is-style-outline > .wp-block-button__link {
		border: 1px solid var(--fbc-ghost-linia);
		background: transparent;
	}

	/* Pierścień z zapasu jest teraz zbędny. */
	.wp-block-button.is-style-outline > .wp-block-button__link::after {
		display: none;
	}
}

/* Na telefonie przyciski są niższe, więc ścięcie schodzi razem z nimi. */
@media (max-width: 599.98px) {
	.wp-block-button__link,
	.woocommerce .button,
	.single_add_to_cart_button,
	.wc-block-components-button:not(.wc-block-components-drawer__close) {
		--fbc-sciecie: 8px;
	}
}

/* --------------------------------------------------------------------------
   25. Stopka

   Trzyma tę samą krawędź co nagłówek i sekcje. Wcześniej leciała na
   `content-size` wyśrodkowanym, więc treść siadała 360 px od brzegu przy
   gutterze 115 px — najbardziej widoczny rozjazd na stronie.

   Cztery kolumny: marka, sklep, wsparcie, dokumenty. Pod nimi cienka linia
   i pasek danych rejestrowych. Nagłówki kolumn w mono, jak wszystkie
   etykiety w tym motywie.
   -------------------------------------------------------------------------- */

.fbc-stopka {
	padding-inline: var(--fbc-gutter);
	padding-block: var(--wp--preset--spacing--80) var(--wp--preset--spacing--60);
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
}

/* Plik logo jest ciemny — na ciemnej stopce trzeba go odwrócić na biel,
   tak samo jak w nałożonym nagłówku. Bez tego znak niemal znika. */
.fbc-stopka .wp-block-site-logo img {
	filter: brightness(0) invert(1);
	opacity: 0.9;
}

.fbc-stopka__opis {
	margin-block-start: var(--wp--preset--spacing--40);
	max-width: 34ch;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--contrast-3);
	line-height: 1.55;
}

.fbc-stopka__mail {
	margin-block-start: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--small);
}

.fbc-stopka__mail a {
	color: var(--wp--preset--color--base);
	text-decoration: none;
	border-block-end: 1px solid var(--wp--preset--color--purr-light);
	padding-block-end: 2px;
	transition: border-color .2s ease;
}

.fbc-stopka__mail a:hover,
.fbc-stopka__mail a:focus-visible {
	border-block-end-color: var(--wp--preset--color--base);
}

.fbc-stopka__sociale {
	margin-block-start: var(--wp--preset--spacing--60);
	gap: var(--wp--preset--spacing--40);
}

.fbc-stopka__sociale .wp-block-social-link a {
	opacity: 0.75;
	transition: opacity .2s ease;
}
.fbc-stopka__sociale .wp-block-social-link a:hover {
	opacity: 1;
}

/* Znaki systemów płatności. Ta sama piątka co na produkcji — Visa, Mastercard,
   PayPal, Apple Pay, Google Pay — w białej, jednobarwnej wersji.

   Produkcja wypalała ramkę w samych plikach: w trzech jako `rect stroke="white"`,
   w dwóch w pikselach PNG. Tutaj pliki niosą sam znak, a ramkę rysuje CSS w kolorze
   linii motywu — nie krzyczy bielą i trzyma tę samą krawędź co reszta stopki.
   Pole znaku 47 × 35 px w kafelku 57 × 43 px, dokładnie jak na produkcji. */
.fbc-stopka__platnosci {
	margin-block-start: var(--wp--preset--spacing--60);
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--20);
}

.fbc-stopka__platnosci img {
	display: block;
	box-sizing: border-box;
	width: 57px;
	height: 43px;
	padding: 4px 5px;
	border: 1px solid var(--wp--preset--color--line-dark);
	object-fit: contain;
	opacity: 0.75;
}

/* Nagłówek kolumny. Wersaliki zapisane w treści, nie przez `text-transform` —
   zasada z sekcji o nadliniach. */
.fbc-stopka__naglowek {
	margin-block-end: var(--wp--preset--spacing--40);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.14em;
	color: var(--wp--preset--color--purr-light);
}

.fbc-stopka__lista {
	margin: 0;
	padding: 0;
	list-style: none;
	display: grid;
	gap: var(--wp--preset--spacing--30);
}

.fbc-stopka__lista li {
	margin: 0;
	font-size: var(--wp--preset--font-size--small);
	overflow-wrap: break-word;
}

.fbc-stopka__lista a {
	color: var(--wp--preset--color--contrast-3);
	text-decoration: none;
	transition: color .2s ease;
}

.fbc-stopka__lista a:hover,
.fbc-stopka__lista a:focus-visible {
	color: var(--wp--preset--color--base);
}

/* Pasek danych rejestrowych. */
.fbc-stopka__dol {
	margin-block-start: var(--wp--preset--spacing--80);
	padding-block-start: var(--wp--preset--spacing--50);
	border-block-start: 1px solid var(--wp--preset--color--line-dark);
	gap: var(--wp--preset--spacing--40);
}

.fbc-stopka__dol p {
	margin: 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.02em;
	color: var(--wp--preset--color--contrast-3);
}

/* Na telefonie kolumny stają jedna pod drugą — pasek danych też, żeby
   nie ściskać dwóch długich linii mono w jednym wierszu. */
@media (max-width: 781px) {
	.fbc-stopka {
		padding-block: var(--wp--preset--spacing--70) var(--wp--preset--spacing--60);
	}
	.fbc-stopka__glowna > .wp-block-column:first-child {
		flex-basis: 100% !important;
	}
	.fbc-stopka__dol {
		flex-direction: column;
		align-items: flex-start;
		gap: var(--wp--preset--spacing--20);
	}
}

/* --------------------------------------------------------------------------
   26. Strony treści (templates/page.html)

   Jeden szablon dla wszystkich stron statycznych: about, contact, support,
   downloads, GT, newsletter i cztery strony prawne. Trzy części:
   • nagłówek strony — ciemny, kompaktowy hero z siatką pod tekstem, poświatą
     w prawym górnym rogu i ziarnem (warstwy jak w 8b/8g); nadlinia działu
     i lead wstawia inc/strony.php;
   • treść — kolumna 720 px; przy ≥ 3 H2 skrypt strona.js dokłada po lewej
     przyklejony spis „On this page" (`.fbc-strona--spis`); typografia
     długiego tekstu: H2 z linią u góry, listy, tabele (sekcja 5), cytaty;
   • pasek pomocy (wzorzec strona-pomoc) — „Still stuck? Talk to us.".
   -------------------------------------------------------------------------- */

/* Nagłówek strony. Sekcja 15 nakłada na niego nagłówek witryny i dokłada
   72 px u góry; tu tylko własny rytm — mniejszy niż hero. */
.wp-site-blocks main > .alignfull.fbc-strona-naglowek {
	--fbc-siatka-modul: var(--wp--preset--spacing--80);
	--fbc-siatka-linia: rgba(255, 255, 255, 0.045);
	overflow: hidden;
	padding-block-end: clamp(2.5rem, 5vw, 4rem);
}
body:has(.wp-site-blocks main > .is-style-sekcja-ciemna:first-child) .wp-site-blocks main > .fbc-strona-naglowek:first-child {
	padding-block-start: calc(72px + clamp(2.5rem, 5vw, 4rem));
}
.fbc-strona-naglowek::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		repeating-linear-gradient(to right, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul)),
		repeating-linear-gradient(to bottom, var(--fbc-siatka-linia) 0 1px, transparent 1px var(--fbc-siatka-modul));
	-webkit-mask-image: radial-gradient(44% 70% at 18% 50%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
	mask-image: radial-gradient(44% 70% at 18% 50%, #000 0%, rgba(0, 0, 0, 0.5) 50%, transparent 80%);
}
.fbc-strona-naglowek__tresc { position: relative; z-index: 1; }
.fbc-strona-naglowek__tresc .fbc-eyebrow { margin-block-end: var(--wp--preset--spacing--40); }
.fbc-strona-naglowek__tresc .wp-block-post-title {
	max-width: 18ch;
	margin: 0;
	text-wrap: balance;
	letter-spacing: -0.02em;
	line-height: 1.05;
}
.fbc-strona-naglowek__tresc .fbc-strona__lead {
	max-width: 52ch;
	margin-block-start: var(--wp--preset--spacing--40);
	font-size: var(--wp--preset--font-size--large);
	color: var(--wp--preset--color--contrast-3);
}
.fbc-strona-naglowek__tresc .fbc-strona__lead p { margin: 0; }
@media (max-width: 599.98px) {
	.fbc-strona-naglowek__tresc .wp-block-post-title { font-size: var(--wp--preset--font-size--3-x-large) !important; }
}

/* Układ treści: jedna kolumna 720 px; ze spisem — spis 220 px po lewej,
   tekst obok, całość w szerokości „wide". */
.wp-site-blocks main > .alignfull.fbc-strona-sekcja { padding-block: clamp(3rem, 6vw, 5rem) clamp(4rem, 8vw, 7rem); }
.fbc-strona {
	--fbc-spis-szer: 220px;
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--wp--preset--spacing--80);
}
.fbc-strona__bok:empty { display: none; }
.fbc-strona__tresc {
	width: 100%;
	max-width: var(--wp--style--global--content-size);
	margin-inline: auto;
}
.fbc-strona--spis { grid-template-columns: var(--fbc-spis-szer) minmax(0, 1fr); align-items: start; }
.fbc-strona--spis .fbc-strona__tresc { margin-inline: 0; }
.fbc-spis {
	position: sticky;
	top: var(--wp--preset--spacing--60);
	padding-inline-end: var(--wp--preset--spacing--40);
}
.fbc-spis ol {
	list-style: none;
	margin: 0;
	padding: 0;
	border-inline-start: 1px solid var(--wp--preset--color--line);
}
.fbc-spis li { margin: 0; }
.fbc-spis a {
	display: block;
	padding: var(--wp--preset--spacing--20) 0 var(--wp--preset--spacing--20) var(--wp--preset--spacing--40);
	margin-inline-start: -1px;
	border-inline-start: 1px solid transparent;
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.4;
	color: var(--wp--preset--color--contrast-2);
	text-decoration: none;
	transition: color 200ms ease, border-color 200ms ease;
}
.fbc-spis a:hover { color: var(--wp--preset--color--contrast); }
.fbc-spis a.is-active {
	color: var(--wp--preset--color--contrast);
	font-weight: 700;
	border-inline-start-color: var(--wp--preset--color--purr);
}
@media (max-width: 899.98px) {
	.fbc-strona--spis { grid-template-columns: minmax(0, 1fr); gap: var(--wp--preset--spacing--60); }
	.fbc-strona--spis .fbc-strona__tresc { margin-inline: auto; }
	.fbc-spis { position: static; max-width: var(--wp--style--global--content-size); margin-inline: auto; padding: 0; }
}

/* Typografia długiego tekstu. Selektory z `.fbc-strona__tresc`, żeby nie
   dotykać produktów i sklepu. Nagłówki z bazy mają różne klasy rozmiaru
   (albo żadnej), więc rozmiary są ustawione wprost. */
.fbc-strona__tresc { color: var(--wp--preset--color--contrast); }
.fbc-strona__tresc > *:first-child,
.fbc-strona__tresc .wp-block-post-content > *:first-child { margin-block-start: 0; }
.fbc-strona__tresc h2 {
	margin-block: var(--wp--preset--spacing--80) var(--wp--preset--spacing--40);
	padding-block-start: var(--wp--preset--spacing--50);
	border-block-start: 1px solid var(--wp--preset--color--line);
	font-size: var(--wp--preset--font-size--2-x-large);
	line-height: 1.15;
	letter-spacing: -0.015em;
	max-width: 26ch;
	text-wrap: balance;
	scroll-margin-top: var(--wp--preset--spacing--60);
}
.fbc-strona__tresc .wp-block-post-content > h2:first-child { margin-block-start: 0; padding-block-start: 0; border-block-start: 0; }
.fbc-strona__tresc h3 {
	margin-block: var(--wp--preset--spacing--60) var(--wp--preset--spacing--30);
	font-size: var(--wp--preset--font-size--x-large);
	line-height: 1.2;
	max-width: 30ch;
	text-wrap: balance;
}
.fbc-strona__tresc h4 { margin-block: var(--wp--preset--spacing--50) var(--wp--preset--spacing--20); font-size: var(--wp--preset--font-size--large); }
.fbc-strona__tresc p { margin-block: var(--wp--preset--spacing--30) 0; line-height: 1.6; }
.fbc-strona__tresc ul,
.fbc-strona__tresc ol { margin-block: var(--wp--preset--spacing--30) 0; padding-inline-start: 1.25em; }
.fbc-strona__tresc li { margin-block: var(--wp--preset--spacing--20) 0; line-height: 1.55; }
.fbc-strona__tresc li::marker { color: var(--wp--preset--color--purr); }
.fbc-strona__tresc a:not(.wp-block-button__link):not(.fbc-link-dalej) {
	color: var(--wp--preset--color--purr);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.18em;
}
.fbc-strona__tresc a:not(.wp-block-button__link):not(.fbc-link-dalej):hover { color: var(--wp--preset--color--purr-hover); }
.fbc-strona__tresc blockquote {
	margin: var(--wp--preset--spacing--50) 0;
	padding-inline-start: var(--wp--preset--spacing--50);
	border-inline-start: 2px solid var(--wp--preset--color--purr);
	color: var(--wp--preset--color--contrast-2);
}
.fbc-strona__tresc hr { margin-block: var(--wp--preset--spacing--70); border: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-strona__tresc figure { margin: var(--wp--preset--spacing--60) 0; }
.fbc-strona__tresc img { height: auto; }
.fbc-strona__tresc strong { font-weight: 700; }
.fbc-strona__tresc code {
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.9em;
	background: var(--wp--preset--color--base-2);
	padding: 1px 6px;
	border-radius: 2px;
}
/* Adresy i dane firmy (kontakt, prawne) często idą jako <address> lub
   akapity z <br> — mono zostawiamy tylko numerom, reszta zwykła. */
.fbc-strona__tresc address { font-style: normal; }

/* Pasek pomocy na końcu strony. Jasny, oddzielony linią; tekst po lewej,
   trzy wyjścia po prawej. */
.wp-site-blocks main > .alignfull.fbc-pomoc {
	padding-block: var(--wp--preset--spacing--80);
	background: var(--wp--preset--color--base-2);
	border-block-start: 1px solid var(--wp--preset--color--line);
}
.fbc-pomoc__pasek {
	display: grid;
	grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr);
	gap: clamp(2rem, 5vw, 4rem);
	align-items: center;
}
.fbc-pomoc__tekst h2 { margin: 0; }
.fbc-pomoc__tekst > p:not(.fbc-etykieta) { margin-block-start: var(--wp--preset--spacing--30); max-width: 44ch; color: var(--wp--preset--color--contrast-2); }
.fbc-pomoc__wyjscia {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--50);
	justify-content: flex-end;
}
.fbc-pomoc__wyjscia li { margin: 0; }
@media (max-width: 899.98px) {
	.fbc-pomoc__pasek { grid-template-columns: 1fr; }
	.fbc-pomoc__wyjscia { justify-content: flex-start; }
}

/* --------------------------------------------------------------------------
   27. Strony statyczne (szablony page-{slug}.html, wzorce strona-*)

   Jeden język dla about, contact, support, downloads, GT, newsletter
   i stron prawnych: ciemny nagłówek strony (26), dalej sekcje na przemian
   jasne / ciemne z klockami, które już są na głównej — nadlinia mono,
   numer `.fbc-nr`, karta `.fbc-sciety`, link `.fbc-link-dalej`, przyciski,
   poświata i ziarno. Nowe klocki tej sekcji:
   • `.fbc-odznaki`     — trzy krótkie fakty w mono z fioletową kreską;
   • `.fbc-kafle`       — siatka kart-linków (kanały, drogi pomocy);
   • `.fbc-para`        — sekcja obraz + tekst 50/50 (jak opis produktu);
   • `.fbc-formularz`   — formularz kontaktu / RMA w karcie ze ściętym rogiem;
   • `.fbc-liczby4`     — cztery liczby na ciemnym;
   • `.fbc-droga`       — pionowa oś czasu (about);
   • `.fbc-pliki`       — karta aplikacji + lista plików (downloads);
   • `.fbc-pelny`       — sekcja na całe okno (GT, newsletter);
   • `.fbc-legal-nav`   — pasek dokumentów prawnych.
   -------------------------------------------------------------------------- */

/* Nagłówek strony z własnym H1 we wzorcu (bez bloku post-title). */
.fbc-strona-naglowek__tresc > h1 { max-width: 18ch; margin: 0; text-wrap: balance; letter-spacing: -0.02em; line-height: 1.05; }
.fbc-strona-naglowek__tresc > .fbc-eyebrow { margin-block-end: var(--wp--preset--spacing--40); }

/* Odznaki. */
.fbc-odznaki {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60);
	margin: var(--wp--preset--spacing--60) 0 0;
	padding: 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-odznaki li { position: relative; margin: 0; padding-inline-start: 18px; }
.fbc-odznaki li::before { content: ""; position: absolute; left: 0; top: 0.55em; width: 10px; height: 1px; background: var(--wp--preset--color--purr-light); }
/* Ikony zamiast kresek (2026-09-27: „tu brakuje ładnych ikon”) — klasa na pozycji
   (`fbc-odznaka--inzynier` itd.), maska w kolorze akcentu, obrys jak w wyróżnikach
   karty zakupowej. Pozycje bez klasy (dynamiczne, np. w artykułach bazy wiedzy)
   zostają z kreską. */
.fbc-odznaki li[class*="fbc-odznaka--"] { padding-inline-start: 22px; }
.fbc-odznaki li[class*="fbc-odznaka--"]::before {
	top: 50%;
	width: 15px;
	height: 15px;
	transform: translateY(-50%);
	-webkit-mask: var(--fbc-ikona) center / contain no-repeat;
	mask: var(--fbc-ikona) center / contain no-repeat;
}
.fbc-odznaka--inzynier { --fbc-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a4 4 0 0 0-5.3 5.3L3.6 17.4a1.4 1.4 0 0 0 0 2l1 1a1.4 1.4 0 0 0 2 0l5.8-5.8a4 4 0 0 0 5.3-5.3l-2.5 2.5-2.1-.5-.5-2.1 2.5-2.5Z'/%3E%3C/svg%3E"); }
.fbc-odznaka--gwarancja { --fbc-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3 4.5 5.8v5.4c0 4.6 3.1 8.6 7.5 9.8 4.4-1.2 7.5-5.2 7.5-9.8V5.8L12 3Z'/%3E%3Cpath d='m9 12.2 2.1 2.1L15.2 10'/%3E%3C/svg%3E"); }
.fbc-odznaka--wysylka { --fbc-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6.5h11v9.5H3z'/%3E%3Cpath d='M14 9.5h3.8l3.2 3.3V16h-7'/%3E%3Ccircle cx='7' cy='17.5' r='1.8'/%3E%3Ccircle cx='17.5' cy='17.5' r='1.8'/%3E%3C/svg%3E"); }
.fbc-odznaka--zwroty { --fbc-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 9a8 8 0 1 1 .9 6'/%3E%3Cpath d='M3.4 4.6 4 9.2l4.6-.6'/%3E%3C/svg%3E"); }
.fbc-odznaki--jasne { margin: 0; }
.fbc-odznaki--jasne li::before { background: var(--wp--preset--color--purr); }

/* Karty-linki. */
.fbc-kanaly .fbc-eyebrow { margin-block-end: var(--wp--preset--spacing--50); }
.fbc-kafle { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--wp--preset--spacing--30); }
.fbc-kafle--cztery { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1023.98px) { .fbc-kafle--cztery, .fbc-wsparcie-karty { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Karty wsparcia na telefonie w jednej kolumnie. Reguła jednokolumnowa stoi wyżej
   (blok `max-width: 899.98px`), ale przegrywała kolejnością z dwiema kolumnami
   powyżej — w efekcie na 390 px karty miały po ~170 px, a nagłówek
   „FATBLACKCAT Discord server" wychodził poza kartę (audyt 2026-09-22). */
@media (max-width: 899.98px) { .fbc-wsparcie-karty { grid-template-columns: 1fr; } }
.fbc-kafel {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--30);
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50);
	border: 1px solid var(--wp--preset--color--line);
	background: var(--wp--preset--color--base);
	color: inherit;
	text-decoration: none;
	transition: border-color .25s ease, transform .25s ease;
}
.fbc-kafel:hover { border-color: var(--wp--preset--color--purr); transform: translateY(-3px); }
.fbc-kafel:focus-visible { outline: 2px solid var(--wp--preset--color--purr); outline-offset: 2px; }
.fbc-kafel .fbc-etykieta { margin: 0; }
.fbc-kafel h2 { margin: 0; text-wrap: balance; overflow-wrap: anywhere; }
.fbc-kafel > p:not(.fbc-etykieta) { margin: 0; color: var(--wp--preset--color--contrast-2); line-height: 1.55; }
.fbc-kafel .fbc-link-dalej { margin-block-start: auto; padding-block-start: var(--wp--preset--spacing--30); }
.fbc-kafel:hover .fbc-link-dalej span { transform: translateX(4px); }
@media (prefers-reduced-motion: reduce) { .fbc-kafel, .fbc-kafel:hover { transform: none; } }

/* Obraz + tekst 50/50. */
.fbc-para { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--fbc-dwie-kolumny-gap); align-items: center; }
.fbc-para--odwrot .fbc-para__kadr { order: 2; }
.fbc-para__kadr { margin: 0; }
.fbc-para__kadr img { display: block; width: 100%; height: auto; }
.fbc-para__tekst h2 { margin: 0; max-width: 16ch; text-wrap: balance; }
.fbc-para__lead { margin-block-start: var(--wp--preset--spacing--40); font-size: var(--wp--preset--font-size--large); color: var(--wp--preset--color--contrast-2); max-width: 44ch; }
.fbc-para__tekst .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--50); }

/* Lista z kreskami (fakty w jednej linii). */
.fbc-lista-kresek { list-style: none; margin: var(--wp--preset--spacing--50) 0 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-lista-kresek li { margin: 0; padding: var(--wp--preset--spacing--30) 0 var(--wp--preset--spacing--30) 22px; position: relative; border-block-end: 1px solid var(--wp--preset--color--line); color: var(--wp--preset--color--contrast); }
.fbc-lista-kresek li::before { content: ""; position: absolute; left: 0; top: calc(var(--wp--preset--spacing--30) + 0.7em); width: 10px; height: 1px; background: var(--wp--preset--color--purr); }
.is-style-sekcja-ciemna .fbc-lista-kresek { border-color: var(--wp--preset--color--line-dark); }
.is-style-sekcja-ciemna .fbc-lista-kresek li { border-color: var(--wp--preset--color--line-dark); color: var(--wp--preset--color--base); }
.is-style-sekcja-ciemna .fbc-lista-kresek li::before { background: var(--wp--preset--color--purr-light); }

/* Formularz. */
.fbc-formularz__uklad { display: grid; grid-template-columns: var(--fbc-dwie-kolumny); gap: var(--fbc-dwie-kolumny-gap); align-items: start; }
/* Karta e-mail na stronie kontaktu prowadzi tu (#formularz) — płynnie i z zapasem
   na przyklejony nagłówek, żeby nie zasłonił nagłówka formularza (2026-09-27). */
html:has(#formularz) { scroll-behavior: smooth; }
#formularz { scroll-margin-top: calc(var(--fbc-naglowek-teraz, 72px) + var(--wp--preset--spacing--50)); }
.fbc-formularz__tekst h2 { margin: 0; max-width: 18ch; text-wrap: balance; }
.fbc-formularz__tekst > p { margin-block-start: var(--wp--preset--spacing--40); color: var(--wp--preset--color--contrast-2); max-width: 44ch; line-height: 1.6; }
.fbc-formularz__tekst a { color: var(--wp--preset--color--purr); text-decoration-thickness: 1px; text-underline-offset: 3px; }
.fbc-formularz__firma { margin-block-start: var(--wp--preset--spacing--70); padding-block-start: var(--wp--preset--spacing--50); border-block-start: 1px solid var(--wp--preset--color--line); font-style: normal; }
.fbc-formularz__firma p { margin: 0; line-height: 1.6; }
.fbc-formularz__rejestr { margin-block-start: var(--wp--preset--spacing--30) !important; font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.06em; color: var(--wp--preset--color--contrast-3); }
.fbc-kroki { margin: var(--wp--preset--spacing--50) 0 0; padding: 0; list-style: none; counter-reset: krok; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-kroki li { position: relative; margin: 0; padding: var(--wp--preset--spacing--30) 0 var(--wp--preset--spacing--30) 2.4rem; border-block-end: 1px solid var(--wp--preset--color--line); color: var(--wp--preset--color--contrast); line-height: 1.5; }
.fbc-kroki li::before { counter-increment: krok; content: counter(krok, decimal-leading-zero); position: absolute; left: 0; top: calc(var(--wp--preset--spacing--30) + 0.15em); font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--purr); }
.fbc-formularz {
	--fbc-sciecie: 22px;
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--60) var(--wp--preset--spacing--60);
	background: var(--wp--preset--color--base-2);
	border: 1px solid var(--wp--preset--color--line);
}
.fbc-formularz__form { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--wp--preset--spacing--40) var(--wp--preset--spacing--30); }
.fbc-formularz__pole { display: flex; flex-direction: column; gap: var(--wp--preset--spacing--20); min-width: 0; }
.fbc-formularz__pole--pelne, .fbc-formularz__stopka { grid-column: 1 / -1; }
.fbc-formularz__pole label { font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-formularz__pole input,
.fbc-formularz__pole select,
.fbc-formularz__pole textarea {
	width: 100%;
	box-sizing: border-box;
	min-height: 48px;
	padding: 10px 14px;
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 2px;
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
	font: inherit;
	line-height: 1.4;
	transition: border-color .2s ease;
}
.fbc-formularz__pole textarea { min-height: 9rem; resize: vertical; }
.fbc-formularz__pole select { appearance: none; padding-inline-end: 40px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%231e1e20' stroke-width='1.5' d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; }
.fbc-formularz__pole input::placeholder, .fbc-formularz__pole textarea::placeholder { color: var(--wp--preset--color--contrast-3); }
.fbc-formularz__pole input:focus, .fbc-formularz__pole select:focus, .fbc-formularz__pole textarea:focus { outline: 0; border-color: var(--wp--preset--color--purr); box-shadow: 0 0 0 3px color-mix(in srgb, var(--wp--preset--color--purr) 15%, transparent); }
.fbc-formularz__pulapka { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.fbc-formularz__stopka { display: flex; flex-wrap: wrap; align-items: center; gap: var(--wp--preset--spacing--40); margin-block-start: var(--wp--preset--spacing--20); }
.fbc-formularz__nota { margin: 0; font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-3); }
.fbc-formularz__nota a { color: inherit; }
.fbc-formularz__form.is-wysyla { opacity: 0.6; }
.fbc-formularz__komunikat { margin: var(--wp--preset--spacing--40) 0 0; padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); border-inline-start: 2px solid var(--wp--preset--color--purr); font-size: var(--wp--preset--font-size--small); line-height: 1.5; }
.fbc-formularz__komunikat.is-blad { border-color: #c0392b; }
.fbc-formularz__komunikat[hidden] { display: none; }

/* Cztery liczby na ciemnym. */
.fbc-liczby4 .fbc-eyebrow { margin-block-end: var(--wp--preset--spacing--50); }
.fbc-liczby4__lista { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--wp--preset--spacing--50); margin: 0; border-block-start: 1px solid var(--wp--preset--color--line-dark); }
.fbc-liczby4__el { padding-block-start: var(--wp--preset--spacing--40); }
.fbc-liczby4__el dt { margin: 0; font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-liczby4__el dd { margin: var(--wp--preset--spacing--30) 0 0; }
.fbc-liczby4__liczba { display: block; font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--3-x-large); font-weight: 500; line-height: 1; color: var(--wp--preset--color--base); }
.fbc-liczby4__liczba small { font-size: 0.45em; color: var(--wp--preset--color--purr-light); }
.fbc-liczby4__opis { display: block; margin-block-start: var(--wp--preset--spacing--30); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-3); line-height: 1.5; max-width: 26ch; }

/* About: założyciel. */
.wp-site-blocks main > .alignfull.fbc-fundator { padding-block: 0; margin-block-start: 0; border-block-start: 1px solid var(--wp--preset--color--line-dark); }
.fbc-fundator__uklad { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); gap: var(--fbc-dwie-kolumny-gap); align-items: end; }
.fbc-fundator__portret { margin: 0; align-self: end; }
.fbc-fundator__portret img { display: block; width: 100%; max-width: 26rem; height: auto; }
.fbc-fundator__tekst { padding-block: clamp(3rem, 7vw, 6rem); }
.fbc-fundator__tekst h2 { margin: 0; max-width: 24ch; text-wrap: balance; }
.fbc-fundator__tekst > p:not(.fbc-etykieta) { margin-block-start: var(--wp--preset--spacing--40); color: var(--wp--preset--color--contrast-3); max-width: 52ch; line-height: 1.6; }
.fbc-fundator__tekst strong { color: var(--wp--preset--color--base); }
.fbc-fundator__podpis { display: flex; flex-direction: column; gap: 2px; margin-block-start: var(--wp--preset--spacing--50) !important; }
.fbc-fundator__podpis span { font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.08em; color: var(--wp--preset--color--contrast-3); }

/* About: oś czasu. */
.fbc-droga__uklad { display: grid; grid-template-columns: var(--fbc-dwie-kolumny); gap: var(--fbc-dwie-kolumny-gap); align-items: start; }
/* Bez rezerwy na nagłówek — patrz `.fbc-faq__naglowek`. */
.fbc-droga__naglowek { position: sticky; top: var(--wp--preset--spacing--50); }
.fbc-droga__naglowek h2 { margin: 0; max-width: 12ch; text-wrap: balance; }
.fbc-droga__lead { margin-block-start: var(--wp--preset--spacing--40); color: var(--wp--preset--color--contrast-2); max-width: 36ch; line-height: 1.6; }
.fbc-droga__lista { list-style: none; margin: 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-droga__faza {
	display: grid;
	grid-template-columns: 3rem minmax(0, 1fr) minmax(0, 15rem);
	gap: var(--wp--preset--spacing--40);
	align-items: start;
	margin: 0;
	padding: var(--wp--preset--spacing--50) 0;
	border-block-end: 1px solid var(--wp--preset--color--line);
}
.fbc-droga__nr { font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--purr); padding-block-start: 0.35em; }
.fbc-droga__tresc h3 { margin: 0; }
.fbc-droga__tresc p { margin: var(--wp--preset--spacing--30) 0 0; color: var(--wp--preset--color--contrast-2); line-height: 1.6; max-width: 40ch; }
.fbc-droga__kadr { --fbc-sciecie: 12px; margin: 0; aspect-ratio: 3 / 2; background: var(--wp--preset--color--base-2); }
.fbc-droga__kadr img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* About: cytat. */
.fbc-cytat__uklad { margin: 0; max-width: 60rem; }
.fbc-cytat__tekst { margin: 0; padding: 0; border: 0; }
.fbc-cytat__tekst p { margin: 0; font-size: var(--wp--preset--font-size--2-x-large); font-weight: 700; line-height: 1.2; letter-spacing: -0.015em; text-wrap: balance; color: var(--wp--preset--color--base); }
.fbc-cytat__tekst p::before { content: "“"; color: var(--wp--preset--color--purr-light); }
.fbc-cytat__tekst p::after { content: "”"; color: var(--wp--preset--color--purr-light); }
.fbc-cytat__autor { display: flex; flex-direction: column; gap: 2px; margin-block-start: var(--wp--preset--spacing--50); padding-inline-start: var(--wp--preset--spacing--50); border-inline-start: 2px solid var(--wp--preset--color--purr); }
.fbc-cytat__autor strong { color: var(--wp--preset--color--base); }
.fbc-cytat__autor span { font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.08em; color: var(--wp--preset--color--contrast-3); }

/* Downloads. */
.fbc-pliki__glowny {
	--fbc-sciecie: 22px;
	position: relative;
	display: grid;
	grid-template-columns: var(--fbc-dwie-kolumny);
	gap: var(--fbc-dwie-kolumny-gap);
	align-items: center;
	padding: clamp(2rem, 5vw, 4rem);
	background: var(--wp--preset--color--ground-dark, #131315);
	color: var(--wp--preset--color--base);
	overflow: clip;
}
.fbc-pliki__glowny-tekst { position: relative; z-index: 1; }
.fbc-pliki__glowny-tekst h2 { margin: 0; }
.fbc-pliki__glowny-tekst > p:not(.fbc-eyebrow) { margin-block-start: var(--wp--preset--spacing--40); color: var(--wp--preset--color--contrast-3); max-width: 46ch; line-height: 1.6; }
.fbc-pliki__glowny-tekst .wp-block-buttons { margin-block-start: var(--wp--preset--spacing--50); display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--30); }
.fbc-pliki__meta, .fbc-plik__meta { font-family: var(--wp--preset--font-family--mono) !important; font-size: 0.72rem !important; letter-spacing: 0.06em; color: var(--wp--preset--color--contrast-3) !important; }
.fbc-pliki__glowny-kadr { position: relative; z-index: 1; margin: 0; --fbc-sciecie: 12px; }
.fbc-pliki__glowny-kadr img { display: block; width: 100%; height: auto; border: 1px solid var(--wp--preset--color--line-dark); }
.fbc-pliki__lista { list-style: none; margin: var(--wp--preset--spacing--70) 0 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-plik { display: grid; grid-template-columns: 3rem minmax(0, 1fr) auto; gap: var(--wp--preset--spacing--40); align-items: center; margin: 0; padding: var(--wp--preset--spacing--50) 0; border-block-end: 1px solid var(--wp--preset--color--line); }
.fbc-plik__nr { font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--purr); }
.fbc-plik__tresc .fbc-etykieta { margin-block-end: var(--wp--preset--spacing--20); }
.fbc-plik__tresc h3 { margin: 0; }
.fbc-plik__tresc > p:not(.fbc-etykieta) { margin: var(--wp--preset--spacing--20) 0 0; color: var(--wp--preset--color--contrast-2); max-width: 56ch; }
.fbc-plik__tresc .fbc-plik__meta { margin-block-start: var(--wp--preset--spacing--30); }
.fbc-plik__akcja .wp-block-button__link { white-space: nowrap; }

/* Sekcja na całe okno (GT, newsletter). */
.wp-site-blocks main > .alignfull.fbc-pelny { display: grid; align-items: center; min-height: 100dvh; padding-block: calc(72px + var(--wp--preset--spacing--80)) var(--wp--preset--spacing--80); }
.fbc-pelny__uklad { display: grid; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); gap: var(--fbc-dwie-kolumny-gap); align-items: center; position: relative; z-index: 1; }
.fbc-pelny__tekst h1 { margin: 0; max-width: 12ch; text-wrap: balance; letter-spacing: -0.02em; line-height: 1.02; }
.fbc-pelny__lead { margin-block-start: var(--wp--preset--spacing--40); font-size: var(--wp--preset--font-size--large); color: var(--wp--preset--color--contrast-3); max-width: 44ch; }
.fbc-pelny__kadr { position: relative; margin: 0; }
/* GT: render z produkcji to celowa sylwetka (zapowiedź bez ujawniania detalu) —
   pod nią poświata, żeby czarny kształt czytał się na czerni jak cień produktu. */
.fbc-gt .fbc-pelny__kadr::before { content: ""; position: absolute; inset: -10% -5%; z-index: -1; background: radial-gradient(50% 50% at 50% 55%, rgba(118, 0, 112, 0.55) 0%, rgba(118, 0, 112, 0.18) 45%, transparent 75%); filter: blur(24px); }
.fbc-gt .fbc-pelny__kadr img { position: relative; max-width: 30rem; margin-inline: auto; filter: drop-shadow(0 0 28px rgba(197, 97, 190, 0.35)); }
.fbc-pelny__kadr img { display: block; width: 100%; height: auto; }
.fbc-newsletter--gola { margin-block-start: var(--wp--preset--spacing--60); padding: 0; border: 0; background: transparent; max-width: 32rem; }
.fbc-newsletter--gola .fbc-newsletter__form { margin-block-start: 0; }
.fbc-fakty__uklad { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--wp--preset--spacing--50); border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-fakty__el { padding-block-start: var(--wp--preset--spacing--40); }
.fbc-fakty__el .fbc-nr { display: block; margin-block-end: var(--wp--preset--spacing--30); font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--purr); }
.fbc-fakty__el > p:not(.fbc-etykieta) { margin: 0; color: var(--wp--preset--color--contrast-2); line-height: 1.55; }
.fbc-fakty__el .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--30); }
.fbc-fakty__el--link { border-inline-start: 1px solid var(--wp--preset--color--line); padding-inline-start: var(--wp--preset--spacing--50); }

/* Strony prawne. */
.wp-site-blocks main > .alignfull.fbc-legal-nav { padding-block: 0; margin-block: 0; border-block-end: 1px solid var(--wp--preset--color--line); background: var(--wp--preset--color--base); }
.fbc-legal-nav__uklad { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--wp--preset--spacing--30) var(--wp--preset--spacing--60); }
.fbc-legal-nav__lista { display: flex; gap: clamp(1.25rem, 3vw, 2.5rem); overflow-x: auto; scrollbar-width: none; }
.fbc-legal-nav__lista::-webkit-scrollbar { display: none; }
.fbc-legal-nav__lista a { flex: none; padding: var(--wp--preset--spacing--40) 0; margin-block-end: -1px; border-block-end: 2px solid transparent; font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); text-decoration: none; white-space: nowrap; transition: color .2s ease, border-color .2s ease; }
.fbc-legal-nav__lista a:hover { color: var(--wp--preset--color--contrast); }
.fbc-legal-nav__lista a.is-active { color: var(--wp--preset--color--contrast); border-color: var(--wp--preset--color--purr); }
.fbc-strona__tresc--legal { max-width: var(--wp--style--global--content-size); margin-inline: auto; }
/* Stary rząd linków dokumentów z treści Divi: pierwszy akapit złożony z samych linków do stron prawnych. */
.fbc-strona__tresc--legal .wp-block-post-content > p:first-child:has(a[href*="terms-and-conditions"]) { display: none; }

@media (max-width: 1023.98px) {
	.fbc-liczby4__lista, .fbc-fakty__uklad { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.fbc-fakty__el--link { border: 0; padding-inline-start: 0; }
}
@media (max-width: 899.98px) {
	.fbc-kafle { grid-template-columns: minmax(0, 1fr); }
	.fbc-para, .fbc-formularz__uklad, .fbc-fundator__uklad, .fbc-droga__uklad, .fbc-pliki__glowny, .fbc-pelny__uklad { grid-template-columns: minmax(0, 1fr); }
	.fbc-para--odwrot .fbc-para__kadr { order: 0; }
	.fbc-fundator__portret img { max-width: 18rem; }
	.fbc-fundator__tekst { padding-block-start: 0; }
	.fbc-droga__naglowek { position: static; }
	.fbc-droga__faza { grid-template-columns: 2.5rem minmax(0, 1fr); }
	.fbc-droga__kadr { grid-column: 2; }
	.fbc-formularz { padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--40); }
	.fbc-formularz__form { grid-template-columns: minmax(0, 1fr); }
	.fbc-plik { grid-template-columns: 2.5rem minmax(0, 1fr); }
	.fbc-plik__akcja { grid-column: 2; }
	.fbc-pelny__kadr { order: -1; }
	.wp-site-blocks main > .alignfull.fbc-pelny { min-height: 0; }
}
@media (max-width: 599.98px) {
	.fbc-liczby4__lista, .fbc-fakty__uklad { grid-template-columns: minmax(0, 1fr); }
}

/* --------------------------------------------------------------------------
   28. Baza wiedzy (/knowledge-base/, inc/baza-wiedzy.php, wzorce kb-*)

   Ten sam język co strony statyczne (27): ciemny nagłówek strony,
   kafle tematów (`.fbc-kafle`), listy z numerem i linią, typografia
   długiego tekstu (26). Własne klocki: wyszukiwarka z podpowiedziami,
   troubleshooter, indeks działów, wiersz artykułu z odznaką, callouty
   i figury w treści, „Was this helpful?", sąsiednie artykuły.
   -------------------------------------------------------------------------- */

/* Wyszukiwarka (w nagłówku hubu, tematu, wyników; w boku artykułu). */
.fbc-kb-szukaj { display: flex; gap: var(--wp--preset--spacing--20); max-width: 40rem; margin-block-start: var(--wp--preset--spacing--60); }
.fbc-kb-szukaj__pole {
	flex: 1;
	min-width: 0;
	box-sizing: border-box;
	height: 51px;
	padding: 0 var(--wp--preset--spacing--40);
	font: inherit;
	color: var(--wp--preset--color--base);
	background: rgba(255, 255, 255, 0.05);
	border: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 2px;
	transition: border-color .2s ease;
	-webkit-appearance: none;
	appearance: none;
}
.fbc-kb-szukaj__pole::placeholder { color: var(--wp--preset--color--contrast-3); }
.fbc-kb-szukaj__pole:focus { outline: 0; border-color: var(--wp--preset--color--purr-light); }
.fbc-kb-szukaj .wp-block-button__link { background: var(--wp--preset--color--base); color: var(--wp--preset--color--contrast); border-color: var(--wp--preset--color--base); }
.fbc-kb-szukaj .wp-block-button__link::before { background: var(--wp--preset--color--purr); }
.fbc-kb-szukaj .wp-block-button__link:hover { color: var(--wp--preset--color--base); border-color: var(--wp--preset--color--purr); }
.fbc-kb-chipy { list-style: none; display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--20); margin: var(--wp--preset--spacing--30) 0 0; padding: 0; }
.fbc-kb-chipy li { margin: 0; }
.fbc-kb-chipy a {
	display: inline-block;
	padding: 5px 12px;
	border: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 2px;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
	text-decoration: none;
	transition: color .2s ease, border-color .2s ease;
}
.fbc-kb-chipy a:hover { color: var(--wp--preset--color--base); border-color: var(--wp--preset--color--purr-light); }
.fbc-kb-meta { margin: var(--wp--preset--spacing--30) 0 0; font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.06em; color: var(--wp--preset--color--purr-light); }
.fbc-kb-meta[hidden] { display: none; }
.fbc-kb-naglowek .fbc-eyebrow a { color: inherit; text-decoration: none; }
.fbc-kb-naglowek .fbc-eyebrow a:hover { color: var(--wp--preset--color--base); }
.fbc-kb-naglowek--artykul .fbc-strona-naglowek__tresc > h1 { max-width: 26ch; }
.fbc-kb-okruszki { text-transform: uppercase; }   /* wersaliki z CSS, nie strtoupper — encje (&amp;) zostają poprawne */

/* Lista tematów (hub, wyniki bez trafień, support): wiersze z linią, jak inne
   listy na stronie — ikona | numer | nazwa + opis | liczba | strzałka. */
.fbc-kb-tematy-lista { list-style: none; margin: 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-kb-tematy-lista li { margin: 0; border-block-end: 1px solid var(--wp--preset--color--line); }
.fbc-kb-temat-wiersz {
	display: grid;
	grid-template-columns: 28px 2.4rem minmax(0, 1fr) auto 1.5rem;
	gap: var(--wp--preset--spacing--40);
	align-items: center;
	padding: var(--wp--preset--spacing--50) 0;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
}
.fbc-kb-temat-wiersz__ikona { display: block; width: 28px; height: 28px; color: var(--wp--preset--color--purr); }
.fbc-kb-temat-wiersz__ikona svg { width: 100%; height: 100%; }
.fbc-kb-temat-wiersz__nr { font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-3); }
.fbc-kb-temat-wiersz__tresc { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.fbc-kb-temat-wiersz__nazwa { font-size: var(--wp--preset--font-size--large); font-weight: 700; line-height: 1.25; transition: color .2s ease; }
.fbc-kb-temat-wiersz__opis { color: var(--wp--preset--color--contrast-2); line-height: 1.5; }
.fbc-kb-temat-wiersz__licznik { font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); white-space: nowrap; }
.fbc-kb-temat-wiersz__strzalka { justify-self: end; font-family: var(--wp--preset--font-family--mono); color: var(--wp--preset--color--purr); transition: transform .25s ease; }
.fbc-kb-temat-wiersz:hover .fbc-kb-temat-wiersz__nazwa { color: var(--wp--preset--color--purr); }
.fbc-kb-temat-wiersz:hover .fbc-kb-temat-wiersz__strzalka { transform: translateX(4px); }
.fbc-kb-temat-wiersz:focus-visible { outline: 2px solid var(--wp--preset--color--purr); outline-offset: 4px; }
@media (max-width: 599.98px) {
	.fbc-kb-temat-wiersz { grid-template-columns: 24px minmax(0, 1fr) 1.5rem; }
	.fbc-kb-temat-wiersz__nr { display: none; }
	.fbc-kb-temat-wiersz__licznik { grid-column: 2; }
}

/* Kafle tematów (nieużywane po zmianie na listę; klocek zostaje). */
.fbc-kafle--tematy { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }
.fbc-kafel--temat { position: relative; padding-block-start: var(--wp--preset--spacing--60); }
.fbc-kafel__ikona { display: block; width: 28px; height: 28px; color: var(--wp--preset--color--purr); }
.fbc-kafel__ikona svg { width: 100%; height: 100%; }
.fbc-kafel__licznik { position: absolute; top: var(--wp--preset--spacing--60); right: var(--wp--preset--spacing--50); font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-kafel--temat h3 { margin: 0; text-wrap: balance; }

/* Troubleshooter. */
.fbc-kb-wizard__uklad { display: grid; grid-template-columns: var(--fbc-dwie-kolumny); gap: var(--fbc-dwie-kolumny-gap); align-items: start; position: relative; z-index: 1; }
.fbc-kb-wizard__tekst h2 { margin: 0; max-width: 14ch; text-wrap: balance; }
.fbc-kb-wizard__lead { margin-block-start: var(--wp--preset--spacing--40); color: var(--wp--preset--color--contrast-3); max-width: 40ch; line-height: 1.6; }
.fbc-kb-wizard__tekst .fbc-link-dalej { margin-block-start: var(--wp--preset--spacing--50); color: var(--wp--preset--color--purr-light); }
.fbc-kb-wizard {
	--fbc-sciecie: 22px;
	padding: var(--wp--preset--spacing--60);
	background: var(--wp--preset--color--ground-dark);
	border: 1px solid var(--wp--preset--color--line-dark);
	min-height: 22rem;
}
/* Ścieżka odpowiedzi („Noise › Throttle”) — pusta na starcie nie zajmuje miejsca
   (2026-09-27: „co to za div? niepotrzebny chyba”); pojawia się po pierwszym
   wyborze, razem ze zmianą pytania, więc przesunięcie ginie w tej zmianie. */
.fbc-kb-wizard__sciezka:empty { display: none; }
.fbc-kb-wizard__sciezka { margin: 0 0 var(--wp--preset--spacing--30); font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.06em; color: var(--wp--preset--color--purr-light); }
.fbc-kb-wizard h3 { margin: 0 0 var(--wp--preset--spacing--40); color: var(--wp--preset--color--base); text-wrap: balance; }
.fbc-kb-wizard__opcje { display: grid; gap: var(--wp--preset--spacing--20); }
.fbc-kb-wizard__opcja {
	display: grid;
	grid-template-columns: 2.4rem minmax(0, 1fr);
	align-items: baseline;
	gap: var(--wp--preset--spacing--30);
	width: 100%;
	padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--40);
	border: 1px solid var(--wp--preset--color--line-dark);
	border-radius: 2px;
	background: transparent;
	color: var(--wp--preset--color--base);
	font: inherit;
	font-weight: 700;
	line-height: 1.35;
	text-align: left;
	cursor: pointer;
	transition: border-color .2s ease, background-color .2s ease;
}
.fbc-kb-wizard__opcja .fbc-nr { font-family: var(--wp--preset--font-family--mono); font-size: var(--wp--preset--font-size--small); font-weight: 400; color: var(--wp--preset--color--purr-light); }
.fbc-kb-wizard__opcja:hover { border-color: var(--wp--preset--color--purr-light); background: rgba(255, 255, 255, 0.03); }
.fbc-kb-wizard__opcja:focus-visible { outline: 2px solid var(--wp--preset--color--base); outline-offset: 2px; }
.fbc-kb-wizard.is-zywy .fbc-kb-wizard__bez-js { display: none; }
.fbc-kb-wizard__bez-js { margin: 0; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-wizard__bez-js a { color: var(--wp--preset--color--purr-light); }
.fbc-kb-wizard__wynik { padding: var(--wp--preset--spacing--40) 0 0; border-block-start: 1px solid var(--wp--preset--color--line-dark); color: var(--wp--preset--color--base-3); line-height: 1.6; }
.fbc-kb-wizard__wynik[hidden] { display: none; }
.fbc-kb-wizard__wynik p { margin: 0; }
.fbc-kb-wizard__wynik b { color: var(--wp--preset--color--base); }
.fbc-kb-wizard__wynik code { font-family: var(--wp--preset--font-family--mono); font-size: 0.9em; background: rgba(255, 255, 255, 0.06); padding: 1px 6px; border-radius: 2px; }
.fbc-kb-wizard__linki { display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--40); margin-block-start: var(--wp--preset--spacing--40) !important; }
.fbc-kb-wizard__linki .fbc-link-dalej { color: var(--wp--preset--color--purr-light); }
.fbc-kb-wizard__wstecz { margin-block-start: var(--wp--preset--spacing--40); padding: 0; border: 0; background: none; cursor: pointer; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-wizard__wstecz[hidden] { display: none; }
.fbc-kb-wizard__wstecz:hover { color: var(--wp--preset--color--base); }

/* Indeks działów na hubie. */
.fbc-kb-indeks__naglowek { margin-block-end: var(--wp--preset--spacing--60); }
.fbc-kb-indeks__naglowek h2 { margin: 0; max-width: 16ch; text-wrap: balance; }
.fbc-kb-indeks { columns: 3; column-gap: clamp(2rem, 5vw, 4rem); }
.fbc-kb-indeks.is-filtr { columns: 2; }
.fbc-kb-dzial { break-inside: avoid; margin: 0 0 var(--wp--preset--spacing--70); }
.fbc-kb-dzial[hidden] { display: none; }
.fbc-kb-dzial__naglowek h3 { margin: 0; font-size: var(--wp--preset--font-size--large); }
.fbc-kb-dzial__naglowek > p { margin: var(--wp--preset--spacing--20) 0 0; font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-3); }
.fbc-kb-dzial__temat { display: inline-block; margin: var(--wp--preset--spacing--20) 0 0; color: var(--wp--preset--color--purr); text-decoration: none; }
.fbc-kb-dzial__temat:hover { color: var(--wp--preset--color--purr-hover); }

/* Wiersz artykułu (indeks, temat, wyniki, bok). */
.fbc-kb-lista { list-style: none; margin: var(--wp--preset--spacing--30) 0 0; padding: 0; border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-kb-wiersz { margin: 0; border-block-end: 1px solid var(--wp--preset--color--line); }
.fbc-kb-wiersz[hidden] { display: none; }
.fbc-kb-wiersz a {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: var(--wp--preset--spacing--10) var(--wp--preset--spacing--30);
	align-items: baseline;
	padding: var(--wp--preset--spacing--30) 0;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
}
.fbc-kb-wiersz__tytul { font-weight: 700; line-height: 1.35; transition: color .2s ease; }
.fbc-kb-wiersz a:hover .fbc-kb-wiersz__tytul { color: var(--wp--preset--color--purr); }
.fbc-kb-wiersz__opis { grid-column: 1 / -1; font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-2); line-height: 1.5; }
.fbc-kb-odznaka { font-family: var(--wp--preset--font-family--mono); font-size: 0.66rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--purr); white-space: nowrap; }
.fbc-kb-lista--opisy .fbc-kb-wiersz a { padding-block: var(--wp--preset--spacing--40); }
.fbc-kb-lista--bok { border-block-start: 0; }
.fbc-kb-lista--bok .fbc-kb-wiersz { border-block-end: 0; }
.fbc-kb-lista--bok .fbc-kb-wiersz a { grid-template-columns: minmax(0, 1fr); padding: var(--wp--preset--spacing--20) 0 var(--wp--preset--spacing--20) var(--wp--preset--spacing--40); margin-inline-start: -1px; border-inline-start: 1px solid transparent; font-size: var(--wp--preset--font-size--small); }
.fbc-kb-lista--bok .fbc-kb-wiersz__tytul { font-weight: 400; color: var(--wp--preset--color--contrast-2); }
.fbc-kb-lista--bok .fbc-kb-wiersz.is-active a { border-inline-start-color: var(--wp--preset--color--purr); }
.fbc-kb-lista--bok .fbc-kb-wiersz.is-active .fbc-kb-wiersz__tytul { font-weight: 700; color: var(--wp--preset--color--contrast); }
.fbc-kb-lista--bok .fbc-kb-odznaka, .fbc-kb-lista--bok .fbc-kb-wiersz__opis { display: none; }

/* Przełącznik tematów pod nagłówkiem tematu (jak pasek dokumentów prawnych). */
.wp-site-blocks main > .alignfull.fbc-kb-przelacznik { padding-block: 0; margin-block: 0; border-block-end: 1px solid var(--wp--preset--color--line); }
.fbc-kb-przelacznik__lista { display: flex; gap: clamp(1.25rem, 3vw, 2.5rem); overflow-x: auto; scrollbar-width: none; }
.fbc-kb-przelacznik__lista::-webkit-scrollbar { display: none; }
.fbc-kb-przelacznik__lista a { flex: none; padding: var(--wp--preset--spacing--40) 0; margin-block-end: -1px; border-block-end: 2px solid transparent; font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); text-decoration: none; white-space: nowrap; transition: color .2s ease, border-color .2s ease; }
.fbc-kb-przelacznik__lista a:hover { color: var(--wp--preset--color--contrast); }
.fbc-kb-przelacznik__lista a.is-active { color: var(--wp--preset--color--contrast); border-color: var(--wp--preset--color--purr); }

/* Temat: działy z listą. */
.fbc-kb-temat__dzial { display: grid; grid-template-columns: var(--fbc-dwie-kolumny); gap: var(--wp--preset--spacing--40) var(--fbc-dwie-kolumny-gap); align-items: start; padding-block: var(--wp--preset--spacing--60); border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-kb-temat__dzial:first-child { border-block-start: 0; padding-block-start: 0; }
.fbc-kb-temat__naglowek { position: sticky; top: var(--wp--preset--spacing--50); }
.fbc-kb-temat__naglowek h2 { margin: 0; max-width: 16ch; text-wrap: balance; }
.fbc-kb-temat__naglowek > p { margin: var(--wp--preset--spacing--30) 0 0; color: var(--wp--preset--color--contrast-2); max-width: 36ch; line-height: 1.55; }
.fbc-kb-zakres { font-family: var(--wp--preset--font-family--mono) !important; font-size: 0.72rem !important; letter-spacing: 0.08em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3) !important; }
.fbc-kb-temat__dzial .fbc-kb-lista { margin-block-start: 0; }
/* Dział ma już kreskę u góry — lista bez własnej nad pierwszym i pod ostatnim
   artykułem; wcześniej linie szły parami co kilkadziesiąt pikseli (2026-09-27:
   „za dużo kresek, first child nie powinien mieć border top”). */
.fbc-kb-temat__dzial .fbc-kb-lista { border-block-start: 0; }
.fbc-kb-temat__dzial .fbc-kb-wiersz:last-child { border-block-end: 0; }
.fbc-kb-temat__dzial .fbc-kb-lista--opisy .fbc-kb-wiersz:first-child a { padding-block-start: 0; }

/* Artykuł: bok. */
.fbc-kb-artykul .fbc-strona--spis { --fbc-spis-szer: 260px; }
.fbc-kb-bok { position: sticky; top: var(--wp--preset--spacing--60); }
.fbc-kb-bok__nazwa { margin: 0 0 var(--wp--preset--spacing--20); font-weight: 700; }
.fbc-kb-bok__dzial .fbc-kb-lista--bok { border-inline-start: 1px solid var(--wp--preset--color--line); }
.fbc-kb-bok__temat { margin: var(--wp--preset--spacing--50) 0 0; }
.fbc-kb-bok .fbc-kb-szukaj { max-width: none; margin-block-start: var(--wp--preset--spacing--50); }
.fbc-kb-bok .fbc-kb-szukaj__pole { height: 44px; background: var(--wp--preset--color--base-2); border-color: var(--wp--preset--color--line); color: var(--wp--preset--color--contrast); }
.fbc-kb-bok .fbc-kb-szukaj__pole:focus { border-color: var(--wp--preset--color--purr); }
.fbc-kb-bok .fbc-kb-szukaj .wp-block-button__link { display: none; }

/* Artykuł: treść — callouty, figury, tabele, źródło. */
.fbc-kb-tresc > :first-child { margin-block-start: 0; }
.fbc-kb-tresc .fbc-callout { margin: var(--wp--preset--spacing--50) 0; padding: var(--wp--preset--spacing--40) var(--wp--preset--spacing--50); border: 1px solid var(--wp--preset--color--line); border-inline-start: 3px solid var(--wp--preset--color--purr); background: var(--wp--preset--color--base-2); border-radius: 2px; line-height: 1.55; }
.fbc-kb-tresc .fbc-callout--warn { border-inline-start-color: #c8891a; }
.fbc-kb-tresc .fbc-callout--danger { border-inline-start-color: #c0392b; }
.fbc-kb-tresc .fbc-callout__tytul { display: block; margin-block-end: var(--wp--preset--spacing--10); font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-tresc .fbc-kb-fig { margin: var(--wp--preset--spacing--60) 0; }
.fbc-kb-tresc .fbc-kb-fig img { display: block; width: 100%; height: auto; border: 1px solid var(--wp--preset--color--line); border-radius: 2px; }
.fbc-kb-tresc .fbc-kb-fig--narrow { max-width: 28rem; }
.fbc-kb-tresc .fbc-kb-fig figcaption { margin-block-start: var(--wp--preset--spacing--20); font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.04em; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-tresc .fbc-tabela { overflow-x: auto; margin: var(--wp--preset--spacing--50) 0; }
.fbc-kb-tresc table { width: 100%; border-collapse: collapse; font-size: var(--wp--preset--font-size--small); }
.fbc-kb-tresc th, .fbc-kb-tresc td { padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--30) var(--wp--preset--spacing--30) 0; border-block-end: 1px solid var(--wp--preset--color--line); text-align: start; vertical-align: top; line-height: 1.5; }
.fbc-kb-tresc th { font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-tresc td:first-child { color: var(--wp--preset--color--contrast-2); }
.fbc-kb-tresc .fbc-kb-src { display: inline-block; margin-block-end: var(--wp--preset--spacing--30); font-family: var(--wp--preset--font-family--mono); font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--wp--preset--color--contrast-3); }
.fbc-kb-tresc code { font-family: var(--wp--preset--font-family--mono); font-size: 0.9em; background: var(--wp--preset--color--base-2); padding: 1px 6px; border-radius: 2px; }

/* „Was this helpful?" i sąsiedzi. */
.fbc-kb-pomocne { margin-block-start: var(--wp--preset--spacing--80); padding-block-start: var(--wp--preset--spacing--50); border-block-start: 1px solid var(--wp--preset--color--line); }
/* Oddech między pytaniem a przyciskami i między przyciskami (2026-09-27: „za mały gap”). */
.fbc-kb-pomocne .fbc-etykieta { margin: 0 0 var(--wp--preset--spacing--40); }
.fbc-kb-pomocne__przyciski { display: flex; gap: var(--wp--preset--spacing--30); }
.fbc-kb-pomocne__nie { background: transparent; color: var(--wp--preset--color--contrast); border-color: var(--wp--preset--color--contrast); }
.fbc-kb-pomocne__nie::before { background: var(--wp--preset--color--contrast); }
.fbc-kb-pomocne__nie:hover { color: var(--wp--preset--color--base); background: transparent; }
.fbc-kb-pomocne button:disabled { opacity: 0.5; cursor: default; }
.fbc-kb-pomocne__wynik { margin: var(--wp--preset--spacing--30) 0 0; font-size: var(--wp--preset--font-size--small); color: var(--wp--preset--color--contrast-2); }
.fbc-kb-pomocne__wynik[hidden] { display: none; }
.fbc-kb-pomocne__wynik a { color: var(--wp--preset--color--purr); }
.fbc-kb-sasiedzi { display: grid; grid-template-columns: 1fr 1fr; gap: var(--wp--preset--spacing--30); margin-block-start: var(--wp--preset--spacing--60); padding-block-start: var(--wp--preset--spacing--50); border-block-start: 1px solid var(--wp--preset--color--line); }
.fbc-kb-sasiedzi__el { display: flex; flex-direction: column; gap: var(--wp--preset--spacing--10); color: var(--wp--preset--color--contrast); font-weight: 700; text-decoration: none; line-height: 1.35; }
.fbc-kb-sasiedzi__el .fbc-etykieta { margin: 0; }
.fbc-kb-sasiedzi__el--next { text-align: end; align-items: flex-end; }
.fbc-kb-sasiedzi__el:hover { color: var(--wp--preset--color--purr); }
.fbc-kb-wyniki__pusto { margin: 0 0 var(--wp--preset--spacing--60); color: var(--wp--preset--color--contrast-2); max-width: 52ch; line-height: 1.6; }
.fbc-kb-wyniki__pusto a { color: var(--wp--preset--color--purr); }

@media (max-width: 1023.98px) {
	.fbc-kb-indeks, .fbc-kb-indeks.is-filtr { columns: 2; }
}
@media (max-width: 899.98px) {
	.fbc-kb-wizard__uklad, .fbc-kb-temat__dzial { grid-template-columns: minmax(0, 1fr); }
	.fbc-kb-temat__naglowek { position: static; }
	.fbc-kb-bok { position: static; }
	.fbc-kb-bok .fbc-kb-szukaj { display: none; }
	.fbc-kb-artykul .fbc-strona--spis { grid-template-columns: minmax(0, 1fr); }
	.fbc-kb-wizard { min-height: 0; padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--40); }
}
@media (max-width: 599.98px) {
	.fbc-kb-indeks, .fbc-kb-indeks.is-filtr { columns: 1; }
	.fbc-kb-szukaj { flex-direction: column; }
	/* `flex: 1` w kolumnie to podstawa 0 — pole kurczyło się do ~23 px
	   i wyglądało jak kreska nad dużym przyciskiem. */
	.fbc-kb-szukaj__pole { flex: none; }
	.fbc-kb-sasiedzi { grid-template-columns: 1fr; }
	.fbc-kb-sasiedzi__el--next { text-align: start; align-items: flex-start; }
}

/* Węższe wcięcie boczne na telefonie i tablecie (klient 2026-09-11). Globalny gutter
   dawał 8vw — 31 px przy 390 px i 61 px przy 768 px; hero produktu zostało zwężone
   pierwsze, tu dociągamy nagłówek i resztę stron do tej samej linii. Blok na końcu
   pliku, bo przy równej specyficzności z `:root` decyduje kolejność. */
@media (max-width: 1023.98px) {
	:root {
		--fbc-gutter: clamp(18px, 4.6vw, 32px);
	}
}

/* Zwinięty opis punktu zostawiał 16 px paska treści (klient 2026-09-11: „separatory
   wypadają źle"). Wiersz siatki `0fr` ściska tylko obszar treści — dolny padding
   akapitu wchodzi do rozmiaru minimalnego wiersza, więc spod tytułu wystawała
   obcięta pierwsza linijka, przez którą szła kreska separatora. Odstęp pod opisem
   dostaje dopiero pozycja otwarta. */
@media (max-width: 1199.98px) {
	.fbc-punkty__rozwiniecie > p { padding-block-end: 0; }
	.fbc-punkty__el.is-active .fbc-punkty__rozwiniecie > p { padding-block-end: var(--wp--preset--spacing--40); }
}

/* Separatory menu pełnoekranowego wypadały tuż pod tekstem, a odstęp zostawał pod
   kreską (klient 2026-09-11). Powód: style bloku nawigacji ładują się po arkuszu
   motywu — zerowały padding linku i zostawiały `gap: 16px` na liście, więc kreska
   przylegała do pozycji nad nią. Odstęp wraca do środka pozycji: lista bez gapu,
   oddech w linku. Rytm pozycji ten sam co wcześniej (61 px). */
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
	gap: 0 !important;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item a {
	padding-block: var(--wp--preset--spacing--40) !important;
}

/* Nagłówek przechodzi na menu pełnoekranowe przy 1200 px, nie przy 600 (klient
   2026-09-11). Siedem pozycji z „PurrPRO FORMULA PEDALS" na czele potrzebuje
   ok. 640 px — z logo i koszykiem robi się z tego ponad 1000 px i na wąskich
   laptopach menu łamało się na dwie linie. Rdzeń trzyma te reguły w `@media
   (min-width: 600px)`, więc nadpisujemy je w całym zakresie pośrednim. */
@media (min-width: 600px) and (max-width: 1199.98px) {
	.fbc-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}
	.fbc-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	/* Kolejność ikon zostaje naturalna (hamburger, potem koszyk) — zamiana miejscami
	   jest tylko na telefonie, poniżej 600 px. Skrajną ikoną dalej jest koszyk,
	   więc to jego wyrównanie do gutteru obowiązuje i nie ruszamy marginesów. */
}

/* --------------------------------------------------------------------------
   Baner zgód (CookieYes) — prawy dolny róg, wersja minimalna

   Od 2026-10-01 znowu po prawej (klient: „daj na prawo to okienko, i jakieś bardziej
   minimalistyczne”). Wcześniej (2026-09-20) stał po lewej, bo po prawej wysuwa się
   szuflada koszyka — teraz na czas otwartej szuflady baner znika na każdej szerokości
   (reguła niżej), więc kolizji nie ma. Modal ustawień zostaje bez zmian (wyśrodkowany).

   Minimalnie: bez tytułu („Privacy Policy” powtarzał link w treści), węższe pudełko,
   drobniejszy tekst, przyciski w jednym rzędzie, bez zaokrągleń — kolory z wtyczki.
   -------------------------------------------------------------------------- */
.cky-consent-container .cky-consent-bar { padding: 16px 18px !important; border: 0 !important; border-radius: 0 !important; box-shadow: 0 12px 32px rgba(10, 10, 12, 0.22) !important; }
.cky-consent-container .cky-title { display: none !important; }
.cky-consent-container .cky-notice-des,
.cky-consent-container .cky-notice-des p { margin: 0 !important; font-size: 0.78rem !important; line-height: 1.5 !important; }
.cky-consent-container .cky-notice-group { gap: 12px !important; }
.cky-consent-container .cky-notice-btn-wrapper { display: flex !important; flex-direction: row !important; gap: 8px !important; margin: 12px 0 0 !important; }
.cky-consent-container .cky-notice-btn-wrapper .cky-btn { flex: 1 1 0 !important; min-height: 36px !important; margin: 0 !important; padding: 0 14px !important; font-size: 0.8rem !important; line-height: 1 !important; border-radius: 0 !important; }
.cky-consent-container .cky-banner-btn-close { top: 10px !important; right: 10px !important; }
.cky-consent-container .cky-banner-btn-close img { width: 10px !important; height: 10px !important; }
@media (min-width: 900px) {
	.cky-consent-container,
	.cky-consent-container.cky-box-bottom-right {
		inset-inline-start: auto !important;
		inset-inline-end: var(--fbc-gutter) !important;
		inset-block-end: 24px !important;
		width: 360px !important;
		max-width: calc(100vw - 2 * var(--fbc-gutter)) !important;
	}
}
/* Na czas otwartej szuflady baner znika (na telefonie zasłaniałby przycisk kasy, na desktopie
   stałby na szufladzie).

   UWAGA (2026-09-22): nakładka szuflady NIE znika z drzewa po zamknięciu —
   blok mini-cart trzyma ją stale, zamkniętą oznacza klasą `--is-hidden`.
   Pierwsza wersja tej reguły łapała samo istnienie nakładki, więc na telefonie
   baner zgód nie pokazywał się na ŻADNEJ stronie z koszykiem w nagłówku (widać
   go było tylko na checkoucie, gdzie Fluid Checkout ma własny nagłówek). */
body:has(.wc-block-components-drawer__screen-overlay:not(.wc-block-components-drawer__screen-overlay--is-hidden)) .cky-consent-container { display: none !important; }

/* --------------------------------------------------------------------------
   Długie ciągi bez spacji w treści (2026-09-22, audyt mobilny)
   Adresy e-mail i URL-e w stronach prawnych (np. patryk.sokolowski@…) nie
   miały gdzie się złamać i były ucięte na prawej krawędzi telefonu. Łamiemy
   je tylko w ostateczności — zwykłe słowa zachowują się jak dotąd.
   -------------------------------------------------------------------------- */
.wp-block-post-content,
.fbc-kb-tresc { overflow-wrap: break-word; }
.wp-block-post-content a,
.fbc-kb-tresc a { overflow-wrap: anywhere; }

/* --------------------------------------------------------------------------
   Pasek „Add to cart" na dole okna (assets/js/kup.js, przywrócony 2026-09-22)
   Gdy pasek jest widoczny, dół strony (stopka) nie może chować się pod nim.
   -------------------------------------------------------------------------- */
body.fbc-ma-pasek-kup { padding-block-end: 76px; }

/* --------------------------------------------------------------------------
   Pola formularzy na urządzeniach dotykowych: co najmniej 16 px (2026-09-23)
   iOS Safari przybliża całą stronę, gdy użytkownik dotknie pola z tekstem
   mniejszym niż 16 px — i nie oddala jej po wyjściu z pola. U nas 13,3 px
   miały: formularz opinii (treść, imię, e-mail), logowanie i rejestracja
   w My account, wybór wariantu, sortowanie w sklepie i pola ceny w filtrze.
   Warunek obejmuje telefony i tablety (dotyk), a wąskie okno desktopu na
   wszelki wypadek też; na komputerze z myszą pola zostają bez zmian.
   `max()` zostawia większy stopień tam, gdzie pole już go ma. Pola ukryte
   i przełączniki (checkbox, radio, suwak) nie wyświetlają tekstu, więc ich
   to nie dotyczy. `!important`, bo stopień pól ustawiają też reguły wtyczek
   i WooCommerce o wyższej wadze.
   -------------------------------------------------------------------------- */
@media (max-width: 899.98px), (hover: none) and (pointer: coarse) {
	input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="image"]),
	select,
	textarea {
		font-size: max(16px, 1em) !important;
	}
}

/* --------------------------------------------------------------------------
   Cele dotyku na telefonie i tablecie (2026-09-23, audyt mobilny, punkt 13)
   Próg: 44 × 44 px (wytyczne Apple; WCAG 2.2 wymaga co najmniej 24 px).
   Zasada: tam, gdzie wokół elementu jest wolne miejsce, rośnie tylko OBSZAR
   DOTYKU — wygląd zostaje. Dwa sposoby, zależnie od budowy elementu:
     • tekstowe linki i przyciski: pionowy padding zjedzony ujemnym marginesem
       (układ strony się nie przesuwa, klikalne pole rośnie),
     • elementy pozycjonowane (kropki, strzałki, ikony): przezroczysty
       `::after` wystający poza element.
   Tylko tam, gdzie elementy stoją ciasno (ikony w stopce, gwiazdki oceny,
   kafle kanałów recenzji, przyciski „+ Add"), zmienia się odstęp albo
   wysokość — inaczej powiększone pola nachodziłyby na siebie.
   -------------------------------------------------------------------------- */
@media (hover: none) and (pointer: coarse), (max-width: 899.98px) {

	/* Tekstowe linki i przyciski — obszar dotyku ≥ 44 px w pionie. */
	.fbc-stopka__lista a,
	.fbc-stopka__mail a,
	a.fbc-link-dalej,
	.fbc-kb-dzial__temat { padding-block: 12px; margin-block: -12px; }
	.wc-block-product-filters__open-overlay { padding-block: 14px; margin-block: -14px; }
	/* Reguły z woocommerce.css ładują się po tym arkuszu — stąd `body`.
	   „Read full review" ma własny odstęp od tekstu (spacing--30), więc
	   ujemny margines górny go zachowuje. */
	body .fbc-opinia__wiecej { padding-block: 14px; margin-block: calc(var(--wp--preset--spacing--30) - 14px) -14px; }
	body .fbc-dodatki__wiecej-przycisk { padding-block: 13px; }
	.fbc-produkt-zakup__recenzje { padding-block: 16px; margin-block: -16px; }
	.wc-block-product-filters__close-overlay { padding-block: 10px; margin-block: -10px; }
	.fbc-dodatki__nazwa { padding-block: 6px; margin-block: -6px; }
	.fbc-header .custom-logo-link { padding-block: 8px; margin-block: -8px; }

	/* Menu w stopce: linki stały co 33 px, więc powiększone pola nachodziły na
	   siebie i każde miało tylko 34 px. Odstęp 24 px daje pełne 44. */
	.fbc-stopka__lista { gap: 24px; }

	/* Ikony w nagłówku (konto, koszyk) — 37 × 44 px; stoją 16 px od siebie,
	   więc szerzej już się nie da bez nachodzenia. Znacznik liczby produktów
	   jest pozycjonowany względem przycisku, dlatego pole rośnie w `::after`,
	   a nie w paddingu. */
	.fbc-konto,
	.wc-block-mini-cart__button { position: relative; }
	.fbc-konto::after,
	.wc-block-mini-cart__button::after { content: ""; position: absolute; inset: -10px -8px; }

	/* Ikony społecznościowe w stopce: 16 px ikona w polu 44 × 44. Odstęp
	   rośnie z 16 do 28 px, żeby pola stykały się, a nie nachodziły. */
	.fbc-stopka__sociale { gap: 28px !important; }
	.fbc-stopka__sociale .wp-block-social-link-anchor { padding: 14px; margin: -14px; }

	/* Gwiazdki w formularzu opinii: 44 × 44, bez przerw między nimi. */
	body .fbc-produkt-opinie .fbc-ocena { gap: 0; }
	body .fbc-produkt-opinie .fbc-ocena__gwiazdka { padding: 9px; }

	/* Kropki, strzałki i ikony pozycjonowane — pole w `::after`. */
	.fbc-punkt::after,
	.fbc-udostepnij::after { content: ""; position: absolute; inset: -6px; }
	.fbc-postep__wstecz,
	.fbc-postep__dalej { position: relative; }
	.fbc-postep__wstecz::after,
	.fbc-postep__dalej::after { content: ""; position: absolute; inset: -6px; }
	/* Pigułki sekcji „Features": 6 px wysokości, 8 px przerwy — pole 44 px
	   w pionie i o 4 px szersze z każdej strony (stykają się). */
	.fbc-opis-kino__krok::after { content: ""; position: absolute; inset: -19px -4px; }

	/* Elementy ciasne — rośnie ich wysokość. */
	.fbc-recenzja__kanal-kafel { padding-block-end: 17px; }
	body .fbc-dodatki__przycisk { min-height: 44px; }   /* woocommerce.css ładuje się później */
	.fbc-kotwice__karta { min-width: 44px; justify-content: center; }
	.fbc-kb-chipy a { padding-block: 9px; }

	/* Panel filtrów w sklepie: wiersze wyboru i pola ceny. */
	.wp-block-woocommerce-product-filters .wc-block-product-filter-checkbox-list__label { min-height: 44px; }
	.wc-block-product-filter-price-slider__left input,
	.wc-block-product-filter-price-slider__right input { min-height: 40px; }
}

/* Konto na telefonie: link w górnym pasku otwartego menu zamiast ikony obok
   koszyka (klient 2026-09-26). Wysokość i oś wspólne z krzyżykiem zamykania. */
.fbc-header > .fbc-menu-konto { display: none; }
@media (max-width: 599.98px) {
	.fbc-header > .fbc-header__ikony > .wp-block-navigation-item { display: none; }
	html.has-modal-open .fbc-header > .fbc-menu-konto {
		position: fixed;
		z-index: 100001;   /* nakładka nawigacji siedzi na 100000 */
		inset-block-start: var(--fbc-menu-konto-top, 12px);
		inset-inline-start: var(--fbc-gutter);
		display: inline-flex;
		align-items: center;
		gap: 10px;
		min-height: 48px;
		color: var(--wp--preset--color--base);
		font-family: var(--wp--preset--font-family--mono);
		font-size: 0.78rem;
		letter-spacing: 0.1em;
		text-transform: uppercase;
		text-decoration: none;
	}
	html.has-modal-open .fbc-header > .fbc-menu-konto:hover { color: var(--wp--preset--color--purr-light); }
	/* Górny pas otwartego menu (konto + krzyżyk) z tłem nakładki: na niskim ekranie pozycje przewijały się
	   PRZEZ „MY ACCOUNT” (klient 2026-10-01, iPhone). Pas to pseudoelement nakładki (pod krzyżykiem, nad listą; „MY ACCOUNT” i tak stoi wyżej, z-index 100001; bez kliknięć), krzyżyk przypięty w tym samym miejscu co dotąd (13 px od góry, 5 px od prawej),
	   żeby nie odjeżdżał z listą i stał nad pasem. */
	html.has-modal-open .wp-block-navigation__responsive-container.is-menu-open::before {
		content: "";
		position: fixed;
		z-index: 50;
		inset: 0 0 auto 0;
		height: 72px;
		background: var(--wp--preset--color--ground-dark);
		box-shadow: 0 16px 16px -8px var(--wp--preset--color--ground-dark);
		pointer-events: none;
	}
	html.has-modal-open .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-close {
		position: fixed;
		z-index: 60;
		top: 13px;
		right: 5px;
		margin: 0;
	}
}


/* Telefon — sekcja z cytatem: bez minimalnej wysokości okna. Treść stała na
   środku ~740 px, więc pod paskiem postępu zostawało ~200 px pustego tła przed
   kartami historii (klient 2026-09-26: „za duża przerwa przed następną sekcją”). */
@media (max-width: 781.98px) {
	.fbc-glos-tlo { min-height: 0; justify-content: flex-start; }
}

/* Telefon i tablet — PurrOS (klient 2026-09-26: „to nie ma sensu na mobile”,
   „usuń tło grid”). Zrzuty wisiały nad całą sekcją, oderwane od listy, która je
   przełącza. Teraz: nadlinia, nagłówek i lead, zrzuty, a pod nimi lista i link.
   Kolumna tekstu przestaje być pudełkiem (`display: contents`), żeby zrzuty
   dało się wstawić między jej elementy. */
@media (max-width: 899.98px) {
	.fbc-purros-sekcja::before { display: none; }
	/* `display: contents` zabiera kolumnie tekstu jej górny padding — ten sam
	   odstęp (clamp jak na komputerze) stoi więc na kontenerze (2026-09-27/28:
	   „tu jest problem z padding top” — nadlinia kleiła się do sekcji z cytatem). */
	.fbc-purros { gap: 0; padding-block-start: clamp(3.5rem, 7vw, 6rem); }
	.fbc-purros__tekst { display: contents; }
	.fbc-purros__tekst > * { order: 1; padding-inline: var(--fbc-gutter); box-sizing: border-box; }
	.fbc-purros__stos { order: 2; margin-block: var(--wp--preset--spacing--60); }
	.fbc-purros__tekst > .fbc-purros__punkty,
	.fbc-purros__tekst > .fbc-link-dalej { order: 3; }
	.fbc-purros__tekst > .fbc-link-dalej { justify-self: start; margin-block: var(--wp--preset--spacing--50) var(--wp--preset--spacing--80); }
	/* Zwarty rytm w jednej kolumnie: marginesy z układu dwukolumnowego
	   rozpychały nagłówek, lead, zrzuty i listę. */
	.fbc-purros__tekst > h2 { margin-block: var(--wp--preset--spacing--30) 0; }
	.fbc-purros__tekst > .fbc-purros__lead { margin-block: var(--wp--preset--spacing--40) 0; }
	.fbc-purros__stos { margin-block: var(--wp--preset--spacing--50); }
	/* Lista z marginesem zamiast wcięcia — jej górna kreska ma tę samą szerokość co kreski między pozycjami. */
	.fbc-purros__tekst > .fbc-purros__punkty { margin-block-start: 0; padding-inline: 0; margin-inline: var(--fbc-gutter); }
	/* Zrzut w otwartej pozycji zamiast decku nad listą (klient 2026-09-28, wariant
	   rekomendowany): stuknięcie pozycji pokazuje jej ekran od razu pod opisem, a nie
	   poza ekranem nad listą. Auto-przełączanie wyłączone w purros.js. */
	.fbc-purros__stos { display: none; }
	.fbc-purros__zrzut { display: block; margin-block: var(--wp--preset--spacing--40) var(--wp--preset--spacing--30); border: 1px solid var(--wp--preset--color--line); background: #111114; }
	.fbc-purros__zrzut img { display: block; width: 100%; height: auto; }
	.fbc-purros__punkty li.is-active > span:last-of-type > i { max-height: 60em; }
	.fbc-purros__tekst > .fbc-purros__punkty { margin-block-start: var(--wp--preset--spacing--50); }
}
@media (min-width: 900px) { .fbc-purros__zrzut { display: none; } }

/* Karta akcesoriów na głównej (na miejscu schowanego RALLY): heel cup to mały
   przedmiot i bez dodatkowego marginesu wychodził większy niż pedały obok. */
.fbc-karta-produktu--akcesoria .fbc-karta-produktu__kadr img { padding: 16%; box-sizing: border-box; }
/* Zdjęcie grupowe (2026-09-30) ma oddech w pliku — bez dodatkowego marginesu. */
.fbc-karta-produktu--akcesoria .fbc-karta-produktu__kadr img.fbc-okladka-grupowa { padding: 0; }

/* --------------------------------------------------------------------------
   Wyszukiwarka w nagłówku (klient 2026-09-26). Lupa w grupie ikon (lupa,
   konto, koszyk), pasek z polem wysuwa się pod nagłówkiem na całą szerokość
   okna — naglowek.js. Pasek jest zawsze biały z ciemnym tekstem, także nad
   ciemnym hero, stąd `!important` przy kolorach: reguła „wszystko w nagłówku
   na biało” ma bardzo wysoką specyficzność (`body:has(…):not(…)`).
   -------------------------------------------------------------------------- */
.fbc-szukaj-przycisk {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 24px;
	height: 24px;
	padding: 0;
	margin: 0;
	border: 0;
	background: transparent;
	color: inherit;
	cursor: pointer;
	line-height: 0;
}
.fbc-szukaj-przycisk:hover,
.fbc-szukaj-przycisk[aria-expanded="true"] { color: var(--wp--preset--color--purr); }
.fbc-szukaj-przycisk:focus-visible { outline: 2px solid var(--wp--preset--color--purr); outline-offset: 4px; }

.fbc-header > .fbc-szukaj-panel {
	position: absolute;
	inset-block-start: 100%;
	inset-inline: 0;
	z-index: 40;
	padding: var(--wp--preset--spacing--40) var(--fbc-gutter);
	background: var(--wp--preset--color--base);
	border-block: 1px solid var(--wp--preset--color--line);
	box-shadow: 0 16px 28px -20px rgba(20, 20, 24, 0.22);
	color: var(--wp--preset--color--contrast) !important;
}
.fbc-header > .fbc-szukaj-panel[hidden] { display: none !important; }
.fbc-szukaj-panel__forma {
	display: flex;
	align-items: stretch;
	gap: var(--wp--preset--spacing--30);
	margin: 0;
}
.fbc-szukaj-panel__pole {
	flex: 1 1 auto;
	min-width: 0;
	min-height: 51px;
	box-sizing: border-box;
	padding: 0 16px;
	border: 1px solid var(--wp--preset--color--line-strong, #C6C9D0);
	border-radius: 2px;
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast) !important;
	font-family: var(--wp--preset--font-family--sans);
	font-size: max(16px, 1.05rem);
}
/* Fokus pola: po otwarciu skrypt od razu stawia w nim kursor, a pole tekstowe
   zawsze łapie `:focus-visible` — fioletowa ramka z odstępem wyglądała jak
   podwójna obwódka (klient 2026-09-27: „nie podoba mi się default focus zaraz
   po otwarciu”). Sygnałem fokusu jest ciemniejsze obramowanie samego pola. */
.fbc-szukaj-panel__pole:focus,
.fbc-szukaj-panel__pole:focus-visible {
	outline: none;
	border-color: var(--wp--preset--color--contrast);
}
/* Lupa w polu po lewej (2026-09-27: „to jest jeszcze brzydkie”) — goły prostokąt
   z uciętym placeholderem nie mówił, że to wyszukiwarka. Placeholder skrócony
   w parts/header.html, żeby mieścił się na 375 px. */
.fbc-szukaj-panel__pole {
	padding-inline-start: 46px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b6f78' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6.5'/%3E%3Cpath d='m16 16 4.5 4.5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: 16px 50%;
	background-size: 20px 20px;
}
.fbc-szukaj-panel__pole::placeholder { color: var(--wp--preset--color--contrast-3); opacity: 1; }
.fbc-szukaj-panel__pole::-webkit-search-cancel-button { display: none; }
.fbc-szukaj-panel__zamknij {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 51px;   /* kwadrat o wysokości pola */
	padding: 0;
	border: 1px solid var(--wp--preset--color--line-strong, #C6C9D0);
	border-radius: 2px;
	background: transparent;
	color: var(--wp--preset--color--contrast) !important;
	cursor: pointer;
}
.fbc-header .fbc-szukaj-panel svg { color: var(--wp--preset--color--contrast) !important; fill: none !important; }
.fbc-szukaj-panel__zamknij:hover { border-color: var(--wp--preset--color--purr); }
.fbc-szukaj-panel__zamknij:hover svg { color: var(--wp--preset--color--purr) !important; }
/* Podpowiedzi w kategoriach pod polem (naglowek.js, inc/szukaj.php; klient 2026-09-28). */
.fbc-szukaj-podpowiedzi {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
	gap: var(--wp--preset--spacing--40) var(--wp--preset--spacing--60);
	max-height: min(60vh, 32rem);
	overflow-y: auto;
	margin-block-start: var(--wp--preset--spacing--40);
	padding-block-start: var(--wp--preset--spacing--40);
	border-block-start: 1px solid var(--wp--preset--color--line);
	overscroll-behavior: contain;
}
.fbc-szukaj-podpowiedzi[hidden] { display: none; }
.fbc-podp__grupa { min-width: 0; }
.fbc-podp__tytul {
	margin: 0 0 var(--wp--preset--spacing--20);
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.68rem;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--contrast-3);
}
.fbc-podp__tytul span { color: var(--wp--preset--color--purr); }
.fbc-podp__pozycja {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--30);
	min-height: 44px;
	padding: 6px 8px;
	margin-inline: -8px;
	color: var(--wp--preset--color--contrast) !important;
	text-decoration: none;
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.35;
}
.fbc-podp__pozycja:hover,
.fbc-podp__pozycja[aria-selected="true"] { background: var(--wp--preset--color--base-2); }
.fbc-podp__pozycja[aria-selected="true"] .fbc-podp__nazwa { color: var(--wp--preset--color--purr); }
.fbc-podp__kadr { flex: 0 0 44px; width: 44px; height: 44px; background: var(--fbc-plyta, #e8e8eb); }
.fbc-podp__kadr img { display: block; width: 100%; height: 100%; object-fit: contain; padding: 3px; box-sizing: border-box; }
.fbc-podp__nazwa { flex: 1 1 auto; min-width: 0; }
.fbc-podp__nazwa mark { background: none; color: inherit; font-weight: 700; }
.fbc-podp__cena { flex: 0 0 auto; font-family: var(--wp--preset--font-family--mono); font-size: 0.78rem; color: var(--wp--preset--color--contrast-2); white-space: nowrap; }
.fbc-podp__wszystkie,
.fbc-podp__pusto {
	grid-column: 1 / -1;
	margin: 0;
	font-family: var(--wp--preset--font-family--mono);
	font-size: 0.72rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}
.fbc-podp__wszystkie { justify-self: start; color: var(--wp--preset--color--purr) !important; text-decoration: none; }
.fbc-podp__pusto { color: var(--wp--preset--color--contrast-3); text-transform: none; letter-spacing: 0; font-family: inherit; font-size: var(--wp--preset--font-size--small); }
@media (max-width: 599.98px) {
	/* Na telefonie zatwierdza klawiatura („Szukaj”) — przycisk zostaje tylko pole. */
	.fbc-szukaj-panel__forma > .wp-block-button__link { display: none; }
	.fbc-header > .fbc-szukaj-panel { padding-block: var(--wp--preset--spacing--30); }
}
@media (max-width: 899.98px), (hover: none) and (pointer: coarse) {
	/* Pole dotyku 44 px wokół lupy, jak przy koncie i koszyku. */
	.fbc-szukaj-przycisk { position: relative; }
	.fbc-szukaj-przycisk::after { content: ""; position: absolute; inset: -10px -8px; }
}

/* Wyniki ogólnego wyszukiwania w grupach (kb-szukaj.php). */
.fbc-szukaj-grupa { margin: var(--wp--preset--spacing--70) 0 var(--wp--preset--spacing--30); font-size: var(--wp--preset--font-size--x-large); }
.fbc-szukaj-grupa:first-child { margin-block-start: 0; }
.fbc-szukaj-grupa span { font-family: var(--wp--preset--font-family--mono); font-size: 0.6em; font-weight: 400; color: var(--wp--preset--color--contrast-3); }
.fbc-szukaj-produkt a { grid-template-columns: 64px minmax(0, 1fr) auto; align-items: center; }
.fbc-szukaj-produkt__kadr { display: block; width: 64px; height: 64px; background: var(--fbc-plyta, #e8e8eb); }
.fbc-szukaj-produkt__kadr img { display: block; width: 100%; height: 100%; object-fit: contain; padding: 6px; box-sizing: border-box; }
.fbc-szukaj-produkt__cena { font-family: var(--wp--preset--font-family--mono); font-size: 0.85rem; color: var(--wp--preset--color--contrast-2); white-space: nowrap; }
/* Lupa to sam obrys — reguła „wszystko w nagłówku na biało” daje ikonom `fill`. */
.fbc-header .fbc-szukaj-przycisk svg { fill: none !important; }
/* Odstęp od menu tekstowego stoi na PIERWSZEJ ikonie (lupie), nie na koncie —
   inaczej lupa i konto stały dalej od siebie niż konto i koszyk. */
@media (min-width: 1200px) {
	.fbc-header .fbc-konto { margin-inline-start: 0; }
	.fbc-header .fbc-szukaj-przycisk { margin-inline-start: var(--wp--preset--spacing--50); }
}
@media (max-width: 599.98px) {
	.fbc-header .fbc-szukaj-panel__forma > .wp-block-button__link { display: none !important; }
}
