/* Platform beállítások: cégadatok és kimenő levelezés.

   Két kártya egymás mellett, mert egy dolgot mondanak ki együtt: milyen néven és
   milyen fiókból beszél a platform kifelé. A levél aláírása és a majdani
   számlafej ugyanabból az adatból jön. */
/* A ket kartya egy magassagu: az `align-items:start` mindegyiket a sajat
   tartalmara zsugoritotta, es a Cegadatok mellett a Kimeno levelezes
   fele olyan magas volt - a sor ugy nezett ki, mintha valami hianyozna.
   `stretch` mellett a racs kitolti a sort. */
.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:16px;align-items:stretch;max-width:1080px}
.settings-grid>.settings-card{display:flex;flex-direction:column}
/* Ha a kartya alja gombsor, az a kartya aljara kerul, nem a szoveg ala. */
.settings-grid>.settings-card>.settings-actions{margin-top:auto}
.settings-card{background:var(--surface);border:1px solid var(--hairline);border-radius:13px;padding:20px 22px 22px}
.settings-card>header{margin-bottom:16px;padding-bottom:13px;border-bottom:1px solid var(--hairline-2)}
.settings-card h2{margin:0 0 4px;font-size:16px;color:var(--ink)}
.settings-card>header p{margin:0;font-size:12px;color:var(--ink-3)}

.settings-form{display:grid;grid-template-columns:1fr 1fr;gap:13px}
/* `align-content:start` nélkül a mezők egymáshoz igazodnak sormagasságban: a
   jelszó alatti magyarázó szöveg megnyújtja a sort, és a mellette álló beviteli
   mező vele együtt nyúlik meg. A rács így csak annyi helyet ad a mezőnek,
   amennyit a tartalma kér. */
.settings-field{display:grid;gap:5px;min-width:0;align-content:start}
.settings-field.wide,.settings-check.wide,.settings-actions{grid-column:1/-1}
.settings-field span{font-size:11.5px;font-weight:600;color:var(--ink-2)}
/* Kozos, explicit magassag: a `select` sajat belso metrikaja miatt ugyanakkora
   paddinggel is ket pixellel magasabb lenne, mint egy `input`, es a ket oszlop
   soronkent elcsuszna egymastol. */
.settings-field input,.settings-field select{height:38px;padding:0 11px;border:1px solid var(--hairline);
  border-radius:8px;font:13px Inter,system-ui,sans-serif;background:var(--surface-2);color:var(--ink);min-width:0}
