/* ============================================================================
   RENEXUS — komponens-réteg (components.css)
   ============================================================================
   Forrás: docs/cd-refresh-input/"Renexus Komponenskeszlet.dc.html" <pre> blokkjai.
   A fájl körüli inline-stílusos előnézet a Claude Design saját bemutatója volt —
   abból SEMMI nem került át ide, csak a végleges CSS.

   ⚠️ FÜGGŐSÉG — ez a fájl MA MÉG NEM KÖTHETŐ BE.
   Minden szabály tokenre hivatkozik, és a hivatkozott tokenkészlet a
   docs/cd-refresh-input/01_tokens_javasolt.css-ben él, NEM a static/renexus_tokens.css-ben.
   Az éles token-fájl még a RÉGI értékeket tartalmazza (pl. --border: #e0ddd5 az
   új #e8e5e0 helyett), és nincs benne egyetlen --z-* token sem.
   A bekötés a token-réteg szétbontása UTÁN lehetséges — az külön feladat.
   Addig ez a fájl a kanonikus hivatkozás, nem futó kód.

   ⚠️ VÁRT AUDIT-JELZÉS, ami NEM regresszió:
   a `python scripts/design-audit/run.py 1` ettől a fájltól kezdve 18 törött
   token-hivatkozást jelent 7 helyett. A 11 új mind innen jön, és mind olyan token,
   ami a 01_tokens_javasolt.css-ben MÁR létezik, csak a static/-ban még nem:
     --accent-text · --border-strong · --radius-xl · --text-body · --text-lg
     --shadow-underline · --shadow-sm · --shadow-md · --shadow-lg
     --z-modal · --z-toast
   Ez a szám a token-réteg bevezetésekor MAGÁTÓL visszaáll 7-re. Ha nem áll vissza,
   az viszont valódi hiba.

   SORREND: gomb · badge · űrlapelemek · tábla · kártya · kiemelt sáv · modal ·
            toast · fájlfeltöltő · üres állapot · lapozó · előnézet-keret

   A réteg-skála (--z-*) és az eleváció (--shadow-*) NEM ide került: azok tokenek,
   és a 01_tokens_javasolt.css-be kerültek be. Az eleváció DÖNTÉSI FÁJA viszont
   fontos olvasmány a komponensekhez — l. ugyanott, a --shadow-* blokk kommentjében.

   A "KIVEZETVE" listák (gomb, badge, callout, eleváció) a régi osztályok
   leképezését adják. A teljes, egyesített leképezési tábla:
   docs/design-audit.md -> "Komponens-leképezés (CD-refresh)".
   ========================================================================= */

/* ===== GOMB — FEKETE = MŰVELET ===================================== */
.rnx-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--sp-2);
  min-height: 34px; padding: 0 var(--sp-4);
  font-family: var(--font-sans); font-size: var(--text-base);
  font-weight: 500; line-height: 1;
  border: 1px solid transparent; border-radius: var(--radius-md);
  cursor: pointer; text-decoration: none; white-space: nowrap;
  transition: background-color .12s, border-color .12s, color .12s;
}
.rnx-btn--sm { min-height: 28px; padding: 0 var(--sp-3); font-size: var(--text-xs); }
.rnx-btn--lg { min-height: 40px; padding: 0 var(--sp-6); }

/* fókusz: :focus-visible, hogy egérkattintásra ne villogjon (07/7.) */
.rnx-btn:focus { outline: none; }
.rnx-btn:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }
/* sötét héjon (fejléc) a gyűrű arany — SZ1 szerint ott 6,90:1 */
.rnx-header .rnx-btn:focus-visible { outline-color: var(--accent); }

/* --- primary ------------------------------------------------------- */
.rnx-btn--primary { background: var(--header-bg); color: #ffffff; }
.rnx-btn--primary:hover { background: var(--color-muted); }        /* l. kompromisszum */
.rnx-btn--primary:active { background: var(--header-bg);
  box-shadow: inset 0 2px 4px rgba(0,0,0,.4); }

/* --- secondary ----------------------------------------------------- */
.rnx-btn--secondary { background: var(--bg-surface); color: var(--color-text);
  border-color: var(--border-strong); }
.rnx-btn--secondary:hover { background: var(--bg-subtle); border-color: var(--color-text); }
.rnx-btn--secondary:active { background: var(--bg-muted); }

/* --- tertiary ------------------------------------------------------ */
.rnx-btn--tertiary { background: transparent; color: var(--color-text);
  padding: 0 var(--sp-2); text-decoration: underline; text-underline-offset: 3px; }
.rnx-btn--tertiary:hover { background: var(--bg-subtle); text-decoration: none; }

/* --- destruktív ---------------------------------------------------- */
.rnx-btn--danger { background: var(--bg-surface); color: var(--danger);
  border-color: var(--danger); }
.rnx-btn--danger:hover { background: var(--danger-bg); }
.rnx-btn--danger:focus-visible { outline-color: var(--danger); }
/* kitöltött piros KIZÁRÓLAG a megerősítő modal fő gombján */
.rnx-modal__footer .rnx-btn--danger-solid {
  background: var(--danger); color: #ffffff; border-color: transparent;
}

/* --- letiltott (mindhárom szintre) --------------------------------- */
.rnx-btn:disabled, .rnx-btn[aria-disabled="true"] {
  cursor: not-allowed; box-shadow: none;
  background: var(--bg-muted); color: var(--color-muted);
  border-color: var(--border-strong);
}
.rnx-btn--secondary:disabled, .rnx-btn--tertiary:disabled {
  background: var(--bg-base); color: var(--color-subtle); border-color: var(--border);
}

/* --- betöltés: a felirat MARAD, a szélesség nem ugrik -------------- */
.rnx-btn[aria-busy="true"] { cursor: progress; pointer-events: none; }
.rnx-btn[aria-busy="true"]::before {
  content: ""; flex: none; width: 13px; height: 13px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.35); border-top-color: #ffffff;
  animation: rnx-spin .7s linear infinite;
}
.rnx-btn--secondary[aria-busy="true"]::before,
.rnx-btn--tertiary[aria-busy="true"]::before,
.rnx-btn--danger[aria-busy="true"]::before {
  border-color: rgba(26,26,26,.2); border-top-color: var(--color-text);
}
@keyframes rnx-spin { to { transform: rotate(360deg); } }

