/* WARIANT WYGLADU „PULPIT" — nakladka na `panel.css`. Wariant 2 z makiety pieciu
   skor panelu (2026-08-24).

   DROGA TEJ ZMIANY, BO ZMIENILA SIE W TRAKCIE: rano polecenie brzmialo „wariant 2
   ALE NA LOCALHOSTA 8092 NIE NA SERWER" i arkusz wchodzil pod warunkiem portu.
   Wieczorem: „zmiana planow, zrobisz to od razu na serwerze" - warunek zdjety,
   wariant jest wygladem panelu wszedzie.

   CZYM TO JEST, A CZYM NIE JEST:
   - to jest DRUGI arkusz, wczytywany PO `panel.css` i nadpisujacy jego tokeny oraz
     kilkanascie regul ukladu. `panel.css` zostaje nietkniety, wiec cofniecie
     wariantu = skreslenie jednej linijki w `baza.html`, bez grzebania w tamtym
     pliku i bez odwracania commita;
   - to jest ROZJAZD Z SYSTEMEM WIZUALNYM REJENTA i trzeba go nazwac wprost:
     `_meta/design-system.md` mowi „grafit + zloto, ciemna plyta u gory", a ten
     arkusz daje biala kolumne i jeden akcent. Dopoki tamten plik nie zostanie
     przepisany, zrodlem prawdy dla APLIKACJI pozostaje on - rozeszly sie panel
     i Rejent, nie system i jego kopia.

   CO ZMIENIA WOBEC STANU OBECNEGO — trzy rzeczy, kazda z powodem:

   1. NAWIGACJA SCHODZI DO LEWEJ KOLUMNY. Dziewiec zakladek w jednym pasie czyta sie
      jak jeden ciag i przy dziesiatej pas sie zlamie; w kolumnie kazda ma wlasna
      linijke, a menu ma miejsce, zeby kiedys dostac grupy („flota / klienci /
      dostep"). Plyta NIE ZNIKA — obraca sie: pas z gory staje sie grafitowa kolumna
      po lewej, wiec „ciemne jest to, co prowadzi miedzy rzeczami" obowiazuje dalej.

      (Przez pierwsze godziny wariantu kolumna byla BIALA i ta zasada byla tu
      zlamana. Zdjal to Mariusz tego samego wieczoru: „pasek lewy zrob czarny, bo
      jest za bialo na tej stronie". Bialy wariant nie zostaje jako opcja — od
      cofania jest git.)

   2. GRANAT JEST INTERAKCJA W TRESCI, ZLOTO ORIENTACJA NA PLYCIE. Stalowy granat
      `#23507A` bierze guziki, odnosniki i obrys aktywnego pola — czyli wszystko,
      co stoi na bieli. Zloto zostaje przy tym, po co jest w systemie: mowi „jestes
      tutaj" na grafitowej kolumnie, gdzie ma 7,78:1.

      Przez chwile — dopoki kolumna byla biala — zloto nie mialo na czym stanac
      (`--pasek-akcent` na bieli to 1,9:1) i granat bral obie role naraz. Kolumna
      wrocila na grafit, wiec role rozeszly sie z powrotem i ekran ma znowu jedno
      wolanie na warstwe, a nie dwa na jednym tle.

   3. NAGLOWKI IDA SANSEM. Literata zostaje w plikach i wraca z kazdym innym
      wariantem, ale pulpit narzedziowy z serifowym tytulem czyta sie jak dokument,
      a nie jak panel. Krojow nie dokladamy — `--font-display` wskazuje na Public
      Sans, ktory juz tu lezy (zasada ZERO CDN zostaje spelniona sama z siebie).

   Ikony przy pozycjach menu sa MASKAMI CSS po `href`, nie znacznikami w szablonie:
   dzieki temu wariant nie dotyka `baza.html` poza jedna linia <link>. */