.settings-field input:focus,.settings-field select:focus{outline:0;border-color:#0ba8a4;background:var(--surface);
  box-shadow:0 0 0 3px #0ba8a433}
.settings-field small{color:var(--ink-3);font-size:11px;line-height:1.4}
/* Kapcsoló, nem pipa. Az alap `<input type="checkbox">` marad a jelölés alatt -
   ő viszi a nevet, az értéket és a billentyűzet-kezelést -, csak a megjelenését
   vesszük át. Egy saját `<div>`-ből épített kapcsoló szebb lehetne, de kiesne a
   form adatai közül, és a Tab sem találná meg. */
.settings-check{display:flex;align-items:center;gap:12px;padding:12px 14px;
  border:1px solid var(--hairline);border-radius:10px;background:var(--surface-2);
  font-size:13px;font-weight:600;color:var(--ink);cursor:pointer;user-select:none}
.settings-check:hover{border-color:var(--hairline)}
.settings-check input[type="checkbox"]{appearance:none;-webkit-appearance:none;flex:none;margin:0;
  position:relative;width:42px;height:24px;border:0;border-radius:999px;background:var(--hairline);
  cursor:pointer;transition:background .18s ease}
.settings-check input[type="checkbox"]::after{content:'';position:absolute;top:3px;left:3px;
  width:18px;height:18px;border-radius:50%;background:var(--surface);box-shadow:0 1px 3px #00000033;
  transition:transform .18s ease}
.settings-check input[type="checkbox"]:checked{background:#0ba8a4}
.settings-check input[type="checkbox"]:checked::after{transform:translateX(18px)}
.settings-check input[type="checkbox"]:focus-visible{outline:2px solid #0ba8a4;outline-offset:3px}

.settings-actions{display:flex;align-items:center;gap:14px;margin-top:4px}
.settings-actions button{padding:10px 18px;border:0;border-radius:9px;background:#0ba8a4;color:#fff;
  font:600 13px Inter,system-ui,sans-serif;cursor:pointer}
.settings-actions button:hover{background:var(--live)}

/* A visszajelzés a gomb mellett marad, nem ugrik fel párbeszédablakban: egy
   beállítás-oldalon a mentés a leggyakoribb művelet, és nem érdemel megszakítást. */
.settings-note{margin:0;font-size:12px;min-height:16px}
.settings-note.ok{color:var(--ok-ink)}
.settings-note.error{color:var(--bad-ink)}
.settings-note.info{color:var(--ink-3)}
.settings-muted{margin:6px 0 0;font-size:11.5px;color:var(--ink-3);line-height:1.5}

.settings-status{margin:0;font-size:12px;font-weight:600;color:var(--ink-3)}
.settings-status.ok{color:var(--ok-ink)}
.settings-status.warn{color:var(--warn-ink)}

.settings-test{margin-top:18px;padding-top:16px;border-top:1px solid var(--hairline-2)}
.settings-test h3{margin:0 0 5px;font-size:13.5px;color:var(--ink)}
.settings-test>p{margin:0 0 11px;font-size:12px;color:var(--ink-3);line-height:1.55}
.settings-test-row{display:flex;gap:9px;margin-bottom:8px}
.settings-test-row input{flex:1;min-width:0;padding:9px 11px;border:1px solid var(--hairline);border-radius:8px;
  font:13px Inter,system-ui,sans-serif;background:var(--surface-2)}
.settings-test-row button{padding:9px 15px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface);
  color:var(--ink-2);font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer;white-space:nowrap}
.settings-test-row button:hover:not(:disabled){background:var(--surface-3)}
.settings-test-row button:disabled{opacity:.55;cursor:progress}

@media(max-width:620px){.settings-form{grid-template-columns:1fr}}

/* --- Modulok lap: elofizetes es kiepitettseg ------------------------------ */
/* Ket doboz, mert a platform is ket kulon kapun engedi at a modult. Egy kozos
   "bekapcsolva" pipa elmosna a kulonbseget, amibol az ugyfelszolgalat dolgozik. */
.module-grid{grid-template-columns:repeat(auto-fit,minmax(430px,1fr));max-width:1180px}
.module-list{display:grid;gap:10px;margin-top:14px}
.module-row{display:grid;grid-template-columns:1fr 150px 150px auto auto;gap:11px;align-items:end;
  padding:13px 14px;border:1px solid var(--hairline);border-radius:11px;background:var(--surface-2)}
.module-name{min-width:0}
.module-name b{display:block;font-size:13.5px;color:var(--ink)}
.module-name small{display:block;margin-top:2px;color:var(--ink-3);font-size:11.5px;line-height:1.45}
.module-field{display:grid;gap:4px;min-width:0}
.module-field span{font-size:11px;font-weight:600;color:var(--ink-2)}
.module-field select,.module-field input{height:34px;padding:0 9px;border:1px solid var(--hairline);border-radius:8px;
  font:12.5px Inter,system-ui,sans-serif;background:var(--surface);color:var(--ink);min-width:0}
.module-field select:focus,.module-field input:focus{outline:0;border-color:#0ba8a4;box-shadow:0 0 0 3px #0ba8a433}
.module-state{padding-bottom:8px;white-space:nowrap}
.module-badge{font-size:11.5px;font-weight:700}
.module-badge.ok{color:var(--ok-ink)}
.module-badge.closed{color:var(--warn-ink)}
.module-role{font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.4px}
.module-row button{align-self:end;margin-bottom:1px;padding:8px 14px;border:1px solid var(--hairline);border-radius:8px;
  background:var(--surface);color:var(--ink-2);font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer}
.module-row button:hover{background:var(--surface-3)}
/* Az akadalyok mindig latszanak, nem csak az, hogy "nem elerheto": a `gate`
   mondja meg, hogy ertekesitesi vagy szerelo-kerdesrol van-e szo. */
.module-blockers{grid-column:1/-1;margin:4px 0 0;padding:9px 12px;list-style:none;
  border-radius:8px;background:var(--warn-tint);color:var(--warn-ink);font-size:11.5px;line-height:1.6}
.module-blockers li+li{margin-top:4px}
.module-blockers i{color:var(--warn-ink);font-style:normal}
.notice.warn{background:var(--warn-tint);border-color:var(--warn);color:var(--warn-ink)}
@media(max-width:900px){.module-row{grid-template-columns:1fr 1fr;gap:9px}.module-name,.module-blockers{grid-column:1/-1}}


/* --- Modul-matrix: sorok az ugyfelek, oszlopok a modulok ------------------- */
/* A tablazat vizszintesen gorgethető, de a bal szelso oszlop marad: harom-negy
   modul utan a nev nelkuli sorban mar nem lehet tudni, kirol van szo. */
.matrix-wrap{max-width:1180px;overflow-x:auto;border:1px solid var(--hairline);border-radius:13px;background:var(--surface)}
.module-matrix{border-collapse:separate;border-spacing:0;width:100%;font:13px Inter,system-ui,sans-serif}
.module-matrix th,.module-matrix td{padding:10px 12px;border-bottom:1px solid var(--hairline-2);text-align:center}
.module-matrix thead th{background:var(--ground);color:var(--ink-2);font-weight:600;font-size:11.5px;
  text-transform:uppercase;letter-spacing:.35px;border-bottom:1px solid var(--hairline)}
.module-matrix .group-row th{background:var(--hairline-2);color:var(--ink);font-size:12px;letter-spacing:.3px;
  border-left:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}
.module-matrix .group-row th.corner{background:var(--ground);border-left:0}
.module-matrix thead tr:last-child th{font-weight:600;color:var(--ink-2)}
.module-matrix th.corner,.module-matrix th.tenant{position:sticky;left:0;z-index:1;text-align:left;
  background:var(--surface);min-width:190px;box-shadow:1px 0 0 #eef2f5}
.module-matrix th.corner{background:var(--ground)}
.module-matrix th.tenant{font-weight:600;color:var(--ink)}
.module-matrix tbody tr:hover td{background:var(--surface-2)}
.module-matrix td.on{background:var(--surface-3)}
.module-matrix tbody tr:hover td.on{background:var(--live-tint)}
.cell-toggle{display:inline-flex}
/* Ugyanaz a kapcsolo, mint a levelezes-lapon: az `<input>` marad a jeloles alatt,
   csak a megjelenest vesszuk at. */
.cell-toggle input[type="checkbox"]{appearance:none;-webkit-appearance:none;margin:0;position:relative;
  width:38px;height:22px;border:0;border-radius:999px;background:var(--hairline);cursor:pointer;
  transition:background .18s ease}
.cell-toggle input[type="checkbox"]::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;
  border-radius:50%;background:var(--surface);box-shadow:0 1px 3px #00000033;transition:transform .18s ease}
.cell-toggle input[type="checkbox"]:checked{background:#0ba8a4}
.cell-toggle input[type="checkbox"]:checked::after{transform:translateX(16px)}
.cell-toggle input[type="checkbox"]:disabled{opacity:.5;cursor:progress}
.cell-toggle input[type="checkbox"]:focus-visible{outline:2px solid #0ba8a4;outline-offset:3px}
/* A hianyzo kiepites nem tiltja a kapcsolot - eladni azelott is lehet, hogy a
   szerelo kiment volna -, de ki kell irni, kulonben az ugyfel bekapcsolva latna
   azt, ami nala ugysem mukodik. */
.cell-hint{display:block;margin-top:4px;font-style:normal;font-size:10.5px;color:var(--warn-ink);white-space:nowrap;cursor:help}
.cell-hint.fault{color:var(--bad-ink)}
.capability-card{max-width:1180px;margin-top:16px}

/* Elofizette, de meg nincs honnan adat jonnie. A menupont latszik - halvanyan -,
   mert elrejtve az ugyfel azt hinne, hogy nem kapta meg, amit megvett.

   A halvanyitas mellett allt egy "nincs adat" felirat is. Az sav szeles menuben
   nem fert el: a menupont legkisebb szelesseget a felirat tolta a savon tuli
   merethez, es mivel a `nav` fuggolegesen gorgetheto, a vizszintes tengely is
   `auto`-ra valt - vagyis a menu oldalra gorgethetove valt. Egy felirat, ami
   ezt okozza, tobbet ront, mint amennyit magyaraz: a szoveg atkerult a menupont
   `title`-jebe (`modules.js`), es ott azt is kimondja, MELYIK berendezes
   hianyzik - a savban ennyi ugysem fert volna el. */
.nav-item.no-data{opacity:.55}

/* A kereso a tablazat folott. Legordulovel is valaszthato (datalist), mert nem
   biztos, hogy a felhasznalo fejbol tudja a ceg pontos nevet. */
.matrix-toolbar{display:flex;align-items:center;gap:14px;max-width:1180px;margin-bottom:12px}
.tenant-picker{position:relative;flex:0 1 340px}
.tenant-picker input{width:100%;height:38px;padding:0 34px 0 12px;border:1px solid var(--hairline);border-radius:9px;
  font:13px Inter,system-ui,sans-serif;background:var(--surface);color:var(--ink)}
.tenant-picker input:focus{outline:0;border-color:#0ba8a4;box-shadow:0 0 0 3px #0ba8a433}
.tenant-picker button{position:absolute;top:1px;right:1px;width:32px;height:36px;border:0;border-radius:0 8px 8px 0;
  background:transparent;color:var(--ink-3);font-size:13px;cursor:pointer}
.tenant-picker button:hover{background:var(--surface-3);color:var(--ink)}
.tenant-picker ul{position:absolute;z-index:20;top:calc(100% + 4px);left:0;right:0;max-height:280px;overflow-y:auto;
  margin:0;padding:5px;list-style:none;background:var(--surface);border:1px solid var(--hairline);border-radius:10px;
  box-shadow:0 14px 34px #10253320}
.tenant-picker ul[hidden]{display:none}
.tenant-picker li{padding:8px 10px;border-radius:7px;font-size:13px;color:var(--ink);cursor:pointer}
.tenant-picker li:hover,.tenant-picker li.active{background:var(--hairline-2);color:var(--live-ink)}
.tenant-picker li.muted{color:var(--ink-3);cursor:default}
.tenant-picker li.muted:hover{background:transparent;color:var(--ink-3)}
.matrix-toolbar #tenant-count{color:var(--ink-3);font-size:12px}

/* --- Jelentkezesek --------------------------------------------------------- */
.request-list{display:grid;gap:12px;max-width:1180px}
.request-card{background:var(--surface);border:1px solid var(--hairline);border-radius:12px;padding:16px 18px}
.request-card.approved,.request-card.rejected{opacity:.72}
.request-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding-bottom:11px;margin-bottom:11px;border-bottom:1px solid var(--hairline-2)}
.request-card>header b{display:block;font-size:15px;color:var(--ink)}
.request-card>header small{display:block;margin-top:3px;font-size:12px;color:var(--ink-3)}
.request-status{flex:none;padding:4px 10px;border-radius:999px;font-size:11px;font-weight:700;
  text-transform:uppercase;letter-spacing:.3px}
.request-status.new{background:var(--warn-tint);color:var(--warn-ink)}
.request-status.approved{background:var(--ok-tint);color:var(--ok-ink)}
.request-status.rejected{background:var(--hairline-2);color:var(--bad-ink)}
.request-card dl{display:grid;grid-template-columns:auto 1fr;gap:5px 14px;margin:0;font-size:12.5px}
.request-card dt{color:var(--ink-3)}
.request-card dd{margin:0;color:var(--ink)}
.request-note{margin:11px 0 0;padding:9px 12px;border-radius:8px;background:var(--ground);color:var(--ink-2);
  font-size:12.5px;line-height:1.55}
.request-modules{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.request-module{padding:4px 10px;border-radius:999px;background:var(--hairline-2);color:var(--live-ink);font-size:11.5px;font-weight:600}
.request-module.muted{background:var(--hairline-2);color:var(--ink-3);font-weight:400}
.request-actions{display:flex;align-items:center;gap:9px;margin-top:14px;padding-top:13px;border-top:1px solid var(--hairline-2)}
.request-actions input{width:76px;height:34px;padding:0 9px;border:1px solid var(--hairline);border-radius:8px;
  font:12.5px Inter,system-ui,sans-serif}
.request-actions button{padding:9px 16px;border:1px solid transparent;border-radius:8px;
  font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer}
.request-actions .primary{background:#0ba8a4;color:#fff}
.request-actions .primary:hover{background:var(--live)}
.request-actions .ghost{background:var(--surface);border-color:var(--hairline);color:var(--ink-2)}
.request-actions .ghost:hover{background:var(--surface-3)}
.request-decision{margin-top:12px;padding-top:11px;border-top:1px solid var(--hairline-2);font-size:12.5px;color:var(--ink-2)}
.request-decision b{color:var(--ink)}
.request-decision span{margin-left:8px;color:var(--ink-3);font-size:11.5px}
.request-decision small{display:block;margin-top:4px}
.request-heading{margin:20px 0 4px;font-size:12px;font-weight:700;letter-spacing:.4px;
  text-transform:uppercase;color:var(--ink-3)}

/* A kapu kapcsoloja a matrix folott. */
.policy-row{display:flex;align-items:center;gap:16px;max-width:1180px;margin-bottom:12px}
.policy-row .settings-check{flex:none}
.policy-row p{margin:0;font-size:12px;color:var(--ink-3);line-height:1.5}

/* --- Jogosultsag-matrix ----------------------------------------------------
   A jog a sor, a szerep az oszlop. Forditva 17 oszlop lenne vizszintes
   gorgetessel; igy kilenc oszlop elfer, es a jogok modul-besorolasa termeszetes
   szakaszcimeket ad. */
.permission-matrix th.corner,.permission-matrix th.permission{min-width:240px}
.permission-matrix thead th span{display:block}
.permission-matrix thead th small{display:block;margin-top:2px;font-size:9.5px;font-weight:500;
  color:var(--ink-3);text-transform:none;letter-spacing:0}
.permission-matrix th.permission{position:sticky;left:0;z-index:1;text-align:left;background:var(--surface);
  box-shadow:1px 0 0 #eef2f5;padding:9px 12px}
.permission-matrix th.permission b{display:block;font-size:12.5px;font-weight:600;color:var(--ink)}
.permission-matrix th.permission small{display:block;margin-top:1px;font-size:10.5px;color:var(--ink-3);
  font-family:ui-monospace,Consolas,monospace}
.permission-matrix .threshold{display:inline-block;margin-top:4px;padding:2px 7px;border-radius:999px;
  background:var(--hairline-2);color:var(--ink-2);font-size:9.5px;font-style:normal;font-weight:700;
  letter-spacing:.3px;text-transform:uppercase;cursor:help}
.permission-matrix tr.module-band th{position:sticky;left:0;background:var(--surface-3);color:var(--ink-2);
  text-align:left;font-size:11px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;
  padding:7px 12px;border-top:1px solid var(--hairline)}
/* A vedett cella latszik, de nem kapcsolhato: enelkul ket kattintassal ki
   lehetne zarni mindenkit a feluletrol. */
.permission-matrix td.locked{background:var(--ground)}
.permission-matrix td.locked .cell-toggle input{opacity:.6;cursor:not-allowed}

/* --- Becsukhato kartya -----------------------------------------------------
   A matrix 18x9: hasznos, ha epp szerepkort tervezel, utban van, ha csak egy
   felhasznalot keresel. Alapbol csukva, a nyitottsaga megjegyzodik. */
.settings-card.collapsible{padding:0;max-width:1180px;overflow:hidden}
.card-toggle{display:flex;align-items:center;gap:12px;width:100%;padding:15px 18px;border:0;
  background:transparent;cursor:pointer;text-align:left;font:inherit}
.card-toggle:hover{background:var(--ground)}
.card-caret{display:grid;place-items:center;width:22px;height:22px;border-radius:6px;background:var(--hairline-2);
  color:var(--ink-2);font-size:14px;transition:transform .16s ease}
.collapsible.open .card-caret{transform:rotate(90deg)}
.card-toggle b{display:block;font-size:15px;color:var(--ink)}
.card-toggle small{display:block;margin-top:2px;font-size:12px;color:var(--ink-3)}
.card-help{margin:0;padding:0 18px 14px;font-size:12.5px;color:var(--ink-2);line-height:1.6;
  border-bottom:1px solid var(--hairline-2)}
#matrix-body .matrix-wrap{border:0;border-radius:0}

/* --- Felhasznalo-tabla: rendezheto es oszloponkent szurheto ---------------- */
.permission-users{margin-top:18px;max-width:1180px}
.permission-users .matrix-toolbar{align-items:baseline}
.permission-users .section-title{margin:0;font-size:15px;color:var(--ink)}
.link-button{border:0;background:0;padding:0;color:var(--live-ink);font:13px Inter,system-ui,sans-serif;
  cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.user-table-wrap{border:1px solid var(--hairline);border-radius:13px;overflow:hidden;background:var(--surface)}
.user-table{width:100%;border-collapse:separate;border-spacing:0;font:13px Inter,system-ui,sans-serif}
.user-table thead th{padding:6px 8px 6px 12px;background:var(--ground);border-bottom:1px solid var(--hairline);
  text-align:left;white-space:nowrap}
.user-table tbody td{padding:10px 12px;border-bottom:1px solid var(--hairline-2);color:var(--ink);vertical-align:middle}
.user-table tbody tr:last-child td{border-bottom:0}
.user-table tbody tr:hover td{background:var(--surface-2)}
.user-table td.right{text-align:right}
.user-table .empty-row{padding:22px;text-align:center;color:var(--ink-3)}
.user-table .sort{border:0;background:0;padding:2px 4px;font:600 11px Inter,system-ui,sans-serif;
  color:var(--ink-2);text-transform:uppercase;letter-spacing:.35px;cursor:pointer}
.user-table .sort:hover,.user-table .sort.active{color:var(--ink)}
.user-table .sort i{font-style:normal;font-size:9px;color:#0ba8a4}
.user-table .filter{margin-left:2px;padding:2px 5px;border:0;border-radius:5px;background:0;
  color:var(--ink-3);font-size:11px;cursor:pointer}
.user-table .filter:hover{background:var(--hairline);color:var(--ink-2)}
.user-table .filter.filtered{background:#0ba8a4;color:#fff}
/* Az allapot nem cimke, hanem gomb: innen lehet kizarni es visszaengedni. */
.user-table .user-status{padding:5px 12px;border:1px solid transparent;border-radius:999px;
  font:700 11px Inter,system-ui,sans-serif;cursor:pointer;transition:filter .14s ease}
.user-table .user-status.active{background:var(--ok-tint);color:var(--ok-ink);border-color:var(--hairline)}
.user-table .user-status:not(.active){background:var(--hairline-2);color:var(--ink-3);border-color:var(--hairline)}
.user-table .user-status:hover{filter:brightness(.96)}
.user-table .user-status:disabled{opacity:.6;cursor:progress}
.user-table .secondary{padding:6px 13px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface);
  color:var(--ink-2);font:600 12px Inter,system-ui,sans-serif;cursor:pointer}
.user-table .secondary:hover{background:var(--surface-3)}

/* --- Oszlopszuro (tablazatkezelo-szeru lenyilo) ---------------------------- */
.column-filter{position:absolute;z-index:40;width:236px;max-height:320px;overflow-y:auto;padding:8px;
  background:var(--surface);border:1px solid var(--hairline);border-radius:10px;box-shadow:0 14px 34px #10253320}
.column-filter[hidden]{display:none}
.column-filter label{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:6px;
  font-size:12.5px;color:var(--ink);cursor:pointer}
.column-filter label:hover{background:var(--surface-3)}
.column-filter input{accent-color:#0ba8a4;width:15px;height:15px}
.column-filter .filter-all{border-bottom:1px solid var(--hairline-2);border-radius:0;margin-bottom:4px;padding-bottom:8px}

/* --- A felhasznaloi jog-parbeszed csuszkakkal ------------------------------
   Ugyanaz a kapcsolo, mint a matrixban es a levelezes-lapon: a felulet ne
   hasznaljon ket kulonbozo format ugyanarra a ki/be dontesre. */
#user-permission-list .feature,#permission-list .feature{display:flex;align-items:flex-start;gap:12px;
  padding:10px 12px;border:1px solid var(--hairline);border-radius:10px;background:var(--surface-2);margin-bottom:7px}
#user-permission-list .feature:hover,#permission-list .feature:hover{border-color:var(--hairline)}
#user-permission-list .feature input[type="checkbox"],
#permission-list .feature input[type="checkbox"]{appearance:none;-webkit-appearance:none;flex:none;margin:1px 0 0;
  position:relative;width:38px;height:22px;border:0;border-radius:999px;background:var(--hairline);cursor:pointer;
  transition:background .18s ease}
#user-permission-list .feature input[type="checkbox"]::after,
#permission-list .feature input[type="checkbox"]::after{content:'';position:absolute;top:3px;left:3px;
  width:16px;height:16px;border-radius:50%;background:var(--surface);box-shadow:0 1px 3px #00000033;
  transition:transform .18s ease}
#user-permission-list .feature input[type="checkbox"]:checked,
#permission-list .feature input[type="checkbox"]:checked{background:#0ba8a4}
#user-permission-list .feature input[type="checkbox"]:checked::after,
#permission-list .feature input[type="checkbox"]:checked::after{transform:translateX(16px)}
/* A szerepkorbol orokolt jog le van tiltva: latszik, hogy megvan, de nem itt
   kell allitani - a szerepkor-matrixban. */
#user-permission-list .feature input[type="checkbox"]:disabled{opacity:.45;cursor:not-allowed}
#user-permission-list .feature b,#permission-list .feature b{display:block;font-size:12.5px;color:var(--ink)}
#user-permission-list .feature small,#permission-list .feature small{display:block;margin-top:2px;
  font-size:11.5px;color:var(--ink-3);line-height:1.45}
/* A sajat sor allapota nem gomb: fel sem kinaljuk a kattintast, amit a szerver
   ugyis elutasitana. */
.user-table .user-status.self{cursor:default;opacity:.75}

/* --- Jogosultsag-parbeszedek modernizalasa ---------------------------------
   Ket dolog tette regiesse. Egy: a cimsor `Georgia, serif` volt, ami elutott a
   felulet tobbi reszetol. Ketto: maga a `<dialog>` gorgetett, ezert a
   gorgetosav a lekerekitett sarkon ult, es a jobb oldal szogletesre vagta az
   ablakot. A gorgetes ezert atkerul egy belso savba: a fejlec es a gombsor
   allva marad, a hosszu joglista alattuk fut. */
#user-permissions-dialog,#role-permissions-dialog{overflow:hidden;border-radius:16px;
  width:min(860px,94vw);max-height:min(86vh,760px);padding:0}
#user-permissions-dialog>form,#role-permissions-dialog>form{display:flex;flex-direction:column;
  max-height:inherit;min-height:0;width:100%}
#user-permissions-dialog .modal-header,#role-permissions-dialog .modal-header{flex:none;
  padding:20px 24px 15px;align-items:flex-start}
#user-permissions-dialog h2,#role-permissions-dialog h2,
#user-permissions-dialog h3,#role-permissions-dialog h3{
  font-family:Inter,-apple-system,"Segoe UI",Roboto,system-ui,sans-serif;
  font-weight:650;letter-spacing:-.2px;color:var(--ink);margin:2px 0 0}
#user-permissions-dialog h2,#role-permissions-dialog h2{font-size:19px}
#user-permissions-dialog .eyebrow,#role-permissions-dialog .eyebrow{margin:0;font-size:10.5px;
  font-weight:700;letter-spacing:.6px;color:var(--ink-3)}
#user-permissions-dialog .capture-status,#role-permissions-dialog .capture-status,
#user-permissions-dialog>form>p,#role-permissions-dialog>form>p{flex:none;margin:0;
  padding:0 24px 14px;font-size:12.5px;color:var(--ink-2);line-height:1.6}
/* A szerepkor-valaszto: sajat nyillal, a tobbi mezovel azonos magassagban. */
#user-permissions-dialog>form>label{flex:none;display:grid;gap:6px;padding:0 24px 16px;
  font:600 11.5px Inter,system-ui,sans-serif;color:var(--ink-2);text-transform:uppercase;letter-spacing:.35px}
#user-permissions-dialog select{appearance:none;-webkit-appearance:none;height:38px;padding:0 34px 0 12px;
  border:1px solid var(--hairline);border-radius:9px;background:var(--surface-2);color:var(--ink);
  font:400 13px Inter,system-ui,sans-serif;text-transform:none;letter-spacing:0;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236b7d88' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 13px center}
#user-permissions-dialog select:focus{outline:0;border-color:#0ba8a4;box-shadow:0 0 0 3px #0ba8a433}
/* A gorgeto sav: csak a joglista mozog. */
#user-permission-list,#permission-list{flex:1 1 auto;min-height:0;overflow-y:auto;
  padding:0 24px 4px;margin:0}
#user-permission-list::-webkit-scrollbar,#permission-list::-webkit-scrollbar{width:9px}
#user-permission-list::-webkit-scrollbar-thumb,#permission-list::-webkit-scrollbar-thumb{
  background:var(--hairline);border-radius:999px;border:2px solid var(--surface-3)}
#user-permission-list::-webkit-scrollbar-thumb:hover,#permission-list::-webkit-scrollbar-thumb:hover{background:#b6c6cf}
#user-permission-list .section-title,#permission-list .section-title{position:sticky;top:0;z-index:1;
  margin:0 0 8px;padding:10px 0 6px;background:var(--surface);font-size:11px;font-weight:700;letter-spacing:.45px;
  text-transform:uppercase;color:var(--ink-3)}
