/* NanoSoftWeb.Blazor – wizyty kalendarza: KOPIA 1:1 sekcji „Kalendarz: wizyty” z NanoSoftWeb/Content/vendor/nanosoft/devexpress.css
   (od nagłówka sekcji do kwadracika zabiegu; test ZgodnoscZeStaraAplikacja porównuje). Zmiany – najpierw w starej aplikacji.
   Ładowany przez strony z wizytami (Ustawienia → Kalendarz: podgląd wizyt; później kalendarz). */

/* ===== Kalendarz: wizyty (Code/KolorWizyty.cs) =====
   Kolor zabiegu to dana: --ns-apt i --ns-apt-tekst z klasy ns-apt-l{ID} (KolorWizyty.CssEtykiet), przy kilku zabiegach
   pasek akcentu --ns-apt-pasek w stylu inline wizyty. Klasy kontrolki
   (UstawieniaWizyt.KlasyKontenera): ns-apt-ton | ns-apt-pelny, ns-apt-int-1..3, ns-apt-przezr.
   Tło = warstwa dxsc-apt-bg w kolorze zabiegu z kryciem --ns-apt-* z palety (shell.css) nad podkładem
   dxsc-apt-intermediate-bg (--ns-surface; przy przezroczystości bez podkładu – widać siatkę). Wersja mobilna renderuje
   wizyty bez naszych szablonów i ma kolor tła inline, stąd !important. */
.ns-apt-ton.ns-apt-int-1 { --ns-apt-krycie: var(--ns-apt-ton-1); }
.ns-apt-ton.ns-apt-int-2 { --ns-apt-krycie: var(--ns-apt-ton-2); }
.ns-apt-ton.ns-apt-int-3 { --ns-apt-krycie: var(--ns-apt-ton-3); }
.ns-apt-pelny.ns-apt-int-1 { --ns-apt-krycie: var(--ns-apt-pelny-1); }
.ns-apt-pelny.ns-apt-int-2 { --ns-apt-krycie: var(--ns-apt-pelny-2); }
.ns-apt-pelny.ns-apt-int-3 { --ns-apt-krycie: var(--ns-apt-pelny-3); }
.ns-apt-pelny.ns-apt-przezr.ns-apt-int-1 { --ns-apt-krycie: calc(var(--ns-apt-pelny-1) - .25); }
.ns-apt-pelny.ns-apt-przezr.ns-apt-int-2 { --ns-apt-krycie: calc(var(--ns-apt-pelny-2) - .25); }
.ns-apt-pelny.ns-apt-przezr.ns-apt-int-3 { --ns-apt-krycie: calc(var(--ns-apt-pelny-3) - .25); }

.ns-apt .dxsc-apt-gradient { display: none; }
.ns-apt .dxsc-apt-intermediate-bg { background: var(--ns-surface) !important; opacity: 1 !important; }
.ns-apt-przezr .ns-apt .dxsc-apt-intermediate-bg { background: none !important; }
.ns-apt .dxsc-apt-bg { background: var(--ns-apt, var(--ns-faint)) !important; opacity: var(--ns-apt-krycie, .26) !important; }
/* Pasek statusu DevExpress zostaje tylko w widokach bez naszych szablonów (oś czasu, wersja mobilna): podkład i ramka
   z tokenów. W szablonach status pokazuje ikona .ns-apt-sms */
.ns-apt .dxsc-apt-status-container { background-color: var(--ns-surface); border-color: var(--ns-border); }

/* Akcent zabiegu przy lewej krawędzi. Tonowany – zawsze; pełny – przy kilku zabiegach (tło w kolorze 1. zabiegu,
   wszystkie w pasku; pasy tła na szerokiej wizycie wyglądały jak osobne wizyty). Obok paska statusu DevExpress
   akcent odsunięty o 2 px, żeby się nie zlewały */
