/* ============================================================
   Navigator Hub — PULPIT KANBAN (4 kolumny)
   Kierunek wizualny: pulpit-kanban-makieta-v3 (do dalszej iteracji).
   WYŁĄCZNIE tokeny + „pokrętła" --kb-* (jedno miejsce). Zero literałów
   w markupie. Kolory pasków typu: z tokenów, gdzie są; „next/followup"
   (niebieski) zdefiniowany lokalnie — brak takiego tokenu w palecie.
   ============================================================ */
.nh-kb {
  /* ── POKRĘTŁA (jedno miejsce; NH.kanbanConfig mirroruje je z JS) ── */
  --kb-gap:        var(--space-2);            /* odstęp kolumn/kart (gęściej) */
  --kb-pad:        14px 16px 16px 18px;       /* padding karty (wariant Lekki) */
  --kb-card-shadow:none;                        /* Lekki: karty płaskie, bez cienia */
  --kb-note-lines: 2;                          /* wysokość notatki (wiersze) */
  --kb-bar-w:      3px;                         /* szer. tabu akcentu przy nazwisku */
  --kb-radius:     var(--radius-md);
  --kb-card-min:   88px;                        /* min. wysokość karty (kompakt) */
  --kb-col-max:    340px;                       /* ~3 karty widoczne bez przewijania → scroll */
  /* kolory pasków typu */
  --kb-c-new:      var(--nh-accent);
  --kb-c-next:     #3B72B0;
  --kb-c-missed:   var(--nh-miss-text);
  --kb-c-noanswer: var(--nh-fail-text);
  --kb-c-task:     var(--nh-fail-text);
  --kb-c-followup: #3B72B0;

  font-family: var(--nh-font-body);
  color: var(--nh-text);
}
.nh-kb * { box-sizing: border-box; }

.nh-kb-board {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));   /* 2 GRUPY po 2 kolumny */
  gap: calc(var(--kb-gap) * 1.4);
  align-items: start;
}
.nh-kb-group { display: flex; flex-direction: column; min-width: 0; }
.nh-kb-grouph {
  /* nagłówek nadgrupy = ten sam co „OŚ CZASU — POŁĄCZENIA I SMS" (redesign-kokpit.css):
     font-head 500, 18px, --nh-text, uppercase, --nh-ls-section, wyrównanie do lewej (akapit) */
  font-family: var(--nh-font-head); font-weight: 500; font-size: 18px; line-height: 1;
  letter-spacing: var(--nh-ls-section); text-transform: uppercase; color: var(--nh-text);
  padding: 0 0 4px 12px; margin: 20px 0 10px;   /* padding-left 12px = wspólna oś 88px (hero + „Historia…"); margin-top 20px = większy odstęp nad nadgrupą */
}
.nh-kb-groupcols {
  display: grid;
  grid-template-columns: repeat(2, minmax(200px, 1fr));
  gap: var(--kb-gap);
  align-items: start;
}
@media (max-width: 1100px) { .nh-kb-board { grid-template-columns: 1fr; } }
@media (max-width: 620px)  { .nh-kb-groupcols { grid-template-columns: 1fr; } }

/* ── Kolumna ── */
.nh-kb-col  { display: flex; flex-direction: column; gap: var(--kb-gap); min-width: 0; }
.nh-kb-colh { display: flex; align-items: center; gap: var(--space-2); padding: 0 2px 2px; }
.nh-kb-colh .t {
  font-family: var(--nh-font-head); font-weight: 400; font-size: 12px;   /* cieńszy nagłówek kolumny (regular) */
  letter-spacing: .1em; text-transform: uppercase; color: var(--nh-text-2);
}
.nh-kb-colh .n { margin-left: auto; font-family: var(--nh-font-mono); font-size: 11px; color: var(--nh-text-muted); }
.nh-kb-colh .ci { display: inline-flex; align-items: center; color: var(--nh-text-2); --icon-color: currentColor; flex: 0 0 auto; }   /* symbol kolumny (od razu widać typ); ikony callbacków samokolorujące (zielony/czerwony) */

.nh-kb-scope { display: flex; align-items: center; gap: 8px; margin: -8px 0 0 2px; }
.nh-kb-scope .lbl { font-family: var(--nh-font-mono); font-size: 11px; color: var(--nh-text-muted); }
.nh-kb-scope .tgl {
  font: 500 10px var(--nh-font-btn); text-transform: uppercase; letter-spacing: .08em;
  color: var(--nh-navy); background: transparent; border: 1px solid var(--nh-line);
  border-radius: var(--nh-r-btn); padding: 2px 8px; cursor: pointer;
}
.nh-kb-scope .tgl.on { background: var(--nh-navy); color: var(--nh-text-on-dark); border-color: var(--nh-navy); }

.nh-kb-list  { display: flex; flex-direction: column; gap: var(--kb-gap); max-height: var(--kb-col-max); overflow-y: auto; padding: 2px; }
.nh-kb-list::-webkit-scrollbar { width: 5px; } .nh-kb-list::-webkit-scrollbar-thumb { background: var(--nh-line); border-radius: 4px; }
.nh-kb-empty { font-size: 12px; color: var(--nh-text-muted); font-style: italic; padding: 10px 2px; }
.nh-kb-subhead { font: 500 10px var(--nh-font-head); letter-spacing: .1em; text-transform: uppercase; color: var(--nh-text-muted); padding: 4px 2px 0; }

/* ── Karta ── */
.nh-kb-card {
  position: relative;
  --kb-card-c: var(--nh-line);           /* kolor akcentu — jeden na kartę (tab/etykieta/puls); nadpisywany per grupa */
  /* Delikatny kafel: subtelne białe tło + lekkie zaokrąglenie, BEZ ramki (nie „pudełko").
     Karta lekko odcina się od tła kolumny; separacja przez gap listy + status-tab. */
  background: var(--nh-surface); border-radius: var(--nh-r-badge);
  box-shadow: var(--kb-card-shadow);
  padding: var(--kb-pad);
  min-height: var(--kb-card-min);
  flex-shrink: 0;   /* nie ściskaj karty poniżej treści (lista i tak przewija) — inaczej
                        przy dłuższej potrzebie znikała stopka: data + „Zacznij" */
  display: flex; flex-direction: column; gap: 5px;
}
/* ostatnia karta w kolumnie nie potrzebuje linii (styka się z paddingiem tła grupy) */
.nh-kb-col .nh-kb-list > .nh-kb-card:last-child { border-bottom: none; }
.nh-kb-card[data-kb-type="new"]      { --kb-card-c: var(--kb-c-new); }
.nh-kb-card[data-kb-type="next"]     { --kb-card-c: var(--kb-c-next); }
.nh-kb-card[data-kb-type="missed"]   { --kb-card-c: var(--kb-c-missed); }
.nh-kb-card[data-kb-type="noanswer"] { --kb-card-c: var(--kb-c-noanswer); }
.nh-kb-card[data-kb-type="task"]     { --kb-card-c: var(--kb-c-task); }
.nh-kb-card[data-kb-type="followup"] { --kb-card-c: var(--kb-c-followup); }
/* Akcent statusu = krótki pionowy tab przy nazwisku (Lekki), nie pełny pasek */
.nh-kb-card::before { content: ""; position: absolute; left: 0; top: 17px; width: var(--kb-bar-w); height: 22px; border-radius: 2px; background: var(--kb-card-c); }

