/*!
 * qTip2 - Pretty powerful tooltips - v2.0.1-4-g
 * http://qtip2.com
 *
 * Copyright (c) 2013 Craig Michael Thompson
 * Released under the MIT, GPL licenses
 * http://jquery.org/license
 *
 * Date: Fri Jan 4 2013 04:05 GMT+0000
 * Plugins: svg ajax tips modal viewport imagemap ie6
 * Styles: basic css3
 */

/* Core qTip styles */
.qtip, .qtip{
	position: absolute;
	left: -28000px;
	top: -28000px;
	display: none;

	max-width: 280px;
	min-width: 50px;

	direction: ltr;
}

	.qtip-content{
		position: relative;
		padding: 5px 9px;
		overflow: hidden;

		text-align: left;
		word-wrap: break-word;
	}

	.qtip-titlebar{
		position: relative;
		padding: 5px 35px 5px 10px;
		overflow: hidden;

		border-width: 0 0 1px;
		font-weight: bold;
	}

	.qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }

	/* Default close button class */
	.qtip-close{
		position: absolute;
		right: -9px; top: -9px;

		cursor: pointer;
		outline: medium none;

		border-width: 1px;
		border-style: solid;
		border-color: transparent;
	}

		.qtip-titlebar .qtip-close{
			right: 4px; top: 50%;
			margin-top: -9px;
		}
	
		* html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */

		.qtip-titlebar .ui-icon,
		.qtip-icon .ui-icon{
			display: block;
			text-indent: -1000em;
			direction: ltr;
			vertical-align: middle;
		}

		.qtip-icon, .qtip-icon .ui-icon{
			-moz-border-radius: 3px;
			-webkit-border-radius: 3px;
			border-radius: 3px;
			text-decoration: none;
		}

			.qtip-icon .ui-icon{
				width: 18px;
				height: 14px;

				text-align: center;
				text-indent: 0;
				font: normal bold 10px/13px Tahoma,sans-serif;

				color: inherit;
				background: transparent none no-repeat -100em -100em;
			}


/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
.qtip-focus{}

/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
.qtip-hover{}

/* Default tooltip style */
.qtip-default{
	border-width: 1px;
	border-style: solid;
	border-color: #F1D031;

	background-color: #FFFFA3;
	color: #555;
}

	.qtip-default .qtip-titlebar{
		background-color: #FFEF93;
	}

	.qtip-default .qtip-icon{
		border-color: #CCC;
		background: #F1F1F1;
		color: #777;
	}
	
	.qtip-default .qtip-titlebar .qtip-close{
		border-color: #AAA;
		color: #111;
	}


/* Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
.qtip-shadow{
	-webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
	-moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
	box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
}


/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
.qtip-rounded{
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	border-radius: 5px;
}

.qtip-rounded .qtip-titlebar{
	-moz-border-radius: 5px 5px 0 0;
	-webkit-border-radius: 5px 5px 0 0;
	border-radius: 5px 5px 0 0;
}


/* IE9 fix - removes all filters */
.qtip:not(.ie9haxors) div.qtip-content,
.qtip:not(.ie9haxors) div.qtip-titlebar{
	filter: none;
	-ms-filter: none;
}


/* Tips plugin */
.qtip .qtip-tip{
	margin: 0 auto;
	overflow: hidden;
	z-index: 10;
}

	.qtip .qtip-tip,
	.qtip .qtip-tip .qtip-vml{
		position: absolute;

		color: #123456;
		background: transparent;
		border: 0 dashed transparent;
	}
	
	.qtip .qtip-tip canvas{ top: 0; left: 0; }

	.qtip .qtip-tip .qtip-vml{
		behavior: url(#default#VML);
		display: inline-block;
		visibility: visible;
	}
/* Modal plugin */
#qtip-overlay{
	position: fixed;
	left: -10000em;
	top: -10000em;
}

	/* Applied to modals with show.modal.blur set to true */
	#qtip-overlay.blurs{ cursor: pointer; }

	/* Change opacity of overlay here */
	#qtip-overlay div{
		position: absolute;
		left: 0; top: 0;
		width: 100%; height: 100%;

		background-color: black;

		opacity: 0.7;
		filter:alpha(opacity=70);
		-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
	}


/* IE6 Modal plugin fix */
.qtipmodal-ie6fix{
	position: absolute !important;
}
/* Slider */
.slick-slider
{
    position: relative;

    display: block;
    box-sizing: border-box;

    -webkit-user-select: none;
       -moz-user-select: none;
        -ms-user-select: none;
            user-select: none;

    -webkit-touch-callout: none;
    -khtml-user-select: none;
    -ms-touch-action: pan-y;
        touch-action: pan-y;
    -webkit-tap-highlight-color: transparent;
}

.slick-list
{
    position: relative;

    display: block;
    overflow: hidden;

    margin: 0;
    padding: 0;
}
.slick-list:focus
{
    outline: none;
}
.slick-list.dragging
{
    cursor: pointer;
    cursor: hand;
}

.slick-slider .slick-track,
.slick-slider .slick-list
{
    -webkit-transform: translate3d(0, 0, 0);
       -moz-transform: translate3d(0, 0, 0);
        -ms-transform: translate3d(0, 0, 0);
         -o-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
}

.slick-track
{
    position: relative;
    top: 0;
    left: 0;

    display: block;
}
.slick-track:before,
.slick-track:after
{
    display: table;

    content: '';
}
.slick-track:after
{
    clear: both;
}
.slick-loading .slick-track
{
    visibility: hidden;
}

.slick-slide
{
    display: none;
    float: left;

    height: 100%;
    min-height: 1px;
}
[dir='rtl'] .slick-slide
{
    float: right;
}
.slick-slide img
{
    display: block;
}
.slick-slide.slick-loading img
{
    display: none;
}
.slick-slide.dragging img
{
    pointer-events: none;
}
.slick-initialized .slick-slide
{
    display: block;
}
.slick-loading .slick-slide
{
    visibility: hidden;
}
.slick-vertical .slick-slide
{
    display: block;

    height: auto;

    border: 1px solid transparent;
}
.slick-arrow.slick-hidden {
    display: none;
}

/* Magnific Popup CSS */
.mfp-bg {
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 104200;
    overflow: hidden;
    position: fixed;
    background: #0b0b0b;
    opacity: 0.8;
    filter: alpha(opacity=80); }

.mfp-wrap {
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 104300;
    position: fixed;
    outline: none !important;
    -webkit-backface-visibility: hidden; }

.mfp-container {
    text-align: center;
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    padding: 0 8px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box; }

.mfp-container:before {
    content: '';
    display: inline-block;
    height: 100%;
    vertical-align: middle; }

.mfp-align-top .mfp-container:before {
    display: none; }

.mfp-content {
    position: relative;
    display: inline-block;
    vertical-align: middle;
    margin: 0 auto;
    text-align: left;
    z-index: 1045; }

.mfp-inline-holder .mfp-content,
.mfp-ajax-holder .mfp-content {
    width: 100%;
    cursor: auto; }

.mfp-ajax-cur {
    cursor: progress; }

.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
    cursor: -moz-zoom-out;
    cursor: -webkit-zoom-out;
    cursor: zoom-out; }

.mfp-zoom {
    cursor: pointer;
    cursor: -webkit-zoom-in;
    cursor: -moz-zoom-in;
    cursor: zoom-in; }

.mfp-auto-cursor .mfp-content {
    cursor: auto; }

.mfp-close,
.mfp-arrow,
.mfp-preloader,
.mfp-counter {
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none; }

.mfp-loading.mfp-figure {
    display: none; }

.mfp-hide {
    display: none !important; }

.mfp-preloader {
    color: #CCC;
    position: absolute;
    top: 50%;
    width: auto;
    text-align: center;
    margin-top: -0.8em;
    left: 8px;
    right: 8px;
    z-index: 1044; }
