@import url(https://fonts.googleapis.com/css?family=Roboto+Condensed:300,300i,400,400i,700,700i&amp;subset=cyrillic);

:root {
  --color-primary: #109cf1;
  --cas-theme-primary: #109cf1;
  --cas-theme-primary-light: #52b0e9;
  --font-base: "Roboto Condensed", Helvetica, Arial, sans-serif;
  --cas-theme-danger: rgb(247, 104, 91);
  --mdc-theme-error: rgb(247, 104, 91);
  --gradient: linear-gradient(
    -225deg,
    rgb(18 51 123 / 79%) 23%,
    rgb(65 103 120 / 0%) 100%
  );
}

body {
  background: #fff;
  font-family: var(--font-base) !important;
}

@font-face {
  font-family: 'radikal_wutbold';
  src: url('/cas/themes/cenagis-theme-default/font/radikalwut-bold-2f3d88a64225319c29572049f36d24f0.woff2') format('woff2');
  font-weight: normal;
  font-style: normal;
}

#serviceui {
  background-color: transparent;
  border-radius: 4px;
  color: var(--color-primary) !important;
}

.cenagis-logo {
  color: var(--color-primary) !important;
  font-size: 52px !important;
}
.mdc-top-app-bar {
  background: transparent !important;
  box-shadow: none !important;
}
.mdc-card {
  box-shadow: none !important;
}
.mdc-text-field > .mdc-text-field__input,
.mdc-text-field:not(.mdc-text-field--disabled):not(.mdc-text-field--outlined):not(.mdc-text-field--textarea)
  > .mdc-text-field__input {
  border-color: #f8f8f8;
}
.mdc-text-field {
  background: #fff !important;
}
input:-webkit-autofill {
  background-color: #fff !important;
}
input:-webkit-autofill {
  -webkit-box-shadow: 0 0 0px 1000px white inset;
}

.mdc-text-field:hover::before {
  background: var(--color-primary);
}
.mdc-drawer-app-content {
  position: relative;
  background-image: var(--gradient),
    url(/cas/themes/cenagis-theme-default/images/bg-0bc2eed296e26a988f206fb7c000376f.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
}

#main-content {
  position: relative;
  z-index: 3;
  margin: 0 auto;
  padding: 0 !important;
}
.cas-footer {
  display: none !important;
}

#content {
  margin: 0 auto;
}

#content .mdc-card {
  margin-bottom: 93px;
}
#content .mdc-card-content {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  background: #ffffffde;
  text-align: center;
  display: block !important;
}

#main-content .mdc-card::before {
  margin: 0 auto;
  content: "CENAGIS";
  font-family: "radikal_wutbold";
  color: #109cf1;
  text-align: center;
  justify-content: center;
  font-size: 52px;
  background: transparent;
  display: flex;
  flex: 100%;
  width: 100%;
  /* dolny odstep byl zerowy, przez co napis przylegal do naglowka strony */
  padding: 59px 0 24px 0;
}
#loginForm {
  text-align: left;
}
section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center {
  background: #ffffffde;
  margin: 90px auto 0 auto;
  border-radius: 4px;
  padding: 69px 0px 21px 0px;
  display: flex;
  width: 570px;
  max-width: 570px;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
  display: none !important;
}

a {
  text-decoration: none !important;
}

.mdc-card {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  background: #ffffffde;
  max-width: 570px;
  margin: 0 auto;
}

#main-content .offset-lg-3 {
  padding: 0 !important;
}

main#main-content div#content .w-100.m-auto.mdc-card.p-4::before {
  padding: 27px 0 23px 0;
}

/* .mdc-card h2,
.mdc-card h3 {
  margin-top: 30px;
}

.form-wrapper h3 {
  margin-top: 0;
} */

.mdc-drawer-app-content main#main-content div#content .alert.alert-success {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  background: #ffffffde;
  max-width: 570px;
  margin: 0 auto;
  padding: 30px;
}