#user-permission-list .wide+.wide,#permission-list .wide+.wide{margin-top:12px}
/* A gombsor allva marad a lista alatt. Ket alakban fordul elo a feluleten:
   `<menu>` es `.modal-actions` - mindketto ugyanugy viselkedjen. */
#user-permissions-dialog .error,#role-permissions-dialog .error{flex:none;margin:0;padding:0 24px;
  font-size:12.5px;color:var(--bad-ink);min-height:0}
#user-permissions-dialog .modal-actions,#role-permissions-dialog .modal-actions,
#user-permissions-dialog menu,#role-permissions-dialog menu{flex:none;display:flex;justify-content:flex-end;
  gap:10px;margin:0;padding:15px 24px;border-top:1px solid var(--hairline-2);background:var(--surface-2)}
#user-permissions-dialog .modal-actions button,#role-permissions-dialog .modal-actions button,
#user-permissions-dialog menu button,#role-permissions-dialog menu button{padding:10px 18px;
  border:1px solid transparent;border-radius:9px;font:600 13px Inter,system-ui,sans-serif;cursor:pointer}
#user-permissions-dialog .modal-actions .primary,#role-permissions-dialog .modal-actions .primary,
#user-permissions-dialog menu .primary,#role-permissions-dialog menu .primary{background:#0ba8a4;color:#fff}
#user-permissions-dialog .modal-actions .primary:hover,#role-permissions-dialog .modal-actions .primary:hover,
#user-permissions-dialog menu .primary:hover,#role-permissions-dialog menu .primary:hover{background:var(--live)}
#user-permissions-dialog .modal-actions .secondary,#role-permissions-dialog .modal-actions .secondary,
#user-permissions-dialog menu .secondary,#role-permissions-dialog menu .secondary{background:var(--surface);
  border-color:var(--hairline);color:var(--ink-2)}