:root {
    /* --- paleta ----------------------------------------------------------- */
    --ink: #172029;              /* 14,9:1 na karcie */
    --paper: #F1F3F6;            /* podloze aplikacji */
    --surface-2: #FFFFFF;        /* karty */
    --muted: #59636F;            /* 6,0:1 na karcie */
    /* AKCENT GRAFITOWY, NIE BLEKITNY (polecenie Mariusza 2026-08-26: „zmieniasz
       kazdy kolor przycisku z niebieskiego na czarny na calej stronie, nie chce
       widziec niebieskiego przycisku").

       Stalo tu `#23507A` i to ono malowalo KAZDY guzik w panelu, bo `--brand`
       i `--brand-hover` w `panel.css` licza sie z `--accent`. Wracamy do
       `--grafit`, czyli do wartosci, ktora `panel.css` ma u siebie - to nie jest
       nowy kolor, tylko zdjecie nadpisania.

       Zgodne z ksiega marki (`CLAUDE.md`, sek. „Design panelu"): „grafit =
       interakcja, zloto = orientacja i marka, kolor nasycony = znaczenie".
       Blekit byl czwarta barwa, ktorej ten podzial nie przewiduje. */
    --accent: var(--grafit);

    /* `--brand` i `--brand-hover` w panel.css sa liczone z `--accent`, wiec ida
       za nim same. Nie powtarzamy ich tutaj, zeby nie powstalo drugie zrodlo. */

    --line: #C4CBD4;             /* obrys pola formularza */
    --line-strong: #DFE3E9;      /* obrys karty */
    --line-soft: #E7EBF0;        /* linie w rubryce */

    /* Zloto schodzi z ekranu razem z plyta (patrz punkt 2 wyzej). Tokeny zostaja
       zdefiniowane, bo panel.css siega po nie w znaku ekranu i przy roli marki —
       wskazuja na akcent, zeby nie zostawic na bialym pasku barwy o kontrascie
       1,9:1. Od 2026-08-26 akcent jest grafitem, wiec znak ekranu jest grafitowy;
       zloto zostaje tam, gdzie ma sens - na plycie paska i w powitaniu. */
    --mosiadz: var(--accent);
    --mosiadz-ciemny: var(--accent);
    --mosiadz-jasny: var(--accent);

    /* --- pasek: plyta zostaje grafitowa, zmienia sie tylko jej bok --------- */
    /* NIE MA TU ANI JEDNEGO TOKENU PLYTY I TO JEST CALA ZMIANA z wieczora 2026-08-24.
       Wariant nadpisywal ich siedem (`--pasek`, `--pasek-tekst`, `--pasek-tekst-cichy`,
       `--pasek-akcent`, `--plyta-hover`, `--ok-na-plycie`, `--warn-na-plycie`), zeby
       zrobic z kolumny biel. Skreslenie nadpisan przywraca komplet naraz — kazdy
       z nich stoi w `panel.css` POLICZONY POD #1C1F24 razem z kontrastami (15,14:1
       tekst, 7,49:1 pozycja nieaktywna, 7,78:1 zlota kreska). Wpisanie tutaj wlasnych
       wartosci znaczyloby liczenie tego drugi raz i rozjazd przy pierwszej zmianie
       w tamtym pliku.

       UWAGA DLA NASTEPNEJ SESJI: brak tych tokenow to DECYZJA, nie zguba. 2026-08-24
       23:05 zostaly juz raz „odzyskane" commitem `ef4ad57` jako rzekomo zgubione
       w `144129b` — i przywrocilo to biala kolumne, ktora Mariusz kazal zdjac.

       Zostaje jedno: szerokosc. 232 -> 208 px (2026-08-24, przy wyrownywaniu sekcji):
       kolumna menu zabierala tabelom szerokosc na tyle, ze `opis_dokumentu` w rubryce
       AI lamalo sie w srodku wyrazu. Najdluzsza pozycja menu („Dodaj urzadzenie")
       miesci sie w 208 px z zapasem, wiec te 24 px sa czystym zyskiem dla tresci. */
    --pasek-szerokosc: 208px;

    --font-display: var(--font-body);

    /* Rubryka: naglowek przestaje byc czarna belka. Na ekranie, gdzie kazda rzecz
       jest biala karta z cieniem, czarny pas przekrzykiwal wszystko inne. */
    --rubryka-tlo: #F7F9FB;
    --rubryka-tekst: var(--muted);
}

/* --- szkielet: dwie kolumny zamiast paska nad trescia ---------------------- */

/* `:has(> .pasek)` ZAWEZA uklad do ekranow Z MENU. Ekran logowania i strona bledu
   maja wlasny <head> i NIE MAJA paska - bez tego warunku dostawalyby pusta kolumne
   232 px po lewej i karte zepchnieta na prawo. Przegladarka bez `:has` po prostu
   nie wchodzi w ten uklad: menu zostaje pasem u gory, czyli wygladem sprzed wariantu. */
body:has(> .pasek) {
    display: grid;
    grid-template-columns: var(--pasek-szerokosc) minmax(0, 1fr);
    min-height: 100vh;

    /* Kolumna menu STOI (`position: sticky` z `panel.css`), wiec jej wlasne tlo ma
       wysokosc okna, nie strony — na dlugim ekranie konczylo sie w polowie i lewa
       krawedz urywala sie w powietrzu. Plyte maluje wiec cale `body`; pasek daje
       juz tylko to, co w nim stoi.

       BEZ KRESKI MIEDZY PLYTA A PAPIEREM (sek. 2b p. 2): #1C1F24 styka sie z papierem
       kontrastem 15,3:1, wiec krawedz widac sama z siebie. Jasna linia stala tu
       dopoki kolumna byla biala i nie bylo czym tej krawedzi pokazac. */
    background:
        linear-gradient(90deg,
            var(--pasek) 0 var(--pasek-szerokosc),
            var(--paper) var(--pasek-szerokosc));
}

.pasek {
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-6);
    height: 100vh;
    padding: var(--space-6) var(--space-3);
    background: transparent;
    overflow-y: auto;
}

/* ZNAK MARKI. Podmiany pliku TU NIE MA i to jest teraz poprawne: szablon podaje
   wariant „na ciemnym", a kolumna jest ciemna. Dopoki byla biala, wariant podstawial
   przez `content` rysunek na jasne tlo — bialy znak na bialej kolumnie znikal bez
   sladu. Plyta wrocila, wiec podmiana zeszla razem z powodem, dla ktorego stala.

   Lockup lamie sie na dwa wiersze wszedzie, gdzie ten arkusz siega — takze na karcie
   logowania i na stronie bledu, ktore maja wlasny <head> i tez go wczytuja. */
.marka {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-1);
    padding: 0 var(--space-2);
}

/* LOCKUP NA SRODKU, ALE TYLKO W KOLUMNIE MENU (polecenie Mariusza 2026-08-24:
   „wycentruj logo, bo jest tak brzydko po lewej"). W pasie poziomym znak siedzial
   przy lewej krawedzi, bo ZACZYNAL wiersz; w kolumnie 208 px nie zaczyna niczego —
   stoi nad menu jako jego szyld, a szyld wisi na srodku.

   Zawezenie do `.pasek` jest tu istotne: ten sam `.marka` stoi na karcie logowania,
   gdzie znak zapowiada tytul i akapit wyrownane do lewej — wysrodkowany zlamalby
   tam krawedz, wzdluz ktorej czyta sie cala karte. */
.pasek .marka { align-items: center; }

/* Nazwa marki zostaje SERIFEM. `--font-display` wskazuje w tym wariancie na Public
   Sans (naglowki ida sansem, patrz naglowek pliku), ale znak marki naglowkiem nie jest
   — bez tej linii „Inskryptor" w pasku zmienialby krój razem z tytulami ekranow. */
.marka-nazwa { font-family: "Literata Variable", Georgia, serif; }

.marka-rola { font-size: 13px; letter-spacing: .16em; }
.marka-rola::before { display: none; }