/* --- hiba a művelet után ------------------------------------------- */
.rnx-btn--errored { border-color: var(--danger); }
.rnx-field-error { display: inline-flex; align-items: center; gap: 6px;
  font-size: var(--text-sm); font-weight: 500; color: var(--danger); }
.rnx-field-error::before { content: "!"; font-weight: 700; }

/* --- legacy alias: a renexus_buttons.css mintájára ----------------- */
.btn, .header-btn, .logout-btn, .back-btn, .renexus-back-btn,
.ma-btn, .sugo-btn, .td-open-btn { /* = .rnx-btn */ }
.btn-gold { /* KIVEZETVE — .rnx-btn--primary lép a helyére */ }

/* ===== BADGE — SZÍNT CSAK ÁLLAPOT KAP ============================== */
.rnx-badge {
  display: inline-flex; align-items: center; gap: var(--sp-1); white-space: nowrap;   /* keskeny cellában sem törik (2026-09-06) */
  height: 22px; padding: 0 var(--sp-2);
  font-family: var(--font-sans); font-size: var(--text-xs);
  font-weight: 600; line-height: 1; white-space: nowrap;
  border: 1px solid transparent; border-radius: var(--radius-sm);
  /* NEM interaktív: nincs cursor, nincs :hover, nincs :focus, nincs shadow.
     Ha kattintható kell, az .rnx-btn--tertiary, nem badge. */
}

/* --- állapot-család: az EGYETLEN színt kapó szerep ----------------- */
.rnx-badge--info    { background: var(--info-bg);    color: var(--info);    } /* döntésre vár */
.rnx-badge--warn    { background: var(--warn-bg);    color: var(--warn);    } /* teendő van */
.rnx-badge--success { background: var(--success-bg); color: var(--success); } /* jóváhagyva */
.rnx-badge--danger  { background: var(--danger-bg);  color: var(--danger);  } /* elutasítva */
.rnx-badge--neutral { background: var(--bg-subtle);  color: var(--color-muted); } /* tárgytalan */
.rnx-badge--closed  { background: var(--bg-muted);   color: var(--color-text); }  /* végállapot */
.rnx-badge--identity{ background: var(--accent-subtle); color: var(--accent-text); }
/* ^ SZ2: arany SZÖVEG világos alapon = --accent-text (4,52:1), nem --accent */

/* tagadás: az egyetlen nem színnel jelölt állapot */
.rnx-badge--revoked { background: var(--bg-muted); color: var(--color-text);
  text-decoration: line-through; text-decoration-color: var(--border-strong); }

/* betöltés (pl. vírusellenőrzés) */
.rnx-badge--loading::before {
  content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%;
  border: 2px solid currentColor; border-top-color: transparent;
  animation: rnx-spin .8s linear infinite;
}

/* --- „nincs rá eset" — kötelező fallback -------------------------- */
.rnx-badge--unknown {
  background: var(--bg-surface); color: var(--color-muted);
  border: 1px dashed var(--border-strong); font-weight: 600;
}
.rnx-badge--unknown::before { content: "? "; }
.rnx-badge--unknown code { font-family: var(--font-mono); font-weight: 400; }

/* --- szerepkör / típus: SOHA nem színes --------------------------- */
.rnx-badge--role {
  background: transparent; color: var(--color-muted);
  border-color: var(--border-strong); font-weight: 500;
}

/* --- számláló: metaadat, nem hangfok ------------------------------ */
.rnx-count {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 22px; height: 20px; padding: 0 6px;
  background: var(--bg-muted); color: var(--color-text);
  font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 600;
  font-variant-numeric: tabular-nums; border-radius: var(--radius-sm);
}
/* piros számláló NINCS. Teendőt feliratos .rnx-badge--warn jelöl. */

/* --- tender-státusz leképezés (04/1.) ----------------------------- */
/* elokeszites      -> .rnx-badge--neutral   "Tervezet"
   közzétett        -> .rnx-badge--success   "✓ Közzétett"
   ajanlattételi    -> .rnx-badge--identity  "Ajánlattételi"
   fizetésre_vár    -> .rnx-badge--warn      "Fizetésre vár"   (ma arany: hibás)
   lezart           -> .rnx-badge--closed    "✓ Lezárt"
   visszavont       -> .rnx-badge--revoked   "Visszavont"
   * minden más     -> .rnx-badge--unknown + a nyers kulcs monóval  */

/* --- KIVEZETVE ---------------------------------------------------- */
/* .td-pill, .ma-pill, .pill, .portal-badge, .badge-hianypotlas,
   .badge-alkalmatlan, .badge-visszakuldve, .badge-answered,
   .badge-pending, .badge-own, … (73 osztály) -> .rnx-badge--*
   A lila szerepkör-jelölés (#a58fd0 család) -> .rnx-badge--role  */

/* ----------------------------------------------------------------------------
   DÖNTÉS — az önéletrajz-lap „Alapértelmezett" csipje  (2026-09-05)
   ----------------------------------------------------------------------------
   KÉRDÉS volt: arany identitás-jelölés maradjon (mint a „jelenleg aktív"), vagy
   semleges szerepkör-badge legyen?

   DÖNTÉS: arany identitás — `.rnx-badge--identity`.

   INDOK, a tényleges kód alapján (db/onelet_ops.py, models.py:1660):
     1. A jelölés KIZÁRÓLAGOS: pontosan egy önéletrajz viseli felhasználónként.
        Az `onelet_alapertelmezett()` beállításkor az összes többiről leszedi.
        Ez ugyanaz a „melyik van most érvényben" kérdés, amire az --identity
        máshol is válaszol (a tender-státusznál az `ajanlattételi` kapja).
     2. A LISTA ERRE VAN RENDEZVE: `order_by(alapertelmezett.desc(), …)`.
        A jelölt sor mindig legfelül áll. Ha a csip semleges volna, a legfelső
        sor kiemeltsége indokolatlannak látszana — a vizuális jel és a rendezési
        logika elválna egymástól.
     3. A SORBAN MÁR VAN egy valódi típus-csip: a szakág („Építészet"), ami
        `.rnx-badge--role`, tehát semleges. Két egyforma semleges csip egymás
        mellett megkülönböztethetetlen volna, és a kettő közül a jelentősebb
        veszítene.
     4. Az arany nem sorol be munkafolyamat-állapotot ebben a sorban: az
        önéletrajznak itt nincs állapota, tehát nincs mivel összetéveszteni.
        Az arany listánként EGYSZER jelenik meg, nem soronként — a takarékos
        használat megmarad.

   AMI ELLENE SZÓLT, és amiért ez felülvizsgálandó:
     Az `alapertelmezett` mezőnek MA nincs fogyasztója a CV-modulon kívül —
     az `onelet_alapertelmezett_get()` egyetlen route-ból sincs hívva. Vagyis a
     jelölés jelenleg csak rendezést befolyásol, nem azt, melyik önéletrajz megy
     be egy ajánlatba. Ha ez így marad HOSSZÚ TÁVON is, a semleges `--role`
     védhetőbb volna. Ha viszont a mező megkapja a várható szerepét (ez lesz a
     felajánlott önéletrajz), az arany még indokoltabbá válik.
     ÚJRA KELL NÉZNI, amikor a mezőnek fogyasztója lesz.

   HASZNÁLAT:
     <span class="rnx-badge rnx-badge--identity">Alapértelmezett</span>
     <span class="rnx-badge rnx-badge--role">Építészet</span>
   -------------------------------------------------------------------------- */