.mfp-preloader a {
    color: #CCC; }
.mfp-preloader a:hover {
    color: #FFF; }

.mfp-s-ready .mfp-preloader {
    display: none; }

.mfp-s-error .mfp-content {
    display: none; }

button.mfp-close,
button.mfp-arrow {
    overflow: visible;
    cursor: pointer;
    background: transparent;
    border: 0;
    -webkit-appearance: none;
    display: block;
    outline: none;
    padding: 0;
    z-index: 1046;
    -webkit-box-shadow: none;
    box-shadow: none; }

button::-moz-focus-inner {
    padding: 0;
    border: 0; }

.mfp-close {
    width: 44px;
    height: 44px;
    line-height: 44px;
    position: absolute;
    right: 0;
    top: 0;
    text-decoration: none;
    text-align: center;
    opacity: 0.65;
    filter: alpha(opacity=65);
    padding: 0 0 18px 10px;
    color: #FFF;
    font-style: normal;
    font-size: 28px;
    font-family: Arial, Baskerville, monospace; }
.mfp-close:hover,
.mfp-close:focus {
    opacity: 1;
    filter: alpha(opacity=100); }
.mfp-close:active {
    top: 1px; }

.mfp-close-btn-in .mfp-close {
    color: #333; }

.mfp-image-holder .mfp-close,
.mfp-iframe-holder .mfp-close {
    color: #FFF;
    right: -6px;
    text-align: right;
    padding-right: 6px;
    width: 100%; }

.mfp-counter {
    position: absolute;
    top: 0;
    right: 0;
    color: #CCC;
    font-size: 12px;
    line-height: 18px;
    white-space: nowrap; }

.mfp-arrow {
    position: absolute;
    opacity: 0.65;
    filter: alpha(opacity=65);
    margin: 0;
    top: 50%;
    margin-top: -55px;
    padding: 0;
    width: 90px;
    height: 110px;
    -webkit-tap-highlight-color: transparent; }
.mfp-arrow:active {
    margin-top: -54px; }
.mfp-arrow:hover,
.mfp-arrow:focus {
    opacity: 1;
    filter: alpha(opacity=100); }
.mfp-arrow:before,
.mfp-arrow:after,
.mfp-arrow .mfp-b,
.mfp-arrow .mfp-a {
    content: '';
    display: block;
    width: 0;
    height: 0;
    position: absolute;
    left: 0;
    top: 0;
    margin-top: 35px;
    margin-left: 35px;
    border: medium inset transparent; }
.mfp-arrow:after,
.mfp-arrow .mfp-a {
    border-top-width: 13px;
    border-bottom-width: 13px;
    top: 8px; }
.mfp-arrow:before,
.mfp-arrow .mfp-b {
    border-top-width: 21px;
    border-bottom-width: 21px;
    opacity: 0.7; }

.mfp-arrow-left {
    left: 0; }
.mfp-arrow-left:after,
.mfp-arrow-left .mfp-a {
    border-right: 17px solid #FFF;
    margin-left: 31px; }
.mfp-arrow-left:before,
.mfp-arrow-left .mfp-b {
    margin-left: 25px;
    border-right: 27px solid #3F3F3F; }

.mfp-arrow-right {
    right: 0; }
.mfp-arrow-right:after,
.mfp-arrow-right .mfp-a {
    border-left: 17px solid #FFF;
    margin-left: 39px; }
.mfp-arrow-right:before,
.mfp-arrow-right .mfp-b {
    border-left: 27px solid #3F3F3F; }

.mfp-iframe-holder {
    padding-top: 40px;
    padding-bottom: 40px; }
.mfp-iframe-holder .mfp-content {
    line-height: 0;
    width: 100%;
    max-width: 900px; }
.mfp-iframe-holder .mfp-close {
    top: -40px; }

.mfp-iframe-scaler {
    width: 100%;
    height: 0;
    overflow: hidden;
    padding-top: 56.25%; }
.mfp-iframe-scaler iframe {
    position: absolute;
    display: block;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
    background: #000; }

/* Main image in popup */
img.mfp-img {
    width: auto;
    max-width: 100%;
    height: auto;
    display: block;
    line-height: 0;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    padding: 40px 0 40px;
    margin: 0 auto; }

/* The shadow behind the image */
.mfp-figure {
    line-height: 0; }
.mfp-figure:after {
    content: '';
    position: absolute;
    left: 0;
    top: 40px;
    bottom: 40px;
    display: block;
    right: 0;
    width: auto;
    height: auto;
    z-index: -1;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
    background: #444; }
.mfp-figure small {
    color: #BDBDBD;
    display: block;
    font-size: 12px;
    line-height: 14px; }
.mfp-figure figure {
    margin: 0; }

.mfp-bottom-bar {
    margin-top: -36px;
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    cursor: auto; }

.mfp-title {
    text-align: left;
    line-height: 18px;
    color: #F3F3F3;
    word-wrap: break-word;
    padding-right: 36px; }

.mfp-image-holder .mfp-content {
    max-width: 100%; }

.mfp-gallery .mfp-image-holder .mfp-figure {
    cursor: pointer; }

@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
    /**
         * Remove all paddings around the image on small screen
         */
    .mfp-img-mobile .mfp-image-holder {
        padding-left: 0;
        padding-right: 0; }
    .mfp-img-mobile img.mfp-img {
        padding: 0; }
    .mfp-img-mobile .mfp-figure:after {
        top: 0;
        bottom: 0; }
    .mfp-img-mobile .mfp-figure small {
        display: inline;
        margin-left: 5px; }
    .mfp-img-mobile .mfp-bottom-bar {
        background: rgba(0, 0, 0, 0.6);
        bottom: 0;
        margin: 0;
        top: auto;
        padding: 3px 5px;
        position: fixed;
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box; }
    .mfp-img-mobile .mfp-bottom-bar:empty {
        padding: 0; }
    .mfp-img-mobile .mfp-counter {
        right: 5px;
        top: 3px; }
    .mfp-img-mobile .mfp-close {
        top: 0;
        right: 0;
        width: 35px;
        height: 35px;
        line-height: 35px;
        background: rgba(0, 0, 0, 0.6);
        position: fixed;
        text-align: center;
        padding: 0; } }

@media all and (max-width: 900px) {
    .mfp-arrow {
        -webkit-transform: scale(0.75);
        transform: scale(0.75); }
    .mfp-arrow-left {
        -webkit-transform-origin: 0;
        transform-origin: 0; }
    .mfp-arrow-right {
        -webkit-transform-origin: 100%;
        transform-origin: 100%; }
    .mfp-container {
        padding-left: 6px;
        padding-right: 6px; } }

.mfp-ie7 .mfp-img {
    padding: 0; }

.mfp-ie7 .mfp-bottom-bar {
    width: 600px;
    left: 50%;
    margin-left: -300px;
    margin-top: 5px;
    padding-bottom: 5px; }

.mfp-ie7 .mfp-container {
    padding: 0; }

.mfp-ie7 .mfp-content {
    padding-top: 44px; }

.mfp-ie7 .mfp-close {
    top: 0;
    right: 0;
    padding-top: 0; }
@charset "utf-8";

/***************************************************
Design tokens — Markowe Kwiaty
Lifting graficzny, krok 1. Wartości pochodzą z sekcji 3.2–3.7 briefu.

Zasada: żaden komponent nie zawiera hexa. Kolor wchodzi wyłącznie przez var(--c-...).
Jeśli potrzebujesz odcienia, którego tu nie ma, dopisz go tutaj — nie w miejscu użycia.
***************************************************/

:root {

    /* --- Brand -------------------------------------------------------------
       #61a375 to zieleń marki i zostaje kotwicą wizualną, ale daje z bielą
       tylko 3,00:1. Nigdy nie jest tłem pod białym tekstem — od tego jest
       brand-700 (5,11:1) i brand-900 (8,42:1).                              */
    --c-brand-900: #2f5540;   /* hover CTA, stopka */
    --c-brand-700: #3d7a55;   /* przyciski primary */
    --c-brand-500: #61a375;   /* zieleń marki — bordery, ikony, focus ring */
    --c-brand-300: #a8cdb4;   /* bordery, ikony */
    --c-brand-100: #e8f2ec;   /* tło sekcji, badge */

    /* --- Neutrale — zastępują 11 przypadkowych szarości -------------------- */
    --c-ink-900: #23283a;     /* nagłówki                       14,62:1 */
    --c-ink-700: #343b4a;     /* tekst podstawowy               11,23:1 */
    --c-ink-500: #5c6478;     /* tekst drugorzędny               5,92:1 */
    --c-ink-300: #9aa1b1;     /* TYLKO placeholder i disabled    2,59:1 */
    --c-line:    #e4e6ec;     /* wszystkie bordery i separatory */
    --c-surface: #f7f8f7;     /* tło sekcji przeplatanych */
    --c-white:   #ffffff;

    /* --- Akcent ciepły — używać oszczędnie -------------------------------- */
    --c-accent:     #b08d57;  /* mosiądz — TYLKO tekst ≥ 24px    3,09:1 */
    --c-accent-700: #8a6d3f;  /* mosiądz ciemny — mały tekst     4,84:1 */

    /* --- Semantyczne ------------------------------------------------------ */
    --c-success-bg: #e8f2ec;  --c-success-fg: #2f5540;
    --c-info-bg:    #eef2f7;  --c-info-fg:    #3a4a63;
    --c-warn-bg:    #fbf3e3;  --c-warn-fg:    #7a5c1e;
    --c-error-bg:   #fceceb;  --c-error-fg:   #9b2c22;

    /* --- Typografia -------------------------------------------------------
       Kroje zostają — szeryfowa powaga plus czysty grotesk to trafny wybór
       dla tej branży. Poprawiamy sposób użycia, nie fonty.                  */
    --f-head: "Noto Serif", Georgia, serif;
    --f-body: "Alata", system-ui, sans-serif;

    --t-display: 44px;        /* hero h1 desktop */
    --t-h1:      36px;
    --t-h2:      28px;        /* h1 zawsze większy od h2 */
    --t-h3:      20px;
    --t-lg:      18px;        /* lead, cena */
    --t-body:    16px;
    --t-sm:      14px;        /* meta, breadcrumbs */
    --t-xs:      12px;        /* legal */

    --lh-tight: 1.15;         /* nagłówki */
    --lh-body:  1.65;         /* akapity */
    --ls-head:  -0.01em;
    --ls-caps:  0.08em;       /* wersaliki — tylko przyciski i etykiety */

    /* --- Odstępy — baza 4px ----------------------------------------------- */
    --s-1: 4px;   --s-2: 8px;   --s-3: 12px;  --s-4: 16px;
    --s-5: 24px;  --s-6: 32px;  --s-7: 48px;  --s-8: 64px;  --s-9: 96px;

    --container:   1280px;
    --gutter:      24px;      /* desktop */
    --gutter-m:    16px;      /* mobile */
    --section-y:   96px;
    --section-y-m: 56px;

    /* --- Promienie i cienie ----------------------------------------------- */
    --r-sm:   4px;            /* małe elementy */
    --r-md:   8px;            /* karty, przyciski, inputy */
    --r-lg:   16px;           /* modale, hero card */
    --r-full: 999px;

    --sh-1: 0 1px 2px rgba(35,40,58,.06), 0 1px 3px rgba(35,40,58,.08);
    --sh-2: 0 4px 12px rgba(35,40,58,.08);
    --sh-3: 0 12px 32px rgba(35,40,58,.12);

    /* --- Ruch -------------------------------------------------------------- */
    --ease: cubic-bezier(.2,.7,.3,1);
    --dur:  180ms;

    /* --- Breakpointy -------------------------------------------------------
       UWAGA: to jest dokumentacja, nie mechanizm. CSS nie pozwala użyć var()
       wewnątrz @media, więc w regułach poniżej siedzą liczby wprost.
       @media (max-width: var(--bp-md)) NIE ZADZIAŁA. Zmieniając próg, zmień
       tu i w styles.css — te zmienne trzymają kontrakt w jednym miejscu.

       Pasma: < 600 | 600–899 | 900–1199 | ≥ 1200
       czyli max-width piszemy jako 599px / 899px / 1199px.                  */
    --bp-sm: 600px;
    --bp-md: 900px;
    --bp-lg: 1200px;

    /* Próg przełączenia nawigacja ↔ hamburger. Było 980px, sparowane z tierem
       `l` gridu. Rozłączone świadomie: grid `l` wjeżdża na 1200px, ale menu
       hamburgerowe znika już od 900px — belka headera jest zwarta i nie
       potrzebuje 1200px, a hamburger na laptopie 1024px byłby regresem.     */
    --bp-nav: var(--bp-md);
}

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,input,textarea,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {border:0;margin:0;padding:0;}
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}/*IE8*/
audio,canvas,video{display:inline-block;}/*IE8/9*/
address,caption,cite,code,dfn,th,var{font-style:normal;font-weight:400;}
caption,th{text-align:left;}
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}
b,strong{font-weight: bold;}
q:before,q:after{content:'';}
table{border-collapse:collapse;border-spacing:0;}
form{display:inline;}
*{outline:none;}
input[type=submit]:hover,input[type=checkbox]:hover,label:hover{cursor:pointer;}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}
textarea{overflow:auto;vertical-align:top;}
ol,ul{list-style:none;}
a{text-decoration:none;}
.clear {clear:both;font-size:0px;height:0px;margin:0px;padding:0px;overflow:hidden;}
* html .clearfix, * html .cf {height: 1%; /* IE5-6 */}
*+html .clearfix, *+html .cf {display: inline-block; /* IE7not8 */}
.clearfix:after, .cf:after { /* FF, IE8, O, S, etc. */content: ".";display: block;height: 0;clear: both;visibility: hidden;overflow: hidden;}
.clear2{clear:both;}
﻿@charset "utf-8";
@import "/assets/css/reset.css";

/* Breakpointy: < 600 | 600–899 | 900–1199 | ≥ 1200 — patrz assets/css/tokens.css.
   Pięć pustych bloków po Bootstrapie 2 (1199/979/767/534/320px) stało tutaj i nic
   nie robiło — usunięte przy migracji na skalę 600/900/1200. */


@-ms-viewport {
    width: device-width;
}



/***************************************************
Global styles
***************************************************/
html {
    width: 100%;
    height: 100%;
    -ms-text-size-adjust: none;
    box-sizing: border-box;
}

*,
*:before,
*:after {
    box-sizing: inherit;
}

body {
    font-family: var(--f-body);
    font-weight: 400;
    font-style: normal;
    font-size: var(--t-body);
    line-height: var(--lh-body);
    color: var(--c-ink-700);
    background: var(--c-white);
    margin: 0;
    /* Zero kompensacji u góry — header jest position: sticky, więc zostaje
       w normalnym flow. Wcześniej było tu padding-top: 150px pod fixed header. */
    padding: 0;
    min-width: 320px;
    -webkit-font-smoothing: antialiased;
}

body.sticky {}

a {
    color: var(--c-brand-700);
    text-underline-offset: 3px;
}

a:hover {
    color: var(--c-brand-900);
}

/* reset.css ma `* { outline: none }`, co kasuje obrys focusu w całym serwisie.
   Pseudoklasa daje wyższą specyficzność niż `*`, więc ta reguła wygrywa
   niezależnie od kolejności plików w bundlu. Bez niej wymóg dostępności
   z briefu (widoczny focus na każdym elemencie interaktywnym) jest martwy. */
:focus-visible {
    outline: 2px solid var(--c-brand-500);
    outline-offset: 2px;
}


/***************************************************
Szkielet
***************************************************/

/* Gutter przeniesiony z body na kontener — body nie ma już paddingu, bo hero
   i pasek USP muszą sięgać krawędzi okna, a treść nadal ma się trzymać siatki. */
.container {
    margin: 0 auto;
    max-width: calc(var(--container) + 2 * var(--gutter));
    padding: 0 var(--gutter);
    position: relative;
}

@media (max-width: 899px) {
    .container {
        padding: 0 var(--gutter-m);
    }
}

main {
    min-height: 300px;
}

/* Pasek USP. Stał pod hero, czyli poniżej linii zgięcia — trzy najmocniejsze
   argumenty sprzedażowe były niewidoczne bez scrolla (G4). Teraz nad headerem. */
.usp-bar {
    background: var(--c-brand-100);
    color: var(--c-brand-900);
    font-size: var(--t-sm);
}

.usp-bar-inner {
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-5);
}

.usp-item {
    display: inline-flex;
    align-items: center;
    gap: var(--s-2);
    white-space: nowrap;
}

.usp-item svg {
    width: 20px;
    height: 20px;
    flex: none;
}

@media (max-width: 899px) {
    .usp-bar-inner {
        height: 36px;
        justify-content: flex-start;
        gap: var(--s-5);
        overflow-x: auto;
        scrollbar-width: none;
        font-size: 13px;
    }

    .usp-bar-inner::-webkit-scrollbar {
        display: none;
    }
}


/* Ribbon rabatów progowych pod headerem — bliźniak paska USP, ale na białym
   tle z linią, żeby dwie belki nie zlewały się w jedną. Progi renderuje
   theme1.html z configu order_discount. */
.discount-bar {
    background: var(--c-white);
    border-bottom: 1px solid var(--c-line);
    color: var(--c-ink-700);
    font-size: var(--t-sm);
}

.discount-bar-inner {
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--s-5);
}

.discount-bar-label {
    display: inline-flex;
    align-items: center;
    gap: var(--s-2);
    white-space: nowrap;
    color: var(--c-ink-500);
}

.discount-bar-label svg {
    width: 20px;
    height: 20px;
    flex: none;
    color: var(--c-brand-700);
}

.discount-bar-item {
    white-space: nowrap;
}

.discount-bar-item strong {
    color: var(--c-brand-700);
}

@media (max-width: 899px) {
    .discount-bar-inner {
        height: 36px;
        justify-content: flex-start;
        overflow-x: auto;
        scrollbar-width: none;
        font-size: 13px;
    }

    .discount-bar-inner::-webkit-scrollbar {
        display: none;
    }
}


/* Jedna zwarta belka. Wcześniej: 150px fixed, osobny rząd nawigacji i logo
   w białym kółku wystające poza header, które przy scrollu skakało i zmieniało
   rozmiar (G1, G2). position: sticky zamiast fixed — element zostaje w flow,
   więc znika też kompensacja `body { padding-top: 150px }`. */
.header-wrapper {
    height: 72px;
    background: var(--c-white);
    border-bottom: 1px solid var(--c-line);
    box-shadow: var(--sh-1);
    position: sticky;
    top: 0;
    z-index: 99999;
}

.header-inner {
    height: 100%;
    display: flex;
    align-items: center;
    gap: var(--s-7);
}


/* Logotyp tekstowy. Do czasu dostarczenia poziomej wersji sygnetu — okrągłe
   logo.png o wysokości 130px nie da się sensownie osadzić w belce 72px.
   Patrz sekcja 13 katalogu komponentów. */
.logo {
    display: flex;
    align-items: center;
    flex: none;
    text-decoration: none;
}

.logo-name {
    font-family: var(--f-head);
    font-size: 26px;
    line-height: 1.05;
    letter-spacing: var(--ls-head);
    color: var(--c-ink-900);
}

.logo-dot {
    color: var(--c-brand-500);
}

.logo:hover .logo-name {
    color: var(--c-brand-900);
}

@media (max-width: 899px) {
    .header-wrapper {
        height: 56px;
    }

    .header-inner {
        gap: var(--s-4);
    }

    .logo-name {
        font-size: 17px;
    }
}


/* Sticky nie zmienia już wymiarów — belka ma stałą wysokość, nic nie skacze.
   Klasa .sticky nadal jest dopinana do body przez assets/js/scripts.js:273
   i zostaje, bo używają jej inne widoki. */
.sticky .form-control-search {
    display: none;
}


/* Ikony headera. Były cienkie, szare, bez etykiet i bez stanów hover (G3).
   Teraz 24px stroke 1.75 w polu dotykowym 48×48. */
.header-nav {
    display: flex;
    align-items: center;
    gap: var(--s-1);
    margin-left: auto;
    flex: none;
    z-index: 998;
}

.hn-icon {
    width: 24px;
    height: 24px;
    flex: none;
}

.header-nav>* a,
.header-nav>a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--s-2);
    min-width: 48px;
    height: 48px;
    padding: 0 var(--s-3);
    border-radius: var(--r-md);
    color: var(--c-ink-700);
    font-size: var(--t-sm);
    transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}

.header-nav>* a:hover,
.header-nav>a:hover {
    background: var(--c-surface);
    color: var(--c-brand-700);
}

.header-nav .header-nav-cart {
    position: relative;
}

.header-nav .header-nav-cart a {
    position: relative;
}

/* Licznik sztuk. Pokazywał tu kwotę „0.00 zł", która nie mówi nic o zawartości
   koszyka — patrz MCart::getInfo(). */
.header-nav-cart-badge {
    position: absolute;
    top: 4px;
    right: 2px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--r-full);
    background: var(--c-brand-700);
    color: var(--c-white);
    font-size: 11px;
    line-height: 1;
}

/* Pusty koszyk nie dostaje badge'a — MCart::getInfo() zwraca wtedy pusty string. */
.header-nav-cart-badge:empty {
    display: none;
}

.header-nav-profile {
    position: relative;
}

.header-nav-label {
    white-space: nowrap;
}

@media (max-width: 1199px) {
    .header-nav-label {
        display: none;
    }
}

.header-nav-profile-sub {
    display: none;
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    box-shadow: var(--sh-2);
    position: absolute;
    top: 56px;
    right: 0;
    width: 200px;
    padding: var(--s-2) 0;
    z-index: 9;
}

.header-nav-profile-sub.opened {
    display: block;
}

.header-nav-profile-sub li a {
    display: block;
    padding: var(--s-3) var(--s-4);
    min-width: 0;
    height: auto;
    border-radius: 0;
    justify-content: flex-start;
}


.header-nav-search {
    position: relative;
    z-index: 999;
}

.header-nav-search-control {
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    box-shadow: var(--sh-2);
    width: 320px;
    padding: var(--s-2);
    display: none;
    align-items: center;
    gap: var(--s-2);
    position: absolute;
    top: 56px;
    right: 0;
    z-index: 999;
}

.header-nav-search-control input {
    flex: 1;
    min-width: 0;
}

.header-nav-search-control a {
    flex: none;
    min-width: 44px;
    height: 44px;
}

.header-nav-search.opened .header-nav-search-control {
    display: flex;
}

@media (max-width: 599px) {
    .header-nav-search-control {
        width: calc(100vw - 2 * var(--gutter-m));
        right: auto;
        left: 50%;
        transform: translateX(-50%);
    }
}


/* Stopka. Były dwie chude kolumny linków w wersalikach, wielkie logo po prawej
   i pusta trzecia kolumna — bez adresu, telefonu i metod dostawy (G7). */
.g-footer {
    background: var(--c-ink-900);
    color: rgba(255, 255, 255, .82);
    font-size: var(--t-sm);
    margin-top: var(--s-9);
}

.g-footer-main {
    display: grid;
    grid-template-columns: 1fr 1fr 1.2fr 1.6fr;
    gap: var(--s-7);
    align-items: start;
    padding: var(--s-8) 0 var(--s-7);
}

.g-footer-col {
    display: flex;
    flex-direction: column;
    gap: var(--s-3);
}

.g-footer-h {
    font-size: var(--t-xs);
    letter-spacing: var(--ls-caps);
    text-transform: uppercase;
    color: var(--c-brand-300);
    margin: 0 0 var(--s-1);
}

.g-footer a {
    color: rgba(255, 255, 255, .82);
    transition: color var(--dur) var(--ease);
}

.g-footer a:hover {
    color: var(--c-white);
}

.g-footer-links ul {
    display: flex;
    flex-direction: column;
    gap: var(--s-3);
}

.g-footer-links a {
    line-height: var(--lh-body);
}

.g-footer-contact address {
    font-style: normal;
    line-height: var(--lh-body);
}

.g-footer-contact address + address {
    margin-top: var(--s-4);
}

/* Etykieta roli adresu ("Siedziba" / "Odbiór osobisty"). Bez niej dwa adresy
   pod sobą czyta się jak literówkę, a nie jak dwa różne miejsca. */
.g-footer-addr-label {
    display: block;
    font-size: var(--t-xs);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, .5);
}

.g-footer-contact a {
    display: block;
}

/* Newsletter. Placeholder był ucięty w połowie, input bez etykiety, przycisk
   w wersalikach, zgoda niewidoczna (G8).

   Sam <form> musi dostać display: flex — reset.css:10 ustawia form{display:inline},
   więc bez tego zawartość kolumny układa się w elemencie inline i odstępy znikają
   (gap z .g-footer-col nie zadziała, bo form jest jego jedynym dzieckiem). */
.footer-newsletter {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--s-4);
}

.g-footer-newsletter-title {
    font-family: var(--f-head);
    font-size: var(--t-h3);
    line-height: var(--lh-tight);
    color: var(--c-white);
    margin: 0;
}

.g-footer-newsletter-control {
    display: flex;
    align-items: center;
    gap: var(--s-2);
    padding: 6px;
    border-radius: var(--r-full);
    background: rgba(255, 255, 255, .08);
    border: 1px solid rgba(255, 255, 255, .18);
}

.g-footer-newsletter-control .form-control {
    flex: 1;
    min-width: 0;
    height: 40px;
    border: 0;
    background: transparent;
    border-radius: var(--r-full);
    color: var(--c-white);
}

.g-footer-newsletter-control .form-control::placeholder {
    color: rgba(255, 255, 255, .55);
}

