/* ==========================================================================
   PoliceChat — dizájnrendszer + belépő képernyő
   --------------------------------------------------------------------------
   ARCULAT: kékből pirosba tartó gradiens. Komoly, letisztult, mobil-first.
   A színek, sugarak, árnyékok és térközök MIND változóban vannak itt a fájl
   tetején — a későbbi etapok (app shell, chat) ezeket használják.
   Külső betűtípus SEHOL: a rendőrségi hálózat blokkolhatná.

   VILÁGOS / SÖTÉT TÉMA (PROMPT.md 6. fejezet: „Sötét / világos téma
   kapcsoló”, kanban 755fe5e9).
     - A bare `:root` a VILÁGOS témát adja — ez az alapértelmezés, PROMPT.md
       9. fejezete is a világos palettát írja le elsőként („világos, majdnem
       fehér alap … fehér kártyák. Sötét téma IS…”).
     - A SÖTÉT téma a `:root[data-theme="dark"]` blokkban van, lent — ez az
       EREDETI, változatlan dark paletta (a projekt 8a etap óta ezzel fut).
     - A `data-theme` attribútumot a `js/app.js` állítja be, MINDIG explicit
       módon (rendszer-preferencia ELSŐ betöltéskor, utána a felhasználó
       kapcsolója felülírhatja, `localStorage`-ban megjegyezve) — egy korai,
       tömbölő inline szkript (`index.html` `<head>`) teszi ezt meg MÉG a CSS
       kirajzolása ELŐTT, hogy ne legyen egy pillanatra a rossz témában
       felvillanó kezdőképernyő (FOUC).
     - EZÉRT nincs itt `@media (prefers-color-scheme: dark)` szabály: a
       rendszer-preferenciát a JS olvassa ki és írja bele a `data-theme`-be,
       nem a CSS — így NINCS két helyen (media query + attribútum) duplikált
       színkészlet, csak egy.
     - A GRADIENS-hátterű felületek (topbar, kártyafejléc, saját chat-buborék,
       elsődleges gombok) SZÁNDÉKOSAN NEM változnak témával — a vezérmotívum
       mindkét témában ugyanaz a kék→piros gradiens, ezért az azon ÁLLÓ fehér
       szöveg/ikon/keret is hardcode-olt marad (nem `var(--pc-*)`), akárhol
       előfordul a fájlban — ez TUDATOS, nem hiányzó tokenizálás.
   ========================================================================== */

:root {
  /* --- Arculati gradiens (a projekt vezérmotívuma, TÉMÁTÓL FÜGGETLEN) --- */
  --pc-gradient: linear-gradient(135deg, #1E3C8C 0%, #3B4FB8 45%, #C8203C 100%);

  /* --- Alap (VILÁGOS — PROMPT.md 9. fejezet) --- */
  --pc-bg: #F5F7FA;
  --pc-bg-glow: radial-gradient(120% 80% at 50% -10%, rgba(59, 79, 184, .10) 0%, rgba(245, 247, 250, 0) 62%);
  --pc-surface: #FFFFFF;
  --pc-surface-2: #EEF1F6;
  --pc-border: rgba(18, 24, 43, .10);
  --pc-border-strong: rgba(18, 24, 43, .18);

  /* --- Szöveg --- */
  --pc-text: #12182B;
  --pc-text-muted: #6B7690;
  /* A gradiens-hátterű felületek szövege — TÉMÁTÓL FÜGGETLEN (l. fenti fejléc). */
  --pc-text-on-gradient: #FFFFFF;

  /* --- Akcentek --- */
  --pc-blue: #2F5BD0;
  --pc-blue-soft: rgba(47, 91, 208, .10);
  --pc-red: #D6294B;
  --pc-red-soft: rgba(214, 41, 75, .10);

  /* --- Állapotszínek (admin: fiók-státusz pillek) ---
     Az arculat kék–piros; a státuszok viszont EGY PILLANTÁSSAL szétválaszthatók
     kell legyenek, ezért kapnak saját, tompított jelzőszínt. */
  --pc-amber: #E9A13B;
  --pc-amber-soft: rgba(233, 161, 59, .14);
  --pc-green: #3FA971;
  --pc-green-soft: rgba(63, 169, 113, .14);
  --pc-slate: #8794AE;
  --pc-slate-soft: rgba(135, 148, 174, .14);

  /* --- Szöveg lágy (-soft) hátterű chipeken (üzenetsáv, admin pill, badge) —
     VILÁGOSBAN a chip pasztell, a szöveg SÖTÉT árnyalatú (fordítva, mint
     sötét témában, ahol a chip tompított, a szöveg pedig pasztell) — enélkül
     a sötét témára hangolt pasztell szöveg fehér alapon szinte eltűnne. */
  --pc-on-blue-soft: #1B3E91;
  --pc-on-red-soft: #9A1734;
  --pc-on-green-soft: #146C43;
  --pc-on-amber-soft: #8A5A12;
  --pc-on-slate-soft: #495168;

  /* Kiemelt akcens-szöveg SIMA felületen (nem chipen) — link, ikon. */
  --pc-accent-blue-text: #2F5BD0;
  --pc-accent-blue-text-hover: #1E3C8C;
  --pc-accent-red-text: #B0264A;

  /* Halvány „wash” tónusok (hover-háttér, csontváz-csillogás, elválasztó
     árnyalat) — sötét témában fehér, világosban tintafekete-kék, UGYANAZZAL
     az opacitással, hogy az intenzitás-érzet egyezzen a két téma közt. */
  --pc-wash-weak: rgba(18, 24, 43, .05);
  --pc-wash-strong: rgba(18, 24, 43, .08);
  --pc-wash-border: rgba(18, 24, 43, .22);
  --pc-skeleton-a: rgba(18, 24, 43, .05);
  --pc-skeleton-b: rgba(18, 24, 43, .10);
  --pc-table-head-tint: rgba(18, 24, 43, .03);
  --pc-card-foot-tint: rgba(18, 24, 43, .02);

  /* Profilkép-jelvény (`.avatar`) FELÜLETEN (nem gradiensen) álló alakja —
     a gradiensen álló eset (`.avatar--on-gradient`) mindig a fehér-áttetsző
     változatot kapja, témától függetlenül. */
  --pc-avatar-bg: rgba(47, 91, 208, .12);
  --pc-avatar-border: rgba(47, 91, 208, .28);
  --pc-avatar-text: #1E3C8C;

  /* Általános gomb-fókuszgyűrű (`.button:focus-visible`) — a gradiens-hátterű
     elemek (topbar-ikonok stb.) fókuszgyűrűje MINDIG fehér marad, azt ez a
     token nem érinti. */
  --pc-focus-ring: #12182B;

  /* --- Sugarak (TÉMÁTÓL FÜGGETLEN) --- */
  --pc-radius-sm: 10px;
  --pc-radius-md: 14px;
  --pc-radius-lg: 18px;
  --pc-radius-pill: 999px;

  /* --- Árnyék (PROMPT.md 9. fejezet: „nagyon finom árnyék”) --- */
  --pc-shadow: 0 2px 12px rgba(20, 30, 60, .08);
  --pc-shadow-lg: 0 18px 48px rgba(20, 30, 60, .16);

  /* --- Térköz (TÉMÁTÓL FÜGGETLEN) --- */
  --pc-space-1: 4px;
  --pc-space-2: 8px;
  --pc-space-3: 12px;
  --pc-space-4: 16px;
  --pc-space-5: 20px;
  --pc-space-6: 24px;

  /* --- Érintési felület: minden kattintható elem legalább ekkora --- */
  --pc-touch: 44px;

  /* --- Mozgás --- */
  --pc-motion: 180ms;

  --pc-font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

/* --------------------------------------------------------------------------
   SÖTÉT TÉMA — az EREDETI, változatlan paletta (8a etap óta). Csak akkor él,
   ha a `js/app.js` a `<html>`-re `data-theme="dark"`-ot írt (rendszer-
   preferencia vagy a felhasználó kapcsolója, l. a fenti fejléc-kommentet).
   -------------------------------------------------------------------------- */
:root[data-theme="dark"] {
  --pc-bg: #101623;
  --pc-bg-glow: radial-gradient(120% 80% at 50% -10%, rgba(59, 79, 184, .30) 0%, rgba(16, 22, 35, 0) 62%);
  --pc-surface: #171F30;
  --pc-surface-2: #1E273B;
  --pc-border: rgba(255, 255, 255, .10);
  --pc-border-strong: rgba(255, 255, 255, .20);

  --pc-text: #EEF1F8;
  --pc-text-muted: #9AA5BD;

  --pc-blue-soft: rgba(47, 91, 208, .18);
  --pc-red-soft: rgba(214, 41, 75, .18);
  --pc-amber-soft: rgba(233, 161, 59, .16);
  --pc-green-soft: rgba(63, 169, 113, .16);
  --pc-slate-soft: rgba(135, 148, 174, .16);

  --pc-on-blue-soft: #C7D6FF;
  --pc-on-red-soft: #FFC9D3;
  --pc-on-green-soft: #B6EBD0;
  --pc-on-amber-soft: #F6D3A2;
  --pc-on-slate-soft: #C6CFE2;

  --pc-accent-blue-text: #9FBBFF;
  --pc-accent-blue-text-hover: #C7D6FF;
  --pc-accent-red-text: #FFB3C1;

  --pc-wash-weak: rgba(255, 255, 255, .06);
  --pc-wash-strong: rgba(255, 255, 255, .08);
  --pc-wash-border: rgba(255, 255, 255, .34);
  --pc-skeleton-a: rgba(255, 255, 255, .05);
  --pc-skeleton-b: rgba(255, 255, 255, .11);
  --pc-table-head-tint: rgba(255, 255, 255, .03);
  --pc-card-foot-tint: rgba(255, 255, 255, .02);

  --pc-avatar-bg: rgba(255, 255, 255, .18);
  --pc-avatar-border: rgba(255, 255, 255, .28);
  --pc-avatar-text: #FFFFFF;

  --pc-focus-ring: #FFFFFF;

  --pc-shadow: 0 2px 12px rgba(5, 9, 18, .45);
  --pc-shadow-lg: 0 18px 48px rgba(5, 9, 18, .55);
}

/* --------------------------------------------------------------------------
   Alap
   -------------------------------------------------------------------------- */

*, *::before, *::after { box-sizing: border-box; }

[hidden] { display: none !important; }

/* A vízszintes görgetés tiltása a GYÖKÉRELEMEN van, nem a `body`-n.
   A `body`-ra téve a `body` maga válna görgetődobozzá (`overflow-y: auto`), és
   egy a képernyőnél magasabb tartalom — pl. a regisztrációs űrlap — nem lenne
   végiggörgethető. Ugyanezért nincs a `body`-n rögzített `height: 100%` sem. */
html {
  overflow-x: hidden;
}

body {
  min-height: 100vh;
  margin: 0;
  padding: 0;
  font-family: var(--pc-font);
  font-size: 16px;
  line-height: 1.5;
  color: var(--pc-text);
  background-color: var(--pc-bg);
  background-image: var(--pc-bg-glow);
  background-repeat: no-repeat;
  -webkit-font-smoothing: antialiased;
}

body.is-loading .app { visibility: hidden; }

.app {
  min-height: 100vh;
  display: flex;
  /* FONTOS: nem `align-items: center`. A regisztrációs űrlap magasabb lehet a
     képernyőnél, és a középre igazítás ilyenkor LEVÁGNÁ a tetejét (nem lehetne
     felgörgetni). Az `auto` függőleges margó (lásd `.screen`) középre teszi a
     rövid kártyát, magas tartalomnál viszont magától 0-ra vált. */
  align-items: flex-start;
  justify-content: center;
  padding:
    calc(var(--pc-space-6) + env(safe-area-inset-top))
    calc(var(--pc-space-4) + env(safe-area-inset-right))
    calc(var(--pc-space-6) + env(safe-area-inset-bottom))
    calc(var(--pc-space-4) + env(safe-area-inset-left));
}

.screen {
  width: 100%;
  margin-block: auto; /* középre, de sosem levágva (lásd `.app`) */
}

/* Csak a képernyőolvasónak: a tartalom a bejárási sorrendben és a
   címsor-szerkezetben ott van, a látványt viszont nem befolyásolja.
   NEM `display: none` és nem `visibility: hidden` — azokat a képernyőolvasó
   sem olvasná fel. */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  white-space: nowrap;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
}

/* --------------------------------------------------------------------------
   Kártya
   -------------------------------------------------------------------------- */

.card {
  width: 100%;
  max-width: 420px;
  /* A jogi szöveg hosszú — a kártya nőhet, a lap görgethető marad. */
  margin: 0 auto;
  background: var(--pc-surface);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-lg);
  box-shadow: var(--pc-shadow-lg);
  overflow: hidden;
}

