/**
 * agentsclub V2 - shared cockpit chrome (topbar, switcher, page wrap, panel)
 *
 * Extracted from v2-docs/{zadania,badanie-rynku-w-niszy}.html, which define
 * this chrome byte-for-byte identically. kurs.html (the lesson player) uses
 * its own `.top`/`.top-in` bar instead of `.topbar` - see player.css (built
 * separately, since the player has no switcher and a different progress
 * chrome entirely).
 *
 * Requires css/v2/tokens.css + css/v2/base.css loaded first.
 */

/* width:100% is load-bearing, not decorative: .wrap is a direct flex item of
   body (body{display:flex;flex-direction:column} in base.css, for the
   sticky-footer layout). A flex item's cross-axis auto margins (our
   margin:0 auto) suppress align-items:stretch, so without an explicit width
   the item shrinks to its content's intrinsic size instead of filling up to
   max-width - on wide content (zadania's task cards) that's invisible, but
   course.php's narrower head/modules content shrank .wrap to ~560px. */
.wrap{width:100%;max-width:880px;margin:0 auto;padding:0 24px}

/* ---------- topbar ---------- */
.topbar{
  position:sticky;top:0;z-index:20;
  background:color-mix(in srgb,var(--bg) 86%,transparent);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--hair);
  transition:background-color .2s ease-out;
}
.topbar-in{
  max-width:880px;margin:0 auto;padding:14px 24px;
  display:flex;align-items:center;gap:20px;
}
/* Wszystko po logo trzyma się PRAWEJ krawędzi, i to jest jedyna reguła,
   która o tym decyduje.

   Wcześniej robił to `margin-left:auto` na pasku sekcji - czyli prawa
   krawędź zależała od tego, czy akurat ten jeden element jest widoczny.
   Przestał być, gdy sekcje zeszły poniżej 720px do menu konta, i awatar
   przykleił się do logo. Auto-margines na logu nie ma tego problemu: pcha
   w prawo wszystko, co po nim zostało, niezależnie od tego, czy jest tego
   pięć elementów, czy jeden - a skład tego paska zmienia się i z punktem
   łamania, i z tym, czy ktoś jest zalogowany.

   Nie dokładaj drugiego `margin-left:auto` po prawej stronie: dwa
   automatyczne marginesy DZIELĄ wolną przestrzeń między siebie, więc
   zamiast przy krawędzi element ląduje mniej więcej pośrodku. Dokładnie
   dlatego zniknęła reguła `.topbar-auth .theme-btn{margin-left:auto}`
   z auth.css. */
.topbar-in > .wordmark-link{margin-right:auto}
/* Wordmark agentsclub (rebranding 2026-10): Funnel Sans 700, odstęp -5%,
   małymi literami, czysta czerń. W ciemnym motywie czerń znikłaby na tle,
   więc tam znak bierze kolor tuszu. Bez podkreślenia i kursora z dawnego
   znaku agentsclub. */
.wordmark{
  font-family:"Funnel Sans",system-ui,sans-serif;
  font-weight:700;font-size:17px;letter-spacing:-.05em;line-height:1;
  color:#000;display:inline-block;white-space:nowrap;
  padding-right:.05em; /* oddaje ujemny odstęp za ostatnią literą, znak jest optycznie wyśrodkowany */
}
html.dark .wordmark,
html[data-theme="dark"] .wordmark{color:var(--ink)}
a.wordmark-link{text-decoration:none;color:inherit}
.wordmark.wm-lg{font-size:24px}
.wordmark.wm-sm{font-size:15px}

/* ---------- section switcher (Warsztaty / Kurs / Zadania) ----------
   Renamed from the mockups' `.nav` per the project's own markup convention
   (<nav class="switcher">...). No whitespace between the <a> tags in the
   markup that consumes this - see views/layout/switcher.php. */