.g-footer-newsletter-control .btn {
    flex: none;
    height: 40px;
    padding: 0 22px;
    border-radius: var(--r-full);
}

.g-footer-newsletter-note {
    font-size: var(--t-xs);
    line-height: var(--lh-body);
    color: rgba(255, 255, 255, .6);
    margin: 0;
}

.g-footer-newsletter-note a {
    color: rgba(255, 255, 255, .6);
    text-decoration: underline;
}

.g-footer-bottom {
    border-top: 1px solid rgba(255, 255, 255, .12);
}

.g-footer-bottom-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-6);
    padding: var(--s-5) 0;
}

.g-footer-methods {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--s-2);
}

.g-footer-methods-label {
    font-size: var(--t-xs);
    color: rgba(255, 255, 255, .5);
    margin-right: var(--s-1);
}

.g-footer-chip {
    display: inline-flex;
    align-items: center;
    height: 28px;
    padding: 0 var(--s-3);
    border-radius: var(--r-sm);
    background: rgba(255, 255, 255, .1);
    color: rgba(255, 255, 255, .82);
    font-size: var(--t-xs);
    white-space: nowrap;
}

.g-footer-sep {
    width: 1px;
    height: 20px;
    background: rgba(255, 255, 255, .15);
    margin: 0 var(--s-2);
}

.g-footer-social {
    display: flex;
    align-items: center;
    gap: var(--s-5);
    flex: none;
}

.g-footer-social a {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    flex: none;
    border-radius: var(--r-md);
    background: rgba(255, 255, 255, .1);
    color: var(--c-white);
    transition: background var(--dur) var(--ease);
}

.g-footer-social a:hover {
    background: var(--c-brand-700);
}

.g-footer-social svg {
    width: 18px;
    height: 18px;
}

.g-footer-copy {
    font-size: var(--t-xs);
    color: rgba(255, 255, 255, .5);
    white-space: nowrap;
}

/* Dane rejestrowe spółki — obowiązek informacyjny, nie treść marketingowa,
   więc najmniejszy stopień w hierarchii i pełna szerokość pod paskiem metod. */
.g-footer-legal {
    padding-top: var(--s-5);
    border-top: 1px solid rgba(255, 255, 255, .1);
    font-size: var(--t-xs);
    line-height: var(--lh-body);
    color: rgba(255, 255, 255, .45);
}


@media (max-width: 1199px) {
    .g-footer-main {
        grid-template-columns: 1fr 1fr;
        gap: var(--s-6) var(--s-7);
    }

    .g-footer-newsletter {
        grid-column: 1 / -1;
    }
}

@media (max-width: 899px) {
    .g-footer-bottom-inner {
        flex-direction: column;
        align-items: flex-start;
    }
}

@media (max-width: 599px) {
    .g-footer-main {
        grid-template-columns: 1fr;
    }

    .g-footer-newsletter-control {
        flex-direction: column;
        border-radius: var(--r-md);
        padding: var(--s-3);
    }

    .g-footer-newsletter-control .form-control,
    .g-footer-newsletter-control .btn {
        width: 100%;
        height: 48px;
        border-radius: var(--r-md);
    }

    .g-footer-sep {
        display: none;
    }
}


/* Etykieta widoczna wyłącznie dla czytników ekranu. */
.g-visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}


.g-grid {
    padding: 0 10px;
    width: 100%;
    margin: 0 auto;
    max-width: 1200px;
}

.g-row {
    clear: both;
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-flex-flow: row wrap;
    -ms-flex-flow: row wrap;
    flex-flow: row wrap;
    margin-left: -30px;
}

.g-row>[class*="g-col-"] {
    padding-left: 30px;
}

.g-row-reverse {
    -webkit-flex-wrap: wrap-reverse;
    -ms-flex-wrap: wrap-reverse;
    flex-wrap: wrap-reverse;
}

.g-row-top {
    -webkit-box-align: start;
    -webkit-align-items: flex-start;
    -ms-flex-align: start;
    -ms-grid-row-align: flex-start;
    align-items: flex-start;
}

.g-row-middle {
    -webkit-box-align: center;
    -webkit-align-items: center;
    -ms-flex-align: center;
    -ms-grid-row-align: center;
    align-items: center;
}

.g-row-bottom {
    -webkit-box-align: end;
    -webkit-align-items: flex-end;
    -ms-flex-align: end;
    -ms-grid-row-align: flex-end;
    align-items: flex-end;
}

.g-row-left {
    -webkit-box-pack: start;
    -webkit-justify-content: flex-start;
    -ms-flex-pack: start;
    justify-content: flex-start;
}

.g-row-center {
    -webkit-box-pack: center;
    -webkit-justify-content: center;
    -ms-flex-pack: center;
    justify-content: center;
}

.g-row-right {
    -webkit-box-pack: end;
    -webkit-justify-content: flex-end;
    -ms-flex-pack: end;
    justify-content: flex-end;
}

.g-row-around {
    -webkit-justify-content: space-around;
    -ms-flex-pack: distribute;
    justify-content: space-around;
}

.g-row-between {
    -webkit-box-pack: justify;
    -webkit-justify-content: space-between;
    -ms-flex-pack: justify;
    justify-content: space-between;
}

[class*="g-col-"] {
    min-height: 1px;
    -webkit-box-flex: 1;
    -webkit-flex: 1 1 100%;
    -ms-flex: 1 1 100%;
    flex: 1 1 100%;
    max-width: 100%;
}

.g-col-center {
    margin-right: auto;
    margin-left: auto;
    -webkit-box-pack: center;
    -webkit-justify-content: center;
    -ms-flex-pack: center;
    justify-content: center;
}

.g-col-content {
    -webkit-box-flex: 0;
    -webkit-flex: 0 0 auto;
    -ms-flex: 0 0 auto;
    flex: 0 0 auto;
}

.g-col-auto {
    -webkit-box-flex: 1;
    -webkit-flex: 1 1 0%;
    -ms-flex: 1 1 0%;
    flex: 1 1 0%;
}

.g-col-top {
    -webkit-align-self: flex-start;
    -ms-flex-item-align: start;
    align-self: flex-start;
}

.g-col-middle {
    -webkit-align-self: center;
    -ms-flex-item-align: center;
    align-self: center;
}

.g-col-bottom {
    -webkit-align-self: flex-end;
    -ms-flex-item-align: end;
    align-self: flex-end;
}

.g-col-right {
    margin-left: auto;
}

.g-col-1 {
    -webkit-flex-basis: 8.33333%;
    -ms-flex-preferred-size: 8.33333%;
    flex-basis: 8.33333%;
    max-width: 8.33333%;
}

.g-col-2 {
    -webkit-flex-basis: 16.66667%;
    -ms-flex-preferred-size: 16.66667%;
    flex-basis: 16.66667%;
    max-width: 16.66667%;
}

.g-col-3 {
    -webkit-flex-basis: 25%;
    -ms-flex-preferred-size: 25%;
    flex-basis: 25%;
    max-width: 25%;
}

.g-col-4 {
    -webkit-flex-basis: 33.33333%;
    -ms-flex-preferred-size: 33.33333%;
    flex-basis: 33.33333%;
    max-width: 33.33333%;
}

.g-col-5 {
    -webkit-flex-basis: 41.66667%;
    -ms-flex-preferred-size: 41.66667%;
    flex-basis: 41.66667%;
    max-width: 41.66667%;
}

.g-col-6 {
    -webkit-flex-basis: 50%;
    -ms-flex-preferred-size: 50%;
    flex-basis: 50%;
    max-width: 50%;
}

.g-col-7 {
    -webkit-flex-basis: 58.33333%;
    -ms-flex-preferred-size: 58.33333%;
    flex-basis: 58.33333%;
    max-width: 58.33333%;
}

.g-col-8 {
    -webkit-flex-basis: 66.66667%;
    -ms-flex-preferred-size: 66.66667%;
    flex-basis: 66.66667%;
    max-width: 66.66667%;
}

.g-col-9 {
    -webkit-flex-basis: 75%;
    -ms-flex-preferred-size: 75%;
    flex-basis: 75%;
    max-width: 75%;
}

.g-col-10 {
    -webkit-flex-basis: 83.33333%;
    -ms-flex-preferred-size: 83.33333%;
    flex-basis: 83.33333%;
    max-width: 83.33333%;
}

.g-col-11 {
    -webkit-flex-basis: 91.66667%;
    -ms-flex-preferred-size: 91.66667%;
    flex-basis: 91.66667%;
    max-width: 91.66667%;
}

.g-col-12 {
    -webkit-flex-basis: 100%;
    -ms-flex-preferred-size: 100%;
    flex-basis: 100%;
    max-width: 100%;
}

.g-gutter-reset {
    margin-left: 0;
}

.g-gutter-reset>[class*="g-col-"] {
    padding-left: 0;
}

.g-pddY-30 {
    margin-top: -30px;
}

.g-pddY-30>[class*="g-col-"] {
    padding-top: 30px;
}

.g-pdd-10 {
    margin-top: -10px;
    margin-left: -10px;
}

.g-pdd-10>[class*="g-col-"] {
    padding-top: 10px;
    padding-left: 10px;
}



@media (min-width: 600px) {
    .g-col-s-1 {
        -webkit-flex-basis: 8.33333%;
        -ms-flex-preferred-size: 8.33333%;
        flex-basis: 8.33333%;
        max-width: 8.33333%;
    }

    .g-col-s-2 {
        -webkit-flex-basis: 16.66667%;
        -ms-flex-preferred-size: 16.66667%;
        flex-basis: 16.66667%;
        max-width: 16.66667%;
    }

    .g-col-s-3 {
        -webkit-flex-basis: 25%;
        -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
        max-width: 25%;
    }

    .g-col-s-4 {
        -webkit-flex-basis: 33.33333%;
        -ms-flex-preferred-size: 33.33333%;
        flex-basis: 33.33333%;
        max-width: 33.33333%;
    }

    .g-col-s-5 {
        -webkit-flex-basis: 41.66667%;
        -ms-flex-preferred-size: 41.66667%;
        flex-basis: 41.66667%;
        max-width: 41.66667%;
    }

    .g-col-s-6 {
        -webkit-flex-basis: 50%;
        -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
        max-width: 50%;
    }

    .g-col-s-7 {
        -webkit-flex-basis: 58.33333%;
        -ms-flex-preferred-size: 58.33333%;
        flex-basis: 58.33333%;
        max-width: 58.33333%;
    }

    .g-col-s-8 {
        -webkit-flex-basis: 66.66667%;
        -ms-flex-preferred-size: 66.66667%;
        flex-basis: 66.66667%;
        max-width: 66.66667%;
    }

    .g-col-s-9 {
        -webkit-flex-basis: 75%;
        -ms-flex-preferred-size: 75%;
        flex-basis: 75%;
        max-width: 75%;
    }

    .g-col-s-10 {
        -webkit-flex-basis: 83.33333%;
        -ms-flex-preferred-size: 83.33333%;
        flex-basis: 83.33333%;
        max-width: 83.33333%;
    }

    .g-col-s-11 {
        -webkit-flex-basis: 91.66667%;
        -ms-flex-preferred-size: 91.66667%;
        flex-basis: 91.66667%;
        max-width: 91.66667%;
    }

    .g-col-s-12 {
        -webkit-flex-basis: 100%;
        -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
        max-width: 100%;
    }

    .g-col-s-content {
        -webkit-box-flex: 0;
        -webkit-flex: 0 0 auto;
        -ms-flex: 0 0 auto;
        flex: 0 0 auto;
    }

    .g-col-s-auto {
        -webkit-box-flex: 1;
        -webkit-flex: 1 1 0%;
        -ms-flex: 1 1 0%;
        flex: 1 1 0%;
    }
}

@media (min-width: 900px) {
    .g-col-m-1 {
        -webkit-flex-basis: 8.33333%;
        -ms-flex-preferred-size: 8.33333%;
        flex-basis: 8.33333%;
        max-width: 8.33333%;
    }

    .g-col-m-2 {
        -webkit-flex-basis: 16.66667%;
        -ms-flex-preferred-size: 16.66667%;
        flex-basis: 16.66667%;
        max-width: 16.66667%;
    }

    .g-col-m-3 {
        -webkit-flex-basis: 25%;
        -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
        max-width: 25%;
    }

    .g-col-m-4 {
        -webkit-flex-basis: 33.33333%;
        -ms-flex-preferred-size: 33.33333%;
        flex-basis: 33.33333%;
        max-width: 33.33333%;
    }

    .g-col-m-5 {
        -webkit-flex-basis: 41.66667%;
        -ms-flex-preferred-size: 41.66667%;
        flex-basis: 41.66667%;
        max-width: 41.66667%;
    }

    .g-col-m-6 {
        -webkit-flex-basis: 50%;
        -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
        max-width: 50%;
    }

    .g-col-m-7 {
        -webkit-flex-basis: 58.33333%;
        -ms-flex-preferred-size: 58.33333%;
        flex-basis: 58.33333%;
        max-width: 58.33333%;
    }

    .g-col-m-8 {
        -webkit-flex-basis: 66.66667%;
        -ms-flex-preferred-size: 66.66667%;
        flex-basis: 66.66667%;
        max-width: 66.66667%;
    }

    .g-col-m-9 {
        -webkit-flex-basis: 75%;
        -ms-flex-preferred-size: 75%;
        flex-basis: 75%;
        max-width: 75%;
    }

    .g-col-m-10 {
        -webkit-flex-basis: 83.33333%;
        -ms-flex-preferred-size: 83.33333%;
        flex-basis: 83.33333%;
        max-width: 83.33333%;
    }

    .g-col-m-11 {
        -webkit-flex-basis: 91.66667%;
        -ms-flex-preferred-size: 91.66667%;
        flex-basis: 91.66667%;
        max-width: 91.66667%;
    }

    .g-col-m-12 {
        -webkit-flex-basis: 100%;
        -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
        max-width: 100%;
    }

    .g-col-m-content {
        -webkit-box-flex: 0;
        -webkit-flex: 0 0 auto;
        -ms-flex: 0 0 auto;
        flex: 0 0 auto;
    }

    .g-col-m-auto {
        -webkit-box-flex: 1;
        -webkit-flex: 1 1 0%;
        -ms-flex: 1 1 0%;
        flex: 1 1 0%;
    }
}

@media (min-width: 1200px) {
    .g-col-l-1 {
        -webkit-flex-basis: 8.33333%;
        -ms-flex-preferred-size: 8.33333%;
        flex-basis: 8.33333%;
        max-width: 8.33333%;
    }

    .g-col-l-2 {
        -webkit-flex-basis: 16.66667%;
        -ms-flex-preferred-size: 16.66667%;
        flex-basis: 16.66667%;
        max-width: 16.66667%;
    }

    .g-col-l-3 {
        -webkit-flex-basis: 25%;
        -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
        max-width: 25%;
    }

    .g-col-l-4 {
        -webkit-flex-basis: 33.33333%;
        -ms-flex-preferred-size: 33.33333%;
        flex-basis: 33.33333%;
        max-width: 33.33333%;
    }

    .g-col-l-5 {
        -webkit-flex-basis: 41.66667%;
        -ms-flex-preferred-size: 41.66667%;
        flex-basis: 41.66667%;
        max-width: 41.66667%;
    }

    .g-col-l-6 {
        -webkit-flex-basis: 50%;
        -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
        max-width: 50%;
    }

    .g-col-l-7 {
        -webkit-flex-basis: 58.33333%;
        -ms-flex-preferred-size: 58.33333%;
        flex-basis: 58.33333%;
        max-width: 58.33333%;
    }

    .g-col-l-8 {
        -webkit-flex-basis: 66.66667%;
        -ms-flex-preferred-size: 66.66667%;
        flex-basis: 66.66667%;
        max-width: 66.66667%;
    }

    .g-col-l-9 {
        -webkit-flex-basis: 75%;
        -ms-flex-preferred-size: 75%;
        flex-basis: 75%;
        max-width: 75%;
    }

    .g-col-l-10 {
        -webkit-flex-basis: 83.33333%;
        -ms-flex-preferred-size: 83.33333%;
        flex-basis: 83.33333%;
        max-width: 83.33333%;
    }

    .g-col-l-11 {
        -webkit-flex-basis: 91.66667%;
        -ms-flex-preferred-size: 91.66667%;
        flex-basis: 91.66667%;
        max-width: 91.66667%;
    }

    .g-col-l-12 {
        -webkit-flex-basis: 100%;
        -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
        max-width: 100%;
    }

    .g-col-l-content {
        -webkit-box-flex: 0;
        -webkit-flex: 0 0 auto;
        -ms-flex: 0 0 auto;
        flex: 0 0 auto;
    }

    .g-col-l-auto {
        -webkit-box-flex: 1;
        -webkit-flex: 1 1 0%;
        -ms-flex: 1 1 0%;
        flex: 1 1 0%;
    }
}