/* --- menu: pozycja na wiersz, ikona przed nazwa ---------------------------- */

.pasek nav {
    flex-direction: column;
    align-items: stretch;
    /* 6 px zamiast 1 px (polecenie Mariusza 2026-08-26: „zrob wieksze lekko odstepy
       miedzy tymi"). „Lekko" wziete doslownie: przy 1 px pozycje stykaly sie tlami
       pod kursorem i czytaly jak jedna lista bez przerw, przy 12 px kolumna
       rozjezdzalaby sie na wysokosc ekranu. Szesc daje oddech, nie odstep. */
    gap: 6px;
    margin-left: 0;
    flex: 1;
}

.pasek nav a {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-sm);
    font-size: 16px;
    transition: color var(--ruch-wjazd) var(--ruch-krzywa),
                background-color var(--ruch-wjazd) var(--ruch-krzywa);
}

.pasek nav a:hover { background: var(--plyta-hover); }

/* Kreska „jestes tutaj" obraca sie z poziomu na pion i przenosi na LEWA krawedz:
   pod pozycja w kolumnie czytalaby sie jak separator listy, nie jak wskaznik. */
.pasek nav a::after {
    left: 0;
    right: auto;
    top: 6px;
    bottom: 6px;
    width: 3px;
    height: auto;
    border-radius: 0 2px 2px 0;
    transform: scaleY(0);
    transform-origin: center;
    transition: transform var(--ruch-wjazd) var(--ruch-krzywa);
}

/* MENU ZACHOWUJE SIE DOKLADNIE JAK „KONTA" (polecenie Mariusza 2026-08-26:
   „rzeczy z paska nawigacji mialy miec animacje takie jak konta").

   To znaczy DWIE rzeczy i ani jednej wiecej: pod kursorem samo tlo, a zlota szyna
   przy lewej krawedzi WYLACZNIE przy pozycji aktywnej. Kreska `::after` wjezdzala
   dotad z gory i z dolu do srodka takze pod kursorem - i to bylo to „co innego".

   ⚠️ ZAPIS DWOCH MOICH POMYLEK POD RZAD, zeby nikt nie probowal tego „poprawiac"
   trzeci raz: najpierw przenioslem ruch Z MENU NA KONTA (odwrotnie, niz brzmialo
   polecenie), a potem dolozylem Kontom szyne na hover, ktorej NIGDY nie mialy.
   Wzorzec jest jeden: „Konta" sprzed 26 sierpnia. */
.pasek nav a::after { content: none; }

/* AKTYWNA POZYCJA NIE MA WYPELNIENIA. Stan niosa dwie rzeczy, ktore `panel.css` juz
   daje: zlota kreska przy krawedzi (`::after` wyzej) i jasniejszy, grubszy napis.
   Wypelnienie bylo potrzebne dopoki kolumna byla biala — zlota kreska na bieli ma
   1,9:1 i sama nie udzwignelaby stanu. Na plycie kreska ma 7,78:1 i udzwiga,
   a jasny prostokat zostalby JEDYNA swiecaca plama na czarnej kolumnie: polecenie
   „ten przycisk tez zrob czarny" (Mariusz 2026-08-24) dotyczylo dokladnie jego. */
.pasek nav a.aktywny { box-shadow: inset 3px 0 0 var(--pasek-akcent); }

/* Ikony: jeden ksztalt na zakladke, wycinany maska z SVG stroke 1.8 — ten sam
   rysunek co znaki ekranow, tylko mniejszy. Kolor bierze `currentColor`, wiec
   ikona blednie i zapala sie razem z napisem obok. */
.pasek nav a::before {
    content: "";
    width: 18px;
    height: 18px;
    flex: none;
    background: currentColor;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: 18px 18px;
    mask-size: 18px 18px;
}

.pasek nav a[href="/flota"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="13" rx="2"/><path d="M8 21h8M12 17v4"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="13" rx="2"/><path d="M8 21h8M12 17v4"/></svg>');
}

.pasek nav a[href="/statystyki"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 20V10M10 20V4M16 20v-7M22 20H2"/></svg>');
}

.pasek nav a[href="/panel/nebula"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="18" r="3"/><circle cx="18" cy="18" r="3"/><circle cx="12" cy="5" r="3"/><path d="M12 8v4l-4.5 3.5M12 12l4.5 3.5"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="18" r="3"/><circle cx="18" cy="18" r="3"/><circle cx="12" cy="5" r="3"/><path d="M12 8v4l-4.5 3.5M12 12l4.5 3.5"/></svg>');
}

.pasek nav a[href="/urzadzenia/dodaj"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M12 8v6M9 11h6"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="14" rx="2"/><path d="M12 8v6M9 11h6"/></svg>');
}

.pasek nav a[href="/kancelarie"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21h18M5 21V8l7-4 7 4v13M10 21v-5h4v5"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21h18M5 21V8l7-4 7 4v13M10 21v-5h4v5"/></svg>');
}

.pasek nav a[href="/rejestracje"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M15 7h4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h4"/><path d="M9 7V5a3 3 0 0 1 6 0v2M8 13h8M8 17h5"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M15 7h4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h4"/><path d="M9 7V5a3 3 0 0 1 6 0v2M8 13h8M8 17h5"/></svg>');
}

.pasek nav a[href="/rozmowy"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.4A8 8 0 1 1 21 12z"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.4A8 8 0 1 1 21 12z"/></svg>');
}

.pasek nav a[href="/dysk"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="18" height="12" rx="2"/><path d="M3 10h18"/><circle cx="7" cy="14" r="1"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="18" height="12" rx="2"/><path d="M3 10h18"/><circle cx="7" cy="14" r="1"/></svg>');
}

/* Czas pracy: ta sama tarcza co znak ekranu (`znaki.html`). Bez tej reguly
   `::before` zostaje samym currentColor bez maski i zakladka dostaje PELNY
   KWADRAT zamiast ikony - widac to bylo na pierwszym zrzucie ekranu. */
