/*
 * theme.css - warstwa wyglądu SPZLO
 * ---------------------------------------------------------------------------
 * Ładowany JAKO OSTATNI, po bootstrap.css, wcag-contrast.css, main.css
 * i bootstrap-responsive.min.css. Kolejność jest istotna: responsive
 * przychodzi z własnymi regułami w media queries i musi mieć szansę
 * zadziałać, zanim nadpiszemy to, co chcemy nadpisać.
 *
 * ZASADA: ten plik NIE zmienia struktury HTML ani siatki Bootstrapa 2.
 * Dotyka wyłącznie warstwy wizualnej - kolorów, cieni, odstępów,
 * typografii. Dzięki temu wycofanie zmiany = usunięcie jednej linii
 * <link> z dane/header.php, bez ruszania czegokolwiek innego.
 *
 * KONTRAST: każdy kolor tekstu użyty niżej został policzony względem
 * swojego realnego tła (wartości w komentarzach). Minimum WCAG 2.1 AA
 * to 4.5:1 dla tekstu i 3:1 dla granic elementów interaktywnych (1.4.11).
 * =========================================================================== */

:root {
    --spzlo-navy:    #29166f;   /* pasek menu, akcenty              14.60:1 na bieli */
    --spzlo-link:    #0067a3;   /* linki (z wcag-contrast.css)       6.05:1 na bieli */
    --spzlo-text:    #333333;   /* tekst podstawowy                 12.63:1 na bieli */
    --spzlo-muted:   #6f6f6f;   /* tekst pomocniczy                  5.02:1 na bieli */
    --spzlo-surface: #ffffff;   /* tło kart */
    --spzlo-border:  #dfe3e8;   /* granice dekoracyjne (nie kontrolki - bez wymogu 3:1) */
    --spzlo-tint:    #eef0f8;   /* delikatny granatowy odcień na hover */
    --spzlo-zebra:   #f7f8fa;   /* co drugi wiersz tabeli           11.89:1 dla #333 */
    --spzlo-drawer:  #fafbfe;   /* rozwinięta podlista menu          5.85:1 dla linku */
    --spzlo-control: #868e96;   /* granice kontrolek                 3.32:1 na bieli - AA */
    --spzlo-radius:  10px;
    --spzlo-shadow:  0 1px 2px rgba(16, 24, 40, 0.04), 0 4px 12px rgba(16, 24, 40, 0.07);
}

/* === 1. TYPOGRAFIA ========================================================
 * Bootstrap 2 ustawia "Helvetica Neue", Helvetica, Arial - stack z 2013 r.
 * Systemowy stack daje na każdym systemie natywny, dobrze zhintowany krój
 * (Segoe UI na Windows, SF na macOS, Roboto na Androidzie) i jest głównym
 * powodem, dla którego strona przestaje "trącić starością" - bez żadnej
 * zmiany układu.
 *
 * Rozmiar bazowy zostaje 14px, bo od niego zależy geometria paska menu
 * (wysokość 40px + padding). Podnosimy go WYŁĄCZNIE w obszarze treści,
 * czyli tam, gdzie faktycznie się czyta. 16px/1.65 to komfortowy rozmiar
 * dla starszych pacjentów, którzy są tu główną grupą odbiorców.
 * ========================================================================= */
body,
input, button, select, textarea,
.btn {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
                 "Helvetica Neue", Arial, "Noto Sans", sans-serif;
}

#content_1 {
    font-size: 16px;
    line-height: 1.65;
}
#content_1 h3 { font-size: 24px; line-height: 1.3; }
#content_1 h4 { font-size: 19px; line-height: 1.4; }
#content_1 h3,
#content_1 h4,
#content_1 h5 {
    font-weight: 600;
    letter-spacing: -0.01em;
}

/* Tabele: line-height w Bootstrapie 2 jest podany sztywno w pikselach
   (20px), co przy treści 16px robi się ciasne. */
.table th,
.table td {
    line-height: 1.5;
}

/* === 1b. LISTY W TREŚCI - KROPKA PRZY PIERWSZEJ LINII =====================
 * Zgłoszone: w wielolinijkowej pozycji listy kropka wypada w środku
 * (obok DRUGIEJ linii), pierwsza linia "wystaje" nad nią, a tekst stojący
 * po linku ląduje w kolejnej linii.
 *
 * PRZYCZYNA. wcag-contrast.css ustawia dla celu dotykowego 2.5.8:
 *     #content_1 li > a { display: inline-block; min-height: 24px; ... }
 * Element inline-block jest w linii wyrównywany do BAZOWEJ SWOJEJ OSTATNIEJ
 * LINII (tak definiuje baseline dla inline-block CSS 2.1 §10.8.1). Gdy link
 * zawija się na dwie linie, jego druga linia zostaje zrównana z pierwszą
 * linią <li> - a to obok pierwszej linii <li> rysowana jest kropka. Efekt:
 * kropka przy drugiej linii i pierwsza linia wystająca w górę.
 * Do tego inline-block jest atomowy w łamaniu wiersza, więc tekst
 * dopisany przez redaktora po linku ("[160KB, DOC]") nie ma jak wejść
 * obok niego i spada niżej.
 *
 * Dlaczego dopiero teraz: przy 14px linki zawijały się rzadko. theme-1.0
 * podniosło treść do 16px i zawijanie stało się regułą, a theme-1.1
 * dołożyło podkreślenia, które to uwidoczniły. Błąd był tu wcześniej -
 * tylko się nie pokazywał.
 *
 * POPRAWKA. Wracamy do display: inline, czyli do normalnego łamania
 * wiersza: kropka trafia przy pierwszej linii, dalsze linie równają się
 * do treści <li>, a tekst po linku płynie dalej w tej samej linii.
 * Cel dotykowy 24px utrzymujemy PADDINGIEM PIONOWYM: dla elementu inline
 * padding wchodzi do obszaru klikalnego (jest częścią jego border-boxa),
 * a jednocześnie NIE zmienia wysokości linii - więc nie rozpycha listy.
 * 16px kroju bezszeryfowego to ~18,5px pola tekstu, + 2 x 4px = ~26,5px.
 *
 * Reguła z wcag-contrast.css zostaje nienaruszona - nadpisujemy ją tutaj,
 * bo theme.css ładuje się później. Przy najbliższej edycji tamtego pliku
 * warto ją stamtąd usunąć, żeby nie było dwóch sprzecznych zapisów. --- */