#user-permissions-dialog .modal-actions .secondary:hover,#role-permissions-dialog .modal-actions .secondary:hover,
#user-permissions-dialog menu .secondary:hover,#role-permissions-dialog menu .secondary:hover{background:var(--surface-3)}
#user-permissions-dialog .icon,#role-permissions-dialog .icon{border:0;background:0;color:var(--ink-3);
  font-size:20px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:7px}
#user-permissions-dialog .icon:hover,#role-permissions-dialog .icon:hover{background:var(--surface-3);color:var(--ink)}

/* --- Felhasznalok: nevtar ES belepes-allapot ------------------------------- */
#access-page .toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
#user-search{flex:0 1 330px;height:36px;padding:0 12px;border:1px solid var(--hairline);border-radius:9px;
  font:13px Inter,system-ui,sans-serif;background:var(--surface);color:var(--ink)}
#user-search:focus{outline:0;border-color:#0ba8a4;box-shadow:0 0 0 3px #0ba8a433}
.users-with-login td small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink-3);line-height:1.4}
.users-with-login td b{font-size:13px;color:var(--ink)}
/* A belepes-allapot sajat szinnel: a "nincs belepese" nem hiba, hanem hianyzo
   lepes; a "zarolt" viszont mar akadaly, amit fel kell oldani. */
.login-state{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:700}
.login-state.ok{background:var(--ok-tint);color:var(--ok-ink)}
.login-state.none{background:var(--hairline-2);color:var(--ink-3)}
.login-state.pending{background:var(--warn-tint);color:var(--warn-ink)}
.login-state.locked{background:var(--bad-tint);color:var(--bad-ink)}
.login-state.blocked{background:var(--hairline-2);color:var(--ink-3)}
/* Magyarazo szoveg a parbeszed fejlecben, a cim mellett jobbra.

   Az urlapmezok kozott allva megtorte a ket oszlopot: a szem a cimkek fuggoleges
   vonalat koveti, es egy teljes szelessegu bekezdes ott ugy hat, mintha uj
   szakasz kezdodne. A fejlecben viszont ott van, ahol a kerdesre valaszol -
   "mi ez az ablak?" -, es nem all utban. */
.modal-header .modal-note{flex:1 1 240px;max-width:330px;margin:0;align-self:center;
  font-size:12px;line-height:1.5;color:var(--ink-3);text-align:right}
.modal-header .modal-note[hidden]{display:none}
@media(max-width:640px){.modal-header{flex-wrap:wrap}
  .modal-header .modal-note{order:3;flex-basis:100%;max-width:none;text-align:left;margin-top:8px}}
/* A `.form-grid label` sajat `display:grid`-je erosebb, mint a bongeszo
   `[hidden]{display:none}` szabalya - enelkul a modositaskor elrejtett mezok
   ott maradnanak a kepernyon. */
#user-dialog .form-grid label[hidden],#user-dialog .form-grid p[hidden]{display:none}
/* A felhasznalohoz rendelt kartyak. Monospace, mert szamsorokat egymas alatt
   igy lehet osszehasonlitani - egy proporcionalis betuvel a 0 es a 8 kozott a
   szem elcsuszik. */
.user-cards{white-space:normal}
.user-card{display:inline-block;margin:0 4px 3px 0;padding:2px 7px;border-radius:6px;
  background:var(--hairline-2);color:var(--ink-2);font:600 11px ui-monospace,Consolas,monospace;letter-spacing:.2px}
.user-card.off{background:var(--surface-3);color:var(--ink-3);text-decoration:line-through}
/* Az azonos nev nem hiba, csak figyelmeztetes: nezd meg a sor tobbi adatat. */
.name-shared{display:inline-block;margin-left:7px;padding:1px 7px;border-radius:999px;
  background:var(--warn-tint);color:var(--warn-ink);font-size:10.5px;font-weight:700;vertical-align:middle}
.user-actions button[disabled]{opacity:.45;cursor:not-allowed}
.user-actions button[disabled]:hover{background:var(--surface)}
/* A muveleti oszlop balra zar, ahogy a fejlece is. Jobbra zarva a gombok
   szama szerint mindegyik sorban mashol kezdodtek, tehat a szem nem talalt
   fuggoleges vonalat - egy negy gombos es egy ket gombos sor kozott a
   "Modositas" ket kulonbozo helyen allt. Balra zarva a gombok egymas alatt
   kezdodnek, es a fejleccel is egy vonalban vannak. */
/* A muveletek-cella maradjon TABLAZATCELLA.

   Amig `display:flex` allt rajta, a bongeszo kiemelte a tablazat cellai kozul
   (nevtelen cellat gyartott korule), es ezzel elvesztette a `vertical-align:
   middle`-t. A gomb igy a cella TETEJEN ult, mig a szomszed "Statusz" cella
   tartalma kozepen - a ket gomb 4-6 px-cel elcsuszott egymastol, es minel
   magasabb volt a sor, annal jobban. Az `align-items` itt nem segit: a
   flex-doboz maga is csak akkora, mint a tartalma, tehat nincs mit kozepre
   tenni benne.

   A gombok kozotti tavolsagot ezert nem `gap` tartja, hanem margo - az
   ugyfel-tablazatban ket gomb all egymas mellett, es sor vegen ott is tordel. */