/* Hosszú dokumentum (adatkezelési tájékoztató) — szélesebb kártya. */
.card--wide { max-width: 760px; }

/* Admin lista — a legszélesebb nézet (szűrők + felhasználókártyák). */
.card--admin { max-width: 900px; }

.card__head {
  display: flex;
  align-items: center;
  gap: var(--pc-space-3);
  padding: var(--pc-space-5) var(--pc-space-5);
  background: var(--pc-gradient);
  color: var(--pc-text-on-gradient);
}

.card__head-text { min-width: 0; }

.card__title {
  margin: 0;
  font-size: 1.25rem;
  font-weight: 700;
  letter-spacing: .2px;
  /* Hosszú, felhasználótól jövő név sem törheti szét a fejlécet. */
  overflow-wrap: anywhere;
}

.card__tagline {
  margin: 2px 0 0;
  font-size: .8125rem;
  color: rgba(255, 255, 255, .82);
  overflow-wrap: anywhere;
}

/* A megerősítő/szerkesztő panelek BELSŐ címsora — a képernyő fő címénél
   (`.card__title`) szándékosan kisebb, hogy a hierarchia egyértelmű legyen. */
.card__title--panel {
  font-size: 1.0625rem;
  margin-bottom: var(--pc-space-3);
}

.logo {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  border-radius: var(--pc-radius-md);
  background: rgba(255, 255, 255, .16);
  border: 1px solid rgba(255, 255, 255, .22);
  color: #fff;
}

.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-avatar-bg);
  border: 1px solid var(--pc-avatar-border);
  font-weight: 700;
  font-size: 1.0625rem;
  color: var(--pc-avatar-text);
}

/* A gradiens-hátterű jelvények (fiók-fejléc, drawer-fejléc) MINDIG a fehér-
   áttetsző alakot kapják, témától függetlenül (l. a fájl fejléc-kommentjét):
   a gradiens maga sem változik, a rajta álló jelvény se változzon vele. */
.avatar--on-gradient {
  background: rgba(255, 255, 255, .18);
  border-color: rgba(255, 255, 255, .28);
  color: #fff;
}

/* Feltöltött profilkép (PROMPT.md 108. sor) -- ugyanaz a kör-alak és méret,
   mint a kezdőbetűs jelvénynél (`.avatar`), csak `<img>`-en: az `object-fit`
   biztosítja, hogy egy nem pontosan négyzetes forrás is kitöltse a kört
   torzítás nélkül (a kliens oldali vágás, `cropAvatarImageBlob`, már eleve
   négyzetesre vág, ez csak a védőháló). */
.avatar--image {
  object-fit: cover;
}

/* A profilkép-szerkesztő panel nagyobb előnézete. */
.avatar--lg {
  width: 96px;
  height: 96px;
  font-size: 1.75rem;
}

.card__body { padding: var(--pc-space-5); }

.card__foot {
  padding: var(--pc-space-4) var(--pc-space-5);
  border-top: 1px solid var(--pc-border);
  background: var(--pc-card-foot-tint);
}

.section-title {
  margin: 0 0 var(--pc-space-1);
  font-size: 1.0625rem;
  font-weight: 650;
}

.section-sub {
  margin: 0 0 var(--pc-space-4);
  font-size: .875rem;
  color: var(--pc-text-muted);
}

.note {
  margin: 0;
  font-size: .8125rem;
  color: var(--pc-text-muted);
  text-align: center;
}

/* --------------------------------------------------------------------------
   Üzenetsáv (hiba / tájékoztatás)
   -------------------------------------------------------------------------- */

.message {
  margin: 0 0 var(--pc-space-4);
  padding: var(--pc-space-3) var(--pc-space-4);
  border-radius: var(--pc-radius-md);
  font-size: .875rem;
  border: 1px solid transparent;
  /* A szervertől jövő szöveg sem lóghat ki. */
  overflow-wrap: anywhere;
}

/* Hiba: piros akcent. */
.message--error {
  background: var(--pc-red-soft);
  border-color: rgba(214, 41, 75, .45);
  color: var(--pc-on-red-soft);
}

/* Tájékoztatás (pl. „a fiókod jóváhagyásra vár”) — NEM néz ki hibának. */
.message--info {
  background: var(--pc-blue-soft);
  border-color: rgba(47, 91, 208, .48);
  color: var(--pc-on-blue-soft);
}

/* Sikeres művelet (pl. „A felhasználót jóváhagytad”). */
.message--ok {
  background: var(--pc-green-soft);
  border-color: rgba(63, 169, 113, .48);
  color: var(--pc-on-green-soft);
}

/* --------------------------------------------------------------------------
   Űrlapmezők
   -------------------------------------------------------------------------- */

.field { margin-bottom: var(--pc-space-4); }

.field__label {
  display: block;
  margin-bottom: var(--pc-space-2);
  font-size: .8125rem;
  font-weight: 600;
  color: var(--pc-text-muted);
}

.field__control { position: relative; }

.field__input {
  width: 100%;
  min-height: var(--pc-touch);
  padding: 10px 14px;
  font: inherit;
  font-size: 1rem; /* iOS-en 16px alatt belenagyítana a mezőbe */
  color: var(--pc-text);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
  transition: border-color var(--pc-motion) ease, box-shadow var(--pc-motion) ease;
}

.field__control .field__input { padding-right: 52px; }

.field__input::placeholder { color: #6B7690; }

.field__input:focus {
  outline: none;
  border-color: var(--pc-blue);
  box-shadow: 0 0 0 3px rgba(47, 91, 208, .30);
}

/* Jelszó mutatása / elrejtése */
.icon-button {
  position: absolute;
  top: 50%;
  right: 2px;
  transform: translateY(-50%);
  width: var(--pc-touch);
  height: var(--pc-touch);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  color: var(--pc-text-muted);
  background: none;
  border: none;
  border-radius: var(--pc-radius-md);
  cursor: pointer;
  transition: color var(--pc-motion) ease;
}

.icon-button:hover { color: var(--pc-text); }

.icon-button:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

/* Alapból „elrejtve” = áthúzott szem; megjelenített jelszónál eltűnik a vonal. */
.icon-button.is-visible .icon-eye__slash { display: none; }

/* --- Mező-kiegészítők: súgó, hibaszöveg, „nem kötelező” jelölés ----------- */

.field__hint {
  margin: var(--pc-space-2) 0 0;
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

/* Mezőnkénti hibaszöveg. A tartalma MINDIG textContent-tel íródik. */
.field__error {
  margin: var(--pc-space-2) 0 0;
  font-size: .8125rem;
  font-weight: 600;
  color: var(--pc-accent-red-text);
  overflow-wrap: anywhere;
}

.field__optional {
  margin-left: 6px;
  font-weight: 500;
  text-transform: none;
  color: var(--pc-text-muted);
  opacity: .85;
}

/* Hibás mező: piros keret. Az `aria-invalid`-hoz kötjük, hogy a látvány és a
   képernyőolvasó ugyanazt mondja. */
.field__input[aria-invalid="true"] {
  border-color: var(--pc-red);
  box-shadow: 0 0 0 3px rgba(214, 41, 75, .22);
}

/* --- Legördülő (vármegye / kerület) -------------------------------------- */

.field__control--select { display: block; }

.field__select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 44px;
  cursor: pointer;
  /* Hosszú megyenév se feszítse szét a kártyát 360 px-en. */
  max-width: 100%;
  text-overflow: ellipsis;
}

.field__select option,
.field__select optgroup { color: #12182B; background: #fff; }

/* A lista betöltése nem sikerült: magyarázat + újrapróbálkozás gomb. */
.retry {
  margin-top: var(--pc-space-3);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-red-soft);
  border: 1px solid rgba(214, 41, 75, .45);
  border-radius: var(--pc-radius-md);
}

.retry__text {
  margin: 0 0 var(--pc-space-3);
  font-size: .8125rem;
  color: var(--pc-on-red-soft);
  overflow-wrap: anywhere;
}

.field__chevron {
  position: absolute;
  top: 50%;
  right: 14px;
  transform: translateY(-50%);
  display: inline-flex;
  pointer-events: none;
  color: var(--pc-text-muted);
}

/* --- Választó pillek: rendőr (kék) / polgárőr (piros) -------------------- */

.fieldset {
  margin-inline: 0;
  padding: 0;
  border: 0;
}

.fieldset > .field__label { padding: 0; }

.choice-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-3);
}

.choice {
  flex: 1 1 140px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--pc-space-2);
  min-height: var(--pc-touch);
  padding: 10px 14px;
  font-size: .9375rem;
  font-weight: 650;
  color: var(--pc-text-muted);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-pill);
  cursor: pointer;
  text-align: center;
  transition: background-color var(--pc-motion) ease, color var(--pc-motion) ease,
              border-color var(--pc-motion) ease;
}

/* A rádiógombot elrejtjük a szem elől, de a fókusz és a billentyűzet marad.
   Az elem a címke ELŐTT áll a HTML-ben, ezért az `+` szomszéd-szelektorral
   stílusozható a hozzá tartozó pill. */
.choice__input {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

.choice:hover { border-color: var(--pc-wash-border); }

.choice__input:focus-visible + .choice {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.choice__input:checked + .choice--police {
  color: #fff;
  background: var(--pc-blue);
  border-color: var(--pc-blue);
}

.choice__input:checked + .choice--civil {
  color: #fff;
  background: var(--pc-red);
  border-color: var(--pc-red);
}

/* --------------------------------------------------------------------------
   Szerepkör-választó csempék (a LEGELSŐ képernyő)
   Rendőr = kék (#2F5BD0), polgárőr = piros (#D6294B) — PROMPT.md 9. pont.
   -------------------------------------------------------------------------- */

.role-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--pc-space-3);
}