#content_1 li > a {
    display: inline;
    min-height: 0;
    line-height: inherit;
    padding-top: 4px;
    padding-bottom: 4px;
}
#content_1 li {
    line-height: 1.6;
}
/* === 2. KARTY (.well) =====================================================
 * .well to główny "pojemnik na treść" na tej stronie - używają go strona
 * główna, aktualności, ogłoszenia, informacje dla pacjentów. Bootstrap 2
 * daje mu szare tło + cień WEWNĘTRZNY, co było modne około 2012 r. i dziś
 * czyta się jako "wgłębienie" zamiast "karta".
 *
 * Zamiana na biały kafelek z cienką ramką i miękkim cieniem ZEWNĘTRZNYM
 * to najbardziej widoczna pojedyncza zmiana w całej tej paczce.
 * Przy okazji poprawia kontrast tekstu pomocniczego: #6f6f6f na #f5f5f5
 * dawało 4.61:1, na bieli daje 5.02:1.
 * ========================================================================= */
.well {
    background-color: var(--spzlo-surface);
    border: 1px solid var(--spzlo-border);
    border-radius: var(--spzlo-radius);
    box-shadow: var(--spzlo-shadow);
    padding: 24px;
}
.well-small {
    padding: 16px 18px;
    border-radius: 8px;
}
.well-large {
    padding: 32px;
}
/* Nagłówek na początku karty nie potrzebuje górnego marginesu - inaczej
   odstęp nad tekstem jest wizualnie dwa razy większy niż pod nim. */
.well > h3:first-child,
.well > h4:first-child,
.well > h5:first-child {
    margin-top: 0;
}
/* Blok grantowy na stronie głównej (dane/start/efs.php) to jedyny .well
   będący bezpośrednim dzieckiem #content - logo wyśrodkowane, z oddechem. */
#content > .well > img:first-child {
    display: block;
    margin: 0 auto 16px;
}

/* --- Karta wyeksponowana (.well-hero) ------------------------------------
 * Zamiennik .hero-unit z Bootstrapa 2, który jest zdecydowanie zbyt krzykliwy
 * (wielki szary blok, font 60px) na stronę placówki medycznej. Tutaj:
 * granatowy pasek u góry, delikatny pionowy gradient, większy padding i cień
 * o stopień mocniejszy. Wystarczy, żeby jeden komunikat wybijał się spośród
 * kilku kart, bez krzyku.
 *
 * Użycie w treści z CMS-a:  <div class="well well-hero"> ... </div>
 * (jest w rozwijanym "Styles" w CKEditorze jako "Karta wyróżniona").
 * Kontrast: tekst #333 na najciemniejszym punkcie gradientu #f4f6fc = 11.69:1,
 * nagłówek granatowy na tym samym tle = 13.51:1. */