[class*="g-hide-"] {
    display: block;
}

[class*="g-show-"] {
    display: none;
}

@media (min-width: 1200px) {
    .g-show-l {
        display: block;
    }

    .g-hide-l {
        display: none;
    }
}

@media (min-width: 900px) {
    .g-show-m {
        display: block;
    }

    .g-hide-m {
        display: none;
    }
}

@media (min-width: 600px) {
    .g-show-s {
        display: block;
    }

    .g-hide-s {
        display: none;
    }
}

/***************************************************
content
***************************************************/


.content p {
    margin: var(--s-4) 0;
    line-height: var(--lh-body);
    max-width: 68ch;
}


/* h1 i h2 dzieliły tu 36px i letter-spacing 2px — h1 był w praktyce mniejszy
   od h2 (32px vs 36px w innych regułach), czyli odwrócona hierarchia.
   Rozdzielone: h1 zawsze większy od h2. */
h1,
h2 {
    font-weight: normal;
    font-family: var(--f-head);
    text-transform: none;
    text-align: left;
    letter-spacing: var(--ls-head);
    line-height: var(--lh-tight);
    color: var(--c-ink-900);
    margin: var(--s-7) 0 var(--s-5) 0;
}

h1 {
    font-size: var(--t-h1);
}

h2 {
    font-size: var(--t-h2);
}

.content h3 {
    font-size: var(--t-h3);
    font-weight: 600;
    font-family: var(--f-head);
    line-height: var(--lh-tight);
    color: var(--c-ink-900);

    margin: var(--s-6) 0 var(--s-4) 0;
    position: relative;
}

.content h4 {
    font-weight: bold;
    font-size: var(--t-body);
    font-family: var(--f-head);
    color: var(--c-ink-900);
    margin: var(--s-5) 0 var(--s-3) 0;
}

.content ul {
    display: block;
    list-style-type: none;
    margin: var(--s-3) 0;
    padding: 0;
    line-height: var(--lh-body);
    max-width: 68ch;
}

.content ul li {
    position: relative;
    padding-left: var(--s-5);
}

.content ul li:before {
    content: '';
    display: block;
    width: var(--s-1);
    height: var(--s-1);
    border-radius: var(--r-full);
    background: var(--c-brand-500);
    position: absolute;
    left: 0;
    top: 11px;
}

.content ol {
    display: block;
    list-style-position: outside;
    list-style-type: decimal;
    margin: var(--s-3) 0;
    padding-left: var(--s-5);
    line-height: var(--lh-body);
    max-width: 68ch;
}

.content ol.rules {}

.content ol.rules,
.content ol.rules ol {
    counter-reset: item;
    position: relative;
}

.content ol.rules ol {
    padding-left: 30px;
}

.content ol.rules>li,
.content ol.rules ol>li {
    display: block;
}

.content ol.rules>li:before,
.content ol.rules ol>li:before {
    content: counters(item, ".") ".";
    counter-increment: item;
    position: absolute;
    left: 0;
}

.content p:first-child,
.content h1:first-child,
.content h2:first-child,
.content h3:not(.sec):first-child {
    margin-top: 0;
}

.content p:last-child {
    margin-bottom: 0;
}


.content-white {
    background: var(--c-white);
    padding: var(--s-7);
}


/* Skala mobilna: h1 28 / h2 24. Body zostaje 16px — nigdy nie schodzi niżej. */
@media (max-width: 899px) {
    h1 {
        font-size: 28px;
        margin: var(--s-6) 0 var(--s-4) 0;
    }

    h2 {
        font-size: 24px;
        margin: var(--s-6) 0 var(--s-4) 0;
    }
}

@media (max-width: 599px) {
    .content-white {
        padding: var(--s-6) var(--s-4);
    }
}


/***************************************************
menu
***************************************************/

/* Nawigacja siedzi teraz w belce headera, nie w osobnym pasku 40px pod nią,
   który miał jedną pozycję i ogromne puste pole po prawej (G2). */
.navbar {
    display: flex;
    align-items: center;
    margin: 0 auto;
}

.navbar>ul {
    display: flex;
    align-items: center;
    gap: var(--s-6);
}

.navbar>ul>li {
    flex: 0 1 auto;
    position: relative;
}

.navbar>ul>li>a {
    font-size: var(--t-body);
    font-weight: normal;
    color: var(--c-ink-700);
    display: flex;
    align-items: center;
    padding: var(--s-2) 0;
    border-bottom: 2px solid transparent;
    white-space: nowrap;
    transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}

.navbar ul li a:hover {
    text-decoration: none;
    color: var(--c-brand-700);
    border-bottom-color: var(--c-brand-300);
}

.navbar ul li.current>a {
    color: var(--c-ink-900);
    border-bottom-color: var(--c-brand-500);
}

/* Rozwijane podmenu. Nawigacja nie ma już pozycji z podmenu, ale .navbar-sub
   i warianty .sidr-class-* zostają — sidr nadal je klonuje, a klasa wróci,
   gdyby nawigacja odzyskała drzewo kategorii. */
.navbar-sub {
    position: absolute;
    top: 100%;
    left: 0;
    width: 250px;
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    box-shadow: var(--sh-2);
    z-index: 999;
    padding: var(--s-3) 0;
    display: none;
}

.navbar-sub .link-u {
    font-size: 14px;
    text-transform: none;
}

.navbar-sub .navbar-h {
    font-size: 14px;
    font-weight: bold;
    line-height: 1.8em;
    margin-bottom: 10px;
}

.sidr-class-navbar-h {
    padding: 5px 15px 5px 25px
}

.navbar-sub li {
    position: relative;
    margin: 10px 0;
    padding: 0 20px;
}

.navbar-sub li.isSub {
    background: url("data:image/svg+xml,%3Csvg id='_6f1d44a8089c67c0d68fdb217ef60d92' data-name='6f1d44a8089c67c0d68fdb217ef60d92' xmlns='http://www.w3.org/2000/svg' width='13' height='10' viewBox='0 0 13 10'%3E%3Cpath id='Path_1' data-name='Path 1' d='M22.889,122.023l-3.3,3.261h0l-.556.548-.623.613a.54.54,0,0,1-.381.155.55.55,0,0,1-.385-.157.525.525,0,0,1-.046-.7l.958-.943h0l2.69-2.654H10.581a.533.533,0,1,1,0-1.067h10.66L18.8,118.666l-.155-.15-1.14-1.124a.531.531,0,0,1,.472-.792.615.615,0,0,1,.432.18l.3.293.821.81.155.15,3.2,3.16a.52.52,0,0,1,.151.4v.021A.52.52,0,0,1,22.889,122.023Z' transform='translate(-10.041 -116.6)'/%3E%3C/svg%3E%0A") 210px center no-repeat;
}

.navbar-sub li a {
    font-size: 14px;
    font-weight: normal;
    line-height: 1.2em;
}

.sidr .sidr-class-sub {
    display: none;
}

.navbar-subsub {
    left: 250px;
    top: -25px !important;
    display: none;
}

.navbar-sub li:hover .navbar-subsub {
    display: block !important;
}

/* Poniżej --bp-nav (900px) nawigacja chowa się do panelu bocznego sidr,
   otwieranego hamburgerem z grupy ikon. */
@media (max-width: 899px) {
    .navbar {
        display: none;
    }
}

.mobile-overlay {
    display: none;
    position: fixed;
    top: -200px;
    right: -200px;
    bottom: -200px;
    left: -200px;
    background: rgba(68, 68, 68, 0.5);
    z-index: 999998;
}

.sidr-animating .mobile-overlay,
.sidr-open .mobile-overlay {
    display: block;
}

.mobile-offcanvas {
    display: none;
}

/* Nawigacja, nie grid — próg rozłączony od tieru `l` (--bp-nav w tokens.css). */
@media (min-width: 900px) {
    .mobile-offcanvas {
        display: block;
    }
}

@media (min-width: 900px) {
    .sticky .mobile-offcanvas {
        display: block;
    }
}

/* Hamburger. Siedzi w grupie ikon headera (application/views/boxes/profile.php),
   nie w .navbar — inaczej sidr klonowałby go razem z menu do panelu bocznego.
   Kreski rysowane były CSS-em przez span::after; teraz to zwykłe SVG. */
/* Selektor musi być tak samo specyficzny jak `.header-nav > a` z sekcji Szkielet
   (0,2,0), które nadaje ikonom display: inline-flex. Samo `.mobile-nav` (0,1,0)
   przegrywa i hamburger był widoczny również na desktopie. */
.header-nav>.mobile-nav {
    display: none;
}

@media (max-width: 899px) {
    .header-nav>.mobile-nav {
        display: inline-flex;
    }
}


.sidr {
    display: block;
    position: fixed;
    top: 0;
    width: 280px;
    height: 100%;
    background: var(--c-white);
    z-index: 999999;
    overflow-x: hidden;
    overflow-y: auto;
}

.sidr ul {
    margin: var(--s-6) 0;
    padding: 0;
    list-style: none;
}

.sidr a {
    display: block;
    padding: var(--s-3) var(--s-5);
    color: var(--c-ink-700);
    font-size: var(--t-body);
    text-decoration: none;
}

.sidr a:hover {
    color: var(--c-brand-700);
    background: var(--c-surface);
}

.sidr-class-navbar-sub {
    margin: 0 !important;
    display: none;
}

.sidr-class-navbar-sub ul {
    margin: 0 !important;
}

.sidr-class-navbar-sub li {
    border-bottom: 0;
}

.sidr-class-navbar-sub a {
    font-size: 13px;
    text-transform: none;
    padding-left: 30px;
}

.sidr-class-navbar-subsub a {
    padding-left: 50px;
}

.sidr-inner>a,
.sidr-inner>h3 {
    display: none;
}


/* Offset w stanie zamkniętym musi być równy szerokości panelu (280px) — inaczej
   panel wystaje zza krawędzi okna. Wcześniej było -250px przy szerokości 250px;
   po podniesieniu szerokości zostało 30px widocznego paska po prawej. */
.sidr.right {
    right: -280px;
    left: auto;
}

.sidr.left {
    right: auto;
    left: -280px;
}

.sidr-open .sidr {
    box-shadow: var(--sh-3);
}


/***************************************************
			        HERO
***************************************************/

/* Zastąpił slider. Poprzednio na ciemnym zdjęciu leżała półprzezroczysta biała
   płachta rgba(255,255,255,.8) — zdjęcie prześwitywało przez litery i czytelność
   dramatycznie spadała (H1). Teraz gradientowy scrim i biały tekst. */
.hero {
    position: relative;
    height: 480px;
    overflow: hidden;
}

.hero-image {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Kadr trzyma się dolnej części zdjęcia: wiązanka i dłonie, które ją układają.
       Pas 3:1 nie zmieści jednocześnie twarzy (górne ~25% kadru) i kwiatów
       (dolne ~45%), a to kwiaty są tu treścią sprzedażową — twarz zostaje poza
       kadrem świadomie, bo płacząca osoba w hero sklepu to mocny ton. */
    object-position: 50% 95%;
    /* Zdjęcie jest już stonowane, więc filtr tylko delikatnie ujednolica —
       poprzednie, mroczne i chaotyczne, wymagało mocniejszego przyciemnienia. */
    filter: saturate(.92) brightness(.96);
}

.hero-scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg,
            rgba(35, 40, 58, .82) 0%,
            rgba(35, 40, 58, .62) 32%,
            rgba(35, 40, 58, .28) 55%,
            rgba(35, 40, 58, 0) 72%);
}

.hero-inner {
    position: relative;
    height: 100%;
    display: flex;
    align-items: center;
}

.hero-content {
    max-width: 560px;
    display: flex;
    flex-direction: column;
    gap: var(--s-5);
}

.hero-badge {
    display: inline-flex;
    align-items: center;
    align-self: flex-start;
    height: 28px;
    padding: 0 14px;
    border-radius: var(--r-full);
    background: rgba(255, 255, 255, .14);
    border: 1px solid rgba(255, 255, 255, .3);
    color: var(--c-white);
    font-size: var(--t-xs);
    letter-spacing: var(--ls-caps);
    text-transform: uppercase;
}

.hero-title {
    margin: 0;
    font-family: var(--f-head);
    font-size: var(--t-display);
    line-height: var(--lh-tight);
    letter-spacing: var(--ls-head);
    color: var(--c-white);
    font-weight: 400;
}

.hero-lead {
    margin: 0;
    font-size: var(--t-lg);
    line-height: var(--lh-body);
    color: rgba(255, 255, 255, .88);
    max-width: 480px;
}

.hero-actions {
    display: flex;
    align-items: center;
    gap: var(--s-6);
    margin-top: var(--s-2);
}

.hero-cta {
    height: 52px;
    padding: 0 32px;
}

.hero-arrow {
    font-size: 18px;
    line-height: 1;
}

.hero-link {
    color: var(--c-white);
    font-size: var(--t-body);
    text-decoration: underline;
    text-underline-offset: 5px;
    white-space: nowrap;
}

.hero-link:hover {
    color: var(--c-white);
    text-decoration-thickness: 2px;
}

.hero :focus-visible {
    outline-color: var(--c-white);
}

@media (max-width: 899px) {
    .hero {
        height: 360px;
    }

    /* Na mobile kadr przycina się poziomo, nie pionowo — mieści się cała wysokość,
       więc widać i wiązankę (lewa część kadru), i postać (prawa). */
    .hero-image {
        object-position: 50% 30%;
    }

    /* Pionowy scrim od dołu — na wąskim ekranie tekst siada nad krawędzią,
       a nie na środku zdjęcia. */
    .hero-scrim {
        background: linear-gradient(180deg,
                rgba(35, 40, 58, .25) 0%,
                rgba(35, 40, 58, .62) 45%,
                rgba(35, 40, 58, .88) 100%);
    }

    .hero-inner {
        align-items: flex-end;
        padding-bottom: var(--s-5);
    }

    .hero-content {
        max-width: none;
        width: 100%;
        text-align: center;
        align-items: center;
        gap: var(--s-4);
    }

    .hero-badge {
        align-self: center;
    }

    .hero-title {
        font-size: 32px;
    }

    .hero-lead {
        font-size: var(--t-body);
    }

    .hero-actions {
        flex-direction: column;
        gap: var(--s-4);
        width: 100%;
    }

    .hero-cta {
        width: 100%;
    }
}

/* PAGER */

.slick-dots {
    text-align: center;
    font-size: .85em;
    font-weight: bold;
    height: 26px;
    padding: 7px 2px !important;
    list-style: none !important;
    width: max-content;
    position: absolute;
    bottom: 20px;
    right: 50%;
    -ms-transform: translateX(50%);
    transform: translateX(50%);
}

.slick-dots li {
    float: left;
}

.slick-dots li button {
    text-indent: -9999px;
    display: block;
    width: 16px;
    height: 16px;
    margin: 0 5px;
    padding: 0;
    outline: 0;
    position: relative;
    background: rgba(255, 255, 255, 0.5);
    border: 0;
    border-radius: 50%;
    cursor: pointer;
}

.slick-dots li button:hover,
.slick-dots li.slick-active button {
    background: rgba(255, 255, 255, 1);
}

/***************************************************
			        producers
***************************************************/


.logos-wrapper {
    margin: 50px 0;
}

.logos-wrapper>* {
    float: left;
}

.logos-wrapper>a {
    width: 40px;
    margin-top: 5px;
}

.logos-wrapper .icon-arrow-right {
    float: right;
}

.logos-carousel {
    width: calc(100% - 80px);
}

.logos-carousel li {
    height: 65px;
    line-height: 65px;
    text-align: center;
}

.logos-carousel img {
    vertical-align: middle;
    display: inline;
    max-width: 230px;
}


/***************************************************
			        boxy na głównej
***************************************************/

.boxes-wrapper div {
    position: relative;
    margin-bottom: 30px;
}

.boxes-wrapper img {
    width: 100%;
    display: block;
}

.boxes-wrapper a:hover img {
    opacity: 0.8;
}

.boxes-wrapper span {
    position: absolute;
    top: 15px;
    left: 30px;
    right: 0;
    padding: 15px;
    font-size: 15px;
    text-transform: uppercase;
    text-align: center;
    background: #fff;
}





/***************************************************
Specifics
***************************************************/

.right {
    float: right !important;
}

.left {
    float: left !important;
}