/* ===== ŰRLAP — a HÁTTÉR a szerkeszthetőséget kódolja =============== */
.rnx-field { display: flex; flex-direction: column; gap: 6px; }
.rnx-label {
  font-family: var(--font-sans); font-size: var(--text-sm);
  font-weight: 600; line-height: 1.3; color: var(--color-muted);
  /* NINCS uppercase és NINCS letter-spacing: a caps a szekció-eyebrow
     szerepe. Két címkézési nyelvtan helyett egy. */
}
.rnx-label__req { color: var(--danger); }   /* a * piros, nem arany (SZ2) */
.rnx-hint { font-size: var(--text-xs); line-height: 1.4; color: var(--color-subtle); }

.rnx-input, .rnx-select, .rnx-textarea {
  width: 100%; box-sizing: border-box;
  height: 40px; padding: 0 var(--sp-3);
  font-family: var(--font-sans); font-size: var(--text-base); line-height: 1;
  color: var(--color-text); background: var(--bg-surface);
  border: 1px solid var(--border); border-radius: var(--radius-md);
  /* 2026-09-06: volt --border-strong (#949084) — a prod mezőszegélye #e0d8c8, a
     tender_view-n „túl hangsúlyos" (Péter). A szerkeszthetőséget a háttér kódolja
     (l. a szekció címét), a mezőt a hover/focus szegély emeli ki, nem az alapszín. */
  transition: border-color .12s, box-shadow .12s;
}
.rnx-textarea { height: auto; min-height: 88px; padding: 10px var(--sp-3);
  font-size: var(--text-body); line-height: 1.55; resize: vertical; }
.rnx-input--mono { font-family: var(--font-mono); }
.rnx-input::placeholder { color: var(--color-subtle); }  /* SZ4: alsó határ */

.rnx-input:hover { border-color: var(--color-muted); }
.rnx-input:focus { outline: none;
  border-color: var(--color-text); box-shadow: 0 0 0 3px var(--accent-subtle); }
/* a fókuszgyűrű arany-halvány FELÜLET, nem arany szöveg — SZ1 nem sérül */

.rnx-input[readonly] { background: var(--bg-subtle); border-color: var(--border);
  cursor: default; }
.rnx-input:disabled  { background: var(--bg-muted);  border-color: var(--border-strong);
  color: var(--color-muted); cursor: not-allowed; }
/* --bg-muted alapon CSAK --color-text / --color-muted / --danger / --success
   használható szövegként (02, a mátrix egyetlen meglepetése) */

.rnx-input--error, .rnx-input[aria-invalid="true"] {
  border-color: var(--danger); background: var(--danger-bg);
}
.rnx-input--loading {
  background: linear-gradient(90deg, var(--bg-subtle) 0, var(--bg-muted) 120px,
              var(--bg-subtle) 240px);
  background-size: 400px 100%; animation: rnx-shimmer 1.4s linear infinite;
  border-color: var(--border);
}
@keyframes rnx-shimmer { to { background-position: 400px 0; } }

/* --- select: natív elem, saját chevron ---------------------------- */
.rnx-select { appearance: none; -webkit-appearance: none;
  padding-right: 36px; cursor: pointer; }
.rnx-select-wrap { position: relative; display: flex; }
.rnx-select-wrap::after {
  content: ""; position: absolute; right: var(--sp-3); top: 50%;
  width: 8px; height: 8px; margin-top: -3px; pointer-events: none;
  border-right: 2px solid var(--color-muted);
  border-bottom: 2px solid var(--color-muted); rotate: 45deg;
}

/* --- checkbox / radio: 18px jel, 40px kattintható sor ------------- */
.rnx-check { display: flex; align-items: center; gap: 10px;
  min-height: 40px; cursor: pointer;
  font-family: var(--font-sans); font-size: var(--text-base); line-height: 1.4; }
.rnx-check input { appearance: none; -webkit-appearance: none; margin: 0;
  flex: none; width: 18px; height: 18px;
  background: var(--bg-surface); border: 2px solid var(--border-strong);
  border-radius: var(--radius-sm); cursor: pointer;
  display: grid; place-content: center; }
.rnx-check input[type="radio"] { border-radius: 50%; }
.rnx-check input:hover { border-color: var(--color-muted); }
.rnx-check input:checked { background: var(--header-bg); border-color: var(--header-bg); }
.rnx-check input:checked::before { content: "✓"; color: #fff; font-size: 12px; line-height: 1; }
.rnx-check input[type="radio"]:checked { background: var(--bg-surface);
  border-color: var(--color-text); }
.rnx-check input[type="radio"]:checked::before { content: "";
  width: 8px; height: 8px; border-radius: 50%; background: var(--color-text); }
.rnx-check input:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }
.rnx-check input:disabled { background: var(--bg-muted); border-color: var(--border-strong); }
.rnx-check:has(input:disabled) { color: var(--color-muted); cursor: not-allowed; }
.rnx-check--error input { border-color: var(--danger); background: var(--danger-bg); }
.rnx-check--error { color: var(--danger); }