.well.well-hero {
    padding: 32px 28px;
    border: 1px solid #d7dcee;
    border-top: 4px solid var(--spzlo-navy);
    border-radius: 4px 4px var(--spzlo-radius) var(--spzlo-radius);
    background-color: #f7f8fd;
    background-image: linear-gradient(180deg, #f4f6fc 0%, #ffffff 65%);
    box-shadow: 0 2px 4px rgba(16, 24, 40, 0.06), 0 10px 28px rgba(16, 24, 40, 0.10);
}
.well.well-hero > h3:first-child,
.well.well-hero > h4:first-child,
.well.well-hero > h3:first-child span,
.well.well-hero > h4:first-child span {
    color: var(--spzlo-navy);
}
.well.well-hero > h3:first-child { font-size: 28px; line-height: 1.25; }
.well.well-hero > h4:first-child { font-size: 22px; line-height: 1.3; }

/* --- Karta z akcentem z boku (.well-accent) ------------------------------
 * Lżejszy stopień wyróżnienia niż .well-hero: sama karta bez zmian, tylko
 * granatowy pasek z lewej. Dobre do "ważna informacja" w serii wpisów,
 * gdzie hero byłoby przesadą. */
.well.well-accent {
    border-left: 4px solid var(--spzlo-navy);
}

/* === 3. USUNIĘCIE "EFEKTÓW 2013" ==========================================
 * text-shadow pod tekstem menu i przycisków oraz gradienty na przyciskach
 * to dwa najsilniejsze sygnały wieku szablonu. Zdjęcie ich nie zmienia
 * układu ani o piksel, a odmładza całość natychmiast.
 * ========================================================================= */
.nav-list > li > a,
.nav-list .nav-header,
.navbar .brand,
.navbar .nav > li > a,
.btn,
.alert,
.label,
.badge {
    text-shadow: none;
}
.btn {
    background-image: none;
    filter: none;
    box-shadow: none;
    border-color: var(--spzlo-control);   /* 3.32:1 na bieli - WCAG 1.4.11 */
    border-radius: 6px;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}
.alert {
    border-radius: 8px;
    box-shadow: none;
}

/* === 4. MENU BOCZNE =======================================================
 * Lista jednostek to najczęściej klikany element strony. Zaokrąglamy blok
 * jako całość, zmiękczamy granice i dajemy czytelną reakcję na hover/fokus.
 * Kolor tła po najechaniu: #eef0f8 - link #0067a3 zachowuje na nim 5.32:1.
 * ========================================================================= */
#sidenav1.nav-tabs.nav-stacked > li > a,
#sidenav2.nav-tabs.nav-stacked > li > a {
    border-color: var(--spzlo-border);
    transition: background-color 0.15s ease, padding-left 0.15s ease;
}
#sidenav1.nav-tabs.nav-stacked > li:first-child > a,
#sidenav2.nav-tabs.nav-stacked > li:first-child > a {
    border-radius: 8px 8px 0 0;
}
#sidenav1.nav-tabs.nav-stacked > li:last-child > a,
#sidenav2.nav-tabs.nav-stacked > li:last-child > a {
    border-radius: 0 0 8px 8px;
}
#sidenav1 .nav-tabs.nav-stacked > li > a:hover,
#sidenav1 .nav-tabs.nav-stacked > li > a:focus,
#sidenav1.nav-tabs.nav-stacked > li > a:hover,
#sidenav1.nav-tabs.nav-stacked > li > a:focus {
    background-color: var(--spzlo-tint);
    border-color: var(--spzlo-border);
}
/* --- Rozwinięta podlista jako "szuflada" wewnątrz kafla nadrzędnego ------
 * Zgłoszony problem: pozycje pierwszego poziomu siedzą w ramkach
 * (.nav-tabs.nav-stacked > li > a), a rozwinięta podlista - nie. Wizualnie
 * wypada z listy i wygląda, jakby należała do następnej pozycji, nie do tej,
 * którą się właśnie rozwinęło.
 *
 * POPRAWIONE 2026-07-30 - pierwsze podejście miało dwa błędy, oba zgłoszone:
 *
 * 1. "Nie licuje się z prawej strony." Kafle pierwszego poziomu bleedują
 *    TYLKO w lewo. Bootstrap daje im margin -15px z obu stron
 *    (.nav-list > li > a, bootstrap.css:4001), ale niżej w tym samym pliku
 *    stoi .nav-stacked > li > a { margin-right: 0 } (linia 4121) - ta sama
 *    specyficzność (0,1,2), więc wygrywa jako późniejsza. Szuflada z
 *    margin: 0 -15px wystawała więc 15px w prawo poza kafle.
 *    Teraz: margin-left -15px, margin-right 0 - dokładnie jak kafle.
 *
 * 2. "Nawet jak menu jest zwinięte, jest ten dodatkowy element, który
 *    odstaje." Bootstrapowe .collapse to height: 0 + overflow: hidden -
 *    ale height NIE obejmuje paddingu ani ramki. Zwinięta szuflada z
 *    padding: 4px 0 + border zostawiała więc widoczny pasek
 *    4 + 4 + 1 = 9px, i to szerszy od menu (patrz punkt 1).
 *    Teraz <ul> nie ma WŁASNEGO pudełka - żadnego paddingu, tła ani ramki.
 *    Wygląd szuflady budują same <li>, które przy height: 0 i
 *    overflow: hidden są niewidoczne. Zwinięta szuflada zajmuje 0px.
 *    (Rozwiązanie przez .collapse.in też by działało, ale zależałoby od
 *    momentu, w którym plugin dodaje klasę - to jest odporne na wszystko.)
 *
 * POPRAWIONE PONOWNIE - karta z theme-1.6 odwróciła założenie z punktu 1.
 * Dopóki #sidenav1 nie miał własnej ramki, brak bleedu z prawej (margin-
 * right: 0, zgodnie z Bootstrapem) był niewidoczny - kafle po prostu
 * kończyły się 15px przed krawędzią <ul>, na pustym tle strony. Gdy
 * theme-1.6 dodało ramkę+cień NA #sidenav1 (rysowane na krawędzi jego
 * padding-boxa, czyli 15px DALEJ niż kafle), te 15px przestały być puste -
 * stały się widoczną szczeliną między krawędzią pozycji a krawędzią karty,
 * odczytywaną jako "dodatkowa ramka z prawej". Teraz kafle I szuflada
 * bledują z PRAWEJ RÓWNIEŻ - obie krawędzie (pozycji i karty) się zlewają. */
