
:root{
  /* ===== Motyw ciemny (domyślny). Wszystkie kolory apki idą przez te zmienne — motyw jasny to drugi zestaw wartości niżej. ===== */
  color-scheme:dark;
  --bg:#0A0A0C; --card:#131318; --card-2:#1A1A21; --line:#26262F; --line-2:#33333F;
  --ink:#F4F3F1; --ink-2:#C9C9D2; --mut:#8B8B99; --dim:#5C5C6B;
  --red:#FF3B47; --lime:#C6F24E; --amber:#FFB020; --cyan:#4ED8E8;
  --ok:#5BD69A;
  --lime-line:#C6F24E;         /* cienkie wskaźniki i obwódki w kolorze akcentu */
  --lime-ink:#C6F24E;          /* limonka jako KOLOR TEKSTU (w jasnym motywie ciemniejsza — limonka na bieli jest nieczytelna) */
  --on-lime:#14180A;           /* tekst na limonkowym wypełnieniu */
  --on-ink:rgba(10,10,12,.6);  /* drugorzędny tekst na wypełnieniu w kolorze --ink (wybrany dzień) */
  --det:#101015;               /* tło rozwiniętych szczegółów meczu */
  --nav-bg:rgba(10,10,12,.93); --scrim:rgba(0,0,0,.6);
  --nav-glass:rgba(24,24,30,.72); --nav-on:rgba(255,255,255,.11);   /* paczka 156: pływające dolne menu na telefonie */
  --press:rgba(255,255,255,.04); --well:rgba(0,0,0,.16);
  --sh:rgba(0,0,0,.5); --sh-slide:rgba(0,0,0,.55); --sh-stick:rgba(0,0,0,.95);
  --lime-t:rgba(198,242,78,.16); --lime-t2:rgba(198,242,78,.32);
  --ok-t:rgba(91,214,154,.14); --red-t:rgba(255,59,71,.14); --amber-t:rgba(255,176,32,.16); --mut-t:rgba(139,139,153,.18);
  --low:#E2836F; --low-t:rgba(226,131,111,.12);   /* niska ocena (<6.0) — stonowana, ceglana zamiast alarmowej czerwieni (paczka 38) */
  --red-edge:rgba(255,59,71,.3); --amber-t1:rgba(255,176,32,.1); --amber-edge:rgba(255,176,32,.25); --promo-t:rgba(232,64,64,.13);
}
/* ===== Motyw jasny ===== */
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#F3F3EF; --card:#FFFFFF; --card-2:#ECECE7; --line:#E0E0D9; --line-2:#CACAC2;
  --ink:#111114; --ink-2:#34343D; --mut:#5F5F6B; --dim:#8A8A95;
  --red:#DE1F2D; --lime:#C6F24E; --amber:#AD6700; --cyan:#0A7F91;
  --ok:#14804A;
  --lime-ink:#4A6600;
  --lime-line:#8DB400;
  --on-lime:#14180A;
  --on-ink:rgba(243,243,239,.7);
  --det:#F8F8F5;
  --nav-bg:rgba(255,255,255,.92); --scrim:rgba(0,0,0,.35);
  --nav-glass:rgba(255,255,255,.74); --nav-on:rgba(17,17,20,.07);
  --press:rgba(0,0,0,.04); --well:rgba(0,0,0,.025);
  --sh:rgba(0,0,0,.16); --sh-slide:rgba(0,0,0,.18); --sh-stick:rgba(0,0,0,.14);
  --lime-t:rgba(122,160,0,.16); --lime-t2:rgba(150,190,20,.35);
  --ok-t:rgba(20,128,74,.11); --red-t:rgba(222,31,45,.09); --amber-t:rgba(173,103,0,.12); --mut-t:rgba(95,95,107,.11);
  --low:#A9503B; --low-t:rgba(169,80,59,.09);
  --red-edge:rgba(222,31,45,.35); --amber-t1:rgba(173,103,0,.08); --amber-edge:rgba(173,103,0,.28); --promo-t:rgba(222,31,45,.08);
}
*{box-sizing:border-box;margin:0;padding:0}
/* Wyłącza przybliżanie po szybkim dwukrotnym stuknięciu (Chrome/Safari
   na telefonie). Nie blokuje przewijania ani szczypania do zoomu —
   te zostają, bo są potrzebne dla dostępności. */
html{touch-action:manipulation}
button,input,a{touch-action:manipulation}
html{background:var(--bg)}
body{background:var(--bg);color:var(--ink);font-family:Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased;font-size:15px;
  /* Dolne menu jest przypięte do dołu ekranu (position:fixed) — miejsce na nie rezerwuje padding-bottom (wysokość
     mierzona w JS). Wcześniej było „sticky” na końcu treści i przy krótkiej liście (np. 1 mecz) stało wyżej niż zwykle. */
  box-sizing:border-box;padding-bottom:var(--navh,58px);overflow-x:hidden;overflow-x:clip;
  display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
/* powyżej: hidden dla starszych przeglądarek, clip (bez tworzenia kontenera przewijania) tam, gdzie działa */
.wrap{max-width:620px;margin:0 auto;padding:0 14px}
body>main.wrap{flex:1 0 auto;width:100%;box-sizing:border-box}
body>article.wrap{width:100%;box-sizing:border-box}
.hint{display:flex;justify-content:space-between;align-items:center;gap:10px;
  background:var(--card);border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;margin:10px 0;font-size:12.5px;line-height:1.4;color:var(--dim)}
.hintx{flex:0 0 auto;background:none;border:none;color:var(--dim);font-size:17px;
  line-height:1;cursor:pointer;padding:0 2px}
.hintx:active{color:var(--ink)}
footer.about{max-width:620px;width:100%;box-sizing:border-box;margin:18px auto 0;padding:16px 14px 18px;border-top:1px solid var(--line)}
/* Paczka 174: na telefonie pływająca pigułka menu (z rozmyciem i cieniem) zasłaniała ostatnie linki stopki — zapas na dole */
@media (max-width:640px){footer.about{padding-bottom:calc(34px + env(safe-area-inset-bottom))}}
footer.about p{font-size:12px;line-height:1.55;color:var(--dim)}
footer.about h2{font-size:12.5px;font-weight:600;color:var(--mut);margin:14px 0 4px}
footer.about .home-info section:first-child h2{margin-top:0}
footer.about .home-links a{color:var(--mut)}
footer.about .legal{margin-top:12px;font-size:11.5px;color:var(--dim)}
footer.about .legal a,footer.about .legal button{color:var(--mut);background:none;border:0;padding:0;font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
/* Pasek zgody na statystyki — dyskretny, nad dolnym menu, nie blokuje strony. Oba przyciski tej samej wielkości
   i równie czytelne („Odrzuć” musi być tak samo łatwe jak „Akceptuj”); akcent kolorystyczny tylko na „Akceptuj”. */
#consent{position:fixed;left:50%;bottom:calc(var(--navh,58px) + 10px);z-index:55;width:calc(100% - 20px);max-width:600px;
  box-sizing:border-box;display:flex;align-items:center;gap:12px;padding:10px 10px 10px 14px;border-radius:14px;
  background:var(--card);border:1px solid var(--line-2);box-shadow:0 10px 30px var(--sh);
  opacity:0;transform:translate(-50%,12px);transition:opacity .22s ease,transform .22s ease;pointer-events:none}
#consent.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
#consent p{flex:1;min-width:0;margin:0;font-size:12.5px;line-height:1.45;color:var(--ink-2)}
#consent p a{color:var(--mut);text-underline-offset:2px}
#consent .cbtn{display:flex;gap:6px;flex:none}
#consent button{min-width:88px;padding:9px 12px;border-radius:99px;font:700 12.5px/1 Inter,system-ui,sans-serif;cursor:pointer;
  background:var(--card-2);color:var(--ink);border:1px solid var(--line-2)}
#consent button.yes{background:var(--lime);color:var(--on-lime);border-color:var(--lime)}
#consent button:focus-visible{outline:2px solid var(--lime-line);outline-offset:2px}
@media (max-width:520px){
  #consent{flex-direction:column;align-items:stretch;gap:9px;padding:12px}
  #consent .cbtn button{flex:1}
}
@media (prefers-reduced-motion:reduce){#consent{transition:none}}
/* Strona /polityka-prywatnosci/ (polityka.php) — zwykły tekst dokumentu w stylu profilu */
.legal-doc h2{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:17px;letter-spacing:-.01em;color:var(--ink);margin:26px 0 8px}
.legal-doc h3{font-size:14px;font-weight:700;color:var(--ink);margin:16px 0 6px}
.legal-doc p,.legal-doc li{font-size:13.5px;line-height:1.65;color:var(--ink-2)}
.legal-doc p{margin:0 0 10px}
.legal-doc ul,.legal-doc ol{margin:0 0 10px;padding-left:20px}
.legal-doc li{margin:0 0 4px}
.legal-doc a{color:var(--lime-ink);text-underline-offset:2px}
.legal-doc code{font-size:12px;background:var(--card-2);border-radius:5px;padding:1px 5px;color:var(--ink);white-space:nowrap}
.legal-doc .tbl{overflow-x:auto;margin:6px 0 12px;border:1px solid var(--line);border-radius:12px}
.legal-doc table{width:100%;min-width:560px;border-collapse:collapse;font-size:12.5px;line-height:1.5;color:var(--ink-2)}
.legal-doc th{text-align:left;font-weight:700;color:var(--mut);background:var(--card);padding:9px 10px;border-bottom:1px solid var(--line)}
.legal-doc td{vertical-align:top;padding:9px 10px;border-bottom:1px solid var(--line)}
.legal-doc tr:last-child td{border-bottom:0}
.legal-doc td code{white-space:normal}
.legal-doc .legal-btn{padding:10px 16px;border-radius:99px;border:1px solid var(--line-2);background:var(--card-2);color:var(--ink);font:700 13px/1 Inter,system-ui,sans-serif;cursor:pointer}
@media (max-width:600px){   /* tabela cookies na telefonie: każdy wiersz jako osobna karta, bez przewijania w bok */
  .legal-doc .tbl{overflow:visible;border:0;border-radius:0}
  .legal-doc table{min-width:0}
  .legal-doc thead{display:none}
  .legal-doc tr{display:block;margin:0 0 8px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
  .legal-doc td{display:block;padding:3px 0;border:0}
  .legal-doc td:not(:first-child)::before{display:block;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--dim);margin-top:4px}
  .legal-doc td:nth-child(2)::before{content:"Do czego służy"}
  .legal-doc td:nth-child(3)::before{content:"Jak długo"}
  .legal-doc td:nth-child(4)::before{content:"Rodzaj"}
}
/* Początkowa treść strony głównej z home.php (lista meczów z linkami) — aplikacja podmienia ją przy pierwszym renderze. */
#app .home-matches{padding:14px 0}
#app .home-matches h2{font-size:15px;font-weight:600;margin:0 0 6px}
#app .home-matches h3{font-size:13px;font-weight:600;color:var(--mut);margin:12px 0 4px}
#app .home-matches ul{list-style:none;margin:0;padding:0}
#app .home-matches li{font-size:14px;line-height:1.7;color:var(--dim)}
#app .home-matches a{color:var(--ink)}
button{font-family:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
.num{font-variant-numeric:tabular-nums}
.disp{font-family:"Bricolage Grotesque",Inter,sans-serif}
:focus-visible{outline:2px solid var(--lime);outline-offset:2px}

/* ================= HEADER ================= */
header{position:sticky;top:0;z-index:40;background:var(--bg);padding-top:env(safe-area-inset-top)}
/* Pasek filtrów (#fbar) pod nagłówkiem (decyzja Tomka 2026-10-12): w widoku dnia meczowego NIE jest przyklejony —
   logo i dni zostają u góry, filtry przewijają się z listą (telefon i komputer). W Piłkarzach i Rozgrywkach (klasa
   fbar-stick na body, ustawiają ją renderSquad/renderLeagues) przykleja się pod nagłówkiem, jak dotąd cały nagłówek.
   --hdrh = wysokość nagłówka, mierzona w JS. Kreska na dole: pod paskiem filtrów, gdy jest przyklejony; inaczej pod nagłówkiem. */
.fbar{position:relative;background:var(--bg)}
body.fbar-stick .fbar{position:sticky;top:var(--hdrh,0px);z-index:39}
body.fbar-stick .fbar::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--line)}
body.fbar-stick > header::after{display:none}
body:not(.fbar-stick) .fbar .frow{padding-top:10px}
/* Paczka 75: w Piłkarzach i Rozgrywkach (fbar-stick, bez paska dni) pastylki Wszyscy / Ulubieni stały tuż pod podpisem
   „Mecze polskich piłkarzy za granicą” — ten sam odstęp 10px co w widoku dnia (telefon i komputer). */
body.fbar-stick .fbar .frow{padding-top:10px}
header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--line)}
.bar{display:flex;align-items:center;justify-content:space-between;gap:12px;height:50px}
.logo{display:inline-flex;align-items:center;gap:7px;white-space:nowrap;flex:0 0 auto}
.logo{gap:5px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.logo .flag{flex:0 0 auto;display:flex;align-items:center}
.logo .flag svg{display:block;width:12px;height:19px}
.logo .word{
  font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;
  font-size:23px;letter-spacing:-.03em;line-height:1;transform:skewX(-8deg);display:inline-block;
}
.logo .pol{color:var(--ink)}
.logo .score{color:var(--red)}
/* Wyszukiwarka w widoku Mecze: lupka na końcu wiersza z filtrami (Top 5 / Wszyscy / ...). Po kliknięciu pole
   zajmuje miejsce filtrów W TYM SAMYM wierszu — nagłówek nie rośnie, logo zostaje. Przycisk ✕ pojawia się
   dopiero po wpisaniu pierwszej litery, z tą samą animacją co w wyszukiwarce Piłkarzy i Rozgrywek. */
.frow{display:flex;align-items:center;gap:8px;padding-bottom:12px}
.frow .filters{flex:1;min-width:0;padding-bottom:0}
.msbtn{flex:0 0 auto;width:36px;height:30px;display:flex;align-items:center;justify-content:center;
  background:var(--card);border:1px solid var(--line);border-radius:99px;color:var(--mut);padding:0}
.msbtn:active{background:var(--card-2)}
.msbtn.on{color:var(--lime-ink);border-color:var(--lime-line)}
.msbox{display:none;flex:1;min-width:0;align-items:center;gap:8px;position:relative}
.frow.searching .filters{display:none}
/* Przełącznik układu listy meczów: według rozgrywek (domyślnie) ↔ według godzin (decyzja Tomka 2026-10-10).
   Ten sam kształt co lupka; podświetlony na limonkowo, gdy aktywny jest układ godzinowy. */
#sortBtn.on{color:var(--lime-ink);border-color:var(--lime-line);background:var(--lime-t)}
.frow.searching .msbox{display:flex}
.msbox input{flex:1;min-width:0;height:30px;background:var(--card);border:1px solid var(--line);color:var(--ink);
  border-radius:99px;padding:0 34px 0 14px;font-family:inherit;-webkit-appearance:none;
  font-size:16px} /* 16px — poniżej Safari na iOS sam przybliża ekran po kliknięciu w pole */
/* Mini, delikatny ✕ w samym polu — kasuje tylko wpisany tekst (duży ✕ obok zamyka całą wyszukiwarkę) */
.msx{position:absolute;right:9px;top:50%;width:22px;height:22px;margin-top:-11px;display:flex;align-items:center;justify-content:center;
  background:none;border:0;color:var(--dim);font-size:12px;line-height:1;padding:0;opacity:.8;
  transition:opacity .18s ease, transform .18s ease}
.msx:active{color:var(--ink)}
.msx.hide{opacity:0;transform:scale(.7);pointer-events:none}
.msbox input::placeholder{color:var(--dim)}
.msbox input:focus{outline:2px solid var(--lime);outline-offset:1px}
/* Natywny krzyżyk pola type="search" (Safari/Chrome) dublował nasz własny ✕ — chowamy go we wszystkich
   wyszukiwarkach, zostaje jeden, animowany. */
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-results-button,
input[type="search"]::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none;display:none}
input[type="search"]{-webkit-appearance:none;appearance:none}
.gear{flex:0 0 auto;background:var(--card);border:1px solid var(--line);border-radius:10px;color:var(--mut);
  font-size:13px;font-weight:600;padding:0 12px;height:34px;line-height:32px;white-space:nowrap}
.gear:active{background:var(--card-2)}

/* H1 z nazwą usługi po ludzku — dla Google, nie do "krzyczenia" do
   użytkownika. Wizualnie to tylko cichy podpis pod logo, ta sama
   waga co reszta drobnego tekstu w interfejsie. */
.tagline{font-size:11.5px;font-weight:600;color:var(--dim);letter-spacing:.01em;
  margin:1px 0 0;line-height:1.3}
/* Napis pod logo stoi ZAWSZE w tym samym miejscu, na każdej stronie (Tomek 2026-10-21): 8 px pod dolną krawędzią przycisków
   wstecz/zamknij (na stronie głównej ich nie ma, ale napis i tak jest na tej samej wysokości), na podstronach 8 px do kreski
   nagłówka. Odstęp do kafli dni na stronie głównej daje margin-top .days (wcześniej margines napisu). */

/* Kafle dni (2026-10-14, kompaktowy nagłówek): dalej dwie linie (dzień tygodnia + data) — jedna linia
   poszerzyłaby kafle i na telefonie mieściłoby się wyraźnie mniej dni. Odchudzone paddingi i interlinia. */
.days{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px 0 9px;margin-top:7px}
.days::-webkit-scrollbar{display:none}
.day{flex:0 0 auto;background:var(--card);border:1px solid var(--line);border-radius:12px;color:var(--mut);
  padding:5px 12px;text-align:center;min-width:58px;border-radius:10px}
.day .d{font-size:9.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);line-height:1.2}
.day .n{font-size:15px;font-weight:700;margin-top:1px;line-height:1}
.day.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.day.on .d{color:var(--on-ink)}
/* Paczka 131: „+” na końcach paska — dokłada 15 dni; wysokość jak kafle dni, przygaszony */
.day-more{flex:0 0 auto;background:none;border:1px dashed var(--line);border-radius:10px;color:var(--dim);
  min-width:36px;padding:0 10px;font:inherit;font-size:20px;font-weight:600;line-height:1;cursor:pointer}
.day-more:hover{color:var(--mut);border-color:var(--mut)}

.filters{display:flex;gap:7px;padding-bottom:12px;overflow-x:auto;scrollbar-width:none}
.filters::-webkit-scrollbar{display:none}
.filters .chip{flex:0 0 auto}
.chip{background:var(--card);border:1px solid var(--line);color:var(--mut);border-radius:99px;padding:7px 14px;font-size:12.5px;font-weight:600}
.chip.on{background:var(--lime);border-color:var(--lime);color:var(--on-lime)}