/* A rádiógomb a szem elől elrejtve, de fókuszálható és billentyűzhető marad.
   (Ugyanaz a minta, mint a `.choice__input`-nál.) */
.role__input {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

.role {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: var(--pc-space-2);
  /* Bőven a 44 px-es minimum fölött: ez a képernyő fő döntése. */
  min-height: 132px;
  padding: var(--pc-space-4) var(--pc-space-3);
  text-align: center;
  color: var(--pc-text);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-lg);
  cursor: pointer;
  transition: border-color var(--pc-motion) ease, background-color var(--pc-motion) ease,
              box-shadow var(--pc-motion) ease, transform var(--pc-motion) ease;
}

.role:hover { border-color: var(--pc-wash-border); }

.role__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: var(--pc-radius-pill);
  border: 1px solid transparent;
  transition: background-color var(--pc-motion) ease, color var(--pc-motion) ease,
              border-color var(--pc-motion) ease;
}

.role--police .role__icon {
  color: var(--pc-accent-blue-text);
  background: var(--pc-blue-soft);
  border-color: rgba(47, 91, 208, .45);
}

.role--civil .role__icon {
  color: var(--pc-accent-red-text);
  background: var(--pc-red-soft);
  border-color: rgba(214, 41, 75, .45);
}

.role__name {
  font-size: .9375rem;
  font-weight: 700;
  letter-spacing: .4px;
  overflow-wrap: anywhere;
}

.role__desc {
  font-size: .75rem;
  line-height: 1.35;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

/* A fókuszgyűrű a szerepkör SAJÁT színét viseli — a piros csempe körül ne
   villanjon kék keret. */
.role__input:focus-visible + .role--police {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.role__input:focus-visible + .role--civil {
  outline: 2px solid var(--pc-red);
  outline-offset: 2px;
}

/* Kiválasztott állapot: a szerepkör saját színe. */
.role__input:checked + .role--police {
  background: var(--pc-blue-soft);
  border-color: var(--pc-blue);
  box-shadow: 0 0 0 1px var(--pc-blue) inset;
}

.role__input:checked + .role--police .role__icon {
  color: #fff;
  background: var(--pc-blue);
  border-color: var(--pc-blue);
}

.role__input:checked + .role--civil {
  background: var(--pc-red-soft);
  border-color: var(--pc-red);
  box-shadow: 0 0 0 1px var(--pc-red) inset;
}

.role__input:checked + .role--civil .role__icon {
  color: #fff;
  background: var(--pc-red);
  border-color: var(--pc-red);
}

.role-actions { margin-top: var(--pc-space-5); }

/* --- GDPR-elfogadás ------------------------------------------------------ */

.consent {
  display: flex;
  align-items: flex-start;
  gap: var(--pc-space-3);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
}

/* 44×44 px érintési felület a jelölőnégyzet körül (a négyzet maga 22 px). */
.consent__hit {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--pc-touch);
  height: var(--pc-touch);
  cursor: pointer;
}

.consent__box {
  width: 22px;
  height: 22px;
  margin: 0;
  accent-color: var(--pc-blue);
  cursor: pointer;
}

/* Hibás (be nem jelölt, de kötelező) jelölőnégyzet. A `.field__input`
   szabálya erre nem érvényes — a jelölőnégyzet nem beviteli mező —, ezért
   ugyanazt a piros gyűrűt itt kapja meg, hogy a látvány és az
   `aria-invalid="true"` ugyanazt mondja. */
.consent__box[aria-invalid="true"] {
  border-radius: 4px;
  box-shadow: 0 0 0 3px rgba(214, 41, 75, .35);
}

.consent__text { min-width: 0; }

.consent__text label {
  display: block;
  padding: 11px 0 0;
  font-size: .875rem;
  cursor: pointer;
  overflow-wrap: anywhere;
}

/* --- Szöveges link-gomb (nézetváltás, tájékoztató megnyitása) ------------ */

.link-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: var(--pc-touch);
  padding: 0 2px;
  font: inherit;
  font-size: .875rem;
  font-weight: 650;
  color: var(--pc-accent-blue-text);
  background: none;
  border: 0;
  text-decoration: underline;
  text-underline-offset: 3px;
  cursor: pointer;
  transition: color var(--pc-motion) ease;
}

.link-button:hover { color: var(--pc-accent-blue-text-hover); }

/* A visszafelé mutató nyíl a szövegével együtt egy gomb — az ikon nem
   aláhúzott, ezért külön nem is kattintható elem. */
.link-button__icon { flex: 0 0 auto; }

.link-button:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
  border-radius: var(--pc-radius-sm);
}

/* Belépő ↔ regisztráció váltósor a kártya lábában */
.switch {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--pc-space-2);
  margin: var(--pc-space-1) 0 0;
}

.switch__text {
  font-size: .875rem;
  color: var(--pc-text-muted);
}

/* Visszaút a szerepkör-választóra — halványabb, másodlagos súlyú sor. */
.switch--back {
  margin-top: 0;
  padding-top: var(--pc-space-1);
  border-top: 1px solid var(--pc-border);
}

.switch--back .link-button {
  font-weight: 600;
  color: var(--pc-text-muted);
}

.switch--back .link-button:hover { color: var(--pc-text); }

/* --------------------------------------------------------------------------
   Gombok — minden kattintható elem legalább 44 px magas
   -------------------------------------------------------------------------- */

.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: var(--pc-touch);
  padding: 12px 18px;
  font: inherit;
  font-size: 1rem;
  font-weight: 650;
  color: var(--pc-text-on-gradient);
  border: 1px solid transparent;
  border-radius: var(--pc-radius-md);
  cursor: pointer;
  transition: filter var(--pc-motion) ease, opacity var(--pc-motion) ease,
              background-color var(--pc-motion) ease;
}

.button:focus-visible {
  outline: 2px solid var(--pc-focus-ring);
  outline-offset: 2px;
}

.button--primary { background: var(--pc-gradient); }
.button--primary:hover:not(:disabled) { filter: brightness(1.08); }

.button--ghost {
  margin-top: var(--pc-space-5);
  color: var(--pc-text);
  background: transparent;
  border-color: var(--pc-border-strong);
}
.button--ghost:hover:not(:disabled) { background: var(--pc-wash-weak); }

/* Ugyanaz, de felső margó nélkül (kártyalábban áll, nem űrlap alatt). */
.button--flush { margin-top: 0; }

/* Elsődleges gomb az adatlista ALATT (belépett képernyő) — kis levegővel. */
.button--spaced { margin-top: var(--pc-space-5); }

.button__icon { flex: 0 0 auto; margin-right: var(--pc-space-2); }

/* Visszafordíthatatlan / szigorú művelet (elutasítás). */
.button--danger {
  color: #fff;
  background: var(--pc-red);
  border-color: var(--pc-red);
}
.button--danger:hover:not(:disabled) { filter: brightness(1.08); }

/* Visszavonhatatlan művelet NYITÓGOMBJA (törlés): halkabb, de félreérthetetlen.
   A tényleges megerősítő gomb a panelben már tömör piros (`button--danger`). */
.button--danger-ghost {
  margin-top: 0;
  color: var(--pc-on-red-soft);
  background: transparent;
  border-color: rgba(214, 41, 75, .55);
}
.button--danger-ghost:hover:not(:disabled) { background: var(--pc-red-soft); }

/* Keskenyebb, másodlagos gomb (pl. „Lista újratöltése”) — az érintési felület
   így is a teljes 44 px. */
.button--slim {
  width: auto;
  padding: 10px 16px;
  font-size: .875rem;
}

.button:disabled {
  opacity: .62;
  cursor: default;
}

/* --------------------------------------------------------------------------
   Szerepkör-badge: rendőr = kék pill, polgárőr = piros pill
   -------------------------------------------------------------------------- */

.badge {
  display: inline-block;
  margin-top: 6px;
  padding: 3px 12px;
  font-size: .75rem;
  font-weight: 650;
  border-radius: var(--pc-radius-pill);
  color: #fff;
  border: 1px solid rgba(255, 255, 255, .35);
}

.badge--police { background: var(--pc-blue); }
.badge--civil { background: var(--pc-red); }
.badge--tag {
  margin-top: 0;
  background: var(--pc-slate-soft);
  color: var(--pc-on-slate-soft);
  border-color: rgba(135, 148, 174, .45);
}

/* --------------------------------------------------------------------------
   Adatlista (belépett állapot)
   -------------------------------------------------------------------------- */

.data-list {
  margin: 0;
  padding: 0;
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
  background: var(--pc-surface-2);
  overflow: hidden;
}

.data-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-1) var(--pc-space-3);
  justify-content: space-between;
  align-items: baseline;
  padding: var(--pc-space-3) var(--pc-space-4);
}

.data-row + .data-row { border-top: 1px solid var(--pc-border); }

.data-row dt {
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

.data-row dd {
  margin: 0;
  font-weight: 600;
  text-align: right;
  min-width: 0;
  /* Felhasználótól jövő, hosszú szöveg sem tolja szét a sort. */
  overflow-wrap: anywhere;
}

/* --- Kétállású kapcsoló-sor (PROMPT.md 6. fejezet: téma ÉS értesítés
   kapcsoló, kanban 755fe5e9 / be0eba1c) — KÖZÖS komponens mindkettőnek.
   Klasszikus „switch”: a `role="switch"` + `aria-checked` adja a jelentését,
   a látvány csak követi (a `.is-on` osztályt az app.js kapcsolja, ugyanúgy,
   mint egy checkbox `:checked`-jét, mert egy `<button>`-nek nincs natív
   bejelölt állapota). */

.switch-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--pc-space-3);
  margin-bottom: var(--pc-space-4);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
}

.switch-row__label {
  font-size: .9375rem;
  font-weight: 600;
}

.switch-row__toggle {
  flex: 0 0 auto;
  position: relative;
  width: 46px;
  height: 26px;
  padding: 0;
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-pill);
  background: var(--pc-surface);
  cursor: pointer;
  transition: background-color var(--pc-motion) ease, border-color var(--pc-motion) ease;
}

.switch-row__toggle.is-on {
  background: var(--pc-gradient);
  border-color: transparent;
}

.switch-row__thumb {
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-text-on-gradient);
  box-shadow: var(--pc-shadow);
  transition: transform var(--pc-motion) ease;
}

.switch-row__toggle.is-on .switch-row__thumb {
  transform: translateX(20px);
}

.switch-row__toggle:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

/* A kapcsoló ALATTI, kisebb magyarázó szöveg (pl. a böngésző letiltotta az
   értesítést) — VIZUÁLISAN a `.switch-row` dobozhoz tartozik, ezért annak
   alsó margóját ez veszi át, nem a doboz. */
.switch-row + .switch-row__note {
  margin: calc(-1 * var(--pc-space-3)) 0 var(--pc-space-4);
  padding: 0 var(--pc-space-4);
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

/* ==========================================================================
   ADMIN — felhasználók elbírálása
   --------------------------------------------------------------------------
   Mobil-first: 360 px-en MINDEN egy oszlopba fut és a felhasználók KÁRTYÁKON
   jelennek meg (táblázat sehol), így nincs vízszintes görgetés. Szélesebb
   képernyőn a szűrők több oszlopba rendeződnek.
   ========================================================================== */

.filters {
  margin-bottom: var(--pc-space-5);
  padding: var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
}

.filters__grid {
  display: grid;
  /* 360 px-en egy oszlop; ahol elfér, több. A `minmax(0, …)` alsó határa
     nulla, ezért egy hosszú megyenév sem feszítheti szét a rácsot. */
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr));
  gap: var(--pc-space-3);
}