#sidenav1 > li > a,
#sidenav2 > li > a {
    margin-right: -15px;
}
#sidenav1 > li > ul.nav-list,
#sidenav2 > li > ul.nav-list {
    margin: 0 -15px;
    padding: 0;
    background: none;
    border: 0;
}
#sidenav1 > li > ul.nav-list > li > a,
#sidenav2 > li > ul.nav-list > li > a,
#sidenav1 > li > ul.nav-list > li.nav-header,
#sidenav2 > li > ul.nav-list > li.nav-header {
    margin: 0;                       /* .nav-list narzuca -15px z obu stron */
    /* Tło rozjaśnione 2026-07-30 (zgłoszone: #f7f8fa nie pasowało do resztki
       menu). #fafbfe jest praktycznie białe (1.03:1 względem bieli), tylko
       z minimalnym granatowym podbarwieniem, żeby pasowało do palety.
       Kontrast na tym tle: link #0067a3 = 5.85:1, nagłówek sekcji
       #6b6b6b = 5.15:1, tekst #333 = 12.30:1 - wszystko z zapasem ponad
       wymagane 4.5:1 (WCAG 1.4.3).

       POPRAWKA 2026-07-30 (zgłoszone: "elementy rozwijane nie licują się
       z ramką całego menu bocznego"). Zmierzone w prawdziwej przeglądarce:
       geometria była JUŻ poprawna - karta 115-385px, wszystkie pozycje
       (kafle i szuflada) 116-384px, czyli równo co do piksela. Problem był
       więc nie w położeniu, a w RYSOWANIU krawędzi: szuflada miała własną
       ramkę 3px z lewej i 1px z prawej, które stawały tuż obok ramki karty.
       Dawało to 4px szarości z lewej i 2px z prawej, przy 1px na kaflach -
       i właśnie ta nierówna grubość linii czytała się jako "wsunięty
       panel", mimo że krawędzie były w tym samym miejscu.
       Teraz szuflada nie rysuje własnych krawędzi bocznych - lewą i prawą
       granicę wyznacza wyłącznie ramka karty, identycznie jak dla kafli.
       Szyna z lewej zostaje jako element PRZEZROCZYSTY: nie dokłada
       szarości w spoczynku, a pod kursorem zmienia się w granat (niżej),
       więc nadal wskazuje wybieraną pozycję. */
    background-color: var(--spzlo-drawer);
    border-left: 3px solid transparent;
}
#sidenav1 > li > ul.nav-list > li > a,
#sidenav2 > li > ul.nav-list > li > a {
    padding: 8px 15px 8px 29px;      /* wcięcie względem kafla = hierarchia */
    transition: background-color 0.15s ease, border-left-color 0.15s ease;
}
/* Nagłówek sekcji ("Ośrodek Zdrowia w Chorągwicy") - Bootstrap oddziela go
   od poprzedniej pozycji marginesem (.nav li + .nav-header { margin-top: 9px }),
   ale margines przerwałby ciągłe tło szuflady. Odstęp robimy paddingiem. */
#sidenav1 > li > ul.nav-list > li.nav-header,
#sidenav2 > li > ul.nav-list > li.nav-header {
    padding: 12px 15px 2px 29px;
}
#sidenav1 > li > ul.nav-list > li:last-child > a,
#sidenav2 > li > ul.nav-list > li:last-child > a {
    border-bottom: 1px solid var(--spzlo-border);
}
#sidenav1 > li:last-child > ul.nav-list > li:last-child > a,
#sidenav2 > li:last-child > ul.nav-list > li:last-child > a {
    /* var(--spzlo-radius) zamiast dawnego stałego 8px - ten narożnik jest
       fizycznie ostatnim elementem w całej karcie #sidenav1, gdy ostatnia
       grupa akordeonu jest rozwinięta, więc musi pasować do promienia karty. */
    border-radius: 0 0 var(--spzlo-radius) var(--spzlo-radius);
}
/* Hover/fokus: tło ciemnieje (a nie jaśnieje, jak w pierwszej wersji -
   reakcja ma być MOCNIEJSZA od stanu spoczynku, nie słabsza), szyna
   z lewej zmienia się w granat.
   Kontrast na #eef0f8: link w spoczynku #0067a3 = 5.32:1, a pod kursorem
   Bootstrap przyciemnia go do #004e7a = 7.78:1. Oba z zapasem. */
#sidenav1 > li > ul.nav-list > li > a:hover,
#sidenav1 > li > ul.nav-list > li > a:focus,
#sidenav2 > li > ul.nav-list > li > a:hover,
#sidenav2 > li > ul.nav-list > li > a:focus {
    background-color: var(--spzlo-tint);
    border-left-color: var(--spzlo-navy);
}

/* --- Obramowanie fokusu przycinane od dołu (zgłoszone) -------------------
 * wcag-contrast.css rysuje fokus jako outline z outline-offset: 2px, czyli
 * 2px NA ZEWNĄTRZ elementu. Kafel "Podstawowa Opieka Zdrowotna" ma
 * bezpośrednio pod sobą rozwiniętą szufladę, której <li> mają własne tło -
 * a te <li> są w drzewie PÓŹNIEJ, więc malują się NA obramowaniu i zjadały
 * jego dolną krawędź. To samo dotyczy pozycji stojących jedna nad drugą
 * w samej szufladzie.
 * Podniesienie fokusowanego elementu na własną warstwę (position: relative
 * + z-index) sprawia, że maluje się nad tłami rodzeństwa. Dotyczy WYŁĄCZNIE
 * stanu :focus, więc w spoczynku nic nie zmienia się w warstwach.
 * (Alternatywa - ujemny outline-offset jak w #menu-bar - działa, ale
 * obramowanie wchodzi wtedy na tekst; tutaj jest na to za mało miejsca.) */
#sidenav1 a:focus,
#sidenav2 a:focus {
    position: relative;
    z-index: 2;
}

/* Rozwinięty kafel nadrzędny ma wyglądać na wybrany - inaczej po rozwinięciu
 * nie widać, do której pozycji należy szuflada. Korzystamy z aria-expanded,
 * czyli z tego samego stanu, który już aktualizuje js/main.js i który obraca
 * chevron - bez dokładania klasy i bez dodatkowego JS. */
