			/* System tokenow kolorystycznych FameFrame - jedyne miejsce definicji, reszta modulow
			   uzywa var(--ff-*) zamiast wlasnych literalow hex (patrz audyt: brak tokenizacji). */
			:root{
				--ff-ink:#2B1F14;
				--ff-body:#5a4632;
				--ff-label:#5a3a10;
				--ff-accent:#B8962E;
				--ff-accent-dark:#a3831f;
				--ff-border:#E7DCC6;
				--ff-cream:#FFFDF9;
			}
			.ff-tiles{padding:56px 20px;background:var(--ff-cream);}
			.ff-tiles__heading{max-width:1240px;margin:0 auto 26px;text-align:center;font-family:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;font-weight:700;font-size:32px;line-height:1.15;color:var(--ff-ink);}
			.ff-tiles__grid{max-width:1240px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px;}
			.ff-tiles__grid--okazje{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));}
			.ff-tile{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:200px;padding:20px;border-radius:16px;border:1px solid var(--ff-border);background:#f2e9dc center/cover no-repeat;color:#fff;text-decoration:none;overflow:hidden;transition:transform .28s ease,box-shadow .28s ease;}
			.ff-tile:hover{transform:translateY(-6px);box-shadow:0 18px 40px rgba(40,28,10,.14);}
			.ff-tile__label{font-size:19px;font-weight:700;line-height:1.2;text-shadow:0 1px 6px rgba(0,0,0,.35);}
			.ff-tile__count{margin-top:4px;font-size:12.5px;opacity:.92;text-shadow:0 1px 4px rgba(0,0,0,.35);}
			.ff-tile--okazja{min-height:190px;}
			.ff-tile--pet{outline:2px solid var(--ff-accent);outline-offset:-2px;}
			.ff-tile--pet::after{content:"Bestseller";position:absolute;top:12px;right:12px;padding:3px 10px;border-radius:999px;background:var(--ff-accent);color:var(--ff-ink);font-size:11px;font-weight:800;letter-spacing:.03em;text-shadow:none;}
			.ff-tiles--okazje{background:#fbf4ea;}

			/* Hero split-screen (kopia + oprawiony portret), paleta jasna */
			/* Elementor owija shortcode w kontener flex (e-con e-child) z flex:0 0 auto -
			   bez tego .ff-hero kurczy sie do szerokosci tresci zamiast wypelnic sekcje. */
			.e-con.e-child:has(.ff-hero){
				flex:1 1 100% !important;width:100% !important;
				padding-top:0 !important;padding-bottom:0 !important;
				margin:0 !important;
			}
			.elementor-widget-shortcode:has(.ff-hero),
			.elementor-widget-shortcode:has(.ff-hero) .elementor-widget-container{width:100%;}
			/* Elementor "boxed" kontenery (e-con-boxed / e-con-inner) kurcza sekcje do ~1140px -
			   hero ma byc pelnej szerokosci (edge-to-edge), tak jak poprzednio ze zdjeciami w tle. */
			.e-con-boxed:has(.ff-hero),
			.e-con-inner:has(.ff-hero){max-width:none !important;width:100% !important;}

			/* Tlo sekcji jest pelnej szerokosci (edge-to-edge), ale tresc (tekst + ramka) dostaje
			   wlasny, wyśrodkowany kontener z maksymalna szerokoscia - inaczej przy szerokich
			   ekranach 2-kolumnowa siatka rozciaga sie na cala szerokosc i miedzy kolumnami
			   robi sie martwa, pusta przestrzen. */
			.ff-hero{
				width:100%;box-sizing:border-box;overflow:hidden;
				background:linear-gradient(160deg,#FFF6E6 0%,#FCEACB 100%);
			}
			/* Naglowek jest przezroczysty i lezy NA hero (`#masthead` ma position:absolute), a `.ff-hero`
			   nie mial zadnego odstepu od gory - pierwszy tekst startowal 21px pod menu, przez co menu
			   wygladalo na sklejone z trescia. Padding idzie na `.ff-hero`, a nie na `.ff-hero__copy`,
			   zeby gradient zostal pelnoekranowy i zeby obie kolumny zjechaly rowno (siatka ma
			   align-items:center, wiec ruszanie tylko kolumny z tekstem rozjechaloby ja wzgledem zdjecia).
			   Tylko od 900px - ponizej hero przechodzi w jedna kolumne i odstep jest juz duzy (555px). */
			@media (min-width:900px){
				.ff-hero{padding-top:24px;}
			}
			.ff-hero__inner{
				display:grid;grid-template-columns:1fr;gap:0;
				max-width:1360px;margin:0 auto;
				padding:0 24px;box-sizing:border-box;
			}
			@media (min-width:768px){.ff-hero__inner{padding:0 48px;}}
			@media (min-width:1200px){.ff-hero__inner{padding:0 64px;}}
			@media (min-width:900px){
				.ff-hero__inner{grid-template-columns:1fr 1fr;align-items:center;gap:48px;min-height:560px;}
			}
			.ff-hero__copy{display:flex;flex-direction:column;justify-content:center;padding:48px 0 40px;order:2;text-align:left;}
			@media (min-width:900px){.ff-hero__copy{padding:56px 0;order:1;}}
			.ff-hero__copy .ff-hero2__title{margin-left:0;margin-right:0;max-width:14ch;}
			.ff-hero__copy .ff-hero2__promise{justify-content:flex-start;margin-left:0;margin-right:0;align-self:stretch;}
			.ff-hero__copy .ff-hero2__q{text-align:left;}
			.ff-hero__copy .ff-hero2__cards{margin-left:0;margin-right:0;max-width:none;align-self:stretch;}
			.ff-hero__copy .ff-hero2__custom{align-self:flex-start;}

			.ff-hero__visual{position:relative;order:1;padding:32px 0 0;display:flex;align-items:center;justify-content:center;}
			@media (min-width:900px){.ff-hero__visual{order:2;padding:40px 0;height:100%;}}
			.ff-hero__frame{position:relative;width:100%;max-width:380px;aspect-ratio:4/5;}
			.ff-hero__frame-border{
				position:absolute;inset:0;border-radius:6px;
				background:linear-gradient(155deg,#D9BB84,#C7A254 45%,#D9BB84);
				box-shadow:0 20px 50px rgba(60,45,20,.14);
			}
			.ff-hero__frame-inner{
				position:absolute;inset:16px;border-radius:3px;overflow:hidden;
				background:radial-gradient(circle at 30% 22%,rgba(255,255,255,.55),transparent 45%),
					linear-gradient(160deg,#FFF3DC,#FCE9C4 60%,#E7C98C 130%);
				display:flex;align-items:center;justify-content:center;
			}
			.ff-hero__frame-inner img{width:100% !important;height:100% !important;object-fit:cover;display:block;}
			.ff-hero__frame-inner svg{width:58%;height:58%;opacity:.85;}
			.ff-hero__corner{position:absolute;width:30px;height:30px;border:2px solid rgba(255,255,255,.65);}
			.ff-hero__corner--tl{top:10px;left:10px;border-right:none;border-bottom:none;}
			.ff-hero__corner--br{bottom:10px;right:10px;border-left:none;border-top:none;}

			/* Suwak przed/po wewnatrz ramki - ten sam mechanizm co dawna sekcja "Przed i po realizacji" */
			/* touch-action:pan-y - przewijanie strony palcem po zdjeciu zostaje przy przegladarce,
			   JS dostaje tylko gesty poziome (patrz rozpoznawanie kierunku w hero_compare_script). */
			.ff-hero__compare{cursor:ew-resize;user-select:none;touch-action:pan-y;}
			.ff-hero__compare-base,.ff-hero__compare-overlay{position:absolute;inset:0;}
			.ff-hero__compare-base img,.ff-hero__compare-overlay img{width:100% !important;height:100% !important;object-fit:cover;display:block;pointer-events:none;}
			.ff-hero__compare-overlay{width:50%;overflow:hidden;border-right:1px solid rgba(255,255,255,.55);}
			.ff-hero__compare-divider{position:absolute;top:0;bottom:0;left:50%;width:0;pointer-events:none;z-index:2;}
			.ff-hero__compare-divider::before{content:"";position:absolute;top:0;bottom:0;left:-1px;width:2px;background:rgba(255,255,255,.92);box-shadow:0 0 0 1px rgba(197,155,82,.18);}
			.ff-hero__compare-handle{
				position:absolute;top:50%;left:0;width:44px;height:44px;transform:translate(-50%,-50%);
				border-radius:50%;border:1px solid rgba(197,155,82,.4);background:rgba(255,252,246,.96);
				box-shadow:0 8px 20px rgba(60,42,17,.18);
			}
			.ff-hero__compare-handle::before,.ff-hero__compare-handle::after{
				content:"";width:8px;height:8px;border-top:2px solid #C7A254;border-right:2px solid #C7A254;position:absolute;top:50%;
			}
			.ff-hero__compare-handle::before{left:13px;transform:translateY(-50%) rotate(-135deg);}
			.ff-hero__compare-handle::after{right:13px;transform:translateY(-50%) rotate(45deg);}
			.ff-hero__compare-labels{position:absolute;inset:12px 12px auto 12px;display:flex;justify-content:space-between;gap:8px;pointer-events:none;z-index:3;}
			.ff-hero__compare-label{
				display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;
				background:rgba(255,252,246,.92);border:1px solid rgba(234,223,206,.95);color:var(--ff-ink);
				font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;box-shadow:0 4px 12px rgba(53,39,20,.08);
			}
			.ff-hero__caption{
				position:absolute;left:50%;bottom:-16px;transform:translateX(-50%);
				max-width:calc(100% - 20px);width:max-content;
				background:#fff;border:1px solid #EFE4D0;color:var(--ff-body);font-size:11.5px;line-height:1.4;letter-spacing:.02em;
				text-align:center;padding:7px 16px;border-radius:16px;box-shadow:0 8px 20px rgba(60,45,20,.12);
			}
			@media (max-width:640px){
				.ff-hero__inner{padding:0 20px;}
				.ff-hero__copy{padding:36px 0 28px;}
				.ff-hero__visual{padding:20px 0 0;}
				/* Ramka ma proporcje 4/5, wiec wysokosc = szerokosc * 1.25.
				   Ograniczenie szerokosci do 42vh trzyma calosc kolo 52vh - pod zdjeciem
				   zostaje pas tresci, ktory daje palcowi bezpieczne miejsce na przewijanie. */
				.ff-hero__frame{max-width:min(380px,42vh);}
			}

			/* Hero router (Wariant B) - wersja kompaktowa (centrowana, powtorka na dole strony) */
			.ff-hero2{max-width:880px;margin:0 auto;text-align:center;padding:56px 16px 48px;}
			.ff-hero2--compact{padding:48px 16px;}
			.ff-hero2__title--h2{font-size:32px;font-family:inherit;max-width:none;}
			.ff-hero2__eyebrow{display:inline-block;font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--ff-label);font-weight:600;margin:0 0 18px;}
			.ff-hero2__title{
				font-family:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
				font-weight:700;font-size:clamp(34px,5vw,52px);line-height:1.08;letter-spacing:-.01em;
				text-transform:none;color:var(--ff-ink);margin:0 auto 22px;max-width:16ch;text-wrap:balance;
			}
			.ff-hero2__promise{display:flex;align-items:center;justify-content:center;gap:10px;font-size:16px;line-height:1.5;color:var(--ff-body);max-width:560px;margin:0 auto 34px;}
			.ff-hero2__promise strong{color:var(--ff-ink);font-weight:700;}
			.ff-hero2__check{flex:0 0 auto;width:22px;height:22px;border-radius:50%;background:var(--ff-accent);display:inline-flex;align-items:center;justify-content:center;}
			.ff-hero2__check svg{width:12px;height:12px;display:block;}
			.ff-hero2__q{font-size:13px;letter-spacing:.06em;font-weight:700;color:var(--ff-label);margin:0 0 18px;text-transform:uppercase;}
			.ff-hero2__cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;max-width:700px;margin:0 auto 28px;}
			.ff-hero2__card{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--ff-border);border-radius:16px;padding:18px 12px 16px;text-decoration:none;color:var(--ff-ink);overflow:hidden;transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease;}
			.ff-hero2__card:hover,.ff-hero2__card:focus-visible{transform:translateY(-5px);box-shadow:0 16px 32px rgba(40,28,10,.16);border-color:var(--ff-accent);}
			.ff-hero2__thumb{width:52px;height:52px;border-radius:50%;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background:transparent;border:1.5px solid #C9A45B;}
			.ff-hero2__card svg{width:24px;height:24px;color:var(--ff-accent);}
			.ff-hero2__card span{font-size:14.5px;font-weight:600;}
			.ff-hero2__card--pet{border-color:var(--ff-accent);border-width:2px;}
			.ff-hero2__card--pet .ff-hero2__thumb{border-color:var(--ff-accent);}
			.ff-hero2__card--pet::after{
				content:"Bestseller";position:absolute;top:8px;right:8px;padding:3px 9px;border-radius:999px;
				background:var(--ff-accent);color:var(--ff-ink);font-size:9px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;
				box-shadow:0 2px 6px rgba(40,28,10,.25);
			}
			.ff-hero2__custom{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-size:15px;font-weight:700;color:var(--ff-label);text-decoration:none;margin:0;}
			.ff-hero2__custom span{
				background-image:linear-gradient(var(--ff-label),var(--ff-label));background-size:0% 1px;background-repeat:no-repeat;background-position:left bottom;
				transition:background-size .25s ease;padding-bottom:2px;
			}
			.ff-hero2__custom:hover span,.ff-hero2__custom:focus-visible span{background-size:100% 1px;}
			@media (max-width:640px){
				.ff-hero2{padding:40px 16px 32px;}
				.ff-hero2--compact{padding:36px 16px;}
				.ff-hero2__title{font-size:31px;}
				.ff-hero2__eyebrow{margin-bottom:16px;}
				.ff-hero2__promise{margin-bottom:24px;}
				.ff-hero2__q{margin-bottom:16px;}
				.ff-hero2__cards{grid-template-columns:repeat(2,1fr);margin-bottom:24px;}
			}
			@media (prefers-reduced-motion:reduce){
				.ff-hero2__card,.ff-hero2__custom{transition:none;}
			}
			@media (max-width:640px){
				.ff-tiles{padding:40px 16px;}
				.ff-tiles__heading{font-size:25px;}
				.ff-tile{min-height:150px;}
			}

			/* Baner treści zależnej od okazji (archiwum /okazja/... i kontekstowy na produkcie) */
			.ff-okazja-banner{
				border-radius:16px;padding:22px 24px;margin:0 0 28px;
				background:#fbf4ea center/cover no-repeat;border:1px solid #EFE4D0;
			}
			.ff-okazja-banner--archive{display:none;}
			.ff-okazja-banner--archive .ff-okazja-banner__eyebrow{color:#F5E3B8;}
			.ff-okazja-banner--archive .ff-okazja-banner__tagline{color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.25);}
			.ff-okazja-banner--product{background-color:#FFF6E6;}
			.ff-okazja-banner__eyebrow{display:block;font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:var(--ff-label);margin:0 0 8px;}
			.ff-okazja-banner__tagline{margin:0;font-size:16px;line-height:1.5;color:var(--ff-ink);max-width:60ch;}

			/* CTA „Projekt indywidualny" w menu głównym */
			.ff-menu-cta > a,
			.ff-menu-cta > .menu-link{
				background:transparent;color:var(--ff-ink) !important;
				border:1.5px solid var(--ff-accent);border-radius:999px;padding:6px 15px !important;margin-left:6px;
				font-weight:600;line-height:1.1;transition:background .18s ease;
			}
			.ff-menu-cta > a:hover,
			.ff-menu-cta > .menu-link:hover{background:#f7eac7;color:var(--ff-ink) !important;}
			.ff-menu-cta.menu-item::before,
			.ff-menu-cta.menu-item::after{display:none !important;}

			/* --- Slad lap w kategorii „Pupile" ---------------------------------------------
			   Motyw przypisany do JEDNEJ kategorii, zaczepiony o slug (`term-...`), a nie o ID -
			   ID termu rozni sie miedzy lokalnym a produkcja.

			   Trzy decyzje, ktore warto znac przed zmienianiem:

			   1. To `background-image` na kontenerze, a nie warstwa `::before`. Tlo maluje sie
			      automatycznie pod cala trescia elementu, wiec nie trzeba walczyc z z-index
			      ani ustawiac `pointer-events`. Zadnego ryzyka, ze dekoracja przykryje link.
			   2. `no-repeat` i pozycja przy gornej krawedzi - slad ma zostac w pasie okruszkow,
			      naglowka i filtrow. Pod siatka produktow byloby go widac pod zdjeciami, a te sa
			      tu towarem; cokolwiek pod nimi konkuruje o uwage i obniza odbior jakosci.
			   3. SVG siedzi w data URI: zero dodatkowego zapytania, ostrosc na kazdym ekranie
			      i brak pliku do wgrania przez FTP. Lapa jest zdefiniowana raz w <defs> i powielona
			      przez <use>, dlatego adres jest krotki mimo szesciu sladow.

			   Krycie 13% jest celowo na granicy widocznosci - to ma byc zauwazone katem oka,
			   a nie odczytane. Wyzej zaczyna wygladac tanio. */
			body.term-dla-wlasciciela-pupila .ast-woocommerce-container{
				background-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 560 560'><defs><g id='p' fill='%23B8962E'><ellipse cx='20' cy='26' rx='11' ry='9'/><ellipse cx='8' cy='12' rx='4.2' ry='5.6'/><ellipse cx='18' cy='6' rx='4.4' ry='6'/><ellipse cx='28' cy='8' rx='4.2' ry='5.8'/><ellipse cx='35' cy='17' rx='3.8' ry='5'/></g></defs><g fill-opacity='.11'><use href='%23p' transform='translate(30,40) rotate(-18) scale(3.4)'/><use href='%23p' transform='translate(330,150) rotate(14) scale(3)'/><use href='%23p' transform='translate(120,330) rotate(-34) scale(3.8)'/><use href='%23p' transform='translate(400,410) rotate(6) scale(3.2)'/></g></svg>");
				background-repeat:repeat;
				background-position:center top;
				background-size:560px 560px;
				opacity:1;
			}
			/* Kafel produktu jest kryjaco bialy, wiec tekstura ginelaby pod nim i zostawaly z niej
			   tylko 20-pikselowe paski w odstepach - to czyta sie jak usterka, nie jak tlo.
			   Lekka przezroczystosc sprawia, ze slad przechodzi POD kaflem, tak jak ma.
			   Zdjecie produktu pozostaje kryjace - tekstura nigdy nie wchodzi na sam towar. */
			body.term-dla-wlasciciela-pupila ul.products li.product{
				background-color:rgba(255,255,255,.62);
			}
			/* Dekoracja nie ma sensu na wydruku i tylko zjada toner. */
			@media print{
				body.term-dla-wlasciciela-pupila .ast-woocommerce-container{background-image:none;}
			}