.mdc-drawer-app-content
  main#main-content
  div#content
  .alert.alert-success::before {
  margin: 0 auto;
  content: "CENAGIS";
  font-family: "radikal_wutbold";
  color: #109cf1;
  text-align: center;
  justify-content: center;
  font-size: 52px;
  background: transparent;
  display: flex;
  flex: 100%;
  width: 100%;
  padding: 19px 0 34px 0;
}

.mdc-text-field__input:-webkit-autofill + .mdc-floating-label {
  transform: translateY(-81%) scale(0.75);
}

code,
kbd,
samp,
i.mdi.mdi-security span,
.sidebar-content p,
a,
span,
p {
  word-break: break-word;
}

@media (max-width: 1199px) {
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center,
  .mdc-card {
    width: 480px;
    max-width: 480px;
  }
}

@media (max-width: 768px) {
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center {
    padding: 69px 0px 54px 0px;
    margin: 80px auto 0 auto;
  }
  #content .mdc-card-content::before {
    padding: 59px 0 28px 0;
  }
}

@media (max-width: 992px) {
  #main-content div#content {
    max-width: 480px;
    margin: 0 auto;
  }
}

@media (max-width: 540px) {
  .cenagis-logo {
    font-size: 42px !important;
  }
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center,
  #main-content div#content {
    max-width: 80%;
  }

  .mdc-card {
    width: calc(80% - 1.5em);
  }
  #content .mdc-card {
    width: 100% !important;
  }
  .mdc-top-app-bar__section--align-end,
  .mdc-top-app-bar__section--align-start {
    display: none;
  }
}

@media (max-width: 440px) {
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center,
  #main-content div#content {
    max-width: 90%;
  }
  .mdc-card {
    width: calc(90% - 1.7em);
  }
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center {
    margin: 31px auto 0 auto;
  }
/*  .mdc-top-app-bar--fixed-adjust {
    padding-top: 154px;
  }*/
  i.mdi.mdi-security span,
  .sidebar-content p,
  a,
  span,
  p {
    font-size: 14px;
  }
}

@media (max-width: 340px) {
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center,
  #main-content div#content {
    max-width: 90%;
  }
  section.mdc-top-app-bar__section.mdc-top-app-bar__section--align-center {
    margin: 16px auto 0 auto;
    padding: 49px 0px 21px 0px;
  }
/*  .mdc-top-app-bar--fixed-adjust {
    padding-top: 86px;
  }*/
  .mdc-top-app-bar__section--align-end,
  .mdc-top-app-bar__section--align-start {
    display: none;
  }
}


/* Odstep nad trescia regulaminu (AUP).
   W 6.4 bylo to style="margin-top: 20px" w nadpisanym casAcceptableUsagePolicyView.html.
   Wzorcowy szablon zmienil sie w 8.0 o 14 linii i przeszedl na wspolny fragment
   submitbutton, wiec fork przestal sie oplacac - regula CSS zastepuje go w calosci.
   Selektor :has() zaweza dzialanie do formularza regulaminu; formularz logowania ma
   ten sam identyfikator #fm1. Brak wsparcia :has() kosztuje tylko ten odstep. */
#fm1:has(.aup) {
    margin-top: 20px;
}

/* Blok informacji o usludze (serviceui).
   W 6.4 nadpisywalismy fragments/serviceui.html, zeby zakomentowac obrazki log i wysrodkowac
   tresc. Wzorzec zmienil sie w 8.0 o 65 linii - miedzy innymi zniknal domyslny webapp.png
   pokazywany, gdy usluga nie ma wlasnego loga - wiec fork przestal sie oplacac.
   Selektor elementowy, nie klasowy: klasy pomocnicze upstreamu potrafia zniknac miedzy
   wydaniami i wtedy ukrywanie przestaje dzialac po cichu.
   Zeby przywrocic loga uslug, wystarczy usunac ponizsza regule #serviceui img. */