/* ================= SEKCJE ================= */
.sect{display:flex;align-items:center;gap:8px;margin:16px 2px 9px;font-size:10px;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.sect .ln{flex:1;height:1px;background:var(--line)}
.sect.live{color:var(--red)}
/* Nagłówki "Wkrótce" i "Zakończone" dostają dodatkowy odstęp od kart
   sekcji nad nimi — inaczej wyglądały stłoczone tuż pod poprzednią listą. */
.sect.gap{margin-top:28px}
/* Przycisk skoku między "Na żywo/Wkrótce" a "Zakończone" (widoczny tylko przy długiej liście) */
.jump{position:absolute;right:14px;bottom:calc(100% + 12px);z-index:45;display:none;align-items:center;gap:6px;border:0;border-radius:99px;
  padding:10px 15px;background:var(--lime);color:var(--on-lime);font:inherit;font-size:12.5px;font-weight:800;
  box-shadow:0 6px 18px var(--sh);cursor:pointer}
.jump.show{display:flex}
nav .jump{flex:none;color:var(--on-lime)}
nav .jump::after{content:none}

.comp-group{margin:0}
.comp-head{display:flex;align-items:center;gap:8px;padding:0 2px 6px}
.comp-head .comp-name{font-size:11px;font-weight:800;letter-spacing:.01em;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.comp-head .comp-meta{font-size:9.5px;color:var(--dim);white-space:nowrap}
.comp-head .comp-line{flex:1;height:1px;background:var(--line)}
.comp-head.live .comp-name{color:var(--red)}
.comp-head .pulse{flex:0 0 auto}
/* Kompaktowy dzień meczowy (2026-10-14): mecze jednych rozgrywek to JEDNA ramka (.mlist), a mecze rozdziela cienka
   linia — zamiast osobnych kart z własną ramką i odstępem. Grupa „Na żywo” ma czerwoną ramkę całej listy. */
.mlist{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:12px}
.mlist.live{border-color:var(--red-edge)}
.mlist>.card{background:transparent;border:0;border-radius:0;margin:0}
.mlist>.card+.card{border-top:1px solid var(--line)}
/* Naciśnięcie karty (2026-10-21): bez systemowego „błysku” przy stuknięciu (tap-highlight), delikatne przyciemnienie z płynnym
   przejściem — i tylko przy naciśnięciu samej karty, nie gwiazdki ★ ani rozwiniętych szczegółów meczu. */
.mlist>.card{transition:background-color .25s ease}
.mlist>.card:active:not(:has(.det:active,.star:active)){background:var(--press)}
.mlist>.card:focus-visible{outline-offset:-2px}   /* ramka listy ma overflow:hidden — obwódka fokusu (klawiatura) do środka, żeby jej nie ucinało */
.comp-group .chead .lg{display:flex;align-items:center;gap:4px;min-width:0}
.comp-group .chead{padding-top:6px}
.pulse{width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 0 0 rgba(255,59,71,.6);animation:pl 1.8s infinite}
@keyframes pl{0%{box-shadow:0 0 0 0 rgba(255,59,71,.55)}70%{box-shadow:0 0 0 7px rgba(255,59,71,0)}100%{box-shadow:0 0 0 0 rgba(255,59,71,0)}}
@keyframes plg{0%{box-shadow:0 0 0 0 rgba(198,242,78,.55)}70%{box-shadow:0 0 0 6px rgba(198,242,78,0)}100%{box-shadow:0 0 0 0 rgba(198,242,78,0)}}
@media (prefers-reduced-motion:reduce){.pulse{animation:none}}

/* ================= KARTA MECZU ================= */
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:6px;overflow:hidden;cursor:pointer;transition:border-color .15s;-webkit-tap-highlight-color:transparent}
.card:active:not(:has(.det:active,.star:active)){border-color:var(--line-2)}
.card.live{border-color:var(--red-edge)}
.chead{display:flex;align-items:center;gap:8px;padding:8px 12px 0;font-size:9.5px;font-weight:700;letter-spacing:.05em;color:var(--dim);text-transform:uppercase}
.chead .lg{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chead .tv{flex:0 0 auto;background:var(--card-2);border-radius:6px;padding:3px 8px;color:var(--mut);letter-spacing:.02em}
.chead .st{flex:0 0 auto;margin-left:auto;display:flex;align-items:center;gap:5px;color:var(--ink);
  font-size:13px;font-weight:800;letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums}
.chead .st.is-live{color:var(--red)}
.chead .st.is-done{color:var(--dim);font-size:12px;font-weight:600}
/* Na żywo w tej samej, lżejszej typografii co „koniec” (2026-10-14) — „na żywo” mówi kolor, kropka i czerwona ramka,
   nie grubość. Wynik na żywo zostaje czerwony (decyzja Tomka 2026-10-14), ale w lżejszej typografii niż dawniej. */
.card .chead .st.is-live{font-size:12px;font-weight:600}
.card .chead .st.is-live .pulse{width:6px;height:6px}
.chead.chead-status-only{position:absolute;top:9px;right:12px;z-index:2;justify-content:flex-end;padding:0;pointer-events:none}
.card{position:relative}

/* Kompaktowa karta (2026-10-14): linia 1 = Polak (nazwisko, imię i wiek, pozycja, minuty/kropka, ⚽ 🅰️ 🪑),
   linia 2 = mecz w jednej linii „gospodarz – gość” z wynikiem po prawej. Pogrubienie i kolor ma tylko zwycięzca meczu
   (jak wcześniej); klub Polaka jest w rozwiniętych szczegółach (.dclub). */
.plr{display:flex;align-items:center;gap:9px;padding:9px 12px 0;box-sizing:border-box}
.plr+.plr{padding-top:4px}
.card>.chead-status-only+.plr{padding-right:84px}
.ava{position:relative;width:30px;height:30px;flex:0 0 auto}
.ava i{position:absolute;inset:-2px;border-radius:50%;background:conic-gradient(from 180deg,var(--cc,#444),transparent 70%);opacity:.85}
.ava .im{position:absolute;inset:0;border-radius:50%;overflow:hidden;background:var(--card-2);display:flex;align-items:center;justify-content:center;border:1.5px solid var(--card)}
.ava img{width:100%;height:100%;object-fit:cover;object-position:top}
.ava .ini{font-weight:700;font-size:11px;color:var(--dim)}
.who{flex:1;min-width:0}
.nm{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nm .s{font-weight:700;font-size:15px;letter-spacing:-.01em;line-height:1.1}
.rate{font-size:10px;font-weight:800;padding:1.5px 5px;border-radius:5px;
  background:var(--mut-t);color:var(--mut)}
.rate.g{background:var(--ok-t);color:var(--ok)}
.rate.b{background:var(--low-t);color:var(--low)}
/* Najwyżej oceniony w meczu — gwiazdka w tej samej pigułce co ocena */
.rate.top{background:var(--amber-t);color:var(--amber)}
.linkbtn{background:none;border:0;color:var(--lime-ink);font:inherit;font-weight:600;cursor:pointer;padding:0 0 0 6px;text-decoration:underline}
.age{color:var(--dim);font-weight:500}
.age:not(:empty){margin-left:4px}
.ph-name .age{font-size:.72em;color:var(--mut)}
.sub{font-size:10.5px;color:var(--dim);margin-top:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ev{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}
.ev:empty{display:none}
.ev span{font-size:9.5px;font-weight:700;background:var(--card-2);border-radius:4px;padding:1px 5px;color:var(--ink)}
.ev span.g{background:var(--lime-t);color:var(--lime-ink)}
.ev span.hurt{background:var(--red-t);color:var(--red)}
.ev span.subin{background:var(--lime-t);color:var(--lime-ink)}
.ev span.subout{background:var(--card-2);color:var(--mut)}
.st8{display:flex;gap:4px;flex-wrap:wrap;margin-top:1px;font-variant-numeric:tabular-nums}
.st8:empty{display:none}
.st8 span{font-size:10px;font-weight:600;color:var(--mut)}
.st8 span+span::before{content:"·";margin-right:5px;color:var(--dim)}
.searchbox{display:flex;gap:8px;align-items:center;padding-bottom:12px}
.searchbox input{flex:1;min-width:0;background:var(--card);border:1px solid var(--line);color:var(--ink);
  border-radius:12px;padding:11px 14px;font-family:inherit;-webkit-appearance:none;
  /* 16px to próg, poniżej którego Safari na iOS sam przybliża ekran
     przy kliknięciu w pole. Nie schodzić niżej. */
  font-size:16px}
.searchbox input::placeholder{color:var(--dim)}
.searchbox input:focus{outline:2px solid var(--lime-line);outline-offset:1px}
.searchbox button{flex:0 0 auto;background:var(--card);border:1px solid var(--line);color:var(--mut);
  border-radius:12px;height:42px;font-size:15px;line-height:1;
  width:42px;padding:0;overflow:hidden;transform-origin:right center;
  transition:width .22s cubic-bezier(.2,.8,.3,1), opacity .18s ease,
             transform .22s cubic-bezier(.2,.8,.3,1), margin-left .22s cubic-bezier(.2,.8,.3,1),
             border-color .18s ease}
/* Stan spoczynku: zwinięty do zera, niewidoczny, nieklikalny */
.searchbox button.hide{width:0;opacity:0;transform:scale(.6);margin-left:-8px;
  border-color:transparent;pointer-events:none}
.searchbox button:active{background:var(--card-2)}
@media (prefers-reduced-motion:reduce){
  .searchbox button{transition:opacity .15s ease}
  .searchbox button.hide{transform:none}
}
/* Ikony ★ i ⊘ — powiększone i szerzej rozstawione, żeby trudniej było
   trafić w niewłaściwą. Obszar dotykowy ma min. 44px (zalecenie Apple). */
.star{flex:0 0 auto;background:none;border:none;font-size:21px;color:var(--line-2);
  padding:9px 7px;line-height:1;min-width:44px;min-height:44px}
.star.on{color:var(--amber)}
/* ★ przy zaznaczaniu: krótkie „wyskoczenie” z obrotem i złotą poświatą; przy odznaczaniu — lekkie przygaszenie (2026-10-21). */
.star{transition:color .2s ease;-webkit-tap-highlight-color:transparent}
.star.pop{animation:starPop .5s cubic-bezier(.34,1.56,.64,1)}
.star.pop.on{text-shadow:0 0 12px rgba(255,190,60,.55)}
.star.unpop{animation:starUnpop .3s ease}
@keyframes starPop{0%{transform:scale(1)}35%{transform:scale(1.4) rotate(-14deg)}65%{transform:scale(.9) rotate(4deg)}100%{transform:scale(1) rotate(0)}}
@keyframes starUnpop{0%{transform:scale(1)}50%{transform:scale(.8)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.star.pop,.star.unpop{animation:none}}
.mute{flex:0 0 auto;background:none;border:none;font-size:21px;color:var(--line-2);
  padding:9px 7px;line-height:1;min-width:44px;min-height:44px}
/* Przycisk nieaktywny — gdy druga opcja jest już wybrana */
.star[disabled],.mute[disabled]{opacity:.22;pointer-events:none}
.mute.on{color:var(--red)}
.li.muted-row{opacity:.45}
.li.muted-row .s{text-decoration:line-through;text-decoration-color:var(--red);text-decoration-thickness:1.5px}

.mtc{display:flex;align-items:baseline;gap:10px;padding:3px 12px 9px;cursor:pointer}
.mtc .tm{flex:1;min-width:0;display:flex;align-items:baseline;gap:5px;font-size:12.5px}
.mtc .t{flex:0 1 auto;min-width:0;position:relative;border-radius:6px}
.mtc .t .n{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--mut);font-weight:500;letter-spacing:.01em}
.mtc .t.win .n{color:var(--cyan);font-weight:700}
.mtc .vs{flex:0 0 auto;color:var(--dim)}
.mtc .sc{flex:0 0 auto;position:relative;display:inline-flex;align-items:baseline;gap:3px;
  font-weight:600;font-size:13.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.mtc .sc:empty{display:none}
.mtc .sc .live{color:var(--red)}
.mtc .sc .sep{font-weight:500;color:var(--dim)}
.det .dh2:has(+ .tl:empty){display:none}   /* paczka 50: pusty przebieg (przyjęty status live) — bez nagłówka „Mecz” */
.mtc .sc .nolive{font-size:11px;font-weight:500;color:var(--dim);white-space:nowrap}   /* paczka 50 */
.mtc .sc .pso{margin-left:3px;color:var(--dim);font-size:10.5px}
.mtc .sc .g{display:inline-block}
/* Strona meczu /mecze/{slug}/ — nagłówek z wynikiem zostaje w dwóch wierszach „drużyna … bramki”. */
.mm-teams .t{display:flex;justify-content:space-between;gap:10px;padding:1px 0;font-size:12.5px}
.mm-teams .t .n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--mut);font-weight:500;
  letter-spacing:.01em}
.mm-teams .t.win .n{color:var(--cyan);font-weight:700}
.mm-teams .t .g{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:14px;min-width:14px;text-align:right}
.mm-teams .t .g.live{color:var(--red)}
/* Wynik serii karnych — obok wyniku meczu, celowo cichszy od niego. */
.pso{font-size:.72em;font-weight:500;color:var(--dim);white-space:nowrap;font-variant-numeric:tabular-nums;letter-spacing:0}
.mm-teams .t .gp{margin-left:auto;margin-right:-4px;align-self:center;font-size:11px}
.ph-pso{font-size:10.5px}
.pm-res .pso{margin-left:6px}
.mtc .kick{flex:0 0 auto;font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:19px;color:var(--ink)}
/* Gol PRZED CHWILĄ — ma przykuć wzrok na parę sekund, nie zostać na stałe. */
/* Kompaktowa karta (2026-10-14): drużyny i wynik są w jednej linii, więc rozbłysk idzie przez CAŁĄ linię meczu (.mtc,
   od krawędzi do krawędzi karty — jak wcześniej cały wiersz drużyny), nazwa strzelającej drużyny na chwilę zapala się
   akcentem, cyfra wyniku podskakuje, a ⚽ wyskakuje tuż obok wyniku, w tej samej linii (nie nachodzi na minutę nad nim). */
.mtc.goal-flash{animation:goalRow 2.6s ease-out}
.mtc .t.goal-flash .n{animation:goalName 2.6s ease-out}
.mtc .sc .g.goal-flash{animation:goalBump .7s ease}
.goal-pop{position:absolute;right:calc(100% + 5px);top:50%;margin-top:-.55em;font-size:13px;line-height:1.1;pointer-events:none;
  animation:goalPop 2.2s ease forwards}
@keyframes goalRow{0%{background:var(--lime-t2)}100%{background:transparent}}
@keyframes goalName{0%,45%{color:var(--lime-ink)}100%{}}
@keyframes goalBump{0%{transform:scale(1)}35%{transform:scale(1.4);color:var(--lime-ink)}100%{transform:scale(1)}}
@keyframes goalPop{0%{opacity:0;transform:scale(.4) rotate(-90deg)}
  20%{opacity:1;transform:scale(1.3) rotate(0)}
  35%{transform:scale(1)}
  80%{opacity:1;transform:scale(1)}
  100%{opacity:0;transform:scale(.8)}}
@media (prefers-reduced-motion:reduce){
  .mtc.goal-flash{animation-duration:1.2s}
  .mtc .t.goal-flash .n{animation-duration:1.2s}
  .mtc .sc .g.goal-flash{animation:none}
  .goal-pop{animation:none;opacity:0}
}

.det{display:none;border-top:1px solid var(--line);padding:12px 14px 14px;background:var(--det)}
.card.open .det{display:block}
.dh{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);margin-bottom:7px}
.dh:not(:first-child){margin-top:14px}
.detplr{margin-bottom:8px;background:var(--card-2);border-radius:10px;padding:9px 10px 10px}
.detplr:last-of-type{margin-bottom:0}
.detplr[hidden],.ln-note[hidden]{display:none!important}
.detplr.nd{padding-bottom:9px}
.detplr.nd .ev,.detplr.nd .st8{display:none}
.ln-note{margin:0 0 8px}
.detname{font-weight:700;font-size:13.5px;line-height:1.2;display:flex;align-items:center;gap:7px;margin-bottom:5px}
.detname .rate{position:relative;top:-.5px}
/* Klub Polaka w rozwiniętych szczegółach (2026-10-14) — na zwiniętej karcie już go nie ma. */
.detname>span[data-rt]:empty{display:none}
.detname .dclub{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;font-weight:500;color:var(--mut)}
/* ★ ulubionych w rozwiniętych szczegółach meczu (decyzja Tomka 2026-10-10) — po prawej w linii nazwiska;
   ujemne marginesy: duży obszar dotyku (40px) bez podwyższania wiersza. */
.detname .dstar{margin:-9px -6px -9px auto;font-size:18px;padding:6px;min-width:40px;min-height:40px}
.pitchdot{width:6px;height:6px;border-radius:50%;background:var(--lime-line);display:inline-block;
  animation:plg 1.8s infinite;flex:0 0 auto}
.dotwrap{display:inline-flex;align-items:center;transition:opacity .15s ease}
.pos{display:inline-block;margin-left:6px;padding:1px 5px;border-radius:5px;
  background:var(--card-2);color:var(--dim);font-size:9.5px;font-weight:700;
  letter-spacing:.04em;vertical-align:middle;position:relative;top:-1px}
.dotwrap.dot-hidden{opacity:0}
/* Gol/asysta na zwiniętej karcie meczu (decyzja Tomka 2026-10-10) — ten sam język co w rozwiniętych szczegółach (.ev). */
.mevwrap{display:inline-flex;align-items:center;gap:4px}
.mevwrap:empty{display:none}
/* Same ikony, bez tła (decyzja Tomka 2026-10-12): ⚽ gol, A asysta (litera w kolorze akcentu), 🪑 ławka. */
.mev{font-size:12px;font-weight:700;line-height:1;color:var(--lime-ink);display:inline-flex;align-items:center}
.mev.a{font-size:12px;font-weight:800}
.mev.bench{font-size:12px}
.mev.xi{font-size:12px}
/* Minuty w zakończonym meczu — w miejscu zielonej kropki „na boisku” (decyzja Tomka 2026-10-12). */
.mmin{font-size:11px;font-weight:700;color:var(--mut);line-height:1}
/* Równe odstępy w wierszu zawodnika na karcie meczu (decyzja Tomka 2026-10-12): nazwisko → pozycja → minuty / kropka →
   ⚽ / A / 🪑 — każdy element dokładnie o ten sam odstęp (gap .nm), bez względu na to, które oznaczenia akurat są.
   Wcześniej pozycja miała własny margines, pusty pojemnik kropki zajmował dodatkowy odstęp, a ikony stały ciaśniej. */
.plr .nm{gap:7px;flex-wrap:nowrap;min-width:0}
/* Hierarchia (2026-10-14): nazwisko jest jedynym mocnym elementem wiersza; wynik spokojniejszy, „koniec” cichy. */
.plr .nm .s{font-weight:600}
.plr .nm>*{flex:0 0 auto}
/* Imię i wiek tuż po nazwisku — jako jedyne skraca się wielokropkiem na wąskim ekranie (pozycja i oznaczenia zostają). */
.plr .nm .fn{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;color:var(--dim)}
.plr .nm .fn .age{margin-left:3px}
.plr .nm .pos{margin-left:0}
.plr .nm .dotwrap,.plr .nm .mevwrap{display:contents}
@media (prefers-reduced-motion:reduce){ .pitchdot{animation:none} }
.detplr .ev{margin-top:0;margin-bottom:6px}
.detplr .st8{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:0}
.detplr .st8 span{background:var(--card);border-radius:7px;padding:5px 8px;font-size:10.5px;font-weight:600;color:var(--mut);line-height:1.35}
.detplr .st8 span.dnp{grid-column:1/-1;background:none;padding:2px 0;color:var(--dim);font-style:italic;font-weight:500}
.detplr .st8 span.dnp.ok{color:var(--mut)}
/* Stany obecności zawodnika w meczu — kolor i ikona rozróżniają je
   na pierwszy rzut oka, bez czytania tekstu. */
.detplr .st8 span.dnp.bench{color:var(--mut);font-style:normal;font-weight:600}
.detplr .st8 span.dnp.starting{color:var(--lime-ink);font-style:normal;font-weight:700}
/* Paczka 226: szansa na pierwszy skład (szacunek) — wyraźnie inaczej niż oficjalny skład 👕: bez pogrubienia limonką, druga linijka drobna */
.detplr .st8 span.dnp.sz{font-style:normal;font-weight:600;color:var(--ink-2);padding-bottom:0}
.detplr .st8 span.dnp.sz.sz-p4{color:var(--lime-ink)}
.detplr .st8 span.dnp.szb{font-size:11.5px;padding-top:0;font-style:normal;font-weight:400}
.detplr .st8 span.dnp.pg{font-style:normal;font-weight:600;color:var(--ink-2);padding-bottom:0;padding-top:6px}
.detplr .st8 span.dnp.pg2{font-style:normal;font-weight:500;color:var(--ink-2);padding-top:0;padding-bottom:0}
.detplr .st8 span.dnp.pgb{font-size:11.5px;padding-top:0;font-style:normal;font-weight:400}

.detplr .st8 span.dnp.played{color:var(--lime-ink);font-style:normal;font-weight:600}
.detplr .st8 span.dnp.excluded{color:var(--amber);font-style:normal;font-weight:600}
.detplr .st8 span.dnp.out{color:var(--amber);font-style:normal;font-weight:600}
.detplr .st8 span.dnp.missed{color:var(--dim);font-style:normal}
.detplr .st8 span.dnp.callup{color:var(--ink);font-style:normal;font-weight:700}
.detplr .st8 span+span::before{content:none;margin:0}
/* Przebieg meczu (gole, asysty) jest drugorzędny wobec statystyk zawodników — celowo cichy: mniejsza
   czcionka, przygaszone kolory, wyszarzone ikony i ciaśniejsze wiersze, żeby nie konkurował ze "Stats". */
.dh.dh2{font-size:9.5px;opacity:.7;margin-top:18px}
.tl{display:flex;flex-direction:column;gap:0}
.tlrow{display:grid;grid-template-columns:26px 16px 1fr auto auto;align-items:center;gap:7px;padding:3px 0;font-size:11px}
.tlsc{font-weight:600;color:var(--mut)}
.tlrow em{grid-column:1/6;color:var(--dim);font-style:normal}
.tlm{color:var(--dim);font-weight:500}
.tli{font-size:10px;text-align:center;filter:grayscale(1);opacity:.65}
.tli.tlc{filter:none;opacity:1}   /* paczka 123: kartki w przebiegu meczu polskiego klubu — w kolorze */
/* Paczka 123: etykieta meczu polskiego klubu w pucharach — na zwiniętej karcie w miejscu wiersza zawodnika */
/* Paczka 124: ten sam krój, wielkość i odstępy co nazwisko w wierszu Polaka (.plr .nm .s) — etykieta wygląda jak wiersz zawodnika. */
.plc-tag{padding:9px 12px 0;font-size:15px;font-weight:600;letter-spacing:-.01em;line-height:1.1;color:var(--ink);box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card>.chead-status-only+.plc-tag{padding-right:84px}
.plr+.plc-tag{padding-top:4px}
.plc-tag .plc-ast{color:var(--dim);font-weight:500;margin-right:1px}   /* paczka 131: przygaszona gwiazdka */
.plc-tag .plc-sep{color:var(--dim);font-weight:500}
.mm-plc{margin:10px 0 0;font-size:13px;font-weight:700;color:var(--ink)}
.plc-sec .plc-club{margin:14px 0 6px;font-size:13px;font-weight:700}
.tlt{color:var(--mut)}
.tlteam{color:var(--dim);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100px;opacity:.85}
.tlrow.a .tlteam{color:var(--dim)}
.meta{font-size:12px;color:var(--dim);line-height:1.7;margin-top:12px}
.meta b{color:var(--mut);font-weight:600}
/* Paczka 87: liga · kraj + Tabela/Strzelcy/Asystenci na dole rozwiniętej karty — cicho, jak .meta, linki tabeli limonkowe */
.dlg{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:12px;line-height:1.5;color:var(--dim)}
.dlg-r{display:flex;flex-wrap:nowrap;align-items:baseline;gap:12px;white-space:nowrap}
.dlg-r+.dlg-r{margin-top:4px}
.dlg-lg{flex:1 1 auto;min-width:0;display:flex;align-items:baseline;overflow:hidden}
.dlg-n{min-width:0;overflow:hidden;text-overflow:ellipsis}
.dlg-cw{flex:none}
.dlg-t{flex:none;display:flex;gap:12px;margin-left:auto}
.dlg a{color:var(--mut);text-decoration:none;padding:3px 0}
.dlg a:hover{color:var(--ink);text-decoration:underline}
.dlg .dlg-t a{color:var(--lime-ink);font-weight:600}
.dlg-go{margin-left:3px;font-weight:700}
/* Paczka 197: „Składy obu drużyn ›” w rozwiniętej karcie — cicho, jak linki tabeli */
.dsk{display:inline-block;margin-top:10px;padding:3px 0;font-size:12.5px;font-weight:600;color:var(--lime-ink);text-decoration:none}
.dsk:hover{text-decoration:underline}
.dsk[hidden]{display:none}
/* Paczka 197: skok do sekcji Składy na stronie meczu — pod przyklejonym nagłówkiem */
#sklady{scroll-margin-top:0}   /* przewinięcie liczy JS (pod przyklejonym nagłówkiem) */
.dlg-d{margin:0 6px;color:var(--dim)}
@media (max-width:480px){ .dlg-cw{display:none} .dlg-r,.dlg-t{gap:10px} }

/* ================= KADRA ================= */
.list{background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-top:12px}
.li{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1px solid var(--line)}
.li:last-child{border-bottom:none}
.li .ava{width:44px;height:44px}
.li .nm .s{font-size:16px}
/* Paczka 119: lista Piłkarze i kadry — imię w linijce nazwiska (jak karty meczów), pod spodem sam klub. */
.nm.nm-fn{flex-wrap:nowrap;min-width:0}
.nm.nm-fn>*{flex:0 0 auto}
.nm.nm-fn .fn{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;color:var(--dim)}
.nm.nm-fn .pos{margin-left:0}
.empty .mq-pt b .fn{margin-left:6px;font-size:13px;font-weight:500;color:var(--dim)}

.empty{border:1px dashed var(--line);border-radius:18px;padding:34px 20px;text-align:center;color:var(--dim);font-size:13.5px;line-height:1.7;margin-top:12px}
/* Paczka 85: profil zawodnika, który nie gra tego dnia — osobny, wyraźny kafelek (jak wiersz listy zawodników), nie tekst w ramce. */
.empty .mq-prof{display:flex;align-items:center;gap:10px;margin:18px auto 0;max-width:420px;padding:12px 14px;border:1px solid var(--line-2);border-radius:14px;background:var(--card);text-align:left;text-decoration:none;color:var(--ink)}
.empty .mq-pt{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.35}
.empty .mq-pt b{font-size:15px;font-weight:700;color:var(--ink)}
.empty .mq-pt span{font-size:12.5px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.empty .mq-pg{flex:none;font-size:20px;font-weight:700;color:var(--mut);line-height:1}
.empty .mq-prof+.mq-prof{margin-top:8px}   /* paczka 86: kilka kafelków jeden pod drugim */
.empty .nh,.psm-hint .nh{display:block;margin-top:10px}   /* paczka 127: podpowiedź przy pustym wyniku szukania */
.empty b{display:block;font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:18px;color:var(--ink);margin-bottom:6px;letter-spacing:-.02em}
.note{background:var(--amber-t1);border:1px solid var(--amber-edge);color:var(--amber);border-radius:14px;
  font-size:12.5px;font-weight:600;text-align:center;padding:11px 14px;margin:12px 0 2px;line-height:1.55}
.strip{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px;font-size:10.5px;font-weight:600;color:var(--dim)}
.pill{background:var(--card);border:1px solid var(--line);border-radius:99px;padding:4px 10px}

/* ================= NAV ================= */
/* Dolny pasek jest ostatnim elementem strony i "przykleja się" do dołu okna (sticky), zamiast być
   fixed. Fixed przy dolnej krawędzi w iOS Safari i Chrome (oba na WebKit) potrafi zostać na starej
   wysokości po schowaniu/pokazaniu pasków przeglądarki — pod nim widać wtedy przewijającą się treść.
   Sticky liczy pozycję względem faktycznie widocznego okna, więc ten błąd go nie dotyczy. */
/* Literki do szybkiego przeskakiwania po liście (jak w kontaktach iPhone'a) — przy prawej krawędzi listy. */
/* Pasek zajmuje wysokość między nagłówkiem a dolnym menu (top/bottom ustawia azPlace), litery są w nim wyśrodkowane. */
.az{position:fixed;top:0;bottom:0;right:max(2px,calc(50vw - 342px));z-index:44;display:flex;flex-direction:column;
  align-items:center;justify-content:center;pointer-events:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.az[hidden]{display:none}
.az-in{display:flex;flex-direction:column;align-items:center;padding:6px 0;pointer-events:auto;touch-action:none;-webkit-tap-highlight-color:transparent}
.az button.on{color:var(--ink);transform:scale(1.25)}
.az button{background:none;border:0;color:var(--lime-ink);font-size:10.5px;font-weight:700;line-height:1;padding:2.5px 7px;min-width:24px;cursor:pointer;font-family:inherit;touch-action:none}
.az button:hover{color:var(--ink)}
nav{position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--nav-bg);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}
nav .in{max-width:620px;margin:0 auto;display:flex;padding:0 14px}
nav button{flex:1;background:none;border:none;color:var(--dim);padding:15px 0 13px;font-size:12.5px;font-weight:700;position:relative}
nav button.on{color:var(--ink)}
nav button.on::after{content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);width:26px;height:2px;background:var(--lime-line);border-radius:0 0 99px 99px}
nav button svg{display:none}
/* Paczka 156: zakładka Rankingi (widok bazowy) — bez paska filtrów/szukania; nagłówek strony rankingów nie przykleja się
   (przyklejony jest już nagłówek apki). */
body.view-rank .fbar{display:none}
body.view-rank #app .profile .pstick{position:static}
/* Paczka 156 (decyzja Tomka 2026-11-05): na telefonie dolne menu jak na Instagramie — pływająca „pigułka” z ikoną i podpisem,
   półprzezroczysta z rozmyciem, aktywna zakładka w jaśniejszej pigułce, zawsze widoczne. Komputer (>640 px) bez zmian.
   Sam <nav> zostaje przyklejony do dołu na całą szerokość (przezroczysty, nie łapie dotyku), a pigułką jest .in — dzięki temu
   wysokość nav (--navh, A–Z, cookies, nakładki) dalej obejmuje całe zajęte miejsce razem z odstępem od dołu. */
@media (max-width:640px){
  nav{background:none;border-top:0;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none;
    padding:0 12px calc(10px + env(safe-area-inset-bottom))}
  nav .jump{pointer-events:auto}
  nav .in{pointer-events:auto;max-width:460px;padding:4px;gap:2px;border-radius:999px;background:var(--nav-glass);
    -webkit-backdrop-filter:blur(22px) saturate(1.7);backdrop-filter:blur(22px) saturate(1.7);
    border:1px solid var(--line);box-shadow:0 8px 28px var(--sh)}
  nav button{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0 5px;border-radius:999px;
    font-size:10.5px;font-weight:700;letter-spacing:.01em;line-height:1.2;-webkit-tap-highlight-color:transparent;transition:background-color .15s ease,color .15s ease}
  nav button svg{display:block;width:22px;height:22px}
  nav button.on{color:var(--ink)}
  nav button.on svg{color:var(--lime-ink)}
  /* Pigułka zaznaczenia jako osobny element, który płynnie przesuwa się między zakładkami (jak na Instagramie). */
  nav .in{position:relative}
  nav button{position:relative;z-index:1}
  nav .nav-ind{display:block;position:absolute;top:4px;bottom:4px;left:0;width:0;border-radius:999px;background:var(--nav-on);pointer-events:none;z-index:0;opacity:0}
  nav .nav-ind.go{transition:transform .34s cubic-bezier(.32,.72,.24,1),width .34s cubic-bezier(.32,.72,.24,1),opacity .2s ease}
  nav button.on::after{content:none}
}
/* Paczka 197 (Tomek 2026-11-08, jak na Instagramie): po przewinięciu w dół pigułka menu płynnie się zwęża i obniża, podpisy
   znikają — zostają same ikony; przewinięcie w górę (albo powrót na samą górę, zmiana zakładki) rozwija ją z powrotem.
   Klasa body.nav-mini (JS niżej, tylko telefon). Wysokość rezerwy na dole (--navh) liczona z pełnego menu — strona nie skacze. */
@media (max-width:640px){
  nav .in{transition:max-width .34s cubic-bezier(.32,.72,.24,1)}
  /* Tylko przyciski zakładek (.in) — przycisk „↑ Na żywo / ↓ Zakończone” (.jump, też w nav) zostaje bez zmian */
  nav .in button{transition:background-color .15s ease,color .15s ease,padding .34s cubic-bezier(.32,.72,.24,1),gap .34s cubic-bezier(.32,.72,.24,1)}
  nav .in button span{display:block;max-height:14px;overflow:hidden;transition:max-height .3s cubic-bezier(.32,.72,.24,1),opacity .18s ease,transform .3s cubic-bezier(.32,.72,.24,1)}
  body.nav-mini nav .in{max-width:236px}
  body.nav-mini nav .in button{padding:8px 0;gap:0}
  body.nav-mini nav .in button span{max-height:0;opacity:0;transform:scale(.8)}
}
@media (max-width:640px) and (prefers-reduced-motion:reduce){ nav button,nav .nav-ind.go,nav .in,nav .in button span{transition:none} }
.nav-ind{display:none}

/* ================= SHEET ================= */
.sheet{position:fixed;inset:0;background:var(--scrim);display:none;z-index:60;align-items:flex-end}
.sheet.open{display:flex}
.box{background:var(--card);border:1px solid var(--line);border-bottom:none;border-radius:22px 22px 0 0;width:100%;max-width:620px;margin:0 auto;
  padding:22px 16px calc(24px + env(safe-area-inset-bottom));max-height:88vh;overflow-y:auto}
.box h3{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:19px;letter-spacing:-.02em;margin-bottom:5px}
.box p{font-size:12.5px;color:var(--dim);line-height:1.65;margin-bottom:6px}
.box label{display:block;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin:16px 0 6px}
.box input{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:11px;color:var(--ink);padding:12px;font-size:16px;font-family:inherit}
.box input:focus{outline:2px solid var(--lime-line);outline-offset:1px}
.acts{display:flex;gap:8px;margin-top:18px}
.btn{flex:1;border:none;border-radius:11px;padding:13px;font-size:14px;font-weight:700}
.btn.p{background:var(--lime);color:var(--on-lime)}
.btn.g{background:var(--card-2);border:1px solid var(--line);color:var(--ink)}
.btn.w{background:var(--card-2);border:1px solid var(--line);color:var(--ink);width:100%;margin-top:10px}
.btn:disabled{opacity:.5}

/* ================= HISTORIA MECZÓW ZAWODNIKA ================= */
.who[data-pid]{cursor:pointer}
.detlink{cursor:pointer;text-decoration:underline;text-decoration-color:var(--dim);text-underline-offset:3px}
.detlink:hover{text-decoration-color:currentColor}
.playersheet .box{max-height:86vh;max-height:86dvh;display:flex;flex-direction:column;padding:16px 0 0}
.ph-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:0 18px 12px}
.ph-name{font-family:"Bricolage Grotesque",sans-serif;font-weight:800;font-size:19px;line-height:1.2}
.ph-sub{color:var(--mut);font-size:12.5px;margin-top:2px}
.ph-x{flex:0 0 auto;width:30px;height:30px;border-radius:9px;background:var(--card-2);border:1px solid var(--line);color:var(--mut);font-size:14px}
.ph-tabs{display:flex;gap:6px;padding:0 18px 0;border-bottom:1px solid var(--line)}
.ph-tab{flex:1;background:transparent;border:none;color:var(--mut);font-weight:700;font-size:13px;padding:9px 0;border-bottom:2px solid transparent}
.ph-tab.on{color:var(--ink);border-bottom-color:var(--lime-line)}
.ph-body{overflow-y:auto;padding:10px 14px 24px;-webkit-overflow-scrolling:touch}
.ph-empty{color:var(--dim);font-size:13px;text-align:center;padding:30px 10px;line-height:1.6}
/* Każdy mecz to osobna, wyraźnie odgraniczona "karta" — kolorowy pasek
   z lewej pokazuje wynik (W/R/P) i ciągnie się też wzdłuż rozwiniętych
   statystyk pod spodem, więc nawet gdy otwartych jest kilka meczów naraz,
   od razu widać, które staty należą do którego meczu (przydatne do
   screenów: "ile miał podań w tym vs tamtym meczu"). */
.ph-match{background:var(--card-2);border:1px solid var(--line);border-left:3px solid var(--line);border-radius:11px;margin-bottom:7px;overflow:hidden}
.ph-match.w{border-left-color:var(--ok)}
.ph-match.l{border-left-color:var(--red)}
.ph-match.d{border-left-color:var(--amber)}
/* Paczka 32: mecz z listy = link do osobnej strony meczu (/mecze/…/) ze strzałką ›; bez strony — zwykły wiersz bez strzałki. */
a.ph-match{display:block;color:inherit;text-decoration:none}
a.ph-match[href]{cursor:pointer}
a.ph-match[href] .ph-row:active{background:var(--press)}
.ph-go{display:none;flex:0 0 auto;font-size:20px;line-height:1;color:var(--dim);margin:0 -2px 0 -4px}
a.ph-match[href] .ph-go{display:block}
.ph-row{display:flex;align-items:center;gap:10px;padding:10px 12px}
.ph-info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:3px}
.ph-date{font-size:10px;color:var(--dim);font-variant-numeric:tabular-nums}
.ph-time{display:block;color:var(--dim)}
.ph-opp{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ph-opp a,.mtc,.mtc *{color:inherit;text-decoration:none}
.ph-opp a:hover{text-decoration:underline}
.ph-res{width:6px;height:6px;border-radius:50%;background:var(--dim);flex:0 0 auto}
.ph-res.w{background:var(--ok)}
.ph-res.l{background:var(--red)}
.ph-res.d{background:var(--amber)}
/* Staty zawodnika + wynik, w tej kolejności, po prawej — wynik ma stałą
   szerokość i wyrównanie do prawej, więc we wszystkich wierszach kolumna
   wyników zaczyna się dokładnie w tym samym miejscu. */
.ph-right{flex:0 0 auto;display:flex;align-items:center;gap:10px}
.ph-line{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end;max-width:150px}
.ph-score{min-width:34px;text-align:right;font-weight:800;font-size:14px;font-variant-numeric:tabular-nums}
.ph-comp{flex:1 1 auto;min-width:0;font-size:10.5px;color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ph-b{font-size:10px;font-weight:700;background:var(--card);border-radius:5px;padding:2px 5px;line-height:1.4}
.ph-b.g{color:var(--lime-ink)}
.ph-b.a{color:var(--lime-ink)}   /* ten sam kolor co gol (decyzja Tomka 2026-10-14) */
.ph-min{font-size:10.5px;font-weight:700;color:var(--mut);background:var(--card);border-radius:5px;padding:2px 5px}
/* Ocena — ten sam kolorowy wzorzec co w widoku "Mecze" (.rate): zielona
   od 7 w górę, czerwona poniżej 6, żeby rzucała się w oczy bez czytania. */
.ph-rate{font-size:10.5px;font-weight:800;padding:2px 6px;border-radius:5px;background:var(--card);color:var(--mut)}
.ph-rate.g{background:var(--ok-t);color:var(--ok)}
.ph-rate.b{background:var(--low-t);color:var(--low)}
.ph-rate.top{background:var(--amber-t);color:var(--amber)}
.ph-dnp,.ph-loading{font-size:10.5px;color:var(--dim)}
.ph-stats{display:flex;flex-wrap:wrap;gap:6px}
.ph-stats span{background:var(--card);border-radius:7px;padding:5px 8px;font-size:10.5px;font-weight:600;color:var(--mut)}
.ph-nostat{font-size:11px;color:var(--dim)}

/* ================= KOMPAKTOWO NA TELEFONIE ================= */
@media (max-width: 480px){
  body{font-size:14px}
  .wrap{padding:0 10px}
  .bar{height:44px}
  .logo{font-size:19px}
  .gear{height:30px;padding:0 10px;font-size:12px}
  .tagline{margin:4px 0 0}
  .days{gap:5px;padding:1px 0 8px;margin-top:6px}
  .day{padding:4px 8px;min-width:47px}
  .day .d{font-size:8.5px}
  .day .n{font-size:13.5px}
  .day-more{min-width:32px;padding:0 8px;font-size:18px}
  .chips{padding-bottom:9px}
  .chip{padding:5px 11px;font-size:11.5px}
  .sect{margin:12px 2px 8px;font-size:9.5px}
  .sect.gap{margin-top:22px}
  .card{border-radius:10px;margin-bottom:6px}
  .chead{padding:6px 10px 0;font-size:9px}
  .plr{padding:8px 10px 0;gap:8px}
  .card>.chead-status-only+.plr{padding-right:78px}
  .plc-tag{padding:8px 10px 0;font-size:14px}
  .card>.chead-status-only+.plc-tag{padding-right:78px}
  .plr .nm .fn{font-size:11.5px}
  .ava{width:25px;height:25px}
  .ava .ini{font-size:10px}
  .nm .s{font-size:14px}
  .rate{font-size:9px;padding:1px 4px}
  .sub{font-size:10px}
  .ev span,.st8 span{font-size:9px}
  .star{font-size:20px;padding:8px 6px;min-width:42px;min-height:42px}
  .mute{font-size:20px;padding:8px 6px;min-width:42px;min-height:42px}
  .mtc{padding:2px 10px 8px;gap:8px}
  .mtc .tm{font-size:12px}
  .mtc .sc{font-size:13px}
  .chead .st.is-done,.card .chead .st.is-live{font-size:11.5px}
  .mlist{border-radius:10px;margin-bottom:10px}
  /* Godzina/status meczu (pozycjonowane absolutnie względem karty) musi
     mieć to samo odsunięcie od prawej co wynik w .mtc, inaczej na wąskim
     ekranie jedno i drugie nie są wyrównane do tej samej krawędzi. */
  .chead.chead-status-only{right:10px}
  .det{padding:9px 10px 10px}
  nav button{padding:11px 0 9px;font-size:11.5px}
  @media (max-width:640px){ nav button{padding:6px 0 5px;font-size:10.5px} }   /* paczka 156: pigułka ma własne wymiary */
}

/* ================= STRONY /pilkarze/… (SEO + profil zawodnika) ================= */
a.who,a.detlink{color:inherit}
a.who{text-decoration:none;display:block}
body.page-player #days,body.page-player #frow,body.page-player #searchbox,body.page-player #app,
body.page-static #days,body.page-static #frow,body.page-static #searchbox,body.page-static #app,
body.page-player #fbar,body.page-static #fbar{display:none!important}
.seo-head{padding-top:6px}
.seo-head h1,.profile h1{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:24px;letter-spacing:-.02em;line-height:1.15;color:var(--ink)}
.seo-head p,.profile .pdesc{color:var(--dim);font-size:13px;line-height:1.6;margin:8px 0 12px}
.crumbs{font-size:12px;color:var(--dim);margin:8px 0 10px}
.crumbs a{color:var(--mut);text-decoration:none}
.crumbs a:hover{text-decoration:underline}
.profile{padding-top:4px;padding-bottom:6px}
.profile .psub{color:var(--mut);font-size:14px;margin-top:5px}
/* Klub i liga pod nazwiskiem: dwie osobne linie (klub wyżej w hierarchii, liga pod nim) */
.profile .pclub{color:var(--ink);font-size:17px;font-weight:600;line-height:1.3;margin:6px 0 0}
/* Nazwisko + przycisk „Kopiuj link” w jednym wierszu; przycisk po prawej, nie zabiera miejsca nazwisku. */
.profile .ph1{display:flex;align-items:center;gap:10px}
.profile .ph1 h1{flex:1 1 auto;min-width:0}
/* Paczka 75: ★ na profilu obok „Udostępnij” — sama gwiazdka jak na liście (bez tła i ramki, wąska, żeby nie łamać nazwiska;
   złota po zaznaczeniu, ta sama animacja). Stan (zaznaczona / wyciszony) maluje JS z localStorage — serwer zawsze wysyła pustą. */
.profile .pclub .pc-age{color:var(--mut);font-weight:500}
.profile .pclub .pc-age::after{content:"·";margin:0 7px;color:var(--dim)}
.profile .pclub .pc-age:empty{display:none}
/* Paczka 128: ★ jako pastylka „Obserwuj” obok „Udostępnij” (ten sam kształt); przy długim nazwisku obie schodzą pod nazwisko (flex-wrap). */
.profile .ph1{flex-wrap:wrap;row-gap:8px}
/* Paczka 172: Obserwuj + Udostępnij w jednej grupie — przy długim nazwisku schodzą pod nazwisko RAZEM, nie po jednym */
.profile .ph1-act{flex:0 0 auto;display:inline-flex;align-items:center;gap:10px}
/* Paczka 209 (Tomek 2026-11-09): na profilu znowu sama ★ zamiast pastylki „Obserwuj” (pastylka była za duża). Bez tła i ramki,
   szara, złota po zaznaczeniu; obszar dotykowy 36×36 przy wysokości wiersza jak „Udostępnij”. Napis „Obserwuj” zostaje w title/aria-label. */
.profile .pfav{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:36px;min-width:36px;height:36px;min-height:36px;
  padding:0;margin:-2px -6px -2px -4px;background:none;border:none;color:var(--mut);cursor:pointer}
.profile .pfav .pf-i{font-size:22px;line-height:1;color:inherit}
.profile .pfav:hover{color:var(--ink)}
.profile .pfav.on,.profile .pfav.on:hover{color:var(--amber)}
.profile .pfav:disabled{opacity:.3}
.pfav-note{margin:6px 0 0;font-size:12.5px;color:var(--mut);line-height:1.4}
/* Paczka 186 (Tomek 2026-11-08): lżejsza animacja „Obserwuj” na profilu — pastylka nie skacze ani się nie obraca (bez starPop
   i bez poświaty), tylko gwiazdka delikatnie się „wypełnia”; tło pastylki łagodnie przechodzi. Ograniczenie ruchu = bez animacji. */
.profile .pfav.star.pop,.profile .pfav.star.unpop{animation:none;text-shadow:none}
.profile .pfav{transition:color .2s ease}
.profile .pfav.pop .pf-i{animation:pfFill .26s ease-out}
@keyframes pfFill{0%{transform:scale(.8);opacity:.6}60%{transform:scale(1.12);opacity:1}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.profile .pfav.pop .pf-i{animation:none}}
/* Paczka 128: „📅 Dodaj do kalendarza” — profil (Najbliższy mecz) i strona meczu przed startem */
.pm-cal{margin-top:10px}
.pm-cal>summary{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:99px;border:1px solid var(--line);background:var(--card);
  color:var(--ink);font:600 12.5px/1.2 Inter,system-ui,sans-serif;cursor:pointer;list-style:none;-webkit-tap-highlight-color:transparent}
.pm-cal>summary::-webkit-details-marker{display:none}
.pm-cal>summary::after{content:"▾";margin-left:2px;color:var(--mut);font-size:11px}
.pm-cal[open]>summary::after{content:"▴"}
.pm-cal>summary:hover{background:var(--card-2)}
.cal-opts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.cal-opts a{padding:7px 12px;border-radius:99px;border:1px solid var(--line-2);background:var(--card-2);color:var(--ink);font:600 12.5px/1.2 Inter,system-ui,sans-serif;text-decoration:none}
.cal-opts a:active{transform:scale(.97)}
.mm-cal-row{margin:6px 0 12px}
.mm-cal-row .pm-cal{margin-top:0}
.pshare{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:99px;
  background:var(--card);border:1px solid var(--line);color:var(--mut);font:600 12.5px/1 Inter,system-ui,sans-serif;white-space:nowrap}
.pshare:hover{color:var(--ink);background:var(--card-2)}
.pshare:active{transform:scale(.97)}
.pshare.done{color:var(--ok);border-color:var(--ok)}
/* Telefon z systemowym menu udostępniania (klasa can-share na <html>): „Udostępnij” i ikona strzałki; komputer: „Kopiuj link”. */
.pshare .ps-i-share,.pshare .ps-l-share{display:none}
html.can-share .pshare .ps-i-share,html.can-share .pshare .ps-l-share{display:inline}
html.can-share .pshare .ps-i-link,html.can-share .pshare .ps-l-copy{display:none}
/* Paczka 75: na telefonie (do 430 px) sama ikonka — obok jest ★, a nazwisko ma się mieścić w jednej linijce, gdy tylko się da. */
@media (max-width:430px){ .pshare .ps-l-copy,.pshare .ps-l-share,html.can-share .pshare .ps-l-share{display:none} .pshare{width:32px;padding:0;justify-content:center} }
.profile .pleague{color:var(--mut);font-size:13px;line-height:1.3;margin:2px 0 0}
/* Linia „Sezon … · Aktualizacja …” na stronach lig, krajów, tabel i klasyfikacji — drobna i szara, nie przyciąga uwagi (paczka 38) */
.profile .pleague.pseason{font-size:11px;color:var(--dim);margin-top:3px}
/* ---- Profil zawodnika: jedna spójna hierarchia (nazwa → klub/liga → aktualnie → ostatni/najbliższy mecz → sezon → listy) ---- */
.profile .pnow{color:var(--ink-2);font-size:13.5px;line-height:1.45;margin:8px 0 0}
.profile .plast{color:var(--ink-2);font-size:13px;line-height:1.45;margin:6px 0 0}
.profile .pwhere{color:var(--ink-2);font-size:13px;line-height:1.45;margin:6px 0 0}
.profile .plast a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.profile.nf{padding:28px 0 48px}
.profile.nf p{color:var(--ink-2);font-size:15px;line-height:1.5;margin:10px 0 0}
.profile.nf p a{color:var(--ink);text-decoration:underline}
.profile .pnow[hidden],.profile .psec[hidden]{display:none!important}
.profile .pnow.pnow-low{margin-top:22px;color:var(--mut)}
.profile .pnote{color:var(--ink-2);font-size:13px;line-height:1.45;margin:12px 0 0;padding:10px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px}
.profile .psec{margin:20px 0 0}
.profile .psec>h2,.profile .psec>h3{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin:0 0 6px}
.profile .pcard{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:8px 12px 9px}
.profile .pcard>h2{margin-bottom:3px}
.pm-when{font-size:11.5px;color:var(--mut);font-variant-numeric:tabular-nums}
.pm-match{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 8px;margin-top:2px;font-size:14.5px;line-height:1.3}
.pm-t{font-weight:500;color:var(--ink-2)}
.pm-t.us{font-weight:800;color:var(--ink)}
.pm-res{font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums}
.pm-vs{color:var(--dim)}
.pm-perf{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-top:6px;padding-top:6px;border-top:1px solid var(--line);font-size:12.5px}
.pm-who{color:var(--mut);margin-right:2px}
.pm-perf .ph-b,.pm-perf .ph-min,.pm-perf .ph-rate{font-size:11.5px;padding:2px 6px}
.pm-perf .ph-dnp,.pm-perf .ph-loading{font-size:12px}
.pm-none{font-size:12.5px;color:var(--mut)}
/* Sezon na profilu — paczka 120 (opcja C, decyzje Tomka 2026-11-03): zamiast 15 jednakowych kafelków hierarchia:
   linijka występów (mecze, w podstawie, minuty), duże liczby (gole, asysty, ocena w badge'u) z „gracz meczu” po prawej,
   „Skuteczność” jako paski o wspólnym wyrównaniu (stałe kolumny: etykieta | pasek | % | x z y), „Na 90 minut” w siatce.
   Telefon (<600 px): linijka występów pod nagłówkiem, „gracz meczu” pod liczbami nad kreską, pasek pod etykietą na całą szerokość. */
/* Cienka ramka wokół całej sekcji (z nagłówkiem), bez tła — oddziela Sezon od kart meczów nad i pod nią (Tomek 2026-11-03). */
#secSeason{position:relative;border:1px solid var(--line);border-radius:12px;padding:12px 16px 14px}
@media (max-width:599px){ #secSeason{padding:12px 14px 14px} }
.pss-sum{margin:0 0 12px;font-size:12.5px;line-height:1.35;color:var(--mut);font-variant-numeric:tabular-nums}
@media (min-width:600px){ .pss-sum{position:absolute;top:9px;right:16px;margin:0} }
.pss-hero{display:flex;align-items:flex-end;gap:10px 34px;padding:2px 0 15px;margin:0 0 14px;border-bottom:1px solid var(--line)}
.pss-h{min-width:0}
.pss-h b{display:block;font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:32px;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.pss-h b.rt{display:inline-block;font-size:22px;line-height:1.2;padding:2px 10px;border-radius:8px;background:var(--card-2);color:var(--ink)}
.pss-h b.rt.g{background:var(--ok-t);color:var(--ok)}
.pss-h b.rt.b{background:var(--low-t);color:var(--low)}
.pss-h span{display:block;font-size:12.5px;line-height:1.3;color:var(--mut);margin-top:7px;white-space:nowrap}
.pss-h b.rt+span{margin-top:5px}
.pss-h i{font-style:normal;color:var(--dim)}
.pss-h i::before{content:" · "}
.pss-star{margin-left:auto;padding-bottom:1px;font-size:12.5px;line-height:1.3;color:var(--amber);white-space:nowrap}
.pss-lb{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin:0 0 2px}
.pss-lb+.pss-g{margin-top:6px}
.pss-bars+.pss-lb{margin-top:18px}
.pss-r{display:grid;grid-template-columns:170px minmax(0,1fr) 46px 72px;column-gap:14px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);font-size:13.5px;line-height:1.3}
.pss-r:last-child{border-bottom:0}
.pss-k{color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pss-v{font-weight:700;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
.pss-x{font-size:11.5px;color:var(--dim);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.pss-bar{height:5px;border-radius:3px;background:var(--line);overflow:hidden}
.pss-bar i{display:block;height:100%;border-radius:3px;background:var(--ok)}
.pss-bar.lo i{background:var(--amber)}
.pss-g{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.pss-g div{font-size:12px;line-height:1.3;color:var(--mut)}
.pss-g b{display:flex;align-items:center;gap:3px;margin-bottom:2px;font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:18px;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums}
.pss-g b .cd.r{margin-left:6px}
@media (max-width:599px){
  .pss-hero{flex-wrap:wrap;gap:0}
  .pss-h{flex:1 1 30%}
  .pss-h b{font-size:28px}
  .pss-h b.rt{font-size:20px;padding:2px 9px}
  .pss-h span{margin-top:6px}
  .pss-h i{display:block;font-size:12px}
  .pss-h i::before{content:none}
  .pss-star{flex:0 0 100%;margin:12px 0 0;padding:0}
  .pss-r{grid-template-columns:minmax(0,1fr) 44px 60px;column-gap:10px;row-gap:6px}
  .pss-bar{grid-column:1/-1;order:9}
  .pss-g{grid-template-columns:1fr 1fr}
}
/* Paczka 187 (Tomek 2026-11-08): statystyki sezonu bardziej zwarte — mniejsze odstępy i liczby; na telefonie pasek w jednym
   wierszu z etykietą (zamiast pod nią) i „Na 90 minut” po 4 w rzędzie. Treść bez zmian. */
#secSeason{padding:10px 14px 11px}
.pss-sum{margin-bottom:8px}
.pss-hero{padding:0 0 10px;margin:0 0 9px}
.pss-h b{font-size:26px}
.pss-h b.rt{font-size:19px;padding:1px 9px}
.pss-h span{margin-top:4px}
.pss-r{padding:5px 0}
.pss-bars+.pss-lb{margin-top:11px}
.pss-lb+.pss-g{margin-top:4px}
.pss-g{gap:8px}
.pss-g b{font-size:16px}
@media (max-width:599px){
  .pss-h b{font-size:23px}
  .pss-h b.rt{font-size:17px}
  .pss-h span{margin-top:3px;font-size:12px}
  .pss-star{margin-top:8px}
  .pss-r{grid-template-columns:minmax(0,1fr) 64px 38px 52px;column-gap:8px;row-gap:0;font-size:13px}
  .pss-bar{grid-column:auto;order:0}
  .pss-g{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
  .pss-g div{font-size:11px}
  .pss-g b{font-size:15px}
}
/* Kartka (żółta / czerwona) — jeden kształt CSS w całej apce zamiast emotek 🟨 🟥 (decyzja Tomka 2026-10-21).
   Rozmiar w em, więc pasuje do tekstu, w którym stoi; minimum, żeby w małych pigułkach nie znikała. */
.cd{display:inline-block;width:.6em;height:.84em;min-width:7px;min-height:10px;border-radius:2px;vertical-align:-.12em;flex:none}
.cd.y{background:#f5c518}.cd.r{background:#e5484d}
.ev .cd,.ph-b .cd{margin-right:1px}
/* Rozgrywki stoją nad listą meczów: nad nimi 28 px i pod nimi 28 px (zakładki Mecze/Terminarz mają już 9 px
   własnego odstępu nad napisem, stąd 19 px). Gdy Rozgrywek nie ma, lista meczów i tak ma 28 px od Sezonu. */
.profile #secComps{margin:28px 0 0}
.profile #profileApp{margin-top:19px}
.profile #secComps .pcomps li:last-child{padding-bottom:0}
.ps-note{font-size:11px;color:var(--dim);margin:5px 0 0}
.pcomps,.plist{list-style:none;margin:0;padding:0}
.pcomps li{padding:10px 0;border-top:1px solid var(--line)}
.pcomps li:first-child{border-top:0;padding-top:2px}
.pc-n{display:block;font-weight:600;font-size:14.5px;color:var(--ink)}
/* Kariera klubowa: zwykła sekcja (bez szarej karty — bezpośrednio pod kartami meczów karta za kartą zlewała się
   w jeden blok) z osią czasu — kropka (obecny klub limonkowy), klub, pod nim flaga i kraj, lata w pigułce.
   Odstęp nad nią: 24 px dołu listy meczów + 4 px = 28 px, tak jak nad i pod „Rozgrywkami”. */
.profile #secCareer{margin-top:4px}
.pcareer{list-style:none;margin:4px 0 0;padding:0;position:relative}
.pcareer li{position:relative;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0 8px 22px}
.pcareer li::before{content:"";position:absolute;left:5px;top:0;bottom:0;width:2px;background:var(--line)}
.pcareer li:first-child::before{top:50%}
.pcareer li:last-child::before{bottom:50%}
.pcareer li:only-child::before{display:none}
.pcareer li::after{content:"";position:absolute;left:1px;top:50%;width:10px;height:10px;margin-top:-5px;border-radius:50%;background:var(--bg);border:2px solid var(--dim);box-sizing:border-box}
.pcareer li.now::after{background:var(--lime);border-color:var(--lime);box-shadow:0 0 0 3px var(--lime-t)}
.pcar-m{min-width:0}
.pcareer .pc-n{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pcar-c{display:block;font-size:12px;color:var(--mut);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcar-f{margin-right:5px}
.pcar-y{flex:none;font-size:12px;font-weight:700;color:var(--ink);background:var(--card-2);border:1px solid var(--line);border-radius:99px;padding:3px 9px;font-variant-numeric:tabular-nums}
.pcareer li.now .pcar-y{color:var(--on-lime);background:var(--lime);border-color:var(--lime)}
.pc-s{display:block;font-size:13px;color:var(--mut);margin-top:2px;font-variant-numeric:tabular-nums}
.plist li{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:9px 0;border-top:1px solid var(--line);font-size:14px}
.plist li:first-child{border-top:0;padding-top:2px}
.plist a{color:var(--ink);text-decoration:none;font-weight:600}
.plist a:hover{text-decoration:underline}
.plist span{color:var(--dim);font-size:12.5px;text-align:right}
.profile .psee{padding-bottom:8px}
/* ---- Listy meczów na profilu: zwarte wiersze (jedna linia), 10 na start + przycisk ---- */
.profile .ph-match{border-radius:9px;margin-bottom:4px}
.profile .ph-row{padding:6px 10px;gap:8px}
.profile .ph-info{flex-direction:row;align-items:center;gap:9px}
.profile .ph-date{font-size:11px;flex:0 0 auto;min-width:34px}
.profile .ph-time{display:inline;margin-left:5px}
.profile .ph-opp{font-size:13px;min-width:0}
.profile .ph-comp{flex:0 1 46%;text-align:right;font-size:11px}
.profile .ph-line{max-width:none;flex-wrap:nowrap}
.profile .ph-body{padding:8px 0 14px}
.ph-more{display:block;width:100%;margin:8px 0 0;background:var(--card);border:1px solid var(--line);border-radius:10px;color:var(--mut);font-size:13px;font-weight:700;padding:10px}
.ph-more:active{background:var(--card-2)}
/* Ostatni mecz: karta .pmc jak w widoku dnia (klik → widok dnia, 2026-10-21); Najbliższy mecz: link „Śledź…” */
/* /transmisje/ (paczka 107, z 102): linijka 📺 i rozgrywki pod kartą meczu */
.tvh-meta{display:flex;flex-wrap:wrap;gap:4px 12px;justify-content:space-between;padding:0 12px 10px;font-size:12.5px;color:var(--mut)}
.tvh-meta b{color:var(--ink);font-weight:600}.tvh-unk{color:var(--dim)}.tvh-n{color:var(--mut);font-weight:600}.tvh-empty{color:var(--mut);font-size:13.5px}
.tvh-day{scroll-margin-top:12px}
/* Paczka 213: /transmisje/ podzielone na dni jak program TV — 7 kafli dni (wszystkie widoczne, każdy = osobny adres), filtr „W polskiej TV”,
   mecze reprezentacji na górze, poprzedni/następny dzień na dole */
.tvhub .tvh-lead{margin:2px 0 0}   /* paczka 242: przyklejone okruszki + H1, zdanie pod spodem się przewija */
.tvhub.tvh-busy > :not(.pstick):not(.tvh-days){opacity:.55;transition:opacity .12s}
.tvh-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;margin:12px 0 10px}
.tvh-days .day{display:block;min-width:0;padding:6px 2px 5px;text-decoration:none;border-radius:10px}
.tvh-days .day .c{font-size:11px;font-weight:600;color:var(--mut);margin-top:3px;line-height:1}
.tvh-days .day.on .c{color:var(--on-ink)}
.tvh-days .day:not(.on):hover{border-color:var(--mut)}
@media (max-width: 480px){ .tvh-days{gap:4px} .tvh-days .day{padding:5px 1px 4px;min-width:0} .tvh-days .day .n{font-size:12.5px} .tvh-days .day .c{font-size:10.5px} }
.tvh-flt{display:flex;gap:6px;margin:0 0 12px;flex-wrap:wrap}
.tvh-flt button{font:inherit;font-size:13px;font-weight:600;background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 13px;color:var(--ink-2);cursor:pointer}
.tvh-flt button span{color:var(--mut);font-weight:500;margin-left:3px}
html:not(.tvh-only) .tvh-flt [data-tvf=all],html.tvh-only .tvh-flt [data-tvf=tv]{background:var(--ink);border-color:var(--ink);color:var(--bg)}
html:not(.tvh-only) .tvh-flt [data-tvf=all] span,html.tvh-only .tvh-flt [data-tvf=tv] span{color:var(--on-ink)}
html.tvh-only .tvhub .tvh-day:not(.tvh-up) .pmc:not([data-tv]){display:none}
.tvh-notv{display:none;color:var(--mut);font-size:13.5px}
html.tvh-only .tvh-notv:not(:empty){display:block}
.tvh-sp .tvh-tag{font-size:13px;font-weight:700;color:var(--ink)}
.tvh-ntsec h2,.tvh-up h2{color:var(--ink)}
.tvhub .pmc.tvh-off{opacity:.5;transition:opacity .15s}.tvhub .pmc.tvh-off:hover,.tvhub .pmc.tvh-off:focus-within{opacity:1}
/* Paczka 234: lista TV na górze — wybór stacji, mecze Polaków wyróżnione */
.tvh-ch{display:flex;gap:6px;margin:0 0 10px;flex-wrap:wrap}
.tvh-ch button{font:inherit;font-size:13px;font-weight:600;background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 12px;color:var(--ink-2);cursor:pointer}
.tvh-ch button span{color:var(--mut);font-weight:500;margin-left:3px}
.tvh-ch button.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}.tvh-ch button.on span{color:var(--on-ink)}
.tvx.tvx-our{box-shadow:inset 3px 0 0 var(--red)}
.tvx-pl{font-size:12.5px;font-weight:600;color:var(--ink-2)}.tvx-pl a{color:inherit;text-decoration:none}.tvx-pl a:hover{text-decoration:underline}
.tvh-rest{margin-top:18px}
.tvh-tvl > li[hidden]{display:none}
.tvx-free{color:var(--mut);font-size:12px;white-space:nowrap}
/* Paczka 238: strona meczu w programie TV */
.tvpg-box{border:1px solid var(--line);background:var(--card);border-radius:12px;padding:6px 14px;margin:12px 0}
.tvpg-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:10px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;color:var(--ink);align-items:baseline}
.tvpg-row:last-child{border-bottom:0}.tvpg-row .k{color:var(--mut);font-size:13px}.tvpg-tv b{font-size:15px}.tvpg-st{color:var(--mut);font-size:12.5px}
.tvpg-ans{font-size:14px;color:var(--ink-2);line-height:1.5}.tvpg-day a{display:inline-block;font-weight:700;font-size:14px;color:var(--ink);text-decoration:none;border:1px solid var(--line);background:var(--card);border-radius:99px;padding:8px 14px}.mm-onl{color:var(--mut)}   /* paczka 237 */   /* paczka 235: .tvx ma display:grid — bez tego wybór stacji nie ukrywał wierszy */
.tvh-pn{display:flex;justify-content:space-between;gap:10px;margin:14px 0 4px}
.tvh-pn a{font-size:13.5px;font-weight:700;color:var(--ink);text-decoration:none;border:1px solid var(--line);background:var(--card);border-radius:99px;padding:7px 14px}
.tvh-pn a:hover{background:var(--card-2)}
.tvh-pn .tvh-next{margin-left:auto}
/* Paczka 214: pozostałe mecze w polskiej TV — prosty program: godzina | mecz + rozgrywki | kanał */
.tvx-list{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.tvx{display:grid;grid-template-columns:44px minmax(0,1fr) minmax(0,40%);gap:4px 10px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line)}
.tvx:last-child{border-bottom:0}
.tvx-t{font-weight:700;font-size:13.5px;color:var(--ink);font-variant-numeric:tabular-nums}
.tvx-m{min-width:0;display:flex;flex-direction:column;gap:1px}
.tvx-tm{font-size:13.5px;font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.tvx-tm a{color:inherit;text-decoration:none}.tvx-tm a:hover{text-decoration:underline}
.tvx-sc{margin-left:6px;font-variant-numeric:tabular-nums}.tvx-live{color:var(--red)}
.tvx-c{font-size:12px;color:var(--mut)}
.tvx-ch{font-size:12.5px;color:var(--ink-2);text-align:right;overflow-wrap:anywhere}
@media (max-width: 480px){ .tvx{grid-template-columns:42px minmax(0,1fr)} .tvx-ch{grid-column:2;text-align:left} }
.tvh-exnote{color:var(--mut);font-size:13px;margin:4px 2px 0}
.pmc-dnp{font-size:12px;color:var(--mut);font-weight:600}
.pm-tv{margin-top:5px;font-size:12.5px;color:var(--mut)}.pm-tv b{color:var(--ink);font-weight:600}
.tv-ic{margin-right:5px;font-size:12px}
.chead .st .tvi{font-size:11.5px;line-height:1;font-weight:400}.chead .st .tvi[hidden]{display:none}
.chead .st .lateko{color:var(--mut);font-weight:500}   /* paczka 91: opóźniony start */
.chead .st .waitko{color:var(--ink);font-weight:600}   /* paczka 174: „Startuje” — po godzinie startu, przed gwizdkiem */
.pm-follow{display:inline-block;margin-top:7px;font-size:13px;font-weight:700;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--lime-line)}
.pm-follow:hover{border-bottom-color:currentColor}
.profile .psec>h2 a,.profile .psec>h3 a{color:inherit;text-decoration:none}
.profile .psec>h2 a:hover,.profile .psec>h3 a:hover{text-decoration:underline}
/* Najczęstsze pytania na profilu i stronie ligi (paczka 21, tylko z serwera): pytanie jak zwykły pogrubiony tekst, nie etykieta sekcji. */
.profile .pfaq>h3{font-family:Inter,system-ui,sans-serif;font-size:14px;font-weight:700;letter-spacing:0;text-transform:none;color:var(--ink);margin:14px 0 4px}
.profile .pfaq>h3:first-of-type{margin-top:4px}
.profile .pfaq>p{font-size:13.5px;line-height:1.6;color:var(--ink-2);margin:0}
.profile .pfaq>p a{color:var(--lime-ink);text-underline-offset:2px}
/* Paczka 190/191: zwijane pytania FAQ — spokojne: bez kresek, pytania przygaszonym kolorem, mała strzałka (Tomek 2026-11-08:
   białe pogrubione pytania z liniami za bardzo się rzucały). */
.pfaq .pfaq-q>summary{list-style:none;display:block;padding:5px 0;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pfaq .pfaq-q>summary h3{display:inline}
.pfaq .pfaq-q>summary::-webkit-details-marker{display:none}
.pfaq .pfaq-q>summary::after{content:"›";display:inline-block;margin-left:7px;color:var(--dim);font-size:14px;line-height:1;transform:rotate(90deg);transition:transform .15s}
.pfaq .pfaq-q[open]>summary::after{transform:rotate(-90deg)}
.pfaq .pfaq-q>summary h3{margin:0;font:500 13.5px/1.45 Inter,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--mut)}
.pfaq .pfaq-q>summary:hover h3,.pfaq .pfaq-q[open]>summary h3{color:var(--ink-2)}
.pfaq .pfaq-q>p{margin:2px 0 10px;font-size:13px;line-height:1.6;color:var(--mut)}
.pfaq .pfaq-q>p a{color:var(--lime-ink);text-underline-offset:2px}
.pfaq>h2+.pfaq-q{margin-top:4px}
.profile .ptext{color:var(--dim);font-size:13px;line-height:1.55;margin:0 0 10px}
.profile .pclub a{color:inherit;text-decoration:none}
.profile .pclub a:hover{text-decoration:underline}
.profile .pleague a{color:inherit;text-decoration:none}
.profile .pleague a:hover{text-decoration:underline}
.profile .plink{margin:8px 0 0;font-size:13px}
.profile .plink a{color:var(--mut);font-weight:600;text-decoration:none}
.profile .plink a:hover{color:var(--ink);text-decoration:underline}
/* Oddech pod kafelkami sezonu i przed zakładkami meczów */
/* Przyklejony nagłówek: okruszki + nazwa (+ wiek) + klub zostają na górze podczas przewijania */
.profile .pstick{position:sticky;top:0;z-index:20;background:var(--bg);margin:0 -14px;padding:2px 14px 9px}
@media (max-width:480px){.profile .pstick{margin:0 -10px;padding:2px 10px 9px}}
.profile .pstick.stuck{box-shadow:0 12px 14px -12px var(--sh-stick)}
.profile .pstick .crumbs{margin:6px 0 8px}
/* Wejścia do widoków Ligi / Kraje w zakładkach Piłkarze i Rozgrywki */
.pentry{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.pentry .pe:nth-child(3){grid-column:1/-1}   /* Kluby (paczka 65): na telefonie na całą szerokość pod Ligami i Krajami */
@media (min-width:640px){ .pentry{grid-template-columns:1fr 1fr 1fr} .pentry .pe:nth-child(3){grid-column:auto} }
.lnav-pos{margin:8px 0 0}   /* paczka 63: Bramkarze · Obrońcy · Pomocnicy · Napastnicy w zakładce Piłkarze */
/* Strony pozycji (paczka 63) i blok „według pozycji” na stronach lig */
.ltabs-pos a{padding:7px 12px}
@media (max-width:480px){ .ltabs-pos a{padding:7px 4px;font-size:12.5px} }
.pposg-n{color:var(--mut);font-weight:500}
.profile .pposl>h2{margin:12px 0 3px}
.profile .pposl>h2:first-child{margin-top:0}
.pposl p{margin:0;font-size:13.5px;line-height:1.55}
.pposl p span{color:var(--mut)}
.pposl a{color:var(--ink);font-weight:600;text-decoration:none}
.pposl a:hover{text-decoration:underline}
.pposl .plink{margin-top:12px}
.pposl .plink a{color:var(--lime-ink)}
.pe{display:block;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:11px 14px;text-decoration:none;position:relative}
.pe:active{background:var(--card-2)}
.pe b{display:block;font-size:14.5px;font-weight:700;color:var(--ink)}
.pe span{display:block;margin-top:2px;font-size:12px;color:var(--mut)}
.pe::after{content:"›";position:absolute;right:13px;top:50%;transform:translateY(-52%);font-size:20px;color:var(--dim)}
/* Kafelek "Kadra" (powołani na zgrupowanie) — pełna szerokość, wyróżniony czerwoną obwódką (barwy
   flagi), nad kafelkami Ligi/Kraje. Link do /kadra-polski/ (jak kafelki Ligi/Kraje). */
.pe-callup{display:block;width:100%;text-align:left;font:inherit;cursor:pointer;border-color:var(--red);margin-top:12px;appearance:none;-webkit-appearance:none}
.pe-callup b{color:var(--red)}
.pe-callup.on::after{content:none}
/* Zapowiedź powołań na stronie głównej (nad meczami dnia) — do końca przerwy reprezentacyjnej. */
.callup-promo{position:relative;margin:14px 0 4px}
/* Paczka 161: pasek powołań jako jedna spójna apla — tytuł (artykuł), pastylka „Pełna lista” (/kadra-polski/) i ✕ w jednym rzędzie */
.kadra-promo{display:flex;align-items:center;gap:6px;border:1px solid var(--red);border-radius:14px;background:linear-gradient(90deg,var(--promo-t),var(--card) 70%);padding-right:2px}
.kadra-promo .pe-callup{flex:1;min-width:0;border:0;background:none;padding:11px 4px 11px 14px}
.kadra-promo .pe-callup::after{content:none}
.kadra-promo .pe-callup b{font-size:15px;line-height:1.3}
.kadra-promo .cp-list{flex:none;font-size:12.5px;font-weight:600;color:var(--ink);text-decoration:none;padding:6px 11px;border:1px solid var(--line);border-radius:999px;white-space:nowrap;background:var(--card)}
.kadra-promo .cp-list:hover{border-color:var(--red)}
.kadra-strip{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:3px 2px 3px 12px;border:1px solid var(--red);background:linear-gradient(90deg,var(--promo-t),var(--card) 70%);border-radius:12px}
.kadra-strip.callup-promo{margin:12px 0 4px}.kadra-strip.kadra-badge{display:flex;margin:4px 0 14px;padding-right:6px}   /* paczka 172: więcej oddechu przed linijką ligi */
.kadra-strip .ks-main{flex:1;min-width:0;font-size:13.5px;line-height:1.3;color:var(--red);text-decoration:none;padding:7px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kadra-strip .ks-short{display:none}@media (max-width:640px){.kadra-strip .ks-long{display:none}.kadra-strip .ks-short{display:inline}}
.kadra-strip .ks-main b{font-weight:700}
.kadra-strip .ks-list{flex:none;font-size:12px;font-weight:600;color:var(--ink);text-decoration:none;padding:4px 10px;border:1px solid var(--line);border-radius:999px;background:var(--card)}
.kadra-strip .ks-x{flex:none;width:30px;height:30px;border:0;background:none;color:var(--mut);font-size:15px;cursor:pointer}
/* Paczka 176: profil powołanego — delikatna linijka tekstu zamiast apli (bez ramki i tła) */
/* Paczka 186: plakietka powołania na profilu. Paczka 205: pod przyklejonym nagłówkiem (za linijką ligi), przewija się ze stroną */
.profile .kadra-chip{display:flex;width:fit-content;align-items:center;gap:5px;margin:6px 0 12px;padding:3px 9px 3px 7px;border-radius:99px;
  border:1px solid var(--red);background:transparent;border:1px solid color-mix(in srgb,var(--red) 45%,transparent);background:color-mix(in srgb,var(--red) 7%,transparent);color:var(--red);
  font:600 12px/1.2 Inter,system-ui,sans-serif;white-space:nowrap;text-decoration:none}
.profile .kadra-chip:hover{text-decoration:none;background:color-mix(in srgb,var(--red) 12%,transparent)}
.profile .kadra-chip .kc-s{display:none}
@media (max-width:640px){ .profile .kadra-chip .kc-l{display:none} .profile .kadra-chip .kc-s{display:inline} }
/* Paczka 176: paski z komunikatami z panelu /admin/ (media/komunikaty.json) — home nad meczami dnia, podstrony nad ścieżką */
.kom-bar{display:flex;align-items:center;gap:8px;margin:12px 0 4px;padding:3px 2px 3px 14px;border:1px solid var(--line-2);border-radius:12px;background:var(--card)}
.kom-bar.kom-nox{padding-right:10px}
.kom-bar+.kom-bar{margin-top:6px}
.kom-wrap{margin:0 0 8px}.kom-wrap .kom-bar{margin:0}.kom-wrap .kom-bar+.kom-bar{margin-top:6px}
.kom-main{flex:1;min-width:0;font-size:13.5px;line-height:1.35;color:var(--ink);text-decoration:none;padding:8px 0}
.kom-main b{font-weight:700}.kom-main i{font-style:normal;color:var(--dim);font-weight:600}
.kom-red{border-color:var(--red);background:linear-gradient(90deg,var(--promo-t),var(--card) 70%)}.kom-red .kom-main{color:var(--red)}
.kom-green{border-color:var(--lime-line);background:linear-gradient(90deg,var(--lime-t1,rgba(198,242,78,.1)),var(--card) 70%)}.kom-green .kom-main{color:var(--lime-ink)}
.kom-btn{flex:none;font-size:12px;font-weight:600;color:var(--ink);text-decoration:none;padding:4px 10px;border:1px solid var(--line);border-radius:999px;background:var(--card);white-space:nowrap}
.kom-x{flex:none;width:30px;height:30px;border:0;background:none;color:var(--mut);font-size:15px;cursor:pointer;padding:0}
.kom-x:hover{color:var(--ink)}
.callup-promo.kadra-promo .cp-x{position:static;top:auto;right:auto;transform:none;flex:none}   /* mocniejszy selektor niż .callup-promo .cp-x (absolute) niżej */
.callup-promo .pe-callup{margin-top:0;padding:8px 44px 8px 14px;background:linear-gradient(90deg,var(--promo-t),var(--card) 70%)}
.callup-promo .pe-callup b{font-size:15px}
.callup-promo .pe-callup::after{right:34px}
.callup-promo .cp-x{position:absolute;top:50%;right:4px;transform:translateY(-50%);width:32px;height:40px;border:0;background:none;
  color:var(--dim);font-size:15px;line-height:1;padding:0}
.callup-promo .cp-x:hover{color:var(--ink)}
/* Paczka 68: pasek „📰 Jak zagrali Polacy…” — jak zapowiedź powołań, ale neutralny i niższy (1 linia) */
.news-promo{margin:12px 0 2px}
.news-promo .pe-news{display:block;padding:8px 44px 8px 14px;border-radius:12px}
.news-promo .pe-news::after{right:34px}
.news-promo .pe-news b{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.news-promo .pe-news b span{display:inline;margin:0;font-size:inherit;font-weight:500;color:var(--mut)}
/* Paczka 150: pasek relacji — delikatne czerwone tło jak „Relacja tekstowa” w menu, pulsująca kropka w trakcie meczów */
.lb-promo .pe-news{background:var(--red-t);border-color:var(--red-edge)}
.lb-promo .pe-news .pulse{display:inline-block;margin:0 8px 1px 1px;vertical-align:middle}
/* Paczka 155: pulsujący pierścień kropki nie może być ucięty przez overflow:hidden napisu (ellipsis) — zapas z lewej i z góry/dołu */
.lb-promo .pe-news b{padding:4px 0 4px 6px;margin:-4px 0 -4px -6px}
/* Strona /kadra-polski/: lista to ten sam widok co dawniej w zakładce Piłkarze; pod nią krótki opis, oddzielony kreską */
.profile .kadra-list{margin-top:12px}
/* Paczka 82: zamiast podpowiedzi „Kliknij nazwisko…” — › przy każdym zawodniku (cały wiersz to link do profilu) */
.kadra-list .li{position:relative;padding-right:34px}
.kadra-list .li::after{content:"›";position:absolute;right:15px;top:50%;transform:translateY(-54%);font-size:21px;line-height:1;color:var(--dim);pointer-events:none}
.kadra-list .li:hover::after{color:var(--ink)}
.profile .kadra-list .comp-group+.comp-group{margin-top:22px}   /* oddech między sekcjami: Bramkarze / Obrońcy / … */
.profile .kadra-about{margin-top:30px;padding-top:14px;border-top:1px solid var(--line)}
.profile .kadra-about p{color:var(--dim);font-size:13px;line-height:1.6;margin:0 0 10px}
.lgpl{flex:none;font-size:12px;font-weight:700;color:var(--mut);text-decoration:none;border:1px solid var(--line);border-radius:99px;padding:5px 11px}
.lgpl:active{background:var(--card-2)}
/* Paczka 83: strzałki › pokazują, że wiersz prowadzi dalej. Lista piłkarzy: kolejność nazwisko · ★ · ⊘ · › (strzałka na
   samym końcu wiersza, osobny link do tego samego profilu). ★ i ⊘ mają nadal pełne pole dotyku 42–44 px, a odstęp 12 px
   oddziela ⊘ od ›. Rozgrywki: „Polacy ›” (link do strony ligi). */
.li-go{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:24px;min-height:44px;margin-right:-4px;
  font-size:22px;line-height:1;color:var(--dim);text-decoration:none;-webkit-tap-highlight-color:transparent}
.li-go:hover{color:var(--ink)}
.lgpl::after{content:"›";margin-left:5px;font-size:15px;line-height:1;font-weight:500}
.lgname{color:inherit;text-decoration:none;display:block}
.lgname:active{opacity:.7}
/* Strefa linków na końcu profilu: osobna od statystyk (kreska + odstęp), Polacy w lidze/kraju jako kafelki, „Zobacz także” jako przyciski */
.profile .pzone{margin-top:34px;padding-top:4px;border-top:1px solid var(--line)}
.profile .pzone .psec{margin-top:24px}
/* Pod karierą ten sam odstęp co nad nią (28 px): 8 px dolnego paddingu ostatniego wiersza osi + 20 px do linii */
.profile #secCareer:not([hidden])+.pzone{margin-top:20px}
.pgrid,.pchips{list-style:none;margin:0;padding:0}
.profile .prel-all{margin:8px 2px 0;font-size:13px}
.profile .prel-all a{color:var(--mut);text-decoration:none}
.profile .prel-all a:hover{color:var(--ink)}
.pgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.pgrid a{display:block;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:8px 11px 9px;text-decoration:none}
.pgrid a:hover,.pgrid a:active{background:var(--card-2)}
.pgrid b{display:block;font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pgrid span{display:block;margin-top:1px;font-size:11.5px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Paczka 119: kafelek zawodnika „Nazwisko Imię POZ” jak karta meczu — skraca się tylko imię. */
.pgrid b.pn{display:flex;align-items:center;gap:6px;min-width:0}
.pgrid b.pn>span{display:inline;margin:0;flex:0 0 auto}
.pgrid b.pn .s{font-size:13.5px;font-weight:600;color:var(--ink)}
.pgrid b.pn .fn{flex:0 1 auto;min-width:0;font-size:12px;font-weight:500;color:var(--dim)}
.pgrid b.pn .pos{margin-left:0;top:0;overflow:visible;font-size:9.5px;font-weight:700;color:var(--dim)}
/* Kafelek na stronie ligi z ostatnim występem (league_player_tile w polscore-lib.php): kartą jest cały <li>, w środku link do
   profilu i pod nim link do meczu. */
.pgrid li.plt{min-width:0;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.pgrid li.plt>a{border:0;border-radius:0;background:none}
.pgrid li.plt>a:first-child{padding-bottom:3px}
.pgrid li.plt:hover,.pgrid li.plt:active{background:var(--card-2)}
.pgrid .plm{display:block;padding:0 11px 8px;font-size:11px;line-height:1.35;color:var(--dim);text-decoration:none}
/* Dwie linijki (2026-10-12): mecz („11.10 · 2:3 z Real Sociedad” — ucina się najwyżej nazwa rywala) i pod nim minuty/gole/asysty. */
.pgrid .plm .plm-m,.pgrid .plm .plm-x{display:block;margin:0;font-size:11px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pgrid .plm .plm-m{color:var(--dim)}
.pgrid .plm .plm-x{color:var(--mut);font-weight:600}
/* Minuty szare, gol (⚽) i asysta (A) jako ikonki bez tła w kolorze akcentu — jak na kartach meczów (.mev). */
.pgrid .plm .plm-x>span{display:inline;margin:0;white-space:nowrap}
.pgrid .plm .plm-x>span+span{margin-left:7px}
.pgrid .plm .plm-x .mev{font-size:11.5px;font-weight:800;color:var(--lime-ink)}
.pgrid a.plm:hover .plm-m{color:var(--ink);text-decoration:underline}
.pchips{display:flex;flex-wrap:wrap;gap:6px}
/* Blok „Dzisiejsze mecze polskich piłkarzy na żywo” na dole stron lig i krajów (PL_LIVE_CTA / live_cta_html). */
/* Paczka 149: karta „dziś” na podstronach — wygląd jak .psm-today w menu ☰ (paczka 148): nagłówek z liczbami dnia
   i dwa przyciski obok siebie. Na bardzo wąskich telefonach napis w przycisku łamie się do 2 linijek zamiast wychodzić poza przycisk. */
.plive{padding:8px;border-radius:13px;background:var(--card);border:1px solid var(--line)}
.profile .plive{margin-top:14px}
/* Paczka 153: karta „dziś” na ligach/krajach/klubach/pozycjach/pucharach — równy, większy oddech nad i pod nią */
.profile .plive-top{margin:28px 0}
.profile .plive-top+.psec{margin-top:28px}
.plive-hd{display:flex;flex-wrap:wrap;gap:2px 6px;margin:0 2px 7px;font-size:12.5px;line-height:1.35;color:var(--mut)}
.plive-t{font-weight:800;color:var(--ink)}
.plive-s:not(:empty)::before{content:"· "}
.plive-b{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.kadra-live{margin-top:26px;padding-top:18px;border-top:1px solid var(--line)}
.profile .kadra-live .plive{margin-top:0}
.plive-b a{display:flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:6px 8px;border-radius:10px;font-weight:800;font-size:13.5px;line-height:1.2;text-align:center;text-decoration:none}
.plive-b a:hover,.plive-b a:active{filter:brightness(1.05)}
.plive-b .pulse{flex:0 0 auto}
.plive-w{background:var(--lime);color:var(--on-lime)}
.plive-r{background:var(--red-t);border:1px solid var(--red-edge);color:var(--ink)}
#secNextOne.pcard{padding:7px 12px 8px}
#secNextOne>h2{margin-bottom:3px}
.lnav{display:flex;gap:6px;margin:10px 0 2px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.lnav::-webkit-scrollbar{display:none}
.lnav a{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:99px;padding:6px 13px;font-size:13px;font-weight:600;color:var(--ink-2);text-decoration:none;white-space:nowrap}
.lnav a span{color:var(--mut);font-weight:500}
.lnav a:hover{background:var(--card-2);color:var(--ink)}
/* Paczka 109: liga i „Tabela” jako DWA przyciski obok siebie (para, 4 px odstępu; Tabela w kolorze akcentu), a nie jedna
   zlepiona pigułka — było widać jeden link „1. poziom · 5 Tabela”. Tabela dalej przypięta do głównej ligi (decyzja z 22.10). */
.lnav-g{flex:0 0 auto;display:inline-flex;gap:4px}
.lnav-g .lnav-t{color:var(--lime-ink);background:var(--lime-t);border-color:transparent}
.lnav-g .lnav-t:hover{background:var(--lime-t2);color:var(--lime-ink)}
.lnav .ptab-i{width:14px;height:14px;margin-right:2px}
/* Paczka 79: pastylki zawijane (bez ukrytego przewijania w bok), nadmiar pod „+ N …” */
.lnav-w{flex-wrap:wrap;overflow:visible}
.lnav-w>a,.lnav-w .lnav-xs>a{padding:5px 11px;font-size:12.5px}
.lnav-w .lnav-xs{display:none}
.lnav-w.open .lnav-xs{display:contents}
.lnav-more{flex:0 0 auto;font:inherit;font-size:12.5px;font-weight:600;color:var(--lime-ink);background:none;border:1px dashed var(--line-2);border-radius:99px;padding:5px 11px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lnav-more:hover{background:var(--card-2)}
.psec>.pnav .lnav{margin-top:8px}
/* Paczka 79/81: zakładka Piłkarze/Rozgrywki — Ligi | Kraje | Kluby i pozycje jako OSOBNE kafelki z › (wyraźnie linki),
   jedna linijka „Nazwa liczba ›”; pozycje na telefonie 2×2, od 480 px cztery w rzędzie */
.pbrowse{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:12px}
.pbrowse-4{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:6px}
@media (min-width:480px){ .pbrowse-4{grid-template-columns:repeat(4,minmax(0,1fr))} }
.pbrowse a{position:relative;display:block;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 24px 10px 12px;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pbrowse a:hover,.pbrowse a:active{background:var(--card-2)}
.pbrowse a::after{content:"›";position:absolute;right:11px;top:50%;transform:translateY(-54%);font-size:19px;line-height:1;color:var(--dim)}
.pbrowse a:hover::after{color:var(--ink)}
.pbrowse b{font-size:14px;font-weight:700;color:var(--ink)}
.pbrowse span{margin-left:6px;font-size:12.5px;font-weight:500;color:var(--mut)}
/* Paczka 82: Kadra Polski | Kadra U21 — ten sam płaski kafelek co Ligi/Kraje (wysokość, ›), wyróżnia je tylko czerwona ramka */
.pbrowse.pcallups{grid-template-columns:repeat(2,minmax(0,1fr))}
/* Paczka 156: zakładka Ligi — popularne ligi (nazwa + liczba Polaków jak przy Ligi/Kraje/Kluby | Tabela | Strzelcy) i puchary europejskie */
.lh-pop{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:6px}
@media (min-width:600px){ .lh-pop{grid-template-columns:repeat(2,minmax(0,1fr))} }
.lh-pop li{display:flex;align-items:stretch;min-width:0;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.lh-pop a{text-decoration:none}
.lh-lg{position:relative;flex:1;min-width:0;display:block;padding:10px 24px 10px 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lh-lg::after{content:"›";position:absolute;right:10px;top:50%;transform:translateY(-54%);font-size:19px;line-height:1;color:var(--dim)}
.lh-lg b{font-size:14px;font-weight:700;color:var(--ink)}
.lh-lg span{margin-left:6px;font-size:12.5px;color:var(--mut)}
.lh-tb{flex:none;display:flex;align-items:center;padding:0 11px;border-left:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--lime-ink)}
.lh-lg:hover,.lh-lg:active,.lh-tb:hover,.lh-tb:active{background:var(--card-2)}
.pbrowse.lh-cups{grid-template-columns:minmax(0,1fr);margin-top:0}
@media (min-width:480px){ .pbrowse.lh-cups{grid-template-columns:repeat(3,minmax(0,1fr))} }
.pbrowse.pcallups-1{grid-template-columns:minmax(0,1fr)}
.pbrowse.pcallups a{border-color:var(--red)}
.pcallups+.pbrowse{margin-top:6px}
/* Paczka 67: link do sekcji ligi w najnowszym podsumowaniu Aktualności (strony lig i pucharów) — zwarty, 1 linia */
.pnews{margin:10px 0 0}
.pnews a{display:flex;align-items:center;gap:9px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:9px 14px;text-decoration:none;color:var(--ink);font-size:13.5px;font-weight:600;line-height:1.3}
.pnews a::after{content:"›";margin-left:auto;padding-left:6px;font-size:18px;line-height:1;color:var(--mut)}
.pnews a:hover{background:var(--card-2)}
.pnews-i{flex:0 0 auto}
.pnews-t{min-width:0}   /* zwykle 1 linia; długie nazwy pucharów na wąskim telefonie łamią się zamiast ucinać */
.pnews-t span{color:var(--mut);font-weight:500;white-space:nowrap}
/* Tabele lig (paczka 22): blok „Tabela …” na stronie ligi, linijka „w tabeli” na profilu, strona /ligi/{slug}/tabela/ */
.ptab-i{flex:0 0 auto;color:var(--lime-ink)}
.profile .ptabl{display:flex;align-items:center;gap:11px;margin:12px 0 0;padding:10px 14px;background:var(--card);border:1px solid var(--line);border-radius:12px;text-decoration:none;color:var(--ink)}
.profile .ptabl[hidden]{display:none}
.profile .ptabl:hover,.profile .ptabl:active{background:var(--card-2);border-color:var(--line-2)}
.ptabl-t{display:flex;flex-wrap:wrap;align-items:center;gap:3px 8px;min-width:0;flex:1}
.ptabl-k{width:100%;font-size:12px;color:var(--mut);line-height:1.3}
.ptabl-t b{font-size:14.5px;font-weight:700;font-variant-numeric:tabular-nums}
.ptabl-go{font-size:13px;font-weight:600;color:var(--lime-ink);white-space:nowrap}
/* Strefa w tabeli — drobna, stonowana etykieta (mniejsza niż miejsce/punkty; to strefa, w której drużyna JEST, nie wynik sezonu) */
.tz{display:inline-block;font-size:10.5px;font-weight:500;padding:0 6px;border-radius:5px;line-height:16px;white-space:nowrap;letter-spacing:.01em;background:var(--mut-t);color:var(--mut)}
.tz.zcl,.tz.zup{background:var(--ok-t);color:var(--ok)} .tz.zel{background:var(--mut-t);color:var(--cyan)} .tz.zpo,.tz.zrp{background:var(--amber-t1);color:var(--amber)} .tz.zrel{background:var(--red-t);color:var(--red)}
.tsum{list-style:none;margin:6px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px}
.tsum li{display:flex;align-items:flex-start;gap:10px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:9px 13px;font-size:14px;line-height:1.4}
.tsum-r{font-weight:800;font-size:18px;line-height:1.2;min-width:32px;font-variant-numeric:tabular-nums}
.tsum-b{display:flex;flex-wrap:wrap;align-items:center;gap:3px 6px}
.tsum-p{width:100%;font-size:12.5px;color:var(--mut)}
.tsum-p a,.st-pl a{color:inherit;text-decoration:none}
.tsum-p a:hover,.st-pl a:hover{text-decoration:underline}
.st-wrap{overflow-x:auto;margin:8px 0 0;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.stbl{width:100%;border-collapse:collapse;font-size:13.5px}
.stbl caption{caption-side:top;text-align:left;padding:11px 12px 5px;font-weight:700;font-size:13px;color:var(--ink-2)}
.stbl th{font-size:11.5px;font-weight:600;color:var(--mut);text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);white-space:nowrap}
.stbl td{padding:8px 6px;border-bottom:1px solid var(--line);vertical-align:middle}
.stbl tbody tr:last-child td{border-bottom:0}
.stbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.stbl .st-r{width:34px;text-align:center;color:var(--mut);font-variant-numeric:tabular-nums;padding-left:9px}
.stbl td.st-r.zcl,.stbl td.st-r.zup{box-shadow:inset 3px 0 0 var(--ok)} .stbl td.st-r.zel{box-shadow:inset 3px 0 0 var(--cyan)}
.stbl td.st-r.zpo,.stbl td.st-r.zrp{box-shadow:inset 3px 0 0 var(--amber)} .stbl td.st-r.zrel{box-shadow:inset 3px 0 0 var(--red)} .stbl td.st-r.zoth{box-shadow:inset 3px 0 0 var(--dim)}
.stbl .st-t{width:100%}
.st-n{display:block}
.st-pl{display:block;font-size:12px;color:var(--mut);margin-top:1px}
/* Paczka 197: ranking — części podpisu („MLS: 9 goli, 4 asysty”) nie łamią się w środku, a podpis trzyma odstęp od liczb */
.st-cb{white-space:nowrap}
.rtbl td.st-t{padding-right:26px}   /* wyraźny odstęp od liczb (też Strzelcy/Asystenci z węższą kolumną liczb) */
.stbl .st-p{font-weight:700;color:var(--ink);padding-right:10px}
.stbl .st-d{color:var(--mut)}
.stbl tr.st-us td{background:color-mix(in srgb,var(--lime-t) 40%,transparent)}
.stbl tr.st-us .st-n{font-weight:600}
.stbl .st-f{white-space:nowrap;padding-right:12px}
.st-f i{display:inline-block;width:17px;height:17px;border-radius:4px;font-size:10px;font-style:normal;font-weight:700;line-height:17px;text-align:center;color:#fff;margin-left:2px}
.st-f i.fw{background:var(--ok)} .st-f i.fd{background:var(--dim)} .st-f i.fl{background:var(--red)}
.st-leg{list-style:none;display:flex;flex-wrap:wrap;gap:6px 14px;margin:9px 2px 0;padding:0;font-size:12px;color:var(--mut)}
.st-leg i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.st-leg i.zcl,.st-leg i.zup{background:var(--ok)} .st-leg i.zel{background:var(--cyan)} .st-leg i.zpo,.st-leg i.zrp{background:var(--amber)} .st-leg i.zrel{background:var(--red)} .st-leg i.zoth{background:var(--dim)}
.st-wrap+.st-wrap,.st-leg+.st-wrap{margin-top:26px}   /* kilka tabel jednej ligi (grupy Serie C, konferencje MLS) — wyraźny odstęp */
.st-note{font-size:12px;color:var(--dim);margin:12px 2px 0;line-height:1.45}
/* Paczka 214: wyniki ostatniej i terminarz najbliższej kolejki pod tabelą */
.kol-when{font-size:12.5px;color:var(--mut);margin:-4px 2px 8px}
.kol-list{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.kol-r{display:grid;grid-template-columns:62px minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);font-size:13.5px}
.kol-r:last-child{border-bottom:0}
.kol-r.st-us{background:color-mix(in srgb,var(--lime-t) 40%,transparent)}
.kol-d{font-size:12px;color:var(--mut);white-space:nowrap}
.kol-m{min-width:0;overflow-wrap:anywhere}
.kol-m a{color:inherit;text-decoration:none}.kol-m a:hover{text-decoration:underline}
.kol-vs{color:var(--dim);margin:0 5px}
.kol-h.win,.kol-a.win{font-weight:700;color:var(--ink)}
.kol-pl{font-size:12px}
.kol-s{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.kol-s b{font-weight:700;color:var(--ink)}
.kol-pen{font-size:11.5px;color:var(--mut);margin-left:4px}
.kol-x{font-size:12px;color:var(--mut)}
@media (max-width:600px){ .stbl .st-x,.stbl .st-g,.stbl .st-f{display:none} .stbl{font-size:13px} .stbl td{padding:8px 5px} }
/* Klasyfikacje strzelców/asystentów (paczka 24): zakładki Tabela | Strzelcy | Asystenci (zwykłe linki — każda zakładka ma swój adres),
   kafelki pod blokiem „Tabela …” na stronie ligi, nazwiska w tabeli klasyfikacji. */
.ltabs{display:flex;gap:4px;margin:14px 0 8px;padding:3px;background:var(--card);border:1px solid var(--line);border-radius:11px;width:max-content;max-width:100%}
.ltabs a{flex:0 1 auto;padding:7px 15px;border-radius:8px;font-size:13.5px;font-weight:600;color:var(--mut);text-decoration:none;white-space:nowrap}
.ltabs a:hover{color:var(--ink);background:var(--card-2)}
.ltabs a[aria-current="page"]{background:var(--lime-t);color:var(--ink)}
.ptab .ltabs{margin:10px 0 2px}
/* Paczka 78: strona meczu — delikatny podpis ligi nad Tabela/Strzelcy/Asystenci */
.ptab-lg{margin:12px 0 0;font-size:12px;line-height:1.3;color:var(--mut)}
.ptab-lg a{color:inherit;text-decoration:none}
.ptab-lg a:hover{color:var(--ink);text-decoration:underline}
.ptab .ptab-lg+.ltabs{margin-top:5px}
/* Paczka 49: na stronie ligi Tabela/Strzelcy/Asystenci wyraźniejsze (ciemny tekst, limonkowa ikonka i ›; ramka zwykła), ta sama wielkość */
.ptab .ltabs a{color:var(--ink)}
.ptab .ltabs .ptab-i,.ptab .ltabs .tgo{color:var(--lime-ink)}
.ptab .ltabs .tgo{font-weight:700}
.ltabs .ptab-i{width:15px;height:15px;vertical-align:-3px;margin-right:5px}
@media (max-width:480px){ .ltabs{width:auto;display:grid;grid-auto-flow:column;grid-auto-columns:1fr} .ltabs a{text-align:center;padding:7px 8px} }
.stbl .st-n a,.tsum-b a{color:inherit;text-decoration:none}
.stbl .st-n a:hover,.tsum-b a:hover{text-decoration:underline}
/* Strony klubów (paczka 65): statystyki sezonu Polaków z klubu, link meczu w „Najbliższy mecz”, pastylki klubów na stronach lig/krajów */
.cstbl th:first-child,.cstbl td:first-child{padding-left:12px}
.cstbl td.st-t a{color:var(--ink);font-weight:600;text-decoration:none}
.cstbl-r th.st-r,.cstbl-r td.st-r{padding-left:9px}   /* paczka 197: miejsce 1, 2, 3… przy 2+ Polakach */
.cstbl-r td.st-r+td.st-t,.cstbl-r th.st-r+th.st-t{padding-left:4px}
.cstbl td.st-t a:hover{text-decoration:underline}
.profile .pm-link{display:block;color:inherit;text-decoration:none}
.profile .pm-link:hover .pm-t{text-decoration:underline}
.pclubs .pchips a span{color:var(--dim);font-weight:500}
#kluby .pposg[id],#pozycje .pposg[id]{scroll-margin-top:130px}   /* paczka 79: też strony pozycji */   /* /kluby/: skok do kraju pod przyklejony nagłówek */
.profile .pclub .pclub-a::after{content:"›";margin-left:6px;color:var(--dim);font-weight:500}   /* nazwa klubu pod H1 profilu = link do strony klubu */
/* 2026-10-19 (strony lig i krajów, po analizie wejść): strzałka › na kafelkach — od razu widać, że kafelek prowadzi do profilu
   (także kafelki lig/krajów i „Polacy w lidze” na profilu; nie na linku do meczu w kafelku). */
.pgrid li>a:first-child{position:relative;padding-right:26px}
.pgrid li>a:first-child::after{content:"";position:absolute;right:13px;top:50%;width:6px;height:6px;margin-top:-4px;border-top:2px solid var(--dim);border-right:2px solid var(--dim);transform:rotate(45deg)}
.pgrid li>a:first-child:hover::after{border-color:var(--ink)}
/* Podsumowanie ostatnich 7 dni (pl_activity_summary) */
/* Paczka 130: wstęp na górze stron lig, krajów, pucharów i klubów + „kto tu gra” */
.profile .plead{margin:12px 0 4px}
.profile .plead .pnow{margin:0;color:var(--ink);font-size:14.5px;line-height:1.5}
.profile .plead .psum{margin:4px 0 0;padding:0;background:none;border:0;color:var(--ink-2);font-size:13.5px}
.pwho{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 0;padding:0;list-style:none}
/* Paczka 178/181: tydzień pod pastylkami — ten sam oddech co nad pastylkami; pastylki bliżej zdania z dwukropkiem (wypunktowanie) */
.profile .plead .pwho~.psum{margin-top:12px}
.profile .plead .pnow+.pwho{margin-top:8px}
/* Paczka 153: na stronie kraju pastylki z nazwiskami (wstęp) wyraźniej oddzielone od pastylek z ligami pod nimi */
.profile .plead+.pnav>.lnav{margin-top:20px}
.pwho a{display:inline-flex;align-items:baseline;gap:5px;padding:6px 11px;border-radius:99px;border:1px solid var(--line);background:var(--card);
  color:var(--ink);font-size:13px;line-height:1.2;text-decoration:none}
.pwho a:hover{background:var(--card-2)}
.pwho b{font-weight:700}
.pwho .c{color:var(--mut);font-size:12px}
.pwho-more a{color:var(--mut);background:none}
.pwho li[hidden]{display:none}
/* Paczka 183/184: zakładki „Dziś grają” | „Ostatnie występy” na stronie ligi. 184 (Tomek: zlewało się z Tabela | Strzelcy |
   Asystenci): zamiast drugiej „pigułki” — zakładki sekcji z kreską pod spodem (styl nagłówków sekcji, większe), z wyraźnym
   oddechem nad nimi; aktywna podkreślona limonką. Nagłówki sekcji zostają w HTML dla Google i czytników. */
.pltabs{display:flex;gap:24px;margin:34px 0 0;padding:0;border-bottom:1px solid var(--line)}
.pltabs button{flex:0 0 auto;display:inline-flex;align-items:baseline;gap:7px;margin:0 0 -1px;padding:0 0 10px;border:0;border-bottom:2px solid transparent;border-radius:0;background:none;
  font-family:"Bricolage Grotesque",Inter,sans-serif;font-size:13px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--mut);
  white-space:nowrap;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pltabs button:hover{color:var(--ink)}
.pltabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--lime-ink)}
.pltabs button span{font-family:Inter,sans-serif;font-size:11.5px;font-weight:700;letter-spacing:0;padding:1px 7px;border-radius:99px;background:var(--card-2);color:var(--mut);font-variant-numeric:tabular-nums}
.pltabs button[aria-selected="true"] span{background:var(--lime-t);color:var(--lime-ink)}
.pltabs~.psec[role="tabpanel"]{margin-top:14px}
.pltab-h{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
@media (max-width:480px){ .pltabs{gap:18px;margin-top:30px} .pltabs button{font-size:12.5px;letter-spacing:.05em} }
/* Paczka 186 (Tomek 2026-11-08): zakładki sekcji (.pstabs — puchary, klub, profil) w stylu .pltabs; panele to <div>-y z sekcjami. */
.pstab-p[hidden]{display:none!important}
.profile .pstab-p>.psec:first-child,.profile .pstab-p>.plive:first-child{margin-top:16px}
.profile .pstabs+.pstab-p>.ptoday:first-child{margin-top:16px}
/* Paczka 189: zakładki sekcji — napis zawsze na tej samej wysokości (z plakietką liczby i bez; wcześniej „Mecze” wyżej) */
.pltabs button{align-items:center}
/* Paczka 189 (Tomek 2026-11-08): przełącznik „Ostatnie mecze | Terminarz” na profilu (zakładka Wyniki i terminarz) w tym samym
   wyglądzie co u polskich klubów w pucharach — mała segmentowa pigułka zamiast pełnej szerokości z kreską. */
.profile .ph-tabs{display:inline-flex;gap:2px;margin:4px 0 0;padding:3px;border:1px solid var(--line);border-radius:99px;background:var(--card)}
.profile .ph-tab{flex:0 0 auto;padding:6px 12px;border:0;border-radius:99px;font:600 12.5px/1 Inter,system-ui,sans-serif;color:var(--mut);cursor:pointer}
.profile .ph-tab.on{background:var(--card-2);color:var(--ink);border:0}
.profile .ph-tabs+.ph-sec,.profile .ph-tabs~.ph-sec{margin-top:10px}
/* Paczka 187: strona pozycji — kraje jako zwijane grupy (<details>), domyślnie zwinięte */
.pposd-list{display:grid;gap:8px;margin-top:10px}
.pposd{border:1px solid var(--line);border-radius:12px;background:var(--card);scroll-margin-top:130px}
.pposd>summary{list-style:none;display:flex;align-items:center;gap:8px;padding:12px 14px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pposd>summary::-webkit-details-marker{display:none}
.pposd>summary::after{content:"›";margin-left:auto;color:var(--dim);font-size:18px;line-height:1;transform:rotate(90deg);transition:transform .15s}
.pposd[open]>summary::after{transform:rotate(-90deg)}
.pposd>summary h3{margin:0;font:700 15px/1.25 Inter,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--ink)}
.pposd>summary h3 .pposg-n{color:var(--mut);font-weight:500}
.pposd>.pgrid{margin:0;padding:0 10px 10px}
.pposd>.pposd-lg{margin:2px 14px 6px;font:800 11px/1.3 "Bricolage Grotesque",Inter,sans-serif;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);scroll-margin-top:130px}   /* paczka 206: liga w grupie kraju */
.pposd>.pgrid+.pposd-lg{margin-top:6px}
.pposd-lg a{color:inherit;text-decoration:none}
.pposd-lg a:hover{text-decoration:underline}
.pposd-lg .pposg-n{font-weight:500}
.pposd>.prel-all{margin:0 14px 12px}
/* Paczka 187: przełącznik w sekcji (np. polskie kluby w pucharze: Ostatnie mecze | Terminarz) — mała segmentowa pigułka */
.pltabs.psub{display:inline-flex;gap:2px;margin:10px 0 0;padding:3px;border:1px solid var(--line);border-radius:99px;background:var(--card)}
.pltabs.psub button{padding:6px 12px;margin:0;border:0;border-radius:99px;font:600 12.5px/1 Inter,system-ui,sans-serif;letter-spacing:0;text-transform:none}
.pltabs.psub button[aria-selected="true"]{background:var(--card-2);color:var(--ink);border:0}
.pltabs.psub+.pstab-p,.pltabs.psub+.pstab-p+.pstab-p{margin-top:10px}
/* Paczka 186: jeden rytm odstępów między sekcjami na podstronach lig, krajów, klubów, pozycji i pucharów (nie na profilu) —
   sekcje nie „kleją się” do siebie (np. „Polacy według pozycji”, „Ostatnie występy”). Zagnieżdżone sekcje bez zmian. */
.profile #ptKariera>#secCareer{margin-top:16px}
.profile .ptabs-prof[hidden]{display:none}
.profile .ptabs-prof button[hidden]{display:none}
.profile:not(#profile)>.psec{margin-top:36px}
.profile:not(#profile)>.pstab-p>.psec+.psec{margin-top:36px}
.profile:not(#profile) .pposl>h2:not(:first-child){margin-top:14px}
/* Paczka 186: stopka strony — „Inne ligi/kraje/puchary z Polakami” + „Zobacz także” pod wyraźną kreską */
.profile:not(#profile)>.pzone{margin-top:48px;padding-top:6px}
.profile .pzone>.prel{margin-top:22px}
.profile .pzone>.prel+.psee{margin-top:28px}
@media (max-width:640px){ .profile:not(#profile)>.psec,.profile:not(#profile)>.pstab-p>.psec+.psec{margin-top:32px} .profile:not(#profile)>.pzone{margin-top:40px} }
/* Paczka 182: „+N więcej” rozwija w miejscu wszystkie pastylki */
.pwho-mb{display:inline-flex;align-items:center;padding:6px 11px;border-radius:99px;border:1px dashed var(--line-2);background:none;color:var(--lime-ink);
  font:inherit;font-size:13px;font-weight:600;line-height:1.2;cursor:pointer;-webkit-tap-highlight-color:transparent}
.pwho-mb:hover{background:var(--card-2)}
/* Paczka 182: podpis nad pastylkami lig na stronie kraju (jak podpis ligi nad Tabela | Strzelcy | Asystenci) */
.pnav-cap{margin:0;font-size:12px;line-height:1.3;color:var(--mut)}
.pnav-cap+.lnav{margin-top:6px}
.profile .plead+.pnav>.pnav-cap{margin-top:20px}
.profile .plead+.pnav>.pnav-cap+.lnav{margin-top:6px}
.profile #zawodnicy{scroll-margin-top:120px}
.profile .psum{margin:12px 0 0;padding:10px 12px;background:var(--card);border:1px solid var(--line);border-radius:10px;color:var(--ink-2);font-size:13.5px;line-height:1.5}
.profile .psum a{color:var(--lime-ink);text-underline-offset:2px}   /* paczka 62: nazwiska i mecz w podsumowaniu 7 dni to linki (jak w FAQ) */
/* Karty meczów na stronach lig i krajów (league_player_card, pl_today_block w polscore-lib.php) — wyglądają jak zwinięta
   karta w widoku dnia (te same klasy .plr .nm .mtc .sc), kontener .pmc. Cała karta prowadzi do meczu (rozciągnięty link
   .mtc), nazwisko — do profilu. */
.pcards,.ptlist{list-style:none;margin:0;padding:0}
.pmc{position:relative;background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:6px;overflow:hidden;cursor:pointer;transition:border-color .15s}
.pmc:hover{border-color:var(--line-2)}
.pmc.live{border-color:var(--red-edge)}
.pmc>.chead-status-only+.plr{padding-right:84px}
.pmc .plr+.plr{padding-right:12px}
.pmc .nm a.s{color:inherit;text-decoration:none;position:relative;z-index:1}
.pmc .plr:has(a.s){position:relative;z-index:2}   /* wiersz zawodnika nad linkiem meczu (paczka 30) */
.pmc .plr:has(a.s) a.s{position:static}
.pmc .plr:has(a.s) a.s::after{content:"";position:absolute;inset:0;z-index:1}
.pmc .nm a.s:hover{text-decoration:underline}
.pmc .mtc::after{content:"";position:absolute;inset:0}
.pcards+.pgrid{margin-top:8px;grid-template-columns:minmax(0,1fr)}
.pgrid-1{grid-template-columns:minmax(0,1fr)}   /* paczka 79: główna lista zawodników strony zawsze po jednym w rzędzie */   /* pod kartami występów: ta sama szerokość (paczka 30) */
/* Otwieranie meczu z ligi/kraju: lista dnia ukryta do chwili, gdy mecz stoi rozwinięty na środku (veilOn/veilOff). Bez napisu
   „Otwieram mecz…” (2026-10-20, Tomek: napis migał) — przez ten moment po prostu pusto pod paskiem dni. */
html.mp-opening #app{visibility:hidden}
@media (max-width: 480px){ .pmc{border-radius:10px} .pmc>.chead-status-only+.plr{padding-right:78px} .pmc .plr+.plr{padding-right:10px} }
/* „na żywo” pod logo — ta sama czerwona, pulsująca kropka co przy sekcji meczów na żywo. */
.tl-live{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;color:var(--ink-2);margin-left:1px}
.tl-live .pulse{width:6px;height:6px;flex:0 0 auto}
.pchips a{display:inline-block;background:var(--card);border:1px solid var(--line);border-radius:99px;padding:7px 14px;font-size:13px;font-weight:600;color:var(--mut);text-decoration:none}
.pchips a:hover,.pchips a:active{color:var(--ink);background:var(--card-2)}
.profile .plink a::after{content:" →"}
/* ---- Strona meczu (/mecze/{slug}/): nagłówek z wynikiem, status, „Polacy w meczu”, przebieg meczu ---- */
.mm-head{margin-top:6px}
/* Kafel z wynikiem = zwinięta karta meczu z widoku dnia (paczka 35): te same .mtc .tm .t .sc, status w prawym rogu jak .chead .st,
   czerwona ramka na żywo jak .card.live. Bez osobnych, większych rozmiarów fontu. */
.profile .pcard.mm-head.live{border-color:var(--red-edge)}
.mm-top{display:flex;align-items:center;gap:10px}
.mm-top .pm-when{flex:1;min-width:0}
.mm-st{flex:0 0 auto;margin-left:auto;display:flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.mm-st.is-live{color:var(--red)}
.mm-st.is-live .pulse{width:6px;height:6px}
.mm-st.is-done{color:var(--dim)}
.mm-head .mtc{padding:6px 0 0;cursor:default}
/* Pudełka Polaków na stronie meczu — jak w rozwiniętej karcie meczu */
.mm-players .detplr{margin-bottom:8px}
.mm-players .detplr:last-child{margin-bottom:0}
.mm-head .meta{margin-top:9px;padding-top:9px;border-top:1px solid var(--line);font-size:12.5px;color:var(--mut)}
/* Paczka 108: transmisja w osobnej, wyraźnej linijce; stadion pod nią, mniejszy, bez drugiej kreski */
.mm-head .mm-tv{margin-top:9px;padding-top:9px;border-top:1px solid var(--line);font-size:14px;line-height:1.35;color:var(--ink)}
.mm-head .mm-tv .tv-ic{font-size:13px}
.mm-head .mm-tv+.meta{margin-top:3px;padding-top:0;border-top:0;font-size:12px}
/* Paczka 100: pasek „na żywo” pod wynikiem na stronie meczu + karta „Dziś” na profilu przed meczem */
.mm-live{display:flex;align-items:center;gap:9px;margin-top:8px;padding:7px 11px;border:1px solid var(--lime-line);border-radius:10px;background:var(--card)}
.mm-live.is-live{border-color:var(--red-edge)}
.mm-live .dot,.ptd-live .dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:var(--lime-line)}
.mm-live .pulse{flex:0 0 auto}
.mm-live-t{flex:1;min-width:0;font-size:12.5px;line-height:1.35;color:var(--mut)}   /* paczka 108: jedna linijka zamiast dwóch */
.mm-live-t b{font-weight:700;color:var(--ink)}
.mm-cd{flex:0 0 auto;font-size:12px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
/* paczka 108: odliczanie zostaje w tej samej linijce po prawej (na wąskim ekranie tekst się zawija, a nie licznik) */
/* Paczka 108: „Inne mecze Polaków dziś” na stronie meczu — osobny blok pod treścią meczu, link do całego dnia */
.mm-others{display:block;margin-top:22px;padding-top:4px;border-top:1px solid var(--line)}
.mm-others .mm-all{display:inline-block;margin-top:10px;font-size:13px;font-weight:600;color:var(--lime-ink);text-decoration:none}
.mm-others:not(:has(.ptoday)){display:none}   /* po północy ptodayLive usuwa blok — bez pustej ramki */
.profile .pnow.mm-intro{margin-top:18px}
.ptd-live{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:10px;row-gap:2px;margin-top:6px}
.ptd-live .pm-follow{margin-top:0}
.ptd-cd{font-size:12.5px;color:var(--mut);font-variant-numeric:tabular-nums}
#profileToday>.pm-follow{margin-top:6px}
/* Paczka 157 (decyzja Tomka 2026-11-05): „Mecze” na profilu — jeden kafel z wierszami Dziś / Ostatni (Poprzedni) / Najbliższy,
   oddzielonymi kreską; etykieta po lewej, data · rozgrywki po prawej w tym samym miejscu w każdym wierszu. Więcej oddechu
   wokół kafla i karty „Dziś N meczów…” (zostaje w tym samym miejscu). */
.profile .pmx-sec{margin-top:24px}
.profile .pmx-sec:not(:has(.pmx-row:not([hidden]))){display:none}
.pmx{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;transition:border-color .15s}
.pmx:has(.pmx-hd.is-live){border-color:var(--red-edge)}
.pmx-row{position:relative;padding:11px 14px 13px}
.pmx-row[hidden]{display:none}
.pmx-row:not([hidden])~.pmx-row:not([hidden]){border-top:1px solid var(--line)}
.pmx-hd{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.pmx-k{flex:0 0 auto;font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut)}
.pmx-d{min-width:0;font-size:11.5px;color:var(--mut);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pmx-d .is-live{display:inline-flex;align-items:center;gap:5px;color:var(--red);font-weight:700}
.pmx-row .mtc.pmx-m{padding:0;gap:12px;color:inherit;text-decoration:none}
.pmx-row .pmx-m .tm{font-size:14.5px;gap:6px}
.pmx-row .pmx-m .t .n{color:var(--ink-2)}
.pmx-row .pmx-m .t.win .n{color:var(--cyan);font-weight:700}
.pmx-row .pmx-m .sc{font-size:15px;font-weight:700;color:var(--ink)}
.pmx-row div.pmx-m{cursor:default}
.pmx-row a.pmx-m::after{content:"";position:absolute;inset:0}
.pmx-row a.pmx-m:hover .n{color:var(--ink)}
.pmx-x{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:6px;font-size:12.5px;line-height:1.35;color:var(--mut)}
.pmx-x b{color:var(--ink);font-weight:700}
.pmx-x .mev{font-size:13px}
.pmx-x .pitchdot{vertical-align:1px}
.pmx-go{margin-left:auto;color:var(--lime-ink);font-weight:600}
.pmx-row .pm-match{margin-top:0}
.pmx-row .pm-tv{margin-top:6px}
.pmx-row .pm-tv,.pmx-row .ptd-live,.pmx-row .pmx-acts{position:relative;z-index:1}
.pmx-row .ptd-live{margin-top:11px}
/* Paczka 157 (po zrzucie Tomka): w kaflu „Mecze” bez przycisków — dwa zestawy przycisków jeden pod drugim (kafel + karta
   „Dziś N meczów…”) zlewały się. Kalendarz i „Śledź na żywo →” jako lekkie linki w jednej linii pod kreską; przyciski ma tylko karta „Dziś”. */
.pmx-acts{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 16px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--line)}
.pmx-acts>*{flex:0 0 auto;min-width:0}
.pmx-acts .pm-cal{margin-top:0}
.pmx-acts .pm-cal>summary{padding:4px 0;border:0;border-radius:0;background:none;color:var(--ink-2);font-size:13px;font-weight:600}
.pmx-acts .pm-cal>summary:hover{background:none;color:var(--ink)}
.pmx-acts .pm-cal[open]{flex-basis:100%;order:2}
.pmx-row .pm-follow{position:relative;z-index:1;margin-top:9px;font-size:13px;color:var(--lime-ink);border-bottom-color:var(--lime-line)}
.pmx-row .ptd-live .pm-follow{margin:0}
.pmx-acts .pm-follow{margin:0 0 0 auto}
.pmx-row .ptd-live{align-items:baseline;column-gap:12px}
.profile .pmx-sec+.plive{margin:28px 0}
/* Paczka 188 (Tomek 2026-11-08, wariant B): kafel meczów na profilu — „Ostatni” i „Najbliższy” obok siebie w jednej karcie,
   dwie kolumny z pionową kreską (także na telefonie). Drużyny jedna pod drugą, wynik przy każdej; data pod etykietą.
   Paczka 192: zawsze dwa okienka — w dzień meczu „Dziś” zamiast „Ostatni” (lewe), „Najbliższy” po prawej. Jeden wiersz = cała szerokość. */
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])){display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>#secToday,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>#secLast{grid-column:1;grid-row:1;padding:11px 12px 12px 14px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>#secNextOne{grid-column:2;grid-row:1;padding:11px 14px 12px 12px;border-left:1px solid var(--line)}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>#secNextOne:not([hidden]){border-top:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-hd{display:block;margin-bottom:8px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-d{display:block;margin-top:3px;text-align:left;white-space:normal}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .mtc.pmx-m{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:8px;row-gap:2px;align-items:baseline}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .tm,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc{display:contents}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .vs,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sep{display:none}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .tm>.t:nth-child(1){grid-row:1;grid-column:1}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .tm>.t:nth-child(3){grid-row:2;grid-column:1}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .t,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .t .n{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc>.g:nth-child(1){grid-row:1;grid-column:2;font-size:14.5px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc>.g:nth-child(3){grid-row:2;grid-column:2;font-size:14.5px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc>.goal-pop{display:none}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row .ptd-live{margin-top:8px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc>.pso{grid-row:3;grid-column:1/-1;font-size:11.5px;color:var(--mut)}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-x{margin-top:8px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-go{margin-left:0;flex-basis:100%}
/* Paczka 193: wszystkie trzy linki kafla (Szczegóły / Śledź na żywo / Zapowiedź meczu) jednakowe — limonkowy tekst, bez podkreślenia */
.pmx-row .pm-follow{border-bottom:0;font-size:12.5px;font-weight:600;color:var(--lime-ink)}
.pmx-row a.pmx-m:not([href]){cursor:default}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pm-match{display:grid;gap:2px;font-size:14px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pm-match .pm-vs{display:none}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pm-match .pm-t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pm-tv{margin-top:7px;font-size:12px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-acts{display:grid;justify-content:start;gap:4px;margin-top:8px;padding-top:0;border-top:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-acts .pm-follow{margin:0;justify-self:start}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-acts .pm-cal>summary{font-size:12.5px;padding:2px 0}
/* Paczka 194 (Tomek 2026-11-08): w dwóch okienkach na czerwono tylko okienko z trwającym meczem (nie cała karta); linki na dole
   obu okienek zawsze na tej samej wysokości (okienko = kolumna, link dociśnięty do dołu). */
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])):has(.pmx-hd.is-live){border-color:var(--line)}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>#secToday:has(.pmx-hd.is-live){box-shadow:inset 0 0 0 1px var(--red-edge);border-radius:12px 0 0 12px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden]))>.pmx-row>div{display:flex;flex-direction:column;height:100%}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-x .pmx-go{order:9}
.pmx-cd{color:var(--mut)}
/* Paczka 195: wiersze obu okienek na tej samej wysokości co do piksela — stała wysokość linii drużyn i wiersza minut
   (wynik pogrubiony i emotka ⚽ nie podnoszą już wiersza po lewej względem prawego). */
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .mtc.pmx-m{grid-auto-rows:22px;row-gap:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .t,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .t .n,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-m .sc>.g{line-height:22px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-x{min-height:22px;line-height:22px;align-items:center;row-gap:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-x>*{line-height:22px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-x .mev{line-height:1}
/* Paczka 196: dół okienek równo — wiersz minut i link („Szczegóły” / „Śledź na żywo” / „Zapowiedź meczu”) dociśnięte do dołu,
   każdy po 22 px; „Śledź na żywo” w „Dziś” stoi dokładnie na wysokości „Zapowiedź meczu” obok. */
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.pmx-x{margin-top:auto;padding-top:8px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.pm-follow,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.ptd-live{margin-top:auto;padding-top:0;line-height:22px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.pmx-x~.pm-follow,.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.pmx-x~.ptd-live{margin-top:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row>div>.pm-follow{display:block;width:fit-content;margin-bottom:0}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row .ptd-live .pm-follow{line-height:22px}
.pmx:has(>#secNextOne:not([hidden])):has(>#secToday:not([hidden]),>#secLast:not([hidden])) .pmx-row .pmx-go{line-height:22px}

/* Paczka 93: „Składy” na stronie meczu — na telefonie drużyny jedna pod drugą, od 600 px dwie kolumny; Polacy w kolorze akcentu. */
.lu-grid{display:grid;gap:16px}
@media (min-width:600px){ .lu-grid{grid-template-columns:1fr 1fr;gap:18px} }
.lu-team{min-width:0}
.lu-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:4px}
.lu-tn{font-size:13px;font-weight:700;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lu-f{flex:0 0 auto;font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}
.lu-l{list-style:none;margin:0;padding:0}
.lu-l li{display:grid;grid-template-columns:22px minmax(0,1fr) auto 30px;gap:8px;align-items:center;padding:4px 0;border-bottom:1px solid var(--line);font-size:12.5px;color:var(--ink-2)}
.lu-l li:last-child{border-bottom:0}
.lu-n{text-align:right;font-size:11px;color:var(--dim);font-variant-numeric:tabular-nums}
.lu-nm{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lu-p{font-size:10px;font-weight:600;color:var(--dim);letter-spacing:.03em;text-align:right}
/* paczka 95: zmiany przy nazwisku — ciche, szare; wejście w kolorze „wszedł” z rozwiniętej karty */
.lu-s{display:flex;gap:6px;font-size:10.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.lu-out{color:var(--dim)}
.lu-in{color:var(--lime-ink);opacity:.85}
.lu-l li.pl .lu-nm,.lu-l li.pl .lu-nm a{color:var(--lime-ink);font-weight:700}
.lu-l li.pl .lu-nm a{text-decoration:none}
.lu-sub{margin:10px 0 2px;font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--mut)}
.lu-bench{margin-top:4px}
.lu-bench>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:6px;padding:6px 0;margin:4px 0 0;user-select:none;-webkit-tap-highlight-color:transparent}
.lu-bench>summary::-webkit-details-marker{display:none}
.lu-bench>summary::after{content:"›";display:inline-block;margin-left:auto;font-size:15px;line-height:1;color:var(--dim);transition:transform .15s}
.lu-bench[open]>summary::after{transform:rotate(90deg)}
.lu-bpl{text-transform:none;letter-spacing:0;font-weight:700;color:var(--lime-ink);font-size:11.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lu-c{margin-top:8px;font-size:11.5px;color:var(--dim)}
.seo-list{list-style:none;padding:0;margin:0}
.squad-intro{color:var(--dim);font-size:13px;line-height:1.55;margin:4px 0 12px}
.squad-h .squad-cnt{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:99px;background:var(--card-2);color:var(--dim);font-size:10.5px;letter-spacing:.02em;vertical-align:1px}
.squad-h{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin:16px 0 6px}
.seo-list li{padding:9px 14px;border-bottom:1px solid var(--line);font-size:14px}
.seo-list a{color:var(--ink);text-decoration:none;font-weight:600}
.seo-list span{color:var(--dim);font-size:12.5px}
.profile .ph-box{display:block;background:transparent;border:0;border-radius:0;padding:0;max-height:none;overflow:visible;margin:0;max-width:none}
.profile .ph-head{display:none}
.profile .ph-tabs{padding:0}
.profile .ph-body{overflow:visible;padding:10px 0 24px}
.ph-sec[hidden]{display:none!important}
/* X w prawym górnym rogu strony zawodnika (powrót do miejsca, z którego się weszło) */
.hbtns{display:flex;align-items:center;gap:8px;margin-left:8px;flex:0 0 auto}
/* Przełącznik motywu w górnym pasku (zawsze przed ← ✕), wysokością dopasowany do liter logo. Wygląd zależy tylko od data-theme na <html>, więc od
   pierwszej klatki pokazuje właściwy stan. Ciemny: gałka po lewej, księżyc po prawej. Jasny: słońce po lewej, gałka po prawej. */
.thsw{margin-left:auto;position:relative;flex:0 0 auto;width:44px;height:24px;border-radius:99px;padding:0;cursor:pointer;
  background:var(--card-2);border:1px solid var(--line-2);color:var(--ink);-webkit-tap-highlight-color:transparent}
.thsw-k{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--ink);
  box-shadow:0 1px 3px var(--sh);transition:transform .22s ease}
:root[data-theme="light"] .thsw-k{transform:translateX(20px)}
.thsw-i{position:absolute;top:0;bottom:0;display:flex;align-items:center;color:var(--ink)}
.thsw-i svg{display:block}
.thsw-i.moon{right:5px}
/* Dzwonek powiadomień push (paczka 08, 2026-10-21) — przed przełącznikiem motywu; obsługa w push-ui.js. Kropka = powiadomienia włączone. */
.pbell{margin-left:auto;position:relative;flex:0 0 auto;width:30px;height:30px;border-radius:99px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;
  background:transparent;border:1px solid var(--line-2);color:var(--ink);-webkit-tap-highlight-color:transparent}
.pbell[hidden]{display:none}
.pbell:not([hidden])+.thsw{margin-left:0}
.pbell.on::after{content:"";position:absolute;top:4px;right:5px;width:7px;height:7px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 2px var(--bg)}
.pbell:focus-visible{outline:2px solid var(--lime-line);outline-offset:2px}
/* Ikonka „Polscore na telefonie” obok dzwonka (2026-10-21): telefon ze strzałką = dodaj do ekranu. Widoczna, dopóki Polscore nie jest
   otwarty z ekranu (apka); na komputerze tylko wtedy, gdy przeglądarka umie zainstalować. Obsługa w push-ui.js. */
.papp{margin-left:auto;position:relative;flex:0 0 auto;width:30px;height:30px;border-radius:99px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;
  background:transparent;border:1px solid var(--line-2);color:var(--ink);-webkit-tap-highlight-color:transparent}
.papp[hidden]{display:none}
.papp:not([hidden])+.pbell{margin-left:0}
.papp:focus-visible{outline:2px solid var(--lime-line);outline-offset:2px}
.papp svg{color:var(--lime-ink)}
/* Paczka 126 (decyzja Tomka 2026-11-03): w górnym pasku tylko 🔍 (ogólna wyszukiwarka) i ☰ (menu). Dzwonek, „Polscore na telefonie”
   i przełącznik motywu przeszły do menu (blok „Ustawienia”) — ta sama obsługa (push-ui.js, psTheme), tylko inny wygląd. */
.hsrch,.hmenu{flex:0 0 auto;width:34px;height:34px;border-radius:50%;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;
  background:transparent;border:1px solid var(--line-2);color:var(--ink);-webkit-tap-highlight-color:transparent}
.hsrch{margin-left:auto}
.hsrch:active,.hmenu:active{background:var(--card-2)}
.hsrch:focus-visible,.hmenu:focus-visible{outline:2px solid var(--lime-line);outline-offset:2px}
.hsrch svg,.hmenu svg{display:block}
.bar .hsrch+.hmenu{margin-left:-4px}
/* Paczka 182 (Tomek 2026-11-08): dzwonek z górnego paska (176) przeniesiony do menu ☰, obok przełącznika motywu. */
.bar .hmenu+.hbtns{margin-left:4px}
@media (max-width:400px){ .bar{gap:7px} }
@media (max-width:370px){ .bar{gap:5px} .hsrch,.hmenu{width:32px;height:32px} .bar .hsrch+.hmenu{margin-left:0} }
/* ---- Menu i wyszukiwarka (jedna warstwa #psm, dwa panele) ---- */
.psm{position:fixed;inset:0;z-index:96}
.psm[hidden]{display:none}
html.psm-open,html.psm-open body{overflow:hidden}
.psm-bg{position:absolute;inset:0;background:var(--scrim);opacity:0;transition:opacity .2s ease}
.psm.on .psm-bg{opacity:1}
.psm-menu,.psm-search{position:absolute;background:var(--bg);color:var(--ink);display:none;flex-direction:column;overscroll-behavior:contain}
.psm[data-mode="menu"] .psm-menu,.psm[data-mode="search"] .psm-search{display:flex}
.psm-menu{top:0;right:0;bottom:0;width:min(400px,100%);border-left:1px solid var(--line);overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:calc(env(safe-area-inset-top) + 8px) 18px calc(env(safe-area-inset-bottom) + 24px);transform:translateX(24px);opacity:0;transition:transform .22s ease,opacity .2s ease}
.psm.on .psm-menu{transform:none;opacity:1}
.psm-menu>*{flex-shrink:0}
.psm-search{left:0;right:0;top:0;max-height:100%;padding:calc(env(safe-area-inset-top) + 8px) 0 0;opacity:0;transform:translateY(-8px);transition:transform .2s ease,opacity .18s ease}
.psm.on .psm-search{transform:none;opacity:1}
@media (max-width:640px){ .psm-search{bottom:0} }
@media (min-width:641px){
  .psm-search{left:50%;right:auto;top:8vh;width:600px;max-height:80vh;margin-left:-300px;border:1px solid var(--line);border-radius:16px;padding-top:6px;
    box-shadow:0 20px 60px var(--sh)}
}
@media (prefers-reduced-motion: reduce){ .psm-bg,.psm-menu,.psm-search{transition:none} }
.psm-head{display:flex;align-items:center;justify-content:space-between;height:50px;margin-bottom:4px}
.psm-ttl{font:800 19px/1 "Bricolage Grotesque",Inter,sans-serif;letter-spacing:-.02em}
/* Paczka 174: przełącznik motywu na samej górze menu, obok ✕ (wcześniej na dole w „Ustawieniach”) */
.psm-hr{display:flex;align-items:center;gap:12px}
.psm-hr .thsw{margin-left:0}
/* Paczka 182: dzwonek w nagłówku menu, przed przełącznikiem motywu (kropka = powiadomienia włączone; obsługa w push-ui.js) */
.psm-hr .pbell{margin:0;width:36px;height:36px;border-radius:50%;background:var(--card);border:1px solid var(--line);color:var(--ink)}
.psm-hr .pbell.on::after{top:7px;right:8px}
.psm-x{flex:0 0 auto;width:36px;height:36px;border-radius:50%;background:var(--card);border:1px solid var(--line);color:var(--mut);display:flex;align-items:center;justify-content:center;padding:0}
.psm-x:active{background:var(--card-2)}
.psm-sfield{display:flex;align-items:center;gap:10px;width:100%;height:44px;padding:0 14px;border-radius:12px;background:var(--card);border:1px solid var(--line-2);
  color:var(--dim);font-size:15px;text-align:left}
.psm-sfield svg{flex:0 0 auto;color:var(--mut)}
/* Paczka 148: jedna karta „dziś” z dwoma przyciskami — wyniki (lista meczów) albo relacja tekstowa (decyzja Tomka, opcja C) */
.psm-today{margin-top:12px;padding:8px;border-radius:13px;background:var(--card);border:1px solid var(--line)}
.psm-today-h{display:flex;flex-wrap:wrap;gap:2px 6px;margin:0 2px 7px;font-size:12.5px;line-height:1.35;color:var(--mut)}
.psm-today-t{font-weight:800;color:var(--ink)}
.psm-today-s:not(:empty)::before{content:"· "}
.psm-today-b{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.psm-today-b a{display:flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:6px 8px;border-radius:10px;font-weight:800;font-size:13.5px;line-height:1.2;text-align:center;text-decoration:none}
.psm-today-b .pulse{flex:0 0 auto}
.psm-today-b .psm-live{background:var(--lime);color:var(--on-lime)}
.psm-today-b .psm-lb{background:var(--red-t);border:1px solid var(--red-edge);color:var(--ink)}
.psm-h{margin:20px 0 6px;font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}
.psm-list{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.psm-list li+li{border-top:1px solid var(--line)}
.psm-list a{display:flex;align-items:center;gap:10px;min-height:44px;padding:10px 14px;color:var(--ink);text-decoration:none;font-size:15px;font-weight:600}
.psm-list a::after{content:"›";margin-left:auto;color:var(--dim);font-size:18px;line-height:1;font-weight:600;flex:0 0 auto}
.psm-list a:active{background:var(--press)}
.psm-list a small{display:block;font-size:12.5px;font-weight:500;color:var(--mut);margin-top:1px}
.psm-list .psm-i{min-width:0}
.psm-top{margin-top:12px}   /* paczka 239: Transmisje TV + Aktualności pod kartą „dziś” */
.psm-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:6px}
.psm-grid a{display:flex;align-items:center;justify-content:space-between;gap:6px;min-height:42px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;
  background:var(--card);color:var(--ink);text-decoration:none;font-size:14px;font-weight:600}
.psm-grid a::after{content:"›";color:var(--dim);font-size:17px;line-height:1}
.psm-grid a:active{background:var(--press)}
.psm-grid a span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.psm-favs[hidden]{display:none}
.psm-chips{display:flex;flex-wrap:wrap;gap:6px}
.psm-chips a{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--line-2);border-radius:99px;color:var(--ink);
  text-decoration:none;font-size:13.5px;font-weight:600;background:var(--card)}
.psm-chips a .pulse{flex:0 0 auto}
.psm-set{border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.psm-set>*+*{border-top:1px solid var(--line)}
.psm-set:not(:has(>:not([hidden]))),.psm-h:has(+.psm-set:not(:has(>:not([hidden])))){display:none}   /* paczka 182: pusty blok „Ustawienia” */
.psm-row{display:flex;align-items:center;gap:12px;width:100%;min-height:46px;padding:8px 14px;background:none;border:0;border-radius:0;color:var(--ink);
  font-size:15px;font-weight:600;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}
.psm-row[hidden]{display:none}
.psm .psm-set .pbell,.psm .papp{width:100%;height:auto;margin:0;border:0;border-radius:0;justify-content:flex-start;background:none}
.psm-row>svg{flex:0 0 auto;color:var(--mut)}
.psm-row .psm-st{margin-left:auto;font-size:13px;font-weight:600;color:var(--mut)}
.psm .pbell.on .psm-st{color:var(--lime-ink)}
.psm .pbell .psm-st::after{content:"wyłączone"}
.psm .pbell.on .psm-st::after{content:"włączone"}
.psm .papp>svg{color:var(--lime-ink)}
.psm-row .thsw{margin-left:auto}
.psm-legal{margin:18px 0 0;font-size:12.5px;color:var(--dim);line-height:1.6}
.psm-legal a,.psm-legal button{color:var(--mut);background:none;border:0;padding:0;font:inherit;text-decoration:underline;text-underline-offset:2px}
/* wyszukiwarka */
.psm-sbar{display:flex;align-items:center;gap:8px;padding:0 14px 10px;border-bottom:1px solid var(--line)}
.psm-sin{position:relative;flex:1;min-width:0}
.psm-sin>svg{position:absolute;left:13px;top:50%;margin-top:-9px;color:var(--mut);pointer-events:none}
.psm-sin input{width:100%;height:44px;background:var(--card);border:1px solid var(--line-2);color:var(--ink);border-radius:12px;padding:0 38px 0 40px;
  font-family:inherit;font-size:16px;-webkit-appearance:none;appearance:none}
.psm-sin input::placeholder{color:var(--dim)}
.psm-sin input:focus{outline:2px solid var(--lime);outline-offset:1px}
.psm-sin input::-webkit-search-cancel-button{-webkit-appearance:none;display:none}
.psm-clr{position:absolute;right:8px;top:50%;width:26px;height:26px;margin-top:-13px;border-radius:50%;border:0;background:var(--card-2);color:var(--mut);
  display:flex;align-items:center;justify-content:center;padding:0;font-size:12px}
.psm-clr[hidden]{display:none}
.psm-cancel{flex:0 0 auto;background:none;border:0;color:var(--ink-2);font-size:15px;font-weight:600;padding:8px 2px}
.psm-res{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:4px 14px calc(env(safe-area-inset-bottom) + 20px)}
.psm-res .psm-h:first-child{margin-top:12px}
.psm-hint{padding:18px 4px;color:var(--mut);font-size:14px;line-height:1.5}
.psm-r{display:flex;align-items:stretch;border-bottom:1px solid var(--line)}
.psm-r:last-child{border-bottom:0}
.psm-r>a.psm-ra{flex:1;min-width:0;display:flex;align-items:center;gap:10px;min-height:52px;padding:8px 2px;color:var(--ink);text-decoration:none}
.psm-r>a.psm-ra:active{background:var(--press)}
.psm-ic{flex:0 0 auto;width:30px;height:30px;border-radius:8px;background:var(--card-2);display:flex;align-items:center;justify-content:center;font-size:15px;color:var(--mut)}
.psm-tx{min-width:0;flex:1}
.psm-nm{display:block;font-size:15px;font-weight:600;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.psm-nm b{font-weight:800}
.psm-nm .fn{font-weight:500;color:var(--ink-2);margin-left:5px}
.psm-nm .pos{top:-2px}
.psm-nm mark{background:none;color:inherit;text-decoration:underline;text-decoration-color:var(--lime-line);text-decoration-thickness:2px;text-underline-offset:3px}
.psm-sb{display:block;font-size:12.5px;color:var(--mut);line-height:1.35;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.psm-go{flex:0 0 auto;align-self:center;display:inline-flex;align-items:center;gap:6px;margin-left:8px;height:30px;padding:0 10px;border-radius:99px;border:1px solid var(--line-2);
  color:var(--ink);font-size:12.5px;font-weight:700;text-decoration:none;white-space:nowrap;background:var(--card)}
.psm-go.live{border-color:var(--red-edge);color:var(--red)}
.psm-go .pulse{flex:0 0 auto}
.psm-r.psm-sel>a.psm-ra{background:var(--press)}
.psm-tip{display:flex;align-items:center;gap:10px;margin:12px 0 2px;padding:10px 12px;border:1px dashed var(--lime-line);border-radius:12px;color:var(--ink);
  text-decoration:none;font-size:14px;font-weight:600;background:var(--lime-t)}
.psm-tip::after{content:"›";margin-left:auto;font-size:18px;color:var(--lime-ink)}
.psh{position:fixed;inset:0;z-index:90;display:flex;align-items:flex-end;justify-content:center}
.psh-bg{position:absolute;inset:0;background:rgba(0,0,0,.45);opacity:0;transition:opacity .2s}
.psh-box{position:relative;width:100%;max-width:480px;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:16px 16px 0 0;
  padding:20px 18px calc(18px + env(safe-area-inset-bottom));transform:translateY(24px);opacity:0;transition:transform .2s ease,opacity .2s ease}
.psh.on .psh-bg{opacity:1}
.psh.on .psh-box{transform:none;opacity:1}
.psh h3{margin:0 30px 8px 0;font:700 17px/1.3 "Bricolage Grotesque",Inter,system-ui,sans-serif}
.psh p{margin:0 0 10px;font-size:14px;line-height:1.5;color:var(--ink-2)}
.psh-l{list-style:none;margin:0 0 12px;padding:2px 12px;font-size:14px;line-height:1.35;color:var(--ink-2);background:var(--card-2);border:1px solid var(--line);border-radius:12px}
/* Paczka 75: lista „co przychodzi” jako karta — ikona w stałej kolumnie, cienkie kreski między wierszami. */
.psh-l li{display:flex;align-items:center;gap:10px;padding:8px 0}
.psh-l li+li{border-top:1px solid var(--line)}
.psh-l .pi{flex:0 0 22px;display:flex;align-items:center;justify-content:center;gap:2px;font-size:15px}
.psh-l .pi .cd{margin:0}
/* Okienko „Powiadomienia włączone”: nagłówek z ikonką stanu, śledzeni jako pastylki, „Wyłącz” jako ciche łącze. */
.psh-hd{display:flex;align-items:center;gap:12px;margin:0 30px 14px 0}
.psh-hd h3{margin:0}
.psh-hd .psh-sub{display:block;margin-top:2px;font-size:12.5px;color:var(--ok);font-weight:600}
.psh-hi{flex:0 0 40px;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ok-t);color:var(--ok)}
.psh-hi svg{width:20px;height:20px}
.psh-lbl{margin:0 0 6px;font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--mut)}
.psh-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px;padding:0;list-style:none}
.psh-chips li{display:inline-flex;align-items:center;gap:5px;padding:6px 11px;border-radius:99px;background:var(--card-2);border:1px solid var(--line-2);font-size:13.5px;font-weight:600;color:var(--ink)}
.psh-chips li::before{content:"★";color:var(--lime-ink);font-size:12px}
.psh-off{display:block;margin:12px auto 0;padding:8px 12px;border:0;background:transparent;color:var(--mut);font:600 13px/1.2 Inter,system-ui,sans-serif;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.psh-off:hover{color:var(--red)}
.psh-o{margin:0 0 10px;padding-left:20px;font-size:14px;line-height:1.7;color:var(--ink-2)}
.psh p.psh-m{font-size:12.5px;color:var(--mut)}
/* Instrukcja „Dodaj do ekranu” (okienko i strona /aplikacja/): ikonki przycisków Safari/Chrome w tekście, dopiski szarym. */
.psh-ic{display:inline-block;width:1.15em;height:1.15em;vertical-align:-.22em;color:var(--lime-ink)}
.psh-hint{color:var(--mut);font-size:.92em}
.app-box{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px 6px;margin:14px 0 6px}
.app-box .psh-o{font-size:14.5px}
.app-ok{font-size:14.5px}
.app-btn{padding:12px 20px;font-size:14.5px}
.psh-x{position:absolute;top:10px;right:10px;width:34px;height:34px;border:0;background:transparent;color:var(--mut);font-size:16px;cursor:pointer}
.psh-b{display:flex;gap:8px;margin-top:8px}
.psh-b button{flex:1;padding:12px 10px;border-radius:99px;font:700 14px/1 Inter,system-ui,sans-serif;cursor:pointer;border:1px solid var(--line-2);background:var(--card-2);color:var(--ink);white-space:nowrap}
.psh-b .psh-yes{background:var(--lime);color:var(--on-lime);border-color:var(--lime)}
.psh-t{position:fixed;left:50%;bottom:calc(var(--navh,58px) + 14px);transform:translate(-50%,10px);z-index:95;background:var(--ink);color:var(--bg);
  padding:10px 16px;border-radius:99px;font:600 13px/1.2 Inter,system-ui,sans-serif;opacity:0;transition:opacity .2s,transform .2s;pointer-events:none}
.psh-t.on{opacity:1;transform:translate(-50%,0)}
@media (min-width:700px){ .psh{align-items:center} .psh-box{border-radius:16px} }
.psh-b2{margin-top:8px}
.psh-b2 button{font-weight:600}
/* Pasek „Dodaj Polscore do ekranu” (push-ui.js) — od 2. wizyty, w miejscu paska cookies (nigdy razem z nim). */
.pinst{position:fixed;left:50%;bottom:calc(var(--navh,58px) + 10px);z-index:56;width:calc(100% - 20px);max-width:600px;display:flex;align-items:center;gap:10px;
  padding:10px 10px 10px 14px;background:var(--card);border:1px solid var(--line-2);border-radius:14px;box-shadow:0 8px 28px var(--sh);
  opacity:0;transform:translate(-50%,12px);transition:opacity .25s,transform .25s}
.pinst.on{opacity:1;transform:translate(-50%,0)}
body.psh-open #consent,body.psh-open .pinst{visibility:hidden}   /* paczka 84: pod okienkiem powiadomień nic nie wisi */
.pinst-i{font-size:22px;flex:none}
.pinst p{flex:1;min-width:0;margin:0;font-size:12.5px;line-height:1.4;color:var(--ink-2)}
.pinst p b{display:block;color:var(--ink);font-size:13.5px}
.pinst-yes{flex:none;padding:9px 16px;border-radius:99px;border:1px solid var(--lime);background:var(--lime);color:var(--on-lime);font:700 13px/1 Inter,system-ui,sans-serif;cursor:pointer}
.pinst-x{flex:none;width:32px;height:32px;border:0;background:transparent;color:var(--mut);font-size:15px;cursor:pointer}
.thsw-i.sun{left:5px;display:none}
:root[data-theme="light"] .thsw-i.moon{display:none}
:root[data-theme="light"] .thsw-i.sun{display:flex}
@media (prefers-reduced-motion: reduce){ .thsw-k{transition:none} }
.hbtn{flex:0 0 auto;width:36px;height:36px;border-radius:50%;background:var(--card);border:1px solid var(--line);color:var(--mut);
  display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer}
.hbtn:hover{color:var(--ink)}
.hbtn:active{background:var(--card-2)}
/* W nakładce i na stronie profilu w nagłówku nie ma filtrów pod spodem, więc margines podpisu nie może "uciekać"
   z nagłówka — inaczej kreska pod nagłówkiem dotyka napisu. */
.pv header,body.page-player header,body.page-static header{display:flow-root;padding-bottom:8px}
/* poziome przesunięcie palcem obsługuje nasz skrypt; przewijanie w pionie zostaje przeglądarce */
#profile,body.page-list #app{touch-action:pan-y}
/* Nakładka z profilem: pełny ekran nad stroną (pod dolnym paskiem, nad nagłówkiem). Strona pod spodem zostaje
   nietknięta, więc cofnięcie odsłania ją od razu, bez ładowania. */
/* Nakładka leży poza elementem body (żeby strona mogła zsuwać się nad nią), więc sama musi ustawić to, co strona dziedziczy z
   body: krój pisma, kolor, rozmiar i wygładzanie — bez tego wpada w domyślne, szeryfowe pismo przeglądarki. */
.pv{color:var(--ink);font-family:Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased;font-size:15px}
@media (max-width: 480px){ .pv{font-size:14px} }
.pv{position:fixed;inset:0;z-index:45;background:var(--bg);overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;touch-action:pan-y;box-shadow:-16px 0 36px var(--sh-slide)}
html.pv-open{overflow:hidden}   /* strona pod nakładką nie przewija się przy dotyku/kółku */
/* Paczka 174: koniec treści nakładki (stopka strony z serwera, „Zobacz także”) nie chowa się pod pływającym dolnym menu */
.pv{padding-bottom:calc(var(--navh,58px) + 16px)}
.pv.fade{animation:pvfade .2s ease-out}
@keyframes pvfade{from{opacity:0}to{opacity:1}}
.profile .pleague .ptier{color:var(--dim);white-space:nowrap}
.profile .pclub .ppos{font-size:11px;padding:2px 6px;margin:0 8px 0 0;top:-2px}
.profile h1 .age{font-size:.62em;font-weight:500;color:var(--dim);margin-left:6px;white-space:nowrap}
.ph-sec>h2{font-family:"Bricolage Grotesque",Inter,sans-serif;font-weight:800;font-size:17px;margin:18px 0 6px;color:var(--ink)}
/* Gdy JS dorobił zakładki, ich rolę pełnią nagłówki — H2 zostają w HTML, ale są tylko dla czytników ekranu i robotów */
.tabs-on .ph-sec>h2{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;margin:-1px;padding:0;border:0}
body>.seo-note{width:100%;box-sizing:border-box;color:var(--dim);font-size:12.5px;line-height:1.6;margin:14px auto 0}
.about .src{margin-top:8px;font-size:12px}
.about .src a{color:var(--mut)}
/* Apka ze skrótu na iPhonie: znaki paska statusu (godzina, bateria) są na stałe białe — to ustawienie z chwili dodania
   skrótu i strona nie może go zmienić. W jasnym motywie zostawiamy więc pod paskiem statusu ciemny pas. */
:root.ios-app[data-theme="light"] body>header,:root.ios-app[data-theme="light"] .pv>header{
  background:linear-gradient(#0A0A0C,#0A0A0C) top/100% env(safe-area-inset-top,0px) no-repeat,var(--bg)}