/* A szűrőmezők nem űrlapsorok: nem kell alattuk a 16 px-es térköz. */
.field--filter { margin-bottom: 0; min-width: 0; }

/* A keresőmező a rácsban a teljes sort elfoglalja, ha van hely rá. */
@media (min-width: 620px) {
  .field--filter-wide { grid-column: 1 / -1; }
}

/* A törlési kérés jelölőnégyzete a `.consent` mintát veszi át (lásd a végleges
   törlés megerősítő paneljét) — ugyanaz a 44×44 px érintési felület. */
.filters__deletion { margin-top: var(--pc-space-4); }

.filters__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-3);
  margin-top: var(--pc-space-4);
}

/* --- Admin statisztika (aktív felhasználók / napi üzenetszám / tárhely) --- */

.admin-stats {
  margin-bottom: var(--pc-space-5);
}

.admin-stats__grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: var(--pc-space-3);
}

.admin-stats__tile {
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-1);
  padding: var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
}

.admin-stats__label {
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

.admin-stats__value {
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--pc-text);
}

.admin-stats__detail {
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

.admin-stats__status {
  margin: var(--pc-space-2) 0 0;
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

.admin-stats__status:empty {
  display: none;
}

/* --- Találatok fejléce --------------------------------------------------- */

.list-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--pc-space-3);
  margin-bottom: var(--pc-space-3);
}

.list-head__summary {
  margin: 0;
  min-width: 0;
  font-size: .875rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

/* --- Felhasználó-kártya --------------------------------------------------- */

.user-list {
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-3);
}

.user-card {
  padding: var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
}

/* Az imént elbírált sor rövid, halk kiemelést kap. */
.user-card--changed {
  border-color: rgba(63, 169, 113, .55);
  box-shadow: 0 0 0 1px rgba(63, 169, 113, .35) inset;
}

.user-card__head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--pc-space-3);
  margin-bottom: var(--pc-space-3);
}

.avatar--sm {
  width: 40px;
  height: 40px;
  font-size: .875rem;
  background: var(--pc-blue-soft);
  border-color: rgba(47, 91, 208, .45);
  color: var(--pc-on-blue-soft);
}

.user-card__ident {
  flex: 1 1 180px;
  min-width: 0;
}

.user-card__name {
  margin: 0;
  font-size: 1rem;
  font-weight: 700;
  /* IDEGEN adat: hosszú név sem okozhat vízszintes görgetést. */
  overflow-wrap: anywhere;
}

.user-card__email {
  margin: 2px 0 0;
  font-size: .8125rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

.user-card__tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pc-space-2);
}

.user-card__tags .badge { margin-top: 0; }

.user-card__data { background: transparent; }

/* --- Állapot-pill --------------------------------------------------------- */

.pill {
  display: inline-block;
  padding: 3px 12px;
  font-size: .75rem;
  font-weight: 650;
  border-radius: var(--pc-radius-pill);
  border: 1px solid transparent;
  white-space: nowrap;
}

.pill--pending {
  color: var(--pc-on-amber-soft);
  background: var(--pc-amber-soft);
  border-color: rgba(233, 161, 59, .45);
}

.pill--active {
  color: var(--pc-on-green-soft);
  background: var(--pc-green-soft);
  border-color: rgba(63, 169, 113, .45);
}

.pill--rejected {
  color: var(--pc-on-red-soft);
  background: var(--pc-red-soft);
  border-color: rgba(214, 41, 75, .45);
}

.pill--suspended,
.pill--unknown {
  color: var(--pc-on-slate-soft);
  background: var(--pc-slate-soft);
  border-color: rgba(135, 148, 174, .45);
}

.pill--muted {
  color: var(--pc-on-blue-soft);
  background: var(--pc-blue-soft);
  border-color: rgba(47, 91, 208, .45);
}

/* --- Műveletek + elutasító panel ------------------------------------------ */

.user-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-3);
  margin-top: var(--pc-space-4);
}

.reject-panel {
  margin-top: var(--pc-space-4);
  padding: var(--pc-space-4);
  background: var(--pc-red-soft);
  border: 1px solid rgba(214, 41, 75, .40);
  border-radius: var(--pc-radius-md);
}

.field__textarea {
  min-height: 88px;
  padding: 10px 14px;
  resize: vertical;
  line-height: 1.45;
}

.reject-panel__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-3);
  margin-top: var(--pc-space-3);
}

/* --- Megerősítő panelek (felfüggesztés, szerepkör, törlés) ----------------
   Ugyanaz a doboz-nyelv, mint az elutasító panelnél. A `--danger` változat a
   visszavonhatatlan műveleté (törlés): piros keret, hogy egy pillantással
   megkülönböztethető legyen a visszavonható műveletektől. */

.action-panel {
  margin-top: var(--pc-space-4);
  padding: var(--pc-space-4);
  background: var(--pc-surface);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
}

.action-panel--danger {
  background: var(--pc-red-soft);
  border-color: rgba(214, 41, 75, .55);
}

.action-panel__title {
  margin: 0 0 var(--pc-space-2);
  font-size: .9375rem;
  font-weight: 700;
}

.action-panel__text {
  margin: 0 0 var(--pc-space-3);
  font-size: .875rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

/* A törlés célpontja — IDEGEN adat (név, e-mail), ezért nem lóghat ki. */
.action-panel__target {
  margin: 0 0 var(--pc-space-3);
  padding: var(--pc-space-2) var(--pc-space-3);
  font-size: .875rem;
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-sm);
  overflow-wrap: anywhere;
}

.action-panel__target b {
  display: block;
  font-weight: 700;
}

.action-panel__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-3);
  margin-top: var(--pc-space-3);
}

.action-panel .field { margin-bottom: var(--pc-space-2); }

.action-panel .consent { margin-bottom: var(--pc-space-2); }

/* --- Profilkép-szerkesztő (PROMPT.md 108. sor) ----------------------------- */

.avatar-editor__preview {
  display: flex;
  justify-content: center;
  margin-bottom: var(--pc-space-3);
}

/* A megosztott `.composer__attachment-progress` sáv itt önállóan áll (nincs
   `.composer__attachment` flex-szülője) -- középre igazítva ugyanolyan jól
   mutat, mint a csatolmány-sorban. */
#avatar-editor-progress {
  margin: 0 auto var(--pc-space-3);
}

/* --- Rk tömb — jegyzetkártya (5. fázis, 1. etap) --------------------------
   A kártya-vázat (`.user-card`, `.user-card__head`, `.user-card__ident`,
   `.user-card__name`, `.user-card__tags`, `.user-card__actions`) a meglévő
   admin-lista adja — csak a dátum-sor és a tartalom-előnézet új. */

.note-card__meta {
  margin: 2px 0 0;
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

.note-card__excerpt {
  margin: var(--pc-space-3) 0 0;
  font-size: .875rem;
  line-height: 1.5;
  color: var(--pc-text);
  overflow-wrap: anywhere;
  white-space: pre-wrap;
}

/* A törlés következményei — felsorolás, hogy ne lehessen félreérteni. */
.consequences {
  margin: 0 0 var(--pc-space-3);
  padding-left: 1.15rem;
  font-size: .875rem;
  color: var(--pc-text-muted);
}

.consequences li {
  margin-bottom: var(--pc-space-1);
  overflow-wrap: anywhere;
}

.consequences li:last-child { margin-bottom: 0; }

/* --- „Ez a te fiókod” magyarázat ------------------------------------------
   A szerver a saját fiók felfüggesztését / törlését / lefokozását 409-cel
   tiltja; a felület ezért el sem vezet a zsákutcába, hanem elmagyarázza. */

.user-card__note {
  margin-top: var(--pc-space-4);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-blue-soft);
  border: 1px solid rgba(47, 91, 208, .48);
  border-radius: var(--pc-radius-md);
}

.user-card__note-title {
  margin: 0 0 var(--pc-space-1);
  font-size: .875rem;
  font-weight: 700;
  color: var(--pc-on-blue-soft);
}

.user-card__note-text {
  margin: 0;
  font-size: .875rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

/* --- Törlés utáni tájékoztató: mi lett az adataival ----------------------- */

.effects {
  margin: 0 0 var(--pc-space-4);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
}

.effects__title {
  margin: 0 0 var(--pc-space-2);
  font-size: .875rem;
  font-weight: 650;
}

.effects__list {
  margin: 0 0 var(--pc-space-3);
  padding-left: 1.15rem;
  font-size: .875rem;
  color: var(--pc-text-muted);
}

.effects__list li {
  margin-bottom: var(--pc-space-1);
  /* SZERVERTŐL jövő szöveg: hosszú sor sem okozhat vízszintes görgetést. */
  overflow-wrap: anywhere;
}

.effects__list li:last-child { margin-bottom: 0; }

/* --- Üres állapot --------------------------------------------------------- */

.empty-state {
  padding: var(--pc-space-6) var(--pc-space-4);
  text-align: center;
  background: var(--pc-surface-2);
  border: 1px dashed var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
}

.empty-state__title {
  margin: 0 0 var(--pc-space-2);
  font-weight: 650;
  overflow-wrap: anywhere;
}

.empty-state__text {
  margin: 0 0 var(--pc-space-3);
  font-size: .875rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

.empty-state__text:last-child { margin-bottom: 0; }

/* --- Lapozó --------------------------------------------------------------- */

.pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--pc-space-3);
  margin-top: var(--pc-space-4);
}

.pager__info {
  flex: 1 1 auto;
  text-align: center;
  font-size: .875rem;
  color: var(--pc-text-muted);
}

/* --- Csontváz (skeleton) betöltés közben ---------------------------------- */

.user-card--skeleton {
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-3);
}

.skeleton {
  display: block;
  border-radius: var(--pc-radius-sm);
  background: linear-gradient(
    90deg,
    var(--pc-skeleton-a) 25%,
    var(--pc-skeleton-b) 37%,
    var(--pc-skeleton-a) 63%
  );
  background-size: 400% 100%;
  animation: pc-skeleton 1.4s ease infinite;
}

.skeleton--line { height: 14px; }
.skeleton--block { height: 56px; }
.skeleton--w30 { width: 30%; }
.skeleton--w40 { width: 40%; }
.skeleton--w50 { width: 50%; }
.skeleton--w60 { width: 60%; }
.skeleton--w70 { width: 70%; }

@keyframes pc-skeleton {
  0% { background-position: 100% 50%; }
  100% { background-position: 0 50%; }
}

/* --------------------------------------------------------------------------
   Dokumentum-nézet (adatkezelési tájékoztató)
   A tartalmat a JS építi fel az `i18n/gdpr-hu.json`-ból, kizárólag
   `textContent`-tel — itt csak a tipográfia van.
   -------------------------------------------------------------------------- */

.doc {
  font-size: .9375rem;
  /* Nagyon hosszú szó / e-mail cím se okozzon vízszintes görgetést 360 px-en. */
  overflow-wrap: anywhere;
}

.doc__section + .doc__section { margin-top: var(--pc-space-6); }

.doc__heading {
  margin: 0 0 var(--pc-space-3);
  font-size: 1rem;
  font-weight: 700;
  color: var(--pc-text);
}