#serviceui img {
    display: none;
}

#serviceui .d-flex {
    justify-content: center;
}

/* --- Klasy ukrywajace brakujace po forku cas.css (UPDATING.md §5.6) ---------
   Ten motyw ZASTEPUJE stockowy cas.css (cas.standard.css.file nie zawiera /css/cas.css),
   wiec wszystko, co upstream dodal do swojego arkusza po naszym forku z 6.4, u nas nie istnieje.
   Przy klasach dekoracyjnych to tylko blednsze renderowanie, ale klasy ukrywajace zawodza
   OTWARCIEM: tresc, ktora ma byc niewidoczna, staje sie widoczna.

   Sprawdzone w szablonach 8.0.1.2: .d-none (47 uzyc) przychodzi z webjara bootstrap-grid 5.3.8,
   a .sr-only mamy w forku. Brakowaly ponizsze. .collapse wystepuje wylacznie w szablonach
   WebAuthn, ktorych to wdrozenie nie serwuje, wiec nie jest tu dodawana. .bs-hide nie ma
   definicji nigdzie w CAS 8, takze w stocku - zachowuje sie identycznie i nie jest regresja.

   Definicje przepisane doslownie z cas.css 8.0.1.2. */
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.hide {
    display: none;
}

/* --- Ostrzezenie o CapsLocku (UPDATING.md §5.6) -----------------------------
   Nasz fork cas.css z 6.4 ukrywa ostrzezenie regula zalezna od struktury znacznikow:
       .caps-check:not(.caps-on) .caps-warn, .caps-check:not(.caps-on)+.caps-warn
   W 8.0 sekcja hasla zostala przebudowana i .caps-warn nie jest juz ani potomkiem,
   ani sasiadem elementu .caps-check - selektor przestal pasowac, a ostrzezenie
   "CAPSLOCK jest wlaczony!" wyswietlalo sie na stale, rozpychajac pole hasla.

   Stock 8.0 ukrywa je bezwarunkowo, a material.js podmienia klase caps-warn <-> caps-on
   w reakcji na klawisz. Regula przepisana doslownie z cas.css 8.0.1.2.
   Stara regula w naszym cas.css zostaje - jest bezskuteczna, bo nic do niej nie pasuje. */
.caps-warn {
    display: none;
}

.caps-on {
    order: 3;
}

.caps-on DIV SPAN {
    display: block;
}

.caps-on span:before {
    vertical-align: sub;
    content: "\F0027";
    font-size: 24px;
    font: normal normal normal 24px/1 "Material Design Icons";
}

/* --- Ulozenie ostrzezenia o CapsLocku (UPDATING.md §5.6) --------------------
   Nasz fork cas.css z 6.4 ustawia .mdc-input-group { display: flex }. W znacznikach 6.4
   ostrzezenie bylo ZAGNIEZDZONE w .mdc-input-group-field, wiec flex go nie dotyczyl.
   W 8.0 jest RODZENSTWEM tego diva, czyli stalo sie elementem flex i wyladowalo obok pola
   hasla, sciesnione do waskiej kolumny i lamane w polowie slowa.

   Stock 8.0 nie ustawia display:flex na .mdc-input-group w ogole - tam sekcja jest zwyklym
   blokiem i ostrzezenie naturalnie ida pod polem. Nie usuwam flexa z forku, bo od niego zalezy
   ulozenie pola i przycisku podgladu hasla; zamiast tego pozwalam wierszowi sie zawijac
   i daje ostrzezeniu pelna szerokosc. order: 3 jak w stockowym cas.css 8.0.1.2. */
#passwordSection.mdc-input-group {
    flex-wrap: wrap;
}

#passwordSection > .caps-warn,
#passwordSection > .caps-on {
    flex-basis: 100%;
    order: 3;
}