/* Zadania: ten sam rysunek co znak ekranu. Bez tej reguly `::before`
   zostaje samym currentColor bez maski i zakladka dostaje PELNY KWADRAT. */
.pasek nav a[href="/zadania"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.5 6 8.5 9.5 5M4 14l2 2 3.5-3.5M13 7h7M13 15h7"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6.5 6 8.5 9.5 5M4 14l2 2 3.5-3.5M13 7h7M13 15h7"/></svg>');
}

/* ZGLOSZENIA: dymek rozmowy z wykrzyknikiem. Dymek, bo to CZLOWIEK do nas mowi
   - nie licznik i nie stan maszyny; wykrzyknik, bo mowi o usterce. Ksztalt
   celowo nie powtarza dzwonka ani trojkata ostrzegawczego: te dwa znacza
   „program cos zauwazyl", a to znaczy „ktos to zglosil". */
.pasek nav a[href="/zgloszenia"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><path d="M12 7v4M12 14h.01"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><path d="M12 7v4M12 14h.01"/></svg>');
}

/* POMOC ZDALNA: ekran ze strzałką „wchodzę". Bez tej reguły `::before` zostaje
   pełnym kwadratem (pierwszy zrzut 25.09). */
.pasek nav a[href="/pomoc/prosby"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="12" rx="2"/><path d="M8 20h8M12 16v4M9 10h6M13 8l2 2-2 2"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="12" rx="2"/><path d="M8 20h8M12 16v4M9 10h6M13 8l2 2-2 2"/></svg>');
}

/* INSTALATORY: strzałka w dół do tacy - plik, który kancelaria pobiera. Bez tej
   reguły `::before` zostaje pełnym kwadratem (pierwszy zrzut 03.10). */
.pasek nav a[href="/instalatory"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4v11M7.5 10.5 12 15l4.5-4.5M4 16v2.5A1.5 1.5 0 0 0 5.5 20h13a1.5 1.5 0 0 0 1.5-1.5V16"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4v11M7.5 10.5 12 15l4.5-4.5M4 16v2.5A1.5 1.5 0 0 0 5.5 20h13a1.5 1.5 0 0 0 1.5-1.5V16"/></svg>');
}

.pasek nav a[href="/czas"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8.5"/><path d="M12 7.5V12l3 1.8"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8.5"/><path d="M12 7.5V12l3 1.8"/></svg>');
}

.pasek nav a[href="/konta"]::before {
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 3.6-6 8-6s8 2 8 6"/></svg>');
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 3.6-6 8-6s8 2 8 6"/></svg>');
}

/* --- kto jest zalogowany: na dol kolumny, nie na prawo -------------------- */

.pasek .prawa {
    margin-left: 0;
    margin-top: auto;
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-2);
    padding: var(--space-4) var(--space-2) 0;
    /* Kreska DZIELACA WNETRZE PLYTY, wiec liczona z jej wlasnego tekstu, a nie
       z `--line-strong` — ta jest obrysem karty na papierze i na grafitcie znika. */
    border-top: 1px solid color-mix(in srgb, var(--pasek-tekst) 20%, transparent);
}

.pasek .prawa form { width: 100%; }
.pasek .prawa .przycisk { width: 100%; }

/* „Konta" stoja przy tozsamosci, a nie w menu (polecenie z 2026-08-24) — i tak
   zostaje. W kolumnie dostaja jednak rysunek pozycji menu, bo goly napis miedzy
   loginem a guzikiem „Wyloguj" czytal sie jak podpis, nie jak odnosnik. */
.pasek .prawa .pozycja-prawej {
    display: flex;
    align-items: center;
    /* NA SRODEK (polecenie Mariusza 2026-08-24: „te konta tez daj na srodek").
       `justify-content`, a nie `text-align`: pozycja to ikona I napis, wiec srodkuje
       sie cala para naraz - samo `text-align` przesunieloby napis, zostawiajac ikone
       przy lewej krawedzi. Podswietlenie stanu aktywnego zostaje na lewej krawedzi
       (`inset 3px 0 0`), bo to szyna, nie tlo tekstu - srodkowanie jej nie dotyczy. */
    justify-content: center;
    gap: var(--space-3);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-sm);
    box-shadow: none;
}

.pasek .prawa .pozycja-prawej::before {
    content: "";
    width: 18px;
    height: 18px;
    flex: none;
    background: currentColor;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    -webkit-mask-size: 18px 18px;
    -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 3.6-6 8-6s8 2 8 6"/></svg>');
    mask-size: 18px 18px;
    mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 3.6-6 8-6s8 2 8 6"/></svg>');
}

/* ⚠️ POPRAWKA WLASNEJ POMYLKI (2026-08-26). Zrozumialem polecenie odwrotnie:
   przenioslem ruch Z MENU na „Konta", a mialo byc na odwrot - to „Konta" podobaly
   sie wlascicielowi i to ICH zachowanie mialy dostac pozycje menu. „Konta" wracaja
   wiec do swojego: pelna szyna cieniem wewnetrznym, bez wjazdu. */
.pasek .prawa .pozycja-prawej:hover { background: var(--plyta-hover); }

/* Ten sam wzorzec stanu co w <nav> wyzej — zlota kreska przy lewej krawedzi. Kreska
   jest cieniem wewnetrznym, a nie `::after`, bo `::before` tego elementu trzyma juz
   ikone, a drugiego pseudoelementu nie ma. */
.pasek .prawa .pozycja-prawej.aktywny {
    color: var(--pasek-tekst);
    box-shadow: inset 3px 0 0 var(--pasek-akcent);
}