/* ── Wariant „Tło grup" + akcent per grupa (stan docelowy Pulpitu) ──
   Grupa 1 (Nowe zgłoszenia, kol. 1–2) = błękitne papierowe tło + akcent teal;
   grupa 2 (Bieżąca obsługa, kol. 3–4) = ciepłe papierowe tło + ciepły akcent.
   Board zawiera dokładnie 2 grupy → rozróżniamy je pozycją, bez zależności od JS. */
.nh-kb-col { border-radius: var(--nh-r-card); padding: 16px 16px 8px; }
.nh-kb-board > .nh-kb-group:first-child .nh-kb-col  { background: var(--nh-group-blue); }
.nh-kb-board > .nh-kb-group:last-child  .nh-kb-col  { background: var(--nh-group-warn); }
.nh-kb-board > .nh-kb-group:first-child .nh-kb-card { --kb-card-c: var(--nh-accent); }
.nh-kb-board > .nh-kb-group:last-child  .nh-kb-card { --kb-card-c: var(--nh-accent-warm); }

/* etykieta typu (opcjonalna — domyślnie ukryta, kolor niesie pasek) */
.nh-kb-type { align-self: flex-start; font: 500 9.5px var(--nh-font-head); letter-spacing: .1em; text-transform: uppercase; color: var(--kb-card-c); }
.nh-kb:not(.nh-kb--typepill) .nh-kb-type { display: none; }

/* tag ŹRÓDŁA leada — w linii z nazwą, dosunięty w prawo (kol.1 „Nowe zgłoszenia"), zamiast „NOWE".
   Sama wartość źródła (bez prefiksu — wynika z kontekstu kolumny); pełna wartość w tooltipie. */
.nh-kb-src {
  margin-left: auto; flex: 0 1 auto; min-width: 0; max-width: 62%;
  display: inline-flex; align-items: baseline;
  padding: 3px 11px; border-radius: 999px;
  background: var(--kb-card-c); color: var(--nh-text-on-dark);
  font: 600 12px var(--nh-font-head); letter-spacing: .02em;
}
.nh-kb-src .val { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Prefiks „źródło" — renderowany TYLKO gdy tag niesie źródło leada (kol. „Nowe zgłoszenia"), nie efekt
   rozmowy. Dim przez opacity, żeby czytał się i na kolorowej pigułce (kol.1), i na wyszarzonym tekście (LEJEK). */
.nh-kb-src .k { flex: 0 0 auto; margin-right: 5px; opacity: .68; font-weight: 500; text-transform: none; letter-spacing: normal; }
/* Kol.3: kolor tagu rozróżnia typ callbacku. Grupa („Bieżąca obsługa") nadpisuje --kb-card-c
   jednym akcentem, więc kolorujemy tag WPROST po typie (missed = pacjent dzwonił / noanswer = my). */
.nh-kb-card[data-kb-type="missed"]   .nh-kb-src { background: var(--kb-c-missed); }
.nh-kb-card[data-kb-type="noanswer"] .nh-kb-src { background: var(--kb-c-noanswer); }

.nh-kb-title { font: 600 14.5px var(--nh-font-head); line-height: 1.3; color: var(--nh-text); }