.user-actions{vertical-align:middle}
.user-actions > * + *{margin-left:6px}
.user-actions button{padding:6px 12px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface);
  color:var(--ink-2);font:600 12px Inter,system-ui,sans-serif;cursor:pointer;white-space:nowrap}
.user-actions button:hover{background:var(--surface-3)}
.user-actions button.primary{background:#0ba8a4;border-color:#0ba8a4;color:#fff}
.user-actions button.primary:hover{background:var(--live)}
/* A szakaszcim es a hozza tartozo muvelet egy sorban: a toltesi jogosultsag
   kiadasa ahhoz a listahoz tartozik, nem a lap fejlecehez. */
/* A gomb es az alatta levo lista koze kell levegő: nelkule a `+ Jogosultság
   kiadása` rátapad a szaggatott keretre, es egy dobozba tett gombnak latszik -
   mintha az ures allapothoz tartozna, nem a szakasz cimehez. */
.section-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:26px 0 13px}
.section-head .section-title{margin:0}
.section-head .section-hint{color:var(--ink-3);font-size:12px}
.section-head button{padding:7px 14px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface);
  color:var(--ink-2);font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer}
.section-head button:hover{background:var(--surface-3)}

/* Tenantok. Ugyanaz a tablazat-nyelv, mint a Felhasznalok lapon: a `.user-table`
   adja a keretet, itt csak a ket-harom soros cellak es a torles-gomb szinei. */
.tenant-table td b{font-size:13px;color:var(--ink)}
.tenant-table td small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink-3);line-height:1.4}
.tenant-table td{vertical-align:top}
.tenant-table td.user-actions{vertical-align:middle}
.tenant-table .tenant-live{color:var(--ok-ink);font-weight:600}
/* A nyugalmi allapot nem hiba, csak nem esemeny: halvanyabb, mint a folyo
   toltes, de ott van - egy ures cella azt sugallna, hogy hianyzik az adat. */
.tenant-table .tenant-idle{color:var(--ink-3);font-weight:600}
.tenant-table .user-status{margin-bottom:2px}
.tenant-table .user-actions button.danger{border-color:var(--hairline);color:var(--bad-ink)}
.tenant-table .user-actions button.danger:hover{background:var(--ground)}

/* Szuk kepernyon a modern tabla vizszintesen gorgetheto, nem esik kartyakra.
   A `data-label`-es kartyanezet az orokolt `log-table user-table` parosnal maradt:
   ott minden cellanak van felirata, itt nem lenne, es ures oszlop maradna helyette. */
.user-table-wrap{overflow-x:auto}
.user-table{min-width:760px}

/* --- Telephely-kartya --------------------------------------------------------

   A tipus (Munkahely, Flotta, Nyilvanos) eddig a nev FOLOTT allt onallo sorban,
   ott, ahol a szem a kartya cimet keresi - igy a "Munkahely" latszott cimnek, a
   telephely neve pedig alaruhanak. Most a nev az elso, es a tipus a nev utan all
   jelolokent, ahol ertelmezni lehet: ez a Velence telephely, ami munkahelyi. A
   nev folott maradt egy halvany "Telephely" felirat, ami megmondja, mit latunk -
   a lapon toltopont-kartyak is vannak, es a ketto hasonlit egymasra. */
/* SOR, nem kartya. Egy 280x520 pixeles kartyabol negy fert ki egy kepernyore;
   nyolc telephely mar ket kepernyo volt. A sor annyit mutat, amibol fel lehet
   ismerni, a tobbit egy kattintasra adja - igy tiz telephely is elfer, es a
   kivalasztott megis teljesen latszik. */
.site-row{border:1px solid var(--hairline);border-radius:11px;background:var(--surface);overflow:hidden}
.site-row.is-open{border-color:var(--accent);box-shadow:0 8px 22px rgba(16,37,51,.07)}
/* A fejlec MAGA a kapcsolo: barhova esik a kattintas a soron belul, nyilik.
   Gombkent, hogy billentyuzetrol es felolvasoval is ugyanaz legyen. */
.site-row-head{display:flex;align-items:center;gap:12px;width:100%;padding:12px 15px;border:0;
  background:transparent;font:inherit;color:inherit;text-align:left;cursor:pointer}
.site-row-head:hover{background:var(--surface-3)}
.site-caret{flex:none;width:14px;color:var(--ink-2);font-size:13px;line-height:1;transition:transform .16s ease}
.site-row.is-open .site-caret{transform:rotate(90deg)}
.site-row-name{flex:1 1 auto;min-width:0}
.site-row-name b{display:block;font-size:14px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.site-row-name small{display:block;margin-top:2px;color:var(--ink-3);font-size:11.5px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* A tipus-jelolo a `.station-card .type`-bol jon, de az arra a kartyara van
   kotve - itt sajat szabaly kell, kulonben csak csupasz szoveg marad.
   A rogzitett szelesseg nem szepseg: a lista attol lesz olvashato, hogy a
   jelolok es a szamok EGY OSZLOPBAN allnak, nem a nev hosszatol fuggo helyen. */
.site-row-head .type{position:static;flex:none;box-sizing:content-box;min-width:88px;
  display:inline-block;text-align:center;background:var(--hairline-2);color:var(--live-ink);
  padding:4px 9px;border-radius:4px;font-size:10.5px;font-weight:700}
.site-row-facts{display:flex;flex:none;gap:10px;color:var(--ink-2);font-size:11.5px;
  white-space:nowrap;font-variant-numeric:tabular-nums}
.site-row-facts span{display:inline-block;text-align:right}
.site-row-facts span:nth-child(1){min-width:82px}
.site-row-facts span:nth-child(2){min-width:62px}
.site-row-facts span:nth-child(3){min-width:78px}
.site-row-facts .is-quiet{color:var(--ink-3)}
/* A reszlet a soron BELUL nyilik: nem visz masik lapra, es nem takar el semmit. */
.site-row-body{display:grid;gap:14px;padding:4px 15px 15px 41px;border-top:1px solid var(--hairline-2)}
.site-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:11px 18px;margin:12px 0 0}
.site-facts div{display:grid;gap:2px;min-width:0}
.site-facts dt{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:700}
.site-facts dd{margin:0;font-size:12.5px;color:var(--ink)}
.site-row-body footer{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.site-row-body footer button{padding:8px 15px;border:1px solid var(--hairline);border-radius:8px;
  background:var(--surface);color:var(--ink-2);font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer}
.site-row-body footer button:hover{background:var(--surface-3)}
.site-row-body footer button.danger{border-color:var(--hairline);color:var(--bad-ink)}
.site-row-body footer button.danger:hover{background:var(--ground)}
/* Szuk kepernyon a szamok a nev ala kerulnek: egy sorba erolteve a nev tunne el. */
@media(max-width:760px){
  .site-row-head{flex-wrap:wrap}
  .site-row-facts{flex-basis:100%;padding-left:26px}
  .site-row-body{padding-left:15px}
}

/* A Tenant alatti ket sor: mindig latszo behuzas, nem kinyilo csoport.
   A harmadik szintu kapcsolo az oldalsavban mar zsufolt lenne. */
.nav-submenu .nav-subgroup{margin-left:18px;padding-left:8px;border-left:1px solid var(--hairline)}
.nav-submenu .nav-subgroup .nav-item{padding:8px 11px;font-size:.95em}
/* A Gatewayek lapja: felul az osszeallito gombja es a parositasra varo gepek,
   alatta a telephelyek tablazata - soronkent allapot es teendo. A reszletek
   (kartyak) soronkent nyilnak, hogy tiz telephely is egy kepernyo maradjon. */
.gateway-table-wrap{overflow-x:auto}
.gateway-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--hairline);border-radius:11px;overflow:hidden}
.gateway-table th{text-align:left;font-size:12px;font-weight:600;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--hairline)}
.gateway-table td{padding:10px 12px;border-bottom:1px solid var(--hairline-2);vertical-align:top;font-size:13.5px}
.gateway-table tr.gateway-detail td{background:var(--surface-3);padding:14px}
.gateway-table .gw-teendo{max-width:36ch;color:var(--ink-2)}
.gateway-table .gw-actions{text-align:right;white-space:nowrap}
.gateway-table .gw-detail-actions{margin-top:10px}
.gw-badge{display:inline-block;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap;
  background:var(--hairline-2);color:var(--ink-2)}
.gw-badge.is-ok{background:var(--live-tint);color:var(--live)}
.gw-badge.is-warn{background:var(--warn-tint);color:var(--warn)}
.gw-badge.is-bad{background:var(--bad-tint);color:var(--bad)}
.gateway-devices{margin:0 0 18px;padding:14px;border:1px dashed var(--hairline);border-radius:12px}
.gateway-devices .gateway-devices-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 10px}
/* Az osszeallito: az ablak magassaga ALLANDO. Egy sor bekapcsolasa eddig
   megnyujtotta az ablakot, es a gombok elugrottak a kez alol; a felhasznalo
   kerte, hogy ne tegye. Ezert a kartya magasabb, a tartalom belul gorog, a
   fejlec es a gombsor a helyen marad. */
