/* ==========================================================================
   EPPWR — arkusz główny
   Tokeny z makiety v4, akcent przeniesiony z żółtego na niebieski #2E6BEF.

   Zasada nadrzędna zmieniona względem poprzedniej wersji: rozdziela odstęp
   i promień, nie linia. Bloki są kartami leżącymi na płótnie, a nie pasami
   ciągnącymi się od krawędzi do krawędzi.

   Trzy warstwy tła, od najciemniejszej: płótno strony, wnętrze ramy, karta.
   Element, który ma coś znaczyć, jest o warstwę jaśniejszy od otoczenia —
   nie obrysowany.
   ========================================================================== */

/* Inter jako font zmienny — jeden plik obsługuje wszystkie wagi.
   IBM Plex Mono w subsecie latin-ext; jeśli wgrany plik jest tylko "latin",
   polskie znaki polecą na font zapasowy. Patrz fonty/CZYTAJ.txt. */
@font-face {
	font-family: 'Inter';
	src: url('fonty/InterVariable.woff2') format('woff2-variations');
	font-weight: 100 900;
	font-style: normal;
	font-display: swap;
}
@font-face {
	font-family: 'Plex';
	src: url('fonty/IBMPlexMono-Regular.woff2') format('woff2');
	font-weight: 400; font-display: swap;
}
@font-face {
	font-family: 'Plex';
	src: url('fonty/IBMPlexMono-Medium.woff2') format('woff2');
	font-weight: 500; font-display: swap;
}

:root {
	--atrament: #16181C;
	--wtorny:   #7C817F;
	/* Do etykiet i nawigacji: #7C817F przy 10 px wersalikami czyta się za
	   słabo. Ten odcień daje 8,9 : 1 zamiast 4,6 : 1. */
	--wtorny-mocny: #4A4F4C;

	/* Trzy warstwy tła. Karta leży na wnętrzu ramy, rama na płótnie. */
	--bialy:  #FFFFFF;   /* karta */
	--tlo:    #F4F3EF;   /* wnętrze ramy, pola formularzy */
	--tlo-2:  #E9E8E3;   /* płótno strony */

	/* Linie zostały, ale zeszły do roli podziału wewnątrz karty.
	   Rozdzielaniem bloków zajmuje się teraz odstęp. */
	--linia:    #E4E2DC;
	--linia-2:  #F0EEE9;

	/* ---- Akcent ----
	   Makieta miała żółty #EFE34A. Niebieski jest ciemniejszy, więc nie da się
	   go użyć zamiennie: biały tekst na nim czyta się dobrze (4,7 : 1), ale
	   sam akcent na czarnym bloku już nie (3,8 : 1). Stąd osobny jaśniejszy
	   wariant do ciemnych tł — tam, gdzie w makiecie żółty stał na czerni. */
	--akcent:        #2E6BEF;
	--akcent-mocny:  #1E4FC4;   /* najechanie, wciśnięcie */
	--akcent-jasny:  #8FB4FF;   /* tekst i ikony na ciemnym tle, 8,6 : 1 */
	--akcent-tlo:    #EEF3FE;
	--akcent-linia:  #D3E0FC;

	--zielen:      #1D6B4A;
	--zielen-tlo:  #EDF5F0;
	--zielen-linia:#C2DCCE;
	--zielen-ciemna:#3C6B57;
	--zielen-mocna: #14523A;
	--legenda:      #F9F3E1;

	--bursztyn:      #9A6B12;
	--bursztyn-tlo:  #FDF8EE;
	--bursztyn-pas:  #F7E9CC;
	--bursztyn-linia:#E6D0A4;
	--bursztyn-ciemny:#7A5410;

	--rdza:      #B0431E;
	--rdza-tlo:  #FDF2ED;
	--rdza-pas:  #F7DFD6;
	--rdza-linia:#E8C4B6;
	--rdza-ciemna:#8A3417;

	--drewno: #A8763F;
	--stal:   #8B949A;
	--aluminium: #B3BCC1;
	--papier: #C9B896;
	--tworzywo: #4F6F88;

	--sans: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
	--mono: 'Plex', ui-monospace, SFMono-Regular, 'DejaVu Sans Mono', monospace;

	/* ---- Geometria ----
	   Cztery promienie, nie osiem. Karta, kafelek, pole, znacznik. Każdy
	   dodatkowy stopień to kolejna decyzja do podjęcia przy każdym elemencie. */
	--r-karta:  24px;
	--r-kafel:  16px;
	--r-pole:   12px;
	--r-znak:   999px;

	/* Cień jest bardzo płytki i ma zadanie odklejenia karty od płótna,
	   nie zrobienia z niej unoszącego się okna. */
	--cien:      0 1px 2px rgba(22, 24, 28, .04);
	--cien-menu: 0 18px 44px -18px rgba(22, 24, 28, .28), 0 2px 8px rgba(22, 24, 28, .06);

	--bok: 26px;      /* wcięcie treści wewnątrz karty */
	--odstep: 14px;   /* odstęp między kartami */

	--bok-szer: 252px;   /* pasek boczny */
	--gora-wys: 68px;    /* pasek górny */

	/* ---- Ustawienia własne. Zmieniane ręcznie, trzymane tutaj, żeby były
	   w jednym miejscu i nie ginęły przy aktualizacjach arkusza. ---- */
	--szerokosc-strony: 1760px;   /* max-width całej ramy */
	--pasek-kroku: 8px;           /* lewy pasek na kroku prowadzonego startu */
}

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

/* Natywny niebieski akcent systemu odstawał od palety. */
input[type=checkbox], input[type=radio] { accent-color: var(--atrament); }

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

body {
	margin: 0;
	background: var(--tlo-2);
	color: var(--atrament);
	font: 15px/1.55 var(--sans);
	text-wrap: pretty;
}

a { color: var(--atrament); }
a:hover { color: var(--wtorny); }

:focus-visible {
	outline: 2px solid var(--atrament);
	outline-offset: 1px;
}

.mono { font-family: var(--mono); }
.drobne { font-size: 12px; color: var(--wtorny); }
.prawo { text-align: right; }
.srodek { text-align: center; }
.nowrap { white-space: nowrap; }

/* ============================ RAMA ============================ */

/* Płótno na zewnątrz, rama w środku. Pasek boczny i treść to dwie kolumny
   tej samej ramy, więc pasek kończy się razem z treścią, a nie ciągnie się
   w nieskończoność przy krótkiej stronie. */

.rama {
	max-width: var(--szerokosc-strony);
	margin: 0 auto;
	min-height: 100vh;
	background: var(--tlo-2);
	display: flex;
	align-items: stretch;
	gap: var(--odstep);
	padding: var(--odstep);
}

.rama__prawa {
	flex: 1;
	min-width: 0;   /* bez tego szeroka tabela rozpycha całą kolumnę */
	display: flex;
	flex-direction: column;
	gap: var(--odstep);
}

.tresc {
	flex: 1;
	display: flex;
	flex-direction: column;
	/* Bez odstępu na kontenerze. Większość widoków owija bloki w jeden
	   <form>, więc gap rozdzieliłby formularz od reszty, a bloki w środku
	   zostawił sklejone. Odstęp niesie sam blok — patrz sekcja MOTYW. */
	gap: 0;
}

/* ============================ PASEK BOCZNY ============================ */

.bok {
	width: var(--bok-szer);
	flex: none;
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 16px 14px;
	display: flex;
	flex-direction: column;
	gap: 16px;
	box-shadow: var(--cien);
	/* Przy długiej stronie nawigacja jedzie z treścią zamiast uciekać w górę. */
	position: sticky;
	top: var(--odstep);
	align-self: flex-start;
	/* Pełna wysokość okna niezależnie od długości strony — pasek urwany
	   w połowie ekranu wygląda jak niedokończone ładowanie. */
	min-height: calc(100vh - var(--odstep) * 2);
	max-height: calc(100vh - var(--odstep) * 2);
	overflow-y: auto;
	overscroll-behavior: contain;
}

.bok__marka {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 2px 4px;
	text-decoration: none;
}
.bok__znak {
	width: 32px; height: 32px; flex: none;
	border-radius: 11px;
	background: var(--atrament);
	color: var(--akcent-jasny);
	display: flex; align-items: center; justify-content: center;
	font: 700 14px/1 var(--sans);
}
/* Celowo :last-child, a nie „span". Selektor .bok__marka span ma wyższą
   specyficzność niż .bok__znak i nadpisywał mu kolor — litera w znaku marki
   robiła się czarna na czarnym tle i znikała. */
.bok__marka > span:last-child {
	font: 700 15px/1.1 var(--sans);
	letter-spacing: -.01em;
	color: var(--atrament);
}

/* ---- przełącznik firmy ---- */