.ns-apt-ton .ns-apt .dxsc-apt-container::before,
.ns-apt-pelny .ns-apt-wiele .dxsc-apt-container::before {
    content: "";
    position: absolute;
    z-index: 1;
    top: 0;
    bottom: 0;
    left: 0;
    width: 4px;
    background: var(--ns-apt-pasek, var(--ns-apt, var(--ns-faint)));
    pointer-events: none;
}
.ns-apt-pelny .ns-apt-wiele .dxsc-apt-container::before { box-shadow: 1px 0 0 var(--ns-surface); }
.ns-apt .dxsc-apt-status-container + .dxsc-apt-container::before { left: 2px; }
.ns-apt-ton .ns-apt-wiele .dxsc-apt-bg { background: var(--ns-text) !important; opacity: .06 !important; }

/* Pełny: tło w kolorze zabiegu, tekst czarny/biały z kontrastu albo „Kolor czcionki” zabiegu (także przy przezroczystości –
   tło zostaje nasycone, tekst palety byłby na nim nieczytelny) */
.ns-apt-pelny .ns-apt,
.ns-apt-pelny .ns-apt .dxeBase_Office365,
.ns-apt-pelny .ns-apt .dxeBase_Office365Dark { color: var(--ns-apt-tekst, var(--ns-text)); }
/* Ikony DevExpress w wizycie (cykl, wyjątek cyklu; dzwonek przypomnienia ukryty – StatusSmsWizyty.UkryjDzwonekPrzypomnienia)
   i strzałki „Od/Do” wizyty wychodzącej poza widoczny zakres (left/right-container) – w kolorze tekstu: w pełnym z filtra
   zabiegu (KolorWizyty.ZmienneEtykiety), w tonowanym jak tekst palety (ciemna paleta: ciemny.css); przygaszone, żeby nie
   konkurowały z treścią i ikoną SMS */
.ns-apt .dxsc-apt-images-container img,
.ns-apt .dxsc-apt-left-container img,
.ns-apt .dxsc-apt-right-container img { opacity: .6; }
.ns-apt-pelny .ns-apt .dxsc-apt-images-container img,
.ns-apt-pelny .ns-apt .dxsc-apt-left-container img,
.ns-apt-pelny .ns-apt .dxsc-apt-right-container img { filter: var(--ns-apt-ikony, none); }
/* Agenda: klasy ns-apt mają komórki strzałka „Od” – czas – strzałka „Do” (KolorWizyty.DostosujWizyte). Tło jak warstwa
   dxsc-apt-bg innych widoków (kolor zabiegu z kryciem palety), ale na samych komórkach – warstwa DevExpress ukryta.
   Akcent zabiegu przy lewej krawędzi obszaru: tonowany zawsze, pełny przy kilku zabiegach (pasek kilku kolorów wymaga
   stylu inline, którego agenda nie przyjmuje – akcent w kolorze 1. zabiegu). Tekst: pełny – reguła wyżej (--ns-apt-tekst) */
.dxscAgendaView .dxsc-agenda-apt:has(td.ns-apt) .dxsc-apt-bg { display: none; }
.dxscAgendaView td.ns-apt { background-color: color-mix(in srgb, var(--ns-apt, var(--ns-faint)) calc(var(--ns-apt-krycie, .26) * 100%), transparent); }
.ns-apt-ton .dxscAgendaView td.ns-apt.dxsc-apt-start-arrow-cell,
.ns-apt-pelny .dxscAgendaView td.ns-apt-wiele.dxsc-apt-start-arrow-cell { box-shadow: inset 4px 0 0 var(--ns-apt, var(--ns-faint)); }
.ns-apt-pelny .dxscAgendaView td.ns-apt img { filter: var(--ns-apt-ikony, none); }
/* Ikony cyklu w wizycie pionowej (dzień/tydzień) w jednej osi z ikoną SMS: środek 20 px od prawej, 6 px od dołu jak SMS od góry */
.ns-apt .dxsc-apt-content-layer > .dxsc-apt-images-container { right: 4px; bottom: 2px; }

