/* ============================================================
   WTORKOWA PIŁKA — motyw „karta meczowa" (v2 — odświeżenie UX/UI)
   Murawa o zmierzchu w nagłówku, naszywki ról jak na koszulce,
   kolory rodem z kartek sędziowskich.

   Zmiany w v2 względem v1:
     - Rozszerzony system tokenów (spacing/radius/shadow) zamiast
       rozproszonych wartości "na sztywno" w znacznikach inline.
     - Nawigacja: górny pasek zakładek (desktop) + dolny pasek
       nawigacyjny (mobile), a akcje konta przeniesione do
       osobnego menu profilu — mniej przycisków w nagłówku.
     - Tabele zastąpione responsywnymi kartami (Harmonogram Ról)
       lub opatrzone cieniem sugerującym przewijanie w bok
       (gęste tabele finansowe w modalach).
     - Systemowy alert()/confirm() zastąpiony toastami i
       modalem potwierdzenia w stylu aplikacji.
     - Pełnoekranowy loader z tekstem zastąpiony cienkim paskiem
       postępu (akcje) i szkieletami ładowania (pierwsze wejście).

   Paleta (bez zmian — zachowana tożsamość marki):
     --pitch        #1B5E40  ciemna murawa   (marka, przyciski, aktywne stany)
     --pitch-dark   #0F3B29  murawa w cieniu (nagłówki, tabela wyników)
     --pitch-light  #2E8B62  murawa w świetle (akcent „wszedł z ławki")
     --chalk        #F6F5F0  biel kredy      (tło strony)
     --ink          #1A231E  atrament        (tekst)
     --gold         #C99A3B  złoto naszywki  (rola: sprzęt)
     --navy         #33517A  granat wyjazdówki (rola: wybiera)
     --card-red     #C0392B  czerwona kartka (nieobecność / wolne miejsce)
     --success      #2E9E58  zielona kartka  (potwierdzenia, wpłaty)

   Typografia: Oswald (nagłówki, tablica wyników) + Inter (reszta treści).
   ============================================================ */

   /* Czcionki Oswald/Inter są ładowane przez <link rel="stylesheet"> w index.html
      (razem z <link rel="preconnect">) zamiast przez @import — @import blokował
      pobieranie tego pliku CSS do czasu ściągnięcia i sparsowania arkusza czcionek. */

   :root {
       /* --- Paleta marki --- */
       --pitch: #1B5E40;
       --pitch-dark: #0F3B29;
       --pitch-light: #2E8B62;
       --chalk: #F6F5F0;
       --ink: #1A231E;
       --ink-soft: #5B6862;
       --gold: #C99A3B;
       --navy: #33517A;
       --card-red: #C0392B;
       --success: #2E9E58;
       --success-dark: #23803F;
       --warn-bg: #FBF0DD;
       --warn-text: #86591A;
       --warn-border: #F1DCB0;
       --line: #E4E2DA;
       --surface: #FFFFFF;

       /* --- Skala odstępów (spacing) --- */
       --sp-1: 4px;
       --sp-2: 8px;
       --sp-3: 12px;
       --sp-4: 16px;
       --sp-5: 20px;
       --sp-6: 28px;

       /* --- Skala zaokrągleń (radius) --- */
       --radius-sm: 8px;
       --radius-md: 12px;
       --radius-lg: 16px;
       --radius-full: 999px;

       /* --- Skala cieni (shadow) --- */
       --shadow-sm: 0 2px 8px rgba(15, 59, 41, 0.06);
       --shadow-md: 0 6px 18px rgba(15, 59, 41, 0.08);
       --shadow-lg: 0 14px 32px rgba(15, 59, 41, 0.18);
       --shadow: var(--shadow-md); /* alias zachowany dla zgodności wstecznej */

       /* --- Fokus i inne --- */
       --focus-ring: 0 0 0 3px rgba(27, 94, 64, 0.18);
       --bottom-nav-h: 62px;
   }

   @media (prefers-reduced-motion: reduce) {
       * { transition: none !important; animation: none !important; }
   }

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

   /* --- Główne ustawienia i tło --- */
   body {
       font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
       background-color: var(--chalk);
       background-image: radial-gradient(circle at 100% 0%, rgba(27, 94, 64, 0.06), transparent 45%);
       color: var(--ink);
       padding: 15px;
       max-width: 500px;
       margin: 0 auto;
       line-height: 1.5;
       -webkit-font-smoothing: antialiased;
   }

   h1, h2, h3 {
       font-family: 'Oswald', 'Inter', sans-serif;
   }

   /* --- Drobne narzędzia wielokrotnego użytku (zamiast powtarzanych stylów inline) --- */
   .text-muted { color: var(--ink-soft); }
   .text-sm { font-size: 13px; }
   .text-xs { font-size: 11.5px; }
   .u-center { text-align: center; }
   .u-hidden { display: none !important; }
   .stack-row { display: flex; align-items: center; gap: var(--sp-2); }
   .stack-row-between { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
   .field-inline {
       display: flex; align-items: center; flex-wrap: wrap; row-gap: 4px; background: white;
       border: 1px solid var(--line); border-radius: var(--radius-sm);
       flex-grow: 1; padding: 8px 10px;
   }
   .field-inline label { font-size: 14px; font-weight: 600; white-space: nowrap; margin-right: var(--sp-2); color: var(--ink); }
   .field-inline input {
       margin: 0; border: none; box-shadow: none; padding: 0; outline: none;
       background: transparent; flex: 1 1 70px; min-width: 70px; font-size: 15px;
   }
   .scroll-list { overflow-y: auto; text-align: left; margin-bottom: 15px; }
   .hint-box {
       font-size: 12px; color: var(--ink-soft); line-height: 1.5;
       background: var(--chalk); border: 1px solid var(--line);
       padding: 10px 12px; border-radius: var(--radius-sm); margin-bottom: var(--sp-4);
   }
   .pair-row { margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
   .pair-row:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
   .pair-row .stack-row select { margin: 0; }

   /* --- Panel Logowania --- */
   #panel-logowania {
       background: white;
       padding: 36px 20px 28px;
       border-radius: var(--radius-lg);
       box-shadow: var(--shadow-md);
       text-align: center;
       margin-top: 40px;
       border: 1px solid var(--line);
       position: relative;
   }
   #panel-logowania::before {
       content: "";
       position: absolute;
       top: 0; left: 50%;
       transform: translateX(-50%);
       width: 56px; height: 4px;
       border-radius: 0 0 4px 4px;
       background: var(--gold);
   }
   #panel-logowania h2 {
       margin-top: 0;
       margin-bottom: 22px;
       font-size: 26px;
       letter-spacing: 0.06em;
       text-transform: uppercase;
       color: var(--pitch);
       font-weight: 700;
   }

   /* --- Główny Panel Aplikacji (ukryty przed zalogowaniem) --- */
   #panel-aplikacji {
       display: none;
       padding-bottom: var(--sp-4);
   }

   /* --- Formularze, Pola tekstowe i Selecty --- */
   input, select {
       width: 100%;
       padding: 12px 16px;
       margin: 8px 0 16px 0;
       background-color: white;
       border: 1px solid #D8D5CB;
       border-radius: var(--radius-sm);
       color: var(--ink);
       font-family: 'Inter', sans-serif;
       font-size: 15px;
       box-sizing: border-box;
       transition: border-color 0.2s ease, box-shadow 0.2s ease;
   }
   input:focus, select:focus {
       outline: none;
       border-color: var(--pitch);
       box-shadow: var(--focus-ring);
   }

   /* ============================================================
      PASEK POSTĘPU (zastępuje pełnoekranowy loader z tekstem)
      Nieblokujący wizualnie pasek u góry ekranu — użytkownik od razu
      widzi, że coś się dzieje, bez „nudnego" komunikatu na całym ekranie.
      Body dostaje klasę is-loading, by zablokować przypadkowe
      podwójne kliknięcia w trakcie zapisu do bazy.
      ============================================================ */
   #loader {
       display: none;
       position: fixed;
       top: 0; left: 0;
       width: 100%; height: 3px;
       z-index: 9999;
       overflow: hidden;
       background: rgba(27, 94, 64, 0.12);
   }
   .top-progress-bar {
       position: absolute;
       top: 0; left: 0;
       height: 100%; width: 40%;
       background: linear-gradient(90deg, var(--pitch-light), var(--gold));
       border-radius: var(--radius-full);
       animation: progresslide 1.1s ease-in-out infinite;
   }
   @keyframes progresslide {
       0%   { left: -40%; }
       60%  { left: 100%; }
       100% { left: 100%; }
   }
   body.is-loading { pointer-events: none; }
   body.is-loading #loader,
   body.is-loading .modal { pointer-events: auto; }

   /* ============================================================
      SZKIELETY ŁADOWANIA (skeleton loaders)
      Używane jako domyślna zawartość kontenerów przy pierwszym
      wejściu (zanim dane spłyną z Supabase) — sugerują kształt
      docelowej treści zamiast suchego tekstu „Ładowanie...".
      ============================================================ */
   .skeleton {
       background: linear-gradient(100deg, #ECEAE2 30%, #F5F3EC 50%, #ECEAE2 70%);
       background-size: 200% 100%;
       animation: skeletonshimmer 1.4s ease-in-out infinite;
       border-radius: var(--radius-sm);
   }
   @keyframes skeletonshimmer {
       0% { background-position: 150% 0; }
       100% { background-position: -50% 0; }
   }
   .skeleton-row {
       display: flex; align-items: center; justify-content: space-between;
       padding: 13px 6px; border-bottom: 1px solid #F0EEE7;
   }
   .skeleton-row:last-child { border-bottom: none; }
   .skeleton-line { height: 14px; }
   .skeleton-chip { height: 30px; width: 90px; border-radius: var(--radius-full); }
   .skeleton-bubble { height: 40px; border-radius: var(--radius-lg); }

   /* ============================================================
      TOASTY (zastępują systemowy alert())
      Krótkotrwałe, nieblokujące powiadomienia zamiast okienek
      przeglądarki, które przerywają przepływ i wyglądają archaicznie.
      ============================================================ */
   .toast-container {
       position: fixed;
       left: 50%; bottom: 16px;
       transform: translateX(-50%);
       width: min(92vw, 460px);
       display: flex; flex-direction: column; gap: 8px;
       z-index: 10000;
       pointer-events: none;
   }
   .toast {
       pointer-events: auto;
       display: flex; align-items: flex-start; gap: 10px;
       background: var(--ink);
       color: white;
       padding: 12px 14px;
       border-radius: var(--radius-md);
       box-shadow: var(--shadow-lg);
       font-size: 13.5px;
       line-height: 1.4;
       animation: toastin 0.22s ease-out;
       border-left: 4px solid var(--pitch-light);
   }
   .toast.is-leaving { animation: toastout 0.18s ease-in forwards; }
   .toast-success { border-left-color: var(--success); }
   .toast-error   { border-left-color: var(--card-red); }
   .toast-warning { border-left-color: var(--gold); }
   .toast-icon { font-size: 15px; line-height: 1; margin-top: 1px; }
   .toast-msg { flex: 1; }
   @keyframes toastin { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
   @keyframes toastout { to { opacity: 0; transform: translateY(6px); } }

   /* --- Nagłówek Meczu (murawa o zmierzchu, z bardzo subtelną fakturą koszenia) --- */
   .match-header {
       background:
           repeating-linear-gradient(
               115deg,
               rgba(255,255,255,0.035) 0px,
               rgba(255,255,255,0.035) 26px,
               transparent 26px,
               transparent 52px
           ),
           linear-gradient(160deg, var(--pitch) 0%, var(--pitch-dark) 100%);
       color: white;
       padding: 20px 18px 18px;
       border-radius: var(--radius-lg);
       text-align: center;
       margin-bottom: var(--sp-5);
       position: relative;
       box-shadow: 0 8px 22px rgba(15, 59, 41, 0.28);
   }
   .calendar-nav {
       display: flex;
       justify-content: space-between;
       align-items: center;
       margin-bottom: 8px;
       padding-right: 40px; /* miejsce na przycisk profilu w rogu */
   }
   .calendar-nav h2 {
       font-size: 19px;
       font-weight: 600;
       letter-spacing: 0.03em;
       margin: 0;
   }
   .calendar-nav button {
       background: rgba(255,255,255,0.14);
       color: white;
       border: 1px solid rgba(255,255,255,0.28);
       padding: 6px 16px;
       border-radius: var(--radius-sm);
       cursor: pointer;
       font-size: 16px;
       transition: background 0.2s;
   }
   .calendar-nav button:hover {
       background: rgba(255,255,255,0.26);
   }
   #licznik {
       font-family: 'Oswald', sans-serif;
       font-size: 15px;
       font-weight: 600;
       letter-spacing: 0.03em;
       color: #BFE3D1;
       margin: 6px 0 0;
   }
   .admin-actions { margin-top: var(--sp-4); }

   /* ============================================================
      MENU PROFILU
      Grupuje akcje konta (hasło, powiadomienia, wylogowanie) oraz —
      dla admina — wejścia do "Ustawień par" i "Zarządzania kadrą".
      Dzięki temu nagłówek meczu pokazuje tylko to, co dotyczy samego
      meczu, a rzadziej używane akcje są o jedno kliknięcie dalej,
      zamiast zaśmiecać najważniejszy widok aplikacji.
      ============================================================ */
   .profile-menu {
       position: absolute;
       top: 14px; right: 14px;
   }
   .profile-trigger {
       width: 34px; height: 34px;
       border-radius: var(--radius-full);
       background: rgba(255,255,255,0.16);
       border: 1px solid rgba(255,255,255,0.3);
       color: white;
       font-size: 15px;
       cursor: pointer;
       display: flex; align-items: center; justify-content: center;
       transition: background 0.2s;
   }
   .profile-trigger:hover { background: rgba(255,255,255,0.28); }
   .profile-dropdown {
       display: none;
       position: absolute;
       top: 42px; right: 0;
       width: 240px;
       background: white;
       color: var(--ink);
       border-radius: var(--radius-md);
       box-shadow: var(--shadow-lg);
       border: 1px solid var(--line);
       padding: 8px;
       text-align: left;
       z-index: 500;
   }
   .profile-dropdown.open { display: block; }
   .profile-email {
       font-size: 12px; color: var(--ink-soft);
       padding: 8px 10px 10px;
       border-bottom: 1px solid var(--line);
       margin: 0 0 6px 0;
       word-break: break-all;
   }
   .profile-item {
       width: 100%;
       display: flex; align-items: center; gap: 8px;
       background: transparent; border: none;
       text-align: left;
       padding: 9px 10px;
       border-radius: var(--radius-sm);
       font-size: 13.5px;
       font-family: 'Inter', sans-serif;
       color: var(--ink);
       cursor: pointer;
       transition: background 0.15s;
   }
   .profile-item:hover { background: var(--chalk); }
   .profile-item-danger { color: var(--card-red); }
   .profile-item-danger:hover { background: #FBE3E0; }
   .profile-divider { border-top: 1px solid var(--line); margin: 6px 0; }

   /* --- Menu główne (Zakładki, widok desktop / szerszy ekran) --- */
   .main-tabs {
       display: flex;
       flex-wrap: wrap;
       gap: 6px;
       margin-bottom: var(--sp-5);
       background: #EAE8E0;
       padding: 6px;
       border-radius: var(--radius-md);
   }
   .main-tabs button {
       flex: 1 1 auto;
       min-width: 100px;
       background: transparent;
       color: var(--ink-soft);
       border: none;
       padding: 10px 12px;
       border-radius: var(--radius-sm);
       cursor: pointer;
       font-family: 'Oswald', sans-serif;
       font-size: 13px;
       letter-spacing: 0.03em;
       text-transform: uppercase;
       font-weight: 600;
       transition: all 0.2s;
       text-align: center;
   }
   .main-tabs button.active {
       background: var(--pitch);
       color: white;
       box-shadow: 0 3px 8px rgba(27, 94, 64, 0.3);
   }

   /* ============================================================
      DOLNY PASEK NAWIGACJI (mobile)
      Na małych ekranach zastępuje górne zakładki wzorcem znanym
      z aplikacji natywnych — kciuk sięga celu w jednym ruchu,
      zamiast wracać do góry ekranu przy każdej zmianie widoku.
      Ukryty domyślnie, włączany media-query poniżej.
      ============================================================ */
   .bottom-nav {
       display: none;
   }

   @media (max-width: 640px) {
       body { padding-bottom: calc(var(--bottom-nav-h) + env(safe-area-inset-bottom, 0px) + 14px); }
       .main-tabs { display: none; }
       .bottom-nav {
           display: flex;
           position: fixed;
           left: 0; right: 0; bottom: 0;
           height: calc(var(--bottom-nav-h) + env(safe-area-inset-bottom, 0px));
           padding-bottom: env(safe-area-inset-bottom, 0px);
           background: white;
           border-top: 1px solid var(--line);
           box-shadow: 0 -6px 18px rgba(15, 59, 41, 0.08);
           z-index: 900;
       }
       .bottom-nav button {
           flex: 1;
           display: flex; flex-direction: column; align-items: center; justify-content: center;
           gap: 2px;
           background: transparent;
           border: none;
           color: var(--ink-soft);
           font-family: 'Inter', sans-serif;
           cursor: pointer;
           padding: 6px 2px;
       }
       .bottom-nav button .bn-icon { font-size: 19px; line-height: 1; }
       .bottom-nav button .bn-label { font-size: 10.5px; font-weight: 600; letter-spacing: 0.01em; }
       .bottom-nav button.active { color: var(--pitch); }
       .bottom-nav button.active .bn-icon { transform: translateY(-1px); }
       .toast-container { bottom: calc(var(--bottom-nav-h) + env(safe-area-inset-bottom, 0px) + 14px); }
   }

   /* --- Przełączanie zakładek --- */
   .tab-content { display: none; }
   .tab-content.active { display: block; }

   /* --- Listy i Panele --- */
   .player-list, .settings-panel {
       background: white;
       border-radius: var(--radius-lg);
       border: 1px solid var(--line);
       padding: 15px;
       box-shadow: var(--shadow-md);
   }
   .settings-panel h3:first-child,
   .settings-panel h4:first-child { margin-top: 0; }
   .player-row {
       display: flex;
       flex-wrap: wrap;
       justify-content: space-between;
       align-items: center;
       gap: var(--sp-2);
       padding: 13px 6px;
       border-bottom: 1px solid #F0EEE7;
   }
   /* Imię ma pierwszeństwo do dostępnej przestrzeni; klaster przycisków (rola +
      nieobecność) nie ściska się, tylko trzyma naturalny rozmiar i w razie
      potrzeby zawija się do prawej krawędzi na osobną linię (patrz .actions-container). */
   .player-row > span:first-child { flex: 1 1 140px; min-width: 0; }
   .player-row:last-child { border-bottom: none; }
   .player-row-compact { padding: 8px 4px; }
   .player-row.is-locked { opacity: 0.6; }

   /* --- Statusy i Kolory slotów --- */
   .slot-open {
       color: var(--card-red);
       font-weight: 600;
   }
   .slot-open::before {
       content: "○ ";
   }
   .slot-sub {
       color: var(--pitch-light);
       font-weight: 600;
   }
   .slot-sub::before {
       content: "↑ ";
   }

   /* --- Naszywki ról: złota (sprzęt) / granatowa (wybiera) --- */
   .badge-sprzet, .badge-wybiera {
       display: inline-flex;
       align-items: center;
       color: white;
       padding: 2px 9px;
       border-radius: var(--radius-full);
       font-size: 10.5px;
       font-weight: 700;
       letter-spacing: 0.02em;
       margin-left: 6px;
       box-shadow: inset 0 0 0 1px rgba(255,255,255,0.25);
   }
   .badge-sprzet {
       background: linear-gradient(160deg, var(--gold), #B0812A);
       color: #2B1E05;
   }
   .badge-wybiera {
       background: linear-gradient(160deg, var(--navy), #23385A);
   }

   /* --- Przyciski --- */
   .btn {
       background: var(--pitch);
       color: white;
       border: none;
       padding: 10px 18px;
       border-radius: var(--radius-sm);
       cursor: pointer;
       font-family: 'Inter', sans-serif;
       font-size: 14px;
       font-weight: 600;
       transition: background 0.2s, transform 0.15s;
   }
   .btn:hover { background: var(--pitch-dark); }
   .btn:active { transform: translateY(1px); }
   .btn:focus-visible {
       outline: 3px solid rgba(27, 94, 64, 0.35);
       outline-offset: 2px;
   }
   .btn:disabled { opacity: 0.55; cursor: not-allowed; transform: none; }

   .btn-absence { background: var(--card-red); }
   .btn-absence:hover { background: #A5301F; }

   .btn-success { background: var(--success); }
   .btn-success:hover { background: var(--success-dark); }

   .btn-secondary { background: var(--navy); }
   .btn-secondary:hover { background: #23385A; }

   .btn-outline {
       background: transparent;
       color: var(--pitch);
       border: 2px solid var(--pitch);
   }
   .btn-outline:hover { background: rgba(27, 94, 64, 0.08); }

   .btn-block { width: 100%; }
   .btn-sm { padding: 5px 10px; font-size: 12px; }
   .btn-xs { padding: 3px 8px; font-size: 11.5px; }

   .btn-icon {
       background: #F1F0EA;
       border: 1px solid #DEDBD0;
       border-radius: var(--radius-sm);
       padding: 6px 10px;
       cursor: pointer;
       margin-right: 4px;
       font-size: 14px;
       transition: background 0.2s;
   }
   .btn-icon:hover { background: #E4E1D6; }
   .actions-container { display: flex; align-items: center; flex-wrap: wrap; justify-content: flex-end; gap: 4px; margin-left: auto; flex-shrink: 0; }

   .btn-group { display: flex; gap: 10px; margin-top: var(--sp-4); }
   .btn-group .btn { flex: 1; }
   .btn-group .btn-wide { flex: 2; }

   /* --- Banery Informacyjne --- */
   .status-banner, .cancelled-banner, .future-banner {
       padding: 12px;
       border-radius: var(--radius-md);
       margin-bottom: 15px;
       font-weight: 600;
       text-align: center;
       font-size: 14px;
   }
   .status-banner { background: var(--warn-bg); color: var(--warn-text); border: 1px solid var(--warn-border); }
   .cancelled-banner { background: #FBE3E0; color: var(--card-red); border: 1px solid #F3C2BC; }
   .future-banner { background: #E7E9F5; color: var(--navy); border: 1px solid #CBD0EA; }

   /* ============================================================
      HARMONOGRAM RÓL — lista kart zamiast tabeli
      Na telefonie tabela z trzema kolumnami wymuszała przewijanie
      w bok lub ścieśnianie tekstu do nieczytelności. Karty skalują
      się naturalnie i czytelnie prezentują dwie role na mecz.
      ============================================================ */
   .schedule-list { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
   .schedule-row {
       display: grid;
       grid-template-columns: 1fr;
       gap: 8px;
       padding: 13px 14px;
       background: var(--chalk);
       border: 1px solid var(--line);
       border-radius: var(--radius-md);
   }
   .schedule-row-cancelled { background: #FBE3E0; border-color: #F3C2BC; }
   .schedule-date {
       font-family: 'Oswald', sans-serif;
       font-weight: 600;
       font-size: 12.5px;
       letter-spacing: 0.04em;
       text-transform: uppercase;
       color: var(--pitch);
   }
   .schedule-row-cancelled .schedule-date { color: var(--card-red); }
   .schedule-roles { display: flex; flex-wrap: wrap; gap: 8px; }
   .role-chip {
       display: inline-flex; align-items: center; gap: 5px;
       font-size: 12.5px;
       padding: 5px 10px;
       border-radius: var(--radius-full);
       background: white;
       border: 1px solid var(--line);
       color: var(--ink);
   }
   .role-chip strong { font-weight: 600; }
   .cancelled-text { font-size: 13px; font-weight: 600; color: var(--card-red); }

   @media (min-width: 560px) {
       .schedule-row { grid-template-columns: 92px 1fr; align-items: center; }
   }

   /* --- Tabela Harmonogramu / rozliczeń (skład na tablicy wyników) --- */
   .prediction-table {
       width: 100%;
       border-collapse: collapse;
       font-size: 13px;
       text-align: left;
       margin-top: 10px;
   }
   .prediction-table th, .prediction-table td {
       padding: 12px 10px;
       border-bottom: 1px solid var(--line);
   }
   .prediction-table th {
       background-color: var(--pitch-dark);
       color: white;
       font-family: 'Oswald', sans-serif;
       font-weight: 600;
       letter-spacing: 0.03em;
       text-transform: uppercase;
       font-size: 12px;
   }
   .prediction-table tr:hover td { background-color: var(--chalk); }
   .prediction-table input {
       margin: 0; padding: 6px 8px; font-size: 13px;
   }

   /* ============================================================
      TABELE FINANSOWE W MODALACH — przewijanie poziome z cieniem
      Te siatki zawierają edytowalne pola dla każdego zawodnika —
      zamiana na karty utrudniłaby szybkie porównywanie kolumn.
      Zamiast tego: kontener przewija się w bok, a subtelny cień
      po bokach od razu sygnalizuje, że jest tam więcej treści.
      ============================================================ */
   .table-wrap {
       overflow: auto;
       max-height: 42vh;
       margin-bottom: 15px;
       border: 1px solid var(--line);
       border-radius: var(--radius-md);
       box-shadow:
           inset -16px 0 12px -14px rgba(15, 59, 41, 0.16),
           inset  16px 0 12px -14px rgba(15, 59, 41, 0.16);
   }
   .table-wrap .prediction-table { margin-top: 0; min-width: 400px; }
   .table-wrap thead th { position: sticky; top: 0; z-index: 1; }

   /* ============================================================
      MODALE — na telefonie wysuwają się z dołu jak w aplikacji
      natywnej (łatwiej dosięgnąć kciukiem), na większym ekranie
      pozostają wyśrodkowaną kartą.
      ============================================================ */
   .modal {
       display: none;
       position: fixed;
       z-index: 1000;
       left: 0; top: 0;
       width: 100%; height: 100%;
       background-color: rgba(15, 59, 41, 0.45);
   }
   /* Modal potwierdzenia bywa wywoływany z wnętrza innego, już otwartego modala
      (np. przy zatwierdzaniu rozliczenia) — musi renderować się NAD nim, inaczej
      jest wizualnie i interakcyjnie niedostępny, "schowany" pod tamtym oknem. */
   #modal-potwierdzenie { z-index: 1100; }
   .modal-content {
       /* Wyśrodkowanie przez 4 przesunięcia + margin:auto — w odróżnieniu od
          poprzedniego "margin: 20% auto" nie zależy od proporcji okna. Ten drugi
          zapis liczy procentowy margines PIONOWY względem SZEROKOŚCI kontenera,
          więc na szerokim, niezbyt wysokim oknie (typowy desktop) modal był
          wypychany poniżej widocznego obszaru — stąd „ucięcie" na zrzutach ekranu.
          max-height + overflow-y to dodatkowa gwarancja: nawet gdyby treść była
          bardzo długa, zawsze da się ją przewinąć zamiast tracić dostęp do dołu okna. */
       position: fixed;
       top: 0; right: 0; bottom: 0; left: 0;
       margin: auto;
       /* Bez tego przy top+bottom=0 i wysokości "auto" przeglądarka rozciąga
          box na całą dostępną wysokość zamiast dopasować go do treści —
          stąd niepotrzebnie rozciągnięte okno przy krótkiej treści (np. potwierdzenie). */
       height: fit-content;
       background-color: white;
       padding: 26px 24px;
       border-radius: var(--radius-lg);
       width: 90%;
       max-width: 360px;
       max-height: 88vh;
       overflow-y: auto;
       box-shadow: var(--shadow-lg);
       text-align: center;
       border: 1px solid var(--line);
       animation: modalpop 0.18s ease-out;
   }
   @keyframes modalpop {
       from { opacity: 0; transform: translateY(8px) scale(0.98); }
       to   { opacity: 1; transform: translateY(0) scale(1); }
   }
   .modal-content h3 { margin-top: 0; }
   .modal-text { font-size: 14px; color: var(--ink-soft); white-space: pre-line; line-height: 1.5; }

   @media (max-width: 640px) {
       .modal-content {
           top: auto; left: 0; right: 0; bottom: 0; margin: 0;
           width: 100%; max-width: 100%;
           border-radius: var(--radius-lg) var(--radius-lg) 0 0;
           max-height: 88vh;
           padding-bottom: calc(22px + env(safe-area-inset-bottom, 0px));
           animation: sheetup 0.22s ease-out;
       }
       .modal-content::before {
           content: "";
           display: block;
           width: 40px; height: 4px;
           border-radius: var(--radius-full);
           background: var(--line);
           margin: -10px auto 14px;
       }
   }
   @keyframes sheetup {
       from { transform: translateY(100%); }
       to   { transform: translateY(0); }
   }

   /* --- Karta salda (zakładka Rozliczenia) --- */
   .balance-label { font-size: 13px; color: var(--ink-soft); margin-bottom: 5px; text-transform: uppercase; letter-spacing: 0.05em; }
   .balance-amount { font-size: 34px; font-weight: 700; font-family: 'Oswald', sans-serif; }
   .balance-detail { font-size: 13px; color: var(--ink-soft); margin-top: 10px; }
   .balance-warning {
       margin-top: 15px; background: var(--warn-bg); padding: 12px;
       border-radius: var(--radius-sm); font-size: 14px; border: 1px solid var(--warn-border); color: var(--warn-text);
   }
   .balance-warning strong { font-size: 18px; display: block; margin-top: 5px; }

   /* --- Okno czatu (Szatnia) --- */
   .chat-window {
       flex-grow: 1;
       overflow-y: auto;
       background: var(--chalk);
       border: 1px solid var(--line);
       border-radius: var(--radius-sm);
       padding: 10px;
       margin-bottom: 10px;
       display: flex;
       flex-direction: column;
       gap: 8px;
   }
   .chat-date-divider { display: flex; justify-content: center; margin: 6px 0; }
   .chat-date-divider span {
       font-size: 11px; font-weight: 600; color: var(--ink-soft);
       background: rgba(27, 94, 64, 0.08); padding: 3px 10px; border-radius: var(--radius-full);
   }
   .chat-bubble-row { display: flex; flex-direction: column; align-items: flex-start; margin-bottom: 5px; }
   .chat-bubble-row.mine { align-items: flex-end; }
   .chat-meta { font-size: 10px; color: var(--ink-soft); margin-bottom: 2px; }
   .chat-bubble {
       background: white; color: var(--ink);
       padding: 8px 12px; border-radius: var(--radius-md);
       border: 1px solid var(--line);
       max-width: 85%; font-size: 14px; word-wrap: break-word;
   }
   .chat-bubble.mine { background: var(--pitch-light); color: white; border-color: var(--pitch); }

   /* --- Podpowiedzi wyszukiwania --- */
   .autocomplete-list {
       border: 1px solid #D8D5CB;
       max-height: 180px;
       overflow-y: auto;
       display: none;
       border-radius: var(--radius-md);
       margin-top: -10px;
       margin-bottom: 15px;
       background: white;
       text-align: left;
       box-shadow: var(--shadow-md);
   }
   .autocomplete-item {
       padding: 12px;
       cursor: pointer;
       border-bottom: 1px solid #F0EEE7;
       font-size: 14px;
   }
   .autocomplete-item:last-child { border-bottom: none; }
   .autocomplete-item:hover { background-color: var(--chalk); }