.firma {
	position: relative;
}
.firma__przycisk {
	width: 100%;
	border: 0;
	border-radius: 18px;
	background: var(--atrament);
	padding: 12px 13px;
	display: flex;
	align-items: center;
	gap: 11px;
	cursor: pointer;
	text-align: left;
	font-family: var(--sans);
}
.firma__przycisk:hover { background: #0E1013; }
.firma__skrot {
	width: 34px; height: 34px; flex: none;
	border-radius: 12px;
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 500 12px/1 var(--mono);
}
.firma__opis { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.firma__nazwa {
	font: 600 13px/1.15 var(--sans);
	color: #FFFFFF;
	white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.firma__podpis { font: 400 10px/1.15 var(--mono); color: #9AA0A4; }
.firma__strzalka { font: 400 11px/1 var(--mono); color: #9AA0A4; flex: none; }

/* ---- kafelki nawigacji ---- */

.nawigacja { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }

.kafel {
	height: 86px;
	border-radius: 20px;
	background: var(--tlo);
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	padding: 11px;
	text-decoration: none;
}
.kafel:hover { background: var(--tlo-2); }
.kafel__ikona {
	width: 32px; height: 32px;
	border-radius: 12px;
	background: var(--bialy);
	display: flex; align-items: center; justify-content: center;
	font: 400 17px/1 var(--sans);
	color: var(--atrament);
}
.kafel__etykieta { font: 600 12px/1.2 var(--sans); color: var(--wtorny-mocny); }

/* Wybrana pozycja wypełnia się na czarno. Pasek 3 px trzeba wypatrzyć,
   czarny kafel widać z drugiego końca biurka. */
.kafel.jest-aktywny { background: var(--atrament); }
.kafel.jest-aktywny:hover { background: #0E1013; }
.kafel.jest-aktywny .kafel__ikona { background: var(--akcent); color: #FFFFFF; }
.kafel.jest-aktywny .kafel__etykieta { color: #FFFFFF; }

/* Kafel z powiadomieniem — liczba w rogu ikony. */
.kafel__plakietka {
	position: absolute;
	top: -5px; right: -5px;
	min-width: 17px; height: 17px;
	padding: 0 4px;
	border-radius: var(--r-znak);
	background: var(--rdza);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 500 10px/1 var(--mono);
}
.kafel__ikona { position: relative; }

/* ---- skróty do stanów ---- */

.stany { display: flex; flex-direction: column; gap: 6px; }
.stan {
	height: 40px;
	border-radius: 14px;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 0 12px;
	text-decoration: none;
}
.stan__kropka { width: 8px; height: 8px; flex: none; border-radius: var(--r-znak); }
.stan__etykieta { flex: 1; font: 400 13px/1 var(--sans); }
.stan__licznik { font: 500 12px/1 var(--mono); }

.stan--blad  { background: var(--rdza-tlo); color: var(--rdza-ciemna); }
.stan--blad  .stan__kropka { background: var(--rdza); }
.stan--blad  .stan__licznik { color: var(--rdza); }
.stan--uwaga { background: var(--bursztyn-pas); color: var(--bursztyn-ciemny); }
.stan--uwaga .stan__kropka { background: var(--bursztyn); }
.stan--uwaga .stan__licznik { color: var(--bursztyn); }
.stan--ok    { background: var(--zielen-tlo); color: var(--zielen-ciemna); }
.stan--ok    .stan__kropka { background: var(--zielen); }
.stan--ok    .stan__licznik { color: var(--zielen); }

.bok__dol { margin-top: auto; }
.bok__ustawienia {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: 13px;
	border-radius: 18px;
	background: var(--tlo);
	text-decoration: none;
}
.bok__ustawienia:hover { background: var(--tlo-2); }
.bok__ustawienia span:first-child {
	width: 32px; height: 32px;
	border-radius: 11px;
	background: var(--atrament);
	color: var(--akcent-jasny);
	display: flex; align-items: center; justify-content: center;
	font: 400 16px/1 var(--sans);
}
.bok__ustawienia span:last-child { font: 600 12px/1.3 var(--sans); color: var(--wtorny-mocny); }

/* ============================ PASEK GÓRNY ============================ */

.gora {
	flex: none;
	height: var(--gora-wys);
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 0 16px;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	box-shadow: var(--cien);
}

.gora__lewo { display: flex; align-items: center; gap: 14px; min-width: 0; flex: 1; }
.gora__prawo { display: flex; align-items: center; gap: 10px; flex: none; }

/* Tytuł artykułu potrafi mieć kilkanaście słów. Bez ograniczenia okruszki
   rozpychały pasek i szukajka kurczyła się do samej ikony. */
.okruszki { display: flex; align-items: center; gap: 8px; min-width: 0; max-width: 46%; }
.okruszki__dzial { font: 400 13px/1 var(--sans); color: var(--wtorny); white-space: nowrap; flex: none; }
.okruszki__sep { font: 400 12px/1 var(--mono); color: var(--linia); }
.okruszki__strona {
	font: 700 14px/1 var(--sans);
	color: var(--atrament);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.szukaj {
	flex: 1 1 200px;
	min-width: 150px;
	max-width: 320px;
	height: 42px;
	border-radius: var(--r-pole);
	background: var(--tlo);
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 0 13px;
	text-decoration: none;
}
.szukaj:hover { background: var(--tlo-2); }
.szukaj__ikona { font: 400 15px/1 var(--sans); color: var(--wtorny); }
.szukaj__tekst { flex: 1; font: 400 13px/1 var(--sans); color: var(--wtorny); }
/* Pole wtapia się w pastylkę: obramowanie i tło niesie rodzic, nie input. */
.szukaj__pole {
	flex: 1; min-width: 0;
	height: 100%;
	border: 0; background: none; padding: 0;
	font: 400 13px/1 var(--sans);
	color: var(--atrament);
}
.szukaj__pole:focus { border: 0; box-shadow: none; outline: none; }
.szukaj:focus-within { background: var(--bialy); box-shadow: 0 0 0 2px var(--akcent-tlo), 0 0 0 3px var(--akcent); }
.szukaj__skrot {
	font: 400 10px/1 var(--mono);
	color: var(--wtorny);
	background: var(--bialy);
	border-radius: 7px;
	padding: 5px 6px;
}

/* ---- licznik AI ---- */

.miernik {
	display: flex;
	align-items: center;
	gap: 11px;
	height: 42px;
	padding: 0 13px;
	border-radius: var(--r-pole);
	background: var(--tlo);
	text-decoration: none;
}
.miernik:hover { background: var(--tlo-2); }
.miernik__znak {
	width: 28px; height: 28px; flex: none;
	border-radius: 10px;
	background: var(--atrament);
	color: var(--akcent-jasny);
	display: flex; align-items: center; justify-content: center;
	font: 400 15px/1 var(--sans);
}
.miernik__dane { display: flex; flex-direction: column; gap: 4px; }
.miernik__liczby { display: flex; align-items: baseline; gap: 5px; }
.miernik__uzyte { font: 500 12px/1 var(--mono); color: var(--atrament); }
.miernik__limit { font: 400 10px/1 var(--mono); color: var(--wtorny); }
.miernik__tor {
	width: 104px; height: 5px;
	border-radius: 3px;
	background: var(--bialy);
	overflow: hidden;
}
.miernik__wypelnienie { display: block; height: 5px; border-radius: 3px; background: var(--akcent); }
/* Ostatnia ćwiartka limitu zmienia kolor — informacja, że trzeba dokupić,
   ma dotrzeć zanim asystent przestanie odpowiadać w połowie deklaracji. */
.miernik.jest-blisko .miernik__wypelnienie { background: var(--bursztyn); }
.miernik.jest-pelny .miernik__wypelnienie { background: var(--rdza); }

/* ---- wybór języka i konto ---- */

.rozwijane { position: relative; }

.pastylka {
	display: flex;
	align-items: center;
	gap: 9px;
	height: 42px;
	padding: 0 12px;
	border: 0;
	border-radius: var(--r-pole);
	background: var(--tlo);
	cursor: pointer;
	font-family: var(--sans);
	text-decoration: none;
	color: var(--atrament);
}
.pastylka:hover { background: var(--tlo-2); }
.pastylka__strzalka { font: 400 10px/1 var(--mono); color: var(--wtorny); }

.flaga {
	width: 22px; height: 16px; flex: none;
	border-radius: 4px;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	box-shadow: 0 0 0 1px rgba(22, 24, 28, .1);
}
.flaga span { flex: 1; }
/* Partial rysuje trzy pasy, bo niemiecka flaga ich tyle potrzebuje.
   Polska ma dwa — środkowy chowamy, zamiast rozjeżdżać proporcje. */
.flaga--pl span:nth-child(1) { background: #FFFFFF; }
.flaga--pl span:nth-child(2) { display: none; }
.flaga--pl span:nth-child(3) { background: #D4213D; }
/* Klasa musi być --gb, nie --en: Jezyk::lista() oddaje kod kraju, a nie kod
   języka, bo to flaga Zjednoczonego Królestwa, nie Anglii. Przy --en reguła
   nie łapała niczego i pole zostawało białym prostokątem.

   Union Jack z warstw gradientu, od wierzchu: czerwony krzyż, biały krzyż
   pod nim, białe przekątne, granatowe tło. */
.flaga--gb span { display: none; }
.flaga--gb {
	background:
		linear-gradient(to bottom, transparent 42%, #C8102E 42%, #C8102E 58%, transparent 58%),
		linear-gradient(to right, transparent 42%, #C8102E 42%, #C8102E 58%, transparent 58%),
		linear-gradient(to bottom, transparent 30%, #FFFFFF 30%, #FFFFFF 70%, transparent 70%),
		linear-gradient(to right, transparent 30%, #FFFFFF 30%, #FFFFFF 70%, transparent 70%),
		linear-gradient(to bottom right, transparent 45%, #FFFFFF 45%, #FFFFFF 55%, transparent 55%),
		linear-gradient(to bottom left, transparent 45%, #FFFFFF 45%, #FFFFFF 55%, transparent 55%),
		#012169;
}
.flaga--de span:nth-child(1) { background: #000000; }
.flaga--de span:nth-child(2) { background: #DD0000; }
.flaga--de span:nth-child(3) { background: #FFCE00; }

.jezyk__kod { font: 500 12px/1 var(--mono); letter-spacing: .04em; }

.awatar {
	width: 32px; height: 32px; flex: none;
	border-radius: 11px;
	background: var(--atrament);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 500 11px/1 var(--mono);
}
.konto__dane { display: flex; flex-direction: column; gap: 1px; align-items: flex-start; }
.konto__imie { font: 600 12px/1.1 var(--sans); color: var(--atrament); white-space: nowrap; }
.konto__rola { font: 400 10px/1.1 var(--sans); color: var(--wtorny); }
.pastylka--konto { padding: 0 12px 0 6px; }

/* ---- menu rozwijane ---- */

.menu {
	position: absolute;
	top: calc(100% + 8px);
	right: 0;
	min-width: 240px;
	background: var(--bialy);
	border-radius: 18px;
	padding: 8px;
	box-shadow: var(--cien-menu);
	/* Wyżej niż pasek komunikatu (40) i przycisk asystenta (50) — inaczej
	   rozwinięta lista chowa się za zielonym paskiem „zapisano". */
	z-index: 60;
	display: flex;
	flex-direction: column;
	gap: 2px;
}
.menu[hidden] { display: none; }
.menu--lewo { right: auto; left: 0; }
/* Menu firm wychodzi z paska bocznego, więc rozwija się w dół na jego szerokość. */
.menu--firmy { left: 0; right: 0; min-width: 0; }

.menu__naglowek {
	font: 500 10px/1 var(--mono);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wtorny);
	padding: 9px 10px 6px;
}
.menu__pozycja {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 9px 10px;
	border-radius: var(--r-pole);
	border: 0;
	background: none;
	width: 100%;
	text-align: left;
	cursor: pointer;
	text-decoration: none;
	color: var(--atrament);
	font: 400 13px/1.3 var(--sans);
	font-family: var(--sans);
}
.menu__pozycja:hover { background: var(--tlo); }
.menu__pozycja.jest-aktywny { background: var(--akcent-tlo); color: var(--akcent-mocny); }
.menu__pozycja b { font-weight: 600; }
.menu__opis { display: block; font: 400 11px/1.3 var(--mono); color: var(--wtorny); }
.menu__tresc { flex: 1; min-width: 0; }
.menu__ptaszek { color: var(--akcent); font-size: 12px; }
.menu__linia { height: 1px; background: var(--linia-2); margin: 6px 4px; }
.menu form { margin: 0; }

/* ============================ ASYSTENT ============================ */

/* Przycisk w rogu, nie pozycja w menu. Pomoc ma być pod ręką na każdym
   ekranie, także wtedy, gdy człowiek utknął w połowie formularza. */
.asystent-fab {
	position: fixed;
	right: 22px;
	bottom: 22px;
	z-index: 50;
	display: flex;
	align-items: center;
	gap: 11px;
	height: 54px;
	padding: 0 20px 0 8px;
	border-radius: var(--r-znak);
	background: var(--atrament);
	color: #FFFFFF;
	text-decoration: none;
	box-shadow: 0 16px 34px -14px rgba(22, 24, 28, .55);
}
.asystent-fab:hover { background: #0E1013; color: #FFFFFF; }
.asystent-fab__znak {
	width: 38px; height: 38px; flex: none;
	border-radius: var(--r-znak);
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 400 18px/1 var(--sans);
}
.asystent-fab__tekst { display: flex; flex-direction: column; gap: 2px; }
.asystent-fab__tytul { font: 600 13px/1 var(--sans); }
.asystent-fab__opis { font: 400 10px/1 var(--mono); color: #9AA0A4; }

/* ============================ NAGŁÓWEK STRONY ============================ */

.naglowek {
	display: flex;
	align-items: stretch;
	background: var(--bialy);
	border-bottom: 1px solid var(--atrament);
}
.naglowek__tytul {
	flex: 1;
	padding: 20px var(--bok);
	display: flex;
	flex-direction: column;
	/* Bez tego tytuł wisiał u góry, gdy liczniki obok były wyższe od niego. */
	justify-content: center;
	gap: 4px;
}
.naglowek__nad {
	font: 400 11px/1 var(--mono);
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--wtorny);
}
.naglowek h1 {
	margin: 0;
	font: 600 30px/1.15 var(--sans);
	letter-spacing: -.02em;
}
.naglowek__liczniki { flex: none; display: flex; align-items: stretch; }

.licznik {
	width: 160px;
	padding: 20px 22px;
	border-left: 1px solid var(--linia);
	/* Siatka z ustaloną wysokością pierwszego wiersza — dzięki temu cyfry
	   stoją na wspólnej linii niezależnie od tego, na ile wierszy łamie się opis. */
	display: grid;
	grid-template-rows: 34px auto;
	align-content: start;
	gap: 6px;
	text-decoration: none;
}
.licznik b { font: 500 30px/34px var(--mono); color: var(--atrament); align-self: start; }
.licznik span { font: 400 11px/1.35 var(--sans); color: var(--wtorny); }
.licznik.jest-ok   { background: var(--zielen-tlo); }
.licznik.jest-ok b { color: var(--zielen); }
.licznik.jest-ok span { color: var(--zielen-ciemna); }
.licznik.jest-blad   { background: var(--rdza-tlo); }
.licznik.jest-blad b { color: var(--rdza); }
.licznik.jest-blad span { color: var(--rdza-ciemna); }

.naglowek__akcja {
	display: flex;
	align-items: center;
	padding: 0 24px;
	border-left: 1px solid var(--linia);
}

/* ============================ SEKCJE ============================ */

.sekcja-tytul {
	display: flex;
	align-items: center;
	gap: 14px;
	/* Równa góra i dół. Wcześniej było 30/12 i tekst siedział nisko w pasku.
	   Rozdział sekcji robi teraz ciemniejsze tło strony, nie asymetria. */
	padding: 22px var(--bok);
	background: transparent;
}
.sekcja-tytul__nr {
	flex: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 26px;
	height: 22px;
	padding: 0 6px;
	border: 1px solid var(--linia);
	background: var(--bialy);
	font: 500 11px/1 var(--mono);
	letter-spacing: .08em;
	color: var(--atrament);
}
.sekcja-tytul h2 {
	margin: 0;
	font: 600 18px/1.2 var(--sans);
	letter-spacing: -.02em;
}
.sekcja-tytul__opis { font: 400 12px/1 var(--sans); color: var(--wtorny); }

.blok {
	background: var(--bialy);
	border-top: 1px solid var(--atrament);
	border-bottom: 1px solid var(--atrament);
}
.blok--pusty {
	padding: 28px var(--bok);
	color: var(--wtorny);
	font-size: 14px;
	background: var(--bialy);
}

/* ============================ PASEK GRUPY ============================ */

.pasek-grupy {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 11px var(--bok);
	font: 400 11.5px/1 var(--mono);
	letter-spacing: .12em;
	text-transform: uppercase;
}
.pasek-grupy > span:first-child { font-size: 15px; line-height: 1; }
.pasek-grupy__licznik { font-family: var(--mono); letter-spacing: 0; font-size: 13px; }
.pasek-grupy.jest-blad {
	background: var(--rdza-pas);
	border-bottom: 1px solid var(--rdza-linia);
	color: var(--rdza-ciemna);
}
.pasek-grupy.jest-blad .pasek-grupy__licznik { color: var(--rdza); }
.pasek-grupy.jest-uwaga {
	background: var(--bursztyn-pas);
	border-top: 1px solid var(--atrament);
	border-bottom: 1px solid var(--bursztyn-linia);
	color: var(--bursztyn-ciemny);
}
.pasek-grupy.jest-uwaga .pasek-grupy__licznik { color: var(--bursztyn); }
.pasek-grupy.jest-ok {
	background: var(--zielen-tlo);
	border-bottom: 1px solid var(--zielen-linia);
	color: var(--zielen-ciemna);
}
/* Neutralny pasek informacyjny. Wcześniej używałem tu bursztynowego
   ostrzeżenia z trójkątem, co sugerowało problem tam, gdzie go nie ma.
   Trójkąt znaczy „uwaga" i ma tak znaczyć wszędzie. */
.pasek-grupy.jest-info {
	background: var(--tlo);
	border-top: 1px solid var(--atrament);
	border-bottom: 1px solid var(--linia);
	color: var(--atrament);
}
.pasek-grupy.jest-info > span:first-child {
	display: inline-flex; align-items: center; justify-content: center;
	width: 24px; height: 24px; flex: none;
	border: 1px solid var(--atrament); background: var(--bialy);
	font-size: 14px; line-height: 1;
}

/* ============================ WIERSZ ZADANIA ============================ */

.zadanie {
	display: flex;
	align-items: stretch;
	border-bottom: 1px solid var(--linia-2);
}
.zadanie:last-child { border-bottom: 0; }

.zadanie__waga {
	flex: none;
	width: 96px;
	padding: 14px 0 14px var(--bok);
	display: flex;
	flex-direction: column;
	gap: 2px;
	border-left: 4px solid transparent;
	margin-left: -4px;
}
.zadanie__waga b { font: 500 18px/1.1 var(--mono); }
.zadanie__waga span { font: 400 10px/1.2 var(--mono); }

.zadanie__tresc {
	flex: 1;
	padding: 14px 20px;
	display: flex;
	flex-direction: column;
	gap: 4px;
	border-left: 1px solid var(--linia-2);
}
.zadanie__co { font: 500 15px/1.35 var(--sans); }
.zadanie__czemu { font: 400 13px/1.5 var(--sans); }
.zadanie__gdzie { font: 400 12px/1.5 var(--mono); color: var(--wtorny); }

.zadanie__akcja {
	flex: none;
	display: flex;
	align-items: center;
	padding: 0 var(--bok);
	border-left: 1px solid var(--linia-2);
}

.zadanie.jest-blad { background: var(--rdza-tlo); }
.zadanie.jest-blad .zadanie__waga { border-left-color: var(--rdza); }
.zadanie.jest-blad .zadanie__waga b { color: var(--rdza-ciemna); }
.zadanie.jest-blad .zadanie__waga span { color: var(--rdza); }
.zadanie.jest-blad .zadanie__tresc,
.zadanie.jest-blad .zadanie__akcja { border-left-color: var(--rdza-linia); }
.zadanie.jest-blad { border-bottom-color: var(--rdza-linia); }

.zadanie.jest-uwaga { background: var(--bursztyn-tlo); }
.zadanie.jest-uwaga .zadanie__waga { border-left-color: var(--bursztyn); }
.zadanie.jest-uwaga .zadanie__waga b { color: var(--bursztyn-ciemny); }
.zadanie.jest-uwaga .zadanie__waga span { color: var(--bursztyn); }
.zadanie.jest-uwaga .zadanie__tresc,
.zadanie.jest-uwaga .zadanie__akcja { border-left-color: var(--bursztyn-linia); }
.zadanie.jest-uwaga { border-bottom-color: var(--bursztyn-linia); }

/* ============================ PRZYCISKI ============================ */

.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 38px;
	padding: 0 16px;
	border: 1px solid var(--atrament);
	background: var(--bialy);
	color: var(--atrament);
	font: 500 13px/1 var(--sans);
	text-decoration: none;
	cursor: pointer;
	white-space: nowrap;
}
.btn:hover { background: var(--atrament); color: var(--bialy); }

/* Wszystkie przyciski mają 38 px. Wyjątki: --maly 32 px w gęstych tabelach
   i --duzy 46 px na ekranie logowania. Wcześniej były cztery różne wysokości
   i przyciski stojące obok siebie nie licowały. */
.btn--glowny { background: var(--atrament); color: var(--bialy); padding: 0 20px; }
.btn--glowny:hover { background: #000; color: var(--bialy); }

.btn--blad { background: var(--rdza); border-color: var(--rdza); color: var(--bialy); }
.btn--blad:hover { background: var(--rdza-ciemna); border-color: var(--rdza-ciemna); }

.btn--uwaga { background: var(--bursztyn); border-color: var(--bursztyn); color: var(--bialy); }
.btn--uwaga:hover { background: var(--bursztyn-ciemny); border-color: var(--bursztyn-ciemny); }

.btn--duzy { height: 46px; padding: 0 22px; font-size: 15px; }

/* ---------------------------------------------------------------
   SŁOWNIK AKCJI — kolor niesie znaczenie, nie dekorację.
   Pięć znaczeń, każde używane konsekwentnie w całej aplikacji:

     czarny     zapisz, wystaw, zaloguj — utrwala zmianę
     zielony    dodaj — tworzy nowy byt
     bursztyn   cofnij — odwraca to, co przed chwilą zrobiłeś
     rdzawy     usuń — niszczy; obrys, wypełnienie dopiero na najechaniu,
                żeby nie zapraszał do przypadkowego kliknięcia
     biały      neutralne: anuluj, wróć, otwórz
   --------------------------------------------------------------- */

.btn--dodaj {
	background: var(--zielen); border-color: var(--zielen); color: var(--bialy);
}
.btn--dodaj:hover { background: var(--zielen-mocna); border-color: var(--zielen-mocna); color: var(--bialy); }
.btn--dodaj::before { content: '+'; margin-right: 7px; font-weight: 600; }

.btn--cofnij {
	background: var(--bursztyn); border-color: var(--bursztyn); color: var(--bialy);
}
.btn--cofnij:hover { background: var(--bursztyn-ciemny); border-color: var(--bursztyn-ciemny); color: var(--bialy); }
.btn--cofnij::before { content: '↶'; margin-right: 7px; }

.btn--usun {
	background: var(--bialy); border-color: var(--rdza); color: var(--rdza);
}
.btn--usun:hover { background: var(--rdza); border-color: var(--rdza); color: var(--bialy); }

.btn--cichy { border-color: var(--linia); color: var(--wtorny); }
.btn--cichy:hover { border-color: var(--atrament); background: var(--bialy); color: var(--atrament); }

.btn--maly { height: 32px; padding: 0 12px; font-size: 12px; }
.btn--pelny { width: 100%; }
.btn[disabled] { opacity: .5; cursor: progress; }

/* ============================ FORMULARZE ============================ */

.pole { display: flex; flex-direction: column; gap: 6px; }
.pole > label {
	font: 500 12.5px/1.3 var(--mono);
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--wtorny-mocny);
}
.pole > small { font: 400 13px/1.5 var(--sans); color: var(--wtorny); }

input[type=text], input[type=email], input[type=password],
input[type=number], input[type=date], input[type=search], select, textarea {
	width: 100%;
	height: 38px;
	padding: 0 12px;
	border: 1px solid var(--linia);
	border-radius: 0;
	background: var(--bialy);
	color: var(--atrament);
	font: 400 15px/1 var(--sans);
	appearance: none;
}
textarea { height: auto; padding: 10px 12px; line-height: 1.5; resize: vertical; }
select {
	background-image: linear-gradient(45deg, transparent 50%, var(--wtorny) 50%),
	                  linear-gradient(135deg, var(--wtorny) 50%, transparent 50%);
	background-position: calc(100% - 16px) 17px, calc(100% - 11px) 17px;
	background-size: 5px 5px, 5px 5px;
	background-repeat: no-repeat;
	padding-right: 32px;
}
/* Pole, w które można wpisać własną wartość ALBO wybrać z listy.
   Strzałka mówi, że lista istnieje — bez niej wyglądałoby jak zwykłe pole. */
input[list] {
	background: var(--bialy) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6268' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M5 9l7 7 7-7'/></svg>") no-repeat right 10px center;
	background-size: 16px 16px;
	padding-right: 34px;
}
input[list]::-webkit-calendar-picker-indicator {
	opacity: 0;
	position: absolute; right: 0; width: 34px; height: 100%;
	margin: 0; padding: 0; cursor: pointer;
}
input[list]:focus { background-color: var(--bialy); }

input::placeholder, textarea::placeholder { color: #A8ADB1; }
input:focus, select:focus, textarea:focus { border-color: var(--atrament); outline: none; }

.pole.jest-blad input, .pole.jest-blad select, .pole.jest-blad textarea {
	border: 2px solid var(--rdza);
	padding: 0 11px;
}
/* Pole zaproponowane przez model — bursztyn znika po ręcznej edycji. */
.jest-propozycja {
	border-left: 3px solid var(--bursztyn) !important;
	background: var(--bursztyn-tlo) !important;
}

.haslo-wrapper { position: relative; display: flex; align-items: center; }
.haslo-wrapper input { font-family: var(--mono); letter-spacing: .12em; padding-right: 74px; }
.haslo-pokaz {
	position: absolute; right: 12px;
	background: none; border: 0; padding: 0; cursor: pointer;
	font: 400 12px/1 var(--sans); color: var(--wtorny);
	border-bottom: 1px solid var(--linia);
}
.haslo-pokaz:hover { color: var(--atrament); border-bottom-color: var(--atrament); }

/* ============================ KOMUNIKATY ============================ */

.komunikat {
	display: flex;
	gap: 10px;
	align-items: flex-start;
	padding: 12px 14px;
	font: 400 13px/1.5 var(--sans);
}
.komunikat__ikona { font: 400 16px/1.4 var(--mono); flex: none; }
.komunikat.jest-blad { background: var(--rdza-tlo); border: 1px solid var(--rdza-linia); border-left: 4px solid var(--rdza); color: var(--rdza-ciemna); }
.komunikat.jest-blad .komunikat__ikona { color: var(--rdza); }
.komunikat.jest-uwaga { background: var(--bursztyn-tlo); border: 1px solid var(--bursztyn-linia); border-left: 4px solid var(--bursztyn); color: var(--bursztyn-ciemny); }
.komunikat.jest-uwaga .komunikat__ikona { color: var(--bursztyn); }
.komunikat.jest-ok { background: var(--zielen-tlo); border: 1px solid var(--zielen-linia); border-left: 4px solid var(--zielen); color: var(--zielen-ciemna); }
.komunikat.jest-ok .komunikat__ikona { color: var(--zielen); }

.flash-pas { padding: 0 var(--bok); background: var(--tlo); }
.flash-pas .komunikat { margin-top: 12px; }

/* ============================ TABELE ============================ */

.tabela { width: 100%; border-collapse: collapse; background: var(--bialy); font-size: 13.5px; }
.tabela th, .tabela td {
	padding: 10px 14px;
	text-align: left;
	vertical-align: top;
	border-bottom: 1px solid var(--linia-2);
}
.tabela thead th {
	background: var(--tlo);
	border-bottom: 1px solid var(--atrament);
	font: 500 12.5px/1.3 var(--mono);
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--wtorny-mocny);
	white-space: nowrap;
}
.tabela td:first-child, .tabela th:first-child { padding-left: var(--bok); }
.tabela td:last-child, .tabela th:last-child { padding-right: var(--bok); }
.tabela tbody tr:last-child td { border-bottom: 0; }
.tabela .liczba { font-family: var(--mono); text-align: right; white-space: nowrap; }

.przewijak { overflow-x: auto; }

/* ============================ PASEK SKŁADU ============================ */

.sklad { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.sklad__pasek {
	display: flex;
	width: 100%;
	height: 10px;
	overflow: hidden;
	border-radius: 2px;
	background: var(--linia-2);
}
.sklad__seg { height: 100%; }
.sklad__legenda { display: flex; gap: 14px; flex-wrap: wrap; align-items: center; }
.sklad__poz { display: flex; align-items: center; gap: 6px; }
.sklad__kropka { width: 8px; height: 8px; border-radius: 2px; flex: none; }
.sklad__nazwa { font: 400 12px/1 var(--sans); color: var(--wtorny); }
.sklad__pct { font: 400 12px/1 var(--mono); color: var(--atrament); }

.mat-drewno { background: var(--drewno); }
.mat-stal { background: var(--stal); }
.mat-aluminium { background: var(--aluminium); }
.mat-papier { background: var(--papier); }
.mat-tworzywo { background: var(--tworzywo); }
.mat-inne { background: #B9B6AE; }

/* ============================ ZNACZNIKI OCENY ============================ */

.znacznik {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 4px 10px;
	font: 400 12px/1.5 var(--mono);
	white-space: nowrap;
}
.znacznik::before { content: '■'; font-size: 13px; line-height: 1; }
.znacznik.jest-potwierdzony { background: var(--zielen); border: 1px solid var(--zielen); color: var(--bialy); }
.znacznik.jest-czesciowy { background: var(--bursztyn-tlo); border: 1px solid var(--bursztyn-linia); color: var(--bursztyn); }
.znacznik.jest-brak { background: var(--rdza-tlo); border: 1px solid var(--rdza-linia); color: var(--rdza); }
.znacznik.jest-nieoceniony { background: var(--tlo); border: 1px solid var(--linia); color: var(--wtorny); }

/* ============================ LOGOWANIE ============================ */

.logowanie { display: flex; min-height: 100vh; background: var(--tlo); }
.logowanie__obraz {
	flex: 0 0 46%;
	position: relative;
	background: var(--atrament) center / cover no-repeat;
}
.logowanie__obraz::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20,23,26,.35) 0%, rgba(20,23,26,.62) 100%);
}
.logowanie__panel {
	flex: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--bialy);
	padding: 56px;
}
.logowanie__form { width: 380px; display: flex; flex-direction: column; gap: 22px; }
.logowanie__marka {
	margin: 0;
	font: 800 32px/1.15 var(--sans);
	letter-spacing: .04em;
}
.logowanie__nad {
	font: 400 11px/1 var(--mono);
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--wtorny);
}
.logowanie h2 { margin: 0; font: 600 24px/1.2 var(--sans); letter-spacing: -.02em; }
.logowanie__stopka { border-top: 1px solid var(--linia); padding-top: 16px; font: 400 12px/1.5 var(--sans); color: var(--wtorny); }
.logowanie__pola { display: flex; flex-direction: column; gap: 16px; }

/* ============================ RESPONSYWNOŚĆ ============================ */

@media (max-width: 1100px) {
	.naglowek { flex-wrap: wrap; }
	.naglowek__liczniki { width: 100%; border-top: 1px solid var(--linia); }
	.licznik { flex: 1; width: auto; }
	.naglowek__akcja { width: 100%; border-left: 0; border-top: 1px solid var(--linia); padding: 14px var(--bok); }
	.naglowek__akcja .btn { width: 100%; }
}

@media (max-width: 860px) {
	:root { --bok: 16px; }
	.rama { border-left: 0; border-right: 0; }
	.listwa { height: auto; flex-wrap: wrap; }
	.listwa__nawigacja { width: 100%; overflow-x: auto; border-top: 1px solid var(--linia); }
	.listwa__zegar { display: none; }
	.naglowek h1 { font-size: 24px; }
	.zadanie { flex-wrap: wrap; }
	.zadanie__waga { width: 100%; flex-direction: row; align-items: baseline; gap: 6px; padding-bottom: 0; }
	.zadanie__tresc, .zadanie__akcja { border-left: 0; width: 100%; }
	.zadanie__akcja { padding: 0 var(--bok) 14px; }
	.logowanie__obraz { display: none; }
	.logowanie__panel { padding: 32px 20px; }
	.logowanie__form { width: 100%; max-width: 380px; }
}

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

/* ============================ ETAP 2 ============================ */

/* --- filtry stanu --- */
.filtry {
	display: flex; flex-wrap: wrap; gap: 0;
	background: transparent; padding: 0 var(--bok);
	border-bottom: 1px solid var(--linia);
}
/* Filtry jako kafelki — ten sam układ co liczniki na pulpicie: duża liczba,
   podpis pod nią, tło w kolorze stanu. Filtr jest jednocześnie licznikiem,
   więc jedno spojrzenie daje i przegląd, i możliwość zawężenia. */
.filtry {
	display: flex; flex-wrap: wrap; gap: 10px;
	padding: 16px var(--bok);
	background: transparent;
	border-bottom: 0;
}
.filtr {
	flex: 1 1 150px;
	max-width: 240px;
	display: grid;
	grid-template-rows: 30px auto;
	align-content: start;
	gap: 4px;
	padding: 14px 18px;
	text-decoration: none;
	background: var(--bialy);
	border: 1px solid var(--linia);
}
.filtr:hover { border-color: var(--atrament); }
.filtr__licznik { font: 500 26px/30px var(--mono); color: var(--atrament); }
.filtr__etykieta {
	display: flex; align-items: center; gap: 7px;
	font: 400 11.5px/1.35 var(--sans); color: var(--wtorny-mocny);
}
.filtr__ikona { font-size: 14px; line-height: 1; flex: none; }

/* Tło i kolor liczby niosą stan także wtedy, gdy filtr nie jest wybrany. */
.filtr--potwierdzony, .filtr--gotowe { background: var(--zielen-tlo); border-color: var(--zielen-linia); }
.filtr--potwierdzony .filtr__licznik, .filtr--gotowe .filtr__licznik { color: var(--zielen); }
.filtr--potwierdzony .filtr__ikona, .filtr--gotowe .filtr__ikona { color: var(--zielen); }

.filtr--czesciowy { background: var(--bursztyn-tlo); border-color: var(--bursztyn-linia); }
.filtr--czesciowy .filtr__licznik, .filtr--czesciowy .filtr__ikona { color: var(--bursztyn); }

.filtr--brak, .filtr--braki { background: var(--rdza-tlo); border-color: var(--rdza-linia); }
.filtr--brak .filtr__licznik, .filtr--braki .filtr__licznik { color: var(--rdza); }
.filtr--brak .filtr__ikona, .filtr--braki .filtr__ikona { color: var(--rdza); }

.filtr--nieoceniony, .filtr--brak-danych { background: var(--tlo); }
.filtr--nieoceniony .filtr__licznik, .filtr--brak-danych .filtr__licznik { color: var(--wtorny); }
.filtr--nieoceniony .filtr__ikona, .filtr--brak-danych .filtr__ikona { color: var(--wtorny); }

/* Wybrany filtr wypełnia się na mocno — skok z jasnego odcienia na pełny
   kolor jest nie do przeoczenia, a kolor nadal mówi, co jest filtrowane. */
.filtr.jest-aktywny,
.filtr.jest-aktywny .filtr__licznik,
.filtr.jest-aktywny .filtr__etykieta,
.filtr.jest-aktywny .filtr__ikona { color: var(--bialy); }
.filtr.jest-aktywny { background: var(--atrament); border-color: var(--atrament); }

.filtr--potwierdzony.jest-aktywny,
.filtr--gotowe.jest-aktywny { background: var(--zielen); border-color: var(--zielen); }
.filtr--czesciowy.jest-aktywny { background: var(--bursztyn-ciemny); border-color: var(--bursztyn-ciemny); }
.filtr--brak.jest-aktywny,
.filtr--braki.jest-aktywny { background: var(--rdza); border-color: var(--rdza); }
.filtr--nieoceniony.jest-aktywny,
.filtr--brak-danych.jest-aktywny { background: var(--wtorny); border-color: var(--wtorny); }

@media (max-width: 860px) {
	.filtr { flex: 1 1 120px; max-width: none; padding: 12px 14px; }
	.filtr__licznik { font-size: 22px; }
}

/* Białe pole z włosową ramką ginęło obok wypełnionego przycisku.
   Szare tło i lupa mówią „tu się wpisuje". */
.szukajka input[type=search] {
	height: 38px; width: 280px; font-size: 14px;
	background: var(--tlo) no-repeat 12px center;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%235A6268' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='6.8' cy='6.8' r='4.6'/%3E%3Cpath d='M10.4 10.4 14 14'/%3E%3C/svg%3E");
	background-size: 16px 16px;
	border: 1px solid var(--linia);
	padding-left: 36px;
}
.szukajka input[type=search]:focus { background-color: var(--bialy); border-color: var(--atrament); }
.szukajka input[type=search]::-webkit-search-decoration,
.szukajka input[type=search]::-webkit-search-cancel-button { appearance: none; }

/* --- tabele --- */
.mocno { font: 500 14px/1.35 var(--sans); text-decoration: none; }
.mocno:hover { text-decoration: underline; }
.podpis { display: block; font: 400 12px/1.4 var(--sans); color: var(--wtorny); margin-top: 2px; }
.akcje { white-space: nowrap; text-align: right; }
.akcje > * + * { margin-left: 6px; }
.tabela--zwarta th, .tabela--zwarta td { padding: 7px 14px; }

/* Ryzyka: sam znacznik po prawej za slabo rzucal sie w oczy przy przegladaniu
   listy. Tlo i pasek z lewej daja poziom rozpoznac jednym spojrzeniem, zanim
   ktokolwiek zacznie czytac tresc. Odcienie celowo blade — to nie alarm,
   tylko hierarchia waznosci. */
.tabela--ryzyka tbody tr > td:first-child { border-left: 3px solid transparent; }
.tabela--ryzyka tbody tr.jest-brak > td { background: var(--rdza-tlo); }
.tabela--ryzyka tbody tr.jest-brak > td:first-child { border-left-color: var(--rdza); }
.tabela--ryzyka tbody tr.jest-czesciowy > td { background: var(--bursztyn-tlo); }
.tabela--ryzyka tbody tr.jest-czesciowy > td:first-child { border-left-color: var(--bursztyn-linia); }
.tabela--ryzyka tbody tr.jest-nieoceniony > td:first-child { border-left-color: var(--linia); }
.tabela--ryzyka td.tresc-ryzyka { line-height: 1.5; }
.tabela--ryzyka td.tresc-ryzyka .tresc-ryzyka__nadzor {
	display: block;
	margin-top: 5px;
	font-size: 12.5px;
	color: var(--wtorny-mocny);
}
.tabela--ryzyka td.tresc-ryzyka .tresc-ryzyka__nadzor::before {
	content: '→ ';
	color: var(--wtorny);
}
/* Obszar trzyma sie jednej linii, tresc dostaje reszte szerokosci. */
.tabela--ryzyka th:nth-child(1), .tabela--ryzyka td:nth-child(1) { width: 210px; }
.tabela--ryzyka th:nth-child(3), .tabela--ryzyka td:nth-child(3) { width: 110px; }
.przekroczony { color: var(--rdza); font-weight: 500; }
.btn--glowny-maly { background: var(--atrament); color: var(--bialy); }

/* --- nagłówek karty --- */
.naglowek--karta .licznik--szeroki { width: 190px; }
.licznik__tekst { font: 500 15px/1.25 var(--sans) !important; }

/* --- siatka pól --- */
.siatka-pol {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 16px 20px;
	padding: 20px var(--bok);
}
.pole--pelny { grid-column: 1 / -1; }
/* Nazwy materiałów i specyfikacje bywają długie — w jednej kolumnie 240 px
   tekst chowa się poza polem i trzeba go przewijać, żeby zobaczyć wpis. */
.pole--szerokie { grid-column: span 2; }

/* Nazwy i specyfikacje bywaja dluzsze niz pole — niech sie zawijaja
   zamiast chowac tekst poza krawedzia. */
.tabela textarea.pole--zawijane { min-height: 46px; font-size: 13px; }

textarea.pole--zawijane {
	min-height: 62px;
	resize: vertical;
	line-height: 1.45;
	font-family: inherit;
	white-space: pre-wrap;
	overflow-wrap: anywhere;
}

/* Opis pod nazwa materialu — dlugie specyfikacje potrzebuja oddechu. */
/* Przyciski naglowka karty: dwa glowne w rzedzie, akcje pomocnicze pod nimi.
   Grupa jest wysrodkowana w swojej komorce, a przycisk pomocniczy rozciaga sie
   na szerokosc rzedu powyzej — inaczej krawedzie sie nie zgadzaja i blok wyglada
   na przypadkowo zlozony. */
.naglowek__akcja--kolumna {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	justify-content: center;
	gap: 8px;
}
.naglowek__przyciski { display: flex; gap: 10px; justify-content: center; }
.naglowek__przyciski .btn { flex: 1 1 0; justify-content: center; }
.naglowek__akcja--kolumna > .btn { width: 100%; justify-content: center; }

.naglowek__pod {
	display: block;
	margin-top: 8px;
	font-family: var(--mono, monospace);
	font-size: 12px;
	line-height: 1.75;
	letter-spacing: .02em;
	color: var(--wtorny);
	text-transform: uppercase;
}
@media (max-width: 900px) { .pole--szerokie { grid-column: 1 / -1; } }

/* --- wgrywarka: pole na plik ma wyglądać na miejsce, gdzie się coś wrzuca --- */
.wgrywarka {
	margin: 18px var(--bok);
	padding: 22px;
	border: 2px dashed var(--linia-mocna, #C9C4B8);
	background: var(--bialy);
	display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
}
.wgrywarka:hover { border-color: var(--atrament); }
.wgrywarka__opis { flex: 1; min-width: 260px; }
.wgrywarka__opis b { display: block; margin-bottom: 4px; }
.wgrywarka input[type="file"] { display: block; margin-top: 8px; }

/* --- lista uwag z odczytu --- */
.lista-uwag { margin: 0; padding: 8px var(--bok) 18px 0; list-style: none; counter-reset: uwaga; }
.lista-uwag li {
	position: relative;
	padding: 11px 0 11px calc(var(--bok) + 34px);
	border-top: 1px solid var(--linia);
	line-height: 1.5;
}
.lista-uwag li::before {
	counter-increment: uwaga;
	content: counter(uwaga, decimal-leading-zero);
	position: absolute; left: var(--bok); top: 11px;
	font-family: var(--mono, monospace); font-size: 12px; color: var(--rdza);
}
.pole--przelacznik label {
	display: flex; align-items: center; gap: 9px;
	text-transform: none; letter-spacing: 0; font-size: 14px; color: var(--atrament);
}
.pole--przelacznik input { width: 16px; height: 16px; }
.wymiary { display: flex; align-items: center; gap: 8px; }
/* Cztery cyfry musza sie miescic bez przewijania. Strzalki pola liczbowego
   zjadaja kilkanascie pikseli, wiec je chowamy — i tak nikt nie klika w nie,
   zeby ustawic 1200. */
.wymiary input {
	text-align: right;
	flex: 1 1 0;
	min-width: 72px;
	-moz-appearance: textfield;
	appearance: textfield;
}
.wymiary input::-webkit-outer-spin-button,
.wymiary input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.wymiary span { color: var(--wtorny); }
.podsekcja {
	margin: 0; padding: 18px var(--bok) 0;
	font: 500 12.5px/1.3 var(--mono); letter-spacing: .05em;
	text-transform: uppercase; color: var(--wtorny-mocny);
	border-top: 1px solid var(--linia-2);
}
.formularz-inline { border-top: 1px solid var(--linia-2); }
.wartosc-stala {
	display: flex; align-items: center; gap: 10px;
	height: 38px; padding: 0 12px;
	background: var(--tlo); border: 1px solid var(--linia);
}

/* --- tabela komponentów --- */
/* Uklad staly, bo przy szerokim ekranie tabela z ukladem automatycznym
   rozdzielala nadmiar miejsca po swojemu — kolumna „masa" puchla, a „jedn."
   zwezala sie do samej strzalki. Procenty musza sumowac sie do 100. */
.tabela--bom { min-width: 1400px; font-size: 13.5px; table-layout: fixed; }
.tabela--bom th, .tabela--bom td { padding: 6px 10px; vertical-align: middle; }
.tabela--bom td:first-child, .tabela--bom th:first-child { padding-left: var(--bok); }
.tabela--bom input, .tabela--bom select { height: 36px; font-size: 14px; padding: 0 10px; }
.tabela--bom input[list] { padding-right: 30px; background-position: right 8px center; }
/* Szerokosci kolumn bilansu — komplet, zeby zadna nie zabrala miejsca innej.
   Nazwe komponentu wpisuje sie recznie i to ona idzie do dokumentacji, wiec
   dostaje najwiecej. Kolumny wyliczane (masa, udzial) potrzebuja tyle, ile
   zajmuje liczba, i ani piksela wiecej. */
.tabela--bom th:nth-child(1), .tabela--bom td:nth-child(1) { width: 22%; }
.tabela--bom th:nth-child(2), .tabela--bom td:nth-child(2) { width: 17%; }
.tabela--bom th:nth-child(3), .tabela--bom td:nth-child(3) { width: 6%; }
.tabela--bom th:nth-child(4), .tabela--bom td:nth-child(4) { width: 7%; }
.tabela--bom th:nth-child(5), .tabela--bom td:nth-child(5) { width: 9%; }
.tabela--bom th:nth-child(6), .tabela--bom td:nth-child(6) { width: 7%; white-space: nowrap; }
.tabela--bom th:nth-child(7), .tabela--bom td:nth-child(7) { width: 6%; white-space: nowrap; }
.tabela--bom th:nth-child(8), .tabela--bom td:nth-child(8) { width: 5%; }
.tabela--bom th:nth-child(9), .tabela--bom td:nth-child(9) { width: 9%; }
.tabela--bom th:nth-child(10), .tabela--bom td:nth-child(10) { width: 12%; }
/* Przy ukladzie stalym zawartosc nie rozpycha juz komorki, wiec pola musza
   same trzymac sie w przydzielonej szerokosci. Pole wyboru jest wyjatkiem —
   rozciagniete na cala kolumne robi sie wielkie jak kafelek. */
.tabela--bom input:not([type="checkbox"]),
.tabela--bom select,
.tabela--bom textarea { width: 100%; box-sizing: border-box; }
.tabela--bom input[type="checkbox"] { width: 17px; height: 17px; }

/* Ostatnia kolumna potrzebuje takiego samego oddechu jak pierwsza. Celujemy
   wprost w komorke narzedzi, bo `td:last-child` przegrywalo z regula ustawiona
   nizej w arkuszu — a przy ikonach dosunietych do krawedzi widac to od razu. */
.tabela--bom td:last-child, .tabela--bom th:last-child { padding-right: var(--bok); }
.tabela--bom td.wiersz-narzedzia {
	padding-right: var(--bok);
	text-align: right;
	white-space: nowrap;
}
/* Cztery ikony po 34 px + odstepy + wciecie to 182 px. Kolumna musi byc
   szersza, inaczej zawartosc wypycha padding i ikony ida na krawedz. */
.tabela--bom td.wiersz-narzedzia .ikonka { width: 30px; height: 30px; }
.tabela--bom td.wiersz-narzedzia .ikonka + .ikonka { margin-left: 4px; }
.tabela--bom td:nth-child(1) textarea { min-height: 60px; }
.tabela--bom select { max-width: 100%; text-overflow: ellipsis; }
.tabela--bom tfoot th { background: var(--tlo); border-top: 1px solid var(--atrament); border-bottom: 0; font-size: 13px; color: var(--atrament); text-transform: none; letter-spacing: 0; font-family: var(--mono); }
.tabela--bom tfoot th:first-child { font-family: var(--sans); font-weight: 600; }
input.jest-brakujace { border-color: var(--rdza); background: var(--rdza-tlo); }
input.jest-brakujace::placeholder { color: var(--rdza); opacity: .75; }

.usun-wiersz {
	width: 28px; height: 28px; line-height: 1; font-size: 16px;
	background: none; border: 1px solid var(--linia); color: var(--wtorny); cursor: pointer;
}
.usun-wiersz:hover { border-color: var(--rdza); color: var(--rdza); }

.legenda-bom {
	width: 100%;
	padding: 16px var(--bok);
	background: var(--legenda);
	border-top: 1px solid var(--legenda);
	font: 400 12.5px/1.6 var(--sans); color: var(--wtorny-mocny);
}
.legenda-bom b { color: var(--atrament); }

/* --- lista braków w karcie --- */
.brak {
	display: flex; align-items: center; gap: 16px;
	padding: 13px var(--bok); border-bottom: 1px solid var(--linia-2);
	border-left: 4px solid transparent;
}
.brak:last-child { border-bottom: 0; }
.brak__tresc { flex: 1; display: flex; flex-direction: column; gap: 3px; }
.brak__tresc b { font: 500 14px/1.35 var(--sans); }
.brak__tresc span { font: 400 12.5px/1.5 var(--sans); color: var(--wtorny); }
.brak.jest-blad { background: var(--rdza-tlo); border-left-color: var(--rdza); border-bottom-color: var(--rdza-linia); }
.brak.jest-uwaga { background: var(--bursztyn-tlo); border-left-color: var(--bursztyn); border-bottom-color: var(--bursztyn-linia); }

/* --- rejestr ostrzeżeń --- */
.rejestr {
	display: flex; gap: 16px; align-items: baseline;
	padding: 14px var(--bok); border-bottom: 1px solid var(--linia-2);
	background: var(--bursztyn-tlo);
}
.rejestr:last-child { border-bottom: 0; }
.rejestr__nr { flex: none; font: 500 15px/1 var(--mono); color: var(--bursztyn); }
.rejestr__tresc { font: 400 14px/1.5 var(--sans); }

/* --- metale --- */
.metale {
	display: grid; grid-template-columns: repeat(4, minmax(110px, 1fr)) minmax(220px, 1.4fr);
	gap: 16px 20px; padding: 20px var(--bok); align-items: end;
}
.metale__pole label { display: flex; gap: 6px; align-items: baseline; }
.metale__pole input { text-align: right; font-family: var(--mono); }
.metale__suma {
	display: flex; flex-direction: column; gap: 4px;
	padding: 12px 16px; background: var(--tlo); border: 1px solid var(--linia);
}
.metale__suma b { font: 500 26px/1 var(--mono); }
.metale__suma span { font: 400 11px/1.3 var(--sans); color: var(--wtorny); }
.metale__pasek { height: 6px; background: var(--linia-2); margin-top: 6px; }
.metale__wypelnienie { height: 100%; background: var(--zielen); transition: width .15s linear; }
.metale__suma.jest-blisko .metale__wypelnienie { background: var(--bursztyn); }
.metale__suma.jest-przekroczony { border-color: var(--rdza); background: var(--rdza-tlo); }
.metale__suma.jest-przekroczony b { color: var(--rdza); }
.metale__suma.jest-przekroczony .metale__wypelnienie { background: var(--rdza); }

/* --- wiersz podpowiedzi pod polem --- */
/* Przycisk wstawiający gotową treść plus zdanie wyjaśniające, czym ta treść
   jest. Wcześniej stał tu `pasek-dolny` — szara belka na całą szerokość
   karty z kreską u góry, przeznaczona na stopkę formularza. Wewnątrz pola
   wychodziła poza jego zaokrąglenie, a biały przycisk na szarym tle
   wyglądał, jakby z niej wypadał.

   Tutaj tło nie jest potrzebne: wiersz i tak siedzi pod polem, do którego
   się odnosi, a odstęp wystarcza, żeby było widać, że to jedna całość. */
.podpowiedz {
	display: flex; align-items: flex-start; gap: 12px;
	margin-top: 10px; flex-wrap: wrap;
}
.podpowiedz .btn { flex: none; }
.podpowiedz .drobne { flex: 1 1 240px; min-width: 0; line-height: 1.5; }

/* Na wąskim ekranie przycisk idzie na własny wiersz — zdanie obok niego
   ścisnęłoby się do dwóch słów w linii. */
@media (max-width: 560px) {
	.podpowiedz { gap: 8px; }
	.podpowiedz .drobne { flex-basis: 100%; }
}

/* --- pasek dolny --- */
.pasek-dolny {
	display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
	padding: 18px var(--bok); background: var(--tlo);
	border-top: 1px solid var(--linia);
}
/* Na długich formularzach przycisk zapisu musi być pod ręką niezależnie
   od tego, gdzie akurat jesteś. */
.pasek-dolny--przyklejony {
	position: sticky;
	bottom: 0;
	z-index: 30;
	background: var(--bialy);
	border-top: 1px solid var(--atrament);
}

/* --- podgląd nazwy pliku --- */
.podglad-nazwy {
	display: flex; align-items: baseline; gap: 12px;
	padding: 14px var(--bok); background: var(--tlo); border-top: 1px solid var(--linia-2);
}
.podglad-nazwy__etykieta { font: 400 10px/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--wtorny); }
.podglad-nazwy b { font-size: 13px; }

/* --- rozwijak --- */
/* Bez wyraźnego znaku ten pasek wyglądał jak podpis, a nie jak przełącznik. */
.rozwijak > summary {
	display: flex; align-items: center; gap: 12px;
	cursor: pointer; list-style: none;
	padding: 14px var(--bok); background: var(--tlo);
	border-top: 1px solid var(--atrament);
	border-bottom: 1px solid var(--linia);
}
.rozwijak > summary::-webkit-details-marker { display: none; }
.rozwijak > summary::before {
	content: '';
	flex: none;
	width: 36px; height: 36px;
	border: 1px solid var(--atrament);
	background: var(--bialy) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M9 5l7 7-7 7'/></svg>") no-repeat center;
	background-size: 20px 20px;
}
.rozwijak > summary:hover { background: var(--tlo-2); }
.rozwijak > summary:hover::before {
	background: var(--atrament) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M9 5l7 7-7 7'/></svg>") no-repeat center;
	background-size: 20px 20px;
}
.rozwijak[open] > summary::before,
.rozwijak[open] > summary:hover::before {
	background: var(--atrament) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M5 9l7 7 7-7'/></svg>") no-repeat center;
	background-size: 20px 20px;
}

.rozwijak__tytul {
	font: 500 14.5px/1 var(--sans); color: var(--atrament);
	text-transform: none; letter-spacing: 0;
}
.rozwijak__licznik {
	font: 500 13.5px/1 var(--mono);
	padding: 5px 10px; background: var(--bialy); border: 1px solid var(--linia); color: var(--atrament);
}
.rozwijak__akcja { font: 400 13px/1 var(--sans); color: var(--wtorny-mocny); margin-left: auto; }
.rozwijak:not([open]) .rozwijak__akcja::after { content: 'kliknij, aby rozwinąć'; }
.rozwijak[open] .rozwijak__akcja::after { content: 'kliknij, aby zwinąć'; }

@media (max-width: 1100px) {
	.metale { grid-template-columns: repeat(2, 1fr); }
	.metale__suma { grid-column: 1 / -1; }
	.naglowek--karta .naglowek__liczniki { width: 100%; }
	.naglowek--karta .licznik--szeroki { flex: 1; width: auto; }
}
@media (max-width: 860px) {
	.szukajka input { width: 100%; }
	.naglowek__akcja { flex-direction: column; align-items: stretch; }
	.brak { flex-direction: column; align-items: stretch; }
	.metale { grid-template-columns: 1fr 1fr; }
}

/* ============================ ETAP 3 ============================ */

/* --- podziałka kroków --- */
.podzialka { display: flex; background: var(--bialy); border-bottom: 1px solid var(--atrament); }
.podzialka__krok {
	flex: 1; display: flex; align-items: baseline; gap: 10px;
	padding: 13px var(--bok); border-right: 1px solid var(--linia);
	color: var(--wtorny);
}
.podzialka__krok:last-child { border-right: 0; }
.podzialka__nr { font: 500 12px/1 var(--mono); letter-spacing: .06em; }
.podzialka__etykieta { font: 400 13px/1.2 var(--sans); }
.podzialka__krok.jest-aktywny {
	color: var(--bialy); background: var(--atrament);
}
.podzialka__krok.jest-aktywny .podzialka__etykieta { font-weight: 500; }
.podzialka__krok.jest-zrobiony { color: var(--zielen-ciemna); background: var(--zielen-tlo); }
.podzialka__krok.jest-zrobiony .podzialka__nr { color: var(--zielen); }
.podzialka__krok.jest-zrobiony .podzialka__nr::after { content: ' ✓'; }

/* --- układ kreatora --- */
.kreator { display: flex; align-items: stretch; min-height: 60vh; }
.kreator__lewo { flex: 0 0 46%; min-width: 0; border-right: 1px solid var(--atrament); }
.kreator__prawo { flex: 1; min-width: 0; display: flex; flex-direction: column; background: var(--tlo); }

.podglad__pasek {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 10px 20px; background: var(--bialy); border-bottom: 1px solid var(--linia);
}
.podglad__etykieta {
	font: 400 10px/1 var(--mono); letter-spacing: .12em;
	text-transform: uppercase; color: var(--wtorny);
}
.podglad__jezyki { display: flex; gap: 0; }
.podglad__jezyk {
	border: 1px solid var(--linia); border-right: 0; background: var(--bialy);
	padding: 6px 12px; cursor: pointer; font: 400 11px/1 var(--mono); letter-spacing: .06em; color: var(--wtorny);
}
.podglad__jezyk:last-child { border-right: 1px solid var(--linia); }
.podglad__jezyk:hover { color: var(--atrament); }
.podglad__jezyk.jest-aktywny { background: var(--atrament); border-color: var(--atrament); color: var(--bialy); }

.podglad__ramka { flex: 1; position: relative; overflow: hidden; }
.podglad__ramka iframe { width: 100%; height: 100%; border: 0; display: block; background: var(--bialy); }
.podglad__ladowanie {
	position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
	color: var(--wtorny); font-size: 13px; background: var(--tlo);
}
.podglad__ramka.jest-odswiezany .podglad__ladowanie { display: flex; }
.podglad__ramka:not(.jest-odswiezany) .podglad__ladowanie { display: none; }

.ostrzezenie-inline {
	margin: 10px 0 0; padding: 9px 12px;
	background: var(--bursztyn-tlo); border-left: 3px solid var(--bursztyn);
	font-size: 12.5px; color: var(--bursztyn-ciemny);
}
.blok--ostrzezenie { border-top-color: var(--rdza); }
.blok--ostrzezenie .rejestr { background: var(--rdza-tlo); }
.blok--ostrzezenie .rejestr__nr { color: var(--rdza); }

@media (max-width: 1200px) {
	.kreator { flex-direction: column; }
	.kreator__lewo { flex: none; border-right: 0; border-bottom: 1px solid var(--atrament); }
	.kreator__prawo { min-height: 70vh; }
}
@media (max-width: 860px) {
	.podzialka { flex-wrap: wrap; }
	.podzialka__krok { flex: 1 0 100%; border-right: 0; border-bottom: 1px solid var(--linia); }
}

/* ============================ ETAP 4 ============================ */

.zadanie-w-tle { border-top: 1px solid var(--linia-2); }
.zadanie-pasek {
	display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
	padding: 14px var(--bok); background: var(--tlo);
}
.zadanie-pasek__wskaznik {
	width: 14px; height: 14px; flex: none;
	border: 2px solid var(--linia); border-top-color: var(--atrament);
	border-radius: 50%; animation: obrot .8s linear infinite;
}
@keyframes obrot { to { transform: rotate(360deg); } }
.zadanie-pasek__etap { font: 400 13.5px/1.4 var(--sans); flex: 1; min-width: 200px; }
.zadanie-pasek.jest-blad { background: var(--rdza-tlo); border-left: 3px solid var(--rdza); }
.zadanie-pasek.jest-blad .zadanie-pasek__etap { color: var(--rdza-ciemna); }
.zadanie-pasek.jest-blad .zadanie-pasek__wskaznik { display: none; }

.chipsy { display: flex; flex-wrap: wrap; gap: 10px; padding: 18px var(--bok); }
.chips {
	display: inline-flex; align-items: center; gap: 9px;
	border: 1px solid var(--linia); background: var(--tlo); cursor: pointer;
	padding: 11px 15px; font: 400 13px/1.35 var(--sans); color: var(--atrament); text-align: left;
	max-width: 100%;
}
/* Białe na białym wyglądało jak tekst, nie jak przycisk. */
.chips::before { content: '?'; font: 500 15px/1 var(--mono); color: var(--wtorny); flex: none; }
.chips:hover { border-color: var(--atrament); background: var(--atrament); color: var(--bialy); }
.chips:hover::before { color: var(--bialy); }

#odpowiedzi-puste { padding: 24px var(--bok); color: var(--wtorny); font-size: 14px; }

/* Układ rozmowy: pisanie przyklejone do dołu, historia nad nim i tylko ona
   się przewija, najnowsza odpowiedź na spodzie. Ten sam model co komunikator,
   więc nie trzeba się go uczyć. */
.rama--rozmowa { height: 100vh; overflow: hidden; }
.rama--rozmowa .tresc { display: flex; flex-direction: column; min-height: 0; }

.rozmowa { flex: 1; display: flex; flex-direction: column; min-height: 0; }
.rozmowa__historia {
	flex: 1; min-height: 0; overflow-y: auto;
	display: flex; flex-direction: column; gap: 14px;
	padding: 22px var(--bok);
	background: var(--tlo-2);
}
.rozmowa__wejscie {
	flex: none;
	background: var(--bialy);
	border-top: 1px solid var(--atrament);
}
.rozmowa__wejscie .chipsy { padding: 14px var(--bok) 0; }
.rozmowa__wejscie .siatka-pol { padding: 14px var(--bok); }

.odpowiedz {
	background: var(--bialy);
	border: 1px solid var(--linia);
	border-left: 3px solid var(--atrament);
	padding: 18px 22px;
}
.odpowiedz__pytanie {
	margin: 0 0 12px; padding-bottom: 10px; border-bottom: 1px solid var(--linia-2);
	font: italic 400 13px/1.5 var(--sans); color: var(--wtorny);
}
.odpowiedz__tresc { max-width: 90ch; }
.odpowiedz__tresc p { margin: 0 0 9px; font-size: 14.5px; line-height: 1.6; }
.odpowiedz__tresc ul { margin: 0 0 12px; padding-left: 20px; font-size: 14.5px; line-height: 1.6; }
.odpowiedz__tresc li { margin-bottom: 5px; }
.odpowiedz__tresc code { background: var(--linia-2); padding: 1px 5px; font-family: var(--mono); font-size: .92em; }
.odpowiedz__tresc > *:last-child { margin-bottom: 0; }

@media (prefers-reduced-motion: reduce) {
	.zadanie-pasek__wskaznik { animation: none; border-top-color: var(--linia); }
}


/* ============================ POPRAWKI UX ============================ */

/* --- prowadzony pierwszy krok --- */
.start { list-style: none; margin: 0; padding: 0; }
.start__krok {
	display: flex; align-items: center; gap: 18px;
	padding: 18px var(--bok);
	margin-left: 4px;
	border-bottom: 1px solid var(--linia-2);
	border-left: var(--pasek-kroku) solid transparent;
	/* Stan niesie TŁO, nie tylko krawędź. Pasek 8 px po lewej trzeba było
	   znaleźć wzrokiem; wypełniony wiersz widać od razu. */
	background: var(--tlo);
}
.start__krok:last-child { border-bottom: 0; }
.start__nr {
	flex: none; width: 38px; height: 38px;
	display: flex; align-items: center; justify-content: center;
	border: 1px solid var(--linia); background: var(--tlo);
	font: 500 15px/1 var(--mono); color: var(--wtorny);
}
.start__tresc { flex: 1; display: flex; flex-direction: column; gap: 3px; }
.start__tresc b { font: 500 15px/1.35 var(--sans); }
.start__tresc span { font: 400 13px/1.5 var(--sans); color: var(--wtorny); max-width: 80ch; }
.start__akcja { flex: none; }

/* zrobione — zielone tło, żeby postęp było widać jednym rzutem oka */
.start__krok.jest-zrobiony {
	background: var(--zielen-tlo);
	border-left-color: var(--zielen);
	border-bottom-color: var(--zielen-linia);
}
.start__krok.jest-zrobiony .start__nr { border-color: var(--zielen); background: var(--zielen); color: var(--bialy); }
.start__krok.jest-zrobiony .start__tresc b { color: var(--zielen-ciemna); }
.start__krok.jest-zrobiony .start__tresc span { color: var(--zielen-ciemna); }

/* bieżący — biały i najjaśniejszy w kolumnie, bo to on wymaga działania */
.start__krok.jest-biezacy { background: var(--bialy); border-left-color: var(--atrament); }
.start__krok.jest-biezacy .start__nr { border-color: var(--atrament); background: var(--atrament); color: var(--bialy); }
.start__krok.jest-biezacy .start__tresc b { font-weight: 600; }

/* --- narzędzia wiersza w tabeli komponentów --- */
.wiersz-narzedzia { white-space: nowrap; }
/* Ikony jako SVG, nie glify. Znaki typu ⧉ czy ▸ renderują się w każdym kroju
   inaczej i zwykle dużo mniejsze, niż wynikałoby z rozmiaru czcionki.
   Maska bierze kolor z currentColor, więc stany najechania są darmowe. */
.ikonka {
	width: 34px; height: 34px; padding: 0;
	display: inline-flex; align-items: center; justify-content: center;
	background: var(--bialy); border: 1px solid var(--linia); color: var(--wtorny-mocny);
	cursor: pointer;
}
.ikonka::before {
	content: '';
	width: 19px; height: 19px;
	background-color: currentColor;
	-webkit-mask: var(--ikona) no-repeat center / contain;
	mask: var(--ikona) no-repeat center / contain;
}
.ikonka:hover { border-color: var(--atrament); background: var(--atrament); color: var(--bialy); }
.ikonka--usun:hover { border-color: var(--rdza); background: var(--rdza); color: var(--bialy); }

[data-wyzej] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M12 20V4M5 11l7-7 7 7'/></svg>"); }
[data-nizej] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M12 4v16M19 13l-7 7-7-7'/></svg>"); }
[data-duplikuj] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><rect x='9' y='9' width='11' height='11' rx='1.5'/><path d='M15 5H6a1 1 0 0 0-1 1v9'/></svg>"); }
[data-usun-wiersz] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M18 6 6 18M6 6l12 12'/></svg>"); }
.wiersz-bom:first-child [data-wyzej],
.wiersz-bom:last-child [data-nizej] { opacity: .25; pointer-events: none; }

/* --- ikony edycji i usuwania w tabelach --- */
[data-edytuj] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M12 20h9'/><path d='M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z'/></svg>"); }
[data-usun-podmiot] { --ikona: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2314171A' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'><path d='M18 6 6 18M6 6l12 12'/></svg>"); }

/* Kosz ma być czerwony od razu, a nie dopiero pod kursorem — usuwanie musi
   odróżniać się od reszty zanim ktoś w nie kliknie. */
.ikonka--usun { color: var(--rdza); border-color: var(--rdza); }

/* --- wiersz przełączany w tryb edycji --- */
.wiersz-edytowalny .komorka-edycja { display: none; }
.wiersz-edytowalny.jest-edycja .komorka-podglad { display: none; }
.wiersz-edytowalny.jest-edycja .komorka-edycja { display: block; width: 100%; }
.wiersz-edytowalny.jest-edycja > td { background: var(--tlo-podswietlenia, #F9F3E1); }
.komorka-podglad { display: inline-block; min-height: 20px; }
.komorka-podglad--pusta { color: var(--wtorny); }

.skroty {
	margin: 0; padding: 12px var(--bok) 0;
	background: var(--legenda);
	font: 400 12px/1.6 var(--sans); color: var(--wtorny-mocny);
}
.skroty b {
	font-family: var(--mono); font-weight: 500; font-size: 11.5px;
	color: var(--atrament); border: 1px solid var(--linia); padding: 1px 5px; background: var(--bialy);
}

/* --- akcje przy braku --- */
.brak__akcje { display: flex; gap: 8px; align-items: center; flex: none; }
.zadanie__akcja { gap: 8px; }

/* --- potwierdzenie zapisu widoczne niezależnie od przewinięcia --- */
.flash-pas {
	position: sticky; top: 0; z-index: 40;
	padding: 0 var(--bok); background: var(--tlo);
	box-shadow: 0 1px 0 var(--linia);
}
.flash-pas .komunikat { margin: 12px 0; }
.flash-pas.jest-schowany { display: none; }

@media (max-width: 860px) {
	.start__krok { flex-wrap: wrap; }
	.start__akcja { width: 100%; padding-left: 52px; }
	.start__akcja .btn { width: 100%; }
	.brak__akcje { width: 100%; }
	.brak__akcje .btn { flex: 1; }
}

/* ==========================================================================
   MOTYW 2026 — geometria
   ==========================================================================

   Komponenty poniżej powstały dla układu pełnoekranowego: pas od krawędzi do
   krawędzi, rozdzielony czarną kreską. W układzie z paskiem bocznym te same
   elementy muszą być kartami leżącymi na płótnie.

   Ta sekcja nie dubluje ich definicji — zmienia wyłącznie geometrię i to,
   czym rozdzielamy bloki. Stoi na końcu pliku, więc wygrywa bez !important.
   Kolory i odstępy wewnętrzne zostają tam, gdzie były.
   ========================================================================== */

/* ---- karty ---- */

.blok,
.naglowek {
	background: var(--bialy);
	border: 0;
	border-radius: var(--r-karta);
	box-shadow: var(--cien);
	overflow: hidden;   /* przycina narożniki tabeli i pasków w środku karty */
}

.blok--pusty { border-radius: var(--r-karta); }

/* Nagłówek strony i pierwszy blok pod nim stykały się kreską. Teraz to dwie
   osobne karty, więc liczniki nie mogą już wisieć na obrysie. */
.naglowek__tytul { padding: 22px var(--bok); }
.naglowek__liczniki { padding: 12px; gap: 8px; align-items: stretch; }
.licznik {
	width: 150px;
	border: 0;
	border-radius: var(--r-kafel);
	background: var(--tlo);
	padding: 16px 18px;
}
.licznik.jest-ok { background: var(--zielen-tlo); }
.licznik.jest-blad { background: var(--rdza-tlo); }
.naglowek__akcja { border: 0; padding: 12px var(--bok) 12px 4px; }

/* ---- odstępy ----
   Karty rozdziela margines, nie gap kontenera: widoki owijają bloki w jeden
   <form>, a wtedy flex kontenera widzi jedno dziecko i niczego nie rozdziela. */
.blok, .naglowek { margin-bottom: var(--odstep); }
.flash-pas .komunikat { margin-bottom: var(--odstep); }

/* Tytuł sekcji stoi na płótnie między kartami, więc nie potrzebuje już
   własnego wcięcia bocznego równego wcięciu treści. */
.sekcja-tytul { padding: 0 8px; margin: 20px 0 10px; }
.sekcja-tytul__nr {
	border: 0;
	border-radius: var(--r-znak);
	background: var(--akcent-tlo);
	color: var(--akcent-mocny);
	height: 24px;
	padding: 0 9px;
}

/* ---- paski stanu wewnątrz karty ---- */

.pasek-grupy { border-top: 0; }
.pasek-grupy.jest-info > span:first-child {
	border: 0;
	border-radius: 9px;
	background: var(--akcent-tlo);
	color: var(--akcent-mocny);
}

/* ---- przyciski ---- */

.btn {
	border-radius: var(--r-pole);
	/* Neutralny przycisk jest wypełniony, nie obrysowany: biały na białej
	   karcie z włosową ramką praktycznie znikał i wyglądał jak wyłączony. */
	background: var(--tlo);
	border-color: transparent;
	font-weight: 500;
	transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.btn:hover { background: var(--tlo-2); border-color: transparent; color: var(--atrament); }

/* Czarny był jedynym kolorem akcji utrwalającej zmianę. Teraz jest nim
   niebieski — czerń została do bloków z danymi, żeby przycisk „zapisz"
   nie zlewał się z kaflem nawigacji. */
.btn--glowny { background: var(--akcent); border-color: var(--akcent); color: #FFFFFF; }
.btn--glowny:hover { background: var(--akcent-mocny); border-color: var(--akcent-mocny); color: #FFFFFF; }

/* Zieleń schodzi wyłącznie do roli stanu („gotowe"). Jako kolor przycisku
   konkurowała z akcentem i na jednym ekranie stały obok siebie trzy mocne
   barwy: niebieska, zielona i czarny kafel nawigacji. */
.btn--dodaj { background: var(--akcent); border-color: var(--akcent); }
.btn--dodaj:hover { background: var(--akcent-mocny); border-color: var(--akcent-mocny); }

/* „Usuń" był jedynym przyciskiem rysowanym samym obrysem. Baza .btn zeruje
   teraz kolor ramki, więc obrys znikał i zostawał blady napis bez żadnej
   krawędzi. Zamiast przywracać ramkę — wypełnienie w tonie ostrzeżenia,
   spójne z resztą, i pełna rdza dopiero na najechaniu. */
.btn--usun { background: var(--rdza-tlo); border-color: transparent; color: var(--rdza); }

/* Kolorowe warianty muszą zostać powtórzone TUTAJ, po regule bazowej.
   Ich pierwotne definicje stoją wyżej w pliku, a .btn i .btn--blad mają tę
   samą specyficzność (0,1,0) — więc wypełnienie z bazy wygrywało kolejnością
   i „Rozpisz komponenty" bladł do szarego prostokąta na różowym wierszu.
   Każdy nowy wariant kolorowy dopisuj w tym miejscu, nie wyżej. */
.btn--blad   { background: var(--rdza); border-color: var(--rdza); color: var(--bialy); }
.btn--uwaga  { background: var(--bursztyn); border-color: var(--bursztyn); color: var(--bialy); }
.btn--cofnij { background: var(--bursztyn); border-color: var(--bursztyn); color: var(--bialy); }

.btn--dodaj:hover, .btn--cofnij:hover, .btn--usun:hover, .btn--blad:hover, .btn--uwaga:hover { color: #FFFFFF; }
.btn--usun:hover { background: var(--rdza); border-color: var(--rdza); }
.btn--cichy { background: var(--tlo); border-color: transparent; }
.btn--cichy:hover { background: var(--tlo-2); border-color: transparent; color: var(--atrament); }
.btn--maly { border-radius: 10px; }

/* ---- pola ---- */

input[type=text], input[type=email], input[type=password],
input[type=number], input[type=date], input[type=search], select, textarea {
	border-radius: var(--r-pole);
	border-color: var(--linia);
	background: var(--bialy);
	transition: border-color .12s ease, box-shadow .12s ease;
}
input:focus, select:focus, textarea:focus {
	border-color: var(--akcent);
	box-shadow: 0 0 0 3px var(--akcent-tlo);
	outline: none;
}
.pole > label { text-transform: none; letter-spacing: 0; font: 500 12.5px/1.3 var(--sans); }
input[type=checkbox], input[type=radio] { accent-color: var(--akcent); }

:focus-visible { outline: 2px solid var(--akcent); outline-offset: 2px; }

/* ---- komunikaty ---- */

.komunikat { border-radius: var(--r-kafel); border-width: 0 0 0 4px; }
.flash-pas { padding: 0; background: transparent; }
.flash-pas .komunikat { margin-top: 0; }

/* ---- tabele ---- */

.tabela thead th { border-bottom: 1px solid var(--linia); background: var(--tlo); }
.tabela tbody tr:hover td { background: var(--tlo); }
.przewijak { border-radius: var(--r-karta); }

/* ---- znaczniki ---- */

.znacznik { border-radius: var(--r-znak); border: 0; padding: 5px 12px; }
.znacznik.jest-potwierdzony { background: var(--zielen-tlo); color: var(--zielen); }
.znacznik.jest-nieoceniony { background: var(--tlo); color: var(--wtorny-mocny); }

/* ---- filtry ---- */

.filtr { border-radius: var(--r-kafel); border: 0; background: var(--tlo); }
.filtr:hover { background: var(--tlo-2); }
.filtr.jest-aktywny { background: var(--atrament); }
.filtr.jest-aktywny .filtr__licznik,
.filtr.jest-aktywny .filtr__etykieta { color: #FFFFFF; }

/* ---- pozostałe ---- */

.sklad__pasek { border-radius: var(--r-znak); }
.sklad__seg:first-child { border-radius: var(--r-znak) 0 0 var(--r-znak); }
.sklad__seg:last-child { border-radius: 0 var(--r-znak) var(--r-znak) 0; }
.wgrywarka { border-radius: var(--r-kafel); }
.rozwijak > summary { border-radius: var(--r-kafel); }
.pasek-dolny--przyklejony { border-radius: var(--r-karta); box-shadow: var(--cien-menu); }
.metale__pasek, .metale__wypelnienie { border-radius: var(--r-znak); }
.podzialka__nr { border-radius: var(--r-znak); }
.podzialka__krok.jest-aktywny .podzialka__nr { background: var(--akcent); border-color: var(--akcent); color: #FFFFFF; }

/* ---- logowanie ---- */

.logowanie { background: var(--tlo-2); padding: var(--odstep); gap: var(--odstep); }
.logowanie__obraz { border-radius: var(--r-karta); }
.logowanie__panel { border-radius: var(--r-karta); }

/* ============================ RESPONSYWNOŚĆ POWŁOKI ============================ */

@media (max-width: 1180px) {
	.gora__lewo .szukaj { display: none; }
	.miernik__dane .miernik__tor { width: 72px; }
}

@media (max-width: 980px) {
	.rama { flex-direction: column; padding: 10px; gap: 10px; }
	.bok {
		width: auto;
		position: static;
		max-height: none;
		flex-direction: row;
		align-items: center;
		gap: 12px;
		padding: 12px;
		overflow-x: auto;
	}
	.bok__gora { display: flex; align-items: center; gap: 12px; flex: 1; min-width: 0; }
	.bok__marka { flex: none; }
	.firma { flex: none; width: 210px; }
	.nawigacja { display: flex; gap: 8px; }
	.kafel { height: auto; width: auto; flex-direction: row; align-items: center; gap: 9px; padding: 9px 13px; }
	.kafel__ikona { width: 26px; height: 26px; border-radius: 9px; font-size: 14px; }
	.stany { display: none; }
	.bok__dol { margin-top: 0; }
	.bok__ustawienia { flex-direction: row; align-items: center; padding: 9px 13px; }
	.konto__dane, .okruszki__dzial, .okruszki__sep { display: none; }
}

@media (max-width: 720px) {
	.gora { height: auto; padding: 10px; flex-wrap: wrap; }
	.miernik__dane { display: none; }
	.asystent-fab { right: 12px; bottom: 12px; padding: 0 8px; height: 50px; }
	.asystent-fab__tekst { display: none; }
	.naglowek__liczniki { flex-wrap: wrap; }
	.licznik { width: calc(50% - 4px); }
}

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

/* ============================ BAZA WIEDZY ============================ */

/* Artykuł tygodnia na czarnym bloku — jedyne miejsce w aplikacji, gdzie
   treść redakcyjna dostaje tyle uwagi co dane. To materiał, który ma
   zatrzymać człowieka na chwilę, a nie kolejny wiersz do odhaczenia. */
.polecany {
	display: flex;
	gap: 22px;
	background: var(--atrament);
	border-radius: var(--r-karta);
	padding: 30px;
	margin-bottom: var(--odstep);
}
.polecany__tresc { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.polecany__etykieta {
	font: 500 10px/1 var(--mono);
	letter-spacing: .12em;
	text-transform: uppercase;
	background: var(--akcent);
	color: #FFFFFF;
	border-radius: var(--r-znak);
	padding: 7px 12px;
}
.polecany__tytul {
	margin: 0;
	font: 700 30px/1.2 var(--sans);
	letter-spacing: -.02em;
	color: #FFFFFF;
	max-width: 22ch;
}
.polecany__lead { margin: 0; font: 400 15px/1.6 var(--sans); color: #B7BCBF; max-width: 62ch; }
.polecany__stopka { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 4px; }
.polecany__meta { font: 400 12px/1.4 var(--mono); color: #7C8185; }

.polecany__nowe {
	flex: none;
	align-self: flex-start;   /* bez tego panel rozciąga się na wysokość bloku */
	width: 260px;
	background: #22252A;
	border-radius: 20px;
	padding: 20px;
	display: flex;
	flex-direction: column;
	gap: 8px;
}
.polecany__nowe-tytul { font: 600 13px/1.3 var(--sans); color: #FFFFFF; }
.polecany__nowe-liczba { font: 700 26px/1 var(--sans); color: var(--akcent-jasny); }
.polecany__nowe-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.polecany__nowe-lista a { font: 400 13px/1.4 var(--sans); color: #B7BCBF; text-decoration: none; }
.polecany__nowe-lista a:hover { color: #FFFFFF; }

.wiedza-pasek { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: var(--odstep); }
.wiedza-kategorie { display: flex; gap: 8px; flex-wrap: wrap; flex: 1; }

.pigulka {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	height: 38px;
	padding: 0 15px;
	border-radius: var(--r-znak);
	background: var(--bialy);
	color: var(--wtorny-mocny);
	font: 500 13px/1 var(--sans);
	text-decoration: none;
}
.pigulka:hover { background: var(--tlo); color: var(--atrament); }
.pigulka b { font: 500 12px/1 var(--mono); color: var(--wtorny); }
.pigulka.jest-aktywny { background: var(--atrament); color: #FFFFFF; }
.pigulka.jest-aktywny b { color: var(--akcent-jasny); }

.wiedza-siatka {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
	gap: var(--odstep);
	margin-bottom: var(--odstep);
}

.wpis {
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 22px;
	display: flex;
	flex-direction: column;
	gap: 10px;
	text-decoration: none;
	box-shadow: var(--cien);
	min-height: 210px;
}
.wpis:hover { background: var(--akcent-tlo); }
.wpis__kategoria {
	align-self: flex-start;
	font: 500 11px/1 var(--sans);
	color: var(--wtorny-mocny);
	background: var(--tlo);
	border-radius: var(--r-znak);
	padding: 6px 11px;
}
.wpis__tytul { margin: 0; font: 700 17px/1.3 var(--sans); letter-spacing: -.01em; color: var(--atrament); }
.wpis__lead { margin: 0; font: 400 13.5px/1.55 var(--sans); color: var(--wtorny-mocny); }
.wpis__stopka { margin-top: auto; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.wpis__meta { font: 400 11.5px/1 var(--mono); color: var(--wtorny); }
.wpis__strzalka {
	width: 30px; height: 30px; flex: none;
	border-radius: var(--r-znak);
	background: var(--tlo);
	display: flex; align-items: center; justify-content: center;
	font: 400 13px/1 var(--sans);
	color: var(--atrament);
}
.wpis:hover .wpis__strzalka { background: var(--akcent); color: #FFFFFF; }

/* ---- pojedynczy artykuł ---- */

.artykul { padding: 34px var(--bok) 40px; }
.artykul .wpis__kategoria { display: inline-block; }
.artykul__powrot { display: block; font: 400 13px/1 var(--sans); color: var(--wtorny); text-decoration: none; margin-bottom: 18px; }
.artykul__powrot:hover { color: var(--atrament); }
.artykul__tytul { margin: 10px 0 0; font: 700 34px/1.2 var(--sans); letter-spacing: -.025em; max-width: 24ch; }
.artykul__lead { margin: 12px 0 0; font: 400 17px/1.6 var(--sans); color: var(--wtorny-mocny); max-width: 68ch; }
.artykul__meta { margin: 14px 0 22px; font: 400 12px/1.4 var(--mono); color: var(--wtorny); }

/* Miara wiersza pod czytanie ciągiem, nie pod wypełnienie szerokości karty. */
.artykul__tresc { max-width: 70ch; font: 400 16px/1.75 var(--sans); }
.artykul__tresc h2 { margin: 34px 0 12px; font: 700 22px/1.3 var(--sans); letter-spacing: -.02em; }
.artykul__tresc h3 { margin: 26px 0 10px; font: 600 17px/1.35 var(--sans); }
.artykul__tresc p { margin: 0 0 16px; }
.artykul__tresc ul, .artykul__tresc ol { margin: 0 0 16px; padding-left: 22px; }
.artykul__tresc li { margin-bottom: 7px; }
.artykul__tresc a { color: var(--akcent); text-decoration: underline; text-underline-offset: 2px; }
.artykul__tresc a:hover { color: var(--akcent-mocny); }
.artykul__tresc code { font: 400 14px/1.5 var(--mono); background: var(--tlo); border-radius: 6px; padding: 2px 6px; }
.artykul__tresc pre {
	background: var(--atrament);
	color: #E6E5E0;
	border-radius: var(--r-kafel);
	padding: 16px 18px;
	overflow-x: auto;
	margin: 0 0 18px;
}
.artykul__tresc pre code { background: none; color: inherit; padding: 0; font-size: 13px; }
.artykul__tresc blockquote {
	margin: 0 0 18px;
	padding: 14px 18px;
	border-left: 4px solid var(--akcent);
	background: var(--akcent-tlo);
	border-radius: 0 var(--r-kafel) var(--r-kafel) 0;
}
.artykul__tresc blockquote p:last-child { margin: 0; }
.artykul__tresc table { width: 100%; border-collapse: collapse; margin: 0 0 20px; font-size: 14.5px; }
.artykul__tresc th, .artykul__tresc td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--linia-2); }
.artykul__tresc th { font: 600 12.5px/1.3 var(--sans); background: var(--tlo); }
.artykul__tresc hr { border: 0; border-top: 1px solid var(--linia); margin: 30px 0; }
.artykul__tresc img { max-width: 100%; height: auto; border-radius: var(--r-kafel); }

@media (max-width: 900px) {
	.polecany { flex-direction: column; padding: 22px; }
	.polecany__nowe { width: auto; }
	.polecany__tytul { font-size: 24px; }
	.artykul__tytul { font-size: 26px; }
}

/* ==========================================================================
   MOTYW 2026 — poprawki po przeglądzie na ekranie
   ==========================================================================

   Rzeczy, których nie widać w kodzie, tylko na zrzucie z przeglądarki.
   Trzymane osobno, żeby było wiadomo, co zostało dołożone po fakcie i po co.
   ========================================================================== */

/* ---- neutralny przycisk ginął na szarym wierszu ----
   .btn ma białe tło, a .btn--cichy szare. Na karcie kroków startowych, która
   też jest szara, przycisk „Nowe opakowanie" stawał się samym napisem bez
   żadnej ramki — wyglądał jak wyłączony, a jest klikalny.

   Zasada: neutralny przycisk jest zawsze o warstwę jaśniejszy od podłoża.
   Na białej karcie szary, na szarym wierszu biały. */

/* Uwaga na kolejność: reguła bazowa .btn siedzi w sekcji MOTYW, PRZED
   wariantami. Postawiona tutaj miałaby tę samą specyficzność co .btn--glowny,
   ale stała później w pliku — i wygaszała wszystkie kolorowe przyciski. */

.start__krok .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij),
.pasek-grupy .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij),
/* Pasek dolny w treści też jest szary. Przyklejony do dołu ekranu już nie —
   ten jest biały i neutralny przycisk ma na nim zostać szary. */
.pasek-dolny:not(.pasek-dolny--przyklejony) .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij),
.licznik .btn:not(.btn--glowny) {
	background: var(--bialy);
	border-color: transparent;
	color: var(--atrament);
}
/* Wykluczenia muszą być te same co w regule wyżej. Bez nich „Dodaj firmę"
   w pasku dolnym gubił przy najechaniu niebieskie tło, zachowując biały
   tekst — biały napis na jasnoszarym tle, nie do odczytania. */
.start__krok .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij):hover,
.pasek-dolny:not(.pasek-dolny--przyklejony) .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij):hover,
.pasek-grupy .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij):hover { background: var(--linia-2); }

/* ---- czarna kreska nad paskiem stanu ----
   .pasek-grupy.jest-info i .jest-uwaga miały border-top w kolorze atramentu.
   Reguła zerująca w sekcji MOTYW miała niższą specyficzność (0,1,0 wobec
   0,2,0) i przegrywała, więc nad kartą wisiała ciemna linia bez powodu. */
.pasek-grupy.jest-info, .pasek-grupy.jest-uwaga { border-top: 0; }

/* ---- pasek komunikatu ----
   Był przyklejony do góry okna z własnym szarym tłem i cieniem — z czasów,
   gdy treść zaczynała się od krawędzi ekranu. W układzie z kartami wisiał
   nad nimi i zasłaniał rozwinięte menu. Wraca do zwykłego przepływu. */
.flash-pas {
	position: static;
	z-index: auto;
	padding: 0;
	background: transparent;
	box-shadow: none;
}
.flash-pas .komunikat { margin: 0 0 var(--odstep); }

/* ---- numery kroków startowych ----
   Ostre kwadraty w układzie, w którym wszystko inne jest zaokrąglone. */
.start__nr { border-radius: var(--r-pole); border-color: transparent; }
.start__krok.jest-zrobiony .start__nr,
.start__krok.jest-biezacy .start__nr { border-color: transparent; }

/* ============================ WYROBY — KAFELKI ============================ */

/* Poziomy pas na wyrób, nie kwadratowa karta w siatce. Wyrób ma jedną nazwę,
   ale długi pasek składu materiałowego — pion marnowałby miejsce tam, gdzie
   potrzeba szerokości. */

.wyroby { display: flex; flex-direction: column; gap: 10px; margin-bottom: var(--odstep); }

.wyrob {
	display: flex;
	align-items: center;
	gap: 20px;
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 16px 20px;
	box-shadow: var(--cien);
}

/* Stan jako pierwszy element wiersza: przy przeglądaniu listy oko szuka
   najpierw tego, co wymaga uwagi, a dopiero potem nazwy. */
.wyrob__stan {
	width: 42px; height: 42px; flex: none;
	border-radius: var(--r-kafel);
	display: flex; align-items: center; justify-content: center;
	font: 500 14px/1 var(--mono);
	background: var(--tlo);
	color: var(--wtorny);
}
.wyrob--gotowe .wyrob__stan { background: var(--zielen-tlo); color: var(--zielen); }
.wyrob--braki .wyrob__stan { background: var(--rdza-tlo); color: var(--rdza); }
.wyrob--wycofane { opacity: .62; }

.wyrob__opis { flex: none; width: 232px; display: flex; flex-direction: column; gap: 3px; }
.wyrob__nazwa {
	font: 600 15px/1.3 var(--sans);
	color: var(--atrament);
	text-decoration: none;
}
.wyrob__nazwa:hover { color: var(--akcent); }
.wyrob__meta { font: 400 11.5px/1.45 var(--mono); color: var(--wtorny); }

.wyrob__sklad { flex: 1; min-width: 0; }

.wyrob__akcje { flex: none; display: flex; align-items: center; gap: 8px; }

/* ---- przełącznik widoku ---- */

.przelacznik {
	display: inline-flex;
	gap: 3px;
	padding: 3px;
	border-radius: var(--r-pole);
	background: var(--tlo);
}
.przelacznik__opcja {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	height: 32px;
	padding: 0 12px;
	border-radius: 9px;
	font: 500 12.5px/1 var(--sans);
	color: var(--wtorny-mocny);
	text-decoration: none;
}
.przelacznik__opcja:hover { color: var(--atrament); }
.przelacznik__opcja.jest-aktywny { background: var(--bialy); color: var(--atrament); box-shadow: var(--cien); }

/* ---- pasek kategorii ---- */

.kategorie-pasek {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin-bottom: var(--odstep);
}
.pigulka--cicha { background: transparent; color: var(--wtorny); cursor: pointer; list-style: none; }
.pigulka--cicha::-webkit-details-marker { display: none; }
.pigulka--cicha:hover { background: var(--bialy); }

.kategorie-menu { position: relative; }
.kategorie-panel {
	position: absolute;
	top: calc(100% + 8px);
	left: 0;
	z-index: 40;
	width: 320px;
	background: var(--bialy);
	border-radius: 18px;
	padding: 14px;
	box-shadow: var(--cien-menu);
}
.kategorie-nowa { display: flex; gap: 8px; }
.kategorie-nowa input { flex: 1; min-width: 0; }

.kategorie-lista { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.kategorie-lista li {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	padding: 7px 9px;
	border-radius: var(--r-pole);
	font: 400 13px/1.3 var(--sans);
}
.kategorie-lista li:hover { background: var(--tlo); }
.kategorie-lista form { margin: 0; }

@media (max-width: 1080px) {
	.wyrob { flex-wrap: wrap; }
	.wyrob__opis { width: auto; flex: 1; }
	.wyrob__sklad { order: 3; flex-basis: 100%; }
	.przelacznik__tekst { display: none; }
}

/* ============================ PULPIT ============================ */

.siatka-2 {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 400px;
	gap: var(--odstep);
	margin-bottom: var(--odstep);
	align-items: start;
}
.siatka-2--kolejka { align-items: start; }
.kolumna-boczna { display: flex; flex-direction: column; gap: var(--odstep); }

/* ---- powitanie ---- */

.hero {
	display: flex;
	gap: var(--odstep);
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 28px var(--bok);
	margin-bottom: var(--odstep);
	box-shadow: var(--cien);
}
.hero__tresc { flex: 1; min-width: 0; }
.hero__tytul { margin: 0; font: 700 32px/1.15 var(--sans); letter-spacing: -.03em; }
.hero__podpis { margin: 8px 0 0; font: 400 13px/1.5 var(--sans); color: var(--wtorny); }

.hero__liczniki { display: flex; gap: 32px; flex-wrap: wrap; margin-top: 26px; }
.metryka { display: flex; flex-direction: column; gap: 3px; text-decoration: none; }
.metryka b { font: 700 26px/1 var(--sans); color: var(--atrament); letter-spacing: -.02em; }
.metryka span { font: 400 11.5px/1.3 var(--sans); color: var(--wtorny); }
.metryka:hover b { color: var(--akcent); }
.metryka.jest-blad b { color: var(--rdza); }

/* ---- gotowość kartoteki ---- */

.gotowosc {
	flex: none;
	width: 320px;
	background: var(--tlo);
	border-radius: 20px;
	padding: 20px;
	display: flex;
	flex-direction: column;
	gap: 16px;
}
.gotowosc__gora { display: flex; flex-direction: column; gap: 3px; }
.gotowosc__tytul { font: 600 13px/1.3 var(--sans); }
.gotowosc__opis { font: 400 11px/1.3 var(--mono); color: var(--wtorny); }

.gotowosc__miara { display: flex; align-items: center; gap: 14px; }
.gotowosc__miara b { font: 700 34px/1 var(--sans); letter-spacing: -.03em; }
.gotowosc__miara b span { font-size: 17px; color: var(--wtorny); margin-left: 2px; }

/* Pięć segmentów zamiast paska: przy trzech wyrobach „33 %" nic nie mówi,
   a trzy zapalone kwadraty z pięciu widać jednym rzutem oka. */
.gotowosc__segmenty { display: flex; gap: 5px; flex: 1; }
.gotowosc__segmenty span {
	flex: 1; height: 34px;
	border-radius: 9px;
	background: var(--bialy);
}
.gotowosc__segmenty span.jest-pelny { background: var(--akcent); }

.gotowosc__akcje { display: flex; gap: 8px; }
.gotowosc__akcje .btn { flex: 1; justify-content: center; background: var(--bialy); }
.gotowosc__akcje .btn--glowny { background: var(--akcent); }

/* ---- wykres deklaracji ---- */

.wykres { padding: 22px var(--bok) 18px; }
.wykres__gora { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 22px; }
.wykres__gora > div > b { display: block; font: 700 16px/1.3 var(--sans); }
.wykres__gora > div > span { display: block; font: 400 12.5px/1.4 var(--sans); color: var(--wtorny); margin-top: 2px; }

.wykres__slupki { display: flex; align-items: flex-end; gap: 8px; height: 160px; }
.slupek { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 8px; height: 100%; }
.slupek__tor {
	flex: 1; width: 100%;
	display: flex; flex-direction: column; justify-content: flex-end;
	background: var(--tlo);
	border-radius: 10px;
	overflow: hidden;
}
.slupek__pelne { display: block; background: var(--akcent); min-height: 4px; }
.slupek__warunkowe { display: block; background: var(--akcent-linia); min-height: 4px; }
.slupek__etykieta { font: 400 10.5px/1 var(--mono); color: var(--wtorny); }

/* Miesiąc w toku jest ciemny, a nie w kolorze akcentu — słupek jeszcze rośnie
   i nie należy go czytać jak zamkniętego wyniku. */
.slupek.jest-biezacy .slupek__pelne { background: var(--atrament); }
.slupek.jest-biezacy .slupek__etykieta { color: var(--atrament); font-weight: 600; }
/* Miesiące, które jeszcze nie nadeszły, są w kratkę — pusto znaczy tu
   „nie było kiedy", a nie „nie zrobiono". */
.slupek.jest-przyszly .slupek__tor {
	background: repeating-linear-gradient(45deg, var(--tlo), var(--tlo) 4px, var(--tlo-2) 4px, var(--tlo-2) 8px);
}

.wykres__legenda { display: flex; gap: 20px; flex-wrap: wrap; margin-top: 18px; }
.wykres__legenda span { display: inline-flex; align-items: center; gap: 7px; font: 400 12px/1 var(--sans); color: var(--wtorny); }
.wykres__legenda b { font: 500 12px/1 var(--mono); color: var(--atrament); }

.kropka { width: 9px; height: 9px; border-radius: 3px; display: inline-block; }
.kropka--pelne { background: var(--akcent); }
.kropka--warunkowe { background: var(--akcent-linia); }
.kropka--biezacy { background: var(--atrament); }
.kropka--ai { background: var(--akcent-jasny); }

/* ---- karta zużycia AI ---- */

.ai-karta {
	background: var(--atrament);
	border-radius: var(--r-karta);
	padding: 22px;
	display: flex;
	flex-direction: column;
	gap: 16px;
}
.ai-karta__gora { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
/* Selektory celują w bezpośredni div z tytułem, a nie w każdy span w nagłówku.
   Szeroki „.ai-karta__gora span" ma specyficzność 0,1,1 i odbierał kwadratowi
   ikony (0,1,0) układ, rozmiar i kolor — gwiazdka lądowała w rogu karty. */
.ai-karta__gora > div > b { display: block; font: 700 16px/1.3 var(--sans); color: #FFFFFF; }
.ai-karta__gora > div > span { display: block; font: 400 11.5px/1.4 var(--mono); color: #8B9095; margin-top: 3px; }
.ai-karta__znak {
	width: 34px; height: 34px; flex: none;
	border-radius: var(--r-pole);
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 400 16px/1 var(--sans);
}

.ai-karta__liczby { display: flex; align-items: baseline; gap: 8px; }
.ai-karta__liczby b { font: 700 38px/1 var(--sans); color: #FFFFFF; letter-spacing: -.03em; }
.ai-karta__liczby span { font: 400 12px/1 var(--mono); color: #8B9095; }

.ai-karta__tor { display: block; height: 8px; border-radius: 4px; background: #2C3036; overflow: hidden; }
.ai-karta__wypelnienie { display: block; height: 8px; border-radius: 4px; background: var(--akcent); }

.ai-karta__rozbicie { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.ai-karta__rozbicie li { display: flex; align-items: center; gap: 9px; font: 400 12.5px/1.3 var(--sans); color: #B7BCBF; }
.ai-karta__rozbicie li span { flex: 1; min-width: 0; }
.ai-karta__rozbicie li b { font: 500 12px/1 var(--mono); color: #FFFFFF; }
.ai-karta__pusto { margin: 0; font: 400 12.5px/1.5 var(--sans); color: #8B9095; }

.ai-karta__dol {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	margin-top: auto; padding-top: 4px;
	font: 400 11px/1.4 var(--mono); color: #8B9095;
}
.ai-karta__dol .btn { background: #2C3036; border-color: transparent; color: #FFFFFF; }
.ai-karta__dol .btn:hover { background: #3A3F46; border-color: transparent; color: #FFFFFF; }

/* ---- panele w kolumnie bocznej ---- */

.panel { padding: 20px; display: flex; flex-direction: column; gap: 14px; }
.panel__gora { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.panel__gora b { font: 700 15px/1.3 var(--sans); }
.panel__gora a { font: 400 12px/1 var(--sans); color: var(--akcent); text-decoration: none; }
.panel__pusto { margin: 0; font: 400 13px/1.5 var(--sans); color: var(--wtorny); }

.wyrozniony {
	display: block;
	background: var(--akcent-tlo);
	border-radius: var(--r-kafel);
	padding: 15px 16px;
	text-decoration: none;
}
.wyrozniony:hover { background: var(--akcent-linia); }
.wyrozniony__etykieta {
	display: block;
	font: 500 10px/1 var(--mono);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--akcent-mocny);
	margin-bottom: 7px;
}
.wyrozniony b { font: 700 14.5px/1.35 var(--sans); color: var(--atrament); }

.lista-wpisow, .lista-deklaracji { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.lista-wpisow li { display: flex; align-items: flex-start; gap: 11px; padding: 8px 6px; border-radius: var(--r-pole); }
.lista-wpisow li:hover { background: var(--tlo); }
.lista-wpisow__znak {
	width: 30px; height: 30px; flex: none;
	border-radius: 10px;
	background: var(--tlo);
	display: flex; align-items: center; justify-content: center;
	font: 400 9px/1 var(--mono); color: var(--wtorny);
}
/* Selektory celują w spany wewnątrz odnośnika, nie w każdy span pozycji.
   Szerokie „.lista-wpisow span" (0,1,1) odbierało znakowi „art" (0,1,0)
   display: flex, rozmiar i marginesy — napis lądował w lewym górnym rogu
   kwadratu zamiast na jego środku. */
.lista-wpisow a { text-decoration: none; }
.lista-wpisow a b { display: block; font: 500 13px/1.4 var(--sans); color: var(--atrament); }
.lista-wpisow a span { display: block; font: 400 10.5px/1.3 var(--mono); color: var(--wtorny); margin-top: 3px; }

.lista-deklaracji li {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	padding: 9px 6px; border-radius: var(--r-pole);
}
.lista-deklaracji li:hover { background: var(--tlo); }
.lista-deklaracji a { text-decoration: none; min-width: 0; }
.lista-deklaracji b { display: block; font: 500 12px/1.3 var(--mono); color: var(--atrament); }
.lista-deklaracji span { display: block; font: 400 11.5px/1.3 var(--sans); color: var(--wtorny); margin-top: 2px; }

.zapytaj {
	display: flex; align-items: center; gap: 12px;
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 14px 18px 14px 14px;
	text-decoration: none;
	box-shadow: var(--cien);
}
.zapytaj:hover { background: var(--akcent-tlo); }
.zapytaj__znak {
	width: 34px; height: 34px; flex: none;
	border-radius: var(--r-pole);
	background: var(--atrament);
	color: var(--akcent-jasny);
	display: flex; align-items: center; justify-content: center;
	font: 400 15px/1 var(--sans);
}
.zapytaj__tekst { flex: 1; font: 400 13px/1.4 var(--sans); color: var(--atrament); }
.zapytaj__strzalka { font: 400 13px/1 var(--mono); color: var(--wtorny); }

@media (max-width: 1240px) {
	.siatka-2 { grid-template-columns: minmax(0, 1fr); }
	.hero { flex-direction: column; }
	.gotowosc { width: auto; }
}
@media (max-width: 720px) {
	.hero__tytul { font-size: 24px; }
	.hero__liczniki { gap: 20px; }
	.wykres__slupki { height: 120px; }
}

/* ==========================================================================
   PASEK BOCZNY — barwy działów
   ==========================================================================

   Kafelki dostają bardzo blade wypełnienia. Chodzi o drugą cechę rozpoznawczą
   obok położenia — po tygodniu trafia się w „Dowody" nie czytając podpisu.
   Ikona zostaje biała, żeby na każdym tle miała ten sam kontrast.

   Barwy są celowo odklejone od znaczeń stanu: zieleń przy „Deklaracjach" nie
   mówi „gotowe", tylko „to ten dział". Znaczenia niesie pasek stanu niżej.
   ========================================================================== */

.kafel--akcent  { background: #E9EFFD; }
.kafel--blekit  { background: #E7EEF8; }
.kafel--fiolet  { background: #EFE9F7; }
.kafel--ziel    { background: #E6F2EA; }
.kafel--zolc    { background: #F8F1DC; }
.kafel--roz     { background: #FAEAEA; }

.kafel--akcent:hover { background: #DDE7FC; }
.kafel--blekit:hover { background: #DBE6F4; }
.kafel--fiolet:hover { background: #E7DEF3; }
.kafel--ziel:hover   { background: #DAEBE0; }
.kafel--zolc:hover   { background: #F3E9CB; }
.kafel--roz:hover    { background: #F6DEDE; }

.kafel__ikona { background: #FFFFFF; }

/* Aktywny wygrywa z barwą działu: czerń plus akcentowa ikona. */
.kafel.jest-aktywny,
.kafel.jest-aktywny:hover { background: var(--atrament); }
.kafel.jest-aktywny .kafel__ikona { background: var(--akcent); color: #FFFFFF; }

/* Znak marki w kolorze akcentu, jak na makiecie. */
.bok__znak { background: var(--akcent); color: #FFFFFF; }

/* ---- pole szukania w górnym pasku ----
   Placeholder był ucinany w połowie słowa, bo pole nie miało dolnej granicy
   szerokości i kurczyło się razem z pastylką. */
.szukaj__pole::placeholder { color: var(--wtorny); }
.szukaj { min-width: 190px; }
@media (max-width: 1320px) {
	.szukaj { max-width: 230px; }
}

/* ==========================================================================
   PASEK BOCZNY I PULPIT — poprawki z przeglądu 6.08, tura druga
   ========================================================================== */

/* ---- wybór firmy ----
   Czarny blok konkurował z aktywną pozycją nawigacji: dwa czarne prostokąty
   jeden pod drugim, oba wyglądające na wybrane. Firma schodzi na szarość
   i odzyskuje własny oddech marginesem. */
.firma { margin: 20px 0; }
.firma__przycisk { background: var(--tlo); }
.firma__przycisk:hover { background: var(--tlo-2); }
.firma__nazwa { color: var(--atrament); }
.firma__podpis { color: var(--wtorny); }
.firma__strzalka { color: var(--wtorny); }

/* ---- nawigacja jako lista ----
   Kafelki 2×3 wymuszały skracanie podpisów i przy sześciu działach zjadały
   pół paska. Wiersz mieści pełną nazwę i skaluje się na kolejne pozycje.

   Barwa działu przenosi się na kwadrat ikony. W siatce wypełniała cały
   kafelek, ale w liście sześć kolorowych pasów pod sobą wyglądałoby jak
   ostrzeżenia — kolor zostaje jako znacznik, nie jako tło. */
.nawigacja { display: flex; flex-direction: column; gap: 3px; }

.kafel {
	height: auto;
	flex-direction: row;
	align-items: center;
	gap: 11px;
	padding: 8px 10px;
	border-radius: 13px;
	background: transparent;
	/* Zostało po układzie kolumnowym, gdzie rozpychało ikonę i podpis na
	   górę i dół kafelka. W wierszu odsuwało podpis do prawej krawędzi. */
	justify-content: flex-start;
}
.kafel:hover { background: var(--tlo); }
.kafel__etykieta { flex: 1; font: 500 13.5px/1.2 var(--sans); color: var(--wtorny-mocny); }
.kafel__ikona { width: 34px; height: 34px; border-radius: 11px; font-size: 15px; }

.kafel--akcent, .kafel--blekit, .kafel--fiolet,
.kafel--ziel, .kafel--zolc, .kafel--roz { background: transparent; }
.kafel--akcent:hover, .kafel--blekit:hover, .kafel--fiolet:hover,
.kafel--ziel:hover, .kafel--zolc:hover, .kafel--roz:hover { background: var(--tlo); }

.kafel--akcent .kafel__ikona { background: #E9EFFD; }
.kafel--blekit .kafel__ikona { background: #E7EEF8; }
.kafel--fiolet .kafel__ikona { background: #EFE9F7; }
.kafel--ziel   .kafel__ikona { background: #E6F2EA; }
.kafel--zolc   .kafel__ikona { background: #F8F1DC; }
.kafel--roz    .kafel__ikona { background: #FAEAEA; }

.kafel.jest-aktywny, .kafel.jest-aktywny:hover { background: var(--atrament); }
.kafel.jest-aktywny .kafel__etykieta { color: #FFFFFF; }
.kafel.jest-aktywny .kafel__ikona { background: var(--akcent); color: #FFFFFF; }

.stany { margin-top: 16px; }

/* ---- ustawienia: ikona po lewej, tekst po prawej ---- */
.bok__ustawienia {
	flex-direction: row;
	align-items: center;
	gap: 11px;
	padding: 8px 10px;
	border-radius: 13px;
	background: transparent;
}
.bok__ustawienia:hover { background: var(--tlo); }
.bok__ustawienia span:first-child {
	width: 34px; height: 34px;
	border-radius: 11px;
	background: var(--tlo);
	color: var(--wtorny-mocny);
	font-size: 15px;
}
.bok__ustawienia span:last-child { font: 500 13.5px/1.2 var(--sans); color: var(--wtorny-mocny); }

/* ---- szukajka bez pola w polu ----
   Reguła input[type=search] ma specyficzność 0,1,1 i biła .szukaj__pole
   (0,1,0), więc input malował sobie białe tło i ramkę wewnątrz szarej
   pastylki. Pastylka JEST polem — input ma być niewidzialny. */
.szukaj .szukaj__pole,
.szukaj .szukaj__pole:focus {
	background: transparent;
	border: 0;
	box-shadow: none;
	outline: none;
	height: 100%;
	padding: 0;
	font: 400 13px/1 var(--sans);
	color: var(--atrament);
}
.szukaj:focus-within { background: var(--tlo-2); box-shadow: none; }
.szukaj__skrot { flex: none; }

/* ---- powitanie: kreska zamiast płyty ----
   Szare tło po prawej robiło z gotowości osobną kartę wewnątrz karty.
   Wystarczy pionowa kreska — ta sama karta, dwie kolumny. */
.gotowosc {
	background: transparent;
	border-left: 1px solid var(--linia);
	border-radius: 0;
	padding: 4px 0 4px 26px;
	width: 340px;
}
.gotowosc__gora { flex-direction: row; align-items: baseline; justify-content: space-between; gap: 12px; }
.gotowosc__opis { flex: none; }
.gotowosc__segmenty span { background: var(--tlo); }
.gotowosc__akcje .btn { background: var(--tlo); }
.gotowosc__akcje .btn:hover { background: var(--tlo-2); }
.gotowosc__akcje .btn--glowny { background: var(--akcent); }
.gotowosc__akcje .btn--glowny:hover { background: var(--akcent-mocny); }

/* ---- karta AI równa wysokością wykresowi ----
   Karta była niższa, bo przy pustym miesiącu nie ma czego wypisywać.
   Rozciągnięcie w wierszu siatki wyrównuje krawędzie, a stopka i tak
   trzyma się dołu przez margin-top: auto. */
.siatka-2 { align-items: stretch; }
.siatka-2--kolejka { align-items: start; }
.ai-karta__pusto { margin: 0 0 auto; }

/* Blok w siatce nie potrzebuje własnego marginesu — odstęp niesie gap.
   Bez tego karta AI wychodziła 14 px niżej niż wykres, bo stretch wyrównywał
   pudełka razem z marginesem, a nie same karty. */
.siatka-2 > .blok,
.kolumna-boczna .blok { margin-bottom: 0; }
.siatka-2--kolejka > div > .blok:last-child { margin-bottom: 0; }

/* ==========================================================================
   TURA TRZECIA — logo, kolejka, wyroby, asystent
   ========================================================================== */

/* ---- logo z pliku ---- */
.bok__logo { width: 34px; height: 34px; flex: none; border-radius: 11px; object-fit: contain; }

/* ---- asystent: sama ikona ----
   Stały podpis „Wystaw deklarację ze mną" zasłaniał róg treści na każdym
   ekranie i obiecywał czat, którego przycisk nie otwiera — prowadzi do
   pełnego widoku asystenta. Zostaje kółko. */
.asystent-fab {
	width: 56px; height: 56px;
	padding: 0;
	justify-content: center;
	border-radius: var(--r-znak);
}
.asystent-fab__znak { width: 100%; height: 100%; background: transparent; font-size: 21px; }
.asystent-fab:hover .asystent-fab__znak { color: var(--akcent-jasny); }

/* ---- kolejka spraw ----
   Wiersze rozdzielone kreską zlewały się w jeden blok tekstu. Teraz każdy
   brak jest osobną kartą w kolorze swojego poziomu — widać, ile ich jest,
   zanim się cokolwiek przeczyta. */
.kolejka { display: flex; flex-direction: column; gap: 10px; padding: 16px; }
.kolejka__pusto { margin: 0; padding: 20px 6px; font: 400 13.5px/1.5 var(--sans); color: var(--wtorny); }

.kolejka-filtry { display: flex; gap: 6px; margin-left: auto; flex-wrap: wrap; }
.kolejka-filtry .pigulka { border: 0; cursor: pointer; font-family: var(--sans); height: 34px; }

.zadanie {
	display: flex;
	align-items: center;
	gap: 16px;
	border: 0;
	border-radius: 18px;
	padding: 14px 16px;
}
.zadanie--blad  { background: var(--rdza-tlo); }
.zadanie--uwaga { background: var(--bursztyn-tlo); }
.zadanie--info  { background: var(--tlo); }

/* Zerowanie odstępów jest tu konieczne, nie kosmetyczne. Poprzednia wersja
   tego elementu była kolumną ciągnącą się przez cały wiersz i miała
   padding-left 26 px oraz margin-left −4 px, żeby zgrać się z wcięciem karty.
   W kafelku o stałej szerokości 62 px ten padding zjadał prawie połowę
   środka — cyfra siadała po prawej stronie kółka, a samo kółko wystawało
   poza wcięcie wiersza. */
.zadanie__waga {
	flex: none;
	width: 62px; height: 62px;
	margin: 0;
	padding: 0;
	border-radius: 20px;
	background: var(--bialy);
	display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
}
.zadanie__waga b { font: 500 16px/1 var(--mono); }
.zadanie__waga span { font: 400 8.5px/1 var(--mono); color: var(--wtorny); letter-spacing: .04em; }
.zadanie--blad  .zadanie__waga b { color: var(--rdza); }
.zadanie--uwaga .zadanie__waga b { color: var(--bursztyn); }

.zadanie__tresc { flex: 1; min-width: 0; }
.zadanie__co {
	margin: 0 0 4px;
	font: 600 14.5px/1.35 var(--sans);
	color: var(--atrament);
	display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
}
.zadanie__plakietka {
	font: 500 9px/1 var(--mono);
	letter-spacing: .08em;
	border-radius: var(--r-znak);
	padding: 5px 8px;
	background: var(--bialy);
}
.zadanie--blad  .zadanie__plakietka { color: var(--rdza); }
.zadanie--uwaga .zadanie__plakietka { color: var(--bursztyn); }
.zadanie--info  .zadanie__plakietka { color: var(--wtorny); }

.zadanie__czemu { margin: 0 0 5px; font: 400 13px/1.5 var(--sans); color: var(--wtorny-mocny); max-width: 74ch; }
.zadanie__gdzie { margin: 0; font: 400 10.5px/1.3 var(--mono); color: var(--wtorny); }

.zadanie__akcja { flex: none; display: flex; align-items: center; gap: 8px; }
.zadanie .btn--cichy { background: var(--bialy); }

/* ---- wyroby: filtry przy tytule ---- */
.naglowek__akcja--filtry { flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.naglowek__akcja--filtry .pigulka { height: 38px; }

.pigulka__kropka { width: 8px; height: 8px; border-radius: var(--r-znak); background: var(--wtorny); }
.pigulka--gotowe .pigulka__kropka { background: var(--zielen); }
.pigulka--braki .pigulka__kropka { background: var(--rdza); }
.pigulka--wycofane .pigulka__kropka { background: var(--wtorny); }
.pigulka--wszystkie.jest-aktywny { background: var(--atrament); }

.narzedzia { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: var(--odstep); }
.narzedzia .kategorie-pasek { flex: 1; margin-bottom: 0; }
.narzedzia__prawo { display: flex; align-items: center; gap: 8px; flex: none; }

/* ---- karta kreatora pod listą ---- */
.kreator-karta {
	display: flex;
	align-items: center;
	gap: 14px;
	background: var(--atrament);
	border-radius: var(--r-karta);
	padding: 14px 16px;
	margin-bottom: var(--odstep);
	text-decoration: none;
}
.kreator-karta:hover { background: #0E1013; }
.kreator-karta__znak {
	width: 40px; height: 40px; flex: none;
	border-radius: var(--r-pole);
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 400 18px/1 var(--sans);
}
.kreator-karta__tresc { flex: 1; min-width: 0; }
.kreator-karta__tresc b { display: block; font: 600 14px/1.3 var(--sans); color: #FFFFFF; }
.kreator-karta__tresc > span { display: block; font: 400 11px/1.4 var(--mono); color: #8B9095; margin-top: 3px; }

@media (max-width: 900px) {
	.zadanie { flex-wrap: wrap; }
	.zadanie__akcja { width: 100%; padding-left: 78px; }
	.narzedzia__prawo { width: 100%; justify-content: flex-end; }
}

/* „% masy" łamało się na dwie linie w kółku o stałej szerokości. */
.zadanie__waga span { white-space: nowrap; }

/* Pasek narzędzi leży na płótnie, nie na karcie — neutralne tło zlewało się
   z podłożem. Na tej wysokości elementy muszą być białe. */
.narzedzia__prawo .btn,
.narzedzia .przelacznik { background: var(--bialy); }
.narzedzia .przelacznik__opcja.jest-aktywny { background: var(--tlo); box-shadow: none; }
.narzedzia__prawo .btn:hover { background: var(--tlo); }

/* ---- logo ----
   Wysokość jest stała, szerokość dowolna. Wcześniej obrazek był wtłaczany
   w kwadrat 34×34 razem z napisem, przez co napis robił się nieczytelny.
   Logo z wpisaną nazwą jest szerokie i musi mieć na to miejsce. */
.bok__marka { padding: 4px 6px; }
.bok__logo {
	width: auto;
	height: 30px;
	max-width: 100%;
	border-radius: 0;
	object-fit: contain;
	object-position: left center;
	display: block;
}

/* ==========================================================================
   KOLEJKA SPRAW — nagłówek w karcie, kroki startowe w tym samym kształcie
   ==========================================================================

   Sekcja miała dwie zupełnie różne postacie: karty braków u firmy z danymi
   i tabelę kroków rozdzieloną kreskami u firmy świeżo założonej. To ten sam
   moduł i ma wyglądać tak samo — zmienia się tylko to, co w nim stoi.
   ========================================================================== */

.kolejka-blok { padding: 0; }

.kolejka-naglowek {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
	padding: 20px 20px 4px;
}
.kolejka-naglowek__tekst b { display: block; font: 700 16px/1.3 var(--sans); }
.kolejka-naglowek__tekst span { display: block; font: 400 12.5px/1.4 var(--sans); color: var(--wtorny); margin-top: 2px; }

.kolejka { list-style: none; margin: 0; }
.kolejka__ok { margin: 0; padding: 6px 6px 14px; font: 400 13.5px/1.5 var(--sans); color: var(--zielen-ciemna); }
.kolejka__ok span { color: var(--zielen); }

/* Kroki startowe dziedziczą kształt wiersza braku, ale mają własne stany:
   zrobiony na zielono, bieżący biały z niebieskim numerem, przyszłe szare
   i wygaszone — kolejność ma być widoczna bez czytania. */
.zadanie--zrobiony { background: var(--zielen-tlo); }
.zadanie--biezacy  { background: var(--bialy); box-shadow: inset 0 0 0 2px var(--akcent-linia); }

.zadanie__waga--krok {
	font: 500 15px/1 var(--mono);
	color: var(--wtorny);
	background: var(--tlo);
	width: 52px; height: 52px;
	margin: 0;
	padding: 0;
	border-radius: 17px;
}
.zadanie--zrobiony .zadanie__waga--krok { background: var(--zielen); color: #FFFFFF; }
.zadanie--biezacy  .zadanie__waga--krok { background: var(--akcent); color: #FFFFFF; }

.zadanie--zrobiony .zadanie__co { color: var(--zielen-ciemna); }
.zadanie--zrobiony .zadanie__czemu { color: var(--zielen-ciemna); }

/* Krok jeszcze nieaktualny nie ma krzyczeć — wyciszamy go, ale zostawiamy
   czytelnym, żeby dało się przeczytać, co będzie dalej. */
.zadanie--info .zadanie__co { color: var(--wtorny-mocny); }

.zadanie--biezacy .btn--glowny { box-shadow: none; }

/* Pionowa kreska i szerokie wcięcie zostały po wierszu ciągnącym się przez
   całą kartę. W kafelku o własnym tle rozdzielają już tylko same siebie. */
.zadanie__akcja { padding: 0; border-left: 0; }

/* Numer kroku ginął na szarym wierszu — kwadrat i tło miały ten sam kolor. */
.zadanie--info .zadanie__waga--krok { background: var(--bialy); }

/* Ostatnia kreska po starym układzie: treść była oddzielona od kolumny
   z udziałem masowym pionową linią ciągnącą się przez cały wiersz. */
.zadanie__tresc { border-left: 0; padding-left: 0; }

/* „Zapytaj asystenta" siedzi teraz w karcie z ostatnimi deklaracjami, więc
   nie potrzebuje własnego tła ani cienia — wystarczy kreska odcinająca go
   od listy. */
.panel .zapytaj {
	margin-top: auto;
	padding: 12px 8px 0;
	background: transparent;
	border-radius: 0;
	box-shadow: none;
	border-top: 1px solid var(--linia-2);
}
.panel .zapytaj:hover { background: transparent; }
.panel .zapytaj:hover .zapytaj__tekst { color: var(--akcent); }
.panel .zapytaj__znak { width: 30px; height: 30px; border-radius: 10px; font-size: 13px; }
.panel .zapytaj__tekst { font-size: 12.5px; }

/* Etykieta wyróżnionego wpisu jest teraz zawsze, także bez znacznika „nowe". */
.wyrozniony__etykieta { min-height: 10px; }

/* ---- kropka zamiast kwadratu w znacznikach ----
   Glif ■ siedział na linii bazowej tekstu, więc w pastylce wyglądał na
   przesunięty w dół, a jego rozmiar zależał od kroju. Kółko rysowane
   pseudoelementem trzyma się środka niezależnie od czcionki. */
.znacznik::before {
	content: '';
	width: 8px;
	height: 8px;
	flex: none;
	border-radius: var(--r-znak);
	background: currentColor;
}
.znacznik.jest-potwierdzony::before { background: var(--zielen); }
.znacznik.jest-czesciowy::before { background: var(--bursztyn); }
.znacznik.jest-brak::before { background: var(--rdza); }
.znacznik.jest-nieoceniony::before { background: var(--wtorny); }

/* ---- ikony SVG w nawigacji ---- */
.ikona { display: block; flex: none; }
.kafel__ikona { color: var(--wtorny-mocny); }
.kafel--morski .kafel__ikona { background: #E4F0F1; }
.kafel--morski:hover { background: var(--tlo); }
.bok__ustawienia-ikona {
	width: 34px; height: 34px; flex: none;
	border-radius: 11px;
	background: var(--tlo);
	color: var(--wtorny-mocny);
	display: flex; align-items: center; justify-content: center;
}

/* Aktywna pozycja nie przemalowuje tła pod ikoną — sam wiersz robi się
   czarny i to wystarczy. Zamiana na niebieskie tło gubiła barwę działu,
   czyli jedyną cechę, po której poznaje się sekcję bez czytania. */
.kafel.jest-aktywny .kafel__ikona { color: var(--atrament); }
.kafel--akcent.jest-aktywny .kafel__ikona { background: #E9EFFD; }
.kafel--blekit.jest-aktywny .kafel__ikona { background: #E7EEF8; }
.kafel--fiolet.jest-aktywny .kafel__ikona { background: #EFE9F7; }
.kafel--morski.jest-aktywny .kafel__ikona { background: #E4F0F1; }
.kafel--ziel.jest-aktywny   .kafel__ikona { background: #E6F2EA; }
.kafel--zolc.jest-aktywny   .kafel__ikona { background: #F8F1DC; }
.kafel--roz.jest-aktywny    .kafel__ikona { background: #FAEAEA; }

/* ==========================================================================
   PANEL ASYSTENTA
   ==========================================================================

   Wysuwany z rogu, nie osobna strona. Pytanie do asystenta pada zwykle
   w trakcie robienia czegoś innego — przeskok gubiłby kontekst, do którego
   trzeba potem wrócić.
   ========================================================================== */

.panel-ai {
	position: fixed;
	right: 22px;
	bottom: 90px;
	z-index: 55;
	width: 420px;
	max-width: calc(100vw - 44px);
	max-height: min(660px, calc(100vh - 130px));
	display: flex;
	flex-direction: column;
	background: var(--bialy);
	border-radius: var(--r-karta);
	box-shadow: 0 24px 60px -20px rgba(22, 24, 28, .38), 0 2px 10px rgba(22, 24, 28, .08);
	overflow: hidden;
}
.panel-ai[hidden] { display: none; }

.panel-ai__gora {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 14px 14px 14px 16px;
	background: var(--atrament);
	flex: none;
}
.panel-ai__znak {
	width: 34px; height: 34px; flex: none;
	border-radius: var(--r-pole);
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 400 16px/1 var(--sans);
}
.panel-ai__tytul { flex: 1; min-width: 0; }
.panel-ai__tytul b { display: block; font: 600 14px/1.3 var(--sans); color: #FFFFFF; }
.panel-ai__tytul > span { display: block; font: 400 10.5px/1.4 var(--mono); color: #8B9095; margin-top: 2px; }

.panel-ai__pelny, .panel-ai__zamknij {
	width: 30px; height: 30px; flex: none;
	border: 0; border-radius: 10px;
	background: #2C3036;
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 400 15px/1 var(--sans);
	cursor: pointer;
	text-decoration: none;
}
.panel-ai__pelny:hover, .panel-ai__zamknij:hover { background: #3A3F46; color: #FFFFFF; }

.panel-ai__historia {
	flex: 1;
	min-height: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: 16px;
	display: flex;
	flex-direction: column;
	gap: 14px;
}
.panel-ai__wstep { margin: 0; font: 400 13.5px/1.6 var(--sans); color: var(--wtorny); }

.panel-ai__dol { flex: none; padding: 12px 16px 14px; border-top: 1px solid var(--linia-2); }

.panel-ai__formularz {
	display: flex;
	align-items: flex-end;
	gap: 8px;
	background: var(--tlo);
	border-radius: 18px;
	padding: 8px 8px 8px 14px;
}
.panel-ai__formularz textarea {
	flex: 1; min-width: 0;
	border: 0; background: transparent; box-shadow: none; outline: none;
	resize: none;
	padding: 8px 0;
	font: 400 13.5px/1.5 var(--sans);
	max-height: 130px;
}
.panel-ai__formularz textarea:focus { border: 0; box-shadow: none; }
.panel-ai__wyslij {
	width: 34px; height: 34px; flex: none;
	border: 0; border-radius: var(--r-znak);
	background: var(--akcent);
	color: #FFFFFF;
	cursor: pointer;
	font: 400 15px/1 var(--sans);
}
.panel-ai__wyslij:hover { background: var(--akcent-mocny); }

.panel-ai__stopka { margin: 10px 2px 0; font: 400 10.5px/1.5 var(--mono); color: var(--wtorny); }

.panel-ai .chipsy { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 10px; }
.panel-ai .chips {
	flex: none;
	border: 0;
	border-radius: var(--r-znak);
	background: var(--tlo);
	padding: 8px 13px;
	font: 400 12px/1.3 var(--sans);
	color: var(--wtorny-mocny);
	cursor: pointer;
	white-space: nowrap;
	max-width: 240px;
	overflow: hidden;
	text-overflow: ellipsis;
}
.panel-ai .chips:hover { background: var(--akcent-tlo); color: var(--akcent-mocny); }

.asystent-fab.jest-otwarty { background: var(--akcent); }
.asystent-fab.jest-otwarty .asystent-fab__znak { color: #FFFFFF; }

@media (max-width: 560px) {
	.panel-ai { right: 10px; left: 10px; width: auto; bottom: 76px; }
}

/* Stara .chipsy układała podpowiedzi w kolumnę — w panelu o stałej
   szerokości zjadałyby połowę wysokości. W rzędzie z przewijaniem widać
   pierwszą, a reszta jest o gest w bok. */
.panel-ai .chipsy { flex-direction: row; flex-wrap: nowrap; }
.panel-ai .chips { max-width: 260px; }

/* ---- wybór języka i konto na białym ----
   Pastylka bez wypełnienia znika na białym pasku, a to są przyciski
   rozwijające menu — muszą wyglądać na klikalne. Zostaje więc biel plus
   włosowa krawędź, a szarość wraca dopiero przy najechaniu. */
.gora__prawo .pastylka {
	background: var(--bialy);
	border: 1px solid var(--linia);
}
.gora__prawo .pastylka:hover { background: var(--tlo); border-color: var(--linia); }
.gora__prawo .pastylka[aria-expanded="true"] { background: var(--tlo); }

/* ==========================================================================
   WSKAŹNIK PRACY MODELU
   ==========================================================================

   Obracający się pierścień to wzorzec z czasów, gdy ładowała się cała strona.
   Tutaj czeka się na wypowiedź, więc bardziej pasuje sygnał znany
   z komunikatorów: trzy punkty odbijające się po kolei. Jeden element plus
   dwa pseudoelementy dają trzy kropki bez dodatkowego znacznika w HTML.
   ========================================================================== */

.zadanie-pasek__wskaznik {
	position: relative;
	width: 6px; height: 6px;
	border: 0;
	border-radius: var(--r-znak);
	background: var(--akcent);
	animation: puls 1.15s ease-in-out infinite;
	margin: 0 10px 0 4px;
}
.zadanie-pasek__wskaznik::before,
.zadanie-pasek__wskaznik::after {
	content: '';
	position: absolute;
	top: 0;
	width: 6px; height: 6px;
	border-radius: var(--r-znak);
	background: var(--akcent);
	animation: puls 1.15s ease-in-out infinite;
}
.zadanie-pasek__wskaznik::before { left: -10px; animation-delay: -.23s; }
.zadanie-pasek__wskaznik::after  { left: 10px;  animation-delay: .23s; }

@keyframes puls {
	0%, 70%, 100% { opacity: .25; transform: translateY(0); }
	35%           { opacity: 1;   transform: translateY(-4px); }
}

/* Wersja dla osób, które wyłączyły animacje: kropki po prostu pulsują
   przezroczystością, bez ruchu. */
@media (prefers-reduced-motion: reduce) {
	.zadanie-pasek__wskaznik,
	.zadanie-pasek__wskaznik::before,
	.zadanie-pasek__wskaznik::after { opacity: .5; animation: none !important; }
}

/* ---- wskaźnik w panelu asystenta ----
   Osobny dymek w strumieniu rozmowy, nie pas doklejony do pola tekstowego.
   Wcześniej stał tuż nad polem, miał to samo tło i zlewał się z nim. */
.panel-ai .zadanie-w-tle { border-top: 0; }
.panel-ai .zadanie-pasek {
	background: var(--tlo);
	border-radius: 16px;
	padding: 12px 14px;
	gap: 10px;
	align-self: flex-start;
	max-width: 90%;
}
.panel-ai .zadanie-pasek__etap { font-size: 13px; min-width: 0; color: var(--wtorny-mocny); }
.panel-ai .zadanie-pasek .btn { background: var(--bialy); }
.panel-ai .zadanie-pasek.jest-blad { border-left: 0; background: var(--rdza-tlo); }

/* ---- dymki rozmowy w panelu ---- */
.panel-ai .odpowiedz { display: flex; flex-direction: column; gap: 8px; }
.panel-ai .odpowiedz__pytanie {
	align-self: flex-end;
	max-width: 88%;
	margin: 0;
	background: var(--akcent);
	color: #FFFFFF;
	border-radius: 16px 16px 4px 16px;
	padding: 10px 14px;
	font: 400 13.5px/1.5 var(--sans);
}
.panel-ai .odpowiedz__tresc {
	align-self: flex-start;
	max-width: 95%;
	background: var(--tlo);
	border-radius: 16px 16px 16px 4px;
	padding: 12px 14px;
	font: 400 13.5px/1.6 var(--sans);
	color: var(--atrament);
}
.panel-ai .odpowiedz__tresc p:first-child { margin-top: 0; }
.panel-ai .odpowiedz__tresc p:last-child { margin-bottom: 0; }

/* Ramka i lewa kreska zostały po układzie, w którym odpowiedź była wpisem
   na stronie, a nie dymkiem w rozmowie. W panelu obrys niesie już sam dymek. */
.panel-ai .odpowiedz {
	border: 0;
	border-left: 0;
	padding: 0;
	background: transparent;
}

/* ==========================================================================
   KROKI PROPONOWANE PRZEZ ASYSTENTA
   ==========================================================================

   Sama instrukcja tekstowa zostawia człowieka z zadaniem odszukania sekcji
   w menu. Przycisk pod odpowiedzią skraca to do jednego kliknięcia, a przy
   okazji dowodzi, że asystent naprawdę wie, gdzie ta rzecz jest.

   Świadomie nie przenosimy użytkownika automatycznie: nagłe przeskoczenie
   ekranu w trakcie czytania odpowiedzi jest dezorientujące, a czasem człowiek
   pyta tylko po to, żeby wiedzieć, a nie żeby iść.
   ========================================================================== */

.kroki-ai { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }

.krok-ai {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 12px;
	border-radius: var(--r-pole);
	background: var(--bialy);
	text-decoration: none;
	box-shadow: inset 0 0 0 1px var(--akcent-linia);
}
.krok-ai:hover { background: var(--akcent-tlo); box-shadow: inset 0 0 0 1px var(--akcent); }
.krok-ai__tekst { flex: 1; min-width: 0; }
.krok-ai__tekst b { display: block; font: 600 13px/1.35 var(--sans); color: var(--akcent-mocny); }
.krok-ai__tekst span { display: block; font: 400 11.5px/1.4 var(--sans); color: var(--wtorny); margin-top: 2px; }
.krok-ai__strzalka { flex: none; font: 400 13px/1 var(--mono); color: var(--akcent); }

/* Na pełnej stronie odpowiedź leży na białym, więc kroki muszą być szare —
   biel na bieli zniknęłaby razem z obramowaniem. */
.rozmowa .krok-ai { background: var(--tlo); }
.rozmowa .krok-ai:hover { background: var(--akcent-tlo); }

/* ==========================================================================
   OPAKOWANIA — filtry stanu, narzędzia, kopiowanie
   ========================================================================== */

/* ---- pigułki stanu ----
   Każdy stan ma własny odcień już w spoczynku, tak jak w makiecie. Sam kolor
   nie wystarczy jednak do pokazania wyboru: dwa jasne odcienie obok siebie
   różnią się za słabo. Wybrany filtr dostaje więc pełne wypełnienie i biały
   tekst — widać go z drugiego końca ekranu, nie tylko przy uważnym patrzeniu. */

.pigulka--stan { background: var(--tlo); color: var(--wtorny-mocny); }
.pigulka--stan b { color: var(--wtorny); }

.pigulka--gotowe { background: var(--zielen-tlo); color: var(--zielen-mocna); }
.pigulka--gotowe b { color: var(--zielen); }
.pigulka--braki { background: var(--rdza-tlo); color: var(--rdza-ciemna); }
.pigulka--braki b { color: var(--rdza); }
.pigulka--brak-danych { background: var(--tlo); color: var(--wtorny-mocny); }
.pigulka--wycofane { background: var(--tlo); color: var(--wtorny-mocny); }

.pigulka--stan:hover { filter: brightness(.97); }

.pigulka--wszystkie.jest-aktywny { background: var(--atrament); color: #FFFFFF; }
.pigulka--wszystkie.jest-aktywny b { color: var(--akcent-jasny); }
.pigulka--gotowe.jest-aktywny { background: var(--zielen); color: #FFFFFF; }
.pigulka--braki.jest-aktywny { background: var(--rdza); color: #FFFFFF; }
.pigulka--brak-danych.jest-aktywny,
.pigulka--wycofane.jest-aktywny { background: var(--wtorny-mocny); color: #FFFFFF; }
.pigulka--stan.jest-aktywny b { color: rgba(255, 255, 255, .75); }
.pigulka--stan.jest-aktywny .pigulka__kropka { background: rgba(255, 255, 255, .85); }

/* ---- przycisk z ikoną ---- */
.btn--z-ikona { gap: 8px; }
.przelacznik__opcja .ikona { flex: none; }

/* ---- zarządzanie kategoriami ----
   „+ Zarządzaj kategoriami" ginęło jako szary tekst na szarym płótnie.
   Wygląda teraz jak pozostałe pigułki, tylko z przerywanym obrysem —
   to nie filtr, tylko wejście w edycję. */
.pigulka--zarzadzaj {
	background: transparent;
	color: var(--wtorny-mocny);
	box-shadow: inset 0 0 0 1px var(--linia);
	cursor: pointer;
	list-style: none;
}
.pigulka--zarzadzaj::-webkit-details-marker { display: none; }
.pigulka--zarzadzaj:hover { background: var(--bialy); color: var(--atrament); box-shadow: inset 0 0 0 1px var(--akcent-linia); }
details[open] > .pigulka--zarzadzaj { background: var(--atrament); color: #FFFFFF; box-shadow: none; }

/* ---- karty pod listą ---- */
.karty-startowe {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--odstep);
	margin-bottom: var(--odstep);
}
.karty-startowe .kreator-karta { margin-bottom: 0; }

.kopiuj-karta {
	display: flex;
	align-items: center;
	gap: 14px;
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 14px 16px;
	text-decoration: none;
	box-shadow: var(--cien);
}
.kopiuj-karta:hover { background: var(--akcent-tlo); }
.kopiuj-karta.jest-wygaszona { opacity: .68; box-shadow: inset 0 0 0 1px var(--linia); background: transparent; }
.kopiuj-karta.jest-wygaszona:hover { background: transparent; }
.kopiuj-karta__znak {
	width: 40px; height: 40px; flex: none;
	border-radius: var(--r-pole);
	background: var(--tlo);
	color: var(--wtorny-mocny);
	display: flex; align-items: center; justify-content: center;
}
.kopiuj-karta__tresc { flex: 1; min-width: 0; }
.kopiuj-karta__tresc b { display: block; font: 600 14px/1.3 var(--sans); color: var(--atrament); }
.kopiuj-karta__tresc > span { display: block; font: 400 11.5px/1.45 var(--sans); color: var(--wtorny); margin-top: 3px; }

@media (max-width: 1080px) {
	.karty-startowe { grid-template-columns: 1fr; }
}

/* ==========================================================================
   KAFELKI STARTOWE
   ==========================================================================

   Jeden komponent zamiast dwóch: wcześniej przy pustej kartotece były to
   zwykłe przyciski w ramce, a przy niepustej kafelek kreatora. Ten sam wybór
   w dwóch różnych postaciach w jednym widoku.

   Kafelki są równorzędne — każdy ma ikonę, nagłówek, zdanie wyjaśnienia
   i przycisk. Ciemny wyróżnia drogę przez kreator, bo to ona jest szybsza,
   ale pozostałe nie są przypisem.
   ========================================================================== */

.karty-startowe {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
	gap: var(--odstep);
	margin-bottom: var(--odstep);
	align-items: stretch;
}

.karta-start {
	display: flex;
	align-items: center;
	gap: 14px;
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 16px;
	text-decoration: none;
	box-shadow: var(--cien);
}
.karta-start:hover { background: var(--akcent-tlo); }

.karta-start__znak {
	width: 42px; height: 42px; flex: none;
	border-radius: var(--r-pole);
	background: var(--tlo);
	color: var(--wtorny-mocny);
	display: flex; align-items: center; justify-content: center;
	font: 400 18px/1 var(--sans);
}
.karta-start__tresc { flex: 1; min-width: 0; }
.karta-start__tresc b { display: block; font: 600 14px/1.35 var(--sans); color: var(--atrament); }
.karta-start__tresc > span { display: block; font: 400 11.5px/1.45 var(--sans); color: var(--wtorny); margin-top: 3px; }
.karta-start .btn { flex: none; }

.karta-start--ciemna { background: var(--atrament); }
.karta-start--ciemna:hover { background: #0E1013; }
.karta-start--ciemna .karta-start__znak { background: var(--akcent); color: #FFFFFF; }
.karta-start--ciemna .karta-start__tresc b { color: #FFFFFF; }
.karta-start--ciemna .karta-start__tresc > span { color: #8B9095; font-family: var(--mono); font-size: 11px; }

.karta-start.jest-wygaszona {
	opacity: .7;
	background: transparent;
	box-shadow: inset 0 0 0 1px var(--linia);
}
.karta-start.jest-wygaszona:hover { background: transparent; }

/* ---- pasek narzędzi jako karta ----
   Kategorie, przełącznik widoku i eksport leżały luzem na płótnie, między
   dwiema kartami. W układzie, w którym wszystko inne jest kartą, jeden pas
   bez tła czytał się jak niedokończony fragment. */
.narzedzia {
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 12px 14px;
	box-shadow: var(--cien);
}
.narzedzia .pigulka { background: var(--tlo); }
.narzedzia .pigulka:hover { background: var(--tlo-2); }
.narzedzia .pigulka.jest-aktywny { background: var(--atrament); color: #FFFFFF; }
.narzedzia .pigulka--zarzadzaj { background: transparent; }
.narzedzia .przelacznik { background: var(--tlo); }
.narzedzia .przelacznik__opcja.jest-aktywny { background: var(--bialy); box-shadow: var(--cien); }
.narzedzia__prawo .btn { background: var(--tlo); }
.narzedzia__prawo .btn:hover { background: var(--tlo-2); }

/* ---- kafelek nieaktywny ----
   Przezroczyste tło z obrysem sprawiało, że kafelek wyglądał na dziurę
   w siatce. Ledwie widoczne wypełnienie trzyma go w rzędzie z pozostałymi. */
.karta-start.jest-wygaszona {
	background: #0000000a;
	box-shadow: none;
	opacity: 1;
}
.karta-start.jest-wygaszona:hover { background: #0000000a; }
.karta-start.jest-wygaszona .karta-start__znak { background: #00000008; }
.karta-start.jest-wygaszona .karta-start__tresc b { color: var(--wtorny-mocny); }

/* ==========================================================================
   SPLASH PRZEŁĄCZENIA FIRMY
   ==========================================================================

   Pojawia się na środku, gaśnie sam. `pointer-events: none` jest tu istotne:
   przez ułamek sekundy element leży nad całą stroną i bez tego przechwyciłby
   kliknięcie w moment, w którym człowiek już sięga do treści.
   ========================================================================== */

.splash {
	position: fixed;
	inset: 0;
	z-index: 70;
	display: flex;
	align-items: center;
	justify-content: center;
	pointer-events: none;
	animation: splash-tlo 1.9s ease forwards;
}

.splash__karta {
	display: flex;
	align-items: center;
	gap: 16px;
	background: var(--atrament);
	border-radius: 22px;
	padding: 20px 28px 20px 20px;
	box-shadow: 0 30px 70px -22px rgba(22, 24, 28, .55);
	animation: splash-karta 1.9s cubic-bezier(.2, .9, .25, 1) forwards;
}

.splash__skrot {
	width: 52px; height: 52px; flex: none;
	border-radius: 17px;
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 500 17px/1 var(--mono);
}
.splash__tekst { display: flex; flex-direction: column; gap: 3px; }
.splash__nad {
	font: 500 10px/1 var(--mono);
	letter-spacing: .12em;
	text-transform: uppercase;
	color: #8B9095;
}
.splash__karta b { font: 700 19px/1.25 var(--sans); color: #FFFFFF; letter-spacing: -.01em; }

/* Tło tylko przygasza ekran, nie zaciemnia go — pod spodem ma być widać,
   że treść już się podmieniła. */
@keyframes splash-tlo {
	0%   { background: rgba(22, 24, 28, 0); }
	12%  { background: rgba(22, 24, 28, .18); }
	70%  { background: rgba(22, 24, 28, .18); }
	100% { background: rgba(22, 24, 28, 0); visibility: hidden; }
}

@keyframes splash-karta {
	0%   { opacity: 0; transform: translateY(14px) scale(.94); }
	14%  { opacity: 1; transform: translateY(0) scale(1); }
	72%  { opacity: 1; transform: translateY(0) scale(1); }
	100% { opacity: 0; transform: translateY(-8px) scale(.98); }
}

/* Przy wyłączonych animacjach splash pokazuje się i znika bez ruchu —
   sam komunikat jest potrzebny, efekt nie. */
@media (prefers-reduced-motion: reduce) {
	.splash { animation: splash-bez-ruchu 1.9s steps(1) forwards; }
	.splash__karta { animation: splash-bez-ruchu 1.9s steps(1) forwards; }
	@keyframes splash-bez-ruchu {
		0%, 80% { opacity: 1; }
		100%    { opacity: 0; visibility: hidden; }
	}
}

/* ==========================================================================
   KATEGORIE Z KOLOREM
   ========================================================================== */

.pigulka--kategoria { background: var(--kolor-kategorii, var(--tlo)); color: var(--atrament); }
.pigulka--kategoria:hover { filter: brightness(.96); }
.pigulka--kategoria .pigulka__kropka { background: rgba(22, 24, 28, .35); }
.pigulka--kategoria b { color: rgba(22, 24, 28, .5); }

/* Wybrana kategoria: czerń plus zachowany kolor w kropce, żeby nie zgubić
   przypisania podczas filtrowania. */
.pigulka--kategoria.jest-aktywny { background: var(--atrament); color: #FFFFFF; }
.pigulka--kategoria.jest-aktywny .pigulka__kropka { background: var(--kolor-kategorii); }
.pigulka--kategoria.jest-aktywny b { color: rgba(255, 255, 255, .6); }

/* ---- paleta wyboru ----
   Osiem pól radiowych bez natywnego kółka. Zaznaczenie pokazuje pierścień
   wokół próbki — kolor musi zostać widoczny w całości, bo o niego chodzi. */
.paleta { display: flex; gap: 5px; flex-wrap: wrap; align-items: center; }
.paleta__pole { position: relative; display: block; cursor: pointer; line-height: 0; }
.paleta__pole input {
	position: absolute; opacity: 0; width: 0; height: 0; margin: 0;
}
.paleta__pole span {
	display: block;
	width: 22px; height: 22px;
	border-radius: 8px;
	box-shadow: inset 0 0 0 1px rgba(22, 24, 28, .08);
}
.paleta--male .paleta__pole span { width: 16px; height: 16px; border-radius: 6px; }
.paleta__pole input:checked + span { box-shadow: 0 0 0 2px var(--bialy), 0 0 0 4px var(--atrament); }
.paleta__pole input:focus-visible + span { box-shadow: 0 0 0 2px var(--bialy), 0 0 0 4px var(--akcent); }

.kategorie-panel { width: 400px; }
.kategorie-nowa { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: center; }
.kategorie-nowa .paleta { grid-column: 1 / -1; }
.kategorie-lista li { flex-wrap: wrap; gap: 8px; }
.kategorie-lista__edycja { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.kategorie-lista__edycja input[type=text] { flex: 1; min-width: 0; height: 34px; }

/* ==========================================================================
   MATERIAŁY
   ========================================================================== */

/* Odcień wiersza niesie stan dowodu. Kolor jest bardzo słaby — ma pozwolić
   przebiec wzrokiem po liście i zobaczyć, gdzie są kłopoty, a nie zamienić
   tabelę w witraż. */
.rzad--blad  td { background: #FDF4F1; }
.rzad--uwaga td { background: #FCF8EF; }
.rzad--ok    td { background: transparent; }
.tabela tbody tr.rzad--blad:hover td { background: #FBEDE8; }
.tabela tbody tr.rzad--uwaga:hover td { background: #FAF3E4; }

.ponad-limit { color: var(--rdza); }

.znacznik.jest-czesciowy { background: var(--bursztyn-tlo); color: var(--bursztyn-ciemny); }
.znacznik.jest-czesciowy::before { background: var(--bursztyn); }
.znacznik.jest-brak { background: var(--rdza-tlo); color: var(--rdza-ciemna); }
.znacznik.jest-brak::before { background: var(--rdza); }

/* Trzy dane materiału w kafelku: dostawca, dokument, suma metali.
   Kolumny o stałej szerokości, żeby wiersze czytało się w pionie. */
.material-dane { display: flex; gap: 28px; flex-wrap: wrap; }
.material-dane > span { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.material-dane b { font: 500 13px/1.35 var(--sans); color: var(--atrament); }
.material-dane b.mono { font-family: var(--mono); font-size: 12px; }
.material-dane > span > span { font: 400 10px/1.2 var(--mono); color: var(--wtorny); }

.naglowek__pod { display: block; font: 400 12.5px/1.5 var(--sans); color: var(--wtorny); margin-top: 5px; }

@media (max-width: 1080px) {
	.kategorie-panel { width: 300px; }
	.material-dane { gap: 16px; }
}

/* Kolor kategorii wewnątrz paska narzędzi.
   `.narzedzia .pigulka` (0,2,0) bije `.pigulka--kategoria` (0,1,0), więc
   pigułki w pasku wracały do szarości mimo ustawionego koloru. Reguła musi
   mieć tę samą głębokość zagnieżdżenia co ta, którą nadpisuje. */
.narzedzia .pigulka--kategoria { background: var(--kolor-kategorii, var(--tlo)); }
.narzedzia .pigulka--kategoria:hover { background: var(--kolor-kategorii, var(--tlo-2)); filter: brightness(.96); }
.narzedzia .pigulka--kategoria.jest-aktywny { background: var(--atrament); }

/* Panel zakotwiczony prawą krawędzią do przycisku. Przy kotwiczeniu do lewej
   wychodził poza ekran, bo „Zarządzaj kategoriami" stoi na końcu rzędu
   pigułek — a ten rząd rośnie razem z liczbą kategorii. */
.kategorie-panel { left: auto; right: 0; }

/* Wiersz edycji kategorii nie mieści się w jednej linii: paleta zajmuje
   ponad 150 px, do tego nazwa, licznik i dwa przyciski. Nazwa szła wtedy
   do kilku pikseli szerokości. Dwie linie: nazwa u góry, paleta i akcje pod. */
.kategorie-panel { width: 420px; }
.kategorie-lista li {
	flex-direction: column;
	align-items: stretch;
	gap: 8px;
	padding: 10px;
	background: var(--tlo);
	border-radius: var(--r-pole);
}
.kategorie-lista li:hover { background: var(--tlo-2); }
.kategorie-lista__edycja { flex-wrap: wrap; }
.kategorie-lista__edycja input[type=text] { flex: 1 1 100%; background: var(--bialy); }
.kategorie-lista__edycja .paleta { flex: 1; }
.kategorie-lista li > form:last-child { align-self: flex-end; margin-top: -42px; }

/* ---- stała rezerwacja miejsca na pasek przewijania ----
   Pulpit i Ustawienia są dłuższe od okna, reszta sekcji nie. Bez tej reguły
   pasek pojawia się i znika przy każdym przejściu, a treść skacze o kilkanaście
   pikseli w bok — widać to dokładnie w momencie przełączania sekcji. */
html { scrollbar-gutter: stable; }

/* ==========================================================================
   WYBÓR KATEGORII I OKNO ZARZĄDZANIA
   ==========================================================================

   Rząd pigułek zastąpiony rozwijaną listą. Powód jest praktyczny: rząd rósł
   razem z liczbą kategorii, zawijał się na drugą linię i wypychał przełącznik
   widoku poza pasek. Rozwijana lista ma stałą szerokość niezależnie od tego,
   ile kategorii ma firma.
   ========================================================================== */

.kategorie-wybor { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }

.pastylka--kategoria {
	min-width: 210px;
	max-width: 260px;
	justify-content: flex-start;
	background: var(--tlo);
	border: 0;
}
.pastylka--kategoria:hover { background: var(--tlo-2); }
.pastylka__etykieta {
	flex: 1;
	min-width: 0;
	text-align: left;
	font: 500 13px/1.2 var(--sans);
	white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pastylka--kategoria.jest-wybrana { background: var(--atrament); color: #FFFFFF; }
.pastylka--kategoria.jest-wybrana .pastylka__strzalka { color: #8B9095; }

.menu--kategorie { min-width: 260px; }
/* Lista przewija się po ośmiu pozycjach — dalej menu byłoby dłuższe
   od ekranu, a i tak nikt nie skanuje wzrokiem dwudziestu wierszy naraz. */
.menu__lista { max-height: 320px; overflow-y: auto; overscroll-behavior: contain; display: flex; flex-direction: column; gap: 2px; }
.menu__licznik { font: 500 11px/1 var(--mono); color: var(--wtorny); }
.menu__pozycja .pigulka__kropka { flex: none; }

/* ---- okno ---- */
.okno { position: fixed; inset: 0; z-index: 80; display: flex; align-items: center; justify-content: center; padding: 20px; }
.okno[hidden] { display: none; }
.okno__zaslona { position: absolute; inset: 0; background: rgba(22, 24, 28, .42); }

.okno__karta {
	position: relative;
	width: 100%;
	max-width: 620px;
	max-height: calc(100vh - 40px);
	display: flex;
	flex-direction: column;
	background: var(--bialy);
	border-radius: var(--r-karta);
	box-shadow: 0 30px 80px -24px rgba(22, 24, 28, .5);
	overflow: hidden;
}

.okno__gora {
	display: flex; align-items: flex-start; justify-content: space-between; gap: 14px;
	padding: 22px var(--bok) 16px;
}
.okno__gora b { display: block; font: 700 17px/1.3 var(--sans); }
.okno__gora > div > span { display: block; font: 400 12.5px/1.45 var(--sans); color: var(--wtorny); margin-top: 3px; }
.okno__zamknij {
	width: 32px; height: 32px; flex: none;
	border: 0; border-radius: 11px;
	background: var(--tlo);
	font: 400 17px/1 var(--sans);
	cursor: pointer;
}
.okno__zamknij:hover { background: var(--tlo-2); }

.okno__nowa { padding: 0 var(--bok) 18px; border-bottom: 1px solid var(--linia-2); }
.okno__wiersz { display: flex; gap: 8px; margin-bottom: 12px; }
.okno__wiersz input[type=text] { flex: 1; min-width: 0; }

.okno__lista {
	list-style: none; margin: 0; padding: 12px var(--bok) 20px;
	display: flex; flex-direction: column; gap: 8px;
	overflow-y: auto;
}
.okno__pusto { margin: 0; padding: 20px var(--bok) 26px; font: 400 13.5px/1.6 var(--sans); color: var(--wtorny); }

/* Wiersz kategorii: nazwa zajmuje resztę miejsca, paleta ma stałą szerokość,
   licznik i akcje trzymają się prawej. Wszystko w jednej linii, bo jest
   na to miejsce — okno ma 620 px, nie 400. */
.kat-wiersz {
	display: flex; align-items: center; gap: 8px;
	padding: 8px; border-radius: var(--r-pole);
	background: var(--tlo);
}
.kat-wiersz__forma { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
.kat-wiersz__nazwa { flex: 1; min-width: 0; height: 36px; background: var(--bialy); }
.kat-wiersz .paleta--male { flex: none; }
.kat-wiersz__ile {
	flex: none; min-width: 26px; text-align: center;
	font: 500 11px/1 var(--mono); color: var(--wtorny);
}

body.bez-przewijania { overflow: hidden; }

/* Bursztynowy wariant filtra — brakował, przez co „częściowy" w Materiałach
   wyglądał jak stan neutralny. */
.pigulka--uwaga { background: var(--bursztyn-tlo); color: var(--bursztyn-ciemny); }
.pigulka--uwaga b { color: var(--bursztyn); }
.pigulka--uwaga .pigulka__kropka { background: var(--bursztyn); }
.pigulka--uwaga.jest-aktywny { background: var(--bursztyn); color: #FFFFFF; }
.pigulka--gotowe .pigulka__kropka { background: var(--zielen); }
.pigulka--brak-danych .pigulka__kropka { background: var(--wtorny); }

@media (max-width: 760px) {
	.kat-wiersz__forma { flex-wrap: wrap; }
	.kat-wiersz__nazwa { flex: 1 1 100%; }
}

/* ---- kolejność w nagłówku strony ----
   Nadpis nad tytułem był dziedzictwem układu, w którym pełnił rolę etykiety
   sekcji. Dziś sekcję nazywa pasek boczny i okruszki, a ten tekst niesie
   liczby i kontekst — czyli treść, którą czyta się PO tytule, nie przed nim.
   Kolejność zmieniamy tutaj, a nie w kilkunastu widokach, więc wszystkie
   sekcje trafiają pod jedną regułę i nie da się jej gdzieś przeoczyć. */
.naglowek__nad {
	order: 2;
	font: 400 12.5px/1.5 var(--sans);
	letter-spacing: 0;
	text-transform: none;
	color: var(--wtorny);
	margin-top: 2px;
}
.naglowek__nad a { color: var(--wtorny); text-decoration: underline; text-underline-offset: 2px; }
.naglowek__nad a:hover { color: var(--akcent); }
.naglowek__pod {
	order: 2;
	margin-top: 2px;
	/* Klasa o tej nazwie istniała już wcześniej, w innym miejscu i w innej
	   roli — wersalikami, monospace, jako podpis pod nagłówkiem kreatora.
	   Tu ma być zwykłym zdaniem, więc nadpisujemy jawnie także krój
	   i wersaliki, a nie tylko kolejność. */
	font: 400 12.5px/1.5 var(--sans);
	letter-spacing: 0;
	text-transform: none;
	color: var(--wtorny);
}
.naglowek h1 { order: 1; }

/* ---- wybrana kategoria w kolorze ----
   Czarne tło z ośmiopikselową kropką wyglądało tak samo dla każdej kategorii.
   Skoro kolor ma odróżniać szuflady, to przycisk wyboru jest pierwszym
   miejscem, gdzie musi być widoczny. */
.pastylka--kategoria.ma-kolor {
	background: var(--kolor-kategorii);
	color: var(--atrament);
	box-shadow: inset 0 0 0 1px rgba(22, 24, 28, .1);
}
.pastylka--kategoria.ma-kolor:hover { filter: brightness(.96); }
.pastylka--kategoria.ma-kolor .pastylka__strzalka { color: rgba(22, 24, 28, .45); }

/* ---- jednakowa wysokość kontrolek w pasku narzędzi ----
   Rozwijak kategorii dziedziczył 42 px po pastylkach z górnego paska,
   a przyciski obok mają 34 px. Trzy różne wysokości w jednym rzędzie widać
   od razu, nawet jeśli nie umie się nazwać, co jest nie tak. */
.narzedzia .pastylka--kategoria,
.narzedzia .btn,
.narzedzia .przelacznik { height: 36px; }
.narzedzia .przelacznik { padding: 3px; }
.narzedzia .przelacznik__opcja { height: 30px; }
.narzedzia .btn { padding: 0 13px; }

/* ---- stopka okna ---- */
.okno__forma { display: flex; flex-direction: column; min-height: 0; }
.okno__dol {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 14px var(--bok) 18px;
	border-top: 1px solid var(--linia-2);
	background: var(--bialy);
}
.kat-wiersz { gap: 10px; }

/* ==========================================================================
   DOSTAWCY
   ========================================================================== */

.naglowek--karta { display: flex; align-items: center; gap: 4px; }
.naglowek__wstecz {
	width: 40px; height: 40px; flex: none;
	margin-left: var(--bok);
	border-radius: var(--r-pole);
	background: var(--tlo);
	color: var(--atrament);
	display: flex; align-items: center; justify-content: center;
	font: 400 17px/1 var(--sans);
	text-decoration: none;
}
.naglowek__wstecz:hover { background: var(--tlo-2); }
.naglowek--karta .naglowek__tytul { padding-left: 14px; }

/* Grupy materiałowe jako pola wyboru wyglądające jak znaczniki: kliknięcie
   w cały prostokąt, nie w kwadracik obok. */
.grupy-wybor { display: flex; gap: 8px; flex-wrap: wrap; }
.grupa-chip { position: relative; cursor: pointer; }
.grupa-chip input { position: absolute; opacity: 0; width: 0; height: 0; }
.grupa-chip span {
	display: inline-flex; align-items: center;
	height: 36px; padding: 0 15px;
	border-radius: var(--r-znak);
	background: var(--tlo);
	font: 400 13px/1 var(--sans);
	color: var(--wtorny-mocny);
}
.grupa-chip:hover span { background: var(--tlo-2); }
.grupa-chip input:checked + span { background: var(--akcent); color: #FFFFFF; }
.grupa-chip input:focus-visible + span { box-shadow: 0 0 0 3px var(--akcent-tlo); }

.grupy-lista { display: flex; gap: 6px; flex-wrap: wrap; }
.grupa-znacznik {
	font: 400 11.5px/1 var(--sans);
	color: var(--wtorny-mocny);
	background: var(--tlo);
	border-radius: var(--r-znak);
	padding: 6px 11px;
}

.pod-formularz { padding: 0 var(--bok) 20px; }
.pasek-dolny__odstep { flex: 1; }
.pole--szerokie { grid-column: span 2; }

/* ---- nagłówek sekcji wewnątrz karty ----
   Wariant dla stron z jedną sekcją, gdzie tytuł wiszący na płótnie wygląda
   jak podpis do niczego. Na listach z kilkoma sekcjami zostaje .sekcja-tytul. */
.blok__gora {
	padding: 20px var(--bok) 0;
}
.blok__gora b { display: block; font: 700 16px/1.3 var(--sans); }
.blok__gora span { display: block; font: 400 12.5px/1.45 var(--sans); color: var(--wtorny); margin-top: 3px; }
.blok__gora + .siatka-pol { padding-top: 18px; }

/* Odstęp między przyciskami w nagłówku karty. Bez niego „Anuluj" i „Zapisz"
   stykały się bokami i wyglądały jak jeden podzielony przycisk. */
.naglowek__akcja { gap: 10px; }

/* ==========================================================================
   TURA 11 — drobne poprawki widoczności i nowe elementy
   ========================================================================== */

/* ---- przyciski drugoplanowe na płótnie ----
   „Eksport CSV" i „Nowa kategoria" miały tło w kolorze płótna, przez co
   wyglądały na wyłączone. Teraz są białe z włosową krawędzią — nadal ciche,
   ale widać, że da się w nie kliknąć. */
/* Celujemy w przyciski samego paska, nie w każdy przycisk w jego środku.
   Okno zarządzania kategoriami jest renderowane wewnątrz .narzedzia, więc
   szeroki selektor bielił także „Dodaj" i „Zapisz" w oknie — biały tekst
   na białym tle, przyciski znikały. */
.narzedzia .kategorie-wybor > .btn,
.narzedzia__prawo .btn,
.naglowek__akcja .btn--cichy {
	background: var(--bialy);
	box-shadow: inset 0 0 0 1px var(--linia);
}
.narzedzia .kategorie-wybor > .btn:hover,
.narzedzia__prawo .btn:hover,
.naglowek__akcja .btn--cichy:hover {
	background: var(--tlo);
	box-shadow: inset 0 0 0 1px var(--akcent-linia);
}
.narzedzia .pigulka--zarzadzaj { background: var(--bialy); box-shadow: inset 0 0 0 1px var(--linia); }
.narzedzia .pigulka--zarzadzaj:hover { background: var(--tlo); box-shadow: inset 0 0 0 1px var(--akcent-linia); }

/* ---- pasek zapisu ---- */
.pasek-dolny--przyklejony { border-top: 1px solid var(--akcent); }

/* ---- notka informacyjna ----
   Zastępuje pas „i" z poprzedniego układu. Ta sama rodzina co karty:
   zaokrąglenie, miękkie tło, znak w kwadracie zamiast litery na płasko. */
.notka {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	background: var(--akcent-tlo);
	border-radius: var(--r-karta);
	padding: 16px 18px;
	margin-bottom: var(--odstep);
}
.notka__znak {
	width: 28px; height: 28px; flex: none;
	border-radius: 9px;
	background: var(--akcent);
	color: #FFFFFF;
	display: flex; align-items: center; justify-content: center;
	font: 600 13px/1 var(--sans);
}
.notka__tresc { font: 400 13px/1.6 var(--sans); color: var(--akcent-mocny); max-width: 92ch; }
.notka__tresc b { font-weight: 600; }

/* ---- wyniki szukania ---- */
.sekcja-tytul__wiecej { margin-left: auto; font: 400 12.5px/1 var(--sans); color: var(--akcent); text-decoration: none; }
.sekcja-tytul__wiecej:hover { color: var(--akcent-mocny); text-decoration: underline; }
.wyrob--wynik { text-decoration: none; }
.wyrob--wynik:hover { background: var(--akcent-tlo); }
.wyrob__strzalka {
	width: 30px; height: 30px;
	border-radius: var(--r-znak);
	background: var(--tlo);
	display: flex; align-items: center; justify-content: center;
	font: 400 13px/1 var(--mono); color: var(--atrament);
}

/* ---- dostawcy ---- */
.wyrob--uwaga .wyrob__stan { background: var(--bursztyn-tlo); color: var(--bursztyn-ciemny); }
.rzad--nic td { background: transparent; }

/* ==========================================================================
   POLA WYBORU, ETYKIETY I TABELE — tura 12
   ========================================================================== */

/* ---- widoczna strzałka w polach wyboru ----
   Natywna strzałka przeglądarki jest drobna i w Chrome na jasnym tle prawie
   niewidoczna, przez co lista wyboru wyglądała jak zwykłe pole tekstowe.
   Rysujemy własną: dwie kreski złożone w daszek, o stałym rozmiarze
   niezależnym od systemu. */
select {
	appearance: none;
	-webkit-appearance: none;
	background-image:
		linear-gradient(45deg, transparent 50%, var(--wtorny-mocny) 50%),
		linear-gradient(135deg, var(--wtorny-mocny) 50%, transparent 50%);
	background-position:
		calc(100% - 19px) calc(50% + 1px),
		calc(100% - 13px) calc(50% + 1px);
	background-size: 6px 6px, 6px 6px;
	background-repeat: no-repeat;
	padding-right: 38px;
}
select:hover {
	background-image:
		linear-gradient(45deg, transparent 50%, var(--atrament) 50%),
		linear-gradient(135deg, var(--atrament) 50%, transparent 50%);
}
select::-ms-expand { display: none; }

/* ---- etykiety pól ----
   Wielka litera na początku, ale bez capitalize — ten zamienia każde słowo
   i z „NIP / VAT ID" zrobiłby „Nip / Vat Id”. */
.pole > label::first-letter { text-transform: uppercase; }

/* ---- tabele ----
   Komórki wyrównane do środka w pionie: wiersz z dwuliniową nazwą i wiersz
   z jednoliniową miały treść na różnych wysokościach. */
.tabela td { vertical-align: middle; }

/* Najechanie miało ten sam odcień co nagłówek tabeli, więc wiersz pod
   nagłówkiem zlewał się z nim w jeden pas. */
.tabela tbody tr:hover td { background: var(--akcent-tlo); }
.tabela tbody tr.rzad--blad:hover td { background: #F9E3DC; }
.tabela tbody tr.rzad--uwaga:hover td { background: #F7EEDA; }

/* ==========================================================================
   USTAWIENIA — zakładki i karta pakietu
   ========================================================================== */

[data-zakladki] .pigulka { border: 0; cursor: pointer; font-family: var(--sans); height: 38px; }
[data-zakladki] .pigulka.jest-aktywny { background: var(--atrament); color: #FFFFFF; }

/* Karta pakietu: ciemna, jak karta zużycia AI na pulpicie — to ta sama
   informacja widziana z drugiej strony, więc ma wyglądać jak rodzina. */
.pakiet {
	background: var(--atrament);
	border-radius: var(--r-karta);
	padding: 24px var(--bok);
	margin-bottom: var(--odstep);
	display: flex;
	flex-direction: column;
	gap: 18px;
}
.pakiet__gora { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.pakiet__gora b { display: block; font: 700 18px/1.3 var(--sans); color: #FFFFFF; }
.pakiet__gora > div > span { display: block; font: 400 11.5px/1.4 var(--mono); color: #8B9095; margin-top: 3px; }

.pakiet__miara { display: flex; flex-direction: column; gap: 7px; }
.pakiet__wiersz { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.pakiet__wiersz span { font: 400 13px/1.3 var(--sans); color: #B7BCBF; }
.pakiet__wiersz b { font: 500 13px/1 var(--mono); color: #FFFFFF; }
.pakiet__tor { display: block; height: 8px; border-radius: 4px; background: #2C3036; overflow: hidden; }
.pakiet__wypelnienie { display: block; height: 8px; border-radius: 4px; background: var(--akcent); min-width: 3px; }

.pakiet__uwaga { margin: 0; font: 400 11.5px/1.6 var(--mono); color: #8B9095; max-width: 80ch; }

/* ---- atrybut hidden ma być silniejszy od układu ----
   Domyślna reguła przeglądarki to `[hidden] { display: none }` — czyli
   selektor o zerowej specyficzności. Każda klasa ustawiająca `display`
   (a mamy ich sporo: flex, grid) po cichu ją unieważnia i element
   z atrybutem hidden nadal widać. Objawiło się to przy zakładkach
   w Ustawieniach: bloki znikały, a tytuły sekcji zostawały.

   !important jest tu na miejscu: `hidden` znaczy „tego nie ma", i żaden
   układ nie powinien mieć prawa się z tym spierać. */
[hidden] { display: none !important; }

/* ==========================================================================
   NAGŁÓWEK SEKCJI JAKO CZĘŚĆ KARTY
   ==========================================================================

   Tytuł sekcji stał dotąd na szarym płótnie nad białą kartą i czytał się jak
   podpis do niczego. Zamiast przepisywać kilkanaście widoków, skleja je
   reguła: tytuł, po którym NASTĘPUJE blok, staje się jego nagłówkiem —
   dostaje białe tło i zaokrąglenie górnych rogów, a blok traci swoje.

   `:has(+ .blok)` jest tu istotne. Nie każdy tytuł sekcji poprzedza kartę:
   w wynikach szukania i w bazie wiedzy po tytule idzie siatka kafelków.
   Tam biała belka bez karty pod spodem wyglądałaby jak ucięty element.
   ========================================================================== */

.sekcja-tytul:has(+ .blok) {
	background: var(--bialy);
	border-radius: var(--r-karta) var(--r-karta) 0 0;
	padding: 20px var(--bok) 0;
	margin: 20px 0 0;
	box-shadow: var(--cien);
}
.sekcja-tytul:has(+ .blok) + .blok {
	border-radius: 0 0 var(--r-karta) var(--r-karta);
	margin-top: 0;
}
/* Numer sekcji był kółkiem na płótnie; w nagłówku karty wystarczy sam tekst
   z numerem jako drobnym prefiksem. */
.sekcja-tytul:has(+ .blok) .sekcja-tytul__nr {
	background: transparent;
	color: var(--wtorny);
	padding: 0;
	height: auto;
	font: 500 11px/1 var(--mono);
}

/* ---- pasek zapisu przyklejony do dołu okna ----
   Wcześniej „przyklejony" znaczyło tylko sticky w obrębie treści. Na długiej
   stronie z zakładkami trzeba było doprzewijać do końca, żeby zapisać. */
.pasek-dolny--przyklejony {
	position: sticky;
	bottom: var(--odstep);
	z-index: 30;
	background: var(--bialy);
	border-radius: var(--r-karta);
	box-shadow: var(--cien-menu);
	margin-top: var(--odstep);
}

/* ---- zespół ---- */
.rola-forma { margin: 0; }
.rola-forma select { height: 34px; min-width: 150px; }
.zaproszenia { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.zaproszenia li {
	display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
	background: var(--tlo); border-radius: var(--r-pole); padding: 9px 12px;
}
.zaproszenia__adres { font-size: 12.5px; }
.zaproszenia__link { flex: 1; min-width: 240px; height: 32px; font-size: 11.5px; background: var(--bialy); }

/* ---- nagłówek sekcji jako część karty: odstęp do treści ----
   Po wciągnięciu tytułu w kartę zabrakło oddechu — podpis sekcji stykał się
   z pierwszym wierszem tabeli albo z etykietą pola. */
.sekcja-tytul:has(+ .blok) { padding-bottom: 16px; }
.sekcja-tytul:has(+ .blok) + .blok > .siatka-pol:first-child { padding-top: 0; }
.sekcja-tytul:has(+ .blok) + .blok > .tabela:first-child thead th { padding-top: 4px; }

/* Notka informacyjna ma iść przez całą szerokość karty. Ograniczenie miary
   wiersza jest dobre dla artykułu, ale tu robiło z jednego zdania dwa wąskie
   wersy przy pustej połowie sekcji. */
.notka__tresc { max-width: none; }

/* Podpowiedzi pod polami wyglądają wszędzie tak samo — szary drobny tekst,
   nigdy jako etykieta pola. Etykieta mówi, co wpisać; podpowiedź, dlaczego. */
.pole > small {
	display: block;
	margin-top: 6px;
	font: 400 11.5px/1.5 var(--sans);
	color: var(--wtorny);
}

/* ---- legenda ról ---- */
.role-legenda {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 10px;
	padding: 16px var(--bok);
}
.role-legenda__poz {
	background: var(--tlo);
	border-radius: var(--r-pole);
	padding: 11px 13px;
}
.role-legenda__poz b { display: block; font: 600 13px/1.3 var(--sans); }
.role-legenda__poz span { display: block; font: 400 11.5px/1.45 var(--sans); color: var(--wtorny); margin-top: 3px; }

/* ==========================================================================
   ASYSTENT — układ trójkolumnowy
   ==========================================================================

   Lewa: historia. Środek: rozmowa. Prawa: co potrafi, ile zostało, czego nie
   robi. Ostatnia kolumna nie jest ozdobnikiem — człowiek widzący asystenta
   w narzędziu do dokumentów zgodności ma prawo wiedzieć, czy to coś podpisze
   za niego albo zmieni mu dane. Odpowiedź musi być na ekranie.

   Środkowa kolumna ma własne przewijanie i stałą wysokość: pole pytania ma
   zostać w zasięgu wzroku, a nie uciekać pod koniec długiej rozmowy.
   ========================================================================== */

.asystent {
	display: grid;
	grid-template-columns: 260px minmax(0, 1fr) 320px;
	gap: var(--odstep);
	align-items: stretch;
	height: calc(100vh - var(--gora-wys) - var(--odstep) * 3);
	min-height: 560px;
}

/* ---- lewa ---- */
.asystent__lewa {
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 16px;
	display: flex;
	flex-direction: column;
	gap: 14px;
	box-shadow: var(--cien);
	min-height: 0;
}
.asystent__nowa { justify-content: center; }
.asystent__etykieta {
	display: flex; align-items: center; justify-content: space-between;
	font: 500 10px/1 var(--mono);
	letter-spacing: .1em; text-transform: uppercase; color: var(--wtorny);
}
.asystent__etykieta b { color: var(--atrament); }

.rozmowy { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 4px; }
.rozmowy__pusto { margin: 0; font: 400 12.5px/1.5 var(--sans); color: var(--wtorny); }

.rozmowa-poz {
	border: 0; cursor: pointer; text-align: left; width: 100%;
	background: var(--tlo); border-radius: var(--r-pole);
	padding: 10px 12px; font-family: var(--sans);
}
.rozmowa-poz:hover { background: var(--tlo-2); }
.rozmowa-poz.jest-aktywny { background: var(--atrament); }
.rozmowa-poz b { display: block; font: 500 12.5px/1.4 var(--sans); color: var(--atrament); }
.rozmowa-poz span { display: block; font: 400 10px/1.2 var(--mono); color: var(--wtorny); margin-top: 4px; }
.rozmowa-poz.jest-aktywny b { color: #FFFFFF; }
.rozmowa-poz.jest-aktywny span { color: #8B9095; }

.asystent__pakiet {
	background: var(--tlo); border-radius: var(--r-kafel);
	padding: 13px; display: flex; flex-direction: column; gap: 7px;
}
.asystent__pakiet b { font: 700 26px/1 var(--sans); letter-spacing: -.02em; }
.asystent__tor { display: block; height: 6px; border-radius: 3px; background: var(--bialy); overflow: hidden; }
.asystent__tor span { display: block; height: 6px; border-radius: 3px; background: var(--akcent); }

/* ---- środek ---- */
.asystent__srodek {
	background: var(--bialy);
	border-radius: var(--r-karta);
	box-shadow: var(--cien);
	display: flex; flex-direction: column;
	min-height: 0; overflow: hidden;
}
.asystent__gora {
	display: flex; align-items: center; gap: 12px;
	padding: 16px 18px; border-bottom: 1px solid var(--linia-2); flex: none;
}
.asystent__znak {
	width: 38px; height: 38px; flex: none; border-radius: var(--r-pole);
	background: var(--atrament); color: var(--akcent-jasny);
	display: flex; align-items: center; justify-content: center; font: 400 17px/1 var(--sans);
}
.asystent__tytul { flex: 1; min-width: 0; }
.asystent__tytul b { display: block; font: 700 15px/1.3 var(--sans); }
.asystent__tytul span { display: block; font-size: 11px; color: var(--wtorny); margin-top: 2px; }

.asystent__historia {
	flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
	padding: 18px; display: flex; flex-direction: column; gap: 16px;
}
.asystent__wstep { margin: 0; font: 400 14px/1.65 var(--sans); color: var(--wtorny); max-width: 62ch; }

.asystent__dol { flex: none; padding: 14px 18px 16px; border-top: 1px solid var(--linia-2); }
.asystent__stopka { margin: 10px 2px 0; font: 400 10.5px/1.5 var(--mono); color: var(--wtorny); }

/* Dymki rozmowy te same co w panelu w rogu — jedna rozmowa, dwa miejsca. */
.asystent .odpowiedz { display: flex; flex-direction: column; gap: 8px; border: 0; padding: 0; background: transparent; }
.asystent .odpowiedz__pytanie {
	align-self: flex-end; max-width: 80%; margin: 0;
	background: var(--akcent); color: #FFFFFF;
	border-radius: 16px 16px 4px 16px; padding: 11px 15px;
	font: 400 14px/1.55 var(--sans);
}
.asystent .odpowiedz__tresc {
	align-self: flex-start; max-width: 92%;
	background: var(--tlo); border-radius: 16px 16px 16px 4px;
	padding: 14px 16px; font: 400 14px/1.65 var(--sans); color: var(--atrament);
}
.asystent .odpowiedz__tresc p:first-child { margin-top: 0; }
.asystent .odpowiedz__tresc p:last-child { margin-bottom: 0; }
.asystent .zadanie-pasek {
	background: var(--tlo); border-radius: 16px; padding: 12px 14px;
	align-self: flex-start; border-left: 0;
}

/* ---- prawa ---- */
.asystent__prawa { display: flex; flex-direction: column; gap: var(--odstep); overflow-y: auto; min-height: 0; }
.asystent__prawa .blok { margin-bottom: 0; }

.pomoc { display: flex; flex-direction: column; gap: 6px; }
.pomoc__poz {
	display: flex; align-items: center; gap: 11px;
	border: 0; cursor: pointer; text-align: left; width: 100%;
	background: var(--tlo); border-radius: var(--r-kafel);
	padding: 11px 12px; font-family: var(--sans);
}
.pomoc__poz:hover { filter: brightness(.97); }
.pomoc__znak {
	width: 32px; height: 32px; flex: none; border-radius: 10px;
	background: var(--bialy); color: var(--wtorny-mocny);
	display: flex; align-items: center; justify-content: center;
}
.pomoc__tytul { flex: 1; font: 500 12.5px/1.35 var(--sans); color: var(--atrament); }
.pomoc__poz--ziel   { background: #E6F2EA; }
.pomoc__poz--fiolet { background: #EFE9F7; }
.pomoc__poz--roz    { background: #FAEAEA; }
.pomoc__poz--zolc   { background: #F8F1DC; }

.zuzycie { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.zuzycie__wiersz { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.zuzycie__wiersz span { font: 400 12.5px/1.3 var(--sans); color: var(--wtorny-mocny); }
.zuzycie__wiersz b { font: 500 12px/1 var(--mono); }
.zuzycie__tor { display: block; height: 5px; border-radius: 3px; background: var(--tlo); overflow: hidden; margin-top: 5px; }
.zuzycie__tor span { display: block; height: 5px; border-radius: 3px; background: var(--akcent); }

@media (max-width: 1280px) {
	.asystent { grid-template-columns: minmax(0, 1fr) 300px; height: auto; }
	.asystent__lewa { display: none; }
}
@media (max-width: 900px) {
	.asystent { grid-template-columns: minmax(0, 1fr); }
	.asystent__srodek { min-height: 60vh; }
}

/* ---- zakładki w Ustawieniach: widoczne, że są klikalne ----
   Były gołym tekstem na białej karcie i nie odróżniały się od podpisów wokół.
   Tło pastylki wystarcza, żeby palec wiedział, gdzie celować. */
[data-zakladki] .pigulka { background: var(--tlo); }
[data-zakladki] .pigulka:hover { background: var(--tlo-2); color: var(--atrament); }
[data-zakladki] .pigulka.jest-aktywny { background: var(--atrament); color: #FFFFFF; }
[data-zakladki] .pigulka.jest-aktywny:hover { background: #0E1013; color: #FFFFFF; }

/* ---- jednakowy odstęp nagłówków sekcji ----
   Nagłówek strony ma 22 px, a nagłówek sekcji w karcie miał 20 px góra i 16
   dół. Cztery piksele nie brzmią jak problem, ale przy dwóch kartach jedna
   pod drugą widać, że tytuły nie stoją w jednej linii od góry. */
.sekcja-tytul:has(+ .blok) { padding: 22px var(--bok) 18px; }
.naglowek--karta .naglowek__tytul { padding: 22px var(--bok); }


/* ---- notka wewnątrz karty ----
   Wariant dla podpowiedzi stojącej pod polem albo pod tabelą, wewnątrz bloku.
   Ma własne wcięcie i zaokrąglenie, żeby nie dobijała do krawędzi karty —
   podpowiedź rozlana na całą szerokość zlewała się z tłem sekcji, a przy
   zaokrąglonym rogu karty zostawiała biały zajezdżacz. */
.notka--pole {
	margin: 14px var(--bok) 18px;
	padding: 14px 16px;
	border-radius: var(--r-kafel);
}
.notka--pole .notka__tresc { font-size: 12.5px; line-height: 1.6; }
.pole > .notka--pole { margin: 10px 0 0; }

/* Ostatni wiersz tabeli dosuwa się do dolnej krawędzi karty, więc jego rogi
   muszą być zaokrąglone razem z nią. Inaczej spod prostokątnego wiersza
   wygląda biały narożnik bloku. */
.blok > .tabela:last-child tr:last-child td:first-child { border-bottom-left-radius: var(--r-karta); }
.blok > .tabela:last-child tr:last-child td:last-child { border-bottom-right-radius: var(--r-karta); }

/* ==========================================================================
   TURA 17
   ========================================================================== */

/* ---- 1. tabela bez zaokrągleń ----
   Zamiast zaokrąglać komórki, przycinamy je krawędzią karty. Wiersz zostaje
   prostokątny, a narożnik bierze się z bloku — nie ma gdzie prześwitywać
   białemu tłu. */
.blok:has(> .tabela) { overflow: hidden; }
.blok > .tabela:last-child tr:last-child td:first-child,
.blok > .tabela:last-child tr:last-child td:last-child { border-radius: 0; }

/* ---- 2. podpowiedzi w jednym kolorze ----
   Bursztyn znaczy w tej aplikacji „coś wymaga reakcji". Objaśnienie, jak
   liczyć chrom albo czym jest masa zmienna, nie wymaga żadnej reakcji —
   to instrukcja. Wszystkie takie bloki idą na jasnoniebieski. */
.legenda-bom,
.legenda-substancje,
.podpowiedz-blok,
.skroty {
	background: var(--akcent-tlo);
	color: var(--akcent-mocny);
	border-color: transparent;
}
.legenda-bom b, .legenda-substancje b, .podpowiedz-blok b, .skroty b { color: var(--akcent-mocny); }

/* ---- 3. znak kroku na pulpicie ----
   Ptaszek i numer miały 15 px w kwadracie o boku 52. Przy takiej proporcji
   nie da się poznać, czy to znak, czy przypadkowy piksel. */
.zadanie__waga--krok { font-size: 21px; }
.zadanie__waga b { font-size: 17px; }

/* ---- 6. cofnięcie usunięcia ---- */
.btn--cofnij {
	background: var(--bialy);
	border-color: var(--linia);
	color: var(--atrament);
	gap: 8px;
}
.btn--cofnij:hover { background: var(--tlo); border-color: var(--akcent-linia); color: var(--atrament); }
.btn--cofnij .ikona { color: var(--akcent); }

/* Stary glif z pseudoelementu ustępuje miejsca ikonie SVG — inaczej przycisk
   ma dwa znaki obok siebie, jeden nieczytelny i jeden właściwy. */
.btn--cofnij::before { content: none; }

/* ==========================================================================
   SEKCJE ROZWIJANE JAKO KARTY
   ==========================================================================

   „Gdzie użyty", „Wczytaj ponownie dane materiału" i „Co może wywrócić
   zgodność" to pełnoprawne sekcje karty materiału — tylko domyślnie zwinięte.
   Dotąd wyglądały jak szare paski doklejone pod spodem, przez co czytały się
   jak stopka strony, a nie jak część kartoteki.

   Teraz mają tę samą białą kartę, to samo zaokrąglenie i ten sam nagłówek co
   Substancje albo Dowody. Jedyna różnica to strzałka i to, że trzeba kliknąć.
   ========================================================================== */

.rozwijak {
	background: var(--bialy);
	border-radius: var(--r-karta);
	box-shadow: var(--cien);
	margin-bottom: var(--odstep);
	overflow: hidden;
}

.rozwijak > summary {
	padding: 22px var(--bok);
	background: transparent;
	border-top: 0;
	border-bottom: 0;
	gap: 14px;
}
/* Bez podświetlenia przy najechaniu i bez kreski pod nagłówkiem po rozwinięciu.
   Rozwinięta sekcja ma wyglądać dokładnie jak Dowody czy Substancje, gdzie
   nagłówek nie jest niczym oddzielony od treści — a strzałka i tak mówi,
   że da się kliknąć. */
.rozwijak > summary:hover { background: transparent; }
.rozwijak[open] > summary { border-bottom: 0; }

/* Strzałka po prawej, dyskretna. Wcześniej był to czarny kwadrat 36 px
   po lewej stronie — dominował nad tytułem sekcji, do której należał. */
.rozwijak > summary::before { display: none; }
.rozwijak > summary::after {
	content: '';
	flex: none;
	width: 28px; height: 28px;
	/* Odstęp od podpisu, a nie „auto" — inaczej strzałka i napis rozjeżdżały
	   się na dwie różne pozycje, zależne od długości tytułu sekcji. */
	margin-left: 12px;
	border-radius: 9px;
	background: var(--tlo) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C817F' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M5 9l7 7 7-7'/></svg>") no-repeat center;
	background-size: 16px 16px;
	transition: transform .15s ease;
}
.rozwijak[open] > summary::after { transform: rotate(180deg); }

/* Tytuł jak w nagłówku sekcji, nie jak etykieta paska. */
.rozwijak__tytul { font: 700 16px/1.3 var(--sans); color: var(--atrament); }
.rozwijak__licznik {
	font: 500 11px/1 var(--mono);
	background: var(--tlo); color: var(--wtorny-mocny);
	border-radius: var(--r-znak); padding: 6px 10px;
}
/* „kliknij, aby rozwinąć" — podpis sekcji, nie osobny przycisk. */
.rozwijak__akcja { font: 400 12.5px/1.4 var(--sans); color: var(--wtorny); margin-left: auto; }
/* Gdy sekcja jest rozwinięta, zachęta traci sens. */
.rozwijak[open] > summary .rozwijak__akcja { visibility: hidden; }

/* Blok wewnątrz nie dokłada drugiej karty. */
.rozwijak .blok {
	box-shadow: none;
	border-radius: 0;
	margin-bottom: 0;
	background: transparent;
}

/* ---- wariant zagnieżdżony: „albo wpisz ręcznie" ----
   Ten należy do Dowodów i ma to widać. Nie jest osobną kartą, tylko cichym
   przełącznikiem wewnątrz sekcji — inaczej wyglądał jak kolejna sekcja
   dotycząca czegoś innego. */
.blok .rozwijak {
	background: var(--tlo);
	border-radius: var(--r-kafel);
	box-shadow: none;
	margin: 4px var(--bok) 18px;
}
.blok .rozwijak > summary { padding: 13px 16px; }
.blok .rozwijak > summary:hover { background: transparent; }
.blok .rozwijak[open] > summary { border-bottom: 0; }
.blok .rozwijak .rozwijak__tytul { font: 500 13.5px/1.3 var(--sans); color: var(--wtorny-mocny); }
.blok .rozwijak > summary::after { width: 24px; height: 24px; background-color: var(--bialy); }
.blok .rozwijak .siatka-pol { padding-left: 16px; padding-right: 16px; }
.blok .rozwijak .pasek-dolny { padding-left: 16px; padding-right: 16px; }

/* Pogrubienie wewnątrz drobnego tekstu ma zostać w linii. Reguła nadająca
   „.drobne b" własność display: block sprawiała, że jedno wyróżnione słowo
   rozbijało zdanie na trzy osobne wiersze. */
/* Tylko pogrubienie WEWNĄTRZ opisu — nie samo b, bo nagłówek ramki też jest
   znacznikiem b i po zamianie na inline wsiąkał w akapit pod spodem. */
.wgrywarka__opis .drobne b { display: inline; }

/* ==========================================================================
   WARSTWA 2026-08 — porządki po uwagach z wdrożenia

   Dopisywane na samym końcu, świadomie. Arkusz jest warstwowy: każda kolejna
   sekcja poprawia poprzednią przy tej samej specyficzności, więc o wyniku
   decyduje kolejność. Nowe reguły dopisuj TUTAJ, nie w środku pliku.
   ========================================================================== */

/* ---- podziałka kroków w kreatorze deklaracji ----
   Numer dostawał tło w kolorze akcentu, ale bez wymiarów i bez wcięcia: przy
   trzynastu pikselach monospace wychodził z tego ledwo widoczny niebieski
   pasek pod cyframi. Teraz to pełnoprawny znacznik — okrągły, wyśrodkowany,
   o wielkości niezależnej od długości liczby.

   Na kroku aktywnym tło jest półprzezroczystą bielą, nie akcentem: niebieski
   na czarnym tle daje 3,8 : 1, czyli mniej niż wymagane minimum, a przy tym
   wygląda jak plama brudu na czarnym pasku. */
.podzialka {
	border-radius: var(--r-karta);
	overflow: hidden;
	border-bottom: 0;
	margin-bottom: var(--odstep);
}
.podzialka__krok {
	align-items: center;
	gap: 11px;
	padding: 15px var(--bok);
	border-right: 1px solid var(--linia);
}
.podzialka__nr {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 27px;
	height: 22px;
	padding: 0 8px;
	border-radius: var(--r-znak);
	background: var(--tlo);
	color: var(--wtorny-mocny);
	font: 500 11.5px/1 var(--mono);
	letter-spacing: .04em;
}
.podzialka__etykieta { font-size: 13.5px; }

.podzialka__krok.jest-aktywny .podzialka__nr {
	background: rgba(255, 255, 255, .18);
	border-color: transparent;
	color: #FFFFFF;
}
.podzialka__krok.jest-zrobiony { background: var(--zielen-tlo); }
.podzialka__krok.jest-zrobiony .podzialka__nr {
	background: var(--bialy);
	color: var(--zielen);
}

/* ---- pasek działań pod formularzem kreatora ----
   Pas ciągnął się od krawędzi do krawędzi na płaskim szarym tle, a stał na nim
   pojedynczy niebieski przycisk — jedyny element na ekranie bez zaokrąglenia
   i bez własnej karty. Teraz jest kartą jak wszystko wokół. */
.kreator .pasek-dolny:not(.pasek-dolny--przyklejony) {
	margin: var(--odstep) 0 0;
	padding: 14px 16px;
	background: var(--bialy);
	border-top: 0;
	border-radius: var(--r-karta);
	box-shadow: var(--cien-menu);
}
.kreator .pasek-dolny .btn { height: 40px; padding: 0 18px; border-radius: var(--r-pole); }
/* Przycisk cofający ma być cichy, a nie równie mocny co przycisk dalej —
   inaczej oba wyglądają na tak samo ważne i człowiek klika bliższy. */
.kreator .pasek-dolny .btn:not(.btn--glowny) { background: var(--tlo); color: var(--atrament); }
.kreator .pasek-dolny .btn:not(.btn--glowny):hover { background: var(--tlo-2); }
.kreator .pasek-dolny .btn--glowny { margin-left: auto; }

/* ---- menu działań przy wierszu listy ----
   Kafelki zniknęły, a razem z nimi miejsce na trzy przyciski w wierszu.
   Zostaje jeden znak i lista pod nim.

   Lista jest pozycjonowana na stałe (position: fixed) i ustawiana skryptem:
   .blok z tabelą ma overflow: hidden, żeby przyciąć rogi tabeli do promienia
   karty, więc menu rozwijane w normalnym przepływie byłoby ucięte przy
   ostatnich wierszach. */
.kol-akcji { width: 1%; white-space: nowrap; text-align: right; }
.tylko-dla-czytnika {
	position: absolute; width: 1px; height: 1px;
	margin: -1px; padding: 0; overflow: hidden;
	clip-path: inset(50%); border: 0; white-space: nowrap;
}

.menu-akcji { display: inline-block; }
.menu-akcji__przycisk {
	display: inline-flex; align-items: center; justify-content: center;
	width: 34px; height: 34px; padding: 0;
	border: 0; border-radius: var(--r-pole);
	background: transparent; color: var(--wtorny-mocny);
	cursor: pointer;
	transition: background-color .12s ease, color .12s ease;
}
.menu-akcji__przycisk:hover,
.menu-akcji.jest-otwarte .menu-akcji__przycisk { background: var(--tlo-2); color: var(--atrament); }

.menu-akcji__lista {
	position: fixed; z-index: 80;
	min-width: 236px; max-width: 320px;
	padding: 6px;
	background: var(--bialy);
	border-radius: var(--r-kafel);
	box-shadow: var(--cien-menu);
	text-align: left;
}
.menu-akcji__lista[hidden] { display: none; }
.menu-akcji__forma { margin: 0; }

.menu-akcji__poz {
	display: block; width: 100%; box-sizing: border-box;
	padding: 9px 11px;
	border: 0; border-radius: 10px;
	background: transparent; color: var(--atrament);
	font: 500 13.5px/1.35 var(--sans);
	text-align: left; text-decoration: none; cursor: pointer;
}
.menu-akcji__poz:hover,
.menu-akcji__poz:focus-visible { background: var(--tlo); }
.menu-akcji__tekst { display: block; }
.menu-akcji__opis {
	display: block; margin-top: 2px;
	font: 400 11.5px/1.35 var(--sans); color: var(--wtorny-mocny);
}
.menu-akcji__kreska { display: block; height: 1px; margin: 5px 8px; background: var(--linia); }

.menu-akcji__poz--usun { color: var(--rdza); }
.menu-akcji__poz--usun:hover { background: var(--rdza-tlo); color: var(--rdza-ciemna); }
.menu-akcji__poz--usun .menu-akcji__opis { color: var(--rdza); }

/* Pozycja martwa tłumaczy, czego nie da się zrobić i dlaczego. Nie znika
   z menu, bo puste miejsce niczego nie wyjaśnia. */
.menu-akcji__poz--martwa { color: var(--wtorny); cursor: default; }
.menu-akcji__poz--martwa:hover { background: transparent; }

/* ---- rysunek techniczny na karcie opakowania ---- */
.rysunek-wgrany {
	display: flex; align-items: center; gap: 14px;
	padding: 12px 14px;
	background: var(--tlo); border-radius: var(--r-kafel);
}
.rysunek-wgrany__podglad {
	flex: none; display: block;
	width: 96px; height: 68px;
	background: var(--bialy); border-radius: 10px; overflow: hidden;
}
.rysunek-wgrany__podglad img { width: 100%; height: 100%; object-fit: contain; }
.rysunek-wgrany__ikona {
	flex: none; display: inline-flex; align-items: center; justify-content: center;
	width: 96px; height: 68px;
	background: var(--bialy); border-radius: 10px;
	font: 500 12px/1 var(--mono); letter-spacing: .08em; color: var(--rdza);
}
.rysunek-wgrany__opis { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.rysunek-wgrany__opis b { overflow-wrap: anywhere; }
.rysunek-wgrany__opis > span { font: 400 12px/1.35 var(--sans); color: var(--wtorny-mocny); }

/* Pole wyboru pliku dziedziczy wygląd pozostałych pól formularza — domyślny
   kontrolki przeglądarki był jedynym elementem karty z systemową ramką. */
input[type=file] {
	width: 100%; box-sizing: border-box;
	padding: 9px 11px;
	border: 1px solid var(--linia); border-radius: var(--r-pole);
	background: var(--bialy);
	font: 400 13px/1.3 var(--sans); color: var(--atrament);
}
input[type=file]::file-selector-button {
	margin-right: 12px; padding: 6px 12px;
	border: 0; border-radius: 9px;
	background: var(--tlo); color: var(--atrament);
	font: 500 12.5px/1 var(--sans); cursor: pointer;
}
input[type=file]::file-selector-button:hover { background: var(--tlo-2); }

/* ==========================================================================
   WARSTWA 2026-08b — poprawki po pierwszym wdrożeniu
   ========================================================================== */

/* ---- „Wstecz" w kreatorze deklaracji ----
   Reguła z sekcji o paskach dolnych ma sześć pseudoklas :not, czyli
   specyficzność 0,9,0 — więcej niż zapisane wcześniej `.kreator .pasek-dolny
   .btn:not(.btn--glowny)` (0,4,0). Wygrywała i malowała przycisk na biało
   na białej karcie, przez co „Wstecz" wyglądał jak zwykły napis. Ten sam
   łańcuch z dołożonym `.kreator` daje 0,10,0 i wraca do wypełnienia. */
.kreator .pasek-dolny:not(.pasek-dolny--przyklejony) .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij) {
	background: var(--tlo);
	border-color: transparent;
	color: var(--atrament);
}
.kreator .pasek-dolny:not(.pasek-dolny--przyklejony) .btn:not(.btn--glowny):not(.btn--dodaj):not(.btn--usun):not(.btn--blad):not(.btn--uwaga):not(.btn--cofnij):hover {
	background: var(--tlo-2);
	border-color: transparent;
	color: var(--atrament);
}

/* ---- przycisk menu działań ----
   Przezroczyste tło znikało w wierszu: znak bez obrysu i bez wypełnienia nie
   wygląda na coś, w co można kliknąć. Teraz to normalny przycisk — biała
   karta z obrysem, czytelna także na wierszu podświetlonym najechaniem
   (tło wiersza to --tlo, więc biel nadal się odcina). */
.menu-akcji__przycisk {
	width: 36px;
	height: 36px;
	background: var(--bialy);
	border: 1px solid var(--linia);
	color: var(--wtorny-mocny);
}
.menu-akcji__przycisk:hover,
.menu-akcji.jest-otwarte .menu-akcji__przycisk {
	background: var(--atrament);
	border-color: var(--atrament);
	color: #FFFFFF;
}
.menu-akcji__przycisk .ikona { display: block; }

/* Kolumna działań musi zmieścić przycisk razem z wcięciem komórki. */
.tabela .kol-akcji { padding-left: 8px; padding-right: 14px; }

/* ==========================================================================
   KARTA WYROBU — układ z zakładkami i kolumną opisową (2026-08)

   Karta przestała być jednym długim formularzem. Nagłówek trzyma tożsamość
   wyrobu i akcje, zakładki dzielą treść na pięć widoków, a prawa kolumna
   odpowiada na „co to właściwie jest" bez przewijania.
   ========================================================================== */

.karta-wyrob { display: flex; flex-direction: column; }

/* ---- nagłówek ---- */
.karta__gora {
	background: var(--bialy);
	border-radius: var(--r-karta);
	margin-bottom: var(--odstep);
	overflow: hidden;
}
.karta__naglowek {
	display: flex;
	align-items: flex-start;
	gap: 20px;
	padding: 20px var(--bok) 16px;
}
.karta__tytul { min-width: 0; flex: 1; }
.karta__tytul h1 {
	display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
	margin: 0;
	font: 700 24px/1.25 var(--sans);
	color: var(--atrament);
}
.karta__tytul h1 .znacznik { font-size: 12px; }
.karta__podtytul {
	margin: 6px 0 0;
	font: 400 13.5px/1.45 var(--sans);
	color: var(--wtorny-mocny);
}
.karta__akcje { display: flex; align-items: center; gap: 10px; flex: none; }
.karta__akcje .btn { gap: 8px; }

/* ---- zakładki ---- */
.zakladki {
	display: flex;
	gap: 2px;
	padding: 0 var(--bok);
	border-top: 1px solid var(--linia-2);
	overflow-x: auto;
}
.zakladka {
	display: inline-flex; align-items: center; gap: 8px;
	padding: 13px 14px;
	border: 0; border-bottom: 2px solid transparent;
	background: transparent;
	color: var(--wtorny-mocny);
	font: 500 13.5px/1 var(--sans);
	white-space: nowrap; cursor: pointer;
	transition: color .12s ease, border-color .12s ease;
}
.zakladka:hover { color: var(--atrament); }
.zakladka.jest-aktywny { color: var(--akcent-mocny); border-bottom-color: var(--akcent); }
.zakladka .ikona { flex: none; opacity: .75; }
.zakladka.jest-aktywny .ikona { opacity: 1; }
.zakladka__licznik {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 20px; height: 20px; padding: 0 6px;
	border-radius: var(--r-znak);
	background: var(--tlo);
	font: 500 11.5px/1 var(--mono);
	color: var(--wtorny-mocny);
}
.zakladka.jest-aktywny .zakladka__licznik { background: var(--akcent-tlo); color: var(--akcent-mocny); }

/* ---- dwie kolumny ---- */
.karta__uklad {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 320px;
	gap: var(--odstep);
	align-items: start;
}
.karta__glowna { min-width: 0; }
.karta__bok { position: sticky; top: var(--odstep); }

@media (max-width: 1180px) {
	.karta__uklad { grid-template-columns: minmax(0, 1fr); }
	.karta__bok { position: static; }
}
@media (max-width: 760px) {
	.karta__naglowek { flex-direction: column; }
	.karta__akcje { width: 100%; flex-wrap: wrap; }
}

/* Nagłówek sekcji wewnątrz karty jest tu paskiem, nie akapitem — tytuł,
   opis i akcja stoją w jednej linii. Reguła bazowa robi ze spanów bloki,
   więc trzeba ją cofnąć punktowo. */
.karta-wyrob .blok__gora {
	display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
	padding: 18px var(--bok);
}
.karta-wyrob .blok__gora h2 { margin: 0; font: 700 16px/1.3 var(--sans); }
.karta-wyrob .blok__gora span { display: inline-block; margin-top: 0; }
.karta-wyrob .blok__gora .blok__opis { color: var(--wtorny); font-size: 12.5px; }
.karta-wyrob .blok__gora > .btn,
.karta-wyrob .blok__gora > .znacznik { margin-left: auto; }

/* ---- kolumna opisowa ---- */
.blok--opis { padding-bottom: 6px; }
.opis-grupa { padding: 14px var(--bok); border-top: 1px solid var(--linia-2); }
.opis-grupa:first-of-type { border-top: 0; }
.opis-grupa__tytul {
	display: block; margin-bottom: 9px;
	font: 500 10.5px/1 var(--sans);
	letter-spacing: .09em; text-transform: uppercase;
	color: var(--wtorny-mocny);
}
.opis-grupa p.drobne { margin: 8px 0 0; }

.opis-lista { margin: 0; display: grid; gap: 9px; }
.opis-lista dt {
	font: 400 12px/1.3 var(--sans);
	color: var(--wtorny-mocny);
}
.opis-lista dd {
	margin: 2px 0 0;
	font: 500 13.5px/1.4 var(--sans);
	color: var(--atrament);
	overflow-wrap: anywhere;
}

.rysunek-wgrany--waski { flex-direction: column; align-items: stretch; gap: 10px; padding: 10px; }
.rysunek-wgrany--waski .rysunek-wgrany__podglad,
.rysunek-wgrany--waski .rysunek-wgrany__ikona { width: 100%; height: 96px; }

/* ---- tabela składu ---- */
.tabela--sklad td { vertical-align: top; }
.tabela--sklad .podpis { display: block; margin-top: 3px; }
.ponad-limit { color: var(--rdza); font-weight: 600; }

/* ==========================================================================
   OKIENKO (dialog) — edycja pozycji bez opuszczania karty

   Nie „.okno": ta klasa jest już zajęta przez nakładkę na <div> (kategorie),
   która ma position: fixed, inset: 0 i display: flex. <dialog> z tą klasą
   ignorował regułę przeglądarki chowającą zamknięty dialog i wisiał na
   ekranie od wejścia na stronę.
   ========================================================================== */

.okienko {
	width: min(680px, calc(100vw - 32px));
	max-height: calc(100vh - 64px);
	padding: 0;
	border: 0;
	border-radius: var(--r-karta);
	background: var(--bialy);
	box-shadow: var(--cien-menu);
	color: var(--atrament);
}
/* Zasłona musi wyraźnie odciąć okno od karty pod spodem — przy słabszym
   przyciemnieniu tabela składu prześwitywała spod formularza i oba plany
   czytało się jak jeden. */
.okienko::backdrop { background: rgba(22, 24, 28, .52); }
.okienko__ramka { display: flex; flex-direction: column; max-height: calc(100vh - 64px); }

.okienko__gora {
	display: flex; align-items: flex-start; gap: 16px;
	padding: 20px var(--bok) 14px;
	border-bottom: 1px solid var(--linia-2);
}
.okienko__gora h2 { margin: 0; font: 700 17px/1.3 var(--sans); }
.okienko__podtytul { margin: 4px 0 0; font: 400 12.5px/1.4 var(--sans); color: var(--wtorny); }
.okienko__zamknij {
	margin-left: auto; flex: none;
	width: 32px; height: 32px;
	border: 0; border-radius: var(--r-pole);
	background: var(--tlo); color: var(--wtorny-mocny);
	font: 400 20px/1 var(--sans); cursor: pointer;
}
.okienko__zamknij:hover { background: var(--tlo-2); color: var(--atrament); }

.okienko__tresc { overflow-y: auto; padding-bottom: 6px; }
.okienko__tresc .siatka-pol { padding-top: 16px; }

.okienko__podsumowanie {
	display: flex; gap: 24px; flex-wrap: wrap;
	margin: 6px var(--bok) 18px;
	padding: 12px 16px;
	background: var(--akcent-tlo);
	border-radius: var(--r-kafel);
}
.okienko__podsumowanie > span { display: flex; flex-direction: column; gap: 2px; }
.okienko__podsumowanie b { font: 600 15px/1.2 var(--mono); color: var(--akcent-mocny); }
.okienko__podsumowanie > span > span { font: 400 11.5px/1.3 var(--sans); color: var(--wtorny-mocny); }

.okienko__dol {
	display: flex; align-items: center; gap: 10px;
	padding: 14px var(--bok);
	border-top: 1px solid var(--linia-2);
	background: var(--tlo);
	border-radius: 0 0 var(--r-karta) var(--r-karta);
}

/* Reguła przeglądarki chowająca zamknięty dialog ma niską specyficzność.
   Zapisana wprost, żeby żadna przyszła klasa jej nie przykryła. */
dialog.okienko:not([open]) { display: none; }

/* ==========================================================================
   KARTA WYROBU — poprawki po testach na laptopie
   ========================================================================== */

/* ---- pasek nagłówka grupy w kolumnie opisowej ----
   Tło ma iść od krawędzi do krawędzi karty, a nie kończyć się na wcięciu
   treści — inaczej wygląda jak przypadkowe podświetlenie słowa, a nie jak
   nagłówek sekcji. Ujemny margines zdejmuje wcięcie rodzica, padding
   przywraca je samemu paskowi. */
.opis-grupa { padding: 0 0 14px; }
.opis-grupa__tytul {
	display: block;
	margin: 0 0 12px;
	padding: 9px var(--bok);
	background: var(--akcent-tlo);
	color: var(--akcent-mocny);
	font: 500 10.5px/1 var(--sans);
	letter-spacing: .09em;
	text-transform: uppercase;
}
.opis-grupa > *:not(.opis-grupa__tytul) { margin-left: var(--bok); margin-right: var(--bok); }
.opis-grupa .opis-lista,
.opis-grupa .rysunek-wgrany { margin-left: var(--bok); margin-right: var(--bok); }

/* ---- kolumna opisowa schodzi pod treść dopiero na wąskim ekranie ----
   Przy 1180 px karta na trzynastocalowym laptopie wciąż miała dwie kolumny,
   a na główną zostawało niecałe 700 px — tabela składu nie mieściła się
   i wypychała poziomy pasek przewijania. Próg podniesiony tak, żeby dwie
   kolumny pojawiały się dopiero tam, gdzie obie mają sens. */
@media (max-width: 1500px) {
	.karta__uklad { grid-template-columns: minmax(0, 1fr); }
	.karta__bok { position: static; }
}

/* ---- tabela składu ----
   Ma się mieścić bez przewijania w bok. Szerokości kolumn są narzucone,
   bo przy automatycznym układzie nazwa materiału zabierała pół tabeli,
   a kolumny liczbowe zwijały się do jednej cyfry na wiersz. */
.tabela--sklad { table-layout: fixed; width: 100%; font-size: 12.5px; }
.tabela--sklad th,
.tabela--sklad td { padding: 10px 8px; }
.tabela--sklad th { font-size: 10.5px; letter-spacing: .04em; }
.tabela--sklad th .jedn {
	display: block;
	margin-top: 2px;
	font: 400 9.5px/1 var(--mono);
	letter-spacing: .02em;
	color: var(--wtorny);
	text-transform: none;
}

.tabela--sklad th:nth-child(1), .tabela--sklad td:nth-child(1) { width: 34px; padding-left: var(--bok); }
.tabela--sklad th:nth-child(2), .tabela--sklad td:nth-child(2) { width: auto; }
.tabela--sklad th:nth-child(3), .tabela--sklad td:nth-child(3) { width: 24%; }
.tabela--sklad th:nth-child(4), .tabela--sklad td:nth-child(4) { width: 76px; }
.tabela--sklad th:nth-child(5), .tabela--sklad td:nth-child(5) { width: 84px; }
.tabela--sklad th:nth-child(6), .tabela--sklad td:nth-child(6) { width: 80px; }
.tabela--sklad th:nth-child(7), .tabela--sklad td:nth-child(7) { width: 66px; }
.tabela--sklad th:nth-child(8), .tabela--sklad td:nth-child(8) { width: 74px; }
.tabela--sklad th:nth-child(9), .tabela--sklad td:nth-child(9) { width: 124px; }
.tabela--sklad th:nth-child(10), .tabela--sklad td:nth-child(10) { width: 52px; padding-right: 14px; }

/* Liczby nie łamią się nigdy — złamana masa czyta się jak dwie różne. */
.tabela--sklad td.liczba, .tabela--sklad td.mono { white-space: nowrap; }
.tabela--sklad td:nth-child(2) b,
.tabela--sklad td:nth-child(3) a { overflow-wrap: anywhere; }
.tabela--sklad .podpis { font-size: 11px; line-height: 1.35; }
.tabela--sklad .znacznik { padding: 4px 9px; font-size: 11px; white-space: nowrap; }
.tabela--sklad .menu-akcji__przycisk { width: 30px; height: 30px; }

@media (max-width: 900px) {
	.tabela--sklad { table-layout: auto; min-width: 780px; }
}

/* ==========================================================================
   SZUFLADA — edycja z boku ekranu, bez opuszczania karty
   ========================================================================== */

.szuflada {
	position: fixed;
	top: 0; right: 0; left: auto; bottom: 0;
	width: min(680px, 100vw);
	max-width: 100vw;
	max-height: 100vh;
	height: 100vh;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: var(--bialy);
	box-shadow: -24px 0 60px -30px rgba(22, 24, 28, .45);
	color: var(--atrament);
}
.szuflada::backdrop { background: rgba(22, 24, 28, .52); }
dialog.szuflada:not([open]) { display: none; }
.szuflada__ramka { display: flex; flex-direction: column; height: 100%; }

.szuflada__gora {
	display: flex; align-items: flex-start; gap: 16px;
	padding: 20px var(--bok) 16px;
	border-bottom: 1px solid var(--linia-2);
}
.szuflada__gora h2 { margin: 0; font: 700 18px/1.3 var(--sans); }
.szuflada__podtytul { margin: 4px 0 0; font: 400 12.5px/1.4 var(--sans); color: var(--wtorny); }
.szuflada__gora .okienko__zamknij { margin-left: auto; }

.szuflada__tresc { flex: 1; overflow-y: auto; padding-bottom: 8px; }

.szuflada__dol {
	display: flex; align-items: center; gap: 10px;
	padding: 14px var(--bok);
	border-top: 1px solid var(--linia-2);
	background: var(--tlo);
}
.szuflada__dol .btn[disabled] { cursor: not-allowed; }

/* ---- grupy pól ---- */
.pola-sekcja { padding: 18px 0 4px; border-top: 1px solid var(--linia-2); }
.pola-sekcja:first-child { border-top: 0; }
.pola-sekcja__tytul {
	margin: 0 0 4px;
	padding: 0 var(--bok);
	font: 700 14px/1.3 var(--sans);
	color: var(--atrament);
}
.pola-sekcja .siatka-pol { padding-top: 12px; }
.blok--pola { padding-bottom: 10px; }

/* ==========================================================================
   TURA POPRAWEK — czytelność karty wyrobu
   ========================================================================== */

/* ---- kolumna opisowa: wcięcie z powrotem na sekcji ----
   Przenoszenie wcięcia na poszczególne elementy nie zadziałało: reguła
   `.opis-grupa p.drobne { margin: 8px 0 0 }` stoi wyżej, ma większą
   specyficzność i zerowała marginesy boczne, więc akapity dotykały krawędzi.
   Wcięcie wraca na sekcję, a pasek nagłówka wychodzi poza nie ujemnym
   marginesem — jedno miejsce, jedna zasada. */
.opis-grupa { padding: 0 var(--bok) 14px; }
.opis-grupa > *:not(.opis-grupa__tytul) { margin-left: 0; margin-right: 0; }
.opis-grupa .opis-lista,
.opis-grupa .rysunek-wgrany { margin-left: 0; margin-right: 0; }
.opis-grupa__tytul {
	margin: 0 calc(var(--bok) * -1) 12px;
	padding: 9px var(--bok);
}

/* ---- wymiary z podpisem nad polem ---- */
.wymiary--opisane { align-items: flex-end; gap: 10px; }
.wymiary__pole { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.wymiary__opis { font: 400 11.5px/1.2 var(--sans); color: var(--wtorny-mocny); }
.wymiary--opisane input { width: 100%; min-width: 0; text-align: left; }
.wymiary__znak { padding-bottom: 11px; color: var(--wtorny); }

/* ---- przyciski w stopkach okna i szuflady ----
   Stopka ma tło --tlo, a neutralny .btn też — „Anuluj" znikał w tle
   i wyglądał jak sam napis. Na tym tle przycisk musi być bielszy niż
   otoczenie, nie tak samo szary. */
.szuflada__dol .btn:not(.btn--glowny):not(.btn--usun),
.okienko__dol .btn:not(.btn--glowny):not(.btn--usun) {
	background: var(--bialy);
	border: 1px solid var(--linia);
	color: var(--atrament);
}
.szuflada__dol .btn:not(.btn--glowny):not(.btn--usun):hover,
.okienko__dol .btn:not(.btn--glowny):not(.btn--usun):hover {
	background: var(--tlo-2);
	border-color: var(--wtorny);
}

/* „Usuń" na bladym różu też się zlewał. Mocniejszy pas i wyraźna krawędź —
   przycisk nieodwracalny ma być widoczny, choć nie ma krzyczeć. */
.szuflada__dol .btn--usun,
.okienko__dol .btn--usun {
	background: var(--rdza-pas);
	border: 1px solid var(--rdza-linia);
	color: var(--rdza-ciemna);
	font-weight: 600;
}
.szuflada__dol .btn--usun:hover,
.okienko__dol .btn--usun:hover {
	background: var(--rdza);
	border-color: var(--rdza);
	color: #FFFFFF;
}
.szuflada__dol .btn--usun[disabled] { opacity: .45; }

/* ==========================================================================
   TABELA SKŁADU — układ stały, nagłówki łamane, kolor grupy przy wierszu
   ========================================================================== */

/* Szerokości podaje <colgroup> w widoku; tutaj tylko to, czego HTML nie umie. */
.tabela--sklad { table-layout: fixed; width: 100%; font-size: 12.5px; }

/* Nagłówki muszą się łamać. Bazowa reguła tabel ma white-space: nowrap —
   przy układzie stałym tekst nie mieścił się w kolumnie i wychodził na
   sąsiednią, stąd „LPKOMPONENTMATERIAŁ" jednym ciągiem. */
.tabela--sklad thead th {
	white-space: normal;
	vertical-align: bottom;
	padding: 12px 8px 10px;
	font: 500 10px/1.35 var(--mono);
	letter-spacing: .04em;
	overflow-wrap: anywhere;
}
.tabela--sklad thead th.prawo { text-align: right; }

.tabela--sklad td { padding: 12px 8px; vertical-align: middle; }
.tabela--sklad td:first-child, .tabela--sklad th:first-child { padding-left: 14px; }
.tabela--sklad td:last-child, .tabela--sklad th:last-child { padding-right: 14px; }

/* Numer wiersza z paskiem barwy grupy materiałowej — tym samym, co na
   wykresie składu. Pasek jest wewnątrz komórki, nie obramowaniem wiersza:
   border-left na <tr> nie działa w układzie z rozdzielonymi krawędziami. */
.sklad__lp { position: relative; text-align: right; color: var(--wtorny-mocny); }
.sklad__barwa {
	position: absolute;
	left: 0; top: 8px; bottom: 8px;
	width: 3px;
	border-radius: 0 3px 3px 0;
}

.tabela--sklad td:nth-child(2) b { font-weight: 600; overflow-wrap: anywhere; }
.tabela--sklad td:nth-child(3) a { overflow-wrap: anywhere; }
.tabela--sklad .podpis { display: block; margin-top: 3px; font-size: 11px; line-height: 1.35; color: var(--wtorny); }
.tabela--sklad .liczba, .tabela--sklad td.mono { white-space: nowrap; font-family: var(--mono); }
.tabela--sklad .znacznik { padding: 4px 9px; font-size: 11px; white-space: nowrap; }
.tabela--sklad .menu-akcji__przycisk { width: 30px; height: 30px; }
.tabela--sklad tbody tr:hover td { background: var(--tlo); }

/* Wiersz „Razem" oddzielony od tabeli i czytany jako podsumowanie,
   a nie jako kolejna pozycja. */
.tabela--sklad tfoot th {
	border-top: 2px solid var(--atrament);
	background: var(--bialy);
	padding: 14px 8px;
	font: 600 14px/1.3 var(--sans);
	color: var(--atrament);
	text-transform: none;
	letter-spacing: 0;
}
.tabela--sklad tfoot th.liczba { font-family: var(--mono); font-size: 14px; }

/* Poniżej tej szerokości układ stały przestaje mieć sens — wtedy dopiero
   przewijanie w bok, zamiast ściskania kolumn do jednej cyfry. */
@media (max-width: 900px) {
	/* Układ stały zostaje, dochodzi tylko szerokość minimalna i przewijanie
	   w bok. Wyłączanie <colgroup> byłoby ryzykowne: `display: none` na <col>
	   w części silników chowa całą kolumnę, a nie samą deklarację szerokości. */
	.tabela--sklad { min-width: 900px; }
}

/* ==========================================================================
   ODSTĘPY — kolumna opisowa, wymiary, stopka tabeli składu
   ========================================================================== */

/* ---- pary etykieta–wartość ----
   Siatka z jednakowym gapem traktowała odstęp „Kod → NP-1208-200" tak samo
   jak „NP-1208-200 → Rodzaj", więc wartość odklejała się od swojej etykiety
   i równie dobrze mogła należeć do następnej. Odstęp należy do pary, nie do
   każdego wiersza z osobna: wartość tuż pod etykietą, 18 px dopiero przed
   kolejną parą. */
.opis-lista { display: block; margin: 0; }
.opis-lista dt {
	margin: 18px 0 0;
	font: 400 12px/1.3 var(--sans);
	color: #666666;
}
.opis-lista dt:first-child { margin-top: 0; }
.opis-lista dd {
	margin: 2px 0 0;
	font: 500 13.5px/1.4 var(--sans);
	color: var(--atrament);
	overflow-wrap: anywhere;
}

/* ---- wymiary: znak × w tej samej siatce co pola ----
   Wcześniej × stał w linii z etykietami, bo dosuwałem go do dołu stałym
   paddingiem — a ten musiałby się zmieniać razem z wysokością pola. Teraz
   znak ma nad sobą pusty wiersz etykiety i wyśrodkowuje się w wierszu pól,
   niezależnie od tego, jak wysokie one są. */
.wymiary--opisane { align-items: stretch; gap: 10px; }
.wymiary__znak {
	flex: none;
	display: flex;
	flex-direction: column;
	gap: 4px;
	padding-bottom: 0;
	color: var(--wtorny);
}
.wymiary__x { flex: 1; display: flex; align-items: center; }
/* Etykieta wyrównana do lewej krawędzi pola. Wcięcie pod tekst w środku
   pola wyglądało jak przypadkowe przesunięcie — kolumna zaczyna się tam,
   gdzie zaczyna się ramka. */
.wymiary__opis { padding-left: 0; }

/* ---- stopka tabeli składu ----
   Liczby idą bez jednostki (niesie ją nagłówek kolumny) i nie łamią się;
   font o pół stopnia niżej, żeby „9,31304" mieściło się w swojej kolumnie. */
.tabela--sklad tfoot th { font-size: 13.5px; padding: 14px 8px; }
.tabela--sklad tfoot th.liczba { font-size: 13.5px; white-space: nowrap; }

/* ==========================================================================
   POLA WYMIARÓW I LICZNIKI PRZY ZAKŁADKACH
   ========================================================================== */

/* ---- wymiary tej samej wielkości co reszta pól ----
   Winne było `appearance: textfield` odziedziczone po starej regule .wymiary.
   Cofa ono `appearance: none` z reguły bazowej, więc przeglądarka wracała do
   własnego widgetu liczbowego i rysowała pole niższe niż sąsiednie, po swojemu.
   Strzałki i tak chowamy osobną regułą, więc `textfield` niczego tu nie wnosił
   poza rozjazdem. Zostaje wyłącznie dla Firefoksa, który innej drogi nie ma. */
.wymiary--opisane input[type=number] {
	appearance: none;
	-moz-appearance: textfield;
	height: 38px;
	min-height: 38px;
	padding: 0 12px;
	font: 400 15px/1 var(--sans);
	box-sizing: border-box;
}

/* ---- liczniki przy zakładkach ----
   Trójka przy „Braki" w tym samym szarym kółku co trójka przy „Deklaracje"
   znaczy dla oka to samo, a znaczy coś zupełnie innego. Skład i Deklaracje
   zostają neutralne — to inwentarz. Braki i Ryzyka biorą barwę od tego,
   co najcięższego w nich siedzi, więc czerwona liczba na pasku zakładek jest
   pierwszą rzeczą, którą widać po wejściu na kartę. */
.zakladki .zakladka__licznik.jest-blad {
	background: var(--rdza-pas);
	color: var(--rdza-ciemna);
}
.zakladki .zakladka__licznik.jest-uwaga {
	background: var(--bursztyn-pas);
	color: var(--bursztyn-ciemny);
}
.zakladki .zakladka__licznik.jest-ok {
	background: var(--zielen-tlo);
	color: var(--zielen);
}
.zakladki .zakladka__licznik.jest-info {
	background: var(--akcent-tlo);
	color: var(--akcent-mocny);
}

/* Ikona bierze ten sam ton co licznik — sama liczba w kolorze bywa za mała,
   żeby zwrócić uwagę na pasku pełnym innych napisów. */
.zakladka--blad .ikona { color: var(--rdza); opacity: 1; }
.zakladka--uwaga .ikona { color: var(--bursztyn); opacity: 1; }

/* Zakładka z brakami blokującymi zostaje widoczna także wtedy, gdy człowiek
   patrzy na inną — bez tego wystarczy raz kliknąć obok i ostrzeżenie znika
   z pola widzenia. */
.zakladka--blad:not(.jest-aktywny) { color: var(--rdza-ciemna); }
.zakladka--uwaga:not(.jest-aktywny) { color: var(--bursztyn-ciemny); }

/* ---- karta materiału ----
   Ten sam szkielet co karta wyrobu; dochodzi tylko opis pod nagłówkiem grupy
   pól i wartość pokazywana bez pola do wpisywania. */
.pola-sekcja__opis {
	margin: 6px 0 0;
	padding: 0 var(--bok);
	font: 400 12.5px/1.5 var(--sans);
	color: var(--wtorny-mocny);
}
.karta-wyrob .wartosc-stala {
	margin: 0;
	padding: 9px 0 0;
	font: 500 13.5px/1.45 var(--sans);
	color: var(--atrament);
}
.karta-wyrob .metale { padding: 4px var(--bok) 0; }
.karta-wyrob .legenda-bom { margin: 0; }
.karta-wyrob .lista-uwag { margin: 0; }

/* ==========================================================================
   ZRZUTNIA PLIKÓW, TABELA DOWODÓW, PARY ETYKIETA–WARTOŚĆ
   ========================================================================== */

/* ---- wybór pliku przez kliknięcie albo przeciągnięcie ----
   Systemowy „Wybierz plik / Nie wybrano pliku" nie mówi, że plik można też
   upuścić, i wygląda inaczej w każdej przeglądarce. Pole zostaje na miejscu
   (to ono niesie plik), tylko schodzi pod przezroczystą warstwę. */
.zrzutnia {
	position: relative;
	display: block;
	padding: 18px 16px;
	border: 1.5px dashed var(--linia);
	border-radius: var(--r-kafel);
	background: var(--bialy);
	text-align: center;
	cursor: pointer;
	transition: border-color .12s ease, background-color .12s ease;
}
.zrzutnia:hover { border-color: var(--wtorny); background: var(--tlo); }
.zrzutnia.jest-nad { border-color: var(--akcent); background: var(--akcent-tlo); }
.zrzutnia.jest-wybrany { border-style: solid; border-color: var(--zielen-linia); background: var(--zielen-tlo); }

/* Pole przykrywa całą strefę, żeby kliknięcie gdziekolwiek otwierało wybór
   pliku, ale nie może zasłonić napisu — stąd przezroczystość zamiast
   display: none, którego część przeglądarek nie pozwala kliknąć programowo. */
.zrzutnia input[type=file] {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	padding: 0;
	border: 0;
	opacity: 0;
	cursor: pointer;
}
.zrzutnia__tresc { display: block; pointer-events: none; }
.zrzutnia__tresc b { display: block; font: 500 13.5px/1.3 var(--sans); color: var(--atrament); }
.zrzutnia__nazwa {
	display: block;
	margin-top: 4px;
	font: 400 12px/1.35 var(--mono);
	color: var(--wtorny-mocny);
	overflow-wrap: anywhere;
}
.zrzutnia.jest-wybrany .zrzutnia__nazwa { color: var(--zielen); }

/* ---- tabela dowodów ---- */
.tabela--dowody { table-layout: fixed; width: 100%; }
.tabela--dowody thead th { white-space: normal; vertical-align: bottom; }
.tabela--dowody td { vertical-align: middle; }
.tabela--dowody td b { font-weight: 600; overflow-wrap: anywhere; }
.tabela--dowody .podpis { display: block; margin-top: 3px; font-size: 11px; color: var(--wtorny); overflow-wrap: anywhere; }
.tabela--dowody td.drobne { white-space: normal; }

/* ---- pary etykieta–wartość w treści karty ----
   To samo, co w kolumnie opisowej, tylko w dwóch kolumnach: wartość tuż pod
   etykietą, odstęp dopiero przed kolejną parą. */
.pary {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 16px 24px;
	margin: 0;
	padding: 18px var(--bok);
}
.pary__pozycja--pelna { grid-column: 1 / -1; }
.pary dt { margin: 0; font: 400 12px/1.3 var(--sans); color: #666666; }
.pary dd { margin: 5px 0 0; font: 500 13.5px/1.45 var(--sans); color: var(--atrament); overflow-wrap: anywhere; }
@media (max-width: 700px) {
	.pary { grid-template-columns: minmax(0, 1fr); }
}

/* ---- suma metali w wąskiej szufladzie ----
   Siatka metali ma piątą kolumnę o szerokości minimum 220 px, więc razem
   z czterema polami po 110 px nie mieściła się w szufladzie i wypychała
   poziomy pasek przewijania przez całą sekcję. W formularzu suma schodzi
   pod pola i bierze pełną szerokość. */
.pola-sekcja .metale {
	grid-template-columns: repeat(4, minmax(0, 1fr));
	padding-left: var(--bok);
	padding-right: var(--bok);
}
.pola-sekcja .metale__suma {
	grid-column: 1 / -1;
	flex-direction: row;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
	border-radius: var(--r-kafel);
}
.pola-sekcja .metale__suma b { font-size: 22px; }
.pola-sekcja .metale__pasek { flex: 1 1 160px; margin-top: 0; }

@media (max-width: 640px) {
	.pola-sekcja .metale { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ==========================================================================
   PLAKIETKI POD NAZWĄ MATERIAŁU
   ========================================================================== */

/* Grupa materiałowa niesie barwę — tę samą, co na wykresie składu i na pasku
   przy wierszu komponentu. Trzy miejsca, jeden kod koloru, więc „stal" wszędzie
   wygląda tak samo i nie trzeba czytać podpisu, żeby ją rozpoznać.
   Wytwórca dostaje jeden, neutralny wariant: to nazwa, nie stan. */
.karta__plakietki {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 10px 0 0;
}
.plakietka {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 5px 11px;
	border-radius: var(--r-znak);
	background: var(--tlo);
	font: 500 12px/1.2 var(--sans);
	color: var(--wtorny-mocny);
	white-space: nowrap;
	max-width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
}
.plakietka__kropka {
	width: 8px; height: 8px; flex: none;
	border-radius: var(--r-znak);
	background: currentColor;
}
.plakietka .ikona { flex: none; opacity: .7; }

/* Tło w tonie grupy, tekst w ciemniejszym wariancie tej samej barwy —
   plakietka ma się czytać, a nie krzyczeć. */
.plakietka--drewno    { background: #F4E9DC; color: #7A5326; }
.plakietka--stal      { background: #E9ECEE; color: #4C555B; }
.plakietka--aluminium { background: #ECEFF1; color: #556066; }
.plakietka--papier    { background: #F5EFE1; color: #7A6A43; }
.plakietka--tworzywo  { background: #E4EBF1; color: #33506A; }
.plakietka--tekstylia { background: #F0EDE8; color: #5F5A52; }
.plakietka--inne      { background: var(--tlo); color: var(--wtorny-mocny); }
.plakietka--podmiot   { background: var(--tlo); color: var(--atrament); }

/* Wiersz sumy oddzielony od tabeli tak samo jak „Razem" w składzie wyrobu. */
.tfoot--suma th {
	border-top: 2px solid var(--atrament);
	background: var(--bialy);
	padding: 14px 8px;
	font: 600 14px/1.3 var(--sans);
	color: var(--atrament);
	text-transform: none;
	letter-spacing: 0;
}
.tfoot--suma th:first-child { padding-left: var(--bok); }
.tfoot--suma th.liczba { font-family: var(--mono); font-size: 14px; }

/* ---- uwagi z odczytu, w kolejności ciężaru ----
   Uwagi przychodzą z modelu jako zwykłe zdania, bez poziomu — rangę wywodzi
   Ryzyko::rangaUwagi() ze słów, które w nich padają. Przekroczony limit ma
   wyglądać inaczej niż brak jednego oznaczenia; pomyłka w rozpoznaniu kosztuje
   odcień tła, nie decyzję, bo treść uwagi i tak jest w całości widoczna. */
.lista-uwag li { padding-right: var(--bok); border-left: 3px solid transparent; }
.lista-uwag li.jest-blad {
	background: var(--rdza-tlo);
	border-left-color: var(--rdza);
}
.lista-uwag li.jest-blad::before { color: var(--rdza); }
.lista-uwag li.jest-uwaga {
	background: var(--bursztyn-tlo);
	border-left-color: var(--bursztyn);
}
.lista-uwag li.jest-uwaga::before { color: var(--bursztyn-ciemny); }
.lista-uwag li.jest-info { border-left-color: var(--linia); }
.lista-uwag li.jest-info::before { color: var(--wtorny-mocny); }

/* ==========================================================================
   WYBÓR JĘZYKÓW DOKUMENTU
   ========================================================================== */

.jezyki-wybor {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
	gap: 8px;
	margin-top: 8px;
}
.jezyk-opcja {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 12px;
	border: 1px solid var(--linia);
	border-radius: var(--r-kafel);
	background: var(--bialy);
	cursor: pointer;
	transition: border-color .12s ease, background-color .12s ease;
}
.jezyk-opcja:hover { border-color: var(--wtorny); }
.jezyk-opcja.jest-aktywny { border-color: var(--akcent); background: var(--akcent-tlo); }
.jezyk-opcja input { flex: none; margin: 0; }
.jezyk-opcja__kod {
	flex: none;
	font: 500 11px/1 var(--mono);
	letter-spacing: .06em;
	color: var(--wtorny-mocny);
}
.jezyk-opcja__nazwa { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.jezyk-opcja__nazwa b { font: 500 13.5px/1.2 var(--sans); }
.jezyk-opcja__nazwa > span { font: 400 11.5px/1.3 var(--sans); color: var(--wtorny-mocny); }
.jezyk-opcja input:disabled { opacity: .55; }

/* Ostrzeżenie przy języku, w którym brakuje tłumaczeń tekstów własnych. */
.jest-uwaga-tekst { color: var(--bursztyn-ciemny) !important; font-weight: 500; }

/* Pole w pełnej szerokości, ale sama kontrolka wąska — opis pod spodem ma
   iść przez całą kartę, a nie łamać się na sześć wierszy w połowie szerokości. */
.pole--pelny > .pole--waski { max-width: 360px; }

/* ==========================================================================
   PODZIAŁKA KROKÓW — krok wykonany
   ========================================================================== */

/* Ptaszek przy numerze zniknął: krok wykonany poznaje się po zielonym tle,
   a znak dokładany do liczby rozjeżdżał szerokość znacznika między krokami. */
.podzialka__krok { border-right: 1px solid #C5C5C5; }
.podzialka__krok:last-child { border-right: 0; }
.podzialka__krok.jest-zrobiony { background: #D1F3C5; color: var(--zielen-ciemna); }
.podzialka__krok.jest-zrobiony .podzialka__nr {
	background: var(--bialy);
	color: var(--zielen-ciemna);
}
.podzialka__krok.jest-zrobiony .podzialka__nr::after { content: none; }

/* Plakietki grup materiałowych w wierszu dostawcy — mniejsze niż na karcie,
   bo w jednej komórce bywa ich kilka. */
.grupy-lista { display: inline-flex; flex-wrap: wrap; gap: 5px; }
.grupy-lista .plakietka { padding: 4px 9px; font-size: 11px; gap: 6px; }
.grupy-lista .plakietka__kropka { width: 7px; height: 7px; }

/* ==========================================================================
   PASEK FILTRÓW NAD LISTAMI
   ========================================================================== */

.narzedzia__lewo { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; flex: 1; min-width: 0; }
.narzedzia__kreska { width: 1px; height: 22px; background: var(--linia); margin: 0 4px; }

/* Zakres dat wchodzi jako osobny formularz — pigułki zmieniają jeden wymiar
   kliknięciem, daty wymagają zatwierdzenia, bo dwa pola opisują jeden warunek. */
.filtr-dat { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.filtr-dat label {
	font: 400 11.5px/1 var(--sans);
	color: var(--wtorny-mocny);
	text-transform: none;
	letter-spacing: 0;
}
.filtr-dat input[type=date] {
	width: auto;
	min-width: 148px;
	height: 34px;
	background: var(--bialy);
}

/* Wykaz opakowań objętych deklaracją zbiorczą — w komórce tabeli, więc numeracja
   ma być drobna i nie może rozpychać wiersza. */
.zestaw-lista {
	margin: 6px 0 0;
	padding: 0 0 0 18px;
	font: 400 12.5px/1.5 var(--sans);
	color: var(--atrament);
}
.zestaw-lista li { margin: 0 0 2px; }
.zestaw-lista .mono {
	display: block;
	font-size: 11px;
	color: var(--wtorny);
}

/* Pasek kategorii i szukajki w bazie wiedzy stał na gołym tle strony i wisiał
   między dwoma białymi blokami jak nic. Ma być sekcją. */
.wiedza-pasek {
	background: var(--bialy);
	border-radius: var(--r-karta);
	padding: 14px var(--bok);
	margin-bottom: var(--odstep);
}
.wiedza-pasek .szukajka input { background: var(--tlo); }

/* Plakietka użyta jako filtr — musi dać się kliknąć i pokazać, że jest wybrana. */
a.plakietka { text-decoration: none; transition: box-shadow .12s ease, opacity .12s ease; }
a.plakietka:hover { opacity: .85; }
a.plakietka.jest-aktywny { box-shadow: inset 0 0 0 1.5px currentColor; }
a.plakietka b { font-weight: 600; }

/* Kreator bez kolumny podglądu — krok, w którym nie ma jeszcze dokumentu.
   Układ jest oparty na flexie, nie na siatce, więc szerokość zdejmuje się
   z lewej kolumny, a nie definicją kolumn. */
.kreator--bez-podgladu .kreator__lewo { flex: 1 1 100%; border-right: 0; }

/* Grupy filtrów w pasku narzędzi — obok kategorii i eksportu, nie w osobnym
   rzędzie. Zawijają się razem, więc przy wąskim ekranie schodzą pod spód
   jako całość, a nie po jednej pigułce. */
.narzedzia__grupy { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.narzedzia .narzedzia__grupy { flex: 1; min-width: 0; }

/* ==========================================================================
   LICZNIKI NA PULPICIE — ikona przed liczbą
   ========================================================================== */

/* Cztery gołe liczby obok siebie czytało się jak jeden ciąg cyfr. Ikona daje
   każdej metryce punkt zaczepienia i wiąże ją z sekcją, do której prowadzi. */
.metryka { flex-direction: row; align-items: center; gap: 12px; }
.metryka__ikona {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	flex: none;
	border-radius: var(--r-kafel);
	background: var(--tlo);
	color: var(--wtorny-mocny);
	transition: background-color .12s ease, color .12s ease;
}
.metryka__tresc { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.metryka:hover .metryka__ikona { background: var(--atrament); color: #FFFFFF; }
.metryka.jest-blad .metryka__ikona { background: var(--rdza-tlo); color: var(--rdza); }
.metryka.jest-blad:hover .metryka__ikona { background: var(--rdza); color: #FFFFFF; }

/* ==========================================================================
   PASEK GÓRNY, PULPIT, WYRAZISTOŚĆ FILTRÓW
   ========================================================================== */

/* Wybór języka i konta bez obrysu — w pasku bez tła obrys rysował dwa
   prostokąty, których nic nie łączy z resztą układu. */
.gora__prawo .pastylka { border: 0; background: transparent; }
.gora__prawo .pastylka:hover { background: var(--bialy); }

/* Logo o stałej wysokości 40 px; szerokość dowolna, bo znak bywa szeroki. */
.bok__logo { height: 40px; width: auto; max-width: 100%; object-fit: contain; }

/* ---- gotowość kartoteki ----
   Pasek zamiast pięciu kafelków: 50 % zapalało trzy z pięciu, czyli 60 %. */
.gotowosc__pasek {
	flex: 1;
	height: 34px;
	border-radius: 10px;
	background: var(--bialy);
	overflow: hidden;
}
.gotowosc__wypelnienie { display: block; height: 100%; background: var(--akcent); }

/* ---- kolejka spraw ----
   Przy stu brakach pulpit stawał się listą braków. Pokazujemy dziesięć,
   resztę na żądanie; przycięcie robi CSS, więc filtry liczą wszystkie. */
.kolejka.jest-przycieta .zadanie:nth-of-type(n + 11) { display: none; }
.kolejka__wiecej { padding: 12px var(--bok) 16px; }
.kolejka__wiecej .btn { width: 100%; justify-content: center; }

/* ---- udział masowy przy braku ----
   „11,2 % masy" stało jasnoszarym drobiazgiem na białym kwadracie i było
   pierwszą rzeczą, którą oko pomijało — a to ono mówi, jak ciężki jest brak. */
.zadanie__waga { color: var(--atrament); }
.zadanie__waga b, .zadanie__waga strong { font-size: 19px; font-weight: 700; }
.zadanie__waga span { font-size: 10.5px; color: var(--wtorny-mocny); }
.zadanie--blad .zadanie__waga { color: var(--rdza-ciemna); }
.zadanie--uwaga .zadanie__waga { color: var(--bursztyn-ciemny); }

/* ---- pigułki filtrów: mocniejsze tła ----
   Odcienie wierszy zostają pastelowe — to tło pod treścią. Przyciski filtrów
   mają się odcinać od karty, na której stoją, więc dostają nasycenie o stopień
   wyżej, a najechanie jeszcze o jeden. */
.pigulka--stan.pigulka--gotowe { background: #C9EFC4; color: #1E5E28; }
.pigulka--stan.pigulka--gotowe:hover { background: #B2E7AC; }
.pigulka--stan.pigulka--uwaga { background: #F7E4B0; color: #6E4E0C; }
.pigulka--stan.pigulka--uwaga:hover { background: #F2D890; }
.pigulka--stan.pigulka--braki { background: #F5C9BB; color: #8A3417; }
.pigulka--stan.pigulka--braki:hover { background: #EFB3A0; }
.pigulka--stan.pigulka--brak-danych { background: #D8D6D0; color: #4A4A46; }
.pigulka--stan.pigulka--brak-danych:hover { background: #CBC8C1; }
.pigulka--stan.pigulka--wszystkie:hover { background: var(--tlo-2); }

/* Wybrana pigułka zostaje ciemna — to jedyny stan, w którym filtr działa,
   więc musi się różnić od czterech kolorowych, a nie być piątym z nich. */
.pigulka--stan.jest-aktywny,
.pigulka--stan.jest-aktywny:hover { background: var(--atrament); color: var(--bialy); }
.pigulka--stan.jest-aktywny .pigulka__kropka { background: var(--bialy); }

/* Plakietki stanu w tabelach też mocniej — te same barwy co filtry. */
.znacznik.jest-potwierdzony { background: #C9EFC4; color: #1E5E28; border-color: transparent; }
.znacznik.jest-czesciowy { background: #F7E4B0; color: #6E4E0C; border-color: transparent; }
.znacznik.jest-brak { background: #F5C9BB; color: #8A3417; border-color: transparent; }
.znacznik.jest-nieoceniony { background: #D8D6D0; color: #4A4A46; border-color: transparent; }

/* ==========================================================================
   TYPOGRAFIA — koniec z osobnym krojem monospace
   ========================================================================== */

/* IBM Plex Mono szedł przez całą aplikację: kody, numery, daty, sumy kontrolne.
   Przy 11–12 px robił się nieczytelny i nie miał nic wspólnego z Interem obok.
   Zostaje jeden krój, a to, po co był monospace — równa szerokość cyfr, żeby
   liczby w kolumnie stały jedna pod drugą — załatwia `tabular-nums`, które
   Inter ma wbudowane. */
:root {
	--mono: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}
.mono, .liczba, code, kbd,
.tabela thead th, .podzialka__nr, .zakladka__licznik {
	font-variant-numeric: tabular-nums;
	font-feature-settings: 'tnum' 1;
	letter-spacing: 0;
}
/* Nagłówki tabel miały rozstrzelone wersaliki monospace — bez niego wracają
   do rytmu reszty interfejsu. */
.tabela thead th { letter-spacing: .04em; }

/* Suma kontrolna to jedyne miejsce, gdzie odróżnienie zera od litery O naprawdę
   coś zmienia — tu monospace zostaje, systemowy, bez wgrywania kroju. */
.suma-kontrolna, .tabela .suma-kontrolna {
	font-family: ui-monospace, SFMono-Regular, 'DejaVu Sans Mono', monospace;
	font-size: .94em;
}

/* ---- logo ----
   Reguła stoi na końcu i podaje wysokość jeszcze raz, bo wcześniej w arkuszu
   są dwie inne definicje .bok__logo i o wyniku decyduje kolejność. */
.bok__marka .bok__logo { height: 40px; width: auto; max-width: 100%; object-fit: contain; }

/* Plakietka „zestaw" w wierszu archiwum — niższa, bo stoi nad listą pozycji
   i nie ma konkurować z nią wysokością. Własna klasa, żeby nie spłaszczyć
   przy okazji wszystkich plakietek stanu w tabelach. */
.znacznik--zestaw { padding: 3px 10px; font-size: 11px; }

/* ==========================================================================
   POPRAWKI CZYTELNOŚCI
   ========================================================================== */

/* Tor paska gotowości był biały na białej karcie — widać było wypełnienie,
   ale nie widać, dokąd ma dojść. Obrys pokazuje pełną skalę. */
.gotowosc__pasek {
	background: var(--bialy);
	border: 1px solid var(--linia);
	box-sizing: border-box;
}

/* Przycisk asystenta wisi na stałe w prawym dolnym rogu i przy końcu strony
   przykrywał ostatni wiersz tabeli albo pasek przycisków. Treść dostaje
   pod spodem tyle miejsca, ile zajmuje przycisk, więc przewinięcie do końca
   pokazuje wszystko. */
.tresc { padding-bottom: 92px; }

/* Na wąskim ekranie przycisk zwija się do samego znaku, więc i zapas
   może być mniejszy. */
@media (max-width: 760px) {
	.tresc { padding-bottom: 84px; }
}

/* Druga wgrywarka na karcie materiału — ta uzupełniająca dane, nie dokładająca
   dowodu. Odróżnia się tłem, żeby dwa podobne pola nie wyglądały jak jedno
   powtórzone przez pomyłkę. */
.wgrywarka--dane { background: var(--tlo); border-style: solid; border-color: var(--linia); }

/* Przycisk w drugiej wgrywarce stał na tle w kolorze --tlo, a neutralny .btn
   ma to samo tło — znikał i wyglądał jak sam napis. Ten sam zabieg co
   w stopkach okien: na szarym tle przycisk musi być bielszy od otoczenia.

   Niebieskiego tu nie daję świadomie. Odczyt uzupełniający dane jest czynnością
   wtórną wobec dodania dowodu wyżej; dwa niebieskie przyciski jeden pod drugim
   znaczyłyby, że oba są tak samo ważne. */
.wgrywarka--dane .btn:not(.btn--glowny) {
	background: var(--bialy);
	border: 1px solid var(--linia);
	color: var(--atrament);
	font-weight: 500;
}
.wgrywarka--dane .btn:not(.btn--glowny):hover {
	background: var(--atrament);
	border-color: var(--atrament);
	color: #FFFFFF;
}

/* ==========================================================================
   ASYSTENT — pełna wysokość
   ========================================================================== */

/* Zapas na pływający przycisk asystenta trzymamy w zmiennej, bo potrzebują go
   dwa miejsca: treść ogólna i wyliczana wysokość ekranu asystenta. Wpisany
   dwa razy z palca rozjedzie się przy pierwszej zmianie rozmiaru przycisku. */
:root { --zapas-fab: 92px; }
.tresc { padding-bottom: var(--zapas-fab); }

/* Ekran asystenta liczy wysokość od okna, więc musi odjąć ten sam zapas —
   bez tego pod trzema kolumnami zostawał pas pustego tła wysokości przycisku.
   Na samym ekranie asystenta przycisk i tak jest zbędny (jesteśmy w środku),
   więc go chowamy i zapas znika. */
.asystent {
	height: calc(100vh - var(--gora-wys) - var(--odstep) * 3);
	max-height: calc(100vh - var(--gora-wys) - var(--odstep) * 3);
}
body:has(.asystent) .tresc { padding-bottom: 0; }
body:has(.asystent) .asystent-fab { display: none; }

/* Środkowa kolumna rozpycha się do dołu, a rozmowa przewija się w środku —
   pole do pisania ma zostać na dole, a nie odjeżdżać razem z treścią. */
.asystent__srodek { display: flex; flex-direction: column; min-height: 0; }
.asystent__historia { flex: 1; min-height: 0; overflow-y: auto; }
.asystent__dol { flex: none; }

/* ==========================================================================
   ZNAK ASYSTENTA
   ========================================================================== */

/* Gwiazdka z fontu ustąpiła znakowi marki. Tło #2D6BEF podane wprost, a nie
   przez --akcent: to kolor znaku, nie kolor interfejsu, i ma zostać taki sam,
   gdyby akcent kiedyś się zmienił. */
.asystent-fab__znak,
.panel-ai__znak,
.asystent__znak {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #2D6BEF;
	overflow: hidden;
}
.asystent-fab__znak img,
.panel-ai__znak img,
.asystent__znak img {
	width: 62%;
	height: 62%;
	object-fit: contain;
	display: block;
}

/* Sekcja, do której właśnie skierował odnośnik z kotwicą — miga obwódką przez
   chwilę, żeby po przewinięciu było widać, o którą chodzi. Ta sama klasa co
   przy podświetleniu z przewodnika, więc jeden wygląd na oba przypadki. */
.jest-wskazany {
	position: relative;
	border-radius: var(--r-kafel);
	box-shadow: 0 0 0 3px rgba(45, 107, 239, .35);
	transition: box-shadow .3s ease;
}

/* ==========================================================================
   DROBNE POPRAWKI
   ========================================================================== */

/* Nakładka na zdjęciu logowania ma to samo zaokrąglenie co samo zdjęcie —
   bez tego róg przyciemnienia wystawał poza kadr. */
.logowanie__obraz::after { border-radius: 20px; }
.logowanie__obraz { border-radius: 20px; }

/* „Otwórz dokument" w kolejce spraw stało na różowym albo bursztynowym tle
   wiersza, a cichy przycisk robił się na najechaniu szary — czyli brudny.
   Na tle w kolorze wagi przycisk ma bieleć, nie szarzeć. */
.zadanie .btn--cichy { background: rgba(255, 255, 255, .75); color: var(--atrament); }
.zadanie .btn--cichy:hover { background: #FFFFFF; color: var(--atrament); }
.zadanie--blad .btn--cichy:hover { color: var(--rdza-ciemna); }
.zadanie--uwaga .btn--cichy:hover { color: var(--bursztyn-ciemny); }

/* ==========================================================================
   LOGOWANIE — pola z ikoną
   ========================================================================== */

.pole-ikona {
	position: relative;
	display: flex;
	align-items: center;
	background: var(--bialy);
	border: 1px solid var(--linia);
	border-radius: 12px;
	transition: border-color .12s ease, box-shadow .12s ease;
}
.pole-ikona:focus-within { border-color: var(--akcent); box-shadow: 0 0 0 3px rgba(45, 107, 239, .16); }
.pole-ikona.jest-blad { border-color: var(--rdza); }

.pole-ikona__znak {
	flex: none;
	width: 44px;
	text-align: center;
	font-size: 15px;
	color: var(--wtorny);
	opacity: .8;
}
.pole-ikona input {
	flex: 1;
	min-width: 0;
	height: 48px;
	padding: 0 12px 0 0;
	border: 0;
	background: transparent;
	font: 400 14px/1 var(--sans);
	color: var(--atrament);
}
.pole-ikona input:focus { outline: none; box-shadow: none; }
.pole-ikona__oko {
	flex: none;
	width: 44px; height: 44px;
	border: 0; background: transparent;
	font-size: 15px; color: var(--wtorny); cursor: pointer;
}
.pole-ikona__oko:hover { color: var(--atrament); }

.logowanie__rzad {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	flex-wrap: wrap;
}
.logowanie__zapamietaj {
	display: flex; align-items: center; gap: 8px;
	font: 400 13px/1 var(--sans); color: var(--wtorny-mocny);
	text-transform: none; letter-spacing: 0; cursor: pointer;
}
.logowanie__zapamietaj input { width: 16px; height: 16px; margin: 0; }
.logowanie__link {
	font: 500 13px/1 var(--sans);
	color: var(--akcent);
	text-decoration: none;
}
.logowanie__link:hover { text-decoration: underline; }
.logowanie__opis { margin: 0; font: 400 13.5px/1.6 var(--sans); color: var(--wtorny-mocny); }

/* ==========================================================================
   STRONA PUBLICZNA — DEKLARACJA UZUPEŁNIAJĄCA DOSTAWCY
   ========================================================================== */

/* Osobny szkielet, bez nawigacji panelu: po drugiej stronie nie ma zalogowanego
   użytkownika ani firmy, a strona jest widoczna z internetu. */
.strona-publiczna { background: var(--tlo-2, #EDEBE6); margin: 0; }

.publiczna__gora {
	display: flex;
	align-items: center;
	gap: 16px;
	padding: 16px 24px;
	background: var(--bialy);
	border-bottom: 1px solid var(--linia);
}
.publiczna__logo { height: 34px; width: auto; }
.publiczna__tytul { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.publiczna__tytul b { font: 600 15px/1.2 var(--sans); color: var(--atrament); }
.publiczna__tytul span { font: 400 12.5px/1.3 var(--sans); color: var(--wtorny-mocny); }

.publiczna__uklad {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: var(--odstep);
	padding: var(--odstep);
	align-items: start;
}
.publiczna__form { display: flex; flex-direction: column; gap: var(--odstep); min-width: 0; }
.publiczna__podglad {
	position: sticky;
	top: var(--odstep);
	display: flex;
	flex-direction: column;
	min-width: 0;
	height: calc(100vh - var(--odstep) * 2);
	background: var(--bialy);
	border-radius: var(--r-karta);
	overflow: hidden;
}
.publiczna__podglad .podglad__ramka { flex: 1; min-height: 0; }
.publiczna__podglad iframe { width: 100%; height: 100%; border: 0; background: var(--bialy); }

.publiczna__srodek { max-width: 640px; margin: 0 auto; padding: var(--odstep); }
.publiczna__koniec { padding: 28px var(--bok); }
.publiczna__koniec h1 { margin: 0 0 10px; font: 700 22px/1.25 var(--sans); }
.publiczna__koniec p { margin: 0 0 10px; font: 400 14px/1.6 var(--sans); color: var(--wtorny-mocny); }

.kroki-uzup { display: flex; flex-direction: column; gap: 6px; padding: 0 var(--bok) 4px; }
.kroki-uzup span { font: 400 13px/1.5 var(--sans); color: var(--wtorny-mocny); }
.kroki-uzup b { color: var(--atrament); }

@media (max-width: 1100px) {
	.publiczna__uklad { grid-template-columns: minmax(0, 1fr); }
	.publiczna__podglad { position: static; height: 70vh; }
}

/* ==========================================================================
   LOGOWANIE — ikony i stopka
   ========================================================================== */

/* Ikony rysowane kreską w kolorze tekstu drugorzędnego. Emoji rysowały się
   krojem systemowym: kolorowe, w każdym systemie inne i o innej wielkości. */
.pole-ikona__znak {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	color: var(--wtorny);
	opacity: 1;
}
.pole-ikona__znak svg { display: block; }
.pole-ikona:focus-within .pole-ikona__znak { color: var(--wtorny-mocny); }

.pole-ikona__oko {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--wtorny);
}
.pole-ikona__oko svg { display: block; }

.logowanie__prawa {
	margin: 4px 0 0;
	text-align: center;
	font: 400 11.5px/1.5 var(--sans);
	color: var(--wtorny);
}

/* ==========================================================================
   PRZYCISK NA SZARYM TLE, RZĄD AKCJI, ZDEJMOWANIE PLIKU
   ========================================================================== */

/* Neutralny .btn ma tło w kolorze --tlo, więc na sekcji o tym samym tle znika,
   a na najechaniu szarzeje jeszcze bardziej. Osobna klasa zamiast łatania
   kolejnego miejsca z osobna: biały spód, czarne najechanie. */
.btn--kontra {
	background: var(--bialy);
	border: 1px solid var(--linia);
	color: var(--atrament);
	font-weight: 500;
}
.btn--kontra:hover {
	background: var(--atrament);
	border-color: var(--atrament);
	color: #FFFFFF;
}

/* Pole i przycisk w jednym rzędzie — jedna czynność nie potrzebuje formularza
   na trzy rzędy. */
.rzad-akcji {
	display: flex;
	align-items: flex-end;
	gap: 10px;
	flex-wrap: wrap;
	margin-top: 12px;
}
.rzad-akcji .pole { flex: 1; min-width: 240px; margin: 0; padding: 0; }
.rzad-akcji .btn { flex: none; height: 42px; }

/* Zdejmowanie wybranego pliku. */
.zrzutnia { position: relative; }
.zrzutnia__zdejmij {
	position: absolute;
	top: 8px;
	right: 8px;
	z-index: 2;
	padding: 4px 10px;
	border: 1px solid var(--linia);
	border-radius: var(--r-znak);
	background: var(--bialy);
	font: 500 11.5px/1.4 var(--sans);
	color: var(--wtorny-mocny);
	cursor: pointer;
	pointer-events: auto;
}
.zrzutnia__zdejmij:hover { background: var(--rdza); border-color: var(--rdza); color: #FFFFFF; }

/* Odstęp pod ostatnim paskiem w sekcji — inaczej przycisk wysyłki dotykał
   dolnej krawędzi karty. */
.pasek-dolny--luzny { padding-bottom: 20px; }

/* ==========================================================================
   PRZYCISKI W WIERSZU BRAKU — stany domknięte
   ========================================================================== */

/* Reguły ogólne dla „cichego" przycisku każą mu blednąć na najechaniu do
   szarości, a wiersz braku ma tło różowe albo kremowe — przycisk znikał.
   
   Poprzednia próba nie zadziałała i warto wiedzieć dlaczego: tamta reguła
   ogólna ma sześć członów `:not(...)`, a każdy `:not()` liczy się do
   specyficzności jak klasa. Wychodziło 0,8,0 — więcej niż cokolwiek, co dało
   się tu sensownie napisać. Zamiast licytować się na `!important`, zdjąłem
   `.zadanie` z tamtej reguły u źródła. Wiersz braku ma odtąd własne, domknięte
   stany i nie zależy od kolejności w pliku. */

/* Główny — pełne wypełnienie w barwie wagi, ciemniejsze na najechaniu. */
.zadanie .btn--blad,
.zadanie .btn--blad:hover { color: #FFFFFF; }
.zadanie .btn--blad { background: var(--rdza); border-color: var(--rdza); }
.zadanie .btn--blad:hover { background: var(--rdza-ciemna); border-color: var(--rdza-ciemna); }

.zadanie .btn--uwaga,
.zadanie .btn--uwaga:hover { color: #FFFFFF; }
.zadanie .btn--uwaga { background: var(--bursztyn); border-color: var(--bursztyn); }
.zadanie .btn--uwaga:hover { background: var(--bursztyn-ciemny); border-color: var(--bursztyn-ciemny); }

/* Poboczny („Wyjaśnij") — biały, żeby odciąć się od kolorowego tła wiersza,
   na najechaniu ciemny. Nigdy szary na szarym. */
.zadanie .btn--cichy,
.zadanie .btn--kontra {
	background: #FFFFFF;
	border: 1px solid var(--linia);
	color: var(--atrament);
}
.zadanie .btn--cichy:hover,
.zadanie .btn--kontra:hover {
	background: var(--atrament);
	border-color: var(--atrament);
	color: #FFFFFF;
}

/* ==========================================================================
   ZNAK ASYSTENTA W POZOSTAŁYCH MIEJSCACH
   ========================================================================== */

/* Gwiazdka z fontu zniknęła także z paska górnego, kafla zużycia, karty
   startowej i przycisku „Zapytaj asystenta". Jeden znak w całej aplikacji. */
.znak-ai {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: #2D6BEF;
	overflow: hidden;
	font-size: 0;
}
.znak-ai img { width: 62%; height: 62%; object-fit: contain; display: block; }

/* ==========================================================================
   PRZYCISKI W WIERSZU BRAKU — wersja ostateczna
   ========================================================================== */

/* Trzecia próba i tym razem z `!important`, świadomie.
   Przyciski wiersza braku przegrywały kolejno z: regułą ogólną o sześciu
   członach `:not()` (specyficzność 0,8,0), a po jej poprawieniu nadal wyglądały
   na szare. Nie mam jak sprawdzić u siebie, która reguła jeszcze je łapie,
   a kolejna runda zgadywania kosztuje więcej niż ten wyjątek.
   Jeśli kiedyś porządkujesz arkusz, to jest miejsce do posprzątania —
   ale najpierw sprawdź w przeglądarce, co dokładnie nadpisywało te tła. */
.zadanie .btn--blad,
.zadanie .btn--blad:hover,
.zadanie .btn--uwaga,
.zadanie .btn--uwaga:hover { color: #FFFFFF !important; }

.zadanie .btn--blad { background: var(--rdza) !important; border-color: var(--rdza) !important; }
.zadanie .btn--blad:hover { background: var(--rdza-ciemna) !important; border-color: var(--rdza-ciemna) !important; }
.zadanie .btn--uwaga { background: var(--bursztyn) !important; border-color: var(--bursztyn) !important; }
.zadanie .btn--uwaga:hover { background: var(--bursztyn-ciemny) !important; border-color: var(--bursztyn-ciemny) !important; }

.zadanie .btn--cichy,
.zadanie .btn--kontra {
	background: #FFFFFF !important;
	border: 1px solid var(--linia) !important;
	color: var(--atrament) !important;
}
.zadanie .btn--cichy:hover,
.zadanie .btn--kontra:hover {
	background: var(--atrament) !important;
	border-color: var(--atrament) !important;
	color: #FFFFFF !important;
}

/* ==========================================================================
   WARIANTY PRZYCISKÓW — bez zależności od tego, gdzie stoją
   ========================================================================== */

/* Poprzednie próby wiązałem z kontenerem (`.zadanie .btn--…`). Skoro reguła,
   która wygrywa, to zwykłe `.btn:hover`, to znaczy, że przycisk nie zawsze
   siedzi tam, gdzie zakładałem — a ja nie mam jak tego sprawdzić w
   przeglądarce. Wiążę więc kolor z samym wariantem przycisku: gdziekolwiek
   stoi, zachowa się tak samo.

   `.btn--cichy` zostaje nietknięty, bo używają go dziesiątki miejsc na białym
   tle, gdzie szary hover jest w porządku. */
.btn--blad,
.btn--blad:hover,
.btn--uwaga,
.btn--uwaga:hover { color: #FFFFFF !important; }

.btn--blad { background: var(--rdza) !important; border-color: var(--rdza) !important; }
.btn--blad:hover { background: var(--rdza-ciemna) !important; border-color: var(--rdza-ciemna) !important; }
.btn--uwaga { background: var(--bursztyn) !important; border-color: var(--bursztyn) !important; }
.btn--uwaga:hover { background: var(--bursztyn-ciemny) !important; border-color: var(--bursztyn-ciemny) !important; }

.btn--kontra {
	background: #FFFFFF !important;
	border: 1px solid var(--linia) !important;
	color: var(--atrament) !important;
}
.btn--kontra:hover {
	background: var(--atrament) !important;
	border-color: var(--atrament) !important;
	color: #FFFFFF !important;
}

/* „Wyjaśnij" stoi na kolorowym tle wiersza braku i tam szary hover znaczy
   „przycisk zniknął" — dlatego ten jeden przypadek zostaje związany
   z kontenerem. */
.zadanie .btn--cichy {
	background: #FFFFFF !important;
	border: 1px solid var(--linia) !important;
	color: var(--atrament) !important;
}
.zadanie .btn--cichy:hover {
	background: var(--atrament) !important;
	border-color: var(--atrament) !important;
	color: #FFFFFF !important;
}

/* Nagłówek „Komponent" łamał się na dwie linie i rozpychał wiersz nagłówka.
   Poprzednia reguła celowała w klasę `.sklad`, a tabela nazywa się
   `.tabela--sklad` — nie łapała więc niczego. Do tego `min-width` na kolumnie
   nie działa przy `table-layout: fixed`; szerokość jest teraz podana wprost
   w colgroup, a tu zostaje sam zakaz łamania nagłówków jednowyrazowych. */
.tabela--sklad thead th:nth-child(1),
.tabela--sklad thead th:nth-child(2) { white-space: nowrap; }

/* Przy wąskim ekranie tabela i tak przechodzi w tryb automatyczny z poziomym
   przewijaniem (patrz reguła z min-width: 780px), więc nagłówek ma tam miejsce
   niezależnie od procentów. */

/* Dwa progi, każdy o czym innym.
   Powyżej: przy oknie węższym niż 1500 px kolumna opisowa schodzi pod treść,
   więc tabela składu dostaje całą szerokość karty — na 13 calach to wystarcza,
   żeby żaden nagłówek się nie łamał, i nie ma potrzeby przewijania w bok.
   Poniżej: dopiero gdy nawet pełna szerokość nie starcza, tabela przechodzi
   w tryb automatyczny z przewijaniem. Przy `table-layout: fixed` szerokości
   z colgroup są skalowane w dół, gdy ich suma przekracza dostępne miejsce —
   i to właśnie ściskało „Komponent" do dwóch linii. */
@media (max-width: 1100px) {
	.tabela--sklad { table-layout: auto; min-width: 900px; }
	.tabela--sklad thead th { white-space: nowrap; }
}

/* Znak asystenta w nawigacji: obrazek zamiast rysunku z zestawu ikon.
   Tło kafla zostaje takie jak przy pozostałych pozycjach, więc znak dostaje
   własne, żeby był rozpoznawalny także na jasnym kaflu. */
.kafel__ikona--ai {
	background: #2D6BEF;
	border-radius: var(--r-znak);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	overflow: hidden;
}
.kafel__ikona--ai img { width: 62%; height: 62%; object-fit: contain; display: block; }

/* Kafle zużycia i miernik w pasku górnym mają własne tła w regułach wyżej —
   dopisane po nich, żeby znak marki nie tonął w atramencie. */
.miernik__znak.znak-ai,
.ai-karta__znak.znak-ai,
.zapytaj__znak.znak-ai,
.karta-start__znak.znak-ai { background: #2D6BEF; }

/* ==========================================================================
   AUTOUZUPEŁNIANIE PRZEGLĄDARKI
   ========================================================================== */

/* Przeglądarka maluje własne tło pod polem uzupełnionym z pamięci. Malowała je
   na samym <input>, a w logowaniu input jest tylko środkiem ramki: ikona po
   lewej i oko po prawej to osobne elementy, a zaokrąglenie i obwódka siedzą na
   opakowaniu. Wychodził z tego niebieski prostokąt wciśnięty w białe pole,
   z prostymi rogami i marginesami dookoła.

   Lekarstwo: gasimy tło rysowane przez przeglądarkę cieniem wewnętrznym w
   kolorze pola (to jedyna własność, której -webkit-autofill nie nadpisuje),
   a podświetlenie przenosimy na całą ramkę. Wtedy zaznaczenie ma kształt pola,
   razem z zaokrągleniem i ikonami.

   Kolor pola zależy od stanu i MUSI być ten sam na ramce i w środku, inaczej
   wraca prostokąt — tyle że w drugą stronę. W spoczynku całość jest blada,
   po kliknięciu całość bieleje i pole wygląda jak każde inne w trakcie
   pisania. Stąd dwa komplety reguł zamiast jednego. */

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active,
select:-webkit-autofill,
textarea:-webkit-autofill {
	-webkit-text-fill-color: var(--atrament);
	caret-color: var(--atrament);
	/* Żółte tło wraca po chwili animacją — długi czas przejścia trzyma je
	   poza zasięgiem, bo animacja praktycznie nigdy nie dobiega końca. */
	transition: background-color 100000s ease-in-out 0s, border-color .12s ease, box-shadow .12s ease;
}

/* Zwykłe pola w panelu: cień wewnętrzny zakrywa tło przeglądarki, a przy
   aktywnym polu dokładamy obok niego zwykłą obwódkę ogniskową. */
input:-webkit-autofill,
select:-webkit-autofill,
textarea:-webkit-autofill {
	box-shadow: inset 0 0 0 100px var(--bialy);
}
input:-webkit-autofill:focus,
select:-webkit-autofill:focus,
textarea:-webkit-autofill:focus {
	box-shadow: inset 0 0 0 100px var(--bialy), 0 0 0 3px var(--akcent-tlo);
}

/* Logowanie: obwódkę i ognisko rysuje opakowanie, więc sam input dostaje tylko
   zakrycie tła — bez drugiego pierścienia w środku ramki. To zarazem zapas na
   przeglądarkę bez :has(): pole zostaje wtedy po prostu białe. */
.pole-ikona input:-webkit-autofill,
.pole-ikona input:-webkit-autofill:hover,
.pole-ikona input:-webkit-autofill:focus,
.pole-ikona input:-webkit-autofill:active {
	box-shadow: inset 0 0 0 100px var(--bialy);
}

/* Spoczynek: ślad po uzupełnieniu na całej ramce. Bardzo blady — ma powiedzieć
   „to wpisała przeglądarka", nie przykuć wzroku. */
.pole-ikona:has(input:-webkit-autofill) {
	background: var(--akcent-tlo);
	border-color: #CBD9F7;
	/* Ramka i tak animuje obwódkę; bez tła w tej samej linijce barwa skacze
	   w jednej klatce, a obwódka dojeżdża — widać rozjazd na kliknięciu. */
	transition: background-color .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.pole-ikona:has(input:-webkit-autofill) input:-webkit-autofill,
.pole-ikona:has(input:-webkit-autofill) input:-webkit-autofill:hover {
	box-shadow: inset 0 0 0 100px var(--akcent-tlo);
}

/* Po kliknięciu: ślad znika, bo nie jest już do niczego potrzebny — pole
   wraca do bieli i dostaje zwykłą obwódkę ogniskową, taką samą jak pole,
   którego przeglądarka nie ruszała. Reguła na input musi być tu ostrzejsza
   od tej ze spoczynku, inaczej środek zostaje blady, a ramka bieleje. */
.pole-ikona:has(input:-webkit-autofill):focus-within {
	background: var(--bialy);
	border-color: var(--akcent);
}
.pole-ikona:has(input:-webkit-autofill):focus-within input:-webkit-autofill,
.pole-ikona:has(input:-webkit-autofill):focus-within input:-webkit-autofill:hover,
.pole-ikona:has(input:-webkit-autofill):focus-within input:-webkit-autofill:focus,
.pole-ikona:has(input:-webkit-autofill):focus-within input:-webkit-autofill:active {
	box-shadow: inset 0 0 0 100px var(--bialy);
}

/* Firefox nie maluje tła, tylko nakłada na pole własny filtr — stąd
   przybrudzona barwa tekstu i ikon. Zdejmujemy go i powtarzamy ten sam
   podział na stany, żeby pole wyglądało tak samo w obu przeglądarkach. */
input:autofill,
select:autofill,
textarea:autofill {
	filter: none;
	background-color: var(--bialy);
	color: var(--atrament);
}
.pole-ikona:has(input:autofill) {
	background: var(--akcent-tlo);
	border-color: #CBD9F7;
	/* Ramka i tak animuje obwódkę; bez tła w tej samej linijce barwa skacze
	   w jednej klatce, a obwódka dojeżdża — widać rozjazd na kliknięciu. */
	transition: background-color .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.pole-ikona:has(input:autofill) input:autofill { background-color: var(--akcent-tlo); }
.pole-ikona:has(input:autofill):focus-within {
	background: var(--bialy);
	border-color: var(--akcent);
}
.pole-ikona:has(input:autofill):focus-within input:autofill { background-color: var(--bialy); }

/* ===== Import z arkusza ================================================ */
.imp-kolumny td:first-child { white-space: nowrap; width: 1%; padding-right: 24px; }
/* Blok z treścią pisaną.

   .blok sam nie ma wcięć bocznych, bo zwykle mieści tabelę pełnej szerokości
   albo .siatka-pol, która wcięcie niesie sama. Widok importu wstawia do bloku
   akapity i formularz wprost — te lądowały przy samej krawędzi karty, kilka
   pikseli na lewo od nagłówka sekcji. Ten wariant odsuwa je od krawędzi,
   a tabele zostawia pełnowymiarowe, bo tak wyglądają na pozostałych listach. */
.blok--tekst { padding: 18px 0; }
.blok--tekst > p,
.blok--tekst > form,
.blok--tekst > .komunikat,
.blok--tekst > .imp-zasady { margin-left: var(--bok); margin-right: var(--bok); }
.blok--tekst > .tabela { margin-top: 6px; }

.imp-formularz__wiersz { display: flex; gap: 16px; align-items: flex-end; flex-wrap: wrap; }
.imp-formularz__wiersz .pole { flex: 1 1 320px; margin: 0; }
.imp-formularz__wiersz .btn { flex: 0 0 auto; }
.imp-formularz input[type="file"] { width: 100%; box-sizing: border-box; }
.imp-formularz__hint { display: block; margin: 8px 0 0; font-size: 13px; color: var(--tekst-2, #5A5F68); }
.imp-zasady { margin: 14px 0 0; font-size: 13px; color: var(--tekst-2, #5A5F68); }

.imp-liczniki { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin: 0 0 22px; }
.imp-licznik { background: var(--tlo-karty, #fff); border: 1px solid var(--linia, #E6E4DF); border-radius: 14px; padding: 16px 18px; }
.imp-licznik b { display: block; font-size: 28px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.imp-licznik span { font-size: 13px; color: var(--tekst-2, #5A5F68); }
.imp-licznik--blad b { color: #B4472B; }

.imp-lista { margin: 0; padding-left: 18px; }
.imp-lista li { margin: 0 0 6px; }

.imp-akcja { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.imp-akcja--nowy { background: #EAF6EF; color: #1F7A4D; }
.imp-akcja--aktualizacja { background: #EEF3FE; color: #1B4FC0; }
.imp-komp { font-size: 13px; line-height: 1.5; }
.imp-uwaga { color: #8A6410; }

/* ===== Stronicowanie list ============================================== */
.stronicowanie { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 18px 0 0; }
.stronicowanie__zakres { margin-right: auto; font-size: 13px; color: var(--tekst-2, #5A5F68); font-variant-numeric: tabular-nums; }
.stronicowanie__przerwa { padding: 0 4px; color: var(--tekst-2, #5A5F68); }
.stronicowanie .btn.jest-aktywny { background: var(--akcent, #2E6BEF); color: #fff; border-color: transparent; }

/* Szukanie w długiej liście wyboru (deklaracja zbiorcza). */
/* Wyszukiwarka w nagłówku sekcji.

   Wewnątrz nie zawijamy: pole, przełącznik i licznik mają zostać w jednej
   linii, a kurczy się pole tekstowe. Zawijanie przenosiło licznik pod pole
   i rozpychało cały nagłówek na dwa poziomy. Dopiero gdy zabraknie miejsca
   w nagłówku, cała wyszukiwarka schodzi do własnego wiersza pod tytułem. */
.sekcja-tytul--szukanie { flex-wrap: wrap; }
.wybor-szukaj { display: flex; align-items: center; gap: 12px; flex-wrap: nowrap; margin-left: auto; }
.wybor-szukaj__pole { min-width: 0; }
.wybor-szukaj__stan { white-space: nowrap; }
@media (max-width: 1180px) {
	.sekcja-tytul--szukanie .wybor-szukaj { flex-basis: 100%; margin-left: 0; margin-top: 4px; }
}
.wybor-szukaj__pole {
	flex: 1 1 260px; max-width: 360px; padding: 9px 12px; font: inherit; font-size: 14px;
	background: var(--tlo-karty, #fff); border: 1px solid var(--linia, #E6E4DF); border-radius: 10px;
}
.wybor-szukaj__pole:focus { outline: 2px solid var(--akcent, #2E6BEF); outline-offset: 1px; border-color: transparent; }
.wybor-szukaj__tylko { display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px; white-space: nowrap; cursor: pointer; }
.wybor-szukaj__stan { font-size: 13px; color: var(--tekst-2, #5A5F68); font-variant-numeric: tabular-nums; }
@media (max-width: 640px) { .wybor-szukaj__pole { max-width: none; } }

/* Strona dołączenia do zespołu — ten sam układ co logowanie.

   Logo wstawiamy obrazkiem zamiast napisem: to pierwszy ekran, jaki widzi
   zapraszana osoba, i jedyne miejsce w aplikacji, gdzie marka musi się
   przedstawić sama. Reszta klas pochodzi z ekranu logowania. */
.logowanie__logo { display: block; width: 200px; height: auto; margin: 0 0 4px; }
.logowanie__wstep { margin: 0; font: 400 15px/1.55 var(--sans); color: var(--tekst-2, #3C4149); }
.logowanie__wstep b { font-weight: 600; color: var(--atrament, #16181C); }
.logowanie__form form { display: flex; flex-direction: column; gap: 22px; }