/* --- KIVEZETVE ---------------------------------------------------- */
/* .form-input, .cv-mezo-input, .filters input  -> .rnx-input
   a három konkurens mező-háttér (bézs / szürke / fehér) -> egy szabály */

/* ===== TÁBLA — TÖMÖR SŰRŰSÉGI SZINT =============================== */
/* Sűrűségi szintek (3. döntés):
   --row-h-dense:   36px  tábla, lista-sor táblán belül
   --row-h-default: 44px  űrlapsor, checkbox-sor, kártyalista-elem
   A kettő nem cserélhető: a tábla olvasása pásztázás, az űrlapé olvasás. */

.rnx-table-wrap {
  /* 2026-09-06 (NY8 lezárva): a régi szabály belső görgetődobozt csinált
     (max-height:60vh; overflow:auto). Két görgetősáv egymásban, mobilon a lap
     alja elérhetetlen, a sticky fejléc a dobozhoz tapadt, nem a laphoz.
     MOST: a tábla a tartalommal nő, a LAP görget; a wrap csak keret. */
  overflow: visible;
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  background: var(--bg-surface);
}
.rnx-table {
  width: 100%; border-collapse: collapse;
  table-layout: auto;          /* NY8: volt fixed + min-width:900px → vízszintes
     görgetés 1440-en is, és egyenlő oszlopok (a # oszlop olyan széles lett, mint a
     név). Most a tartalom szabja az oszlopot; a hosszú szöveg törhet. */
  font-family: var(--font-sans); font-size: var(--text-base); line-height: 1.3;
}
.rnx-table th {
  position: sticky; z-index: 1;            /* l. réteg-skála: tartalom-réteg */
  top: 0;                                  /* saját görgető-dobozban (régi .table-wrap) a doboz tetejéhez */
  height: 36px; padding: 0 var(--sp-3); text-align: left;
  background: var(--bg-subtle); color: var(--color-muted);
  font-size: var(--text-xs); font-weight: 600;
  letter-spacing: .04em; text-transform: uppercase; white-space: normal; line-height: 1.2;
  /* NY8: a fejlec tordelhet — nowrap fejleccel a rovid oszlop (pl. AV) a CIMKE
     szelessegere nott, es a szoveges oszlop (cegnev) 90 px-re szorult. */
  border-bottom: 1px solid var(--border-strong);
}
.rnx-table td {
  height: 36px; padding: 6px var(--sp-3); vertical-align: middle;
  border-bottom: 1px solid var(--border);
  overflow-wrap: break-word;
  /* 2026-09-06: volt `anywhere` — az az auto-elrendezés min-content számítását is
     átírja (az e-mail oszlop 307 → 157 px-re szorult, a név két sorba tört, a státusz-
     badge kettétört az admin_users-en). A break-word a min-content-et nem érinti:
     az oszlopok a prod szerint oszlanak el, a túl hosszú szó csak végszükségben törik. */
  /* NY8: volt nowrap + ellipsis minden cellán → a csonkolt cégnévből nem
     azonosítható az ajánlattevő. Most a szöveges cella törik (a sor 36 → ~52 px,
     elfogadott); nowrap CSAK a rövid oszlopokon (__num, __money, __short),
     ellipszis CSAK kérésre (__clip). */
}
.rnx-table-wrap > .rnx-table th { top: var(--rnx-hd-h, 0px); }   /* wrap-ben (nincs belső görgetés) a LAP fejléce alá tapad */
.rnx-table__short { white-space: nowrap; }                 /* dátum, státusz, azonosító */
.rnx-table__clip  { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 24ch; }
.rnx-table__num, .rnx-table__money {
  text-align: right; font-family: var(--font-mono);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
/* zebra NINCS: a kijelölés arany háttere és a warn/danger sorháttér
   fontosabb jel, a zebra pedig versenyezne velük */

.rnx-table tbody tr:hover { background: var(--bg-subtle); }
.rnx-table tbody tr:focus-within { background: var(--bg-subtle);
  box-shadow: inset 0 0 0 2px var(--color-text); }
.rnx-table tbody tr[aria-selected="true"] {
  background: var(--accent-subtle);
  box-shadow: inset 2px 0 0 0 var(--accent);   /* arany = identitás/állapot */
}
/* állapot-sor: a bal szegély a 04-es .s-* sorszegély utódja */
.rnx-table tbody tr.is-danger  { background: var(--danger-bg);
  box-shadow: inset 2px 0 0 0 var(--danger); }
.rnx-table tbody tr.is-warn    { background: var(--warn-bg);
  box-shadow: inset 2px 0 0 0 var(--warn); }
.rnx-table tbody tr.is-closed  { color: var(--color-muted); }

/* --- betöltés: sor-skeleton, a sormagasság megmarad -------------- */
.rnx-table__skeleton span { display: block; height: 12px;
  border-radius: var(--radius-sm);
  background: linear-gradient(90deg, var(--bg-subtle) 0, var(--bg-muted) 120px,
              var(--bg-subtle) 240px);
  background-size: 400px 100%; animation: rnx-shimmer 1.4s linear infinite; }

/* --- üres: MIÉRT üres, és mi lesz utána -------------------------- */
.rnx-table__empty { padding: var(--sp-8) var(--sp-4); text-align: center; }
.rnx-table__empty strong { display: block; font-size: var(--text-base); font-weight: 600; }
.rnx-table__empty p { margin: 6px auto 0; max-width: 44ch;
  font-size: var(--text-sm); line-height: 1.5; color: var(--color-subtle); }

/* --- hiba: a tábla helyén sáv + újratöltés ----------------------- */
.rnx-table__error { display: flex; align-items: flex-start; gap: 10px;
  background: var(--danger-bg); border-left: 3px solid var(--danger);
  border-radius: 0 var(--radius-md) var(--radius-md) 0; padding: 12px 14px; }

/* --- badge színezett sorháttéren --------------------------------- */
/* A .rnx-badge alapból keret nélküli. Ha a SOR háttere ugyanaz a
   szemantikus tint, mint a badge-é, a badge keretet kap — enélkül
   beleolvad a sorba. Ez az egyetlen eset, amikor a badge keretes. */
.rnx-table tr.is-danger .rnx-badge--danger { border-color: var(--danger); }
.rnx-table tr.is-warn   .rnx-badge--warn   { border-color: var(--warn); }
.rnx-table tr[aria-selected="true"] .rnx-badge--identity { border-color: var(--accent); }

/* --- 640 px-ig: a sor KÁRTYA, nem tábla (NY8) ------------------ */
/* Hat oszlopból hármat mutatni nem megoldás (a régi szabály: az első oszlop
   tapad, a többi vízszintesen csúszik). A sor kártyává esik szét: a
   .rnx-table__title cella (cégnév / név) fent, alatta címke–érték párok.
   A címkét a td[data-label] adja — ezt a static/js/rnx_table.js tölti ki a
   thead-ből (MutationObserverrel a JS-ből renderelt táblákra is). Minden lap,
   ahol .rnx-table van, betölti ezt a szkriptet. */
@media (max-width: 640px) {
  .rnx-table-wrap { border: 0; border-radius: 0; background: transparent; }
  .rnx-table, .rnx-table tbody { display: block; width: 100%; }
  .rnx-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden;
    clip: rect(0 0 0 0); white-space: nowrap; }
  .rnx-table tbody tr { display: grid; grid-template-columns: 100%;
    /* grid, NEM flex: az oszlop-flexben a belső flex cella magasságát a Chrome a
       tördelés előtt számolta (36 px maradt, a tartalom ráfolyt a következő sorra) */
    border: 1px solid var(--border); border-radius: var(--radius-md);
    background: var(--bg-surface); margin: 0 0 var(--sp-2);
    padding: var(--sp-2) var(--sp-3); }
  .rnx-table tbody tr[aria-selected="true"], .rnx-table tbody tr.is-danger,
  .rnx-table tbody tr.is-warn { box-shadow: inset 3px 0 0 0 currentColor; }
  .rnx-table td { display: grid; grid-template-columns: minmax(0, 38%) minmax(0, 1fr);
    column-gap: var(--sp-3); align-items: baseline; height: auto; min-height: 0;
    padding: 4px 0; border: 0; text-align: left; }
  .rnx-table td::before { content: attr(data-label);
    font-size: var(--text-xs); font-weight: 600; letter-spacing: .04em;
    text-transform: uppercase; color: var(--color-muted); }
  .rnx-table td:not([data-label]), .rnx-table td[data-label=""] { grid-template-columns: 1fr; }
  .rnx-table td:not([data-label])::before, .rnx-table td[data-label=""]::before { display: none; }
  .rnx-table td:empty { display: none; }
  .rnx-table td.rnx-table__title { display: block; order: -1;
    font-size: var(--text-base); font-weight: 600; color: var(--color-text);
    border-bottom: 1px solid var(--border); padding-bottom: 6px; margin-bottom: 4px; }
  .rnx-table td.rnx-table__title::before { display: none; }
  .rnx-table__num, .rnx-table__money { text-align: right; }
  .rnx-table td.rnx-table__num, .rnx-table td.rnx-table__money { justify-items: end; }
  .rnx-table td[colspan] { display: block; }          /* kinyitott részletsor */
  .rnx-table td[colspan]::before { display: none; }
}