/* Status potwierdzenia SMS (Code/StatusSmsWizyty.cs, w tytule wizyty): ikona w prawym górnym rogu na plakietce w kolorze
   tła palety, żeby nie ginęła na kolorowym kafelku; kolor stanu z tokenów, jak na SMS → Odebrane */
.ns-apt-sms {
    position: absolute;
    z-index: 3;
    top: 2px;
    right: 2px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: var(--ns-surface);
    box-shadow: 0 0 0 1px color-mix(in srgb, var(--ns-text) 18%, transparent);
    color: var(--ns-text-muted);
    line-height: 0;
}
.ns-apt-sms svg { width: 14px; height: 14px; }
/* Agenda: ta sama ikona w kolumnie ikon wizyty, nad ikoną cyklu (StatusSmsWizyty.IkonaWAgendzie). To <img> ze sprite'a DevExpress –
   kształt z maski (ścieżki jak symbole ns-i-… w Layout.master), kolor stanu przez currentColor z klas .ns-apt-sms-* poniżej */
.dxscAgendaView .dxsc-apt-images-container { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.ns-agenda-sms { color: var(--ns-text-muted); }
img.ns-agenda-sms {
    display: block;
    width: 16px;
    height: 16px;
    background: currentColor;
    -webkit-mask: var(--ns-sms-ikona) center / contain no-repeat;
    mask: var(--ns-sms-ikona) center / contain no-repeat;
}
/* DevExpress przygasza obrazki kolumny ikon (.dxsc-apt-icon-cell img { opacity: .5 }) – ikona SMS w pełnym kolorze jak w widoku dnia */
.dxsc-apt-icon-cell img.ns-agenda-sms { opacity: 1; }
/* Pierwsza ikona kolumny (SMS albo cykl / wyjątek DevExpress, wszystkie 16 px) na środku liter pierwszej linii
   (opiekun – pacjent), nie na środku pola linii – 3 px niżej */
.dxscAgendaView .dxsc-apt-images-container { padding-top: 3px; }
.ns-agenda-sms-message { --ns-sms-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M4 4h16v12H8l-4 4z'/%3E%3C/svg%3E"); }
.ns-agenda-sms-check-circle { --ns-sms-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m8 12.5 2.8 2.8L16 10'/%3E%3C/svg%3E"); }
.ns-agenda-sms-x-circle { --ns-sms-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m15 9-6 6M9 9l6 6'/%3E%3C/svg%3E"); }
.ns-agenda-sms-clock { --ns-sms-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E"); }
.ns-agenda-sms-alert-circle { --ns-sms-ikona: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7.5v5.5M12 16.5h.01'/%3E%3C/svg%3E"); }
.ns-apt-sms-ok { color: var(--ns-ok); }
.ns-apt-sms-uwaga { color: var(--ns-warn); }
.ns-apt-sms-odwolana { color: var(--ns-danger); }
/* Wizyty jednowierszowe (miesiąc, cały dzień): mniejsza ikona na środku wysokości */
.dxsc-horizontal-apt .ns-apt-sms,
.dxsc-horizontal-same-day-apt .ns-apt-sms { top: 50%; width: 16px; height: 16px; transform: translateY(-50%); }
.dxsc-horizontal-apt .ns-apt-sms svg,
.dxsc-horizontal-same-day-apt .ns-apt-sms svg { width: 12px; height: 12px; }
/* Miejsce na ikonę, żeby tekst pod nią nie wchodził */
.dxsc-apt-content-layer:has(.ns-apt-sms) { padding-right: 22px; }

/* Kwadracik zabiegu w treści wizyty i w podpowiedzi (ExtraAppointmentDisplayText: square{ID}, kolor z CssEtykiet) */
div[class^="square"] {
    position: static;
    display: inline-block;
    width: 10px;
    height: 10px;
    margin-right: 5px;
    border-radius: 2px;
    vertical-align: -1px;
    background-color: var(--ns-apt, var(--ns-faint));
    box-shadow: 0 0 0 1px color-mix(in srgb, currentColor 35%, transparent);
}