#sidenav1 > li > a.accordion-toggle[aria-expanded="true"],
#sidenav2 > li > a.accordion-toggle[aria-expanded="true"] {
    background-color: var(--spzlo-tint);
    font-weight: 600;
}

/* Nagłówek listy ("Nasze jednostki") - dziś jest to <li class="disabled">
 * wyglądające jak zwykła, wyłączona pozycja menu. Zmiana na wyraźny pasek
 * nagłówkowy: granat #29166f, biały tekst = 14.60:1.
 * Nadpisujemy kolor z wcag-contrast.css (.nav .disabled > a { color: #222 }),
 * który zakładał jasne tło - stąd potrzebna wyższa specyficzność. */
#sidenav1 > li.disabled:first-child > a,
#sidenav1 > li.disabled:first-child > a:hover,
#sidenav1 > li.disabled:first-child > a:focus,
#sidenav2 > li.disabled:first-child > a,
#sidenav2 > li.disabled:first-child > a:hover,
#sidenav2 > li.disabled:first-child > a:focus {
    background-color: var(--spzlo-navy);
    border-color: var(--spzlo-navy);
    /* var(--spzlo-radius) zamiast dawnego stałego 8px - żeby ten narożnik
       pasował dokładnie do promienia nowej karty #sidenav1 (patrz niżej). */
    border-radius: var(--spzlo-radius) var(--spzlo-radius) 0 0;
    color: #ffffff;
    letter-spacing: 0.02em;
}

/* --- Menu boczne jako karta - ramka + cień na zewnątrz, jak .well ---------
 * Zgłoszone: .well dostało w theme-1.0 ramkę i cień na zewnątrz, ale menu
 * boczne (#sidenav1 - jednostki, #sidenav2 - RODO) zostało bez tego
 * traktowania i wygląda inaczej niż reszta strony.
 *
 * POPRAWKA 2026-07-30 - pierwsza wersja miała błąd: "dodatkowa ramka
 * z prawej". Border i box-shadow rysują się na krawędzi padding-boxa
 * #sidenav1 (ma domyślnie `padding: 0 15px` z `.nav-list`, bootstrap.css:
 * 3995-3999) - ale pozycje wewnątrz (kafle pierwszego poziomu) bledują
 * dziś TYLKO z lewej (`.nav-stacked > li > a { margin-right: 0 }`,
 * bootstrap.css:4121, nadpisuje domyślny -15px z prawej). Ich prawa
 * krawędź kończyła się więc 15px PRZED nową ramką karty - stąd widoczna
 * szczelina i wrażenie "dodatkowej ramki". Naprawione niżej: przywrócony
 * bleed z prawej dla kafli i szuflady (`margin-right: -15px`), więc obie
 * krawędzie (pozycji i karty) się teraz pokrywają. Padding #sidenav1
 * zostaje domyślny - to WŁAŚNIE ten padding, znoszony przez -15px margin
 * dzieci, sprawia że dzieci sięgają dokładnie do krawędzi karty. Zerowanie
 * tego paddingu (odrzucone podejście) psułoby rachunek w drugą stronę -
 * dzieci wystawałyby 15px POZA nową ramkę.
 *
 * Świadomie NIE użyto overflow:hidden do obcięcia kwadratowych narożników
 * pierwszej/ostatniej pozycji do zaokrąglonego kształtu karty - overflow
 * na tym elemencie obcinałby też obwódkę fokusu (outline-offset: 2px)
 * pozycji stojących przy samej krawędzi #sidenav1, gdy tylko obwódka
 * wystaje poza granicę pudełka. Zamiast tego promień narożników pierwszej
 * i ostatniej pozycji jest PODNIESIONY do tej samej wartości co promień
 * karty (niżej) - kształty się pokrywają, nic nie trzeba obcinać. */
#sidenav1,
#sidenav2 {
    border: 1px solid var(--spzlo-border);
    border-radius: var(--spzlo-radius);
    box-shadow: var(--spzlo-shadow);
    margin-bottom: 20px;   /* odstęp między dwiema kartami menu */
}
/* Bootstrap domyślnie zaokrągla pierwszą/ostatnią pozycję na 4px - za mało
 * przy karcie na 10px (--spzlo-radius). Nagłówek "Nasze jednostki" ma już
 * własną, bardziej specyficzną regułę wyżej (kolor tła), więc jego górne
 * narożniki są tam już podniesione do tej samej wartości - tu tylko dolne
 * narożniki #sidenav1 i oba narożniki #sidenav2 (który nie ma nagłówka,
 * pierwsza pozycja to zwykły link RODO). */
#sidenav1 > li:last-child > a,

#sidenav2 > li:last-child > a {
    border-bottom-left-radius: var(--spzlo-radius);
    border-bottom-right-radius: var(--spzlo-radius);
}
#sidenav2 > li:first-child > a {
    border-top-left-radius: var(--spzlo-radius);
    border-top-right-radius: var(--spzlo-radius);
}