/* --- KIVEZETVE -------------------------------------------------- */
/* .data-table, .arbev-table, .ma-recent-table, .dk-table,
   .feltetel-table, .hp-tbl, .mgf-tbl, .draft-table -> .rnx-table */

/* ===== KÁRTYA / PANEL ============================================= */
.rnx-panel {
  background: var(--bg-surface); border: 1px solid var(--border);
  border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);   /* eleváció 1 */
}
.rnx-panel__head { display: flex; align-items: baseline; justify-content: space-between;
  gap: var(--sp-3); padding: var(--sp-4) var(--sp-6);
  border-bottom: 1px solid var(--border); }
.rnx-panel__head h2, .rnx-panel__head h3 { margin: 0;
  font-family: var(--font-serif); font-size: var(--heading-sm); font-weight: 400; }
.rnx-panel__body { padding: var(--sp-4) var(--sp-6); }
.rnx-panel__foot { padding: var(--sp-3) var(--sp-6); background: var(--bg-base);
  border-top: 1px solid var(--border);
  font-size: var(--text-sm); color: var(--color-subtle); }

/* KIVEZETVE 2026-09-06: „panel panelben NINCS — csak elválasztó"
   (.rnx-panel .rnx-panel { border:0; border-radius:0; box-shadow:none;
   border-top:1px solid var(--border) }). Mérés a kiszolgált DOM-on, mind a 14
   tender_view-tabon (az egyetlen lap, ahol .rnx-panel van): 13 beágyazott panel —
   9 munkarész-kártya, az Előnézet kártyája, 3 KT-doboz — és MIND eredetileg keretes,
   lekerekített doboz volt (border + radius 8–10). Egyetlen hely sincs, ahol a lapított
   megjelenés lenne a helyes: a szabály csak elvette a keretet és az árnyékot. A „ne ágyazz
   panelt panelbe" tervezési tanács marad (a __head/__body/__foot bontás a helyes út), de
   CSS-sel nem kényszerítjük ki. Részletek: docs/design-audit.md NY9. */

.rnx-panel--error { border-color: var(--danger); }   /* a háttér NEM változik */
.rnx-panel--empty { background: var(--bg-base); border-style: dashed;
  border-color: var(--border-strong); box-shadow: none; }
.rnx-panel--loading .rnx-panel__body > * { visibility: hidden; }

/* --- lista-elem: kattintható kártya ------------------------------- */
.rnx-item { display: block; padding: 14px var(--sp-4); text-decoration: none;
  background: var(--bg-surface); border: 1px solid var(--border);
  border-radius: var(--radius-lg); cursor: pointer;
  box-shadow: inset 3px 0 0 0 var(--accent), var(--shadow-sm);
  transition: border-color .12s, box-shadow .12s; }
.rnx-item:hover { border-color: var(--border-strong);
  box-shadow: inset 3px 0 0 0 var(--accent), var(--shadow-md); }   /* 1 -> 2 */