/* --- Kod QR na ekranie rejestracji tokenu MFA ------------------------------
   Obrazek QR wychodzi poza swoja kolumne (col-md-5) i nachodzi na tekst z kluczem
   oraz kodami zdrapki w kolumnie obok.

   Przyczyna nie lezy po naszej stronie: ani stockowy cas.css 8.0.1.2, ani nasz fork,
   ani webjar bootstrap-grid nie zawieraja ZADNEJ reguly dla <img> (jedyne wystapienie
   to #heroimg). Regula img { max-width: 100% } jest czescia bootstrapowego reboota,
   ktorego CAS nie laduje - laduje wylacznie bootstrap-grid. Stockowy CAS 8 ma wiec
   ten sam defekt; ponizsze jest uzupelnieniem braku upstreamu, nie naprawa naszej zmiany. */
#imageQRCode {
    max-width: 100%;
    height: auto;
}

/* --- Paleta MDC 14: usuniecie fioletu Material Design ----------------------
   Miedzy MDC 12 (CAS 6.4) a MDC 14 (CAS 8) zmienil sie sposob tematyzowania komponentow.
   Przeglad calego arkusza material-components-web-14.0.0.css dal nastepujacy obraz:

     81 fioletowych literalow wpisanych wprost w regulach - NIEISTOTNE. MDC emituje je
        parami z wariantem zmiennym, oznaczonym komentarzem @alternate:
            background-color: #6200ee;                         <- dla starych przegladarek
            background-color: var(--mdc-..., var(--mdc-theme-primary, #6200ee));
        Druga deklaracja zastepuje pierwsza w kazdej przegladarce ze zmiennymi CSS.

     11 zmiennych, ktorych fiolet idzie PRZEZ --mdc-theme-primary - nieistotne, bo motyw
        ustawia te zmienna na #109cf1 (dlatego np. samo kolko przelacznika bylo juz niebieskie).

     13 zmiennych z fioletem wpisanym WPROST, nieosiagalnych przez motyw. Z nich:
          - 1 to samo --mdc-theme-primary, ktore ustawiamy,
          - 2 dotycza segmented-button, komponentu ktorego CAS nie renderuje,
          - 10 wymaga ustawienia i jest ponizej.

   Wartosci wyprowadzone z --cas-theme-primary (#109cf1): odcien rozjasniony na tory
   i powierzchnie, przyciemniony na stany interakcji. */