#gateway-dialog{height:min(90vh,940px)}
#gateway-dialog #gateway-form{display:flex;flex-direction:column;height:100%}
#gateway-dialog #gateway-form>.form-grid{flex:1;min-height:0;overflow:auto;align-content:start}
#gateway-dialog #gateway-form>.modal-header,#gateway-dialog #gateway-form>.modal-actions,#gateway-dialog #gateway-form>.error{flex:none}
/* A mezok nem ernek ossze: a legordulo a leghosszabb opcio szelessegere nyilt
   volna, es atlogott a szomszed cellaja ala - a nyila is eltunt alatta. A racs
   cellaja dont, nem a tartalom. */
#gateway-dialog .meter-row{gap:16px}
#gateway-dialog .meter-row select,#gateway-dialog .meter-row input:not([type=checkbox]){width:100%;min-width:0;max-width:100%;box-sizing:border-box}
/* A talalt eszkozok panelje az osszeallitoban: a gateway kereseset a felho
   kerte, az eredmeny itt all, es egy gombbal a sorba irhato. */
#gateway-dialog .scan-panel{border:1px dashed var(--hairline);border-radius:10px;padding:12px 14px;background:var(--surface-3)}
#gateway-dialog .scan-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
#gateway-dialog .scan-head b{font-size:12.5px;color:var(--ink)}
#gateway-dialog .scan-head small{color:var(--muted);font-weight:400}
#gateway-dialog .scan-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 0;border-top:1px solid var(--hairline-2);font-weight:400}
#gateway-dialog .scan-item:first-of-type{border-top:0}
#gateway-dialog .scan-item .scan-ip{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:var(--ink-2)}
#gateway-dialog .scan-item .scan-meta{font-size:11.5px;color:var(--muted)}
#gateway-dialog .scan-item button.mini{padding:4px 10px;font-size:12px;border-radius:7px}
#gateway-dialog .scan-item .is-used{font-size:11.5px;color:var(--live)}
/* Az osszeallito kapcsoloi csuszkak (ugyanaz a rajz, mint a `.kapcsolo`), tokenekbol.
   Kikapcsolt sorban csak a csuszka es a nev marad. */
#gateway-dialog .row-toggle{display:flex;align-items:center;gap:10px;min-height:24px;cursor:pointer}
#gateway-dialog .row-toggle input[type=checkbox]{appearance:none;-webkit-appearance:none;position:relative;flex:none;
  margin:0;width:42px;height:24px;border:0;border-radius:999px;background:var(--hairline);cursor:pointer;transition:background .18s ease}
#gateway-dialog .row-toggle input[type=checkbox]::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;
  border-radius:50%;background:var(--surface);box-shadow:0 1px 3px rgba(0,0,0,.2);transition:transform .18s ease}
#gateway-dialog .row-toggle input[type=checkbox]:checked{background:var(--live)}
#gateway-dialog .row-toggle input[type=checkbox]:checked::after{transform:translateX(18px)}
#gateway-dialog .meter-row.is-off>label:not(:first-child){display:none}
#gateway-dialog .meter-row.is-off>label:first-child>select{display:none}
#gateway-dialog .meter-row.is-off+.capture-status{display:none}
#gateway-dialog .meter-row.is-off{grid-template-columns:1fr;opacity:.8}
/* A mero allapota a soraban: elo, regi, hiba, meg semmi. Tokenekbol. */
.gateway-card .meter-state{margin-left:8px;font-size:11px;color:var(--muted);white-space:nowrap}
.gateway-card .meter-state.is-live{color:var(--live)}
.gateway-card .meter-state.is-bad{color:var(--bad)}

/* Egy meroforras egy sorban: eszkoz, cim, port. Kulon sorokban a harom mezo ugy
   nezett ki, mint harom fuggetlen beallitas - pedig egyutt irnak le egy merot. */
#gateway-dialog .meter-row{display:grid;grid-template-columns:1.3fr 2fr .7fr;gap:14px;
  align-items:end}
/* Nemely forras negy mezot ker: a zonavezerlo cim mellett rendszerazonositot es
   jelszot, a patron pedig fokozatszamot es teljesitmenyt. Sajat racs, hogy a
   mezok ne szoruljanak ossze a haromoszlopos sorban. */
#gateway-dialog .meter-row-4{grid-template-columns:1.3fr 1.5fr 1fr 1fr}
/* Az `fr` alapbol nem megy a tartalom ala: a hosszabb legordulo-szoveg
   szelesebbre huzta a sajat oszlopat, es a ket negymezos sor oszlopai
   egymashoz kepest elcsusztak. A `min-width:0` engedi, hogy az aranyok
   dontsenek - igy a mezok egymas alatt allnak. */
#gateway-dialog .meter-row>label{min-width:0}
/* Az igazolas-pipa egy sorban a mezokkel, alul igazitva, mint a tobbi cimke. */
#gateway-dialog .meter-verified{display:flex;align-items:center;gap:8px;padding-bottom:10px;
  font-size:.85rem;color:var(--muted)}
#gateway-dialog .meter-verified input[type=checkbox]{width:auto;margin:0}
@media(max-width:640px){#gateway-dialog .meter-row{grid-template-columns:1fr}
  #gateway-dialog .meter-row-4{grid-template-columns:1fr}}

/* --- Gateway-kartya a "Mérők és gatewayek" ablakban --------------------------

   Egy mero egy sorban: forras, eszkoz, cim, port. Racsban, hogy a portok egymas
   alatt alljanak - igy ranezesre latszik, ha az egyik kilog. */
.gateway-card{padding:15px 17px}
.gateway-card .gateway-head{display:flex;align-items:center;justify-content:space-between;
  gap:12px;margin-bottom:9px}
.gateway-card .gateway-head b{font-size:14px;color:var(--ink)}
.gateway-card .gateway-head .online{color:var(--ok-ink);font-size:11.5px;font-weight:700}
.gateway-card .gateway-head .offline{color:var(--ink-3);font-size:11.5px;font-weight:700}
.gateway-card .meter-line{display:grid;grid-template-columns:1.2fr 1fr 1.4fr auto;gap:10px;
  align-items:baseline;padding:6px 0;border-top:1px solid var(--hairline-2);font-size:12.5px;color:var(--ink-2)}
.gateway-card .meter-line b{color:var(--ink);font-size:12.5px}
.gateway-card .meter-line .meter-host{font-family:ui-monospace,Consolas,monospace}
/* Igazolas-jelolo az inverter neve mellett: halvany, ha nincs; a platform
   zoldje, ha van. Tokenekbol, hogy a sotet mod is kovesse. */
.gateway-card .meter-verified-state{margin-left:8px;font-size:11px;color:var(--muted)}
.gateway-card .meter-verified-state.is-ok{color:var(--live)}
.gateway-card .meter-line .meter-port{font-family:ui-monospace,Consolas,monospace;color:var(--ink-3)}
.gateway-card .meter-line.empty-meter{display:block;color:var(--ink-3);font-style:italic}
.gateway-card footer{display:flex;justify-content:flex-end;gap:8px;margin-top:11px;
  padding-top:11px;border-top:1px solid var(--hairline-2)}
@media(max-width:560px){.gateway-card .meter-line{grid-template-columns:1fr 1fr}}

/* --- Elofizetes-jeloles a tenant listaban -------------------------------------

   Narancs a proba, zold az elo elofizetes, piros a lejart. A szin nem diszites:
   a lista egy pillantas alatt megmondja, kit kell felhivni. */
.sub-badge{display:inline-block;margin-top:5px;padding:2px 9px;border-radius:999px;
  font-size:10.5px;font-weight:700;letter-spacing:.02em}
.sub-badge.trial{background:var(--warn-tint);color:var(--warn-ink)}
.sub-badge.active{background:var(--ok-tint);color:var(--ok-ink)}
.sub-badge.expired{background:var(--bad-tint);color:var(--bad-ink)}
.sub-badge.none{background:var(--hairline-2);color:var(--ink-3)}

/* A lejart toltesi jogosultsag a jogosultsag-ablakban. Piros, mert nem allapot,
   hanem teendo: ezen a tolton jelenleg senki nem tud tolteni. */
.grant-validity{display:block;margin-top:3px;font-size:11px;color:var(--ink-3)}
.grant-validity.expired{color:var(--bad-ink);font-weight:700}
#grant-expiry-warning{margin:0 0 4px}

/* --- Lapfejlec: tobb muvelet egy sorban --------------------------------------

   Az RFID lapon harom uton kerul kartya a rendszerbe: egyesevel, sablonbol es
   tomeges betoltessel. Ugyanaz a szandek, tehat egy helyen alljanak - eddig
   kettő közülük a keresosav dobozaban lakott, ahol muveletet senki nem keres. */
header .header-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  justify-content:flex-end}
header .header-actions [hidden]{display:none}
/* `:not([hidden])`, mert az azonositos szabaly erosebb, mint a `[hidden]`-t
   rejto osztalyszabaly - enelkul a sablon- es betoltogomb minden lapon ott
   allt, akkor is, amikor a JS mar rejtettre allitotta. */
header #rfid-header-actions:not([hidden]){display:inline-flex;gap:9px}
header .header-actions .secondary{display:inline-flex;align-items:center;
  text-decoration:none;padding:10px 15px;font:600 13px Inter,system-ui,sans-serif;cursor:pointer}

/* --- Sajat legordulo (combobox) ----------------------------------------------

   A `datalist` mukodott, csak a bongeszo rajzolta a sajat stilusaban: sotet,
   keskeny doboz, ami idegen elemnek latszott a lapon - az elso visszajelzes az
   volt ra, hogy "ezek a korabban begepelt nevek". Ez ugyanaz a viselkedes, csak
   a lap sajat szineivel, es ket soros tetelekkel: nev, alatta e-mail es ugyfel. */