.rnx-item:active { box-shadow: inset 3px 0 0 0 var(--accent), var(--shadow-sm); }
.rnx-item:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }
/* a bal szegély az ÁLLAPOT jele — a mai .s-* sorszegély utódja */
.rnx-item--closed { color: var(--color-muted);
  box-shadow: inset 3px 0 0 0 var(--border-strong), var(--shadow-sm); }
.rnx-item--warn   { box-shadow: inset 3px 0 0 0 var(--warn),   var(--shadow-sm); }
.rnx-item--danger { box-shadow: inset 3px 0 0 0 var(--danger), var(--shadow-sm); }
.rnx-item[aria-disabled="true"] { cursor: not-allowed; background: var(--bg-base);
  color: var(--color-muted); box-shadow: inset 3px 0 0 0 var(--border-strong); }

/* --- stat-kártya -------------------------------------------------- */
.rnx-stat { display: flex; flex-direction: column; gap: 6px;
  padding: 14px var(--sp-4); background: var(--bg-surface);
  border: 1px solid var(--border); border-radius: var(--radius-lg); }
.rnx-stat__label { font-size: var(--text-xs); font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase; color: var(--color-muted); }
.rnx-stat__value { font-family: var(--font-mono); font-size: var(--heading-md);
  font-weight: 400; line-height: 1; font-variant-numeric: tabular-nums; }
.rnx-stat--locked .rnx-stat__value { font-family: var(--font-sans);
  font-size: var(--text-body); color: var(--color-muted); }

/* --- KIVEZETVE ---------------------------------------------------- */
/* .section, .card, .kartya, .ma-card, .reg-card, .fz-card, .kt-card,
   .td-card, .stat-card, .tab-panel (54 osztály)
   -> .rnx-panel / .rnx-item / .rnx-stat */

/* ===== KIEMELT SÁV — EGY FORMA, ÖT HANGFOK ======================== */
.rnx-callout {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 14px var(--sp-4);
  border-left: 3px solid; border-radius: 0 var(--radius-md) var(--radius-md) 0;
  font-family: var(--font-sans); font-size: var(--text-base); line-height: 1.5;
  box-shadow: none;              /* eleváció 0: a sáv a lap síkjában van */
}
.rnx-callout strong { display: block; font-weight: 600; color: var(--color-text); }
.rnx-callout p { margin: 2px 0 0; color: var(--color-muted); }
.rnx-callout::before { flex: none; font-weight: 700; }

.rnx-callout--warn    { background: var(--warn-bg);    border-color: var(--warn); }
.rnx-callout--warn::before    { content: "⚠"; color: var(--warn); }
.rnx-callout--info    { background: var(--info-bg);    border-color: var(--info); }
.rnx-callout--info::before    { content: "i"; color: var(--info); }
.rnx-callout--danger  { background: var(--danger-bg);  border-color: var(--danger); }
.rnx-callout--danger::before  { content: "!"; color: var(--danger); }
.rnx-callout--success { background: var(--success-bg); border-color: var(--success); }
.rnx-callout--success::before { content: "✓"; color: var(--success); }
/* identity: a rendszer saját segítsége. Ikon NINCS — az arany maga a jel. */
.rnx-callout--identity { background: var(--accent-subtle); border-color: var(--accent); }

/* A törzsszöveg mindenhol --color-text / --color-muted, SOHA nem a
   szemantikus szín: az csak a 3px szegélyen és az ikonon él.
   (02/SZ5: a párosok AA-megfelelők, de a hosszú szöveg feketén olvasható.) */

/* Művelet a sávban: tertiary vagy secondary gomb, primary SOHA */
.rnx-callout .rnx-btn { margin-left: auto; align-self: center; }

/* --- KIVEZETVE ---------------------------------------------------- */
/* .kt-lezart-banner (#fdf0f0/#e8b4b4/#c0392b) -> .rnx-callout--danger
   a sárga ⚠ sáv                              -> .rnx-callout--warn
   az arany körbekeretezett magyarázó doboz    -> .rnx-callout--identity
   a lila balszegélyes munkarész-kártya        -> .rnx-panel + .rnx-badge--role */

/* ===== MODAL — EGY overlay, EGY rétegérték ======================== */
.rnx-overlay {
  position: fixed; inset: 0; z-index: var(--z-modal);   /* 1000 */
  display: flex; align-items: center; justify-content: center;
  padding: var(--sp-6); background: rgba(26,26,26,.55);
  overflow-y: auto;                       /* hosszú modal görgethető */
}
.rnx-modal {
  width: 100%; max-width: 440px;          /* --md: 640px */
  background: var(--bg-surface); border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg);           /* eleváció 3 */
}
.rnx-modal--md { max-width: 640px; }
.rnx-modal__head { padding: var(--sp-6) var(--sp-6) 0; }
.rnx-modal__head h2 { margin: 0; font-family: var(--font-serif);
  font-size: var(--heading-sm); font-weight: 400; }
.rnx-modal__body { padding: var(--sp-3) var(--sp-6) var(--sp-6);
  font-size: var(--text-base); line-height: 1.6; color: var(--color-muted); }
.rnx-modal__foot { display: flex; justify-content: flex-end; gap: var(--sp-2);
  padding: 14px var(--sp-6); background: var(--bg-base);
  border-top: 1px solid var(--border);
  border-radius: 0 0 var(--radius-xl) var(--radius-xl); }

/* a modalon BELÜL a kártya elveszti az árnyékát (eleváció-halmozás tilos) */
.rnx-modal .rnx-panel { box-shadow: none; }

/* betöltés: a modal NEM záródik, a mégsem letiltva */
.rnx-modal[aria-busy="true"] .rnx-btn--secondary { pointer-events: none;
  background: var(--bg-base); color: var(--color-subtle); border-color: var(--border); }

/* hiba: .rnx-callout--danger a __body ELEJÉN, nem toastban.
   Indok: a toast eltűnik, a modalban lévő beírt adat nem. */

/* fókusz-csapda és Esc a JS feladata; a fókusz a modal első
   interaktív elemére kerül, záráskor a hívó gombra vissza. */

/* --- KIVEZETVE ---------------------------------------------------- */
/* .modal-overlay (z 200/500/2000), .edit-modal-overlay, .rb-ov,
   .mrm-ov (9000), .vim-overlay (10000), .loading-overlay (1000)
   -> .rnx-overlay + .rnx-modal, mind var(--z-modal)-on */