:root {
    /* Kolor akcentu MDC. Domyslnie turkus #018786, uzywany przez .mdc-checkbox,
       .mdc-radio i .mdc-tab-indicator. Ustawiony na blekit motywu, a nie na
       --cas-theme-secondary (#74C163): ta zielen sluzy u nas stanom powodzenia,
       a nie akcentom interfejsu, wiec pola wyboru bylyby zielone bez powodu. */
    --mdc-theme-secondary: var(--cas-theme-primary, #109cf1);

    /* Ripple - najszerzej widoczny. Dotyczy .mdc-card, .mdc-checkbox, .mdc-chip,
       .mdc-dialog, .mdc-icon-button, .mdc-radio, .mdc-select, .mdc-tab i .mdc-ripple-surface. */
    --mdc-ripple-color: var(--cas-theme-primary, #109cf1);

    /* Przyciski tekstowe (.mdc-button bez wariantu raised/outlined) */
    --mdc-text-button-label-text-color: var(--cas-theme-primary, #109cf1);
    --mdc-text-button-hover-state-layer-color: var(--cas-theme-primary, #109cf1);

    /* Przelacznik "Zapamietaj mnie" - stan spoczynkowy.
       Kolko dziedziczylo po --mdc-theme-primary i bylo juz niebieskie; tor mial #d7bbff. */
    --mdc-switch-selected-handle-color: var(--cas-theme-primary, #109cf1);
    --mdc-switch-selected-track-color: #a8d8f7;

    /* Przelacznik - kolko przy fokusie, najechaniu i wcisnieciu (bylo #310077) */
    --mdc-switch-selected-focus-handle-color: #0b6fa8;
    --mdc-switch-selected-hover-handle-color: #0b6fa8;
    --mdc-switch-selected-pressed-handle-color: #0b6fa8;

    /* Przelacznik - tor w tych samych stanach (bylo #d7bbff) */
    --mdc-switch-selected-focus-track-color: #a8d8f7;
    --mdc-switch-selected-hover-track-color: #a8d8f7;
    --mdc-switch-selected-pressed-track-color: #a8d8f7;

    /* Warstwa stanu wokol kolka - dziedziczy po motywie, ustawione jawnie
       zeby nie zalezec od kolejnosci definiowania zmiennych */
    --mdc-switch-selected-focus-state-layer-color: var(--cas-theme-primary, #109cf1);
    --mdc-switch-selected-hover-state-layer-color: var(--cas-theme-primary, #109cf1);
    --mdc-switch-selected-pressed-state-layer-color: var(--cas-theme-primary, #109cf1);
}

/* --- Roznice wygladu wprowadzone przez CAS 8 na stronie logowania --------------
   Szablon 8.0 zmienil znacznik bloku z nazwa uslugi:

     6.4  <div id="serviceui" class="mb-4">                      ... justify-content-center
     8.0  <div id="serviceui" class="banner banner-info mb-4 text-justify"> ... pr-2

   .banner dokleja obwodke i zaokraglenie, text-justify rozciaga odstepy miedzy
   slowami, a utrata justify-content-center przesuwa napis do lewej. Zadna z tych
   regul nie ma !important, wiec wystarczy celniejszy selektor - bez forkowania
   szablonu, ktorego w Fazie 3 swiadomie sie pozbywalismy. */
#serviceui.banner {
    border: 0;
    padding: 0;
    border-radius: 0;
    box-shadow: none;
}

#serviceui.text-justify,
p#securityNotice.text-justify {
    text-align: left;
}

#serviceui .d-flex {
    justify-content: center;
}

/* Odstep nad widzetem CAPTCHA na ekranie resetu hasla. Szablon renderuje go tuz pod
   polem nazwy uzytkownika, bez wlasnego marginesu, wiec przylegal do pola.
   Regula celuje w #recaptchaV2Section, bo opakowaniem w szablonie jest <span> -
   element liniowy, na ktorym margines by nie zadzialal. */
#recaptchaV2Section {
    margin-top: 1.25rem;
}

/* --- Ekran zmiany hasla ----------------------------------------------------------
   Trzy usterki wygladu, wszystkie z szablonow i arkuszy CAS 8, nie z naszej konfiguracji. */

/* 1. Pole "Potwierdz haslo" bylo wyraznie wezsze od pola hasla.
      Motywowy cas.css ma .mdc-input-group { display: flex }, wiec OBA kontenery sa flexami.
      Pole hasla ma w srodku .mdc-input-group-field, ktory dostaje flex: 1 1 auto i rozciaga
      wiersz. Pole potwierdzenia ma tam zwykly <div class="d-flex caps-check"> bez zadnego
      flex-grow, wiec kurczy sie do tresci, a .mdc-text-field { width: 100% } liczy sie juz
      od tego waskiego pudelka. Rosnac ma wiec kontener, nie etykieta.
      Selektor z dzieckiem bezposrednim celuje wylacznie w pole potwierdzenia: przy polu
      hasla .d-flex.caps-check nie jest bezposrednim dzieckiem .mdc-input-group. */
#passwordManagementForm .mdc-input-group > .d-flex.caps-check {
    flex: 1 1 auto;
    min-width: 0;
}

/* 2. Miernik sily hasla byl NIEWIDOCZNY, a etykieta ("Slabe", "Dobre") wedrowala po ekranie.
      passwordMeter.js ustawia #progress-strength-indicator szerokosc w procentach i wpisuje
      w niego etykiete, a szablon ma na nim text-center - stad napis przesuwal sie wraz
      z sila hasla. Samego paska nie bylo widac, bo ANI /cas/css/cas.css, ANI arkusz motywu
      nie definiuja .progress i .progress-bar, a z Bootstrapa ladowany jest wylacznie
      bootstrap-grid, czyli sama siatka bez komponentow.
      min-width: max-content sprawia, ze wypelnienie nigdy nie jest wezsze od napisu -
      etykieta zawsze zaczyna sie w tym samym miejscu, niezaleznie od wyniku. */
#strengthProgressBar.progress {
    display: block;
    height: 1.75rem;
    margin-top: .35rem;
    background: #e9ecef;
    border-radius: 4px;
    overflow: hidden;
}

/* Wariant MDC paska jest w szablonie, ale pozostaje martwy: passwordMeter.js sprawdza
   bar.foundation na obiekcie jQuery, ktory takiej wlasciwosci nie ma, wiec zawsze schodzi
   do wariantu procentowego. Pusty tor MDC tylko dokladalby wysokosci. */
#strengthProgressBar .mdc-linear-progress {
    display: none;
}

#progress-strength-indicator.progress-bar {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    height: 100%;
    min-width: max-content;
    padding: 0 .75rem;
    color: #fff;
    font-weight: 600;
    white-space: nowrap;
    background: #6c757d;
    transition: width .25s ease, background-color .25s ease;
}