.doc__p { margin: 0 0 var(--pc-space-3); }
.doc__p:last-child { margin-bottom: 0; }

.doc__list-title {
  margin: 0 0 var(--pc-space-2);
  font-weight: 650;
}

.doc__list {
  margin: 0 0 var(--pc-space-3);
  padding-left: 20px;
}

.doc__list li { margin-bottom: var(--pc-space-2); }

/* Kiemelt bekezdés (EGT-n kívüli tárolás, „mit NE ossz meg”). */
.doc__note {
  margin: 0 0 var(--pc-space-3);
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-red-soft);
  border: 1px solid rgba(214, 41, 75, .40);
  border-radius: var(--pc-radius-md);
}

/* A táblázat 360 px-en görgethető sávba kerül, nem tolja szét a lapot. */
.doc__table-wrap {
  margin: 0 0 var(--pc-space-3);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
}

.doc__table {
  width: 100%;
  border-collapse: collapse;
  font-size: .875rem;
}

.doc__table th,
.doc__table td {
  padding: var(--pc-space-3) var(--pc-space-4);
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--pc-border);
}

.doc__table th {
  font-weight: 650;
  color: var(--pc-text-muted);
  background: var(--pc-table-head-tint);
}

.doc__table tr:last-child td { border-bottom: 0; }

/* Név–érték párok (adatkezelő adatai). */
.doc__pairs { margin: 0 0 var(--pc-space-3); }

.doc__pair {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pc-space-1) var(--pc-space-2);
}

.doc__pair dt {
  font-weight: 650;
  color: var(--pc-text-muted);
}

.doc__pair dd { margin: 0; }

/* --------------------------------------------------------------------------
   Telepítési sáv („Add a kezdőképernyőhöz”)
   --------------------------------------------------------------------------
   Alul rögzített, arculatba illő sáv. A `js/install.js` mutatja meg, kizárólag
   akkor, ha tényleg van mit telepíteni (elkapott `beforeinstallprompt`, vagy
   iOS Safari) — telepített (standalone) módban soha.

   ⚠️ NEM TAKARJA EL A FELÜLETET: amíg a sáv látszik, a `body` megkapja a
   `has-install-banner` osztályt, és az alkalmazás alsó belső margója pontosan a
   sáv MÉRT magasságával nő meg (`--pc-install-height`, a JS állítja be). Így a
   legalsó gomb is elérhető marad, 360 px-en is.
   -------------------------------------------------------------------------- */

.install {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 30;
  padding:
    var(--pc-space-3)
    calc(var(--pc-space-4) + env(safe-area-inset-right))
    calc(var(--pc-space-3) + env(safe-area-inset-bottom))
    calc(var(--pc-space-4) + env(safe-area-inset-left));
  background: var(--pc-surface);
  border-top: 1px solid var(--pc-border);
  box-shadow: var(--pc-shadow-lg);
  animation: pc-install-in var(--pc-motion) ease-out both;
}

/* Vékony arculati gradiens-csík a sáv tetején. */
.install::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: var(--pc-gradient);
}

.install__inner {
  max-width: 720px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pc-space-3);
}

.install__icon {
  flex: 0 0 auto;
  display: inline-flex;
  /* A jel a CÍM mellett álljon, ne a szövegblokk közepén — az iOS-útmutató
     három lépése miatt a blokk több soros is lehet. */
  align-self: flex-start;
  margin-top: 2px;
  color: var(--pc-accent-blue-text);
}

.install__text {
  flex: 1 1 220px;
  min-width: 0;
}

.install__title {
  margin: 0 0 2px;
  font-size: 1rem;
  font-weight: 700;
  color: var(--pc-text);
}

.install__desc {
  margin: 0;
  font-size: .875rem;
  color: var(--pc-text-muted);
}

.install__steps {
  margin: var(--pc-space-2) 0 0;
  padding-left: 1.25em;
  font-size: .875rem;
  color: var(--pc-text-muted);
}

.install__steps li { margin-bottom: var(--pc-space-1); }
.install__steps li:last-child { margin-bottom: 0; }

.install__actions {
  flex: 0 0 auto;
  margin-left: auto;
  display: flex;
  gap: var(--pc-space-2);
}

/* Keskeny kijelzőn a gombok külön sorba kerülnek, és kitöltik a szélességet —
   így az érintési felületük bőven a 44 px felett marad. */
@media (max-width: 560px) {
  .install__actions {
    width: 100%;
    margin-left: 0;
  }
  .install__actions .button { flex: 1 1 0; }
}

/* Az alkalmazás alja pontosan a sáv magasságával kap levegőt. */
body.has-install-banner .app {
  padding-bottom: calc(var(--pc-space-6) + var(--pc-install-height, 0px));
}

@keyframes pc-install-in {
  from { transform: translateY(100%); opacity: 0; }
  to   { transform: none; opacity: 1; }
}

/* ==========================================================================
   CHAT (8a: váz, 8b: küldés + törlés) — teljes magasságú képernyő:
   topbar + drawer + üzenetlista + beviteli sáv
   --------------------------------------------------------------------------
   MIÉRT TÖRI MEG A KÁRTYÁS ELRENDEZÉST? Mert a chat az EGYETLEN nézet, ahol a
   lap maga NEM görgethető: a topbar fixen áll, a görgetés kizárólag az
   üzenetlistában (és külön a csatornafában) történik. Enélkül a felfelé
   lapozás (a görgetési pozíció megőrzése) nem lenne kivitelezhető.

   A beviteli sáv (`.composer`, 8b etap) a `.chat__scroll` ALATT, a
   `.chat__main` másik gyerekeként ül — fix magasságú, a `safe-area-inset-
   bottom`-ot Ő veszi figyelembe (a lista alsó paddingje ettől függetlenül
   megmaradt, l. `.chat__scroll` — ártalmatlan extra hely a legutolsó buborék
   alatt, nem hiba).
   ========================================================================== */

/* A lap görgetése ilyenkor kikapcsol: a `.chat` pontosan a képernyő magas. */
body.is-chat { overflow: hidden; }

/* A közös `.app` befoglaló középre igazít és keretet ad — a chatnek egyik sem
   kell. Ez a szabály KÉSŐBB áll, mint a `.has-install-banner .app`, ezért azonos
   fajsúly mellett is ez érvényesül (a telepítési sáv helyét lentebb a `.chat`
   magassága kezeli). */
body.is-chat .app {
  padding: 0;
  align-items: stretch;
}

body.is-chat .screen--chat { margin-block: 0; }

.chat {
  display: flex;
  flex-direction: column;
  /* `dvh` a mobil böngészők eltűnő címsora miatt; a `vh` a tartalék. */
  height: 100vh;
  height: 100dvh;
  min-height: 0;
}

/* Ha a telepítési sáv látszik, a chat pontosan annyival alacsonyabb — így a
   sáv nem takarja el az utolsó üzenetet. */
body.has-install-banner .chat {
  height: calc(100vh - var(--pc-install-height, 0px));
  height: calc(100dvh - var(--pc-install-height, 0px));
}

/* --- Topbar --------------------------------------------------------------- */

.chat__topbar {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--pc-space-2);
  background: var(--pc-gradient);
  color: var(--pc-text-on-gradient);
  padding: var(--pc-space-2) calc(var(--pc-space-2) + env(safe-area-inset-right))
           var(--pc-space-2) calc(var(--pc-space-2) + env(safe-area-inset-left));
  padding-top: calc(var(--pc-space-2) + env(safe-area-inset-top));
  box-shadow: var(--pc-shadow);
  /* 31, NEM 30: a `.presence__panel` (jobb oldali, jelenlévők) ide ágyazva
     saját lokális stacking contextet örököl a topbartól (a flex-item
     `z-index` miatt), ezért a panel SOHA nem tud a topbar 30-as szintje fölé
     emelkedni önmagában. A `.install` sáv is 30-on áll, és később van a
     DOM-ban — azonos szinten a döntetlent a DOM-sorrend dönti el, a sáv javára.
     Rövid kijelzőn a lenyíló jelenlét-panel (max 360 px magas) ezért a sáv
     ALÁ kerülhetett, eltakarva az alját. A 31 kizárólag ezt a döntetlent
     billenti a topbar (és vele a panel) javára; a `.skip-link` (40) és a
     `.lightbox` (50) továbbra is fölötte marad. */
  z-index: 31;
}

.chat__iconbtn {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--pc-touch);
  height: var(--pc-touch);
  padding: 0;
  border: 0;
  border-radius: var(--pc-radius-md);
  background: rgba(255, 255, 255, .14);
  color: #fff;
  cursor: pointer;
  transition: background var(--pc-motion) ease;
}

.chat__iconbtn:hover { background: rgba(255, 255, 255, .24); }

.chat__iconbtn:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}

.chat__titles {
  flex: 1 1 auto;
  min-width: 0;
}

.chat__title {
  margin: 0;
  font-size: 1.0625rem;
  font-weight: 700;
  /* Hosszú, felhasználó által adott alcsoport-név sem törheti szét a sávot. */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.chat__subtitle {
  margin: 0;
  font-size: .75rem;
  color: rgba(255, 255, 255, .82);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- Törzs: drawer + üzenetlista ------------------------------------------ */

.chat__body {
  position: relative;
  flex: 1 1 auto;
  display: flex;
  min-height: 0;
}

.chat__backdrop {
  position: absolute;
  inset: 0;
  z-index: 15;
  background: rgba(5, 9, 18, .58);
  animation: pc-fade-in var(--pc-motion) ease;
}

@keyframes pc-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* --- Becsúszó drawer (csatornafa) ---------------------------------------- */

.drawer {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  z-index: 20;
  width: min(84vw, 320px);
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: var(--pc-surface);
  border-right: 1px solid var(--pc-border);
  box-shadow: var(--pc-shadow-lg);
  transform: translateX(-100%);
  /* Zárva a billentyűzet elől is el van rejtve (a `visibility: hidden` a benne
     lévő gombokat kiveszi a tabulátor-sorrendből) — `aria-hidden` nélkül, ami a
     fókuszálható tartalmon hibás lenne.

     ⚠️ A `visibility` NEM „átmenetel”, hanem KÉSLELTETVE VÁLT (`0s linear
     <késleltetés>`): záráskor pontosan a kicsúszás VÉGÉN lesz rejtett (addig
     látszik az animáció), nyitáskor viszont AZONNAL látható. Ha a `visibility`
     időtartamot kapna, a köztes állapot böngészőnként eltérne. */
  visibility: hidden;
  transition:
    transform var(--pc-motion) ease,
    visibility 0s linear var(--pc-motion);
}

.chat.is-drawer-open .drawer {
  transform: none;
  visibility: visible;
  transition:
    transform var(--pc-motion) ease,
    visibility 0s linear 0s;
}

.drawer__head {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--pc-space-3);
  padding: var(--pc-space-4);
  background: var(--pc-gradient);
  color: var(--pc-text-on-gradient);
}

.drawer__head-text { min-width: 0; }

.drawer__name {
  margin: 0;
  font-weight: 700;
  overflow-wrap: anywhere;
}

.drawer__head .badge { margin-top: 4px; }

.avatar--sm {
  width: 40px;
  height: 40px;
  font-size: .9375rem;
}

.drawer__scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  /* A drawer görgetése ne „ragadjon át” a mögötte lévő listára. */
  overscroll-behavior: contain;
  /* A képernyő aljának biztonságos zónáját (`safe-area-inset-bottom`) 8a/2 óta
     a menü rögzített alsó sávja (`.drawer__foot`) tartja — itt már nem kell. */
  padding: var(--pc-space-3) var(--pc-space-2);
}