/* ===== TOAST — MINDIG LEGFELÜL ==================================== */
.rnx-toaster {
  position: fixed; right: var(--sp-6); bottom: var(--sp-6);
  z-index: var(--z-toast);       /* 1100 — a modal (1000) FÖLÖTT */
  display: flex; flex-direction: column; gap: var(--sp-2);
  max-width: 400px; pointer-events: none;   /* a lap alatta kattintható */
}
.rnx-toast {
  pointer-events: auto;
  display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px;
  background: var(--bg-surface); border: 1px solid var(--border);
  border-left: 3px solid var(--border-strong);
  border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
  box-shadow: var(--shadow-lg);            /* eleváció 3 */
  font-family: var(--font-sans); font-size: var(--text-base);
}
.rnx-toast strong { display: block; font-size: var(--text-base); font-weight: 600; }
.rnx-toast p { margin: 2px 0 0; font-size: var(--text-sm); color: var(--color-muted); }
.rnx-toast__close { margin-left: auto; flex: none;
  background: none; border: 0; cursor: pointer; color: var(--color-muted);
  font-size: var(--text-lg); line-height: 1; }
.rnx-toast__close:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }

.rnx-toast--success { border-left-color: var(--success); }
.rnx-toast--success::before { content: "✓"; color: var(--success); font-weight: 700; }
.rnx-toast--info    { border-left-color: var(--info); }
.rnx-toast--info::before { content: "i"; color: var(--info); font-weight: 700; }
.rnx-toast--danger  { border-left-color: var(--danger); }
.rnx-toast--danger::before { content: "!"; color: var(--danger); font-weight: 700; }

/* a toast HÁTTERE fehér, nem szemantikus tint: a --shadow-lg-vel együtt
   a színes háttér túl hangos lenne egy lebegő elemen, és a hiba-toast
   így nem téveszthető össze a callouttal (ami a lap síkjában van) */

/* hover/fókusz: az önműködő eltűnés megáll — ma ez hiányzik */
.rnx-toast:hover, .rnx-toast:focus-within { --rnx-toast-play: paused; }
.rnx-toast__life { display: block; height: 2px; background: var(--bg-muted); }
.rnx-toast__life > span { display: block; height: 2px; background: var(--color-text);
  animation: rnx-toast-life 4s linear forwards;
  animation-play-state: var(--rnx-toast-play, running); }
@keyframes rnx-toast-life { to { width: 0; } }
/* a hiba-toastnak NINCS __life sávja: nem tűnik el magától */

/* --- KIVEZETVE ---------------------------------------------------- */
/* .toast (z 300/999/9999), .success-toast, .error-toast (z 200)
   -> .rnx-toast, mind var(--z-toast)-on.
   Ezzel szűnik meg a „melyik toast melyik modal fölött látszik"
   kérdés, ami ma a lap véletlenén múlik. */

/* ===== FÁJLFELTÖLTŐ — a LISTA a fő elem ========================== */
.rnx-drop {
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: var(--sp-6) var(--sp-4); text-align: center; cursor: pointer;
  background: var(--bg-base);
  border: 1px dashed var(--border-strong); border-radius: var(--radius-lg);
}
.rnx-drop:hover { border-color: var(--color-text); background: var(--bg-subtle); }
.rnx-drop:focus-within { outline: 2px solid var(--color-text); outline-offset: 2px; }
.rnx-drop.is-dragover { border: 2px dashed var(--color-text);
  background: var(--accent-subtle); }        /* aktív: a rendszer "elkapja" */
.rnx-drop[aria-disabled="true"] { cursor: not-allowed; background: var(--bg-muted);
  color: var(--color-muted); }
/* --bg-muted alapon csak --color-text / --color-muted (02) */

/* --- fájlsor: 44px, mert MŰVELET van rajta (nem tömör tábla) ----- */
.rnx-file { display: flex; align-items: center; gap: var(--sp-3);
  height: 44px; padding: 0 var(--sp-3);
  border-bottom: 1px solid var(--border); font-size: var(--text-base); }
.rnx-file__type { flex: none; font-family: var(--font-mono); }   /* .rnx-badge--role */
.rnx-file__name { flex: 1; min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rnx-file__size { flex: none; font-family: var(--font-mono);
  font-size: var(--text-sm); color: var(--color-subtle); }

/* állapotok: a SOR háttere jelöl, mert a fájl sorsa a fő információ */
.rnx-file--uploading { }                                   /* semleges */
.rnx-file--scanning { background: var(--warn-bg); }        /* vírusellenőrzés */
.rnx-file--error    { background: var(--danger-bg); }
.rnx-file--done     { }                                    /* + .rnx-badge--success */

.rnx-file__bar { flex: 1 1 120px; min-width: 80px; height: 4px;
  background: var(--bg-muted); border-radius: var(--radius-sm); overflow: hidden; }
.rnx-file__bar > span { display: block; height: 4px; background: var(--color-text); }
/* a folyamatjelző FEKETE: a haladás művelet, nem állapot */

.rnx-upload__empty { padding: var(--sp-6) var(--sp-4); text-align: center;
  border: 1px dashed var(--border-strong); border-radius: var(--radius-md);
  background: var(--bg-base); }

/* KÖTELEZŐ tartalmi szabály (az elárvult csatolmány incidens miatt):
   a listának minden fájlnál ki kell írnia, hogy a fájl a SZERVEREN van-e
   ("✓ Feltöltve"), és hogy az Ajánlattevőnek látható-e. A "kiválasztva,
   de még nem mentve" állapot nem maradhat jelöletlen. */

/* ===== ÜRES ÁLLAPOT — NÉGY ESET, EGY FORMA ======================= */
.rnx-empty {
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: var(--sp-8) var(--sp-6); text-align: center;
}
.rnx-empty strong { font-size: var(--text-base); font-weight: 600; }
.rnx-empty p { margin: 0; max-width: 34ch;
  font-size: var(--text-sm); line-height: 1.5; color: var(--color-subtle); }
.rnx-empty .rnx-btn { margin-top: var(--sp-2); }
/* árnyék NINCS, keret NINCS: az üres állapot a befoglaló panel BELSEJE */

/* 1 — kezdeti: még nem kérdeztél. Művelet: az elsődleges út. */
.rnx-empty--initial   { }
/* 2 — betöltés: forgó jel + folyamatban lévő igealak. Művelet: NINCS. */
.rnx-empty--loading::before { content: ""; width: 18px; height: 18px;
  border: 2px solid rgba(26,26,26,.2); border-top-color: var(--color-text);
  border-radius: 50%; animation: rnx-spin .7s linear infinite; }
/* 3 — nincs találat: a KERESETT KIFEJEZÉS idézve + mit lehet másképp.
      Művelet: szűrő törlése (tertiary), nem új létrehozás. */
.rnx-empty--noresult strong code { font-family: var(--font-mono); font-weight: 400; }
/* 4 — soha nem volt: mire jó a dolog + létrehozás (primary). */
.rnx-empty--never     { }

/* TARTALMI SZABÁLY: a négy felirat SOHA nem egyezhet meg.
   Ha egy lapon ugyanaz a szöveg jelenik meg 1-es és 3-as esetben,
   az hiba — ez a mai meghívó-lap konkrét hibája. */

/* --- KIVEZETVE ---------------------------------------------------- */
/* .ma-empty, .empty, .td-empty, .feltetel-empty, .piszkozat-empty,
   .vd-chat-empty, .kr-empty, .nincs-talalat (14 osztály) -> .rnx-empty--* */

/* ===== LAPOZÓ ===================================================== */
.rnx-pager { display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4); flex-wrap: wrap;
  padding: var(--sp-3) var(--sp-6); background: var(--bg-base);
  border-top: 1px solid var(--border);
  font-family: var(--font-sans); font-size: var(--text-sm); color: var(--color-subtle); }