.combo{position:relative;display:block}
.combo input{width:100%;padding-right:34px}
.combo-toggle{position:absolute;top:50%;right:6px;transform:translateY(-50%);border:0;
  background:0;color:var(--ink-3);font-size:12px;line-height:1;cursor:pointer;padding:6px 8px;
  border-radius:6px}
.combo-toggle:hover{background:var(--surface-3);color:var(--ink-2)}
.combo-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:40;margin:0;padding:4px;
  list-style:none;max-height:264px;overflow-y:auto;background:var(--surface);border:1px solid var(--hairline);
  border-radius:10px;box-shadow:0 14px 34px #10253326}
.combo-list[hidden]{display:none}
.combo-row{padding:8px 10px;border-radius:7px;cursor:pointer}
.combo-row b{display:block;font-size:13px;font-weight:600;color:var(--ink)}
.combo-row small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink-3)}
.combo-row:hover,.combo-row.active{background:var(--hairline-2)}
/* A levalasztas nem felhasznalo, hanem dontes: elvalasztva all a nevek folott. */
.combo-row.combo-detach{border-bottom:1px solid var(--hairline-2);border-radius:7px 7px 0 0;margin-bottom:3px}
.combo-row.combo-detach b{color:var(--ink-3);font-style:italic}
.combo-empty{padding:12px 10px;color:var(--ink-3);font-size:12.5px}

/* --- Toltonyilvantartas ------------------------------------------------------

   Ugyanaz a tablazat-nyelv, mint a Felhasznaloknal es a Tenantoknal: a `.user-table`
   adja a keretet, itt csak a fejlec-sor es a kereso all mashogy. */
.inventory-panel{margin:0 0 26px}
.inventory-panel .inventory-heading{display:flex;align-items:flex-end;justify-content:space-between;
  gap:16px;flex-wrap:wrap;margin-bottom:14px}
.inventory-panel .inventory-heading h2{margin:2px 0 0;font-size:20px;color:var(--ink)}
.inventory-panel .inventory-tools{display:flex;align-items:center;gap:12px}
.inventory-panel .inventory-tools span{color:var(--ink-3);font-size:12.5px;white-space:nowrap}
#inventory-search{flex:0 1 340px;height:36px;padding:0 12px;border:1px solid var(--hairline);border-radius:9px;
  font:13px Inter,system-ui,sans-serif;background:var(--surface);color:var(--ink)}
#inventory-search:focus{outline:0;border-color:#0ba8a4;box-shadow:0 0 0 3px #0ba8a433}
.inventory-panel .user-actions button.danger{border-color:var(--hairline);color:var(--bad-ink)}
.inventory-panel .user-actions button.danger:hover{background:var(--ground)}

/* --- Toltonyilvantartas: kiemelt muvelet + "..." menu ------------------------

   Negy egyforma szurke gomb minden sorban azt sugallta, hogy mind a negy
   ugyanolyan gyakori - pedig a listanak egyetlen celja van: kiosztani az
   eszkozt egy toltopontra. Az kapott kiemelest, a tobbi a menube kerult. */
.inventory-panel .inv-actions{white-space:nowrap}
.inv-primary{height:34px;padding:0 15px;border:0;border-radius:9px;background:var(--accent);color:var(--accent-contrast);
  font:600 12.5px Inter,system-ui,sans-serif;cursor:pointer;box-shadow:0 5px 13px #4f61f333}
.inv-primary:hover{background:var(--accent)}
.inv-more{height:34px;width:34px;margin-left:7px;padding:0;border:1px solid var(--hairline);border-radius:9px;
  background:var(--surface);color:var(--ink-2);font-size:15px;line-height:1;cursor:pointer;vertical-align:middle}
.inv-more:hover,.inv-more[aria-expanded="true"]{background:var(--surface-3);color:var(--ink)}
#inv-menu-popup{position:fixed;z-index:90;min-width:190px;padding:5px;background:var(--surface);
  border:1px solid var(--hairline);border-radius:12px;box-shadow:0 16px 38px #10253326}
#inv-menu-popup[hidden]{display:none}
#inv-menu-popup button{display:flex;align-items:center;gap:9px;width:100%;padding:9px 10px;border:0;
  border-radius:8px;background:0;color:var(--ink-2);font:600 12.5px Inter,system-ui,sans-serif;
  cursor:pointer;text-align:left}
#inv-menu-popup button i{font-style:normal;width:15px;color:var(--ink-3);font-size:12px}
#inv-menu-popup button:hover{background:var(--surface-3);color:var(--ink)}
#inv-menu-popup button.is-danger{color:var(--bad-ink)}
#inv-menu-popup button.is-danger:hover{background:var(--ground)}
#inv-menu-popup button.is-danger i{color:var(--bad-ink)}

/* --- Parbeszed-urlapok: kozos alapvonal --------------------------------------

   A ket oszlop mezoi eltero magassagban alltak. Nem a betumeret miatt: a
   `.form-grid` racsban a ket cimke egy sorba esik, es alapertelmezesben
   egyforma magasra nyulnak. Amelyik cimke ala segito szoveg is kerult, az harom
   sorra oszlott, a masik kettore - es a szetosztott tobblet lejjebb tolta a
   masodik oszlop mezojet. Innentol a cimkek felulrol kezdodnek, a mezok pedig
   egyforma magasak, tehat egy vonalban allnak.

   A jelolonegyzetes `.feature` sorok kimaradnak: azok sajat elrendezest kapnak. */
.form-grid label:not(.feature),.coordinates label{align-content:start}
.form-grid input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
.form-grid select{height:42px;padding:0 12px;box-sizing:border-box}
.form-grid textarea{padding:11px 12px;box-sizing:border-box}
/* Ahol a mezo mellett gomb all, az is ugyanaddig er. */
.form-grid .address-row button,.form-grid .capture-row button{height:42px;padding:0 15px}
.form-grid .address-row input,.form-grid .capture-row input{height:42px}

/* Modul-előfizetések: ügyfelenként egy kártya.

   A korábbi mátrix vízszintesen annyit nőtt, ahány modul van - tizenkettőnél
   már egyetlen képernyőre sem fért ki. Az oszlopok száma viszont nem az
   ügyféltől függ, hanem a kínálattól: minden új modullal rosszabb lett volna.
   Kártyákra bontva a kapcsolók tördelődnek, tehát bármilyen szélességen
   kiférnek, és egy ügyfél előfizetése egyben látszik. */
.module-card { border: 1px solid var(--hairline); border-radius: 13px;
  background: var(--surface); margin-bottom: 12px; overflow: hidden; }
.module-card > header { display: flex; align-items: baseline; gap: 10px;
  padding: 12px 16px; border-bottom: 1px solid var(--hairline-2); background: var(--ground); }
.module-card > header b { font-size: 14px; color: var(--ink); }
.module-card > header small { color: var(--ink-3); font-size: 12px; }
/* Az ugyfel allapota a fejlec jobb szelen: probaidoszak vagy aktiv elofizetes.

   A cimke FIX szelessegu, es a kapcsolo a szoveg UTAN all. Ket kulonbozo hosszu
   szoveg ("Probaidoszak" / "Aktiv elofizetes") valtogatasatol a kapcsolo
   oldalra ugrott kattintaskor - a szem az ugralast olvassa hibanak, nem az uj
   allapotot. A szelesseg a hosszabb szoveghez igazodik, tehat egyik iranyban
   sem mozdul semmi. */
.module-card > header .tenant-gate { display: flex; align-items: center; gap: 9px;
  margin-left: auto; cursor: pointer; align-self: center; }
.module-card > header .tenant-gate b { min-width: 104px; text-align: right;
  font-size: 11.5px; font-weight: 700; color: var(--ink-3); white-space: nowrap; }
.module-card > header .tenant-gate.is-on b { color: var(--live-ink); }
/* A lejart probaido nem harmadik kapcsolo-allas, hanem FIGYELMEZTETES: a
   kapcsolo tovabbra is "probaidoszak"-on all, az ugyfel megis mar csak a
   bejeloltet latja. Enelkul egy mukodo hozzaferes tunne el ugy, hogy a felulet
   vegig azt allitja, minden nyitva van. */
.module-card > header .tenant-gate.is-expired b { color: var(--bad-ink); }
.module-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 4px 20px; padding: 12px 16px 14px; }
.module-group h4 { margin: 6px 0 8px; font-size: 11.5px; font-weight: 600; color: var(--ink-3);
  text-transform: uppercase; letter-spacing: .35px; }
.module-toggles { display: flex; flex-direction: column; gap: 7px; margin-bottom: 10px; }
.module-toggle { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--ink-2); cursor: pointer; }
.module-toggle.is-on { color: var(--ink); }
/* EGY kapcsoló-forma az egész lapon: 42x24-es sáv, 18-as pötty, körben 3 pixel.
   Ugyanez a szabály rajzolja az ügyfél fejlécében állót is - egy második,
   „majdnem ugyanolyan" kapcsoló (más méret, más szín) mellette csak azt a
   kérdést szülné, hogy vajon mást csinál-e.

   Az előző méret (34x20, 14-es pötty, 1 pixel keret) nem csak kisebb volt,
   hanem ferde is: a keretet a `border-box` a magasságból vonja le, tehát a
   pötty egy 18 pixeles belső sávban ült 2 pixeles felső réssel - a szemnek
   ettől feljebb csúszott. Egy oldalon két, egymáshoz képest kicsit elcsúszott
   kapcsoló van, és a szem a kisebbet olvassa hibásnak. A keret helyett a sáv
   háttere hordozza a formát, ahogy a hivatkozott kapcsolónál is. */