.tree-skeleton {
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-3);
  padding: var(--pc-space-3);
}

/* --- Rendőr/polgárőr tab-widget (kanban 24d2b9b7) --------------------------
   Minta: `.emoji-picker__tabs`/`.emoji-picker__tab` (lent) — ugyanaz a
   hide/show mechanika, `is-active` osztály + `hidden` a nem-aktív panelen.
   Az aktív fül színe a meglévő `.badge--police`/`.badge--civil` tokenjeit
   követi (var(--pc-blue) / var(--pc-red)), hogy a két kategória vizuálisan
   ugyanaz maradjon mindenhol a felületen. */

.tree-tabs {
  display: flex;
  gap: var(--pc-space-2);
  padding: 0 var(--pc-space-3) var(--pc-space-3);
}

.tree-tabs[hidden] { display: none; }

.tree-tabs__tab {
  flex: 1 1 0;
  min-height: var(--pc-touch);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--pc-space-2) var(--pc-space-3);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-pill);
  background: transparent;
  color: var(--pc-text-muted);
  font: inherit;
  font-size: .8125rem;
  font-weight: 700;
  cursor: pointer;
  transition: background var(--pc-motion) ease, color var(--pc-motion) ease,
    border-color var(--pc-motion) ease;
}

.tree-tabs__tab:hover { background: var(--pc-wash-weak); }

.tree-tabs__tab:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.tree-tabs__tab.is-active { color: #fff; border-color: transparent; }
.tree-tabs__tab[data-category="police"].is-active { background: var(--pc-blue); }
.tree-tabs__tab[data-category="civil_guard"].is-active { background: var(--pc-red); }

/* --- Csatornafa ----------------------------------------------------------- */

.tree__group + .tree__group { margin-top: var(--pc-space-5); }

.tree__heading {
  margin: 0 0 var(--pc-space-2);
  padding: 0 var(--pc-space-3);
  font-size: .6875rem;
  font-weight: 700;
  letter-spacing: .7px;
  text-transform: uppercase;
  color: var(--pc-text-muted);
}

.tree__list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.tree__row {
  display: flex;
  align-items: stretch;
  gap: 2px;
}

.tree__link {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
  min-height: var(--pc-touch);
  display: flex;
  align-items: center;
  gap: var(--pc-space-2);
  padding: var(--pc-space-2) var(--pc-space-3);
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text);
  font: inherit;
  font-size: .9375rem;
  text-align: left;
  cursor: pointer;
  transition: background var(--pc-motion) ease;
}

.tree__link-name {
  flex: 1 1 auto;
  min-width: 0;
  overflow-wrap: anywhere;
}

/* Olvasatlan üzenetszámláló a csatorna gombján. `hidden`-nel tűnik el
   0 olvasatlannál, nem a szélességgel/áttetszőséggel — ne foglaljon helyet. */
.unread-badge {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-red);
  color: #fff;
  font-size: .6875rem;
  font-weight: 700;
  line-height: 1;
}

.unread-badge[hidden] { display: none; }

.tree__link:hover { background: var(--pc-wash-weak); }

.tree__link:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

/* Az AKTÍV csatorna: halvány gradiens háttér + gradienses bal sáv
   (PROMPT.md 9. fejezet). */
.tree__link.is-active {
  background: var(--pc-blue-soft);
  font-weight: 650;
}

.tree__link.is-active::before {
  content: '';
  position: absolute;
  left: 0;
  top: 6px;
  bottom: 6px;
  width: 4px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-gradient);
}

/* A kerület-lista ki-be nyitó gombja — külön kattintható felület, hogy a
   csatorna megnyitása és a lenyitás ne akadjon egymásba. */
.tree__toggle {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--pc-touch);
  min-height: var(--pc-touch);
  padding: 0;
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text-muted);
  cursor: pointer;
}

.tree__toggle:hover {
  background: var(--pc-wash-weak);
  color: var(--pc-text);
}

.tree__toggle:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.tree__toggle svg { transition: transform var(--pc-motion) ease; }
.tree__toggle[aria-expanded="true"] svg { transform: rotate(90deg); }

.tree__sub {
  list-style: none;
  margin: 2px 0 2px var(--pc-space-5);
  padding: 0 0 0 var(--pc-space-2);
  border-left: 1px solid var(--pc-border);
}

.empty-state--drawer {
  padding: var(--pc-space-4) var(--pc-space-3);
  text-align: left;
}

/* --- A menü alja: belépő pont a fiók képernyőre (8a/2) -------------------- */

.drawer__foot {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-1);
  padding: var(--pc-space-2);
  padding-bottom: calc(var(--pc-space-2) + env(safe-area-inset-bottom));
  border-top: 1px solid var(--pc-border);
  background: var(--pc-surface);
}

.drawer__account {
  width: 100%;
  min-height: var(--pc-touch);
  display: flex;
  align-items: center;
  gap: var(--pc-space-3);
  padding: var(--pc-space-2) var(--pc-space-3);
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text-muted);
  font: inherit;
  font-size: .9375rem;
  text-align: left;
  cursor: pointer;
  transition: background var(--pc-motion) ease, color var(--pc-motion) ease;
}

.drawer__account svg { flex: 0 0 auto; }

.drawer__account:hover {
  background: var(--pc-wash-weak);
  color: var(--pc-text);
}

.drawer__account:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
  color: var(--pc-text);
}

/* A „Főoldal” a scroll-terület TETEJÉN, elválasztóval a csatornafától
   (PROMPT.md 57. sor: a menü fa legelső bejegyzése). */
.drawer__account--home {
  margin-bottom: var(--pc-space-3);
  padding-bottom: calc(var(--pc-space-2) + var(--pc-space-3));
  border-bottom: 1px solid var(--pc-border);
}

/* Az aktív („most ez van megnyitva”) állapot ugyanazt a jelölést kapja, mint
   egy kiválasztott csatorna (`.tree__link.is-active`) — halvány kék háttér. */
.drawer__account.is-active {
  background: var(--pc-blue-soft);
  color: var(--pc-text);
  font-weight: 650;
}

/* --- Üzenetlista ---------------------------------------------------------- */

.chat__main {
  position: relative; /* a keresőpanel (8d etap) ehhez van abszolút pozicionálva */
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.chat__scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  /* ⚠️ A BÖNGÉSZŐ SAJÁT GÖRGETÉS-HORGONYZÁSA KIKAPCSOLVA.
     A régebbi oldal a lista ELEJÉRE kerül; a Chrome ilyenkor magától korrigálja
     a görgetést, a `js/app.js` viszont KISZÁMOLJA ugyanezt (a magasság-
     különbségből). A kettő összeadódna, és a lista a betöltött oldal fölé
     ugrana — MÉRT hiba volt, nem elméleti. A saját számolás marad, mert a
     horgonyzást nem minden böngésző (pl. a Safari) támogatja. */
  overflow-anchor: none;
  padding: var(--pc-space-4) calc(var(--pc-space-4) + env(safe-area-inset-right))
           calc(var(--pc-space-4) + env(safe-area-inset-bottom))
           calc(var(--pc-space-4) + env(safe-area-inset-left));
}

.chat__scroll:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

/* A lista TETEJÉN álló állapotsor: „régebbiek betöltése…” / „A beszélgetés
   eleje”. */
.chat__older {
  margin: 0 0 var(--pc-space-4);
  text-align: center;
  font-size: .8125rem;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

.chat__state { padding: var(--pc-space-5) 0; }

.msg-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-3);
}

.msg {
  display: flex;
  align-items: flex-end;
  gap: var(--pc-space-2);
  min-width: 0;
}

.msg--own { justify-content: flex-end; }
.msg--deleted { justify-content: center; }

.msg__avatar {
  flex: 0 0 auto;
  align-self: flex-end;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  font-size: .75rem;
  font-weight: 700;
  color: var(--pc-text-muted);
}

.msg__col {
  min-width: 0;
  max-width: min(78%, 560px);
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.msg--own .msg__col { align-items: flex-end; }
.msg--deleted .msg__col { max-width: min(92%, 560px); align-items: center; }

.msg__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  min-width: 0;
  padding: 0 var(--pc-space-1);
  font-size: .75rem;
  color: var(--pc-text-muted);
}

.msg__author {
  font-weight: 650;
  color: var(--pc-text);
  overflow-wrap: anywhere;
}

/* A badge a chatben kisebb, mint a kártyafejlécekben. */
.msg__meta .badge {
  margin-top: 0;
  padding: 1px 8px;
  font-size: .625rem;
}

.msg__bubble {
  padding: var(--pc-space-2) var(--pc-space-3);
  border-radius: var(--pc-radius-md);
  background: var(--pc-surface);
  border: 1px solid var(--pc-border);
  box-shadow: var(--pc-shadow);
  min-width: 0;
}

.msg--other .msg__bubble { border-top-left-radius: 4px; }

/* SAJÁT üzenet: halvány kék→lila gradiens, fehér szöveg (PROMPT.md 9. fejezet). */
.msg__bubble--own {
  background: linear-gradient(135deg, rgba(30, 60, 140, .95) 0%, rgba(72, 74, 190, .95) 100%);
  border-color: rgba(255, 255, 255, .18);
  border-top-right-radius: 4px;
  color: #fff;
}

/* Törölt üzenet: semleges, szaggatott helyőrző — se szerző, se tartalom. */
.msg__bubble--deleted {
  background: transparent;
  border-style: dashed;
  box-shadow: none;
}