#strengthProgressBar.progress-bar-danger  #progress-strength-indicator { background: #c62828; }
#strengthProgressBar.progress-bar-warning #progress-strength-indicator { background: #ef6c00; }
#strengthProgressBar.progress-bar-success #progress-strength-indicator { background: #2e7d32; }

/* 3. Ostrzezenie i podpowiedzi zxcvbn zlewaly sie w jeden akapit - szablon rozdziela je
      samym &nbsp;, a passwordMeter.js skleja podpowiedzi zwyklym odstepem. Rozdzielenie
      na osobne wiersze; kropki na koncach zdan dodaje zxcvbn-pl.js. */
#password-strength-msg #password-strength-warning,
#password-strength-msg #password-strength-suggestions {
    display: block;
}

#password-strength-msg #password-strength-warning:not(:empty) {
    font-weight: 600;
    margin-bottom: .25rem;
}

/* 5. Spojny rytm pionowy calego formularza zmiany hasla.
      Szablon rozdziela sekcje klasami my-3 (1rem gora i dol), ale nie wszedzie: dwa dolne
      komunikaty bledu sa sasiednimi <div> bez zadnego odstepu i przylegaly do siebie,
      a wewnatrz ramki z podpowiedziami siedzi dodatkowe mb-2. Do tego marginesy sasiadow
      sie zlewaja, wiec odstep wynikowy zalezy od tego, ktore bloki sa akurat widoczne.

      Zamiast latac kazdy przypadek z osobna: formularz i kontener komunikatow dostaja
      uklad kolumnowy z jednym gap, a wlasne marginesy blokow sa zerowane. Odstep jest
      wtedy ten sam wszedzie i nie zalezy od zlewania sie marginesow.

      gap, a nie margines na sasiedztwie (div + div): bloki sa pokazywane i ukrywane przez
      display:none, a element ukryty pozostaje sasiadem w drzewie dokumentu - margines
      dokladalby pustej przestrzeni takze wtedy, gdy widoczny jest tylko jeden z nich.
      gap dotyczy wylacznie elementow faktycznie renderowanych.

      !important jest konieczne, bo klasy odstepow Bootstrapa (my-3, my-4, mb-2) same go
      uzywaja i inaczej wygralyby z ta regula. */
#passwordManagementForm {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

#passwordManagementForm > * {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

#password-strength-notes {
    display: flex;
    flex-direction: column;
    gap: 1rem;
}

#password-strength-msg .suggestions {
    margin-bottom: 0 !important;
}
