/* ==========================================================================
   Bony Loombard — witryna publiczna „Co kupisz bonem"

   Kierunek: rzeczowy katalog, nie sklep-wystawa. Klient przychodzi tu z bonem
   i konkretnym pytaniem („czy mają telefon w moim punkcie"), więc wygrywa
   czytelność ceny i lokalizacji, a nie efekty.

   Typografia jest lokalna (`static/fonty/`) — bez połączenia do Google. Powód
   nie jest estetyczny: link do tej strony idzie w mailach z bonem, a strona,
   która przy otwarciu odpytuje cudzy serwer, wysyła tam adres IP klienta.
   Przy okazji działa, gdy Google jest niedostępny.

   Wszystkie kolory są tokenami. Motyw ciemny nadpisuje wyłącznie tokeny —
   nigdy pojedyncze reguły. Poprzednia wersja pliku miała kolory wpisane
   na sztywno w komponentach i dlatego motyw ciemny rozjeżdżał się w kilku
   miejscach (kafel z hasłem, ikona informacji, karta pod kursorem).
   ========================================================================== */

/* --- fonty ---------------------------------------------------------------- */
/* Podział latin / latin-ext jest celowy: przeglądarka pobiera plik z polskimi
   znakami tylko wtedy, gdy strona ich faktycznie używa. */