/* Login i cennik to PODPISY, nie pozycje (polecenie Mariusza 2026-08-24:
   „nazwe wycentruj").

   ⚠️ ZAPIS POPRAWIONY TEGO SAMEGO DNIA. Stalo tu, ze „Konta" zostaja przy lewej
   krawedzi, bo wzdluz niej skanuje sie pozycje wzrokiem. Mariusz rozstrzygnal
   inaczej — „te konta tez daj na srodek" — wiec cala DOLNA czesc kolumny stoi teraz
   na srodku: cennik, login, „Konta" i guzik „Wyloguj". Argument o skanowaniu
   zostaje w mocy dla MENU u gory kolumny i tamte pozycje sie nie ruszyly; dol nie
   jest lista do przebiegania wzrokiem, tylko domknieciem kolumny. */
.pasek .prawa .cennik,
.pasek .prawa .konto-znacznik {
    padding: 0 var(--space-3);
    text-align: center;
}

/* GUZIKA „WYLOGUJ", FOKUSU I BANKI NIEPRZECZYTANYCH TU NIE MA — i to jest cala rzecz.
   Wszystkie trzy nadpisywal wariant pod biala kolumne: guzik dostawal biale tlo
   z granatowym obrysem, obrys fokusu granat zamiast zlota, banka granat zamiast
   czerwieni. Na plycie obowiazuja z powrotem reguly `panel.css` — guzik jest obrysem
   na przezroczystym, bo tlo `--brand` byloby dokladnie barwa plyty i guzik by w niej
   zniknal (sek. 2b), a banka wraca na `--danger`, bo barwa nasycona = znaczenie
   i na grafitcie ma na czym stanac. */

/* --- tresc ---------------------------------------------------------------- */

/* `margin: 0 auto`, nie `0`. Sufit szerokosci zdejmujemy (`none`), wiec dla wiekszosci
   ekranow `auto` liczy sie do zera i nie robi nic — ale ekran Dysku ma WLASNY sufit
   1720 px w `panel.css` i przy nim `margin: 0` przyklejal cala tresc do lewej,
   zostawiajac po prawej pas pustego papieru (na ekranie Mariusza 3440 px: ~1500 px
   pustki). Zgloszone jako „wycentruj zawartosc dysku" 2026-08-24.

   `width: 100%` JEST TU WARUNKIEM, NIE OZDOBA. `main` jest komorka siatki `body`,
   a komorka z marginesami `auto` PRZESTAJE sie rozciagac na cala kolumne - zamiast
   tego kurczy sie do szerokosci wlasnej tresci i dopiero ta reszte dzieli na
   marginesy. Bez tej linii ekran Rozmow zwezal sie z 2192 do 1285 px i szpalta
   uciekala do srodka ekranu. Szerokosc jawna czyni komorke okreslona, wiec `auto`
   znowu tylko srodkuje - i robi to wylacznie tam, gdzie sufit faktycznie stoi. */
main {
    width: 100%;
    margin: 0 auto;
    max-width: none;
    padding: var(--space-6) var(--space-6) var(--space-12);
}

/* NAGLOWKI WIEKSZE I Z WIEKSZYM ODDECHEM POD SPODEM (polecenie Mariusza
   2026-08-26: „powieksz troche naglowki wszystkie i we wszystkich zrob wiekszy
   odstep od naglowka i tresci").

   „TROCHE" WZIETE DOSLOWNIE: h1 26 -> 30 px, h2 18 -> 21 px. To jeden stopien
   skali w gore, a nie nowy krok - panel trzyma dyktat z 4 sierpnia („nieprzejrzyste,
   ma byc wieksze"), wiec skala i tak stoi wyzej niz u Rejenta.

   ODSTEP: naglowek ekranu 24 -> 32 px, naglowek sekcji 12 -> 20 px pod spodem.
   Odstep MALEJE Z GLEBOKOSCIA (kanon: ekran 24 -> karta 24 -> sekcja 12 -> wiersz 8),
   wiec podnosze oba, ale tak, zeby ekran nadal oddychal szerzej niz sekcja. */
h1 { font-size: 30px; letter-spacing: -.02em; font-weight: 700; }
h2 { font-size: 21px; font-weight: 700; letter-spacing: -.01em; margin-bottom: 20px; }
h3 { font-size: 17px; }
.naglowek-ekranu { margin-bottom: var(--space-8); }
.rozmowy-naglowek h2 { margin-bottom: 0; }

.karta { box-shadow: var(--shadow-1); }
/* KAFEL: GLEBIA I ODPOWIEDZ NA KURSOR — WARIANT „WYPELNIENIE OD DOLU"
   (wybor Mariusza 2026-08-26 z pieciu makiet; poprzednia wersja - uniesienie
   o 2 px plus kreska u gory - zostala odrzucona jako „nie podoba mi sie").

   CO SIE DZIEJE: ledwie widoczna warstwa wjezdza od spodu, jak cien nabiegajacy na
   papier. Kafel STOI - nie unosi sie, nie drga. To jest cala roznica wobec
   poprzedniej wersji: kafle stoja po piec w rzedzie, wiec kazde uniesienie zamienia
   pasek liczb w falujaca wstazke przy przejechaniu myszka przez ekran.

   GLEBIA W SPOCZYNKU IDZIE CIENIEM, NIE CIEMNIEJSZYM TLEM - kanon z `CLAUDE.md`.
   Cien ma DWIE warstwy: waska przy styku i szersza w otoczeniu; jedna warstwa daje
   plaska obwodke, ktora czyta sie jak obrys, a nie jak uniesienie. Barwa chlodna
   rgba(20,26,34,…), nigdy czarna - czarny na papierze robi brud.

   ANIMUJEMY WYLACZNIE `transform` PSEUDOELEMENTU I `box-shadow`: obie liczy karta
   graficzna, wiec ruch nie przelicza ukladu strony. Warstwa jest `::before` pod
   trescia (`z-index: 0` vs `position: relative` na dzieciach), wiec nie przyciemnia
   ani liczby, ani etykiety - tylko podloze. */
