/* ============================================================================
   TSL Tools - dodatki do wyglądu makiety (tsl-makieta-dodatki.css)
   Ładowany ZAWSZE PO tsl-makieta.css (kopia 1:1 pliku design\tsl-makieta.css z dokumentacji wdrożenia;
   jej suma SHA-256 jest zapisana w _PRACA\WYGLAD\H_WYGLAD_BAZOWY\WYNIK.md).
   Architektura: _PRACA\B1_WYGLAD_ARCHITEKTURA\WYNIK.md, rozdz. 1.6, 2.1 (N2), 3.5, 4.2.

   Zasady tego pliku:
   1) WSZYSTKIE klasy mają prefiks mx- (nie zderzają się z 214 klasami makiety ani ze starymi arkuszami aplikacji).
   2) Wartości (kolory, odstępy, promienie, czcionki) pochodzą z makiety. Żadnych nowych kolorów.
   3) Żadnych webfontów, obrazów ani adresów url() (CSP: style-src 'self', img-src 'self' data:).
   4) Kolejność bloków ma znaczenie: nawigacja jako linki - bloki mediów (1100, 750) po regule bazowej.
   ============================================================================ */

/* ============================================================================
   A. NAWIGACJA JAKO LINKI <a> (w makiecie pozycje menu to <button>, w aplikacji to linki)
      Każda reguła = odpowiednik 1:1 reguły ".nav button" z tsl-makieta.css (l.132-147, 407, 424), te same wartości,
      plus text-decoration:none, font:inherit, cursor:pointer (link nie ma ich z reguły "button").
   ============================================================================ */