/* `overflow-x` + `min-width:0` to zawór na pasmo 720-900px: powyżej 720px
   wracają do paska sklep, motyw i dzwonek, więc bywa tam ciaśniej niż na
   telefonie. Gdy zawartość się mieści - a mieści się na typowym desktopie -
   ta reguła nie robi nic. Suwak jest schowany, bo to wstęga zakładek, a nie
   okno przewijania: widoczny pasek pod nazwami sekcji czyta się jak usterka.
   Poniżej 720px pasek w ogóle nie istnieje, zob. punkt łamania niżej. */
.switcher{display:flex;align-items:center;gap:4px;
  overflow-x:auto;min-width:0;scrollbar-width:none;-ms-overflow-style:none}
.switcher::-webkit-scrollbar{display:none}
.switcher a{
  text-decoration:none;font-size:var(--fs-small);font-weight:500;color:var(--sub);
  padding:7px 14px;border-radius:999px;flex:none;
  transition:background-color .18s ease-out,color .18s ease-out;
}
@media(hover:hover){.switcher a:hover{background:var(--pill);color:var(--ink)}}
.switcher a.active{background:var(--pill);color:var(--ink);font-weight:600}

/* Wyróżnienie NOWOŚCI (`highlight` z cockpit_sections()), dziś „Kursy" obok
   starego „Kurs". Ceglany akcent, nie druga waga kroju: pozycje sekcji mają
   jedną hierarchię i pogrubienie znaczy w tym pasku „tu jesteś" (.active).
   Kolor niesie więc coś innego niż waga i nie zabiera stanowi aktywnemu
   jego jedynego sygnału.

   Tło bierze `--fill` (akcent 15%/24%, zależnie od motywu) dopiero w stanie
   aktywnym i przy najechaniu - stałe tło zrobiłoby z jednej pozycji paska
   przycisk, a to jest wstęga zakładek. */
.switcher a.highlight{color:var(--acc)}
@media(hover:hover){.switcher a.highlight:hover{background:var(--fill);color:var(--acc)}}
.switcher a.highlight.active{background:var(--fill);color:var(--acc)}

/* Pasek z przełącznikiem widoku (sekcja kursów) jest o 137px ciaśniejszy,
   a jedynym elastycznym elementem jest wstęga - więc to ona się kurczyła
   i zaczynała przewijać już przy 1283px, czyli na zwykłym laptopie. Skrypt
   w `switcher.php` doprowadzał wtedy aktywną sekcję do widoku i ucinał
   pierwszej literę: „Warsztaty" renderowało się jako „arsztaty" i czytało
   jak nachodzenie logotypu na menu, a nie jak przewinięcie.

   `.topbar-in` ma `max-width:880px`, więc szeroki ekran TU NIE POMAGA -
   miejsce trzeba odebrać czemuś innemu. Pierwsza wersja tej reguły oddawała
   38px przy czterech sekcjach i to wystarczało z zapasem 9px. Piąta sekcja
   („Kursy" obok „Kurs") zjadła ten zapas i wstęga znowu wychodziła o 39px
   poza pasek - czyli dokładnie ten sam objaw, przed którym stoi ten
   komentarz. Stąd drugie źródło: odstęp między elementami całego paska.
   6 przerw × 8px = 48px, więcej niż brakujące 39px. */
.topbar-in:has(.view-toggle){gap:12px}
.topbar-in:has(.view-toggle) .switcher{gap:2px}
.topbar-in:has(.view-toggle) .switcher a{padding:7px 10px}

/* ---------- przełącznik widoku twórca/odbiorca (issue #44) ----------

   Mieszka TUTAJ, a nie w `kursy.css`, bo renderuje go wspólny
   `views/layout/topbar-v2.php`, a `kursy.css` ładuje wyłącznie `kursy.php`.
   Na stronie lekcji przycisk był przez to bez żadnych
   stylów: domyślne tło przeglądarki pod tekstem w kolorze `--ink`, czyli
   w ciemnym motywie napis niewidoczny. Style elementu wspólnego paska nie
   mogą wisieć w arkuszu jednej sekcji. */