.rnx-pager__range b { font-family: var(--font-mono); font-weight: 400;
  color: var(--color-text); }
.rnx-pager__nav { display: flex; align-items: center; gap: var(--sp-1); }

.rnx-pager__btn { display: inline-flex; align-items: center; justify-content: center;
  min-width: 28px; height: 28px; padding: 0 var(--sp-2);
  background: var(--bg-surface); color: var(--color-text);
  border: 1px solid var(--border-strong); border-radius: var(--radius-md);
  font-family: var(--font-mono); font-size: var(--text-sm); font-weight: 500;
  cursor: pointer; }
.rnx-pager__btn:hover { background: var(--bg-subtle); border-color: var(--color-text); }
.rnx-pager__btn:active { background: var(--bg-muted); }
.rnx-pager__btn:focus-visible { outline: 2px solid var(--color-text); outline-offset: 2px; }
.rnx-pager__btn:disabled { cursor: not-allowed; background: var(--bg-base);
  color: var(--color-subtle); border-color: var(--border); }

/* az AKTUÁLIS lap: állapot, nem művelet -> nem kattintható, kitöltött */
.rnx-pager__btn[aria-current="page"] { background: var(--header-bg); color: #fff;
  border-color: var(--header-bg); font-weight: 600; cursor: default; }
.rnx-pager__gap { min-width: 28px; height: 28px; display: inline-flex;
  align-items: center; justify-content: center; color: var(--color-subtle); }

/* betöltés: a kért lap gombja spinnert kap, a többi marad kattintható */
.rnx-pager__btn[aria-busy="true"] { color: transparent; }
.rnx-pager__btn[aria-busy="true"]::after { content: ""; position: absolute;
  width: 11px; height: 11px; border: 2px solid rgba(26,26,26,.2);
  border-top-color: var(--color-text); border-radius: 50%;
  animation: rnx-spin .7s linear infinite; }

/* SZABÁLY: 25 elem fölött a lista lapozót KAP. A mai gyakorlat
   (149-287 elem egy lapon) nem opció — a tömör tábla ezt nem oldja meg,
   csak elrejti. Lapméret: 20 (tábla) / 10 (kártyalista). */

/* --- KIVEZETVE ---------------------------------------------------- */
/* .pagination, .pager, .ma-pager -> .rnx-pager */

/* ===== ELŐNÉZET-KERET ============================================= */
/* A beágyazás SZÁNDÉKOS: az AK azt látja, amit az AT. A keret dolga,
   hogy a beágyazott dokumentum ne legyen összekeverhető a saját héjjal. */
.rnx-preview {
  border: 1px solid var(--border-strong); border-radius: var(--radius-lg);
  overflow: hidden; background: var(--bg-base);
}
.rnx-preview__bar {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4); flex-wrap: wrap; padding: 10px var(--sp-4);
  background: var(--header-bg); box-shadow: var(--shadow-underline);
}
.rnx-preview__bar b { font-size: var(--text-xs); font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase;
  color: var(--accent); }              /* SZ1: arany szöveg SÖTÉT alapon = OK */
.rnx-preview__bar span { font-size: var(--text-sm); color: var(--bg-subtle); }
/* a bezárás-gomb a sötét sávban: arany körvonalas, NEM a fekete primary */
.rnx-preview__bar .rnx-btn { border-color: var(--accent); color: var(--accent);
  background: transparent; }

/* a perem: --bg-muted, hogy a beágyazott fehér lap "papírként" üljön rajta */
.rnx-preview__inset { padding: var(--sp-4); background: var(--bg-muted); }
.rnx-preview__doc { border: 1px solid var(--border);
  border-radius: var(--radius-md); background: var(--bg-surface);
  box-shadow: none;                    /* eleváció 0: nem lebeg, be van rakva */
  opacity: .92;                        /* egyetlen halkítás, nem szöveg-alfa */
}
/* a beágyazott tartalom minden művelete tiltott */
.rnx-preview__doc { pointer-events: none; user-select: text; }
.rnx-preview__doc a, .rnx-preview__doc button { cursor: default; }

/* KÖTELEZŐ: a keretben lévő fejléc NEM lehet position: fixed/sticky.
   A dupla ragadó fejléc a mai előnézet fő tünete.
   .rnx-preview__doc .rnx-header { position: static; z-index: auto; } */

/* MEGJEGYZÉS az opacity .92-hez: a --bg-surface (#fff) 92%-a a
   --bg-muted (#eceae4) peremen továbbra is gyakorlatilag fehér, tehát a
   02-es kontrasztértékek érvényben maradnak. Ennél erősebb halkítás
   szövegkontrasztot rontana — ott a helyes eszköz a perem, nem az alfa. */