.nh-kb-who { display: flex; align-items: center; gap: 8px; min-width: 0; margin-bottom: 4px; }
.nh-kb-av  {
  width: 26px; height: 26px; border-radius: 50%; flex: 0 0 auto;
  background: var(--nh-navy); color: var(--nh-text-on-dark);
  font: 500 11px var(--nh-font-head); display: flex; align-items: center; justify-content: center;
}
.nh-kb:not(.nh-kb--avatars) .nh-kb-av { display: none; }
.nh-kb-nm  { flex: 0 1 auto; min-width: 0; font-size: 13px; font-weight: 500; color: var(--nh-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nh-kb-nm.num  { font-family: var(--nh-font-mono); font-size: 12px; }
.nh-kb-nm.wrap { white-space: normal; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.nh-kb-nm--link { cursor: pointer; }
.nh-kb-nm--link:hover { color: var(--nh-accent); text-decoration: underline; }

/* meta (kampania / próba / efekt / konsultant) */
.nh-kb-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; font-size: 11.5px; color: var(--nh-text-2); }
.nh-kb-meta .b { display: inline-flex; align-items: center; gap: 4px; }
.nh-kb-meta .i { display: inline-flex; --icon-color: var(--nh-text-muted); }
.nh-kb-meta .who-in { --icon-color: var(--nh-accent); color: var(--nh-accent); }
/* (Etap B) „Odpowiedzialna" — wyróżniony wiersz: etykieta + awatar (kolor osoby) + imię (kto ma dzwonić). */
.nh-kb-owner { display: flex; align-items: center; gap: 6px; margin-top: 6px; }
.nh-kb-owner .k { font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: .03em; color: var(--nh-text-muted); }
.nh-kb-owner .oav { width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 9.5px; font-weight: 500; background: var(--nh-field); color: var(--nh-text-2); flex: 0 0 auto; }
.nh-kb-owner .oav-img { padding: 0; overflow: hidden; }
.nh-kb-owner .oav-img img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; display: block; }
.nh-kb-owner .v { font-size: 12.5px; font-weight: 500; color: var(--nh-text); }
.nh-kb-owner.is-none .v { color: var(--nh-text-muted); font-weight: 400; }

/* Kolumna 4 „Zadania": większa czcionka tytułu + wyraźniejsza osoba (meta[0]) i pacjent (meta[1]) */
.nh-kb-card[data-kb-type="task"] .nh-kb-nm { font-size: 15px; font-weight: 600; }
.nh-kb-card[data-kb-type="task"] .nh-kb-meta { font-size: 12.5px; font-weight: 500; color: var(--nh-text); gap: 4px 12px; }
.nh-kb-card[data-kb-type="task"] .nh-kb-meta .i { --icon-color: var(--kb-card-c); }
.nh-kb-sep { color: var(--nh-text-muted); }

/* notatka — stała wysokość + scroll (karta nie rośnie) */
.nh-kb-note {
  max-height: calc(var(--kb-note-lines) * 1.4em); overflow-y: auto;
  border-left: 2px solid var(--nh-line); padding: 0 4px 0 10px;
  font-size: 11.5px; line-height: 1.4; color: var(--nh-text-2);
}
.nh-kb-note::-webkit-scrollbar { width: 4px; } .nh-kb-note::-webkit-scrollbar-thumb { background: var(--nh-line); border-radius: 4px; }

/* ZADANIA: opis zadania zawsze widoczny w CAŁOŚCI — bez clampu na 2 wiersze i bez scrolla
   (nikt nie scrolluje w kafelku → opis „ginął"). Karta rośnie o tyle, ile trzeba. */
.nh-kb-card[data-kb-type="task"] .nh-kb-note,
.nh-kb-card[data-kb-type="followup"] .nh-kb-note {
  max-height: none; overflow: visible;
  border-left-color: var(--kb-card-c, var(--nh-line));
  color: var(--nh-text); font-size: 12px;
}

/* Główna potrzeba (z formularza) — wyróżniona linia (ikona akcentu + tekst) */
.nh-kb-need { display: flex; align-items: flex-start; gap: 5px; font-size: 11.5px; line-height: 1.35; color: var(--nh-text); font-weight: 500; }
.nh-kb-need .i { display: inline-flex; --icon-color: var(--nh-accent); flex: 0 0 auto; margin-top: 1px; }
.nh-kb-need > span:last-child { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* stopka: data + akcje */
.nh-kb-foot { display: flex; align-items: center; margin-top: auto; padding-top: 2px; }
.nh-kb-date { font-size: 11.5px; color: var(--nh-text-2); }
.nh-kb-date.warn { color: var(--nh-miss-text); font-weight: 600; }
/* (C) data „ostatni kontakt" z dostępnym wynikiem rozmowy → sygnał, że można najechać (dymek natywny). */
.nh-kb-date.has-tip { text-decoration: underline dotted var(--nh-line); text-underline-offset: 3px; cursor: help; }
/* (C) symbol „zadanie" obok nazwy (dowolny owner) — hover: ostatnie zadanie + termin + kto je ma. */
.nh-kb-task { display: inline-flex; align-items: center; flex: 0 0 auto; cursor: help; --icon-color: var(--nh-accent-warm); color: var(--nh-accent-warm); }
/* „Wraca po odłożeniu" — lead „na razie dziękuje" wrócił po terminie parkowania */
.nh-kb-defer { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; cursor: help; font: 600 10px var(--nh-font-body); text-transform: uppercase; letter-spacing: .03em; color: #92400e; background: #fef3c7; padding: 1px 7px; border-radius: 999px; --icon-color: #b45309; }
.nh-kb-acts { margin-left: auto; display: flex; gap: 6px; }
/* Callbacki: „czeka Xh" (zaległe podświetlone), badge „poza godz." (kontener), etykieta „w sprawie:". */
.nh-kb-wait { font-size: 11.5px; color: var(--nh-text-2); font-weight: 600; margin-right: 8px; }
.nh-kb-wait.is-overdue { color: var(--nh-miss-text); }
.nh-kb-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 3px 0 0; }
/* Znaczniki stanu w grupie „Dopięcie do wizyty": „z iqDental — potwierdź w GHL" (info, coś do
   dopięcia w systemie) i „termin minął — oznacz wynik" (warn, robota dla recepcji w karcie
   pacjenta). Kolor niesie WYŁĄCZNIE tło/tekst ze statusowych tokenów — zero literałów. */
.nh-kb-flag {
  font-size: 11px; font-weight: 600; line-height: 1.3;
  padding: 2px var(--space-2); border-radius: var(--nh-r-badge);
  background: var(--nh-chip-bg); color: var(--nh-chip-tx);
}
.nh-kb-flag.is-info { background: var(--nh-group-blue); color: var(--nh-accent); }
.nh-kb-flag.is-warn { background: var(--nh-fail-bg); color: var(--nh-fail-text); }
.nh-kb-note-k { color: var(--nh-text-muted); font-weight: 600; margin-right: 3px; }

/* ── Karta callbacku (Bieżąca obsługa) — układ „Akcja-first": biała karta, 1 przycisk pełnej szerokości, akcje-ikony ── */
.nh-kb--funnel .nh-kb-card[data-kb-type="missed"],
.nh-kb--funnel .nh-kb-card[data-kb-type="noanswer"] {
  background: var(--nh-surface); border: 0; border-radius: var(--nh-r-badge); padding: 11px 12px;   /* zrównane z górnymi kaflami: bez ramki, radius 8px */
}
.nh-kb-cbtop { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.nh-kb-cbicons { display: flex; gap: 5px; flex: 0 0 auto; }
.nh-kb-iconbtn {
  width: 27px; height: 27px; padding: 0; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--nh-line); background: var(--nh-surface); color: var(--nh-text-2); border-radius: 8px; cursor: pointer; --icon-color: currentColor;
}
.nh-kb-iconbtn:hover { color: var(--nh-text); }
.nh-kb-iconbtn.done:hover { color: var(--nh-ok-text); border-color: var(--nh-ok-text); }
.nh-kb-cbsub { font-size: 12.5px; color: var(--nh-text-2); line-height: 1.4; margin-top: 5px; }
.nh-kb-cbsub.is-empty { font-style: italic; color: var(--nh-text-muted); }
.nh-kb-cbmeta { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.nh-kb-cbrepeat { font: 600 10px var(--nh-font-body); text-transform: uppercase; letter-spacing: .04em; color: var(--nh-miss-text); background: var(--nh-miss-bg); padding: 1px 7px; border-radius: 999px; }
.nh-kb-cbmoon { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; color: var(--nh-fail-text); --icon-color: currentColor; }
/* (C) badge „nowe zgłoszenie" na callbacku „prosił o telefon później" — odróżnia lead od bieżącego pacjenta. */
.nh-kb-cbnew { font: 600 10px var(--nh-font-body); text-transform: uppercase; letter-spacing: .04em; color: var(--nh-accent); background: var(--nh-group-blue); padding: 1px 7px; border-radius: 999px; }
.nh-kb-cbcall {
  align-self: flex-start; margin-top: 9px; padding: 8px 18px; border: none; border-radius: 8px;
  background: var(--nh-accent); color: var(--nh-text-on-dark); font: 500 12.5px var(--nh-font-body);
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; cursor: pointer; --icon-color: currentColor;
}
.nh-kb-cbcall:hover { opacity: .93; }
/* Lekki: kółka akcji = obrys zamiast wypełnienia */
.nh-kb-btn  {
  width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--nh-line); cursor: pointer;
  background: transparent; display: inline-flex; align-items: center; justify-content: center;
  --icon-color: var(--nh-navy);
}
.nh-kb-btn:hover { background: var(--nh-field); }
.nh-kb-btn.call  { --icon-color: var(--nh-accent); }
.nh-kb-btn.done  { --icon-color: var(--nh-ok-text); }
/* wariant z napisem (np. „Zacznij") — ghost prostokątny (obrys z .nh-kb-btn) */
.nh-kb-btn--text { width: auto; height: 28px; gap: 5px; padding: 0 12px; border-radius: 8px; font: 700 10.5px var(--nh-font-head); text-transform: uppercase; letter-spacing: .08em; color: var(--nh-navy); }
.nh-kb-btn--text.call { color: var(--nh-accent); }
.nh-kb-btn--text.done { color: var(--nh-ok-text); }

/* miękki, chwilowy błysk podświetlenia po podmianie karty */
@keyframes nh-kb-flash { 0% { background: var(--nh-row-select); } 100% { background: transparent; } }
.nh-kb-card.is-refreshed { animation: nh-kb-flash 1.1s ease-out; }

/* puls „wymaga uwagi": kol.1 > 2h, kol.3 > 1h, zaległe zadania — delikatnie, w kolorze typu karty */
@keyframes nh-kb-stale { 0%, 100% { background: transparent; } 50% { background: color-mix(in srgb, var(--kb-card-c) 12%, transparent); } }
.nh-kb-card.is-stale { animation: nh-kb-stale 2.4s ease-in-out infinite; }
/* (Kanban) Przekroczone 2h robocze na oddzwonienie → czerwone oznaczenie kafla (lewa krawędź + czerwony puls). */
.nh-kb-card.is-overdue { --kb-card-c: var(--nh-miss-text); box-shadow: inset 3px 0 0 var(--nh-miss-text); }
/* (Kanban) KOŁO „uciekającego czasu" na oddzwonienie — wypełnienie rośnie i zmienia kolor
   (zielony→czerwony) w miarę upływu do 2 h. Bez odliczania minut; szczegół na hover (title). */
.nh-kb-ring { display: inline-flex; width: 22px; height: 22px; margin: 5px 0 0; vertical-align: middle; }
.nh-kb-ring svg { width: 22px; height: 22px; transform: rotate(-90deg); }   /* start wypełnienia u góry */
.nh-kb-ring circle { fill: none; stroke-width: 4; }
.nh-kb-ring circle.bg { stroke: var(--nh-line); }
.nh-kb-ring circle.fg { stroke-linecap: round; transition: stroke-dasharray .5s ease, stroke .5s ease; }
.nh-kb-ring.is-over { animation: nh-kb-ringpulse 1.3s ease-in-out infinite; }
@keyframes nh-kb-ringpulse { 0%, 100% { opacity: 1; } 50% { opacity: .5; } }

/* gęstość */
.nh-kb--compact { --kb-gap: var(--space-2); --kb-pad: 8px 11px 7px 13px; }
.nh-kb--compact .nh-kb-card { gap: 5px; }
.nh-kb--flat    { --kb-card-shadow: none; }

/* ── Integracja z pulpitem: Kanban zamiast 3 starych sekcji (recepcja + admin) ── */
#view-dashboard #pulpitKanban { display: none; }
#view-dashboard.kanban-on #pulpitKanban { display: block; }
#view-dashboard.kanban-on #dashLegacyGrid,
#view-dashboard.kanban-on #dashTodayBar { display: none !important; }

/* ── TRYB LEJEK (funnelMode) — kolumny = DNI kadencji (Miro 0/1/2/3/5) + wyjścia ──
   Grupy układają się w pionie: „Lejek leadów" (wiersz 7 kolumn, poziomy scroll) NAD
   „Bieżącą obsługą". Akcent kolumny niesie tryb dnia: call = dzwoń · auto = sam SMS
   (wyszarzone, bez telefonu) · after = rozmowa udana · lost = utracony. Zero literałów. */
.nh-kb--funnel .nh-kb-board { grid-template-columns: 1fr; }
/* Wiersz równorzędnych kolumn — OBIE grupy (lejek ORAZ „Bieżąca obsługa": nieodebrane · nieskuteczne · zadania). */
.nh-kb--funnel .nh-kb-groupcols {
  display: flex; gap: var(--kb-gap); overflow-x: auto; padding-bottom: 6px; align-items: stretch;
}
/* Kolumny ROSNĄ i wypełniają szerokość. „Nowe zgłoszenie" (is-main, tylko lejek) szersza; pasek „automat"
   (Dzień 2) ma własny fixed 48px (reguła scoped do first-child niżej). Na wąskim ekranie min-width → scroll. */
.nh-kb--funnel .nh-kb-col        { flex: 1 1 0; min-width: 172px; }
.nh-kb--funnel .nh-kb-col.is-main { flex: 1.7 1 0; min-width: 250px; }   /* „Nowe zgłoszenie" większe */
.nh-kb--funnel .nh-kb-groupcols::-webkit-scrollbar { height: 6px; }
.nh-kb--funnel .nh-kb-groupcols::-webkit-scrollbar-thumb { background: var(--nh-line); border-radius: 4px; }

/* podpis dnia pod tytułem kolumny (dzwoń / auto-SMS · bez telefonu / …) */
.nh-kb-colhint { font: 500 10px var(--nh-font-mono); color: var(--nh-text-muted); text-transform: uppercase; letter-spacing: .04em; padding: 0 2px 4px; margin-top: -2px; }

/* ── „DZIEŃ 0 — KLUCZOWY" (mix A+C): ciepła strefa „gorący start" + pionowa listwa priorytetu z lewej
   (jak pasek „automat") — BEZ toporniej ramki. Obejmuje 2 pierwsze kolumny (Nowe zgłoszenie + Do 2. kontaktu). ── */
.nh-kb--funnel .nh-kb-day0 {
  flex: 2.7 1 0; min-width: 420px; display: flex; align-items: stretch;
  border-radius: var(--nh-r-card); overflow: hidden; margin-right: 12px;
  background: var(--nh-group-warn);   /* ciepła strefa „gorący start" */
}
/* pionowa listwa — GRANAT (spójny z navy menu/hero apki), opis pionowo (orientacja jak pasek „automat") */
.nh-kb--funnel .nh-kb-day0-rail { flex: 0 0 32px; background: var(--nh-navy); display: flex; align-items: center; justify-content: center; }
.nh-kb--funnel .nh-kb-day0-rail span {
  writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;
  color: var(--nh-text-on-dark); font: 500 11px var(--nh-font-head); letter-spacing: .18em; text-transform: uppercase;
}
.nh-kb--funnel .nh-kb-day0cols { display: flex; gap: var(--kb-gap); flex: 1; align-items: stretch; padding: 12px 12px 10px; }
/* kolumny Dnia 0 = przezroczyste na ciepłej strefie → czytają się jako JEDNA spójna strefa (mniej „pudełek") */
.nh-kb--funnel .nh-kb-day0 .nh-kb-day0cols .nh-kb-col         { flex: 1 1 0; min-width: 150px; background: transparent; }
.nh-kb--funnel .nh-kb-day0 .nh-kb-day0cols .nh-kb-col.is-main { flex: 1.4 1 0; min-width: 200px; }

/* pilny opis 1. kolumny — „w ciągu 15 min (max 2 h)!": czerwony, pogrubiony, podkreślony (super ważne).
   Scope do kolumny „new" (0,5,0) → wygrywa z akcentowym opisem tej kolumny (linie ~308–309) bez !important. */
.nh-kb--funnel .nh-kb-col[data-kb-col-index="new"] .nh-kb-colhint.is-urgent {
  color: var(--nh-miss-text); background: var(--nh-miss-bg); --icon-color: var(--nh-miss-text);
  font-family: var(--nh-font-body); font-weight: 700; font-size: 12px; line-height: 1.25;
  text-transform: none; letter-spacing: 0; text-decoration: underline; text-underline-offset: 2px;
  display: inline-flex; align-items: center; gap: 5px; border-radius: 8px; padding: 5px 9px; margin-top: 2px;
}

/* akcent kolumny wg trybu dnia — nadpisuje akcent grupowy (umieszczony PÓŹNIEJ → wygrywa remis) */
.nh-kb--funnel .nh-kb-col[data-kb-flow="call"]  .nh-kb-card { --kb-card-c: var(--nh-accent); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="auto"]              { background: var(--nh-field); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="auto"]  .nh-kb-card { --kb-card-c: var(--nh-text-muted); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="auto"]  .nh-kb-colhint { color: var(--nh-text-2); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="after"] .nh-kb-card { --kb-card-c: var(--nh-ok-text); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="lost"]              { background: var(--nh-group-warn); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="lost"]  .nh-kb-card { --kb-card-c: var(--nh-fail-text); }
/* akcenty grupy „Dopięcie do wizyty" — spójne z paletą pulpitu (zaakceptowane kolory szkicu) */
.nh-kb--funnel .nh-kb-col[data-kb-flow="booked"]   .nh-kb-card { --kb-card-c: var(--nh-accent); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="declined"] .nh-kb-card { --kb-card-c: var(--nh-accent-warm); }
.nh-kb--funnel .nh-kb-col[data-kb-flow="noshow"]   .nh-kb-card { --kb-card-c: var(--nh-fail-text); }

/* ── Grupa „Dopięcie do wizyty" (etapy po kontakcie → wynik W0). Klasa nadana w renderze (g.cls). ── */
.nh-kb--funnel .nh-kb-group--w0 .nh-kb-col { background: transparent; }
.nh-kb--funnel .nh-kb-group--w0 .nh-kb-col { flex: 1 1 0; min-width: 200px; }
/* Kafel WYNIKU read-only (decyduje / opłacił) — kompaktowy, węższy, tylko liczba + podpis. */
.nh-kb--funnel .nh-kb-col--result { flex: 0 0 190px; min-width: 170px; align-self: flex-start; }
.nh-kb--funnel .nh-kb-col--result .nh-kb-result {
  display: flex; flex-direction: column; gap: 3px; padding: 14px 16px;
  background: var(--nh-field); border-radius: 12px;
}
.nh-kb--funnel .nh-kb-col--result .nh-kb-result-n { font-size: 26px; font-weight: 600; line-height: 1; color: var(--nh-text); }
.nh-kb--funnel .nh-kb-col--result .nh-kb-result-t { font-size: 13px; font-weight: 600; color: var(--nh-text); margin-top: 4px; }
.nh-kb--funnel .nh-kb-col--result .nh-kb-result-d { font-size: 11px; color: var(--nh-text-muted); }

/* kolumna główna „Nowe zgłoszenie" — subtelnie mocniejszy tytuł */
.nh-kb--funnel .nh-kb-col.is-main .nh-kb-colh .t { font-size: 14px; color: var(--nh-text); }

/* ── Tryb lejka: odchudzenie wizualne („czyściej") — mniej koloru, więcej powietrza ──
   Scoped do .nh-kb--funnel → żywy pulpit bez zmian. Źródło jako szary tekst (nie pastylka),
   nagłówki sentence-case, właściciel bez etykiety, karty płaskie bez taba akcentu, kolumny bez tła. */
.nh-kb--funnel .nh-kb-card::before { display: none; }                 /* bez pionowego taba akcentu */
.nh-kb--funnel .nh-kb-colh .t {
  font-family: var(--nh-font-body);   /* tytuł kolumny = Montserrat (nie systemowy) */
  text-transform: none; font-weight: 400; font-size: 13px; letter-spacing: normal; color: var(--nh-text);   /* cieńszy tytuł kolumny (lejek, regular) */
}
.nh-kb--funnel .nh-kb-src {
  background: transparent; color: var(--nh-text-muted); font: 500 12px var(--nh-font-body); padding: 0; max-width: 100%;
}
/* Bieżąca obsługa: status callbacku = subtelny KOLOROWY TEKST, nie pełnoszerokościowy pasek (za ciężki).
   Kolor niesie typ: missed = pacjent dzwonił (czerwony), noanswer = my nie zastaliśmy (pomarańcz). */
.nh-kb--funnel .nh-kb-card[data-kb-type="missed"]   .nh-kb-src,
.nh-kb--funnel .nh-kb-card[data-kb-type="noanswer"] .nh-kb-src {
  background: transparent; padding: 0; font-weight: 600;
}
.nh-kb--funnel .nh-kb-card[data-kb-type="missed"]   .nh-kb-src { color: var(--kb-c-missed); }
.nh-kb--funnel .nh-kb-card[data-kb-type="noanswer"] .nh-kb-src { color: var(--kb-c-noanswer); }
.nh-kb--funnel .nh-kb-owner { gap: 7px; margin-top: 8px; }
.nh-kb--funnel .nh-kb-owner .k { display: none; }                     /* bez etykiety „ODPOWIEDZIALNA" */
/* Awatar osoby odpowiedzialnej w PRAWYM GÓRNYM ROGU kafla → mniej dzieje się na wysokość. Sam awatar
   (kto = zdjęcie; imię w chmurce na hover). Osoba odpowiedzialna pojawia się DOPIERO od 1. skutecznej
   rozmowy (leadOpiekunId). Brak opiekuna → NIE pokazujemy żadnej ikony (żadnego „?"). */
.nh-kb--funnel .nh-kb-owner { position: absolute; top: 12px; right: 12px; margin: 0; gap: 0; }   /* równo: tyle samo od góry i prawej */
.nh-kb--funnel .nh-kb-owner .v { display: none; }
.nh-kb--funnel .nh-kb-owner .oav { width: 24px; height: 24px; font-size: 11px; }
/* Brak osoby odpowiedzialnej (is-none) = brak ikony — bez placeholdera „?". Awatar renderuje się sam, gdy owner istnieje. */
.nh-kb--funnel .nh-kb-who { padding-right: 32px; }                    /* miejsce na awatar w rogu — nazwa się nie nachodzi */
/* WYJĄTEK — „Był na W0 — decyduje": SENSEM tej kolumny jest KTO prowadzi decyzję (podpis „u opiekuna"),
   więc imię stoi przy awatarze zamiast chować się w chmurce; brak opiekuna czytelnie jako „nieprzypisany"
   (zasada: osoba odpowiedzialna widoczna na KAŻDEJ karcie recepcji). Reszta lejka bez zmian. */
.nh-kb--funnel .nh-kb-col[data-kb-col-index="decision"] .nh-kb-owner { position: static; margin-top: 8px; gap: 7px; }
.nh-kb--funnel .nh-kb-col[data-kb-col-index="decision"] .nh-kb-owner .v { display: inline; }
.nh-kb--funnel .nh-kb-col[data-kb-col-index="decision"] .nh-kb-owner .oav { width: 20px; height: 20px; font-size: 10px; }
.nh-kb--funnel .nh-kb-col[data-kb-col-index="decision"] .nh-kb-who { padding-right: 0; }
.nh-kb--funnel .nh-kb-group:first-child .nh-kb-col { background: transparent; padding-top: 6px; }
.nh-kb--funnel .nh-kb-card { padding-top: 10px; padding-bottom: 10px; }   /* umiarkowany odstęp — nie za rzadko, czytelnie */
/* podpis-instrukcja kolumny telefonicznej (np. „3. telefon"); „Nowe zgłoszenie" = pilność (akcent) */
.nh-kb--funnel .nh-kb-colhint { text-transform: none; letter-spacing: normal; }   /* instrukcje jako zdanie, nie KAPITALIKI (czytelniej) */
.nh-kb--funnel .nh-kb-col[data-kb-flow="call"] .nh-kb-colhint { color: var(--nh-text-muted); }
.nh-kb--funnel .nh-kb-col[data-kb-col-index="new"] .nh-kb-colhint { color: var(--nh-accent); font-weight: 600; }

/* Czcionka widoku LEJEK: TYTUŁY = systemowy sans (user: „tytuły miały spoko czcionkę"), a TREŚĆ kart
   = Montserrat (token bazowy). Nadpisujemy TYLKO --nh-font-head w poddrzewie; body zostaje Montserrat. */
.nh-kb--funnel {
  --nh-font-head: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}
/* tytuły kolumn = Montserrat (token bazowy body) — user: „tytuły kolumn do zmiany"; systemowe zostają
   TYLKO nagłówki grup (Lejek leadów / Bieżąca obsługa). */

/* Nowe zgłoszenia („do 1. kontaktu") MIGAJĄ — pilność, żeby recepcja dzwoniła od razu. */
@keyframes nh-kb-new-blink { 0%,100% { background: transparent; } 50% { background: color-mix(in srgb, var(--nh-accent) 18%, transparent); } }
.nh-kb--funnel .nh-kb-col[data-kb-col-index="new"] .nh-kb-card {
  animation: nh-kb-new-blink 1.6s ease-in-out infinite; border-radius: var(--nh-r-card);
}
@media (prefers-reduced-motion: reduce) {
  .nh-kb--funnel .nh-kb-col[data-kb-col-index="new"] .nh-kb-card { animation: none; }
}

/* ── CEL = PUSTE KOLUMNY ─────────────────────────────────────────────────────── */
/* Pusta kolumna telefoniczna — SPOKOJNIE, bez „ściany zieleni". Neutralny szept (bez ramki/tła),
   gdy nikt dziś nie wypada; subtelny zielony TYLKO gdy realnie wszyscy na dziś obdzwonieni (.is-alldone). */
.nh-kb-donestate {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  padding: 14px 8px; margin: 2px 0; color: var(--nh-text-muted);
}
.nh-kb-donestate .chk { --icon-color: var(--nh-text-muted); display: inline-flex; margin-bottom: 3px; opacity: .5; }
.nh-kb-donestate .t { font-weight: 500; font-size: 12px; color: var(--nh-text-muted); }
.nh-kb-donestate .s { font-size: 10.5px; color: var(--nh-text-muted); opacity: .8; margin-top: 1px; }
.nh-kb-donestate.is-alldone { color: var(--nh-ok-text); }
.nh-kb-donestate.is-alldone .chk { --icon-color: var(--nh-ok-text); opacity: 1; }
.nh-kb-donestate.is-alldone .t { color: var(--nh-ok-text); }
/* „Zrobione dziś" — nagłówek zielony + karty wyblakłe/przekreślone */
.nh-kb-subhead.is-done-head { color: var(--nh-ok-text); text-transform: none; letter-spacing: normal; font-size: 11.5px; margin-top: 10px; }
.nh-kb-card.is-done { opacity: .55; }
.nh-kb-card.is-done .nh-kb-nm { text-decoration: line-through; text-decoration-color: var(--nh-text-muted); }

/* „Zrobione dzisiaj" — przypięty pasek na dole kolumny (SIBLING .nh-kb-list, więc poza scrollem = nie chowa się).
   Pusty (brak zrobionych) → ukryty. Zwinięty = liczba; klik (.is-open) rozwija listę. Chevron przez ::after. */
.nh-kb-donefooter { flex: 0 0 auto; margin-top: 4px; }
.nh-kb-donefooter:not(.has) { display: none; }
.nh-kb-donebar {
  display: flex; align-items: center; gap: 7px; width: 100%; text-align: left; cursor: pointer;
  background: transparent; border: none; border-top: 1px dashed var(--nh-line-soft);
  padding: 8px 2px 4px; font: 600 11.5px var(--nh-font-head);
  color: var(--nh-ok-text); --icon-color: var(--nh-ok-text);
}
.nh-kb-donebar .ct { margin-left: auto; font-family: var(--nh-font-mono); font-size: 11px; }
.nh-kb-donebar .ct::after { content: ' \203A'; }               /* › zwinięty */
.nh-kb-donefooter.is-open .nh-kb-donebar .ct::after { content: ' \2304'; }  /* ⌄ rozwinięty */
.nh-kb-donelist { display: none; padding: 2px 2px 4px; }
.nh-kb-donefooter.is-open .nh-kb-donelist { display: block; }
.nh-kb-doneitem { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 11.5px; color: var(--nh-text-2); padding: 3px 4px; opacity: .8; }
.nh-kb-doneitem .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: line-through; text-decoration-color: var(--nh-text-muted); }
.nh-kb-doneitem .mt { flex: 0 0 auto; font-size: 10.5px; color: var(--nh-text-muted); }
/* pasek celu na górze lejka */
.nh-kb-goal { background: var(--nh-field); border: 1px solid var(--nh-line); border-radius: var(--nh-r-card); padding: 12px 15px; margin-bottom: 14px; }
.nh-kb-goal .gtop { display: flex; align-items: baseline; gap: 10px; }
.nh-kb-goal .gt { font-weight: 600; font-size: 14px; }
.nh-kb-goal .gleft { margin-left: auto; font-size: 13px; color: var(--nh-text-2); }
.nh-kb-goal .gleft b { color: var(--nh-accent); font-size: 16px; font-family: var(--nh-font-mono); }
.nh-kb-goal .gbar { height: 7px; border-radius: 99px; background: var(--nh-line); margin-top: 9px; overflow: hidden; }
.nh-kb-goal .gbar > span { display: block; height: 100%; background: var(--nh-accent); border-radius: 99px; }
.nh-kb-goal .gcnt { font-size: 11.5px; color: var(--nh-text-muted); margin-top: 5px; }
/* pasek pełny (wszystko na dziś obdzwonione) — subtelny zielony, bez osobnego banera */
.nh-kb-goal .gbar.is-full > span { background: var(--nh-ok-text); }
/* nagłówki grup („LEJEK LEADÓW" / „BIEŻĄCA OBSŁUGA") — cieńsze i wyrównane do lewej z treścią pod spodem */
.nh-kb--funnel .nh-kb-grouph { font-weight: 400; font-size: 22px; letter-spacing: .05em; color: var(--nh-text); padding: 0 0 10px 2px; margin: 26px 0 12px; }   /* cieńszy nagłówek grupy (regular) */
/* Kolejność na kaflu lejka: nazwa+źródło → PROBLEM (opis, „z czym się zgłasza") → próby → data.
   Problem wyżej = widoczny (zwł. „Nowe zgłoszenie"). Owner jest absolutny (róg), poza kolejnością. */
.nh-kb--funnel .nh-kb-who     { order: 0; }
.nh-kb--funnel .nh-kb-patient { order: 1; }
.nh-kb--funnel .nh-kb-need    { order: 2; }
.nh-kb--funnel .nh-kb-meta    { order: 3; }
.nh-kb--funnel .nh-kb-note    { order: 4; }
.nh-kb--funnel .nh-kb-foot    { order: 5; }
/* (Zadania) pacjent OSOBNO — klikalny wiersz z ikoną osoby, w akcencie (odróżnia od tytułu zadania) */
.nh-kb-patient {
  display: inline-flex; align-items: center; gap: 6px; margin: 4px 0 0; padding: 0; align-self: flex-start;
  background: none; border: 0; cursor: pointer; font: 500 12.5px var(--nh-font-body); color: var(--nh-accent);
}
.nh-kb-patient .i { display: inline-flex; --icon-color: var(--nh-accent); }
.nh-kb-patient:hover { text-decoration: underline; }
.nh-kb--funnel .nh-kb-scope { display: none; }   /* „Recepcja · 100+103" + przełącznik biurka — zbędne w lejku */
/* Wszystko na kaflu WYRÓWNANE DO LEWEJ. Wewnętrzny margines 10px = tekst odsunięty od brzegu (żeby
   migające tło NIE dotykało tekstu); tytuł kolumny + instrukcja dostają to samo wcięcie → dalej równo. */
.nh-kb--funnel .nh-kb-card { padding-left: 10px; padding-right: 10px; text-align: left; }
.nh-kb--funnel .nh-kb-colh   { padding-left: 10px; }
.nh-kb--funnel .nh-kb-colhint { padding-left: 10px; }
/* (Wariant B) Licznik „→ 0" przy sekcji — badge po prawej nagłówka grupy „Lejek leadów" oraz kolumn
   „Wymagają kontaktu" / „Zadania". Liczba w akcencie; cel = zejść do zera. */
.nh-kb--funnel .nh-kb-grouph { display: flex; align-items: baseline; }
.nh-kb--funnel .nh-kb-scount {
  margin-left: auto; display: inline-flex; align-items: baseline; gap: 6px;
  background: var(--nh-field); border-radius: 99px; padding: 3px 13px;
  font-family: var(--nh-font-body); font-size: 12px; font-weight: 500; letter-spacing: normal;
  text-transform: none; color: var(--nh-text-2); white-space: nowrap;
}
.nh-kb--funnel .nh-kb-scount b { color: var(--nh-accent); font-size: 14px; }
.nh-kb--funnel .nh-kb-scount.is-done, .nh-kb--funnel .nh-kb-scount.is-done b { color: var(--nh-ok-text); }   /* cel osiągnięty (0) → zielony */
.nh-kb--funnel .nh-kb-foot { justify-content: flex-start; gap: 10px; }   /* data do lewej, nie rozpychana na całą szerokość */
.nh-kb--funnel .nh-kb-foot .nh-kb-date { flex: 0 1 auto; }
.nh-kb--funnel .nh-kb-group .nh-kb-col { padding-left: 2px; }          /* treść kolumny startuje w tej samej linii co nagłówek */
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-col { background: transparent; }   /* „Bieżąca obsługa" też czysto */

/* „Bieżąca obsługa" — większe/czytelniejsze nagłówki kolumn + trochę węższe kolumny z większym oddechem
   (user 10.08: „ikonki, napisy i nagłówek większe; kafelki węższe, więcej powietrza i klarowności z tytułami").
   Scoped do OSTATNIEJ grupy → „Aktywacja" (6 gęstych kolumn) bez zmian. Licznik „N do oddzwonienia" ląduje
   POD tytułem: przy tytule 16px + długa etykieta nie mieszczą się w jednym, węższym wierszu (zamiast ucinać tytuł). */
/* Układ nagłówka: IKONA (w kafelku, wyraźna) w górnym rzędzie NAD tytułem, licznik w prawym górnym
   rogu, tytuł pełną szerokością pod spodem. Kolejność wizualna przez `order` (DOM: ci→t→scount). */
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh { flex-wrap: wrap; align-items: center; align-content: flex-start; row-gap: 8px; padding-left: 2px; min-height: 82px; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh .ci { order: 0; width: 34px; height: 34px; border-radius: 10px; background: var(--nh-field); align-items: center; justify-content: center; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh .ci .nh-icon { --_isz: 22px; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh .nh-kb-scount { order: 1; margin-left: auto; font-size: 13px; padding: 4px 13px; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh .nh-kb-scount b { font-size: 15px; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-colh .t { order: 2; flex-basis: 100%; font-size: 16px; line-height: 1.25; }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-groupcols { gap: calc(var(--kb-gap) * 2); }
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-col { max-width: none; }   /* kolumny wypełniają CAŁĄ szerokość ekranu (jak „Aktywacja"), bez pustej przestrzeni z prawej */
/* większy odstęp pionowy między „Aktywacją nowych pacjentów" a „Bieżącą obsługą" */
.nh-kb--funnel .nh-kb-group:last-child .nh-kb-grouph { margin-top: 56px; }
/* licznik-cel obok nagłówka grupy (obie sekcje) — proporcjonalnie do większego nagłówka */
.nh-kb--funnel .nh-kb-grouph .nh-kb-scount { font-size: 13px; }
.nh-kb--funnel .nh-kb-grouph .nh-kb-scount b { font-size: 16px; }

/* Kolumna „automat" (sam auto-SMS) zwinięta do pionowego paska (bez nazwisk). Wąska, wyszarzona,
   pionowy podpis „Dzień X · automat" + liczba niesionych leadów. Specyficzność > reguły bazowej
   (umieszczona później → wygrywa remis), więc bez !important. */
.nh-kb--funnel .nh-kb-group:first-child .nh-kb-col--strip { flex: 0 0 48px; min-width: 48px; background: var(--nh-field); align-self: stretch; }   /* min-width override — pasek „automat" zostaje cienki mimo min-width kolumn */
.nh-kb-col--strip .nh-kb-strip {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
  height: 100%; padding: 14px 4px; min-height: 170px;
}
.nh-kb-strip-lbl {
  writing-mode: vertical-rl; transform: rotate(180deg);
  font: 500 11px var(--nh-font-head); letter-spacing: .14em; text-transform: uppercase;
  color: var(--nh-text-muted); white-space: nowrap;
}
.nh-kb-strip-ic { --icon-color: var(--nh-text-muted); display: inline-flex; opacity: .6; }

/* Tryb lejka — MINIMALNA karta: imię · Dzwoń · moment · kampania · Odpowiedzialna. Kampania spada
   pod imię (nie odbiera mu miejsca → nazwisko się NIE skraca). Potrzeba/notatka/próby → „chmurka". */
.nh-kb--funnel .nh-kb-who { flex-wrap: wrap; }
.nh-kb--funnel .nh-kb-nm  { max-width: 100%; }
.nh-kb--funnel .nh-kb-src { order: 5; margin-left: 0; margin-top: 3px; flex: 1 1 100%; max-width: 100%; }
/* Notatka: na kartach LEADÓW/callbacków chowana (idzie do „chmurki"), ale na kartach ZADAŃ
   opis jest treścią zadania — MUSI być widoczny zawsze (reguła użytkowniczki). */
.nh-kb--funnel .nh-kb-card:not([data-kb-type="task"]):not([data-kb-type="followup"]) .nh-kb-note,
.nh-kb--funnel .nh-kb-meta { display: none; }   /* opis problemu (need) ZOSTAJE widoczny (user); notatka/próba w chmurce */
/* bez cyfr liczności w nagłówkach kolumn (odchudzenie; total i tak jest w hero) — pasek zostaje z liczbą */
.nh-kb--funnel .nh-kb-colh .n { display: none; }

/* „chmurka" — pełne info karty / nazwiska paska (tryb lejka). Renderowana na <body> (poza scrollem). */
.nh-kb-tip {
  position: fixed; z-index: 9999; pointer-events: none; max-width: 260px;
  background: var(--nh-navy); color: var(--nh-text-on-dark);
  border-radius: var(--nh-r-card); padding: 10px 12px;
  box-shadow: var(--nh-shadow-lg, 0 8px 28px rgba(0,0,0,.28));
  font: 400 11.5px var(--nh-font-body); line-height: 1.45;
}
.nh-kb-tip .h    { font: 600 13px var(--nh-font-head); margin-bottom: 5px; }
.nh-kb-tip .r    { margin-top: 2px; opacity: .92; }
.nh-kb-tip .r .k { opacity: .6; text-transform: uppercase; font-size: 9.5px; letter-spacing: .04em; }
.nh-kb-tip .sub  { opacity: .6; font-size: 10px; margin-bottom: 4px; }
.nh-kb-tip .need { margin-top: 5px; font-weight: 500; opacity: 1; }
.nh-kb-tip .note { font-style: italic; opacity: .8; }