.center {
    float: none !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

.txt-left {
    text-align: left;
}

.txt-right {
    text-align: right;
}

.txt-center {
    text-align: center;
}

/* .color1 i .color2 mają identyczną treść — obie są używane w widokach, więc
   zostają, ale to kandydat do scalenia przy porządkach w markupie. */
.color1 {
    color: var(--c-brand-700) !important;
}

.color2 {
    color: var(--c-brand-700) !important;
}

hr {
    background: var(--c-line);
    height: 1px;
    border: 0;
    margin: var(--s-5) 0;
    clear: both;
}



.img-6-right,
.img-6-left,
.img-4-right,
.img-4-left {
    width: 100%;
    margin: 20px 0;
}

p img {
    margin-top: 0 !important;
}

@media (min-width: 600px) {
    .img-6-right {
        width: 50%;
        float: right;
        margin: 20px 0 20px 40px;
    }

    .img-6-left {
        width: 50%;
        float: left;
        margin: 20px 40px 20px 0;
    }

    .img-4-right {
        width: 33%;
        float: right;
        margin: 20px 0 20px 40px;
    }

    .img-4-left {
        width: 33%;
        float: left;
        margin: 20px 40px 20px 0;
    }
}


/* Kafelki paginacji to .btn.btn-s.btn-light + .current (application/controllers/init.php:64) —
   wygląd przycisku pochodzi z sekcji Buttons, tutaj tylko rozkład. */
.pagination {
    text-align: center;
    margin: var(--s-6) 0;
}

.pagination a {
    margin: 0 var(--s-1);
}

.pagination-dots {
    color: var(--c-ink-300);
    margin: 0 var(--s-1);
}


.loader {
    background: url(/assets/img/loader.gif) no-repeat center;
    position: absolute;
    z-index: 9999;
    height: 100%;
    padding: 10px;
    margin: -10px;
}



/* Karta w prawym dolnym rogu zamiast szarej wstążki na całą szerokość, która
   na mobile zajmowała trzy linijki i trwale zasłaniała dolne 50px ekranu (G6). */
#cookies {
    position: fixed;
    right: var(--s-5);
    bottom: var(--s-5);
    left: auto;
    width: calc(100% - 2 * var(--s-5));
    max-width: 420px;
    padding: var(--s-5);
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-lg);
    box-shadow: var(--sh-3);
    font-size: var(--t-sm);
    line-height: var(--lh-body);
    color: var(--c-ink-700);
    text-align: left;
    z-index: 999;
}

#cookies h2 {
    margin: 0 0 var(--s-2);
    font-family: var(--f-head);
    font-size: var(--t-h3);
    color: var(--c-ink-900);
}

#cookies p {
    margin: 0 0 var(--s-4);
    color: var(--c-ink-500);
}

.cookies-actions {
    display: flex;
    align-items: center;
    gap: var(--s-4);
}

#cookies .ok {
    height: 44px;
    padding: 0 var(--s-5);
}

.cookies-more {
    font-size: var(--t-sm);
    color: var(--c-ink-500);
    white-space: nowrap;
}

.cookies-more:hover {
    color: var(--c-brand-700);
}

/* Karta unosi się nad treścią, więc nie trzeba już odsuwać całej strony —
   wstążka zajmowała pełną szerokość i wymagała marginesu na body. */
body.hasCookies {
    margin-bottom: 0;
}

@media (max-width: 599px) {
    /* Bottom sheet: pełna szerokość, zaokrąglenie tylko u góry. */
    #cookies {
        right: 0;
        bottom: 0;
        width: 100%;
        max-width: none;
        border-radius: var(--r-lg) var(--r-lg) 0 0;
        border-left: 0;
        border-right: 0;
        border-bottom: 0;
        padding-bottom: calc(var(--s-5) + env(safe-area-inset-bottom));
    }

    .cookies-actions {
        flex-direction: column;
        align-items: stretch;
        gap: var(--s-3);
    }

    #cookies .ok {
        display: flex;
        width: 100%;
    }

    .cookies-more {
        text-align: center;
    }
}


/***************************************************
Zewnętrzne pluginy
***************************************************/

/* To jest widoczny komunikat błędu formularza — qtip wypełniany treścią
   z .form-error (assets/js/scripts.js:242). Trzyma paletę semantyczną. */
.qtip-error {
    background-color: var(--c-error-bg) !important;
    border-color: var(--c-error-fg) !important;
    color: var(--c-error-fg) !important;
    border-radius: var(--r-md);
}

.qtip-error .qtip-content {
    padding: var(--s-2) var(--s-3);
    font-size: var(--t-sm);
}

.qtip-info {
    background-color: var(--c-brand-700) !important;
    border-color: var(--c-brand-700) !important;
    color: var(--c-white) !important;
    border-radius: var(--r-md);
}


/***************************************************
Dialog
***************************************************/

/* Add some nice box-shadow-ness to the dialogues */
.qtip.qtip-dialogue {
    max-width: 600px;
    min-width: 210px;

    -moz-box-shadow: 0 0 10px 1px rgba(0, 0, 0, .5);
    -webkit-box-shadow: 0 0 10px 1px rgba(0, 0, 0, .5);
    box-shadow: 0 0 10px 1px rgba(0, 0, 0, .5);
    padding: 0;

    background: #fff;
    border: 1px solid #eee;
}

.qtip.qtip-dialogue .qtip-titlebar {
    padding: 20px;
    background: #eee;
}

.qtip.qtip-dialogue .qtip-content {
    padding: 10px 20px 20px 20px;
}

.qtip.qtip-dialogue .qtip-content p {
    text-align: center;
}

.qtip.qtip-dialogue button {
    float: left;
    width: 47%;
    margin-top: 20px;
    margin-right: 10px;
}

.qtip.qtip-dialogue button:only-of-type {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

.qtip.qtip-dialogue button+button {
    float: right;
    margin-right: 0;
}



.qtip .product-added {
    text-align: left;
}

.qtip .product-added img {
    width: 80px;
    margin-right: 10px;
    float: left;
}

.qtip .product-added p {
    float: left;
    text-align: left !important;
    margin: 22px 0;
}


@media (max-width: 599px) {
    .qtip.qtip-dialogue {
        min-width: 320px;
    }
}


/***************************************************
Forms
***************************************************/

fieldset.form {
    border: 0;
    padding: 0;
    margin: 0;
}

fieldset.form-center {
    max-width: 500px;
    width: 100%;
    margin: 0 auto;
}


/* wiersz */
.form-group {
    clear: both;
    margin-bottom: var(--s-4);
}

fieldset.form-info .form-group {
    margin-bottom: 0;
}


/* buttony */
fieldset.form .form-btns {
    text-align: center;
    margin-top: var(--s-5);
}


/* podpis */
.form-label {
    text-align: left;
    padding-top: var(--s-2);
    padding-bottom: var(--s-2);
    font-size: var(--t-sm);
    color: var(--c-ink-700);
    position: relative;
}


/* „(wymagane)" — neutralne, nie czerwone. Czerwień przed jakąkolwiek interakcją
   czyta się jak komunikat o błędzie. */
.form-req {
    color: var(--c-ink-500);
    font-weight: normal;
}


/* grupa kontolek */
.form-control-group {
    max-width: 600px;
    margin: 6px 0;
    float: left;
}

.form-error {
    display: none;
}


/* kontrolka */
.form-control {
    background: var(--c-white);
    height: 48px;
    padding: 0 14px;
    margin: 0;
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    font-family: var(--f-body);
    font-size: var(--t-body);
    color: var(--c-ink-700);
    width: 100%;
    transition: border-color var(--dur) var(--ease);
}

.form-control:hover {
    border-color: var(--c-brand-300);
}

.form-control:focus {
    outline: 2px solid var(--c-brand-500);
    outline-offset: 2px;
    border-color: var(--c-brand-300);
}

select.form-control {
    cursor: pointer;
}

textarea.form-control {
    height: auto;
    min-height: 96px;
    padding: var(--s-3) 14px;
    line-height: var(--lh-body);
    resize: vertical;
}

/* Stan błędu. Mechanizm: system/helpers/form.php:463 wstrzykuje do .form-group
   ukryty <div class="form-error">, a assets/js/scripts.js:242 zamienia go w qtip.
   Sam .form-group nie dostaje żadnej klasy, więc podpinamy się pod obecność
   .form-error wewnątrz niego. */
.form-group:has(.form-error) .form-control {
    border-color: var(--c-error-fg);
    background: var(--c-error-bg);
}

.form-control-lg {
    width: 400px;
}

.form-control-sm {
    width: 100px;
}

.form-control-checkbox {
    width: 20px;
    height: 20px;
    accent-color: var(--c-brand-700);
    margin-right: var(--s-2);
    vertical-align: middle;
}

/* Stepper ilości: .btn-s + input + .btn-s (products/show.php, cart/index.php,
   favourites/index.php). To ma być JEDNO obramowane pudełko, dlatego przyciski
   i pole w środku tracą własne ramki, tła i zaokrąglenia, które dostają
   z .btn i .form-control. Wcześniej elementy pływały floatem i po restylowaniu
   przycisków rozpadały się na trzy osobne kafelki. */
.form-control-number {
    display: flex;
    align-items: center;
    height: 48px;
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    background: var(--c-white);
    overflow: hidden;
}

.form-control-number .form-control {
    flex: 1;
    min-width: 0;
    width: auto;
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    text-align: center;
    color: var(--c-ink-900);
}

.form-control-number .form-control:hover,
.form-control-number .form-control:focus {
    border: 0;
    outline: 0;
}

.form-control-number .btn {
    flex: none;
    width: 44px;
    min-width: 44px;
    height: 100%;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--c-ink-700);
    font-size: var(--t-lg);
    letter-spacing: normal;
    box-shadow: none;
}

.form-control-number .btn:hover {
    background: var(--c-surface);
    color: var(--c-brand-700);
    box-shadow: none;
}

.form-control-range input {
    float: left;
    width: 40%;
}

.form-control-range span {
    width: 20%;
    float: left;
    text-align: center;
    margin: 9px 0;
}


.form-control-info {
    font-weight: bold;
    margin-top: var(--s-3);
    margin-bottom: var(--s-3);
}

.form-control-info strike {
    font-weight: normal;
    color: var(--c-ink-500);
}

::placeholder {
    color: var(--c-ink-300);
    opacity: 1;
}





/***************************************************
Messages
***************************************************/

/* Płaskie tła zestrojone z marką. Poprzednia wersja miała gradienty w pięciu
   prefiksach plus filter: progid:DXImageTransform (IE 6–9) — usunięte.
   Wersaliki i wyśrodkowanie też zdjęte: komunikat ma być czytelny, nie krzyczeć. */
.msg {
    text-align: left;
    letter-spacing: normal;
    font-weight: normal;
    font-size: var(--t-body);
    line-height: var(--lh-body);
    padding: var(--s-4) var(--s-5);
    margin-bottom: var(--s-4);
    border-radius: var(--r-md);

    color: var(--c-success-fg);
    background: var(--c-success-bg);
}

.msg.msg-info {
    color: var(--c-info-fg);
    background: var(--c-info-bg);
}

.msg.msg-warning {
    color: var(--c-warn-fg);
    background: var(--c-warn-bg);
}

.msg.msg-danger {
    color: var(--c-error-fg);
    background: var(--c-error-bg);
}

.msg.msg-success {
    color: var(--c-success-fg);
    background: var(--c-success-bg);
}


/***************************************************
Buttons
***************************************************/

/* Primary. Tło było #61a375 (zieleń marki) pod białym tekstem = 3,00:1, czyli
   poniżej progu AA. Teraz brand-700 (5,11:1), hover brand-900 (8,42:1).
   Wysokość 48px — próg dotyku. */
.btn {
    color: var(--c-white);
    font-family: var(--f-body);
    font-size: var(--t-body);
    font-weight: 400;
    text-align: center;
    text-transform: none;
    letter-spacing: var(--ls-caps);

    vertical-align: middle;
    white-space: nowrap;
    cursor: pointer;

    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--s-2);
    height: 48px;
    padding: 0 28px;
    border: 1px solid transparent;
    border-radius: var(--r-md);

    background: var(--c-brand-700);
    transition: background var(--dur) var(--ease),
        border-color var(--dur) var(--ease),
        color var(--dur) var(--ease),
        box-shadow var(--dur) var(--ease);
}

.btn:hover {
    color: var(--c-white);
    background: var(--c-brand-900);
    box-shadow: var(--sh-2);
}

.btn:active {
    box-shadow: none;
}

/* Secondary (outline) */
.btn-light {
    color: var(--c-brand-700);
    background: transparent;
    border-color: var(--c-brand-700);
}

.btn-light:hover {
    color: var(--c-brand-900);
    background: var(--c-brand-100);
    border-color: var(--c-brand-900);
    box-shadow: none;
}

/* Aktywna strona w paginacji */
.btn.current {
    color: var(--c-white);
    background: var(--c-brand-700);
    border-color: var(--c-brand-700);
}

/* Kwadratowy wariant: stepper ilości i kafelki paginacji. min-width zamiast
   sztywnej szerokości, żeby numer strony „100" się zmieścił. */
.btn-s {
    text-align: center;
    min-width: 44px;
    height: 44px;
    padding: 0 var(--s-2);
}

.btn-s [class*="icon-"] {
    margin: 0 auto;
}

.btn-block {
    width: 100%;
    display: flex;
    box-sizing: border-box;
    -moz-box-sizing: border-box;
}

.btn-disabled,
.btn:disabled {
    color: var(--c-ink-300);
    background: var(--c-line);
    border-color: var(--c-line);
    cursor: not-allowed;
}

.btn-disabled:hover,
.btn:disabled:hover {
    color: var(--c-ink-300);
    background: var(--c-line);
    box-shadow: none;
}


.btns {
    margin-top: var(--s-6);
    clear: both;
}


@media (max-width: 599px) {
    .btns a {
        width: 100%;
        display: flex;
        margin-top: var(--s-3);
    }
}

/***************************************************
Links
***************************************************/

.link {
    color: var(--c-brand-700);
    text-underline-offset: 4px;
}

.link:hover {
    color: var(--c-brand-900);
    text-decoration: underline;
}

.link .icon-arrow-s-right {
    margin: -5px 0 -5px 10px;
    vertical-align: initial;
}

.link .icon-arrow-s-left {
    margin: -5px 10px -5px 0;
    vertical-align: initial;
}

.link-u {
    text-decoration: underline;
}

.link-info {
    color: var(--c-info-fg);
}

.link-success {
    color: var(--c-success-fg);
}

.link-danger {
    color: var(--c-error-fg);
}

/***************************************************
Icons
***************************************************/

[class*="icon-"] {
    display: inline-block;
    vertical-align: middle;
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
    content: '';
}

.icon-search {
    width: 23px;
    height: 23px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-search' width='24' height='24' viewBox='0 0 24 24' stroke-width='1.9' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Ccircle cx='10' cy='10' r='7'/%3E%3Cline x1='21' y1='21' x2='15' y2='15'/%3E%3C/svg%3E");
}

a:hover .icon-search {}

.icon-cart {
    width: 24px;
    height: 26px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-shopping-cart' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M6 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M17 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M17 17h-11v-14h-2' /%3E%3Cpath d='M6 5l14 1l-1 7h-13' /%3E%3C/svg%3E");
}

a:hover .icon-cart {}

.icon-user {
    width: 24px;
    height: 24px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-user' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0' /%3E%3Cpath d='M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2' /%3E%3C/svg%3E");
}

.icon-cart-small {
    width: 25px;
    height: 20px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-shopping-cart' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23ffffff' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M6 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M17 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M17 17h-11v-14h-2' /%3E%3Cpath d='M6 5l14 1l-1 7h-13' /%3E%3C/svg%3E");
}

.btn .icon-cart-small {
    margin: -2px 10px -5px 0;
    vertical-align: text-top;
}

.icon-arrow-light-right,
.icon-arrow-light-left {
    width: 26px;
    height: 52px;
    display: block;
}

.icon-arrow-light-left {
    -ms-transform: rotate(180deg);
    -webkit-transform: rotate(180deg);
    transform: rotate(180deg);
}

.icon-arrow-right,
.icon-arrow-left {
    width: 17px;
    height: 34px;

    display: block;
}

a:hover .icon-arrow-right,
a:hover .icon-arrow-left {}

.icon-arrow-left {
    -ms-transform: rotate(180deg);
    -webkit-transform: rotate(180deg);
    transform: rotate(180deg);
}

.icon-arrow-s-right,
.icon-arrow-s-left {
    width: 15px;
    height: 21px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-chevron-right' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000000' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpolyline points='9 6 15 12 9 18' /%3E%3C/svg%3E");
}

a:hover .icon-arrow-s-right,
a:hover .icon-arrow-s-left {}

.icon-arrow-s-left {
    -ms-transform: rotate(180deg);
    -webkit-transform: rotate(180deg);
    transform: rotate(180deg);
}