.msg__body {
  margin: 0;
  /* A sortöréseket megtartjuk (a szerver többsoros törzset is elfogad), a
     nagyon hosszú szó viszont nem okozhat vízszintes görgetést 360 px-en. */
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* Üzenetben felismert URL (l. `appendLinkifiedText` app.js-ben) — ugyanaz a
   kék, mint a `.link-button`-öké, hogy egységes maradjon a felület egyetlen
   „ez kattintható" jelölése. Saját (gradiens hátterű) buborékban külön
   szín kell a kontraszthoz, ugyanúgy, ahogy az idézet-előnézet is eltér ott. */
.msg__link {
  color: var(--pc-accent-blue-text);
  text-decoration: underline;
  text-underline-offset: 2px;
  overflow-wrap: anywhere;
}

.msg__link:hover { color: var(--pc-accent-blue-text-hover); }

.msg__link:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.msg__bubble--own .msg__link { color: #fff; text-decoration-color: rgba(255, 255, 255, .55); }
.msg__bubble--own .msg__link:hover { text-decoration-color: #fff; }

.msg__body--deleted {
  font-size: .875rem;
  font-style: italic;
  color: var(--pc-text-muted);
}

/* --- Csatolmány a buborékban (4. fázis) ------------------------------------ */

.msg__attachment { margin-top: var(--pc-space-2); }

.msg__bubble .msg__body + .msg__attachment { margin-top: var(--pc-space-2); }

/* Kép csatolmány: kattintható bélyegkép, ami a lightboxot nyitja. Rögzített
   minimum-méret, hogy a betöltés (hálózati kérés, l. `fetchProtectedFile`)
   alatt ne ugorjon a lista — l. „Domain-specifikus emlékeztetők”. */
.msg__attachment-image {
  display: block;
  width: 100%;
  max-width: 260px;
  min-width: 160px;
  min-height: 120px;
  padding: 0;
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: var(--pc-surface-2);
  cursor: pointer;
  overflow: hidden;
}

.msg__attachment-image:disabled { cursor: default; }

.msg__attachment-image:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.msg__attachment-thumb {
  display: block;
  width: 100%;
  max-height: 320px;
  object-fit: contain;
  background: var(--pc-surface-2);
}

/* Nem-kép csatolmány: ikon + név/méret + letöltés gomb, ugyanaz a felépítés,
   mint a composer előnézetében. */
.msg__attachment-file {
  display: flex;
  align-items: center;
  gap: var(--pc-space-2);
  padding: var(--pc-space-2) var(--pc-space-3);
  border-radius: var(--pc-radius-md);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
  max-width: 260px;
}

.msg__bubble--own .msg__attachment-file { background: rgba(255, 255, 255, .12); border-color: rgba(255, 255, 255, .18); }

.msg__attachment-file-icon {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: var(--pc-radius-sm);
  background: var(--pc-surface);
  color: var(--pc-text-muted);
  font-size: .6875rem;
  font-weight: 700;
  text-transform: uppercase;
}

.msg__bubble--own .msg__attachment-file-icon { background: rgba(255, 255, 255, .16); color: #fff; }

.msg__attachment-file-info {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.msg__attachment-file-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: .8125rem;
  font-weight: 650;
}

.msg__attachment-file-size {
  font-size: .75rem;
  color: var(--pc-text-muted);
}

.msg__bubble--own .msg__attachment-file-size { color: rgba(255, 255, 255, .78); }

.msg__attachment-download {
  flex: 0 0 auto;
  min-height: var(--pc-touch);
  padding: 0 var(--pc-space-2);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: inherit;
  font-size: .75rem;
  font-weight: 650;
  cursor: pointer;
}

.msg__attachment-download:hover { background: var(--pc-wash-strong); }

/* A SAJÁT (gradiens hátterű, témától független) buborékban a letöltés-gomb
   hover-je is a fehér-áttetsző változatot kapja — a `--pc-wash-strong` ott
   világos témában sötét tintát adna, ami a gradiensen nem olvasható. */
.msg__bubble--own .msg__attachment-download:hover { background: rgba(255, 255, 255, .12); }

.msg__attachment-download:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.msg__attachment-download:disabled { opacity: .6; cursor: default; }

.msg__time {
  font-size: .6875rem;
  color: var(--pc-text-muted);
  white-space: nowrap;
}

/* --- Idézett (megválaszolt) üzenet előnézete ------------------------------ */

.msg__quote {
  display: block;
  margin: 0 0 var(--pc-space-2);
  padding: 4px var(--pc-space-2);
  border-left: 3px solid var(--pc-blue);
  border-radius: 4px;
  background: var(--pc-wash-weak);
  font-size: .8125rem;
}

.msg__bubble--own .msg__quote {
  border-left-color: rgba(255, 255, 255, .75);
  background: rgba(255, 255, 255, .14);
}

.msg__quote-author {
  display: block;
  font-weight: 650;
  overflow-wrap: anywhere;
}

.msg__quote-body {
  display: block;
  margin: 0;
  color: var(--pc-text-muted);
  overflow-wrap: anywhere;
}

.msg__bubble--own .msg__quote-body { color: rgba(255, 255, 255, .86); }

/* --- Csontváz az üzenetlistához ------------------------------------------ */

.msg-skeleton {
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-4);
}

.msg-skeleton__row {
  display: flex;
  align-items: flex-end;
  gap: var(--pc-space-2);
}

.msg-skeleton__row--own { justify-content: flex-end; }

.skeleton--avatar {
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: var(--pc-radius-pill);
}

.skeleton--bubble {
  height: 46px;
  border-radius: var(--pc-radius-md);
}

/* --- Főoldal / Legutóbbi üzenetek (PROMPT.md 57. sor, kanban 77d81bac) ----
   `#chat-home-list` — a `.msg-list` testvére, DE nem `.msg__bubble`
   buborékokból épül (l. index.html fejléce): egy sima, teljes szélességű
   kártya-lista, csatorna-névvel MINDEN soron (mert több csatornából jön). */

.home-item__button {
  display: block;
  width: 100%;
  text-align: left;
  padding: var(--pc-space-3) var(--pc-space-4);
  background: var(--pc-surface);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
  box-shadow: var(--pc-shadow);
  color: inherit;
  font: inherit;
  cursor: pointer;
  transition: background var(--pc-motion) ease, border-color var(--pc-motion) ease;
}

.home-item__button:hover { background: var(--pc-wash-weak); }

.home-item__button:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.home-item__top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--pc-space-2);
  margin-bottom: 2px;
}

.home-item__channel {
  min-width: 0;
  font-size: .75rem;
  font-weight: 700;
  color: var(--pc-accent-blue-text);
  text-transform: uppercase;
  letter-spacing: .3px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.home-item__time {
  flex: 0 0 auto;
  font-size: .6875rem;
  color: var(--pc-text-muted);
}

.home-item__author {
  margin-bottom: 2px;
  font-size: .8125rem;
  font-weight: 650;
  overflow-wrap: anywhere;
}

.home-item__body {
  margin: 0;
  font-size: .875rem;
  color: var(--pc-text-muted);
  overflow: hidden;
  overflow-wrap: anywhere;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

/* --- Üzenet alatti műveletek: válasz, törlés (8b etap) -------------------- */

/* 013ff24f: a Válasz/Törlés sáv alapból összecsukva — csak hosszú nyomásra
   (érintőn/egérrel) vagy jobbklikkre tárul fel (l. `attachActionsReveal` az
   app.js-ben), az időbélyeg (`msg__meta`) ettől függetlenül mindig látszik.
   NEM `display: none`: a gombok így billentyűzettel (Tab) is elérhetők
   maradnak, a `:focus-within` fókuszra ugyanúgy felfedi a sávot. */
.msg__footer {
  margin-top: 2px;
  padding: 0 var(--pc-space-1);
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition: opacity var(--pc-motion) ease;
}

.msg--actions-visible .msg__footer,
.msg__footer:focus-within {
  max-height: none;
  overflow: visible;
  opacity: 1;
}

.msg__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--pc-space-2);
  min-height: var(--pc-touch);
}

/* Érintésbarát méret (min. 44 px, a projekt saját kritériuma — vogon mérése:
   26 px volt). A vizuális jelenlét (pill-forma, kis betű) marad kicsi, csak a
   kattintható/érinthető TERÜLET nő a `min-height` + a középre igazítás miatt. */
.msg__action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--pc-touch);
  padding: 2px 14px;
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-pill);
  background: transparent;
  color: var(--pc-text-muted);
  font: inherit;
  font-size: .75rem;
  font-weight: 650;
  cursor: pointer;
  transition: background var(--pc-motion) ease, color var(--pc-motion) ease,
              border-color var(--pc-motion) ease;
}

.msg__action:hover { background: var(--pc-wash-weak); color: var(--pc-text); }

.msg__action:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.msg__action--danger { color: var(--pc-accent-red-text); border-color: rgba(214, 41, 75, .35); }
.msg__action--danger:hover { background: var(--pc-red-soft); color: var(--pc-red); }

.msg__hint {
  font-size: .75rem;
  color: var(--pc-text-muted);
}

/* A törlés szerver oldali hibája (pl. lejárt ablak, „nem a sajátod”). */
.msg__error {
  margin: var(--pc-space-1) 0 0;
  font-size: .75rem;
  font-weight: 600;
  color: var(--pc-accent-red-text);
  overflow-wrap: anywhere;
}

/* --- Offline küldés-sorbaállítás: még el nem küldött üzenet buborékja ----- */
/* A buborék maga ugyanúgy néz ki, mint egy saját üzeneté, csak halványítva —
   nem szín viszi át az „még nem ment el” jelzést (l. a `msg__pending-status`
   szöveget), a halványítás csak megerősíti. */
.msg--pending .msg__bubble--own { opacity: .72; }

.msg__pending-status {
  margin: 2px var(--pc-space-1) 0 0;
  font-size: .6875rem;
  color: var(--pc-text-muted);
  text-align: right;
}

.msg__pending-status--error {
  color: var(--pc-accent-red-text);
  font-weight: 600;
}

/* --- Beviteli sáv: üzenetírás + küldés (8b etap) -------------------------- */

.composer {
  flex: 0 0 auto;
  border-top: 1px solid var(--pc-border);
  background: var(--pc-surface);
  padding: var(--pc-space-3) calc(var(--pc-space-3) + env(safe-area-inset-right))
           calc(var(--pc-space-3) + env(safe-area-inset-bottom))
           calc(var(--pc-space-3) + env(safe-area-inset-left));
}

/* Nem írható csatorna esetén ez látszik a mező helyén. */
.composer__notice {
  margin: 0;
  padding: var(--pc-space-2) var(--pc-space-3);
  font-size: .8125rem;
  color: var(--pc-text-muted);
  text-align: center;
}

.composer__reply {
  display: flex;
  align-items: flex-start;
  gap: var(--pc-space-2);
  margin-bottom: var(--pc-space-2);
  padding: var(--pc-space-2) var(--pc-space-3);
  border-left: 3px solid var(--pc-blue);
  border-radius: 4px;
  background: var(--pc-surface-2);
}

.composer__reply-text {
  flex: 1 1 auto;
  min-width: 0;
  font-size: .8125rem;
}

.composer__reply-label {
  display: block;
  color: var(--pc-text-muted);
  font-size: .6875rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .4px;
}

.composer__reply-author {
  display: block;
  font-weight: 650;
  overflow-wrap: anywhere;
}

.composer__reply-body {
  display: -webkit-box;
  margin: 0;
  color: var(--pc-text-muted);
  overflow: hidden;
  overflow-wrap: anywhere;
  /* Legfeljebb két sor — a hosszú idézet ne nyomja le a beviteli mezőt. */
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

.composer__reply-cancel {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text-muted);
  cursor: pointer;
}

.composer__reply-cancel:hover { background: var(--pc-wash-weak); color: var(--pc-text); }

.composer__reply-cancel:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

/* --- Csatolmány-előnézet (4. fázis) ---------------------------------------- */

.composer__attachment {
  display: flex;
  align-items: center;
  gap: var(--pc-space-2);
  margin-bottom: var(--pc-space-2);
  padding: var(--pc-space-2) var(--pc-space-3);
  border-radius: var(--pc-radius-md);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border);
}

.composer__attachment-thumb {
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  border-radius: var(--pc-radius-sm);
  object-fit: cover;
  background: var(--pc-surface);
}

.composer__attachment-icon {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--pc-radius-sm);
  background: var(--pc-surface);
  color: var(--pc-text-muted);
  font-size: .6875rem;
  font-weight: 700;
  text-transform: uppercase;
}

.composer__attachment-info {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.composer__attachment-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: .8125rem;
  font-weight: 650;
}

.composer__attachment-size {
  font-size: .75rem;
  color: var(--pc-text-muted);
}