.nav a{
  border:0;
  border-radius:0;
  background:transparent;
  color:#ddd;
  text-align:left;
  padding:15px 27px;
  min-height:54px;
  display:flex;
  gap:17px;
  align-items:center;
  font:inherit;
  font-size:16px;
  text-decoration:none;
  cursor:pointer;
}
.nav a:hover{background:#202326;color:white}
.nav a.active{background:var(--blue);color:#131f28}
@media(max-width:1100px){
  .nav a{padding:14px 18px;font-size:14px;gap:12px}
}
@media(max-width:750px){
  .nav a{flex:0 0 auto;padding:13px;font-size:12px;min-height:45px;gap:0}
}

/* Konto w pasku górnym jako link (makieta: button.topbar-account, l.526-528) */
a.topbar-account{display:flex;gap:10px;align-items:center;color:#6c7783;border:0;border-radius:4px;background:transparent;padding:0;min-height:39px;flex:0 0 auto;text-align:center;text-decoration:none;cursor:pointer}
a.topbar-account:hover{background:transparent;border:0}

/* ============================================================================
   B. SEKCJA "ADMINISTRACJA" W MENU (tylko administrator) - spoza makiety, z wartości makiety
      Struktura (baza_makieta.html): <nav class="nav mx-nav-admin" aria-labelledby="mx-nav-admin-naglowek">
        <p class="mx-nav-naglowek" id="mx-nav-admin-naglowek">...</p><a>...</a> ... </nav>  (linki bez ikon)
      Nagłówek jak .brand-caption (12px, #91999f, margines 0 28px 14px); linia nad sekcją w kolorze #282c30 (jak .user).
   ============================================================================ */
.mx-nav-admin{margin-top:22px;padding-top:18px;border-top:1px solid #282c30}
.mx-nav-naglowek{font-size:12px;color:#91999f;margin:0 28px 14px;text-transform:uppercase}
/* menu może być wyższe niż okno (6 pozycji + sekcja administratora): przewijanie zamiast ucięcia */
.sidebar{overflow-y:auto}
@media(max-width:750px){
  /* pasek poziomy: sekcja administratora jako drugi pasek pod głównym, bez nagłówka */
  .mx-nav-admin{margin-top:0;padding-top:0;border-top:1px solid #282c30}
  .mx-nav-naglowek{display:none}
}

/* ============================================================================
   C. WYLOGOWANIE (pasek górny): formularz POST z przyciskiem w rozmiarze ".top-tools button" (l.5: 12px, 5px 8px, 30px)
   ============================================================================ */
form.mx-wyloguj{margin:0;display:flex;align-items:center;flex:0 0 auto}
.mx-wyloguj-btn{font-size:12px;padding:5px 8px;min-height:30px}

/* ============================================================================
   D. ZAMIENNIKI ATRYBUTÓW style="..." Z MAKIETY (B1, pkt 3.5; CSP: style-src 'self' nie dopuszcza atrybutu style)
      !important odtwarza pierwszeństwo atrybutu style (wygrywa z każdą regułą bez !important, także o wyższej specyficzności).
      Źródło (M = TSL-makieta-interaktywna.html): linie w komentarzu przy regule.
   ============================================================================ */
.mx-fs-13{font-size:13px!important}                                           /* M:230  blok .user (ukryty przez CSS) */
.mx-p-22-24-0{padding:22px 24px 0!important}                                  /* M:411  nagłówek sekcji "Zapisani kontrahenci" */
.mx-p-0-24-15-mt-10{padding:0 24px 15px!important;margin:10px 0 0!important}  /* M:411  uwaga pod tabelą */
.mx-mt-24-mb-0{margin-top:24px!important;margin-bottom:0!important}           /* M:925  notice w Danych podstawowych */
.mx-m-0{margin:0!important}                                                   /* M:932  nagłówki h3 (kontakty) */
.mx-mw-600-mt-20{max-width:600px!important;margin-top:20px!important}         /* M:932 */
.mx-mt-25{margin-top:25px!important}                                          /* M:932, 1127, 1128, 1441 */
.mx-ta-left{text-align:left!important}                                        /* M:1360 okno przebiegu weryfikacji */
.mx-mt-22{margin-top:22px!important}                                          /* M:1437 Weryfikacja polisy */
.mx-mt-22-mb-0{margin-top:22px!important;margin-bottom:0!important}           /* M:1437 */
.mx-mt-10{margin-top:10px!important}                                          /* M:1444 Mój profil */
.mx-m-18-0-0{margin:18px 0 0!important}                                       /* M:1557 okno przykładowego wyniku zlecenia */

/* ============================================================================
   E. SZEROKOŚCI KOLUMN TABEL (M:415-421 TABLE_COLUMNS; w makiecie style="width:..." na <col>)
      Nazwa: mx-kol-<tabela>-<numer kolumny od 1>. Kolumna bez szerokości (reszta tabeli) nie ma klasy.
      Razem 35 klas (41 kolumn, 6 bez szerokości). Tabela "policies": kolumna 4 (suma ubezpieczenia) tylko dla super administratora.
   ============================================================================ */
/* companies: 7 kolumn */
.mx-kol-companies-1{width:5%}
.mx-kol-companies-2{width:24%}
.mx-kol-companies-3{width:12%}
.mx-kol-companies-4{width:13%}
.mx-kol-companies-5{width:17%}
.mx-kol-companies-6{width:13%}
/* home: 8 kolumn */
.mx-kol-home-1{width:5%}
.mx-kol-home-2{width:20%}
.mx-kol-home-3{width:11%}
.mx-kol-home-4{width:12%}
.mx-kol-home-5{width:15%}
.mx-kol-home-6{width:12%}
.mx-kol-home-8{width:140px}
/* licenses: 7 kolumn */
.mx-kol-licenses-1{width:48px}
.mx-kol-licenses-2{width:18%}
.mx-kol-licenses-3{width:19%}
.mx-kol-licenses-4{width:14%}
.mx-kol-licenses-6{width:17%}
.mx-kol-licenses-7{width:90px}
/* policies: 6 kolumn */
.mx-kol-policies-1{width:22%}
.mx-kol-policies-2{width:22%}
.mx-kol-policies-3{width:16%}
.mx-kol-policies-4{width:15%}
.mx-kol-policies-6{width:90px}
/* vehicles: 8 kolumn */
.mx-kol-vehicles-1{width:48px}
.mx-kol-vehicles-2{width:15%}
.mx-kol-vehicles-3{width:24%}
.mx-kol-vehicles-4{width:10%}
.mx-kol-vehicles-5{width:12%}
.mx-kol-vehicles-6{width:14%}
.mx-kol-vehicles-8{width:90px}
/* drivers: 5 kolumn */
.mx-kol-drivers-1{width:18%}
.mx-kol-drivers-2{width:20%}
.mx-kol-drivers-3{width:30%}
.mx-kol-drivers-5{width:90px}

/* ============================================================================
   E2. KAFLE OBSZARÓW JAKO LINKI (w makiecie button.home-area-card, l.149-150, 1041, 1049; w aplikacji <a>)
       Te same wartości co reguły "button.home-area-card" (poza dziedziczonymi z "button": font, cursor) plus text-decoration:none.
   ============================================================================ */
a.home-area-card{
  display:grid;
  grid-template-columns:46px minmax(0,1fr);
  grid-template-rows:1fr auto;
  gap:15px 19px;
  align-content:stretch;
  text-align:left;
  border:1px solid #c6dff1;
  border-radius:5px;
  padding:25px;
  background:linear-gradient(120deg,#f4f9fd,#edf5fc);
  min-height:208px;
  color:#111;
  text-decoration:none;
  cursor:pointer;
}
a.home-area-card:hover{background:#e7f2fa;border-color:#98c2df}
@media(max-width:1100px){
  a.home-area-card{padding:19px;grid-template-columns:35px minmax(0,1fr);gap:12px;min-height:220px}
}
@media(max-width:850px){
  a.home-area-card{min-height:0;grid-template-columns:40px minmax(0,1fr)}
}

/* ============================================================================
   F. STRONA PRÓBNA /admin/galeria-wyglad (galeria_makieta.html) - tylko administrator
      Odpowiednik bloku g-* z design\galeria.html (ramki, podpisy, przeniesienie elementów fixed do zwykłego przepływu).
      Kolory ramek i podpisów (#9fb1bf, #44525e, #8a96a2) są WYŁĄCZNIE częścią galerii, nie produktu.
   ============================================================================ */
.mx-gal-wrap{max-width:1280px;margin:0 auto;padding:0 0 60px}
.mx-gal-lead{max-width:900px;color:#44525e;font-size:14px}
.mx-gal-toc{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:13px;margin:14px 0 30px;padding:12px 14px;background:#fff;border:1px solid #dce2e7}
.mx-gal-toc a{color:#244f72}
.mx-gal-sek{margin:0 0 48px}
.mx-gal-sek>h2{font-size:21px;margin:0 0 4px;padding-top:6px;border-top:2px solid #244f72}
.mx-gal-sek>.mx-gal-opis{font-size:13px;color:#44525e;margin:0 0 12px;max-width:980px}
.mx-gal-ramka{border:1px dashed #9fb1bf;background:var(--canvas);margin:0 0 6px;position:relative;overflow:auto}
.mx-gal-bialy{background:#fff}
.mx-gal-ciemny{background:#08090a;color:#fff}
.mx-gal-pad{padding:18px}
.mx-gal-podpis{font:12px/1.5 Consolas,"Courier New",monospace;color:#44525e;margin:5px 0 18px;max-width:1100px}
.mx-gal-wiersz{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}
.mx-gal-wiersz-srodek{align-items:center}
.mx-gal-ikony{gap:26px;color:#17212b}
.mx-gal-w240{width:240px}
.mx-gal-w230{width:max-content;min-width:230px;max-width:100%}
.mx-gal-tlo-okien{background:#8a96a2}
.mx-gal-ramka .sidebar{position:relative;height:560px;z-index:0}
.mx-gal-ramka .toast{position:static;display:inline-block;margin:12px}
.mx-gal-ramka dialog{position:static;display:block;margin:0 auto 18px}
.mx-gal-ramka .content{margin:0 auto}
.mx-gal-ramka .topbar{width:100%}
.mx-gal-ramka .mx-gal-okno-520{width:520px}
.mx-gal-ramka .mx-gal-okno-530{width:530px}
.mx-gal-ramka .mx-gal-okno-540{width:540px}
.mx-gal-ramka .profile-window{min-height:0}
.mx-gal-ramka .mx-gal-bez-pad{padding:0}
.mx-gal-ramka .content.mx-gal-bez-pad-gora{padding-top:0}
.mx-gal-ramka .content.mx-gal-bez-pad-dol{padding-bottom:0}
.mx-gal-flagi{margin:14px 0 0}
.mx-gal-odstep-36{gap:36px}
.mx-gal-ikona-blad{color:#bd2828}
.mx-gal-ikona-wgraj{color:#176abc}

/* Dymek błędu zostaje do zamknięcia (decyzja właściciela 21.10, W5): przycisk × w kolorze dymku */
.toast .mx-toast-zamknij{margin-left:12px;padding:0 4px;border:0;background:transparent;color:inherit;font:inherit;font-weight:700;line-height:1;cursor:pointer}

/* ===== CLAUDE DESIGN (21.10.2026): tsl-design-dodatki.css włączony 1:1 jako sekcja tsl-x-*; źródło
   PROMPTY/CLAUDE_DESIGN/wynik/tsl-design-dodatki.css; jedyna zmiana: selektor .registry-state-icon .loading-dot zawężony
   do .tsl-x-run. Nie edytować ręcznie — nowa wersja z Claude Design zastępuje całą sekcję. ===== */
/* TSL Tools: tsl-design-dodatki.css
   Nowe reguły do makiety. Ładować PO 03_tsl-makieta.css, którego nie zmieniamy.
   Każda nowa klasa ma przedrostek tsl-x-. Kolory, czcionki i odstępy pochodzą z 03_tsl-makieta.css.
   Wyjątki i uzasadnienia: RAPORT.md, część 3. Punkty łamania jak w makiecie (1100, 750, 600, 420).

   Klasy i elementy:
   tsl-x-nav-link, tsl-x-nav-group, tsl-x-nav-group-label, tsl-x-sidebar-scroll  S1, S2
   tsl-x-top-actions, tsl-x-account-link, tsl-x-logout ..................... S3
   tsl-x-footer .............................................................. S4
   tsl-x-auth, tsl-x-auth-card, tsl-x-auth-title, tsl-x-auth-lead,
   tsl-x-auth-field, tsl-x-auth-links, tsl-x-auth-foot ...................... P1, P2, P3
   tsl-x-notice-red .......................................................... P1, P3, P7, W3, W9
   tsl-x-empty-icon .......................................................... P5
   tsl-x-run, tsl-x-run-head, tsl-x-run-meta, tsl-x-run-actions,
   [data-tsl-x-p] (szerokość .progress-line), tsl-x-progress-label, tsl-x-registry-head,
   tsl-x-timed, tsl-x-source-row, tsl-x-source-time ........................ P6, W10
   tsl-x-section, tsl-x-relations, tsl-x-table ............................. P7, P8, P9, P10, W10
   tsl-x-report-actions, tsl-x-note, tsl-x-hash, tsl-x-file-links, tsl-x-link  P8
   tsl-x-form, tsl-x-form-actions, tsl-x-after-table ........................ P9, P10
   tsl-x-two-col, tsl-x-consent, tsl-x-has-error ............................ P10
   tsl-x-loading ............................................................. W1
   tsl-x-dialog-520, tsl-x-dialog-530, tsl-x-dialog-1100 ................... P9, W4, W6, W7, W9
   tsl-x-card-head, tsl-x-notice-action ...................................... W1, W2, W3
   tsl-x-toast-ok, tsl-x-toast-warn, tsl-x-toast-error, tsl-x-toast-icon .... W5
   tsl-x-upload-progress, tsl-x-file-error, tsl-x-file-done, tsl-x-file-actions  W8
   tsl-x-preview-bar, tsl-x-preview-stream .................................. W9
   tsl-x-col-* (szerokości kolumn zamiast style="width") ................... P7, P8, P9, P10, W10
*/

/* S1: pozycje menu jako linki; wygląd 1:1 z .nav button */
.nav a.tsl-x-nav-link{display:flex;gap:17px;align-items:center;min-height:54px;padding:15px 27px;border:0;border-radius:0;background:transparent;color:#ddd;font-size:16px;line-height:1.5;text-align:left;text-decoration:none}
.nav a.tsl-x-nav-link:hover{background:#202326;color:#fff}
.nav a.tsl-x-nav-link.active,.nav a.tsl-x-nav-link[aria-current="page"]{background:var(--blue);color:#131f28}

/* S2: grupa „Administracja” pod pozycjami użytkownika */
.tsl-x-nav-group{display:grid;gap:6px;margin-top:12px;padding-top:16px;border-top:1px solid #282c30}
.tsl-x-nav-group-label{margin:0 28px 2px;font-size:12px;color:#91999f;text-transform:uppercase}
/* Menu administratora ma 11 pozycji i na ekranie 1440×900 nie mieści się w pionie: przewijanie samego menu */
.sidebar.tsl-x-sidebar-scroll{overflow-y:auto;overscroll-behavior:contain}

/* S3: profil i wylogowanie w pasku górnym */
.tsl-x-top-actions{display:flex;align-items:center;gap:15px;flex:0 0 auto}
a.tsl-x-account-link{display:flex;gap:10px;align-items:center;flex:0 0 auto;min-height:39px;padding:0;color:#6c7783;text-decoration:none;border-radius:20px}
.tsl-x-logout{margin:0}
.tsl-x-logout button{font-size:12px;padding:5px 8px;min-height:30px}

/* S4: stopka produkcyjna; kolor ciemniejszy niż w makiecie (Z8) */
.footer.tsl-x-footer{color:#5c6c79}

/* P1–P3: logowanie, przypomnienie hasła, nowe hasło */
.tsl-x-auth{min-height:100vh;display:flex;flex-direction:column;align-items:center;gap:22px;padding:72px 16px 32px;background:var(--canvas)}
.tsl-x-auth-card{width:460px;max-width:100%;background:#fff;border:1px solid #c8d4dd;border-radius:6px;box-shadow:0 20px 100px #12293c33;overflow:hidden}
.tsl-x-auth-card .brand{display:block;width:54px;margin:0 0 22px}
.tsl-x-auth-card .eyebrow{margin-bottom:6px}
.tsl-x-auth-title{font-size:23px;font-weight:500;line-height:1.25;letter-spacing:0;margin:0 0 20px}
.tsl-x-auth-lead{font-size:13px;color:var(--muted);margin:-8px 0 18px}
.tsl-x-auth-field{margin-bottom:16px}
.tsl-x-auth-field .error{margin:6px 0 0}
.tsl-x-auth-field .field-note,.tsl-x-form .field-note{margin-bottom:0}
.tsl-x-auth-card .check{font-size:13px;margin:-4px 0 16px}
.tsl-x-auth-card .notice{margin:0 0 18px}
.tsl-x-auth-card button.primary{width:100%;margin-top:4px}
.tsl-x-auth-links{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;margin:16px 0 0;font-size:13px}
.tsl-x-auth a{color:var(--blue-dark);text-underline-offset:2px}
.tsl-x-auth a:hover{color:#173b55}
.tsl-x-auth-card .dialog-footer{justify-content:flex-start;font-size:12px;color:#5c6c79}
.tsl-x-auth-card .dialog-footer p{margin:0}
.tsl-x-auth-foot{margin:0;font-size:11px;color:#5c6c79}
/* Czarny pas po lewej na ekranie logowania (makieta Logowanie.dc.html, .s01-bok; demo.tsltools.eu 01.11.2026). Karta po prawej bez zmian. */
.tsl-x-auth-uklad{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);min-height:100vh}
.tsl-x-auth-uklad .tsl-x-auth{justify-content:center}
.tsl-x-auth-bok{background:#000;color:#fff;padding:48px 52px;display:flex;flex-direction:column;justify-content:space-between;gap:30px}
.tsl-x-auth-bok .brand{margin:0;color:#fff}
.tsl-x-auth-bok .brand-square{width:54px;height:54px;font-size:31px;border-color:#fff}
.tsl-x-auth-bok .brand-tools{width:54px;letter-spacing:5px;font-size:7px}
.tsl-x-auth-bok-tytul{font-size:30px;font-weight:600;line-height:1.25;letter-spacing:-.5px;margin:0 0 10px;max-width:520px}
.tsl-x-auth-bok-opis{margin:0;color:#cfcfcf;font-size:15px;max-width:520px}
.tsl-x-auth-bok-stopka{margin:0;font-size:12.5px;color:#9aa3ab}
/* Logo zostaje tylko na czarnym pasie (właściciel 01.11.2026); gdy pas jest ukryty (wąski ekran), logo w karcie wraca */
.tsl-x-auth-uklad .tsl-x-auth-card .brand{display:none}
@media(max-width:900px){.tsl-x-auth-uklad{display:block}.tsl-x-auth-bok{display:none}.tsl-x-auth-uklad .tsl-x-auth-card .brand{display:block}}
/* Licencje: bez przycisku „Skanuj dokument i uzupełnij dane” (demo 01.11.2026) zostają dwa — „Usuń” po lewej, „Wróć do Listy” po prawej */
.license-actions.tsl-x-dwa-przyciski:not([hidden]){display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px}

/* Komunikat błędu w kolorach podpowiedzi błędu pola z makiety */
.notice.tsl-x-notice-red{background:#fbecec;border-color:#e0aaaa;color:#952828}
.notice.tsl-x-notice-action{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px}
.notice.tsl-x-notice-action button{min-height:34px;padding:6px 14px}

/* Odstęp nagłówka karty z tabelą: w makiecie zapisany atrybutem style="padding:22px 24px 0", którego CSP nie dopuszcza */
.section-head.tsl-x-card-head{padding:22px 24px 0}

/* P5: ikona nad pustym stanem */
.tsl-x-empty-icon{display:block;width:46px;height:46px;margin:0 auto 14px;color:#0d1923}

/* P6: przebieg weryfikacji na żywo */
.tsl-x-run{display:grid;gap:18px}
.tsl-x-run-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px 22px;flex-wrap:wrap}
.tsl-x-run-head h2{margin:0 0 6px;font-size:21px;font-weight:400}
.tsl-x-run-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0;font-size:13px;color:var(--muted)}
.tsl-x-run-actions{display:grid;justify-items:end;gap:6px;max-width:320px}
.tsl-x-run-actions .tsl-x-note{text-align:right}
.tsl-x-note{margin:0;font-size:12px;color:var(--muted)}
/* Pasek postępu: .progress-line z makiety. Szerokość z atrybutu data-tsl-x-p (0–100) zamiast style="width" (CSP). */
.tsl-x-run .progress-line,.tsl-x-upload-progress .progress-line{margin:0}
.progress-line>span[data-tsl-x-p="0"]{width:0%}.progress-line>span[data-tsl-x-p="1"]{width:1%}.progress-line>span[data-tsl-x-p="2"]{width:2%}.progress-line>span[data-tsl-x-p="3"]{width:3%}.progress-line>span[data-tsl-x-p="4"]{width:4%}.progress-line>span[data-tsl-x-p="5"]{width:5%}.progress-line>span[data-tsl-x-p="6"]{width:6%}.progress-line>span[data-tsl-x-p="7"]{width:7%}.progress-line>span[data-tsl-x-p="8"]{width:8%}.progress-line>span[data-tsl-x-p="9"]{width:9%}.progress-line>span[data-tsl-x-p="10"]{width:10%}.progress-line>span[data-tsl-x-p="11"]{width:11%}.progress-line>span[data-tsl-x-p="12"]{width:12%}.progress-line>span[data-tsl-x-p="13"]{width:13%}.progress-line>span[data-tsl-x-p="14"]{width:14%}.progress-line>span[data-tsl-x-p="15"]{width:15%}.progress-line>span[data-tsl-x-p="16"]{width:16%}.progress-line>span[data-tsl-x-p="17"]{width:17%}.progress-line>span[data-tsl-x-p="18"]{width:18%}.progress-line>span[data-tsl-x-p="19"]{width:19%}.progress-line>span[data-tsl-x-p="20"]{width:20%}.progress-line>span[data-tsl-x-p="21"]{width:21%}.progress-line>span[data-tsl-x-p="22"]{width:22%}.progress-line>span[data-tsl-x-p="23"]{width:23%}.progress-line>span[data-tsl-x-p="24"]{width:24%}.progress-line>span[data-tsl-x-p="25"]{width:25%}.progress-line>span[data-tsl-x-p="26"]{width:26%}.progress-line>span[data-tsl-x-p="27"]{width:27%}.progress-line>span[data-tsl-x-p="28"]{width:28%}.progress-line>span[data-tsl-x-p="29"]{width:29%}.progress-line>span[data-tsl-x-p="30"]{width:30%}.progress-line>span[data-tsl-x-p="31"]{width:31%}.progress-line>span[data-tsl-x-p="32"]{width:32%}.progress-line>span[data-tsl-x-p="33"]{width:33%}.progress-line>span[data-tsl-x-p="34"]{width:34%}.progress-line>span[data-tsl-x-p="35"]{width:35%}.progress-line>span[data-tsl-x-p="36"]{width:36%}.progress-line>span[data-tsl-x-p="37"]{width:37%}.progress-line>span[data-tsl-x-p="38"]{width:38%}.progress-line>span[data-tsl-x-p="39"]{width:39%}.progress-line>span[data-tsl-x-p="40"]{width:40%}.progress-line>span[data-tsl-x-p="41"]{width:41%}.progress-line>span[data-tsl-x-p="42"]{width:42%}.progress-line>span[data-tsl-x-p="43"]{width:43%}.progress-line>span[data-tsl-x-p="44"]{width:44%}.progress-line>span[data-tsl-x-p="45"]{width:45%}.progress-line>span[data-tsl-x-p="46"]{width:46%}.progress-line>span[data-tsl-x-p="47"]{width:47%}.progress-line>span[data-tsl-x-p="48"]{width:48%}.progress-line>span[data-tsl-x-p="49"]{width:49%}.progress-line>span[data-tsl-x-p="50"]{width:50%}.progress-line>span[data-tsl-x-p="51"]{width:51%}.progress-line>span[data-tsl-x-p="52"]{width:52%}.progress-line>span[data-tsl-x-p="53"]{width:53%}.progress-line>span[data-tsl-x-p="54"]{width:54%}.progress-line>span[data-tsl-x-p="55"]{width:55%}.progress-line>span[data-tsl-x-p="56"]{width:56%}.progress-line>span[data-tsl-x-p="57"]{width:57%}.progress-line>span[data-tsl-x-p="58"]{width:58%}.progress-line>span[data-tsl-x-p="59"]{width:59%}.progress-line>span[data-tsl-x-p="60"]{width:60%}.progress-line>span[data-tsl-x-p="61"]{width:61%}.progress-line>span[data-tsl-x-p="62"]{width:62%}.progress-line>span[data-tsl-x-p="63"]{width:63%}.progress-line>span[data-tsl-x-p="64"]{width:64%}.progress-line>span[data-tsl-x-p="65"]{width:65%}.progress-line>span[data-tsl-x-p="66"]{width:66%}.progress-line>span[data-tsl-x-p="67"]{width:67%}.progress-line>span[data-tsl-x-p="68"]{width:68%}.progress-line>span[data-tsl-x-p="69"]{width:69%}.progress-line>span[data-tsl-x-p="70"]{width:70%}.progress-line>span[data-tsl-x-p="71"]{width:71%}.progress-line>span[data-tsl-x-p="72"]{width:72%}.progress-line>span[data-tsl-x-p="73"]{width:73%}.progress-line>span[data-tsl-x-p="74"]{width:74%}.progress-line>span[data-tsl-x-p="75"]{width:75%}.progress-line>span[data-tsl-x-p="76"]{width:76%}.progress-line>span[data-tsl-x-p="77"]{width:77%}.progress-line>span[data-tsl-x-p="78"]{width:78%}.progress-line>span[data-tsl-x-p="79"]{width:79%}.progress-line>span[data-tsl-x-p="80"]{width:80%}.progress-line>span[data-tsl-x-p="81"]{width:81%}.progress-line>span[data-tsl-x-p="82"]{width:82%}.progress-line>span[data-tsl-x-p="83"]{width:83%}.progress-line>span[data-tsl-x-p="84"]{width:84%}.progress-line>span[data-tsl-x-p="85"]{width:85%}.progress-line>span[data-tsl-x-p="86"]{width:86%}.progress-line>span[data-tsl-x-p="87"]{width:87%}.progress-line>span[data-tsl-x-p="88"]{width:88%}.progress-line>span[data-tsl-x-p="89"]{width:89%}.progress-line>span[data-tsl-x-p="90"]{width:90%}.progress-line>span[data-tsl-x-p="91"]{width:91%}.progress-line>span[data-tsl-x-p="92"]{width:92%}.progress-line>span[data-tsl-x-p="93"]{width:93%}.progress-line>span[data-tsl-x-p="94"]{width:94%}.progress-line>span[data-tsl-x-p="95"]{width:95%}.progress-line>span[data-tsl-x-p="96"]{width:96%}.progress-line>span[data-tsl-x-p="97"]{width:97%}.progress-line>span[data-tsl-x-p="98"]{width:98%}.progress-line>span[data-tsl-x-p="99"]{width:99%}.progress-line>span[data-tsl-x-p="100"]{width:100%}
.tsl-x-progress-label{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;margin:8px 0 0;font-size:12px;color:var(--muted)}
.tsl-x-registry-head{display:flex;align-items:center;gap:12px;margin:0;padding:15px 16px;border-bottom:1px solid #dce2e7;font-size:13px;font-weight:600}
.tsl-x-registry-head .badge{margin-left:auto;font-weight:400}
.tsl-x-run .registry-source-state.pending,.tsl-x-run .registry-source-state.not-applicable,.tsl-x-run .registry-state-icon.pending,.tsl-x-run .registry-state-icon.not-applicable{color:#5c6c79}
.registry-source.tsl-x-timed>summary{grid-template-columns:18px minmax(0,1fr) auto 56px auto}
.tsl-x-source-row{display:grid;grid-template-columns:18px minmax(0,1fr) auto 56px;align-items:center;gap:12px;padding:13px 16px;min-height:44px}
.tsl-x-source-time{font-size:11px;color:#5c6c79;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.tsl-x-run .registry-state-icon .loading-dot{vertical-align:-2px}

/* P7–P10: sekcje i tabele */
.tsl-x-section{margin-top:34px}
.tsl-x-section>.section-head{margin-bottom:16px}
.tsl-x-relations{display:grid;gap:24px}
.tsl-x-relations h3{margin:0 0 8px}
.tsl-x-relations .notice{margin:0}
.tsl-x-table th{color:#5c6c79}
.tsl-x-table td.tsl-x-empty-cell{padding:22px 10px;color:var(--muted);text-align:center}
.tsl-x-section .record-table{min-width:600px}
table.tsl-x-sessions{min-width:520px}
.tsl-x-report-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin:0 0 18px}
.tsl-x-report-actions .tsl-x-note{flex:1 1 220px}
.tsl-x-hash{font-family:Consolas,"Courier New",monospace;font-size:12px;white-space:nowrap}
.tsl-x-file-links{display:flex;flex-wrap:wrap;gap:4px 14px}
a.tsl-x-link{color:var(--blue-dark);text-decoration:underline;text-underline-offset:2px}
a.tsl-x-link:hover{color:#173b55}
.tsl-x-form{display:grid;gap:16px;max-width:460px}
.tsl-x-form .notice{margin:0}
.tsl-x-form .error{margin:6px 0 0}
.tsl-x-form-actions{display:flex;flex-wrap:wrap;align-items:center;gap:9px}
.tsl-x-after-table{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin-top:16px}
.tsl-x-two-col{display:grid;grid-template-columns:minmax(0,3fr) minmax(320px,2fr);gap:23px;align-items:start}
.tsl-x-two-col>.card{margin-bottom:0}
.driver-consent.tsl-x-consent{margin:4px 0 0;font-size:14px}
.tsl-x-consent.tsl-x-has-error{outline:1px solid #c53838;outline-offset:6px;background:#fff5f5}
col.tsl-x-col-5{width:5%}
col.tsl-x-col-12{width:12%}
col.tsl-x-col-13{width:13%}
col.tsl-x-col-15{width:15%}
col.tsl-x-col-16{width:16%}
col.tsl-x-col-18{width:18%}
col.tsl-x-col-20{width:20%}
col.tsl-x-col-17{width:17%}
col.tsl-x-col-22{width:22%}
col.tsl-x-col-24{width:24%}
col.tsl-x-col-26{width:26%}
col.tsl-x-col-30{width:30%}
col.tsl-x-col-36{width:36%}
col.tsl-x-col-act{width:90px}

/* W1: wczytywanie */
.tsl-x-loading{display:flex;align-items:center;justify-content:center;gap:10px;margin:0;padding:40px 20px;color:var(--muted);font-size:13px}

/* W4, W6, W7, W9, P9: szerokości okien (makieta ustawia je atrybutem style, którego CSP nie dopuszcza) */
dialog.tsl-x-dialog-520{width:520px}
dialog.tsl-x-dialog-530{width:530px}
dialog.tsl-x-dialog-1100{width:1100px}

/* W5: odmiany komunikatu chwilowego (kolory z .notice.green, .notice.amber i podpowiedzi błędu) */
.toast.tsl-x-toast-ok{background:#eef8f1;color:#346648;border:1px solid #c8dfce}
.toast.tsl-x-toast-warn{background:#fff8e8;color:#745b22;border:1px solid #e7d7ac}
.toast.tsl-x-toast-error{background:#fbecec;color:#952828;border:1px solid #e0aaaa}
.tsl-x-toast-icon{display:inline-block;min-width:14px;margin-right:8px;font-weight:700}

/* W8: wysyłanie pliku */
.tsl-x-upload-progress{display:grid;gap:6px;margin-top:10px;font-size:12px;color:var(--muted)}
.file-chip.tsl-x-file-error{background:#fbecec;color:#952828}
.file-chip.tsl-x-file-done,.file-chip.tsl-x-file-error{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px}
.tsl-x-file-actions{display:flex;flex-wrap:wrap;gap:4px 14px}
.tsl-x-file-actions button{font-size:12px;min-height:24px}

/* W9: podgląd skanu na kanwie */
.tsl-x-preview-bar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 15px;padding:7px 10px;background:#f7f9fb;font-size:12px}
.tsl-x-preview-bar .row{gap:8px}
.tsl-x-preview-bar button{font-size:12px;min-height:30px;padding:5px 10px}
.license-document-stream.tsl-x-preview-stream{height:clamp(420px,62vh,760px)}

@media(max-width:1100px){
.nav a.tsl-x-nav-link{padding:14px 18px;font-size:14px;gap:12px}
.tsl-x-nav-group-label{margin:0 18px 2px}
.tsl-x-top-actions{gap:8px}
.tsl-x-two-col{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:750px){
.nav a.tsl-x-nav-link{flex:0 0 auto;padding:13px;font-size:12px;min-height:45px;gap:0}
.sidebar.tsl-x-sidebar-scroll{overflow:visible}
.tsl-x-nav-group{position:relative;display:flex;flex:0 0 auto;gap:0;margin:0;padding:0;border-top:0;border-left:1px solid #677581}   /* runda 2 (22.10): ukryty podpis grupy (absolute) nie poszerza strony */
.tsl-x-nav-group-label{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.tsl-x-auth{padding:32px 12px 24px}
.tsl-x-run-actions{justify-items:start;max-width:none}
.tsl-x-run-actions .tsl-x-note{text-align:left}
.registry-source.tsl-x-timed>summary{grid-template-columns:16px minmax(0,1fr) auto auto;gap:8px}
.registry-source.tsl-x-timed .tsl-x-source-time{grid-column:3;grid-row:1}
.registry-source.tsl-x-timed .registry-toggle{grid-column:4;grid-row:1/3}
.tsl-x-source-row{grid-template-columns:16px minmax(0,1fr) auto;gap:8px}
.tsl-x-source-row .tsl-x-source-time{grid-column:3;grid-row:1/3}
.tsl-x-section{margin-top:28px}
}
@media(max-width:600px){
.tsl-x-form-actions>button,.tsl-x-after-table>button{flex:1 1 100%}
}
@media(max-width:420px){
.tsl-x-auth-title{font-size:21px}
.tsl-x-logout button{padding:5px 7px}
}
/* ===== KONIEC: CLAUDE DESIGN ===== */

/* ===== EKRAN: Pulpit i Kartoteka (agent S9) - tylko klasy mx-pulpit-*, mx-kartoteka-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Domyślny przycisk formularza wyszukiwania Pulpitu (Enter bez JS działa także przy wyłączonym „Poprzednia”): poza układem, bez napisu */
.mx-pulpit-ukryty{position:absolute;width:1px;height:1px;min-height:0;padding:0;margin:-1px;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
/* Błąd frazy pod polem (Pulpit i Kartoteka): kolor --red i rozmiar jak .error makiety (l.274) */
.mx-pulpit-blad{color:var(--red);font-size:13px;margin:8px 0 0}
/* Podpowiedź „co najmniej 3 znaki”: jak .home-search-note makiety (l.1001) */
.mx-pulpit-podpowiedz{color:#75828c;font-size:12px;margin:9px 0 0}
/* Stany tabeli (pusto, wczytywanie, błąd połączenia; Claude Design W1-W3): tabela ma min-width 1080 px, więc komunikat wyśrodkowany
   w komórce colspan leżałby poza widocznym obszarem ramki na wąskim ekranie. Przyklejamy go do lewej krawędzi ramki i dajemy
   szerokość widocznej części ramki (cqw = szerokość kontenera). Przy 1440 px szerokość ramki = szerokość tabeli, bez zmiany wyglądu. */
.mx-pulpit-sekcja .table-scroll{container-type:inline-size}
.mx-pulpit-stan{position:sticky;left:0;width:100cqw}
/* Czerwona plakietka „Uwagi krytyczne” (.badge.red makiety, l.247) obok statusu kompletności w tej samej komórce: odstęp od statusu */
.mx-pulpit-uwagi{margin-left:8px}
/* ===== KONIEC: Pulpit i Kartoteka ===== */

/* ===== EKRAN: Weryfikacja kontrahenta (agent S10) - tylko klasy mx-kreator-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* M-038: "Wróć do pulpitu" w nagłówku strony - odnośnik z wyglądem button.primary (l.100-103: ramka, tło, padding, min-height, hover);
   w makiecie tego przycisku nie ma w kodzie (rejestr zmian S-15). Na wąskim ekranie (do 750 px) menu jest poziomym paskiem z pozycją
   "Pulpit", więc przycisk znika - układ strony zostaje taki jak w makiecie (wzorce 750 i 390 px). */
a.mx-kreator-wroc{display:inline-flex;align-items:center;flex:0 0 auto;border:1px solid #bed1df;border-radius:4px;background:var(--blue);color:#173b55;padding:9px 16px;min-height:40px;font:inherit;text-decoration:none;cursor:pointer}
a.mx-kreator-wroc:hover{background:#cce2f2}
@media(max-width:750px){
  a.mx-kreator-wroc{display:none}
}
/* Odnośnik "Otwórz kartotekę" w komunikacie o duplikacie (czerwony tekst .error): ten sam kolor, podkreślony */
.mx-kreator-blad-link{color:inherit;text-decoration:underline}
/* Odnośnik tylko dla administratora (dotychczasowa zakładka "Osoba i prawo jazdy"): pod tabelą, bez własnego wyglądu spoza makiety */
.mx-kreator-admin{margin:16px 0 0}
/* Czerwona plakietka „Uwagi krytyczne” (.badge.red makiety, l.247) obok statusu w tabeli „Ostatnio weryfikowani”: odstęp od statusu */
.mx-kreator-uwagi{margin-left:8px}
/* ===== KONIEC: Weryfikacja kontrahenta ===== */

/* ===== EKRAN: Profil kontrahenta (agent S11) - tylko klasy mx-profil-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Jeden formularz obejmuje panele i stopkę profilu, a .profile-window jest kolumną flex (M:86): formularz nie tworzy własnego pudełka,
   więc panel (flex:1), stopka i reszta okna układają się jak w makiecie, gdzie panele i stopka są dziećmi okna. */
.mx-profil-formularz{display:contents}
/* Zestaw pól zakładki wyłączany poza trybem edycji (fieldset[disabled]): bez ramki, odstępów i minimalnej szerokości domyślnej */
.mx-profil-zestaw{border:0;padding:0;margin:0;min-width:0}
/* Komunikat o konflikcie wersji (409) nad zakładkami: odstępy jak pasek zakładek (.profile-window .tabs: margin 0 30px 33px) */
.mx-profil-konflikt{margin:0 30px 20px}
.mx-profil-przeladuj{color:#143b57;font-weight:600;text-decoration:underline}
/* Okno „Ostatnie sprawdzenie jest świeże”: „Pokaż ostatni wynik” to odnośnik z wyglądem zwykłego przycisku makiety (ramka, tło, padding i
   wysokość jak button, l.100-103), żeby trzy akcje w stopce okna wyglądały tak samo */
a.mx-profil-pokaz{display:inline-flex;align-items:center;border:1px solid #bed1df;border-radius:4px;background:var(--blue);color:#173b55;padding:9px 16px;min-height:40px;font:inherit;text-decoration:none;cursor:pointer}
a.mx-profil-pokaz:hover{background:#cce2f2}
/* ===== KONIEC: Profil kontrahenta ===== */

/* ===== EKRAN: Ekrany pomocnicze - polisa, zlecenie, Mój profil (agent S17) - tylko klasy mx-pomoc-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Odnośnik w stanie pustym "Brak kontrahentów" (E12): kolor jak button.link w makiecie (tsl-makieta.css l.105) */
a.mx-pomoc-link{color:var(--blue-dark)}
/* Lista sesji (Mój profil, wzorzec P9: table.tsl-x-sessions w .table-scroll). Ukryty dla wzroku nagłówek kolumny akcji (.visually-hidden jest position:absolute): bez kontekstu pozycjonowania wystawałby poza .table-scroll i poszerzał stronę */
.mx-pomoc-sesje th{position:relative}
/* ===== KONIEC: Ekrany pomocnicze ===== */

/* ===== EKRAN: Logowanie, hasła, strony błędów (agent S18) - tylko klasy mx-auth-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* "Ustaw nowe hasło" bez kodu w linku (Claude Design P3, stan "brak kodu"): ekran pokazuje tylko komunikat i odnośniki, bez formularza.
   Skrypt ekranu (app.js) odkrywa blok #brak-tokenu dopiero, gdy w adresie nie ma tokenu; wtedy chowamy formularz i jego odnośnik powrotu
   (czysty CSS: nie dodajemy własnego skryptu, a logika tokenu zostaje w app.js bez zmian). */
.mx-auth-brak-tokenu:not([hidden])~.mx-auth-ustaw{display:none}
/* ===== KONIEC: Logowanie, hasła, strony błędów ===== */

/* ===== EKRAN: Wyniki weryfikacji w profilu (agent S13) - tylko klasy mx-wyniki-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Odstęp nagłówków sekcji pod pierwszą: w makiecie atrybut style="margin-top:25px" przy h3 (M:1127, 1128), który blokuje CSP. */
.mx-wyniki-sekcja+.mx-wyniki-sekcja>h3:first-child{margin-top:25px}
.mx-wyniki-sekcja>h3 .badge{margin-left:10px;vertical-align:2px;font-weight:400}
/* Wiersz historii: kto wykonał działanie jako dopisek po treści (makieta ma tylko tekst i czas). */
.mx-wyniki-kto{white-space:nowrap}
/* Przycisk „Zobacz przebieg sprawdzenia” pod listami (Claude Design P7): odstęp od ostatniej listy. */
.mx-wyniki-akcje{margin:18px 0 0}
.mx-wyniki-przebieg-wersji{margin:0 0 12px}
/* Odnośnik „Pobierz raport (PDF)” wygląda jak button.primary z makiety (M: button, button.primary; kolory i obrys z tsl-makieta.css). */
a.mx-wyniki-przycisk{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:40px;padding:9px 16px;border:1px solid var(--line);border-radius:4px;background:#fff;color:var(--ink);font:inherit;text-decoration:none;cursor:pointer}
a.mx-wyniki-przycisk.primary{background:var(--blue);border-color:#bed1df;color:#173b55}
a.mx-wyniki-przycisk.primary:hover{background:#cce2f2}
/* ===== KONIEC: Wyniki weryfikacji ===== */

/* ===== EKRAN: Licencje, polisy, skany (agent S15) - tylko klasy mx-skan-*, mx-licencje-*, mx-polisy-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Atrybut hidden ma wygrywac z display ustawionym klasami makiety (.empty, .attachment-links, .license-actions): widoki lista/formularz,
   wiersze usuniete i ukryte filtrem, stany puste */
[data-rekordy] [hidden]{display:none!important}
/* Polisy: kolumna „Rodzaj” (decyzja właściciela 21.10: OCP przewoźnika, OCS spedytora) — makieta ma 6 kolumn tabeli polis, tu jest ich 6 dla
   użytkownika i 7 dla administratora (z „Sumą”), więc szerokości kolumn mają własne klasy zamiast mx-kol-policies-* (kolejność: numer, rodzaj,
   ubezpieczyciel, ważność, [suma], skan = reszta tabeli, działania 90 px jak w makiecie) */
.mx-polisy-kol-numer{width:17%}
.mx-polisy-kol-rodzaj{width:15%}
.mx-polisy-kol-ubezpieczyciel{width:20%}
.mx-polisy-kol-wazna-do{width:13%}
.mx-polisy-kol-suma{width:14%}
.mx-polisy-kol-akcje{width:90px}
/* Miejsce na przycisk „Analizuj polisę” (osobny moduł wypełnia kontener; pusty nie zajmuje miejsca) */
[data-analiza-polisy]:empty{display:none}
[data-analiza-polisy]:not(:empty){margin-top:10px}
/* ===== KONIEC: Licencje, polisy, skany ===== */

/* ===== EKRAN: Pojazdy i kierowcy (agent S16) - tylko klasy mx-pojazdy-*, mx-kierowcy-*; dopisywać wyłącznie między tymi znacznikami ===== */
/* Skrót DMC w nagłówku listy ma pełną nazwę w title; zwykły napis jak w makiecie (bez domyślnego podkreślenia abbr) */
.mx-pojazdy-dmc{text-decoration:none;cursor:help}
/* Kreska między otwartymi blokami (tsl-makieta.css l.859 działa na sąsiadów w drzewie, a ukryte bloki zapisanych rekordów też nimi są):
   te same wartości, ale tylko między dwoma otwartymi blokami */
.mx-pojazdy .vehicle-entry,.mx-kierowcy .driver-entry{margin-top:0;padding-top:0;border-top:0}
.mx-pojazdy .vehicle-entry:not([hidden])~.vehicle-entry:not([hidden]),.mx-kierowcy .driver-entry:not([hidden])~.driver-entry:not([hidden]){margin-top:30px;padding-top:25px;border-top:1px solid #dce4eb}
/* ===== KONIEC: Pojazdy i kierowcy ===== */

/* ===== EKRAN: Analiza polis (agent AI, decyzja wlasciciela 21.10.2026) - tylko klasy mx-analiza-*; dopisywac wylacznie miedzy tymi znacznikami ===== */
/* Odstep sekcji w oknie wyniku (makieta M:1127: h3 z margin-top 25px) i opis obok przycisku „Analizuj polise” */
.mx-analiza-sekcja{margin-top:25px}
.mx-analiza-stan{margin-left:10px}
.mx-analiza-stan:empty{display:none}
/* Notka o dostawcy zewnetrznym pod przyciskiem „Analizuj polise” (zawsze widoczna) */
.mx-analiza-rodo{margin:10px 0 0;padding:9px 12px;font-size:12px;line-height:1.45}
/* ===== KONIEC: Analiza polis ===== */

/* ===== EKRAN: Poprawki wyglądu K19 (kontrola całości, punkt 19 planu, 21.10.2026) - selektory opisane przy regułach; dopisywać wyłącznie między tymi znacznikami ===== */
/* R-01: lista rekordów (Licencje, Polisy, Pojazdy, Kierowcy). W makiecie wiersze danych nie mają linii dolnej (tsl-makieta.css: "tbody tr:last-child td{border-bottom:0}").
   W aplikacji za ostatnim wierszem danych są jeszcze ukryte wiersze pomocnicze (stan pusty, brak po filtrze, usunięte), więc :last-child nie trafia w ostatni WIDOCZNY wiersz.
   Ta sama reguła dla ostatniego widocznego wiersza (po filtrze i po oznaczeniu do usunięcia też); linie między widocznymi wierszami zostają. */
[data-rekordy] .record-table tbody tr:not([hidden]):not(:has(~ tr:not([hidden]))) > td{border-bottom:0}
/* Wiersz rekordu klikalny jak w makiecie (tsl-makieta.css: ".record-table tr[data-action]"; w aplikacji wiersz ma atrybut data-wiersz-rekordu): „rączka”, tło przy najechaniu, ramka fokusu */
.record-table tr[data-wiersz-rekordu]{cursor:pointer}
.record-table tr[data-wiersz-rekordu]:hover>td,.record-table tr[data-wiersz-rekordu]:focus-visible>td{background:#dcebf7}
.record-table tr[data-wiersz-rekordu]:focus-visible{outline:2px solid #4b89b8;outline-offset:-2px}
/* R-02: lista pojazdów. Makieta ma w komórce skanu krótką etykietę w jednym wierszu (wiersz 56,5 px); w aplikacji jest nazwa wgranego pliku, która zawijała się do dwóch
   wierszy (wiersz 68 px). Nazwa w jednym wierszu ze skróceniem wielokropkiem (pełna nazwa w podpowiedzi title). Lista licencji i polis bez zmian (tam makieta też zawija). */
.vehicle-record-table .attachment-links .attachment-link{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* R-04: tabele „Powiązania” (Wyniki weryfikacji, administrator). Kolumna siatki .tsl-x-relations miała szerokość „auto” (min-content tabeli 600 px), więc tabela wychodziła poza kartę
   zamiast przewijać się wewnątrz .table-scroll (w 390 px strona miała poziome przewijanie). Kolumna nie szersza niż karta. */
.tsl-x-relations{grid-template-columns:minmax(0,1fr)}
/* R-07: strony publiczne (logowanie, hasła, błąd dla niezalogowanego; baza_publiczna_makieta.html). Reguła makiety "html{scrollbar-gutter:stable}" rezerwuje 15 px na pasek przewijania także
   na stronie, która się nie przewija, więc karta była przesunięta względem projektu Claude Design (w 1440 px o 7,5 px, w 390 px węższa o 15 px). Strony po zalogowaniu bez zmian. */
html.tsl-x-publiczna{scrollbar-gutter:auto}
/* R-11: okno „Analiza polisy” (dialog z treścią .mx-analiza-tresc; treść wyniku ma ok. 1800 px) mieści się w ekranie: nagłówek i stopka z przyciskami zawsze widoczne, treść przewijana
   wewnątrz okna. Wysokość okna ogranicza ogólna reguła dialog{max-height:calc(100vh - 40px)}. Inne okna aplikacji bez zmian. */
dialog[open]:has(.mx-analiza-tresc){display:flex;flex-direction:column;overflow:hidden}
dialog[open]:has(.mx-analiza-tresc)>.dialog-head,dialog[open]:has(.mx-analiza-tresc)>.dialog-footer{flex:0 0 auto}
.mx-analiza-tresc{flex:1 1 auto;min-height:0;overflow-y:auto}
/* ===== KONIEC: Poprawki wyglądu K19 ===== */

/* ===== EKRAN: Dziennik i operator (agent D, runda 2 Claude Design, P14-P16, 22.10.2026) - tylko uzupelnienia klas tsl-x-journal-*, tsl-x-op-*, tsl-x-pager; dopisywac wylacznie miedzy tymi znacznikami ===== */
/* P14: numery stron w aplikacji to odnosniki (GET), w projekcie przyciski - ten sam rozmiar co ".tsl-x-pager button" */
.tsl-x-pager a.tsl-x-button-link{min-height:34px;padding:6px 14px;font-size:13px}
/* P16: pola wpisu pozycji (nazwa, imie, nazwisko, rodzaj postepowania...) tylko po wyborze "Znaleziono wpis". Sam CSS - dziala bez skryptu i bez migniecia;
   przegladarka bez :has() pokazuje je zawsze (wtedy formularz nadal dziala). */
.tsl-x-op-item:not(:has(input[value="wpis"]:checked)) .tsl-x-op-entry{display:none}
/* P16: pole kryteriow ukryte skryptem (data-dla + hidden) - takze etykieta "Kopiuj tez PESEL", ktora ma wlasne display:flex */
.tsl-x-op-form [data-dla][hidden]{display:none}
/* ===== KONIEC: Dziennik i operator ===== */

/* ===== EKRAN: Monitorowanie KRS (agent K, runda 2 Claude Design, P12-P13, 22.10.2026) - tylko uzupelnienie klas tsl-x-krs-* z tsl-makieta-dodatki-2.css ===== */
/* P13, tabela "Sprawdzenia": znacznik zrodla sprawdzenia ("· biuletyn godzinowy", "· harmonogram") nie lamie sie w srodku - jesli nie miesci sie obok daty, przechodzi pod nia w calosci */
.tsl-x-krs-checks .tsl-x-note{white-space:nowrap}
/* ...a gdy tabela ma sprawdzenie z biuletynu godzinowego (K1), kolumna daty jest szersza niz w projekcie (22%), zeby "21.10.2026, 08:04 · biuletyn godzinowy"
   miescilo sie w jednym wierszu; opis dostaje reszte (bez takiego sprawdzenia tabela ma wymiary projektu) */
.tsl-x-krs-checks-biuletyn col.tsl-x-krs-col-date{width:27%}
/* P13: "Oznacz jako przejrzane" jest w aplikacji formularzem (POST) w naglowku karty - formularz nie kurczy sie ponizej przycisku (w projekcie to sam przycisk) */
.tsl-x-krs-history-head form{flex:0 0 auto;margin:0}
@media(max-width:600px){.tsl-x-krs-history-head form{flex:0 1 auto;width:100%}}   /* jak przycisk z projektu (width:100% w tej samej regule rundy 2) */
/* P12: "Wyczysc filtry" w stanie pustym to odnosnik w wygladzie przycisku (w projekcie przycisk): ta sama czcionka co przycisk makiety */
.tsl-x-krs-empty a.tsl-x-button-link{font-size:inherit}
/* ===== KONIEC: Monitorowanie KRS ===== */

/* ===== EKRAN: Logi i konta (agent A, runda 2 Claude Design, P17-P19, 22.10.2026) - uzupelnienia klas tsl-x-logs-*, tsl-x-acc-* z tsl-makieta-dodatki-2.css; dopisywac wylacznie miedzy tymi znacznikami ===== */
/* P17: panel szczegolow zdarzenia to otwarty <dialog> (otwiera go odnosnik ?wpis=, zamyka odnosnik "x", bez skryptu) - bez showModal nie ma ::backdrop,
   wiec przyciemnienie strony jak w projekcie (kolor i warstwa jak dialog::backdrop z makiety, ponad menu) robi pseudoelement body; panel jest nad nim */
body:has(dialog.tsl-x-logs-panel[open])::after{content:"";position:fixed;inset:0;z-index:30;background:#111d2c88}
dialog.tsl-x-logs-panel{z-index:31}
/* P19: kazda akcja karty "Dostep" to osobny formularz POST z tokenem (w projekcie sam przycisk): formularz bez marginesow, na telefonie rozciagniety jak przycisk z projektu */
.tsl-x-acc-actions>form{margin:0}
@media(max-width:600px){.tsl-x-acc-actions>form{flex:1 1 100%}.tsl-x-acc-actions>form>button{width:100%}}
/* ===== KONIEC: Logi i konta ===== */

/* ===== EKRAN: Integracja, serwer, poczta (agent I, runda 2 Claude Design, P20-P22, 22.10.2026) - uzupelnienia klas tsl-x-int-*, tsl-x-srv-*, tsl-x-mail-* z tsl-makieta-dodatki-2.css; dopisywac wylacznie miedzy tymi znacznikami ===== */
/* P20: "Sprawdz polaczenie" i "Odlacz" w stopce karty dostawcy to w aplikacji osobne formularze POST z tokenem (w projekcie same przyciski): formularz bez marginesow,
   a "Odlacz" stoi z prawej strony stopki jak przycisk .danger z projektu; na telefonie oba rozciagniete jak przyciski z projektu */
.tsl-x-int-foot>form{margin:0}
.tsl-x-int-foot>form.tsl-x-int-foot-danger{margin-left:auto}
@media(max-width:600px){.tsl-x-int-foot>form{flex:1 1 100%}.tsl-x-int-foot>form>button{width:100%}.tsl-x-int-foot>form.tsl-x-int-foot-danger{margin-left:0}}
/* P20: blok "Analizuj automatycznie" (agent MR, 22.10.2026; nie ma go w projekcie) pod formularzem przypisania zdarzenia: odstep od przycisku "Zapisz przypisanie" jak
   miedzy formularzem a notka RODO w projekcie (22 px), a akapity opisu w formularzu wlacznika bez dodatkowych marginesow przegladarki */
.tsl-x-int-event-form+.tsl-x-int-event{margin-top:22px;margin-bottom:12px}
.tsl-x-int-event-form[data-automatycznie-formularz] p{margin:0 0 12px}
/* ===== KONIEC: Integracja, serwer, poczta ===== */