.view-toggle{
  display:inline-flex;align-items:center;gap:8px;flex:none;
  font:inherit;font-size:13px;font-weight:600;cursor:pointer;
  padding:7px 14px;border-radius:999px;
  border:1px solid var(--hair);background:var(--panel);color:var(--ink);
  transition:background .15s ease,border-color .15s ease;
}
.view-toggle:hover{background:var(--pill)}
.view-dot{width:8px;height:8px;border-radius:50%;background:var(--ink);flex:none}
.view-toggle.is-viewer .view-dot{background:#3F7653}
html[data-theme="dark"] .view-toggle.is-viewer .view-dot{background:#4FC98C}
.view-toggle:disabled{opacity:.55;cursor:default}

/* Prosba o potwierdzenie hasla po odtworzeniu sesji (migracja 088). Stoi
   w slocie przelacznika, bo zajmuje miejsce po kontrolce, ktora wlasnie
   zniknela - i dlatego dzieli z nim klase: regula `:has(.view-toggle)` wyzej
   odejmuje pasek 39px szerokosci, a chip bez niej rozpychalby nawigacje. */
.stepup-chip{text-decoration:none;border-color:var(--acc);color:var(--acc)}
.stepup-chip:hover{background:var(--pill)}
.stepup-chip .view-dot{background:var(--acc)}

@media(max-width:900px){
  /* Przy ciasnym pasku zostaje sama kropka: etykieta jest wtedy pierwszą
     rzeczą, którą można poświęcić, a stan dalej widać po kolorze. */
  .view-toggle{font-size:0;padding:8px;gap:0}
  /* Chipa to NIE dotyczy: przelacznik zwiniety do kropki dalej niesie stan
     kolorem, a prosba o haslo zwinieta do kropki nie niesie niczego. */
  .stepup-chip{font-size:12px;padding:7px 12px;gap:8px}
}

/* ---------- user/account menu ----------
   Not in the v2-docs mockups (they never designed a logged-in chrome for
   this) - built to match the topbar's own idiom: circular avatar the same
   36px as .theme-btn, floating panel styled like the lesson player's other
   floating surfaces (.win / .sheet in player.css: var(--bg), 1px var(--hair)
   border, generous radius, var(--win-sh) shadow). */
.user-menu{position:relative;flex:none}
.user-menu-trigger{
  width:36px;height:36px;border-radius:999px;border:none;padding:0;cursor:pointer;
  background:var(--pill);overflow:hidden;display:grid;place-items:center;flex:none;
  transition:background-color .18s ease-out;
}
@media(hover:hover){.user-menu-trigger:hover{background:color-mix(in srgb,var(--pill) 80%,var(--ink) 8%)}}
/* Od issue #109 to zawsze <span> z app_av_html() (kiedyś: <img> albo <span>
   z dodatkową klasą .user-menu-initials), więc jedna reguła obsługuje obie
   gałęzie - zdjęcie w środku, inicjały jako tekst. Tło daje przycisk
   .user-menu-trigger, ten <span> jest przezroczysty. */
.user-menu-avatar{
  width:100%;height:100%;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:650;color:var(--ink);
}
.user-menu-avatar img{width:100%;height:100%;display:block;object-fit:cover}
.user-menu-panel{
  position:absolute;top:calc(100% + 8px);right:0;z-index:30;min-width:190px;
  background:var(--bg);border:1px solid var(--hair);border-radius:14px;
  box-shadow:0 10px 26px var(--win-sh);padding:6px;
}
.user-menu-name{padding:8px 10px 6px;font-size:13px;font-weight:650;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.user-menu-panel hr{border:none;border-top:1px solid var(--hair);margin:4px 0}
.user-menu-row-form{margin:0}
.user-menu-row{
  display:block;width:100%;text-align:left;font-family:inherit;font-size:14px;color:var(--ink);
  text-decoration:none;background:none;border:none;cursor:pointer;
  padding:9px 10px;border-radius:8px;transition:background-color .15s ease-out;
}
@media(hover:hover){.user-menu-row:hover{background:var(--pill)}}

/* Theme toggle row - only shown inside the account menu on mobile, once
   the standalone topbar .theme-btn hides (see mobile breakpoint below). */
.user-menu-row-theme,
.user-menu-row-shop{display:none;align-items:center;gap:10px}

/* Sekcje kokpitu w menu konta - tą samą drogą, tylko że schodzą tu CAŁE,
   a nie jako ikona. Pozycja bieżąca jest wyróżniona jak w pasku: menu, które
   nie mówi, gdzie się jest, na telefonie nie ma tego kto powiedzieć - paska
   sekcji tam już nie ma. */
.user-menu-row-section{display:none}
.user-menu-row-section.current{background:var(--pill);font-weight:650}
/* To samo wyróżnienie co w pasku sekcji - poniżej 720px paska nie ma i to
   jest jedyne miejsce, w którym widać komplet sekcji, więc nowość musi
   dać się tu rozpoznać tak samo. */
.user-menu-row-section.highlight{color:var(--acc)}
.user-menu-sep-section{display:none}
.user-menu-row-theme svg,
.user-menu-row-shop svg{display:block;width:16px;height:16px;flex:none}
/* Trzy stany, wybierane z data-theme-pref - patrz komentarz przy .theme-btn
   w base.css. */
.user-menu-row-theme .ic-sun{display:block}
.user-menu-row-theme .ic-moon,.user-menu-row-theme .ic-auto{display:none}
html[data-theme-pref="dark"] .user-menu-row-theme .ic-sun{display:none}
html[data-theme-pref="dark"] .user-menu-row-theme .ic-moon{display:block}
html[data-theme-pref="auto"] .user-menu-row-theme .ic-sun{display:none}
html[data-theme-pref="auto"] .user-menu-row-theme .ic-auto{display:block}

/* ---------- generic section panel (badanie-rynku-w-niszy.html) ---------- */
.panel{
  background:var(--panel);border-radius:20px;
  padding:40px;margin-top:32px;
  transition:background-color .2s ease-out;
}
.panel h2{font-size:20px;font-weight:650;letter-spacing:-.012em;line-height:1.3;text-wrap:balance}
.sec-head{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.sec-head .count{margin-left:auto;font-size:var(--fs-small);color:var(--sub);font-variant-numeric:tabular-nums}
.sec-head .count .ok{color:var(--acc);font-weight:700;margin-right:5px}
.sec-sub{font-size:var(--fs-small);color:var(--sub);margin-top:6px;max-width:60ch;text-wrap:pretty}

/* ---------- site footer ---------- */
.site-footer{
  flex-shrink:0;margin-top:auto;
  text-align:center;
  padding:32px 24px;
  font-size:13px;color:var(--sub);
}
.site-footer a{color:var(--sub);text-decoration:underline}

/* ---------- cookie banner ----------
   Fixed white surface (not a theme token) on purpose, so it visually cuts
   itself off from the page underneath it in both light and dark mode. */
.cookie-banner{
  position:fixed;left:16px;right:16px;bottom:16px;z-index:500;
  max-width:640px;margin:0 auto;
  background:#FFFFFF;border:1px solid var(--hair);border-radius:16px;
  box-shadow:0 20px 50px var(--win-sh);padding:20px;
  display:flex;align-items:center;justify-content:center;text-align:center;
  gap:16px;flex-wrap:wrap;
}
.cookie-banner p{flex:1 1 320px;margin:0;font-size:14px;color:#3A362E}
.cookie-banner p a{color:var(--acc);font-weight:600}
/* Skoro powierzchnia jest przypięta, to jej zawartość też musi być: `.btn`
   i link biorą kolory z tokenów motywu, a w ciemnym --btn-bg to biel, więc
   przycisk "Zamknij" znikał na białym banerze. Przypinamy tokeny na samym
   banerze, nie właściwości przycisku - reguły `.btn` (razem z hoverem
   liczonym przez color-mix) działają dalej bez kopiowania wartości. Tu
   --bg to tło banera, czyli biel, a nie tło strony. */
.cookie-banner{--btn-bg:#1A1A1A;--btn-fg:#FFFFFF;--acc:#DB511D;--bg:#FFFFFF}

@media(max-width:720px){
  .wrap{padding:0 16px}
  .topbar-in{padding:12px 16px;gap:10px}
  .switcher a{padding:7px 10px}

  /* Poniżej 720px sekcje ZNIKAJĄ z paska i schodzą do menu konta
     (user-menu-v2.php), tą samą drogą co sklep, motyw i dzwonek wyżej.

     Poprzednia wersja robiła z paska wstęgę przewijaną w bok - mieściła
     cztery sekcje, ale połowa z nich stała za krawędzią, więc żeby zobaczyć,
     co jest do wyboru, trzeba było najpierw zgadnąć, że da się to przesunąć.
     Przy 390px na sam pasek sekcji zostaje ~184px, a cztery etykiety to ~280.

     Komentarz sprzed tej zmiany mówił, że „w pasku zostają wtedy tylko
     sekcje, bo są ważniejsze od sklepu" - to już nieprawda i dlatego znika
     razem z regułą. */
  .switcher{display:none}
  .user-menu-row-section{display:block}
  .user-menu-sep-section{display:block;border:none;border-top:1px solid var(--hair);margin:4px 0}
  .panel{padding:24px 20px}

  /* Theme toggle moves under the user account menu on mobile - hide the
     standalone topbar button wherever an account menu is present (course
     pages' .topbar-in and the lesson player's .top-in both qualify; the
     anonymous auth topbar has no .user-menu, so its toggle stays put). */
  .theme-btn:has(~ .user-menu){display:none}
  .user-menu-row-theme{display:flex}

  /* Sklep tą samą trasą co przełącznik motywu: przy zalogowanym schodzi do
     menu konta, przy gościu zostaje w pasku, bo tam nie ma go gdzie schować
     (anonimowy topbar nie ma .user-menu). Poniżej 720px w pasku zostają
     wtedy tylko sekcje - a te są ważniejsze od sklepu, bo to po nie ludzie
     wracają codziennie. */
  .shop-btn:has(~ .user-menu){display:none}
  .user-menu-row-shop{display:flex}
  /* Dzwonek powiadomień jedzie tą samą trasą - reguły są w
     css/v2/notifications.css, bo tylko tam ładuje się jego komponent. */
}

/* ── Pasek trybu offline ─────────────────────────────────────
   Pokazywany po `html[data-offline="on"]`, które ustawia js/v2/offline.js.
   Domyślnie schowany, więc strona bez tego skryptu wygląda dokładnie tak jak
   przed jego dodaniem.

   Kolor jest niski mix akcentu, nie samo `--acc`: pełny akcent znaczy w tym
   systemie „jesteś tutaj" i „to jest twój postęp", a pasek stanu sieci nie
   jest ani jednym, ani drugim. Nie jest też błędem, więc nie `--zle`. */
.offbar{display:none}

html[data-offline="on"] .offbar{
  display:block;
  padding:8px 24px;
  background:color-mix(in srgb,var(--acc) 10%,var(--bg));
  border-top:1px solid var(--hair);
  color:var(--ink);
  font-size:12px;
  font-weight:700;
  text-align:center;
}

@media (max-width:720px){
  html[data-offline="on"] .offbar{padding:8px 16px}
}