.composer__attachment-progress {
  flex: 0 0 auto;
  width: 60px;
  height: 6px;
  border-radius: var(--pc-radius-pill);
  background: var(--pc-surface);
  overflow: hidden;
}

.composer__attachment-progress-bar {
  height: 100%;
  width: 0%;
  background: var(--pc-gradient);
  transition: width var(--pc-motion) ease;
}

.composer__attachment-remove {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text-muted);
  cursor: pointer;
}

.composer__attachment-remove:hover { background: var(--pc-wash-weak); color: var(--pc-text); }

.composer__attachment-remove:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.composer__row {
  display: flex;
  align-items: flex-end;
  gap: var(--pc-space-2);
}

.composer__attach {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--pc-touch);
  height: var(--pc-touch);
  padding: 0;
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
  background: var(--pc-surface-2);
  color: var(--pc-text-muted);
  cursor: pointer;
  transition: background var(--pc-motion) ease, color var(--pc-motion) ease;
}

.composer__attach:hover:not(:disabled) { background: var(--pc-wash-weak); color: var(--pc-text); }
.composer__attach:disabled { opacity: .5; cursor: not-allowed; }

.composer__attach:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

/* --- Emoji picker (PROMPT.md 81. sor) -------------------------------------
   A `.composer__attach` gomb-stílust osztja az agráf gombbal, csak a panel
   (`.emoji-picker__panel`) új: a beviteli sáv ALJÁN lévő gomb FÖLÉ nyílik. */

.emoji-picker {
  position: relative;
  flex: 0 0 auto;
}

.emoji-picker__panel {
  position: absolute;
  bottom: calc(100% + var(--pc-space-2));
  left: 0;
  width: 300px;
  max-width: calc(100vw - 2 * var(--pc-space-4));
  max-height: 320px;
  display: flex;
  flex-direction: column;
  background: var(--pc-surface);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
  box-shadow: var(--pc-shadow-lg);
  overflow: hidden;
  z-index: 20;
}

.emoji-picker__tabs {
  flex: 0 0 auto;
  display: flex;
  gap: var(--pc-space-1);
  padding: var(--pc-space-2);
  border-bottom: 1px solid var(--pc-border);
  overflow-x: auto;
}

.emoji-picker__tab {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  font-size: 1.125rem;
  border: 1px solid transparent;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  color: var(--pc-text);
  cursor: pointer;
}

.emoji-picker__tab:hover { background: var(--pc-wash-weak); }

.emoji-picker__tab.is-active {
  background: var(--pc-blue-soft);
  border-color: rgba(47, 91, 208, .45);
}

.emoji-picker__tab:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.emoji-picker__grid {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: var(--pc-space-2);
}

/* Kategóriánként EGY csoport — a `hidden` váltja, melyik látszik (l. app.js
   `setEmojiActiveCategory`), a `.emoji-picker__grid` csak a görgetést adja. */
.emoji-picker__group {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}

.emoji-picker__button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  aspect-ratio: 1;
  font-size: 1.375rem;
  line-height: 1;
  border: 0;
  border-radius: var(--pc-radius-sm);
  background: transparent;
  cursor: pointer;
}

.emoji-picker__button:hover { background: var(--pc-wash-strong); }

.emoji-picker__button:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: -2px;
}

.composer__input {
  flex: 1 1 auto;
  min-width: 0;
  min-height: var(--pc-touch);
  max-height: 160px;
  padding: 10px 14px;
  font: inherit;
  font-size: 1rem; /* iOS-en 16 px alatt belenagyítana a mezőbe */
  line-height: 1.4;
  color: var(--pc-text);
  background: var(--pc-surface-2);
  border: 1px solid var(--pc-border-strong);
  border-radius: var(--pc-radius-md);
  resize: none;
  overflow-y: auto;
  transition: border-color var(--pc-motion) ease, box-shadow var(--pc-motion) ease;
}

.composer__input::placeholder { color: #6B7690; }

.composer__input:focus {
  outline: none;
  border-color: var(--pc-blue);
  box-shadow: 0 0 0 3px rgba(47, 91, 208, .30);
}

.composer__input:disabled { opacity: .6; cursor: not-allowed; }

.composer__send {
  flex: 0 0 auto;
  min-height: var(--pc-touch);
  padding: 0 var(--pc-space-4);
  border: 0;
  border-radius: var(--pc-radius-md);
  background: var(--pc-gradient);
  color: #fff;
  font: inherit;
  font-size: .9375rem;
  font-weight: 650;
  cursor: pointer;
  transition: filter var(--pc-motion) ease, opacity var(--pc-motion) ease;
}

.composer__send:hover:not(:disabled) { filter: brightness(1.08); }

.composer__send:disabled { opacity: .45; cursor: not-allowed; }

.composer__send:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

.composer__count {
  margin: var(--pc-space-1) 0 0;
  text-align: right;
  font-size: .6875rem;
  color: var(--pc-text-muted);
}

.composer__count.is-warning { color: var(--pc-amber); }
.composer__count.is-over { color: var(--pc-red); }

/* --- Jelenlévők (8d etap) -------------------------------------------------- */

.presence { position: relative; }

/* A `.chat__iconbtn` alap 44×44 négyzet — a jelenlét-számnak hely kell mellé,
   ezért itt szélességben auto-ra oldjuk, kis vízszintes párnázással. */
.presence__toggle {
  position: relative;
  width: auto;
  min-width: var(--pc-touch);
  padding: 0 10px;
  gap: 4px;
}

.presence__count {
  font-size: .6875rem;
  font-weight: 700;
  line-height: 1;
}

.presence__panel {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 25;
  width: min(72vw, 260px);
  max-height: min(60vh, 360px);
  overflow-y: auto;
  padding: var(--pc-space-3);
  background: var(--pc-surface);
  border: 1px solid var(--pc-border);
  border-radius: var(--pc-radius-md);
  box-shadow: var(--pc-shadow-lg);
}

.presence__heading {
  margin: 0 0 var(--pc-space-2);
  font-size: .6875rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .4px;
  color: var(--pc-text-muted);
}

.presence__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--pc-space-2);
  font-size: .875rem;
  overflow-wrap: anywhere;
}

/* --- Nincs élő WS-kapcsolat: semleges jelzés (8c javítás) ------------------ */

.chat__realtime-notice {
  flex: 0 0 auto;
  margin: 0;
  padding: 4px calc(var(--pc-space-3) + env(safe-area-inset-right))
           0 calc(var(--pc-space-3) + env(safe-area-inset-left));
  font-size: .75rem;
  color: var(--pc-amber);
  background: var(--pc-surface);
  overflow-wrap: anywhere;
}

/* --- „Gépel…” jelzés (8d etap) --------------------------------------------- */

.chat__typing {
  flex: 0 0 auto;
  margin: 0;
  padding: 4px calc(var(--pc-space-3) + env(safe-area-inset-right))
           0 calc(var(--pc-space-3) + env(safe-area-inset-left));
  font-size: .75rem;
  font-style: italic;
  color: var(--pc-text-muted);
  background: var(--pc-surface);
  overflow-wrap: anywhere;
}

/* --- „Ugrás a beviteli mezőhöz” — vizuálisan rejtett, fókuszra megjelenik -- */

.skip-link {
  position: absolute;
  top: -999px;
  left: var(--pc-space-3);
  z-index: 40;
  display: inline-flex;
  align-items: center;
  min-height: var(--pc-touch);
  padding: var(--pc-space-2) var(--pc-space-4);
  border: 1px solid var(--pc-border-strong);
  border-radius: 0 0 var(--pc-radius-md) var(--pc-radius-md);
  background: var(--pc-surface);
  color: var(--pc-text);
  font: inherit;
  font-size: .875rem;
  font-weight: 650;
  cursor: pointer;
}

.skip-link:focus {
  top: 0;
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

/* --- Keresés a csatornában (8d etap) --------------------------------------- */

.chat__search {
  position: absolute;
  inset: 0;
  z-index: 12;
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: var(--pc-bg);
}

.chat__search-form {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--pc-space-2);
  padding: var(--pc-space-3) calc(var(--pc-space-3) + env(safe-area-inset-right))
           var(--pc-space-3) calc(var(--pc-space-3) + env(safe-area-inset-left));
  padding-top: calc(var(--pc-space-3) + env(safe-area-inset-top));
  border-bottom: 1px solid var(--pc-border);
  background: var(--pc-surface);
}

.chat__search-input {
  flex: 1 1 auto;
  min-width: 0;
  min-height: var(--pc-touch);
}

.chat__search-results {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: var(--pc-space-4) calc(var(--pc-space-4) + env(safe-area-inset-right))
           calc(var(--pc-space-4) + env(safe-area-inset-bottom))
           calc(var(--pc-space-4) + env(safe-area-inset-left));
}

/* A találati lista buborékjai a rendes üzenetlistával MEGEGYEZŐ `.msg-list`
   osztályt kapják (`createMessageItem()` építi újra) — nincs külön stílus. */

.chat__search-more {
  margin: var(--pc-space-4) 0 0;
  text-align: center;
  font-size: .8125rem;
  color: var(--pc-text-muted);
}

/* --- Tablet / asztali: a drawer állandó oldalsáv -------------------------- */

@media (min-width: 900px) {
  .drawer {
    position: static;
    flex: 0 0 300px;
    width: 300px;
    transform: none;
    visibility: visible;
    box-shadow: none;
    transition: none;
  }

  /* Nyitva ragadt drawer nem takarhatja el a listát, és nincs mit elsötétíteni. */
  .chat__backdrop { display: none !important; }

  /* A hamburger fölöslegessé válik: a fa végig látszik. */
  #chat-menu { display: none; }
}

/* --------------------------------------------------------------------------
   Nagyon szűk kijelző (≤ 360 px)
   -------------------------------------------------------------------------- */

@media (max-width: 380px) {
  .card__head { padding: var(--pc-space-4); }
  .card__body { padding: var(--pc-space-4); }
  .card__foot { padding: var(--pc-space-3) var(--pc-space-4); }
  /* A két szerepkör-csempe 360 px-en is egymás mellett fér el. */
  .role-grid { gap: var(--pc-space-2); }
  .role { padding: var(--pc-space-3) var(--pc-space-2); }
  .data-row { justify-content: flex-start; }
  .data-row dd { text-align: left; }
}

/* --------------------------------------------------------------------------
   Lightbox — kép csatolmány nagyított nézete (4. fázis)
   -------------------------------------------------------------------------- */

.lightbox {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--pc-space-5);
  background: rgba(5, 9, 18, .9);
  animation: pc-fade-in var(--pc-motion) ease;
}

.lightbox__image {
  display: block;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  border-radius: var(--pc-radius-md);
}

.lightbox__close {
  position: absolute;
  top: var(--pc-space-4);
  right: var(--pc-space-4);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--pc-touch);
  height: var(--pc-touch);
  border: 1px solid rgba(255, 255, 255, .28);
  border-radius: var(--pc-radius-pill);
  background: rgba(5, 9, 18, .6);
  color: #fff;
  cursor: pointer;
}

.lightbox__close:hover { background: rgba(5, 9, 18, .85); }

.lightbox__close:focus-visible {
  outline: 2px solid var(--pc-blue);
  outline-offset: 2px;
}

/* --------------------------------------------------------------------------
   Mozgáscsökkentés
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}