.module-toggle input[type="checkbox"],
.kapcsolo input[type="checkbox"],
.tenant-gate input[type="checkbox"] { appearance: none; -webkit-appearance: none; position: relative;
  flex: none; margin: 0; width: 42px; height: 24px; border: 0; border-radius: 999px;
  background: var(--hairline); cursor: pointer; transition: background .18s ease; }
.module-toggle input[type="checkbox"]::after,
.kapcsolo input[type="checkbox"]::after,
.tenant-gate input[type="checkbox"]::after { content: ""; position: absolute; top: 3px; left: 3px;
  width: 18px; height: 18px; border-radius: 50%; background: var(--surface);
  box-shadow: 0 1px 3px #00000033; transition: transform .18s ease; }
.module-toggle input[type="checkbox"]:checked,
.kapcsolo input[type="checkbox"]:checked,
.tenant-gate input[type="checkbox"]:checked { background: #0ba8a4; }
.module-toggle input[type="checkbox"]:checked::after,
.kapcsolo input[type="checkbox"]:checked::after,
.tenant-gate input[type="checkbox"]:checked::after { transform: translateX(18px); }
.module-toggle input[type="checkbox"]:disabled,
.kapcsolo input[type="checkbox"]:disabled,
.tenant-gate input[type="checkbox"]:disabled { opacity: .5; cursor: progress; }
/* Ami MINDIG jár, az nem kapcsolható - de nem is „épp mentődik".

   A fenti `:disabled` szabály a mentés pillanatára van kitalálva: halvány
   kapcsoló, `progress` kurzor. Egy állandó tétel ugyanabban a jelmezben
   elromlottnak vagy félig mentettnek látszana, holott ez a végállapota. */
.module-toggle.is-fixed { cursor: default; }
.module-toggle.is-fixed input[type="checkbox"]:disabled { opacity: 1; cursor: default; }

/* Sor-műveletek lenyílóban.

   A műveletek száma nőtt, és mind kifért egy sorba - csak épp tördelve: a
   sorok háromszorosukra híztak, és egy képernyőre alig négy felhasználó fért
   ki. A lista dolga az áttekintés; a művelet egy kattintással előhívható. */
details.row-actions { position: relative; display: inline-block; }
details.row-actions > summary { list-style: none; cursor: pointer;
  padding: 5px 11px; border: 1px solid var(--hairline); border-radius: 8px;
  background: var(--surface); font-size: 12.5px; color: var(--ink-2); white-space: nowrap; }
details.row-actions > summary::-webkit-details-marker { display: none; }
details.row-actions > summary::after { content: " ⌄"; color: var(--ink-3); }
details.row-actions[open] > summary { border-color: var(--accent, #4f46e5); color: var(--ink); }
.row-actions-menu { position: fixed; z-index: 200; min-width: 210px;
  display: flex; flex-direction: column; gap: 2px; padding: 6px;
  border: 1px solid var(--hairline); border-radius: 11px; background: var(--surface);
  box-shadow: 0 12px 28px rgba(15, 23, 42, .16); }
.row-actions-menu button { width: 100%; text-align: left; border: 0; background: none;
  padding: 8px 10px; border-radius: 7px; font-size: 12.5px; color: var(--ink-2); cursor: pointer; }
.row-actions-menu button:hover { background: var(--surface-2, #f4f6f9); color: var(--ink); }
.row-actions-menu button.danger { color: #dc2626; }
.row-actions-menu button.danger:hover { background: #fee2e2; }

/* Elbírált jelentkezések: keresőbe, nem egymás alá.

   Az elbírálásra várók száma véges - azokkal dolgozni kell. Az elbíráltak
   viszont soha nem fogynak: minden jóváhagyott ügyfél ott marad örökre. Amire
   szükség van belőlük, az egy konkrét jelentkezés. */
.request-picker { display: flex; flex-direction: column; gap: 6px; max-width: 520px;
  margin: 4px 0 14px; font-size: 12px; color: var(--ink-3); }
.request-picker select { padding: 9px 11px; border: 1px solid var(--hairline);
  border-radius: 9px; background: var(--surface); color: var(--ink); font-size: 13px; }

/* Felfelé nyíló menü: a nyíl is fordul. */
details.row-actions.opens-up > summary::after { content: " ⌃"; }

/* Telephelyi gep sora: bal oldalt az azonossag, jobb oldalt a kiadas. */
.gateway-device .settings-test-row select{flex:1;min-width:0}
.gateway-device+.gateway-device{border-top:1px solid var(--hairline-2);padding-top:12px}

/* A felhasználó-sor gombjai egy magasságban álljanak.

   A státusz-jelző ("Aktív") 11 px-es félkövérrel, a "Műveletek" lenyíló
   12,5 px-essel írt - a betűméret különbsége két pixel magasságkülönbséggé
   nőtt, és mivel a két gomb egymás mellett, ugyanabban a sorban ül, ez
   pontosan az a fajta eltérés, ami egy táblázatban azonnal szemet szúr.

   A magasságot ezért nem a szöveg szabja meg, hanem közös mérték. A tartalom
   függőlegesen középre kerül, így a padding sem hoz vissza eltérést. */
.user-table .user-status,
.user-table details.row-actions > summary{
  display:inline-flex;align-items:center;justify-content:center;
  box-sizing:border-box;min-height:26px;padding-top:0;padding-bottom:0}
/* A lenyíló nyila külön flex-elem lesz: a `content` elé írt szóköz itt már nem
   tartana távolságot. */
.user-table details.row-actions > summary::after{content:"⌄";margin-left:5px}

/* .kapcsolo: a csuszka BARHOL - csatlakozo-tabla, csatorna-ablak. A rajzat a fenti
   kozos szabaly adja; ez csak a cimke sora. A <span> ures: a jelolonegyzet maga a
   csuszka, a span a regi jelolo helyet tartja a sorban. */
.kapcsolo{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;color:var(--ink-2);cursor:pointer;font-weight:600}
.kapcsolo>span:empty{display:none}
.connector-row-actions{white-space:nowrap}
.connector-row-actions .primary,.connector-row-actions .secondary{padding:7px 11px;font-size:12px;margin-right:6px}

/* Kuponok a Jelentkezések lapon (Otthon-csomag, 2026-09-13). Csak tokenek. */
.coupon-block{background:var(--surface);border:1px solid var(--hairline);border-radius:12px;padding:16px 18px;margin-bottom:18px;display:flex;flex-direction:column;gap:12px}
.coupon-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.coupon-head h3{margin:0 0 4px;font-size:15px}
.coupon-head .section-help{margin:0;max-width:64ch}
.coupon-head>span{font-size:12px;color:var(--ink-3);white-space:nowrap}
.coupon-issue{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:10px 12px;align-items:end}
.coupon-issue label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:700;color:var(--ink-2)}
.coupon-issue input{font:400 13px/1.3 Inter,system-ui,sans-serif;padding:8px 10px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface);color:var(--ink)}
.coupon-issue .coupon-wide{grid-column:1/-2}
.coupon-table{width:100%;border-collapse:collapse;font-size:13px}
.coupon-table th{text-align:left;font-size:11px;color:var(--ink-3);font-weight:700;padding:8px 10px;border-bottom:1px solid var(--hairline)}
.coupon-table td{padding:9px 10px;border-bottom:1px solid var(--hairline-2);vertical-align:top;color:var(--ink)}
.coupon-table td small{display:block;color:var(--ink-3);font-size:11px;margin-top:2px}
.coupon-table tr.redeemed td,.coupon-table tr.revoked td{opacity:.7}
.coupon-code{font:700 13px/1 ui-monospace,Consolas,monospace;letter-spacing:.06em;color:var(--accent-ink);background:var(--accent-tint);padding:4px 8px;border-radius:6px}
.coupon-table td:last-child{white-space:nowrap;text-align:right}
@media (max-width:900px){.coupon-issue{grid-template-columns:repeat(2,minmax(0,1fr))}.coupon-issue .coupon-wide{grid-column:1/-1}}
.coupon-issue .field-hint.ok{color:var(--ok-ink)}
.coupon-issue .field-hint.warn{color:var(--warn-ink)}
.coupon-warn{display:block;color:var(--warn-ink);font-size:11px;font-weight:700}
.coupon-issue .coupon-hint{grid-column:1/-1;margin:0}
/* Raktar-sor: a kupon az elsodleges gomb, a toltoponthoz rendeles a masodik. */
.inv-secondary{height:34px;margin-left:7px;padding:0 13px;border:1px solid var(--hairline);border-radius:9px;background:var(--surface);color:var(--ink);font:700 12px/1 Inter,system-ui,sans-serif;cursor:pointer;white-space:nowrap}
.inv-secondary:hover{background:var(--surface-3)}
.inv-coupon-code{white-space:nowrap;font:700 12px/1 ui-monospace,Consolas,monospace;letter-spacing:.05em;color:var(--accent-ink);background:var(--accent-tint);padding:2px 6px;border-radius:5px}