.icon-newsletter {
    width: 42px;
    height: 41px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-mail-filled' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M22 7.535v9.465a3 3 0 0 1 -2.824 2.995l-.176 .005h-14a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-9.465l9.445 6.297l.116 .066a1 1 0 0 0 .878 0l.116 -.066l9.445 -6.297z' stroke-width='0' fill='currentColor' /%3E%3Cpath d='M19 4c1.08 0 2.027 .57 2.555 1.427l-9.555 6.37l-9.555 -6.37a2.999 2.999 0 0 1 2.354 -1.42l.201 -.007h14z' stroke-width='0' fill='currentColor' /%3E%3C/svg%3E");
}

.icon-fb {
    width: 42px;
    height: 42px;
    background-color: #61a375;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='17' height='17' viewBox='0 0 17 17'><g></g> <path d='M12.461 5.57l-0.309 2.93h-2.342v8.5h-3.518v-8.5h-1.753v-2.93h1.753v-1.764c0-2.383 0.991-3.806 3.808-3.806h2.341v2.93h-1.465c-1.093 0-1.166 0.413-1.166 1.176v1.464h2.651z' fill='%23ffffff'/></svg>");
    background-position: center;
    background-size: 24px;
    background-repeat: no-repeat;
}

.icon-home {
    width: 20px;
    height: 17px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='17' viewBox='0 0 20 17'%3E%3Cg id='_3a09a524440d44d7f19870070a5ad42f' data-name='3a09a524440d44d7f19870070a5ad42f' transform='translate(-10.05 -77.45)'%3E%3Cg id='Group_1' data-name='Group 1' transform='translate(10.05 77.45)'%3E%3Cpath id='Path_1' data-name='Path 1' d='M158.971,538.2a.594.594,0,0,0-.6.587v5.965H146.2v-5.963a.6.6,0,0,0-1.2,0v6.553a.594.594,0,0,0,.6.587h13.374a.594.594,0,0,0,.6-.587v-6.553A.6.6,0,0,0,158.971,538.2Z' transform='translate(-142.286 -528.929)'/%3E%3Cpath id='Path_2' data-name='Path 2' d='M29.874,86.89l-9.4-9.268a.6.6,0,0,0-.843,0l-9.4,9.268a.582.582,0,0,0,0,.831.6.6,0,0,0,.845,0l8.98-8.851,8.982,8.851a.6.6,0,0,0,.843,0A.578.578,0,0,0,29.874,86.89Z' transform='translate(-10.05 -77.45)'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A");
}

.icon-free-delivery {
    width: 52px;
    height: 45px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-truck-delivery' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M7 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M17 17m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' /%3E%3Cpath d='M5 17h-2v-4m-1 -8h11v12m-4 0h6m4 0h2v-6h-8m0 -5h5l3 5' /%3E%3Cpath d='M3 9l4 0' /%3E%3C/svg%3E");
}

.icon-producer {
    width: 50px;
    height: 45px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-plant-2' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M2 9a10 10 0 1 0 20 0' /%3E%3Cpath d='M12 19a10 10 0 0 1 10 -10' /%3E%3Cpath d='M2 9a10 10 0 0 1 10 10' /%3E%3Cpath d='M12 4a9.7 9.7 0 0 1 2.99 7.5' /%3E%3Cpath d='M9.01 11.5a9.7 9.7 0 0 1 2.99 -7.5' /%3E%3C/svg%3E");
    margin-left: 16px;
}

.icon-24h {
    width: 40px;
    height: 45px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-clock' width='44' height='44' viewBox='0 0 24 24' stroke-width='1.5' stroke='%232c3e50' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0' /%3E%3Cpath d='M12 7v5l3 3' /%3E%3C/svg%3E");
    margin-left: 16px;
}


/***************************************************
Table
***************************************************/
table.table {
    margin: 10px auto;
    clear: both;
    width: 100%;
    border-collapse: collapse;
    border: 1px solid #C2C2C2;
}

table.table thead tr {
    background: #f9f9f9;
    /* Old browsers */
    background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
    /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9), color-stop(100%, #e6e6e6));
    /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
    /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
    /* Opera 11.10+ */
    background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
    /* IE10+ */
    background: linear-gradient(to bottom, #f9f9f9 0%, #e6e6e6 100%);
    /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
    /* IE6-9 */
}

table.table thead th {
    font-weight: bold;
    padding: 8px 10px;
    border-right: 1px solid #C2C2C2;
    border-bottom: 1px solid #C2C2C2;
}

table.table thead th[data-sort] {
    cursor: pointer;
    *cursor: hand;
}

table.table thead th span {
    margin: 0 0 0 2px;
}


table.table td {
    padding: 6px 10px;
    border-right: 1px solid #C2C2C2;
    border-bottom: 1px solid #C2C2C2;
}

table.table tr:nth-child(odd) {
    background-color: #fff;
}

table.table tr:nth-child(even) {
    background-color: #f6f6f6;
}

table.table tr:hover {
    background-color: #ebebeb;
}

table.table tr td.sub {
    padding-left: 30px;
}

table.table input[type=text] {
    margin: -4px -5px;
    padding: 2px;
}

table.table input[type=text].act-order {
    width: 30px;
    text-align: center;
}


/***************************************************
nawigacja
***************************************************/

/* Ujemny margines dolny (-15px) kompensował wypychany floatem select sortowania,
   którego już tu nie ma — zwykły odstęp wystarczy.
   Górne 48px to oddech pod sticky headerem: breadcrumb jest pierwszym elementem
   treści na podstronach i bez tego przykleja się do belki. */
.breadcrumb {
    font-size: var(--t-sm);
    color: var(--c-ink-500);
    margin: var(--s-7) 0 var(--s-4);
}

.breadcrumb a {
    color: var(--c-ink-500);
}

.breadcrumb a:hover {
    color: var(--c-brand-700);
}

/* Separator „›" */
.breadcrumb span {
    margin: 0 var(--s-2);
    color: var(--c-ink-300);
}
/* Bieżąca strona — ostatni element, bez linku. Musi wyjść spod reguły powyżej,
   bo też jest spanem, a wyglądałaby wtedy jak separator. */
.breadcrumb .breadcrumb-current {
    margin: 0;
    color: var(--c-ink-700);
    font-weight: 600;
}

.breadcrumb span.icon-home {
    margin: -2px 0 0 0;
}

.breadcrumb a {}

.breadcrumb a:hover {
    text-decoration: underline;
}

/* .breadcrumb .sort zniknęło — select sortowania przeniósł się do paska filtrów
   (application/views/products/ajax_filters.php). Wcześniej wisiał wypchnięty
   floatem w prawym górnym rogu breadcrumba, wizualnie oderwany od reszty (L2). */



/***************************************************
podstrona - kontakt
***************************************************/

@media (max-width: 899px) {
    .wrapper-contact .g-col-6:first-child {
        margin-bottom: 50px;
    }
}



/***************************************************
główna
***************************************************/


.boxes-wrapper .boxes-item {
    text-align: center;
}

.boxes-wrapper h3 {
    font-size: 24px;
    margin: 10px 0;
}


/***************************************************
podstrona - galeria
***************************************************/

/*.p-gallery article {*/
/*float: left;*/
/*margin: 0 0 20px 20px;*/
/*width: 210px;*/
/*}*/
/*.p-gallery article:nth-child(4n+1) {*/
/*margin-left: 0;*/
/*}*/


/***************************************************
podstrona - galeria szczegóły
***************************************************/

/*.p-gallery-show article {*/
/*float: left;*/
/*margin: 0 0 15px 15px;*/
/*width: 210px;*/
/*}*/
/*.p-gallery-show article:nth-child(3n+1) {*/
/*margin-left: 0;*/
/*}*/


/***************************************************
moduł - news
***************************************************/

/*.m-news article {
    margin-bottom: 15px;
}
.m-news article header {
    margin-bottom: 10px;
    height: 100%;
    overflow: hidden;
}
.m-news article header h2 {
    margin: 0;
    float: left;
}
.m-news article header h2 a {
    text-decoration: none;
}
.m-news article header time {
    color: #999;
    float: right;
}
.m-news article figure {
    float: left;
    margin-right: 10px;
}
.m-news article figure img {
    width: 90px;
    display: block;
}
.m-news article section time {
    color: #999;
}
.m-news article section p {
    margin: 10px 0;
}*/


/***************************************************
box - oferta na głównej
***************************************************/

.b-carouse {
    margin: -10px -10px 40px -10px;
}

.b-carouse .item {
    padding: 0 10px;
    margin: 10px 0;
}


/***************************************************
moduł - katogorie
***************************************************/

/* Nagłówek listingu */
.listing-head {
    margin-bottom: var(--s-6);
}
.listing-head h1 {
    margin: 0 0 var(--s-3);
}
.listing-lead {
    margin: 0;
    max-width: 68ch;
    color: var(--c-ink-500);
    line-height: var(--lh-body);
}


/* Poziomy pasek filtrów — zastąpił sidebar 290px (L1).

   Na mobile jest zwinięty i rozwija go „Pokaż filtry" przez slideToggle, który
   ustawia inline display:block. Dlatego reguła desktopowa musi mieć !important —
   inaczej po rozwinięciu na wąskim ekranie i powiększeniu okna pasek zostałby
   blokiem zamiast wrócić do układu poziomego. */
.offers-filters {
    display: none;
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    box-shadow: var(--sh-1);
    padding: var(--s-5);
    margin-bottom: var(--s-6);
}

@media (min-width: 900px) {
    .offers-filters {
        display: flex !important;
        align-items: flex-end;
        justify-content: space-between;
        gap: var(--s-6);
        /* Pod sticky headerem (72px) plus oddech. */
        position: sticky;
        top: 72px;
        z-index: 3;
    }
}

.filters-group {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: var(--s-5);
}
.filters-group:last-child {
    margin-bottom: 0;
}
@media (min-width: 900px) {
    .filters-group {
        margin-bottom: 0;
    }
}

.filters-label {
    font-size: var(--t-sm);
    color: var(--c-ink-700);
}

/* Chipsy kategorii */
.filters-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}
.chip {
    display: inline-flex;
    align-items: center;
    height: 40px;
    padding: 0 18px;
    border: 1px solid var(--c-line);
    border-radius: var(--r-full);
    background: var(--c-white);
    color: var(--c-ink-700);
    font-size: var(--t-sm);
    white-space: nowrap;
    transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.chip:hover {
    border-color: var(--c-brand-300);
    color: var(--c-brand-700);
}
.chip.is-active {
    background: var(--c-brand-700);
    border-color: var(--c-brand-700);
    color: var(--c-white);
}

/* Zakres ceny — było dwa gołe inputy bez etykiet i bez waluty. */
.filters-price {
    display: flex;
    align-items: center;
    gap: 10px;
}
.filters-price-field {
    position: relative;
    display: inline-block;
}
.filters-price-field .form-control {
    width: 96px;
    height: 40px;
    padding: 0 32px 0 12px;
    font-size: var(--t-sm);
}
.filters-price-unit {
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    font-size: var(--t-sm);
    color: var(--c-ink-500);
    pointer-events: none;
}
.filters-price-sep {
    color: var(--c-ink-300);
}
.btn-filter {
    height: 40px;
    padding: 0 18px;
    font-size: var(--t-sm);
    letter-spacing: normal;
}

/* Select sortowania z własnym chevronem */
.filters-select {
    position: relative;
}
.filters-select .form-control {
    width: 220px;
    height: 40px;
    padding: 0 40px 0 12px;
    font-size: var(--t-sm);
    appearance: none;
}
.filters-select-chevron {
    position: absolute;
    right: 14px;
    top: 50%;
    transform: translateY(-50%);
    pointer-events: none;
    color: var(--c-ink-500);
    font-size: var(--t-xs);
}

@media (max-width: 899px) {
    .filters-price-field,
    .filters-price-field .form-control,
    .filters-select .form-control {
        width: 100%;
    }
    .filters-price {
        flex-wrap: wrap;
    }
    .btn-filter {
        flex: 1 0 100%;
    }
}


/* Pasek nad siatką: licznik wyników i reset filtrów */
.offers-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--s-4);
    margin-bottom: var(--s-5);
}
.offers-count {
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}
.offers-reset {
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}
.offers-reset:hover {
    color: var(--c-brand-700);
}

.offers-empty {
    padding: var(--s-8) 0;
    text-align: center;
    color: var(--c-ink-500);
}
.offers-empty p {
    margin: 0 0 var(--s-5);
}


.offers-filters-attrs-hide,
.offers-filters-attrs-more {
    display: none;
}


.offers-filters-nav {
    margin-bottom: var(--s-5);
}



.mobile-cat {
    display: block;
    height: 52px;
    line-height: 52px;
    text-align: center;
    text-decoration: none;
    transition: top .25s linear;
    -moz-transition: top .25s linear;
    -webkit-transition: top .25s linear;
}

@media (min-width: 900px) {
    .mobile-cat {
        display: none;
    }
}

.mobile-cat:hover {
    text-decoration: none;
}

.mobile-cat span {
    position: relative;
    padding-left: 35px;
    color: #000;
    font-size: 16px;
    font-weight: 700;
    text-transform: uppercase;
    display: inline-block;
}

.mobile-cat span::after {
    display: block;
    position: absolute;
    top: 24px;
    left: 0;
    width: 25px;
    height: 3px;
    background: #000;
    box-shadow: 0 6px 0 #000,
        0 -6px 0 #000;
    content: '';
}


/***************************************************
moduł - oferta
***************************************************/

.offers-producerText {
    margin-bottom: 50px;
}

/* Kafelek produktu. Wcześniej nie był kartą: bez tła, borderu, cienia i hoveru,
   a obrazek siedział w figure o sztywnej wysokości 330px z max-width 90%
   i pozycjonowaniem absolutnym — stąd ogromne luki w siatce (H6, H7).
   Teraz karta z proporcją 4/5 i object-fit: cover, wypełniająca kolumnę. */
.offers-item {
    display: block;
    margin-bottom: var(--s-5);
}

.offers-link {
    display: flex;
    flex-direction: column;
    height: 100%;
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    overflow: hidden;
    color: var(--c-ink-700);
    transition: box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease);
}

.offers-link:hover {
    color: var(--c-ink-700);
    box-shadow: var(--sh-2);
    transform: translateY(-2px);
}

.offers-figure {
    position: relative;
    aspect-ratio: 4 / 5;
    background: var(--c-surface);
    overflow: hidden;
}

.offers-figure img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform var(--dur) var(--ease);
}

.offers-link:hover .offers-figure img {
    transform: scale(1.03);
}

.offers-badges {
    position: absolute;
    top: var(--s-3);
    left: var(--s-3);
    display: flex;
    flex-wrap: wrap;
    gap: var(--s-2);
}

/* Afordancja klikalności. Brief chciał tu „Do koszyka", ale dodawanie do koszyka
   z listingu nie istnieje — patrz komentarz w application/views/products/item.php. */
.offers-cta {
    position: absolute;
    left: var(--s-3);
    right: var(--s-3);
    bottom: var(--s-3);
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--r-md);
    background: var(--c-brand-700);
    color: var(--c-white);
    font-size: var(--t-sm);
    letter-spacing: var(--ls-caps);
    opacity: 0;
    transform: translateY(var(--s-2));
    transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease);
}

.offers-link:hover .offers-cta,
.offers-link:focus-visible .offers-cta {
    opacity: 1;
    transform: translateY(0);
}

/* Na dotyku nie ma hoveru — przycisk musi być widoczny od razu. */
@media (hover: none) {
    .offers-cta {
        opacity: 1;
        transform: none;
    }
}

.offers-description {
    display: flex;
    flex-direction: column;
    gap: var(--s-2);
    padding: var(--s-4);
}

/* Nazwy produktów były w wersalikach („SERCE 40 CM") i tym samym stylem co cena
   — brak hierarchii w kafelku (H5). */
.offers-title {
    color: var(--c-ink-700);
    font-size: var(--t-body);
    font-weight: normal;
    text-transform: none;
    line-height: var(--lh-tight);
    margin: 0;
}

.offers-item p {
    margin: 0;
}

.price {
    font-size: var(--t-lg);
    font-weight: 600;
    color: var(--c-ink-900);
}

.price-prom {
    color: var(--c-brand-700);
}

.price-prom strike {
    font-size: var(--t-sm);
    font-weight: normal;
    color: var(--c-ink-500);
}

.price-min {
    display: block;
    margin-top: var(--s-2);
    font-size: var(--t-xs);
    font-weight: normal;
    color: var(--c-ink-500);
}

.label-promotion,
.label-new,
.label-shipping {
    display: inline-flex;
    align-items: center;
    height: 24px;
    padding: 0 10px;
    border-radius: var(--r-full);
    font-size: var(--t-xs);
    background: var(--c-brand-100);
    color: var(--c-brand-900);
}