.kafel {
    position: relative;
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(20, 26, 34, .06), 0 6px 16px -8px rgba(20, 26, 34, .18);
    transition: box-shadow .2s ease;
}
.kafel::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    background: linear-gradient(to top, rgba(23, 32, 41, .07), transparent 62%);
    transform: translateY(100%);
    transition: transform .28s ease;
}
.kafel > * { position: relative; z-index: 1; }
.kafel:hover {
    box-shadow: 0 2px 4px rgba(20, 26, 34, .08), 0 12px 24px -10px rgba(20, 26, 34, .24);
}
.kafel:hover::before { transform: translateY(0); }

/* Kto prosil system o mniej ruchu, dostaje sam cien - warstwa pojawia sie bez
   wjazdu (WCAG 2.3.3). */
@media (prefers-reduced-motion: reduce) {
    .kafel::before { transition: none; }
}

.kafel .wartosc { font-weight: 700; }

/* NAGLOWEK RUBRYKI WRACA NA CIEMNE (polecenie Mariusza 2026-08-24: „wychwyc
   wszystkie poczatki tabel czy innych rzeczy, ktore sa na takim szarawym tle,
   i zmien je na czarne").

   Ten wariant nadpisywal ciemna plyte z `panel.css` na `--rubryka-tlo` #F7F9FB
   i to bylo zrodlo szarosci, ktora Mariusz pokazal na zrzucie. Nadpisanie znika
   w calosci - `panel.css` ma juz naglowek na `--pasek` z jasnym pismem i kreska
   pionowa rgba(244,245,246,.14), wiec wystarczy mu nie przeszkadzac.

   Zgodne z kanonem `CLAUDE.md`: „ciemne jest to, co prowadzi miedzy rzeczami;
   jasne — to, co jest rzecza". Naglowek rubryki prowadzi wzrok po kolumnach,
   wiersze sa rzecza i zostaja na bieli.

   Tokeny `--rubryka-tlo` i `--rubryka-tekst` zostaja zdefiniowane, ale nikt ich juz
   nie uzywa - nie kasuje ich, bo to jedyne miejsce, w ktorym ten wariant nazywal
   wlasna barwe rubryki, i przy nastepnym podejsciu bedzie od czego zaczac. */

/* RUBRYKA DYSKU ZOSTAJE SZARA - i to jest rozstrzygniecie, nie przeoczenie.
   Sciemnilem ja razem z pozostalymi („zmien je na czarne"), a Mariusz odpowiedzial
   na zrzucie z Dysku: „tu mozesz dac szare, bo to wyglada brzydko". Roznica jest
   realna: rubryki floty i statystyk zamykaja TABELE stojaca na papierze, a spis
   plikow lezy na bialej karcie tuz pod paskiem zakladek i drugi ciemny pas robil
   z gornej czesci ekranu grube czarne pietro. Zostaje przy `--surface-2`
   i `--muted` z `panel.css`, wiec nie ma tu zadnej reguly - jest ta notatka,
   zeby nikt nie „dokonczyl" sciemniania przy nastepnym przejsciu. */

/* Rozmowy licza wysokosc jako „okno minus plyta u gory minus oddech ekranu"
   (130 px = 60 + 24 + 48). Przy menu w kolumnie plyta nie zabiera juz nic z gory,
   wiec zostaje sam oddech: 24 nad + 48 pod. Bez tej poprawki karta jest o te
   60 px za niska i pod nia wisi pusty pas. */
.rozmowy-uklad > .karta { height: calc(100vh - var(--space-6) - var(--space-12)); }

/* Krotkie kody (skrot kancelarii, klasa zdarzenia) nie moga sie lamac w srodku:
   `td { overflow-wrap: anywhere }` z panel.css jest dla dlugich hashy, a przy
   weszej tabeli lapalo tez „BIERUN" i rozcinalo je na dwa wiersze. */
.plakietka { white-space: nowrap; }

/* --- szuflada menu (telefon) ------------------------------------------------ */

/* Na szerokim ekranie szuflady NIE MA: `display: contents` zdejmuje opakowanie
   z ukladu, wiec `nav` i `.prawa` sa dalej dziecmi kolumny i biora `flex: 1`
   oraz `margin-top: auto` jak przed jej powstaniem. */
.pasek-szuflada { display: contents; }
.menu-przelacznik,
.menu-tlo { display: none; }

/* WASKIE OKNO: PASEK 56 PX I SZUFLADA (polecenie 2026-09-24: „popraw responsywnosc
   na telefonach, bo sie calkiem ta strona rozjezdza, a w szczegolnosci navbar";
   wybrany wariant „guzik Menu" z dwoch pokazanych).

   CO BYLO ZLE, ZMIERZONE NA 390 PX: `nav { flex: 1 }` stad nadpisywal regule
   telefonu z `panel.css` (`flex-basis: 100%` + przewijanie w bok), bo ten arkusz
   wczytuje sie drugi. Menu dostawalo 73 px szerokosci, zawijalo sie po jednej
   pozycji na wiersz („Flot", „Stat", „Wdr") i pasek mial 468 z 844 px ekranu.

   Szuflada niesie TE SAMA kolumne co szeroki ekran - ikony, pelne nazwy, konto
   i „Wyloguj" na dole - wiec czlowiek widzi na telefonie ten sam panel, a nie
   jego trzecia wersje. Stoi POD paskiem (top 56 px): guzik „Zamknij" zostaje
   dokladnie tam, gdzie palec otworzyl menu. */