@font-face{font-family:'Fraunces';font-style:normal;font-weight:700;font-display:swap;
  src:url('/static/fonty/fraunces-700-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:700;font-display:swap;
  src:url('/static/fonty/fraunces-700-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

@font-face{font-family:'Plex';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonty/plex-400-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Plex';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/fonty/plex-400-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Plex';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/fonty/plex-600-latin-ext.woff2') format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Plex';font-style:normal;font-weight:600;font-display:swap;
  src:url('/static/fonty/plex-600-latin.woff2') format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* --- tokeny --------------------------------------------------------------- */
:root{
  color-scheme:light dark;

  --marka:#007A3D;
  --marka-mocna:#00602F;
  --marka-tlo:rgba(0,122,61,.10);
  --marka-obrys:rgba(0,122,61,.22);

  --papier:#F2F5F3;
  --plyta:#FFFFFF;
  --plyta-2:#F7FAF8;
  --tekst:#12181B;
  --tekst-2:#4A5257;
  --tekst-3:#6E787E;
  --tekst-na-marce:#FFFFFF;
  --kreska:#DDE3E0;
  --kreska-2:#EAEFEC;

  --cien-1:0 1px 2px rgba(16,40,28,.05);
  --cien-2:0 6px 20px rgba(16,40,28,.08);
  --cien-3:0 14px 34px rgba(16,40,28,.13);

  --r-1:8px; --r-2:12px; --r-3:16px;
  --szer:1180px;
  --nagl:'Fraunces',Georgia,'Times New Roman',serif;
  --tekst-font:'Plex',system-ui,-apple-system,'Segoe UI',sans-serif;
  --ruch:.18s;
}

@media (prefers-color-scheme:dark){
  :root{
    --marka:#4FCB87;
    --marka-mocna:#7BDBA6;
    --marka-tlo:rgba(79,203,135,.14);
    --marka-obrys:rgba(79,203,135,.28);

    --papier:#0E1114;
    --plyta:#161B1E;
    --plyta-2:#1C2226;
    --tekst:#E9EDEB;
    --tekst-2:#AEB8B3;
    --tekst-3:#7F8A85;
    --tekst-na-marce:#062314;
    --kreska:#28312F;
    --kreska-2:#212927;

    --cien-1:0 1px 2px rgba(0,0,0,.4);
    --cien-2:0 6px 20px rgba(0,0,0,.45);
    --cien-3:0 14px 34px rgba(0,0,0,.55);
  }
}

*{box-sizing:border-box}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  background:var(--papier);
  color:var(--tekst);
  font-family:var(--tekst-font);
  font-size:16px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

a{color:inherit}
img{max-width:100%}

/* Jeden pierścień ogniskowej dla całej strony — widoczny w obu motywach. */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{
  outline:3px solid var(--marka);
  outline-offset:2px;
  border-radius:var(--r-1);
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}

.wrap{max-width:var(--szer);margin:0 auto;padding:0 20px 64px}

/* --- pasek marki ---------------------------------------------------------- */
.brandbar{
  position:sticky;top:0;z-index:20;
  background:color-mix(in srgb,var(--plyta) 92%,transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--kreska);
}
.brandbar-in{
  max-width:var(--szer);margin:0 auto;padding:12px 20px;min-height:68px;
  display:flex;align-items:center;gap:14px;
}
/* Logo jest odnośnikiem do strony głównej, więc musi mieć pole dotyku 44 px —
   sam obrazek ma ok. 29 px wysokości. */
.brand-logo{display:flex;align-items:center;border-radius:var(--r-1);min-height:44px;padding:4px 0}
.brand-logo img{display:block;width:168px;max-width:44vw;height:auto}
.brand-separator{width:1px;height:26px;background:var(--kreska)}
.brand-name{font-weight:600;font-size:15px;letter-spacing:-.01em;color:var(--tekst-2)}
.brand-badge{
  margin-left:auto;padding:5px 11px;border-radius:999px;
  background:var(--marka-tlo);color:var(--marka);
  font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  border:1px solid var(--marka-obrys);white-space:nowrap;
}

/* --- nagłówek strony ------------------------------------------------------ */
.mast{padding:44px 0 24px;display:flex;align-items:flex-end;justify-content:space-between;gap:40px}
.mast-copy{max-width:62ch}
.eyebrow{
  font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--marka);font-weight:600;
}
.mast h1{
  font-family:var(--nagl);font-weight:700;
  font-size:clamp(30px,4.6vw,50px);line-height:1.06;letter-spacing:-.02em;
  margin:12px 0 12px;color:var(--tekst);text-wrap:balance;
}
.mast .lede{font-size:17px;line-height:1.6;color:var(--tekst-2);margin:0;max-width:58ch}

/* Kafel z zasadą bonu. Nie jest ozdobą — mówi rzecz, o którą klienci pytają
   najczęściej, więc stoi obok nagłówka, a nie w stopce. */
.mast-mark{
  flex:0 0 auto;min-width:232px;max-width:300px;
  padding:18px 20px;border-radius:var(--r-3);
  background:var(--marka);color:var(--tekst-na-marce);
  box-shadow:var(--cien-2);
}
.mast-mark span,.mast-mark small{display:block;font-size:12.5px;opacity:.82;line-height:1.45}
.mast-mark b{display:block;margin:5px 0;font-size:17px;font-weight:600;line-height:1.3}

/* --- pasek informacyjny --------------------------------------------------- */
.info{
  display:flex;gap:13px;align-items:flex-start;
  background:var(--plyta);border:1px solid var(--kreska);
  border-left:4px solid var(--marka);
  border-radius:var(--r-2);padding:16px 18px;margin:0 0 22px;
  font-size:14.5px;color:var(--tekst-2);line-height:1.55;box-shadow:var(--cien-1);
}
.info b{display:block;color:var(--tekst);margin-bottom:4px;font-weight:600}
.info-icon{
  flex:0 0 24px;width:24px;height:24px;margin-top:1px;
  display:grid;place-items:center;border-radius:50%;
  background:var(--marka);color:var(--tekst-na-marce);
  font-family:var(--nagl);font-weight:700;font-size:14px;line-height:1;
}

/* --- filtry --------------------------------------------------------------- */
/* Szukanie jest tu główną czynnością, więc pole tekstowe dostaje najwięcej
   miejsca, a reszta zwęża się dopiero po nim. */
.filtry{
  background:var(--plyta);border:1px solid var(--kreska);
  border-radius:var(--r-2);padding:18px;margin-bottom:20px;
  display:grid;grid-template-columns:2.2fr 1fr 1fr 1fr auto;gap:14px;align-items:end;
  box-shadow:var(--cien-1);
}
.filtry label{display:block;margin:0}
.filtry .t{
  display:block;font-size:11px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--tekst-3);font-weight:600;margin-bottom:6px;
}
.filtry input,.filtry select{
  width:100%;font:inherit;font-size:16px;   /* 16px — mniejszy powoduje zoom na iOS */
  min-height:44px;padding:10px 12px;
  background:var(--plyta-2);color:var(--tekst);
  border:1px solid var(--kreska);border-radius:var(--r-1);
  transition:border-color var(--ruch),box-shadow var(--ruch);
}
.filtry input:hover,.filtry select:hover{border-color:var(--marka-obrys)}
.filtry input:focus,.filtry select:focus{
  outline:0;border-color:var(--marka);box-shadow:0 0 0 3px var(--marka-tlo);
}
.filtry button{
  font:inherit;font-size:16px;font-weight:600;
  min-height:44px;padding:10px 22px;
  background:var(--marka);color:var(--tekst-na-marce);
  border:1px solid var(--marka);border-radius:var(--r-1);
  cursor:pointer;white-space:nowrap;
  transition:background var(--ruch),box-shadow var(--ruch);
}
.filtry button:hover{background:var(--marka-mocna);box-shadow:var(--cien-2)}
.filtry button:active{transform:translateY(1px)}

.licznik{font-size:14px;color:var(--tekst-3);margin:0 0 16px}
.licznik b{color:var(--tekst);font-weight:600}

/* --- siatka towaru -------------------------------------------------------- */
.siatka{display:grid;grid-template-columns:repeat(auto-fill,minmax(212px,1fr));gap:16px}

.towar{
  display:flex;flex-direction:column;text-decoration:none;
  background:var(--plyta);border:1px solid var(--kreska);
  border-radius:var(--r-2);overflow:hidden;box-shadow:var(--cien-1);
  transition:border-color var(--ruch),box-shadow var(--ruch),transform var(--ruch);
}
/* Karta pod kursorem podnosi się i dostaje zielony obrys. Świadomie NIE zmienia
   koloru w całości: przy kilkudziesięciu kafelkach naraz to męczy wzrok, a na
   ekranie dotykowym stan „hover" potrafi zostać na karcie po tapnięciu. */
.towar:hover{border-color:var(--marka);box-shadow:var(--cien-3);transform:translateY(-3px)}
.towar:active{transform:translateY(-1px)}

.towar .foto{
  aspect-ratio:1;background:var(--plyta-2);
  display:flex;align-items:center;justify-content:center;overflow:hidden;
  border-bottom:1px solid var(--kreska-2);
}
.towar .foto img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease-out}
.towar:hover .foto img{transform:scale(1.04)}
.towar .foto .brak{
  font-size:11px;color:var(--tekst-3);letter-spacing:.08em;text-transform:uppercase;
}

.towar .tresc{padding:14px 15px 15px;display:flex;flex-direction:column;gap:7px;flex:1}
.towar .nazwa{
  font-size:14.5px;line-height:1.35;font-weight:600;color:var(--tekst);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.towar .cena{
  font-size:20px;font-weight:600;color:var(--marka);
  font-variant-numeric:tabular-nums;letter-spacing:-.01em;
}
.towar .stan{
  display:inline-block;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;
  font-weight:600;color:var(--marka);background:var(--marka-tlo);
  border:1px solid var(--marka-obrys);padding:2px 7px;border-radius:999px;
}
.towar .meta{font-size:12px;color:var(--tekst-3);line-height:1.45;margin-top:auto}
.zobacz{
  padding-top:9px;margin-top:2px;border-top:1px solid var(--kreska-2);
  color:var(--marka);font-size:12.5px;font-weight:600;
}

/* --- stronicowanie -------------------------------------------------------- */
.strony{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin-top:26px}
.strony a,.strony span{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;min-height:44px;padding:8px 14px;
  border:1px solid var(--kreska);background:var(--plyta);
  border-radius:var(--r-1);text-decoration:none;font-size:15px;
  transition:border-color var(--ruch),background var(--ruch),color var(--ruch);
}
.strony a:hover{border-color:var(--marka);color:var(--marka)}
.strony .teraz{background:var(--marka);border-color:var(--marka);color:var(--tekst-na-marce);font-weight:600}
.strony .luka{border:0;background:none;color:var(--tekst-3);min-width:0;padding:8px 4px}

/* --- stan pusty i stopka -------------------------------------------------- */
.pusto{
  background:var(--plyta);border:1px solid var(--kreska);border-top:4px solid var(--marka);
  border-radius:var(--r-2);padding:36px 28px;text-align:center;color:var(--tekst-2);
  box-shadow:var(--cien-1);
}
.pusto b{display:block;color:var(--tekst);font-size:18px;font-weight:600;margin-bottom:8px;
  font-family:var(--nagl)}

.stopka{
  margin-top:36px;padding-top:20px;border-top:1px solid var(--kreska);
  display:flex;gap:20px;align-items:flex-start;
  font-size:12.5px;color:var(--tekst-3);line-height:1.6;
}
.stopka img{width:112px;height:auto;flex:0 0 auto;opacity:.75}
.stopka span{max-width:78ch}

/* --- węższe ekrany -------------------------------------------------------- */
@media (max-width:860px){
  .filtry{grid-template-columns:1fr 1fr}
  .filtry button{grid-column:1 / -1}
}
@media (max-width:760px){
  .mast{flex-direction:column;align-items:stretch;gap:22px;padding:34px 0 20px}
  .mast-mark{max-width:none}
  .brand-name,.brand-separator{display:none}
  .brand-logo img{width:146px}
  .stopka{flex-direction:column;gap:14px}
}
@media (max-width:520px){
  .wrap{padding:0 14px 48px}
  .brandbar-in{padding:10px 14px;min-height:60px}
  .siatka{grid-template-columns:1fr 1fr;gap:11px}
  .towar .tresc{padding:11px 12px 12px;gap:6px}
  .towar .nazwa{font-size:13.5px}
  .towar .cena{font-size:17px}
  .zobacz{display:none}          /* na telefonie cała karta jest odnośnikiem */
  .filtry{grid-template-columns:1fr;padding:15px}
  .info{padding:14px 15px;font-size:14px}
}