.label-new {
    background: var(--c-accent-700);
    color: var(--c-white);
}


/***************************************************
strona - główna
***************************************************/

/* .mainInfo-* (pasek USP pod hero) zniknął — trzy argumenty sprzedażowe
   przeniesione do globalnej belki .usp-bar nad headerem (G4). */

.section {
    padding: var(--section-y) 0 0;
}

.section:last-child {
    padding-bottom: var(--section-y);
}

.section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--s-5);
    margin-bottom: var(--s-6);
}

.section-head h2 {
    margin: 0;
}

.section-lead {
    margin: var(--s-2) 0 0;
    color: var(--c-ink-500);
}

.section-more {
    flex: none;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
    border-bottom: 1px solid var(--c-line);
    padding-bottom: 2px;
    white-space: nowrap;
    transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}

.section-more:hover {
    color: var(--c-brand-700);
    border-color: var(--c-brand-300);
}

.section-cta {
    display: flex;
    justify-content: center;
    margin: var(--s-7) 0 0;
}

@media (max-width: 899px) {
    .section {
        padding-top: var(--section-y-m);
    }

    .section:last-child {
        padding-bottom: var(--section-y-m);
    }

    .section-head {
        flex-direction: column;
        align-items: flex-start;
        gap: var(--s-3);
    }
}




/***************************************************
strona - szczegóły oferty
***************************************************/

.offer-wrapper {
    margin-bottom: var(--s-8);
}

/* Galeria. Zdjęcie główne było bez ramki i bez tła, miniatury z ledwo widoczną
   ramką aktywnej (P1). Kwadratowy kadr z object-fit: contain, żeby maty
   o różnych proporcjach nie skakały wysokością. */
.offer-wrapper figure {
    margin: 0;
}

.offer-photosBig {
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    background: var(--c-surface);
    overflow: hidden;
    margin-bottom: var(--s-4);
}
.offer-wrapper figure a {
    display: block;
    margin: 0;
    cursor: zoom-in;
}
.offer-wrapper figure img {
    width: 100%;
    aspect-ratio: 1 / 1;
    object-fit: contain;
    display: block;
}

.offer-photosSmall {
    position: relative;
    max-width: 360px;
    margin: 0 calc(-1 * var(--s-1));
}

.offer-photosSmall-item {
    cursor: pointer;
    padding: 0;
    margin: 0 var(--s-1);
    border: 2px solid var(--c-line);
    border-radius: var(--r-sm);
    background: var(--c-surface);
    overflow: hidden;
    transition: border-color var(--dur) var(--ease);
}
.offer-photosSmall-item:hover {
    border-color: var(--c-brand-300);
}

.offer-photosSmall-item.slick-current {
    border-color: var(--c-brand-700);
}

.offer-photosSmall .slick-arrow {
    cursor: pointer;
    font-size: 0;
    line-height: 0;
    border: 0;
    width: 15px;
    height: 30px;
    position: absolute;
    left: 0;
    top: 50%;
    margin-top: -15px;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='30' viewBox='0 0 15 30'%3E%3Cg id='b5af04794ac7478ac23942a99f9b7d4d' transform='translate(-269.735 -10.026)'%3E%3Cpath id='Path_1' data-name='Path 1' d='M270.877,40.026a1.191,1.191,0,0,1-.736-.251A1.029,1.029,0,0,1,270,38.263l12.1-13.5L270.561,11.789a1.029,1.029,0,0,1,.143-1.512,1.192,1.192,0,0,1,1.609.135l12.156,13.663a1.025,1.025,0,0,1,0,1.381L271.75,39.644A1.164,1.164,0,0,1,270.877,40.026Z' transform='translate(0 0)'/%3E%3C/g%3E%3C/svg%3E%0A");
}

.offer-photosSmall .slick-prev {
    -webkit-transform: rotate(180deg);
    -moz-transform: rotate(180deg);
    -ms-transform: rotate(180deg);
    -o-transform: rotate(180deg);
    transform: rotate(180deg);
}

.offer-photosSmall .slick-next {
    left: auto;
    right: 0;
}

.offer-producer {
    max-height: 34px;
}


/* Kolumna zakupowa. Rytm pionowy trzyma jeden gap na kolumnie, a nie marginesy
   rozsiane po pojedynczych elementach — inaczej sąsiednie odstępy się sklejają. */
.offer-buy {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: var(--s-5);
}
.offer-buy > * {
    margin: 0;
}

.offer-title {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--s-3);
}
.offer-title h1 {
    margin: 0;
}

#offerPrice {
    margin: 0;
}
.offer-wrapper .price {
    display: block;
    font-weight: 600;
    font-size: var(--t-display);
    line-height: 1;
    color: var(--c-ink-900);
}
.offer-wrapper .price strike {
    font-weight: normal;
}
/* „Najniższa cena z 30 dni" zlewała się z resztą — teraz pod kreską, xs. */
.offer-wrapper .price-min {
    margin-top: var(--s-3);
    padding-top: var(--s-3);
    border-top: 1px solid var(--c-line);
}
.offer-wrapper .price-min strong {
    font-weight: 600;
}

/* Stepper obok CTA, oba wyrównane do lewej jak reszta kolumny. */
.offer-actions {
    display: flex;
    align-items: center;
    gap: var(--s-4);
}
.offer-actions .form-control-number {
    flex: none;
    width: 132px;
    /* Równo z CTA — oba 52px, żeby rząd nie był schodkowy. */
    height: 52px;
}
.offer-actions .act-addCart {
    flex: 1;
    height: 52px;
    min-width: 200px;
}

/* Ta lista siedzi wewnątrz .offer-wrapper.content, więc łapała `.content ul li`
   — zielony punktor z ::before i wcięcie 24px. Kasujemy oba. */
.offer-assurance {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin: 0;
    padding: 0;
    max-width: none;
    list-style: none;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}
.offer-assurance li {
    display: flex;
    align-items: center;
    gap: 10px;
    padding-left: 0;
}
.content .offer-assurance li:before {
    content: none;
}
.offer-assurance svg {
    width: 18px;
    height: 18px;
    flex: none;
    color: var(--c-brand-500);
}

/* Specyfikacja wyciągnięta z prozy opisu (P5) */
.offer-specs {
    margin: 0;
    padding: var(--s-5);
    background: var(--c-surface);
    border-radius: var(--r-md);
    font-size: var(--t-sm);
}
/* Stała kolumna etykiet, wartości wyrównane do lewej — nie rozstrzelone
   na krawędzie, bo przy krótkiej wartości („Polska") powstawała dziura. */
.offer-specs-row {
    display: grid;
    grid-template-columns: 140px 1fr;
    gap: var(--s-3) var(--s-4);
    padding: var(--s-3) 0;
    border-top: 1px solid var(--c-line);
}
.offer-specs-row:first-child {
    border-top: 0;
}
.offer-specs dt {
    color: var(--c-ink-500);
}
.offer-specs dd {
    margin: 0;
    color: var(--c-ink-700);
}


.offer-description {
    margin: 0 0 var(--s-8);
}
.offer-description h2 {
    margin-top: 0;
}

.offer-back {
    margin: var(--s-7) 0 var(--s-8);
}


/* Sticky bottom bar — wyłącznie mobile. Na desktopie kolumna zakupowa i tak
   jest w zasięgu wzroku, więc pasek tylko zabierałby ekran. */
.offer-sticky {
    display: none;
}

@media (max-width: 899px) {
    .offer-sticky {
        display: flex;
        align-items: center;
        gap: var(--s-4);
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 998;
        padding: var(--s-3) var(--gutter-m);
        background: var(--c-white);
        border-top: 1px solid var(--c-line);
        box-shadow: var(--sh-3);
        /* Wcięcie pod pasek gestów na iPhonie. */
        padding-bottom: calc(var(--s-3) + env(safe-area-inset-bottom));
    }

    .offer-sticky-info {
        display: flex;
        flex-direction: column;
        min-width: 0;
    }

    .offer-sticky-name {
        font-size: var(--t-xs);
        color: var(--c-ink-500);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .offer-sticky-price .price {
        font-size: var(--t-lg);
        font-weight: 600;
        color: var(--c-ink-900);
    }

    .offer-sticky .btn {
        flex: 1;
        max-width: 60%;
        margin-left: auto;
    }

    /* Żeby pasek nie zasłaniał końca stopki. Warunek na obecność samego paska,
       bo istnieje wyłącznie na karcie produktu z dostępnym towarem. */
    body:has(.offer-sticky) .g-footer {
        padding-bottom: 76px;
    }
}

@media (max-width: 899px) {
    .offer-actions {
        flex-wrap: wrap;
    }
    .offer-actions .act-addCart {
        flex: 1 0 100%;
    }
    .offer-photosSmall {
        max-width: none;
    }
}

.offer-color {
    display: inline-block;
    width: 21px;
    height: 21px;
    margin: 8px 5px 8px 0;
    border: 2px solid var(--c-line);
    border-radius: var(--r-full);
    cursor: pointer;
}

.offer-color.sel {
    border-color: var(--c-brand-700);
}





/***************************************************
podstrona - koszyk
***************************************************/

/* Krok w checkoucie. Trzy pozycje, nie cztery — dostawa i płatność wybierane
   są na stronie koszyka, więc realny przepływ to /koszyk → /koszyk/login → kasa. */
/* Ta lista siedzi w .cart-wrapper.content, a `.content ol` (0,1,1) bije samo
   `.checkout-steps` (0,1,0) i narzucało display:block z wcięciem i numeracją —
   kroki układały się pionowo. Stąd selektor z .content w przedrostku. */
.content .checkout-steps,
.checkout-steps {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0;
    /* Tak samo jak .breadcrumb — to pierwszy element treści pod headerem. */
    margin: var(--s-7) 0 var(--s-6);
    padding: 0;
    max-width: none;
    list-style: none;
    font-size: var(--t-sm);
    color: var(--c-ink-300);
}

.checkout-steps li {
    display: flex;
    align-items: center;
    padding-left: 0;
}

/* Separator „›" między krokami — ten sam znak co w breadcrumbach. */
.checkout-steps li + li:before {
    content: '\203A';
    margin: 0 var(--s-4);
    color: var(--c-ink-300);
}

.checkout-steps li.is-active {
    color: var(--c-brand-700);
    font-weight: 600;
}

/* Kroki już przebyte — czytelniejsze niż te przed nami, ale bez akcentu. */
.checkout-steps li.is-done {
    color: var(--c-ink-500);
}


/* Układ: lista pozycji + przyklejone podsumowanie */
.cart-layout {
    display: grid;
    grid-template-columns: 1fr 360px;
    gap: var(--s-7);
    align-items: start;
    margin-bottom: var(--s-8);
}

.cart-list {
    margin-bottom: var(--s-6);
}

.cart-item {
    display: grid;
    grid-template-columns: 96px 1fr auto auto 40px;
    align-items: center;
    gap: var(--s-4);
    border-bottom: 1px solid var(--c-line);
    padding: var(--s-5) 0;
    position: relative;
}

.cart-item:first-child {
    border-top: 1px solid var(--c-line);
}

.cart-item-photo {
    margin: 0;
    width: 96px;
    aspect-ratio: 1 / 1;
    border-radius: var(--r-sm);
    background: var(--c-surface);
    overflow: hidden;
}

.cart-item-photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.cart-item-description {
    min-width: 0;
}

.cart-item h3 {
    margin: 0 0 var(--s-1);
    font-family: var(--f-head);
    font-size: var(--t-h3);
    color: var(--c-ink-900);
}

.cart-item-unit,
.cart-item-meta {
    margin: 0;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

.cart-item-qty .form-control-number {
    width: 132px;
    height: 44px;
}

.cart-item-total .price {
    font-size: var(--t-lg);
    font-weight: 600;
    color: var(--c-ink-900);
    white-space: nowrap;
}

/* Usuwanie: było „X" jako pełnowymiarowy zielony przycisk. */
.cart-item .act-del {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--r-md);
    color: var(--c-ink-300);
    transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}

.cart-item .act-del:hover {
    background: var(--c-error-bg);
    color: var(--c-error-fg);
}

.cart-item .act-del svg {
    width: 20px;
    height: 20px;
}

.cart-item .offer-color {
    margin: -2px 5px -5px 0;
}


/* Podsumowanie */
.cart-aside {
    position: sticky;
    top: 96px;
}

.cart-summary {
    background: var(--c-surface);
    border-radius: var(--r-lg);
    padding: var(--s-6);
}

.cart-summary h2 {
    margin: 0 0 var(--s-4);
    font-size: var(--t-h3);
}

.cart-summary dl {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: var(--s-2) var(--s-4);
    margin: 0;
    font-size: var(--t-sm);
}

.cart-summary dt {
    color: var(--c-ink-500);
}

.cart-summary dd {
    margin: 0;
    text-align: right;
    color: var(--c-ink-700);
}

.cart-summary-total {
    margin-top: var(--s-4);
    padding-top: var(--s-4);
    border-top: 1px solid var(--c-line);
    font-size: var(--t-h3);
}

.cart-summary-total dt {
    color: var(--c-ink-900);
}

.cart-summary-total dd {
    font-weight: 600;
    color: var(--c-ink-900);
}

.cart-summary strike {
    font-weight: normal;
    color: var(--c-ink-500);
}

.cart-summary-vat {
    margin: var(--s-2) 0 var(--s-5);
    font-size: var(--t-xs);
    color: var(--c-ink-500);
}

/* Postęp do darmowej dostawy */
.cart-free {
    margin-top: var(--s-4);
    padding: var(--s-4);
    border-radius: var(--r-md);
    background: var(--c-white);
    border: 1px solid var(--c-line);
}

.cart-free.is-reached {
    background: var(--c-success-bg);
    border-color: transparent;
}

.cart-free-msg {
    display: flex;
    align-items: center;
    gap: var(--s-2);
    margin: 0 0 var(--s-3);
    font-size: var(--t-sm);
    color: var(--c-ink-700);
}

.cart-free.is-reached .cart-free-msg {
    color: var(--c-success-fg);
}

/* Ptaszek pojawia się dopiero po osiągnięciu progu. */
.cart-free-icon {
    flex: none;
    width: 18px;
    height: 18px;
}

.cart-free.is-reached .cart-free-icon {
    background: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5l5 5L20 6.5'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5l5 5L20 6.5'/%3E%3C/svg%3E") center / contain no-repeat;
}

.cart-free-bar {
    height: 6px;
    border-radius: var(--r-full);
    background: var(--c-line);
    overflow: hidden;
}

.cart-free.is-reached .cart-free-bar {
    background: rgba(47,85,64,.18);
}

.cart-free-bar span {
    display: block;
    height: 100%;
    border-radius: var(--r-full);
    background: var(--c-brand-700);
    transition: width var(--dur) var(--ease);
}

.cart-free-note {
    margin: var(--s-2) 0 0;
    font-size: var(--t-xs);
    color: var(--c-ink-500);
}

.cart-free.is-reached .cart-free-note {
    color: var(--c-success-fg);
}

.cart-summary-back {
    display: block;
    margin-top: var(--s-4);
    text-align: center;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

.cart-summary-back:hover {
    color: var(--c-brand-700);
}


.cart-settings {
    margin: 0;
    padding-bottom: 0;
}

.cart-settings h3 {
    font-family: var(--f-head);
    font-size: var(--t-h3);
    color: var(--c-ink-900);
    margin: 0 0 var(--s-4);
}

.cart-settings .g-col-m-4 {
    margin-bottom: var(--s-6);
}

/* Wiersz opcji: radio + etykieta, a w etykiecie nazwa i cena rozsunięte na boki.
   Cena była floatowana w prawo, więc przy dłuższej nazwie („Kurier Pocztex
   (Poczta Polska)") zawijała się na kolejną linię i nachodziła na następną opcję. */
/* Wyłącznie listy wyboru — pole „Kod rabatowy" też jest .form-group wewnątrz
   .cart-settings i przy szerszym selektorze wracałoby do układu etykieta obok pola. */
#cart_shipping .form-group,
#cart_payment .form-group {
    display: flex;
    align-items: flex-start;
    gap: var(--s-3);
    margin-bottom: var(--s-4);
}

#cart_shipping .form-group:last-child,
#cart_payment .form-group:last-child {
    margin-bottom: 0;
}

#cart_shipping .form-group > label,
#cart_payment .form-group > label {
    display: flex;
    flex: 1;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--s-4);
    font-size: var(--t-sm);
    line-height: var(--lh-body);
    color: var(--c-ink-700);
}

#cart_shipping .form-control-checkbox,
#cart_payment .form-control-checkbox {
    margin: 4px 0 0;
}