/* --- Pasek menu górnego - cień od dołu -------------------------------------
 * Zgłoszone: porównanie z nową kartą menu bocznego pokazało, że górny pasek
 * wygląda "płasko" - Bootstrap daje mu owszem box-shadow (0 1px 4px, alfa
 * 0,065), ale to wartość dobrana pod jasny, zaokrąglony, statyczny navbar -
 * na pełnej szerokości, na granatowym tle, jest praktycznie niewidoczna.
 *
 * POPRAWKA 2026-07-30 - pierwsza wersja (alfa 0,18, rozmycie 8px) okazała
 * się W PRAKTYCE równie niewidoczna ("czy mam brudny monitor"). Przyczyna
 * nie była w kolizji reguł (sprawdzone - #menu-bar .navbar-inner ma wyższą
 * specyficzność niż generyczna reguła Bootstrapa i poprawnie wygrywa), tylko
 * w samej sile efektu: 0,18 to wciąż mało kontrastowy, rozmyty cień.
 * Teraz DWIE warstwy, jak w technice "elevation" z Material Design: wyraźna,
 * ciemna kreska tuż pod paskiem (mocno widoczna nawet na niekalibrowanym
 * monitorze) + miękka, szersza poświata pod spodem (żeby przejście do treści
 * strony nie było zbyt twarde). Cień tylko od dołu (nie dookoła jak w karcie)
 * - pasek jest przyklejony do góry i do obu boków ekranu, więc cień z tamtych
 * stron i tak nie miałby gdzie się pokazać. */
#menu-bar .navbar-inner {
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.30), 0 6px 14px rgba(0, 0, 0, 0.18);
}

/* --- Grubość liter w pasku menu górnego ------------------------------------
 * Zgłoszone: po zmianie na systemowy stos fontów (sekcja 1 wyżej) litery
 * w górnym menu wyglądają "za chude", szczególnie sama nazwa placówki.
 * Dwie przyczyny nakładają się na siebie:
 *   1. Bootstrap ustawia marce (.navbar .brand) font-weight: 200 - to
 *      "extra light", najcieńszy dostępny stopień. W starym stosie
 *      (Helvetica Neue/Arial) renderował się nieco grubiej niż w wielu
 *      systemowych fontach (np. Segoe UI przy wadze 200 jest naprawdę
 *      nitkowaty).
 *   2. theme-1.0 zdjęło text-shadow z .navbar .brand i .navbar .nav > li > a
 *      (sekcja 3 niżej) - w oryginale Bootstrapa ten delikatny biały cień
 *      pod tekstem dawał złudzenie większej grubości liter ("emboss").
 *      Bez tego cienia chudy krój jest chudy bez żadnej maskującej sztuczki.
 * Zamiast przywracać text-shadow (który miał inne, celowe powody usunięcia -
 * "efekty 2013"), podnosimy wagę czcionki wprost - to trwalsze i czytelniejsze
 * rozwiązanie niż optyczna sztuczka cieniem.
 *
 * POPRAWKA 2026-07-30: pierwsze wartości (700/600) były za mocne - zgłoszone
 * "jest za dużo". Zejście na 500 (medium) dla marki i 400 (regular) dla
 * pozycji menu. Marka nadal jest o stopień grubsza od pozycji, więc zostaje
 * wyróżniona, ale bez ciężkiego, "krzykliwego" bloku tekstu. Wartość 400
 * dla pozycji to normalna grubość pisma - czyli w praktyce naprawa polega
 * tu głównie na tym, że marka przestaje być rysowana wagą 200 (extra light),
 * którą narzuca Bootstrap. */
#menu-bar .brand {
    font-weight: 500;
}
#menu-bar .nav > li > a {
    font-weight: 400;
}

/* Logo nad menu - oddech pod spodem, bez rozpychania na wąskich ekranach. */
#imgdiv img {
    max-width: 100%;
    height: auto;
    margin-bottom: 16px;
}

/* === 5. TABELE ============================================================
 * Naprzemienne tło wierszy - liczy się głównie przy długich wykazach
 * (cennik laboratorium ma 77 wierszy). Celujemy WYŁĄCZNIE w komórki <td>
 * presetu "tbl-list", żeby nie wchodzić w drogę wierszom .info
 * (nagłówki sekcji, które są <th>) ani wyśrodkowanym grafikom.
 * Kontrast tekstu #333 na #f7f8fa: 11.89:1.
 * ========================================================================= */
.tbl-list > tbody > tr:nth-child(even) > td {
    background-color: var(--spzlo-zebra);
}

/* === 5b. LINKI W TEKŚCIE - PODKREŚLENIE ===================================
 * To nie kosmetyka, a domknięcie WCAG 1.4.1 (Use of Color, poziom A).
 * Kolor linku #0067a3 kontrastuje z tekstem #333333 tylko 2.09:1 - a norma
 * wymaga 3:1, jeżeli kolor jest JEDYNYM wyróżnikiem. Bootstrap 2 podkreśla
 * linki dopiero na hover, czyli w spoczynku link w akapicie jest odróżnialny
 * wyłącznie barwą. Podkreślenie to zamyka.
 *
 * Celujemy tylko w linki WEWNĄTRZ tekstu ciągłego. Menu, listy nawigacyjne,
 * akordeony i linki stojące samodzielnie (te, którymi zajmuje się
 * markStandaloneParagraphLinks w main.js) są rozpoznawalne z kontekstu i
 * pozostają bez podkreślenia - inaczej menu boczne zamieniłoby się w gąszcz.
 * text-underline-offset odsuwa kreskę od ogonków (ą, ę, ł) - bez tego
 * podkreślenie przecina polskie znaki diakrytyczne. */
#content_1 p > a,
#content_1 li > a,
#content_1 td > a,
#content_1 th > a,
#content_1 address > a {
    text-decoration: underline;
    text-underline-offset: 0.15em;
}
/* Wyjątek: link, który JEST całym akapitem (np. załącznik do pobrania),
   dostaje już od main.js ikonę i opis typu pliku - podkreślenie byłoby
   trzecim wyróżnikiem naraz. */