@media (max-width: 900px) {
    body:has(> .pasek) {
        grid-template-columns: minmax(0, 1fr);
        background: var(--paper);
    }

    body.menu-otwarte { overflow: hidden; }

    .pasek {
        flex-direction: row;
        flex-wrap: nowrap;
        align-items: center;
        gap: var(--space-3);
        height: 56px;
        padding: 0 var(--space-4);
        background: var(--pasek);
        overflow: visible;
        /* Nad trescia i nad wszystkim, co tresc stawia `position: sticky`. */
        z-index: 40;
    }

    /* `order: 0`, bo `panel.css` daje marce `order: 1` pod tym samym progiem
       i guzik wskakiwal przed logotyp. */
    /* Odstep 12 px: kreske przed „SERWER" ten arkusz zdejmuje (w kolumnie rola stoi
       pod logotypem), wiec w wierszu tylko przerwa oddziela jedno od drugiego. */
    .pasek .marka {
        order: 0;
        flex-direction: row;
        align-items: center;
        gap: var(--space-3);
        margin-right: auto;
        padding: 0;
    }

    /* 44 px wysokosci: to jest cel dotyku, a nie guzik pod kursor. */
    .menu-przelacznik {
        display: inline-flex;
        align-items: center;
        gap: var(--space-2);
        min-height: 44px;
        padding: 0 var(--space-4);
    }

    .menu-przelacznik::before {
        content: "";
        width: 18px;
        height: 18px;
        flex: none;
        background: currentColor;
        -webkit-mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round"><path d="M4 7h16M4 12h16M4 17h16"/></svg>') center / 18px 18px no-repeat;
        mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round"><path d="M4 7h16M4 12h16M4 17h16"/></svg>') center / 18px 18px no-repeat;
    }

    .menu-otwarte .menu-przelacznik::before {
        -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round"><path d="M6 6l12 12M18 6 6 18"/></svg>');
        mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="1.8" stroke-linecap="round"><path d="M6 6l12 12M18 6 6 18"/></svg>');
    }

    /* `visibility` schodzi z opoznieniem rownym wyjazdowi: zamknieta szuflada nie
       moze trzymac fokusu z klawiatury ani odnosnikow dla czytnika ekranu, ale
       wyjazd ma sie jeszcze odegrac do konca. */
    .pasek-szuflada {
        position: fixed;
        top: 56px;
        bottom: 0;
        left: 0;
        z-index: 2;
        width: min(320px, 86vw);
        display: flex;
        flex-direction: column;
        gap: var(--space-6);
        padding: var(--space-4) var(--space-3) var(--space-6);
        background: var(--pasek);
        overflow-y: auto;
        overscroll-behavior: contain;
        transform: translateX(-100%);
        visibility: hidden;
        transition: transform var(--ruch-wjazd) var(--ruch-krzywa),
                    visibility 0s linear var(--ruch-wjazd);
    }

    .menu-otwarte .pasek-szuflada {
        transform: none;
        visibility: visible;
        transition: transform var(--ruch-wjazd) var(--ruch-krzywa);
    }

    /* Tlo przygasza tresc i jest drugim wyjsciem: dotkniecie obok menu je zamyka.
       Barwa chlodna jak cienie, nigdy czarna. */
    .menu-tlo {
        display: block;
        position: fixed;
        inset: 56px 0 0 0;
        z-index: 1;
        background: rgba(20, 26, 34, .5);
        opacity: 0;
        pointer-events: none;
        transition: opacity var(--ruch-wjazd) var(--ruch-krzywa);
    }

    .menu-otwarte .menu-tlo { opacity: 1; pointer-events: auto; }

    /* W szufladzie obowiazuje kolumna - regule pasa z `panel.css` (kolejnosc,
       pelna szerokosc, przewijanie w bok) trzeba tu jawnie zdjac, bo stoja pod
       tym samym progiem. */
    .pasek nav {
        order: 0;
        flex: none;
        margin: 0;
        overflow: visible;
    }

    /* 12 px zamiast 8 px w pionie: pozycja ma 46 px, czyli cel dotyku. */
    .pasek nav a { padding: var(--space-3); }

    .pasek .prawa {
        order: 0;
        margin-left: 0;
        flex: none;
    }

    .pasek .prawa .pozycja-prawej { padding: var(--space-3); }

    main { padding: var(--space-4) var(--space-4) var(--space-8); }
}

/* --- statystyki: dwie kolumny sekcji, jeden rytm ---------------------------- */
/* Polecenie Mariusza 2026-08-24 („wyrownaj te sekcje zeby ladnie wygladaly").
   Ekran statystyk stawia obok siebie dwie kolumny sekcji o roznej liczbie wierszy:
   po lewej dwie tabele, po prawej trzy, w tym dwie puste. Karta „Brak danych" brala
   `--space-12` gory i dolu, czyli byla WYZSZA niz trzywierszowa tabela obok - przez
   co drugi naglowek lewej kolumny stal 44 px nizej niz prawej, trzeci jeszcze nizej,
   i caly ekran wygladal na rozjechany, choc kazda sekcja z osobna byla poprawna.

   Rownanie idzie WSPOLNA MINIMALNA WYSOKOSCIA karty, nie sztywna: sekcja z dluzsza
   tabela dalej rosnie, ale wszystko ponizej tego progu siada w tej samej linii co
   sasiad. Pusty stan przestaje przy tym zwisac u gory karty - dostaje srodek. */
.kolumny > div > .karta { min-height: 232px; }

.kolumny > div > .karta:has(> .pusto) {
    display: grid;
    place-items: center;
}

.kolumny > div > .karta > .pusto { padding: 0; }

/* Te same odstepy miedzy kolumnami co miedzy kartami w kolumnie - inaczej pionowa
   przerwa czytala sie jako scislejsza niz pozioma i kolumny „sklejaly sie" parami. */
.kolumny { gap: var(--space-6); }

/* Siatka statystyk: sekcje sa teraz rodzenstwem (`statystyki.html`), wiec wiersz
   rownaja SAME. Zostaje jedno: „Najczestsze akcje" maja stac w prawej kolumnie,
   a nie wskoczyc pod lewa - w ostatnim rzedzie nie ma dla nich pary. */
.kolumny-statystyk > .sekcja-prawa { grid-column: 2; }

@media (max-width: 900px) {
    /* Jedna kolumna - wymuszony numer kolumny nie ma juz czego trzymac i tylko
       zostawialby pustke po lewej. */
    .kolumny-statystyk > .sekcja-prawa { grid-column: auto; }
}