/* Cena była floatowana w prawo, więc przy dłuższej nazwie („Kurier Pocztex
   (Poczta Polska)") zawijała się i nachodziła na następną opcję. */
#cart_shipping label span,
#cart_payment label span {
    float: none;
    flex: none;
    color: var(--c-ink-500);
    white-space: nowrap;
}

#cart_shipping.shipping .form-group {
    max-width: 340px;
}


/* Pusty koszyk. Było 450px białej pustki z „(koszyk jest pusty)" w nawiasach (K1). */
.cart-empty {
    max-width: 420px;
    margin: 0 auto;
    padding: var(--s-8) 0 var(--s-9);
    text-align: center;
}

.cart-empty svg {
    width: 64px;
    height: 64px;
    color: var(--c-ink-300);
}

.cart-empty h2 {
    margin: var(--s-5) 0 var(--s-3);
}

.cart-empty p {
    margin: 0 0 var(--s-6);
    color: var(--c-ink-500);
}


@media (max-width: 1199px) {
    .cart-layout {
        grid-template-columns: 1fr;
    }

    .cart-aside {
        position: static;
    }

    .cart-summary {
        max-width: 420px;
        margin-left: auto;
    }
}

@media (max-width: 599px) {
    .cart-item {
        grid-template-columns: 72px 1fr 40px;
        grid-template-areas:
            "photo desc del"
            "photo qty total";
        row-gap: var(--s-3);
    }

    .cart-item-photo {
        grid-area: photo;
        width: 72px;
    }

    .cart-item-description {
        grid-area: desc;
    }

    .cart-item-qty {
        grid-area: qty;
    }

    .cart-item-total {
        grid-area: total;
        text-align: right;
    }

    .cart-item .act-del {
        grid-area: del;
    }

    .cart-summary {
        max-width: none;
    }
}


/* Krok 2 checkoutu. Były trzy równorzędne kolumny bez ramek, w kolejności
   Rejestracja / Logowanie / Bez logowania — czyli najszybsza ścieżka na końcu. */
.cash-login-lead {
    margin: 0 0 var(--s-7);
    max-width: 68ch;
    color: var(--c-ink-500);
}

.cash-login-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--s-5);
    align-items: start;
    margin-bottom: var(--s-7);
}

.cash-login-box {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: var(--s-6);
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-lg);
}

/* Wyróżniona ścieżka: zakup bez konta. */
.cash-login-box.is-primary {
    background: var(--c-surface);
    border-color: var(--c-brand-300);
}

.cash-login-box h2 {
    margin: 0 0 var(--s-3);
    font-size: var(--t-h3);
}

.cash-login-box p {
    margin: 0 0 var(--s-4);
    font-size: var(--t-sm);
    line-height: var(--lh-body);
    color: var(--c-ink-500);
    max-width: none;
}

/* Przycisk zawsze przy dolnej krawędzi, żeby trzy karty kończyły się równo
   mimo różnej ilości tekstu. */
.cash-login-box .btn {
    margin-top: auto;
}

.cash-login-box form {
    display: block;
}

.cash-login-submit {
    margin-top: var(--s-5);
}

.content .cash-login-benefits {
    margin: 0 0 var(--s-5);
    max-width: none;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

.cash-login-minor {
    margin: var(--s-4) 0 0;
    text-align: center;
    font-size: var(--t-sm);
}

.cash-login-back {
    margin: 0 0 var(--s-8);
    font-size: var(--t-sm);
}

.cash-login-back a {
    color: var(--c-ink-500);
}

.cash-login-back a:hover {
    color: var(--c-brand-700);
}

@media (max-width: 899px) {
    .cash-login-grid {
        grid-template-columns: 1fr;
    }

    .cash-login-box {
        height: auto;
    }
}


/* Krok 3 checkoutu. Podsumowanie zajmowało wcześniej lewą połowę szerokości,
   a cały formularz drugą — trzy liczby dostawały tyle miejsca co dwanaście pól. */
.cash-section {
    padding-bottom: var(--s-6);
    margin-bottom: var(--s-6);
    border-bottom: 1px solid var(--c-line);
}

.cash-section:last-child {
    border-bottom: 0;
    margin-bottom: 0;
}

.cash-section > h2 {
    margin: 0 0 var(--s-5);
    font-size: var(--t-h3);
}

/* Pola w dwóch kolumnach — pojedyncza kolumna 68ch rozciągałaby formularz
   na absurdalną wysokość. */
.cash-fields {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--s-3) var(--s-5);
}

.cash-fields .form-group {
    margin-bottom: 0;
}

/* Pola adresowe bywają długie — ulica dostaje pełną szerokość. */
.cash-fields .form-group:first-child {
    grid-column: 1 / -1;
}

#other_address_box,
#vat_address {
    margin-top: var(--s-5);
}

.cash-hint {
    margin: 0 0 var(--s-4);
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

#address_inpost .form-group {
    margin-top: var(--s-4);
    max-width: 420px;
}

/* Dane zalogowanego użytkownika — do odczytu, nie do edycji. */
.cash-userdata {
    display: grid;
    gap: var(--s-3);
    margin: 0;
    font-size: var(--t-sm);
}

.cash-userdata > div {
    display: grid;
    grid-template-columns: 160px 1fr;
    gap: var(--s-4);
}

.cash-userdata dt {
    color: var(--c-ink-500);
}

.cash-userdata dd {
    margin: 0;
    color: var(--c-ink-700);
}

.cash-userdata-edit {
    margin: var(--s-4) 0 0;
    font-size: var(--t-sm);
}

/* Wiersze podsumowania to fieldInfo(), czyli .form-group z labelem i
   .form-control-group — cartUpdate() wpisuje kwotę do tego drugiego. */
.cash-summary .form-group {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--s-4);
    margin-bottom: var(--s-2);
    font-size: var(--t-sm);
}

.cash-summary .form-label {
    padding: 0;
    color: var(--c-ink-500);
}

.cash-summary .form-control-info {
    color: var(--c-ink-700);
    white-space: nowrap;
    font-weight: normal;
    margin: 0;
}

.cash-summary .form-group.price {
    margin-top: var(--s-4);
    padding-top: var(--s-4);
    border-top: 1px solid var(--c-line);
    font-size: var(--t-h3);
}

.cash-summary .form-group.price .form-label {
    color: var(--c-ink-900);
}

.cash-summary .form-group.price .form-control-info {
    font-weight: 600;
    color: var(--c-ink-900);
}

@media (max-width: 599px) {
    .cash-fields {
        grid-template-columns: 1fr;
    }

    .cash-userdata > div {
        grid-template-columns: 1fr;
        gap: 0;
    }
}


#inpostPaczkomaty {
    margin-bottom: 20px;
}

.easypack-widget.mobile .map-list-row .map-list-flex {
    min-height: 300px !important;
}


/* Ten box jest domyślnie ukryty, a pokazuje go cartUpdate() w zależności od
   kwoty koszyka. Nie da się więc trzymać na nim `display: flex` — jQuery .show()
   nadpisuje display inline'owym `block`. Układ siedzi w .cartBonus-inner. */
.cartBonus {
    display: none;
    background: var(--c-success-bg);
    color: var(--c-success-fg);
    border-radius: var(--r-md);
    padding: var(--s-5);
    margin: 0 0 var(--s-6);
}

.cartBonus-inner {
    display: flex;
    align-items: center;
    gap: var(--s-5);
}

.cartBonus img {
    max-width: 120px;
    border-radius: var(--r-sm);
    display: block;
    transition: transform var(--dur) var(--ease);
}

.cartBonus a:hover img {
    transform: scale(1.03);
}

.cartBonus h3 {
    margin: 0 0 var(--s-1);
    font-family: var(--f-head);
    font-size: var(--t-h3);
}

.cartBonus p {
    margin: 0;
    font-size: var(--t-sm);
}


/***************************************************
podstrona - historia
***************************************************/

.orders-item {
    margin-bottom: 10px;
    position: relative;
    border-bottom: 1px solid #d3d3d3;
    padding: 20px 0;
}

.orders-item:first-child {
    border-top: 1px solid #d3d3d3;
}

.orders-item h3 {
    margin-top: 20px;
}

.orders-item .price {
    font-weight: bold;
    font-size: 18px;
}

.orders-item .form-group {
    margin-bottom: 0;
}

.orders-item .btn {}

.orders-wrapper .btns {
    margin: 0;
}

.orders-wrapper .btns a {
    margin: 5px 0;
}


.order-wrapper .form-info {
    margin-top: 50px;
}


@media (max-width: 899px) {
    .orders-wrapper .btns a {
        width: 100%;
        text-align: center;
        padding-left: 0;
        padding-right: 0;
    }

    .orders-wrapper .btns br {
        display: none;
    }
}



.producers-wrapper h3 {
    margin: 20px 0 10px 0 !important;
    padding-bottom: 10px;
    border-bottom: 1px solid #d3d3d3;
}


/***************************************************
podstrona - blog
***************************************************/

.blog-item {
    padding-bottom: 50px;
    margin-bottom: 50px;
    border-bottom: 1px solid #d3d3d3;
}

.blog-name {
    color: #343b4a;
    font-size: 18px;
    font-weight: bold;
    text-transform: uppercase;
    margin: 0 0 5px 0;
}

.blog-item time {
    color: #919191;
    font-size: 12px;
    display: block;
}

.blog-item figure {
    margin: 0 0 20px 0;
    text-align: center;
}

.blog-item img {
    width: 100%;
    max-width: 400px;
}

.blog-item-link {
    text-align: right;
}



.blog-item.blog-show {
    padding-bottom: 0;
    border-bottom: none;
}

.blog-item.blog-show img {
    max-width: 100%;
    height: auto !important;
}

/***************************************************
logowanie / rejestracja
***************************************************/

/* Formularz „pływał" na środku pustej strony, etykiety po lewej, pola po prawej
   (A1). Teraz karta o stałej szerokości, etykiety nad polami — układ wymusza
   $this->form->setGrid('', '') w widoku. */
.auth {
    display: flex;
    justify-content: center;
    padding: var(--s-8) 0 var(--s-9);
}

.auth-card {
    width: 100%;
    max-width: 420px;
    padding: var(--s-7);
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-lg);
    box-shadow: var(--sh-1);
}

/* Rejestracja ma znacznie więcej pól niż logowanie. */
.auth-wide .auth-card {
    max-width: 560px;
}

.auth-card h1 {
    margin: 0 0 var(--s-5);
    text-align: center;
}

.auth-lead {
    margin: calc(-1 * var(--s-3)) 0 var(--s-5);
    font-size: var(--t-sm);
    line-height: var(--lh-body);
    color: var(--c-ink-500);
    text-align: center;
}

.auth-section {
    margin: var(--s-6) 0 var(--s-4);
    font-family: var(--f-head);
    font-size: var(--t-h3);
    color: var(--c-ink-900);
}

.auth-section:first-of-type {
    margin-top: 0;
}

.auth-submit {
    height: 52px;
    margin-top: var(--s-5);
}

.auth-minor {
    margin: var(--s-4) 0 0;
    text-align: center;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

/* Separator „lub" z kreskami po bokach */
.auth-sep {
    display: flex;
    align-items: center;
    gap: var(--s-4);
    margin: var(--s-6) 0;
    font-size: var(--t-sm);
    color: var(--c-ink-500);
}

.auth-sep:before,
.auth-sep:after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--c-line);
}

@media (max-width: 599px) {
    .auth {
        padding: var(--s-6) 0 var(--s-8);
    }

    .auth-card {
        padding: var(--s-5);
        border: 0;
        box-shadow: none;
    }
}


/***************************************************
podstrony treściowe
***************************************************/

.site-page {
    padding-bottom: var(--s-9);
}

/* Breadcrumb wnosi już górny odstęp od headera (--s-7), więc H1 tylko oddycha
   pod nim — inaczej marginesy sumowały się do pół ekranu pustki. */
.site-page h1,
.wrapper-contact h1 {
    margin-top: 0;
    margin-bottom: var(--s-6);
}

/* Pierwszy akapit jako lead. */
.site-page > p:first-of-type {
    font-size: var(--t-lg);
    color: var(--c-ink-500);
}

.site-page p {
    margin: 0 0 var(--s-5);
}

/* Na /o-nas akapity są rozdzielone trzema <hr>, przez co strona wygląda jak
   tabela, a nie jak opowieść (T2). Kreski siedzą w treści CMS-a, więc nie mogę
   ich usunąć z kodu — zeruję je całkowicie, żeby rytm akapitów robił margines
   samego <p>. Z własnym marginesem kreski dokładały się do niego i między
   akapitami robiła się dziura na pół ekranu. */
.site-page hr {
    background: none;
    height: 0;
    margin: 0;
}

.site-page ul,
.site-page ol {
    margin-bottom: var(--s-5);
}

.site-page ul li,
.site-page ol li {
    margin-bottom: var(--s-2);
}


/* /dostawy-i-platnosci: lista przewoźników jako kafelki zamiast suchych
   bulletów (T3). Nazwa, cena i czas są w jednym zdaniu wpisanym w panelu —
   CSS ich nie rozdzieli, więc kafelek pokazuje całą linię. Reguła jest
   związana z obecnym kształtem treści: płaska <ul> na tej podstronie. */
.site-page[data-page="dostawy-i-platnosci"] ul {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: var(--s-4);
    max-width: none;
    margin: var(--s-6) 0;
    padding: 0;
}

.site-page[data-page="dostawy-i-platnosci"] ul li {
    margin: 0;
    padding: var(--s-5);
    background: var(--c-white);
    border: 1px solid var(--c-line);
    border-radius: var(--r-md);
    line-height: var(--lh-body);
}

.site-page[data-page="dostawy-i-platnosci"] ul li:before {
    content: none;
}

/* Zdanie o darmowej dostawie wyróżnione jako banner. */
.site-page[data-page="dostawy-i-platnosci"] > p:first-of-type {
    display: inline-block;
    padding: var(--s-4) var(--s-5);
    border-radius: var(--r-md);
    background: var(--c-brand-100);
    color: var(--c-brand-900);
    font-size: var(--t-body);
}


/***************************************************
podstrona - kontakt (formularz i dane)
***************************************************/

.contact-layout {
    display: grid;
    grid-template-columns: 380px 1fr;
    gap: var(--s-8);
    align-items: start;
    padding-bottom: var(--s-9);
}

.contact-card {
    padding: var(--s-3) var(--s-5);
    background: var(--c-surface);
    border-radius: var(--r-lg);
}

.contact-row {
    display: flex;
    align-items: flex-start;
    gap: var(--s-4);
    padding: var(--s-4) 0;
    border-top: 1px solid var(--c-line);
    color: var(--c-ink-700);
    line-height: var(--lh-body);
}

.contact-row:first-child {
    border-top: 0;
}

a.contact-row:hover {
    color: var(--c-brand-700);
}

.contact-row svg {
    width: 20px;
    height: 20px;
    flex: none;
    margin-top: 4px;
    color: var(--c-brand-500);
}

.contact-row-label {
    display: block;
    font-size: var(--t-xs);
    letter-spacing: var(--ls-caps);
    text-transform: uppercase;
    color: var(--c-ink-500);
}

.contact-fields {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--s-3) var(--s-5);
}

.contact-fields .form-group {
    margin-bottom: 0;
}

.contact-submit {
    height: 52px;
    margin-top: var(--s-5);
}

@media (max-width: 899px) {
    .contact-layout {
        grid-template-columns: 1fr;
        gap: var(--s-7);
    }
}

@media (max-width: 599px) {
    .contact-fields {
        grid-template-columns: 1fr;
    }

    .contact-submit {
        display: flex;
        width: 100%;
    }
}


/* /o-nas: treść plus kolumna z danymi firmy. */
.site-aside-layout {
    display: grid;
    grid-template-columns: 1fr 360px;
    gap: var(--s-8);
    align-items: start;
}

.site-aside {
    position: sticky;
    top: 96px;
}

.site-aside-card {
    padding: var(--s-6);
    background: var(--c-success-bg);
    color: var(--c-success-fg);
    border-radius: var(--r-lg);
}

.site-aside-card h2 {
    margin: 0 0 var(--s-4);
    font-size: var(--t-h3);
    color: var(--c-success-fg);
}

.site-aside-card p {
    margin: 0 0 var(--s-4);
    font-size: var(--t-sm);
    line-height: var(--lh-body);
    max-width: none;
}

.site-aside-card a {
    color: var(--c-success-fg);
}

.site-aside-link {
    display: inline-block;
    font-size: var(--t-sm);
    text-decoration: underline;
    text-underline-offset: 4px;
}

@media (max-width: 899px) {
    .site-aside-layout {
        grid-template-columns: 1fr;
        gap: var(--s-6);
    }

    .site-aside {
        position: static;
    }
}

