/* WYGLĄD MODUŁU RECEPT.
   Zasada: lekarz ma wystawić receptę w kilkanaście sekund, na laptopie i na telefonie.
   Stąd duże pola (na telefonie 16 px, inaczej iPhone sam przybliża ekran), jeden słupek treści,
   wyraźna kolejność: pacjent → leki → wystaw. Kolory spokojne, medyczne; kolorem oznaczamy
   TYLKO to, co niesie znaczenie (zielony = zrobione, czerwony = błąd, bursztyn = uwaga). */

/* KOLORY TAKIE, JAK W PROGRAMIE FINANSE CEM I NA MATERIAŁACH CENTRUM OCENY ZDROWIA
   (Piotr, 3.09.2026: „zrób jasne kolory jak kolory CEM i COZ").
   Wzięte wprost z tamtych plików: niebieski #2563eb i granat #1b4f9c z wydruków Biovisu,
   szarości z rodziny #0f172a / #64748b / #e2e8f0, tła #f8fafc.
   CIEMNEGO MOTYWU NIE MA -- ma być jasno, tak jak prosił. */
:root {
  color-scheme: light;

  /* KOLORY I KRÓJ PISMA WPROST Z FINANSÓW CEM (css/base.css, components.css) --
     Piotr, 5.09.2026: „weź kolorystykę stamtąd". Dwa programy mają wyglądać jak jeden,
     zwłaszcza że Finanse otwierają się teraz w środku gabinetu. */
  --tlo: #f7f9fc;
  --karta: #ffffff;
  --linia-cicha: #eef2f7;       /* cieńsza kreska wewnątrz kart, tak jak w Finansach */
  --karta-cien: 0 1px 2px rgba(15, 23, 42, .05), 0 8px 24px rgba(15, 23, 42, .06);
  --tekst: #0f172a;
  --pod: #64748b;
  --linia: #e2e8f0;
  --linia-mocna: #cbd5e1;

  --akcent: #2563eb;            /* ten sam niebieski, co w programie Finanse CEM */
  /* TLO KAFELKA GRUPY W MENU -- wyglad wybrany przez Piotra 21.09.2026. */
  --menu-kafel: #f4f6f9;
  --akcent-ciemny: #1d4ed8;
  --akcent-tlo: #eff5ff;
  --granat: #1b4f9c;            /* granat z wydruków Centrum Oceny Zdrowia */

  --dobrze: #15803d;
  --dobrze-tlo: #f0fdf4;
  --blad: #b91c1c;
  /* ALIAS NA TE SAMA BARWE. Dwa miejsca uzywaly `--zle`, ktore nigdy nie istnialo -- „✕ brak
     ubezpieczenia" i „NIE ZAPISANO" wychodzily CZARNE zamiast czerwonych. Poprawione 5.09.2026;
     alias zostaje, zeby ta sama literowka nie kosztowala drugi raz. */
  --zle: #b91c1c;
  --blad-tlo: #fef2f2;
  --uwaga: #a16207;
  --uwaga-tlo: #fffbeb;

  --r: 14px;
  --odstep: 16px;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }

/* NIC NIE MOŻE BYĆ SZERSZE NIŻ EKRAN.
   Gdy choć jeden element wystaje poza szerokość telefonu, strona daje się przesunąć w bok
   i po prawej widać pusty pasek tła. Najczęściej robią to listy wyboru z długim opisem
   („DZ — dziecko do 18 lat...") i długie numery bez spacji. (Piotr, 4.09.2026) */
html, body { overflow-x: hidden; max-width: 100%; }
input, select, textarea, button { min-width: 0; max-width: 100%; box-sizing: border-box; }
.rzad, .pola, .pola-recepty, .linia-akcji, .naglowek { min-width: 0; }
.pod, td, th, .lek-op, .meta { overflow-wrap: anywhere; }

body {
  margin: 0;
  font: 16px/1.55 Inter, "Segoe UI", Arial, -apple-system, BlinkMacSystemFont, sans-serif;
  background: var(--tlo);
  color: var(--tekst);
  padding-bottom: env(safe-area-inset-bottom);
}

h1 { font-size: 28px; margin: 0 0 6px; letter-spacing: -.02em; }
h2 { font-size: 17px; margin: 0 0 14px; letter-spacing: -.01em; display: flex;
  align-items: center; gap: 8px; color: var(--granat); }
h2::before {
  content: ""; width: 4px; height: 18px; border-radius: 2px; background: var(--akcent);
  display: inline-block;
}
.pod { color: var(--pod); font-size: 14px; margin: 4px 0 14px; }

/* --- pola ------------------------------------------------------------------------------------ */
label { display: block; margin: 0 0 14px; font-size: 13px; font-weight: 600; color: var(--pod);
  letter-spacing: .01em; }
input, select, textarea {
  /* POLA MAJĄ BYĆ WIDOCZNE (Piotr, 4.09.2026: „nadal pola są toporne, słabo ich widać").
     Białe pole na białej karcie znikało -- widać było tylko cienką kreskę. Teraz pole ma własne,
     jasnoszare tło i wyraźniejszą obwódkę, a po kliknięciu robi się białe z niebieską ramką
     i delikatną poświatą: od razu widać, gdzie stoi kursor. */
  width: 100%;
  font: inherit; font-size: 16px; font-weight: 500;   /* 16 px = telefon nie przybliża ekranu */
  color: var(--tekst);
  background: #f6f8fb;
  border: 1.5px solid var(--linia-mocna);
  border-radius: 10px;
  padding: 12px 14px;
  min-height: 48px;
  transition: border-color .15s, background .15s, box-shadow .15s;
}
/* KRATKA TO KRATKA, NIE POLE (Piotr, 19.09.2026, ze zrzutem okna „Drukuj wizytę":
   „to w ogóle tego nie da się obsługiwać").

   Reguła wyżej daje KAŻDEMU polu 48 px wysokości, 100% szerokości i wewnętrzny odstęp --
   i brała też kwadraciki do zaznaczania. Jeden wiersz „Dane pacjenta" zajmował przez to
   ponad sto pikseli, więc jedenaście pól nie mieściło się na ekranie, a przyciski zostawały
   pod spodem, poza zasięgiem. Kratki i kółka mają swoją wielkość i basta. */
input[type="checkbox"], input[type="radio"] {
  width: 18px; height: 18px; min-height: 0; min-width: 0; padding: 0;
  flex: 0 0 auto; margin: 0; accent-color: var(--akcent); cursor: pointer;
}

input::placeholder { color: var(--pod); opacity: .6; }
input:hover, select:hover { border-color: var(--linia-mocna); background: #f1f5f9; }
input:focus, select:focus, textarea:focus {
  outline: none; background: #fff; border-color: var(--akcent);
  box-shadow: 0 0 0 4px rgba(37, 99, 235, .12);
}
select { appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2364748b' stroke-width='2'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 14px center; padding-right: 38px; }
input[type="file"] { padding: 10px; background: var(--tlo); }

/* --- przyciski ------------------------------------------------------------------------------- */
/* PRZYCISK TAKI SAM JAK W FINANSACH: delikatny gradient, cienka ramka, miękki cień.
   (Tam: `.cem-btn` w components.css.) */
button {
  font: inherit; font-size: 15px; font-weight: 600;
  padding: 11px 18px; min-height: 46px;
  border-radius: 10px; border: 1px solid #dbe2ea;
  background: linear-gradient(180deg, #fff, #f8fafc); color: var(--tekst);
  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);
  cursor: pointer; transition: background .14s, border-color .14s, box-shadow .14s, transform .05s;
}
button:hover { background: #f1f5f9; border-color: #c7d2fe;
  box-shadow: 0 2px 6px rgba(15, 23, 42, .09); }
button:active { transform: translateY(1px); }
button:focus-visible { outline: 3px solid rgba(37, 99, 235, .45); outline-offset: 2px; }
button:focus-visible { outline: 3px solid color-mix(in srgb, var(--akcent) 40%, transparent);
  outline-offset: 2px; }
button.glowny { background: var(--akcent); border-color: var(--akcent); color: #fff; }
button.glowny:hover { background: var(--akcent-ciemny); border-color: var(--akcent-ciemny); }
/* ZAMKNIĘTA WIZYTA -- „Otwórz ponownie" (Piotr, 22.09.2026: „niech będzie na jakiś pomarańczowy"). */
button.pomaranczowy { background: #ea580c; border-color: #ea580c; color: #fff; }
button.pomaranczowy:hover { background: #c2410c; border-color: #c2410c; }
button.cichy { border: none; background: none; color: var(--akcent); min-height: 0; padding: 2px 6px; }
button.male { font-size: 13px; padding: 7px 12px; min-height: 38px; }
button[disabled] { background: var(--tlo); border-color: var(--linia); color: var(--pod);
  cursor: default; }
button[disabled]:hover { background: var(--tlo); border-color: var(--linia); }

/* --- logowanie ------------------------------------------------------------------------------- */
.ekran-logowania { display: grid; place-items: center; min-height: 100dvh; padding: 20px; }
.ekran-logowania .karta { width: min(420px, 100%); }
.ekran-logowania h1 { text-align: center; }
.ekran-logowania .pod { text-align: center; }
.ekran-logowania button { width: 100%; }

/* --- nagłówek i zakładki --------------------------------------------------------------------- */
header {
  display: flex; align-items: center; gap: 14px;
  padding: 10px 16px; background: var(--karta);
  border-bottom: 1px solid var(--linia);
  position: sticky; top: 0; z-index: 20;
}
header > strong { font-size: 17px; letter-spacing: -.01em; white-space: nowrap; }
h
h
h
h
h

main { max-width: 860px; margin: 20px auto 96px; padding: 0 16px; }

/* --- karty ------------------------------------------------------------------------------------ */
.karta {
  background: var(--karta); border: 1px solid var(--linia); border-radius: var(--r);
  box-shadow: var(--karta-cien); padding: 20px; margin: 0 0 var(--odstep);
}
.rzad { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0 14px; }
.rzad-przyciskow { display: flex; gap: 10px; flex-wrap: wrap; margin: 4px 0 8px; }

/* --- komunikaty -------------------------------------------------------------------------------- */
.blad { color: var(--blad); font-size: 14px; margin-top: 10px; min-height: 20px; }
.blad:not(:empty) { background: var(--blad-tlo); border-radius: 8px; padding: 10px 12px; }
.dobrze { color: var(--dobrze); }
.blad:has(.dobrze) { background: var(--dobrze-tlo); color: var(--dobrze); }
/* Gdyby przeglądarka nie znała `:has()`, komunikat o sukcesie i tak jest zielonym tekstem
   -- traci tylko zielone tło. */
.pasek { background: var(--uwaga-tlo); color: var(--uwaga); border-bottom: 1px solid var(--linia);
  padding: 10px 16px; font-size: 14px; text-align: center; }

/* --- wyszukiwarka leków ------------------------------------------------------------------------ */
.wynik { border: 1px solid var(--linia); border-radius: 12px; padding: 14px; margin-bottom: 10px;
  transition: border-color .15s, background .15s; }
.wynik:hover { border-color: var(--akcent); background: var(--akcent-tlo); }
.wynik b { font-size: 16px; }
.wynik .meta { color: var(--pod); font-size: 13px; margin-top: 2px; }
.wynik .opak { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.wynik .opak button { font-size: 13px; padding: 8px 12px; min-height: 40px; }

/* --- pozycje recepty --------------------------------------------------------------------------- */
.pozycja { border: 1px solid var(--linia); border-left: 4px solid var(--akcent);
  border-radius: 12px; padding: 14px; margin-bottom: 12px; background: var(--karta); }
.pozycja .gora { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; }
.pozycja .gora b { font-size: 16px; }
.pozycja .gora button { min-height: 38px; padding: 6px 12px; font-size: 13px; }
.pozycja .pola { display: grid; grid-template-columns: 1fr 110px 170px; gap: 0 12px; }
.pola-recepty { display: grid; grid-template-columns: 1fr 110px 110px; gap: 0 12px; }
/* ODPLATNOSC: wszystkie mozliwosci widoczne naraz, jedno klikniecie zamiast rozwijania listy. */
.odplatnosci { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 12px; }
.odplatnosci button.wybrana { background: var(--akcent); border-color: var(--akcent); color: #fff; }
.wyliczenie { background: var(--dobrze-tlo); color: var(--dobrze); border-radius: 8px;
  padding: 8px 12px; font-size: 13px; font-weight: 600; margin-bottom: 12px; }
/* Puste miejsce na rachunek nie ma być zielonym paskiem znikąd. */
.wyliczenie:empty, .kwota-opis:empty { display: none; }
.meta.pod b { color: var(--akcent); font-weight: 700; }

/* --- lista wystawionych -------------------------------------------------------------------------
   JEDNA RECEPTA = JEDNA KARTA z paskiem stanu po lewej: zielony -- wystawiona i ma kod dla
   apteki, bursztynowy -- jeszcze niewysłana, czerwony -- anulowana. Kolor widać kątem oka,
   więc na długiej liście nie trzeba czytać, żeby wiedzieć, co jest do zrobienia. */
/* ROZWIJA SIĘ NAZWISKO, nie pojedyncza recepta. Strzałkę rysujemy sami -- domyślny trójkąt
   przeglądarki psuje układ nagłówka. */
.grupa-pacjenta > summary { list-style: none; cursor: pointer; position: relative; }
.grupa-pacjenta > summary::-webkit-details-marker { display: none; }
.grupa-pacjenta > summary::after { content: '⌄'; position: absolute; right: 16px; top: 16px;
  color: var(--pod); font-size: 20px; line-height: 1; transition: transform .15s ease; }
.grupa-pacjenta[open] > summary::after { transform: rotate(180deg); }
.grupa-pacjenta > summary:hover h3 { color: var(--akcent); }
.grupa-pacjenta > summary .pacjent-karta { margin-bottom: 0; }
.grupa-pacjenta[open] > summary .pacjent-karta { border-radius: var(--r) var(--r) 0 0; }
.grupa-srodek { border: 1px solid var(--linia); border-top: none;
  border-radius: 0 0 var(--r) var(--r); padding: 14px 16px 6px; margin-bottom: 22px;
  background: var(--tlo); }
.recepta { position: relative; overflow: hidden;
  background: var(--karta); border: 1px solid var(--linia); border-radius: 10px;
  padding: 9px 12px 8px 16px; margin-bottom: 8px; box-shadow: none;
  transition: border-color .15s ease; }
.recepta:hover { border-color: var(--linia-mocna); }
.recepta::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
  background: var(--linia-mocna); }
.recepta-wystawiona::before { background: var(--dobrze); }
.recepta-niewyslana::before { background: #d97706; }
.recepta-anulowana::before { background: var(--blad); }
.recepta-anulowana { background: #fffafa; }
.recepta-anulowana .leki { opacity: .55; }

.recepta-glowa { display: flex; justify-content: space-between; align-items: baseline;
  gap: 10px; flex-wrap: wrap; }
.recepta-kto { min-width: 0; flex: 1 1 260px; }
.recepta-kto h3 { margin: 0; font-size: 14px; font-weight: 700; display: inline; }
.recepta-kto { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.recepta-meta { font-size: 12px; color: var(--pod); line-height: 1.45; }
.recepta-meta.cichsza { color: #94a3b8; }
.recepta-stan { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }

/* KOD DLA APTEKI -- jedyna rzecz, którą pacjent podaje w okienku. Duży, w odstępach, żeby dało
   się go przeczytać przez telefon bez pomyłki. */
.kod-p1 { text-align: right; line-height: 1.15; }
.kod-p1 span { display: block; font-size: 9.5px; text-transform: uppercase; letter-spacing: .05em;
  color: var(--pod); line-height: 1.2; }
.kod-p1 b { font-size: 17px; font-weight: 800; letter-spacing: .08em; color: var(--dobrze);
  font-variant-numeric: tabular-nums; }
.kod-brak b { font-size: 13px; font-weight: 700; letter-spacing: 0; color: #b45309; }
.plakietka { display: inline-block; font-size: 11px; font-weight: 700; padding: 4px 10px;
  border-radius: 999px; background: var(--uwaga-tlo); color: var(--uwaga); white-space: nowrap; }
.plakietka-zla { background: var(--blad-tlo); color: var(--blad); }

/* LEKI -- lista, nie tabela. Tabela z czterema nagłówkami zabierała pół karty na same napisy. */
.leki { list-style: none; margin: 6px 0 7px; padding: 0; }
.lek { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px;
  padding: 4px 0; border-top: 1px solid var(--linia); }
.lek-nazwa { font-size: 13.5px; }
.lek-pod { font-size: 12px; color: var(--pod); }
.lek-kat { display: inline-block; font-size: 10.5px; font-weight: 700; padding: 1px 6px;
  border-radius: 6px; background: var(--akcent-tlo); color: var(--akcent); vertical-align: 1px; }

/* KARTA OSOBY nad jej receptami -- gdy w polu szukania stoi nazwisko. */
.pacjent-karta { background: var(--karta); border: 1px solid var(--linia); border-left: 4px solid var(--akcent);
  border-radius: var(--r); padding: 14px 16px; margin-bottom: 16px; box-shadow: var(--karta-cien); }
.pacjent-glowa { display: flex; justify-content: space-between; align-items: flex-start;
  gap: 14px; flex-wrap: wrap; }
.pacjent-glowa h3 { margin: 0 0 4px; font-size: 17px; letter-spacing: -.01em; }

/* CZY PACJENTOWI SKOŃCZYŁ SIĘ LEK -- jedno spojrzenie: zielono, gdy zapas się skończył (czyli
   pora na nową receptę), bursztynowo, gdy lek jeszcze mu został. */
.zapas { display: inline-block; font-size: 11px; font-weight: 700; padding: 1px 7px;
  border-radius: 999px; white-space: nowrap; }
.zapas i { font-style: normal; font-weight: 400; opacity: .75; }
.zapas-jest { background: var(--uwaga-tlo); color: var(--uwaga); }
.zapas-konczy { background: var(--akcent-tlo); color: var(--akcent); }
.zapas-brak { background: var(--dobrze-tlo); color: var(--dobrze); }
.zapas-skad { margin-left: 6px; font-size: 11px; color: var(--pod); }
.wykupiona { color: var(--dobrze); }
/* Przy każdym leku osobno: „wykupiony 25 września" / „jeszcze niewykupiony" (26.09.2026). */
.lek-p1 { font-size: 11px; margin-right: 6px; color: var(--pod); }
.lek-p1.wykupiona { color: var(--dobrze); }
.grupa-pacjenta { margin-bottom: 26px; }
.grupa-pacjenta .recepta { margin-left: 14px; }

/* OSTATNIA RECEPTA PACJENTA -- przy wypisywaniu nowej. */
.poprzednio { border: 1px solid var(--linia); border-left: 4px solid var(--akcent);
  border-radius: 10px; background: var(--akcent-tlo); padding: 12px 14px; margin: 4px 0 14px; }
.poprzednio-glowa { font-size: 13px; color: var(--pod); margin-bottom: 8px; }
.poprzednio-leki { list-style: none; margin: 0; padding: 0; }
.poprzednio-leki li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px;
  padding: 5px 0; border-top: 1px solid rgba(37, 99, 235, .12); font-size: 13.5px; }
.poprzednio-leki li:first-child { border-top: none; }
.pl-nazwa { font-weight: 700; }
.pl-ds { color: var(--pod); font-size: 12.5px; }

/* RODZAJ LEKU do wyboru -- małe klawisze, wybrany podświetlony. */
.filtr-rodzaju { margin: -4px 0 12px; }
.rodzaje { display: flex; flex-wrap: wrap; gap: 4px; margin: 6px 0 2px; }
.rodzaje button { font-size: 11.5px; padding: 3px 9px; }
.uwaga-rodzaju { font-size: 12px; color: var(--uwaga); background: var(--uwaga-tlo);
  border-radius: 8px; padding: 6px 10px; margin: 6px 0 2px; }

/* ZAKŁADKA „LEKI" -- wyszukiwarka i pełna charakterystyka. */
.szukajka.duza input { padding: 16px 18px 16px 46px; font-size: 17px; }
.szukajka.duza .szukajka-lupa { font-size: 19px; }
.lista-lekow { display: grid; gap: 6px; margin: 10px 0 4px; }
.lek-wiersz { text-align: left; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 10px; padding: 10px 14px; cursor: pointer; }
.lek-wiersz:hover { border-color: var(--akcent); }
.lek-wiersz .meta { font-size: 12px; color: var(--pod); margin-top: 2px; }

.wiedza-glowa { margin: 22px 0 12px; padding-bottom: 12px; border-bottom: 2px solid var(--linia); }
.wiedza-glowa h2 { margin: 0 0 3px; font-size: 20px; letter-spacing: -.01em; }

.punkt-chpl { border: 1px solid var(--linia); border-radius: 12px; margin-bottom: 8px;
  background: var(--karta); overflow: hidden; }
.punkt-chpl > summary { cursor: pointer; padding: 12px 16px; list-style: none;
  display: flex; align-items: baseline; gap: 10px; font-size: 15px; }
.punkt-chpl > summary::-webkit-details-marker { display: none; }
.punkt-chpl > summary:hover { background: var(--akcent-tlo); }
.punkt-chpl[open] > summary { border-bottom: 1px solid var(--linia); }
.punkt-chpl .numer { font-size: 11.5px; color: var(--pod); background: var(--tlo);
  padding: 2px 8px; border-radius: 999px; }
.punkt-chpl pre { margin: 0; padding: 14px 18px; white-space: pre-wrap; word-wrap: break-word;
  font: 14px/1.65 ui-sans-serif, -apple-system, "Segoe UI", system-ui, sans-serif;
  color: var(--tekst); max-height: none; }
.zrodlo { font-size: 12.5px; color: var(--pod); margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--linia); }

/* INTERAKCJE -- podsumowanie na kolorowo. Kolor mówi, jak pilne, a nie jak groźne:
   czerwony = producent napisał „przeciwwskazane" albo „nie zaleca się". */
.interakcje-blok { border: 1px solid var(--linia); border-radius: 12px; padding: 14px 16px;
  margin: 12px 0; background: var(--tlo); }
.interakcje-samodzielne { margin-bottom: 14px; }

.podsumowanie-interakcji { border-radius: 12px; padding: 12px 16px; margin: 12px 0 10px;
  font-size: 15px; }
.podsumowanie-interakcji.zielone { background: var(--dobrze-tlo); color: var(--dobrze); }
.podsumowanie-interakcji.czerwone { background: var(--blad-tlo); color: var(--blad); }
.podsumowanie-interakcji.pomaranczowe { background: var(--uwaga-tlo); color: var(--uwaga); }
.podsumowanie-interakcji.szare { background: #f1f4f8; color: var(--pod); }
.podsumowanie-interakcji .pod { margin-top: 4px; font-weight: 400; }

.para-interakcji { border: 1px solid var(--linia); border-left: 5px solid var(--linia-mocna);
  border-radius: 10px; padding: 11px 14px; margin-bottom: 8px; background: var(--karta); }
.para-interakcji.czerwony { border-left-color: var(--blad); background: #fffafa; }
.para-interakcji.pomaranczowy { border-left-color: #d97706; background: #fffdf7; }
.para-interakcji.szary { border-left-color: var(--linia-mocna); }
.para-nazwy { font-size: 14.5px; margin-bottom: 6px; }
.znalezisko { margin-top: 6px; }
.znalezisko .skad { font-size: 11.5px; color: var(--pod); margin-bottom: 3px; }
/* OPAKOWANIE: opis po lewej, rodzaj podpisany z prawej. Rodzaj inny niż wybrany jest
   widoczny, ale odróżniony -- nic się nie chowa. (Piotr, 5.09.2026) */
.opak button { display: inline-flex; align-items: center; gap: 8px; }
.opak-opis { flex: 1 1 auto; text-align: left; }
.opak-rodzaj { flex: 0 0 auto; font-size: 10.5px; font-weight: 800; letter-spacing: .04em;
  padding: 2px 7px; border-radius: 999px; background: var(--akcent-tlo); color: var(--akcent); }
.opak-rodzaj.inny { background: #f1f4f8; color: var(--pod); }
.opak button.inny-rodzaj { border-style: dashed; }
.legenda-skrotow { font-size: 11.5px; color: var(--pod); margin: 10px 0 0; padding-top: 8px;
  border-top: 1px solid var(--linia); line-height: 1.6; }

.zrodlo-mocne { background: var(--dobrze-tlo); color: var(--dobrze); font-weight: 700;
  padding: 1px 7px; border-radius: 999px; }
.zrodlo-slabe { background: #f1f4f8; color: var(--pod); font-weight: 700;
  padding: 1px 7px; border-radius: 999px; }
.znalezisko .cytat { font-size: 13px; line-height: 1.55; background: var(--tlo);
  border-radius: 8px; padding: 8px 11px; }

/* ZAKŁADKA LEKI -- dwa narzędzia obok siebie, jednakowe i widoczne od razu. */
.karta-lekow { padding-top: 22px; }
.narzedzia { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px; margin: 14px 0 6px; }
.narzedzie { display: grid; grid-template-columns: 40px 1fr; grid-template-areas:
  'ikona tytul' 'ikona opis'; gap: 0 12px; align-items: center; text-align: left;
  background: var(--karta); border: 1px solid var(--linia); border-radius: 14px;
  padding: 14px 16px; cursor: pointer; transition: border-color .15s ease, transform .12s ease; }
.narzedzie:hover { border-color: var(--akcent); transform: translateY(-1px); }
.narzedzie .ikona { grid-area: ikona; font-size: 22px; }
.narzedzie .tytul { grid-area: tytul; font-size: 15px; font-weight: 700; }
.narzedzie .opis { grid-area: opis; font-size: 12.5px; color: var(--pod); }

.panel-interakcji { border: 1px solid var(--linia); border-radius: var(--r);
  background: var(--tlo); padding: 18px 20px; margin: 14px 0; }
.panel-interakcji h3 { margin: 0 0 4px; font-size: 16px; }
.panel-interakcji > .pod { margin-bottom: 12px; }

/* CIĄŻA -- ostrzeżenie tuż nad przyciskiem wystawiania, żeby nie dało się go minąć. */
.ciaza-blok { border-radius: 14px; padding: 16px 18px; margin: 14px 0; border: 2px solid; }
.ciaza-blok.czerwony { background: var(--blad-tlo); border-color: #f2b8b5; }
.ciaza-blok.pomaranczowy { background: var(--uwaga-tlo); border-color: #f3dfa8; }
.ciaza-naglowek { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 10px; }
.ciaza-naglowek .znak { font-size: 22px; line-height: 1.2; }
.ciaza-blok.czerwony .ciaza-naglowek b { color: var(--blad); }
.ciaza-blok.pomaranczowy .ciaza-naglowek b { color: var(--uwaga); }

.lek-ciaza { background: var(--karta); border-radius: 10px; padding: 10px 13px; margin-bottom: 7px;
  border-left: 4px solid var(--linia-mocna); }
.lek-ciaza.czerwony { border-left-color: var(--blad); }
.lek-ciaza.pomaranczowy { border-left-color: #d97706; }
.lek-ciaza.nieznany { border-left-color: var(--linia-mocna); }
.lek-ciaza-glowa { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; }
.lek-ciaza .etykieta { font-size: 12.5px; font-weight: 700; padding: 2px 9px; border-radius: 999px;
  background: #f1f4f8; color: var(--pod); }
.lek-ciaza.czerwony .etykieta { background: var(--blad-tlo); color: var(--blad); }
.lek-ciaza.pomaranczowy .etykieta { background: var(--uwaga-tlo); color: var(--uwaga); }
.lek-ciaza summary { cursor: pointer; font-size: 12px; color: var(--pod); margin-top: 6px; }
.lek-ciaza .cytat { font-size: 13px; line-height: 1.55; background: var(--tlo);
  border-radius: 8px; padding: 8px 11px; margin-top: 5px; }
.lek-ciaza .skad { font-size: 11px; color: var(--pod); margin-top: 4px; }
.ciaza-reszta > summary, .ciaza-cicha > summary { cursor: pointer; font-size: 12.5px;
  color: var(--pod); padding: 8px 0; }
.ciaza-cicha { border-top: 1px solid var(--linia); margin: 10px 0; }
.ciaza-cicha > summary:hover { color: var(--akcent); }
.ciaza-spokojnie { font-size: 12.5px; color: var(--dobrze); background: var(--dobrze-tlo);
  border-radius: 10px; padding: 8px 13px; margin: 10px 0; }

/* WERDYKT -- pierwsze, co widać. Duży znak, jedno zdanie, kolor zgodny z powagą. */
.werdykt { display: flex; align-items: flex-start; gap: 14px; border-radius: 12px;
  padding: 14px 18px; margin: 12px 0 10px; font-size: 15.5px; }
.werdykt .znak { display: grid; place-items: center; width: 32px; height: 32px; flex: 0 0 32px;
  border-radius: 50%; font-weight: 800; font-size: 17px; background: rgba(255,255,255,.65); }
.werdykt .pod { font-weight: 400; font-size: 13px; margin-top: 2px; opacity: .85; }
.werdykt.zielone { background: var(--dobrze-tlo); color: var(--dobrze); }
.werdykt.czerwone { background: var(--blad-tlo); color: var(--blad); }
.werdykt.pomaranczowe { background: var(--uwaga-tlo); color: var(--uwaga); }
.werdykt.szare { background: #f1f4f8; color: var(--pod); }

.dzial-interakcji { margin-top: 14px; }
.dzial-interakcji h4 { margin: 0 0 7px; font-size: 12px; text-transform: uppercase;
  letter-spacing: .06em; color: var(--pod); font-weight: 700; }
.dzial-zwiniety { margin-top: 14px; }
.dzial-zwiniety > summary { cursor: pointer; font-size: 13px; color: var(--pod); padding: 6px 0; }

.para-nazwy .plus { color: var(--pod); font-weight: 400; margin: 0 8px; }
.para-zalecenie { font-size: 14px; font-weight: 600; margin-top: 2px; }
.para-interakcji.czerwony .para-zalecenie { color: var(--blad); }
.para-interakcji.pomaranczowy .para-zalecenie { color: #b45309; }
.para-cytat > summary { cursor: pointer; font-size: 12px; color: var(--pod); margin-top: 8px; }
.para-cytat > summary:hover { color: var(--akcent); }
.stopka-interakcji { font-size: 12px; color: var(--pod); margin-top: 14px; padding-top: 10px;
  border-top: 1px solid var(--linia); }

/* WYBÓR LEKU Z REJESTRU -- podpowiedzi i plakietki wybranych. */
.podpowiedzi-lekow { display: grid; gap: 4px; margin: 6px 0; }
.podpowiedz-leku { text-align: left; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 9px; padding: 8px 12px; cursor: pointer; font-size: 13.5px; }
.podpowiedz-leku:hover { border-color: var(--akcent); background: var(--akcent-tlo); }
.podpowiedz-leku .meta { display: block; font-size: 11.5px; color: var(--pod); }
.wybrane-leki { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 4px; }
.lek-plakietka { display: inline-flex; align-items: center; gap: 6px; background: var(--akcent-tlo);
  color: var(--akcent); border-radius: 999px; padding: 5px 6px 5px 13px; font-size: 13px;
  font-weight: 600; }
.lek-plakietka button { padding: 0 6px; font-size: 13px; line-height: 1; color: var(--akcent); }

/* UKŁADY JEDEN POD DRUGIM -- spis treści, nie rozsypane kafelki. */
.lista-ukladow { display: grid; gap: 6px; margin-top: 10px; }
.uklad { display: grid; grid-template-columns: 34px 1fr auto; align-items: center; gap: 12px;
  text-align: left; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 12px; padding: 11px 14px; cursor: pointer;
  transition: border-color .15s ease, transform .12s ease; }
.uklad:hover { border-color: var(--akcent); transform: translateX(2px); }
.uklad .litera { display: grid; place-items: center; width: 30px; height: 30px;
  border-radius: 9px; background: var(--akcent-tlo); color: var(--akcent);
  font-weight: 800; font-size: 14px; }
.uklad .opis { font-size: 14.5px; font-weight: 600; }
.uklad .ile { font-size: 12px; color: var(--pod); font-variant-numeric: tabular-nums; }

/* Wyniki w przeglądarce: lek pod lekiem, opakowania w jednym rzędzie pod nazwą. */
.przegladarka-tresc .wynik { background: var(--karta); border: 1px solid var(--linia);
  border-radius: 12px; padding: 11px 14px; margin-bottom: 6px; }
.przegladarka-tresc .wynik .opak { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }

/* URYWEK ZE WSKAZAŃ -- fragment, w którym naprawdę pada szukane słowo. */
.urywek { font-size: 12.5px; color: var(--pod); background: var(--tlo); border-radius: 8px;
  padding: 7px 10px; margin-top: 6px; line-height: 1.5; }
.urywek mark { background: #fff3bf; color: var(--tekst); padding: 0 2px; border-radius: 3px;
  font-weight: 600; }

/* DZIAŁY WYNIKÓW SZUKANIA -- choroby, układy, substancje, leki. */
.dzial-wynikow { margin-top: 16px; }
.dzial-wynikow h3 { margin: 0 0 6px; font-size: 12px; text-transform: uppercase;
  letter-spacing: .06em; color: var(--pod); font-weight: 700; }

/* PRZELICZNIK DAWKI -- przy punkcie o dawkowaniu. */
.przelicznik { border-top: 1px solid var(--linia); background: var(--tlo);
  padding: 14px 18px 16px; }
.przelicznik-tytul { font-weight: 700; font-size: 13.5px; margin-bottom: 10px; }
.przelicznik-pola { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 10px; }
.przelicznik-pola label { display: block; font-size: 12px; color: var(--pod); margin: 0; }
.przelicznik-pola input { width: 100%; margin-top: 3px; padding: 9px 11px; font-size: 14px; }
.przelicznik-wynik { margin-top: 12px; font-size: 15px; line-height: 1.5;
  background: var(--dobrze-tlo); color: var(--dobrze); border-radius: 10px; padding: 10px 14px; }
.przelicznik-wynik.pod { background: none; color: var(--pod); padding: 6px 0; font-size: 13px; }

/* PRZEGLĄDANIE LEKÓW -- układy, problemy, substancje, listy bezpłatnych. */
#przegladarka { border: 1px solid var(--linia); border-radius: var(--r); background: var(--tlo);
  padding: 14px 16px; margin: 0 0 14px; }
.przegladarka-menu { margin-bottom: 12px; }
.przegladarka-tresc { max-height: 60vh; overflow-y: auto; }
.tytul-przegladania { margin: 10px 0 6px; font-size: 15px; }

.kafelki { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; }
.kafelek { display: block; text-align: left; background: var(--karta);
  border: 1px solid var(--linia); border-radius: 12px; padding: 12px 14px; cursor: pointer;
  transition: border-color .15s ease, transform .15s ease; }
.kafelek:hover { border-color: var(--akcent); transform: translateY(-1px); }
.kafelek .litera { display: inline-grid; place-items: center; width: 30px; height: 30px;
  border-radius: 9px; background: var(--akcent-tlo); color: var(--akcent);
  font-weight: 800; font-size: 15px; margin-bottom: 6px; }
.kafelek .opis { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.35; }
.kafelek .ile { display: block; font-size: 11.5px; color: var(--pod); margin-top: 3px; }

/* Grupa ATC ma szerszy kwadracik, bo mieści kod w rodzaju „R03", a nie jedną literę.
   Nazwy grup rejestr podaje tylko kodem -- w środku wiersza stoją więc przykładowe
   substancje, bo one mówią, co to za grupa. */
/* Problem i substancja nie mają kwadracika z literą -- treść zaczyna się od lewej. */
.uklad.problem-wiersz { grid-template-columns: 1fr auto; }
.uklad.problem-wiersz .opis { font-weight: 500; font-size: 14px; line-height: 1.4; }

.uklad.grupa { grid-template-columns: 56px 1fr auto; }
.uklad.grupa .litera { width: 52px; font-size: 13px; letter-spacing: .02em; }
.uklad.grupa .opis { font-weight: 400; font-size: 13px; color: var(--pod); line-height: 1.4; }

.problemy { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.problem { text-align: left; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 999px; padding: 6px 13px; font-size: 13px; cursor: pointer; }
.problem:hover { border-color: var(--akcent); color: var(--akcent); }
.problem .ile, .grupa .ile { color: var(--pod); font-size: 11.5px; }
.szukajka.mala input { padding: 9px 12px 9px 34px; font-size: 14px; }

/* LEK ROBIONY -- surowiec i ilość obok siebie, tak jak pisze się na recepcie. */
.recepturowy { background: var(--tlo); border: 1px solid var(--linia); border-radius: 10px;
  padding: 12px 14px; margin: 4px 0 12px; }
.recepturowy > .pod { margin: 8px 0 4px; }
.surowiec { display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) auto auto auto;
  gap: 6px; align-items: center; margin-bottom: 6px; }
.surowiec .male { font-size: 11.5px; padding: 4px 8px; white-space: nowrap; }
@media (max-width: 680px) {
  .surowiec { grid-template-columns: 1fr 1fr; }
  .surowiec input:first-child { grid-column: 1 / -1; }
}
.surowiec input { margin: 0; }
.surowiec button { padding: 4px 8px; line-height: 1; }

.pusto { color: var(--pod); text-align: center; padding: 28px 0; margin: 0; }
.linia-akcji button { margin-left: 0; }
.znacznik { display: inline-block; font-size: 12px; font-weight: 700; padding: 5px 10px;
  border-radius: 999px; background: var(--uwaga-tlo); color: var(--uwaga); }
table { width: 100%; border-collapse: collapse; margin-top: 12px; font-size: 14px; }
th { text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--pod); }
th, td { padding: 8px 10px; border-bottom: 1px solid var(--linia); vertical-align: top; }
tr:last-child td { border-bottom: none; }

/* --- podpis i certyfikaty ------------------------------------------------------------------------ */
/* GRUBA KRESKA NAD PODPISEM ZDJĘTA (Piotr, 4.09.2026: „usuń tą grubą linię ponad").
   Podgląd podpisu jest teraz w zwijanym bloku i sam nagłówek wystarczy za oddzielenie --
   trzypunktowa krecha nad nim robiła z niego drugi nagłówek strony. */
.podpis { border: 1px solid var(--linia);
  padding: 16px; margin: 8px 0 14px; background: var(--akcent-tlo); border-radius: 12px;
  line-height: 1.8; font-size: 15px; text-align: center; }
.podpis b { display: block; font-size: 16px; }
.cert { border: 1px solid var(--linia); border-radius: 12px; padding: 16px; margin-bottom: 12px; }
.cert .stan { font-size: 14px; font-weight: 600; margin: 4px 0 8px; }
.wybor-miasta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: -6px 0 14px; }

/* PRZYCISKI PRZY RECEPCIE W JEDNEJ LINII -- BEZ PRZEWIJANIA.
   Mieszczą się dzięki temu, że same się zwężają: mniejsza czcionka i ciaśniejsze odstępy.
   Na wąskim telefonie kurczą się dalej, ale nigdy nie schodzą do drugiego wiersza. */
.linia-akcji { display: flex; flex-wrap: nowrap; align-items: center; gap: 4px; min-width: 0; }
.recepta .linia-akcji button { font-size: 11.5px; padding: 3px 7px; }
.linia-akcji button { white-space: nowrap; font-size: 12px; padding: 5px 8px; min-width: 0;
  flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; }
.linia-akcji .znacznik { font-size: 11px; padding: 3px 6px; flex: 0 1 auto;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* --- TELEFON: JEDEN KOMPLET REGUŁ ---------------------------------------------------------------
   Wszystko, co dotyczy małego ekranu, stoi TUTAJ i w jednym miejscu. Wcześniej te same rzeczy
   ustawiały trzy osobne bloki w różnych częściach pliku i wygrywał ten ostatni, a nie ten
   właściwy -- stąd „poprawki, które nic nie dawały". (Piotr, 4.09.2026) */
@media (max-width: 680px) {
  main { padding: 0 12px; margin-bottom: 24px; }
  .karta { padding: 16px; border-radius: 12px; margin-bottom: 12px; }
  h1 { font-size: 24px; }
  h2 { font-size: 17px; }

  /* PASEK ZAKŁADEK: pięć sztuk dzieli szerokość po równo, bez przewijania w bok. */
  header { padding: 8px 10px; gap: 6px; }
  h
  h

  /* FORMULARZ: jedna kolumna. Dwa wąskie pola obok siebie są nie do trafienia kciukiem. */
  .rzad { grid-template-columns: 1fr; }
  .pozycja .pola { grid-template-columns: 1fr; }
  .pola-recepty { grid-template-columns: 1fr 1fr; }
  .pola-recepty label:first-child { grid-column: 1 / -1; }

  /* ZAKŁADKA „NOWA": wszystko na pełną szerokość, nic nie wystaje poza ekran. */
  label { display: block; margin-bottom: 12px; }
  input, select, textarea { width: 100%; max-width: 100%; box-sizing: border-box; }
  /* Listy wyboru mają długie opisy („DZ — dziecko do 18 lat...") -- niech tekst się nie rozpycha. */
  select { text-overflow: ellipsis; padding-right: 34px; }
  /* Przyciski pod polami (dodaj lek, weź z poprzedniej) na całą szerokość -- łatwiej trafić. */
  .rzad-przyciskow { display: flex; flex-wrap: wrap; gap: 8px; }
  /* Na telefonie przyciski dodawania leku stoją OBOK SIEBIE, przy lewej krawędzi -- pełna
     szerokość robiła z nich dwa pasy przez cały ekran. (Piotr, 4.09.2026: „niech będzie
     z lewej".) Reszta rzędów zostaje jak była. */
  .rzad-przyciskow button { flex: 1 1 100%; min-height: 46px; }
  .rzad-przyciskow.rzad-lewo { justify-content: flex-start; }
  .rzad-przyciskow.rzad-lewo button { flex: 0 1 auto; }
  .zwijane summary, .podglad-podpisu summary { padding: 6px 0; font-size: 14px; }

  /* WYSZUKIWANIE LEKÓW: opakowania i odpłatności jako duże kafelki. */
  .wynik .opak button { flex: 1 1 calc(50% - 8px); min-height: 44px; }
  .odplatnosci button { flex: 1 1 calc(33% - 8px); min-height: 44px; }

  /* LISTA RECEPT: dane pacjenta nad przyciskami, przyciski po dwa w rzędzie. */
  .recepta { padding: 14px; }
  .recepta .recepta-glowa { flex-direction: column; gap: 10px; }
  .recepta .recepta-glowa > div:first-child { width: 100%; }
  .linia-akcji { width: 100%; flex-wrap: wrap; gap: 8px; }
  .linia-akcji button { flex: 1 1 calc(50% - 8px); font-size: 14px; min-height: 44px;
    padding: 10px 12px; overflow: visible; text-overflow: clip; }
  .linia-akcji button.glowny { flex: 1 1 100%; }
  .linia-akcji .znacznik { flex: 1 1 100%; text-align: center; font-size: 12px; padding: 6px 10px; }

  /* TABELE: łamią długie nazwy zamiast rozpychać stronę w bok. */
  table { font-size: 13px; table-layout: fixed; }
  td, th { word-break: break-word; }
  th { font-size: 11px; }

  /* „WYSTAW RECEPTĘ" JAKO ZWYKŁY PRZYCISK NA KOŃCU FORMULARZA.
     Przyklejony do dolnej krawędzi zasłaniał treść i wyglądał, jakby unosił się nad stroną.
     Teraz stoi tam, gdzie kończy się wypełnianie -- na dole, jak ostatnie pole. (Piotr, 4.09.2026) */
  #wystaw { position: static; width: 100%; font-size: 17px; min-height: 52px; margin-top: 4px; }
  #zakladka-nowa { padding-bottom: 8px; }
}

@media (min-width: 681px) {
  #wystaw { width: 100%; font-size: 16px; }
}

/* --- bardzo wąskie telefony --------------------------------------------------------------------- */
@media (max-width: 380px) {
  h
  main { padding: 0 8px; }
  .karta { padding: 13px; }
  .linia-akcji button { font-size: 13px; padding: 10px 8px; }
}

/* --- wydruk ------------------------------------------------------------------------------------------ */
@media print {
  header, .pasek, #zakladka-nowa, #zakladka-certyfikaty, #zakladka-ustawienia, button {
    display: none !important;
  }
  body { background: #fff; }
  .karta, .recepta { border: none; box-shadow: none; }
}

/* SCHOWANE ZNACZY SCHOWANE. Klasa z `display:grid` jest mocniejsza niż domyślna reguła
   przeglądarki dla atrybutu `hidden` -- bez tego ekran logowania zostawał na wierzchu
   po zalogowaniu (zgłoszone przez Piotra 3.09.2026). */
[hidden] { display: none !important; }

/* Opakowanie z refundacja -- zielona ramka, zeby bylo widac je od razu na liscie wynikow. */
.wynik .opak button.refundowany { border-color: var(--dobrze); background: var(--dobrze-tlo); }
.wynik .opak button.refundowany:hover { background: #dcf5e6; }

/* Tanszy odpowiednik -- podpowiedz, nie nakaz. Stoi pod lekiem, z przyciskiem do podmiany. */
.tansze { background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 10px;
  padding: 10px 12px; margin: 0 0 12px; font-size: 14px; }
.tansze .tanszy { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 6px; }
.tansze .tanszy button { margin-left: auto; }

/* TABLICZKA Z KWOTA: jedna duza liczba -- ile pacjent zaplaci -- i drobiazgi pod spodem. */
.kwota { background: var(--dobrze-tlo); border: 1px solid #bbf7d0; border-left: 5px solid var(--dobrze);
  border-radius: 10px; padding: 12px 14px; margin: 0 0 12px; }
.kwota-duza { font-size: 15px; color: var(--dobrze); }
.kwota-duza b { font-size: 24px; letter-spacing: -.02em; }
.kwota-opis { font-size: 13px; color: var(--pod); margin-top: 6px; line-height: 1.6; }
.kwota-opis b { color: var(--tekst); }
.kwota-uwaga { font-size: 13px; color: var(--blad); font-weight: 600; margin-top: 4px; }
.kwota-pelna { background: #fff7ed; border-color: #fed7aa; border-left-color: var(--uwaga); }
.kwota-pelna .kwota-duza { color: var(--uwaga); }

/* Ten sam sklad, inna nazwa -- lista lekow zamiennych skladem, takze nierefundowanych. */
.podobne { background: var(--akcent-tlo); border: 1px solid #bfdbfe; border-radius: 10px;
  padding: 10px 12px; margin: 0 0 12px; font-size: 14px; }
.podobne .tanszy { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 6px; }
.podobne .tanszy button { margin-left: auto; }

/* Ta sama substancja, inaczej zapisana dawka -- podpowiedz do RECZNEJ oceny, stad zolte tlo. */
.podobne.inna-miara { background: var(--uwaga-tlo); border-color: #fde68a; }

/* PODPIS LEKARZA DO WGLĄDU -- zwinięty pod przyciskiem „Wystaw receptę". */
.podglad-podpisu { margin-top: 14px; }
.podglad-podpisu summary { cursor: pointer; color: #5b6b7f; font-size: 13px; }
.podglad-podpisu[open] summary { margin-bottom: 8px; }

/* POLA RZADKO UŻYWANE -- zwinięte, żeby nie odsuwały przycisku „Wystaw receptę". */
.zwijane { margin: 10px 0; }
.zwijane summary { cursor: pointer; color: #5b6b7f; font-size: 13px; }
.zwijane[open] summary { margin-bottom: 8px; }

/* Na wąskim telefonie przyciski przy recepcie ZOSTAJĄ duże i czytelne -- wcześniej stała tu
   reguła zmniejszająca je do 11 px i to ona wygrywała z ustawieniami wyżej. (Piotr, 4.09.2026) */

/* Poprawianie danych pacjenta na liście. */
.pacjent-edycja { border-top: 1px solid var(--linia); margin-top: 10px; padding-top: 12px; }
.pacjent-edycja .rzad-przyciskow { align-items: center; }
/* DRUGI TELEFON (1.10.2026): mały znaczek kraju przy obcym numerze i cichy „+ drugi numer". */
.kraj-tel { display: inline-block; font-size: 10px; font-weight: 600; letter-spacing: .03em;
  padding: 0 4px; margin-right: 4px; border: 1px solid var(--linia); border-radius: 4px;
  color: #4a5a70; background: #f3f6fa; line-height: 15px; vertical-align: 1px; }
.pacjent-edycja .dodaj-telefon2 { font-size: 12px; padding: 0; margin: -4px 0 6px; }
.pacjent-edycja label.telefon2 .pod { font-weight: normal; }

/* eWUŚ: kolor mówi wszystko, zanim ktokolwiek przeczyta napis. */
.stan-ewus:empty { display: none; }
.stan-ewus { margin: 8px 0 12px; padding: 10px 12px; border-radius: 10px; font-size: 14px;
  background: var(--tlo); color: var(--pod); }
.stan-ewus.zielony { background: var(--dobrze-tlo); color: var(--dobrze); font-weight: 600; }
.stan-ewus.czerwony { background: var(--blad-tlo); color: var(--blad); font-weight: 600; }
.stan-ewus.nieznany { background: var(--uwaga-tlo); color: var(--uwaga); }

/* Wybór leków z poprzedniej recepty. */
.wybor-lekow { border: 1px solid var(--linia); border-radius: 12px; padding: 14px; margin: 4px 0 14px; }
.wybor-glowa { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.wybor-lek { display: flex; gap: 10px; align-items: flex-start; padding: 8px 6px;
  border-radius: 8px; cursor: pointer; }
.wybor-lek:hover { background: var(--tlo); }
.wybor-lek input { width: 20px; height: 20px; min-height: 0; margin-top: 2px; flex: none; }
.wybor-lek span { display: block; }
.wybor-lek em { display: block; font-style: normal; font-size: 13px; color: var(--pod); }
.wybor-lek.juz-jest { opacity: .55; cursor: default; }
.wybor-lek em.juz { color: var(--uwaga); }

/* USZKODZONA REGUŁA -- NAPRAWIONA 14.09.2026.
   Stały tu trzy samotne kropki zamiast nazw selektorów. Kropka nie jest selektorem, więc
   przeglądarka odrzuca taką regułę -- a razem z nią POŁYKA wszystko aż do następnej klamry,
   czyli cały blok `@media` poniżej. Skutek: na telefonie górny pasek się nie zawijał.
   Uszkodzenie jest starsze niż wszystkie paczki przywracania (jest już w tej z 10.09), więc
   oryginalnych nazw nie da się odzyskać. Nie wymyślam ich: reguła „kto wystawia recepty"
   i tak stoi niżej pod `.menu-kto`, a `header` w `@media` broni się sam.
   Znalezione przez `sprawdz-styl-sie-parsuje.mjs`, dopisany tego samego dnia. */
@media (max-width: 680px) {
  header { flex-wrap: wrap; }
}
.stan-ewus { cursor: pointer; }
.ewus-ponow { display: block; font-style: normal; font-size: 12px; opacity: .75; margin-top: 2px;
  font-weight: 400; }

/* Jeden przycisk w rzędzie -- na środku, żeby nie wisiał przy lewej krawędzi. */
.rzad-przyciskow.rzad-srodek { justify-content: center; }
.rzad-przyciskow.rzad-lewo { justify-content: flex-start; }

/* ZŁY PESEL WIDAĆ NA POLU -- czerwona ramka i delikatne tło. Podpis pod spodem mówi, co jest
   nie tak, ale samo pole musi rzucać się w oczy, zanim recepta pójdzie do P1. */
input.pole-zle { border-color: #d33 !important; background: #fff5f5 !important; }
input.pole-zle:focus { box-shadow: 0 0 0 3px rgba(211, 51, 51, .18) !important; }

/* --- CERTYFIKATY W GABINECIE -------------------------------------------------------------------
   Trzy kafelki obok siebie na komputerze, jeden pod drugim na telefonie. Plakietka w rogu mówi
   stan, zanim ktokolwiek przeczyta tabelkę: zielona „ważny", żółta „kończy się…", szara „brak". */
/* JEDEN POD DRUGIM (Piotr, 4.09.2026) -- trzy kafelki obok siebie ściskały tabelkę z danymi
   certyfikatu do dwóch wąskich kolumn; w pionie każdy ma całą szerokość. */
.siatka-certyfikatow { display: flex; flex-direction: column; gap: 12px; }
.cert { border: 1px solid var(--linia); border-radius: 12px; padding: 16px; background: var(--karta); }
.cert.jest { border-left: 4px solid var(--dobrze); }
.cert.brak { border-left: 4px solid var(--linia); background: var(--tlo); }
.cert-glowa { display: flex; justify-content: space-between; align-items: center; gap: 10px;
  margin-bottom: 8px; }
.cert-glowa b { font-size: 15px; }
.cert table { font-size: 13px; margin-top: 8px; }
.cert th { font-weight: 500; color: var(--pod); padding-right: 10px; white-space: nowrap; }
.cert td { word-break: break-word; }
.cert .stan { font-size: 12px; }
.plakietka { font-size: 11px; font-weight: 700; padding: 4px 9px; border-radius: 999px;
  white-space: nowrap; }
.plakietka.dobrze { background: var(--dobrze-tlo); color: var(--dobrze); }
.plakietka.uwaga { background: var(--uwaga-tlo); color: var(--uwaga); }
.plakietka.brak { background: var(--tlo); color: var(--pod); }
.plakietka.zle { background: var(--blad-tlo); color: var(--blad); }
.cert.po-terminie { border-left: 4px solid var(--blad); }
.cert-alarm { background: var(--blad-tlo); color: var(--blad); border-radius: 8px;
  padding: 8px 12px; font-size: 13px; font-weight: 600; margin: 8px 0; }
.cert-alarm.uwaga { background: var(--uwaga-tlo); color: var(--uwaga); }

/* Sprawdzenie połączenia: jedna linia — opis, wybór środowiska, przycisk. */
.polaczenie-p1 { display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap;
  border-top: 1px solid var(--linia); margin-top: 16px; padding-top: 16px; }
.polaczenie-p1 > div:first-child { flex: 1; min-width: 200px; }
.polaczenie-p1 p { margin: 2px 0 0; }
.polaczenie-p1 label { margin: 0; }
@media (max-width: 680px) {
  .polaczenie-p1 { flex-direction: column; align-items: stretch; }
  .polaczenie-p1 button { width: 100%; }
}
/* Pasek przypomnienia o certyfikatach -- żółty, a po terminie czerwony. */
.pasek-uwaga { background: var(--uwaga-tlo); color: var(--uwaga); }
.pasek-zle { background: var(--blad-tlo); color: var(--blad); font-weight: 600; }

/* ================================================================================================
   WARSZTAT WYSTAWIANIA RECEPTY -- układ dwukolumnowy (Piotr, 4.09.2026).
   Po lewej praca: pacjent, wyszukiwarka, leki. Po prawej gotowa recepta, przyklejona do ekranu.
   Zasada wizualna: mniej ramek, więcej powietrza i hierarchii. Ramka zostaje tylko tam, gdzie
   coś jest osobnym przedmiotem (lek, certyfikat, pacjent); reszta oddziela się odstępem
   i wielkością pisma.
   ============================================================================================== */
/* Jedna kolumna -- panel po prawej zdjęty 4.09.2026. Szerokość wraca do czytelnej miary:
   ~50-70 znaków w wierszu to najwygodniejsze czytanie. */

/* KROK: cienka linia z numerem zamiast kolejnej ramki. Numer mówi kolejność bez tłumaczenia. */
.krok { background: var(--karta); border: 1px solid var(--linia); border-radius: var(--r);
  padding: 22px 24px; margin-bottom: 18px; }
.krok-glowa, .panel-glowa { display: flex; align-items: center; gap: 10px;
  margin: 0 0 18px; padding-bottom: 12px; border-bottom: 1px solid var(--linia); }
.krok-glowa h2, .panel-glowa h2 { margin: 0; font-size: 15px; font-weight: 600;
  letter-spacing: .02em; text-transform: uppercase; color: var(--pod); }
.krok-nr { flex: none; width: 26px; height: 26px; border-radius: 50%; display: grid;
  place-items: center; background: var(--akcent-tlo); color: var(--akcent);
  font-size: 13px; font-weight: 700; }

/* Etykiety drobne i szare, wartości duże -- hierarchia zamiast obwódek. */
.krok label { font-size: 12.5px; color: var(--pod); letter-spacing: .01em; }
.krok label input, .krok label select { font-size: 15.5px; color: var(--tekst); }

/* PANEL RECEPTY -- przyklejony, wąski, spokojny. */
.panel-recepty { position: sticky; top: 76px; }
.panel-srodek { background: var(--karta); border: 1px solid var(--linia); border-radius: var(--r);
  padding: 20px; box-shadow: var(--karta-cien); }
.p-osoba { display: flex; flex-direction: column; gap: 2px; padding-bottom: 14px;
  border-bottom: 1px solid var(--linia); margin-bottom: 12px; }
.p-osoba b { font-size: 17px; letter-spacing: -.01em; }
.p-osoba em { font-style: normal; font-size: 12.5px; color: var(--pod); }
.p-osoba .plakietka { align-self: flex-start; margin-top: 6px; }
.p-pusto { color: var(--pod); font-size: 13.5px; padding: 10px 0; }
.p-leki { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.p-leki li { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; }
.p-lek b { display: block; font-size: 14px; line-height: 1.35; }
.p-lek em { display: block; font-style: normal; font-size: 12px; color: var(--pod); margin-top: 2px; }
.p-kwota { font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
.p-suma { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--linia);
  font-size: 12.5px; color: var(--pod); }
.panel-srodek .blad { margin-top: 10px; }
.panel-srodek #wystaw { width: 100%; margin-top: 14px; font-size: 16px; min-height: 52px; }

/* Na telefonie i wąskim laptopie: jedna kolumna, panel na dole. */
@media (max-width: 1000px) {
  .warsztat { grid-template-columns: minmax(0, 1fr); }
  .panel-recepty { position: static; }
  .krok { padding: 18px; }
}

/* Etykieta nad polem: drobna, wielkimi literami, wyraźnie oddzielona od wartości. */
.krok label { display: block; margin-bottom: 14px; font-size: 11.5px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase; color: var(--pod); }
.krok label input, .krok label select, .krok label textarea { margin-top: 6px; }

/* Wystawienie recepty -- osobny blok na dole kolumny, żeby przycisk nie zlewał się z listą. */
.wystawienie { background: var(--karta); border: 1px solid var(--linia); border-radius: var(--r);
  padding: 18px 24px 22px; }
.wystawienie #wystaw { width: 100%; min-height: 54px; font-size: 17px; }

/* WYSZUKIWARKA LEKÓW -- pierwsze pole, od którego zaczyna się recepta. Większe od pozostałych,
   z lupą i wyraźniejszą ramką; po kliknięciu podnosi się delikatnym cieniem. */
.szukajka { position: relative; margin-bottom: 16px; }
.szukajka-lupa { position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
  font-size: 18px; opacity: .5; pointer-events: none; }
.szukajka input {
  font-size: 17px; font-weight: 500; min-height: 58px; padding: 14px 16px 14px 48px;
  background: #fff; border: 2px solid var(--linia-mocna); border-radius: 12px;
}
.szukajka input::placeholder { color: #94a3b8; font-weight: 400; }
.szukajka input:hover { border-color: var(--akcent); background: #fff; }
.szukajka input:focus { border-color: var(--akcent); background: #fff;
  box-shadow: 0 0 0 4px rgba(37, 99, 235, .12), 0 6px 18px rgba(15, 23, 42, .06); }

/* ROZPOZNANIE = NIEBIESKIE, LEK = ZIELONY (Piotr, 26.09.2026: gubił się, które pole jest które).
   Kolor ramki stoi zawsze, nie tylko po najechaniu -- i napis nad polem nie znika przy pisaniu. */
.szukajka-podpis { display: block; font-size: 15px; font-weight: 700; margin: 0 0 6px 2px; }
.szukajka-podpis-rozpoznanie { color: var(--akcent); }
.szukajka-podpis-lek { color: var(--dobrze); }
.szukajka-rozpoznanie input, .szukajka-rozpoznanie input:hover,
.szukajka-rozpoznanie input:focus { border-color: var(--akcent); }
.szukajka-lek input, .szukajka-lek input:hover, .szukajka-lek input:focus { border-color: var(--dobrze); }
.szukajka-lek input:focus { box-shadow: 0 0 0 4px rgba(21, 128, 61, .12), 0 6px 18px rgba(15, 23, 42, .06); }
.szukajka-rozpoznanie .szukajka-lupa, .szukajka-lek .szukajka-lupa { opacity: .9; }

/* PYTANIE O LEK -- odpowiedź złożona z cytatów.
   Cytat ma wyglądać jak cytat: wcięcie, kreska z boku, treść czytelna jak w książce.
   Znalezione słowo podkreślamy żółtym, żeby oko trafiało w nie od razu, bez czytania
   całego akapitu. Nazwa leku i numer punktu stoją nad cytatem -- bez nich nie da się
   sprawdzić w źródle, a to jest tu warunek. */
.problem.aktywny { border-color: var(--akcent); background: var(--akcent-tlo);
  color: var(--akcent); font-weight: 600; }

.odp-ile { color: var(--pod); font-size: 13px; margin: 14px 0 10px; }

.cytat-chpl { border-left: 3px solid var(--akcent); background: var(--karta);
  border-radius: 0 10px 10px 0; padding: 12px 14px; margin: 0 0 10px; }
.cytat-glowa { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px;
  margin-bottom: 6px; }
.cytat-glowa b { font-size: 15px; }
.cytat-glowa .pod { font-size: 13px; }
/* NAZWA KLASY MUSI BYC INNA NIZ `.punkt-chpl` ze strony z wiedza o leku. Ta sama nazwa
   pomalowala tam wszystkie naglowki punktow na niebiesko. (Piotr, 5.09.2026: „usun te
   niebieskie tlo".) */
.cytat-punkt { margin-left: auto; background: var(--akcent-tlo); color: var(--akcent);
  border-radius: 999px; padding: 3px 10px; font-size: 12px; font-weight: 600;
  white-space: nowrap; }
.cytat-tresc { margin: 0 0 8px; font-size: 14.5px; line-height: 1.62; }
.cytat-tresc mark { background: #fef3c7; color: inherit; border-radius: 3px; padding: 0 2px; }
.cytat-chpl .cichy { padding: 4px 0; font-size: 13px; }

/* NA TELEFONIE numer punktu przechodzi pod nazwę -- inaczej ściska nazwę leku do dwóch liter. */
@media (max-width: 560px) {
  .cytat-punkt { margin-left: 0; }
}

/* ŚWIEŻO WYSTAWIONA RECEPTA -- ta, którą przed chwilą kliknięto „Wystaw".
   Lista pokazuje same nazwiska, więc bez tego nowa recepta chowa się w grupie i lekarz
   szuka przycisku „Wyślij do P1". Obwódka gaśnie sama po kilku sekundach. */
.recepta.recepta-swieza {
  outline: 2px solid var(--akcent);
  outline-offset: 2px;
  border-radius: 12px;
  animation: swieza-gasnie 6s ease-out forwards;
}
@keyframes swieza-gasnie {
  0%, 60% { outline-color: var(--akcent); }
  100% { outline-color: transparent; }
}

/* PRZEJŚCIE DO FINANSÓW -- to osobny program, więc i wygląda inaczej niż zakładki: nie jest
   zakładką, tylko wyjściem na zewnątrz. */
h
h

/* WIZYTA. Jedna kolumna, sekcje jak kartki, duże pola do pisania. Nagłówek z pacjentem
   przykleja się do góry: przy długim wywiadzie zawsze ma być widać, czyja to wizyta. */
.lista-wizyt { display: grid; gap: 8px; margin-top: 12px; }
.wizyta-wiersz { display: grid; grid-template-columns: 110px 1fr auto; gap: 14px; align-items: center;
  text-align: left; background: var(--karta); border: 1px solid var(--linia); border-radius: 12px;
  padding: 12px 14px; cursor: pointer; font: inherit; }
.wizyta-wiersz:hover { border-color: var(--akcent); }
.wizyta-wiersz .kiedy { display: flex; flex-direction: column; }
.wizyta-wiersz .kiedy b { font-size: 14px; }
.wizyta-wiersz .kiedy span { font-size: 12.5px; color: var(--pod); }
.wizyta-wiersz .kto b { font-size: 15px; }
.wizyta-wiersz .kto .pod { display: block; font-size: 12px; }
.wizyta-wiersz .czym { display: flex; gap: 5px; flex-wrap: wrap; justify-content: flex-end; }

.wizyta-glowa { position: sticky; top: 0; z-index: 5; background: var(--tlo);
  border-bottom: 1px solid var(--linia); padding: 10px 0 12px; margin-bottom: 14px;
  display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-start; }
.wizyta-glowa .wizyta-kto { flex: 1 1 260px; }
.wizyta-glowa h2 { margin: 4px 0 2px; font-size: 21px; letter-spacing: -.01em; }
/* PASEK POD NAZWISKIEM MUSI SIE ZAWIJAC.
   Stoi w nim piec rzeczy: ubezpieczenie, "sprawdz w eWUS", "Poprzednie wizyty",
   "Cala dokumentacja" i "Usun wizyte". Kazdy przycisk ma white-space: nowrap, a rzad
   nie zawijal sie wcale -- wiec na waskim ekranie OSTATNI wypadal poza krawedz.
   Ostatni byl kosz, dodany 15.09.2026, i Piotr zglosil to tego samego wieczoru:
   "nie ma kosza". To nie byl brak przycisku, tylko przycisk za krawedzia ekranu. */
.wizyta-ubezp { display: flex; align-items: center; gap: 10px; margin-top: 6px;
  flex-wrap: wrap; }
.ubezp { font-size: 13px; font-weight: 600; border-radius: 999px; padding: 3px 12px; }
.ubezp.tak { background: var(--dobrze-tlo); color: var(--dobrze); }
.ubezp.nie { background: #fef2f2; color: var(--blad); }
.ubezp.nieznane { background: var(--tlo); color: var(--pod); }
.wizyta-kiedy { display: flex; gap: 10px; align-items: flex-end; }
.wizyta-kiedy label { font-size: 12px; color: var(--pod); display: flex; flex-direction: column; gap: 4px; }
.wizyta-kiedy input { padding: 8px 10px; font: inherit; font-size: 14px;
  border: 1.5px solid var(--linia); border-radius: 9px; background: var(--karta); }
.wizyta-zapis { font-size: 12px; color: var(--dobrze); padding-bottom: 10px; }
.wizyta-zapis.pisze { color: var(--pod); }
.wizyta-zapis.blad { color: var(--blad); font-weight: 600; }
/* „Zapisz wizytę" stoi w jednej linii z dniem, godziną i napisem o zapisie -- na końcu paska,
   żeby nie rozpychał pól. Autozapis działa dalej; ten przycisk jest do zapisania świadomie. */
/* Reguła `#wizyta-zapisz { margin-left:auto }` stała tu od czasów, gdy przycisk siedział
   w prawym górnym rogu karty. Przycisk wrócił 10.09.2026 na DÓŁ, do rzędu z „Drukuj" i „Poproś
   o opinię" -- a stara reguła odpychała go na prawy koniec tego rzędu i rwała go na pół. */

.wizyta-sekcja { margin-bottom: 14px; }
.wizyta-sekcja h3 { margin: 0 0 4px; font-size: 16px; }
.wizyta-sekcja textarea { width: 100%; margin-top: 8px; padding: 12px 14px; font: inherit;
  font-size: 15px; line-height: 1.6; border: 1.5px solid var(--linia); border-radius: 12px;
  background: #fbfcfd; resize: vertical; }
.wizyta-sekcja textarea:focus { outline: none; border-color: var(--akcent); background: #fff; }
.wizyta-pola { display: grid; gap: 12px; }
.wizyta-pola.dwa { grid-template-columns: 1fr 1fr; }
.wizyta-pola label { display: flex; flex-direction: column; gap: 5px; font-size: 12.5px;
  color: var(--pod); }
.wizyta-pola input { padding: 10px 12px; font: inherit; font-size: 15px; color: var(--tekst);
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd; }

/* RZĄD „DODAJ USŁUGĘ" OPISUJE JEDEN BLOK -- TEN NA KOŃCU PLIKU.
   Stały tu jego starsze reguły (44 px wysokości, `min-width:90px`), a niżej, w części „DWA RZĘDY
   DODAJ", stoją te same własności raz jeszcze -- z innymi liczbami. Przy równej sile wygrywa
   późniejsza, więc ta połowa pliku od dawna niczego nie ustawiała, a przy każdej poprawce
   wyglądała, jakby ustawiała. Została jedna reguła: wcięcie pod lupę ma większą siłę zapisu
   i naprawdę działa. */
.dodaj-usluge .szukajka .szukajka-lupa ~ input { padding-left: 34px; }

@media (max-width: 760px) {
  .dodaj-usluge { flex-wrap: wrap; }
  .dodaj-usluge .pole-usluga { flex: 1 1 100%; }
}
.dodaj-usluge input[type=number] { width: 92px; padding: 10px 12px; font: inherit;
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd; }
.dodaj-usluge input.waskie { width: 120px; padding: 10px 12px; font: inherit;
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd; }
.dodaj-usluge button { width: auto; }

.tabela-uslug { width: 100%; border-collapse: collapse; margin-top: 6px; font-size: 14.5px; }
.tabela-uslug td { padding: 8px 6px; border-bottom: 1px solid var(--linia); }
.tabela-uslug td.ile, .tabela-uslug td.kwota { text-align: right; white-space: nowrap; }
.tabela-uslug tfoot td { border-bottom: none; border-top: 2px solid var(--linia-mocna);
  font-size: 15px; }

.lista-rozpoznan { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.lista-rozpoznan li { display: flex; align-items: center; gap: 8px; background: var(--tlo);
  border-radius: 9px; padding: 8px 12px; font-size: 14.5px; }
.lista-rozpoznan .kod { font-weight: 700; color: var(--akcent); }
.lista-rozpoznan button, .lista-zalacznikow button { margin-left: auto; width: auto; padding: 2px 8px; }

/* PASEK „WYSTAW" W JEDNEJ LINII (Piotr, 20.09.2026: „masz pasek wystaw: receptę, leki,
   skierowanie, badania, BIOVIS, zaświadczenie, zwolnienie. Wszystko ma być w jednej linii.
   Nie ma być w dwóch liniach").
   Było `repeat(auto-fit, minmax(170px, 1fr))` -- przy siedmiu kafelkach to 1262 px, więcej
   niż szerokość karty, więc ostatnie zjeżdżały do drugiego rzędu.
   `grid-auto-flow: column` stawia WSZYSTKIE dzieci w jednym rzędzie, ile by ich nie było --
   i to jest tu kluczowe, bo liczba kafelków zależy od kupionych klocków (BIOVIS ma nie każdy).
   Sztywne `repeat(7, ...)` psułoby się przy sześciu i przy ośmiu.
   Kafelek robi się PIONOWY: ikona na górze, nazwa pod nią. Poziomy (ikona obok nazwy) nie
   zmieści „Zaświadczenia" w 145 px.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: przy ósmym kafelku zrobi się ciasno -- wtedy skraca się
   opisy, a nie wraca do zawijania. Na wąskim ekranie (reguła niżej) rząd celowo zawija. */
.narzedzia-wizyty { grid-template-columns: none; grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr); gap: 8px; }
.narzedzia-wizyty .narzedzie { grid-template-columns: 1fr;
  grid-template-areas: 'ikona' 'tytul' 'opis';
  text-align: center; align-items: start; gap: 2px; padding: 10px 8px; border-radius: 12px;
  min-width: 0; }
.narzedzia-wizyty .narzedzie .tytul { font-size: 13.5px; }
.narzedzia-wizyty .narzedzie .opis { font-size: 11px; line-height: 1.3;
  overflow-wrap: anywhere; }
.narzedzia-wizyty .narzedzie.wkrotce { opacity: .55; cursor: default; }
.narzedzia-wizyty .narzedzie .ikona { font-size: 19px; }
.lista-recept-wizyty { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 6px; }
.lista-recept-wizyty li { background: var(--tlo); border-radius: 9px; padding: 8px 12px;
  font-size: 14px; }
.lista-zalacznikow { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; }
.lista-zalacznikow li { display: flex; align-items: center; gap: 10px; background: var(--tlo);
  border-radius: 9px; padding: 8px 12px; font-size: 14px; }

/* KODY LABORATORIÓW -- po jednym kafelku na laboratorium (19.09.2026). */
.kod-lab-wiersz {
  display: inline-flex; flex-direction: column; gap: 6px; align-items: flex-start;
  border: 1px solid var(--linia); border-radius: 10px; padding: 10px 12px;
  margin: 0 10px 10px 0; background: var(--karta);
}
.kod-lab-wiersz b { font-size: 14px; }

/* PANEL ZARZĄDZANIA GABINETEM -- spis po lewej, jedna karta na ekranie (Piotr, 19.09.2026).
   Na szerokim ekranie spis stoi pionowo przy krawędzi, na telefonie zawija się w rząd pastylek.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: bez `position: sticky` spis ucieka do góry przy dłuższej
   karcie (certyfikaty, godziny) i trzeba przewijać w górę, żeby przejść do następnej rzeczy. */
.panel-spis {
  display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 16px;
  padding: 0 0 14px; border-bottom: 1px solid var(--linia);
}
.panel-spis button {
  font: inherit; font-size: 14px; font-weight: 600; color: var(--tekst);
  background: var(--karta); border: 1.5px solid var(--linia-mocna); border-radius: 999px;
  padding: 9px 16px; min-height: 42px; cursor: pointer;
  transition: border-color .15s, background .15s, color .15s;
}
.panel-spis button:hover { border-color: var(--akcent); color: var(--akcent); }
.panel-spis button.wybrany {
  background: var(--akcent); border-color: var(--akcent); color: #fff;
}

/* OKIENKO WYBORU PÓL DO DRUKU. */
.nakladka { position: fixed; inset: 0; background: rgba(15, 23, 42, .45); display: flex;
  align-items: center; justify-content: center; padding: 20px; z-index: 50; }
.okienko { background: var(--karta); border-radius: 16px; padding: 22px 24px; max-width: 420px;
  width: 100%; box-shadow: 0 20px 60px rgba(15, 23, 42, .3); }
.okienko h3 { margin: 0 0 4px; font-size: 18px; }
.okienko .wybor { display: flex; align-items: center; gap: 10px; font-size: 15px; margin: 8px 0; }
.okienko .wybor input { width: auto; }

/* OKNO WYBORU DO DRUKU -- PRZEBUDOWANE 19.09.2026 (Piotr, ze zrzutem: „to w ogóle tego nie da
   się obsługiwać (...) ułóż mi to, żeby było prosto, żeby wszystko tam pracowało, przesuwało
   się sprawnie i żeby to było praktyczne").

   Zasada jest jedna: JEDNO MIEJSCE, KTÓRE SIĘ PRZEWIJA. Tytuł stoi na górze, przyciski na dole,
   a przewija się wyłącznie środek. Pola układają się w dwie kolumny, więc widać je naraz. */
.okienko.okno-druku {
  max-width: 620px; padding: 0; max-height: 88vh;
  display: flex; flex-direction: column; overflow: hidden;
}
.okno-druku > .glowa-okna {
  padding: 16px 20px 12px; border-bottom: 1px solid var(--linia); flex: 0 0 auto;
}
.okno-druku > .glowa-okna h3 { margin: 0; font-size: 17px; }
.okno-druku > .glowa-okna .pod { margin: 4px 0 0; font-size: 13px; }
.okno-druku > .srodek-okna {
  padding: 12px 20px 14px; overflow-y: auto; flex: 1 1 auto; min-height: 0;
  overscroll-behavior: contain;
}
.okno-druku > .stopka-okna {
  padding: 12px 20px 14px; border-top: 1px solid var(--linia); flex: 0 0 auto;
  display: flex; gap: 10px; align-items: center; background: var(--karta);
}
.okno-druku > .stopka-okna .rzad-przyciskow { margin: 0; }
/* DWIE KOLUMNY PÓL. Wiersz jest niski i cały klikalny -- palec trafia w napis, nie tylko
   w kwadracik. */
.okno-druku .siatka-pol { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 14px; }
.okno-druku .siatka-pol .wybor {
  margin: 0; padding: 7px 8px; border-radius: 8px; font-size: 14.5px; cursor: pointer;
}
.okno-druku .siatka-pol .wybor:hover { background: var(--tlo); }
.okno-druku .osobno { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--linia);
  display: grid; gap: 4px; }
.okno-druku .osobno .wybor { margin: 0; padding: 7px 8px; border-radius: 8px; cursor: pointer; }
.okno-druku .osobno .wybor:hover { background: var(--tlo); }
.okno-druku .wybor-listy { display: flex; align-items: center; gap: 10px; padding: 6px 8px;
  font-size: 14.5px; }
.okno-druku .wybor-listy select { width: auto; flex: 1 1 auto; min-height: 40px; padding: 8px 12px;
  font-size: 15px; }
.okno-druku .zaznacz-wszystko { display: flex; gap: 8px; margin: 0 0 8px; }
.okno-druku .zaznacz-wszystko button { font-size: 13px; padding: 6px 12px; min-height: 34px; }
@media (max-width: 560px) {
  .okno-druku .siatka-pol { grid-template-columns: 1fr; }
  .nakladka { padding: 10px; align-items: flex-end; }
  .okienko.okno-druku { max-height: 92vh; }
}

@media (max-width: 560px) {
  .wizyta-wiersz { grid-template-columns: 1fr; gap: 6px; }
  .wizyta-wiersz .czym { justify-content: flex-start; }
  .wizyta-pola.dwa { grid-template-columns: 1fr; }
  .wizyta-glowa { position: static; }
}

/* ============================================================================================
   MENU Z BOKU -- PRZEPISANE JEDEN DO JEDNEGO Z FINANSÓW CEM (css/sidebar.css).
   Piotr, 5.09.2026: „miałeś zrobić nam w menu po lewej stronie identyczne jak mamy w finanse".
   Te same wymiary (216 px), ta sama marka z kwadratem, te same KAFELKI pozycji (białe, cienka
   ramka, zaokrąglenie 9 px) i ta sama zasada koloru: wybrana zakładka bierze kolor swojej
   rodziny, a nie jeden niebieski dla wszystkiego. Poniżej 760 px menu wjeżdża jako szufladka.
   ============================================================================================ */
#program { display: grid; grid-template-columns: 216px minmax(0, 1fr);
  align-items: start; min-height: 100dvh; }

#menu-boczne { grid-row: 1 / -1; width: 216px; position: sticky; top: 0; height: 100dvh;
  background: #fff; border-right: 1px solid #e2e8f0; display: flex; flex-direction: column;
  overflow: hidden; z-index: 30; }
/* ZNAK „SG" ODSWIEZA PROGRAM (Piotr, 13.09.2026) -- wiec ma wygladac na klikalny. */
.menu-marka { display: flex; align-items: center; gap: 10px; padding: 14px 16px;
  border-bottom: 1px solid #eef2f7; cursor: pointer; }
.menu-marka:hover .menu-znak { box-shadow: 0 4px 14px -2px rgba(37, 99, 235, .75); }
.menu-znak { width: 34px; height: 34px; flex: none; border-radius: 10px; color: #fff;
  display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px;
  background: linear-gradient(135deg, #3b82f6, #1d4ed8 65%, #1e3a8a);
  box-shadow: 0 4px 10px -3px rgba(37, 99, 235, .5); }
.menu-tytul { font-weight: 700; font-size: 14.5px; line-height: 1.2; letter-spacing: -.01em;
  color: #0f172a; }
.menu-kto { font-size: 11px; color: #2563eb; font-weight: 600; line-height: 1.3; }
.menu-zamknij { display: none; margin-left: auto; width: auto; border: 0; background: none;
  color: #94a3b8; font-size: 20px; line-height: 1; padding: 4px; }

#menu-boczne nav { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
  padding: 4px 0; scrollbar-width: none; -ms-overflow-style: none; }
#menu-boczne nav::-webkit-scrollbar { display: none; }
.menu-grupa { border-bottom: 1px solid #f1f5f9; padding: 0 10px 4px; }
.menu-grupa:last-of-type { border-bottom: 0; }
.menu-grupa-tytul { padding: 6px 6px 4px; font-size: 10.5px; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: #94a3b8; }

/* KAFELEK POZYCJI -- dokładnie ten sam co w Finansach. */
#menu-boczne nav button, #menu-boczne nav .link-zewnetrzny {
  position: relative; width: 100%; display: flex; align-items: center; gap: 9px;
  background: #fff; border: 1px solid #edf1f6; padding: 7px 12px; margin: 0 0 3px;
  font: inherit; font-size: 13.5px; line-height: 1.25; color: #334155; text-align: left;
  text-decoration: none; border-radius: 9px; cursor: pointer;
  transition: border-color .12s ease, background-color .12s ease; }
#menu-boczne nav button:hover, #menu-boczne nav .link-zewnetrzny:hover {
  background: #f8fafc; border-color: #dde5ef; }
#menu-boczne nav button span, #menu-boczne nav .link-zewnetrzny span {
  width: 20px; flex: none; text-align: center; font-size: 13px; }
/* Wybrana zakładka bierze kolor swojej rodziny -- tak jak w Finansach. */
#menu-boczne nav button.aktywna {
  background: color-mix(in srgb, var(--sekcja, #2563eb) 8%, #fff);
  border-color: color-mix(in srgb, var(--sekcja, #2563eb) 35%, #edf1f6);
  color: var(--sekcja, #2563eb); font-weight: 600; }

#menu-boczne #wyloguj { margin: 0; width: 100%; border-radius: 0; border: 0;
  border-top: 1px solid #eef2f7; padding: 12px 16px; text-align: center; }

.pasek-gorny { display: none; }
.menu-cien { display: none; }
.menu-hamburger { display: none; }

/* TREŚĆ BIERZE CAŁĄ STRONĘ. Do 5.09.2026 stał tu słupek 900 px -- dobry na telefonie, ale na
   laptopie zostawiał pół ekranu pustego. (Piotr: „zakładka wizyta, gabinet są małe na stronie
   -- powinny się dopasować do strony".) Czytelność linijki pilnujemy tam, gdzie się PISZE:
   pola tekstowe i karty mają własne szerokości. */
#program main { min-width: 0; max-width: none; margin: 22px 0 96px; padding: 0 24px; }
/* Paski ostrzegawcze zostają widoczne -- certyfikat po terminie zatrzymuje wystawianie recept
   w środku dnia przyjęć, więc to ostatnia rzecz, którą wolno schować. */
/* WSZYSTKO POZA MENU STOI W DRUGIEJ KOLUMNIE -- WPROST, A NIE „SAMO SIĘ UŁOŻY".
   (Piotr, 14.09.2026: „ani kalendarz się nie wyświetla (...) nic się nie wyświetla".)

   `#menu-boczne` ma `grid-row: 1 / -1`, ale w siatce BEZ ZDEFINIOWANYCH WIERSZY `-1` znaczy
   „koniec siatki jawnej", czyli wiersz pierwszy. Menu zajmowało więc jedno pole, a nie całą
   kolumnę -- i reszta układała się sama, po kolei, wpadając raz do lewej, raz do prawej.
   Dopóki wszystkie paski ostrzegawcze były schowane, przypadek działał na naszą korzyść.
   Gdy zapalił się choć JEDEN pasek, `main` lądował w KOLUMNIE MENU: 216 pikseli zamiast 1184.
   Menu było, treść była -- ale ściśnięta do paska szerokości menu i niewidoczna.

   Teraz nic nie zależy od kolejności: menu trzyma kolumnę pierwszą, wszystko inne drugą. */
/* MENU TRZYMA CAŁĄ KOLUMNĘ, NIE JEDEN WIERSZ.
   `1 / -1` liczy się do końca siatki JAWNEJ, a ta nie ma zdefiniowanych wierszy -- więc menu
   zajmowało jeden wiersz, a wszystko pod nim schodziło NIŻEJ, poza ekran. `span 99` obejmuje
   każdy wiersz, który się zrobi, niezależnie od tego, ile pasków ostrzegawczych się zapali. */
#program > #menu-boczne { grid-column: 1; grid-row: 1 / span 99; }
#program > header,
#program > .pasek,
#program > main { grid-column: 2; }
#program > .pasek { margin: 0; }

@media (max-width: 760px) {
  #program { display: block; }
  #menu-boczne { position: fixed; top: 0; left: 0; bottom: 0; height: auto; width: 82vw;
    max-width: 300px; transform: translateX(-100%); transition: transform .22s ease;
    box-shadow: 10px 0 40px rgba(15, 23, 42, .22); border-right: 0; }
  #menu-boczne.otwarte { transform: translateX(0); }
  #menu-boczne nav button, #menu-boczne nav .link-zewnetrzny { padding-top: 10px;
    padding-bottom: 10px; font-size: 14.5px; }
  .menu-zamknij { display: block; }
  .menu-cien { display: block; position: fixed; inset: 0; background: rgba(15, 23, 42, .32);
    z-index: 25; }
  .pasek-gorny { display: flex; align-items: center; gap: 12px; padding: 10px 14px;
    background: #fff; border-bottom: 1px solid #e2e8f0; position: sticky; top: 0; z-index: 20; }
  .pasek-gorny-tytul { font-weight: 700; font-size: 16px; }
  .menu-hamburger { display: flex; align-items: center; justify-content: center; width: 38px;
    height: 38px; flex: none; border: 1px solid #e2e8f0; border-radius: 9px; background: #fff;
    font-size: 17px; color: #334155; }
  #program main { margin: 16px auto 96px; padding: 0 14px; }
}

/* SKĄD TU JESTEŚ -- pasek nad formularzem recepty, gdy powstaje ona do konkretnej wizyty. */
.pasek-wizyty { display: flex; align-items: center; gap: 12px; background: var(--akcent-tlo);
  color: var(--akcent-ciemny); border: 1px solid #bfdbfe; border-radius: 12px;
  padding: 10px 14px; margin-bottom: 14px; font-size: 14px; }
.pasek-wizyty button { width: auto; margin-left: auto; }

/* FINANSE JAKO PODPIĘTY MODUŁ -- ich zakładki w naszym menu, ale jako odnośniki.
   Nagłówek oddziela je od tego, co rysuje sam gabinet: żeby było wiadomo, że klik otwiera
   drugi program w nowej karcie. */
.menu-naglowek-modulu { margin: 10px 10px 2px; padding: 8px 10px 4px; border-top: 1px solid #e2e8f0;
  font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: #b45309; }
.menu-grupa-finanse .link-zewnetrzny { font-size: 13px; color: #475569; }

/* FINANSE W ŚRODKU GABINETU -- ta sama strona, to samo menu po lewej.
   Ramka zajmuje całą wysokość okna poniżej paska, żeby wyglądała jak zwykła zakładka,
   a nie jak okienko w okienku. */
.pasek-modulu { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--pod);
  padding: 0 0 8px; }
.pasek-modulu b { color: var(--tekst); }
.pasek-modulu a { margin-left: auto; font-size: 12.5px; color: var(--pod); text-decoration: none;
  border: 1px solid var(--linia); border-radius: 999px; padding: 4px 12px; }
.pasek-modulu a:hover { color: var(--akcent); border-color: var(--akcent); }
/* NA CZAS FINANSÓW TREŚĆ IDZIE NA CAŁĄ SZEROKOŚĆ. Ich tabele (przychody, koszty, KSeF) nie
   mieszczą się w słupku 900 px -- na laptopie wyglądało to jak patrzenie przez dziurkę. */
#program main.na-caly-ekran { max-width: none; margin: 0; padding: 10px 14px 0; }
/* `dvh` ZAMIAST `vh` -- ROZNICA TO PASEK ADRESU TELEFONU.
   Znalezisko przegladu telefonicznego 5.09.2026: `100vh` na telefonie liczy sie tak, jakby paska
   adresu nie bylo, wiec dol ramki (ostatni wiersz tabeli w Finansach) siedzial pod nim i nie dalo
   sie do niego doskrolowac. `dvh` mierzy to, co widac naprawde. */
/* WYSOKOŚĆ USTAWIA PROGRAM, NIE TA REGUŁA (patrz `dopasujRamkeFinansow` w app.js).
   Tutaj zostaje tylko pierwsze przybliżenie, zanim skrypt zdąży zmierzyć. Liczba na sztywno
   zawsze się zestarzeje: gdy nad ramką przybywa paska, ramka wychodzi poza dół okna i trzeba
   przewijać całą stronę (tak się stało po dodaniu paska rozmowy, 19.09.2026). */
.ramka-finansow { display: block; width: 100%; height: calc(100dvh - 56px);
  border: 1px solid var(--linia); border-radius: 12px; background: #fff; }
#zakladka-finanse { margin-bottom: 0; }
@media (max-width: 760px) {
  #program main.na-caly-ekran { padding: 8px 10px 0; }
  .ramka-finansow { height: calc(100dvh - 108px); }
}

/* SZEROKIE EKRANY: WIZYTA I LEKI KORZYSTAJĄ Z CAŁEGO LAPTOPA.
   (Piotr, 5.09.2026: „nowa wizyta powinna dopasować się do ekranu", „leki tak samo".)
   Formularz recepty i Gabinet zostają w wąskim słupku -- tam czyta się wiersz po wierszu
   i szeroka linijka tylko męczy oczy. */
#program main.na-caly-ekran { max-width: none; }

/* WIZYTA JEDNYM SŁUPKIEM, NA CAŁĄ SZEROKOŚĆ STRONY.
   Dwa słupki wyglądały porządnie, ale każde pole miało wtedy pół ekranu -- a przy wywiadzie
   i badaniu liczy się miejsce na pisanie. (Piotr, 5.09.2026: „jak dodaję wizytę, to pole jest
   na połowę strony, a powinno dopasowywać się do strony".) */

/* PIN ROBERTA W MENU -- ta sama zasłona co w Finansach (jego liczby nie mają świecić przez
   ramię). Nie jest to zabezpieczenie danych, tylko kurtyna na ekran. */
/* PIN JEDEN POD DRUGIM. Słupek menu ma 216 px i ucina to, co się nie mieści -- pole obok
   przycisku nie miało gdzie stanąć i wyglądało, jakby go w ogóle nie było.
   (Piotr, 5.09.2026: „nie ma miejsca na pin".) */
.pin-robert { display: block; padding: 2px 0 6px; }
.pin-robert input { display: block; width: 100%; max-width: 100%; box-sizing: border-box;
  min-width: 0; border: 1px solid var(--linia-mocna); border-radius: 8px; padding: 8px 10px;
  margin: 0 0 6px; font: inherit; font-size: 15px; letter-spacing: .25em; text-align: center;
  background: #fff; }
.pin-robert input.pole-zle { border-color: var(--blad); background: var(--blad-tlo); }
.pin-robert button { display: block; width: 100%; min-height: 34px; padding: 6px 12px;
  font-size: 13px; }
.zamek-robert { width: 100%; background: none; border: 1px dashed var(--linia-mocna);
  color: var(--pod); font-size: 12.5px; min-height: 34px; box-shadow: none; }

/* Pozycje Finansów nie mają ikon -- tak jak w oryginale. Wyrównujemy je do tekstu naszych
   zakładek, żeby słupek czytało się jednym rzutem oka. (Piotr, 5.09.2026: „po co te kropki".) */
.menu-grupa-finanse button { padding-left: 12px; }

/* SZEROKI EKRAN: KARTY UKŁADAJĄ SIĘ OBOK SIEBIE.
   Gabinet ma kilkanaście osobnych kart (dane praktyki, lekarz, certyfikaty, P1, poczta, eWUŚ) --
   jedna pod drugą robiła z tego kilometr do przewijania. Recepty i wizyty zostają w jednym
   słupku tam, gdzie się je składa. */
/* GABINET: JEDEN SŁUPEK, ALE NA CAŁĄ SZEROKOŚĆ STRONY.
   Karty idą jedna pod drugą, tak jak było (Piotr: „po co zmieniałeś w 2 piony") -- i zajmują
   całą stronę, bo o to poprosił zaraz potem („zakładkę gabinet dopasuj do szerokości strony").
   Same pola w środku kart mają swoje szerokości, więc nie rozjeżdżają się na całą linijkę. */
#zakladka-ustawienia { max-width: none; }

@media (min-width: 1180px) {
  #zakladka-lista .karta, #zakladka-leki .karta { max-width: none; }
  /* Formularz recepty zostaje czytelnym słupkiem -- tam wpisuje się wiersz po wierszu. */
  #zakladka-nowa { max-width: 980px; }
}

/* Podpowiedź pod „Otwórz Finanse" -- widoczna tylko do pierwszego zalogowania w ramce. */
.pod-menu { padding: 4px 12px 2px; font-size: 11.5px; line-height: 1.35; color: var(--pod); }

/* WIZYTA NA CAŁĄ SZEROKOŚĆ STRONY (Piotr, 5.09.2026: „nowa wizyta ma dostosować się do całej
   szerokości strony"). Sekcje rozciągają się razem z oknem, a pola w środku razem z sekcjami --
   nic nie zostaje przyklejone do lewej krawędzi ze sztywną szerokością. */
#zakladka-wizyta, #wizyta-widok, #wizyty-lista-widok { width: 100%; max-width: none; }
#wizyta-widok .karta { width: auto; }
.wizyta-sekcja textarea { width: 100%; box-sizing: border-box; }
/* POLE, KTORE ROSNIE Z TEKSTEM (Piotr, 22.09.2026: „dwie linijki tylko, a jak bede pisal,
   to bedzie sie rozszerzalo"). Wysokosc ustawia program (`dopasujWysokosc`), wiec:
   -- `overflow-y: hidden` -- pasek przewijania nigdy nie mignie, bo pole zawsze ma miare tresci;
   -- `resize: none` -- reczne ciagniecie za rog i tak znikneloby przy nastepnym znaku. */
.wizyta-sekcja textarea.rosnie { overflow-y: hidden; resize: none; }
.dodaj-usluge .szukajka { flex: 1 1 320px; }
.tabela-uslug { width: 100%; }

/* ZNACZEK PRZY POZYCJI MENU -- ten sam co w Finansach (`.cem-nav-icon`): mały kwadracik
   w kolorze rodziny zakładek. Kolor niesie znaczenie: niebieski przychód, zielony pieniądze
   pacjentów, bursztyn koszty, fiolet ludzie, pomarańczowy Robert. */
.ikona-menu { width: 20px; height: 20px; flex: none; border-radius: 6px; display: flex;
  align-items: center; justify-content: center; color: #fff; font-size: 11px; }
#menu-boczne nav button .ikona-menu { width: 20px; }
/* Nasze własne zakładki dostają taki sam kwadracik, w kolorze swojej sekcji. */
#menu-boczne .menu-grupa > button > span:first-child {
  width: 20px; height: 20px; flex: none; border-radius: 6px; display: inline-flex;
  align-items: center; justify-content: center; font-size: 11px;
  background: var(--sekcja, #64748b); color: #fff; }

/* KALENDARZ WIZYT. Miesiąc, tydzień albo dzień -- ta sama treść, inny krok.
   Dzień dzisiejszy ma obwódkę, dni z sąsiednich miesięcy są przygaszone, a wizyta w kratce
   to mały wiersz: godzina, nazwisko i numer gabinetu. */
.pasek-kalendarza { display: flex; flex-wrap: wrap; gap: 12px; align-items: center;
  justify-content: space-between; margin-bottom: 10px; }
.pasek-kalendarza strong { font-size: 17px; margin-left: 6px; }
.pasek-kalendarza .uklady { display: flex; gap: 6px; }
.pasek-kalendarza button.aktywna { background: var(--akcent); border-color: var(--akcent);
  color: #fff; }
.pasek-gabinetu { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-end;
  padding: 10px 0 14px; border-bottom: 1px solid var(--linia); margin-bottom: 12px; }
.pasek-gabinetu .etykieta { font-size: 13px; font-weight: 600; color: var(--pod);
  text-transform: uppercase; letter-spacing: .05em; align-self: center; }
.pasek-gabinetu label { display: flex; flex-direction: column; gap: 4px; font-size: 12px;
  color: var(--pod); }
.pasek-gabinetu input { width: 130px; padding: 8px 10px; font: inherit; font-size: 15px;
  border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd; }
.pasek-gabinetu .pod { align-self: center; }

.kal-naglowki { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px;
  font-size: 11.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--pod);
  padding: 0 2px 6px; }
.kal-siatka { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.kal-siatka.tydzien .kal-komorka { min-height: 220px; }
.kal-komorka { min-height: 108px; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 10px; padding: 6px; cursor: pointer; display: flex; flex-direction: column;
  gap: 4px; }
.kal-komorka:hover { border-color: var(--akcent); }
.kal-komorka.obcy { background: var(--tlo); opacity: .55; }
.kal-komorka.dzis { border-color: var(--akcent); box-shadow: 0 0 0 2px var(--akcent-tlo); }
.kal-numer { font-size: 12.5px; font-weight: 700; color: var(--tekst); }
.kal-numer .pod { font-weight: 400; }
.kal-wizyta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; width: 100%;
  text-align: left; font: inherit; font-size: 12.5px; min-height: 0; padding: 4px 7px;
  border-radius: 7px; border: 1px solid var(--akcent-tlo); background: var(--akcent-tlo);
  color: var(--akcent-ciemny); box-shadow: none; }
.kal-wizyta:hover { border-color: var(--akcent); background: #fff; }
.kal-wizyta.zamknieta { background: var(--dobrze-tlo); border-color: var(--dobrze-tlo);
  color: var(--dobrze); }
.kal-wizyta .godz { font-weight: 700; }
.kal-wizyta .kto { flex: 1 1 auto; overflow-wrap: anywhere; }
.kal-wizyta .gab { font-size: 11px; color: var(--pod); }
.kal-dzien { display: grid; gap: 8px; max-width: 640px; }
.kal-dzien .kal-wizyta { font-size: 15px; padding: 12px 14px; }
.kal-dodaj { margin-top: 8px; width: auto; justify-self: start; }

@media (max-width: 760px) {
  .kal-naglowki { display: none; }
  .kal-siatka { grid-template-columns: 1fr; }
  .kal-komorka { min-height: 0; }
  .kal-komorka.obcy { display: none; }
}

/* SIATKA GODZIN W DNIU I TYGODNIU. Wiersz = jedna kratka czasu (5-30 minut, do wyboru).
   Klik w pustą kratkę zakłada wizytę na tę godzinę; zapisana wizyta otwiera się dwuklikiem. */
.kal-godziny { display: grid; gap: 0; border: 1px solid var(--linia); border-radius: 12px;
  overflow: hidden; background: var(--karta); }
.kal-wiersz { display: grid; grid-template-columns: 62px repeat(var(--dni, 1), 1fr);
  border-bottom: 1px solid var(--linia-cicha); min-height: 26px; }
.kal-wiersz:last-child { border-bottom: 0; }
.kal-godzina { font-size: 11.5px; color: var(--pod); padding: 2px 8px; text-align: right;
  border-right: 1px solid var(--linia); }
.kal-kratka { border-right: 1px solid var(--linia-cicha); padding: 1px 3px; cursor: pointer;
  display: flex; flex-direction: column; gap: 2px; }
.kal-kratka:last-child { border-right: 0; }
.kal-kratka:hover { background: var(--akcent-tlo); }
.kal-kratka.zajeta { cursor: default; }
.kal-kratka.zajeta:hover { background: none; }
.kal-godziny-naglowek { display: grid; grid-template-columns: 62px repeat(7, 1fr); gap: 0;
  font-size: 12px; color: var(--pod); padding: 0 0 6px; text-align: center; }
.kal-godziny-naglowek .dzis { color: var(--akcent); font-weight: 700; }

/* Szukany pacjent świeci, reszta przygasa -- chodzi o to, ŻEBY GO ZOBACZYĆ w miesiącu. */
.kal-wizyta.znaleziona { background: #fef3c7; border-color: #fcd34d; color: #92400e;
  font-weight: 600; }
.kal-wizyta.przygaszona { opacity: .35; }
.kal-wizyta.wybrana { outline: 2px solid var(--akcent); outline-offset: 1px; }
.szukajka-kal { flex: 1 1 260px; max-width: 340px; margin: 0; }
#kal-skala .etykieta { font-size: 11.5px; color: var(--pod); text-transform: uppercase;
  letter-spacing: .05em; align-self: center; margin-right: 4px; }

@media (max-width: 760px) {
  .kal-wiersz { grid-template-columns: 48px repeat(var(--dni, 1), 1fr); }
  .kal-godziny-naglowek { grid-template-columns: 48px repeat(7, 1fr); font-size: 10.5px; }
}

/* GABINET POKAZANY W RAMCE INNEGO PROGRAMU (np. kalendarz w Finansach u Oli).
   Chowamy własne menu i pasek górny -- tamten program ma swoje, a dwa obok siebie tylko mylą. */
body.w-ramce #menu-boczne, body.w-ramce .pasek-gorny, body.w-ramce .menu-cien { display: none; }
body.w-ramce #program { display: block; }
body.w-ramce #program main { margin: 12px auto 24px; padding: 0 14px; }

/* MIESIĄC: nazwisko w jednej linijce z godziną, urwane kropkami, gdy się nie mieści.
   Kratka dnia rośnie do pięciu wizyt, potem sama się przewija -- dzień z dziesięcioma wizytami
   nie ma rozpychać całego miesiąca. */
.kal-siatka:not(.tydzien) .kal-komorka { min-height: 118px; max-height: 190px; overflow-y: auto; }
.kal-siatka:not(.tydzien) .kal-wizyta { display: block; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; }
.kal-siatka:not(.tydzien) .kal-wizyta .godz { margin-right: 5px; }
.kal-siatka:not(.tydzien) .kal-wizyta .kto { display: inline; }
.kal-siatka:not(.tydzien) .kal-wizyta .gab { display: none; }

/* Zgoda na wiadomości w danych pacjenta -- jedna kratka w linii, jak w „Dodaj przychód". */
.wybor-w-linii { display: flex; align-items: flex-start; gap: 10px; margin-top: 10px;
  font-size: 14px; color: var(--tekst); }
.wybor-w-linii input { width: auto; margin-top: 3px; }
.wizyta-pola select { padding: 10px 12px; font: inherit; font-size: 15px; color: var(--tekst);
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd; }

/* GWIAZDKA PRZY PACJENCIE -- ta sama informacja, co w Finansach („widok czy to vip czy nie").
   Gabinet jej nie liczy: dostaje samo tak/nie w adresie, bez kwot. */
.plakietka-vip{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;
  background:#fef3c7;color:#92400e;font-size:11.5px;font-weight:700;vertical-align:middle}

/* Ten sam wiersz mowi i o bledzie, i o powodzeniu -- zielony znaczy „zrobione". */
.blad.dobrze{color:var(--dobrze)}
/* Ekran „Wczytuję…" -- stoi przez ulamek sekundy miedzy wejsciem a programem. */
#wczytywanie p{margin:0;font-size:14px}

/* Pacjent to jedno pole na cale nazwisko i imie -- bierze cala szerokosc wiersza. */
.wizyta-pola.dwa .szeroko{grid-column:1 / -1}

/* „Jest w P1, bez kodu" -- recepta wystawiona naprawde, ale bez kodu dla pacjenta.
   Nie ma przy niej przycisku wysylki: drugie klikniecie zrobiloby druga prawdziwa recepte. */
.plakietka-uwaga{background:#fef3c7;color:#92400e;border:1px solid #fcd34d}

/* ========================================================================================
   TELEFON: POLA NIE MOGĄ PRZYBLIŻAĆ EKRANU
   ========================================================================================
   Bazowo pola mają 16 px właśnie po to, żeby telefon nie przybliżał strony przy dotknięciu
   (patrz komentarz na górze pliku). Ale SIEDEM miejsc nadpisywało to na 14–15,5 px -- i były
   to akurat te pola, których lekarz dotyka najczęściej: dane pacjenta przy wizycie, dzień
   i godzina, cały formularz recepty. Każde dotknięcie przybliżało stronę, a iPhone jej potem
   sam nie oddala.
   Na komputerze zostaje ciaśniej, tak jak było -- to reguła WYŁĄCZNIE dla małych ekranów.
   (Znalezisko przeglądu telefonicznego 5.09.2026.) */
@media (max-width: 760px) {
  input, select, textarea,
  .krok label input, .krok label select,
  .wizyta-kiedy input, .wizyta-pola input, .wizyta-pola select,
  .pasek-gabinetu input, .szukajka.mala input, .przelicznik-pola input {
    font-size: 16px;
  }
}

/* ========================================================================================
   TELEFON: WSZYSTKO MA SIĘ DAĆ TRAFIĆ PALCEM
   ========================================================================================
   Palec potrzebuje ok. 44 px. Przegląd telefoniczny 5.09.2026 znalazł kilkanaście miejsc
   poniżej tej miary -- a wśród nich rzeczy najgroźniejsze: krzyżyki „✕" usuwające usługę,
   rozpoznanie i załącznik (ok. 20 px) oraz „Usuń receptę". Najbardziej niszczący przycisk
   w programie był najmniejszy i najcichszy.
   Kratka godziny w kalendarzu miała 26 px, a kliknięcie w nią zakłada wizytę.
   Na komputerze nic się nie zmienia -- to reguły WYŁĄCZNIE dla małych ekranów. */
@media (max-width: 760px) {
  button.cichy,
  .lek-plakietka button,
  .lista-rozpoznan button, .lista-zalacznikow button,
  .surowiec button, .rodzaje button,
  button.male,
  .pin-robert button, .zamek-robert,
  .menu-zamknij {
    min-height: 44px; min-width: 44px;
    padding: 10px 12px; font-size: 13px; line-height: 1.2;
  }
  /* Hamburger to JEDYNE wejście do menu na telefonie -- nie może być najmniejszym celem. */
  .menu-hamburger { width: 44px; height: 44px; font-size: 18px; }
  #menu-boczne nav button, #menu-boczne nav .link-zewnetrzny { min-height: 44px; font-size: 15px; }
  /* Kliknięcie w kratkę godziny zakłada wizytę -- ma być trafialne za pierwszym razem. */
  .kal-wiersz { min-height: 40px; }
  .kal-wizyta { min-height: 40px; font-size: 13px; padding: 8px 10px; }
  /* Zwijane nagłówki („Dane pacjenta", „Podgląd podpisu") też dotyka się palcem. */
  .zwijane > summary, .podglad-podpisu > summary, .lek-ciaza > summary {
    min-height: 44px; display: flex; align-items: center;
  }
  /* Niepasujący pacjent po wyszukaniu MA ZOSTAĆ WIDOCZNY. Zgaszony do 35% czyta się na
     telefonie jak zniknięty -- a znikanie wygląda jak zepsuty program. */
  .kal-wizyta.przygaszona { opacity: .55; }
}

/* Podpis nad kodem dla apteki miał 9,5 px -- a czyta go pacjent przy okienku.
   Sam kod ma być tym, co na tym ekranie wygrywa. */
@media (max-width: 760px) {
  .kod-p1 span { font-size: 12px; }
  .kod-p1 b { font-size: 22px; }
}

/* ========================================================================================
   TELEFON: DODAWANIE USŁUGI I ROZPOZNANIA W DWÓCH WIERSZACH
   ========================================================================================
   Pasek „dodaj usługę" to szukajka + ilość + cena + przycisk, a „dodaj rozpoznanie" to
   rozpoznanie + kod + uwagi + przycisk. Na ekranie 390 px cztery pola obok siebie rozsypują
   się w strzępy: nazwa usługi zwęża się do kilku liter, a pole uwag spada w osobny wiersz
   i zostawia resztę w powietrzu. (Przegląd telefoniczny 5.09.2026.)

   Układ na telefonie: NAZWA bierze cały pierwszy wiersz -- to ona jest długa i to w nią się
   pisze. Drugi wiersz to reszta: dwie krótkie liczby i przycisk, każde po 44 px wysokości. */
@media (max-width: 760px) {
  .dodaj-usluge { gap: 8px; }
  .dodaj-usluge .szukajka { flex: 1 1 100%; }
  .dodaj-usluge > input:not(.szeroko) { flex: 1 1 0; width: auto; min-width: 0; min-height: 44px; }
  .dodaj-usluge input.waskie { flex: 0 1 110px; width: auto; }
  .dodaj-usluge button { flex: 0 0 auto; min-height: 44px; padding: 10px 18px; }
  /* Uwagi przy rozpoznaniu to zdanie, nie liczba -- należy im się cały wiersz. */
  .dodaj-usluge #rozp-uwaga { flex: 1 1 100%; min-height: 44px; }
}

/* ========================================================================================
   TELEFON: TABELA USŁUG JAKO LISTA, NIE PIĘĆ KOLUMN
   ========================================================================================
   Pięć kolumn (nazwa, ilość, cena, kwota, ✕) na 390 px daje po ~70 px na każdą: nazwa usługi
   rozsypuje się w pionowy słupek liter, a kwota powyżej 999 zł jest ucięta.
   (Przegląd telefoniczny 5.09.2026.)

   Na telefonie każda usługa to WIERSZ: nazwa u góry, pod nią „2 × 150,00 zł = 300,00 zł",
   a krzyżyk po prawej. Bez tabeli i bez ściskania. */
@media (max-width: 760px) {
  .tabela-uslug, .tabela-uslug tbody, .tabela-uslug tfoot,
  .tabela-uslug tr, .tabela-uslug td { display: block; width: auto; }
  .tabela-uslug tr {
    position: relative; padding: 10px 52px 10px 0;
    border-bottom: 1px solid var(--linia);
  }
  .tabela-uslug td { border: 0; padding: 0; }
  /* Nazwa -- pierwsza komórka, pełny wiersz, może się łamać. */
  .tabela-uslug td:first-child {
    font-weight: 600; font-size: 15px; white-space: normal; word-break: break-word;
    margin-bottom: 2px;
  }
  /* Ilość, cena i kwota w jednej linii pod nazwą. */
  .tabela-uslug td.ile, .tabela-uslug td.kwota {
    display: inline; text-align: left; white-space: nowrap;
    font-size: 14px; color: var(--pod);
  }
  .tabela-uslug td.kwota:last-of-type { color: var(--tekst); }
  .tabela-uslug td.kwota:last-of-type::before { content: ' = '; }
  /* Krzyżyk odsunięty na prawo, pełne 44 px do trafienia. */
  .tabela-uslug td:last-child {
    position: absolute; right: 0; top: 50%; transform: translateY(-50%);
  }
  .tabela-uslug tfoot tr { padding-right: 0; border-bottom: 0; border-top: 2px solid var(--linia-mocna); }
  .tabela-uslug tfoot td:first-child { font-weight: 700; }
}

/* MIEJSCOWOSCI ZNALEZIONE PO KODZIE POCZTOWYM W KARCIE WIZYTY (Piotr, 8.09.2026). Ten sam
   wyglad, co w Finansach: male, niebieskie, w jednej zawijanej linii, kazda do klikniecia. */
.wizyta-miasta{display:flex;flex-wrap:wrap;align-items:center;gap:3px 5px;margin-top:3px;
  font-size:11.5px;line-height:1.5;color:#1d4ed8}
.wizyta-miasta button{font:inherit;font-size:11.5px;color:#1d4ed8;background:#eff6ff;
  border:1px solid #bfdbfe;border-radius:6px;padding:1px 6px;margin:0;cursor:pointer;
  white-space:nowrap}
.wizyta-miasta button:hover{background:#dbeafe;border-color:#60a5fa}

/* === PASEK ZGÓD NA KARCIE WIZYTY ============================================================
   Piotr, 9.09.2026: „jeżeli są zgody już, to powinno się zaznaczyć, że są zgody, żebym nie
   musiał zaznaczać jeszcze raz zgód o e-mail i wizyty".

   TRZY STANY, TRZY KOLORY — bo trzeba je rozróżnić jednym spojrzeniem, nie czytaniem:
   zielony „jest", bursztynowy „nie ma", szary „jeszcze nie wiem". Szary NIGDY nie znaczy
   „brak zgody”: cisza z drugiego programu to nie odpowiedź. */
.wizyta-zgody{
  margin:10px 0 4px; padding:9px 12px; border-radius:8px; font-size:14px; line-height:1.5;
  border:1px solid transparent;
}
.wizyta-zgody .pod{color:inherit; opacity:.72; font-size:13px}
.wizyta-zgody .wycofana{font-weight:600}
.wizyta-zgody.jest{background:#e7f6ec; border-color:#9fd3b0; color:#14532d}
.wizyta-zgody.brak{background:#fdf3e0; border-color:#e5c07b; color:#7a4d09}
.wizyta-zgody.czekam{background:#f2f4f6; border-color:#dde2e7; color:#5a6672}

/* === ZNIŻKA I KWOTA W PRZYCHODACH (karta wizyty) ============================================
   Piotr, 9.09.2026: „powinienem móc dać zniżkę, albo procentową, albo kwotową" oraz
   „jak 2-3 usługi dopiszę, to powinno być w przychodzie odzwierciedlenie".

   Ten sam zestaw trzech kolorów, co przy zgodach — żeby jeden rzut oka wystarczył. */
/* ZNIŻKA STOI W TEJ SAMEJ LINII, CO DOPISYWANIE USŁUGI (Piotr, 9.09.2026: „usługi i produkty
   zrób w jednej linii z dodaniem zniżki"). To jedna czynność, nie dwie. */
/* ZNIZKA: WASKO. Dwa male pola obok siebie -- „%” albo „zl” i ile. Razem niecale 130px,
   zeby caly rzad zmiescil sie w jednej linii i zostalo miejsce na kwote koncowa. */
.dodaj-znizka{display:flex; align-items:stretch; gap:5px}
.dodaj-znizka select{width:66px; padding:10px 6px; font:inherit;
  border:1.5px solid var(--linia); border-radius:10px; background:#fbfcfd}
.dodaj-znizka input[type=number]{width:62px}
/* RACHUNEK: cena wyjściowa, ile schodzi, ile zostaje -- wszystkie trzy liczby obok siebie. */
.rachunek-uslug{
  display:flex; flex-wrap:wrap; gap:6px 18px; align-items:baseline;
  margin-top:10px; padding-top:9px; border-top:1px solid var(--linia); font-size:14.5px;
}
.rachunek-uslug b{font-variant-numeric:tabular-nums}
.rachunek-uslug .znizka-znak{color:#b54708}
.rachunek-uslug .do-zaplaty b{font-size:16px}
.wizyta-przychod{
  margin-top:10px; padding:9px 12px; border-radius:8px; font-size:14px; line-height:1.5;
  border:1px solid transparent;
}
.wizyta-przychod .pod{color:inherit; opacity:.72; font-size:13px}
.wizyta-przychod.jest{background:#e7f6ec; border-color:#9fd3b0; color:#14532d}
.wizyta-przychod.brak{background:#fdf3e0; border-color:#e5c07b; color:#7a4d09}
.wizyta-przychod.czekam{background:#f2f4f6; border-color:#dde2e7; color:#5a6672}
/* ZAPŁACONE NA ZIELONO (Piotr, 19.09.2026: „zielone to jest zapłacone").
   Mocniejsza zieleń niż `.jest`: tamto znaczy „kwota stoi w przychodach", a to --
   „pieniądze już są". Dwie różne wiadomości nie mogą wyglądać tak samo. */
.wizyta-przychod.zaplacone{background:#d6f0de; border-color:#4fae74; color:#0f4025}
.wizyta-przychod .zaplacone-znak{color:#0f4025; letter-spacing:.02em}
/* ZDANIE „ta wizyta jest już zapłacona — kwotę zmień w Finansach" pisane ZWYKŁYMI literami
   (Piotr, 20.09.2026). Zielone tło już mówi, że pieniądze są; pogrubienie dokładało krzyk. */
.wizyta-przychod .powod-przychodu{font-weight:400}

/* Wcześniejsze recepty pacjenta — panel pod przyciskiem ℞ na karcie wizyty (Piotr, 9.09.2026:
   „jak naciskam na receptę, to powinno być, jakie były wcześniej wystawione recepty"). */
.wizyta-wczesniejsze { margin-top: 12px; }
.wizyta-wczesniejsze h3 { margin-top: 0; }

/* === MIKROFON PRZY POLU WIZYTY ==============================================================
   Piotr, 9.09.2026: „chciałbym, żeby ten wywiad mógł być nagrywany, czyli jakąś ikonkę
   mikrofonu (...) planowanie tak samo", „i w planowaniu zrób".

   PIOTR MA W SYSTEMIE WŁĄCZONE OGRANICZENIE ANIMACJI i to jest tu istotne: „słucham" ma być
   widoczne SAMYM KOLOREM I NAPISEM, a puls jest dodatkiem. Przy ograniczeniu animacji puls
   zwalnia, ale NIE ZNIKA — inaczej zostałby sam kolor i nie byłoby wiadomo, że program słucha
   (to samo ustalenie, co przy pulsowaniu wpisu w kalendarzu Finansów). */
.wizyta-sekcja h3 { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.mikrofon {
  font-size: 13px; font-weight: 500; padding: 6px 12px; min-height: 36px;
  border: 1px solid var(--linia); border-radius: 8px; background: var(--karta);
  color: var(--tekst); cursor: pointer; white-space: nowrap;
}
.mikrofon:hover { border-color: var(--akcent); background: var(--akcent-tlo); }
.mikrofon.mowi {
  background: #d92d20; border-color: #d92d20; color: #fff;
  animation: mikrofon-puls 1.4s ease-in-out infinite;
}
@keyframes mikrofon-puls {
  0%, 100% { box-shadow: 0 0 0 0 rgba(217, 45, 32, .55); }
  50% { box-shadow: 0 0 0 7px rgba(217, 45, 32, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .mikrofon.mowi { animation-duration: 2.6s; }
}
.mikrofon-slychac {
  margin: 6px 0 4px; padding: 7px 10px; border-radius: 7px; font-size: 13.5px;
  background: #f2f4f6; color: #5a6672; min-height: 20px;
}
.mikrofon-slychac.nie-umie { background: #fdf3e0; color: #7a4d09; }
/* MIEJSCE NA „SŁYCHAĆ" STOI ZAWSZE (Piotr, 17.09.2026: „zakończ jakoś tak, żeby potem ten edytor
   nie przeskakiwał w dół"). Pasek pojawiał się i znikał, a pole pod nim skakało o dwa centymetry
   w chwili, gdy lekarz właśnie w nie celował. Teraz miejsce jest zarezerwowane, zmienia się
   tylko widoczność. */
.wizyta-sekcja .mikrofon-slychac[hidden],
.pole-z-edytorem .mikrofon-slychac[hidden] { display: block; visibility: hidden; }
/* Przycisk „Mów" nigdy nie chowa się za paskiem: stoi pierwszy i się nie zwija. */
.wizyta-sekcja > h3 .mikrofon,
.pole-z-edytorem .etykieta-pola .mikrofon { flex: 0 0 auto; min-height: 30px; padding: 4px 12px; }
.wizyta-sekcja > h3 .mikrofon.mowi,
.pole-z-edytorem .etykieta-pola .mikrofon.mowi { font-weight: 700; }

/* Skierowanie i zaświadczenie — formularz w karcie wizyty (Piotr, 9.09.2026: „dorób mi
   skierowanie na zabieg (...) zaświadczenie lekarskie też mi dorób"). */
.wizyta-dokument { margin-top: 12px; }
.wizyta-dokument h3 { margin-top: 0; }
.wizyta-blad { color: #b42318; font-size: 13.5px; align-self: center; }

/* Po zapisaniu skierowania albo zaświadczenia — potwierdzenie i droga do następnego
   (Piotr, 9.09.2026: „jak dodać kolejne skierowanie czy kolejne zaświadczenie?"). */
.wizyta-dokument.zapisane { background: #e7f6ec; border-color: #9fd3b0; }
.wizyta-dokument.zapisane p { margin-top: 0; color: #14532d; }

/* === SKIEROWANIA I ZAŚWIADCZENIA -- LISTA, BO JEST ICH KILKA =================================
   Piotr, 9.09.2026: „czasami piszę kilka zaświadczeń i kilka skierowań", a potem „nadal nie
   widzę możliwości wystawienia kilku skierowań oddzielnych na jednej wizycie".
   Numer przy każdym mówi wprost, że to lista, a nie pojedyncza czynność. */
.lista-dokumentow { list-style: none; margin: 10px 0 14px; padding: 0; display: grid; gap: 8px; }
.lista-dokumentow li {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 14px; border: 1px solid var(--linia); border-radius: 12px; background: var(--karta);
}
.lista-dokumentow li:hover { border-color: var(--akcent); }
/* NUMER W KÓŁKU -- widać jednym spojrzeniem, ile ich jest i że to lista, a nie jedna kartka. */
.lista-dokumentow .numer {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--akcent-tlo); color: var(--akcent); font-size: 13px; font-weight: 700;
}
.lista-dokumentow .co { flex: 1 1 auto; min-width: 0; }
.lista-dokumentow .co b { display: block; font-weight: 600; overflow-wrap: anywhere; }
.lista-dokumentow .co .pod { display: block; font-size: 12.5px; margin-top: 1px; }
.lista-dokumentow .co-z-tym { flex: 0 0 auto; display: flex; gap: 6px; align-items: center; }

/* === DWA RZĘDY „DODAJ" -- NA SAMYM KOŃCU PLIKU, ŻEBY NIC ICH NIE NADPISAŁO ===================
   Piotr, 9.09.2026: „usługi w jednej linii — rząd łamie się!!!" oraz „rozpoznanie ma być
   w jednej osobnej wierszu".

   DLACZEGO NA KOŃCU. Reguły dla `.dodaj-usluge` stały w połowie pliku, a NIŻEJ, w części
   o szerokości karty wizyty, siedziało `.dodaj-usluge .szukajka { flex: 1 1 320px }`. W CSS
   wygrywa ta późniejsza — więc pole nazwy dostawało 320 px podstawy i rząd się rozłaził.
   Trzymamy więc oba rzędy razem, na końcu, i wtedy widać, że rządzą właśnie one. */

/* --- USŁUGI: nazwa, ilość, cena, zniżka, Dodaj -- JEDNA LINIA -------------------------------- */
.dodaj-usluge { display: flex; flex-wrap: nowrap; gap: 8px; align-items: flex-end; margin: 8px 0; }
.dodaj-usluge > label { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dodaj-usluge .podpis { font-size: 11.5px; line-height: 1.2; color: var(--pod);
  white-space: nowrap; }
.dodaj-usluge .pole-usluga { flex: 1 1 auto; min-width: 0; }
.dodaj-usluge .szukajka { flex: 1 1 auto; margin: 0; display: block; min-width: 0; }
.dodaj-usluge .szukajka input { width: 100%; min-width: 0; padding-left: 12px; font-size: 15px; }
.dodaj-usluge .pole-male { flex: 0 0 auto; }
.dodaj-usluge .pole-male input[type=number] { width: 84px; }
.dodaj-usluge .pole-znizka { flex: 0 0 auto; }
.dodaj-usluge button { flex: 0 0 auto; width: auto; white-space: nowrap; }
/* POLA NIŻSZE (Piotr, 9.09.2026: „napisy rozpoznanie usługi mają za wysokie pola!!!").
   38px zamiast 44 -- wciąż wygodnie się w nie trafia myszką, a rząd przestaje być pasem. */
.dodaj-usluge input, .dodaj-usluge select, .dodaj-usluge button, .dodaj-usluge .szukajka input {
  min-height: 38px; height: 38px; box-sizing: border-box; padding-top: 0; padding-bottom: 0;
}

/* --- ROZPOZNANIE: WŁASNY WIERSZ, niezależny od usług ----------------------------------------- */
.dodaj-rozpoznanie { display: flex; flex-wrap: nowrap; gap: 8px; align-items: flex-end;
  margin: 8px 0; }
.dodaj-rozpoznanie > label { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dodaj-rozpoznanie .podpis { font-size: 11.5px; line-height: 1.2; color: var(--pod);
  white-space: nowrap; }
.dodaj-rozpoznanie input { width: 100%; min-width: 0; padding: 0 12px; font: inherit;
  font-size: 15px; border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd;
  min-height: 38px; height: 38px; box-sizing: border-box; }
.dodaj-rozpoznanie input:focus { border-color: var(--akcent); background: #fff; }
.dodaj-rozpoznanie .pole-rozp { flex: 2 1 0; min-width: 0; }
.dodaj-rozpoznanie .pole-kod { flex: 0 0 104px; }
.dodaj-rozpoznanie .pole-uwaga { flex: 1 1 0; min-width: 0; }
.dodaj-rozpoznanie button { flex: 0 0 auto; width: auto; white-space: nowrap;
  min-height: 38px; height: 38px; padding: 0 16px; }

/* NA TELEFONIE JEDNA LINIA SIĘ NIE MIEŚCI -- tam oba rzędy zawijają się jak dotąd. */
@media (max-width: 760px) {
  .dodaj-usluge, .dodaj-rozpoznanie { flex-wrap: wrap; }
  .dodaj-usluge .pole-usluga, .dodaj-rozpoznanie .pole-rozp { flex: 1 1 100%; }
  .dodaj-rozpoznanie .pole-uwaga { flex: 1 1 100%; }
}

/* Wystawione skierowania i zaświadczenia — zwarta grupa pod klockami w karcie „Wystaw"
   (Piotr, 9.09.2026: „wolę skierowania i zaświadczenia mieć w klockach jak recepta").
   Nagłówek grupy jest mniejszy niż nagłówek sekcji — to lista W ŚRODKU „Wystaw", nie
   osobna część karty wizyty. */
.dokumenty-grupa { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--linia); }
.dokumenty-grupa h4 { margin: 0 0 2px; font-size: 14px; font-weight: 600; }
.dokumenty-grupa > .pod { margin: 0 0 6px; font-size: 12.5px; }

/* PRZYCISKI POD WIZYTĄ MÓWIĄ, CO ZOSTAŁO DO ZROBIENIA.
   Piotr, 10.09.2026: „te wszystkie przyciski powinny być podświetlone (…) jak nacisnę, to
   powinny się wyszarzać. Oprócz drukuj — ten powinien być cały czas aktywny".

   Niebieski znaczy „to jest do zrobienia", szary — „zrobione albo jeszcze nie teraz". Jedno
   spojrzenie na dół karty mówi, czy coś zostało: prośba o opinię po wysłaniu gaśnie, a zamknięcie
   wizyty zapala się dopiero, gdy jest co zamykać. */
.wizyta-sekcja.rzad-przyciskow button[disabled] {
  background: var(--tlo); border-color: var(--linia); color: var(--pod);
  cursor: default; opacity: .75;
}
.wizyta-sekcja.rzad-przyciskow button { min-height: 40px; padding: 0 18px; font-weight: 600; }

/* SEKCJA ROZWINIĘTA POD KAFELKAMI WIZYTY.
   Piotr, 10.09.2026: „żeby ono się rozsuwało w dół. Czyli na całą tą szerokość strony".
   Formularz recepty i ekran leków są tu PRZENIESIONE, nie skopiowane — mają własne obsługi
   i własne pola, a druga kopia rozjechałaby się przy pierwszej zmianie. */
.wizyta-rozwiniete { margin: 12px 0 0; width: 100%; }
.wizyta-rozwiniete > section { display: block; width: 100%; max-width: none; margin: 0; }
.wizyta-rozwiniete > section > h2:first-child { margin-top: 0; }

/* DZIEŃ TYGODNIA OBOK DATY WIZYTY (Piotr, 10.09.2026: „przy otwartej wizycie dopisz jeszcze
   dzień tygodnia"). Sama data nie mówi, czy to był poniedziałek, czy sobota — a przy przeglądaniu
   wizyt wstecz to pierwsza rzecz, po której człowiek się orientuje.
   To NIE jest pole do wpisywania: program liczy go z daty, więc wygląda jak podpis, nie jak
   rubryka do wypełnienia. */
.wizyta-dzien-tygodnia {
  align-self: end; padding: 0 0 9px 2px; font-size: 14px; font-weight: 600;
  color: var(--pod); white-space: nowrap;
}

/* PODPISY NAD POLAMI TO PODPISY, A NIE RAMKI.
   Piotr, 10.09.2026: „Usługa albo produkt / Cena / Zniżka — te napisy, tło niebieskie, jest za
   wysokie to pole. Rozjeżdża się to. Podobnie rozpoznania".

   Klasa `.podpis` powstała do CZEGO INNEGO: to pudełko z podglądem pieczątki — 16 px marginesu
   wewnątrz, niebieskie tło, ramka, odstęp półtorej linijki. Rzędy „dodaj usługę" i „dodaj
   rozpoznanie" wzięły ją dla samego słowa nad polem i odziedziczyły całe pudełko: stąd niebieskie
   prostokąty wyższe od pól obok i rozjeżdżający się rząd.

   Nazwy nie zmieniam — chodzi po całym programie. Zdejmuję pudełko tam, gdzie to ma być
   zwykły podpis. */
.dodaj-usluge .podpis,
.dodaj-rozpoznanie .podpis {
  border: 0; background: none; border-radius: 0;
  padding: 0; margin: 0; line-height: 1.25; text-align: left;
}
.dodaj-usluge .podpis { font-size: 12px; }
.dodaj-rozpoznanie .podpis { font-size: 11.5px; }

/* POLE DO UZUPEŁNIENIA — CZERWONE TŁO.
   Piotr, 10.09.2026: „jak nie są uzupełnione, to wtedy ma być rozwinięte i pola z tłem czerwonym
   do uzupełniania". Czerwień jest tu OSTRZEŻENIEM, a nie błędem: nikt nic nie zepsuł, po prostu
   tej rzeczy jeszcze nie ma. Dlatego jest to blade tło i wyraźna obwódka, a nie krzyk. */
input.do-uzupelnienia,
textarea.do-uzupelnienia {
  background: #fff4f2; border-color: #f0a08f;
}
input.do-uzupelnienia:focus,
textarea.do-uzupelnienia:focus { background: #fff; }
/* ZWINIĘTY PANEL DANYCH mówi w nagłówku to, po co się do niego zagląda. */
.wizyta-dane > summary .dane-skrot { margin-left: 10px; font-weight: 400; color: var(--pod); }
.wizyta-dane > summary .brak-danych {
  margin-left: 10px; font-weight: 600; font-size: 13px; color: #a33a22;
  background: #fff4f2; border: 1px solid #f0a08f; border-radius: 999px; padding: 1px 10px;
}

/* ODMOWA ZAPISU DOKUMENTU MA BYĆ WIDOCZNA.
   Piotr, 10.09.2026: „nie ma możliwości wystawienia kolejnych skierowań i zaświadczeń" — a w bazie
   nie było ANI JEDNEGO dokumentu, więc pierwszy nigdy się nie zapisał. Mały czerwony napis obok
   przycisku ginął: człowiek patrzy w pole, które wypełnia, a nie w rząd przycisków. */
.wizyta-blad.widoczny {
  display: inline-block; font-weight: 600; color: #a33a22;
  background: #fff4f2; border: 1px solid #f0a08f; border-radius: 8px; padding: 6px 12px;
}

/* === KARTA WIZYTY, 10.09.2026 ================================================================
   Poprawki z jednego wieczoru: rząd „dodaj usługę" w jednej linii, czytelne nagłówki, centymetr
   życia, poprzednie wizyty i opisane załączniki. Wszystko na końcu pliku, bo w tym pliku
   o „dodaj usługę" i o nagłówkach kart mówi się w kilku miejscach, a rządzi ostatnie. */

/* --- „DODAJ" WRACA DO LINII PÓL --------------------------------------------------------------
   Piotr, 10.09.2026: „przycisk dodaj nie jest w jednej linii".

   Powód był niewidoczny gołym okiem i zmierzony w przeglądarce: `label` w tym programie ma
   `margin-bottom: 14px`, a `align-items: flex-end` wyrównuje MARGINESY, nie krawędzie pól.
   Pola kończyły się na 372 px, przycisk na 386 -- równo co do piksela, tylko nie tam, gdzie
   patrzy oko. Zdejmujemy ten margines w obu rzędach. */
.dodaj-usluge > label,
.dodaj-rozpoznanie > label,
.dodaj-zalacznik > label { margin-bottom: 0; }

/* NAZWA USŁUGI TROCHĘ WIĘKSZA (Piotr, 10.09.2026: „nieco powiększ usługa lub produkt").
   Pole, w które wpisuje się najwięcej, ma też być tym, które najlepiej widać. */
.dodaj-usluge .szukajka input { font-size: 16px; }
.dodaj-usluge .szukajka input,
.dodaj-usluge .pole-usluga input { min-height: 42px; height: 42px; }

/* --- NAGŁÓWKI KART: JEDNA CZCIONKA, JEDNA WAGA, JEDEN ODSTĘP -------------------------------
   Piotr, 10.09.2026: „dane pacjenta powinny być wygrubione (...) potem rozpoznania, wywiad,
   wszystko dokładnie, właśnie żeby to było estetyczne".

   Do tej pory nagłówek zwijanego panelu („Dane pacjenta") był `summary` i miał wagę tekstu,
   a nagłówki kart -- `h3` -- swoją własną. Dwa różne kroje jednej rzeczy. Teraz wszystkie
   mówią tym samym głosem. */
.wizyta-sekcja > h3,
.wizyta-dane > summary,
.historia-pacjenta > summary {
  font-size: 16.5px; font-weight: 700; letter-spacing: -.01em; color: var(--tekst);
  margin: 0 0 10px;
}
.wizyta-sekcja > h3 { display: flex; align-items: center; gap: 10px; }
.wizyta-dane > summary,
.historia-pacjenta > summary { margin-bottom: 0; cursor: pointer; }
.wizyta-dane[open] > summary,
.historia-pacjenta[open] > summary { margin-bottom: 12px; }
/* Przycisk w nagłówku (mikrofon, „z poprzedniej wizyty") ma stać z prawej, nie w tytule. */
.wizyta-sekcja > h3 > button { margin-left: auto; }
.wizyta-sekcja > h3 > button + button { margin-left: 8px; }

/* --- CENTYMETR ŻYCIA: 0–100 LAT ------------------------------------------------------------
   Piotr, 10.09.2026: „zrób taki centymetr do 100 lat i pokaż też wizualnie".
   Kreska co dziesięć lat, podpis co dwadzieścia, znacznik z wiekiem tam, gdzie stoi pacjent. */
.centymetr { margin: 16px 0 6px; max-width: 520px; }
.centymetr .tasma {
  position: relative; height: 26px; border-radius: 999px;
  background: linear-gradient(90deg, #eaf2fb 0%, #dbe8f7 55%, #f3e6e2 100%);
  border: 1px solid var(--linia);
}
.centymetr .kreska {
  position: absolute; top: 6px; width: 1px; height: 7px; background: #9fb2c7;
}
.centymetr .kreska.duza { top: 4px; height: 11px; background: #7b8fa6; }
.centymetr .liczba {
  position: absolute; top: 15px; transform: translateX(-50%);
  font-size: 9.5px; color: var(--pod); font-variant-numeric: tabular-nums;
}
.centymetr .teraz {
  position: absolute; top: -5px; transform: translateX(-50%);
  width: 2px; height: 36px; background: var(--akcent); border-radius: 2px;
}
.centymetr .teraz b {
  position: absolute; top: -3px; left: 50%; transform: translateX(-50%);
  background: var(--akcent); color: #fff; font-size: 11px; font-weight: 700;
  border-radius: 999px; padding: 1px 7px; line-height: 1.5;
}

/* --- POPRZEDNIE WIZYTY: PANEL NASUNIĘTY NA KARTĘ (wariant B) --------------------------------
   Piotr, 10.09.2026: „poprzednie wizyty muszę podglądać, mając otwartą aktualną wizytę",
   potem po zobaczeniu wariantu A (druga kolumna): „wersja A mi się nie podoba — zrób B".

   Panel leży POZA układem strony (`position: fixed`), więc dopóki jest zamknięty, nie zajmuje
   ani piksela i nic przez niego nie skacze. Otwarty wysuwa się z prawej i przykrywa część
   karty; wizyta pod spodem zostaje dokładnie tam, gdzie była — razem z kursorem w polu,
   w którym się właśnie pisało. */
.cien-panelu {
  position: fixed; inset: 0; z-index: 40; background: rgba(15, 23, 42, .28);
}
.panel-historii {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 41;
  width: min(460px, 92vw); overflow-y: auto;
  background: var(--karta); border-left: 1px solid var(--linia);
  box-shadow: -18px 0 44px rgba(15, 23, 42, .18);
  padding: 16px 18px 24px;
  animation: panel-wjezdza .16s ease-out;
}
@keyframes panel-wjezdza { from { transform: translateX(24px); opacity: .4; } }
/* Strona pod panelem nie przewija się razem z nim. */
body.panel-otwarty { overflow: hidden; }

.historia-pacjenta > h3 {
  margin: 0 0 12px; font-size: 16.5px; font-weight: 700; letter-spacing: -.01em;
  display: flex; align-items: center; gap: 8px;
}
.historia-pacjenta > h3 .ile {
  min-width: 22px; text-align: center;
  background: var(--akcent-tlo); color: var(--akcent); border-radius: 999px;
  font-size: 12.5px; font-weight: 700; padding: 1px 8px;
}
.historia-pacjenta > h3 .zamknij-panel {
  margin-left: auto; width: auto; min-height: 30px; padding: 0 10px; font-size: 15px;
}
.historia-pacjenta .niepewne {
  margin: 0 0 10px; font-size: 12.5px; font-weight: 600; color: #8a5a20;
  background: #fdf4e6; border: 1px solid #edd3a6; border-radius: 8px; padding: 5px 10px;
}
.historia-pacjenta .leki-razem { margin: 0 0 12px; }
.historia-pacjenta .leki-razem h4 {
  margin: 0 0 6px; font-size: 11px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .06em;
}
.historia-pacjenta .leki-razem ul { list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: 5px; }
.historia-pacjenta .leki-razem li {
  background: #f2f7ff; border: 1px solid #d8e6f8; border-radius: 8px; padding: 3px 9px;
  font-size: 13px;
}
.lista-historii { list-style: none; margin: 0; padding: 0; }
.wizyta-z-historii { border-top: 1px solid var(--linia); }
.wizyta-z-historii > details > summary {
  display: flex; align-items: baseline; gap: 8px; cursor: pointer;
  padding: 9px 2px; font-size: 13.5px;
}
.wizyta-z-historii > details > summary::-webkit-details-marker { display: none; }
.wizyta-z-historii .kiedy { flex: 0 0 auto; white-space: nowrap; }
.wizyta-z-historii .kiedy .pod { margin-left: 5px; font-size: 11.5px; }
.wizyta-z-historii .tytul {
  flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  color: var(--pod);
}
.wizyta-z-historii > details[open] > summary { font-weight: 600; }
.wizyta-z-historii .co { display: grid; gap: 6px; padding: 0 2px 12px; }
.wizyta-z-historii .rozp { display: flex; flex-wrap: wrap; gap: 5px; }
.wizyta-z-historii .rozp-znak {
  background: var(--akcent-tlo); color: var(--akcent); border-radius: 7px;
  padding: 1px 8px; font-size: 12.5px;
}
.wizyta-z-historii .leki-wiersz { font-size: 13px; }
/* UCZULENIA, CHOROBY PRZEWLEKLE, LEKI STALE (decyzja 14a, 14.09.2026).
   Nad wywiadem, na czerwono -- to ma byc pierwsza rzecz, na ktora pada wzrok.
   PUSTE TEZ WIDAC, tylko szaro: brak paska znaczylby i "nie ma uczulen", i "nikt nie pytal". */
.pasek-zdrowia { margin: 0 0 10px; }
.pasek-zdrowia .zdrowie-pusto {
  font-size: 13px; color: #6b6b6b; background: #f5f5f5; border: 1px solid #e3e3e3;
  border-radius: 8px; padding: 6px 10px; display: flex; align-items: center; gap: 8px;
}
.pasek-zdrowia .zdrowie-karta {
  background: #fdf0f0; border: 1px solid #f0c8c8; border-left: 4px solid #c0392b;
  border-radius: 8px; padding: 8px 12px;
}
.pasek-zdrowia .zdrowie-wiersz { display: flex; gap: 8px; font-size: 13px; line-height: 1.45; }
.pasek-zdrowia .zdrowie-wiersz .co {
  color: #a03028; font-weight: 700; flex: 0 0 auto; min-width: 128px;
}
.pasek-zdrowia .zdrowie-wiersz .tresc { color: #3a2020; }
.pasek-zdrowia .zdrowie-stopka {
  display: flex; align-items: center; gap: 8px; margin-top: 6px;
}
.pasek-zdrowia .zdrowie-stopka .pod { font-size: 11px; color: #8a6a6a; }
.pasek-zdrowia .zdrowie-pole { display: block; margin-bottom: 6px; }
.pasek-zdrowia .zdrowie-pole span { display: block; font-size: 12px; font-weight: 700; color: #a03028; }
.pasek-zdrowia .zdrowie-pole textarea { width: 100%; font-size: 13px; }
/* AWARIA NIE MOZE WYGLADAC JAK "NIC NIE MA" -- pusty pasek czyta sie jako "pacjent zdrowy". */
.pasek-zdrowia .zdrowie-awaria {
  font-size: 13px; background: #fff6e5; border: 1px solid #f0d8a8; border-radius: 8px;
  padding: 6px 10px; color: #7a5a10;
}

/* OSTRZEZENIE PRZY RECEPCIE -- NAD lista lekow, nie pod. */
#ostrzezenia-zdrowia { margin: 0 0 8px; }
#ostrzezenia-zdrowia .zdrowie-alarm {
  display: flex; gap: 8px; align-items: flex-start; font-size: 13px; line-height: 1.45;
  background: #fdf0f0; border: 1px solid #f0c8c8; border-left: 4px solid #c0392b;
  border-radius: 8px; padding: 7px 11px; margin-bottom: 5px;
}
#ostrzezenia-zdrowia .zdrowie-alarm .znak {
  flex: 0 0 auto; width: 18px; height: 18px; border-radius: 50%; background: #c0392b;
  color: #fff; font-weight: 700; text-align: center; line-height: 18px; font-size: 12px;
}
#ostrzezenia-zdrowia .zdrowie-alarm-pod { font-size: 11px; color: #8a6a6a; padding-left: 11px; }

/* SKIEROWANIA, ZASWIADCZENIA I ZALACZNIKI W HISTORII (decyzja 14c, 14.09.2026).
   Kazdy dokument w osobnej ramce, zeby przy trzech nie zlewaly sie w jedno zdanie.
   WYCENA JEST SZARA, nie niebieska -- to nie jest wystawiony dokument, tylko pytanie o cene. */
.wizyta-z-historii .dok-wiersz { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.wizyta-z-historii .dok-znak {
  font-size: 12px; line-height: 1.35; padding: 2px 7px; border-radius: 9px;
  background: #eaf2fb; color: #1d4f7c; border: 1px solid #cfe0f2;
}
.wizyta-z-historii .dok-znak.wycena {
  background: #f2f2f2; color: #5c5c5c; border-color: #dcdcdc; font-style: italic;
}
.wizyta-z-historii .zal-wiersz { font-size: 13px; margin-top: 4px; }
/* PODPISANE ZGODY W HISTORII (13.10.2026) -- opis i przyciski „Pokaż” / „Drukuj” w jednej linii. */
.wizyta-z-historii .zgody-wiersz { font-size: 13px; margin-top: 4px; }
.wizyta-z-historii .zgoda-z-historii { padding: 6px 0; border-top: 1px dashed #e2e8f0; }
.wizyta-z-historii .zgoda-z-historii:first-child { border-top: 0; }
.wizyta-z-historii .zg-przyciski { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 4px; }
.wizyta-z-historii .zg-kiedy { color: #64748b; font-size: 12px; margin-right: 4px; }
.wystawione-spis li button.male { margin-left: 6px; }
.wizyta-z-historii .zalec {
  font-size: 13px; color: var(--tekst); background: #fbfcfd;
  border-left: 3px solid #d8e6f8; padding: 5px 10px; border-radius: 0 8px 8px 0;
  white-space: pre-wrap;
}
.wizyta-z-historii .co > .pod { font-size: 12px; }
.wizyta-z-historii .co-z-tym { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 2px; }

/* --- ZAŁĄCZNIKI: CO TO JEST, JAK SIĘ NAZYWA, Z KTÓREGO DNIA --------------------------------
   Piotr, 10.09.2026: „ładniejsze pole załączniki i wybierz pliki (...) zdjęcia, wypisy
   ze szpitala, badania laboratoryjne, badania obrazowe". */
.dodaj-zalacznik { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; margin: 4px 0 10px; }
.dodaj-zalacznik > label { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dodaj-zalacznik .podpis {
  border: 0; background: none; border-radius: 0; padding: 0; margin: 0;
  font-size: 11.5px; line-height: 1.2; color: var(--pod); white-space: nowrap; text-align: left;
}
.dodaj-zalacznik .pole-rodzaj { flex: 0 0 190px; }
.dodaj-zalacznik .pole-opis { flex: 1 1 220px; }
.dodaj-zalacznik .pole-data { flex: 0 0 165px; }
.dodaj-zalacznik .pole-plik { flex: 0 0 auto; cursor: pointer; }
.dodaj-zalacznik input, .dodaj-zalacznik select {
  width: 100%; min-width: 0; padding: 0 12px; font: inherit; font-size: 15px;
  border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd;
  min-height: 40px; height: 40px; box-sizing: border-box;
}
.dodaj-zalacznik input:focus, .dodaj-zalacznik select:focus {
  border-color: var(--akcent); background: #fff;
}
/* WŁASNY PRZYCISK ZAMIAST SZAREGO „Choose Files" -- tamten każda przeglądarka rysuje inaczej
   i po angielsku. Prawdziwe pole jest schowane, klika w nie ta etykieta. */
.przycisk-pliku {
  display: inline-flex; align-items: center; height: 40px; padding: 0 18px;
  border-radius: 9px; background: var(--akcent); color: #fff; font-weight: 600;
  border: 1.5px solid var(--akcent); white-space: nowrap;
}
.przycisk-pliku:hover { background: var(--akcent-ciemny); border-color: var(--akcent-ciemny); }
/* „Zrób zdjęcie" w załącznikach to <button>, a „Wybierz pliki" to <span> -- ta sama wielkość (24.09.2026). */
button.przycisk-pliku { font: inherit; font-weight: 600; line-height: 1; margin: 0; cursor: pointer; min-height: 0; height: 40px; padding: 0 18px; box-sizing: border-box; }
.lista-zalacznikow { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 2px; }
.lista-zalacznikow li {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 8px 2px; border-top: 1px solid var(--linia);
}
.lista-zalacznikow .rodzaj {
  flex: 0 0 auto; font-size: 12px; font-weight: 600; border-radius: 999px; padding: 2px 10px;
  background: var(--akcent-tlo); color: var(--akcent);
}
.lista-zalacznikow .rodzaj.obrazowe { background: #eef4ff; color: #2f5bbd; }
.lista-zalacznikow .rodzaj.laboratoryjne { background: #eaf7ef; color: #1f7a45; }
.lista-zalacznikow .rodzaj.wypis { background: #fdf1e8; color: #9a5b1c; }
.lista-zalacznikow .rodzaj.zdjecie { background: #f4eefc; color: #6b3aa8; }
.lista-zalacznikow .co { flex: 1 1 220px; min-width: 0; }
.lista-zalacznikow .co a { font-weight: 600; overflow-wrap: anywhere; }
.lista-zalacznikow .co .pod { display: block; font-size: 12px; }
/* Tekst wpisany zamiast pliku (18.10.2026): treść widać od razu, długą przewija się w ramce. */
.lista-zalacznikow .co .zal-tekst, .zalaczniki-starej .zal-tekst { display: block; white-space: pre-wrap; overflow-wrap: anywhere; margin-top: 4px; padding: 6px 8px;
  border-left: 3px solid #c9d6e3; background: #f7f9fb; font-size: 14px; max-height: 18em; overflow: auto; }
.zal-tekst-panel { margin: 8px 0; display: flex; flex-direction: column; gap: 6px; }
.zal-tekst-naglowek { display: flex; align-items: center; gap: 8px; font-weight: 600; font-size: 14px; }
.zal-tekst-panel textarea { width: 100%; box-sizing: border-box; font: inherit; }
.zal-tekst-panel .przyciski { display: flex; gap: 8px; flex-wrap: wrap; }
.lista-zalacznikow .co-z-tym { flex: 0 0 auto; display: flex; gap: 4px; }
.lista-zalacznikow .opisywanie {
  flex: 1 1 100%; display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  padding: 8px 0 2px;
}
.lista-zalacznikow .opisywanie select { flex: 0 0 190px; }
.lista-zalacznikow .opisywanie input[type=date] { flex: 0 0 165px; }
.lista-zalacznikow .opisywanie input { flex: 1 1 200px; }
.lista-zalacznikow .opisywanie select,
.lista-zalacznikow .opisywanie input {
  padding: 0 12px; font: inherit; font-size: 14.5px; min-height: 36px; height: 36px;
  border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd; box-sizing: border-box;
}

/* SKĄD SIĘ WZIĘŁY ZALECENIA -- linijka nad polem, spokojna, nie ostrzeżenie. */
.skad-zalecenia {
  font-size: 13px; color: #2f5bbd; background: #eef4ff; border: 1px solid #d8e6f8;
  border-radius: 8px; padding: 5px 12px; margin: 0 0 8px;
}

/* KWOTA PO ZNIŻCE W RZĘDZIE „DODAJ USŁUGĘ" (Piotr, 10.09.2026: „musi być też kwota po zniżce").
   Wygląda jak pole, ale nim nie jest -- program to liczy, nikt tego nie wpisuje. Stąd inne tło
   i brak obwódki, którą oko czyta jako „tu można kliknąć". */
.dodaj-usluge .pole-po-znizce { flex: 0 0 auto; }
.dodaj-usluge #usluga-po-znizce {
  display: flex; align-items: center; justify-content: flex-end;
  min-width: 108px; height: 38px; box-sizing: border-box; padding: 0 12px;
  border: 1.5px solid transparent; border-radius: 9px; background: #f1f6ec;
  color: #2c5c2f; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap;
}

/* --- DZIEŃ, GODZINA, DZIEŃ TYGODNIA I „zapisane" W JEDNEJ LINII ------------------------------
   Piotr, 10.09.2026: „Dzień i godzina rozjechały się".

   Zmierzone w przeglądarce: pola „Dzień" i „Godzina" kończyły się na wysokości 74 px, a napisy
   obok nich — „środa" i „zapisane 10:16" — zaczynały się na 74 i 76. Czyli oba wisiały PONIŻEJ
   pól, zamiast stać z nimi równo.

   Przyczyna jest ta sama, co w rzędzie „dodaj usługę": `label` w tym programie ma
   `margin-bottom: 14px`, a `align-items: flex-end` wyrównuje MARGINESY, nie widoczne krawędzie.
   Pola siadały więc 14 px wyżej niż dół rzędu, a napisy — dosuwane wcześniej ręcznym wcięciem
   od dołu (9 i 10 px) — trafiały obok, bo takie wcięcie zgaduje liczbę zamiast ją znać.

   Zdejmujemy margines w tym rzędzie i kasujemy oba zgadywane wcięcia. Teraz wszystko cztery
   stoi na jednej linii, bo stoi na tej samej krawędzi. */
.wizyta-kiedy > label { margin-bottom: 0; }
.wizyta-kiedy .wizyta-dzien-tygodnia { padding: 0 0 9px 2px; }
.wizyta-kiedy .wizyta-zapis { padding-bottom: 9px; }

/* === WYGLĄD KARTY WIZYTY, 10.09.2026 po południu ============================================
   Piotr: „zrób ładniejszy centymetr", „Dzień i godzina zrób ładniejsze pola", „zrób to
   estetycznie", „Wystawienie recepty / Cena / Zniżka / Do zapłaty — zrób to w jednej linii". */

/* --- DZIEŃ I GODZINA: JEDEN WĄSKI PASEK ------------------------------------------------------
   Piotr, 10.09.2026: „Dzień i godzina są bez sensu, zrób to, żeby nie zajmowało tyle miejsca".

   Poprzednia wersja miała podpisy NAD polami i ramkę dookoła — trzy poziomy wysokości na dwie
   liczby, które i tak same się tłumaczą (kalendarzyk i zegar rysuje przeglądarka). Teraz podpis
   stoi OBOK pola, w jednej linii, a cały pasek ma wysokość jednego pola. */
.wizyta-kiedy {
  gap: 8px; align-items: center; background: none; border: 0; padding: 0;
  flex-wrap: wrap;
}
.wizyta-kiedy > label {
  flex-direction: row; align-items: center; gap: 6px; margin-bottom: 0;
  font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--pod);
}
.wizyta-kiedy input {
  padding: 4px 8px; font-size: 14px; font-weight: 600; color: var(--tekst);
  font-variant-numeric: tabular-nums;
  border: 1.5px solid var(--linia); border-radius: 8px; background: var(--karta);
  min-height: 32px; height: 32px; box-sizing: border-box;
}
.wizyta-kiedy input:focus { outline: none; border-color: var(--akcent); background: #fff; }
.wizyta-kiedy .wizyta-dzien-tygodnia {
  padding: 0; font-size: 13px; font-weight: 700; color: var(--akcent); text-transform: lowercase;
}
.wizyta-kiedy .wizyta-zapis { padding: 0; font-size: 11.5px; }

/* --- CENTYMETR ŻYCIA: JAK PRAWDZIWA MIARKA -------------------------------------------------
   Drobna kreska co rok (jednym tłem — sto elementów spowalniałoby każde przerysowanie karty),
   dłuższa co pięć lat, najdłuższa i podpisana co dziesięć. Przeżyte lata są wypełnione,
   reszta pusta, a chorągiewka z wiekiem stoi dokładnie na swojej kresce. */
.centymetr { position: relative; margin: 14px 0 4px; max-width: 560px; padding-top: 22px; }
.centymetr .tasma {
  position: relative; height: 22px; border-radius: 6px; background: #fff;
  border: 1px solid var(--linia); overflow: hidden;
}
/* KRESKI CO ROK RYSUJE TŁO, nie sto elementów -- ale MUSZĄ leżeć NAD wypełnieniem przeżytych
   lat, inaczej lewa połowa miarki jest gładka, a prawa prążkowana. */
.centymetr .tasma::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 6px;
  background-image: repeating-linear-gradient(90deg,
    rgba(95, 120, 147, .45) 0 1px, transparent 1px 1%);
  pointer-events: none;
}
.centymetr .przezyte {
  position: absolute; left: 0; top: 0; bottom: 0; border-radius: 5px 0 0 5px;
  background: linear-gradient(90deg, #e8f0fb 0%, #d7e6f8 100%);
}
.centymetr .kreska {
  position: absolute; bottom: 0; width: 1px; height: 9px; background: #8ea4bd;
}
.centymetr .kreska.duza { height: 14px; width: 1.5px; background: #5f7893; }
.centymetr .liczby { position: relative; height: 14px; margin-top: 3px; }
.centymetr .liczba {
  position: absolute; transform: translateX(-50%); top: 0;
  font-size: 10px; color: var(--pod); font-variant-numeric: tabular-nums;
}
/* Znacznik wystaje ponad taśmę, a taśma tnie to, co z niej wychodzi (`overflow: hidden`
   trzyma wypełnienie w zaokrąglonych rogach). Dlatego znacznik stoi W TAŚMIE na całą jej
   wysokość, a chorągiewka wisi nad nim we własnej warstwie. */
.centymetr .teraz {
  position: absolute; top: 0; bottom: 0; width: 2px;
  background: var(--akcent); z-index: 2;
}
.centymetr .chorag {
  position: absolute; top: 0; transform: translateX(-50%);
  background: var(--akcent); color: #fff; font-size: 11.5px; font-weight: 600;
  border-radius: 999px; padding: 2px 11px; line-height: 1.5; white-space: nowrap;
}
.centymetr .chorag b { font-weight: 800; }
/* Chorągiewka przy samym końcu miarki nie może wyjść poza kartę. */
.centymetr .chorag[style*="left:0%"] { left: 0 !important; transform: none; }
.centymetr .chorag[style*="left:100%"] { left: auto !important; right: 0; transform: none; }

/* --- USŁUGA I RACHUNEK W JEDNEJ LINII -------------------------------------------------------
   Piotr, 10.09.2026. Przy jednej usłudze „Cena" i kwota przy usłudze to ta sama liczba pisana
   dwa razy pod sobą — w jednej linii od razu widać, co z czego wychodzi. */
/* DODANA USŁUGA MA BYĆ WIDAĆ (Piotr, 20.09.2026: „jest dodana jakaś usługa, powiem szczerze,
   że ją słabo widać. Dobrze by było ją jakoś zaznaczyć, że ona jest dodana").
   Wiersz był prawie biały (#fbfcfd) na białej karcie, z cienką szarą ramką — wtapiał się
   w tło i przy szybkim spojrzeniu nie było wiadomo, czy usługa w ogóle weszła.
   Teraz: NIEBIESKI PASEK przy lewej krawędzi i lekko niebieskie tło. Niebieski, a nie
   zielony — zielony w tym programie znaczy „zapłacone" i pomyłka tych dwóch rzeczy
   kosztowałaby nieodebrane pieniądze. */
.uslugi-jedna-linia, .wiersz-uslugi {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 9px 12px 9px 14px; margin-top: 8px; font-size: 14.5px;
  background: var(--akcent-tlo); border: 1px solid #c7ddff; border-radius: 10px;
  border-left: 4px solid var(--akcent);
}
/* PTASZEK PRZED NAZWĄ — mówi wprost „to już jest na wizycie". Rysowany stylem, a nie
   wpisany w HTML, żeby nie trafił do wydruku ani do wyszukiwania po nazwie usługi. */
.uslugi-jedna-linia .nazwa::before, .wiersz-uslugi .nazwa::before {
  content: '✓'; margin-right: 7px; color: var(--akcent); font-weight: 700;
}
.uslugi-jedna-linia .nazwa, .wiersz-uslugi .nazwa { flex: 1 1 160px; min-width: 0; font-weight: 600; }
.uslugi-jedna-linia .kwota-uslugi, .wiersz-uslugi .kwota-uslugi {
  flex: 0 0 auto; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap;
}
.uslugi-jedna-linia > button, .wiersz-uslugi > button { flex: 0 0 auto; width: auto; }
.uslugi-jedna-linia .rachunek {
  flex: 0 0 auto; display: flex; align-items: center; gap: 14px;
  padding-left: 14px; border-left: 1px solid var(--linia);
}
.lista-uslug { display: grid; gap: 4px; }
.rachunek-uslug, .uslugi-jedna-linia .rachunek { font-size: 14px; }
.rachunek-uslug { display: flex; flex-wrap: wrap; gap: 16px; align-items: center;
  margin-top: 8px; padding: 2px 12px; }
.rachunek-uslug .rachunek-czesc, .uslugi-jedna-linia .rachunek-czesc {
  white-space: nowrap; color: var(--pod);
}
.rachunek-uslug b, .uslugi-jedna-linia .rachunek b {
  color: var(--tekst); font-variant-numeric: tabular-nums;
}
.rachunek-uslug .znizka-znak, .uslugi-jedna-linia .znizka-znak { color: #b54708; }
.rachunek-uslug .znizka-znak b, .uslugi-jedna-linia .znizka-znak b { color: #b54708; }
.rachunek-uslug .do-zaplaty b, .uslugi-jedna-linia .do-zaplaty b { font-size: 16px; }

/* --- „INNE" ZNACZY „NAPISZ, CO TO JEST" ------------------------------------------------------ */
.dodaj-zalacznik .pole-inne { flex: 1 1 180px; }
.lista-zalacznikow .opisywanie .pole-inne-wiersz { flex: 0 0 180px; }

/* === EDYTOR TEKSTU W WYWIADZIE, BADANIU I ZALECENIACH =======================================
   Piotr, 10.09.2026: „Zalecenia — brak edytora tekstu".
   Pole ma wyglądać dokładnie tak, jak wyglądało zwykłe — z paskiem sześciu przycisków nad nim.
   Nic w karcie wizyty nie ma się przez to przesunąć. */
.pasek-edytora { display: flex; flex-wrap: wrap; gap: 4px; margin: 8px 0 0; }
.pasek-edytora button {
  width: auto; min-height: 30px; height: 30px; padding: 0 11px;
  font-size: 13px; font-weight: 600; line-height: 1;
  color: var(--pod); background: var(--karta);
  border: 1px solid var(--linia); border-radius: 8px;
}
.pasek-edytora button:hover { color: var(--tekst); border-color: var(--linia-mocna); background: #fff; }
.pasek-edytora button b, .pasek-edytora button i, .pasek-edytora button u { font-size: 14px; }

.wizyta-sekcja .edytor {
  width: 100%; box-sizing: border-box; margin-top: 6px;
  min-height: 132px; max-height: 460px; overflow-y: auto;
  padding: 12px 14px; font: inherit; font-size: 15px; line-height: 1.65; color: var(--tekst);
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd;
}
.wizyta-sekcja .edytor:focus { outline: none; border-color: var(--akcent); background: #fff; }

/* ILE LINIJEK NA START -- I ŻADNEGO SUFITU (Piotr, 22.09.2026: „wywiad na trzy linijki, niech
   będzie z możliwością rozwijania, w zależności od tego, jak będę mówił. Badanie przedmiotowe
   też na trzy linijki, zalecenia szersze. Planowanie tak, jak jest").

   Linijka ma tu 15px × 1.65 ≈ 24.8px, do tego 24px na górny i dolny odstęp:
   trzy linijki = 3 × 24.8 + 24 ≈ 98px, osiem linijek ≈ 222px.

   `max-height` ZDJĘTE dla tych trzech pól: pole ma rosnąć razem z dyktowaniem, a nie zatrzymać
   się na 460px i zacząć przewijać tekst pod palcem mówiącego. `overflow: visible`, bo pole
   nie ma już czego chować. Uwagi gabinetu zostają jak były. */
.wizyta-sekcja .edytor[data-wpole-tekst="wywiad"],
.wizyta-sekcja .edytor[data-wpole-tekst="badanie"] {
  min-height: 98px; max-height: none; overflow-y: visible;
}
.wizyta-sekcja .edytor[data-wpole-tekst="zalecenia"] {
  min-height: 222px; max-height: none; overflow-y: visible;
}

/* WYWIAD STOI W MIEJSCU, PRZEWIJA SIĘ TREŚĆ (Piotr, 4.10.2026: „chciałbym, żeby kiedy jestem
   w wywiadzie i przesuwam się do góry, edytor wywiadu stał w miejscu, a przesuwała się jego
   zawartość. I potem ewentualnie cała strona"). Przy długim wywiadzie pasek z „Pogrub" uciekał
   w górę i trzeba było jeździć tam i z powrotem. Pole dalej rośnie przy pisaniu i dyktowaniu
   (decyzja z 22.09), ale tylko do wysokości ekranu -- potem przewija się sam tekst w środku,
   a kółko myszy po dojściu do końca tekstu przewija już stronę. Dyktowanie samo przewija pole
   na koniec (scrollTop = scrollHeight). 190px zostaje na tytuł z paskiem i górę strony.
   Piotr tego samego dnia: „zrób to też w innych, w badaniu przedmiotowym i w zaleceniach, tam,
   gdzie są edytory" -- dlatego reguła łapie wszystkie cztery pola z edytorem (POLA_Z_EDYTOREM). */
.wizyta-sekcja .edytor[data-wpole-tekst="wywiad"],
.wizyta-sekcja .edytor[data-wpole-tekst="badanie"],
.wizyta-sekcja .edytor[data-wpole-tekst="zalecenia"],
.wizyta-sekcja .edytor[data-wpole-tekst="uwagi"] {
  max-height: max(260px, calc(100vh - 190px)); overflow-y: auto;
}
/* `contenteditable` nie zna `placeholder` -- podpowiedź rysujemy sami, gdy pole jest puste. */
.wizyta-sekcja .edytor.puste::before {
  content: attr(data-podpowiedz); color: var(--pod); pointer-events: none;
}
/* Odstępy w środku pola: akapity ciasno, listy z wcięciem takim jak w wydruku. */
.wizyta-sekcja .edytor p { margin: 0 0 6px; }
.wizyta-sekcja .edytor p:last-child { margin-bottom: 0; }
.wizyta-sekcja .edytor ul, .wizyta-sekcja .edytor ol { margin: 4px 0 8px; padding-left: 24px; }
.wizyta-sekcja .edytor li { margin: 2px 0; }
/* ZNACZEK PRZED WIERSZEM: kropka, myślnik albo gwiazdka (Piotr, 22.09.2026: „są kropki,
   ale chciałbym mieć myślniki, jakieś gwiazdki"). To ta sama lista -- inny tylko znaczek,
   więc wydruk, wysyłka do pacjenta i stare wizyty czytają ją bez żadnej dodatkowej reguły. */
.wizyta-sekcja .edytor ul.lista-myslnik, .stara-wizyta .edytor ul.lista-myslnik { list-style-type: '–  '; }
.wizyta-sekcja .edytor ul.lista-gwiazdka, .stara-wizyta .edytor ul.lista-gwiazdka { list-style-type: '✱  '; }

/* --- PASEK EDYTORA: KOLORY, TŁA, ZDJĘCIE ----------------------------------------------------
   Piotr, 10.09.2026: „do edytora dodaj kolory, tła, przekreślenie, podkreślenie, dodanie
   zdjęcia". Kolory i tła to kropki, nie lista rozwijana — widać od razu, co jest do wyboru. */
.pasek-edytora .rozdzielacz {
  width: 1px; height: 20px; background: var(--linia); margin: 0 3px; align-self: center;
}
/* DWA WYBIERAKI KOLORU -- litery i tło. Każdy ma jako pierwszą pozycję powrót do zwykłego
   tekstu, osiem gotowych kolorów i własny wybór na końcu (Piotr, 10.09.2026: „zrób mi lepszy
   edytor, z wyborem koloru czcionki, z wyborem tła"). */
.pasek-edytora .wybierak { position: relative; display: inline-flex; }
.pasek-edytora .otworz-wybierak {
  width: auto; min-height: 30px; height: 30px; padding: 0 8px; display: inline-flex;
  align-items: center; gap: 4px; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 8px;
}
.pasek-edytora .otworz-wybierak .litera { font-size: 14px; font-weight: 800; color: #1f2937; }
.pasek-edytora .otworz-wybierak .plama {
  width: 15px; height: 13px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, .15);
  background: linear-gradient(90deg, #ffe84d 0 50%, #dbeafe 50% 100%);
}
.pasek-edytora .otworz-wybierak .strzalka { font-size: 9px; color: var(--pod); }
.pasek-edytora .paleta {
  position: absolute; top: calc(100% + 5px); left: 0; z-index: 6;
  display: flex; flex-direction: column; gap: 7px; width: 196px; padding: 9px;
  background: var(--karta); border: 1px solid var(--linia); border-radius: 10px;
  box-shadow: 0 12px 28px rgba(15, 23, 42, .16);
}
.pasek-edytora .paleta .zeruj {
  width: 100%; min-height: 28px; height: 28px; font-size: 12.5px; font-weight: 600;
  color: var(--pod); background: var(--tlo); border: 1px solid var(--linia); border-radius: 7px;
}
.pasek-edytora .paleta .kropki { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; }
.pasek-edytora .paleta .kropka {
  width: 18px; min-width: 18px; height: 18px; padding: 0; border-radius: 5px;
  border: 1px solid rgba(0, 0, 0, .15);
}
.pasek-edytora .paleta .kropka:hover { outline: 2px solid var(--akcent); outline-offset: 1px; }
.pasek-edytora .paleta .wlasny {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  margin: 0; font-size: 12px; font-weight: 600; color: var(--pod);
}
.pasek-edytora .paleta .wlasny input[type=color] {
  width: 46px; height: 26px; padding: 0; border: 1px solid var(--linia); border-radius: 6px;
  background: none; cursor: pointer;
}
/* Tła i zdjęcia W POLU wyglądają tak samo jak na wydruku -- ten sam odcień w obu miejscach. */
.wizyta-sekcja .edytor .tlo-zolte { background: #ffe84d; }
.wizyta-sekcja .edytor .tlo-zielone { background: #a8ebbb; }
.wizyta-sekcja .edytor .tlo-niebieskie { background: #dbeafe; }
.wizyta-sekcja .edytor .tlo-rozowe { background: #fbdce6; }
/* ZDJĘCIE W TEKŚCIE MA SWOJĄ MIARĘ (Piotr, 22.09.2026: „one strasznie się załączają, strasznie
   duże (...) powinno móc się skalować"). Wstawione wchodzi MAŁE; kliknięcie otwiera podgląd,
   w którym wybiera się małe / średnie / duże. Zdjęcia sprzed tej zmiany nie mają żadnej klasy --
   dostają miarę średnią, czyli i tak dużo mniej niż cała szerokość pola. */
.wizyta-sekcja .edytor img, .stara-wizyta .edytor img {
  max-width: 340px; height: auto; display: block; margin: 6px 0; border-radius: 8px;
  border: 1px solid var(--linia); cursor: zoom-in;
}
.wizyta-sekcja .edytor img.zdj-mala, .stara-wizyta .edytor img.zdj-mala { max-width: 170px; }
.wizyta-sekcja .edytor img.zdj-srednia, .stara-wizyta .edytor img.zdj-srednia { max-width: 340px; }
.wizyta-sekcja .edytor img.zdj-duza, .stara-wizyta .edytor img.zdj-duza { max-width: 100%; }

/* PODGLĄD: duże, ale NIGDY na całą stronę -- 80% okna w obie strony i tyle. */
dialog.podglad-zdjecia { border: 0; border-radius: 14px; padding: 12px; background: #fff;
  box-shadow: 0 18px 50px rgba(0,0,0,.28); max-width: 92vw; }
dialog.podglad-zdjecia::backdrop { background: rgba(15, 18, 22, .62); }
dialog.podglad-zdjecia img { display: block; max-width: 80vw; max-height: 78vh;
  border-radius: 10px; margin: 0 auto; }
dialog.podglad-zdjecia .miary { display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  margin-top: 10px; font-size: 13.5px; color: var(--pod); }
dialog.podglad-zdjecia .miary button { padding: 7px 12px; font: inherit; font-size: 13.5px;
  border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd; cursor: pointer; }
dialog.podglad-zdjecia .miary button.wybrana { border-color: var(--akcent); background: #eef4ff;
  font-weight: 600; }
dialog.podglad-zdjecia .miary .zamknij { margin-left: auto; }

/* WEJŚCIE DO POPRZEDNICH WIZYT -- widoczny przycisk, nie cichy odnośnik.
   Piotr, 10.09.2026: „a gdzie są poprzednie wizyty?". Stał jako blady napis obok „sprawdź
   w eWUŚ" i najczęściej w ogóle go nie było, bo chował się przy pacjencie z jedną wizytą.
   Teraz jest zawsze i wygląda jak coś, w co się klika. */
.wejscie-historii {
  width: auto; min-height: 30px; padding: 0 12px; font-size: 13px; font-weight: 600;
  color: var(--pod); background: var(--karta);
  border: 1px solid var(--linia); border-radius: 999px; white-space: nowrap;
}
.wejscie-historii.sa { color: var(--akcent); border-color: #cfe0f5; background: var(--akcent-tlo); }
.wejscie-historii:hover { border-color: var(--linia-mocna); }
.historia-pacjenta .pusto-historia { margin: 0; font-size: 14px; line-height: 1.6; }

/* --- CAŁA STARA WIZYTA W PANELU -------------------------------------------------------------
   Piotr, 10.09.2026: „»otwórz całą« też chcę, żeby się otwierała w panelu bocznym, cały czas
   mam być na aktualnej wizycie". To WIDOK, nie formularz — stąd inny rytm niż w karcie wizyty:
   krótkie nagłówki sekcji, treść bez ramek, nic, co wygląda jak pole do wpisywania. */
.stara-wizyta .wroc-do-listy { width: auto; padding: 0 10px; min-height: 28px; font-size: 12.5px; }
.stara-wizyta .kiedy-starej { margin: 10px 0 12px; font-size: 15px; font-weight: 700; }
.stara-wizyta .kiedy-starej .pod { font-weight: 400; font-size: 12.5px; }
.blok-starej { margin: 0 0 14px; }
.blok-starej h4 {
  margin: 0 0 5px; font-size: 11px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .06em;
}
.tresc-starej { font-size: 13.5px; line-height: 1.6; }
.tresc-starej p { margin: 0 0 5px; }
.tresc-starej ul, .tresc-starej ol { margin: 4px 0 6px; padding-left: 22px; }
.tresc-starej img { max-width: 100%; height: auto; border-radius: 8px; margin: 5px 0; }
.tresc-starej .tlo-zolte { background: #ffe84d; }
.tresc-starej .tlo-zielone { background: #a8ebbb; }
.tresc-starej .tlo-niebieskie { background: #dbeafe; }
.tresc-starej .tlo-rozowe { background: #fbdce6; }
.leki-starej, .uslugi-starej, .dokumenty-starej, .zalaczniki-starej {
  list-style: none; margin: 0; padding: 0; font-size: 13.5px;
}
.leki-starej li, .uslugi-starej li, .dokumenty-starej li, .zalaczniki-starej li {
  padding: 3px 0; border-bottom: 1px solid var(--linia);
}
.uslugi-starej li { display: flex; justify-content: space-between; gap: 10px; }
.uslugi-starej .kwota-uslugi { font-weight: 700; font-variant-numeric: tabular-nums; }
.stara-wizyta .co-z-tym { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.jak-przycisk {
  display: inline-flex; align-items: center; min-height: 30px; padding: 0 12px;
  border: 1px solid var(--linia); border-radius: 8px; font-weight: 600; font-size: 13px;
  color: var(--pod); text-decoration: none; background: var(--karta);
}
.jak-przycisk:hover { border-color: var(--linia-mocna); color: var(--tekst); }

/* --- STARA WIZYTA W PANELU JEST DO POPRAWIENIA ----------------------------------------------
   Piotr, 10.09.2026: „podgląd — zrób, żebym też mógł ją edytować i dopisać".
   Dwie wizyty do pisania na jednym ekranie muszą się różnić na pierwszy rzut oka — stąd pasek
   z datą u góry panelu i inny, cieplejszy odcień tła pól. */
.uwaga-stara {
  margin: 8px 0 10px; font-size: 12.5px; color: #8a5a20;
  background: #fdf4e6; border: 1px solid #edd3a6; border-radius: 8px; padding: 6px 10px;
}
.stan-starej { margin: 0 0 10px; font-size: 12px; color: var(--dobrze); min-height: 14px; }
.stan-starej.blad { color: var(--blad); font-weight: 600; }
.stan-starej:empty { min-height: 0; margin: 0; }
.stara-wizyta .edytor.stara-tresc {
  width: 100%; box-sizing: border-box; margin-top: 5px;
  min-height: 88px; max-height: 320px; overflow-y: auto;
  padding: 9px 11px; font: inherit; font-size: 13.5px; line-height: 1.6; color: var(--tekst);
  border: 1.5px solid #edd3a6; border-radius: 9px; background: #fffdf8;
}
.stara-wizyta .edytor.stara-tresc:focus {
  outline: none; border-color: #d9a441; background: #fff;
}
.stara-wizyta .edytor.stara-tresc.puste::before {
  content: attr(data-podpowiedz); color: var(--pod); pointer-events: none;
}
.stara-wizyta .edytor.stara-tresc p { margin: 0 0 5px; }
.stara-wizyta .edytor.stara-tresc ul, .stara-wizyta .edytor.stara-tresc ol {
  margin: 4px 0 6px; padding-left: 22px;
}
.stara-wizyta .edytor.stara-tresc img { max-width: 100%; height: auto; border-radius: 8px; }
.stara-wizyta .edytor.stara-tresc .tlo-zolte { background: #ffe84d; }
.stara-wizyta .edytor.stara-tresc .tlo-zielone { background: #a8ebbb; }
.stara-wizyta .edytor.stara-tresc .tlo-niebieskie { background: #dbeafe; }
.stara-wizyta .edytor.stara-tresc .tlo-rozowe { background: #fbdce6; }
/* Pasek edytora w panelu jest ciaśniejszy — szerokość słupka jest mniejsza niż karty. */
.stara-wizyta .pasek-edytora { gap: 3px; margin-top: 4px; }
.stara-wizyta .pasek-edytora button { min-height: 26px; height: 26px; padding: 0 8px; font-size: 12px; }
.stara-wizyta .pasek-edytora .otworz-wybierak { min-height: 26px; height: 26px; }

/* --- MINIATURKA ZDJĘCIA PRZY ZAŁĄCZNIKU -----------------------------------------------------
   Piotr, 10.09.2026: „jak dodaję zdjęcie, to chciałbym, żeby się ukazywała miniaturka tego
   zdjęcia oraz podpis, co to za zdjęcie". Zmniejsza je przeglądarka — plik na dysku zostaje
   pełnej wielkości i otwiera się po kliknięciu. */
.lista-zalacznikow .miniaturka {
  flex: 0 0 auto; display: block; width: 56px; height: 56px; border-radius: 8px;
  overflow: hidden; border: 1px solid var(--linia); background: var(--tlo);
}
.lista-zalacznikow .miniaturka img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lista-zalacznikow .miniaturka:hover { border-color: var(--akcent); }

/* MIKROFON PRZY PODPISIE ZDJĘCIA jest mniejszy niż ten przy wywiadzie — stoi w etykiecie
   nad polem, a nie w nagłówku sekcji. */
.dodaj-zalacznik .podpis { display: inline-flex; align-items: center; gap: 6px; }
.dodaj-zalacznik .mikrofon,
.lista-zalacznikow .opisywanie .mikrofon {
  width: auto; min-height: 22px; height: 22px; padding: 0 7px; font-size: 11px; font-weight: 600;
  border-radius: 6px; border: 1px solid var(--linia); background: var(--karta); color: var(--pod);
}
.lista-zalacznikow .opisywanie .mikrofon { min-height: 36px; height: 36px; padding: 0 10px; }
.dodaj-zalacznik .mikrofon:hover,
.lista-zalacznikow .opisywanie .mikrofon:hover { border-color: var(--akcent); color: var(--akcent); }

/* --- UWAGI GABINETU: NIE DLA PACJENTA -------------------------------------------------------
   Piotr, 10.09.2026: „dodaj jeszcze do wizyt pole uwagi — tylko widoczne dla mnie i dla
   recepcji". Inny, ciepły kolor niż reszta karty — żeby jednym spojrzeniem było widać,
   że to notatka robocza, a nie część dokumentacji, którą pacjent zobaczy. */
.wizyta-sekcja.uwagi-gabinetu { background: #fffdf6; border: 1px solid #f0e2c0; }
.wizyta-sekcja.uwagi-gabinetu > h3::after {
  content: 'widzi lekarz i recepcja, nie pacjent'; margin-left: 10px;
  font-size: 11px; font-weight: 600; letter-spacing: 0; text-transform: none;
  color: #8a5a20; background: #fdf4e6; border: 1px solid #edd3a6;
  border-radius: 999px; padding: 1px 9px;
}
.wizyta-sekcja.uwagi-gabinetu .edytor { background: #fffdf6; border-color: #f0e2c0; }
.wizyta-sekcja.uwagi-gabinetu .edytor:focus { background: #fff; border-color: #d9a441; }
/* JEDNA LINIJKA, KTÓRA ROŚNIE (Piotr, 17.09.2026: „uwagi prywatne zmieść do jednej linijki
   i niech to się po prostu rozwija, jak będzie trzeba więcej napisać. Po co takie wielkie?").
   Pole jest `contenteditable`, więc rośnie samo z każdym wierszem — wystarczyło zdjąć wysokość
   trzymaną na siłę. Cała rubryka jest przy tym ciaśniejsza: to notatka, a nie rozdział wizyty. */
.wizyta-sekcja.uwagi-gabinetu { padding: 10px 14px; }
.wizyta-sekcja.uwagi-gabinetu > h3 { font-size: 14px; margin-bottom: 2px; }
.wizyta-sekcja.uwagi-gabinetu .edytor { min-height: 0; padding: 7px 12px; line-height: 1.5; }
.wizyta-sekcja.uwagi-gabinetu .pasek-edytora { display: none; }
.wizyta-sekcja.uwagi-gabinetu:focus-within .pasek-edytora { display: flex; }

/* === OKNO WYSYŁKI WIZYTY DO PACJENTA ==========================================================
   Piotr, 10.09.2026: „wysyłając chcę zaznaczyć, jakie pola chcę wysłać i zobaczyć podgląd przed
   wysłaniem". Po lewej wybór i adresy, po prawej podgląd — ten sam dokument, który pójdzie. */
.okno-wysylki { position: fixed; inset: 0; z-index: 60; display: flex;
  align-items: center; justify-content: center; padding: 20px; }
.okno-wysylki .cien-okna { position: absolute; inset: 0; background: rgba(15, 23, 42, .34); }
.pudlo-wysylki {
  /* SZERSZE OKNO, ŻEBY PODGLĄD BYŁ W SKALI 1:1. Kartka ma 210 mm (794 px); przy oknie
     1060 px prawa kolumna miała 670 px i podgląd zmniejszał się do 82% -- litery robiły się
     dziesięciopunktowe. Przy 1220 px kolumna ma 830 px i dokument stoi w naturalnej wielkości. */
  position: relative; z-index: 1; width: min(1220px, 96vw); max-height: 92vh;
  display: flex; flex-direction: column;
  background: var(--karta); border-radius: 14px; padding: 18px 20px 20px;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .28);
}
.pudlo-wysylki > h3 {
  margin: 0 0 14px; font-size: 17px; font-weight: 700; display: flex; align-items: center;
}
.pudlo-wysylki > h3 .zamknij-panel { margin-left: auto; width: auto; min-height: 30px; padding: 0 10px; }
.srodek-wysylki { display: flex; gap: 20px; min-height: 0; flex: 1 1 auto; }
/* LEWA KOLUMNA PRZEWIJA SIĘ W CAŁOŚCI, A PRZYCISKI STOJĄ NA DOLE (Piotr, 19.09.2026,
   ze zrzutem: „to w ogóle tego nie da się obsługiwać"). Do tego dnia przewijały się TRZY
   rzeczy naraz: sama lista pól (własne 250 px i własny pasek), kolumna wokół niej i strona
   pod spodem. Teraz przewija się jedno miejsce: środek kolumny. */
.lewa-wysylki { flex: 0 0 340px; display: flex; flex-direction: column; min-height: 0; }
.lewa-wysylki > .przewijane { overflow-y: auto; min-height: 0; flex: 1 1 auto;
  padding-right: 6px; overscroll-behavior: contain; }
.prawa-wysylki { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.srodek-wysylki h4 {
  margin: 0 0 8px; font-size: 11px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .07em;
}
.lewa-wysylki h4:not(:first-child) { margin-top: 18px; }
.pola-wysylki { display: grid; gap: 3px; }
.pola-wysylki label { margin: 0; font-size: 14px; font-weight: 500; color: var(--tekst); }
.uwaga-wysylki { margin: 8px 0 0; font-size: 12px; }
.pole-wysylki { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px;
  font-size: 12px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .04em; }
.pole-wysylki input {
  padding: 9px 12px; font: inherit; font-size: 15px; font-weight: 400;
  text-transform: none; letter-spacing: 0; color: var(--tekst);
  border: 1.5px solid var(--linia); border-radius: 9px; background: #fbfcfd;
}
.pole-wysylki input:focus { outline: none; border-color: var(--akcent); background: #fff; }
#podglad-wysylki {
  flex: 1 1 auto; width: 100%; min-height: 420px; border: 1px solid var(--linia);
  border-radius: 10px; background: #eef1f5;
}
.stan-wysylki { margin: 10px 0 0; font-size: 13.5px; min-height: 16px; }
.stan-wysylki.dobrze { color: var(--dobrze); }
.stan-wysylki.blad { color: var(--blad); font-weight: 600; }
.stan-wysylki .haslo {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 16px;
  letter-spacing: .12em; background: var(--akcent-tlo); color: var(--akcent);
  border-radius: 6px; padding: 1px 8px;
}
@media (max-width: 900px) {
  /* NA TELEFONIE KOLUMNY STAJĄ JEDNA POD DRUGĄ i przewija się całe wnętrze okna -- a wtedy
     „Wyślij" ucieka pod spód. Dlatego rząd przycisków przykleja się do dołu (19.09.2026). */
  .srodek-wysylki { flex-direction: column; overflow-y: auto; overscroll-behavior: contain; }
  .lewa-wysylki { flex: 0 0 auto; }
  .lewa-wysylki > .przewijane { overflow: visible; padding-right: 0; }
  .lewa-wysylki > .stopka-wysylki {
    position: sticky; bottom: 0; z-index: 2; padding-bottom: 8px;
    box-shadow: 0 -8px 16px -12px rgba(15, 23, 42, .5);
  }
  #podglad-wysylki { min-height: 320px; }
}
/* Kratki w jednej linii z napisem — `.wybor-w-linii` jest tu z innej części programu
   i sama z siebie stawia kratkę pod tekstem. */
.pola-wysylki label { display: flex; align-items: center; gap: 10px; padding: 7px 8px;
  border-radius: 8px; cursor: pointer; }
.pola-wysylki label:hover { background: var(--tlo); }
/* Kratka przy „Pieczątka i podpis" siadała POD napisem (zrzut Piotra z 19.09.2026):
   `.wybor-w-linii` ustawia ją do góry, a nadmuchane pole spychało ją do następnej linijki. */
.lewa-wysylki .wybor-w-linii { align-items: center; gap: 10px; padding: 7px 8px;
  border-radius: 8px; font-size: 14.5px; }
.lewa-wysylki .wybor-w-linii input { margin: 0; }
/* „Wyślij" ma być widoczny bez przewijania -- stoi pod przewijaną częścią, na dole kolumny. */
.lewa-wysylki > .stopka-wysylki {
  flex: 0 0 auto; background: var(--karta); padding: 12px 0 0; margin: 10px 0 0;
  border-top: 1px solid var(--linia);
}
.lewa-wysylki > .stopka-wysylki .rzad-przyciskow { margin: 0; }
/* 19.09.2026: ZDJĘTE dwie reguły, które robiły z tego okno nie do obsługi --
   `.pola-wysylki{max-height:250px;overflow-y:auto}` (drugi pasek przewijania w środku
   kolumny, pięć pól na raz) i `.lewa-wysylki{overflow:visible}` (przez które kolumna rosła
   poza okno). Przewijanie jest teraz jedno, w `.przewijane`. */

/* „TO BADANIE JEST JUŻ NA LIŚCIE" (Piotr, 19.09.2026: „gdy wpisuję coś, na przykład TSH,
   i chcę to wybrać po raz drugi, powinno mi podpowiedzieć, że to badanie już jest na liście").
   Dodane badanie znika z wyników (jego miejsce jest na skierowaniu) -- ale program mówi o tym
   wprost, zamiast pisać „nie ma takiego badania w cenniku". */
/* KRWISTE CZERWONE, BO TO OSTRZEŻENIE (Piotr, 19.09.2026: „to powinno być napisane na
   czerwono (...) a nie na zielono, bo to bez sensu", a potem: „ma być czerwone, krwiste,
   takie czerwone, żeby było bardzo dobrze widoczne").

   Zielony w tym programie znaczy „zrobione, jest dobrze" -- tym samym kolorem melduje się
   „dodano do cennika". Tu chodzi o coś odwrotnego: zatrzymaj się, tego już nie dokładaj.
   Blade tło z cienką ramką ginęło wśród innych pasków, więc tło jest pełne, litery białe,
   a z przodu stoi znak ostrzegawczy.

   BLOK, NIE FLEX: przy `display:flex` każdy kawałek tekstu robił się osobną kolumną
   i zdanie rozjeżdżało się na dwie linijki w pół słowa. */
.bad-juz-jest {
  display: block;
  margin: 0 0 10px; padding: 13px 16px; border-radius: 10px;
  background: #d90429; border: 0; box-shadow: 0 3px 10px rgba(217, 4, 41, .35);
  color: #fff; font-size: 15px; line-height: 1.4; font-weight: 700;
}
.bad-juz-jest::before { content: "⚠ "; font-size: 18px; }
.bad-juz-jest b { font-weight: 800; color: #fff; text-decoration: underline;
  text-underline-offset: 3px; }
.bad-juz-jest .pod { color: rgba(255, 255, 255, .92); font-size: 13.5px; font-weight: 500; }

/* CZY KOD POSZEDŁ DO PACJENTA (Piotr, 12.09.2026: „chciałbym wiedzieć, czy to w ogóle wyszło").
   Trzy stany, trzy kolory: zielony -- poszło, czerwony -- nie poszło i wiadomo dlaczego,
   szary -- nikt jeszcze nie próbował. Przycisk stoi przy każdym. */
.wysylka { border-top: 1px solid var(--linia); margin-top: 8px; padding-top: 8px; }
.wysylka > summary { cursor: pointer; font-size: 13px; list-style: none; }
.wysylka > summary::-webkit-details-marker { display: none; }
.wysylka > summary::after { content: ' ▾'; color: var(--pod); }
.wysylka[open] > summary::after { content: ' ▴'; }
.wysylka[open] > summary { margin-bottom: 8px; }
.wysylka > .wysylka-wiersz + .wysylka-wiersz { margin-top: 6px; }
.wysylka-wiersz { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13px; }
.wysylka-wiersz button { margin-left: auto; }
.wysylka-ok { color: var(--dobrze); font-weight: 600; }
.wysylka-zle { color: var(--blad); font-weight: 600; }
.wysylka-nic { color: var(--pod); }

/* POLE, KTÓREGO NIE WOLNO ZOSTAWIĆ PUSTEGO (Piotr, 12.09.2026: „niech to pole dawkowania
   będzie zaznaczone na taki czerwony, różowy, pomarańczowy kolor"). Pomarańcz, nie czerwień:
   czerwień w tym programie znaczy „błąd", a to jest „jeszcze niewypełnione". */
input.pole-wymagane { border-color: #ea580c; background: #fff7ed; }
input.pole-wymagane:focus { box-shadow: 0 0 0 3px rgba(234, 88, 12, .18); }
.psychotrop-uwaga { color: #b91c1c; font-weight: 600; font-size: 13px; margin: 8px 0 4px; }
/* Zwinięte szczegóły ceny i zamienniki -- rozwija je lekarz, gdy ich potrzebuje. */
.kwota-wiecej summary, .zamienniki summary { cursor: pointer; color: var(--pod); font-size: 13px;
  padding: 2px 0; }
.kwota-wiecej[open] summary, .zamienniki[open] summary { margin-bottom: 4px; }
.zamienniki { margin-top: 8px; }

/* UWAGA PRYWATNA O PACJENCIE -- PASEK U GORY KARTY WIZYTY (Piotr, 12.09.2026: „powinna byc
   w karcie caly czas i w kolejnych wizytach (...) widzimy ja i po prostu kreseczka musimy
   usunac"). Ten sam cieply kolor, co pole „Uwagi prywatne" nizej -- bo to jest to samo. */
.pasek-uwagi-pacjenta { display: flex; align-items: center; gap: 10px; margin: 0 0 12px;
  padding: 9px 12px; background: #fffdf6; border: 1px solid #f0e2c0; border-radius: 10px;
  color: #6b4b16; font-size: 14px; }
.pasek-uwagi-pacjenta .znak { flex: none; width: 20px; height: 20px; border-radius: 50%;
  background: #d9a441; color: #fff; font-weight: 700; display: flex; align-items: center;
  justify-content: center; font-size: 13px; }
.pasek-uwagi-pacjenta .tresc { flex: 1 1 auto; min-width: 0; font-weight: 600; }
.pasek-uwagi-pacjenta .pod { flex: none; font-size: 11.5px; color: #9a7a45; }
.pasek-uwagi-pacjenta .zdejmij { flex: none; border: 1px solid #edd3a6; background: #fff;
  color: #8a5a20; border-radius: 8px; padding: 2px 9px; cursor: pointer; font-size: 13px; }
.pasek-uwagi-pacjenta .zdejmij:hover { background: #fdf4e6; }

/* === SŁUPEK FINANSÓW: ZWIJANE SEKCJE I PASEK OSOBY ==========================================
   Piotr, 13.09.2026: „naprawdę nie widzę tego, nie działa to".
   I nie miał jak zobaczyć. Ten słupek NIE jest słupkiem Finansów -- to nasz własny, rysowany
   z tego, co Finanse przyślą. Wysyłały samą treść, więc każda zmiana wyglądu zrobiona po tamtej
   stronie (zwijane sekcje, pasek osoby) zostawała u nich. Teraz jadą razem z menu, a to jest
   ich wygląd po naszej stronie -- ten sam, co tam. */
/* ZWINIĘTA SEKCJA WYGLĄDA JAK PRZYCISK, BO NIM JEST (Piotr, 13.09.2026: „z tych zakładek
   zrób takie przyciski, takie panele fajne"). Ten sam kafelek, co w Finansach -- słupek jest
   jeden, więc i wygląd musi być jeden. */
#menu-boczne nav .menu-grupa-finanse.grupa-zwijana > .menu-grupa-tytul { cursor: pointer;
  display: flex; align-items: center; gap: 9px; width: 100%;
  margin: 0 0 3px; padding: 9px 12px; border: 1px solid #e8edf3; border-radius: 9px;
  background: #fff; font-size: 11.5px; letter-spacing: .05em;
  color: color-mix(in srgb, var(--sekcja, #64748b) 82%, #1f2937);
  transition: border-color .12s ease, background-color .12s ease, box-shadow .12s ease; }
#menu-boczne nav .menu-grupa-finanse.grupa-zwijana > .menu-grupa-tytul::before { content: '';
  flex: none; width: 9px; height: 9px; border-radius: 50%; background: var(--sekcja, #64748b); }
#menu-boczne nav .menu-grupa-finanse.grupa-zwijana > .menu-grupa-tytul:hover {
  background: color-mix(in srgb, var(--sekcja, #2563eb) 6%, #fff);
  border-color: color-mix(in srgb, var(--sekcja, #2563eb) 32%, #e8edf3);
  box-shadow: 0 1px 3px color-mix(in srgb, var(--sekcja, #2563eb) 16%, transparent); }
#menu-boczne nav .menu-grupa-finanse.grupa-zwijana > .menu-grupa-tytul:focus-visible {
  outline: 2px solid var(--sekcja, #2563eb); outline-offset: 2px; }
/* Otwarta ma wyglądać na wciśniętą -- inaczej po rozwinięciu kafelek udaje, że nic się nie stało. */
#menu-boczne nav .menu-grupa-finanse.grupa-zwijana:not(.grupa-zwinieta) > .menu-grupa-tytul {
  background: color-mix(in srgb, var(--sekcja, #2563eb) 9%, #fff);
  border-color: color-mix(in srgb, var(--sekcja, #2563eb) 30%, #e8edf3); font-weight: 700; }
.grupa-strzalka { margin-left: auto; font-size: 10px; opacity: .7; }
/* SILNIEJ NIZ REGULA BAZOWA -- i to nie jest ozdoba.
   `#menu-boczne nav button` (id + dwa elementy) ustawia `display: flex` i BIJE zwykly zapis
   z dwoma klasami. Zwinieta sekcja rysowala wiec strzalke „w prawo", a pozycje zostawaly
   na ekranie: program mowil „zwiniete", arkusz pokazywal „otwarte" (Piotr, 13.09.2026:
   „nie ma zwiniętych, tak jak powinno być" -- i na zrzucie widac strzalke przy otwartej liscie).
   Prefiks `#menu-boczne nav` wyrownuje sile. */
#menu-boczne nav .menu-grupa-finanse.grupa-zwinieta > button,
#menu-boczne nav .menu-grupa-finanse.grupa-zwinieta > a { display: none; }

/* Kolor osoby przy pozycji -- „Przychody Piotr" i „Przychody Robert" różnią się jednym słowem
   NA KOŃCU napisu, więc czyta się je dopiero po kliknięciu. Pasek mówi to samo wcześniej. */
/* Ta sama sila co regula bazowa (id + dwa elementy), inaczej `padding: 7px 12px` wygrywa
   i pasek osoby wchodzi pod ikonke. */
#menu-boczne nav button.ma-osobe { position: relative; padding-left: 17px; }
#menu-boczne nav button.ma-osobe::before { content: ''; position: absolute; left: 4px;
  top: 6px; bottom: 6px; width: 3px; border-radius: 2px; background: var(--osoba, transparent); }

/* ================================================================================================
   SKIEROWANIE NA BADANIA (13.09.2026)
   ------------------------------------------------------------------------------------------------
   Ustalenia: docs/skierowanie-alab-propozycja-2026-09-13.md (w Finansach).
   Trzy lampki JEDNA POD DRUGĄ, nie obok siebie — recepcjonistka, 13.09.2026: „trzy rzeczy
   świecące na jednym wierszu to już plama, nie informacja".
   ============================================================================================== */

.lista-skierowan { list-style: none; margin: 0; padding: 0; }
.skierowanie-wiersz {
  border: 1px solid var(--linia); border-radius: 12px;
  padding: 12px 14px; margin-bottom: 10px; background: var(--karta);
}
.naglowek-skierowania {
  display: flex; gap: 12px; align-items: center; flex-wrap: wrap; justify-content: space-between;
}
.skierowanie-wiersz:hover { border-color: var(--linia-mocna); }
.naglowek-skierowania .co { display: flex; flex-direction: column; min-width: 0; flex: 1 1 220px; }
.naglowek-skierowania .co .pod { margin: 2px 0 0; }
/* DŁUGIE NAZWISKO NIE ROZPYCHA WIERSZA I NIE ŁAMIE SIĘ NA TRZY LINIJKI -- ucina się kropkami,
   a całe widać po najechaniu (Piotr, 13.09.2026: „może skróć nazwisko"). */
.naglowek-skierowania .co > b {
  font-size: 15.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.naglowek-skierowania .co .pod {
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 13px;
}

/* PRZYCISKI PRZY WIERSZU -- JEDNA RODZINA, NIE CZTERY (Piotr, 13.09.2026: „te przyciski
   powinny być ładniejsze"). Do tej pory stały obok siebie: pełny niebieski, dwa szare i goły
   krzyżyk bez ramki -- każdy innej wysokości. Teraz mają jedną wysokość, jedno zaokrąglenie
   i ten sam sposób reagowania; różni je WYŁĄCZNIE waga: „Drukuj" jest pełny, reszta w ramce,
   a „Usuń" czerwienieje dopiero pod kursorem. */
/* WSZYSTKIE SPOSOBY WYDRUKU W JEDNEJ LINII (Piotr, 20.09.2026: „to wszystko ma się zmieścić
   w jednej linii, bo teraz się nie mieści").
   Dziesięć przycisków obok siebie mieści się tylko wtedy, gdy każdy jest ciasny: mniejsze
   litery, węższe boki, mniejsza przerwa. `nowrap` trzyma rząd w jednej linii, a `min-width: 0`
   na rodzicu pozwala mu się zwęzić — bez tego flex nie oddaje miejsca i rząd i tak się łamie.
   CO SIE STANIE, JESLI TO ZMIENISZ: dołożenie jedenastego przycisku wypchnie ostatni poza
   kartkę. Najpierw skróć którąś nazwę, potem dokładaj. Na wąskim ekranie (reguła ~2866)
   rząd celowo wraca do zawijania — tam jedna linia i tak by się nie zmieściła. */
.naglowek-skierowania .co-z-tym {
  display: flex; gap: 4px; flex-wrap: nowrap; align-items: center; flex: 1 1 auto;
  min-width: 0; justify-content: flex-end;
}
.naglowek-skierowania .co-z-tym button {
  display: inline-flex; align-items: center; gap: 4px; white-space: nowrap;
  min-height: 32px; padding: 5px 9px; font-size: 12.5px; border-radius: 8px;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.naglowek-skierowania .co-z-tym button .ikona { font-size: 13px; line-height: 1; opacity: .85; }
.naglowek-skierowania .co-z-tym button.glowny .ikona { opacity: 1; }
.naglowek-skierowania .co-z-tym button:not(.glowny):not(.bad-usun) {
  background: var(--karta); border: 1px solid var(--linia-mocna); color: var(--tekst);
}
.naglowek-skierowania .co-z-tym button:not(.glowny):not(.bad-usun):hover {
  border-color: var(--akcent); color: var(--akcent); background: var(--akcent-tlo);
}
/* „Usuń" ma być najtrudniejszy do naciśnięcia przez przypadek: bez ramki, bez koloru --
   aż do chwili, gdy ktoś naprawdę na nim stanie. */
.naglowek-skierowania .co-z-tym button.bad-usun {
  border: 1px solid transparent; background: none; box-shadow: none; color: var(--pod);
  padding: 7px 10px; font-size: 15px; min-width: 36px; justify-content: center;
}
.naglowek-skierowania .co-z-tym button.bad-usun:hover {
  background: var(--blad-tlo); border-color: #fecaca; color: var(--blad);
}

.stan-skierowania { display: grid; gap: 7px; margin: 11px 0 0; }
.stan-skierowania .lampka,
.bad-karta .lampka {
  display: flex; gap: 11px; align-items: flex-start;
  border: 1px solid transparent; border-radius: 11px; padding: 10px 13px; font-size: 14px;
}
.stan-skierowania .lampka .kropka {
  width: 10px; height: 10px; border-radius: 50%; flex: 0 0 10px; margin-top: 5px;
}
.stan-skierowania .lampka .tresc { flex: 1; min-width: 0; }
.stan-skierowania .lampka b { display: block; font-size: 14.5px; }
.stan-skierowania .lampka .drobne { color: var(--pod); font-size: 13px; margin-top: 2px; display: block; }
.stan-skierowania .lampka .obok { flex: 0 0 auto; align-self: center; }
/* LAMPKA Z WIELOMA PRZYCISKAMI (nowa wycena, 14.10.2026) -- przyciski schodzą do nowego rzędu, napis nie ściska się do słowa. */
.stan-skierowania .lampka { flex-wrap: wrap; }
.stan-skierowania .lampka .tresc { min-width: 220px; }

.stan-skierowania .l-czerwona { background: var(--blad-tlo); border-color: #fecaca; }
.stan-skierowania .l-czerwona b { color: var(--blad); }
.stan-skierowania .l-czerwona .kropka {
  background: var(--blad); animation: puls-skierowania 1.2s ease-in-out infinite;
}
@keyframes puls-skierowania {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: .35; transform: scale(.75); }
}
/* Kto wyłączył animacje w systemie, ten ich tu nie dostanie — kolor zostaje. */
@media (prefers-reduced-motion: reduce) {
  .stan-skierowania .l-czerwona .kropka { animation: none; }
}
.stan-skierowania .l-zolta { background: var(--uwaga-tlo); border-color: #fde68a; }
.stan-skierowania .l-zolta b { color: var(--uwaga); }
.stan-skierowania .l-zolta .kropka { background: var(--uwaga); }
.stan-skierowania .l-szara { background: var(--tlo); border-color: var(--linia); }
/* ZIELONA -- „poszło i jest aktualne". Dopisana 16.09.2026 razem z linijką stanu przy
   zaświadczeniach; wcześniej lampki miały tylko czerwoną, żółtą i szarą. */
.stan-skierowania .l-zielona { background: #ecfdf5; border-color: #a7f3d0; }
.stan-skierowania .l-zielona b { color: #047857; }
.stan-skierowania .l-zielona .kropka { background: #10b981; }
.stan-skierowania .l-szara b { color: var(--pod); font-weight: 600; }
.stan-skierowania .l-szara .kropka { background: var(--linia-mocna); }

.badania-w-wierszu { list-style: none; margin: 10px 0 0; padding: 0; font-size: 14px; }
.badania-w-wierszu li {
  display: flex; justify-content: space-between; gap: 12px;
  padding: 4px 0; border-bottom: 1px solid var(--linia-cicha);
}
.badania-w-wierszu li:last-child { border-bottom: none; }
.badania-w-wierszu .bad-kwota { font-variant-numeric: tabular-nums; color: var(--pod); white-space: nowrap; }

/* ——— formularz ——— */
.bad-gora { display: flex; gap: 12px; align-items: baseline; justify-content: space-between; flex-wrap: wrap; }
.bad-gora h3 { margin: 0; }
.bad-lab { color: var(--granat); }
.bad-ile { font-variant-numeric: tabular-nums; color: var(--pod); font-size: 14px; }

.bad-szukaj { position: relative; margin: 12px 0 10px; }
.bad-podpowiedzi {
  position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 20;
  background: var(--karta); border: 1px solid var(--linia-mocna); border-radius: 12px;
  box-shadow: var(--karta-cien); max-height: 320px; overflow-y: auto; padding: 5px;
}
.bad-podpowiedzi button {
  display: flex; width: 100%; gap: 10px; align-items: baseline; text-align: left;
  border: none; background: none; border-radius: 9px; padding: 9px 11px; min-height: 0;
}
.bad-podpowiedzi button:hover { background: var(--akcent-tlo); }
.bad-podpowiedzi .n { flex: 1; min-width: 0; }
.bad-podpowiedzi .h {
  font-size: 11.5px; color: var(--granat); background: var(--akcent-tlo);
  border-radius: 999px; padding: 2px 8px; white-space: nowrap;
}
.bad-podpowiedzi .c { font-variant-numeric: tabular-nums; color: var(--pod); white-space: nowrap; }
.bad-podpowiedzi .nic { padding: 11px; color: var(--pod); font-size: 14px; }

.bad-podpis { margin: 0 0 7px; }
.bad-karta .pastylki { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
.bad-karta .pastylka {
  border: 1px solid var(--linia-mocna); background: var(--karta); border-radius: 999px;
  padding: 7px 15px; font-size: 14px; min-height: 0;
}
.bad-karta .pastylka .ile { color: var(--pod); }
.bad-karta .pastylka.nowy { border-style: dashed; color: var(--akcent); }

.bad-tabela { width: 100%; border-collapse: collapse; font-size: 14.5px; }
.bad-tabela td { padding: 9px 8px; border-bottom: 1px solid var(--linia-cicha); vertical-align: top; }
.bad-tabela tr:last-child td { border-bottom: none; }
.bad-tabela .pr { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.bad-tabela .nazwa { font-weight: 600; }
.bad-tabela .kod { display: block; font-size: 12px; color: var(--pod); font-weight: 400; }
.bad-tabela .bylo {
  display: inline-block; margin-top: 4px; font-size: 12.5px; color: var(--granat);
  background: var(--akcent-tlo); border-radius: 6px; padding: 2px 8px;
}
.bad-suma {
  display: flex; justify-content: flex-end; gap: 14px; align-items: baseline;
  margin-top: 12px; padding-top: 12px; border-top: 2px solid var(--linia);
}
.bad-suma b { font-size: 19px; color: var(--granat); font-variant-numeric: tabular-nums; }
.bad-suma .oszczednosc { color: var(--dobrze); font-size: 13px; }

.bad-cykl {
  background: var(--akcent-tlo); border: 1px solid #c7ddff; border-radius: 11px;
  padding: 13px 15px; margin: 16px 0 0;
}
.bad-cykl .naglowek { font-size: 14.5px; font-weight: 600; color: var(--granat); }
.bad-cykl .drobne { font-size: 13px; color: var(--pod); margin: 3px 0 11px; }
.bad-cykl .cykl-pola { display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-end; }
.bad-cykl .krotkie { flex: 0 0 160px; }
/* KWADRACIK JEST WSPOLNY, nie tylko w karcie skierowania. Gdy regula stala wylacznie pod
   `.bad-karta`, ptaszek na ekranie recepcji bral szerokosc 100% z reguly bazowej i rozdymal
   sie na caly kafelek. */
.kwadracik {
  display: flex; gap: 8px; align-items: center; font-size: 14.5px;
  text-transform: none; letter-spacing: 0; color: var(--tekst); font-weight: 400; margin: 0;
}
.bad-karta .kwadraciki { display: flex; gap: 20px; flex-wrap: wrap; align-items: center; margin: 16px 0 0; }
.bad-gdzie { margin-top: 16px; grid-template-columns: 2fr 1fr 1fr; align-items: end; }
@media (max-width: 720px) { .bad-gdzie { grid-template-columns: 1fr; } }

@media (max-width: 720px) {
  /* NA TELEFONIE DWIE RÓWNE KOLUMNY (Piotr, 27.09.2026, pomysł 6). Dziesięć przycisków zawijało
     się w poszarpane rzędy różnej długości; teraz stoją w siatce, każdy wysoki na palec. */
  .naglowek-skierowania .co-z-tym { width: 100%; display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .naglowek-skierowania .co-z-tym button { width: 100%; min-height: 40px; justify-content: center;
    white-space: normal; text-align: center; font-size: 13.5px; }
  .naglowek-skierowania .co-z-tym button.bad-usun { width: 100%; }
  .stan-skierowania .lampka { flex-wrap: wrap; }
  .stan-skierowania .lampka .obok { width: 100%; margin-top: 9px; }
  .bad-cykl .krotkie { flex: 1 1 100%; }

  /* NA TELEFONIE TABELA BADAN PRZESTAJE BYC TABELA -- ta sama poprawka, co na kartce.
     Inaczej nazwa lamie sie na trzy wiersze, a notka „to badanie bylo…" robi sie waskim
     slupkiem po jednym slowie. */
  .bad-tabela, .bad-tabela tbody, .bad-tabela tr, .bad-tabela td { display: block; width: 100%; }
  .bad-tabela tr {
    border: 1px solid var(--linia); border-radius: 11px;
    padding: 10px 12px; margin-bottom: 8px; position: relative;
  }
  .bad-tabela td { border: none; padding: 0; }
  .bad-tabela .nazwa { padding-right: 34px; }
  .bad-tabela .pr { text-align: left; margin-top: 6px; }
  .bad-tabela td.pr:last-child {
    position: absolute; top: 6px; right: 6px; width: auto; margin: 0;
  }
}

/* ——— co ten pacjent już miał (skierowania ze wszystkich wizyt) ——— */
.bad-poprzednie-panel { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--linia); }
.bad-poprzednie-panel h4 { margin: 0 0 8px; font-size: 14px; }
.bad-poprzednie { list-style: none; margin: 0; padding: 0; font-size: 14px; }
.bad-poprzednie li {
  display: flex; gap: 12px; align-items: baseline;
  padding: 8px 2px; border-bottom: 1px solid var(--linia-cicha);
}
.bad-poprzednie li:last-child { border-bottom: none; }
.bad-poprzednie .data { font-variant-numeric: tabular-nums; font-weight: 600; flex: 0 0 92px; }
.bad-poprzednie .lab {
  font-size: 12px; color: var(--pod); border: 1px solid var(--linia);
  border-radius: 999px; padding: 2px 9px; white-space: nowrap;
}
.bad-poprzednie .co { flex: 1; min-width: 0; color: var(--pod); }
.bad-poprzednie .kw { font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
@media (max-width: 720px) {
  .bad-poprzednie li { flex-wrap: wrap; }
  .bad-poprzednie .co { flex: 1 1 100%; order: 3; }
  .bad-poprzednie .kw { margin-left: auto; }
}

/* Treść dla laboratorium — pole tylko do skopiowania. */
#lab-tresc {
  width: 100%; font: inherit; font-size: 14px; line-height: 1.55;
  padding: 12px 14px; border: 1px solid var(--linia-mocna); border-radius: 11px;
  background: var(--tlo); color: var(--tekst); resize: vertical;
}

/* ——— ekran „Badania" (recepcja) ——— */
/*
   Piotr, 13.09.2026: „te przyciski powinny być ładniejsze (...) po prawej nowa wycena,
   albo to jakoś ustaw lepiej".

   Zasada całego tego ekranu: JEDNA rzecz, którą się ZACZYNA („Nowa wycena"), stoi po prawej
   i jest jedynym pełnym przyciskiem u góry. Wszystko inne jest ciche, dopóki nie będzie
   potrzebne.
*/
.bad-ekran-gora {
  display: flex; gap: 18px; align-items: flex-start; justify-content: space-between;
  flex-wrap: wrap; padding-bottom: 16px; border-bottom: 1px solid var(--linia);
}
.bad-ekran-gora h2 { margin: 0 0 3px; }
.bad-ekran-gora .pod { margin: 0; max-width: 56ch; }

/* „+ Nowa wycena" — pełny, wypukły przycisk. Plus w kółku mówi „tu się coś zaczyna". */
.bad-nowa {
  display: inline-flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 600;
  padding: 11px 20px 11px 15px; border-radius: 11px;
  box-shadow: 0 2px 5px -1px rgba(37, 99, 235, .35), 0 8px 18px -8px rgba(37, 99, 235, .55);
  transition: transform .08s ease, box-shadow .15s ease, background-color .15s ease;
}
/* ZNACZEK PROBÓWKI, NIE PLUS (Piotr, 13.09.2026: „Nowa wycena powinna mieć ten znaczek
   właśnie probówki"). Ten sam znak stoi przy zakładce „Badania" w słupku -- przycisk i menu
   mówią o tej samej rzeczy, więc mają ten sam znak. */
.bad-nowa .plus {
  font-size: 16px; line-height: 1; flex: none; display: inline-flex; align-items: center;
}
.bad-nowa:hover { box-shadow: 0 3px 7px -1px rgba(37, 99, 235, .4), 0 12px 24px -8px rgba(37, 99, 235, .6); }
.bad-nowa:active { transform: translateY(1px); }

/* ——— POLA PACJENTA: SZEROKOŚĆ WEDŁUG TEGO, CO SIĘ W NIE WPISUJE ———
   Piotr, 13.09.2026: „zrób szersze na nazwisko i imię, na PESEL zrób mniejsze o połowę,
   na telefon o połowę, a adres, ulica i kod większe".

   Osiem kolumn: nazwisko bierze cztery, PESEL i telefon po dwie (czyli po połowie tego,
   co nazwisko), a adres całą szerokość — bo mieści ulicę, numer, kod i miasto naraz.
   Wcześniej wszystkie cztery pola były równe, więc PESEL miał tyle miejsca, co nazwisko,
   a adres nie mieścił się nigdy. */
/* WSZYSTKO W JEDNEJ LINII (Piotr, 13.09.2026: „nazwisko, imię, PESEL, telefon i adres powinny
   być w jednej linii na górze. Tylko PESEL po prostu zmniejsz, a telefon do połowy").

   Dwanaście kolumn: nazwisko 4, PESEL 2, telefon 2, adres 4. PESEL ma jedenaście cyfr
   i szersze pole jest mu do niczego; adres mieści ulicę, numer, kod i miasto. */
.bad-e-pacjent { grid-template-columns: repeat(12, 1fr); margin-bottom: 4px; gap: 10px; }
.bad-e-pacjent .pole-nazwisko { grid-column: span 4; }
.bad-e-pacjent .pole-pesel { grid-column: span 2; }
.bad-e-pacjent .pole-telefon { grid-column: span 2; }
.bad-e-pacjent .pole-adres { grid-column: span 4; }
/* Przy węższym oknie łamiemy na dwa wiersze, a nie na cztery. */
@media (max-width: 1150px) {
  .bad-e-pacjent { grid-template-columns: repeat(8, 1fr); }
  .bad-e-pacjent .pole-nazwisko { grid-column: span 4; }
  .bad-e-pacjent .pole-pesel, .bad-e-pacjent .pole-telefon { grid-column: span 2; }
  .bad-e-pacjent .pole-adres { grid-column: span 8; }
}
@media (max-width: 760px) {
  .bad-e-pacjent { grid-template-columns: repeat(2, 1fr); }
  .bad-e-pacjent .pole-nazwisko, .bad-e-pacjent .pole-adres { grid-column: span 2; }
  .bad-e-pacjent .pole-pesel, .bad-e-pacjent .pole-telefon { grid-column: span 1; }
}

/* SZUKAJKA I PRZEŁĄCZNIK W JEDNEJ LINII: pole rośnie, przełącznik trzyma swoją szerokość. */
.bad-ekran-filtry {
  display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin: 16px 0 18px;
}
/* SZUKAJKA: NIZSZA I Z ODDECHEM PRZY LUPIE.
   `.szukajka.mala` zmniejsza tylko czcionke i wciecie, a wysokosc 58 px zostawala z reguly
   bazowej -- wychodzilo wielkie pole z malym napisem przyklejonym do lupy. */
.bad-szukajka { flex: 1 1 260px; min-width: 0; margin-bottom: 0; }
.bad-szukajka input {
  min-height: 46px; padding: 11px 14px 11px 44px; font-size: 15px; font-weight: 400;
  border-width: 1.5px; border-radius: 11px;
}
.bad-szukajka .szukajka-lupa { left: 15px; font-size: 15px; opacity: .45; }

/* ——— pusta lista badań ——— */
/* Jedno zdanie, nic więcej (Piotr, 13.09.2026: „jak nikt nie czeka na decyzję, jest strasznie.
   Po co to w ogóle jest?"). U recepcji pusta lista to normalny stan, a nie zdarzenie. */
.bad-nic { color: var(--pod); font-size: 14.5px; margin: 4px 0 2px; }

@media (max-width: 720px) {
  .bad-ekran-gora { flex-direction: column; }
  .bad-gora-guziki { width: 100%; }
  .bad-nowa { flex: 1; justify-content: center; }
  .bad-gora-guziki .bad-biovis-nowe { flex: 1 1 100%; justify-content: center; order: 3; }
  .bad-ekran-filtry { flex-direction: column; align-items: stretch; }
  .bad-pastylki-filtr { width: 100%; }
  .bad-pastylki-filtr .pastylka { flex: 1; }
}

/* ——— konta w gabinecie ——— */
.lista-kont { list-style: none; margin: 0 0 16px; padding: 0; }
.lista-kont li {
  display: flex; gap: 12px; align-items: center; justify-content: space-between;
  padding: 10px 2px; border-bottom: 1px solid var(--linia-cicha);
}
.lista-kont li:last-child { border-bottom: none; }
.lista-kont .kto { display: flex; flex-direction: column; min-width: 0; }
.lista-kont .kto .pod { margin: 2px 0 0; }
.konto-nowe { border-top: 1px solid var(--linia); padding-top: 14px; }
/* POPRAWIANIE KONTA (1.10.2026): formularz staje pod kontem, wyraźnie obramowany. */
.lista-kont > .konto-nowe.poprawiane { list-style: none; border: 2px solid var(--linia); border-radius: 10px;
  padding: 14px; margin: 6px 0 12px; background: #fffbea; }
.konto-pola { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.konto-klocki { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin: 14px 0 4px; }

/* Powrót do Finansów — widoczny tylko dla konta, które stamtąd przyszło. */
#menu-boczne nav button.wroc-finanse {
  color: var(--akcent); font-weight: 600;
  border-bottom: 1px solid var(--linia); margin-bottom: 6px; padding-bottom: 10px;
}

/* Podpowiedź badania: ile zostaje i odpowiednik Biovis — to samo, co w zakładce ALAB. */
.bad-podpowiedzi .bv {
  display: block; font-size: 12px; color: var(--pod); margin-top: 2px;
}
.bad-podpowiedzi .bv b { font-variant-numeric: tabular-nums; color: var(--tekst); font-weight: 600; }
.bad-podpowiedzi .bv b.zysk { color: var(--dobrze); }
.bad-podpowiedzi .bv b.strata { color: var(--blad); }
.bad-podpowiedzi button { align-items: flex-start; }
.bad-podpowiedzi .c { font-size: 15px; font-weight: 600; color: var(--granat); }

.bad-gora-guziki { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
/* „Nowa karta" to drobiazg obok, nie drugi przycisk tej samej wagi — dlatego sama ramka. */
.bad-gora-guziki .bad-nowa-karta {
  display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
  color: var(--pod); font-size: 13.5px; text-decoration: none;
  border: 1px solid var(--linia); border-radius: 10px; padding: 10px 13px;
  transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}
.bad-gora-guziki .bad-biovis-nowe {
  display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; font-size: 14.5px; font-weight: 600;
  color: #0f766e; background: #ecfdf5; border: 1px solid #5eead4; border-radius: 11px; padding: 10px 15px;
}
.bad-gora-guziki .bad-biovis-nowe:hover { background: #d1fae5; border-color: #14b8a6; }
.bad-gora-guziki .bad-biovis-nowe[hidden] { display: none; }
.bad-gora-guziki .bad-nowa-karta:hover {
  color: var(--akcent); border-color: var(--akcent); background: var(--akcent-tlo);
}

/* ——— badania osadzone w Finansach ——— */
/* Menu jest już na ekranie — tylko tamto, z Finansów. Dwa słupki obok siebie to hałas. */
body.w-ramce #menu-boczne { display: none !important; }
body.w-ramce #program main { margin-left: 0 !important; padding: 0 !important; max-width: none; }
body.w-ramce .bad-ekran-gora { padding-top: 4px; }

/* JEDEN PRZEŁĄCZNIK O DWÓCH POŁOŻENIACH, a nie dwa osobne przyciski. Wybrane położenie
   jest białe na szarym torze — to samo, co w telefonie przy „wszystkie / nieprzeczytane". */
.bad-pastylki-filtr {
  display: inline-flex; gap: 3px; padding: 3px; border-radius: 11px;
  background: #eef2f7; border: 1px solid var(--linia); flex: none;
}
.bad-pastylki-filtr .pastylka {
  border: 1px solid transparent; background: none; border-radius: 9px;
  padding: 8px 15px; font-size: 14px; color: var(--pod); min-height: 0; white-space: nowrap;
  transition: color .15s ease, background-color .15s ease;
}
.bad-pastylki-filtr .pastylka:hover { color: var(--tekst); }
.bad-pastylki-filtr .pastylka.wybrana {
  background: var(--karta); border-color: var(--linia); color: var(--granat); font-weight: 600;
  box-shadow: 0 1px 2px rgba(15, 23, 42, .07);
}

/* „Recepcja może to wydrukować" — decyzja przy każdym dokumencie z osobna. */
.wizyta-dokument .dok-dla-recepcji { margin: 14px 0 4px; }

/* „Program się uruchamia" — jedno zdanie zamiast fałszywego ekranu logowania. */
.ekran-czekamy {
  position: fixed; top: 0; left: 0; right: 0; z-index: 999;
  margin: 0; padding: 12px 16px; text-align: center;
  background: var(--uwaga-tlo); color: var(--uwaga);
  border-bottom: 1px solid #fde68a; font-size: 14.5px; font-weight: 600;
}


/* ——— SZUKANIE BADANIA: układ przepisany z zakładki ALAB w Finansach ———
   Piotr, 13.09.2026, przysyłając dwa zrzuty: „to jest bardzo dobra zakładka z tymi procentami,
   ze zniżkami, ze wszystkim. Taka zakładka ma być". */
.bad-szukaj-blok {
  border: 1px solid var(--linia); border-radius: 14px; padding: 16px 16px 4px;
  margin: 18px 0 16px; background: var(--karta);
}
.bad-szukaj-tytul {
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--akcent); margin-bottom: 8px;
}


/* GOTOWE ZESTAWY BADAN -- nad polem szukania (Piotr, 20.09.2026: „zrob panel, do ktorego moge
   dodawac kolejne i usuwac"). Najczesciej zaczyna sie od gotowego zestawu, a dopiero potem
   dokłada pojedyncze badania -- dlatego stoja NAD szukaniem, nie pod nim. */
.bad-zestawy{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px}
.bad-zestawy[hidden]{display:none}
.bad-zestawy-tytul{font-size:12.5px;color:#64748b}
.bad-zestaw{display:inline-flex;align-items:center;border:1px solid #bfdbfe;border-radius:999px;
  background:#eff6ff;overflow:hidden}
.bad-zestaw-wstaw{border:0;background:none;font:inherit;font-size:13px;color:#1d4ed8;
  padding:4px 10px;cursor:pointer}
.bad-zestaw-wstaw:hover{background:#dbeafe}
.bad-zestaw-wstaw i{font-style:normal;margin-left:5px;background:#1d4ed8;color:#fff;
  border-radius:999px;padding:0 6px;font-size:11px}
.bad-zestaw-usun{border:0;background:none;color:#94a3b8;font-size:15px;line-height:1;
  padding:3px 8px 4px;cursor:pointer}
.bad-zestaw-usun:hover{background:#fee2e2;color:#b91c1c}.bad-szukaj-duza { margin-bottom: 6px; }
.bad-szukaj-duza input { min-height: 56px; font-size: 19px; padding-left: 52px; }
.bad-szukaj-duza .szukajka-lupa { left: 18px; font-size: 19px; }
.bad-o-cenniku { font-size: 13px; color: var(--pod); margin: 0 0 12px; }

/* PASEK RABATU. Progi w jednej linii, pola „inny / kwotowa / ma zapłacić" obok. */
/* WSZYSTKO W JEDNYM RZĘDZIE (Piotr, 13.09.2026: „te procenty umieść w jednym rzędzie, i tak
   inny, i kwotowa. Tam jeszcze dorobić po kosztach tylko pracownik"). Gdy rząd się nie mieści,
   przewija się w bok — nie łamie na trzy linijki, bo wtedy przestaje być jednym paskiem. */
/* BEZ PASKA PRZEWIJANIA (Piotr, 13.09.2026: „usun pasek przewijania, tam gdzie jest rabat.
   To ma byc na calej stronie, dostosowywac sie do wielkosci strony"). Pasek zawija sie więc
   naturalnie, a progi trzymają się razem — łamie się między grupami, nie w środku procentów. */
.bad-rabat {
  display: flex; gap: 9px; align-items: center; flex-wrap: wrap;
  background: #f8fafc; border: 1px solid var(--linia); border-radius: 12px;
  padding: 10px 12px; margin-bottom: 10px;
}
.bad-progi { flex-wrap: wrap; }
.bad-rabat .bad-prog { padding: 7px 13px; }
.bad-rabat .bad-inny input { width: 74px; }

/* „Pacjent ma zapłacić" — osobno i na środku (Piotr, 13.09.2026: „pole na środku ma zapłacić
   tyle i tyle"). To nie jest kolejny rabat: tam wpisuje się, ile OPUŚCIĆ, a tu — ile ma WYJŚĆ. */
.bad-cel-rzad { display: flex; justify-content: center; margin: 0 0 12px; }
.bad-cel {
  display: inline-flex; align-items: center; gap: 10px; margin: 0;
  font-size: 14.5px; font-weight: 600; color: var(--granat);
  text-transform: none; letter-spacing: 0;
  background: var(--akcent-tlo); border: 1px solid #c7ddff; border-radius: 999px;
  padding: 8px 18px 8px 20px;
}
.bad-cel input {
  width: 118px; min-height: 38px; padding: 6px 12px; font-size: 16px; font-weight: 700;
  text-align: right; border-radius: 10px; border: 1.5px solid #c7ddff; background: var(--karta);
  color: var(--granat); font-variant-numeric: tabular-nums;
}
.bad-cel input:focus { border-color: var(--akcent); background: #fff; }
.bad-cel-zl { font-weight: 600; color: var(--pod); }
.bad-rabat-etykieta {
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--pod);
}
.bad-progi { display: flex; gap: 6px; flex-wrap: wrap; }
.bad-prog {
  border: 1px solid var(--linia-mocna); background: var(--karta); border-radius: 999px;
  padding: 7px 15px; font-size: 14px; min-height: 0; color: var(--tekst); box-shadow: none;
}
.bad-prog:hover { border-color: var(--akcent); color: var(--akcent); background: var(--akcent-tlo); }
.bad-prog.jest-wybrany {
  background: var(--akcent); border-color: var(--akcent); color: #fff; font-weight: 600;
}
.bad-inny {
  display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px; color: var(--pod);
  margin: 0; text-transform: none; letter-spacing: 0; font-weight: 400;
}
.bad-inny input {
  width: 86px; min-height: 36px; padding: 6px 10px; font-size: 14px; border-radius: 999px;
  border: 1px solid var(--linia-mocna); background: var(--karta); text-align: center;
}
.bad-inny.jest-wybrany input { border-color: var(--akcent); background: var(--akcent-tlo); }
/* ZIELONY NA STAŁE, nie dopiero po wybraniu (Piotr, 16.08.2026). To ma być widoczne jako
   osobna, wyjątkowa rzecz, a nie kolejny próg obok „50%". */
.bad-prog-pracownik {
  border-color: #86efac; color: var(--dobrze); background: #f0fdf4; font-weight: 600;
}
.bad-prog-pracownik:hover { border-color: var(--dobrze); background: #dcfce7; color: var(--dobrze); }
.bad-prog-pracownik.jest-wybrany {
  background: var(--dobrze); border-color: var(--dobrze); color: #fff;
}
.bad-uwaga-tryb {
  flex: 1 1 100%; margin: 2px 0 0; font-size: 13px; color: var(--dobrze);
  background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 9px; padding: 8px 11px;
}

/* TABELA WYNIKÓW. Kolumny Biovisu na własnym, jaśniejszym tle — tak samo jak w ALAB-ie. */
.bad-ile-wynikow { font-size: 13.5px; color: var(--pod); margin: 2px 0 6px; }
.bad-wyniki-przewij { overflow-x: auto; margin: 0 -4px 12px; padding: 0 4px; }
.bad-tabela-wyniki { font-size: 14px; }
.bad-tabela-wyniki th {
  font-size: 12.5px; font-weight: 600; color: var(--pod); text-align: left;
  padding: 8px; border-bottom: 1px solid var(--linia); white-space: nowrap;
}
.bad-tabela-wyniki th.pr, .bad-tabela-wyniki td.pr { text-align: right; }
.bad-tabela-wyniki th.bv, .bad-tabela-wyniki td.bv { background: #f5f8ff; color: var(--granat); }
.bad-tabela-wyniki th.bv { color: var(--akcent); }
.bad-tabela-wyniki tbody tr:hover td { background: #f8fafc; }
.bad-tabela-wyniki tbody tr:hover td.bv { background: #eef3ff; }
.bad-kod-kol { color: var(--pod); font-size: 13px; white-space: nowrap; }
.bad-szary { color: var(--pod); }
.bad-mocna { font-weight: 700; }
.bad-zysk { color: var(--dobrze); font-weight: 600; }
.bad-nieznany { color: var(--uwaga); font-size: 12.5px; }
.bad-hormon {
  font-size: 11px; color: var(--granat); background: var(--akcent-tlo);
  border-radius: 999px; padding: 2px 7px; white-space: nowrap;
}
/* PTASZEK MA BYĆ PTASZKIEM, NIE POLEM (Piotr, 13.09.2026: „jak zaznaczam ten fistaszek,
   to od razu robisz taki prostokąt jakiś naokoło (...) taki od góry do dołu się robi").
   I słusznie: reguła bazowa dla `input` dawała mu ramkę, wyściółkę i 48 px wysokości,
   więc wokół kratki rysował się wysoki prostokąt. Zdejmujemy to wszystko. */
.bad-ptaszek, .kwadracik input[type="checkbox"] {
  width: 18px; height: 18px; min-height: 0; flex: 0 0 auto;
  padding: 0; margin: 0; border: 0; border-radius: 0;
  background: none; box-shadow: none; accent-color: var(--akcent); cursor: pointer;
}
.bad-ptaszek:hover, .bad-ptaszek:focus,
.kwadracik input[type="checkbox"]:hover, .kwadracik input[type="checkbox"]:focus {
  background: none; box-shadow: none; border: 0;
}
/* Obrys zostaje dla klawiatury — ale cienki i przy samej kratce, a nie na cały wiersz. */
.bad-ptaszek:focus-visible, .kwadracik input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--akcent); outline-offset: 2px;
}
/* CZERWONY CAŁY WIERSZ, nie sama liczba — czerwona kwota w szarym wierszu ginie przy
   przewijaniu kilkudziesięciu pozycji (Piotr, 16.08.2026). */
.bad-strata td { background: var(--blad-tlo) !important; }


/* BADANIE JUZ WYBRANE -- zostaje w wynikach, na czerwono (Piotr, 20.09.2026: „to badanie
   trzeba swiecic na czerwono, ze juz jest").
   CO BYLO: wybrane badania WYPADALY z listy, a przy jednym trafieniu lista zapadala sie
   w zdanie -- i nie bylo z czego wybierac, choc czlowiek dopiero pisal nazwe.
   CO SIE STANIE, JESLI TO USUNIESZ: wraca szukanie w kolko tego samego badania, bo nie widac,
   ze juz sie je ma. */
.bad-juz-wybrane{background:#fef2f2}
.bad-juz-wybrane td{color:#b91c1c}
.bad-juz-wybrane .nazwa{font-weight:600}
.bad-juz-znak{display:inline-block;width:18px;height:18px;line-height:18px;text-align:center;
  border-radius:50%;background:#dc2626;color:#fff;font-size:12px}
.bad-juz-napis{margin-left:6px;font-size:11.5px;font-weight:600;color:#b91c1c;
  border:1px solid #fecaca;border-radius:999px;padding:1px 8px;background:#fff}

.bad-strata .bad-zysk { color: var(--blad); }

/* Własna zniżka przy pojedynczej pozycji — dwa wąskie pola obok siebie. */
.bad-wlasna { white-space: nowrap; }
/* POLA ZNIZKI PRZY POZYCJI -- WIEKSZE (Piotr, 13.09.2026: „zrób większe pola do wpisywania
   zniżek, zarówno procentowych, jak i kwotowych"). Wpisuje sie w nie przy pacjencie, czesto
   w pospiechu -- male okienko to chybione klikniecie i cyfra w zlym polu. */
.bad-mini {
  width: 78px; min-height: 40px; padding: 7px 9px; font-size: 15px; text-align: center;
  font-weight: 600; font-variant-numeric: tabular-nums;
  border-radius: 9px; border: 1.5px solid var(--linia-mocna); margin-left: 5px;
  background: #fbfcfd;
}
.bad-mini:hover { border-color: var(--akcent); background: #fff; }
.bad-mini:focus { border-color: var(--akcent); background: #fff; }
/* Wpisana liczba ma byc od razu widoczna -- puste pole zostaje ciche. */
.bad-mini:not(:placeholder-shown) {
  border-color: var(--akcent); background: var(--akcent-tlo); color: var(--granat);
}
.bad-tabela-szeroka th {
  font-size: 12.5px; font-weight: 600; color: var(--pod); text-align: left;
  padding: 8px; border-bottom: 1px solid var(--linia); white-space: nowrap;
}
.bad-tabela-szeroka th.pr { text-align: right; }
.bad-suma .bad-bylo { color: var(--pod); font-size: 13px; margin-right: auto; }

@media (max-width: 900px) {
  .bad-rabat { gap: 7px; }
  .bad-inny input { width: 66px; }
  .bad-cel { width: 100%; justify-content: space-between; border-radius: 12px; }
}

/* Wybór pieczątki stoi w tym samym rzędzie, co ptaszki „ceny / kod" — to jedna decyzja:
   jak ma wyglądać kartka. */
.bad-znaki { gap: 9px; }
.bad-znaki select {
  min-height: 36px; padding: 6px 10px; font-size: 14px; border-radius: 9px;
  border: 1px solid var(--linia-mocna); background: var(--karta); width: auto;
}
.bad-karta .kwadraciki { align-items: center; }


/* ——— WYCENA MA SIĘ MIEŚCIĆ NA EKRANIE ———
   Piotr, 13.09.2026: „to jest takie wszystko rozciągnięte od góry do dołu. Weź to jakoś
   skomasuj, żeby to nie zajmowało tyle miejsca". Każdy odstęp niżej jest ścięty, a nie
   wycięty: nic nie znika, tylko przestaje stać osobno. */
.bad-karta { padding: 14px 16px; }
.bad-karta .bad-gora { margin-bottom: 10px; }
.bad-karta .bad-e-pacjent { gap: 8px; margin-bottom: 2px; }
.bad-karta .bad-e-pacjent label { margin: 0; }
.bad-karta .bad-e-pacjent input { min-height: 40px; padding: 8px 12px; }

.bad-szukaj-blok { padding: 12px 12px 2px; margin: 12px 0 10px; }
.bad-szukaj-tytul { margin-bottom: 6px; }
.bad-szukaj-duza { margin-bottom: 4px; }
.bad-szukaj-duza input { min-height: 44px; font-size: 16px; padding-left: 44px; }
.bad-szukaj-duza .szukajka-lupa { left: 15px; font-size: 16px; }
.bad-o-cenniku { margin: 0 0 8px; font-size: 12.5px; line-height: 1.45; }
.bad-rabat { padding: 8px 10px; margin-bottom: 8px; }
.bad-rabat .bad-prog { padding: 6px 12px; font-size: 13.5px; }
.bad-cel-rzad { margin: 0 0 8px; }
.bad-cel { padding: 6px 14px 6px 16px; font-size: 14px; }
.bad-cel input { min-height: 34px; width: 104px; font-size: 15px; }

/* Wyniki: niższe wiersze i własne przewijanie, żeby długa lista nie spychała wyceny
   poza dolną krawędź ekranu. */
.bad-wyniki-przewij { max-height: 46vh; overflow-y: auto; }
.bad-tabela-wyniki td { padding: 6px 8px; }
.bad-tabela-wyniki th { padding: 6px 8px; }
.bad-ile-wynikow { margin: 0 0 4px; }

/* „W tej wycenie" — widać, dokąd przechodzą zaznaczone badania. */
.bad-wycena-tytul {
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--akcent); margin: 14px 0 6px; padding-top: 12px;
  border-top: 1px solid var(--linia);
}
.bad-lista .bad-tabela td { padding: 6px 8px; }
.bad-suma { margin-top: 8px; padding-top: 8px; }
.bad-karta .kwadraciki { margin: 10px 0 0; gap: 14px; }
.bad-karta .rzad-przyciskow { margin-top: 10px; }


/* ——— TRZY KOLORY, TRZY ZNACZENIA ———
   Piotr, 13.09.2026: „na zielono zaznacz, ile zostaje. Koszt na czerwono. Pacjent płaci
   na czarno".

   To nie jest ozdoba: recepcja przebiega wzrokiem kilkadziesiąt wierszy i kolor ma od razu
   powiedzieć, na co patrzy — co WYCHODZI z gabinetu (czerwone), co WCHODZI od pacjenta
   (czarne) i co z tego ZOSTAJE (zielone). */
.bad-koszt { color: var(--blad); font-variant-numeric: tabular-nums; }
.bad-mocna { color: var(--tekst); font-weight: 700; font-variant-numeric: tabular-nums; }
.bad-zysk { color: var(--dobrze); font-weight: 600; font-variant-numeric: tabular-nums; }
/* W czerwonym wierszu (zniżka zjadła zarobek) „zostaje" przestaje być zielone — bo nie zostaje. */
.bad-strata .bad-zysk { color: var(--blad); font-weight: 700; }
.bad-mocna .kod { color: var(--pod); font-weight: 400; }


/* Przyciski wiersza stoją teraz POD badaniami, a nie przy nazwisku (Piotr, 13.09.2026). */
/* RZĄD U RECEPCJI W JEDNEJ LINII (Piotr, 20.09.2026: „chciałbym, żeby te wszystkie
   informacje zmieściły się w jednym temacie, w jednej linii, w jednym wierszu").
   Ta sama zasada, co przy skierowaniach na wizycie: `nowrap` plus ciaśniejsze przyciski.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: dołożenie kolejnego przycisku wypchnie ostatni poza
   kartę -- najpierw skróć którąś nazwę („Nie przyszedł — cofnij do wyceny" skrócono
   do „Nie przyszedł" właśnie z tego powodu). Na wąskim ekranie rząd celowo zawija. */
.skierowanie-wiersz > .co-z-tym {
  display: flex; gap: 4px; flex-wrap: nowrap; align-items: center; min-width: 0;
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--linia-cicha);
  overflow-x: auto;
}
.skierowanie-wiersz > .co-z-tym button {
  display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; flex: 0 0 auto;
  min-height: 32px; padding: 5px 9px; font-size: 12.5px; border-radius: 8px;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
/* DZIEŃ WIZYTY — pierwsza rzecz, której recepcja szuka po nazwisku. */
.naglowek-skierowania .bad-dzien { font-variant-numeric: tabular-nums; color: var(--tekst); }
.skierowanie-wiersz > .co-z-tym button .ikona { font-size: 13px; line-height: 1; opacity: .85; }
.skierowanie-wiersz > .co-z-tym button.glowny .ikona { opacity: 1; }
.skierowanie-wiersz > .co-z-tym button:not(.glowny):not(.bad-usun) {
  background: var(--karta); border: 1px solid var(--linia-mocna); color: var(--tekst);
}
.skierowanie-wiersz > .co-z-tym button:not(.glowny):not(.bad-usun):hover {
  border-color: var(--akcent); color: var(--akcent); background: var(--akcent-tlo);
}
.skierowanie-wiersz > .co-z-tym button.bad-usun {
  border: 1px solid transparent; background: none; box-shadow: none; color: var(--pod);
  padding: 7px 10px; font-size: 15px; min-width: 36px; justify-content: center;
  margin-left: auto;
}
.skierowanie-wiersz > .co-z-tym button.bad-usun:hover {
  background: var(--blad-tlo); border-color: #fecaca; color: var(--blad);
}


/* Wybór terminu pobrania — pasek w wierszu, zamiast okienek przeglądarki (Piotr, 13.09.2026). */
.bad-termin {
  display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap;
  margin-top: 10px; padding: 11px 13px;
  background: var(--akcent-tlo); border: 1px solid #c7ddff; border-radius: 11px;
}
.bad-termin-tytul { flex: 1 1 100%; font-size: 14px; font-weight: 600; color: var(--granat); }
.bad-termin label {
  display: flex; flex-direction: column; gap: 4px; margin: 0;
  font-size: 12px; color: var(--pod); text-transform: none; letter-spacing: 0; font-weight: 600;
}
.bad-termin input {
  min-height: 38px; padding: 7px 11px; font-size: 14.5px; border-radius: 9px;
  border: 1.5px solid #c7ddff; background: var(--karta); width: auto;
}
.bad-termin .bad-termin-blad { flex: 1 1 100%; }
@media (max-width: 720px) { .bad-termin label, .bad-termin input { width: 100%; } }


/* ——— „DO ZAPŁATY" NA SAMEJ GÓRZE ———
   Piotr, 13.09.2026: „na górze powinno być »do zapłaty«. Pacjent ma zapłacić »do zapłaty«
   na górze, a potem szukaj badania, potem rabaty". To jedyna liczba, która pada na głos
   przy ladzie — więc stoi pierwsza i jest największa. */
/* ——— „DO ZAPŁATY": CIEMNY PASEK, NIE BLADONIEBIESKI ———
   Piotr, 13.09.2026: „to się zlewa teraz z tym do zapłaty". I zlewało się: karteczki
   z nazwiskami dostały jasnoniebieskie tło, a ten pasek miał dokładnie takie samo.

   To jedyna liczba na tym ekranie, którą mówi się pacjentowi na głos — więc ma być najmocniej
   widoczna ze wszystkiego. Granat z białą kwotą nie pomyli się z niczym innym.

   JEDNA LINIJKA, NIE TRZY (jego wcześniejsza uwaga: „ten pasek jest za wysoki"). */
.bad-doplaty {
  display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap;
  margin: 10px 0 8px; padding: 9px 16px;
  background: var(--granat); border: 1px solid var(--granat); border-radius: 10px;
  box-shadow: 0 2px 8px -3px rgba(27, 79, 156, .5);
}
.bad-doplaty-napis {
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: rgba(255, 255, 255, .72);
}
.bad-doplaty > b {
  font-size: 23px; font-weight: 700; color: #fff; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
}
.bad-doplaty > em { font-style: normal; font-size: 12.5px; color: rgba(255, 255, 255, .78); }
.bad-doplaty > em b { font-variant-numeric: tabular-nums; color: #fff; }
/* „zostaje" -- jaśniejsze odcienie, żeby czytało się na granacie. */
.bad-doplaty > em b.zysk { color: #86efac; }
.bad-doplaty > em b.strata { color: #fca5a5; }

/* ——— CO IDZIE NA WYDRUK ———
   Piotr, 13.09.2026: „popraw to, pieczątka i to, bo mi się to nie podoba". Zamiast dwóch
   ptaszków i rozwijanej listy — jeden pasek z tytułem i trzema wyborami obok siebie. */
.bad-wydruk {
  margin: 14px 0 0; padding: 12px 14px;
  border: 1px solid var(--linia); border-radius: 12px; background: #f8fafc;
}
.bad-wydruk-tytul {
  font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--pod); margin-bottom: 9px;
}
.bad-wydruk-rzad { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.bad-wydruk-rzad .kwadracik {
  background: var(--karta); border: 1px solid var(--linia-mocna); border-radius: 999px;
  padding: 7px 15px 7px 13px; font-size: 14px; gap: 8px;
}
.bad-wydruk-rzad .kwadracik:hover { border-color: var(--akcent); }
.bad-znaki {
  display: inline-flex; align-items: center; gap: 8px; margin: 0; font-size: 14px;
  text-transform: none; letter-spacing: 0; font-weight: 400; color: var(--tekst);
}
.bad-znaki select {
  min-height: 36px; padding: 6px 34px 6px 12px; font-size: 14px; border-radius: 999px;
  border: 1px solid var(--linia-mocna); background-color: var(--karta); width: auto;
}


/* ——— PYTANIE O SKASOWANIE ———
   Piotr, 13.09.2026: „te komunikaty o usunięciu zrób ładniejsze, tak aby były widoczne
   na jakimś czerwonym tle". Szare okienko przeglądarki wygląda tak samo przy „zapisać?"
   i przy „skasować na dobre?" — więc przestaje cokolwiek znaczyć. */
/* WSZYSTKO NA JEDNEJ LINII (Piotr, 13.09.2026: „poprzeczka »skasuj« jest wyżej niż powinna
   być, wyrównaj to wszystko").

   Pole hasła ma nad sobą podpis, więc jest wyższe od guzików — przy `align-items:center`
   guziki wisiały w połowie jego wysokości. Równamy do DOLNEJ krawędzi: pole i oba przyciski
   stoją wtedy na jednej linii, tak jak w każdym innym pasku w programie. */
.bad-kasowanie {
  display: flex; gap: 11px; align-items: flex-end; flex-wrap: wrap;
  margin-top: 10px; padding: 11px 14px;
  background: var(--blad-tlo); border: 1px solid #fecaca; border-radius: 11px;
}
.bad-kasowanie > .bad-kasowanie-znak,
.bad-kasowanie > .bad-kasowanie-tresc { align-self: center; }
.bad-kasowanie-znak { font-size: 18px; color: var(--blad); line-height: 1; }
.bad-kasowanie-tresc { flex: 1; min-width: 180px; display: flex; flex-direction: column; gap: 2px; }
.bad-kasowanie-tresc b { color: var(--blad); font-size: 14.5px; }
.bad-kasowanie-tresc span { color: var(--pod); font-size: 13px; }
.bad-kasowanie-tak {
  background: var(--blad); border-color: var(--blad); color: #fff; font-weight: 600;
  min-height: 40px; padding: 8px 16px; font-size: 14px; border-radius: 9px;
}
/* „Zostaw" ma tę samą wysokość, co „Tak, skasuj" — inaczej dwa guziki obok siebie
   nie stoją równo. */
.bad-kasowanie-nie { min-height: 40px; padding: 8px 14px; font-size: 14px; border-radius: 9px; }
.bad-kasowanie-tak:hover { background: #b91c1c; border-color: #b91c1c; color: #fff; }
.bad-kasowanie-nie { color: var(--pod); }
@media (max-width: 720px) { .bad-kasowanie button { flex: 1; } }


/* ——— PIĘĆ KAFELKÓW AKCJI — przepisane z zakładki ALAB ———
   Piotr, 13.09.2026: „było: zapisz, drukuj z cenami, drukuj z jedną zniżką, drukuj bez cen,
   tylko zapisz, wyczyść. I to było fajne".
   Każdy kafelek to gotowa decyzja — pod nazwą stoi, co z niego wyjdzie. */
/* JEDEN RZĄD, NIE SIATKA KAFLI (Piotr, 19.09.2026: „to wszystko powinno być w jednym ciągu,
   w jednej linii"). Sześć dużych kafli z podpisami zajmowało pół ekranu i przy każdym
   skierowaniu trzeba było ich szukać wzrokiem. Teraz zwykłe przyciski obok siebie; wyjaśnienie
   zostaje jako podpowiedź pod kursorem (atrybut `title` w public/app.js). Na wąskim ekranie
   zawijają się same -- na telefonie jedna linijka i tak by się nie zmieściła. */
.bad-akcje {
  display: flex; flex-wrap: wrap; align-items: stretch;
  gap: 8px; margin: 14px 0 4px;
}
.bad-akcja {
  display: inline-flex; align-items: center; text-align: left;
  min-height: 44px; padding: 10px 16px; border-radius: 10px;
  border: 1.5px solid var(--linia-mocna); background: var(--karta);
  transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
}
.bad-akcja b { font-size: 14.5px; font-weight: 700; color: var(--tekst); line-height: 1.2;
  white-space: nowrap; }
/* Podpis pod nazwą zszedł do podpowiedzi pod kursorem -- w jednej linii nie ma na niego
   miejsca, a nazwa przycisku mówi, co on robi. */
.bad-akcja small { display: none; }
.bad-akcja:hover { border-color: var(--akcent); background: var(--akcent-tlo); }
.bad-akcja:hover b { color: var(--granat); }

/* Ten, którym drukuje się najczęściej — pełny, żeby ręka trafiała w niego sama. */
.bad-akcja.jest-glowna {
  background: var(--akcent); border-color: var(--akcent);
  box-shadow: 0 2px 5px -1px rgba(37, 99, 235, .35), 0 10px 20px -10px rgba(37, 99, 235, .6);
}
.bad-akcja.jest-glowna b { color: #fff; }
.bad-akcja.jest-glowna small { color: rgba(255, 255, 255, .85); }
.bad-akcja.jest-glowna:hover { background: var(--akcent-ciemny); border-color: var(--akcent-ciemny); }
.bad-akcja.jest-glowna:hover b { color: #fff; }

/* „Wyczyść" — przerywana ramka, bo to jedyny kafelek, który nic nie tworzy. */
.bad-akcja.jest-czysc { border-style: dashed; background: none; box-shadow: none; }
.bad-akcja.jest-czysc b { color: var(--pod); }
.bad-akcja.jest-czysc:hover {
  border-color: var(--blad); background: var(--blad-tlo);
}
.bad-akcja.jest-czysc:hover b { color: var(--blad); }


/* ——— BADANIE BEZ CENY DLA GABINETU ———
   Tak samo jak w zakładce ALAB: czerwony znak zamiast kratki i plakietka „BRAK".
   Skierowanie z badaniem o nieznanym koszcie to skierowanie, przy którym nie wiadomo,
   czy się zarabia, czy dopłaca. */
.bad-brak-znak {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--blad); color: #fff; font-weight: 700; font-size: 14px; line-height: 1;
  cursor: help;
}
.bad-brak {
  display: inline-block; padding: 2px 9px; border-radius: 6px;
  background: var(--blad); color: #fff; font-size: 11.5px; font-weight: 700; letter-spacing: .04em;
}

/* Powrót do listy — osobno od „Wyczyść", bo to dwie różne rzeczy. */
.bad-gora { align-items: center; }
.bad-wroc { color: var(--akcent); font-weight: 600; font-size: 14px; margin-right: auto; }
.bad-gora h3 { order: 2; }
.bad-wroc { order: 1; flex: 1 1 100%; text-align: left; padding: 0 0 6px; }


/* ——— PASEK RABATU W JEDNEJ LINII ———
   Piotr, 13.09.2026: „w jednej linii umieść jeszcze po kosztach tylko pracownik".
   Po zdjęciu „ma zapłacić" rząd mieści się bez zawijania na zwykłym ekranie; przy wąskim
   oknie zawija się dalej, bo lepiej złamać niż uciąć. */
.bad-rabat { gap: 8px; }
.bad-rabat .bad-prog { padding: 6px 11px; font-size: 13px; }
.bad-rabat .bad-inny { font-size: 13px; gap: 6px; }
.bad-rabat .bad-inny input { width: 62px; min-height: 32px; padding: 5px 8px; font-size: 13px; }
.bad-rabat .bad-prog-pracownik { margin-left: auto; }
@media (max-width: 1100px) { .bad-rabat .bad-prog-pracownik { margin-left: 0; } }


/* ——— PUSTE POLE, KTÓRE TRZYMA WYDRUK ———
   Piotr, 13.09.2026: „nie pisz, że do wypełnienia pozostały trzy pola, tylko po prostu
   podświetl, jak nie będzie wypełnione, i nie będzie można wydrukować".
   Czerwień stoi TAM, gdzie trzeba coś zrobić — zdanie obok kazało czytać, potem szukać
   które pole, i tak samo znikało. */
.bad-e-pacjent label.puste > input {
  border-color: #f4a6ad; background: #fff5f6;
}
.bad-e-pacjent label.puste { color: var(--blad); }
.bad-e-pacjent label.puste > input:focus {
  border-color: var(--akcent); background: #fff;
}

/* „Pobranie krwi · DOKŁADANE SAMO" — plakietka przy pozycji, której nikt nie dodawał ręcznie. */
.bad-samo {
  display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 999px;
  background: var(--akcent-tlo); color: var(--granat); font-size: 10.5px; font-weight: 700;
  letter-spacing: .03em; white-space: nowrap;
}

/* Dzień cyklu u recepcji — pokazuje się sam, gdy w wycenie stoi hormon płciowy. */
.bad-e-cykl { margin: 12px 0 0; }
.bad-e-cykl .cykl-pola { align-items: center; }


/* ——— PODPOWIEDŹ PACJENTA: JEDNA LINIJKA NA OSOBĘ ———
   Piotr, 13.09.2026: „na nazwisku jest PESEL i nie mogę wybrać".

   Nazwisko miało `flex: 1`, ale nie miało gdzie się skończyć — długie wychodziło poza swoje
   miejsce i PESEL rysował się na nim. Teraz nazwisko ucina się kropkami, a PESEL i telefon
   trzymają swoją szerokość i nigdy nie wchodzą na nie. */
.bad-podpowiedzi-pacjent button { align-items: center; gap: 12px; }
.bad-podpowiedzi-pacjent .n {
  flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 15px; font-weight: 600; color: var(--tekst);
}
.bad-podpowiedzi-pacjent .h {
  flex: 0 0 auto; font-variant-numeric: tabular-nums; font-size: 12px;
}
.bad-podpowiedzi-pacjent .c {
  flex: 0 0 auto; font-size: 13.5px; font-weight: 400; color: var(--pod);
}

/* Ta sama ostrożność w liście badań — nazwa też nie ma prawa wejść na cenę. */
.bad-podpowiedzi .n { overflow: hidden; }


/* ——— SZUKANIE PACJENTA: KARTECZKI, JAK W KARCIE PACJENTA ———
   Piotr, 13.09.2026: „zrób takie wyszukiwanie, jak jest w karcie pacjenta. To jest najlepsze".

   Rozwijana lista kładła się na formularzu, a nazwisko, PESEL i telefon walczyły o tę samą
   linijkę — długie nazwisko wchodziło pod PESEL i nie dało się wybrać. Karteczka ma nazwisko
   grubo w pierwszej linijce, a pod nim równo ułożone szczegóły. Cała jest klikalna. */
.bad-osoby { margin: 4px 0 2px; }
.bad-ilu { margin: 0 0 8px; font-size: 13.5px; color: var(--pod); }
.bad-osoby-lista {
  list-style: none; padding: 0; margin: 0; display: grid; gap: 8px;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}
/* Karteczka wypełnia cały wiersz siatki — osoba bez telefonu ma tę samą wysokość, co osoba
   z telefonem, i rząd nie wygląda na porwany. */
.bad-osoby-lista li { padding: 0; display: grid; }
/* KARTECZKA MA SIĘ RZUCAĆ W OCZY, ALE DELIKATNIE (Piotr, 13.09.2026: „żeby się podświetlały,
   żeby były bardziej widoczne te do wyboru, tak delikatnie").

   Jasnoniebieskie tło i niebieski pasek przy lewej krawędzi — tyle, żeby wzrok trafiał
   w nazwiska od razu, a nie tyle, żeby krzyczały. Pod kursorem karteczka robi się biała
   i lekko się unosi: widać, na której stoi ręka. */
.bad-osoba {
  display: flex; flex-direction: column; gap: 3px; align-items: flex-start;
  width: 100%; height: 100%; text-align: left; min-height: 0;
  padding: 10px 12px 10px 14px; border-radius: 12px;
  border: 1px solid #d9e6fb; background: #f5f9ff;
  border-left: 3px solid var(--akcent);
  box-shadow: none;
  transition: border-color .12s ease, box-shadow .12s ease, background .12s ease,
    transform .08s ease;
}
.bad-osoba:hover {
  border-color: var(--akcent); background: #fff;
  box-shadow: 0 2px 10px -2px rgba(37, 99, 235, .28);
  transform: translateY(-1px);
}
.bad-osoba:active { transform: none; }
.bad-osoba:focus-visible { outline: 2px solid var(--akcent); outline-offset: 2px; }
.bad-o-nazwa {
  font-weight: 700; font-size: 15.5px; color: var(--granat); line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
.bad-osoba:hover .bad-o-nazwa { color: var(--akcent-ciemny); }
.bad-o-pod {
  display: flex; flex-wrap: wrap; gap: 3px 10px; font-size: 12px; color: var(--pod);
  font-variant-numeric: tabular-nums; max-width: 100%;
}
.bad-o-adres { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }


/* ——— WIERSZ WYCENY: ZWINIĘTY, DOPÓKI NIE TRZEBA ———
   Piotr, 13.09.2026: „niech tylko będzie nazwisko (...) a jak przyjdzie pacjent, to się
   rozwija te badania". Recepcja przegląda tę listę szukając nazwiska, a nie czyta po kolei
   kilkunastu badań przy każdej osobie. */
.bad-rozwin { margin-top: 10px; }
.bad-rozwin > summary {
  cursor: pointer; list-style: none; display: inline-flex; align-items: center; gap: 7px;
  font-size: 13px; font-weight: 600; color: var(--akcent);
  padding: 5px 11px; border-radius: 999px; background: var(--akcent-tlo);
  border: 1px solid #d9e6fb; user-select: none;
}
.bad-rozwin > summary::-webkit-details-marker { display: none; }
.bad-rozwin > summary::before { content: "▸"; font-size: 11px; line-height: 1; }
.bad-rozwin[open] > summary::before { content: "▾"; }
.bad-rozwin > summary:hover { border-color: var(--akcent); background: #e6efff; }
.bad-rozwin[open] > summary { margin-bottom: 10px; }

/* Kwota w zwiniętym wierszu — to ona decyduje, czy recepcja w ogóle rozwija. */
.bad-kwota-wiersza { color: var(--granat); font-variant-numeric: tabular-nums; }
.bad-opust {
  display: inline-block; padding: 1px 8px; border-radius: 999px;
  background: #dcfce7; color: #15803d; font-size: 11.5px; font-weight: 700; white-space: nowrap;
}

/* Tabela po rozwinięciu: ile normalnie, ile zniżki, ile do zapłaty — przy KAŻDYM badaniu. */
.bad-tabela-wiersza { font-size: 14px; }
.bad-tabela-wiersza th {
  font-size: 12px; font-weight: 600; color: var(--pod); text-align: left;
  padding: 6px 8px; border-bottom: 1px solid var(--linia); white-space: nowrap;
}
.bad-tabela-wiersza th.pr, .bad-tabela-wiersza td.pr { text-align: right; }
.bad-tabela-wiersza td { padding: 6px 8px; }
.bad-tabela-wiersza tfoot td {
  border-top: 1.5px solid var(--linia-mocna); border-bottom: none;
  font-weight: 700; padding-top: 9px;
}
.bad-opust-kom { color: var(--dobrze); font-variant-numeric: tabular-nums; }

.bad-opust-zl { color: var(--pod); font-weight: 400; font-size: 12px; }

/* „Pokaż…" / „Ukryj…" — napis mówi, co się stanie po kliknięciu (Piotr, 13.09.2026). */
.bad-rozwin > summary .bad-ukryj { display: none; }
.bad-rozwin[open] > summary .bad-pokaz { display: none; }
.bad-rozwin[open] > summary .bad-ukryj { display: inline; }


/* „Usuń" przy prawej krawędzi zwiniętego wiersza (Piotr, 13.09.2026). */
.naglowek-skierowania > .bad-usun {
  margin-left: auto; flex: 0 0 auto;
  border: 1px solid transparent; background: none; box-shadow: none; color: var(--pod);
  padding: 6px 10px; font-size: 15px; min-width: 34px; min-height: 34px; border-radius: 9px;
}
.naglowek-skierowania > .bad-usun:hover {
  background: var(--blad-tlo); border-color: #fecaca; color: var(--blad);
}

/* Hasło przy kasowaniu — chroni przed cudzą ręką, nie przed rozpędem (to robi pytanie obok). */
.bad-kasowanie-haslo {
  display: flex; flex-direction: column; gap: 3px; margin: 0;
  font-size: 11.5px; font-weight: 600; color: var(--blad);
  text-transform: none; letter-spacing: 0;
}
.bad-kasowanie-pole {
  min-height: 40px; padding: 8px 11px; font-size: 14px; width: 160px;
  border: 1.5px solid #fecaca; border-radius: 9px; background: #fff;
}
.bad-kasowanie-pole:focus { border-color: var(--blad); background: #fff; }
.bad-kasowanie-blad { flex: 1 1 100%; }


/* ✕ obok „Pacjent się zdecydował" — czerwony od razu, żeby nie pomylić go z tamtym
   (Piotr, 13.09.2026). Kasowanie pyta jeszcze o hasło, więc odruch nic nie zniszczy. */
.bad-usun-czerwony {
  flex: 0 0 auto; align-self: center; margin-left: 6px;
  border: 1px solid #fecaca; background: var(--blad-tlo); box-shadow: none;
  color: var(--blad); font-size: 15px; font-weight: 700;
  min-width: 36px; min-height: 36px; padding: 6px 10px; border-radius: 9px;
}
.bad-usun-czerwony:hover {
  background: var(--blad); border-color: var(--blad); color: #fff;
}
.stan-skierowania .lampka .bad-usun-czerwony { align-self: center; }

/* Potwierdzenie po umówieniu pobrania — zielone, na chwilę, zamiast znikającego wiersza. */
.bad-termin-gotowe { background: #f0fdf4; border-color: #bbf7d0; align-items: center; }
.bad-termin-gotewe, .bad-termin-gotowe b { color: #15803d; font-size: 14.5px; }
.bad-termin-znak {
  display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: 24px; height: 24px; border-radius: 50%; background: var(--dobrze); color: #fff;
  font-weight: 700; font-size: 14px; line-height: 1;
}
.bad-termin-gdzie { display: block; color: var(--pod); font-size: 13px; margin-top: 2px; }

/* „Pokaż N badań bez ceny dla gabinetu" — jedno zdanie na dole zamiast czerwonych wierszy
   w środku listy (Piotr, 13.09.2026: „mnie to denerwuje"). */
.bad-bez-ceny {
  margin: 2px 0 10px; min-height: 0; padding: 6px 13px; font-size: 13px; border-radius: 999px;
  border: 1px dashed #fecaca; background: var(--blad-tlo); color: var(--blad);
  box-shadow: none; font-weight: 600;
}
.bad-bez-ceny:hover { background: #fee2e2; border-color: var(--blad); color: var(--blad); }


/* „Nie przyszedł — cofnij do wyceny" — pytanie w wierszu, bo znika termin z grafiku.
   Niebieskie, nie czerwone: nic nie ginie na dobre, wszystko wraca tam, skąd przyszło. */
.bad-cofniecie {
  display: flex; gap: 11px; align-items: center; flex-wrap: wrap;
  margin-top: 10px; padding: 11px 14px;
  background: var(--akcent-tlo); border: 1px solid #c7ddff; border-radius: 11px;
}
.bad-cofniecie-znak { font-size: 18px; color: var(--akcent); line-height: 1; }
.bad-cofniecie-tresc { flex: 1; min-width: 200px; display: flex; flex-direction: column; gap: 2px; }
.bad-cofniecie-tresc b { color: var(--granat); font-size: 14.5px; }
.bad-cofniecie-tresc span { color: var(--pod); font-size: 13px; }
.bad-cofniecie-blad { flex: 1 1 100%; }


/* ——— WOLNE GODZINY PRZY UMAWIANIU POBRANIA ———
   Piotr, 13.09.2026: „muszę podejrzeć wizyty w kalendarzu (...) jakie są wolne, i dopiero
   wtedy wpiszę". Grafik stoi w Finansach — tu widać z niego sam dzień, bez wychodzenia. */
.bad-godziny { flex: 1 1 100%; display: flex; flex-direction: column; gap: 6px; margin-top: 2px; }
.bad-godziny-tytul { font-size: 12px; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--pod); }
.bad-godziny-tytul em { font-style: normal; font-weight: 400; text-transform: none;
  letter-spacing: 0; }
.bad-godziny-czekaj, .bad-godziny-zamkniete { font-size: 13px; color: var(--pod); }
.bad-godziny-zamkniete { color: var(--uwaga); font-weight: 600; }
.bad-godziny-lista { display: flex; flex-wrap: wrap; gap: 5px; max-height: 116px;
  overflow-y: auto; padding: 1px; }
.bad-godzina {
  min-height: 0; padding: 5px 11px; font-size: 13px; border-radius: 999px;
  border: 1px solid #c7ddff; background: var(--karta); color: var(--granat);
  box-shadow: none; font-variant-numeric: tabular-nums;
}
.bad-godzina:hover { border-color: var(--akcent); background: var(--akcent-tlo); }
.bad-godzina.wybrana {
  background: var(--akcent); border-color: var(--akcent); color: #fff; font-weight: 700;
}


/* ——— PASEK TERMINU: JEDEN RZĄD ———
   Piotr, 13.09.2026: „zrób w jednym ciągu (...) z boku w jednej linii: załóż wizytę,
   kalendarz Piotr, a rezygnację zaznacz na czerwono. To jest na takim samym do naciskania".
   Trzy przyciski tej samej wysokości; różni je kolor, nie rozmiar. */
.bad-termin-rzad {
  display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; flex: 1 1 100%;
}
.bad-termin-guzik {
  min-height: 42px; padding: 9px 16px; font-size: 14.5px; font-weight: 600; border-radius: 10px;
  display: inline-flex; align-items: center; gap: 7px; white-space: nowrap;
  border: 1.5px solid var(--linia-mocna); background: var(--karta); color: var(--tekst);
}
.bad-termin-guzik:hover { border-color: var(--akcent); color: var(--akcent);
  background: var(--akcent-tlo); }
.bad-termin-guzik.glowny { border-color: var(--akcent); }
.bad-termin-guzik.glowny:hover { background: var(--akcent-ciemny);
  border-color: var(--akcent-ciemny); color: #fff; }
/* „Rezygnuję" -- jedyny, który nic nie zakłada. Czerwony od razu, żeby nie mylił się
   z „Załóż wizytę" stojącym obok. */
.bad-termin-guzik.bad-termin-rezygnuj {
  border-color: #fecaca; background: var(--blad-tlo); color: var(--blad);
}
.bad-termin-guzik.bad-termin-rezygnuj:hover {
  background: var(--blad); border-color: var(--blad); color: #fff;
}
.bad-termin-rzad label { flex: 0 0 auto; }
@media (max-width: 760px) {
  .bad-termin-rzad label, .bad-termin-guzik { flex: 1 1 100%; justify-content: center; }
}


/* „← Wróć do badań" nad grafikiem (Piotr, 13.09.2026: „Ola musi mieć możliwość przejścia
   z grafiku do badań"). Stoi pierwszy w pasku, po lewej — tam, gdzie wzrok wraca. */
.pasek-modulu .wroc-do-badan {
  min-height: 0; padding: 5px 13px; margin-right: 12px; font-size: 13.5px; font-weight: 600;
  border-radius: 999px; border: 1px solid #c7ddff; background: var(--akcent-tlo);
  color: var(--granat); box-shadow: none; display: inline-flex; align-items: center; gap: 6px;
}
.pasek-modulu .wroc-do-badan:hover {
  background: var(--akcent); border-color: var(--akcent); color: #fff;
}


/* Guziki w pasku cofnięcia — ta sama wysokość, co reszta pasków. */
.bad-cofniecie-tak, .bad-cofniecie-nie {
  min-height: 40px; padding: 8px 16px; font-size: 14px; border-radius: 9px;
}

/* === BADANIA: PASTYLKI Z LICZNIKIEM I ZDANIE „CO ZROBIC" ==================================== */
/*
   Piotr, 14.09.2026: „bez migania, ze słowami". Recepcja, zapytana wprost: „Kropka nic nie
   mówi. Nie mówi, co mam zrobić, czy ktoś już dzwonił, czy pacjent się odezwał". Lekarz:
   „Siedzę przy tym ekranie osiem godzin. Miganie to kara, nie informacja".

   Dlatego tu NIE MA ani jednej animacji. Kolor mówi JAK PILNE, a zdanie obok mówi CO ZROBIĆ.
*/
.pastylka-ile {
  display: inline-block; min-width: 18px; padding: 0 5px; margin-left: 6px;
  border-radius: 9px; background: rgba(0, 0, 0, .10);
  font-size: 11px; font-weight: 700; line-height: 18px; text-align: center;
}
.pastylka.wybrana .pastylka-ile { background: rgba(255, 255, 255, .25); }
/* PO TERMINIE WIDAC OD RAZU -- ale kolorem, nie ruchem. */
.pastylka-pilna { color: #b91c1c; }
.pastylka-pilna .pastylka-ile { background: #fee2e2; color: #b91c1c; }
.pastylka.wybrana.pastylka-pilna { background: #b91c1c; color: #fff; }

.lampka.l-pomarancz { background: #fff7ed; border-color: #fed7aa; }
.lampka.l-pomarancz .kropka { background: #ea580c; }
.lampka.l-zielona { background: #f0fdf4; border-color: #bbf7d0; }
.lampka.l-zielona .kropka { background: #16a34a; }

/* CO USTALILISMY -- jedno pole i data powrotu, w jednej linii. */
/* NOTATKA W JEDNEJ LINII (Piotr, 20.09.2026: „ten »zapisz« nie jest w poziomie, tylko jest
   tak poniżej. Weź wyrównaj to wszystko do jednej linijki w jednym poziomie").
   KLUCZ JEST W HTML-u, NIE TUTAJ: wszystkie dzieci mają tę samą wysokość 34 px, bo podpisy
   siedzą w środku pól, a nie nad nimi. Dopóki pola miały podpis nad sobą, żadne ustawienie
   wyrównania nie pomagało -- rząd składał się z elementów o różnej wysokości.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: zmiana wysokości w jednym miejscu (pole, przycisk, podpis)
   rozjeżdża cały rząd. Te trzy liczby mają zostać takie same. */
.bad-notatka {
  display: flex; gap: 8px; align-items: center; flex-wrap: nowrap;
  margin: 10px 0; padding: 10px 12px; min-width: 0;
  background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px;
}
.bad-notatka input { height: 34px; padding: 0 9px; border: 1px solid #cbd5e1;
  border-radius: 7px; font-size: 13px; min-width: 0; box-sizing: border-box; }
.bad-notatka .bad-notatka-tresc { flex: 1 1 0; min-width: 0; }
/* „Wrócić" + pole daty jako jedna całość, żeby słowo nie odkleiło się od kalendarzyka. */
.bad-notatka .bad-notatka-dzien { display: flex; align-items: center; gap: 6px;
  flex: 0 0 auto; font-size: 11px; color: #475569; white-space: nowrap; }
.bad-notatka button.bad-notatka-zapisz {
  min-height: 34px; height: 34px; padding: 0 12px; flex: 0 0 auto;
}
.bad-notatka-podpis { font-size: 11px; color: #64748b; flex: 0 0 auto; white-space: nowrap; }

/* NA WĄSKIM EKRANIE rząd celowo zawija -- jedna linia i tak by się nie zmieściła. */
@media (max-width: 900px) {
  .bad-notatka { flex-wrap: wrap; }
  .bad-notatka .bad-notatka-tresc { flex: 1 1 100%; }
}

/* KTO USTAWIL ZNIZKE -- zeby recepcja nie musiala przerywac lekarzowi wizyty. */
.bad-podpis-znizki {
  margin: 6px 0 10px; padding: 7px 11px; font-size: 12px; color: #475569;
  background: #f8fafc; border-left: 3px solid #94a3b8; border-radius: 0 7px 7px 0;
}

/* KIEDY POBRANIE -- przyciski „za tydzień / za 3 miesiące" i data obok. */
/*
   JEDNA LINIA, NIE DWIE (Piotr, 14.09.2026: „ma być po prostu »kiedy pobranie« i w jednej
   linii tam, gdzie jest napisane »kiedy pobranie« (...) ale ma być on teraz za wysoki").

   Napis miał wcześniej `width: 100%` i spychał przyciski do drugiego rzędu -- pasek był przez
   to dwa razy wyższy, niż musi. Teraz wszystko stoi obok siebie i łamie się dopiero wtedy,
   gdy naprawdę brakuje miejsca (wąski ekran, telefon).
*/
.bad-termin-badan {
  display: flex; gap: 7px; align-items: center; flex-wrap: wrap;
  margin: 12px 0; padding: 8px 13px;
  background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 11px;
}
.bad-termin-badan-tytul {
  font-size: 11px; color: #475569; text-transform: uppercase; letter-spacing: .4px;
  margin-right: 4px; white-space: nowrap;
}
.bad-termin-albo { font-size: 12px; color: #94a3b8; margin: 0 2px; }
.bad-za {
  height: 32px; padding: 0 12px; border: 1px solid #cbd5e1; border-radius: 16px;
  background: #fff; font-size: 13px; cursor: pointer; white-space: nowrap;
}
.bad-za:hover { border-color: #94a3b8; }
.bad-za.jest-wybrany { background: #0f172a; border-color: #0f172a; color: #fff; }
/* POLE DATY OTWIERA KALENDARZ PRZEGLĄDARKI -- razem z ikonką po prawej. */
.bad-termin-data {
  height: 32px; padding: 0 10px; border: 1px solid #cbd5e1; border-radius: 8px;
  background: #fff; font-size: 13px; color: #0f172a; cursor: pointer;
}
.bad-termin-data:hover { border-color: #94a3b8; }
.bad-termin-data:focus { outline: 2px solid #0f172a; outline-offset: 1px; }

/* === WYDRUKI SKIEROWANIA: JEDEN RZĄD, DELIKATNE PRZEGRODY =================================== */
/*
   Piotr, 14.09.2026: „usuń ten znaczek »drukuj«, tylko napisz »drukuj z jedną zniżką« oraz
   »ze zniżkami« i to wszystko w jednej linii, tylko delikatnie od siebie oddzielone".

   Słowo „Drukuj" pada RAZ, na początku rzędu. Przegrody są cienkie i szare -- mają mówić
   „to jest jedna rodzina, cztery postacie tej samej kartki", a nie dzielić ekran kreskami.
*/
.bad-wydruki {
  display: inline-flex; align-items: center; flex-wrap: wrap;
  gap: 7px; padding: 3px 5px;
  border: 1px solid #e2e8f0; border-radius: 11px; background: #f8fafc;
}
/* PRZEGRODA MIĘDZY POSTACIAMI WYDRUKU -- nie przed pierwszą i nie po ostatniej. */
.bad-wydruki > button + button { position: relative; margin-left: 7px; }
.bad-wydruki > button + button::before {
  content: ''; position: absolute; left: -8px; top: 50%; transform: translateY(-50%);
  width: 1px; height: 15px; background: #e2e8f0;
}
.bad-wydruki > button { margin: 0; }

/* LEKARZ NIE PRZYJMUJE, ALE POBRAĆ MOŻNA -- mówimy to szeptem, a nie zamykamy dnia. */
.bad-godziny-uwaga {
  display: block; margin: 4px 0 6px; font-size: 12px; color: #92400e;
  background: #fffbeb; border: 1px solid #fde68a; border-radius: 8px; padding: 5px 9px;
}

/* === WIZYTA KONTROLNA PRZY POBRANIU ======================================================== */
/*
   Piotr, 14.09.2026: „jak pobiera krew, umawiamy wizytę za dwa, trzy tygodnie" -- i, zapytany
   wprost, czy ma to być w tym samym okienku: „tak, ale nieobowiązkowo".

   Dlatego ten pasek pojawia się DOPIERO po umówieniu pobrania, proponuje datę trzy tygodnie
   później i ma przycisk „Nie teraz". Nic nie blokuje.
*/
.bad-kontrolna {
  display: flex; gap: 9px; align-items: flex-end; flex-wrap: wrap;
  width: 100%; margin-top: 11px; padding-top: 11px;
  border-top: 1px dashed #bbf7d0;
}
.bad-kontrolna-tytul {
  width: 100%; font-size: 12px; font-weight: 300; letter-spacing: .1px; color: #475569;
}
.bad-kontrolna label { display: flex; flex-direction: column; gap: 3px; font-size: 11px; color: #475569; }
.bad-kontrolna input {
  height: 34px; padding: 0 9px; border: 1px solid #cbd5e1; border-radius: 8px; font-size: 13px;
}
.bad-kontrolna button { height: 34px; }
.bad-kontrolna-gotowe { font-size: 13px; color: #166534; }
.bad-termin-tresc { display: flex; flex-direction: column; }

/* KLOCEK, KTORY NIE JEST WLACZONY (Piotr, 14.09.2026: „Pokazany-ale-zablokowany").
   Zakladka zostaje w slupku, ale w srodku stoi jedno zdanie i przycisk. */
.klocek-niewlaczony {
  max-width: 34rem;
  margin: 3rem auto;
  padding: 2rem;
  text-align: center;
  border: 1px solid #d8dde3;
  border-radius: 10px;
  background: #fbfcfd;
}
.klocek-niewlaczony .klocek-zdanie {
  margin: 0 0 .5rem;
  font-size: 1.15rem;
  font-weight: 600;
}
.klocek-niewlaczony .klocek-pod {
  margin: 0 0 1.5rem;
  color: #5b6672;
}
.klocek-niewlaczony .klocek-chce {
  padding: .65rem 1.4rem;
  font-size: 1rem;
}
.klocek-niewlaczony .klocek-odpowiedz {
  margin: 1rem 0 0;
  min-height: 1.2rem;
  color: #5b6672;
}

/* DOKUMENT ZAMIAST PESEL-U I KRAJ (Piotr, decyzja 1 z 14.09.2026, wariant A).
   Dwa pola dla pacjenta bez PESEL-u -- cudzoziemca i dziecka przed nadaniem numeru.
   Stoją w drugim wierszu, nie w pierwszym: u prawie każdego pacjenta zostaną puste,
   a pierwszy wiersz ma być tym, co recepcja wypełnia zawsze. */
.bad-e-pacjent .pole-dokument { grid-column: span 6; }
.bad-e-pacjent .pole-kraj { grid-column: span 6; }
@media (max-width: 1150px) {
  .bad-e-pacjent .pole-dokument, .bad-e-pacjent .pole-kraj { grid-column: span 4; }
}
@media (max-width: 760px) {
  .bad-e-pacjent .pole-dokument, .bad-e-pacjent .pole-kraj { grid-column: span 2; }
}

/* ZMIANA HASŁA PRZY PIERWSZYM WEJŚCIU (Piotr, 14.09.2026: „powinna się wymuszać zmiana tego
   hasła na nowe"). Zasłania program, bo to jedna rzecz do zrobienia, zanim zacznie się dzień. */
.wymus-haslo {
  position: fixed; inset: 0; z-index: 9000;
  display: flex; align-items: center; justify-content: center;
  padding: 24px; background: rgba(22, 32, 43, .55);
}
.wymus-haslo-karta {
  width: 100%; max-width: 420px; background: #fff; border-radius: 14px;
  padding: 28px 30px; box-shadow: 0 18px 50px rgba(16, 28, 40, .28);
}
.wymus-haslo-karta h2 { margin: 0 0 10px; font-size: 1.3rem; }
.wymus-haslo-karta p { margin: 0 0 18px; color: #4b5a6a; line-height: 1.55; }
.wymus-haslo-karta label { display: block; margin-bottom: 14px; font-size: 13px; color: #5b6672; }
.wymus-haslo-karta input {
  width: 100%; margin-top: 5px; padding: 11px 13px; font: inherit; font-size: 16px;
  border: 1.5px solid #cbd5e1; border-radius: 10px; background: #fbfcfd; box-sizing: border-box;
}
.wymus-haslo-karta input:focus { outline: none; border-color: #2f5bbd; background: #fff; }
.wymus-haslo-karta button { width: 100%; padding: 12px 18px; font-size: 15px; }
.wymus-blad { min-height: 1.2rem; margin: 0 0 10px; color: #a3392f; font-size: 14px; }

/* UMÓWIONY TERMIN W KALENDARZU (Piotr, 15.09.2026: „kalendarz, gdzie dwa razy nacisną
   i zapiszą pacjenta (...) a lekarz naciśnie na stetoskop i odbędzie wizytę").
   Wygląda INACZEJ niż odbyta wizyta -- to obietnica, nie zapis tego, co było. */
.kal-wizyta.kal-zapis {
  background: #eef6ff; border-color: #b9d4f2; border-left: 3px solid #2f5bbd;
}
.kal-wizyta.kal-zapis .godz { color: #2f5bbd; font-weight: 600; }
.kal-stetoskop { margin-left: auto; padding-left: 4px; font-size: 13px; opacity: .8; }

/* OKNO UMAWIANIA -- otwiera się nad kalendarzem, bo umawianie trwa trzydzieści sekund
   i nie ma sensu wyrzucać po nim człowieka na inny ekran. */
.okno-zapisu {
  position: fixed; inset: 0; z-index: 9000;
  display: flex; align-items: center; justify-content: center;
  padding: 20px; background: rgba(22, 32, 43, .5);
}
.okno-zapisu-karta {
  width: 100%; max-width: 560px; max-height: 90vh; overflow: auto;
  background: #fff; border-radius: 14px; padding: 24px 26px;
  box-shadow: 0 18px 50px rgba(16, 28, 40, .28);
}
.okno-zapisu-karta h2 { margin: 0 0 4px; font-size: 1.25rem; }
.okno-zapisu-karta > .pod { margin: 0 0 16px; }
.zapis-pola { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.zapis-pola .szeroko { grid-column: 1 / -1; }
.zapis-pola label { display: block; font-size: 13px; color: #5b6672; }
.zapis-pola input {
  width: 100%; margin-top: 5px; padding: 10px 12px; font: inherit; font-size: 15px;
  border: 1.5px solid #cbd5e1; border-radius: 10px; background: #fbfcfd; box-sizing: border-box;
}
.zapis-pola input:focus { outline: none; border-color: #2f5bbd; background: #fff; }
.zapis-pola .pod { display: block; margin-top: 4px; font-size: 12px; }
.zapis-blad { min-height: 1.2rem; margin: 12px 0 0; color: #a3392f; font-size: 14px; }
.zapis-guziki { display: flex; gap: 10px; align-items: center; margin-top: 8px; }
@media (max-width: 560px) { .zapis-pola { grid-template-columns: 1fr; } }

/* CO CZEKA NA WYSŁANIE — nad kalendarzem (krok 3, 15.09.2026: „powiadomienia wysyła człowiek").
   Treść stoi na wierzchu, żeby nikt nie naciskał „wyślij" w ciemno. */
.zapisy-czekaja { margin: 0 0 14px; border: 1px solid #d8e3ee; border-radius: 12px;
  background: #f7fafd; overflow: hidden; }
.czeka-naglowek { padding: 10px 14px; font-weight: 600; font-size: 14px;
  border-bottom: 1px solid #e6eef6; color: #2f5bbd; }
.czeka-wiersz { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) auto;
  gap: 12px; align-items: center; padding: 10px 14px; border-bottom: 1px solid #edf2f7; }
.czeka-wiersz:last-child { border-bottom: none; }
.czeka-wiersz.czeka-blad { background: #fdf5f4; }
.czeka-kto b { display: block; font-size: 14px; }
.czeka-kto .pod { display: block; font-size: 12px; }
.czeka-tresc { font-size: 13.5px; line-height: 1.45; color: #2b3a4a; }
.czeka-powod { grid-column: 1 / -1; font-size: 13px; color: #a3392f; }
.czeka-wyslij { padding: 8px 16px; font-size: 14px; }
@media (max-width: 760px) {
  .czeka-wiersz { grid-template-columns: 1fr; gap: 6px; }
}

/* STRONA ZAPISÓW DLA PACJENTA (krok 5, 15.09.2026). Osobny ekran, nie zakładka programu --
   pacjent nie ma tu konta i widzi wyłącznie wolne godziny. */
.strona-zapisow { background: #f6f8fb; }
.zapisy-main { max-width: 620px; margin: 0 auto; padding: 28px 18px 60px; }
.zapisy-main h1 { margin: 0 0 4px; font-size: 1.5rem; }
.zapisy-main h2 { margin: 0 0 12px; font-size: 1.15rem; }
.zapisy-main .karta { margin-top: 18px; padding: 18px 20px; }
.zapisy-main label { display: block; margin-bottom: 14px; font-size: 13px; color: #5b6672; }
.zapisy-main input {
  width: 100%; margin-top: 5px; padding: 12px 13px; font: inherit; font-size: 16px;
  border: 1.5px solid #cbd5e1; border-radius: 10px; background: #fbfcfd; box-sizing: border-box;
}
.zapisy-main input:focus { outline: none; border-color: #2f5bbd; background: #fff; }
.zap-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; }
.zap-godzina {
  padding: 12px 6px; font: inherit; font-size: 15px; cursor: pointer;
  border: 1.5px solid #cbd5e1; border-radius: 10px; background: #fff;
}
.zap-godzina:hover { border-color: #2f5bbd; }
.zap-godzina.wybrana { background: #2f5bbd; border-color: #2f5bbd; color: #fff; font-weight: 600; }
.zap-blad { min-height: 1.2rem; margin: 0 0 10px; color: #a3392f; font-size: 14px; }
.zapisy-main .glowny { width: 100%; padding: 13px 18px; font-size: 16px; }
.zap-gotowe { border-color: #b8ddc0; background: #f3faf5; }

/* GODZINY PRZYJĘĆ — ekran w zakładce Gabinet (krok 5, 15.09.2026).
   Z tych godzin liczą się wolne terminy i to, co widzi pacjent na stronie zapisów. */
.godziny-wiersz { display: grid; grid-template-columns: 120px repeat(4, 1fr); gap: 10px;
  align-items: end; padding: 8px 0; border-bottom: 1px solid #eef2f7; }
.godziny-wiersz:last-child { border-bottom: none; }
.godziny-nazwa { font-size: 14px; font-weight: 600; align-self: center; }
.godziny-wiersz label { display: flex; flex-direction: column; gap: 4px; font-size: 12px;
  color: #5b6672; min-width: 0; }
.godziny-wiersz input { width: 100%; margin: 0; padding: 8px 10px; font: inherit; font-size: 14px;
  border: 1.5px solid #cbd5e1; border-radius: 8px; background: #fbfcfd; box-sizing: border-box; }
.godziny-dol { margin-top: 14px; }
.godziny-dol label { display: inline-flex; flex-direction: column; gap: 4px; font-size: 13px;
  color: #5b6672; }
.godziny-naglowek { margin: 22px 0 4px; font-size: 1rem; }
.zamkniety-wiersz { display: flex; align-items: center; gap: 12px; padding: 7px 0;
  border-bottom: 1px solid #f1f5f9; }
.zamkniety-wiersz .pod { flex: 1; }
.godziny-dodaj { display: flex; gap: 10px; align-items: center; margin-top: 10px; flex-wrap: wrap; }
.godziny-dodaj input { padding: 9px 11px; font: inherit; font-size: 14px;
  border: 1.5px solid #cbd5e1; border-radius: 8px; background: #fbfcfd; }
.godziny-zapisz { display: flex; align-items: center; gap: 12px; margin-top: 20px; }
@media (max-width: 860px) {
  .godziny-wiersz { grid-template-columns: 1fr 1fr; }
  .godziny-nazwa { grid-column: 1 / -1; }
}

/* DZIECKO POTRZEBUJE OPIEKUNA (Piotr, 15.09.2026). Ostrzega, nie blokuje -- ta sama zasada,
   co przy uczuleniach: recepcja ma wystawić skierowanie także dziecku, ale ma wiedzieć. */
.bad-e-pacjent .pole-urodzenie { grid-column: span 3; }
.bad-dziecko { grid-column: 1 / -1; margin-top: 2px; padding: 9px 13px;
  border: 1px solid #e0b4ae; border-radius: 9px; background: #fdecea;
  color: #a3392f; font-size: 13.5px; font-weight: 600; }
@media (max-width: 1150px) { .bad-e-pacjent .pole-urodzenie { grid-column: span 4; } }
@media (max-width: 760px) { .bad-e-pacjent .pole-urodzenie { grid-column: span 2; } }

/* USUNIĘCIE CAŁEJ WIZYTY (Piotr, 15.09.2026). Program nie zabrania — program mówi, co zniknie. */
.wizyta-usun { color: #9b3d31; border-color: #d9b0a9; }
/* Kosz przy STAREJ wizycie -- na liscie historii i w otwartej starej wizycie.
   Piotr, 15.09.2026: "usuwac te z poprzedniej wizyty, a tu takiej opcji nie ma".
   Cichy, bo stoi obok "Pokaz cala" i "Przepisz zalecenia" -- ma byc widoczny, nie krzyczec. */
.usun-stara { color: #9b3d31; border-color: #e0cbc7; }
.usun-stara:hover { background: #fdf5f4; border-color: #c08a80; }
.wizyta-usun:hover { background: #fdf5f4; border-color: #c08a80; }
.usun-co-zniknie { margin: 14px 0; padding: 12px 16px; border: 1px solid #dbe3ec;
  border-radius: 10px; background: #f7f9fc; }
.usun-co-zniknie ul, .usun-przeszkody ul { margin: 8px 0 0; padding-left: 20px; }
.usun-co-zniknie li, .usun-przeszkody li { margin-bottom: 4px; }
.usun-przeszkody { margin: 0 0 14px; padding: 12px 16px; border: 1px solid #e0b4ae;
  border-radius: 10px; background: #fdf6f5; color: #9b3d31; }
.usun-przeszkody .pod { margin-top: 10px; color: #7a4a42; }
.usun-na-dobre { background: #b4402f; border-color: #b4402f; }
.usun-na-dobre:hover { background: #9b3423; border-color: #9b3423; }

/* TO BADANIE JUZ BYLO -- napis przy nazwie, nie blokada.
   Lekarz, 13.09.2026: "powiedzcie po prostu, kiedy to bylo, i pozwolcie mi ocenic samemu".
   Bez progu dni, bez czerwieni: to informacja, a nie ostrzezenie o bledzie. */
/* `.bad-juz-bylo` zdjete 20.09.2026 -- napis „to badanie bylo dzis" zastapila czerwona,
   niewybieralna pozycja w wynikach szukania (patrz `bad-juz-wybrane`). */

/* PASEK "PROGRAM SIE ZMIENIL". Stoi w rzedzie z tekstem po lewej i przyciskiem po prawej.
   Zawija sie -- bo ostatni element rzedu, ktory nie zawija, wypada poza ekran telefonu
   (nauka z 15.09.2026: kosz przy wizycie byl 311 pikseli za krawedzia). */
#pasek-wersji { display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; }

/* DAWKOWANIE LICZBAMI -- trzy pola przy recepcie refundowanej (od 13.09.2026 zada ich P1).
   Wydzielone ramka, bo to nie jest zwykle pole formularza, tylko wymog zewnetrzny --
   i zeby bylo od razu widac, ze przy recepcie 100% go nie ma. */
.dawkowanie-p1 { border: 1px solid #e0cbc7; border-radius: 10px; background: #fdf8f7;
  padding: 10px 12px; margin-top: 8px; }
.dawkowanie-p1-tytul { grid-column: 1 / -1; font-size: 12px; font-weight: 600; color: #9b3d31;
  margin-bottom: 6px; }

/* PRZYPISANE PO NAZWISKU -- ostrzeżenie przy uczuleniach pacjenta bez PESEL-u i bez dokumentu.
   Audyt 15.09.2026 (P02): taki wpis dzieli go z każdym, kto nazywa się tak samo.
   Decyzja Piotra: „pokaż i ostrzeż" -- ma być widoczne, ale nie krzyczeć jak błąd. */
.zdrowie-po-nazwisku {
  background: #fff8e1;
  border-left: 4px solid #f0a500;
  padding: 0.5rem 0.75rem;
  margin-bottom: 0.5rem;
  border-radius: 4px;
  font-size: 0.95em;
  line-height: 1.45;
}

/* STAN ZGODY PRZY WIADOMOŚCI DO WYSŁANIA (audyt 15.09.2026, P05).
   Decyzja Piotra: „pokaż przy wiadomości" -- widać, ale nic nie blokuje.
   „Nie wiadomo" ma wyglądać INACZEJ niż „nie zgodził się": cisza z Finansów to nie odmowa. */
.czeka-zgoda {
  display: inline-block;
  margin-left: 0.5rem;
  padding: 0.05rem 0.4rem;
  border-radius: 3px;
  font-size: 0.85em;
  white-space: nowrap;
}
.czeka-zgoda-jest { background: #e6f4ea; color: #1b5e20; }
.czeka-zgoda-brak { background: #fdecea; color: #a01b0b; font-weight: 600; }
.czeka-zgoda-nie-wiadomo { background: #eceff1; color: #455a64; }

/* DRUGA UWAGA — TA Z PRZYCHODÓW (audyt 15.09.2026, P07).
   Decyzja Piotra: „pokaż obie". Tekst lekarza zostaje w polu, ten z Finansów stoi pod spodem.
   Ma być widoczny, ale nie wyglądać jak błąd — to informacja, nie awaria. */
.uwaga-z-przychodow {
  background: #f1f6fb;
  border-left: 4px solid #4a7fb5;
  padding: 0.5rem 0.75rem;
  margin: 0.35rem 0 0.75rem;
  border-radius: 4px;
  font-size: 0.95em;
  line-height: 1.45;
}
.uwaga-z-przychodow .pod { display: block; margin-top: 0.25rem; }

/* PACJENCI ZNALEZIENI W KARTOTECE (audyt 15.09.2026, P09).
   Pole „Szukaj pacjenta" filtruje kratki kalendarza I szuka w całej kartotece.
   Stetoskop przy nazwisku otwiera trzy drogi: przeglądaj, przeglądaj i edytuj, nowa wizyta. */
.kal-znalezieni {
  margin: 0.5rem 0 0.75rem;
  border: 1px solid #dfe4ea;
  border-radius: 6px;
  background: #fbfcfd;
  padding: 0.35rem 0.5rem;
  max-height: 14rem;
  overflow-y: auto;
}
.kal-znalezieni-naglowek { font-size: 0.85em; color: #5a6672; margin-bottom: 0.25rem; }
.kal-znalezieni-pusto { font-size: 0.9em; color: #5a6672; padding: 0.25rem; }
.kal-znaleziony { display: flex; align-items: center; gap: 0.5rem; padding: 0.2rem 0; flex-wrap: wrap; }
.kal-stetoskop { border: 1px solid #c8d2dc; background: #fff; border-radius: 5px; cursor: pointer;
  padding: 0.1rem 0.4rem; font-size: 1.05em; line-height: 1.4; }
.kal-stetoskop:hover { background: #eef3f8; }
.kal-znaleziony-kto { font-weight: 600; }

.okno-pacjenta-karta { max-width: 44rem; }
.pacjent-guziki { flex-wrap: wrap; }
.pacjent-wizyty { margin-top: 0.75rem; max-height: 22rem; overflow-y: auto; text-align: left; }
.pw-naglowek { font-size: 0.85em; color: #5a6672; margin-bottom: 0.4rem; }
.pw-wizyta { border-top: 1px solid #e6eaee; padding: 0.5rem 0; }
.pw-kiedy { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.2rem; }
.pw-pole { font-size: 0.92em; line-height: 1.45; margin: 0.15rem 0; }

/* KARTOTEKA I WIZYTY PACJENTA — WSZYSTKO DO LEWEJ (Piotr, 15.09.2026: „wyjustuj do lewej
   strony, a jest wyjustowana do prawej"). Okno dziedziczyło wyrównanie po ekranie, z którego
   zostało otwarte — dlatego ustawiamy je tu wprost, a nie liczymy na to, co przyjdzie z góry. */
#okno-kartoteki .okno-zapisu-karta,
#okno-pacjenta .okno-zapisu-karta { text-align: left; }
#okno-kartoteki .kal-znalezieni,
#okno-pacjenta .pacjent-wizyty { text-align: left; }
#okno-kartoteki .kal-znaleziony { justify-content: flex-start; }
#okno-kartoteki .zapis-guziki,
#okno-pacjenta .zapis-guziki { justify-content: flex-start; }
#okno-pacjenta .pw-kiedy { justify-content: flex-start; }

/* WIZYTA OTWARTA Z KARTOTEKI (Piotr, 15.09.2026: „jak otwieram z 8 września, to znika
   i nie wiem, gdzie jest"). Karta starej wizyty wygląda tak samo jak dzisiejszej, a w ramce
   nie ma nawet menu bocznego — więc mówimy wprost, co się otworzyło, i dajemy drogę powrotną. */
.wizyta-z-kartoteki {
  display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap;
  background: #eef3f8; border-left: 4px solid #4a7fb5;
  padding: 0.45rem 0.75rem; margin: 0 0 0.6rem; border-radius: 5px; font-size: 0.95em;
}

/* WIZYTY PACJENTA W OKNIE KARTOTEKI — rozwijane pod dniem (Piotr, 15.09.2026: „powinna się
   otworzyć poniżej tego dnia, którego dotykam (...) i tam dopiero »Edytuj«"). */
.pw-kiedy {
  display: block; width: 100%; text-align: left; background: none; border: 0;
  padding: 0.45rem 0.2rem; cursor: pointer; font: inherit; border-radius: 4px;
}
.pw-kiedy:hover { background: #eef3f8; }
.pw-tresc { padding: 0.2rem 0.2rem 0.6rem 0.9rem; border-left: 3px solid #d6e0ea; }
.pw-guziki { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.5rem; flex-wrap: wrap; }
.pw-edycja { display: block; margin: 0.4rem 0; }
.pw-edycja span { display: block; font-size: 0.85em; color: #5b6672; margin-bottom: 0.15rem; }
.pw-edycja textarea { width: 100%; font: inherit; padding: 0.4rem 0.5rem;
  border: 1px solid #dbe2ea; border-radius: 6px; resize: vertical; }

/* TRZY SPOSOBY WYDRUKU DOKUMENTU (Piotr, 16.09.2026: „drukuj bez pieczątki, drukuj z pieczątką,
   drukuj z pieczątką i podpisem"). Rozwijają się pod „Drukuj" — w rzędzie dokumentu stoi już
   pięć przycisków i trzy kolejne na stałe zrobiłyby z niego ścianę. */
.druk-sposoby { display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
  margin-left: 6px; padding-left: 8px; border-left: 2px solid #dbeafe; }
.druk-sposoby[hidden] { display: none; }

/* ZDJĘTE DOKUMENTY (Piotr, 16.09.2026: „nie powinno być możliwości kasowania takiego").
   Stoją zwinięte pod listą — mają być do znalezienia, ale nie mają zabierać miejsca
   temu, co aktualne. */
.dokumenty-zdjete { margin: 10px 0 0; }
.dokumenty-zdjete > summary { cursor: pointer; font-size: 13px; color: var(--pod);
  padding: 4px 0; }
.dokumenty-zdjete .lista-dokumentow > li { opacity: .72; }

/* PODPOWIEDZI POD POLAMI DAWKOWANIA (Piotr, 16.09.2026: „musisz napisać we wzorze, jak to
   wypełniać, żeby lekarz wiedział, co ma w pole wstawić (...) niech tam delikatnie będzie").
   Drobnym drukiem, szaro — mają tłumaczyć, a nie krzyczeć. */
.dawkowanie-p1 .pod-polem { display: block; margin-top: 3px; font-size: 11.5px;
  line-height: 1.35; color: var(--pod); font-weight: 400; }
/* Przy recepcie 100% te pola są nieobowiązkowe — cały blok jest wtedy lżejszy, żeby nie
   wyglądał na przeszkodę do pokonania. */
.dawkowanie-p1.nieobowiazkowe { background: transparent; border-style: dashed; }
.dawkowanie-p1.nieobowiazkowe .dawkowanie-p1-tytul { font-weight: 500; color: var(--pod); }

/* WYBÓR LOGO PRZY „DRUKUJ" SKIEROWANIA I ZAŚWIADCZENIA (Piotr, 17.09.2026). Ogólne `label`
   i `select` w formularzach są blokowe i na całą szerokość -- tu mają stać w jednym rzędzie
   z trzema przyciskami. */
.druk-sposoby .druk-loga { display: inline-flex; align-items: center; gap: 4px; margin: 0;
  font-size: 13px; font-weight: 400; width: auto; }
.druk-sposoby .druk-loga select { width: auto; min-width: 0; min-height: 38px; margin: 0;
  padding: 4px 28px 4px 8px; background-position: right 9px center; font-size: 13px;
  border-radius: 8px; }

/* KARTA DOKUMENTU W WIZYCIE (Piotr, 17.09.2026: „na górze było to zaświadczenie napisane, a na
   dole niech będą przyciski (...) wszystko w jednym, po prostu na dole, żeby było w jednej linii").
   Wcześniej nazwa i przyciski dzieliły jeden rząd i rozwinięte „Drukuj" ściskało nazwę do jednej
   litery w linii (zrzut ekranu z 17.09). Teraz dwa piętra: treść na górze, przyciski pod kreską. */
.lista-dokumentow li.dokument-karta { display: block; padding: 12px 14px; }
.dokument-karta .dok-gora { display: flex; align-items: center; gap: 12px; }
.dokument-karta .stan-skierowania { margin: 8px 0 0 38px; }
.dokument-karta .dok-przyciski { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px;
  margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--linia); }
.dokument-karta .druk-sposoby { display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin: 0; padding: 0; border: 0; }
.dokument-karta .druk-sposoby[hidden] { display: flex; }
.dokument-karta .dok-etykieta { font-size: 13px; font-weight: 600; color: var(--pod); }
.dokument-karta .dok-reszta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin-left: auto; }
.dokument-karta .druk-loga select { max-width: 230px; }
.dokument-karta .druk-sposoby { gap: 6px 12px; }

/* === EDYTOR W ZAŚWIADCZENIU ==================================================================
   Piotr, 17.09.2026: „dorób mi edytor w zaświadczeniu (...) coś pogrubić, kolor podać".
   To ten sam pasek i to samo pole, co w karcie wizyty -- reguły wyżej są przypięte do
   `.wizyta-sekcja`, więc w karcie dokumentu nie działałyby wcale (i po cichu: pole wyglądałoby
   jak zwykły napis). Powtarzamy je tutaj dla `.wizyta-dokument`, zamiast rozluźniać tamte. */
.wizyta-dokument .edytor {
  width: 100%; box-sizing: border-box; margin-top: 6px;
  min-height: 132px; max-height: 460px; overflow-y: auto;
  padding: 12px 14px; font: inherit; font-size: 15px; line-height: 1.65; color: var(--tekst);
  border: 1.5px solid var(--linia); border-radius: 10px; background: #fbfcfd;
}
.wizyta-dokument .edytor:focus { outline: none; border-color: var(--akcent); background: #fff; }
/* `contenteditable` nie zna `placeholder` -- podpowiedź rysujemy sami, gdy pole jest puste. */
.wizyta-dokument .edytor.puste::before {
  content: attr(data-podpowiedz); color: var(--pod); pointer-events: none;
}
/* Odstępy w środku pola: akapity ciasno, listy z wcięciem takim jak w wydruku. */
.wizyta-dokument .edytor p { margin: 0 0 6px; }
.wizyta-dokument .edytor p:last-child { margin-bottom: 0; }
.wizyta-dokument .edytor ul, .wizyta-dokument .edytor ol { margin: 4px 0 8px; padding-left: 24px; }
.wizyta-dokument .edytor li { margin: 2px 0; }

/* --- PASEK EDYTORA: KOLORY, TŁA, ZDJĘCIE ----------------------------------------------------
   Piotr, 10.09.2026: „do edytora dodaj kolory, tła, przekreślenie, podkreślenie, dodanie
   zdjęcia". Kolory i tła to kropki, nie lista rozwijana — widać od razu, co jest do wyboru. */
.pasek-edytora .rozdzielacz {
  width: 1px; height: 20px; background: var(--linia); margin: 0 3px; align-self: center;
}
/* DWA WYBIERAKI KOLORU -- litery i tło. Każdy ma jako pierwszą pozycję powrót do zwykłego
   tekstu, osiem gotowych kolorów i własny wybór na końcu (Piotr, 10.09.2026: „zrób mi lepszy
   edytor, z wyborem koloru czcionki, z wyborem tła"). */
.pasek-edytora .wybierak { position: relative; display: inline-flex; }
.pasek-edytora .otworz-wybierak {
  width: auto; min-height: 30px; height: 30px; padding: 0 8px; display: inline-flex;
  align-items: center; gap: 4px; background: var(--karta); border: 1px solid var(--linia);
  border-radius: 8px;
}
.pasek-edytora .otworz-wybierak .litera { font-size: 14px; font-weight: 800; color: #1f2937; }
.pasek-edytora .otworz-wybierak .plama {
  width: 15px; height: 13px; border-radius: 3px; border: 1px solid rgba(0, 0, 0, .15);
  background: linear-gradient(90deg, #ffe84d 0 50%, #dbeafe 50% 100%);
}
.pasek-edytora .otworz-wybierak .strzalka { font-size: 9px; color: var(--pod); }
.pasek-edytora .paleta {
  position: absolute; top: calc(100% + 5px); left: 0; z-index: 6;
  display: flex; flex-direction: column; gap: 7px; width: 196px; padding: 9px;
  background: var(--karta); border: 1px solid var(--linia); border-radius: 10px;
  box-shadow: 0 12px 28px rgba(15, 23, 42, .16);
}
.pasek-edytora .paleta .zeruj {
  width: 100%; min-height: 28px; height: 28px; font-size: 12.5px; font-weight: 600;
  color: var(--pod); background: var(--tlo); border: 1px solid var(--linia); border-radius: 7px;
}
.pasek-edytora .paleta .kropki { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; }
.pasek-edytora .paleta .kropka {
  width: 18px; min-width: 18px; height: 18px; padding: 0; border-radius: 5px;
  border: 1px solid rgba(0, 0, 0, .15);
}
.pasek-edytora .paleta .kropka:hover { outline: 2px solid var(--akcent); outline-offset: 1px; }
.pasek-edytora .paleta .wlasny {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  margin: 0; font-size: 12px; font-weight: 600; color: var(--pod);
}
.pasek-edytora .paleta .wlasny input[type=color] {
  width: 46px; height: 26px; padding: 0; border: 1px solid var(--linia); border-radius: 6px;
  background: none; cursor: pointer;
}
/* Tła i zdjęcia W POLU wyglądają tak samo jak na wydruku -- ten sam odcień w obu miejscach. */
.wizyta-dokument .edytor .tlo-zolte { background: #ffe84d; }
.wizyta-dokument .edytor .tlo-zielone { background: #a8ebbb; }
.wizyta-dokument .edytor .tlo-niebieskie { background: #dbeafe; }
.wizyta-dokument .edytor .tlo-rozowe { background: #fbdce6; }
.wizyta-dokument .edytor img {
  max-width: 100%; height: auto; display: block; margin: 6px 0; border-radius: 8px;
  border: 1px solid var(--linia);
}

/* WEJŚCIE DO POPRZEDNICH WIZYT -- widoczny przycisk, nie cichy odnośnik.
   Piotr, 10.09.2026: „a gdzie są poprzednie wizyty?". Stał jako blady napis obok „sprawdź
   w eWUŚ" i najczęściej w ogóle go nie było, bo chował się przy pacjencie z jedną wizytą.
   Teraz jest zawsze i wygląda jak coś, w co się klika. */
.wejscie-historii {
  width: auto; min-height: 30px; padding: 0 12px; font-size: 13px; font-weight: 600;
  color: var(--pod); background: var(--karta);
  border: 1px solid var(--linia); border-radius: 999px; white-space: nowrap;
}
.wejscie-historii.sa { color: var(--akcent); border-color: #cfe0f5; background: var(--akcent-tlo); }
.wejscie-historii:hover { border-color: var(--linia-mocna); }
.historia-pacjenta .pusto-historia { margin: 0; font-size: 14px; line-height: 1.6; }

/* --- CAŁA STARA WIZYTA W PANELU -------------------------------------------------------------
   Piotr, 10.09.2026: „»otwórz całą« też chcę, żeby się otwierała w panelu bocznym, cały czas
   mam być na aktualnej wizycie". To WIDOK, nie formularz — stąd inny rytm niż w karcie wizyty:
   krótkie nagłówki sekcji, treść bez ramek, nic, co wygląda jak pole do wpisywania. */
.stara-wizyta .wroc-do-listy { width: auto; padding: 0 10px; min-height: 28px; font-size: 12.5px; }
.stara-wizyta .kiedy-starej { margin: 10px 0 12px; font-size: 15px; font-weight: 700; }
.stara-wizyta .kiedy-starej .pod { font-weight: 400; font-size: 12.5px; }
.blok-starej { margin: 0 0 14px; }
.blok-starej h4 {
  margin: 0 0 5px; font-size: 11px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .06em;
}
.tresc-starej { font-size: 13.5px; line-height: 1.6; }
.tresc-starej p { margin: 0 0 5px; }
.tresc-starej ul, .tresc-starej ol { margin: 4px 0 6px; padding-left: 22px; }
.tresc-starej img { max-width: 100%; height: auto; border-radius: 8px; margin: 5px 0; }
.tresc-starej .tlo-zolte { background: #ffe84d; }
.tresc-starej .tlo-zielone { background: #a8ebbb; }
.tresc-starej .tlo-niebieskie { background: #dbeafe; }
.tresc-starej .tlo-rozowe { background: #fbdce6; }
.leki-starej, .uslugi-starej, .dokumenty-starej, .zalaczniki-starej {
  list-style: none; margin: 0; padding: 0; font-size: 13.5px;
}
.leki-starej li, .uslugi-starej li, .dokumenty-starej li, .zalaczniki-starej li {
  padding: 3px 0; border-bottom: 1px solid var(--linia);
}
.uslugi-starej li { display: flex; justify-content: space-between; gap: 10px; }
.uslugi-starej .kwota-uslugi { font-weight: 700; font-variant-numeric: tabular-nums; }
.stara-wizyta .co-z-tym { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.jak-przycisk {
  display: inline-flex; align-items: center; min-height: 30px; padding: 0 12px;
  border: 1px solid var(--linia); border-radius: 8px; font-weight: 600; font-size: 13px;
  color: var(--pod); text-decoration: none; background: var(--karta);
}
.jak-przycisk:hover { border-color: var(--linia-mocna); color: var(--tekst); }

/* --- STARA WIZYTA W PANELU JEST DO POPRAWIENIA ----------------------------------------------
   Piotr, 10.09.2026: „podgląd — zrób, żebym też mógł ją edytować i dopisać".
   Dwie wizyty do pisania na jednym ekranie muszą się różnić na pierwszy rzut oka — stąd pasek
   z datą u góry panelu i inny, cieplejszy odcień tła pól. */
.uwaga-stara {
  margin: 8px 0 10px; font-size: 12.5px; color: #8a5a20;
  background: #fdf4e6; border: 1px solid #edd3a6; border-radius: 8px; padding: 6px 10px;
}
.stan-starej { margin: 0 0 10px; font-size: 12px; color: var(--dobrze); min-height: 14px; }
.stan-starej.blad { color: var(--blad); font-weight: 600; }
.stan-starej:empty { min-height: 0; margin: 0; }
.stara-wizyta .edytor.stara-tresc {
  width: 100%; box-sizing: border-box; margin-top: 5px;
  min-height: 88px; max-height: 320px; overflow-y: auto;
  padding: 9px 11px; font: inherit; font-size: 13.5px; line-height: 1.6; color: var(--tekst);
  border: 1.5px solid #edd3a6; border-radius: 9px; background: #fffdf8;
}
.stara-wizyta .edytor.stara-tresc:focus {
  outline: none; border-color: #d9a441; background: #fff;
}
.stara-wizyta .edytor.stara-tresc.puste::before {
  content: attr(data-podpowiedz); color: var(--pod); pointer-events: none;
}
.stara-wizyta .edytor.stara-tresc p { margin: 0 0 5px; }
.stara-wizyta .edytor.stara-tresc ul, .stara-wizyta .edytor.stara-tresc ol {
  margin: 4px 0 6px; padding-left: 22px;
}
.stara-wizyta .edytor.stara-tresc img { max-width: 100%; height: auto; border-radius: 8px; }
.stara-wizyta .edytor.stara-tresc .tlo-zolte { background: #ffe84d; }
.stara-wizyta .edytor.stara-tresc .tlo-zielone { background: #a8ebbb; }
.stara-wizyta .edytor.stara-tresc .tlo-niebieskie { background: #dbeafe; }
.stara-wizyta .edytor.stara-tresc .tlo-rozowe { background: #fbdce6; }
/* Pasek edytora w panelu jest ciaśniejszy — szerokość słupka jest mniejsza niż karty. */
.stara-wizyta .pasek-edytora { gap: 3px; margin-top: 4px; }
.stara-wizyta .pasek-edytora button { min-height: 26px; height: 26px; padding: 0 8px; font-size: 12px; }
.stara-wizyta .pasek-edytora .otworz-wybierak { min-height: 26px; height: 26px; }

/* --- MINIATURKA ZDJĘCIA PRZY ZAŁĄCZNIKU -----------------------------------------------------
   Piotr, 10.09.2026: „jak dodaję zdjęcie, to chciałbym, żeby się ukazywała miniaturka tego
   zdjęcia oraz podpis, co to za zdjęcie". Zmniejsza je przeglądarka — plik na dysku zostaje
   pełnej wielkości i otwiera się po kliknięciu. */
.lista-zalacznikow .miniaturka {
  flex: 0 0 auto; display: block; width: 56px; height: 56px; border-radius: 8px;
  overflow: hidden; border: 1px solid var(--linia); background: var(--tlo);
}
.lista-zalacznikow .miniaturka img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lista-zalacznikow .miniaturka:hover { border-color: var(--akcent); }

/* MIKROFON PRZY PODPISIE ZDJĘCIA jest mniejszy niż ten przy wywiadzie — stoi w etykiecie
   nad polem, a nie w nagłówku sekcji. */
.dodaj-zalacznik .podpis { display: inline-flex; align-items: center; gap: 6px; }
.dodaj-zalacznik .mikrofon,
.lista-zalacznikow .opisywanie .mikrofon {
  width: auto; min-height: 22px; height: 22px; padding: 0 7px; font-size: 11px; font-weight: 600;
  border-radius: 6px; border: 1px solid var(--linia); background: var(--karta); color: var(--pod);
}
.lista-zalacznikow .opisywanie .mikrofon { min-height: 36px; height: 36px; padding: 0 10px; }
.dodaj-zalacznik .mikrofon:hover,
.lista-zalacznikow .opisywanie .mikrofon:hover { border-color: var(--akcent); color: var(--akcent); }

/* --- UWAGI GABINETU: NIE DLA PACJENTA -------------------------------------------------------
   Piotr, 10.09.2026: „dodaj jeszcze do wizyt pole uwagi — tylko widoczne dla mnie i dla
   recepcji". Inny, ciepły kolor niż reszta karty — żeby jednym spojrzeniem było widać,
   że to notatka robocza, a nie część dokumentacji, którą pacjent zobaczy. */
/* PASEK FORMATOWANIA W WIERSZU TYTUŁU (Piotr, 17.09.2026: „to powinno być tam, gdzie jest »Mów«
   (...) tylko bardziej po prawej stronie"). Jedna linijka zamiast dwóch — i nic nie ucieka
   przy przewijaniu, bo linijka tytułu jest przyklejona do góry okna. */
.wizyta-sekcja > h3 .pasek-edytora,
.pole-z-edytorem .etykieta-pola .pasek-edytora { margin: 0 0 0 auto; flex-wrap: wrap;
  justify-content: flex-end; }
.wizyta-sekcja > h3 .pasek-edytora button,
.pole-z-edytorem .etykieta-pola .pasek-edytora button { min-height: 26px; height: 26px;
  padding: 0 8px; font-size: 12px; }
.wizyta-sekcja > h3 .pasek-edytora .otworz-wybierak,
.pole-z-edytorem .etykieta-pola .pasek-edytora .otworz-wybierak { min-height: 26px; height: 26px; }
.pole-z-edytorem .etykieta-pola { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
@media (max-width: 680px) {
  .wizyta-sekcja > h3 .pasek-edytora,
  .pole-z-edytorem .etykieta-pola .pasek-edytora { margin-left: 0; justify-content: flex-start; }
}

/* Pole edytora nie jest polem formularza -- stoi w zwykłym bloku, nie w etykiecie (patrz
   `pokazFormularzDokumentu`), więc opis pola musi wyglądać tak samo jak przy innych rubrykach. */
.wizyta-pola .pole-z-edytorem { display: flex; flex-direction: column; gap: 5px; }
.wizyta-pola .pole-z-edytorem .etykieta-pola { font-size: 12.5px; color: var(--pod);
  display: flex; align-items: center; gap: 8px; }
/* ZIELONE „ZAPISANE" PRZY PRZYCISKACH (Piotr, 17.09.2026: „niech będzie na zielono napisane
   »zapisane«"). Czerwone, gdy zapis się nie udał -- cicha porażka byłaby gorsza niż brak zapisu. */
/* KAŻDE ZAŚWIADCZENIE INNEGO KOLORU (Piotr, 17.09.2026) -- kolorowa krawędź i numer, żeby przy
   kilku kartkach było widać na pierwszy rzut oka, którą się właśnie otwiera. */
.lista-dokumentow .dokument-karta { border-left: 5px solid var(--linia); }
.lista-dokumentow .dokument-karta .dok-tytul { display: block; font-size: 15.5px;
  line-height: 1.3; color: var(--tekst); }
.lista-dokumentow .dokument-karta.kolor-0 { border-left-color: #2f5bbd; background: #f5f8ff; }
.lista-dokumentow .dokument-karta.kolor-1 { border-left-color: #17803d; background: #f4fbf6; }
.lista-dokumentow .dokument-karta.kolor-2 { border-left-color: #b45309; background: #fffaf2; }
.lista-dokumentow .dokument-karta.kolor-3 { border-left-color: #7c3aed; background: #faf7ff; }
.lista-dokumentow .dokument-karta.kolor-4 { border-left-color: #0e7490; background: #f2fbfd; }
.lista-dokumentow .dokument-karta.kolor-0 .numer { background: #2f5bbd; color: #fff; }
.lista-dokumentow .dokument-karta.kolor-1 .numer { background: #17803d; color: #fff; }
.lista-dokumentow .dokument-karta.kolor-2 .numer { background: #b45309; color: #fff; }
.lista-dokumentow .dokument-karta.kolor-3 .numer { background: #7c3aed; color: #fff; }
.lista-dokumentow .dokument-karta.kolor-4 .numer { background: #0e7490; color: #fff; }

/* === OKNO Z DOKUMENTEM (Piotr, 17.09.2026: „może powinno być w wyskakującym okienku;
   po prostu piszemy, zaznaczamy, drukujemy") ===================================================
   Zaświadczenie i skierowanie pisze się w oknie na wierzchu: tytuł u góry, pole na całą
   wysokość, przyciski na dole. Tło przygaszone; Esc i kliknięcie w tło zamykają. */
body.okno-otwarte { overflow: hidden; }
.okno-dokumentu { position: fixed; inset: 0; z-index: 90; display: flex;
  align-items: center; justify-content: center; padding: 18px; }
.okno-dokumentu .okno-tlo { position: absolute; inset: 0; background: rgba(15, 23, 42, .55); }
/* TYTUŁ, PASEK FORMATOWANIA I PRZYCISKI STOJĄ W MIEJSCU -- przewija się SAM TEKST.
   Piotr, 17.09.2026: „to nie powinno uciekać, jak przewijam edycję zaświadczenia do góry;
   to powinno cały czas być, żebym mógł poprawić w każdym momencie". */
.okno-dokumentu .okno-srodek { position: relative; z-index: 1; width: min(980px, 100%);
  height: calc(100vh - 36px); overflow: hidden; border-radius: 14px;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .35); background: #fff;
  display: flex; flex-direction: column; }
.okno-dokumentu .wizyta-dokument { margin: 0; border: 0; border-radius: 14px;
  display: flex; flex-direction: column; flex: 1; min-height: 0; }
.okno-dokumentu .wizyta-dokument > h3 { flex: 0 0 auto; z-index: 3; background: #fff;
  margin: 0 0 8px; padding: 14px 4px 10px; border-bottom: 1px solid var(--linia);
  font-size: 18px; }
.okno-dokumentu .okno-kiedy { font-size: 13px; font-weight: 400; color: var(--pod); }
/* Przewija się ta część — a pasek każdego pola przykleja się do jej górnej krawędzi. */
.okno-dokumentu .wizyta-pola { flex: 1; min-height: 0; overflow-y: auto; padding-right: 4px; }
/* Cała linijka („Zaświadcza się, że  🎤 Mów   B I U …") przykleja się do góry przewijanej części. */
.okno-dokumentu .pole-z-edytorem .etykieta-pola { position: sticky; top: 0; z-index: 4;
  background: #fff; padding: 6px 0 6px; box-shadow: 0 6px 10px -8px rgba(15, 23, 42, .5); }
.okno-dokumentu .edytor { min-height: 46vh; max-height: none; }
/* RUBRYKA „W CELU": jedna linijka, która rośnie z tekstem, i mocniejszy opis (Piotr, 17.09.2026:
   „to powinno być bardziej jakoś zaznaczone (...) może być jedna linijka z możliwością
   rozszerzania"). Pasek z ozdobami pokazuje się dopiero, gdy ktoś w nią wejdzie. */
.okno-dokumentu .pole-krotkie { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--linia); }
.okno-dokumentu .pole-krotkie .edytor { min-height: 0; padding: 8px 12px; }
.okno-dokumentu .etykieta-mocna { font-size: 13px; font-weight: 700; color: var(--tekst);
  letter-spacing: .2px; }
.okno-dokumentu .pole-krotkie .pasek-edytora { display: none; }
.okno-dokumentu .pole-krotkie:focus-within .pasek-edytora { display: flex; }
.okno-dokumentu .okno-dol { flex: 0 0 auto; background: #fff; padding: 10px 4px;
  border-top: 1px solid var(--linia); display: flex; align-items: center; gap: 10px; }
.okno-dokumentu .okno-przyciski { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; }
/* DÓŁ OKNA: JEDNA RÓWNA LINIA (Piotr, 17.09.2026: „umieść to ładnie, równo w jednym wierszu
   (...) weź, zrób ładne te przyciski"). Wszystko tej samej wysokości (34 px), wybory po lewej
   na jasnej podkładce, przyciski po prawej: druk pełny, wysyłka obrysowana, „Zamknij" cichy. */
.okno-dokumentu .okno-dol { flex-wrap: nowrap; overflow-x: auto; gap: 10px; align-items: center;
  background: #fbfcfe; border-top: 1px solid var(--linia); padding: 10px 4px; }
.okno-dokumentu .okno-wybory { display: flex; align-items: center; gap: 8px; flex: 0 1 auto;
  min-width: 0; font-size: 12px; color: var(--pod); white-space: nowrap; }
.okno-dokumentu .okno-wybory .druk-loga { display: flex; flex-direction: row; align-items: center;
  gap: 6px; min-width: 0; margin: 0; font-size: 11px; font-weight: 600; letter-spacing: .3px;
  text-transform: uppercase; color: #6b7a90; }
.okno-dokumentu .okno-wybory .druk-loga select { max-width: 168px; font-size: 12.5px;
  font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--tekst);
  height: 34px; min-height: 34px; padding: 0 28px 0 10px; border: 1px solid var(--linia);
  border-radius: 9px; background-color: #fff; }
.okno-dokumentu .okno-wybory .druk-loga select:hover { border-color: var(--akcent); }
.okno-dokumentu .okno-wybory .dok-dla-recepcji { display: flex; align-items: center; gap: 6px;
  white-space: nowrap; margin: 0; height: 34px; padding: 0 12px; border: 1px solid var(--linia);
  border-radius: 9px; background: #fff; font-size: 12.5px; color: var(--tekst); cursor: pointer; }
.okno-dokumentu .okno-wybory .dok-dla-recepcji:hover { border-color: var(--akcent); }
.okno-dokumentu .okno-wybory .dok-dla-recepcji input { margin: 0; width: 16px; height: 16px;
  accent-color: var(--akcent); }
.okno-dokumentu .dok-zapisano { flex: 0 0 auto; white-space: nowrap; font-size: 12.5px; }
.okno-dokumentu .okno-przyciski { flex: 0 0 auto; flex-wrap: nowrap; white-space: nowrap;
  gap: 8px; }
.okno-dokumentu .okno-przyciski button { height: 34px; min-height: 34px; padding: 0 16px;
  font-size: 13px; font-weight: 600; border-radius: 9px; display: inline-flex;
  align-items: center; gap: 6px; }
.okno-dokumentu .okno-przyciski #dok-wyslij { background: #fff; color: var(--akcent);
  border: 1px solid var(--akcent); }
.okno-dokumentu .okno-przyciski #dok-wyslij:hover { background: var(--akcent-tlo); }
.okno-dokumentu .okno-przyciski #dok-anuluj { border: 1px solid transparent; color: var(--pod);
  background: transparent; font-weight: 500; }
.okno-dokumentu .okno-przyciski #dok-anuluj:hover { background: #eef1f5; color: var(--tekst); }
@media (max-width: 860px) {
  .okno-dokumentu .okno-dol { flex-wrap: wrap; overflow-x: visible; }
  .okno-dokumentu .okno-przyciski { margin-left: 0; width: 100%; }
  .okno-dokumentu .okno-przyciski button { flex: 1 1 auto; justify-content: center; }
}
@media (max-width: 680px) {
  .okno-dokumentu { padding: 0; }
  .okno-dokumentu .okno-srodek { width: 100%; height: 100vh; border-radius: 0; }
  .okno-dokumentu .okno-przyciski { margin-left: 0; width: 100%; }
}

/* Ostrzeżenie o za małym pliku pieczątki/podpisu (18.09.2026). */
.uwaga-jakosci { color: #b42318; font-weight: 600; }

/* Krzyżyk „Zwiń" przy tytule formularza -- zwija tam, gdzie się rozwinęło. */
.wizyta-dokument > h3 { display: flex; align-items: center; gap: 10px; }
.wizyta-dokument > h3 .dok-zwin { margin-left: auto; font-size: 13px; }

/* Formularz poprawiania stoi POD swoim dokumentem, w jego kartce na liście. */
.lista-dokumentow .dok-edycja:empty { display: none; }
.lista-dokumentow .dok-edycja > .wizyta-dokument { margin: 10px 0 2px; }
.dok-zapisano { align-self: center; font-size: 13px; font-weight: 600; color: #17803d; }
.dok-zapisano.blad { color: #b42318; }
.wizyta-dokument .edytor { min-height: 96px; margin-top: 4px; }
.wizyta-dokument .pasek-edytora { margin-top: 6px; }


/* GDZIE KOŃCZY SIĘ STRONA WYDRUKU (Piotr, 18.09.2026: „powinienem widzieć, gdzie pierwsza
   strona się kończy, gdzie druga, gdzie trzecia (...) weź mi zrób takie podpowiadajki").
   Kreska leży NA polu edycji, nie w tekście — niczego nie zapisuje i nie da się w nią kliknąć.
   Wysokość liczy prawdziwy wydruk otwarty niewidocznie w ramce `.ramka-miary`. */
/* Ramka z prawdziwym wydrukiem. Stoi w kolumnie podglądu i JEST WIDOCZNA -- do 18.09.2026
   wisiała poza ekranem, bo służyła tylko do liczenia stron. */
.ramka-miary { border: 0; background: #fff; }
.wizyta-pola .pole-z-edytorem { position: relative; }
.dok-ile-stron { align-self: center; font-size: 12.5px; color: var(--pod); white-space: nowrap; }

/* ŻYWY PODGLĄD STRON OBOK PISANIA (Piotr, 18.09.2026: „nie działa ta podpowiedź, musisz
   wymyślić coś innego, co będzie działało (...) żeby po prostu wiedział, kiedy ta strona ma
   przeskoczyć"). Kreska w tekście była WYLICZANA; ten podgląd niczego nie liczy — to jest
   PRAWDZIWY wydruk tego dokumentu, tylko pomniejszony. Co widać tutaj, to wyjdzie z drukarki. */
.okno-dokumentu.z-podgladem .okno-srodek { width: min(1420px, 100%); flex-direction: row;
  gap: 0; background: transparent; box-shadow: none; overflow: visible; }
.okno-dokumentu.z-podgladem .wizyta-dokument { background: #fff; border-radius: 14px;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .35); flex: 1 1 auto; min-width: 0; }
.okno-podglad { flex: 0 0 372px; width: 372px; margin-left: 14px; background: #eef2f9;
  border: 1px solid #d7e0ee; border-radius: 14px; display: flex; flex-direction: column;
  height: 100%; overflow: hidden; }
.okno-podglad .podglad-gora { display: flex; align-items: center; justify-content: space-between;
  gap: 8px; padding: 9px 12px; border-bottom: 1px solid #d7e0ee; font-size: 12.5px;
  color: var(--pod); background: #f7f9fd; border-radius: 14px 14px 0 0; }
.okno-podglad .podglad-gora b { color: var(--tekst); font-size: 13px; }
.okno-podglad .podglad-pole { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden;
  padding: 10px; }
.okno-podglad .podglad-skala { position: relative; width: 100%; overflow: hidden; }
.okno-podglad iframe { border: 0; width: 820px; height: 1200px; transform-origin: top left;
  background: transparent; }
/* Podgląd schowany, ale WCIĄŻ ZŁOŻONY: gdyby zniknął z układu, przeglądarka przestałaby go
   rysować i program nie wiedziałby, ile jest stron. */
.okno-dokumentu:not(.z-podgladem) .okno-podglad { position: fixed; left: -12000px; top: 0;
  width: 372px; height: 900px; margin: 0; }
.podglad-strona-teraz { font-weight: 700; color: #1d4ed8; }

/* === ROZMOWA Z RECEPCJĄ — CHMURKA NA KAŻDYM EKRANIE ==========================================
   Piotr, 19.09.2026: „chciałbym mieć czat z Olą (...) w jakiejś chmurce, niezależnie od tego,
   co robimy". Chmurka wisi w prawym dolnym rogu, nad wszystkim, i nie przesuwa niczego
   na stronie — dlatego `position:fixed`. */
/* OKNO ROZMOWY WYCHODZI SPOD PASKA U GÓRY, nie z rogu ekranu (Piotr, 19.09.2026:
   „to okienko, tam gdzie jest pacjent, powinno być (...) gdzieś indziej (...) przeszkadza
   strasznie"). Chmurka w prawym dolnym rogu zasłaniała treść przy każdym pacjencie. */
.rozmowa-chmurka{position:fixed;right:16px;top:64px;z-index:1200;display:flex;
  flex-direction:column;align-items:flex-end;gap:10px}
.rozmowa-guzik{position:relative;width:56px;height:56px;border-radius:50%;border:0;
  background:#2f6fb3;color:#fff;font-size:24px;cursor:pointer;box-shadow:0 6px 18px rgba(15,40,70,.28)}
.rozmowa-guzik:hover{background:#255d99}
.rozmowa-ile{position:absolute;top:-4px;right:-4px;min-width:22px;height:22px;border-radius:999px;
  background:#dc2626;color:#fff;font-size:12px;font-weight:700;line-height:22px;padding:0 6px}
/* OKNO MNIEJSZE (Piotr, 19.09.2026: „zrobiłbym troszkę mniejsze to pole, bo takie wielkie
   to pole jest tego czatu"). Rozmowa robocza: kilka zdań i prośba o kawę — nie potrzebuje
   pół ekranu. */
.rozmowa-okno{width:min(330px,calc(100vw - 28px));max-height:min(440px,calc(100vh - 140px));
  display:flex;flex-direction:column;background:#fff;border:1px solid #d7e3f2;border-radius:16px;
  box-shadow:0 18px 46px rgba(15,40,70,.22);overflow:hidden}
/* OKNO MA BYĆ NISKIE (Piotr, 19.09.2026: „takie wielkie to pole jest tego czatu",
   a przy pustej rozmowie „po co to wolne pole"). Każdy rząd oddaje po kilkanaście pikseli:
   nagłówek, rząd napojów, pole pisania i stopka. */
.rozmowa-glowa{display:flex;align-items:center;gap:8px;padding:6px 10px;
  border-bottom:1px solid #eef3f9;background:linear-gradient(180deg,#f7fbff,#f2f7fd);font-size:14px}
.rozmowa-glowa b{flex:1 1 auto;color:#13315c}
.rozmowa-dzwiek{display:flex;align-items:center;gap:5px;font-size:12.5px;color:#5b7089}
.rozmowa-zamknij{border:0;background:transparent;font-size:22px;line-height:1;color:#64748b;cursor:pointer}
.rozmowa-zamow{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:6px 10px;
  border-bottom:1px solid #eef3f9;font-size:12px;color:#5b7089}
.rozmowa-zamow button{border:1px solid #d7e3f2;border-radius:999px;background:#fff;padding:3px 10px;
  font:inherit;font-size:13px;cursor:pointer}
.rozmowa-zamow button:hover{background:#eef4ff;border-color:#9db6e8}
.rozmowa-zamow select{border:1px solid #d7e3f2;border-radius:8px;padding:3px 5px;font:inherit;
  font-size:12.5px}
/* ŻADNEGO PRZEWIJANIA W BOK (Piotr, 19.09.2026: „dole jest jakiś pasek przewijania.
   Po co ten pasek przewijania? Usuń go"). Brał się z odtwarzacza nagrania: miał 300 px
   sztywno i razem z wypełnieniem wiersza nie mieścił się w oknie. */
.rozmowa-lista{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;padding:8px 10px;display:flex;
  flex-direction:column;gap:7px}
.rozmowa-wpis{box-sizing:border-box;max-width:100%}
.rozmowa-wpis audio{display:block;width:100%;max-width:100%;height:34px;margin-top:4px}
.rozmowa-wpis{background:#f6f9fd;border-radius:12px;padding:8px 10px}
.rozmowa-wpis.rola-lekarz{background:#eef4ff}
.rozmowa-wpis.zamowienie{background:#fff7ed;border:1px solid #fed7aa}
.rozmowa-wpis.zamowienie.zrobione{background:#f0fdf4;border-color:#bbf7d0}
.rozmowa-kto{font-size:12px;color:#64748b;margin-bottom:3px}
.rozmowa-kto i{font-style:normal;opacity:.75}
.rozmowa-tresc{font-size:14px;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere}
.rozmowa-znikle{color:#94a3b8;font-style:italic}
.rozmowa-sekundy{font-size:12px;color:#64748b;margin-left:6px}
.rozmowa-zrobione{margin-top:6px;border:1px solid #fdba74;border-radius:8px;background:#fff;
  padding:4px 12px;font:inherit;font-size:13px;cursor:pointer}
.rozmowa-stan{margin-top:4px;font-size:12.5px;color:#15803d}
.rozmowa-pusto{color:#94a3b8;font-size:13.5px;text-align:center;margin:18px 0}
/* RZĄD PISANIA MUSI SIĘ ZMIEŚCIĆ (Piotr: „wyślij się ucina"). Pole oddaje miejsce guzikom,
   a guziki mają stałą szerokość i nie łamią napisu. */
.rozmowa-pisz{display:flex;align-items:center;gap:5px;padding:7px 8px;border-top:1px solid #eef3f9;
  box-sizing:border-box;width:100%}
.rozmowa-pisz input{flex:1 1 60px;min-width:0;box-sizing:border-box;border:1px solid #d7e3f2;
  border-radius:10px;padding:9px 10px;font:inherit;font-size:14px}
.rozmowa-mikrofon{flex:0 0 auto;border:1px solid #d7e3f2;border-radius:10px;background:#fff;
  font-size:18px;padding:6px 9px;cursor:pointer}
/* NAGRYWA = CZERWONO I PULSUJE. Człowiek ma widzieć, że mikrofon jest włączony. */
.rozmowa-mikrofon.nagrywa{background:#fee2e2;border-color:#fca5a5;animation:rozmowa-puls 1s infinite}
@keyframes rozmowa-puls{0%,100%{opacity:1}50%{opacity:.55}}
.rozmowa-wyslij{flex:0 0 auto;white-space:nowrap;border:0;border-radius:10px;background:#2f6fb3;
  color:#fff;padding:9px 12px;font:inherit;font-size:14px;cursor:pointer}
/* STOPKA W JEDNEJ LINIJCE -- napis i „Wyczyść" obok siebie, drobnym drukiem. */
.rozmowa-stopka{display:flex;align-items:center;gap:8px;margin:0;padding:4px 10px 7px;
  font-size:11px;color:#94a3b8;line-height:1.3}
.rozmowa-wyczysc{margin-left:auto;white-space:nowrap}
@media (max-width:480px){
  .rozmowa-chmurka{right:12px;bottom:12px}
  .rozmowa-okno{max-height:calc(100vh - 100px)}
}
/* WYCOFANE — zostaje w rozmowie, ale szare i przekreślone: recepcja ma wiedzieć, że prośba
   była i że jest już nieaktualna (Piotr, 19.09.2026: „chciałbym to usunąć i na przykład tylko
   herbatę podjąć"). */
.rozmowa-wpis.wycofane{background:#f8fafc;border:1px dashed #e2e8f0}
.rozmowa-wpis.wycofane .rozmowa-tresc{color:#94a3b8;text-decoration:line-through}
.rozmowa-wpis.wycofane .rozmowa-stan{color:#94a3b8}
.rozmowa-kto{display:flex;align-items:center;gap:6px}
.rozmowa-cofnij{margin-left:auto;border:0;background:transparent;color:#94a3b8;font-size:16px;
  line-height:1;cursor:pointer;padding:0 2px}
.rozmowa-cofnij:hover{color:#dc2626}
/* ZAZNACZONY NAPÓJ — widać, o co poprosisz, ZANIM cokolwiek pójdzie do recepcji
   (Piotr, 19.09.2026: „tysiąc razy mogę zaznaczać i dwadzieścia razy będzie woda"). */
.rozmowa-zamow button.wybrany{background:#2f6fb3;border-color:#2f6fb3;color:#fff;font-weight:600}
/* „POPROŚ" MA BYĆ WIDAĆ (Piotr, 19.09.2026: „naciskam poproś, to prawie tego wcale nie widać,
   tego przycisku"). Był mały, blady i dociśnięty do prawej krawędzi między innymi guzikami.
   Teraz: pełna zieleń, grubsze litery, własna linijka — i wyraźnie inny od guzików napojów. */
/* UWAGA NA SIŁĘ REGUŁ (Piotr, 19.09.2026: „jak najeżdżę na ten pasek »poproś«, to słowa
   »poproś« nie widać w ogóle, bo ono jest białe. Na jasnym tle w ogóle tego nie widać").
   PRZYCZYNA: `.rozmowa-zamow button:hover` (dwie klasy + element) jest MOCNIEJSZE niż
   `.rozmowa-popros:hover` (jedna klasa) — więc po najechaniu guzik dostawał jasne tło
   od guzików napojów, a litery zostawały białe. Dlatego każda reguła tego guzika ma tu
   taki sam człon `.rozmowa-zamow button`, żeby wygrywała.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: napis znika przy najechaniu myszką — i to dokładnie
   wtedy, gdy człowiek chce w niego kliknąć. Patrz „siła reguł CSS". */
.rozmowa-zamow button.rozmowa-popros{flex:1 1 100%;margin-top:4px;border:0;border-radius:10px;
  background:#12a97a;color:#fff;padding:9px 16px;font:inherit;font-size:14.5px;font-weight:600;
  cursor:pointer;box-shadow:0 2px 6px rgba(18,169,122,.28);padding:7px 14px;font-size:14px}
.rozmowa-zamow button.rozmowa-popros:hover{background:#0f9069;border:0;color:#fff}
/* NIEAKTYWNY NADAL WIDOCZNY -- człowiek ma wiedzieć, że guzik jest i czego mu brakuje.
   Ciemne litery na szarym: czytelne także wtedy, gdy nic nie zaznaczono. */
.rozmowa-zamow button.rozmowa-popros:disabled{background:#e2e8f0;color:#475569;box-shadow:none;
  cursor:default}
.rozmowa-zamow button.rozmowa-popros:disabled:hover{background:#e2e8f0;color:#475569}


/* ROZMOWA W MENU PO LEWEJ (Piotr, 20.09.2026: „pasek po lewej stronie w menu, żeby był ten
   czat"). Wcześniej stał pasek u góry i zabierał wysokość KAŻDEMU widokowi -- a na laptopie
   wysokości brakuje najbardziej: „ta górna część po prostu przeszkadza w przeglądaniu strony".
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: bez `#menu-boczne nav` w selektorze reguła przegra
   z regułą bazową menu i nie zadziała po cichu (nauka o sile reguł, 17.09.2026).
   JEDNA LINIJKA, ZAWSZE: napis po lewej, plakietki dociśnięte do prawej krawędzi -- bez tego
   guzik z dwiema plakietkami łamał się na dwa wiersze. */
#menu-boczne nav button.menu-rozmowa{position:relative;display:flex;align-items:center;gap:8px;
  white-space:nowrap}
#menu-boczne nav button.menu-rozmowa.ma-nowe{font-weight:600}
#menu-boczne nav button.menu-rozmowa b{font-weight:inherit;overflow:hidden;text-overflow:ellipsis}
#menu-boczne nav button.menu-rozmowa i{font-style:normal;flex:0 0 auto;border-radius:999px;
  padding:1px 7px;font-size:11.5px;line-height:1.6;vertical-align:middle}
#menu-boczne nav button.menu-rozmowa i:first-of-type{margin-left:auto}
#menu-boczne nav button.menu-rozmowa i.menu-rozmowa-ile{background:#2563eb;color:#fff}
#menu-boczne nav button.menu-rozmowa i.menu-rozmowa-napoje{background:#fff7ed;color:#9a3412;
  border:1px solid #fed7aa}
.rozmowa-wyczysc{border:0;background:transparent;color:#94a3b8;font:inherit;font-size:11.5px;
  text-decoration:underline;cursor:pointer;padding:0}
.rozmowa-wyczysc:hover{color:#dc2626}



/* „SCHOWANY" ZNACZY SCHOWANY — WĄSKO, tylko okno rozmowy (patrz ta sama poprawka w Finansach).
   Twarda reguła na cały program zgasiła elementy pokazywane przez `style.display`
   (Piotr: „nic nie ma, teraz wszystko zniknęło") — więc wyjątek dotyczy jednego okna. */
.rozmowa-okno[hidden]{display:none}
/* CO SIĘ DZIEJE Z NAGRANIEM — jedna linijka pod polem pisania (Piotr, 19.09.2026:
   „nie działa nagrywanie"; program milczał zarówno przy braku zgody na mikrofon,
   jak i przy zbyt krótkim przytrzymaniu). */
.rozmowa-stan-nagrania{margin:0;padding:0 12px 6px;font-size:12.5px;color:#b45309}
.rozmowa-stan-nagrania[hidden]{display:none}

/* MAŁE OKNO ROZMOWY NIE PODLEGA REGULE „GUZIK MA 48 PX" ======================================
   Piotr, 19.09.2026: „takie wielkie to pole jest tego czatu".
   PRZYCZYNA: program ma regułę, że każdy guzik i pole ma co najmniej 48 px wysokości — po to,
   żeby dało się w nie trafić palcem przy pacjencie. W oknie rozmowy to znaczyło, że sam rząd
   napojów zajmował 167 px, a nagłówek 59 px: trzy rzędy po 46 px.
   Tutaj ją zdejmujemy — to jest okienko do pisania, a nie formularz wizyty. Guziki mają
   po 30–38 px, czyli nadal wygodnie, ale okno mieści się na ekranie.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: okno urośnie o ponad sto pikseli i wróci to, co Piotr
   zgłosił — „takie wielkie pole". Reguła 48 px ZOSTAJE wszędzie indziej. */
.rozmowa-okno button,
.rozmowa-okno select,
.rozmowa-okno input[type=text],
.rozmowa-okno input:not([type]){min-height:0}
.rozmowa-zamow button{min-height:30px}
.rozmowa-zamow select{min-height:30px}
.rozmowa-zamow button.rozmowa-popros{min-height:38px}
.rozmowa-glowa .rozmowa-zamknij{min-height:28px;padding:0 4px}
.rozmowa-pisz input{min-height:38px}
.rozmowa-pisz button{min-height:38px}
.rozmowa-stopka .rozmowa-wyczysc{min-height:0}
/* Lista „do:" w oknie rozmowy — widoczna tylko u lekarza, który ma z kim rozmawiać
   poza recepcją (Piotr, 19.09.2026: „muszę mieć możliwość napisania też w gabinecie,
   między gabinetami").
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: wstawiona z powrotem do wiersza z polem do pisania
   rozpycha go — pole na tekst schodzi do 22 px, a „Wyślij" wypada poza okno. Dlatego ma
   własną linijkę, na całą szerokość. */
.rozmowa-dokad-wiersz{padding:6px 8px 0;box-sizing:border-box;width:100%}
.rozmowa-dokad-wiersz[hidden]{display:none}
/* UKRYTA STOPKA MA ZNIKAĆ. `display:flex` powyżej jest silniejsze od samego `[hidden]`
   i stopka zostawała widoczna mimo ukrycia (ta sama pułapka co przy oknie rozmowy). */
.rozmowa-stopka[hidden]{display:none}
.rozmowa-dokad{width:100%;box-sizing:border-box;min-height:34px;border:1px solid #d7e3f2;
  border-radius:10px;padding:5px 8px;font:inherit;font-size:13px;background:#fff;cursor:pointer}

/* NUMER PORZADKOWY PRZY BADANIU (Piotr, 20.09.2026: „ponumeruj badania").
   Waska, szara kolumna -- ma dac sie policzyc wzrokiem, a nie przyciagac oka. Liczby rowne
   (tabular-nums), zeby 9 i 10 stały pod sobą.
   CO SIE STANIE, JESLI TO ZMIENISZ: przy `display:block` na waskim ekranie (regula nizej,
   ~2877) numer stoi nad nazwa jako osobny wiersz -- dlatego dostaje wtedy `data-etykieta`. */
.bad-tabela .bad-lp { width: 34px; text-align: right; color: var(--pod);
  font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; padding-right: 10px; }

/* NUMER PRZY BADANIU NA LIŚCIE POD SKIEROWANIEM (Piotr, 20.09.2026).
   Wiersz jest `display:flex` ze `space-between`, więc sama nazwa musi dostać `flex:1` --
   bez tego numer, nazwa i kwota rozjechałyby się równo po szerokości i numer odkleiłby się
   od nazwy, której dotyczy.
   CO SIE STANIE, JESLI TO ZMIENISZ: szerokość 30px trzyma jedno- i dwucyfrowe numery pod
   sobą; przy trzycyfrowych (ponad 99 badań) kolumna sama się rozepchnie, bo to `min-width`. */
.badania-numerowane .bad-nr { min-width: 30px; text-align: right; color: var(--pod);
  font-variant-numeric: tabular-nums; flex: 0 0 auto; }
.badania-numerowane .bad-co { flex: 1 1 auto; }

/* Podpis „dla pacjenta:" zdjęty 20.09.2026 (Piotr: „nie musisz pisać, że dla pacjenta.
   Możesz napisać z cenami, z jedną zniżką, ze zniżkami"). Nazwy przycisków mówią same. */

/* STAN AUTOZAPISU — „zmienione… / zapisuję… / zapisano 16:42" (20.09.2026).
   Ma informować, nie przyciągać wzroku: mały, szary, bez ramki. Czerwony dopiero wtedy,
   gdy zapis NIE poszedł — wtedy człowiek musi zareagować. */
.bad-autozapis { display: inline-block; margin-left: 10px; font-size: 12px; color: var(--pod);
  font-variant-numeric: tabular-nums; }

/* ZWINIĘTA LISTA BADAŃ pod skierowaniem (Piotr, 20.09.2026: „dobrze by było to zwinąć,
   żeby móc rozwinąć i zobaczyć"). Siedemdziesiąt pozycji spychało resztę wizyty kilka
   ekranów w dół.
   Nagłówek wygląda jak przycisk, bo nim jest — bez tego nikt nie zgadnie, że da się kliknąć. */
.badania-zwiniete { margin-top: 10px; }
.badania-zwiniete > summary {
  cursor: pointer; display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px; border: 1px solid var(--linia); border-radius: 8px;
  background: #fbfcfd; font-size: 13px; font-weight: 600; color: var(--pod);
  list-style: none; user-select: none;
}
.badania-zwiniete > summary:hover { background: var(--akcent-tlo); color: var(--akcent);
  border-color: #c7ddff; }
.badania-zwiniete > summary::-webkit-details-marker { display: none; }
.badania-zwiniete > summary::before { content: '▸'; font-size: 11px; }
.badania-zwiniete[open] > summary::before { content: '▾'; }
/* NA WYDRUKU ZAWSZE ROZWINIĘTE — kartka nie ma jak być klikana. */
@media print { .badania-zwiniete > summary { display: none; }
  .badania-zwiniete > ul { display: block !important; } }

/* PANEL ZESTAWÓW BADAŃ (Piotr, 20.09.2026). Każdy zestaw to osobna karteczka: nazwa, ile badań,
   co z tym zrobić — a lista badań zwinięta, żeby pięć zestawów po siedemdziesiąt pozycji
   nie zrobiło z panelu kilometra. */
.zestaw-karta { border: 1px solid var(--linia); border-radius: 10px; padding: 10px 12px;
  margin-top: 10px; background: #fbfcfd; }
.zestaw-glowa { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.zestaw-glowa .zestaw-nazwa { font-size: 15px; }
.zestaw-akcje { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }
.zestaw-szukanie { margin-top: 10px; }
.zestaw-pole { width: 100%; box-sizing: border-box; }
.zestaw-wyniki { display: grid; gap: 4px; margin-top: 6px; max-height: 260px; overflow: auto; }
/* WYNIK SZUKANIA JEST PRZYCISKIEM, nie wierszem tabeli — jedno kliknięcie dokłada badanie. */
.zestaw-wynik { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left;
  padding: 6px 10px; border: 1px solid var(--linia); border-radius: 8px; background: #fff;
  font-size: 13.5px; cursor: pointer; }
.zestaw-wynik:hover:not(:disabled) { background: var(--akcent-tlo); border-color: #c7ddff; }
.zestaw-wynik .kod { margin-left: auto; color: var(--pod); font-size: 12px; }
/* JUŻ W ZESTAWIE — na czerwono i bez możliwości kliknięcia. Ta sama zasada, co przy wycenie:
   badanie, którego nie widać, wygląda jak nieznalezione. */
.zestaw-wynik.jest-juz { color: var(--blad); border-color: #f3c6c6; background: #fff7f7;
  cursor: default; }
.zestaw-wynik .juz { color: var(--blad); font-size: 12px; }
.zestaw-karta .badania-w-wierszu li { background: #fff; padding: 4px 8px; border-radius: 6px; }

/* DOKĄD IDZIE SKIEROWANIE — ALAB czy BIOVIS (Piotr, 20.09.2026).
   Dwa laboratoria, dwa różne cenniki: ALAB stoi w cenniku badań, BIOVIS w cenniku usług.
   Przełącznik przy nagłówku, żeby było widać, na czym się pisze, zanim padnie pierwsza litera. */
.bad-dokad { display: inline-flex; gap: 4px; margin-left: 10px; vertical-align: middle; }
.bad-dokad button { padding: 3px 10px; font-size: 12.5px; border-radius: 7px;
  border: 1px solid var(--linia); background: #fff; color: var(--pod); cursor: pointer; }
.bad-dokad button.wybrany { background: var(--akcent); border-color: var(--akcent); color: #fff; }
.bad-dokad button:not(.wybrany):hover { background: var(--akcent-tlo); color: var(--akcent);
  border-color: #c7ddff; }

/* „zapisano 17:42" przy zestawach — ten sam sposób mówienia, co przy autozapisie wyceny.
   Czerwony tylko wtedy, gdy zapis NIE poszedł: wtedy człowiek musi zareagować. */
#zestawy-panel-zapis { font-variant-numeric: tabular-nums; }
#zestawy-panel-zapis.nie-poszlo { color: var(--blad); font-weight: 600; }

/* DO KTÓREGO LABORATORIUM NALEŻY ZESTAW (20.09.2026). Zestawy ALAB-owe i BIOVIS-owe stoją
   na jednej liście, a wstawić da się je tylko na właściwym skierowaniu — więc musi to być
   widać bez otwierania. */
.zestaw-lab { font-size: 11px; font-weight: 700; letter-spacing: .04em; padding: 2px 7px;
  border-radius: 999px; background: var(--akcent-tlo); color: var(--akcent); }
.zestaw-lab.jest-biovis { background: #f3e8ff; color: #6b21a8; }

/* NA WĄSKIM EKRANIE RZĄD U RECEPCJI WRACA DO ZAWIJANIA. Jedna linia i tak by się nie
   zmieściła, a poziome przewijanie na telefonie gubi ostatnie przyciski. */
@media (max-width: 900px) {
  .skierowanie-wiersz > .co-z-tym { flex-wrap: wrap; overflow-x: visible; }
}

/* ✕ przy pojedynczym badaniu na wizycie (20.09.2026). Cichy, po prawej, tuż za kwotą —
   ma być pod ręką, ale nie ma przyciągać wzroku przy czytaniu listy. */
.badania-numerowane .bad-zdejmij-poz { flex: 0 0 auto; margin-left: 8px; padding: 0 6px;
  min-height: 22px; line-height: 20px; font-size: 12px; }
.badania-numerowane .bad-zdejmij-poz:hover { color: var(--blad); border-color: #f3c6c6; }

/* SPIS „WYSTAWIONE NA TEJ WIZYCIE" (Piotr, 20.09.2026). Stoi na samym dole karty wizyty --
   to ostatnia rzecz, na którą lekarz patrzy przed zamknięciem. Czyta te same dane, co sekcje
   wyżej; jest spisem, a nie drugim źródłem prawdy. */
.wystawione-spis { margin-top: 14px; padding: 12px 14px; border-radius: 10px;
  background: var(--akcent-tlo); border: 1px solid #c7ddff; }
.wystawione-spis h4 { margin: 0 0 8px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--akcent); }
.wystawione-spis ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; }
.wystawione-spis li { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  font-size: 14px; }
.wystawione-spis li > b { flex: 0 0 auto; min-width: 120px; }
.wystawione-spis .co-dokladnie { flex: 1 1 200px; min-width: 0; }
.wystawione-spis .pod { flex: 0 0 auto; font-size: 12px; color: var(--pod); }
/* NIC NIE WYSTAWIONO — mówimy to wprost. Pusty spis znaczy „sprawdziłem i nie ma",
   a brak spisu znaczy „nie wiem". Przy zamykaniu wizyty to dwie różne rzeczy. */
.wystawione-spis.pusty { background: var(--tlo); border-color: var(--linia);
  color: var(--pod); font-size: 13px; }

/* „ROBI GDZIE INDZIEJ" — druga linijka bloku notatki (20.09.2026). Ten sam układ, co notatka
   wyżej, bez przycisku: zapisuje je jedno wspólne „Zapisz". */
.bad-gdzie { margin-top: -4px; }

/* DOPISANIE POJEDYNCZEJ POZYCJI DO CENNIKA (Piotr, 20.09.2026). Stoi pod wgrywaniem arkusza,
   oddzielone kreską — to druga droga do tego samego, a nie dalszy ciąg tamtej. */
.cennik-pojedyncze { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--linia); }
.cennik-pojedyncze .naglowek { font-size: 13px; font-weight: 700; color: var(--pod);
  margin-bottom: 8px; }
/* WSZYSTKO W JEDNYM POZIOMIE (Piotr, 21.09.2026: „to dodaj badanie, jest ten przycisk niższy
   (...) wyrównaj wszystko w jednym poziomie").
   DLACZEGO PRZYCISK STAŁ NIŻEJ: każda etykieta ma z reguły ogólnej `margin: 0 0 14px`.
   Przy `align-items: flex-end` linia równa się do DOŁU RAZEM Z MARGINESEM — pola kończyły się
   14 px wyżej niż przycisk, a wyglądało to jak przycisk zsunięty w dół.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: sam `align-items` nie wystarczy, dopóki etykiety mają
   dolny margines. Wysokość pól i przycisku musi być podana tą samą liczbą — inaczej globalne
   `min-height: 46px` przy przycisku i niższe pole znowu się rozjadą. */
.cennik-pojedyncze .rzad { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; }
.cennik-pojedyncze .rzad > label { display: flex; flex-direction: column; gap: 3px;
  font-size: 11px; color: #475569; flex: 1 1 180px; min-width: 0; margin-bottom: 0; }
.cennik-pojedyncze .rzad > label.krotkie { flex: 0 0 140px; }
.cennik-pojedyncze input, .cennik-pojedyncze select {
  height: 44px; min-height: 44px; box-sizing: border-box; }
.cennik-pojedyncze button { flex: 0 0 auto; height: 44px; min-height: 44px;
  padding: 0 18px; margin: 0; }
/* PTASZEK „w zapisach" NIE MA BYĆ WYSOKI NA 44 px — kratka zostaje kratką, a wiersz równa się
   jej etykietą. */
.cennik-pojedyncze input[type="checkbox"] { height: auto; min-height: 0; }
/* CENNIK USŁUG JAK W FINANSACH (Piotr, 22.09.2026). Pola zmieniane wprost w wierszu są małe
   i nie rozpychają tabeli; „Edytuj" i „Usuń" stoją obok siebie, a nie jeden pod drugim. */
/* KAŻDY NAGŁÓWEK MA BYĆ WIDOCZNY W CAŁOŚCI (Piotr, 22.09.2026: „niech ktoś zrobi tak, żeby
   po prostu było widać ten wyraz. Może czas zmniejszyć, po prostu nieco szerokość na nazwę,
   żeby inne się zmieściły").
   Nazwa dostaje resztę miejsca, a wąskie kolumny mają podane szerokości, więc nic się nie
   zawija ani nie ucina. */
.cennik-uslugi { table-layout: fixed; width: 100%; }
.cennik-uslugi th { font-size: 11px; white-space: nowrap; vertical-align: bottom; }
.cennik-uslugi th:nth-child(1) { width: auto; }
/* SZEROKOŚCI ZMIERZONE W OKNIE, nie zgadnięte: każdy napis ma się zmieścić bez zawijania. */
.cennik-uslugi th:nth-child(2) { width: 150px; }
.cennik-uslugi th:nth-child(3) { width: 100px; }
.cennik-uslugi th:nth-child(4) { width: 108px; }
.cennik-uslugi th:nth-child(5) { width: 210px; }
.cennik-uslugi th:nth-child(6) { width: 64px; }
.cennik-uslugi th:nth-child(7) { width: 152px; }
.cennik-uslugi td:first-child { word-break: break-word; font-size: 12.5px; }
.cennik-uslugi td { vertical-align: top; }
.cennik-uslugi .sr { text-align: center; }
/* CAŁE NAZWY MAJĄ BYĆ WIDOCZNE (Piotr, 22.09.2026: „żeby te przyciski jednak całe nazwy się
   pokazywały, dostosuj wielkość i szerokość do tego, co tam jest do słów").
   Do 22.09 lista była ucięta na 190 px i „miesiąc, pół roku, potem co rok" kończyło się
   wielokropkiem. Teraz szerokość bierze się z najdłuższego napisu, a kolumna go nie zawija. */
.cennik-uslugi select.usl-pole { font-size: 11.5px; padding: 3px 6px; min-height: 0;
  width: auto; max-width: none; }
.cennik-uslugi .usl-wybor { display: block; margin-bottom: 4px; }
.cennik-uslugi .usl-wybor:last-child { margin-bottom: 0; }
.cennik-uslugi .usl-wybor-podpis { display: block; font-size: 10px; letter-spacing: .02em;
  text-transform: uppercase; color: var(--pod); margin-bottom: 1px; }
/* Pole w wierszu cennika zapisane (3.10.2026) -- krótki zielony błysk. */
.cennik-uslugi .usl-zapisane { outline: 2px solid #16a34a; outline-offset: 1px; }
/* Opis na stronie zapisów pod nazwą usługi (22.10.2026). */
.cennik-uslugi .usl-opis-zapisy { display: block; margin-top: 6px; }
.cennik-uslugi .usl-opis-zapisy textarea { display: block; width: 100%; min-width: 220px; box-sizing: border-box; font-size: 12px; padding: 4px 6px; resize: vertical; }
.cennik-uslugi input.usl-minut { width: 70px; font-size: 12px; padding: 4px 6px;
  min-height: 0; text-align: right; }
.cennik-uslugi .cennik-akcje { white-space: nowrap; }
.cennik-uslugi button.male { padding: 4px 9px; min-height: 0; font-size: 12px; }
.cennik-uslugi button.niebezpieczny { color: var(--blad); border-color: #fecaca; }
/* ZAPISANE -- krótki zielony błysk przy polu, żeby było widać, że zmiana weszła sama. */
.usl-pole.zapisuje { opacity: .6; }
.usl-pole.zapisane { outline: 2px solid var(--dobry, #16a34a); outline-offset: 1px; }
.cennik-pasek { align-items: center; gap: 10px; margin: 10px 0; }
.cennik-od-kiedy { display: inline-flex; flex-direction: row; align-items: center; gap: 8px;
  margin: 0; background: var(--tlo); border: 1px solid var(--linia); border-radius: 8px;
  padding: 6px 12px; font-size: 13px; color: var(--pod); font-weight: 500; }
.cennik-od-kiedy input { border: none; background: transparent; padding: 0; min-height: 0;
  width: 130px; }
.cennik-wklejka { margin: 6px 0 10px; }
.cennik-wklejka summary { cursor: pointer; font-size: 13px; font-weight: 600; color: var(--akcent); }

/* CENNIK BADAŃ: KOD MA BYĆ W JEDNEJ LINII (Piotr, 22.09.2026: „ten kod jest teraz złamany
   (...) powinno być miejsce, żeby cały kod się pojawił"). Kod bywa długi („A712CW", „-17OHKS"),
   a łamał się, bo kolumna była wąska. Nazwa oddaje mu trochę miejsca. */
.cennik-badania { table-layout: fixed; width: 100%; }
.cennik-badania th { font-size: 11px; white-space: nowrap; vertical-align: bottom; }
.cennik-badania th:nth-child(1) { width: 118px; }
.cennik-badania th:nth-child(2) { width: auto; }
.cennik-badania th:nth-child(3) { width: 142px; }
.cennik-badania th:nth-child(4) { width: 96px; }
.cennik-badania th:nth-child(5) { width: 152px; }
.cennik-badania td { vertical-align: top; overflow: hidden; }
.cennik-badania td.bad-kod { white-space: nowrap; font-variant-numeric: tabular-nums;
  font-size: 12.5px; }
.cennik-badania td:nth-child(2) { font-size: 12.5px; word-break: break-word; }
.cennik-badania .cennik-akcje { white-space: nowrap; }
.cennik-badania button.male { padding: 4px 9px; min-height: 0; font-size: 12px; }
.cennik-badania button.niebezpieczny { color: var(--blad); border-color: #fecaca; }
/* BRAKUJĄCE POLE -- NA CZERWONO, JEDNO NARAZ (Piotr, 22.09.2026: „jeżeli czegoś nie
   zaznaczyła recepcjonistka (...) to powinno się to pole zaznaczać na czerwono (...)
   jeżeli jest kilka rzeczy, to najpierw pierwsza rzecz, potem następna").
   Ramka mówi GDZIE, napis pod polem mówi CZEGO brakuje i dlaczego to potrzebne. */
input.pole-brakuje, select.pole-brakuje, textarea.pole-brakuje {
  border-color: var(--blad); border-width: 2px; background: #fff5f5;
  box-shadow: 0 0 0 3px rgba(220, 38, 38, .12); }
label.etykieta-brakuje { color: var(--blad); font-weight: 700; }
.brak-napis { display: block; margin-top: 3px; font-size: 11.5px; font-weight: 600;
  color: var(--blad); line-height: 1.35; }

/* BADANIE DO POPRAWKI -- NA CZERWONO (Piotr, 22.09.2026: „pokazuj na przykład na czerwono
   zaznacz, gdzie nie ma ceny kosztu lub gdzie koszt jest większy niż cena dla pacjenta").
   Delikatne tło całego wiersza mówi „popatrz tutaj", a czerwony napis mówi, co dokładnie
   jest nie tak. Nie blokujemy niczego: przy niektórych badaniach tak ma być. */
.cennik-badania tr.bad-do-poprawki { background: #fff5f5; }
.cennik-badania tr.bad-do-poprawki td { border-color: #fecaca; }
.bad-alarm { color: var(--blad); font-weight: 700; }
.cennik-badania .bad-uwaga { display: block; font-size: 10.5px; font-weight: 600;
  line-height: 1.3; margin-top: 2px; white-space: normal; }

/* SZUKAJKA NAD LISTĄ BADAŃ -- jedno pole, pełna szerokość karty. */
.bad-szukajka-cennik { display: block; margin: 12px 0 6px; font-size: 12px; font-weight: 600;
  color: var(--pod); }
.bad-szukajka-cennik input { width: 100%; }
/* SZUKAJKA NAD LISTĄ USŁUG -- pole na całą szerokość, ✕ obok. */
.usl-szukajka { display: flex; gap: 6px; align-items: center; margin-bottom: 6px; }
.usl-szukajka input { flex: 1; min-width: 0; }

/* DRUGA LINIJKA W KOMÓRCE CENNIKA -- VAT z datą pod kwotą i kontrola pod rytmem
   (Piotr, 22.09.2026: cennik usług ma wyglądać tak samo jak w Finansach). */
/* DRUGA LINIJKA NIE MOŻE WYLEWAĆ SIĘ NA SĄSIEDNIĄ KOLUMNĘ (Piotr, 22.09.2026: „ile trwa
   zachodzi na aktualną stawkę"). Przy `table-layout: fixed` komórka nie rozpycha tabeli,
   więc długi napis musi umieć się zawinąć. */
.cennik-tabela .cennik-stawka { display: block; font-size: 11px; line-height: 1.35;
  margin-top: 2px; white-space: normal; overflow-wrap: anywhere; }
.cennik-uslugi td { overflow: hidden; }
.cennik-pojedyncze .pod { display: block; margin-top: 8px; }
.cennik-pojedyncze .pod.nie-poszlo { color: var(--blad); font-weight: 600; }

/* DNI I GODZINY POZA GRAFIKIEM (Piotr, 20.09.2026: „kalendarz powinien, kiedy nie pracuję,
   mieć taki inny kolor, a biały, kiedy pracuję").
   KOLORY TE SAME, CO W GRAFIKU FINANSÓW — żeby jeden i drugi ekran czytało się tak samo:
   biała kratka = godziny pracy, #eef1f5 = poza nimi, #eef4ff po najechaniu.
   Kratka poza grafikiem DALEJ JEST DO KLIKNIĘCIA: lekarz bywa umawia kogoś poza godzinami,
   a program ma to pokazać, nie zabronić.
   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: gdy gabinet nie ma jeszcze wpisanych godzin, nic nie jest
   malowane na szaro (patrz `wGodzinachPracy`) — cały kalendarz zostaje biały. */
.kal-kratka.poza-grafikiem { background: #eef1f5; }
.kal-kratka.poza-grafikiem:hover { background: #eef4ff; }
.kal-komorka.poza-grafikiem { background: #eef1f5; }
.kal-komorka.poza-grafikiem:hover { background: #eef4ff; }
.kal-komorka.poza-grafikiem .kal-numer { color: #64748b; }

/* NOTATKI I ZADANIA W KALENDARZU (Piotr, 20.09.2026). Kolory z grafiku Finansów:
   notatka na piaskowym tle (#fbf8f2 — tak samo jak weekend w tabeli godzin), zadanie
   z kratką do odhaczenia. Zrobione zostaje przekreślone, a nie znika — żeby było widać,
   że ktoś się tym zajął, i nikt nie zrobił tego drugi raz. */
.kal-notatka { font-size: 11.5px; line-height: 1.35; padding: 2px 5px; margin-bottom: 2px;
  border-radius: 5px; background: #fbf8f2; color: #6b5a3a; border-left: 3px solid #d9c9a3; }
.kal-notatka b { color: #5a4a2c; }
.kal-zadanie { display: flex; align-items: flex-start; gap: 5px; font-size: 11.5px;
  line-height: 1.35; padding: 2px 5px; margin-bottom: 2px; border-radius: 5px;
  background: #f1f6ff; color: #334155; border-left: 3px solid #93b4e6; }
.kal-zadanie input { margin: 2px 0 0; flex: 0 0 auto; }
.kal-zadanie.zrobione { opacity: .6; }
.kal-zadanie.zrobione span { text-decoration: line-through; }

/* PASEK DODAWANIA NOTATKI I ZADANIA (20.09.2026). Zwinięty do jednego przycisku — rozwija się
   dopiero, gdy ktoś chce coś dopisać, żeby nie zabierał miejsca kalendarzowi. */
.kal-wpis-pasek { margin: 8px 0; }
.kal-wpis-pola { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin-top: 8px;
  padding: 10px 12px; background: #f8fafc; border: 1px solid var(--linia); border-radius: 10px; }
.kal-wpis-pola input, .kal-wpis-pola select { height: 34px; box-sizing: border-box; }
.kal-wpis-pola #kal-wpis-tekst { flex: 1 1 260px; min-width: 0; }
.kal-wpis-godziny { display: flex; gap: 4px; }
.kal-wpis-pola .pod.nie-poszlo { color: var(--blad); font-weight: 600; }

/* LISTA CENNIKA POD FORMULARZEM (Piotr, 20.09.2026: „powinienem pod spodem mieć całą taką
   listę"). Własne przewijanie, żeby długi cennik nie spychał reszty panelu poza ekran. */
.cennik-lista { margin-top: 14px; }
.cennik-lista .naglowek { font-size: 13px; font-weight: 700; color: var(--pod); margin-bottom: 6px; }
.cennik-tabela { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.cennik-tabela th { text-align: left; font-size: 11px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--pod); border-bottom: 1px solid var(--linia); padding: 4px 6px; }
.cennik-tabela td { padding: 5px 6px; border-bottom: 1px solid var(--linia-cicha); }
.cennik-tabela .pr { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cennik-tabela .tak { color: var(--dobrze); }
/* ✎ przy pozycji dopisanej ręcznie — ta przeżyje następne wgranie arkusza. */
.cennik-reczny { color: var(--akcent); font-size: 12px; }
.cennik-lista { max-height: 420px; overflow-y: auto; }

/* WYKORZYSTANIE GRAFIKU — pasek obok okresu w kalendarzu (20.09.2026).
   Kolor jak „zarabiamy" w Finansach: zielony, bo to dobra wiadomość, gdy rośnie.
   Podpowiedź pod kursorem mówi, z czego to policzono — łącznie z tym, że długość wizyty
   jest jedna dla wszystkich, bo program nie pamięta, ile trwała każda z osobna. */
.kal-wykorzystanie { display: inline-flex; align-items: center; gap: 8px; margin-left: 14px;
  font-size: 13px; color: var(--pod); }
.kal-wykorzystanie b { color: var(--tekst); }
.kal-wyk-pasek { display: inline-block; width: 90px; height: 8px; border-radius: 999px;
  background: #e2e8f0; overflow: hidden; }
.kal-wyk-pasek i { display: block; height: 100%; background: var(--dobrze); }

/* PRZYCHODY GABINETU (Piotr, 20.09.2026). Kolory jak w Finansach: zielony = zapłacone,
   pomarańczowy = czeka na pieniądze. Wiersz niezapłacony ma lekkie tło, żeby przy ladzie
   dało się go znaleźć wzrokiem, nie czytając całej tabeli. */
.przychody-gora { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.przychody-okres { display: flex; gap: 8px; align-items: flex-end; margin-left: auto; }
.przychody-okres label { display: flex; flex-direction: column; gap: 3px; font-size: 11px;
  color: #475569; }
.przychody-okres input { height: 34px; }
.przychody-sumy { display: flex; gap: 10px; flex-wrap: wrap; margin: 12px 0; }
.prz-suma { display: flex; flex-direction: column; gap: 2px; padding: 10px 14px;
  border-radius: 10px; background: var(--tlo); border: 1px solid var(--linia);
  font-size: 12px; color: var(--pod); min-width: 130px; }
.prz-suma b { font-size: 19px; color: var(--tekst); font-variant-numeric: tabular-nums; }
.prz-suma.jest-dobrze b { color: var(--dobrze); }
.prz-suma.jest-uwaga { background: var(--uwaga-tlo); border-color: #e5c07b; }
.prz-suma.jest-uwaga b { color: var(--uwaga); }
.przychody-dodaj { margin: 14px 0; padding: 12px 14px; background: #f8fafc;
  border: 1px solid var(--linia); border-radius: 10px; }
.przychody-dodaj .naglowek { font-size: 13px; font-weight: 700; color: var(--pod);
  margin-bottom: 8px; }
.przychody-dodaj .rzad { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; }
.przychody-dodaj .rzad > label { display: flex; flex-direction: column; gap: 3px;
  font-size: 11px; color: #475569; flex: 1 1 180px; min-width: 0; }
.przychody-dodaj .rzad > label.krotkie { flex: 0 0 140px; }
.przychody-dodaj input, .przychody-dodaj select { height: 36px; box-sizing: border-box; }
.przychody-dodaj .pod.nie-poszlo { color: var(--blad); font-weight: 600; }
.prz-tabela { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.prz-tabela th { text-align: left; font-size: 11px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--pod); border-bottom: 1px solid var(--linia); padding: 5px 6px; }
.prz-tabela td { padding: 6px; border-bottom: 1px solid var(--linia-cicha); }
.prz-tabela .pr { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.prz-tabela tr.nie-zaplacone { background: var(--uwaga-tlo); }
.prz-ptaszek { display: inline-flex; align-items: center; gap: 6px; }

/* KOSZTY I WYNIK (21.09.2026). Te same klocki, co przychody -- rzad pol, kafelki z liczbami
   i zwykla tabela. Wlasnego wygladu nie wymyslamy: to ma wygladac jak reszta programu. */
#zakladka-koszty .karta > .rzad, #zakladka-wynik .karta > .rzad {
  display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; margin-top: 8px; }
#zakladka-koszty .karta > .rzad > label, #zakladka-wynik .karta > .rzad > label {
  display: flex; flex-direction: column; gap: 3px; font-size: 11px; color: #475569;
  flex: 1 1 180px; min-width: 0; }
#zakladka-koszty .karta > .rzad > label.krotkie, #zakladka-wynik .karta > .rzad > label.krotkie {
  flex: 0 0 160px; }
#zakladka-koszty textarea { width: 100%; box-sizing: border-box; font-family: inherit;
  font-size: 13px; }
#zakladka-koszty .karta > .naglowek, #zakladka-wynik .karta > .naglowek,
#wyn-tresc .naglowek, #ksz-pominiete .naglowek {
  font-size: 13px; font-weight: 700; color: var(--pod); margin: 14px 0 6px; }
/* KATEGORIE JAKO KLOCUSZKI -- widac je wszystkie naraz, a krzyzyk przy kazdym ZDEJMUJE
   ja z listy podpowiedzi, nie kasuje kosztow. */
.kat-kubelki { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.kat-kubelek { display: inline-flex; align-items: center; gap: 4px; padding: 5px 6px 5px 12px;
  border: 1px solid var(--linia); border-radius: 999px; background: var(--tlo);
  font-size: 12.5px; }
.kat-kubelek button { padding: 0 4px; line-height: 1; border: 0; background: none;
  color: var(--pod); cursor: pointer; }
.kat-kubelek button:hover { color: var(--blad); }

/* FAKTURY (21.09.2026). Ten sam rząd pól, co przy kosztach -- i wąskie pole na numer faktury
   wpisany ręcznie w tabeli przychodów. */
#zakladka-faktury .karta > .rzad {
  display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; margin-top: 8px; }
#zakladka-faktury .karta > .rzad > label, .fak-pozycja > label {
  display: flex; flex-direction: column; gap: 3px; font-size: 11px; color: #475569;
  flex: 1 1 180px; min-width: 0; }
#zakladka-faktury .karta > .rzad > label.krotkie, .fak-pozycja > label.krotkie {
  flex: 0 0 140px; }
#zakladka-faktury .karta > .naglowek {
  font-size: 13px; font-weight: 700; color: var(--pod); margin: 14px 0 6px; }
.fak-pozycja { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap;
  margin-bottom: 8px; }
.prz-faktura { white-space: nowrap; }
.prz-faktura .prz-numer { width: 92px; height: 26px; font-size: 12px; padding: 2px 6px;
  box-sizing: border-box; }

/* ZAŁOŻENIA POD LICZBAMI PODATKU -- lista, a nie ściana tekstu: każde zdanie to jedna rzecz,
   którą program przyjął, i człowiek ma ją móc sprawdzić po kolei. */
.pod-lista { margin: 6px 0 10px; padding-left: 18px; }
.pod-lista li { margin: 3px 0; line-height: 1.45; }

/* CO WIDZI RECEPCJA -- pięć przełączników jeden pod drugim, każdy z własnym wyjaśnieniem.
   W rzędzie obok siebie zlewałyby się w jedno zdanie i nie byłoby widać, co jest czym. */
.rec-pieniadze { display: flex; flex-direction: column; gap: 10px; margin: 12px 0 4px; }
.rec-pieniadze .kwadracik { display: flex; align-items: flex-start; gap: 8px;
  line-height: 1.45; }
.rec-pieniadze .kwadracik input { margin-top: 2px; flex: none; }

/* === GROSIK PRZY TERMINIE: PIENIĄDZE W KALENDARZU (Piotr, 21.09.2026) ======================
   „Wszystko idzie przez kalendarz." Kolor mówi, co z pieniędzmi, bez otwierania terminu:
   szary — nikt jeszcze nie pytał, zielony — zapłacone, czerwony — był i nie zapłacił.

   CO SIĘ STANIE, JEŚLI TO ZMIENISZ: bez `pointer-events: auto` grosik dziedziczy kliknięcie
   po kratce terminu i zamiast okna zapłaty otwiera się wizyta. */
.kal-kasa {
  margin-left: 4px; padding: 0 3px; font-size: 12px; line-height: 1.3;
  border-radius: 5px; cursor: pointer; opacity: .75; pointer-events: auto;
}
.kal-kasa:hover { opacity: 1; background: #eef3f8; }
.kal-kasa.zaplacone { opacity: 1; }
.kal-kasa.winien { opacity: 1; }

/* OKNO ZAPŁATY -- węższe niż okno umawiania, bo ma pięć pól, nie piętnaście. */
.okno-zaplaty-karta { max-width: 30rem; }
.zaplata-pola { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin: 10px 0 0; }
.zaplata-pola > label { display: flex; flex-direction: column; gap: 3px; flex: 1 1 160px;
  font-size: 12px; color: var(--pod); }
.zaplata-pola > label.krotkie { flex: 0 0 140px; }
.zaplata-pola input, .zaplata-pola select { height: 36px; box-sizing: border-box; }

/* === KASA DNIA (Piotr, 21.09.2026: „Tak, z wydrukiem") ====================================
   Stoi POD sumami okresu, bo to inne pytanie: nie „ile zarobiliśmy", tylko „ile jest teraz
   w szufladzie". Gotówka ma zielony kafel, bo to jedyna kwota liczona rękami. */
.kasa-dnia { margin: 14px 0; padding: 12px 14px; background: #f8fafc;
  border: 1px solid var(--linia-cicha); border-radius: 10px; }
.kasa-dnia .naglowek { font-size: 13px; font-weight: 700; color: var(--pod);
  text-transform: uppercase; letter-spacing: .03em; }
.kasa-gora { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.kasa-gora > label { display: flex; flex-direction: column; gap: 3px; font-size: 11px;
  color: var(--pod); }
.kasa-gora > label.krotkie { flex: 0 0 150px; }
.kasa-gora input { height: 34px; box-sizing: border-box; }
.kasa-dnia .przychody-sumy { margin: 10px 0 0; }

/* WYDRUK KASY. Czarne litery i cienkie linie -- tak jak na skierowaniu do laboratorium
   (Piotr, 20.09.2026: „żeby napisy były czarne, bo to bardzo słabo widać"). */
.kasa-podsumowanie { width: 100%; border-collapse: collapse; margin: 6px 0 12px;
  color: #000; font-size: 13px; }
.kasa-podsumowanie td { padding: 5px 6px; border-bottom: 1px solid #9aa3ad; }
.kasa-podsumowanie tr.mocno td { font-weight: 700; font-size: 15px; }
.kasa-podsumowanie .pr { text-align: right; font-variant-numeric: tabular-nums;
  white-space: nowrap; }
.kasa-tytul { margin: 14px 0 4px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .03em; color: #000; }
.kasa-spis { width: 100%; border-collapse: collapse; color: #000; font-size: 12px; }
.kasa-spis th { text-align: left; font-size: 10px; text-transform: uppercase;
  border-bottom: 1px solid #000; padding: 4px 6px; }
.kasa-spis td { padding: 4px 6px; border-bottom: 1px solid #9aa3ad; }
.kasa-spis .pr { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.kasa-podpis { display: flex; align-items: flex-end; gap: 12px; margin-top: 26px;
  font-size: 12px; color: #000; }
.kasa-kreska { flex: 1 1 auto; border-bottom: 1px solid #000; height: 18px; max-width: 260px; }

/* === WYPŁATY (Piotr, 21.09.2026) ==========================================================
   Jeden człowiek to jeden blok: nazwisko, trzy kwoty i rozwijane „z czego prowizja".
   Kwota do wypłaty stoi po prawej, bo to jest liczba, po którą człowiek tu wchodzi. */
.wyplata-wiersz { padding: 10px 0; border-bottom: 1px solid var(--linia-cicha); }
.wyplata-wiersz:last-child { border-bottom: 0; }
.wyplata-glowa { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.wyplata-glowa .pod { font-size: 12px; }
.wyplata-razem { margin-left: auto; font-size: 17px; font-weight: 700;
  font-variant-numeric: tabular-nums; color: var(--dobrze); }
.wyplata-skad { margin-top: 8px; }
.wyplata-skad summary { cursor: pointer; font-size: 12px; color: var(--pod); }
.wyplata-skad table { margin-top: 6px; }

/* WYBOR KOLORU GABINETU (Piotr, 21.09.2026). Kazdy przycisk pokazuje swoj kolor na sobie --
   nie trzeba zgadywac, co znaczy nazwa. Wybrany ma grubsza obwodke i ptaszka. */
.kolory-gabinetu { display: flex; flex-wrap: wrap; gap: 10px; margin: 10px 0 8px; }
.kolory-gabinetu button { display: flex; align-items: center; gap: 8px; padding: 8px 14px 8px 10px;
  border: 1.5px solid var(--linia); border-radius: 999px; background: #fff; color: var(--tekst);
  font: inherit; font-size: 14px; cursor: pointer; }
.kolory-gabinetu button::before { content: ''; width: 18px; height: 18px; flex: none;
  border-radius: 50%; background: var(--probka, #2563eb); }
.kolory-gabinetu button:hover { border-color: var(--linia-mocna); }
.kolory-gabinetu button.wybrany { border-color: var(--probka, #2563eb); font-weight: 700; }
.kolory-gabinetu button.wybrany::after { content: '✓'; color: var(--probka, #2563eb);
  font-weight: 700; }


/* ============================================================================================
   NOWY WYGLAD MENU -- TYLKO W GABINECIE, KTORY GO WLACZYL.
   Piotr, 21.09.2026: „miales tylko to zrobic w gabinecie tym pokazowym. Nigdzie wiecej."
   Ten program obsluguje WSZYSTKIE placowki z jednego katalogu, wiec zmiana wygladu bez
   wylacznika siega od razu do Piotra, Roberta i Oli. Wylacznik: ustawienie `wygladNowy`
   w bazie placowki -> serwer dokleja klase `nowy-wyglad` do <body>.
   ============================================================================================ */
/* KAZDA GRUPA TO OSOBNY KAFELEK (Piotr, 21.09.2026, po obejrzeniu podgladow).
   U gory kafelka szyld: ikona i nazwa grupy. Pozycje wciete pod szyldem, bez wlasnych ramek.
   Kafelek grupy, w ktorej sie pracuje, jest jasnoniebieski i obwiedziony niebieska kreska --
   widac katem oka, gdzie sie jest, bez czytania.
   LITERY TYLKO CZARNE, BIALE ALBO NIEBIESKIE: zadnych szarosci, bo przy tym programie
   siedzi sie kilka godzin. */
body.nowy-wyglad .menu-grupa { background: var(--menu-kafel); border: 0; border-radius: 12px;
  margin: 0 10px 6px; padding: 5px 5px 6px; }
body.nowy-wyglad .menu-grupa:last-of-type { border-bottom: 0; }
body.nowy-wyglad .menu-grupa:has(button.aktywna) { background: var(--akcent-tlo); }
/* GRUPA BEZ SZYLDU TO NIE KAFELEK. Przy jednej pozycji program chowa naglowek (zasada stala:
   „nie powtarzac nazwy zakladki nad nia sama") -- wtedy tlo kafelka zostawalo samo i wygladalo
   jak puste pudelko. Kafelek nalezy sie grupie, ktora ma szyld. */
body.nowy-wyglad .menu-grupa:has(> .menu-grupa-tytul[hidden]),
body.nowy-wyglad .menu-grupa:not(:has(> .menu-grupa-tytul)) { background: none; padding-left: 5px; }
body.nowy-wyglad .menu-grupa:has(> .menu-grupa-tytul[hidden]):has(button.aktywna),
body.nowy-wyglad .menu-grupa:not(:has(> .menu-grupa-tytul)):has(button.aktywna) { background: none; }
body.nowy-wyglad .menu-grupa-tytul { display: flex; align-items: center; gap: 7px; padding: 4px 8px 5px;
  font-size: 13px; font-weight: 700; letter-spacing: 0; text-transform: none;
  color: var(--tekst); }
body.nowy-wyglad .menu-grupa-tytul svg { flex: none; opacity: .85; }
body.nowy-wyglad .menu-grupa:has(button.aktywna) > .menu-grupa-tytul { color: var(--akcent-ciemny); }

/* POZYCJA W KAFELKU -- sam napis, wciety pod szyldem grupy. Czarny na jasnym tle,
   a wybrany to pelny niebieski pasek z bialym napisem (nie blady odcien). */
/* ZDEJMUJEMY TO, CO DOKLADA KAZDEMU PRZYCISKOWI GLOWNA REGULA `button` (na gorze pliku):
   46 px wysokosci, cien i gradient. W menu robilo to z kazdej pozycji osobny klocek
   z cieniem, a slupek puchl na cala wysokosc ekranu (Piotr, 21.09.2026 -- i mial racje). */
body.nowy-wyglad #menu-boczne nav button, #menu-boczne nav .link-zewnetrzny {
  position: relative; width: 100%; display: flex; align-items: center; gap: 8px;
  background: none; border: 0; box-shadow: none; min-height: 0;
  padding: 5px 10px 5px 30px; margin: 0;
  font: inherit; font-size: 14px; font-weight: 500; line-height: 1.3; color: var(--tekst);
  text-align: left; text-decoration: none; border-radius: 8px; cursor: pointer;
  transition: background-color .12s ease, color .12s ease; }
body.nowy-wyglad #menu-boczne nav button:hover, #menu-boczne nav .link-zewnetrzny:hover {
  background: #e4e9f0; color: var(--tekst); box-shadow: none; }
/* ZNACZKI PRZY POZYCJACH ZNIKAJA. Wybrany wyglad ma ikone TYLKO w szyldzie grupy --
   emotka przy kazdej pozycji robila z menu choinke. */
body.nowy-wyglad #menu-boczne .menu-grupa > button > span:first-child,
body.nowy-wyglad #menu-boczne .menu-grupa > .link-zewnetrzny > span:first-child { display: none; }
body.nowy-wyglad #menu-boczne nav button.aktywna {
  background: var(--akcent); border-color: var(--akcent); color: #fff; font-weight: 700;
  box-shadow: none; }
body.nowy-wyglad #menu-boczne nav button.aktywna:hover { background: var(--akcent-ciemny); color: #fff; }

/* LICZNIK PRZY POZYCJI -- „Niezaplacone 4". Liczbe liczy program, nie wpisuje sie jej recznie. */
body.nowy-wyglad .menu-licznik { margin-left: auto; flex: none; min-width: 20px; text-align: center;
  background: var(--blad); color: #fff; border-radius: 999px; padding: 0 6px;
  font-size: 11.5px; font-weight: 700; line-height: 18px; }
body.nowy-wyglad #menu-boczne nav button.aktywna .menu-licznik { background: #fff; color: var(--akcent-ciemny); }
body.nowy-wyglad .menu-kropka { margin-left: auto; flex: none; width: 8px; height: 8px; border-radius: 50%;
  background: var(--akcent); }
body.nowy-wyglad #menu-boczne nav button.aktywna .menu-kropka { background: #fff; }

/* KARTA „Kolor gabinetu" NALEZY DO NOWEGO WYGLADU. W gabinecie bez niego nic by nie zmieniala. */
body:not(.nowy-wyglad) [data-panel="kolor-gabinetu"] { display: none; }

/* NA TELEFONIE PALEC MUSI TRAFIC. Nowy wyglad zdejmuje pozycjom menu 46 px z ogolnej reguly
   przyciskow, wiec na malym ekranie oddajemy im 44 px z powrotem (przeglad 5.09.2026). */
@media (max-width: 760px) {
  body.nowy-wyglad #menu-boczne nav button,
  body.nowy-wyglad #menu-boczne nav .link-zewnetrzny { min-height: 44px; }
}

/* KARTA PACJENTA TO OSOBNY EKRAN, NIE PODZAKLADKA USTAWIEN (Piotr, 21.09.2026).
   Wchodzac z menu w „Karte pacjenta" widac sama kartoteke -- pasek kafelkow („Pacjenci",
   „Zestawy badan", „Godziny przyjec"...) nalezy do Centrum zarzadzania i tam zostaje.
   A sam kafelek „Pacjenci" znika z tamtego paska, bo kartoteka ma wlasna pozycje w menu. */
body.nowy-wyglad.tylko-kartoteka #panel-spis { display: none; }
/* (kafelka „Pacjenci" nie ma juz w spisie -- patrz pokazSpisPaneli w app.js) */

/* ZNACZEK KALENDARZA W PASKU (jak w grafiku Finansów). Pole daty jest schowane pod znaczkiem
   -- widoczne zabieralo z paska ponad sto pikseli, a o kazdy pasek tu walczymy. */
body.nowy-wyglad .kal-skok { position: relative; display: inline-flex; }
body.nowy-wyglad #kal-kalendarzyk { display: inline-flex; align-items: center;
  justify-content: center; padding: 6px 8px; }
body.nowy-wyglad .kal-skok-data { position: absolute; left: 0; bottom: 0; width: 1px;
  height: 1px; opacity: 0; pointer-events: none; border: 0; padding: 0; }

/* CENTRUM ZARZADZANIA W KUPKACH (Piotr, 21.09.2026). Kazda kupka ma swoj cichy napis,
   a kafelki pod nim stoja razem -- zamiast dziewietnastu w jednym rzedzie. */
body.nowy-wyglad #panel-spis { display: flex; flex-wrap: wrap; gap: 18px 22px; align-items: flex-start; }
body.nowy-wyglad .panel-kupka { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
body.nowy-wyglad .panel-kupka-tytul { width: 100%; font-size: 11.5px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase; color: var(--pod); }

/* CIENKI PASEK NAD KARTĄ PACJENTA -- jak w karcie pacjenta w Finansach: liczby w jednej
   linijce, oddzielone kropkami, w rozmiarze zwyklego tekstu. */
body.nowy-wyglad .kp-pasek { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px;
  margin: 6px 0 10px; color: var(--pod); font-size: 14px; }
body.nowy-wyglad .kp-pasek > span + span::before { content: '·'; margin-right: 14px;
  color: var(--linia-mocna); }

/* KOSZT, KTORY CZEKA NA ZAPLATE -- widac go w liscie bez czytania calego wiersza. */
.ksz-czeka { color: var(--uwaga); }
.prz-suma-uwaga b { color: var(--uwaga); }
.ksz-zaplacone-pole { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }

/* ============================================================================================
   RÓWNE WIERSZE W GABINECIE NA SPRZEDAŻ (Piotr, 21.09.2026: „wszystkie te przyciski są
   na różnych wysokościach (...) wszystko po prostu jest na różnych wysokościach").
   ============================================================================================
   POWÓD BYŁ JEDEN I TEN SAM WSZĘDZIE: pole ma nad sobą napis („Od", „Kwota"), a przycisk nie.
   W jednym rzędzie pole jest więc wyższe od przycisku i nic nie stoi w linii. Zamiast poprawiać
   każdy ekran osobno, ustawiamy to raz dla wszystkich rzędów: równanie do DOŁU i ta sama
   wysokość każdego pola, listy i przycisku. */
body.nowy-wyglad .przychody-okres,
body.nowy-wyglad .przychody-dodaj .rzad,
body.nowy-wyglad #zakladka-koszty .rzad,
body.nowy-wyglad #zakladka-ksef .rzad,
body.nowy-wyglad #zakladka-wynik .rzad,
body.nowy-wyglad #zakladka-niezaplacone .rzad,
body.nowy-wyglad .pasek-kalendarza .rzad-lewo,
body.nowy-wyglad .pasek-kalendarza {
  display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; }
body.nowy-wyglad .przychody-okres label,
body.nowy-wyglad .przychody-dodaj .rzad label,
body.nowy-wyglad #zakladka-koszty .rzad label,
body.nowy-wyglad #zakladka-ksef .rzad label,
body.nowy-wyglad #zakladka-wynik .rzad label {
  display: flex; flex-direction: column; gap: 4px; margin: 0; }
body.nowy-wyglad .przychody-okres input,
body.nowy-wyglad .przychody-okres select,
body.nowy-wyglad .przychody-okres button,
body.nowy-wyglad .przychody-dodaj .rzad input,
body.nowy-wyglad .przychody-dodaj .rzad select,
body.nowy-wyglad .przychody-dodaj .rzad button,
body.nowy-wyglad #zakladka-koszty .rzad input,
body.nowy-wyglad #zakladka-koszty .rzad select,
body.nowy-wyglad #zakladka-koszty .rzad button,
body.nowy-wyglad #zakladka-ksef .rzad input,
body.nowy-wyglad #zakladka-ksef .rzad button,
body.nowy-wyglad #zakladka-wynik .rzad input,
body.nowy-wyglad #zakladka-wynik .rzad select,
body.nowy-wyglad #zakladka-wynik .rzad button {
  height: 42px; min-height: 42px; margin: 0; }
/* Kratka „Zapłacone" to nie pole tekstowe -- ma tylko stać w tej samej linii, co reszta. */
body.nowy-wyglad .ksz-zaplacone-pole { height: 42px; align-self: flex-end; }
body.nowy-wyglad .ksz-zaplacone-pole input { height: auto; min-height: 0; }

/* PASEK KALENDARZA: wszystko o okresie w jednej linijce, a litery M/T/D wąskie jak litery. */
body.nowy-wyglad .pasek-kalendarza .uklady { display: flex; gap: 6px; align-items: flex-end; }
body.nowy-wyglad .uklad-litera { min-width: 42px; padding-left: 0; padding-right: 0;
  text-align: center; }
/* Szukanie pacjenta wchodzi do paska okresu, a gdy się nie mieści -- schodzi pod niego
   od LEWEJ, czyli tam, gdzie oko wraca po przeczytaniu wiersza. */
body.nowy-wyglad .pasek-kalendarza .szukajka-kal { flex: 0 1 260px; min-width: 170px; }
body.nowy-wyglad .pasek-kalendarza .szukajka-kal input { height: 42px; }
/* „Ile grafiku zajęte" nie rozpycha paska -- to liczba do zerknięcia, nie przycisk. */
body.nowy-wyglad .kal-wykorzystanie { flex: 0 1 auto; }
body.nowy-wyglad .pasek-kalendarza #kal-wpis-otworz { height: 42px; }

/* MENU MA WIDOCZNY PASEK PRZESUWANIA (Piotr, 21.09.2026: „przesuwanie menu do góry nie działa
   dobrze. Menu się w ogóle nie przesuwa"). Przesuwało się, ale po cichu -- pasek był schowany,
   więc nie było po czym poznać, że jest co przesuwać. */
body.nowy-wyglad #menu-boczne nav { scrollbar-width: thin; scrollbar-color: #c7d0dd transparent; }
body.nowy-wyglad #menu-boczne nav::-webkit-scrollbar { display: block; width: 8px; }
body.nowy-wyglad #menu-boczne nav::-webkit-scrollbar-thumb { background: #c7d0dd;
  border-radius: 999px; }
body.nowy-wyglad #menu-boczne nav::-webkit-scrollbar-track { background: transparent; }

/* „DODAJ KOSZT" W JEDNEJ LINIJCE (Piotr, 21.09.2026: „żeby »dodaj koszt« był w tym samym
   wierszu, jak jest data"). Pola dzielą się szerokością po równo i wolno im się zwęzić;
   kratka i przycisk biorą tylko tyle, ile potrzebują. */
body.nowy-wyglad .przychody-dodaj .rzad > label { flex: 1 1 120px; min-width: 0; }
body.nowy-wyglad .przychody-dodaj .rzad > label.krotkie { flex: 0 1 150px; }
body.nowy-wyglad .przychody-dodaj .rzad > button { flex: 0 0 auto; }
body.nowy-wyglad .przychody-dodaj .rzad input,
body.nowy-wyglad .przychody-dodaj .rzad select { width: 100%; }
/* Kratka „Zapłacone" stoi POZIOMO -- napis obok kwadracika, nie pod nim. */
body.nowy-wyglad .ksz-zaplacone-pole { flex: 0 0 auto; flex-direction: row !important;
  align-items: center; gap: 8px; }

/* KRATKA TO NIE POLE TEKSTOWE. Reguła „każde pole w rzędzie ma 42 px" rozdmuchała kwadraciki
   „Zapłacone" do wielkości przycisku (Piotr, 21.09.2026 — zrzut z Przychodów). */
body.nowy-wyglad .rzad input[type="checkbox"],
body.nowy-wyglad .przychody-okres input[type="checkbox"],
body.nowy-wyglad .przychody-dodaj input[type="checkbox"] {
  height: auto; min-height: 0; width: auto; flex: none; }
body.nowy-wyglad .przychody-dodaj .rzad > label.kwadracik { flex: 0 0 auto;
  flex-direction: row !important; align-items: center; gap: 8px; height: 42px; }

/* KASA DNIA: napis, dzień i przyciski w jednej linijce, równo do dołu. */
body.nowy-wyglad .kasa-gora { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; }
body.nowy-wyglad .kasa-gora .naglowek { align-self: center; margin: 0; }
body.nowy-wyglad .kasa-gora label { display: flex; flex-direction: column; gap: 4px; margin: 0; }
body.nowy-wyglad .kasa-gora input,
body.nowy-wyglad .kasa-gora button { height: 42px; min-height: 42px; margin: 0; }

/* NAGŁÓWEK KARTY I OKRES W JEDNEJ LINII -- „Przychody" po lewej, wybór okresu po prawej. */
body.nowy-wyglad .przychody-gora { display: flex; flex-wrap: wrap; align-items: flex-end;
  justify-content: space-between; gap: 12px; }
body.nowy-wyglad .przychody-gora h2 { margin: 0; align-self: center; }

/* KARTA PACJENTA -- pole szukania i podpowiedzi (wzór: karta pacjenta w Finansach). */
body.nowy-wyglad .kp-pole { display: flex; align-items: center; gap: 10px; padding: 4px 0; }
body.nowy-wyglad .kp-lupa { font-size: 18px; }
body.nowy-wyglad #kp-szukaj { flex: 1 1 auto; height: 46px; font-size: 16px;
  border: 1px solid var(--linia); border-radius: 10px; padding: 0 14px; background: #fff; }
body.nowy-wyglad .kp-podpowiedzi { display: flex; flex-direction: column; gap: 6px;
  margin-top: 10px; }
body.nowy-wyglad .kp-podpowiedz { display: flex; align-items: baseline; gap: 14px;
  text-align: left; background: #fff; border: 1px solid var(--linia); border-radius: 10px;
  padding: 10px 14px; cursor: pointer; min-height: 0; box-shadow: none; }
body.nowy-wyglad .kp-podpowiedz:hover { border-color: var(--akcent); background: var(--akcent-tlo); }

/* BADANIA ROBERTA W MENU OLI (22.09.2026) -- ta sama rama, co przy zakładkach Finansów. */
#zakladka-badania-drugie { margin-bottom: 0; padding: 0; }
.ramka-badan-drugich { display: block; width: 100%; height: calc(100dvh - 56px);
  border: 1px solid var(--linia); border-radius: 12px; background: #fff; }
@media (max-width: 760px) { .ramka-badan-drugich { height: calc(100dvh - 108px); } }

/* AUTOZAPIS NOTATKI BADAŃ (22.09.2026) -- napis w miejscu dawnego przycisku „Zapisz". */
.bad-notatka .bad-autozapis { flex: 0 0 auto; font-size: 12px; color: #64748b; white-space: nowrap; min-width: 84px; }
.bad-notatka .bad-autozapis.ok { color: #15803d; }
.bad-notatka .bad-autozapis.blad { color: #b91c1c; font-weight: 600; white-space: normal; }

/* „DRUKUJ ▾" NA GÓRNYM PASKU BADAŃ (22.09.2026) -- lista pod przyciskiem. */
.bad-druk-menu { position: relative; display: inline-block; }
.bad-druk-menu > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center;
  height: 38px; padding: 0 14px; border: 1px solid #cbd5e1; border-radius: 10px; background: #fff;
  font-weight: 600; font-size: 13px; white-space: nowrap; }
.bad-druk-menu > summary::-webkit-details-marker { display: none; }
.bad-druk-menu[open] > summary { border-color: #2563eb; color: #1d4ed8; }
.bad-druk-lista { position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; background: #fff;
  border: 1px solid #cbd5e1; border-radius: 12px; box-shadow: 0 12px 30px rgba(15,23,42,.18);
  padding: 6px; display: flex; flex-direction: column; gap: 4px; min-width: 210px; }
.bad-druk-lista button { text-align: left; justify-content: flex-start; width: 100%; white-space: nowrap; }
.bad-druk-grupa { font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: #64748b; padding: 6px 8px 2px; }
.bad-druk-grupa.oddzielona { border-top: 1px solid #e2e8f0; margin-top: 4px; padding-top: 10px; }
.bad-druk-lista button small { display: block; font-weight: 400; font-size: 11px; color: #64748b; margin-top: 1px; }
.bad-druk-lista button { flex-direction: column; align-items: flex-start; height: auto; padding-top: 6px; padding-bottom: 6px; }
.bad-wydruki[hidden] { display: none !important; }

/* „ZMIENIONE PO WYDANIU" -- ROZWIJANA LISTA ZMIAN (22.09.2026). */
details.lampka-zmian { display: block; }
details.lampka-zmian > summary { list-style: none; cursor: pointer; display: flex; align-items: flex-start; gap: 10px; }
details.lampka-zmian > summary::-webkit-details-marker { display: none; }
details.lampka-zmian .zmiany-lista { margin: 8px 0 2px 22px; }
details.lampka-zmian .zmiana-paczka + .zmiana-paczka { margin-top: 8px; padding-top: 8px; border-top: 1px dashed #fca5a5; }
details.lampka-zmian .zmiana-kto { font-size: 12px; color: #7f1d1d; font-weight: 600; }
details.lampka-zmian ul { margin: 4px 0 0; padding-left: 18px; }
details.lampka-zmian li { font-size: 14px; line-height: 1.5; color: #1f2937; }
details.lampka-zmian [data-bad-zapoznalem] { margin-top: 10px; }
.bad-suma .oszczednosc.strata { color: #b91c1c; font-weight: 600; }

/* CZAT MIGA U RECEPCJI, AŻ PRZECZYTA (Piotr, 22.09.2026: „i ma migać czat"). */
#menu-boczne nav button.menu-rozmowa.miga{animation:rozmowa-miga 1s ease-in-out infinite}
/* CZERWONO-RÓŻOWY (Piotr, 22.09.2026: „niech się świeci (...) na różowo, na czerwono"). */
@keyframes rozmowa-miga{0%,100%{background:#ffe4e6;color:#9f1239}50%{background:#e11d48;color:#fff}}
@media (prefers-reduced-motion:reduce){#menu-boczne nav button.menu-rozmowa.miga{animation:none;background:#e11d48;color:#fff}}

/* ZALECENIA NAD FORMULARZEM RECEPTY (Piotr, 22.09.2026). */
/* WYSŁANE PACJENTOWI -- data i godzina (22.09.2026). */
.wizyta-wysylki{display:flex;flex-direction:column;gap:6px}


/* ===========================================================================================
   ZDJĘCIA W STARYCH WIZYTACH -- TA SAMA MIARA, CO W DZISIEJSZEJ (Piotr, 22.09.2026).
   Reguła `.edytor.stara-tresc img` stoi wyżej w tym pliku i jest bardziej szczegółowa niż
   sama klasa przy zdjęciu, więc bez tych czterech wierszy panel starej wizyty pokazywałby
   każde zdjęcie na całą szerokość -- czyli dokładnie to, co miało zniknąć.
   =========================================================================================== */
.stara-wizyta .edytor.stara-tresc img { max-width: 340px; cursor: zoom-in; }
.stara-wizyta .edytor.stara-tresc img.zdj-mala { max-width: 170px; }
.stara-wizyta .edytor.stara-tresc img.zdj-srednia { max-width: 340px; }
.stara-wizyta .edytor.stara-tresc img.zdj-duza { max-width: 100%; }


/* === CZERWONY PASEK STRAŻNIKA BEZPIECZEŃSTWA (Piotr, 23.09.2026) ==============================
   Stoi NA SAMEJ GÓRZE strony, nad wszystkim -- to jedyny komunikat w tym programie, który ma
   prawo przerwać pracę. Czerwień, nie pomarańcz: pomarańczowy znaczy tu „zrobione inaczej",
   a ten pasek znaczy „ktoś może być w środku". */
.pasek-alarmu { position: sticky; top: 0; z-index: 60; display: flex; align-items: flex-start;
  gap: 10px; padding: 10px 14px; background: #fee2e2; border-bottom: 2px solid #b91c1c;
  color: #7f1d1d; font-size: 14px; }
.pasek-alarmu .znak { flex: none; width: 22px; height: 22px; border-radius: 50%; background: #b91c1c;
  color: #fff; font-weight: 700; text-align: center; line-height: 22px; }
.pasek-alarmu .tresc { flex: 1 1 auto; min-width: 0; }
.pasek-alarmu .tresc b { display: block; }
.pasek-alarmu .drobne { display: block; font-weight: 400; font-size: 12.5px; margin-top: 2px; }
.pasek-alarmu .odhacz { flex: none; align-self: center; padding: 7px 12px; font: inherit;
  font-size: 13px; border: 0; border-radius: 9px; background: #b91c1c; color: #fff; cursor: pointer; }
.pasek-alarmu .odhacz:hover { background: #991b1b; }
@media print { .pasek-alarmu { display: none !important; } }

/* PARAGONY DO WYSTAWIENIA -- PASEK NAD KAŻDĄ ZAKŁADKĄ (Piotr, 16.10.2026). Te same barwy co pasek w kalendarzu.
   Na zakładce z ramką Finansów chowa się -- ramka ma wtedy własny, ten sam. */
.pasek-paragonow { position: sticky; top: 0; z-index: 40; background: #fdecea; color: #8a1c12;
  border-bottom: 1px solid #f3b8b0; font-size: 14.5px; }
.pasek-paragonow .gora { display: flex; align-items: center; gap: 10px; padding: 7px 14px; }
.pasek-paragonow .ile { flex: none; min-width: 24px; height: 24px; padding: 0 6px; border-radius: 12px; background: #8a1c12;
  color: #fff; font-weight: 700; text-align: center; line-height: 24px; font-size: 13px; }
.pasek-paragonow .tresc { flex: 1 1 auto; min-width: 0; }
.pasek-paragonow .kiedy { color: #a5463a; font-size: 13px; }
.pasek-paragonow .odhacz { flex: none; min-height: 34px; padding: 6px 12px; font: inherit; font-size: 13.5px; border: 0;
  border-radius: 9px; background: #8a1c12; color: #fff; cursor: pointer; }
.pasek-paragonow .odhacz:hover { background: #6f160e; }
.pasek-paragonow .odhacz:disabled { opacity: .6; cursor: default; }
.pasek-paragonow .lista { padding: 0 14px 10px; max-height: 50vh; overflow-y: auto; }
.pasek-paragonow .lekarz { font-weight: 700; margin: 8px 0 4px; }
.pasek-paragonow .wiersz { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 5px 0;
  border-top: 1px solid #f6cdc7; }
main:has(> #zakladka-finanse:not([hidden])) > #pasek-paragonow { display: none; }
@media (max-width: 760px) {
  .pasek-paragonow .gora, .pasek-paragonow .wiersz { flex-wrap: wrap; }
  .pasek-paragonow .odhacz { min-height: 40px; }
}
@media print { .pasek-paragonow { display: none !important; } }

/* CZAS W PROGRAMIE (23.09.2026) -- prosta tabela w Centrum zarzadzania. */
.tabela-obecnosci { width: 100%; border-collapse: collapse; margin: 10px 0; }
.tabela-obecnosci th, .tabela-obecnosci td { text-align: left; padding: 4px 8px; border-bottom: 1px solid #e5e7eb; }
.tabela-obecnosci th { font-weight: 600; }

/* OCHRONA DANYCH (23.09.2026) -- do potwierdzenia zasad widac tylko ramke Finansow z tekstem. */
body.cem-ochrona-blokada #menu-boczne { display: none !important; }
body.cem-ochrona-blokada #program main { margin-left: 0 !important; max-width: none !important; }

/* ZAPŁACONA WIZYTA -- usługi i kwotę zmienia recepcja w przychodach (Piotr, 24.09.2026). */
.uslugi-klodka{margin:0 0 12px;padding:10px 14px;border-radius:12px;background:#f0fdfa;border:1px solid #99f6e4;color:#0f5f58;font-size:14px}

/* === WYGLĄD „B" KARTY WIZYTY (Piotr, 24.09.2026, wybrany z trzech rund propozycji) ============
   Każda część ma belkę w kolorze swojej grupy z CIEMNYM tytułem; karta pod belką prawie biała.
   Przyciski do pisania stoją w osobnym, białym wierszu pod belką -- nie wchodzą na tytuł.
   Grupy: pacjent (szary), pieniądze (zielony), badanie lekarskie (niebieski), dokumenty
   (fioletowy), dla pacjenta (morski), pliki (pomarańczowy), tylko gabinet (złoty). */
/* KOLORY „A" W ODCIENIACH NIEBIESKIEGO I FIOLETU (Piotr, 24.09.2026: „zrób kolory z A (...)
   odcienie niebieskiego różne, niebieski, fioletowy"). Bez turkusu -- tego nie lubi. */
.wizyta-sekcja[data-g="pacjent"]    { --g: #64748b; } /* szaroniebieski */
.wizyta-sekcja[data-g="pieniadze"]  { --g: #1e3a8a; } /* granat */
.wizyta-sekcja[data-g="badanie"]    { --g: #2563eb; } /* niebieski */
.wizyta-sekcja[data-g="wystaw"]     { --g: #7c3aed; } /* fiolet */
.wizyta-sekcja[data-g="pacjentowi"] { --g: #6366f1; } /* barwinek */
.wizyta-sekcja[data-g="pliki"]      { --g: #a21caf; } /* fuksja */
.wizyta-sekcja[data-g="prywatne"]   { --g: #9333ea; } /* purpura */
.wizyta-sekcja[data-g] {
  background: color-mix(in srgb, var(--g) 5%, var(--karta));
  border-color: color-mix(in srgb, var(--g) 20%, var(--karta));
  box-shadow: none;
}
.wizyta-sekcja[data-g] > h3,
.wizyta-dane[data-g] > summary {
  margin: -20px -20px 16px; padding: 12px 20px;
  background: color-mix(in srgb, var(--g) 13%, var(--karta));
  border-bottom: 1px solid color-mix(in srgb, var(--g) 22%, var(--karta));
  border-radius: calc(var(--r) - 1px) calc(var(--r) - 1px) 0 0;
  /* CZYTELNOŚĆ (Piotr, 24.09.2026: „żeby dobrze się pracowało i żeby widziały się litery"):
     tytuł w CIEMNIEJSZYM odcieniu koloru grupy, zawsze od lewej. */
  color: color-mix(in srgb, var(--g) 72%, #0b1220); flex-wrap: wrap; row-gap: 0; justify-content: flex-start;
}
/* Napisy grup przed tytułem („BADANIE LEKARSKIE" itd.) zdjęte 24.09.2026 -- Piotr: „po co tam dodatkowo
   dopisałeś?". Zostaje sama nazwa części. */
.wizyta-dane[data-g]:not([open]) > summary { margin-bottom: -20px; border-bottom: 0; border-radius: calc(var(--r) - 1px); }
/* Belka z przyciskami do pisania: kolor tylko w wierszu tytułu, przyciski w białym wierszu pod nią. */
.wizyta-sekcja[data-g] > h3:has(.pasek-edytora) { border-bottom: 0; }
.wizyta-sekcja[data-g] > h3 .pasek-edytora {
  flex-basis: calc(100% + 40px); max-width: none; order: 9; margin: 12px -20px -12px; padding: 9px 20px 8px;
  background: var(--karta); border-top: 1px solid color-mix(in srgb, var(--g) 34%, var(--karta));
  border-bottom: 1px solid var(--linia-cicha); justify-content: flex-start;
}
.wizyta-sekcja[data-g] > h3 > button,
.wizyta-sekcja[data-g] > h3 .mikrofon { background: var(--karta); }
/* NAGRYWANIE MA BYĆ WIDAĆ (Piotr, 7.10.2026, zrzut: pusty przycisk z czerwoną ramką). Reguła wyżej
   przykrywała czerwone tło przycisku w czasie nagrywania białym -- a napis jest biały, więc znikał. */
.wizyta-sekcja[data-g] > h3 .mikrofon.mowi { background: #d92d20; border-color: #d92d20; color: #fff; }
/* Uwagi prywatne miały własne ciepłe tło -- zostaje, belka dostaje ten sam złoty ton. */
.wizyta-sekcja.uwagi-gabinetu[data-g] { background: color-mix(in srgb, var(--g) 6%, var(--karta)); }

/* === UKŁAD KARTY: WIERSZE PO 1–3 CZĘŚCI (Piotr, 24.09.2026) ===================================
   Zanim układ przyjdzie z serwera, obie grupy „rozpływają się" (display: contents), a `--o`
   ustawia zwykłą kolejność -- DOKŁADNIE tę sprzed 24.09.2026. Potem `ulozWiersze` składa
   wiersze (`.wiz-wiersz`), a części w wierszu dzielą szerokość po równo. */
.wiz-uklad { display: flex; flex-direction: column; }
.wiz-uklad:not(.wierszami) > .wiz-lewa,
.wiz-uklad:not(.wierszami) > .wiz-prawa { display: contents; }
.wiz-uklad:not(.wierszami) > div > * { order: var(--o, 50); }
.wiz-wiersz { display: flex; gap: var(--odstep); align-items: stretch; }
.wiz-wiersz > * { flex: 1 1 0; min-width: 0; }
.wiz-wiersz > .uwaga-z-przychodow { flex-basis: 100%; }
.wiz-wiersz:has(> .uwaga-z-przychodow) { flex-wrap: wrap; }
.wiz-pasek-ukladu { display: flex; justify-content: flex-end; align-items: center; gap: 8px; margin: 0 0 10px; flex-wrap: wrap; }
.wiz-pasek-ukladu .cichy { min-height: 0; height: 32px; padding: 0 12px; font-size: 13.5px; }
.wiz-pasek-ukladu.ukladanie { justify-content: flex-start; background: var(--karta); border: 1px dashed var(--akcent);
  border-radius: 12px; padding: 10px 12px; position: sticky; top: 0; z-index: 6; }
.wiz-pasek-ukladu .podpowiedz-ukladu { flex: 1 1 320px; font-size: 13.5px; color: var(--pod); }
.wiz-pasek-ukladu #uklad-zapisz { min-height: 0; height: 34px; padding: 0 16px; background: var(--akcent); border-color: var(--akcent); color: #fff; font-weight: 600; }
/* Część w wierszu z sąsiadami układa pola ciaśniej. NIE przez `container-type` -- to robi
   z części pudełko dla wszystkiego, co „pływa" (podpowiedzi usług, wybór koloru), i one by się
   przesunęły. Wiersz sam mówi, ile ma części (`data-ile`, ustawia `ulozWiersze`). */
.wiz-wiersz:not([data-ile="1"]) .dodaj-usluge { flex-wrap: wrap; }
.wiz-wiersz:not([data-ile="1"]) .dodaj-usluge .szukajka,
.wiz-wiersz:not([data-ile="1"]) .dodaj-usluge .pole-usluga { flex: 1 1 100%; }
.wiz-wiersz:not([data-ile="1"]) .dodaj-rozpoznanie { flex-wrap: wrap; }
.wiz-wiersz:not([data-ile="1"]) .dodaj-rozpoznanie > :first-child { flex: 1 1 100%; }
.wiz-wiersz[data-ile="2"] .narzedzia-wizyty { grid-auto-flow: row; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.wiz-wiersz[data-ile="3"] .narzedzia-wizyty { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* TRYB UKŁADANIA: części zwinięte do belek, każda z uchwytem; kreski między wierszami. */
.wiz-uklad.ukladanie [data-sekcja] > :not(.uchwyt-czesci) { display: none !important; }
.wiz-uklad.ukladanie [data-sekcja] { cursor: grab; padding: 0 !important; min-height: 0; margin-bottom: 0;
  background: color-mix(in srgb, var(--g, #64748b) 22%, var(--karta)); border: 1px solid color-mix(in srgb, var(--g, #64748b) 40%, var(--karta)); }
.wiz-uklad.ukladanie .uchwyt-czesci { display: block; padding: 14px 16px; font-weight: 700; font-size: 15px; color: var(--tekst); user-select: none; }
.wiz-uklad.ukladanie .wiz-wiersz { gap: 10px; }
.wiz-uklad.ukladanie .ciagniety { opacity: .45; }
.wiz-uklad.ukladanie .wstaw-lewo { box-shadow: inset 5px 0 0 var(--akcent); }
.wiz-uklad.ukladanie .wstaw-prawo { box-shadow: inset -5px 0 0 var(--akcent); }
.wiz-uklad.ukladanie .pelny { outline: 2px dashed #b42318; outline-offset: -2px; cursor: not-allowed; }
.wiz-nowy-wiersz { height: 12px; margin: 2px 0; border-radius: 6px; }
.wiz-nowy-wiersz.nad-kreska { background: var(--akcent); opacity: .5; }
.uchwyt-czesci { display: none; }
@media (max-width: 900px) {
  .wiz-wiersz { flex-direction: column; gap: 0; }
  .wiz-pasek-ukladu { display: none; }
}

/* Uwagi prywatne mają węższe wcięcie (10px 14px) -- belka i wiersz przycisków idą za nim. */
.wizyta-sekcja.uwagi-gabinetu[data-g] > h3 { margin: -10px -14px 10px; padding: 10px 14px; }
.wizyta-sekcja.uwagi-gabinetu[data-g] > h3 .pasek-edytora { flex-basis: calc(100% + 28px); margin: 10px -14px -10px; padding: 8px 14px; }

/* „WYSTAW" ZAJMUJE MNIEJ MIEJSCA (Piotr, 24.09.2026: „żeby mniej miejsca zajmowało"). Jeden rząd
   przycisków z ikoną i nazwą -- bez opisów pod spodem. Opis zostaje w podpowiedzi pod myszką. */
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty { display: flex; flex-wrap: wrap; gap: 8px; }
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty .narzedzie { display: inline-flex; align-items: center; gap: 8px;
  width: auto; min-height: 0; padding: 8px 14px; border-radius: 10px; text-align: left; }
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty .narzedzie .opis { display: none; }
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty .narzedzie .ikona { font-size: 16px; }
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty .narzedzie .tytul { font-size: 14px; }
/* „Mów" w Zaleceniach stoi za schowanym „z poprzedniej wizyty" -- wtedy to on idzie na prawo. */
.wizyta-sekcja[data-g] > h3 > button[hidden] + button { margin-left: auto; }

/* ZDJĘCIE: POWIĘKSZANIE, NAZWA, USUWANIE (Piotr, 24.09.2026). Powiększone zdjęcie przewija się
   w ramce -- okno nigdy nie wychodzi poza ekran. */
dialog.podglad-zdjecia .zdj-ramka { max-width: 80vw; max-height: 74vh; overflow: auto; border-radius: 10px; }
dialog.podglad-zdjecia .zdj-ramka img { cursor: zoom-in; }
dialog.podglad-zdjecia .miary .rozdzielacz { width: 1px; height: 22px; background: var(--linia); margin: 0 4px; }
dialog.podglad-zdjecia .zdj-nazwa { margin-top: 8px; }
dialog.podglad-zdjecia .zdj-nazwa label { display: flex; align-items: center; gap: 8px; flex: 1 1 260px; font-size: 13.5px; }
dialog.podglad-zdjecia .zdj-nazwa input { flex: 1; min-width: 0; padding: 8px 10px; font: inherit; border: 1px solid var(--linia); border-radius: 8px; }
dialog.podglad-zdjecia .miary .usun { color: #b42318; border-color: #f3c3bd; }
dialog.okno-nazwy-zdjecia { border: 0; border-radius: 14px; padding: 18px; width: min(440px, calc(100vw - 32px)); }
dialog.okno-nazwy-zdjecia::backdrop { background: rgba(15, 18, 22, .5); }
dialog.okno-nazwy-zdjecia label { display: grid; gap: 2px; margin-bottom: 10px; }
dialog.okno-nazwy-zdjecia input { width: 100%; box-sizing: border-box; padding: 10px 12px; font: inherit; font-size: 16px;
  border: 1px solid var(--linia); border-radius: 9px; }
dialog.okno-nazwy-zdjecia .przyciski { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }
dialog.okno-nazwy-zdjecia label b { font-size: 17px; color: var(--tekst); }
dialog.okno-nazwy-zdjecia [data-zapisz] { background: var(--akcent); border-color: var(--akcent); color: #fff; font-weight: 600; }

/* DOPŁATA DO ZAPŁACONEJ WIZYTY (24.09.2026): znaczek przy dopisanej usłudze; przy zapłaconej wizycie
   w rzędzie dodawania nie ma zniżki -- dopłata idzie po pełnej cenie. */
.znak-doplaty { font-size: 11.5px; font-weight: 700; color: #92400e; background: #fef3c7; border: 1px solid #fcd34d;
  border-radius: 999px; padding: 1px 8px; margin-left: 6px; white-space: nowrap; }
.dodaj-usluge.tylko-doplata .pole-znizka,
.dodaj-usluge.tylko-doplata .pole-po-znizce { display: none; }

/* NIŻEJ I CIAŚNIEJ (Piotr, 24.09.2026: „za wysokie są te pasy (...) wywiad, badanie przedmiotowe,
   zalecenia -- strasznie wysokie (...) zrób mniejsze te pasy wokół"). Pola dalej rosną z tekstem. */
.wizyta-sekcja[data-g] { padding: 12px 16px; }
.wizyta-sekcja[data-g] > h3,
.wizyta-dane[data-g] > summary { margin: -12px -16px 10px; padding: 7px 16px; font-size: 15.5px; }
.wizyta-dane[data-g]:not([open]) > summary { margin-bottom: -12px; }
.wizyta-sekcja[data-g] > h3 .pasek-edytora { flex-basis: calc(100% + 32px); margin: 7px -16px -7px; padding: 5px 16px; }
.wizyta-sekcja[data-g] > h3 .mikrofon,
.wizyta-sekcja[data-g] > h3 > button { min-height: 0; height: 28px; padding: 0 10px; font-size: 13px; }
.wizyta-sekcja .edytor { padding: 8px 12px; line-height: 1.55; }
.wizyta-sekcja .edytor[data-wpole-tekst="wywiad"],
.wizyta-sekcja .edytor[data-wpole-tekst="badanie"] { min-height: 64px; }
.wizyta-sekcja .edytor[data-wpole-tekst="zalecenia"] { min-height: 88px; }
/* Uwagi prywatne miały już własne, węższe wcięcie -- belka idzie za nim. */
.wizyta-sekcja.uwagi-gabinetu[data-g] { padding: 10px 14px; }
.wizyta-sekcja.uwagi-gabinetu[data-g] > h3 { margin: -10px -14px 8px; padding: 7px 14px; }

/* „WYSTAW" NA CAŁĄ SZEROKOŚĆ (Piotr, 24.09.2026: „rozmieść, wyjustuj to wszystko, żeby zajmowało
   całą szerokość"). Przyciski dzielą rząd po równo; na wąskim miejscu zawijają się. */
.wizyta-sekcja[data-sekcja="wystaw"] .narzedzia-wizyty .narzedzie { flex: 1 1 130px; justify-content: center; }

/* ZAŁĄCZNIKI W ZWIJANYCH GRUPACH (Piotr, 24.09.2026). */
.grupy-zalacznikow { display: grid; gap: 6px; margin-top: 8px; }
.grupa-zal { border: 1px solid var(--linia); border-radius: 10px; background: var(--karta); }
.grupa-zal > summary { cursor: pointer; padding: 8px 12px; font-weight: 600; font-size: 14.5px; list-style-position: inside; }
.grupa-zal > summary .ile-zal { display: inline-block; min-width: 22px; text-align: center; font-size: 12px; font-weight: 700;
  color: var(--pod); background: var(--linia-cicha); border-radius: 999px; padding: 1px 7px; margin-left: 4px; }
.grupa-zal[open] > summary { border-bottom: 1px solid var(--linia-cicha); }
.grupa-zal > .lista-zalacznikow { margin: 0; padding: 4px 8px 8px; }

/* WĘŻSZE MARGINESY WOKÓŁ PÓL (Piotr, 24.09.2026: „czy one muszą mieć takie paski szerokie po bokach
   i wokół siebie?"). Pole tekstu sięga prawie do brzegu karty. */
.wizyta-sekcja[data-g] { padding: 10px 10px; }
.wizyta-sekcja[data-g] > h3,
.wizyta-dane[data-g] > summary { margin: -10px -10px 8px; padding: 7px 12px; }
.wizyta-dane[data-g]:not([open]) > summary { margin-bottom: -10px; }
.wizyta-sekcja[data-g] > h3 .pasek-edytora { flex-basis: calc(100% + 24px); margin: 7px -12px -7px; padding: 5px 12px; }
.wizyta-sekcja[data-g] .edytor { margin-top: 2px; }
.wizyta-sekcja.uwagi-gabinetu[data-g] { padding: 10px 10px; }
.wizyta-sekcja.uwagi-gabinetu[data-g] > h3 { margin: -10px -10px 8px; padding: 7px 12px; }
.wizyta-sekcja.uwagi-gabinetu[data-g] > h3 .pasek-edytora { flex-basis: calc(100% + 24px); margin: 7px -12px -7px; padding: 5px 12px; }

/* USŁUGI: szersze „ile" przy zniżce, węższe „po zniżce" (Piotr, 24.09.2026). */
.dodaj-znizka input[type=number] { width: 96px; }
.dodaj-usluge #usluga-po-znizce { min-width: 0; width: 84px; }

/* TRZY PRZYCISKI NAGŁÓWKA W JEDNEJ LINII (Piotr, 25.09.2026). */
.wizyta-przyciski-glowy { display: flex; flex-wrap: nowrap; gap: 6px; align-items: center; margin-top: 6px; }
.wizyta-przyciski-glowy .wejscie-historii { margin: 0; white-space: nowrap; }
@media (max-width: 560px) { .wizyta-przyciski-glowy { flex-wrap: wrap; } }

/* ==============================================================================================
   NOWA RECEPTA KROK PO KROKU (Piotr, 25.09.2026, wybrany „pierwszy podgląd").
   „Jak wypisuję na telefonie, to wszystko mi się zlewa. Już nie wiem, gdzie mam wyszukiwać leków,
   gdzie mam sprawdzać interakcje. To wszystko jest takie jednokolorowe, zlane."
   KAŻDY KROK MA SWÓJ KOLOR -- te same odcienie niebieskiego i fioletu, co karta wizyty „B",
   interakcje pomarańczowe (to ostrzeżenia). Telefon: jeden krok naraz i „Dalej". Komputer:
   pacjent po lewej, reszta po prawej, bez przewijania szukania.
   ============================================================================================== */
#zakladka-nowa [data-krok="1"] { --k: #475569; --kj: #eef1f5; }
#zakladka-nowa [data-krok="2"] { --k: #4f46e5; --kj: #eef0ff; }
#zakladka-nowa [data-krok="3"] { --k: #1d4ed8; --kj: #e9f0ff; }
#zakladka-nowa [data-krok="4"] { --k: #b45309; --kj: #fff5e6; }
#zakladka-nowa [data-krok="5"] { --k: #7c3aed; --kj: #f4efff; }
#zakladka-nowa .krok[data-krok] { padding-top: 0; overflow: hidden; }
#zakladka-nowa .krok[data-krok] > .krok-glowa { background: var(--kj); margin: 0 -24px 16px;
  padding: 10px 24px; border-bottom: 1px solid var(--linia); }
#zakladka-nowa .krok[data-krok] > .krok-glowa h2 { color: var(--k); font-size: 16px; font-weight: 700; }
#zakladka-nowa .krok[data-krok] .krok-nr { background: var(--k); color: #fff; }
#zakladka-nowa .krok[data-krok] .szukajka input { border: 2px solid var(--k); }
#zakladka-nowa .krok[data-krok="4"] .interakcje-blok { background: transparent; border: 0; padding: 0; }
#zakladka-nowa .krok[data-krok="4"] #sprawdz-interakcje { border-color: var(--k); color: var(--k); }
#zakladka-nowa .krok-wystaw .wystawienie { border: 0; padding: 0; background: transparent; }
#zakladka-nowa .krok-wystaw #wystaw { background: var(--k); border-color: var(--k); }

/* Wybrane rozpoznania -- plakietki z kodem. */
.r-wybrane { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.r-wybrane:empty { display: none; }
.r-plakietka { display: inline-flex; align-items: center; gap: 6px; border: 1px solid #4f46e5;
  background: #eef0ff; border-radius: 999px; padding: 5px 6px 5px 12px; font-size: 14px; }
.r-plakietka b { font-family: ui-monospace, Menlo, monospace; color: #4f46e5; font-weight: 600; }
.r-plakietka button { border: 0; background: #4f46e5; color: #fff; width: 24px; height: 24px;
  min-height: 0; border-radius: 50%; padding: 0; cursor: pointer; line-height: 1; }
.r-plakietka.z-wizyty { border-style: dashed; }
.r-brak { color: var(--blad); font-weight: 700; font-size: 14px; margin-top: 8px; }

/* Podsumowanie przed wystawieniem -- widoczne na telefonie, na komputerze wszystko widać i tak. */
.podsumowanie-recepty { display: none; gap: 8px; margin-bottom: 14px; }
.pods-wiersz { display: grid; grid-template-columns: 10px 1fr auto; gap: 10px; align-items: start;
  padding: 10px 12px; border-radius: 12px; background: var(--tlo); }
.pods-wiersz i { width: 10px; height: 10px; border-radius: 50%; background: var(--k); margin-top: 6px; }
.pods-wiersz button { border: 0; background: none; color: var(--akcent); font-weight: 700; padding: 0;
  min-height: 0; cursor: pointer; }
.pods-wiersz .pod { font-size: 13px; }

/* Pasek kroków i „Dalej" -- tylko telefon. */
.kroki-recepty, .nawigacja-recepty { display: none; }

/* KOMPUTER: pacjent po lewej, reszta po prawej. */
@media (min-width: 1100px) {
  #zakladka-nowa .praca { display: grid; grid-template-columns: minmax(320px, 400px) minmax(0, 1fr);
    column-gap: 18px; align-items: start; }
  #zakladka-nowa .praca > .krok[data-krok="1"] { grid-column: 1; grid-row: 1 / span 4; }
  #zakladka-nowa .praca > .krok[data-krok="1"] .rzad { grid-template-columns: 1fr; display: grid; }
  #zakladka-nowa .praca > .krok:not([data-krok="1"]) { grid-column: 2; }
}

/* TELEFON: jeden krok naraz, pasek postępu u góry, „Dalej" na dole pod kciukiem. */
@media (max-width: 760px) {
  #zakladka-nowa .praca > .krok[data-krok]:not(.teraz) { display: none; }
  #zakladka-nowa .praca > .krok[data-krok] { margin-bottom: 0; padding: 0 14px 14px; }
  #zakladka-nowa .krok[data-krok] > .krok-glowa { margin: 0 -14px 12px; padding: 10px 14px; }
  #zakladka-nowa .krok[data-krok] label { margin-bottom: 10px; }
  #zakladka-nowa .podsumowanie-recepty { display: grid; }
  .kroki-recepty { display: grid; gap: 6px; position: sticky; top: 0; z-index: 20;
    background: var(--karta); border-bottom: 1px solid var(--linia); padding: 8px 12px 10px;
    margin: -8px -8px 10px; }
  .kroki-kto { font-size: 14px; color: var(--pod); min-height: 1.2em; display: flex;
    justify-content: space-between; gap: 8px; }
  .kroki-kto b { color: var(--tekst); }
  .kroki-pasek { display: grid; grid-template-columns: repeat(5, 1fr); gap: 4px; }
  .kroki-pasek button { border: 0; background: none; padding: 0; min-height: 0; display: grid; gap: 4px;
    justify-items: center; font-size: 11px; color: var(--pod); cursor: pointer; font-weight: 400; }
  .kroki-pasek button i { display: block; width: 100%; height: 6px; border-radius: 4px; background: var(--linia); }
  .kroki-pasek button.zrobiony i, .kroki-pasek button.teraz i { background: var(--k); }
  .kroki-pasek button.teraz { color: var(--k); font-weight: 700; }
  .nawigacja-recepty { display: grid; grid-template-columns: auto 1fr; gap: 8px; position: sticky;
    bottom: 0; z-index: 20; background: var(--karta); border-top: 1px solid var(--linia);
    padding: 10px 12px calc(12px + env(safe-area-inset-bottom, 0px)); margin: 12px -8px 0; }
  .nawigacja-recepty button { min-height: 52px; font-size: 17px; font-weight: 700; border-radius: 14px; }
  .krok-wstecz { background: var(--tlo); color: var(--tekst); border: 1px solid var(--linia); padding: 0 18px; }
  .krok-dalej { background: var(--k); border: 0; color: #fff; }
  .krok-dalej[disabled] { opacity: .45; }
  .nawigacja-recepty.na-koncu .krok-dalej { display: none; }
  .nawigacja-recepty.na-koncu { grid-template-columns: auto; }
}
#zakladka-nowa .krok[data-krok] > .krok-glowa h2::before { background: var(--k); }
/* Leki z recepty w kroku „Interakcje" i przycisk „Wyczyść" (25.09.2026). */
.interakcje-z-recepty { margin-bottom: 12px; }
.interakcje-podpis { font-size: 11.5px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
  color: var(--pod); margin-bottom: 6px; }
.lek-plakietka.zdjety { opacity: .5; text-decoration: line-through; }
.wyczysc-recepte { width: 100%; margin-top: 10px; }
/* Lista braków przy „Wystaw" -- wszystko naraz, przy każdym „Popraw" (25.09.2026). */
.braki-lista { text-align: left; background: var(--blad-tlo); border: 1px solid #fecaca; border-radius: 12px;
  padding: 10px 12px; color: var(--tekst); margin-bottom: 10px; }
.braki-lista b { color: var(--blad); }
.braki-lista ul { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.braki-lista li { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: center; font-weight: 400; }
.braki-lista li button { min-height: 0; padding: 6px 12px; font-weight: 700; }
.blad-plakietka { background: var(--blad-tlo); color: var(--blad); border-color: #fecaca; }
/* KSIĘGA „Bezpieczeństwo i działanie programu" (25.09.2026) -- czytelna miara tekstu. */
.ksiega { max-width: 75ch; line-height: 1.6; font-size: 15.5px; }
.ksiega-spis { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 18px; }
.ksiega-spis a { padding: 5px 12px; border-radius: 999px; background: var(--akcent-tlo); color: var(--akcent);
  text-decoration: none; font-size: 14px; font-weight: 600; }
.ksiega-rozdzial { padding: 6px 0 18px; border-bottom: 1px solid var(--linia); scroll-margin-top: 80px; }
.ksiega-rozdzial:last-child { border-bottom: 0; }
.ksiega h2 { font-size: 21px; margin: 14px 0 8px; color: var(--granat); }
.ksiega h3 { font-size: 17px; margin: 16px 0 6px; }
.ksiega ul, .ksiega ol { padding-left: 1.3em; margin: 6px 0 10px; }
.ksiega li { margin: 4px 0; }
.ksiega p { margin: 6px 0 10px; }
.ksiega-tabela { overflow-x: auto; }
.ksiega table { border-collapse: collapse; width: 100%; font-size: 14px; }
.ksiega th, .ksiega td { border-bottom: 1px solid var(--linia); padding: 6px 8px; text-align: left; vertical-align: top; }

/* KTO OGLĄDAŁ KARTĘ i RAPORT PO WŁAMANIU (30.09.2026): te same tabele co w księdze. */
.tabela-kto { border-collapse: collapse; width: 100%; font-size: 14px; }
.tabela-kto th, .tabela-kto td { border-bottom: 1px solid var(--linia); padding: 6px 8px; text-align: left; vertical-align: top; }
.tabela-kto th, .tabela-kto .nw { white-space: nowrap; }
.raport-pola { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 8px 14px; margin: 10px 0; }
.raport-pola label { display: flex; flex-direction: column; gap: 4px; }
.raport-podsumowanie { background: #f6f8fc; border: 1px solid var(--linia); border-radius: 12px; padding: 8px 14px; margin: 12px 0; }
#raport-wynik h3 { font-size: 17px; margin: 18px 0 6px; color: var(--granat); }

/* BEZPIECZEŃSTWO I RODO (28.09.2026): firmy do odhaczenia, telefony, papiery. */
.rodo h3 { font-size: 18px; margin: 22px 0 6px; color: var(--granat); display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
.rodo-licznik { font-size: 13px; font-weight: 600; color: var(--pod); }
.rodo-uwaga { background: #fff7e6; border: 1px solid #f3d38a; border-radius: 10px; padding: 8px 12px; }
.rodo-firma, .rodo-papier { border: 1px solid var(--linia); border-radius: 12px; padding: 6px 14px; margin: 8px 0; background: #fff; }
.rodo-firma[open], .rodo-papier[open] { padding-bottom: 12px; }
.rodo-firma summary, .rodo-papier summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; padding: 6px 0; }
.rodo-firma.zrobione { border-color: #86efac; background: #f0fdf4; }
.rodo-kratka { width: 20px; height: 20px; border: 2px solid var(--linia-mocna); border-radius: 5px; display: inline-flex;
  align-items: center; justify-content: center; font-size: 14px; color: #15803d; font-weight: 700; }
.rodo-firma.zrobione .rodo-kratka { border-color: #22c55e; }
.rodo-co { flex-basis: 100%; color: var(--pod); font-size: 14px; padding-left: 30px; }
.rodo-papier summary .pod { flex-basis: 100%; font-size: 14px; }
.rodo-plakietka { font-size: 12px; font-weight: 700; border-radius: 999px; padding: 2px 9px; }
.rodo-panel { background: #fff4e5; color: #9a5a00; }
.rodo-jest { background: #e8f4ec; color: #1b6b40; }
.rodo-niepotrzebna { background: var(--akcent-tlo); color: var(--akcent); }
.rodo-wpisy { display: grid; gap: 8px; margin: 8px 0; }
.rodo-wpisy > div { border: 1px dashed var(--linia-mocna); border-radius: 8px; padding: 6px 10px; display: grid; grid-template-columns: 1fr auto; gap: 2px 10px; }
.rodo-wpisy span { grid-column: 1 / -1; font-size: 12px; font-weight: 700; color: var(--pod); text-transform: uppercase; letter-spacing: .04em; }
.rodo-wpisy p { margin: 0; }
.rodo-linki { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; }
.rodo-mail pre { white-space: pre-wrap; background: var(--akcent-tlo); border-radius: 8px; padding: 10px; font: 14px/1.5 inherit; }
.rodo-odhacz { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; border-top: 1px solid var(--linia-cicha); padding-top: 10px; margin-top: 8px; }
.rodo-odhacz .szeroko { flex: 1 1 260px; }
.rodo-odhacz .szeroko input { width: 100%; }
.rodo-kontakty { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 8px 16px; }
.rodo-kontakty input { width: 100%; }
.rodo-zrodlo { font-size: 13px; }
.rodo-ramka { background: #fff7e6; border: 1px solid #f3d38a; border-radius: 10px; padding: 8px 12px; margin: 8px 0; }
.rodo ul.rodo-kratki { list-style: none; padding-left: 0; }
.rodo .przycisk-link { display: inline-block; padding: 6px 12px; border-radius: 8px; background: var(--akcent); color: #fff;
  text-decoration: none; font-weight: 600; font-size: 14px; }
.rodo .przycisk-link:focus-visible { outline: 2px solid var(--akcent-ciemny); outline-offset: 2px; }

/* KOD SMS PRZY LOGOWANIU (25.09.2026): numer i przełącznik przy każdej osobie. */
#kod-sms-osoby .lista-kont li { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
#kod-sms-osoby .kod-telefon { width: 150px; }
#kod-sms-osoby .kod-email { width: 210px; }
#krok-kodu { margin-top: 10px; }

/* EDYTOR ANKIET (28.09.2026) */
.ankiety-edytor { max-width: 980px; }
.ed-glowa { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-start; justify-content: space-between; }
.ed-glowa h2 { margin: 6px 0 2px; }
.ed-lista { display: grid; gap: 10px; margin-top: 12px; }
.ed-rodzaj { display: flex; flex-wrap: wrap; gap: 10px; justify-content: space-between; align-items: center;
  border: 1px solid var(--linia); border-radius: 12px; padding: 12px 14px; background: #fff; }
.ed-rodzaj > div:first-child { display: flex; flex-direction: column; gap: 2px; }
.ed-rodzaj.schowany { opacity: .7; }
.ed-rodzaj-guziki { display: flex; flex-wrap: wrap; gap: 8px; }
.ed-szkic-znak { color: #9a5a00; font-weight: 600; }
.ed-bledy { background: #fff7e6; border: 1px solid #f3d38a; border-radius: 10px; padding: 8px 12px; margin: 10px 0; }
.ed-bledy ul { margin: 4px 0 0; padding-left: 18px; }
.ed-wezel { border: 1px solid var(--linia); border-radius: 10px; margin: 6px 0; padding: 4px 10px; background: #fff; }
.ed-wezel[open] { padding-bottom: 10px; }
.ed-wezel > summary { cursor: pointer; padding: 6px 0; font-weight: 600; }
.ed-cz { background: #fbfcfe; } .ed-pg { background: #fff; } .ed-ob { background: #fbfcfe; }
.ed-wezel.ukryte > summary, .ed-pytanie.ukryte { opacity: .55; }
.ed-typ { display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--pod); border: 1px solid var(--linia); border-radius: 6px; padding: 1px 6px; margin-right: 6px; }
.ed-alarm { color: #b3261e; font-style: normal; font-size: 12px; font-weight: 700; }
.ed-pola { display: grid; gap: 8px; margin: 6px 0 10px; }
.ed-pola label, .ed-pytanie label { display: flex; flex-direction: column; gap: 3px; font-size: 13px; color: var(--pod); }
.ed-pola input, .ed-pola textarea, .ed-pytanie input, .ed-pytanie textarea, .ed-pytanie select { font-size: 15px; }
.ed-pytania { display: grid; gap: 8px; }
.ed-pytanie { border: 1px dashed var(--linia-mocna); border-radius: 10px; padding: 8px 10px; display: grid; gap: 6px; background: #fff; }
.ed-pyt-rzad { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.ed-pyt-tekst { flex: 1 1 320px; font-weight: 600; }
.ed-kratka { flex-direction: row !important; align-items: center; gap: 6px !important; color: var(--tekst) !important; }
.ed-ruch { display: inline-flex; gap: 4px; margin-left: auto; }
.ed-ruch button { min-height: 0; padding: 4px 10px; }
.ed-usun { color: #b3261e; }
.ed-dodaj { margin: 6px 0; }
.ed-pod { font-size: 13px; color: var(--pod); margin: 6px 0 2px; }
.ed-podglad { max-height: 80vh; overflow: auto; max-width: 760px; }

/* WYWIAD OD PACJENTA (ankieta przed wizytą, 28.09.2026) */
.wiz-ankieta .ank-alarm{background:#FCEEEC;border-left:6px solid #B3261E;padding:10px 12px;border-radius:8px;margin:6px 0 10px;color:#5c1410}
.wiz-ankieta .ank-alarm button{margin-left:8px}
.wiz-ankieta .ank-gora{background:#F2F5FA;border-left:4px solid #14254F;border-radius:8px;padding:8px 12px;margin:0 0 8px}
.wiz-ankieta .ank-pyt{margin:0;font-size:13px;font-weight:600;color:#4B5770}
.wiz-ankieta .ank-slowa{margin:4px 0 0;font-size:16px;white-space:pre-wrap}
.wiz-ankieta .ank-spr{margin:6px 0}
/* Liczby z wywiadu (17.10.2026) */
.wiz-ankieta .ank-liczby{border:1px solid #DCE2EC;border-radius:10px;padding:8px 10px;margin:0 0 10px;background:#fff}
.wiz-ankieta .ank-lic-k{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px;margin:6px 0}
.wiz-ankieta .ank-lic{background:#F2F5FA;border-radius:8px;padding:6px 8px;display:flex;flex-direction:column;gap:1px}
.wiz-ankieta .ank-lic span{font-size:.85em;color:#4B5770}
.wiz-ankieta .ank-lic b{font-size:1.1em;color:#14254F}
.wiz-ankieta .ank-lic i{font-style:normal;font-size:.85em;color:#4B5770}
/* dobrze / źle (Piotr 24.10.2026) */
.wiz-ankieta .ank-lic-dobrze{border-left:4px solid #2f8f5b;background:#eef8f1}.wiz-ankieta .ank-lic-dobrze b{color:#1b6b40}
.wiz-ankieta .ank-lic-zle{border-left:4px solid #c8453b;background:#fdeeed}.wiz-ankieta .ank-lic-zle b{color:#b3261e}
/* zwinięty wywiad (Piotr 19.10.2026) */
.wiz-ankieta .ank-zwin{margin:8px 0;border:1px solid #D5DCE8;border-radius:8px;background:#fff}
.wiz-ankieta .ank-zwin>summary{cursor:pointer;padding:8px 12px;font-weight:600;color:#14254F;list-style:none}
.wiz-ankieta .ank-zwin>summary::-webkit-details-marker{display:none}
.wiz-ankieta .ank-zwin>summary::before{content:'▸ ';}
.wiz-ankieta .ank-zwin[open]>summary::before{content:'▾ ';}
.wiz-ankieta .ank-zwin[open]>summary{border-bottom:1px solid #E5E9F0}
.wiz-ankieta .ank-zwin>:not(summary){margin-left:12px;margin-right:12px}
.wiz-ankieta .ank-zm{border-collapse:collapse;margin:6px 12px 10px;font-size:.92em}.wiz-ankieta .ank-zm td{padding:3px 10px 3px 0;vertical-align:top;border-bottom:1px solid #EEF1F5}
.wiz-ankieta .ank-sekcje{margin:8px 0;display:grid;grid-template-columns:minmax(120px,190px) 1fr;gap:4px 12px}
.wiz-ankieta .ank-sekcje dt{font-weight:600;color:#14254F}
.wiz-ankieta .ank-sekcje dd{margin:0}
@media (max-width:700px){.wiz-ankieta .ank-sekcje{grid-template-columns:1fr}}
/* ZGODY W GABINECIE (28.09.2026) -- panel pod paskiem zgód w karcie wizyty */
.zg-panel{margin-top:8px;display:grid;gap:6px;color:#1f2933}
.zg-rzad{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}
.zg-pasek-szukania{display:flex;gap:12px;align-items:center;margin-bottom:10px}
.zg-pasek-szukania input{flex:1;min-width:0;font-size:16px;padding:10px 14px}
#zg-wynik:not(:empty){margin-bottom:10px}
.zg-rzad label{display:inline-flex;gap:4px;align-items:center}
.zg-odhacz summary{cursor:pointer;font-weight:600}.zg-odhacz[open]{display:grid;gap:6px}
.zg-info{color:#b42318}
.zg-tabela{width:100%;border-collapse:collapse;font-size:14px}
.zg-tabela th,.zg-tabela td{padding:6px 8px;border-bottom:1px solid #e5e7eb;text-align:left;vertical-align:top}
.zg-tabela .pod,#zakladka-zgody .pod{color:#64748b;font-size:13px}
.zg-tabela .wycofana{color:#b45309;font-weight:600}
.zg-akcje{white-space:nowrap}
.zg-tabela th,.zg-tabela td:nth-child(3),.zg-tabela td:nth-child(6){white-space:nowrap}
#zakladka-zgody .zg-rzad label{white-space:nowrap}
#zakladka-zgody .zg-rzad input:not([type=radio]):not([type=checkbox]){min-width:200px}
#zakladka-zgody input[type=radio],#zakladka-zgody input[type=checkbox]{width:auto;min-width:0;margin:0}
@media (max-width:760px){.zg-tabela thead{display:none}.zg-tabela tr{display:block;border-bottom:1px solid #e5e7eb;padding:6px 0}.zg-tabela td{display:inline-block;border:0;padding:2px 6px}.zg-akcje{white-space:normal}}
#zakladka-zgody .zg-h{margin:0 0 10px;font-size:18px}
.zz-pola{display:grid;gap:8px;margin:8px 0}.zz-pole{display:grid;gap:3px}.zz-pole em{color:#b45309;font-style:normal;font-size:12px}
.zz-pole textarea{width:100%;font:inherit;font-weight:400;color:#1f2933}
#zg-zabieg .zg-rzad label:has(input[type=radio]){display:inline-flex;flex:0 0 auto;width:auto;flex-direction:row;gap:6px;align-items:center;font-weight:500}
#zg-zabieg .zg-rzad b{font-size:14px}.zz-kod{font-size:24px;letter-spacing:4px}.zg-info-zab{color:#1d4ed8;font-weight:600}
.do-zalecen{margin:6px 0 0}

/* SKIEROWANIE W TRZECH KROKACH (Piotr, 29.09.2026: z propozycji B, C i E -- „żeby naprawdę łatwo
   się to używało i było intuicyjne”). Krok do zrobienia ma niebieski obrys, zrobiony jest
   zielonkawy, przyszły przygaszony. Na wąskim ekranie kroki idą jeden pod drugim.
   Przyciski ZAWSZE mieszczą się w słowie (nowrap) -- rząd się zawija, słowo nigdy. */
.skier-kroki {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 11px 0 0;
}
@media (max-width: 760px) { .skier-kroki { grid-template-columns: 1fr; } }
.skier-krok {
  display: flex; flex-direction: column; gap: 6px; min-width: 0;
  border: 1px solid var(--linia); border-radius: 11px; padding: 9px 12px; background: var(--karta);
}
.skier-krok .nr {
  font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--pod);
}
.skier-krok .stan-kroku { font-size: 14px; }
.skier-krok .drobne { color: var(--pod); font-size: 12.5px; }
.skier-krok.teraz { border-color: var(--akcent); box-shadow: inset 0 0 0 1px var(--akcent); }
.skier-krok.teraz .nr { color: var(--akcent-ciemny); }
.skier-krok.zrobiony { background: var(--dobrze-tlo); border-color: #bbf7d0; }
.skier-krok.zrobiony .stan-kroku { color: var(--dobrze); font-weight: 600; }
.skier-krok.czeka-na-zaplate { background: var(--blad-tlo); border-color: #fecaca; }
.skier-krok .stan-kroku.czerwony { color: var(--blad); font-weight: 700; }
.skier-krok .stan-kroku.zielony { color: var(--dobrze); font-weight: 700; }
.skier-krok.pozniej { background: var(--tlo); }
.skier-krok.pozniej .stan-kroku { color: var(--pod); }
.skier-krok .rzad-kroku { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 2px; }
.skier-krok .rzad-kroku button, .skier-grupy button { white-space: nowrap; }

.skier-grupy { display: flex; flex-wrap: wrap; gap: 10px 18px; margin: 11px 0 0; align-items: flex-end; }
.skier-grupa { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.skier-grupa .nazwa-grupy {
  font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--pod);
}
.skier-grupa .przyciski-grupy { display: flex; flex-wrap: wrap; gap: 6px; }
/* Kwoty skierowania w karcie wizyty zawijają się na telefonie zamiast ucinać „(cennik 2460,0…”. */
.naglowek-skierowania .co .pod.zawijany { white-space: normal; overflow: visible; }
.naglowek-skierowania .co .pod .bez-lamania { white-space: nowrap; }
.naglowek-skierowania .bad-lab { color: var(--granat); letter-spacing: .02em; }

/* ZAPŁACONA, ALE DO EDYCJI (Piotr, 30.09.2026, wariant B) -- zielona linijka zamiast kłódki. */
.uslugi-zaplacona{background:#ecfdf5;color:#166534;border:1px solid #bbf7d0;border-radius:8px;padding:6px 10px;margin:0 0 8px;font-size:13px}

/* PRZYCISK „WŁAMANIE!” (1.10.2026) -- nad raportem po włamaniu, tylko u lekarza. */
.wlamanie-pasek { margin-bottom: 14px; }
.wlamanie-gotowe { display: flex; align-items: center; gap: 14px; padding: 12px 14px;
  border: 1px solid #f1c3c0; background: #fff6f5; border-radius: 10px; }
.wlamanie-przycisk { background: #b3261e; color: #fff; border: 0; border-radius: 8px;
  padding: 10px 18px; font-size: 16px; font-weight: 700; cursor: pointer; white-space: nowrap;
  flex: 0 0 auto; min-width: 140px; width: auto; }
.wlamanie-przycisk:hover { background: #8f1d17; }
.wlamanie-wlaczone { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 12px 14px;
  border: 2px solid #b3261e; background: #fdecea; color: #7a1712; border-radius: 10px; }
.wlamanie-wlaczone .pod { flex-basis: 100%; color: #7a1712; }

/* KTO TU WCHODZI -- PORZĄDEK (Piotr, 1.10.2026: „zrób ładnie tę część, bo wszystko się tam
   rozjechało przy Oli, przy zakładaniu nowych osób”). Każda osoba to jeden czytelny wiersz:
   imię, login i telefon, pod spodem co widzi (słowami), przyciski razem po prawej. */
#karta-kont .lista-kont li { align-items: flex-start; padding: 14px 4px; gap: 16px; }
#karta-kont .lista-kont .kto { gap: 4px; flex: 1; }
#karta-kont .lista-kont .kto > b { font-size: 16px; }
#karta-kont .lista-kont .plakietka { align-self: flex-start; margin-top: 2px; }
#karta-kont .konto-widzi-rzad { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
#karta-kont .konto-widzi { display: inline-block; font-size: 12.5px; font-weight: 600; padding: 3px 10px;
  border-radius: 999px; background: #eef4ff; color: #1d4ed8; border: 1px solid #d6e3ff; }
#karta-kont .konto-widzi.pusto { background: #f4f4f5; color: #71717a; border-color: #e4e4e7; }
#karta-kont .konto-przyciski { display: flex; gap: 8px; align-items: center; flex-shrink: 0; }
#karta-kont .konto-przyciski button { min-height: 40px; }
#karta-kont .konto-nowe { border: 1px solid var(--linia); border-radius: 12px; padding: 16px; margin: 4px 0 26px;
  background: #fafbfd; }
#karta-kont .konto-nowe h3 { margin: 0 0 12px; }
#karta-kont .konto-klocki { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px 18px;
  align-items: start; margin: 16px 0 14px; }
#karta-kont .konto-klocki > .pod { grid-column: 1 / -1; font-weight: 600; color: inherit; }
#karta-kont .konto-klocki .kwadracik { display: flex; gap: 8px; align-items: flex-start; line-height: 1.35; }
#karta-kont .konto-klocki .kwadracik input { margin-top: 2px; flex-shrink: 0; }
#karta-kont .konto-nowe .rzad-przyciskow { gap: 10px; align-items: center; }
#karta-kont .lista-kont > .konto-nowe.poprawiane { background: #fffbea; border: 2px solid #f3d38a; margin: 0 0 14px; }
/* Kod SMS: jedna osoba = jeden równy rząd, pola zawsze w tych samych kolumnach. */
#karta-kont #kod-sms-osoby .lista-kont li { display: grid; grid-template-columns: minmax(150px, 1.2fr) 160px minmax(200px, 1.4fr) auto auto 1fr;
  gap: 10px 16px; align-items: center; }
#karta-kont #kod-sms-osoby .kod-telefon, #karta-kont #kod-sms-osoby .kod-email { width: 100%; }
@media (max-width: 900px) {
  #karta-kont .lista-kont li { flex-wrap: wrap; }
  #karta-kont .konto-przyciski { width: 100%; justify-content: flex-start; }
  #karta-kont #kod-sms-osoby .lista-kont li { grid-template-columns: 1fr 1fr; }
  #karta-kont #kod-sms-osoby .kto { grid-column: 1 / -1; }
}

/* PODGLĄD PRZED WYSŁANIEM DO PACJENTA (Piotr, 1.10.2026: „rób ładne podglądy (...) to, co pójdzie
   do pacjenta, powinno być podświetlone”). Telefon z dymkiem SMS-a + kartka maila na podświetlonej
   „scenie” z napisem „Tak to zobaczy pacjent”. Ten sam wygląd co w Finansach (components.css) -- zmieniając, zmień w obu. */
.pw-tlo{position:fixed;inset:0;z-index:1000;background:rgba(15,23,42,.45);backdrop-filter:blur(3px);display:flex;align-items:flex-start;justify-content:center;padding:32px 16px;overflow:auto;animation:pw-wejscie .15s ease-out}
@keyframes pw-wejscie{from{opacity:0}to{opacity:1}}
.pw-okno{background:#fff;border-radius:20px;box-shadow:0 40px 100px rgba(15,23,42,.35);width:100%;max-width:980px;overflow:hidden}
.pw-glowa{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:22px 26px 14px}
.pw-nad{margin:0 0 2px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#2563eb}
.pw-glowa h3{margin:0;font-size:22px;line-height:1.25;color:#0f172a}
.pw-kto{margin:4px 0 0;color:#475569;font-size:15px}
.pw-kto b{color:#0f172a}
.pw-x{border:0;background:#f1f5f9;color:#475569;width:38px;height:38px;border-radius:50%;font-size:16px;cursor:pointer;flex-shrink:0}
.pw-x:hover{background:#e2e8f0;color:#0f172a}
.pw-wstep{margin:0 26px 12px;padding:10px 14px;background:#f1f5f9;border-radius:10px;color:#334155;font-size:14.5px}
.pw-uwaga{margin:0 26px 12px;padding:10px 14px;background:#fff7e6;border:1px solid #f6d48b;border-radius:10px;color:#7a4b00;font-size:14.5px}
/* SCENA -- podświetlone tło pod tym, co dostanie pacjent */
.pw-scena{margin:4px 18px 0;padding:18px;border-radius:16px;background:linear-gradient(135deg,#eef4ff 0%,#f5f0ff 100%);border:1px solid #dbe6ff;position:relative}
.pw-scena-napis{position:absolute;top:-11px;left:22px;margin:0;padding:3px 12px;border-radius:999px;background:#2563eb;color:#fff;font-size:12px;font-weight:700;letter-spacing:.03em;box-shadow:0 4px 12px rgba(37,99,235,.35)}
.pw-kolumny{display:grid;grid-template-columns:minmax(260px,330px) 1fr;gap:20px;align-items:start;margin-top:6px}
.pw-kolumny > .pw-kol:only-child{grid-column:1 / -1;max-width:560px;justify-self:center;width:100%}
.pw-etykieta{margin:0 0 8px;font-size:13.5px;color:#334155}
.pw-etykieta b{color:#0f172a}
.pw-ikona{margin-right:4px}
/* TELEFON */
.pw-telefon{background:#0f172a;border-radius:30px;padding:10px;box-shadow:0 18px 40px rgba(15,23,42,.25)}
.pw-telefon-gora{display:flex;align-items:center;gap:8px;padding:6px 10px 10px;color:#e2e8f0}
.pw-awatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#60a5fa,#2563eb);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}
.pw-nadawca{font-weight:600;font-size:14px}
.pw-telefon-ekran{background:#f8fafc;border-radius:22px;padding:16px 12px 18px;min-height:150px;display:flex;flex-direction:column;gap:8px}
.pw-dymek{align-self:flex-start;max-width:92%;background:#e9eef6;color:#0f172a;border-radius:18px 18px 18px 6px;padding:10px 13px;font-size:14.5px;line-height:1.45;white-space:pre-wrap;word-break:break-word;box-shadow:0 1px 2px rgba(15,23,42,.08)}
.pw-drobne{margin:8px 0 0;font-size:12px;color:#64748b;text-align:center}
/* MAIL */
.pw-mail{background:#fff;border-radius:14px;border:1px solid #e2e8f0;box-shadow:0 10px 30px rgba(15,23,42,.10);overflow:hidden}
.pw-mail-glowa{margin:0;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;display:grid;gap:4px}
.pw-mail-glowa div{display:grid;grid-template-columns:62px 1fr;gap:8px;font-size:13.5px}
.pw-mail-glowa dt{color:#64748b;margin:0}
.pw-mail-glowa dd{margin:0;color:#0f172a;word-break:break-word}
.pw-mail-glowa .pw-temat dd{font-weight:700}
.pw-mail-tresc{padding:16px 18px;font-size:14.5px;line-height:1.6;color:#1e293b;white-space:pre-wrap;word-break:break-word;max-height:380px;overflow:auto}
.pw-link{color:#1d4ed8;background:#dbeafe;border-radius:4px;padding:0 3px;text-decoration:underline;text-underline-offset:2px;word-break:break-all}
/* DÓŁ */
.pw-dol{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:18px 26px 22px;flex-wrap:wrap}
.pw-anuluj{border:1px solid #cbd5e1;background:#fff;color:#334155;border-radius:12px;min-height:46px;padding:0 18px;font:inherit;font-weight:600;cursor:pointer}
.pw-anuluj:hover{background:#f8fafc;color:#0f172a}
.pw-wyslij{border:0;background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;border-radius:12px;min-height:46px;padding:0 24px;font:inherit;font-weight:700;font-size:15.5px;cursor:pointer;box-shadow:0 8px 20px rgba(37,99,235,.35)}
/* PRZYCISK „WYŚLIJ” ZNIKAŁ PO NAJECHANIU (Piotr, 15.10.2026): ogólne `button:hover` (mocniejsze niż sama klasa) dawało
   jasnoszare tło pod białym napisem. Element + klasa + :hover wygrywa i trzyma niebieskie tło. */
button.pw-wyslij:hover{background:linear-gradient(135deg,#1d4ed8,#1e40af);color:#fff;border:0;box-shadow:0 8px 20px rgba(37,99,235,.35)}
button.pw-anuluj:hover{background:#f8fafc;color:#0f172a;border-color:#94a3b8}
.pw-anuluj:focus-visible,.pw-wyslij:focus-visible,.pw-x:focus-visible{outline:3px solid #93c5fd;outline-offset:2px}
@media (max-width:760px){.pw-tlo{padding:10px}.pw-okno{border-radius:16px}.pw-glowa{padding:18px 16px 10px}.pw-scena{margin:4px 10px 0;padding:16px 12px}
  .pw-kolumny{grid-template-columns:1fr}.pw-wstep,.pw-uwaga{margin-left:16px;margin-right:16px}.pw-dol{padding:16px;flex-direction:column-reverse;align-items:stretch}.pw-dol button{width:100%}}

.pw-etykieta-dok{margin:18px 0 8px}
.pw-dokument{width:100%;height:520px;border:1px solid #e2e8f0;border-radius:12px;background:#eef1f5;box-shadow:0 10px 30px rgba(15,23,42,.10)}
@media (max-width:760px){.pw-dokument{height:420px}}

/* CO DZIAŁA (2.10.2026) -- spis funkcji do zaznaczania. */
#co-dziala .cd-pasek{position:sticky;top:0;z-index:2;background:var(--tlo-karty,#fff);padding:8px 0;display:flex;flex-direction:column;gap:8px;border-bottom:1px solid #e3e8ec}
#co-dziala .cd-liczniki{display:flex;flex-wrap:wrap;gap:6px;font-variant-numeric:tabular-nums}
#co-dziala .cd-licz{padding:3px 10px;border-radius:999px;font-weight:600;font-size:13px}
#co-dziala .cd-licz.dziala{background:#e3f3e8;color:#1d7a46}#co-dziala .cd-licz.blok{background:#fbe6e3;color:#b4231b}#co-dziala .cd-licz.nie{background:#eceff0;color:#56656b}
#co-dziala .cd-filtry{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
#co-dziala .cd-grupa{display:inline-flex;gap:4px;flex-wrap:wrap}
#co-dziala .cd-grupa button.wybrana{outline:2px solid var(--akcent,#2563eb);outline-offset:-2px}
#co-dziala #cd-szukaj{flex:1 1 220px;min-width:0}
#co-dziala .cd-tytul{margin:14px 0 6px;font-size:16px}
#co-dziala .cd-ul{list-style:none;margin:0;padding:0;border:1px solid #e3e8ec;border-radius:10px;overflow:hidden}
#co-dziala .cd-ul li{display:grid;grid-template-columns:1fr auto;gap:6px 14px;padding:9px 12px;border-top:1px solid #e3e8ec;align-items:center}
#co-dziala .cd-ul li:first-child{border-top:0}
#co-dziala .cd-ul li.cd-dziala{box-shadow:inset 4px 0 0 #1d7a46}#co-dziala .cd-ul li.cd-blok{box-shadow:inset 4px 0 0 #b4231b}
#co-dziala .cd-t{min-width:0;display:flex;flex-direction:column}
#co-dziala .cd-wybor{display:flex;border:1px solid #d5dde2;border-radius:8px;overflow:hidden}
#co-dziala .cd-wybor button{border:0;border-radius:0;background:transparent;padding:6px 10px;font-size:12.5px;font-weight:600;color:#56656b;cursor:pointer;white-space:nowrap}
#co-dziala .cd-wybor button+button{border-left:1px solid #d5dde2}
#co-dziala .cd-wybor button.tak.dziala{background:#e3f3e8;color:#1d7a46}#co-dziala .cd-wybor button.tak.blok{background:#fbe6e3;color:#b4231b}#co-dziala .cd-wybor button.tak.nie{background:#eceff0;color:#1f2a30}
@media (max-width:640px){#co-dziala .cd-ul li{grid-template-columns:1fr}#co-dziala .cd-wybor{justify-self:start}}

/* ===== BADANIE LEKARSKIE KIEROWCÓW (2.10.2026) -- karta w wizycie i rejestr; public/kierowcy/kierowcy.mjs ===== */
.kw-wizyta { margin: 0 0 14px; }
.kw-wizyta.kw-cicho { display: flex; justify-content: flex-end; margin: 0 0 6px; }
.kw-zacznij-cicho { background: none; border: 1px dashed var(--linia-mocna); color: var(--pod); font-size: 12.5px; padding: 4px 10px; border-radius: 999px; }
.kw-zacznij-cicho:hover { color: var(--akcent); border-color: var(--akcent); }
.kw-karta { background: var(--karta); border: 1px solid var(--linia); border-radius: 14px; box-shadow: var(--karta-cien); padding: 16px 18px; border-top: 4px solid var(--granat); }
.kw-start { display: flex; gap: 16px; align-items: center; justify-content: space-between; flex-wrap: wrap; }
.kw-start .pod { display: block; margin-top: 2px; }
.kw-gora { display: flex; gap: 12px; justify-content: space-between; align-items: flex-start; flex-wrap: wrap; margin-bottom: 12px; }
.kw-gora h3, .kw-gora h2 { margin: 0 0 2px; font-size: 17px; }
.kw-druki { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.kw-druki a.przycisk { text-decoration: none; display: inline-flex; align-items: center; padding: 6px 11px; border: 1px solid var(--linia-mocna); border-radius: 8px; color: var(--tekst); background: #fff; font-size: 13px; font-weight: 600; }
.kw-druki a.przycisk:hover { border-color: var(--akcent); color: var(--akcent); }
.kw-druki a.przycisk.glowny { background: var(--akcent); border-color: var(--akcent); color: #fff; }
.kw-chip { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 700; background: var(--linia-cicha); color: var(--pod); white-space: nowrap; }
.kw-chip.kw-ok { background: var(--dobrze-tlo); color: var(--dobrze); }
.kw-chip.kw-zle { background: #fef2f2; color: var(--blad); }
.kw-kroki { display: flex; gap: 4px; flex-wrap: wrap; border-bottom: 1px solid var(--linia); padding-bottom: 10px; margin-bottom: 14px; }
.kw-kroki button { background: none; border: 1px solid transparent; border-radius: 999px; padding: 5px 12px 5px 6px; font-size: 13px; color: var(--pod); display: inline-flex; gap: 6px; align-items: center; }
.kw-kroki button i { font-style: normal; width: 20px; height: 20px; border-radius: 50%; background: var(--linia-cicha); display: inline-grid; place-items: center; font-size: 11px; font-weight: 700; }
.kw-kroki button.tak { color: var(--akcent); border-color: var(--akcent); background: var(--akcent-tlo); }
.kw-kroki button.tak i { background: var(--akcent); color: #fff; }
.kw-tresc h4 { margin: 14px 0 8px; font-size: 14px; }
.kw-tresc h4:first-child { margin-top: 0; }
.kw-tresc h4 .pod { font-weight: 400; }
.kw-siatka { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px 12px; margin-bottom: 10px; }
.kw-siatka.kw-4 { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.kw-pole { display: flex; flex-direction: column; gap: 3px; font-size: 12px; color: var(--pod); min-width: 0; }
.kw-pole.kw-szer { margin-bottom: 10px; }
.kw-pole input, .kw-pole textarea { font-size: 14px; color: var(--tekst); }
.kw-wybor-pod { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; margin-bottom: 6px; }
.kw-radio { display: flex; flex-direction: column; gap: 2px; border: 1px solid var(--linia-mocna); border-radius: 10px; padding: 10px 12px; cursor: pointer; position: relative; }
.kw-radio input { position: absolute; opacity: 0; pointer-events: none; }
.kw-radio span { font-size: 12px; color: var(--pod); }
.kw-radio.tak { border-color: var(--akcent); background: var(--akcent-tlo); box-shadow: inset 0 0 0 1px var(--akcent); }
.kw-radio.tak.kw-zle { border-color: var(--blad); background: #fef2f2; box-shadow: inset 0 0 0 1px var(--blad); }
.kw-radio:focus-within { outline: 2px solid var(--akcent); outline-offset: 2px; }
.kw-tn { display: inline-flex; border: 1px solid var(--linia-mocna); border-radius: 8px; overflow: hidden; flex: none; }
.kw-tn button { border: 0; border-radius: 0; background: #fff; padding: 4px 11px; font-size: 12.5px; color: var(--pod); min-height: 0; }
.kw-tn button + button { border-left: 1px solid var(--linia-mocna); }
.kw-tn button.tak { background: var(--akcent-tlo); color: var(--akcent); font-weight: 700; }
.kw-tn button.tak.kw-tak { background: #fef2f2; color: var(--blad); }
.kw-osw { display: flex; flex-direction: column; border: 1px solid var(--linia); border-radius: 10px; overflow: hidden; }
.kw-o-nagl { padding: 8px 12px; background: var(--linia-cicha); font-weight: 600; font-size: 13px; }
.kw-o-wiersz { display: grid; grid-template-columns: 34px 1fr auto; gap: 10px; align-items: center; padding: 6px 12px; border-top: 1px solid var(--linia-cicha); font-size: 13.5px; }
.kw-o-wiersz i, .kw-o-nagl i { font-style: normal; color: var(--pod); font-variant-numeric: tabular-nums; margin-right: 8px; }
.kw-o-sub { padding-left: 26px; }
.kw-o-wiersz span { min-width: 0; }
.kw-o-opis { display: block; width: 100%; margin-top: 5px; }
label.kw-o-wiersz { cursor: pointer; }
.kw-tabela { display: flex; flex-direction: column; border: 1px solid var(--linia); border-radius: 10px; overflow: hidden; margin-bottom: 8px; }
.kw-wiersz { display: grid; grid-template-columns: minmax(180px, 1.3fr) auto minmax(0, 1fr); gap: 10px; align-items: center; padding: 6px 12px; border-top: 1px solid var(--linia-cicha); font-size: 13.5px; }
.kw-tabela .kw-wiersz:first-child { border-top: 0; }
.kw-wiersz input { min-width: 0; font-size: 13.5px; padding: 5px 8px; }
.kw-wiersz input.kw-brak { border-color: var(--blad); background: #fef2f2; }
.kw-wiersz.kw-luz { border: 0; padding: 8px 0; grid-template-columns: auto auto 1fr; }
.kw-dwa { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.kw-wzrok .kw-wiersz { grid-template-columns: minmax(220px, 1.6fr) 1fr 1fr 1.3fr; }
.kw-wzrok .kw-wiersz span i { font-style: normal; color: var(--pod); margin-right: 4px; font-variant-numeric: tabular-nums; }
.kw-wiersz.kw-nagl { background: var(--linia-cicha); font-size: 12px; font-weight: 700; color: var(--pod); }
.kw-lista .kw-wiersz { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); }
.kw-norma { background: var(--akcent-tlo); border: 1px solid #cfe0ff; color: #1e3a8a; border-radius: 10px; padding: 9px 12px; font-size: 13px; margin-bottom: 10px; }
.kw-grupy { display: flex; flex-direction: column; gap: 6px; margin-bottom: 6px; }
.kw-grupa { display: flex; gap: 10px; align-items: center; border: 1px solid var(--linia-mocna); border-radius: 10px; padding: 9px 12px; cursor: pointer; font-weight: 600; }
.kw-grupa i { font-weight: 400; color: var(--pod); font-style: normal; font-size: 12px; }
.kw-grupa.tak { border-color: var(--akcent); background: var(--akcent-tlo); }
.kw-kody { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; margin: -2px 0 6px; }
.kw-kody button i { font-style: normal; color: var(--pod); font-weight: 400; }
.kw-termin { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.kw-termin input { width: auto; }
.kw-wydaj { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--linia); display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.kw-potwierdz { flex: 1 1 100%; background: #fffbeb; border: 1px solid #fde68a; color: #78350f; padding: 9px 12px; border-radius: 10px; font-size: 13px; }
.kw-wydane { display: flex; flex-direction: column; gap: 6px; }
.kw-wydane-nr { font-size: 16px; }
.kw-wydane input { max-width: 420px; }
.kw-blad { color: var(--blad); font-size: 13px; }
.kw-dol { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--linia-cicha); }
.kw-nawig { display: flex; gap: 6px; margin-left: auto; }
.kw-rejestr .kw-druki select, .kw-rejestr .kw-druki input { width: auto; }
.kw-rejestr .kw-druki input { min-width: 220px; }
.kw-starosta { background: #fffbeb; border: 1px solid #fde68a; color: #78350f; border-radius: 10px; padding: 9px 12px; margin: 0 0 12px; display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; font-size: 13px; }
.kw-tab-wrap { overflow-x: auto; }
.kw-tab { width: 100%; border-collapse: collapse; font-size: 13px; }
.kw-tab th { text-align: left; font-size: 12px; color: var(--pod); font-weight: 700; padding: 7px 8px; border-bottom: 1px solid var(--linia); white-space: nowrap; }
.kw-tab td { padding: 8px; border-bottom: 1px solid var(--linia-cicha); vertical-align: top; font-variant-numeric: tabular-nums; }
.kw-tab tr.kw-skr td { color: var(--pod); text-decoration: line-through; }
.kw-tab tr.kw-skr td:nth-last-child(3) { text-decoration: none; }
.kw-akcje { white-space: nowrap; }
.kw-akcje a { color: var(--akcent); text-decoration: none; font-weight: 600; margin-right: 8px; }
.kw-akcje a:hover { text-decoration: underline; }
@media (max-width: 720px) {
  .kw-wiersz, .kw-wzrok .kw-wiersz { grid-template-columns: 1fr; }
  .kw-o-wiersz { grid-template-columns: 30px 1fr; }
  .kw-o-wiersz .kw-tn { grid-column: 2; justify-self: start; }
}

/* RÓWNE POLA (Piotr, 2.10.2026: „nie wszystko jest równo”). Podpis może zająć dwie linijki --
   pole i tak stoi na tej samej wysokości co sąsiednie (wyrównanie do dołu komórki). */
.kw-siatka { align-items: end; }
.kw-pole > span { line-height: 1.25; }
.kw-sluch .kw-wiersz { grid-template-columns: minmax(220px, 1.6fr) 1fr 1fr; }
.kw-wiersz.kw-dwie { grid-template-columns: minmax(180px, 1.3fr) auto; justify-content: start; }
.kw-lista .kw-wiersz { align-items: center; }
.kw-tresc > .kw-pole.kw-szer textarea { min-height: 54px; }

.kw-wiersz.kw-palenie { grid-template-columns: minmax(180px, 1.3fr) 1fr 1fr; }
.kw-szybko { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 0 0 8px; }
.kw-termin { align-items: stretch; }
.kw-termin button { align-self: stretch; }
.kw-termin .pod { align-self: center; }
.kw-pole select { font-size: 14px; }
.kw-usun { display: inline-flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.kw-usun button { color: var(--blad); }
.kw-usun button.kw-usun-pewne { background: #fef2f2; border: 1px solid #fecaca; }

/* SZYBKIE OCENY WZROKU I SŁUCHU (2.10.2026) */
.kw-wzrok .kw-wiersz { grid-template-columns: minmax(200px, 1.35fr) minmax(220px, 1fr) minmax(220px, 1fr) minmax(0, 1fr); }
.kw-sluch .kw-wiersz { grid-template-columns: minmax(200px, 1.35fr) minmax(220px, 1fr) minmax(220px, 1fr); }
.kw-oko { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.kw-ocena { display: inline-flex; border: 1px solid var(--linia-mocna); border-radius: 8px; overflow: hidden; align-self: flex-start; }
.kw-ocena button { border: 0; border-radius: 0; background: #fff; padding: 4px 8px; font-size: 12px; color: var(--pod); min-height: 0; white-space: nowrap; }
.kw-ocena button + button { border-left: 1px solid var(--linia-mocna); }
.kw-ocena button.tak { background: var(--dobrze-tlo); color: var(--dobrze); font-weight: 700; }
.kw-ocena button.tak.kw-tak { background: #fef2f2; color: var(--blad); }
.kw-ocena button.tak[data-v="nb"] { background: var(--linia-cicha); color: var(--tekst); }
.kw-oko .kw-wartosc { padding: 4px 8px; font-size: 13px; }
@media (max-width: 1100px) { .kw-wzrok .kw-wiersz, .kw-sluch .kw-wiersz { grid-template-columns: 1fr 1fr; } .kw-wzrok .kw-wiersz > span:first-child, .kw-sluch .kw-wiersz > span:first-child { grid-column: 1 / -1; } }
/* OCENY W JEDNEJ LINII: przyciski i małe pole wartości obok siebie -- wiersz o połowę niższy. */
.kw-wzrok .kw-wiersz { grid-template-columns: minmax(170px, 1fr) minmax(250px, 1.25fr) minmax(250px, 1.25fr) minmax(140px, 0.9fr); gap: 8px; padding: 5px 10px; }
.kw-sluch .kw-wiersz { grid-template-columns: minmax(170px, 1fr) minmax(250px, 1.25fr) minmax(250px, 1.25fr); gap: 8px; padding: 5px 10px; }
.kw-oko { flex-direction: row; align-items: center; gap: 6px; }
.kw-ocena { flex: none; }
.kw-ocena button { padding: 4px 7px; font-size: 11.5px; }
.kw-oko .kw-wartosc { width: 68px; flex: none; padding: 4px 6px; font-size: 12.5px; }
.kw-wzrok .kw-wiersz > input { padding: 4px 8px; font-size: 12.5px; }
.kw-wzrok .kw-wiersz > span:first-child { font-size: 13px; }
.kw-oko .kw-wartosc, .kw-wzrok .kw-wiersz > input { height: 28px; min-height: 0; line-height: 1.2; border-radius: 7px; }
.kw-ocena button { height: 28px; display: inline-flex; align-items: center; }
.kw-wzrok .kw-wiersz, .kw-sluch .kw-wiersz { min-height: 40px; }
.kw-wzrok .kw-wiersz { grid-template-columns: minmax(150px, 0.85fr) minmax(320px, 1.3fr) minmax(320px, 1.3fr) minmax(120px, 0.8fr); }
.kw-sluch .kw-wiersz { grid-template-columns: minmax(150px, 0.85fr) minmax(320px, 1.3fr) minmax(320px, 1.3fr); }

/* BADANIE PRÓBNE (2.10.2026) */
.kw-chip.kw-proba { background: #fff7ed; color: #c2410c; }
.kw-karta.kw-karta-proba { border-top-color: #f97316; background-image: repeating-linear-gradient(-45deg, transparent 0 22px, rgba(249,115,22,.035) 22px 44px); }
.kw-tab tr.kw-wiersz-proba td { color: #c2410c; background: #fffaf5; }
.kw-pokaz-proby { display: inline-flex; gap: 6px; align-items: center; font-size: 13px; color: var(--pod); }
.kw-pokaz-proby input { width: auto; }

/* WIADOMOŚCI DO PACJENTA -- edytor wzorów (2.10.2026), ten sam wygląd co w kalendarzu. */
.ww { display: flex; flex-direction: column; gap: 14px; }
.ww-gora { display: flex; flex-direction: column; gap: 10px; }
.ww-kto { display: flex; gap: 8px; flex-wrap: wrap; }
.ww-karta { padding: 0; overflow: hidden; }
.ww-glowa { width: 100%; display: flex; gap: 12px; align-items: center; justify-content: space-between; background: none; border: 0; padding: 14px 16px; text-align: left; cursor: pointer; font: inherit; }
.ww-glowa:hover { background: #f8fafc; }
.ww-znak { margin-left: auto; font-size: 12px; padding: 3px 9px; border-radius: 999px; background: #f1f5f9; color: #64748b; white-space: nowrap; }
.ww-znak.ww-zmieniony { background: #ecfdf5; color: #047857; font-weight: 700; }
.ww-strzalka { color: #94a3b8; transition: transform .15s; }
.ww-otwarta .ww-strzalka { transform: rotate(180deg); }
.ww-cialo { border-top: 1px solid #e2e8f0; padding: 16px; }
.ww-uklad { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 18px; align-items: start; }
@media (max-width: 1000px) { .ww-uklad { grid-template-columns: 1fr; } }
.ww-pola { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.ww-pomoc { margin: 0; font-size: 13px; }
.ww-chipy { display: flex; flex-wrap: wrap; gap: 5px; }
.ww-chip { border: 1px solid #c7d2fe; background: #eef2ff; color: #3730a3; border-radius: 7px; padding: 3px 8px; font: 600 12px ui-monospace, SFMono-Regular, Menlo, monospace; cursor: pointer; }
.ww-chip:hover { background: #e0e7ff; }
.ww-pole { display: flex; flex-direction: column; gap: 4px; font-size: 13px; font-weight: 600; color: #334155; }
.ww-pole textarea, .ww-pole input { font: 14px/1.5 inherit; font-weight: 400; border: 1px solid #cbd5e1; border-radius: 9px; padding: 9px 11px; resize: vertical; }
.ww-licznik { font-style: normal; font-weight: 400; color: #64748b; }
.ww-licznik.ww-uwaga { color: #b45309; font-weight: 700; }
.ww-przyciski { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.ww-podglad { position: sticky; top: 10px; display: flex; flex-direction: column; gap: 10px; min-width: 0; background: linear-gradient(180deg, #f0f9ff, #f8fafc); border: 1px solid #bae6fd; border-radius: 14px; padding: 12px; }
.ww-napis { margin: 0; font-size: 12px; font-weight: 700; color: #0369a1; text-transform: uppercase; letter-spacing: .04em; }
.ww-napis .cem-muted { text-transform: none; letter-spacing: 0; font-weight: 400; }
.ww-telefon { background: #0f172a; border-radius: 22px; padding: 14px 12px; }
.ww-dymek { background: #e2e8f0; color: #0f172a; border-radius: 16px 16px 16px 4px; padding: 10px 12px; font-size: 13.5px; line-height: 1.45; white-space: pre-wrap; word-break: break-word; max-width: 92%; }
.ww-mail { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; overflow: hidden; }
.ww-temat { padding: 9px 12px; font-weight: 700; border-bottom: 1px solid #e2e8f0; font-size: 14px; }
.ww-ramka { width: 100%; height: 560px; border: 0; display: block; background: #f1f5f9; }
.ww-karta { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; }
.ww-glowa { background: none; border: 0; text-align: left; cursor: pointer; font: inherit; color: inherit; }

/* Kratki „Medycyna estetyczna” i opis dojazdu (2.10.2026). */
.ww-es-lista { max-height: 460px; overflow-y: auto; border: 1px solid #e2e8f0; border-radius: 10px; padding: 4px 10px; }
.ww-es { display: flex; gap: 8px; align-items: baseline; padding: 6px 0; border-bottom: 1px solid #f1f5f9; font-size: 14px; cursor: pointer; }
.ww-es:last-child { border-bottom: 0; }
.ww-es input { flex: none; }

/* Film „Jak do nas dojść” (2.10.2026). */
.ww-film { border: 1px solid #e2e8f0; border-radius: 10px; padding: 12px; display: flex; flex-direction: column; gap: 8px; }
.ww-film-podglad { width: 100%; max-width: 360px; border-radius: 10px; background: #0f172a; }
.ww-film-wgraj { cursor: pointer; }
.ww-film progress { width: 100%; }
.ww-film-wgraj { display: inline-flex; align-items: center; padding: 8px 14px; border: 1px solid #cbd5e1; border-radius: 10px; background: #fff; color: #1e3a8a; font-weight: 600; }
.ww-film-wgraj:hover { background: #eff6ff; }

/* Ocena ankiety „Samopoczucie” w karcie wizyty (2.10.2026). */
.ank-ocena { border: 1px solid #c7d2fe; background: #f8faff; border-radius: 12px; padding: 12px 14px; margin: 10px 0; }
.ank-oc-t { margin: 0 0 6px; font-weight: 700; color: #1e3a8a; }
.ank-oc-kier, .ank-oc-flagi { margin: 6px 0; padding-left: 18px; }
.ank-oc-kier li, .ank-oc-flagi li { margin: 3px 0; }
.ank-oc-pilne { color: #b91c1c; font-weight: 700; }
.ank-oc-wazne { color: #9a3412; font-weight: 600; }
.ank-oc-ok { color: #047857; }
.ank-oc-testy { width: 100%; border-collapse: collapse; font-size: 13.5px; margin: 8px 0; }
.ank-oc-testy td { border-top: 1px solid #e2e8f0; padding: 5px 6px; vertical-align: top; }
.ank-oc-szcz { margin: 4px 0 0; padding-left: 18px; font-size: 12.5px; color: #334155; }
.ank-oc-szcz li { margin: 2px 0; }
.ank-oc-dalej { margin-top: 4px; font-size: 12.5px; color: #1e3a8a; }
.ank-oc-wsad { margin: 4px 0 6px; font-size: 12.5px; }
.ank-oc-wsad summary { cursor: pointer; color: #1e3a8a; font-weight: 600; }
.ank-oc-wsad p { margin: 3px 0; }
.ank-oc-neuro { margin-top: 8px; }
.ank-oc-pkt { white-space: nowrap; font-variant-numeric: tabular-nums; font-weight: 700; }
.ank-oc-dod td { background: #fff7ed; }
.ank-oc-adhd { margin: 6px 0; }

/* DIVA-5 w karcie wizyty (2.10.2026) -- dwa wiersze, małe pola obok siebie (zrzut Piotra 22:16). */
.dv summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: baseline; }
.dv-otworz { display: inline-flex; gap: 10px; font-size: 13px; }
.dv-w { display: flex; flex-wrap: wrap; gap: 6px 18px; align-items: center; margin: 8px 0 0; font-size: 13.5px; }
.dv-w > span { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.dv .dv-w select, .dv .dv-w input { width: auto; min-width: 0; min-height: 0; height: 30px; padding: 2px 8px; margin: 0; font-size: 13.5px; font-weight: 500; border-radius: 7px; }
.dv .dv-w select { padding-right: 24px; background-position: right 7px center; }
.dv .dv-w select[data-dv^="uwaga"], .dv .dv-w select[data-dv^="nad"] { width: 54px; }
.dv .dv-w select[data-dv^="srodowiska"], .dv .dv-w select[data-dv="uposledzenie"] { width: 96px; }
.dv .dv-w select[data-dv="wniosek"] { max-width: 300px; }
.dv .dv-uw input { width: 170px; }
.dv-gr b { font-weight: 700; color: #1e3a8a; margin-right: 2px; }
.dv-progi { margin: 6px 0 0; font-size: 12.5px; }
.dv-otworz a { padding: 3px 10px; border: 1px solid #1e3a8a; border-radius: 8px; text-decoration: none; color: #1e3a8a; background: #eff6ff; }
.dv-otworz a:first-child { background: #1e3a8a; color: #fff; }
.dv .dv-w button { min-height: 0; height: 30px; padding: 2px 16px; font-size: 13.5px; }
.dv-kier { margin: 8px 0 0; padding: 7px 10px; background: #eff6ff; border-left: 3px solid #1e3a8a; border-radius: 6px; font-size: 13.5px; }

/* Wizyty w kalendarzu w karcie pacjenta (2.10.2026). */
.kp-terminy { border: 1px solid #e2e8f0; border-radius: 10px; padding: 8px 14px; margin: 10px 0; background: #f8fafc; }
.kp-terminy h3 { margin: 4px 0 6px; font-size: 15px; }
.kp-terminy ul { margin: 2px 0 8px; padding-left: 18px; }
.kp-terminy li { margin: 2px 0; font-size: 14px; }
.kp-t-n { margin: 6px 0 2px; font-weight: 700; color: #1e3a8a; font-size: 13px; }

/* ============================================================================================
   TELEFON (Piotr, 3.10.2026: „żeby się dobrze używało na telefonie (...) żeby nic nie wychodziło poza
   obszar telefonu (...) żeby naprawdę dobrze się klikało”). Wyłącznie do 680 px -- komputer bez zmian.
   Wzięte z pomiaru wszystkich zakładek na 390 px (wystające elementy, cele dotyku < 36 px).
   ============================================================================================ */
@media (max-width: 680px) {
  /* Rząd „Od / Do / Pokaż” (Przychody, Koszty, Wynik, Faktury) wystawał poza ekran. */
  body .przychody-okres { margin-left: 0; width: 100%; flex-wrap: wrap; }
  body .przychody-okres label { flex: 1 1 140px; min-width: 0; }
  body .przychody-okres input, body .przychody-okres select { width: 100%; min-width: 0; }
  body .przychody-okres button { flex: 1 1 100%; }
  /* Cele dotyku: co najmniej ~40 px wysokości (palec), kratki 22 px. */
  /* Bez wizyt w siatce kalendarza: ich wysokość = długość wizyty (15 min nie może urosnąć). */
  button:not(.kal-wizyta), .przycisk, select, input:not([type=checkbox]):not([type=radio]):not([type=range]) { min-height: 40px !important; }
  button.male, .male { min-height: 38px !important; }
  input[type=checkbox], input[type=radio] { width: 22px !important; height: 22px !important; }
  .pasek-edytora button { min-width: 40px !important; min-height: 40px !important; }
  #kroki-recepty button { min-height: 44px !important; }
  .wejscie-historii, .mikrofon { min-height: 40px !important; }
  #link-finanse { min-height: 40px !important; display: flex; align-items: center; }
  /* Kalendarz, widok miesiąca: pusty dzień nie zajmuje pół ekranu. */
  .kal-siatka:not(.tydzien) .kal-komorka { min-height: 44px !important; }
  /* Tabele szersze niż ekran przewijają się w swoim pudełku, a nie razem ze stroną. */
  .tabela-przewijana, .karta table { max-width: 100%; }
  /* Podpowiedź w polu szukania była ucięta („…albo nazwa lek”) -- mniejsza czcionka tylko dla podpowiedzi. */
  input::placeholder, textarea::placeholder { font-size: 14px; }
  /* Lupa nachodziła na napis w polu szukania (kalendarz). */
  .szukajka .szukajka-lupa ~ input { padding-left: 44px !important; }
  /* Karta pacjenta: lupa stała NAD polem -- teraz obok. */
  .kp-pole { display: flex; align-items: center; gap: 8px; }
  .kp-pole input { flex: 1 1 auto; min-width: 0; }
  /* Ustawienia: 22 pozycje w dwóch kolumnach zamiast ściany przycisków na cały ekran. */
  .panel-spis { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
  .panel-spis button { padding: 6px 8px !important; font-size: 13px !important; border-radius: 10px !important; text-align: center; line-height: 1.2; }
}

/* BADANIE KIEROWCÓW: ZAMKNIĘTA KARTA WYGLĄDA NA ZAMKNIĘTĄ (Piotr, 5.10.2026: „wygląda to tak, jakby
   przyciski w ogóle nie działały"). Po wydaniu orzeczenia przyciski są wyłączone -- teraz są szare,
   kursor mówi „nie wolno", a nad treścią stoi pasek z „Popraw orzeczenie". */
.kw-tresc button:disabled, .kw-tresc input:disabled, .kw-tresc textarea:disabled, .kw-tresc select:disabled { cursor: not-allowed; }
.kw-tresc .kw-tn button:disabled, .kw-tresc .kw-ocena button:disabled { opacity: .6; }
.kw-zamknieta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 10px; padding: 8px 12px;
  border: 1px solid #f5d28a; border-radius: 10px; background: #fff8e6; font-size: 13.5px; }
/* NUMERACJA REJESTRU (Piotr, 5.10.2026: rejestr nie musi zaczynać od 1). */
.kw-numeracja { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 10px; font-size: 13.5px; }
.kw-num-form { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.kw-num-form input { width: 110px; padding: 4px 8px; }

/* ZASADY PIOTRA (5.10.2026) -- na górze „Co działa”: zasada, pod nią drogi ze światłami. */
#co-dziala .cd-zasady{margin:0 0 18px}
#co-dziala .cd-zasady .cd-ul li{grid-template-columns:1fr}
#co-dziala .cd-zasady .cd-drogi{list-style:none;margin:6px 0 0;padding:0}
#co-dziala .cd-zasady .cd-drogi li{display:block;border:0;padding:2px 0;box-shadow:none;font-size:14px}
#co-dziala .cd-zasady .cd-zle{color:#b4231b}
#co-dziala .cd-zasady .cd-czeka{color:#9a5b00}

/* „WYJAŚNIJ” W OCENIE ANKIETY (Piotr, 7.10.2026: „partiami, żeby to było rozwinięte”). */
.ank-oc-wyj { margin: 6px 0 4px; border-left: 3px solid var(--akcent); padding: 2px 0 2px 10px;
  font-weight: 400; color: var(--tekst); font-style: normal; }
.ank-oc-wyj > summary { cursor: pointer; font-weight: 600; color: var(--akcent); font-size: 13px; }
.ank-oc-wyj p { margin: 8px 0 3px; }
.ank-oc-wyj ul { margin: 0 0 4px; padding-left: 20px; }
.ank-oc-wyj li { margin: 2px 0; }
.ank-zakl { display: flex; flex-wrap: wrap; gap: 4px; margin: 8px 0 10px; border-bottom: 1px solid #c7d2fe; padding-bottom: 6px; }
.ank-zakl > button { border: 1px solid #c7d2fe; background: #fff; color: #1e3a8a; border-radius: 999px; padding: 4px 12px; font-size: 13px; cursor: pointer; min-height: 0; height: auto; line-height: 1.3; box-shadow: none; }
.ank-zakl > button[aria-selected="true"] { background: #1e3a8a; border-color: #1e3a8a; color: #fff; font-weight: 600; }
.ank-zakl-panel { line-height: 1.45; }
.ank-zakl-panel ul, .ank-zakl-panel ol { margin: 2px 0 8px; padding-left: 20px; }
.ank-zakl-panel li { margin: 3px 0; }
.ank-kon-wsp p { margin: 0 0 6px; }
.ank-kon-tyt { font-weight: 700; color: #1e3a8a; margin: 10px 0 3px; }
.ank-kon-pil { margin: 0 0 6px; }
.ank-kon-niedawaj { border-left: 3px solid #dc2626; background: #fef2f2; padding: 6px 10px; margin: 0 0 8px; border-radius: 6px; }
.ank-kon-bezp { padding: 6px 10px; border-radius: 6px; margin: 0 0 8px; }
.ank-kon-leki > li { margin-bottom: 8px; }
.ank-kon-kiedy { color: #15803d; font-weight: 600; }
.ank-kon-nie { color: #b91c1c; font-weight: 600; }
.ank-oc-wyj-czesc { margin: 10px 0 4px; padding: 6px 0 2px 10px; border-left: 2px solid var(--linia-cicha, #e3e7ec); }
.ank-oc-wyj-tyt { font-weight: 700; margin: 0 0 2px !important; }
.ank-oc-wyj-odp { border-collapse: collapse; margin: 2px 0 4px; font-size: 13px; }
.ank-oc-wyj-odp td { border-bottom: 1px solid var(--linia-cicha, #e3e7ec); padding: 3px 8px 3px 0; vertical-align: top; }

/* SERWER: DYSK (7.10.2026) */
.sd-czesc { margin: 0 0 14px; }
.sd-gora { display: flex; justify-content: space-between; align-items: baseline; }
.sd-proc { font-weight: 700; font-size: 18px; }
.sd-pasek { height: 12px; background: #e5e7eb; border-radius: 6px; overflow: hidden; margin: 4px 0; }
.sd-wyp { height: 100%; border-radius: 6px; }
.sd-wyp.sd-zielony { background: #16a34a; } .sd-wyp.sd-zolty { background: #f59e0b; } .sd-wyp.sd-czerwony { background: #dc2626; }
.sd-proc.sd-zielony { color: #15803d; } .sd-proc.sd-zolty { color: #b45309; } .sd-proc.sd-czerwony { color: #b91c1c; }
.sd-tyt { font-weight: 700; margin: 12px 0 4px; }
.sd-tab { border-collapse: collapse; font-size: 13px; }
.sd-tab td { padding: 3px 12px 3px 0; border-bottom: 1px solid #e5e7eb; }

/* DŁUG PACJENTA PRZY WIZYCIE (7.10.2026) */
.wizyta-dlug { margin: 6px 0; padding: 8px 12px; border-radius: 10px; background: #fef2f2; border: 2px solid #dc2626; color: #7f1d1d; }
.wizyta-dlug b { color: #b91c1c; }
.mf-pola { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end; }
.mf-pola label { flex: 1 1 160px; }
.mf-pola label.kwadracik { flex: 0 0 auto; }
.leki-robione { margin: 8px 0; padding: 8px 10px; border: 1px dashed #93c5fd; border-radius: 10px; background: #f8fbff; }
.leki-robione-tytul { margin: 0 0 6px; font-weight: 600; color: #1e3a8a; }
.lek-robiony { display: flex; gap: 6px; align-items: stretch; margin: 4px 0; }
.lek-robiony > button:first-child { flex: 1; text-align: left; display: flex; flex-direction: column; gap: 2px; }

/* PODZIAŁ SKIEROWANIA DO POBRANIA U NAS (Piotr, 8.10.2026) -- kratki w dwóch kolumnach, przewijane przy 50 badaniach. */
.okno-podzialu .okno-srodek { width: min(760px, 100%); }
.podzial-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 4px 16px;
  max-height: 55vh; overflow-y: auto; padding: 6px 2px; border-top: 1px solid #e5e7eb; border-bottom: 1px solid #e5e7eb; }
.podzial-badanie { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; line-height: 1.3; padding: 4px 2px; cursor: pointer; }
.podzial-badanie input { margin-top: 2px; flex: none; }
.podzial-licznik { font-weight: 600; margin: 6px 0; }
.okno-podzialu .przyciski { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }

/* NOWE OKNO (Piotr, 8.10.2026) -- mała strzałka ↗ po prawej stronie każdej pozycji menu. Blada, wyraźniejsza
   po najechaniu; na telefonie zawsze widoczna (tam nie ma najechania). */
#menu-boczne nav button span.nowe-okno { margin-left: auto; width: 22px; height: 22px; display: inline-flex;
  align-items: center; justify-content: center; border-radius: 6px; font-size: 13px; color: #94a3b8; opacity: .35; }
#menu-boczne nav button:hover span.nowe-okno { opacity: 1; }
#menu-boczne nav button span.nowe-okno:hover { background: #e2e8f0; color: #1d4ed8; }
@media (hover: none) { #menu-boczne nav button span.nowe-okno { opacity: .7; } }

/* DZIENNICZEK SAMOPOCZUCIA W KARCIE (Piotr, 8.10.2026). */
.wiz-dzienniczek .dz-stan { margin: 4px 0 10px; }
.dz-wykres { width: 100%; height: auto; max-height: 260px; display: block; margin: 6px 0 10px; }
.dz-os { stroke: #e2e8f0; stroke-width: 1; } .dz-os.zero { stroke: #94a3b8; stroke-dasharray: 4 3; }
.dz-opis { font-size: 11px; fill: #64748b; }
.dz-sen { fill: #c7d2fe; } .dz-sen.krotki { fill: #fca5a5; }
.dz-linia { fill: none; stroke: #1d4ed8; stroke-width: 2.5; }
.dz-pkt { fill: #1d4ed8; } .dz-pkt.czerwony { fill: #dc2626; }
.dz-tabela-ramka { overflow-x: auto; }
.dz-tabela { border-collapse: collapse; width: 100%; font-size: 13px; }
.dz-tabela th, .dz-tabela td { border-bottom: 1px solid #eef2f7; padding: 5px 6px; text-align: left; vertical-align: top; }
.dz-tabela th { color: #64748b; font-weight: 600; white-space: nowrap; }
.dz-n { font-weight: 700; text-align: center !important; }
.dz-n0, .dz-n1 { color: #1e3a8a; } .dz-n2 { color: #2563eb; } .dz-n3 { color: #475569; } .dz-n4 { color: #b45309; } .dz-n5, .dz-n6 { color: #dc2626; }
.dz-znak { display: inline-block; padding: 1px 7px; border-radius: 999px; font-size: 12px; white-space: nowrap; }
.dz-czerwony { background: #fee2e2; color: #991b1b; font-weight: 600; } .dz-szary { background: #f1f5f9; color: #475569; }
.dz-wysylki ul { margin: 6px 0; padding-left: 18px; font-size: 13px; }
.okno-dzienniczka .okno-srodek { width: min(820px, 100%); }
.dz-siatka { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px 14px; margin-bottom: 8px; }
.dz-siatka label, .okno-dzienniczka .dz-sms { display: flex; flex-direction: column; gap: 3px; font-size: 13px; }
.okno-dzienniczka input.krotkie { width: 64px; display: inline-block; margin: 0 10px 0 4px; }
.okno-dzienniczka .dz-sms { margin-bottom: 8px; }
.okno-dzienniczka .dz-sms textarea { width: 100%; font: inherit; }
.okno-dzienniczka .dz-potw { display: flex; gap: 8px; align-items: center; font-weight: 600; margin: 10px 0; }
.okno-dzienniczka .przyciski { display: flex; gap: 8px; flex-wrap: wrap; }

/* KATALOG DZIENNICZKÓW (Gabinet → Dzienniczki dla pacjenta, 8.10.2026): formularz po lewej, telefon po prawej. */
#dzienniczki-katalog .blad { white-space: pre-line; }
.dzk-uklad { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 18px; align-items: start; margin-top: 12px; }
.dzk-boczny { position: sticky; top: 10px; }
.dzk-telefon { border: 10px solid #1f2937; border-radius: 28px; overflow: hidden; background: #f4f6fb; height: min(720px, 78vh); }
.dzk-telefon iframe { width: 100%; height: 100%; border: 0; display: block; }
.dzk-przelaczniki { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 8px; align-items: center; }
.dzk-przelaczniki button { padding: 5px 10px; border: 1px solid #cbd5e1; border-radius: 8px; background: #fff; font: inherit; font-size: 13px; cursor: pointer; }
.dzk-przelaczniki button.wybrany { background: #1d4ed8; border-color: #1d4ed8; color: #fff; }
.dzk-odstep { flex: 1 1 auto; }
.dzk-sekcja { border: 1px solid #e2e8f0; border-radius: 12px; padding: 12px 14px; margin-bottom: 12px; background: #fff; }
.dzk-sekcja h3 { margin: 0 0 8px; }
.dzk-sekcja label { display: flex; flex-direction: column; gap: 3px; font-size: 13px; margin-bottom: 8px; }
.dzk-sekcja input[type=text], .dzk-sekcja input:not([type]), .dzk-sekcja input[type=time], .dzk-sekcja textarea, .dzk-sekcja select { font: inherit; padding: 6px 8px; border: 1px solid #cbd5e1; border-radius: 8px; }
.dzk-sekcja textarea { width: 100%; box-sizing: border-box; }
.dzk-dwa { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 10px; }
.dzk-trzy { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 10px; }
.dzk-pytanie { border: 1px solid #e2e8f0; border-left: 4px solid #93c5fd; border-radius: 10px; padding: 8px 10px; margin-bottom: 8px; background: #f8fafc; }
.dzk-pyt-glowa { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 6px; }
.dzk-pyt-glowa button { padding: 2px 8px; }
.dzk-opcje { margin: 4px 0 0 14px; }
.dzk-opcja { grid-template-columns: 26px 1fr 1fr 1fr auto; align-items: center; margin-bottom: 4px; }
.dzk-dopisek { margin: 6px 0 0 14px; }
label.dzk-kratka { flex-direction: row; align-items: center; gap: 6px; font-size: 13px; margin: 0 0 6px; }
.dzk-znak { font-size: 12px; background: #fef3c7; color: #92400e; border-radius: 6px; padding: 1px 6px; }
.dzk-okno { max-width: 980px; }
.dzk-podglad-uklad { display: grid; grid-template-columns: 400px minmax(0, 1fr); gap: 18px; align-items: start; }
.dz-wybor { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; margin-bottom: 10px; }
.dz-wybor label { display: flex; flex-direction: column; gap: 3px; font-size: 13px; font-weight: 600; }
@media (max-width: 1100px) { .dzk-uklad, .dzk-podglad-uklad { grid-template-columns: 1fr; } .dzk-boczny { position: static; } }
#zakladka-ustawienia .dzk-przelaczniki button, .dzk-okno .dzk-przelaczniki button { padding: 4px 9px; min-height: 0; font-size: 13px; border-radius: 8px; }
.dzk-pyt-glowa select { width: auto; flex: 0 0 auto; padding: 4px 8px; }
.dz-dopisane { color: #5b21b6; }
#dz-ile { margin: -4px 0 6px; }
#dz-ile.dz-zle { color: #b91c1c; font-weight: 600; }
/* Edytor dzienniczka: lżej i ciaśniej, na telefonie jedna kolumna (Piotr, 8.10.2026: „ładniej wizualnie i na telefon też”). */
#dzienniczki-katalog .dzk-sekcja { box-shadow: 0 1px 3px rgba(20, 37, 79, .06); }
#dzienniczki-katalog .dzk-sekcja h3 { font-size: 16px; color: #14254f; }
#dzienniczki-katalog .dzk-sekcja input:not([type=checkbox]), #dzienniczki-katalog .dzk-sekcja textarea, #dzienniczki-katalog .dzk-sekcja select {
  font-size: 14px; padding: 7px 10px; min-height: 0; border-radius: 8px; margin-top: 2px; background: #fff; }
#dzienniczki-katalog .dzk-pytanie { background: #fff; box-shadow: 0 1px 2px rgba(20, 37, 79, .05); }
#dzienniczki-katalog .dzk-pyt-glowa b { display: inline-block; min-width: 26px; height: 26px; line-height: 26px; text-align: center; border-radius: 50%; background: #dbeafe; color: #1d4ed8; }
#dzienniczki-katalog .dzk-opcja input { margin-top: 0; }
@media (max-width: 700px) {
  .dzk-dwa, .dzk-trzy { grid-template-columns: 1fr; }
  .dzk-opcja { grid-template-columns: 22px 1fr auto; }
  .dzk-opcja input:nth-of-type(2), .dzk-opcja input:nth-of-type(3) { grid-column: 2; }
  .dzk-telefon { height: 600px; }
}
.dz-podsumowanie { border: 1px solid #c7d2fe; background: #f5f7ff; border-radius: 12px; padding: 8px 14px; margin: 8px 0 12px; }
.dz-podsumowanie summary { cursor: pointer; font-weight: 700; color: #14254f; }
.dz-podsumowanie ul { margin: 8px 0; padding-left: 20px; }
.dz-podsumowanie li { margin: 3px 0; }
.dz-podsumowanie h4 { margin: 10px 0 2px; }
.dz-teksty { list-style: none; padding-left: 0 !important; }
.dzk-proby { margin-top: 18px; }
.dzk-proby h3 { margin: 0 0 4px; }
.dzk-sms-podglad { background: #f1f5f9; border-radius: 12px; padding: 10px 12px; font-family: inherit; white-space: pre-wrap; }

/* PASEK „DIVA-5 / DZIENNICZEK” NAD KARTĄ WIZYTY (Piotr, 9.10.2026: „zajmuje mnóstwo miejsca (...) taki pasek”).
   Jeden rząd małych przycisków; sekcje pod nim otwierają się dopiero po kliknięciu. */
.wiz-pasek-badan { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 0 0 10px; }
.wiz-pasek-badan > span:empty { display: none; }
.pb-grupa { position: relative; display: inline-block; }
.pb-guzik { display: inline-flex; align-items: center; gap: 6px; min-height: 0; padding: 6px 12px; font-size: 14px; font-weight: 600;
  background: var(--karta); color: inherit; border: 1px solid var(--linia); border-radius: 9px; cursor: pointer; }
.pb-guzik:hover, .pb-guzik.wcisniety { border-color: var(--akcent); background: var(--akcent-tlo); }
.pb-guzik .pb-stan { font-weight: 500; font-size: 12.5px; color: #5b6575; }
.pb-guzik.pb-wlaczony .pb-stan { color: #15803d; }
.pb-menu { position: absolute; top: calc(100% + 4px); left: 0; z-index: 30; min-width: 220px; padding: 6px; background: var(--karta);
  border: 1px solid var(--linia); border-radius: 10px; box-shadow: 0 8px 24px rgba(15, 23, 42, .14); display: flex; flex-direction: column; }
.pb-menu[hidden] { display: none; }
.pb-menu a, .pb-menu button { display: block; width: 100%; text-align: left; padding: 8px 10px; border-radius: 7px; font-size: 14px; font-weight: 500;
  color: inherit; text-decoration: none; background: none; border: 0; min-height: 0; cursor: pointer; }
.pb-menu a:hover, .pb-menu button:hover { background: var(--akcent-tlo); }
.pb-menu button { border-top: 1px solid var(--linia); border-radius: 0 0 7px 7px; margin-top: 4px; }
.pb-menu a + button, .pb-menu > button:first-child { margin-top: 4px; }
.pb-menu > button:first-child { border-top: 0; margin-top: 0; }
.dv-glowa { display: flex; align-items: baseline; gap: 8px; }
.dv-glowa [data-dv-zwin], .wiz-dzienniczek .dz-zwin { margin-left: auto; min-height: 0; padding: 2px 8px; font-size: 14px; }
.wiz-dzienniczek h3 { display: flex; align-items: center; gap: 8px; }

/* OKNO „WŁĄCZ DZIENNICZEK” (Piotr, 9.10.2026): przycisk wysyłki zawsze widoczny, podgląd równo z wyborem, długie rzeczy schowane. */
.dz-wybor { align-items: flex-end; }
.dz-wybor select { min-width: 240px; }
.dz-wybor label { margin-bottom: 0; }
.dz-wybor #dz-podglad { height: 51px; margin: 0; padding: 0 16px; border-radius: 12px; font-weight: 600; }
.dz-wzor-opis { margin: 0 0 12px; }
.okno-dzienniczka .dz-wiecej { margin: 12px 0 4px; border: 1px solid var(--linia); border-radius: 12px; padding: 8px 12px; }
.okno-dzienniczka .dz-wiecej > summary { cursor: pointer; font-weight: 600; color: var(--akcent); }
.okno-dzienniczka .dz-dol { position: sticky; bottom: -1px; background: var(--karta); padding: 12px 0 14px; margin-top: 8px; border-top: 1px solid var(--linia); z-index: 2; }
.okno-dzienniczka .dz-dol #dz-wlacz { font-size: 16px; padding: 12px 20px; }
.okno-dzienniczka .dz-potwierdz { position: sticky; bottom: 0; z-index: 3; }
.dz-potwierdz-karta { background: var(--karta); border: 2px solid var(--akcent); border-radius: 14px; padding: 14px 16px; box-shadow: 0 -8px 24px rgba(15, 23, 42, .18); }
.dz-potwierdz-karta h4 { margin: 0 0 6px; }
.dz-potwierdz-karta p { margin: 4px 0; }
/* OKNO DZIENNICZKA PRZEWIJA SIĘ (Piotr, 9.10.2026: „zmień treść SMS-ów i progi sygnałów (...) w ogóle nie widać”) --
   środek okna ma stałą wysokość i `overflow: hidden`, więc przewijać musi się karta w środku. */
.okno-dzienniczka .okno-srodek { height: auto; max-height: calc(100vh - 36px); }
.okno-dzienniczka .okno-srodek > .karta { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.okno-dzienniczka .okno-srodek > .karta { padding-bottom: 0; }
.okno-dzienniczka .dz-dol { bottom: 0; padding-bottom: 16px; }

/* KWOTY W WIERSZU BADAŃ (Piotr, 14.10.2026) -- osobna linijka: przed zniżką, po zniżce, pobranie, razem do zapłaty. */
.bad-kwoty { display: block; margin-top: 3px; color: var(--tekst, #16202b); }
.bad-kwoty .bad-kwota-wiersza { color: #1d4ed8; }
/* „PRZED ZNIŻKĄ” WYRAŹNIE (Piotr, 14.10.2026: „Pokaż wyraźniej ile przed zniżką!”). */
/* KOLORY (Piotr, 14.10.2026): przed zniżką i pobranie -- czerwone, po zniżce -- zielone, „pacjent płaci” -- jak było. */
.bad-kwoty .bad-przed, .bad-kwoty .bad-pobr { color: #b91c1c; background: #fef2f2; border: 1px solid #fecaca; border-radius: 6px; padding: 0 6px; }
.bad-kwoty .bad-po { color: #15803d; background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 6px; padding: 0 6px; }
/* CIEŃSZE PASKI W BADANIACH (Piotr, 14.10.2026). Pasek przycisków bez tła i napisu; „Wycena wysłana” w jednej linijce. */
.stan-skierowania .lampka.bad-pasek { background: transparent; border: 0; padding: 2px 0; justify-content: flex-end; }
.stan-skierowania .lampka.bad-pasek .tresc { min-width: 0; flex: 1; }
.stan-skierowania .lampka.bad-wyslane, .stan-skierowania .lampka.bad-akceptacja { padding: 4px 11px; font-size: 13px; align-items: center; }
.stan-skierowania .lampka.bad-wyslane b, .stan-skierowania .lampka.bad-akceptacja b { display: inline; font-size: 13px; }
.stan-skierowania .lampka.bad-wyslane .drobne, .stan-skierowania .lampka.bad-akceptacja .drobne { display: inline; margin: 0; }
.stan-skierowania .lampka.bad-wyslane .kropka, .stan-skierowania .lampka.bad-akceptacja .kropka { margin-top: 0; }

/* „✓ ZAPŁACONO” PRZY NAZWISKU W BADANIACH (Piotr, 15.10.2026: „Nie widzę, że zapłacono. Powinno być lepiej widoczne”). */
.bad-zaplacono-znak { display: inline-block; margin-left: 10px; padding: 3px 12px; border-radius: 999px; background: #15803d; color: #fff;
  font-weight: 800; font-size: 13.5px; letter-spacing: .04em; vertical-align: 2px; box-shadow: 0 2px 6px rgba(21, 128, 61, .35); white-space: nowrap;
  align-self: flex-start; width: max-content; margin: 4px 0 2px; }
.bad-zaplacono-znak.zle { background: #b91c1c; box-shadow: 0 2px 6px rgba(185, 28, 28, .35); }

/* „DRUKUJ ▾” W KARCIE WIZYTY (Piotr, 15.10.2026) -- menu otwiera się w prawo, bo stoi na początku rzędu. */
.bad-druk-menu.w-wizycie .bad-druk-lista { left: 0; right: auto; min-width: 260px; }
.bad-druk-menu.w-wizycie > summary { white-space: nowrap; }

/* PASEK LICZB NA KARCIE PACJENTA (15.10.2026) -- „0 wizyt w Gabinecie0 recept” zlewało się w jedno. */
#kp-karta .kp-pasek { display: flex; flex-wrap: wrap; gap: 6px 18px; }
#kp-karta .kp-pasek span + span::before { content: '·'; margin-right: 18px; color: #94a3b8; }

/* TELEFON: PRZEGLĄD 16.10.2026 (Piotr: „zrób tak, żeby i pacjenci, i cały personel (...) mogli używać go na telefonach
   (...) Koniecznie to sprawdź”). Każdy ekran otwarty w przeglądarce udającej telefon (390 i 360 px, dotyk) i zmierzony.
   Tylko wąski ekran -- monitor bez zmian. */
@media (max-width: 760px) {
  /* Zamknięte menu rzucało cień na lewy brzeg każdego ekranu (szary pas wzdłuż krawędzi). */
  #menu-boczne:not(.otwarte) { box-shadow: none; }
  /* Lista wizyt: kafelki kurczyły się do długości nazwiska -- każdy miał inną szerokość. */
  .lista-wizyt { grid-template-columns: minmax(0, 1fr); }
  .lista-wizyt > .wizyta-wiersz { width: 100%; box-sizing: border-box; }
  /* Pola do pisania 16 px: przy mniejszych literach iPhone powiększa całą stronę, gdy dotknie się pola
     (wizyta, Nowa wizyta, godziny przyjęć, zgoda na zabieg). Podpowiedzi w polach zostają mniejsze (wyżej). */
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]), select, textarea { font-size: 16px !important; }
  /* Zgoda na zabieg: podpis obok pola zjadał połowę szerokości („PESEL lub data urodzenia” w dwóch linijkach,
     pole obok). Na telefonie podpis nad polem, pole na całą szerokość. */
  #zg-zabieg .zg-rzad > label:not(:has(input[type=radio])) { display: flex; flex-direction: column; align-items: stretch; gap: 4px; width: 100%; }
  #zg-zabieg .zg-rzad > label:not(:has(input[type=radio])) > input,
  #zg-zabieg .zg-rzad > label:not(:has(input[type=radio])) > select { width: 100%; max-width: none; box-sizing: border-box; }
}

/* === WYNIKI W TABELI (17.10.2026) === */
.wt-tlo{position:fixed;inset:0;background:rgba(14,27,61,.45);z-index:9000;display:flex;align-items:stretch;justify-content:center;padding:2vh 1vw}
.wt-okno{background:#fff;border-radius:12px;width:min(1800px,99vw);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 50px rgba(0,0,0,.25)}
.wt-gora{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 14px;border-bottom:1px solid #DCE2EC;background:#F2F5FA}
.wt-gora > b{flex:1;min-width:200px}
.wt-zakl{display:inline-flex;gap:4px}
.wt-zakl button[aria-pressed=true]{background:#14254F;color:#fff;border-color:#14254F}
.wt-tresc{flex:1;overflow:auto;padding:12px 14px}
.wt-zak-opis{margin:0 0 10px}.wt-zak-opis summary{cursor:pointer;font-weight:600}
.wt-zak-gora{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 10px}.wt-zak-gora input[type=search]{min-width:220px}
.wt-zak-kratki{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px}
.wt-zak-kratka{border:1px solid #d5dbe8;border-radius:10px;padding:10px 12px;background:#fff}.wt-zak-kratka[hidden]{display:none}
.wt-zak-nag{margin:0 0 6px}.wt-zak-jest{color:#137a3a;font-size:.9em}
.wt-zak-wiersz{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:6px 0}.wt-zak-wiersz[hidden],.wt-zak-inna[hidden]{display:none}
.wt-zak-pole{display:flex;flex-direction:column;gap:2px;font-size:.9em}.wt-zak-pole[hidden]{display:none}
.wt-zak-pole input[data-p=od],.wt-zak-pole input[data-p=do],.wt-zak-pole input[data-p=odK],.wt-zak-pole input[data-p=doK],.wt-zak-pole input[data-sprawdz]{width:90px}
.wt-zak-pole:has(.wt-zak-j){flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:6px}.wt-zak-pole:has(.wt-zak-j)>span{flex-basis:100%}
.wt-zak-pole select{width:auto;max-width:100%}.wt-zak-gora input[type=search]{flex:1}
.wt-zak-j{font-style:normal;font-weight:600}.wt-zak-szer{flex:1;min-width:180px}.wt-zak-szer input{width:100%}
.wt-zak-link a{font-weight:600}
.wt-tab .wt-fz,.wt-fz{border:0;background:none;padding:0 0 0 3px;margin:0;min-height:0;min-width:0;height:auto;width:auto;box-shadow:none;border-radius:0;font-size:.75em;cursor:help;vertical-align:baseline;line-height:1;display:inline}.wt-fz[data-wt-fz-link^="https"]{cursor:pointer}
.wt-druk-tab{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:6px 14px;margin:0 0 6px}.wt-leg-fz{font-size:.85em;color:var(--pod);cursor:help}
.wf-gora{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;margin:0 0 4px}
.wf-uklad{display:grid;grid-template-columns:270px minmax(0,1fr);gap:14px;align-items:start}
.wf-lista{display:flex;flex-direction:column;gap:2px;max-height:65vh;overflow:auto;padding-right:4px;font-size:.92em}.wf-lista input[type=search]{width:100%}
.wf-kat{font-weight:600;margin:10px 0 2px;color:#5d6a63;font-size:.85em;text-transform:uppercase;letter-spacing:.04em;display:flex;gap:6px;align-items:center;cursor:pointer;position:sticky;top:0;background:var(--tlo,#fff);z-index:1}.wf-grupa[hidden]{display:none}.wf-guziki{display:flex;flex-wrap:wrap;gap:4px}
.wf-prawa{min-width:0}.wf-wybrane{display:flex;flex-wrap:wrap;gap:4px 6px;margin:0 0 8px}.wf-plak{font-size:.82em;padding:2px 8px;border-radius:12px;border:1px solid #c9d3cb;background:#f3f6f3;cursor:pointer;min-height:0}.wf-plak:hover{background:#fbe3e0;border-color:#c8453b}
.wf-siatka{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}.wf-siatka .wf-svg{margin:0}
.wf-poz{display:flex;gap:6px;align-items:baseline;cursor:pointer}.wf-poz[hidden]{display:none}
.wf-rys{min-width:0}.wf-rys .wf-svg{width:100%;height:auto;display:block;margin:0 0 12px;border:1px solid #e3e7e3;border-radius:8px}
.wf-leg{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:.85em;color:#5d6a63;margin:4px 0}.wf-leg span{display:inline-flex;align-items:center;gap:6px}.wf-leg i{display:inline-block;width:18px;height:10px;border-radius:2px}
@media (max-width:800px){.wf-uklad{grid-template-columns:1fr}.wf-lista{max-height:30vh}.wf-siatka{grid-template-columns:1fr}}
.wt-wsk{cursor:help;border-bottom:1px dotted currentColor}.wt-wsk-w{cursor:help;font-style:italic}
.wt-zak-uwaga{margin:6px 0}.wt-zak-uwaga textarea{width:100%;resize:vertical}
.wt-zak-kob{font-size:.9em;display:block;margin:2px 0}.wt-zak-jak{margin:2px 0 4px}.wt-zak-dol{align-items:center}.wt-zak-wynik{font-weight:600}
@media (max-width:700px){.wt-zak-kratki{grid-template-columns:1fr}}
.wt-czyta{background:#FBF3DD;border-radius:8px;padding:6px 10px}
.wt-przewin{overflow:auto;max-height:70vh}
.wt-tab{border-collapse:collapse;font-size:.92em}
.wt-tab th,.wt-tab td{border-bottom:1px solid #E8ECF3;padding:4px 8px;text-align:left;white-space:nowrap}
.wt-tab thead th{position:sticky;top:0;background:#fff;z-index:1}
.wt-tab td:first-child{position:sticky;left:0;background:#fff;white-space:normal;min-width:180px}
.wt-kom{background:none;border:0;padding:0;font:inherit;cursor:pointer;color:inherit;text-decoration:underline dotted}
.wt-poza .wt-kom{color:#b3261e;font-weight:600}
/* powyżej normy czerwone, poniżej niebieskie, w normie czarne (Piotr 18.10.2026) */
.wt-H,.wt-H .wt-kom{color:#b3261e;font-weight:600}
.wt-L,.wt-L .wt-kom{color:#1a4fc4;font-weight:600}
.wt-ocena{font-size:.85em;padding:1px 24px 1px 6px;min-height:0;width:auto;max-width:none;margin-right:4px;background-position:right 4px center}
.wt-odczyt tr.wt-odczyt-dzial td{background:#F2F5FA;color:#14254F;font-weight:600;font-size:.88em;padding:10px 8px 4px;border-top:2px solid #D9E0EC}
.wt-tab tr.wt-test td{position:static;background:#F2F5FA;color:#14254F;font-weight:600;font-size:.88em;padding:6px 8px 3px}
.wt-tab tr.wt-test.wt-do-przyp td{background:#FFF4D6;color:#7A4B00}
.wt-tab tr.wt-test[style] td{background:var(--wkj);color:var(--wk);border-left:6px solid var(--wk);font-size:.95em;padding:9px 10px 6px;border-top:10px solid #fff}
.wt-tab tr.wt-wiersz[style] td:first-child{box-shadow:inset 6px 0 0 var(--wkj);padding-left:14px}
.wt-tab button.wt-kat{all:unset;cursor:pointer;border-bottom:1px dotted #9aa3b2}
.wt-tab button.wt-kat:hover,.wt-tab button.wt-kat:focus-visible{color:#1F4FD1;border-bottom-color:#1F4FD1}
.wt-tab select.wt-kat-wybor{max-width:260px;font:inherit}
/* pasek normy (Piotr 18.10.2026: „czy jest po środku, czy nie po środku”) */
.wt-tab td.wt-w-normie{min-width:110px;vertical-align:middle}
.wt-pasek{position:relative;display:inline-block;width:100px;height:10px;border-radius:5px;background:#EEF1F5;vertical-align:middle}
.wt-pasek .wt-pole{position:absolute;top:0;bottom:0;background:#BFE3C6;border-radius:5px}
.wt-pasek .wt-kropka-n,.wt-pasek .wt-kropka-p{position:absolute;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;box-sizing:border-box}
.wt-pasek .wt-kropka-n{background:#1F2937;border:2px solid #fff;width:12px;height:12px;margin:-6px 0 0 -6px}
.wt-pasek .wt-kropka-n.wt-pk-H{background:#B3261E}
.wt-pasek .wt-kropka-n.wt-pk-L{background:#1F4FD1}
.wt-pasek .wt-kropka-p{border:2px solid #6B7280;background:#fff}
/* jedna strona: każda kategoria / badanie BIOVIS osobnym blokiem z własną tabelą (Piotr 19.10.2026) */
.wt-spis{position:sticky;top:-12px;z-index:3;display:flex;align-items:center;gap:6px;margin:4px 0 10px;padding:12px 0 6px;background:#fff;box-shadow:0 6px 6px -6px rgba(0,0,0,.15)}
.wt-spis-w{flex:1;min-width:0;max-width:30em;font-size:.95em;padding:6px 8px;min-height:0}
.wt-spis-s{font-size:1.3em;line-height:1;padding:4px 14px;min-height:0;font-weight:700}
.wt-sekcja{margin:14px 0 6px;border-left:6px solid var(--wk,#E0A800);border-radius:6px;background:#fff;scroll-margin-top:62px}
.wt-sek-nag{margin:0;background:var(--wkj,#FFF4D6)}
.wt-sek-zwin{all:unset;cursor:pointer;display:block;box-sizing:border-box;width:100%;padding:9px 12px;color:var(--wk,#7A4B00);font-weight:700;font-size:1.02em}
.wt-sek-zwin:focus-visible{outline:2px solid var(--wk,#7A4B00);outline-offset:-2px}
.wt-sek-ile{font-weight:500;font-size:.8em;opacity:.7;margin-left:6px}
.wt-sek-rada{display:block;padding:0 12px 8px;font-size:.85em;color:#7A4B00}
.wt-sekcja .wt-przewin{max-height:none}
.wt-sekcja .wt-tab tr.wt-test td,.wt-sekcja .wt-tab tr.wt-test[style] td{border-left:0;border-top:0;background:#F7F8FA;color:#374151;font-size:.85em;padding:6px 10px 3px}
.wt-tab td.wt-norma{white-space:normal;max-width:180px;font-size:.85em;color:#4B5563}
.wt-zakl.wt-badania-b{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}
.wt-badania-b button{font-size:.85em;padding:4px 10px}
.wt-badania-b button.wt-nowy{background:#FFF4D6;color:#7A4B00}
.wt-grupy{margin:0 0 8px}
.wt-dubel{color:#9a5b00;font-size:.85em;font-weight:600}
.wt-pyt .wt-kom{color:#9a5b00;font-weight:600}
.wt-ocena.wt-ocen-sam{border-color:#C9A646;background-color:#FBF3DD}
.wt-ocena.wt-moja{border-color:#14254F;background-color:#EEF2FA;font-weight:600}
.wt-doks{list-style:none;padding:0;margin:0;display:grid;gap:8px}
.wt-dok{display:flex;align-items:center;gap:10px;border:1px solid #DCE2EC;border-radius:10px;padding:8px 10px}
.wt-dok > span:nth-child(2){flex:1}
.wt-dok.wt-zatwierdzony{background:#F3FAF5;border-color:#BFE3CB}
.wt-dok.wt-nie_ten_pacjent,.wt-dok.wt-bez_liczb{opacity:.7}
.wt-kropka{display:inline-block;width:12px;height:12px;border-radius:50%;flex:none}
.wt-spr{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.6fr);gap:14px}
/* DWIE STRONY PRZEWIJAJĄ SIĘ OSOBNO (Piotr 18.10.2026: „lewa strona, gdzie jest podgląd tego badania, powinna poruszać się
   oddzielnie od prawej strony”). Okno nie przewija się w całości; oryginał i odczyt mają każdy swój pasek. */
.wt-tresc:has(> .wt-spr){overflow:hidden;display:flex;flex-direction:column}
.wt-spr{flex:1;min-height:0;align-items:stretch}
.wt-lewo{display:flex;flex-direction:column;min-height:0}
.wt-lewo .wt-kartka{flex:1;min-height:0;max-height:none}
.wt-prawo{overflow-y:auto;min-height:0;padding-right:4px}
@media (max-width:900px){.wt-spr{grid-template-columns:1fr}.wt-tresc:has(> .wt-spr){overflow:auto;display:block}.wt-lewo .wt-kartka{max-height:60vh}.wt-prawo{overflow-y:visible}}
.wt-nawig{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.wt-kartka{overflow:auto;max-height:78vh;border:1px solid #DCE2EC;border-radius:8px;background:#E9EDF3}
.wt-obraz{position:relative;transform-origin:center top}
.wt-obraz img{display:block;width:100%;height:auto;background:#fff}
/* zakreślacz (Piotr 24.10.2026: „powinno być podświetlone na żółto, żeby było wiadomo, co tam jest napisane”): żółte tło mnożone z kartką -- litery zostają czarne; obwódka na zewnątrz, nie na literach */
.wt-ramka{position:absolute;background:rgba(255,226,0,.5);mix-blend-mode:multiply;box-shadow:0 0 0 2px #fff,0 0 0 4px #e0a800;border-radius:2px;pointer-events:none;padding:2px;margin:-2px}
.wt-info{margin:0 0 8px}
.wt-odczyt{border-collapse:collapse;width:100%;font-size:.9em}
.wt-odczyt th,.wt-odczyt td{border-bottom:1px solid #E8ECF3;padding:4px 6px;text-align:left;vertical-align:top}
.wt-odczyt tr.wt-w{cursor:pointer}
.wt-dok-guziki{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto;align-items:center}
.wt-sprawdzone{color:#1f7a45}
/* JEDNA LINIJKA NA WIERSZ (Piotr 18.10.2026: „PSA wolny, to wynik jest jakoś pisany (...) na dole. Powinno być jedną
   linijką”). Wynik, jednostka, data, poprzedni i przyciski się nie łamią; łamie się tylko długa nazwa i długa norma. */
.wt-odczyt td:nth-child(2),.wt-odczyt td:nth-child(3),.wt-odczyt td:nth-child(4),.wt-odczyt td:nth-child(6),.wt-odczyt td:nth-child(7),.wt-odczyt td.wt-akcje,.wt-odczyt th{white-space:nowrap}
.wt-odczyt td:nth-child(5){min-width:7em}
.wt-prawo{overflow-x:auto}
.wt-odczyt td:nth-child(2) .pod{white-space:normal;display:block;max-width:28em}
.wt-odczyt tr.wybrany{background:#FBF3DD}
.wt-odczyt tr.wt-zatwierdzony{opacity:.65}
.wt-odczyt tr.wt-odrzucony td:not(.wt-akcje){opacity:.4;text-decoration:line-through}
.wt-guziki{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
.wt-kom{min-height:0;box-shadow:none;line-height:1.3}
.wt-tab td{padding:3px 8px}
/* telefon: tabela wyników przewija się w bok -- nazwa badania łamie się między słowami, nie w środku (18.10.2026) */
@media (max-width: 680px) { .wt-tab { table-layout: auto; } .wt-tab td:first-child { min-width: 10em; word-break: normal; } .wt-tab td.wt-norma { min-width: 8em; word-break: normal; } }

/* załączniki z innych wizyt tego pacjenta -- tylko do oglądania (Piotr, 18.10.2026) */
.lista-zalacznikow li.zal-z-innej{background:#F6F8FB}
.zal-skad{color:#14254F;font-weight:600}

/* WYWIAD KONTROLNY (19.10.2026) -- minęło / zostało / nowe, „Jak się zmienia”, leki */
.wiz-ankieta .ank-kontrolny{margin:8px 0 12px;padding:10px 12px;border:1px solid #e2e8f0;border-radius:10px;background:#fbfcfe}
.wiz-ankieta .ank-k{width:100%;border-collapse:collapse;margin:6px 0;font-size:.95em}
.wiz-ankieta .ank-k td,.wiz-ankieta .ank-k th{padding:5px 6px;border-top:1px solid #e8edf3;text-align:left;vertical-align:top}
.wiz-ankieta .ank-k-gr th{background:#eef3f8;font-weight:600}
.wiz-ankieta .ank-k-hist td:not(:first-child),.wiz-ankieta .ank-k-hist th:not(:first-child){text-align:center}
.wiz-ankieta .ank-k-klopot td{background:#fdf0ef}
.wiz-ankieta .ank-k-lep{color:#1f7a3a;font-weight:600}
.wiz-ankieta .ank-k-gor{color:#b42318;font-weight:600}
.wiz-ankieta .ank-k-uw{color:#b42318}
@media (max-width:700px){.wiz-ankieta .ank-k-leki,.wiz-ankieta .ank-k-hist{display:block;overflow-x:auto}}

/* OŚ CZASU PACJENTA (19.10.2026) */
.oc-okno{width:min(1200px,99vw)}
.oc-gora{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px;margin-bottom:12px}
.oc-kafel{border:1px solid #DCE2EC;border-radius:10px;padding:10px 12px;background:#FBFCFE}
.oc-kafel h4{margin:0 0 6px;font-size:1em}
.oc-kafel ul{margin:4px 0;padding-left:18px}
.oc-szeroki{margin-bottom:12px}
.oc-przewin{overflow-x:auto}
.oc-trendy li{margin:3px 0}
.oc-pkt{white-space:nowrap}
.oc-poza{color:#b3261e;font-weight:600}
.wyn-czeka{color:#b26a00}
.oc-poza.oc-nisko{color:#1a56b0}
.oc-wizyta .oc-pole{margin:4px 0;line-height:1.45}
.oc-wizyta summary{cursor:pointer;list-style:none}
.oc-wizyta summary::-webkit-details-marker{display:none}
.oc-rozwin{color:#1a56b0;text-decoration:underline;white-space:nowrap}
.oc-zwin{display:none;color:#1a56b0;text-decoration:underline}
.oc-wizyta details[open] .oc-skrot,.oc-wizyta details[open] .oc-rozwin{display:none}
.oc-wizyta details[open] .oc-zwin{display:inline}
.oc-rozwin{margin-left:2px}
.oc-calosc{white-space:normal;line-height:1.45}
.oc-grupa{margin:4px 0 6px}
.oc-grupa ul{margin:2px 0}
.oc-znak{font-size:.82em;border-radius:6px;padding:0 6px;white-space:nowrap}
.oc-znak-zle{background:#fde7e5;color:#b3261e}
.oc-znak-dobrze{background:#e3f4e7;color:#1e7a34}
.oc-dawno li{margin:2px 0}
.oc-os{list-style:none;margin:0;padding:0 0 0 14px;border-left:3px solid #DCE2EC}
.oc-os li{position:relative;display:flex;gap:12px;padding:8px 0 8px 10px;border-bottom:1px solid #EEF2F7}
.oc-os li::before{content:'';position:absolute;left:-22px;top:14px;width:11px;height:11px;border-radius:50%;background:#7A879F;border:2px solid #fff}
.oc-os li.oc-wizyta::before{background:#1f4e8c}.oc-os li.oc-recepta::before{background:#7B3FA0}.oc-os li.oc-wyniki::before{background:#C2620A}.oc-os li.oc-wywiad::before{background:#2E7D32}
.oc-data{flex:0 0 92px;font-weight:600;color:#3d4b66}
.oc-tresc{flex:1;min-width:0}
.oc-tresc div{color:#3d4b66;font-size:.95em;overflow-wrap:anywhere}
@media (max-width:700px){.oc-os li{flex-direction:column;gap:2px}.oc-data{flex:none}}
.oc-kafel .ank-k{width:100%;border-collapse:collapse;font-size:.95em}
.oc-kafel .ank-k td,.oc-kafel .ank-k th{padding:4px 6px;border-top:1px solid #e8edf3;text-align:center}
.oc-kafel .ank-k td:first-child,.oc-kafel .ank-k th:first-child{text-align:left}
.oc-okno .wt-zakl{display:flex;flex-wrap:wrap;gap:6px;min-width:0}
.oc-okno .wt-gora{min-width:0}
@media (max-width:700px){.oc-okno .wt-zakl button{padding:6px 10px;font-size:.9em}.oc-okno .wt-zakl{width:100%}}

/* LISTA WERSJI WYWIADU (19.10.2026) -- każda wersja osobno, z datą publikacji */
.ed-rodzaj-w{display:block}
.ed-rodzaj-gora{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center}
.ed-wersje{width:100%;border-collapse:collapse;margin-top:8px}
.ed-wersje td{padding:6px 8px;border-top:1px solid #e8edf3;vertical-align:middle}
.ed-wersje td:first-child{white-space:nowrap;width:1%}
.ed-w-guziki{text-align:right;white-space:nowrap}
.ed-w-guziki button{margin-left:6px}
.ed-w-archiwalna{color:#5b6780}
.ed-teraz{color:#1b6b40}
@media (max-width:700px){.ed-wersje tr{display:flex;flex-wrap:wrap}.ed-wersje td{border:0;padding:3px 4px}.ed-wersje tr{border-top:1px solid #e8edf3}.ed-w-guziki{width:100%;text-align:left}}
.ed-rodzaj-gora > div:first-child{text-align:left}
.ed-rodzaj-gora > div:first-child > b{display:block;font-size:1.05em}
.ed-rodzaj-gora > div:first-child > .pod{display:block}
.ed-rodzaj.ed-rodzaj-w{display:block;text-align:left}
.ed-rodzaj-w .ed-rodzaj-gora{width:100%}
.ed-rodzaj.ed-rodzaj-w > .ed-rodzaj-gora{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;text-align:left}
.ed-rodzaj.ed-rodzaj-w > .ed-rodzaj-gora > div:first-child{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
/* wynik przeliczony z innej jednostki (19.10.2026) -- mała gwiazdka, szczegóły w dymku */
.wt-tab td.wt-przel .wt-kom::after{content:'*';font-size:.8em;opacity:.6;margin-left:1px}
/* Data pobrania dla całej kartki (21.10.2026) */
.wt-data-kartki{margin:6px 0 10px;padding:8px 10px;background:#fff7e0;border:1px solid #e8d48a;border-radius:8px}
.wt-lab-pyt{margin:0 0 8px;padding:8px 10px;background:#eef5ff;border:1px solid #9cc0ee;border-radius:8px}.wt-lab-pyt button{margin:3px 2px}
.wt-data-kartki input{font-size:15px;padding:4px 6px}

/* „Wyślij link do wyników” w karcie wizyty (21.10.2026) */
.wyn-link-wynikow { margin: 4px 0 10px; }

/* Wszystkie wywiady pacjenta pod wywiadem w karcie wizyty (21.10.2026). */
.ank-wszystkie { margin-top: 12px; border-top: 1px solid #e2e8f0; padding-top: 8px; }
.ank-wszystkie ul { margin: 4px 0 0; padding-left: 18px; }
.ank-wszystkie li { margin: 3px 0; }

/* Nowe podsumowanie oceny wywiadu (21.10.2026): jedna strona -- wniosek, tabela, gry, plan, tekst dla pacjenta. */
.ank-podsumowanie .ank-pl { margin-top: 12px; border-top: 1px solid #e2e8f0; padding-top: 8px; }
.ank-podsumowanie .ank-pl-t { font-weight: 700; margin: 0 0 4px; }
.ank-podsumowanie .ank-pl-k { font-weight: 600; margin: 8px 0 2px; color: #334155; }
.ank-podsumowanie .ank-pl-l { margin: 0; padding-left: 20px; }
.ank-podsumowanie .ank-pl-l li { margin: 2px 0; }
.ank-podsumowanie .ank-pl-tab td { padding: 3px 8px; }

/* PROŚCIEJ, BEZ SUWAKA (Piotr 22.10.2026) -- przyciski na początku wiersza, duble w żółtej ramce, kartka węższa */
/* WIĘCEJ MIEJSCA NA ORYGINAŁ (Piotr 22.10.2026: „mało miejsca jest na podgląd tego wyniku po lewej stronie. Może daj mi trochę więcej”) */
.wt-spr{grid-template-columns:minmax(0,1fr) minmax(0,1.25fr)}
.wt-spr.wt-duza{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr)}
/* okno poprawy na ekranie sprawdzania -- w prawej kolumnie, bez zasłony na całą stronę */
.okno-zapisu.pw-panel{position:sticky;top:0;inset:auto;z-index:5;background:none;padding:0 0 10px;display:block}
.okno-zapisu.pw-panel .okno-zapisu-karta{max-width:none;width:auto;margin:0;box-shadow:0 6px 20px -8px rgba(20,37,79,.45);border:2px solid #2563eb}
.wt-prawo{overflow-x:hidden}
.wt-odczyt td,.wt-odczyt th{white-space:normal!important}
.wt-odczyt td.wt-akcje{white-space:nowrap!important;width:1%}
.wt-odczyt td.wt-akcje button{font-size:1.15em;padding:2px 6px}
.wt-odczyt .wt-ocena{margin-top:3px;font-size:.85em;max-width:100%}
.wt-duble{background:#FFF6D6;border:1.5px solid #E8C55A;border-radius:10px;padding:8px 12px;margin:8px 0}
.wt-duble p{margin:0 0 6px}
.wt-dubel-w{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 0;border-top:1px dashed #E8C55A}
.wt-dubel-w span{flex:1 1 260px}

/* WYKRES WYNIKÓW Z JEDNEGO DNIA (Piotr 22.10.2026) -- public/wykres-wynikow.js. Kolory kropek te same co w tabeli:
   czerwona powyżej, niebieska poniżej, czarna w normie; zielone pole = norma; szare kółko = poprzedni wynik. */
.wy-tlo{z-index:9100}
/* okna otwierane Z OKNA WYNIKÓW (23.10.2026: „Jak wydrukować?”, podgląd wysyłki, drugi e-mail) -- nad nim, nie pod nim */
.wt-tlo ~ .nakladka,.wt-tlo ~ .pw-tlo{z-index:9200}
.wy-okno{width:min(1000px,99vw)}
.wt-data-wykres{background:none;border:0;padding:0;font:inherit;font-weight:600;color:#14254F;cursor:pointer;text-decoration:underline dotted;white-space:nowrap;min-height:0}
.wy-podsum{margin:0 0 4px}
.wy-legenda-g{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0 0 10px;font-size:.88em;color:#4a5468}
.wy-legenda-g span{display:inline-flex;align-items:center;gap:6px}
.wy-norma-ikona{display:inline-block;width:22px;height:10px;border-radius:3px;background:#DDF0DF;border:1px solid #8CC79A}
.wy-kropka-ikona{display:inline-block;width:10px;height:10px;border-radius:50%;background:#1d1d1d}
.wy-grupa{margin:16px 0 4px;font-size:.95em;color:#14254F;border-bottom:1px solid #E8ECF3;padding-bottom:3px}
.wy-wiersz{display:grid;grid-template-columns:minmax(150px,1.2fr) minmax(180px,2fr) minmax(110px,auto);grid-template-areas:"n t l" ". p p";column-gap:14px;align-items:center;padding:6px 0;border-bottom:1px solid #F0F2F6}
.wy-nazwa{grid-area:n;font-size:.92em}
.wy-liczba{grid-area:l;font-weight:600;white-space:nowrap;text-align:right}
.wy-pod{grid-area:p;font-size:.78em;color:#6b7385;margin-top:2px}
.wy-tor{grid-area:t;position:relative;height:30px}
.wy-tor-pusty{height:auto;font-size:.82em;color:#8a8f98;font-style:italic}
.wy-linia{position:absolute;left:0;right:0;top:8px;height:2px;background:#E1E5EC;border-radius:1px}
.wy-norma{position:absolute;top:3px;height:12px;background:#DDF0DF;border:1px solid #8CC79A;border-radius:4px;box-sizing:border-box}
.wy-kropka{position:absolute;top:3px;width:12px;height:12px;margin-left:-6px;border-radius:50%;background:#1d1d1d;box-shadow:0 0 0 2px #fff}
.wy-kropka.wy-granica{background:#fff;border:2px solid currentColor;box-sizing:border-box}
.wy-stara,.wy-kropka-ikona.wy-stara{background:#fff;border:2px solid #8a8f98;box-sizing:border-box}
.wy-stara-p{color:#6b7385}
.wy-skala{position:absolute;left:0;right:0;top:19px;display:flex;justify-content:space-between;font-size:.68em;color:#9aa0a6;line-height:1}
/* liczby normy pod końcami zielonej kreski, data poprzedniego wyniku nad szarym kółkiem (22.10.2026) */
.wy-nlicz,.wy-sdata{position:absolute;transform:translateX(-50%);white-space:nowrap;line-height:1;font-size:.72em}
.wy-nlicz{top:19px;color:#2f7a43;font-weight:600}
.wy-sdata{top:-13px;color:#5f6675}
.wy-od-lewej{transform:none}.wy-od-prawej{transform:translateX(-100%)}
.wy-tor-z-data{margin-top:14px}
.wy-tor:has(.wy-skala) .wy-nlicz{top:31px}
.wy-tor:has(.wy-skala){margin-bottom:12px}
.wy-dni{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 16px;border-bottom:1px solid #e6eaf0;background:#f8fafc}
.wy-dni button{padding:5px 10px;border-radius:999px;border:1px solid #d5dbe5;background:#fff;font:inherit;font-size:.9em;cursor:pointer}
.wy-dni button[disabled]{opacity:.35;cursor:default}
.wy-dni .wy-teraz{background:#1e3a8a;border-color:#1e3a8a;color:#fff;font-weight:700}
.wy-objasn{margin:0 0 6px;padding:8px 12px;background:#f1f5f9;border-radius:8px;color:#334155;font-size:.92em}
.wy-zmiana{color:#1f2937;font-weight:600}
.wy-N{color:#1d1d1d}.wy-kropka.wy-N,.wy-kropka-ikona.wy-N{background:#1d1d1d}
.wy-H{color:#b3261e}.wy-kropka.wy-H,.wy-kropka-ikona.wy-H{background:#b3261e}
.wy-L{color:#1a4fc4}.wy-kropka.wy-L,.wy-kropka-ikona.wy-L{background:#1a4fc4}
.wy-P{color:#9E7C00}.wy-kropka.wy-P{background:#9E7C00}
.wy-kropka.wy-granica.wy-N,.wy-kropka.wy-granica.wy-H,.wy-kropka.wy-granica.wy-L,.wy-kropka.wy-granica.wy-P{background:#fff}
.wy-podz{margin:4px 0 14px;padding:10px 12px;background:#F7F9FC;border-radius:10px}
.wy-podz-t{font-weight:600;margin-bottom:6px}
.wy-podz-pasek{display:flex;gap:2px;height:22px}
.wy-podz-pasek span{min-width:3px}
.wy-podz-pasek span:first-child{border-radius:4px 0 0 4px}.wy-podz-pasek span:last-child{border-radius:0 4px 4px 0}
.wy-legenda{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:4px 18px;font-size:.88em}
.wy-legenda i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.wy-duza{display:flex;align-items:center;gap:14px;margin:4px 0 12px}
.wy-duza-l{font-size:2.4em;font-weight:700;line-height:1}
@media (max-width:640px){
  .wy-wiersz{grid-template-columns:1fr auto;grid-template-areas:"n l" "t t" "p p";row-gap:4px}
  .wy-tor{margin:2px 0 10px}
}

/* WYNIKI NIEPRAWIDŁOWE (22.10.2026) -- wiersz jak na wykresie, nad nim dział i data; cały wiersz otwiera wykres z tego dnia */
.wn-gora{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;justify-content:space-between;margin:0 0 8px}
.wn-starsze{display:inline-flex;gap:8px;align-items:center;cursor:pointer}
.wn-nag{margin:14px 0 4px;font-size:1.05em;border-bottom:2px solid currentColor;padding-bottom:3px}
.wn-nag.wt-H{color:#b3261e}.wn-nag.wt-L{color:#1a4fc4}
.wn-w{padding:6px 8px 2px;border-radius:8px;cursor:pointer;border-bottom:1px solid #F0F2F6}
.wn-w:hover,.wn-w:focus{background:#F7F9FC;outline:none}
.wn-w .wy-wiersz{border-bottom:0;padding-top:2px}
.wn-meta{font-size:.78em;color:#6b7385}

/* PRZEPISYWANIE KARTKI (22.10.2026): opis nieprawidłowy na czerwono, tekst z kartki, nowy wiersz */
.wt-X,.wt-X .wt-kom{color:#b3261e;font-weight:600}
.wn-nag.wt-X{color:#b3261e}
.wt-przepisz{margin:10px 0;padding:8px 10px;border:1px dashed #C9D1DE;border-radius:10px;background:#FAFBFD}
.wt-nowy{display:grid;gap:6px;margin:6px 0 10px}.wt-nowy label{display:grid;gap:2px;font-size:.88em;color:#4a5468}.wt-nowy input{font:inherit;padding:6px 8px}
.wt-linie-l{max-height:340px;overflow:auto;margin:6px 0;padding-left:28px;font-size:.9em}.wt-linie-l li{padding:2px 0}

/* ⭐ WAŻNE (22.10.2026) */
.wt-gw{font-size:1.05em}.wt-gw.on{color:#b7791f}.wt-wazne{color:#b7791f}
.wt-sledzone{margin:4px 0 8px;padding:6px 8px;background:#FFF8E6;border:1px solid #F0D58C;border-radius:8px;font-size:.9em}
.wt-sledzone button{margin:2px 4px}

/* ZALECONE BADANIA (22.10.2026) */
.zal-lista{list-style:none;margin:0 0 10px;padding:0}.zal-lista li{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:6px 0;border-bottom:1px solid #EEF1F5}
.zal-guziki{display:flex;gap:4px;flex:0 0 auto}
.zal-nowe{display:grid;gap:8px}.zal-szer{display:grid;gap:3px}.zal-szer input{font:inherit;padding:7px 9px}
.zal-kiedy{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.zal-kiedy .pas[aria-pressed=true]{background:#14254F;color:#fff}
.zal-kiedy select{font:inherit;padding:5px 6px;width:auto;flex:0 0 auto;min-width:0}
.zal-szer .pod{display:inline}.zal-sms{display:flex;gap:8px;align-items:center}

/* PODGLĄD PRZED WYSŁANIEM -- MNIEJSZY I SPOKOJNY (Piotr 22.10.2026: „taki wielki i jakościowo źle wygląda (...) żeby tak nie denerwował”;
   propozycja -> „tak”): węższe białe okno, jedna linijka nagłówka, SMS jako dymek bez ramki telefonu, mail zwinięty, przyciski zawsze
   na dole okna (środek się przewija); na telefonie okno od dołu ekranu. Ten sam wygląd w Gabinecie i w Finansach. */
.pw-tlo{align-items:center;padding:16px}
.pw-okno{max-width:640px;max-height:calc(100vh - 32px);display:flex;flex-direction:column;border-radius:16px;box-shadow:0 24px 60px rgba(15,23,42,.28)}
.pw-glowa{padding:14px 18px 10px;align-items:center;border-bottom:1px solid #eef1f5;flex:0 0 auto}
.pw-nad{display:none}
.pw-glowa h3{font-size:17px;font-weight:700}
.pw-glowa h3 .pw-kto{display:inline;margin:0;font-size:15px;font-weight:400;color:#64748b}
.pw-x{width:32px;height:32px;font-size:14px}
.pw-wstep,.pw-uwaga{margin:10px 18px 0;flex:0 0 auto}
.pw-scena{margin:0;padding:12px 18px 6px;border:0;border-radius:0;background:#fff;overflow:auto;flex:1 1 auto;min-height:0}
.pw-scena-napis{display:none}
.pw-kolumny{display:block;margin:0}
.pw-kolumny > .pw-kol, .pw-kolumny > .pw-kol:only-child{max-width:none;margin:0 0 14px}
.pw-etykieta{font-size:13px;color:#64748b;margin:0 0 6px}
.pw-telefon{background:none;border:0;box-shadow:none;padding:0;border-radius:0;max-width:none}
.pw-telefon-gora{display:none}
.pw-telefon-ekran{background:none;padding:0;min-height:0;border-radius:0}
.pw-dymek{max-width:420px;font-size:14.5px;background:#eef2f7;border-radius:16px 16px 16px 4px;padding:10px 13px;margin:0 0 4px}
.pw-drobne{text-align:left;margin:2px 0 0;font-size:12px;color:#94a3b8}
.pw-mail{border:1px solid #e2e8f0;border-radius:12px;box-shadow:none}
.pw-mail-glowa{padding:8px 12px;font-size:13px}
.pw-mail-tresc{padding:10px 12px;font-size:14px;line-height:1.5}
.pw-mail-tresc.pw-zwiniety{max-height:120px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 65%,transparent);mask-image:linear-gradient(#000 65%,transparent)}
.pw-rozwin{display:block;margin:4px 12px 10px;padding:4px 0;border:0;background:none;color:#2563eb;font:inherit;font-size:13.5px;font-weight:600;cursor:pointer}
.pw-dokument{max-height:240px}
/* KRATKI SMS / E-MAIL (23.10.2026): odznaczona część szarzeje, „— nie pójdzie” (to samo w Finansach: components.css) */
.pw-kanal-l{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.pw-kanal{width:18px;height:18px;margin:0;accent-color:#2563eb;cursor:pointer}
.pw-kanal:disabled,.pw-kanal:disabled + *{cursor:default}
.pw-nie-pojdzie{display:none;color:#b3261e;font-weight:600}
.pw-wylaczony .pw-nie-pojdzie{display:inline}
.pw-wylaczony .pw-telefon,.pw-wylaczony .pw-mail,.pw-wylaczony .pw-drobne,.pw-wylaczony .pw-rozwin{opacity:.35;filter:grayscale(1)}
.pw-wyslij:disabled{opacity:.5;cursor:not-allowed}
.pw-dol{flex:0 0 auto;padding:12px 18px;border-top:1px solid #eef1f5;background:#fff;display:flex;justify-content:space-between;gap:10px}
.pw-anuluj,.pw-wyslij{padding:10px 16px;font-size:15px;border-radius:10px}
@media (max-width:640px){
  .pw-tlo{align-items:flex-end;padding:0}
  .pw-okno{max-width:none;width:100%;max-height:92vh;border-radius:16px 16px 0 0}
  .pw-dol{flex-direction:column-reverse}.pw-anuluj,.pw-wyslij{width:100%}
}

/* okienko streszczenia wywiadu: tekst z pogrubionymi nagłówkami, do poprawienia (24.10.2026) */
.ank-stresz-t{min-height:14em;max-height:60vh;overflow:auto;border:1px solid #c9d2e0;border-radius:8px;padding:8px 10px;background:#fff;white-space:normal;line-height:1.45}
.ank-stresz-t b{color:#14254F}

/* opisy badań obrazowych (24.10.2026): komórka z początkiem tekstu, zakreślone nieprawidłowe fragmenty */
.wt-obr{max-width:260px;text-align:left;font-size:.9em}.wt-obr .wt-kom{text-align:left;white-space:normal}
mark.wt-nieprawid{background:#ffcc80;color:inherit;border-radius:2px;padding:0 1px}
.wt-obr-panel{border:1px solid #c9d2e0;border-left:4px solid #2f6fd1;border-radius:8px;padding:8px 12px;margin:0 0 10px;background:#f7f9fd}
.wt-obr-t{margin:0 0 6px}.wt-obr-naj{background:#e3f2e8;color:#1b6b40;border-radius:10px;padding:1px 8px;font-size:.85em}
.wt-obr-blok{margin:8px 0}.wt-obr-blok p{margin:4px 0}.wt-obr-blok textarea{width:100%}
.wt-obr-tekst{border:1px solid #c9d2e0;border-radius:6px;background:#fff;padding:6px 8px;line-height:1.45;max-height:320px;overflow:auto;white-space:normal}
.wt-obr-tekst mark.wt-nieprawid{cursor:pointer}.wt-obr-kon{background:#eef5ff;border-radius:10px;padding:1px 8px}
.wt-po-terminie,.wt-po-terminie .wt-kom{color:#b3261e;font-weight:600}
/* PROSTY EKRAN BADANIA OBRAZOWEGO (24.10.2026, Piotr: „Weźcie to uprośćcie”): nazwa i data, opis w jednym polu, jeden przycisk */
.wt-obr-prosty{border:1px solid #c9d2e0;border-left:4px solid #2f6fd1;border-radius:8px;padding:10px 14px;margin:0 0 10px;background:#f7f9fd}
.wt-obr-gora{display:flex;flex-wrap:wrap;gap:10px 16px;margin:0 0 6px}.wt-obr-gora label{display:flex;flex-direction:column;font-weight:600;gap:3px}
.wt-obr-gora input[data-obr-rodzaj]{min-width:260px;font-size:1.05em}
.wt-obr-prosty .wt-obr-tekst{min-height:140px;max-height:none;font-size:1.02em}
.wt-obr-uwaga{background:#fff6e0;border:1px solid #f0d58a;border-radius:6px;padding:6px 10px;margin:6px 0}
.wt-obr-wiecej{margin:8px 0;border-top:1px solid #dfe5ef;padding-top:6px}.wt-obr-wiecej summary{cursor:pointer;font-weight:600;color:#2f4f86}
.wt-obr-wiecej textarea{width:100%;margin-top:6px}
.wt-obr-prosty .wt-guziki{margin-top:12px}

/* WYKRESY CIAŚNIEJ (Piotr 24.10.2026: „wszystkie te rzeczy są bardzo oddalone od siebie (...) podzielone na elektrolity i minerały, ale słabo
   to widzę”): wiersze listy niskie, grupa = wyraźny pasek z ▸/▾ do zwinięcia, kratką „cała grupa” i liczbą badań */
.wf-lista{gap:0;font-size:.9em}
.wf-lista label{margin:0;font-weight:400;min-height:0;line-height:1.25}
.wf-lista input[type=checkbox]{width:15px;height:15px;margin:0;flex:none}
.wf-poz{padding:3px 6px 3px 26px;border-radius:5px;align-items:center}.wf-poz:hover{background:#eef3fb}
.wf-poz>span{min-width:0}
.wf-grupa{margin:0 0 3px}
.wf-kat{margin:6px 0 1px;padding:4px 6px;border-radius:6px;background:#e8eef8;color:#1d3a6e;font-size:.86em;text-transform:none;letter-spacing:0;font-weight:700;align-items:center;gap:4px}
.wf-kat label{display:flex;align-items:center;gap:6px;flex:1;min-width:0;cursor:pointer;font-weight:700}
.wf-kat-n{overflow:hidden;text-overflow:ellipsis}
.wf-kat-ile{font-weight:600;color:#4a5f86;background:#fff;border-radius:9px;padding:0 7px;font-size:.92em}
.wf-zwin{border:0;background:none;padding:0 2px;min-height:0;width:18px;cursor:pointer;color:#1d3a6e;font-size:1em;line-height:1}
.wf-zwin::before{content:'▾'}.wf-zw .wf-zwin::before{content:'▸'}
.wf-lista:not(.wf-szuka) .wf-zw .wf-poz{display:none}
.wf-guziki{margin:4px 0}
.wf-daty{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:0 0 8px;font-weight:600}.wf-daty select{width:auto}

/* ZAKRESY FUNKCJONALNE JAKO TABELA (Piotr 24.10.2026: „strasznie zajmują dużo miejsca” -> „tak”): wiersz = badanie; reszta pod „✎ więcej” */
.wt-zak-tabela{display:block}
.wt-zak-r{display:grid;grid-template-columns:minmax(220px,2.4fr) minmax(170px,1.5fr) minmax(110px,1fr) 120px 120px minmax(150px,auto);gap:4px 10px;align-items:center;
  border:0;border-bottom:1px solid #e3e7ee;border-radius:0;padding:6px 8px;background:#fff}
.wt-zak-r:nth-child(odd){background:#f8fafd}
.wt-zak-tnag{position:sticky;top:0;z-index:1;background:#e8eef8 !important;font-weight:700;font-size:.85em;color:#1d3a6e;border-radius:6px 6px 0 0}
.wt-zak-r>.wt-zak-nag{margin:0;min-width:0}.wt-zak-r>.wt-zak-nag .pod{font-size:.8em;line-height:1.25}
.wt-zak-r>.wt-zak-pole>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.wt-zak-r>.wt-zak-pole,.wt-zak-kom>.wt-zak-pole{flex-direction:row;align-items:center;gap:4px;flex-wrap:nowrap}
.wt-zak-kom>.wt-zak-pole>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.wt-zak-kom .wt-zak-j{display:none}
.wt-zak-r>.wt-zak-pole select{max-width:100%}.wt-zak-kom input[data-p=od],.wt-zak-kom input[data-p=do]{width:90px}
.wt-zak-r select,.wt-zak-r input:not([type=checkbox]){min-height:0;height:34px;padding:3px 8px;font-size:.95em}.wt-zak-r select{padding-right:28px;min-width:96px}.wt-zak-r .wt-zak-wiecej textarea{height:auto}
.wt-zak-r .wt-zak-inna{width:90px}
.wt-zak-akcje{display:flex;gap:6px;align-items:center;flex-wrap:nowrap}.wt-zak-akcje button{min-height:0;padding:5px 12px}
.wt-zak-wiecej{grid-column:1/-1;border-top:1px dashed #d5dbe8;padding:6px 0 2px;margin-top:2px}.wt-zak-wiecej[hidden]{display:none}
@media (max-width:900px){.wt-zak-r{grid-template-columns:1fr 1fr}.wt-zak-r>.wt-zak-nag,.wt-zak-akcje{grid-column:1/-1}.wt-zak-tnag{display:none}.wt-zak-r>.wt-zak-pole>span,.wt-zak-kom>.wt-zak-pole>span{position:static;width:auto;height:auto;clip:auto}}

/* ZAKŁADKA „BADANIA OBRAZOWE” (25.10.2026): podzakładka na rodzaj badania, badania od najnowszego */
.wt-obr-zakl{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}.wt-obr-zakl button[aria-pressed=true]{background:#14254F;color:#fff;border-color:#14254F}.wt-obr-zakl button[aria-pressed=true] .pod{color:#dfe6f5}
.wt-obr-karta{border:1px solid #c9d2e0;border-left:4px solid #2f6fd1;border-radius:8px;padding:8px 14px;margin:0 0 10px;background:#fff}.wt-obr-karta h3{margin:2px 0 6px;font-size:1.02em;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.wt-obr-karta p{margin:6px 0;line-height:1.45}.wt-obr-karta mark.wt-nieprawid{background:#ffcc80}.wt-obr-kom{background:#f3f6fb;border-radius:6px;padding:6px 10px}.wt-obr-kon-w.wt-po-terminie{color:#b3261e;font-weight:600}
/* BADANIA OBRAZOWE -- lista po lewej, wybrane badanie po prawej (Piotr 25.10.2026: „zero schludności. Wykorzystaj każde miejsce”) */
.wo-filtry{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:0 0 10px}
.wo-filtry button{font-size:12.5px;padding:3px 10px;border-radius:999px;border:1px solid #cdd6e3;background:#fff;color:#14254F;line-height:1.5;cursor:pointer}
.wo-filtry button span{display:inline-block;min-width:16px;margin-left:3px;padding:0 5px;border-radius:999px;background:#eef2f8;color:#4a5b78;font-size:11px;text-align:center}
.wo-filtry button[aria-pressed=true]{background:#14254F;color:#fff;border-color:#14254F}.wo-filtry button[aria-pressed=true] span{background:rgba(255,255,255,.2);color:#fff}
.wo-czeka{font-size:12.5px;color:#8a5a00;margin-left:6px}
.wo-uklad{display:grid;grid-template-columns:minmax(250px,330px) 1fr;gap:14px;align-items:start}
.wo-lista{border:1px solid #d5dce8;border-radius:10px;background:#fff;overflow:hidden;position:sticky;top:8px;max-height:calc(100vh - 160px);overflow-y:auto}
.wo-lista-gora{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;color:#5b6b7f;background:#f6f8fb;border-bottom:1px solid #e3e8f0;position:sticky;top:0;z-index:1}
.wo-lista-gora button{font-size:12px;padding:2px 8px}
.wo-poz{display:grid;grid-template-columns:auto 1fr auto;gap:0 8px;width:100%;text-align:left;padding:7px 10px;border:0;border-bottom:1px solid #edf0f5;background:#fff;cursor:pointer;font:inherit;color:#16202b;border-radius:0}
.wo-poz:hover{background:#f5f8fd}.wo-poz[aria-pressed=true]{background:#e9f0fb;box-shadow:inset 3px 0 0 #2f6fd1}
.wo-data{font-size:12px;color:#5b6b7f;font-variant-numeric:tabular-nums;white-space:nowrap;padding-top:1px}
.wo-nazwa{font-weight:600;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wo-znaczki{display:flex;gap:4px;font-size:11.5px;white-space:nowrap}.wo-znaczki i{font-style:normal}.wo-z{color:#b45309;font-weight:700}.wo-po{filter:hue-rotate(-40deg) saturate(3)}
.wo-skrot{grid-column:1/-1;font-size:12px;color:#5b6b7f;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px}
.wo-szczeg{border:1px solid #d5dce8;border-radius:10px;background:#fff;padding:12px 18px 14px;min-width:0}
.wo-szczeg header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;border-bottom:1px solid #edf0f5;padding-bottom:8px;margin-bottom:6px}
.wo-szczeg h3{margin:0;font-size:1.08em;color:#14254F}.wo-szczeg header .pod{font-size:12.5px}
.wo-akcje{display:flex;gap:6px;flex-wrap:wrap}.wo-akcje button{font-size:12.5px;padding:4px 10px}
.wo-cz{margin:8px 0 0}.wo-cz h4{margin:0 0 2px;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:#5b6b7f}
.wo-cz p{margin:0;line-height:1.5;font-size:14px;max-width:85ch}.wo-cz mark.wt-nieprawid{background:#ffcc80;padding:0 2px;border-radius:2px}
.wo-wnioski{background:#f6f9ff;border-left:3px solid #2f6fd1;border-radius:6px;padding:6px 10px}
.wo-kom{background:#fffbea;border-left:3px solid #e0a800;border-radius:6px;padding:6px 10px}
.wo-kon{margin:10px 0 0;font-size:13.5px}
@media (max-width:820px){.wo-uklad{grid-template-columns:1fr}.wo-lista{position:static;max-height:300px}}
#wt-tresc .wo-filtry button{min-height:0;height:auto;padding:3px 10px;font-size:12.5px;font-weight:600;box-shadow:none}
#wt-tresc .wo-akcje button,#wt-tresc .wo-lista-gora button{min-height:0;height:auto;padding:3px 9px;font-size:12.5px;box-shadow:none}
#wt-tresc .wo-poz{min-height:0;box-shadow:none;margin:0}
#wt-tresc .wo-szczeg header{padding:0 0 8px;margin:0 0 6px;background:none;position:static;box-shadow:none}
#wt-tresc .wo-poz[aria-pressed=true]{box-shadow:inset 3px 0 0 #2f6fd1}