#content_1 p > a.standalone-link-target {
    text-decoration: none;
}
#content_1 p > a.standalone-link-target:hover,
#content_1 p > a.standalone-link-target:focus {
    text-decoration: underline;
}

/* === 5c. ALERTY - PASEK Z LEWEJ =========================================
 * Bootstrap 2 rysuje alert jako blok z cienką ramką w kolorze tła - efekt
 * jest bardzo miękki i w serii kart alert łatwo przeoczyć. Dokładamy pasek
 * z lewej w tym samym kolorze, którego wcag-contrast.css używa już na tekst
 * danego typu alertu, więc paleta się nie rozjeżdża i nie trzeba liczyć
 * nowych kontrastów. */
.alert {
    border-left-width: 4px;
    border-left-color: #5c4400;   /* ten sam kolor co tekst .alert */
}
.alert-info    { border-left-color: #205064; }
.alert-success { border-left-color: #2f5c2e; }
.alert-error,
.alert-danger  { border-left-color: #953b3b; }

/* === 5d. AKTYWNA POZYCJA W MENU GÓRNYM ==================================
 * Bootstrap 2 zaznacza aktywną pozycję czernią (#111) z cieniem wewnętrznym -
 * na granatowym pasku wygląda jak dziura. Zamiast tego: ciemniejszy granat
 * i złoty pasek pod spodem (ten sam odcień #ffbf47, którego wcag-contrast.css
 * używa na obwódkę fokusu, więc paleta zostaje spójna).
 * Biały tekst na #1d0f4f = 17.03:1, złoty pasek na tym tle = 10.37:1.
 * Stan jest przekazywany również nie-wizualnie: js/main.js ustawia na tym
 * linku aria-current="page". */
.navbar-inverse .nav > .active > a,
.navbar-inverse .nav > .active > a:hover,
.navbar-inverse .nav > .active > a:focus {
    background-color: #1d0f4f;
    box-shadow: inset 0 -3px 0 #ffbf47;
    color: #ffffff;
}

/* === 6. KOTWICE POD PRZYKLEJONYM MENU =====================================
 * Pasek menu jest position:fixed i zasłania 60px u góry ekranu. Skok do
 * kotwicy (np. index.php?go=aktualnosci#EFS2022 - link z bloku grantowego
 * na stronie głównej) ustawiał cel DOKŁADNIE pod paskiem, czyli poza
 * widokiem. scroll-margin-top rezerwuje ten pas przy każdym skoku -
 * dotyczy to także przejścia fokusu klawiaturą (WCAG 2.4.11 Focus Not
 * Obscured w 2.2, ale to po prostu poprawne zachowanie).
 * ========================================================================= */
[id] {
    scroll-margin-top: 80px;
}
html {
    scroll-behavior: smooth;
}

/* === 7. OBRAZY W TREŚCI ===================================================
 * Zabezpieczenie przed rozjechaniem układu, gdy redaktor wklei zdjęcie
 * szersze niż kolumna treści. Bootstrap 2 (w odróżnieniu od 3+) NIE ma
 * tego domyślnie. W stopce reguła już była - tu obejmuje całą treść.
 * ========================================================================= */
#content img,
#content_1 img {
    max-width: 100%;
    height: auto;
}

/* === 8. TABELA PRZEWIJANA W POZIOMIE (dopina js/ui.js) ====================
 * Bootstrap 2 nie ma odpowiednika .table-responsive z wersji 3+. Skrypt
 * owija zbyt szerokie tabele w ten kontener. tabindex="0" nadawany przez
 * skrypt jest tu konieczny: obszar, który się przewija, MUSI dać się
 * przewinąć z klawiatury (WCAG 2.1.1 Keyboard).
 * ========================================================================= */
.table-scroll {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    margin-bottom: 20px;
}
.table-scroll > .table {
    margin-bottom: 0;
}
.table-scroll:focus {
    outline: 3px solid var(--spzlo-link);
    outline-offset: 2px;
}

/* === 9. PRZYCISK "NA GÓRĘ" (dopina js/ui.js) ==============================
 * 44x44px - z zapasem ponad minimum 24x24 z WCAG 2.5.8 (Target Size, AA
 * w 2.2). Chowany atrybutem hidden, a nie samym CSS-em: dzięki temu, gdy
 * jest niepotrzebny, znika też z kolejności Tab i z drzewa dostępności.
 * WCAG 1.4.11: przycisk jest rozpoznawalny dzięki samemu wypełnieniu -
 * granat #29166f kontrastuje z białym tłem strony 14.60:1, więc ramka
 * nie jest potrzebna do jego zidentyfikowania.
 *
 * POPRAWKA 2026-07-30: zgłoszone "strzałka za mała i słabo widoczna".
 * Ikona to teraz SVG (patrz ui.js) zamiast znaku Unicode &uarr; - font-size/
 * line-height do centrowania glifu tekstowego już niepotrzebne, przycisk
 * centruje SVG flexboxem. Sam SVG rysuje BIAŁY KRĄŻEK ze strzałką w kolorze
 * granatowym - dwubarwna "plakietka" zamiast jednolitego koła, łatwiejsza
 * do odróżnienia na pierwszy rzut oka (zgłoszony pomysł). Kontrast
 * strzałki: #29166f na białym = 14.60:1 - identyczny jak poprzednio,
 * tylko w odwróconych barwach. ========================================= */
.to-top {
    position: fixed;
    right: 20px;
    bottom: 20px;
    z-index: 1000;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--spzlo-navy);
    box-shadow: 0 2px 8px rgba(16, 24, 40, 0.25);
    cursor: pointer;
    transition: background-color 0.15s ease, transform 0.15s ease;
}
.to-top svg {
    display: block;
}
.to-top:hover,
.to-top:focus {
    background-color: #1d0f4f;
    transform: translateY(-2px);
}
.to-top[hidden] {
    display: none;
}
@media (max-width: 767px) {
    .to-top { right: 12px; bottom: 12px; }
}

/* === 9b. NAGŁÓWEK WYDRUKU - na ekranie niewidoczny ======================
 * Markup siedzi w dane/header.php. display:none usuwa go też z drzewa
 * dostępności, więc czytnik ekranu nie czyta dwa razy nazwy placówki
 * (jest już w <h1 class="sr-only">). */
.print-header {
    display: none;
}

/* === 10. OGRANICZENIE RUCHU ===============================================
 * WCAG 2.3.3 (Animation from Interactions, AAA) plus zwykła przyzwoitość
 * wobec osób z zaburzeniami przedsionkowymi: jeżeli system prosi o mniej
 * ruchu, wyłączamy płynne przewijanie i wszystkie przejścia.
 * ========================================================================= */
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after {
        transition-duration: 0.01ms !important;
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
    }
}