/* --- naglowek watku na plycie ---------------------------------------------
   Polecenie Mariusza 2026-08-24, potwierdzone po moim bledzie: „i to mialo byc
   czarne". Zdjalem ten pasek godzine wczesniej, biorac jego uwage „nie wiadomo co
   jest czym" za reakcje na niego - dotyczyla czego innego. Wraca.

   Kanon z `CLAUDE.md` jest po stronie tej zmiany: „ciemne jest to, co prowadzi
   miedzy rzeczami; jasne - to, co jest rzecza". Tytul watku prowadzi, wiadomosci
   sa rzecza. Barwa ta sama co plyta nawigacji, zeby ekran mial jeden grafit,
   a nie dwa odcienie obok siebie. Dotyczy WYLACZNIE naglowka watku: naglowek
   listy po lewej zostaje jasny, bo stoi nad spisem i pociemniony zrobilby
   z kolumny drugi pasek nawigacji. */
.rozmowy-prawa > .rozmowy-naglowek {
    background: var(--pasek);
    border-bottom-color: transparent;
    border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    padding: var(--space-3) var(--space-4);
}
.rozmowy-prawa > .rozmowy-naglowek h2 { color: var(--pasek-tekst); }
/* Trzy kropki dziedzicza barwe po karcie, czyli ATRAMENT - a stoja na grafitowej
   plycie i bylyby na niej niewidoczne. Barwe bierze wiec plyta, tak jak `h2` wyzej. */
.rozmowy-prawa > .rozmowy-naglowek .szpalta-przelacznik { color: var(--pasek-tekst-cichy); }
.rozmowy-prawa > .rozmowy-naglowek .szpalta-przelacznik:hover { color: var(--pasek-tekst); }
.rozmowy-prawa > .rozmowy-naglowek .pod,
.rozmowy-prawa > .rozmowy-naglowek .przygasle {
    color: var(--pasek-tekst-cichy);
}

/* --- wejscie do materialow watku ------------------------------------------
   Szpalta prowadzi do ekranu „Materialy" zawezonego do tej rozmowy, wiec ma tu
   stac JEDEN guzik na cala szerokosc, a nie spis nazw plikow. */
.szpalta-wejscie { width: 100%; justify-content: center; }

/* --- naglowek ekranu na srodku --------------------------------------------
   Polecenie Mariusza 2026-08-24: „dodaj wszystkie te napisy z sekcji na srodek".
   Chodzi o wiersz „znak + tytul" na gorze kazdego ekranu (Flota, Statystyki,
   Kancelarie...). Po zdjeciu zdania pod tytulem zostal z niego krotki napis
   przyklejony do lewej krawedzi szerokiej, wysrodkowanej tresci - i wygladal jak
   resztka, a nie jak naglowek.

   `justify-content`, a nie `text-align`: to wiersz flex ze znakiem i tytulem, wiec
   srodkuje sie CALA pare naraz. `align-items: center` zamiast `flex-start`, bo
   wyrownanie do gory mialo sens, gdy pod tytulem stalo zdanie na dwie linie -
   przy samym tytule znak wisial nad linia pisma. Odstep 2px nad znakiem zostaje:
   to optyczne wyrownanie do serifu, nie do gornej krawedzi. */
.naglowek-ekranu {
    justify-content: center;
    align-items: center;
}

/* --- kto tu siedzi ---------------------------------------------------------
   Login stoi tuz nad „Konta" i „Wyloguj", wiec musi sie od nich ROZNIC ROLA,
   a nie sila: gdyby byl po prostu jasniejszy, dolaczylby do nich jako trzecia
   pozycja do kliknięcia. Nadpis wersalikami mowi, ze to podpis, a nie cel;
   sam login dostaje pelna jasnosc pisma, bo to jedyna rzecz w tym bloku,
   ktora czlowiek czyta swiadomie. */
.konto-znacznik {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    padding: var(--space-2) var(--space-3) 0;
    line-height: 1.25;
}
/* PIECZEC ZAMIAST NADPISU. Pierscien z paragrafem jest jedynym kolem w calej
   kolumnie, wiec oko trafia w niego bez czytania - a wlasnie o odroznienie tego
   bloku od pozycji menu chodzilo. Zloto tylko na obrysie i glifie: to orientacja
   („kim tu jestem"), a nie interakcja, wiec nie ma prawa wygladac na klikalne. */
.konto-pieczec {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    border: 2px solid var(--pasek-akcent);
    display: grid;
    place-items: center;
    margin-bottom: 2px;
    font-family: var(--font-display), Georgia, serif;
    font-size: 20px;
    line-height: 1;
    color: var(--pasek-akcent);
}
.konto-pieczec::before { content: "§"; }

/* ZDJECIE KONTA W ZLOTEJ POSWIACIE. Ta sama srednica i ten sam zloty pierscien co
   pieczec, wiec podmiana jednego na drugie nie rusza ukladu ani o piksel. Poswiata
   jest DWUWARSTWOWA: waski pierscien tuz przy krawedzi daje styk, szerszy i slabszy
   rozlewa sie na plyte - jedna warstwa albo znika, albo robi obwodke jak z naklejki.
   Barwa ta sama co `--pasek-akcent`, tylko rozcienczona; zloto zostaje przy swojej
   roli orientacyjnej i nie zamienia sie w drugi akcent interakcji. */
.konto-zdjecie {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--pasek-akcent);
    margin-bottom: 2px;
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--pasek-akcent) 22%, transparent),
                0 0 18px 2px color-mix(in srgb, var(--pasek-akcent) 30%, transparent);
}
.konto-login {
    font-size: 16px;
    font-weight: 600;
    color: var(--pasek-tekst);
}
/* Rola tylko wtedy, gdy nie jest wlascicielem - u wlasciciela byloby to
   powtorzeniem oczywistosci przy kazdym wejsciu. */
.konto-rola {
    font-size: 13px;
    color: var(--pasek-tekst-cichy);
}