/* === 11. WYDRUK ===========================================================
 * Realny scenariusz w przychodni: pacjent drukuje grafik przyjęć albo
 * cennik badań. Do tej pory wydruk zawierał pasek menu, całe menu boczne
 * i logotypy ze stopki, a treść wychodziła na 3/4 szerokości kartki.
 * ========================================================================= */
@media print {
    /* Kontener flex z sekcji "stopka przyklejona do dołu" (css/main.css) jest
       na papierze zbędny i tylko rozciągałby pierwszą stronę na całą wysokość
       kartki. Na wydruku wracamy do zwykłego przepływu bloków. */
    body {
        display: block !important;
        min-height: 0 !important;
        padding-top: 0 !important;
        font-size: 12pt;
        background: #ffffff;
    }
    #menu-bar,
    .skip-link,
    .to-top,
    #imgdiv,
    .span3[role="navigation"],
    #footer {
        display: none !important;
    }
    #content.span9,
    #content {
        width: 100% !important;
        float: none !important;
        margin-left: 0 !important;
    }
    #content_1 { font-size: 12pt; }

    /* --- Nagłówek wydruku ------------------------------------------------
     * Do 2026-07 kartka wychodziła z drukarki bez żadnej informacji o
     * placówce i bez wskazania, z której podstrony pochodzi - pacjent
     * dostawał sam grafik przyjęć, bez kontekstu. Teraz na górze pierwszej
     * strony jest logo, dane kontaktowe, nazwa podstrony i adres źródłowy.
     *
     * Uwaga: nagłówek jest częścią przepływu, więc drukuje się na PIERWSZEJ
     * stronie. Powtarzanie go na każdej kartce wymagałoby position:fixed,
     * co w drukowaniu bywa kapryśne (nakładanie się na treść przy dłuższych
     * tabelach) - świadomie nie wchodzimy w to bez potrzeby. */
    .print-header {
        display: block;
        overflow: hidden;
        margin-bottom: 16pt;
        padding-bottom: 8pt;
        border-bottom: 2pt solid #29166f;
        color: #000000;
        font-size: 9.5pt;
        line-height: 1.35;
    }
    .print-header-logo {
        float: left;
        width: 58pt;
        height: auto;
        margin-right: 12pt;
    }
    .print-header-org {
        overflow: hidden;
    }
    .print-header-name {
        font-size: 12pt;
        font-weight: bold;
    }
    .print-header-page {
        clear: both;
        margin: 10pt 0 2pt;
        font-size: 15pt;
        font-weight: bold;
        line-height: 1.2;
    }
    .print-header-meta {
        margin: 0;
        color: #333333;
        font-size: 8.5pt;
    }

    .well {
        box-shadow: none;
        border: 1px solid #999999;
        background: #ffffff !important;
        break-inside: avoid;
    }
    /* .well-hero na papierze: sam pasek u góry wystarczy, gradient i tak
       drukarka zamieni w szarą plamę oszczędzającą toner albo i nie. */
    .well.well-hero {
        background: #ffffff !important;
        border: 1px solid #999999;
        border-top: 3pt solid #29166f;
    }
    /* Adres URL przy linkach zewnętrznych - na papierze sam tekst linku
       jest bezużyteczny. Linki wewnętrzne (index.php?go=...) pomijamy,
       bo ich adresy nic czytelnikowi nie mówią. */
    #content_1 a[href^="http"]::after {
        content: " (" attr(href) ")";
        font-size: 90%;
        word-break: break-all;
    }
    /* Nagłówek tabeli powtarzany na każdej stronie wydruku - działa
       tylko dla tabel z prawdziwym <thead> (nowe szablony CKEditor). */
    thead { display: table-header-group; }
    tr, .accordion-group { break-inside: avoid; }
    /* Zwinięte sekcje akordeonu drukujemy rozwinięte - inaczej wydruk
       strony "Ogłoszenia" byłby pusty. */
    .collapse { display: block !important; height: auto !important; }
    /* Kontener przewijany (js/ui.js) na papierze musi pokazać całość. */
    .table-scroll { overflow: visible !important; }
}
