/* =============================================================================
   base téma — design-rendszer 3 színmóddal (light / dim / dark)
   - A színeket CSS-változók adják, a módot a <html data-theme-mode="..."> kapcsolja.
   - A .ge-* KOMPONENSEK minden témában a módot követik (a semmelweis is ezt
     tölti be, ezért ott világos módban világos kártyák lesznek).
   - A teljes HÉJ-téma (body, top bar, oldalsáv, content háttér) CSAK a base
     templ.-re érvényes: html[data-template="base"] ... — így a semmelweis brand
     megjelenését nem befolyásolja.
   ============================================================================= */

/* ---- Mód-független tokenek + LIGHT alapértelmezés ------------------------- */
:root {
	--ge-radius: 14px;
	--ge-radius-sm: 10px;
	--ge-gap: 16px;
	--ge-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	--ge-ring: 0 0 0 3px rgba(56, 189, 248, .35);

	--ge-bg: #F1F5F9;
	--ge-surface: #FFFFFF;
	--ge-surface-2: #F8FAFC;
	--ge-elevated: #FFFFFF;
	--ge-border: #E2E8F0;
	--ge-border-strong: #CBD5E1;
	--ge-text: #0F172A;
	--ge-muted: #475569;
	--ge-faint: #94A3B8;
	--ge-accent: #0EA5E9;
	--ge-accent-hover: #0284C7;
	--ge-accent-contrast: #FFFFFF;
	--ge-success: #16A34A;
	--ge-danger: #E11D48;
	--ge-warning: #D97706;
	--ge-topbar: #FFFFFF;
	--ge-nav: #FFFFFF;
	--ge-shadow: 0 6px 24px rgba(15, 23, 42, .10);
	--ge-shadow-sm: 0 2px 8px rgba(15, 23, 42, .08);

	/* Felső sáv (fejléc) ELŐTÉR-tokenjei — fallback értékek. A tényleges fejléc
	   AKCENT-háttér + világos vezérlők (lásd lent: "FEJLÉC = AKCENT" blokk, ami a
	   html[data-template="base"]-en felülírja ezeket minden sémánál). */
	--ge-topbar-fg: var(--ge-text);
	--ge-topbar-muted: var(--ge-muted);
	--ge-topbar-hover: var(--ge-surface-2);
	--ge-topbar-border: var(--ge-border);
}

/* RENDSZERSZINTŰ VÉDELEM: a `hidden` HTML-attribútum MINDIG rejtsen.
   A böngésző UA `[hidden]{display:none}` szabályát egy szerzői `display:` (flex/
   grid/inline-flex) felülírná — és mivel a komponens-CSS-ek a base.css UTÁN
   töltődnek, csak az `!important` garantálja a győzelmet. Enélkül a `hidden`-nel
   rejtett elemek (modal, gomb, panel) láthatók maradnak. (Korábban komponensenként
   pótoltuk: .ge-btn[hidden], .ge-docs__modal[hidden], … — ez kiváltja mindet.)
   Biztonságos: a kódbázisban nincs `[hidden]`-t MEGJELENÍTŐ szabály. */
[hidden] { display: none !important; }

html[data-theme-mode="light"] {
	color-scheme: light;
}

/* ---- DIM (köztes / twilight) --------------------------------------------- */
html[data-theme-mode="dim"] {
	color-scheme: dark;
	--ge-bg: #1E293B;
	--ge-surface: #273449;
	--ge-surface-2: #2E3D54;
	--ge-elevated: #334158;
	--ge-border: #3B4A63;
	--ge-border-strong: #4B5C78;
	--ge-text: #E8EDF5;
	--ge-muted: #AEB9CC;
	--ge-faint: #8593AB;
	--ge-accent: #38BDF8;
	--ge-accent-hover: #7DD3FC;
	--ge-accent-contrast: #06121E;
	--ge-success: #34D399;
	--ge-danger: #FB7185;
	--ge-warning: #FBBF24;
	--ge-topbar: #172033;
	--ge-nav: #1B2840;
	--ge-shadow: 0 8px 28px rgba(0, 0, 0, .30);
	--ge-shadow-sm: 0 2px 10px rgba(0, 0, 0, .22);
}

/* ---- DARK (Graphite Electric) -------------------------------------------- */
html[data-theme-mode="dark"] {
	color-scheme: dark;
	--ge-bg: #0B0F17;
	--ge-surface: #151B27;
	--ge-surface-2: #1B2331;
	--ge-elevated: #202A3A;
	--ge-border: #273140;
	--ge-border-strong: #38465A;
	--ge-text: #E5E9F0;
	--ge-muted: #94A3B8;
	--ge-faint: #64748B;
	--ge-accent: #38BDF8;
	--ge-accent-hover: #0EA5E9;
	--ge-accent-contrast: #04121C;
	--ge-success: #22C55E;
	--ge-danger: #FB7185;
	--ge-warning: #FBBF24;
	--ge-topbar: #0E1420;
	--ge-nav: #111826;
	--ge-shadow: 0 8px 28px rgba(0, 0, 0, .45);
	--ge-shadow-sm: 0 2px 10px rgba(0, 0, 0, .30);
}

/* =============================================================================
   KOMPONENSEK (minden témában — a .ge- prefix védi a régi oldalakat)
   ============================================================================= */
.ge-omhv {
	font-family: var(--ge-font);
	color: var(--ge-text);
	max-width: 980px;
	margin: 0 auto;
	padding: 24px 18px 64px;
	box-sizing: border-box;
}

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

.ge-omhv__header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 20px;
}

/* A Lesson-oldal eszköztára: a QR-felvevő (varázsló) gombja jobbra igazítva. */
.ge-omhv__toolbar {
	display: flex;
	justify-content: flex-end;
	margin-bottom: 16px;
}

.ge-omhv__title {
	font-size: 1.5rem;
	font-weight: 700;
	letter-spacing: -.01em;
	margin: 0;
	color: var(--ge-text);
}

.ge-card {
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
	padding: 16px;
	margin-bottom: var(--ge-gap);
}

.ge-toolbar { display: flex; flex-wrap: wrap; gap: 14px 20px; align-items: flex-end; }
.ge-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ge-field--grow { flex: 1 1 240px; }
.ge-field__label {
	font-size: .72rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .06em;
	color: var(--ge-muted);
}

.ge-input,
.ge-select {
	width: 100%;
	height: 40px;
	padding: 0 12px;
	background: var(--ge-surface-2);
	color: var(--ge-text);
	border: 1px solid var(--ge-border-strong);
	border-radius: var(--ge-radius-sm);
	font: inherit;
	line-height: 38px;
	transition: border-color .15s, box-shadow .15s;
}

.ge-select {
	appearance: none;
	-webkit-appearance: none;
	background-image: linear-gradient(45deg, transparent 50%, var(--ge-muted) 50%), linear-gradient(135deg, var(--ge-muted) 50%, transparent 50%);
	background-position: calc(100% - 18px) 17px, calc(100% - 12px) 17px;
	background-size: 6px 6px, 6px 6px;
	background-repeat: no-repeat;
	padding-right: 34px;
	cursor: pointer;
}

.ge-input:focus,
.ge-select:focus { outline: none; border-color: var(--ge-accent); box-shadow: var(--ge-ring); }

/* Aktív (nem alapértelmezett) szűrőmező: kiemelt keret, halvány accent-háttér és
   accent-színű felirat, hogy szemmel is azonnal látsszon, mire van szűrve. */
.ge-field--active .ge-field__label { color: var(--ge-accent); }
.ge-field--active .ge-select,
.ge-field--active .ge-input {
	border-color: var(--ge-accent);
	background-color: color-mix(in srgb, var(--ge-accent) 10%, var(--ge-surface-2));
	font-weight: 600;
}
/* A legördülő nem alapértelmezett (= nem "Összes") elemei accent-színnel. */
.ge-select option.ge-option--alt { color: var(--ge-accent); }

.ge-daterange { display: flex; align-items: center; gap: 8px; }
.ge-daterange__sep { color: var(--ge-faint); }

.ge-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: var(--ge-gap); }
.ge-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 34px;
	padding: 0 14px;
	background: var(--ge-surface);
	color: var(--ge-text);
	border: 1px solid var(--ge-border-strong);
	border-radius: 999px;
	font-size: .85rem;
	font-weight: 600;
	text-decoration: none;
	cursor: pointer;
	transition: background .15s, border-color .15s, color .15s;
}
.ge-chip:hover { border-color: var(--ge-accent); color: var(--ge-accent); }
/* Aktív gyorsgomb (Ma / Ez a hét / Ez a hónap / Növekvő): teli, hangsúlyos
   accent-szín, hogy látsszon, melyik szűrés van éppen érvényben. */
.ge-chip.is-active {
	background: var(--ge-accent);
	color: var(--ge-accent-contrast);
	border-color: transparent;
}
.ge-chip.is-active:hover { background: var(--ge-accent-hover); color: var(--ge-accent-contrast); border-color: transparent; }

/* Összesített-értékelés gombsor: külön akció-csoport (riportra navigál, nem
   szűr). Vizuálisan elkülönül egy halvány felső elválasztóval és vezérszöveggel. */
.ge-chips--summary {
	align-items: center;
	padding-bottom: 12px;
	margin-bottom: 12px;
	border-bottom: 1px dashed var(--ge-border-strong);
}
.ge-chips__lead {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: .85rem;
	font-weight: 700;
	color: var(--ge-faint);
}
.ge-chip--summary { border-style: dashed; }
.ge-chip--summary:hover { background: var(--ge-accent); color: var(--ge-accent-contrast); border-color: transparent; }

.ge-btn {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	height: 42px;
	padding: 0 18px;
	background: var(--ge-accent);
	color: var(--ge-accent-contrast);
	border: 1px solid transparent;
	border-radius: var(--ge-radius-sm);
	font: inherit;
	font-weight: 700;
	text-decoration: none;
	cursor: pointer;
	transition: background .15s, transform .05s;
}
.ge-btn:hover { background: var(--ge-accent-hover); }
.ge-btn:active { transform: translateY(1px); }
/* A `display:inline-flex` felülírná a UA [hidden]{display:none} szabályát, így a
   hidden attribútummal elrejtett gombok (pl. a varázsló nav „Tovább"/„Vissza"/
   „Létrehozás") láthatók maradnának — ezt a magasabb specificitású szabály oldja. */
.ge-btn[hidden] { display: none; }
.ge-btn--block { width: 100%; justify-content: center; }
.ge-btn--success { background: var(--ge-success); color: #fff; }
.ge-btn--success:hover { background: color-mix(in srgb, var(--ge-success) 82%, #000); }
.ge-btn--danger { background: var(--ge-danger); color: #fff; }
.ge-btn--danger:hover { background: color-mix(in srgb, var(--ge-danger) 82%, #000); }
.ge-btn--ghost {
	background: transparent;
	color: var(--ge-text);
	border-color: var(--ge-border-strong);
}
.ge-btn--ghost:hover { background: var(--ge-surface-2, var(--ge-surface)); }

/* Anchorként használt gombok: a lentebbi "html[data-template=base] a { color: accent }"
   link-szabály magasabb specificitású, mint a .ge-btn (kék szöveg a kék gombon →
   olvashatatlan). Itt visszaállítjuk a gomb saját szövegszínét nagyobb specificitással. */
html[data-template="base"] a.ge-btn { color: var(--ge-accent-contrast); }
html[data-template="base"] a.ge-btn--success,
html[data-template="base"] a.ge-btn--danger { color: #fff; }
html[data-template="base"] a.ge-btn--ghost { color: var(--ge-text); }

/* rating.php publikálás-sáv (a riport tetején, csak a tulajdonosnak). */
.ge-publishbar {
	display: flex;
	align-items: center;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: 18px;
	padding: 12px 16px;
	background: color-mix(in srgb, var(--ge-success) 6%, var(--ge-surface));
	border: 1px solid color-mix(in srgb, var(--ge-success) 24%, var(--ge-border));
	border-radius: var(--ge-radius);
}
.ge-publishbar:not(.is-published) {
	background: var(--ge-surface);
	border-color: var(--ge-border);
}
.ge-publishbar__status { display: flex; align-items: center; gap: 8px; flex: 1 1 auto; min-width: 0; flex-wrap: wrap; }
.ge-publishbar__status .fa { font-size: 1.1rem; }
.ge-publishbar.is-published .fa-globe { color: var(--ge-success); }
.ge-publishbar__hint { color: var(--ge-muted); font-size: .85rem; }
.ge-publishbar__form { margin: 0; }

.ge-lessons { display: flex; flex-direction: column; gap: 12px; }

/* Egy listasor: a kártya + a kártyán KÍVÜLI, önálló oldalsó panelek jobbra. */
.ge-lesson-row { display: flex; align-items: stretch; gap: 10px; }
.ge-lesson-row .ge-lesson { flex: 1 1 auto; min-width: 0; }

.ge-lesson {
	display: grid;
	grid-template-columns: 40px auto 1fr auto;
	align-items: center;
	gap: 8px 16px;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
	padding: 14px 16px;
	transition: border-color .15s, box-shadow .15s;
}
.ge-lesson:hover { border-color: var(--ge-border-strong); box-shadow: var(--ge-shadow); }

/* Publikált óra: zöld keret (a kártya body-ja), a státusz vizuális jelzése. */
.ge-lesson.is-published {
	border-color: var(--ge-success);
	box-shadow: 0 0 0 1px color-mix(in srgb, var(--ge-success) 45%, transparent);
}
.ge-lesson.is-published:hover { border-color: var(--ge-success); }

/* Publikálás-panel — a törlés-panellel azonos elrendezésű, önálló zöld doboz a
   kártya MELLETT (a danger-panel FELETT). A benti gomb teljesen kitölti. */
.ge-lesson__publish {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 56px;
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
	overflow: hidden;
}
.ge-lesson__publish form { margin: 0; width: 100%; height: 100%; display: flex; }
.ge-lesson__publish button {
	width: 100%;
	min-height: 52px;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0;
	cursor: pointer;
	border: 1px solid color-mix(in srgb, var(--ge-success) 28%, var(--ge-border));
	border-radius: var(--ge-radius);
	background: color-mix(in srgb, var(--ge-success) 16%, var(--ge-surface));
	color: var(--ge-success);
	font-size: 1.2rem;
	transition: border-color .15s, background .15s, color .15s;
}
.ge-lesson__publish button:hover {
	border-color: var(--ge-success);
	background: var(--ge-success);
	color: #fff;
}
/* Visszavonás (már publikált): tömör zöld háttér, hover-re halványabb. */
.ge-lesson__publish--on button {
	background: var(--ge-success);
	color: #fff;
	border-color: var(--ge-success);
}
.ge-lesson__publish--on button:hover { background: color-mix(in srgb, var(--ge-success) 80%, #000); }

/* Önálló (destruktív) törlés-panel — vizuálisan elkülönül a kártyától és a
   QR-ikonoktól: saját, halvány piros tintájú doboz, hover-re erősödő piros keret. */
.ge-lesson__danger {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 56px;
	background: color-mix(in srgb, var(--ge-danger) 6%, var(--ge-surface));
	border: 1px solid color-mix(in srgb, var(--ge-danger) 28%, var(--ge-border));
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
	transition: border-color .15s, background .15s;
}
.ge-lesson__danger:hover { border-color: var(--ge-danger); background: color-mix(in srgb, var(--ge-danger) 12%, var(--ge-surface)); }
.ge-lesson__lead { display: flex; flex-direction: column; gap: 6px; align-items: center; }
.ge-lesson__answers { display: flex; flex-direction: column; gap: 6px; align-items: center; min-width: 58px; }
.ge-lesson__main { min-width: 0; }
.ge-lesson__kicker { font-size: .78rem; color: var(--ge-muted); font-style: normal; }
.ge-lesson__title {
	font-weight: 600;
	margin: 2px 0 4px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	color: var(--ge-text);
}
.ge-lesson__meta { display: flex; flex-wrap: wrap; gap: 6px 12px; font-size: .8rem; color: var(--ge-faint); align-items: center; }
.ge-lesson__info { display: inline-flex; align-items: center; gap: 6px; color: var(--ge-muted); }
.ge-lesson__validity { display: inline-flex; align-items: center; gap: 6px; color: var(--ge-muted); }
.ge-lesson__validity.is-custom { color: var(--ge-accent, var(--ge-text)); font-weight: 600; }

/* QR-érvényesség (időlimit) szerkesztő — a kártya MELLETT, önálló 56px-es oldalsó
   gomb (a publish/törlés panelekkel egy oszlopban). A gomb egy popovert nyit. */
.ge-lesson__timelimit {
	position: relative;
	flex: 0 0 auto;
	width: 56px;
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
}
.ge-lesson__timelimit-toggle {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	cursor: pointer;
	list-style: none;
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	background: var(--ge-surface);
	color: var(--ge-muted);
	font-size: 1.05rem;
	transition: border-color .15s, background .15s, color .15s;
}
.ge-lesson__timelimit-toggle::-webkit-details-marker { display: none; }
.ge-lesson__timelimit-toggle:hover { border-color: var(--ge-border-strong); color: var(--ge-text); }
.ge-lesson__timelimit[open] .ge-lesson__timelimit-toggle { border-color: var(--ge-border-strong); color: var(--ge-text); background: var(--ge-surface-2, var(--ge-surface)); }

/* SOROS (inline) változat — az Órarend „Nap" nézet sor-akció klaszteréhez: a
   nyitó egy sima .ge-iconbtn (a másolás/QR-email gombokkal egyező méret), a popover
   pedig alóla nyílik (a details position:relative miatt). Nincs 56px panel-doboz. */
.ge-lesson__timelimit--inline { width: auto; box-shadow: none; }
.ge-lesson__timelimit--inline > summary { list-style: none; }
.ge-lesson__timelimit--inline > summary::-webkit-details-marker { display: none; }
.ge-lesson__timelimit--inline > summary::marker { content: ""; }
.ge-lesson__timelimit--inline[open] > summary { border-color: var(--ge-accent); color: var(--ge-accent); }

/* Popover: a gomb alatt, jobbra igazítva, a layout megzavarása nélkül. */
.ge-lesson__timelimit-pop {
	position: absolute;
	top: calc(100% + 6px);
	right: 0;
	z-index: 30;
	width: 320px;
	max-width: min(320px, calc(100vw - 32px));
	display: flex;
	flex-direction: column;
	gap: 10px;
	padding: 12px 14px;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border-strong);
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow);
}
.ge-lesson__timelimit-warn {
	margin: 0;
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: .8rem;
	color: var(--ge-danger);
	background: color-mix(in srgb, var(--ge-danger) 8%, var(--ge-surface));
	border: 1px solid color-mix(in srgb, var(--ge-danger) 28%, var(--ge-border));
	border-radius: var(--ge-radius);
	padding: 8px 10px;
}
.ge-lesson__timelimit-pop form { margin: 0; display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 12px; }
.ge-lesson__timelimit-field { display: flex; flex-direction: column; gap: 6px; }
.ge-lesson__timelimit-pop input[type="number"] { width: 130px; }
.ge-lesson__timelimit-hint { font-size: .85rem; color: var(--ge-text); font-weight: 600; padding-bottom: 10px; }
.ge-lesson__timelimit-actions { display: flex; flex-wrap: wrap; gap: 8px; width: 100%; margin-top: 2px; }
.ge-lesson__aside { display: flex; flex-direction: column; align-items: flex-end; justify-content: space-between; gap: 10px; }

.ge-badge {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 28px;
	padding: 0 12px;
	border-radius: 999px;
	font-size: .8rem;
	font-weight: 700;
	background: color-mix(in srgb, var(--ge-accent) 16%, transparent);
	color: var(--ge-accent);
	border: 1px solid color-mix(in srgb, var(--ge-accent) 32%, transparent);
	text-decoration: none;
}
.ge-badge--empty { background: transparent; color: var(--ge-faint); border-color: var(--ge-border); }

.ge-actions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
.ge-iconbtn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border-radius: var(--ge-radius-sm);
	background: var(--ge-surface-2);
	color: var(--ge-muted);
	border: 1px solid var(--ge-border);
	cursor: pointer;
	text-decoration: none;
	font-size: .95rem;
	transition: background .15s, color .15s, border-color .15s;
}
.ge-iconbtn:hover { color: var(--ge-accent); border-color: var(--ge-accent); background: var(--ge-elevated); }
/* Szerkesztés: rámutatáskor az akcentszín (alapszín) — base-ben elektromos kék. */
.ge-iconbtn--edit:hover { color: var(--ge-accent); border-color: var(--ge-accent); }
/* Törlés: minden témában piros (alaphelyzetben is), rámutatáskor erősebb. */
.ge-iconbtn--danger { color: var(--ge-danger); }
.ge-iconbtn--danger:hover { color: var(--ge-danger); border-color: var(--ge-danger); background: color-mix(in srgb, var(--ge-danger) 12%, transparent); }

/* Eredeti OMHV PNG-ikonok: alapban az inact (--i), rámutatáskor az act (--ia). */
/* Akció-ikon (OMHV óra-lista): a --i CSS-változó egy maszkolható SVG-t ad, amit a
   gomb SZÍNÉRE (currentColor) festünk — nyugalmi=tompított, hover=akcent. Így a
   fix inact/act PNG-pár helyett egyetlen assetből minden tónuson/sémán helyes. A
   --ge-ico--danger a törléshez piros hovert ad. */
.ge-ico {
	display: inline-block;
	width: 30px;
	height: 30px;
	flex: 0 0 auto;
	color: var(--ge-muted);
	background-color: currentColor;
	-webkit-mask: var(--i) center / 22px 22px no-repeat;
	        mask: var(--i) center / 22px 22px no-repeat;
	border: 0;
	padding: 0;
	margin: 0;
	cursor: pointer;
	text-decoration: none;
	transition: color .15s;
}
.ge-ico:hover { color: var(--ge-accent); }
.ge-ico--danger:hover { color: var(--ge-danger); }
.ge-rating { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; color: inherit; }
.ge-rating:hover .ge-ico { color: var(--ge-accent); }
.ge-rating__n { font-weight: 700; color: var(--ge-accent); font-size: .95rem; }

.ge-empty {
	text-align: center;
	color: var(--ge-muted);
	padding: 48px 16px;
	border: 1px dashed var(--ge-border-strong);
	border-radius: var(--ge-radius);
	background: var(--ge-surface);
}
.ge-empty__icon { font-size: 2rem; color: var(--ge-faint); margin-bottom: 10px; }

/* Reset (szűrő törlése) chip — alaphelyzetben (nincs beállított szűrő) áttetsző
   háttér, danger körvonal; aktív szűrőnél (.is-active) teli danger, fehér
   felirattal (mint az Eredmények/Tervek reset-gombja, ami csak aktív szűrőnél
   látszik). Hoverre kicsit sötétebb.
   A kettős osztály (.ge-chip.ge-chip--reset) szándékos: a chip <a>, és így veri
   a "html[data-template] a { color: accent }" link-szabályt, hogy a felirat ne
   legyen accent-kék. Az ikon a felirat színét örökli. */
.ge-chip.ge-chip--reset { background: transparent; color: var(--ge-danger); border-color: var(--ge-border-strong); margin-left: auto; }
.ge-chip.ge-chip--reset:hover { background: transparent; color: var(--ge-danger); border-color: var(--ge-danger); }
.ge-chip.ge-chip--reset.is-active { background: var(--ge-danger); color: #fff; border-color: transparent; }
.ge-chip.ge-chip--reset.is-active:hover { background: var(--ge-danger); color: #fff; border-color: transparent; filter: brightness(.95); }
.ge-chip.ge-chip--reset .fa { color: inherit; }

/* Lapozó — kártyaszerű sáv, nagyobb paddinggal, a többi felülethez hasonulva */
.ge-pager {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
	padding: 14px 18px;
	margin: 16px 0;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
	box-shadow: var(--ge-shadow-sm);
}
.ge-pager__info { color: var(--ge-muted); font-size: .85rem; }
.ge-pager__pages { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ge-pager__btn {
	min-width: 38px;
	height: 38px;
	padding: 0 11px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--ge-surface);
	color: var(--ge-text);
	border: 1px solid var(--ge-border-strong);
	border-radius: var(--ge-radius-sm);
	text-decoration: none;
	font-weight: 600;
	font-size: .9rem;
	transition: background .15s, color .15s, border-color .15s;
}
.ge-pager__btn:hover { border-color: var(--ge-accent); color: var(--ge-accent); }
.ge-pager__btn.is-active { background: var(--ge-accent); color: var(--ge-accent-contrast); border-color: transparent; }
.ge-pager__btn--disabled { opacity: .4; pointer-events: none; }
.ge-pager__gap { color: var(--ge-faint); padding: 0 2px; }

@media (max-width: 560px) {
	.ge-lesson { grid-template-columns: 1fr; }
	.ge-lesson__lead { flex-direction: row; justify-content: flex-start; }
	.ge-lesson__answers { flex-direction: row; justify-content: flex-start; }
	.ge-lesson__aside { flex-direction: row; align-items: center; justify-content: space-between; }
}

/* =============================================================================
   BASE HÉJ-TÉMA — csak a base template aktív állapotában
   ============================================================================= */
html[data-template="base"],
html[data-template="base"] body {
	margin: 0;
	background: var(--ge-bg);
	color: var(--ge-text);
	font-family: var(--ge-font);
	-webkit-font-smoothing: antialiased;
}

html[data-template="base"] a { color: var(--ge-accent); }
html[data-template="base"] #wrapper { min-height: 100vh; }

/* Felső sáv */
html[data-template="base"] #maintopmenu {
	position: sticky;
	top: 0;
	z-index: 50;
	display: flex;
	align-items: center;
	gap: 14px;
	height: 60px;
	padding: 0 20px;
	background: var(--ge-topbar);
	border-bottom: 1px solid var(--ge-topbar-border);
	box-shadow: var(--ge-shadow-sm);
}
html[data-template="base"] .ge-topbar__brand {
	display: flex;
	align-items: center;
	gap: 10px;
	font-weight: 800;
	letter-spacing: -.01em;
	color: var(--ge-topbar-fg);
	text-decoration: none;
	font-size: 1.05rem;
}
html[data-template="base"] .ge-topbar__brand .fa { color: var(--ge-topbar-fg); }
html[data-template="base"] .ge-topbar__spacer { flex: 1; }
/* A jobb oldali vezérlők SZOROSAN egymás mellett (mint a modul-ikonok): az ikonok
   önmagukban is 38px magas, azonos méretű célfelületek, a köztük hagyott rés csak
   szétszórta a sávot. A csoportok közti elválasztást a #maintopmenu `gap`-je adja. */
html[data-template="base"] .ge-topbar__actions { display: flex; align-items: center; gap: 2px; }

/* A modulok + akció-klaszter közös csomagja. Asztali nézetben „átlátszó" doboz
   (display:contents): a gyermekei a felső sáv flex-elemeiként folynak, így a
   korábbi elrendezés változatlan. Mobil nézetben a mobile-nav.js a bal menübe
   (off-canvas fiók) helyezi át — lásd a 900px media queryt. */
html[data-template="base"] .ge-topbar__cluster { display: contents; }

/* Mobil menünyitó — animált háromsávos gomb (nyitva X-be fordul). Csak keskeny
   nézetben látszik; a régi #mainmenu glyph-hack helyett egy valódi gomb. */
html[data-template="base"] .ge-menu-toggle {
	display: none;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	margin-left: -6px;
	padding: 0;
	background: transparent;
	border: 1px solid transparent;
	border-radius: var(--ge-radius-sm);
	color: var(--ge-topbar-fg);
	cursor: pointer;
}
html[data-template="base"] .ge-menu-toggle:hover { background: var(--ge-topbar-hover); }
html[data-template="base"] .ge-menu-toggle__bars { position: relative; display: block; width: 22px; height: 16px; }
html[data-template="base"] .ge-menu-toggle__bars span {
	position: absolute;
	left: 0;
	width: 100%;
	height: 2px;
	border-radius: 2px;
	background: currentColor;
	transition: transform .25s ease, opacity .2s ease, top .25s ease;
}
html[data-template="base"] .ge-menu-toggle__bars span:nth-child(1) { top: 0; }
html[data-template="base"] .ge-menu-toggle__bars span:nth-child(2) { top: 7px; }
html[data-template="base"] .ge-menu-toggle__bars span:nth-child(3) { top: 14px; }
html[data-template="base"] .ge-menu-toggle[aria-expanded="true"] .ge-menu-toggle__bars span:nth-child(1) { top: 7px; transform: rotate(45deg); }
html[data-template="base"] .ge-menu-toggle[aria-expanded="true"] .ge-menu-toggle__bars span:nth-child(2) { opacity: 0; }
html[data-template="base"] .ge-menu-toggle[aria-expanded="true"] .ge-menu-toggle__bars span:nth-child(3) { top: 7px; transform: rotate(-45deg); }

/* Off-canvas háttér-elsötétítés (csak nyitott fióknál). A JS az .is-visible
   osztállyal mutatja; a [hidden] alapból kiveszi a folyamatból. */
html[data-template="base"] .ge-scrim {
	position: fixed;
	inset: 0;
	z-index: 45;
	background: rgba(15, 23, 42, .5);
	opacity: 0;
	visibility: hidden;
	transition: opacity .2s ease, visibility .2s ease;
}
html[data-template="base"] .ge-scrim.is-visible { opacity: 1; visibility: visible; }
/* Nyitott fióknál a háttér ne görögjön. */
html[data-template="base"].ge-nav-open,
html[data-template="base"].ge-nav-open body { overflow: hidden; }

/* Az ikon-gombok NÉGYZETESEK, vízszintes belső margó nélkül: a 38px-es
   min-width már megadja az ajánlott célfelületet, a `padding: 0 10px` csak
   szélesítette a gombokat, és széthúzta velük az egész sávot. Az avatar
   monogramja (két betű) sem szorul: a min-width tágul, ha kell. */
html[data-template="base"] .ge-navbtn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	height: 38px;
	min-width: 38px;
	padding: 0;
	border-radius: var(--ge-radius-sm);
	background: transparent;
	color: var(--ge-topbar-muted);
	border: 1px solid transparent;
	text-decoration: none;
	cursor: pointer;
	font: inherit;
	transition: background .15s, color .15s, border-color .15s;
}
/* Rámutatás/fókusz: kivilágosodás (teli előtér) + látható keret — a modul-fülek
   így már nyugalmi állapotból is „megfoghatóak". */
html[data-template="base"] .ge-navbtn:hover,
html[data-template="base"] .ge-navbtn:focus-visible {
	background: var(--ge-topbar-hover);
	color: var(--ge-topbar-fg);
	border-color: var(--ge-topbar-border);
}
/* AKTÍV fül (a most nyitott modul): a hovernél is erősebb — teli előtér, kivilágosodó
   háttér és határozott keret. SZÁNDÉKOSAN a --ge-topbar-* tokenekből épül (nem fix
   fehérből), mert mobil nézetben a klaszter a világos bal menübe kerül, ahol ezek a
   tokenek a menü-felülethez vannak igazítva (lásd a 900px media query). */
html[data-template="base"] .ge-navbtn.is-active {
	color: var(--ge-topbar-fg);
	background: var(--ge-topbar-active);
	border-color: color-mix(in srgb, var(--ge-topbar-fg) 55%, transparent);
}
html[data-template="base"] .ge-navbtn--avatar {
	background: var(--ge-accent);
	color: var(--ge-accent-contrast);
	font-weight: 700;
	border-radius: 999px;
}

/* Mód-kapcsoló szegmens */
/* Tónusválasztó — zászlós nyelvválasztóval AZONOS legördülő. A trigger az aktuális
   tónus ikonja a színes sávon; a menü abszolút overlay (a világos `--ge-elevated`
   felületen), hover/fókusz nyitja. */
html[data-template="base"] .chosemode {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 38px;
	min-width: 38px;
	padding: 0;
	border-radius: var(--ge-radius-sm);
	border: 1px solid transparent;
	cursor: pointer;
	transition: background .15s, border-color .15s;
}
html[data-template="base"] .chosemode:hover { background: var(--ge-topbar-hover); }
html[data-template="base"] .chosemode__current {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--ge-topbar-muted);
}
html[data-template="base"] .chosemode:hover .chosemode__current { color: var(--ge-topbar-fg); }
html[data-template="base"] .chosemode__current i { font-size: 1.05rem; line-height: 1; }
html[data-template="base"] .chosemode__menu {
	position: absolute;
	top: 100%;
	right: 0;
	display: none;
	z-index: 60;
	padding: 6px;
	background: var(--ge-elevated);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius-sm);
	box-shadow: var(--ge-shadow);
}
html[data-template="base"] .chosemode__menu a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border-radius: var(--ge-radius-sm);
	color: var(--ge-text);
	text-decoration: none;
	transition: background .15s, color .15s;
}
html[data-template="base"] .chosemode__menu a + a { margin-top: 4px; }
html[data-template="base"] .chosemode__menu a:hover { background: color-mix(in srgb, var(--ge-text) 10%, transparent); }
html[data-template="base"] .chosemode__menu a.is-active { background: var(--ge-accent); color: var(--ge-accent-contrast); }
html[data-template="base"] .chosemode:hover .chosemode__menu,
html[data-template="base"] .chosemode:focus-within .chosemode__menu { display: block; }

/* Modul-ikonok balra (a márka után) — szorosan, hogy egy összetartozó ikonsornak
   látszódjanak, ne különálló gomboknak. */
html[data-template="base"] .ge-topbar__modules { display: flex; align-items: center; gap: 2px; }

/* Nyelvválasztó — zászlós legördülő (mint a Semmelweis elrendezésben). A menü
   abszolút overlay: a felső sáv FÖLÉ rétegződik (z-index), nem nyújtja meg. */
html[data-template="base"] .choselanguage {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 38px;
	min-width: 38px;
	padding: 0;
	border-radius: var(--ge-radius-sm);
	border: 1px solid transparent;
	cursor: pointer;
	transition: background .15s, border-color .15s;
}
html[data-template="base"] .choselanguage:hover { background: var(--ge-topbar-hover); }
html[data-template="base"] .choselanguage__current { display: block; border-radius: 3px; }
html[data-template="base"] .choselanguage__menu {
	position: absolute;
	top: 100%;
	right: 0;
	display: none;
	z-index: 60;
	padding: 6px;
	background: var(--ge-elevated);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius-sm);
	box-shadow: var(--ge-shadow);
}
html[data-template="base"] .choselanguage__menu a { display: block; line-height: 0; }
html[data-template="base"] .choselanguage__menu a + a { margin-top: 6px; }
html[data-template="base"] .choselanguage__menu img { display: block; border-radius: 3px; }
html[data-template="base"] .choselanguage:hover .choselanguage__menu,
html[data-template="base"] .choselanguage:focus-within .choselanguage__menu { display: block; }

/* =============================================================================
   KEDVENC-CSILLAG (kezdőoldal) — LEBEGŐ, a felső sáv alatt jobbra
   -----------------------------------------------------------------------------
   A korábbi teljes szélességű kezdőoldal-SÁV helyett egy lebegő (fixed) korong: nincs
   a normál folyamban, így NEM tolja lejjebb a tartalmat (ezért a bal menü fix eltolása
   is csak a felső sáv + státusz-sávok magassága).

   A csillag mindig az ÉPP NYITOTT modulra vonatkozik:
     - üres csillag  → kattintásra ez lesz a kezdőoldalad (POST → set-home.php),
     - tele csillag  → már ez a kezdőoldalad (inaktív jel, nem gomb).
   Alaphelyzetben visszafogott (áttetsző), hogy ne vonja el a figyelmet a tartalomról;
   rámutatásra/fókuszra teljesen kirajzolódik.
   ============================================================================= */
html[data-template="base"] .ge-homestar {
	position: fixed;
	top: 68px;
	right: 16px;
	z-index: 44;
	line-height: 0;
}
html[data-template="base"] .ge-homestar form { margin: 0; }
html[data-template="base"] .ge-homestar__btn {
	display: block;
	width: 30px;
	height: 30px;
	padding: 0;
	border: 1px solid var(--ge-border);
	border-radius: 50%;
	background: var(--ge-surface);
	box-shadow: var(--ge-shadow-sm);
	color: var(--ge-muted);
	opacity: .55;
	cursor: pointer;
	transition: opacity .15s, color .15s, border-color .15s, background .15s;
}
html[data-template="base"] .ge-homestar__btn::before {
	content: "";
	display: block;
	width: 17px;
	height: 17px;
	margin: 0 auto;
	background-color: currentColor;
	-webkit-mask: var(--ic-favorite-outline) center / contain no-repeat;
	        mask: var(--ic-favorite-outline) center / contain no-repeat;
}
html[data-template="base"] .ge-homestar__btn:hover,
html[data-template="base"] .ge-homestar__btn:focus-visible {
	opacity: 1;
	color: var(--ge-accent);
	border-color: var(--ge-accent);
	outline: none;
}
/* „Ez a kezdőoldalad": tele csillag, akcentszínnel — jel, nem gomb. */
html[data-template="base"] .ge-homestar__btn.is-home {
	color: var(--ge-accent);
	opacity: .85;
	cursor: default;
}
html[data-template="base"] .ge-homestar__btn.is-home::before {
	-webkit-mask-image: var(--ic-favorite);
	        mask-image: var(--ic-favorite);
}

@media (max-width: 900px) {
	html[data-template="base"] .ge-homestar { top: 66px; right: 10px; }
}

/* Oldalsáv */
html[data-template="base"] #leftnavigation {
	position: fixed;
	/* Kiindulási eltolás: a felső sáv (60px). A kedvenc-csillag lebeg, nem foglal
	   helyet. A user.php szkriptje ezt élőben újraszámolja (státusz-sávok, sortörés),
	   ez csak azért kell, hogy a lap első festésekor se csússzon a menü a sáv alá. */
	top: 60px;
	left: 0;
	width: 248px;
	height: calc(100vh - 60px);
	overflow-y: auto;
	padding: 18px 14px;
	background: var(--ge-nav);
	border-right: 1px solid var(--ge-border);
}
html[data-template="base"] .left-nav-menu-title { font-weight: 700; font-size: 1rem; margin-bottom: 10px; color: var(--ge-text); }
html[data-template="base"] .left-nav-user { margin-bottom: 14px; padding-bottom: 12px; border-bottom: 1px solid var(--ge-border); }
html[data-template="base"] .left-nav-user__name { font-weight: 600; font-size: .9rem; color: var(--ge-text); }
html[data-template="base"] .left-nav-user__code { font-weight: 400; color: var(--ge-muted); }
html[data-template="base"] .left-nav-user__role { margin-top: 2px; font-size: .8rem; color: var(--ge-muted); }
html[data-template="base"] .left-nav-menuitem {
	display: block;
	padding: 9px 12px;
	margin-bottom: 2px;
	border-radius: var(--ge-radius-sm);
	color: var(--ge-muted);
	text-decoration: none;
	transition: background .15s, color .15s;
}
html[data-template="base"] .left-nav-menuitem:hover { background: var(--ge-surface-2); color: var(--ge-text); }
html[data-template="base"] .left-nav-menuitem.is-active { background: color-mix(in srgb, var(--ge-accent) 14%, transparent); color: var(--ge-accent); font-weight: 700; }
html[data-template="base"] .left-nav-menuitem.is-dimmed { opacity: .55; }
html[data-template="base"] .sys-nav-inactive { font-size: .8em; }

/* Lenyíló főmenü-csoport */
html[data-template="base"] .sys-navgroup { margin-bottom: 2px; }
html[data-template="base"] .sys-navgroup__head { display: flex; align-items: center; gap: 4px; }
html[data-template="base"] .sys-navgroup__label { flex: 1 1 auto; margin-bottom: 0; }
html[data-template="base"] .sys-navgroup__toggle {
	flex: 0 0 auto;
	width: 30px;
	height: 34px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	border: 0;
	color: var(--ge-faint);
	cursor: pointer;
	border-radius: var(--ge-radius-sm);
}
html[data-template="base"] .sys-navgroup__toggle:hover { background: var(--ge-surface-2); color: var(--ge-text); }
html[data-template="base"] .sys-navgroup__toggle .fa { transition: transform .15s; transform: rotate(-90deg); }
html[data-template="base"] .sys-navgroup.open .sys-navgroup__toggle .fa { transform: rotate(0deg); }
html[data-template="base"] .sys-navgroup__items { display: none; padding: 2px 0 6px 10px; margin-left: 6px; border-left: 1px solid var(--ge-border); }
html[data-template="base"] .sys-navgroup.open .sys-navgroup__items { display: block; }
html[data-template="base"] .sys-navgroup__items .sys-nav-child { font-size: .92rem; }
html[data-template="base"] #newtask {
	margin-top: 18px;
	padding: 14px;
	background: var(--ge-surface);
	border: 1px solid var(--ge-border);
	border-radius: var(--ge-radius);
}
html[data-template="base"] #newtask h4 { margin: 0 0 8px; font-size: .85rem; color: var(--ge-muted); font-weight: 600; }
html[data-template="base"] #newtask textarea {
	width: 100%;
	background: var(--ge-surface-2);
	color: var(--ge-text);
	border: 1px solid var(--ge-border-strong);
	border-radius: var(--ge-radius-sm);
	padding: 8px;
	resize: vertical;
}
html[data-template="base"] #newtask .submit {
	margin-top: 8px;
	height: 36px;
	padding: 0 14px;
	background: var(--ge-accent);
	color: var(--ge-accent-contrast);
	border: none;
	border-radius: var(--ge-radius-sm);
	font-weight: 700;
	cursor: pointer;
}

/* Tartalom + infosáv */
html[data-template="base"] #content,
html[data-template="base"] #content.ge-omhv {
	margin: 0 0 0 248px;
	max-width: 1040px;
	padding: 28px 32px 64px;
}

/* ===== Gaming modul: nincs bal menü — felső VISSZA-sáv =====
   A gaming modulon a shell nem rendereli a bal menüt (user.php), így a tartalom teljes
   szélességet kap. A felső sávban EGYETLEN elem áll: a vissza-nyíl a Játéktárba
   (topnavigation.php). A nyitott játék aloldalai (Ranglista/Karrier) NEM ide, hanem a
   tartalom tetejére, fülsávba kerülnek — külön szint, külön hely.
   Az AKTÍV JÁTÉK oldalán a platform felső fejléce sem renderelődik — ott csak egy
   szöveg nélküli kilépés-nyíl marad. A sáv CSS-e itt (base.css, a fejlécben töltődik)
   él, hogy ne villanjon. */
html[data-template="base"] #content.gaming {
	margin-left: 0;
	max-width: none;
}

/* ===== Kvíz / Kérdőív (forms): nincs bal menü — a tartalom teljes szélességet kap =====
   A forms modulnak nincs leftnavigation.php-ja (archive/): a navigáció KÁRTYÁS — a
   nyitólap a Típus- és az Analitika-kártyákat mutatja, az Analitikán belül al-sáv vezet.
   Így a shell nem rendel bal menüt, a tartalomnak pedig nem kell a 248px-es behúzás.
   (A max-width megmarad az olvasható sorhosszért; balra igazítva, mint a fejléc.) */
html[data-template="base"] #content.forms-page {
	margin-left: 0;
}

html[data-template="base"] .gaming-topnav {
	position: sticky;
	top: 0;
	z-index: 40;
	background: var(--ge-nav);
	border-bottom: 1px solid var(--ge-border);
	padding: 10px 20px;
	overflow-x: auto;
}
html[data-template="base"] .gaming-topnav__inner {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	max-width: 1200px;
	margin: 0 auto;
}
/* A VISSZA-nyíl: nem lekerekített gomb, hanem egy diszkrét, balra mutató nyíl
   felirattal. Nem versenyez a tartalommal, és nem sugallja, hogy a Játéktár csak egy a
   sok egyenrangú menüpont közül — ez a kilépés-út a modul gyökerébe. */
html[data-template="base"] .gaming-topnav--back {
	padding: 6px 20px;
}
html[data-template="base"] .gaming-back {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 6px 12px 6px 6px;
	border-radius: 999px;
	color: var(--ge-muted);
	text-decoration: none;
	font-weight: 600;
	font-size: .9rem;
	white-space: nowrap;
	transition: background .15s, color .15s;
}
html[data-template="base"] .gaming-back:hover,
html[data-template="base"] .gaming-back:focus-visible {
	background: var(--ge-surface-2);
	color: var(--ge-text);
}
html[data-template="base"] .gaming-back__icon {
	width: 20px;
	height: 20px;
	display: block;
	flex: none;
}

/* ===== Aktív játék (immerzív): a gombsáv helyett CSAK egy diszkrét kilépés-nyíl =====
   A nyíl NEM foglal külön sort: a sáv `position: fixed`-del a bal felső sarokba kerül,
   kikerül a folyamból, így a játék tartalma (nála a kör-infó + játékosnevek sora)
   felcsúszik MELLÉ — a nyíl és a nevek egy sorban. A #content teteje ilyenkor feljebb
   kezdődik (body.gaming-immersive lentebb), hogy a nyíl a topbar sorával egy vonalban
   legyen; a játék a maga részéről balra behúzza a topbart, hogy a nyíl elférjen. */
html[data-template="base"] .gaming-topnav--immersive {
	position: fixed;
	top: 0;
	left: 0;
	z-index: 45;
	padding: 6px;
	background: transparent;
	border-bottom: none;
	overflow: visible;
}
html[data-template="base"] .gaming-exit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 999px;
	color: var(--ge-muted);
	text-decoration: none;
	transition: background .15s, color .15s;
}
html[data-template="base"] .gaming-exit:hover,
html[data-template="base"] .gaming-exit:focus-visible {
	background: var(--ge-surface-2);
	color: var(--ge-text);
}
html[data-template="base"] .gaming-exit__icon {
	width: 24px;
	height: 24px;
	display: block;
}

/* Immerzív játékban a tartalom teteje feljebb kezdődik, hogy a bal felső, lebegő
   kilépés-nyíl a játék első sorával (kör-infó + játékosnevek) egy vonalba essen. */
html[data-template="base"] body.gaming-immersive #content.gaming {
	padding-top: 8px;
}

/* Státusz-sávok (karbantartás + infó) KÖZVETLENÜL a #content fölött, teljes
   szélességben (margin-left:0). Normál folyamban vannak, így aktívan lejjebb
   tolják a tartalmat. A z-index a fix bal menü FÖLÉ emeli (de a sticky felső
   sáv z-index:50 alá), hogy a sáv szövege teljes szélességben olvasható legyen.
   Csak az aktív sáv renderelődik (a user.php feltételesen írja ki) — nincs üres sáv. */
html[data-template="base"] .statusbar {
	position: relative;
	z-index: 40;
	margin-left: 0;
	padding: 10px 32px;
	background: var(--ge-warning);
	color: #1A1205;
}
html[data-template="base"] .statusbar h4 { margin: 0; }
html[data-template="base"] .statusbar--maintenance {
	background: #b00020;
	color: #fff;
}

/* Alert: a képernyő közepén végigfutó, teljes szélességű csík, a tartalom fölé
   z-indexelve, áttűnéssel. (A megjelenés/animáció finomítása külön session.) */
html[data-template="base"] #alert {
	position: fixed;
	top: 50%;
	left: 0;
	right: 0;
	transform: translateY(-50%);
	z-index: 200;
	padding: 18px 24px;
	text-align: center;
	background: var(--ge-surface);
	color: var(--ge-text);
	border-top: 1px solid var(--ge-border);
	border-bottom: 1px solid var(--ge-border);
	box-shadow: var(--ge-shadow-sm);
	transition: opacity .35s ease;
}
html[data-template="base"] #alert h4 { margin: 0; }

@media (max-width: 900px) {
	html[data-template="base"] .ge-menu-toggle { display: inline-flex; }

	/* A felső sávban már csak a nyitógomb + márka marad. Ha a JS nem futott le,
	   a klaszter a sávban maradna — itt elrejtjük, hogy ne törje a fejlécet (a
	   JS a bal menüs fiókba helyezi át, ahol már nem ez a szabály érvényesül).
	   BAL MENÜ NÉLKÜLI oldalon (gaming/forms: nincs #leftnavigation) a klaszter
	   marad az #maintopmenu gyereke, és MAGA lesz a fiók — ezt a
	   `.ge-topbar__cluster--standalone` osztály jelzi, ezért itt kizárjuk. */
	html[data-template="base"] #maintopmenu > .ge-topbar__cluster:not(.ge-topbar__cluster--standalone) { display: none; }

	/* A bal menü off-canvas fiókká válik: balról csúszik be, fölé borul a tartalomnak.
	   EGYETLEN görgethető felület (overflow-y: auto) — a menütartalom (.ge-drawer-
	   scroll) és az akció-klaszter EGYMÁS UTÁN, a normál dokumentum-folyamban.
	   Korábban a klaszter külön, `overflow:hidden`-nel levágott lábjegyzet volt —
	   ha a tartalma (hosszú modul-sor + 3 sor) nem fért a maradék helyre, a 3.
	   sora egyszerűen levágódott, görgetés nélkül. Az EGY közös görgetőn +
	   `position: sticky` klaszteren ez nem történhet meg: bármekkora a tartalom,
	   végig lehet görgetni hozzá. */
	html[data-template="base"] #leftnavigation {
		z-index: 46;
		width: min(86vw, 320px);
		padding: 0;
		overflow-y: auto;
		box-shadow: var(--ge-shadow);
		transform: translateX(-100%);
		transition: transform .25s ease;
	}
	html[data-template="base"] #leftnavigation.open { transform: translateX(0); }
	html[data-template="base"] #content,
	html[data-template="base"] #content.ge-omhv { margin-left: 0; }

	/* A menütartalom (cím, menüpontok, támogatás-panel stb.) saját belső margója —
	   mindaz, amit a szerver eredetileg az #leftnavigation-ba renderelt, a
	   mobile-nav.js csomagolja ide, hogy utána következhessen az akció-klaszter. */
	html[data-template="base"] #leftnavigation .ge-drawer-scroll {
		padding: 18px 14px;
	}

	/* EGYSÉGES akció-klaszter — mindkét fiók-fajta (bal menüs ÉS bal menü nélküli
	   önálló fiók) UGYANEZT a szabálycsomagot használja, hogy a két korábban
	   eltérő megjelenés (OMHV-típusú lábjegyzet vs. gaming/forms-típusú önálló
	   fiók) egyetlen elrendezésben egyesüljön. A `.ge-topbar__modules` / `--right`
	   / `.ge-topbar__actions` konténerek itt `display:contents`-re váltanak (lásd
	   lejjebb): a gombjaik közvetlen flex-gyerekei lesznek a klaszternek, ezért az
	   `order` (osztályonként) ÁTRENDEZHETI őket az eredeti bal/jobb konténertől
	   függetlenül — mindegy, hogy az admin a profilt/rendszert az asztali
	   nézetben balra vagy jobbra pozicionálta.
	   HÁROM SOR (kötött sorrend, `::before`/`::after` kényszerít sortörést):
	     1. profil, rendszer (ha elérhető), kilépés
	     2. a rendes modul-fülek (+ a "Bemutató" gomb, ha van)
	     3. nyelvválasztó, tónusválasztó
	   BAL MENÜS oldalon a klaszter a fiók (#leftnavigation) ALJÁHOZ TAPAD
	   (`position: sticky; bottom: 0`), amíg a menü fölötte gördül — mindig
	   elérhető marad, sosem vágódik le. A gombok eredetileg a színes felső
	   sávhoz készültek — itt a sáv-tokeneket a világos menü-felülethez
	   igazítjuk, hogy olvashatóak maradjanak. */
	html[data-template="base"] #leftnavigation > .ge-topbar__cluster,
	html[data-template="base"] .ge-topbar__cluster.ge-topbar__cluster--standalone {
		display: flex;
		flex-flow: row wrap;
		align-items: center;
		gap: 10px 8px;
		padding: 16px 14px calc(14px + env(safe-area-inset-bottom, 0px));
		border-top: 1px solid var(--ge-border);
		background: var(--ge-nav);
		--ge-topbar-fg: var(--ge-text);
		--ge-topbar-muted: var(--ge-muted);
		--ge-topbar-hover: var(--ge-surface-2);
		--ge-topbar-active: color-mix(in srgb, var(--ge-accent) 14%, transparent);
		--ge-topbar-border: var(--ge-border);
	}
	html[data-template="base"] #leftnavigation > .ge-topbar__cluster {
		position: sticky;
		bottom: 0;
	}

	/* Bal menü NÉLKÜLI oldal (gaming/forms): a klaszter MAGA a fiók, ugyanúgy
	   balról csúszik be, mint a bal menüs oldalakon — így a nyitás iránya
	   egységes, függetlenül attól, hogy a modulnak van-e bal menüje. Ide kerül a
	   topnav jobb oldala (profil/mód/nyelv/kilépés) is, hogy a hamburgerről
	   minden oldalon elérhető legyen. */
	html[data-template="base"] .ge-topbar__cluster.ge-topbar__cluster--standalone {
		position: fixed;
		top: 60px;
		left: 0;
		z-index: 46;
		width: min(86vw, 320px);
		height: calc(100vh - 60px);
		align-content: flex-start;
		overflow-y: auto;
		box-shadow: var(--ge-shadow);
		border-top: none;
		border-right: 1px solid var(--ge-border);
		transform: translateX(-100%);
		transition: transform .25s ease;
	}
	html[data-template="base"] .ge-topbar__cluster--standalone.open { transform: translateX(0); }

	/* A modul-/akció-konténerek "átlátszóvá" válnak: a gombjaik a klaszter
	   közvetlen flex-gyerekei lesznek, hogy az alábbi `order` szabályok sor-
	   csoportokba rendezhessék őket az eredeti (bal/jobb) elhelyezéstől
	   függetlenül. */
	html[data-template="base"] #leftnavigation .ge-topbar__modules,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-topbar__modules,
	html[data-template="base"] #leftnavigation .ge-topbar__actions,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-topbar__actions {
		display: contents;
	}
	html[data-template="base"] #leftnavigation .ge-topbar__spacer,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-topbar__spacer { display: none; }

	/* 1. sor: profil, rendszer, kilépés. */
	html[data-template="base"] #leftnavigation .ge-navbtn--avatar,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-navbtn--avatar { order: 1; }
	html[data-template="base"] #leftnavigation .ge-navbtn--system,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-navbtn--system { order: 2; }
	html[data-template="base"] #leftnavigation .ge-navbtn--logout,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-navbtn--logout { order: 3; }

	/* Kényszerített sortörés az 1. és a 2. sor közt. */
	html[data-template="base"] #leftnavigation > .ge-topbar__cluster::before,
	html[data-template="base"] .ge-topbar__cluster--standalone::before {
		content: '';
		order: 4;
		flex-basis: 100%;
		height: 0;
		border-top: 1px solid var(--ge-border);
	}

	/* 2. sor: a rendes modul-fülek + a "Bemutató" gomb (ha van). */
	html[data-template="base"] #leftnavigation .ge-navbtn--module,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-navbtn--module { order: 5; }
	html[data-template="base"] #leftnavigation .ge-navbtn--guide,
	html[data-template="base"] .ge-topbar__cluster--standalone .ge-navbtn--guide { order: 6; }

	/* Kényszerített sortörés a 2. és a 3. sor közt. */
	html[data-template="base"] #leftnavigation > .ge-topbar__cluster::after,
	html[data-template="base"] .ge-topbar__cluster--standalone::after {
		content: '';
		order: 7;
		flex-basis: 100%;
		height: 0;
		border-top: 1px solid var(--ge-border);
	}

	/* 3. sor: nyelvválasztó, tónusválasztó. */
	html[data-template="base"] #leftnavigation .choselanguage,
	html[data-template="base"] .ge-topbar__cluster--standalone .choselanguage { order: 8; }
	html[data-template="base"] #leftnavigation .chosemode,
	html[data-template="base"] .ge-topbar__cluster--standalone .chosemode { order: 9; }

	/* A nyelv-/tónus-legördülő a fiókban lefelé/jobbra nyíljon, ne a sáv fölé. */
	html[data-template="base"] #leftnavigation .choselanguage__menu,
	html[data-template="base"] .ge-topbar__cluster--standalone .choselanguage__menu { right: auto; left: 0; }
	html[data-template="base"] #leftnavigation .chosemode__menu,
	html[data-template="base"] .ge-topbar__cluster--standalone .chosemode__menu { right: auto; left: 0; }
}

/* =============================================================================
   FELHASZNÁLÓI SZÍNPALETTÁK (Kinézet) — a beépített light/dim/dark mellett
   -----------------------------------------------------------------------------
   A választható akadémiai paletták (lásd feedback_theme_schemes() PHP-ben) hat
   primitív színt adnak (--p-*). Az aktív paletta primitíveit a base html-fej
   injektálja egy <style> blokkban (data-theme-scheme="..."); EZ a szabály pedig
   a hat primitívet a TELJES --ge-* token-készletre képezi color-mix derivációval.
   Specificitása (2 attr) erősebb a data-theme-mode módblokkoknál, így aktív
   paletta esetén felülírja a módot. Alapértelmezésben NINCS data-theme-scheme a
   <html>-en, tehát ez a szabály nem érvényesül, és marad a light/dim/dark.
   Template-FÜGGETLEN (nincs [data-template] szűkítés): bármely shell-en érvényes.
   ============================================================================= */
html[data-theme-scheme] {
	--ge-bg: var(--p-bg);
	--ge-surface: var(--p-surface);
	--ge-surface-2: color-mix(in srgb, var(--p-surface) 90%, var(--p-text));
	--ge-elevated: color-mix(in srgb, var(--p-surface) 94%, var(--p-text));
	--ge-border: color-mix(in srgb, var(--p-text) 14%, var(--p-surface));
	--ge-border-strong: color-mix(in srgb, var(--p-text) 30%, var(--p-surface));
	--ge-text: var(--p-text);
	--ge-muted: var(--p-muted);
	--ge-faint: color-mix(in srgb, var(--p-text) 42%, var(--p-surface));
	--ge-accent: var(--p-accent);
	--ge-accent-hover: color-mix(in srgb, var(--p-accent) 80%, var(--p-text));
	--ge-accent-contrast: var(--p-on);
	--ge-topbar: var(--p-surface);
	--ge-nav: var(--p-surface);
}

/* =============================================================================
   NAV IKONKÉSZLET (akadémiai) — a fix gombokon, MINDEN sémán, CSS-maszkkal
   -----------------------------------------------------------------------------
   A felső nav fix gombjai (logó, rendszer, kilépés, modul) egységes, oktatás-
   fókuszú SVG-ikonkészletet kapnak. EGYETLEN SVG/ikon, amit CSS mask-kal a gomb
   SZÍNÉRE (currentColor) festünk: nyugalmi állapotban tompított (--ge-topbar-muted),
   hoverre teli előtér (--ge-topbar-fg) — pont mint a korábbi FontAwesome-glyphek,
   és így minden módban (light/dim/dark) ÉS minden sémán automatikusan helyes a
   kontraszt. A FA-glyph-eket elrejtjük. A 'brand' kivétel: a semmelweis sémánál az
   SE-címer (teljes színű kép) marad. A globális Logó-választás (system → Globális) a
   brand-jelet valódi képre válthatja — ezt a html-header injektálja (mask:none). */
html[data-template="base"] {
	--ic-brand: url(../img/icons/nav-brand.svg);
	--ic-system: url(../img/icons/nav-system.svg);
	--ic-logout: url(../img/icons/nav-logout.svg);
	/* Súgó/bemutató („?") — az OMHV bevezető fedőrétegét indítja újra. */
	--ic-help: url(../img/icons/nav-help.svg);
	--ic-module: url(../img/icons/nav-module.svg); /* fallback: ismeretlen modul */
	/* Kedvenc (kezdőoldal) csillag — KORÁBBAN az OMHV modul jele volt; a modul saját
	   ikont kapott, a csillag a „kedvenc oldal" jelentést vitte tovább a lebegő
	   kezdőoldal-kapcsolóba. Tele = ez a kezdőoldalad, üres = kattintásra azzá lesz. */
	--ic-favorite: url(../img/icons/nav-favorite.svg);
	--ic-favorite-outline: url(../img/icons/nav-favorite-outline.svg);
	/* Modulonként saját ikon (data-module alapján). Új modul: SVG + itt egy sor +
	   egy ::before szabály lentebb; ismeretlen modul a fenti --ic-module-t kapja. */
	/* A ?v= a BÖNGÉSZŐ-CACHE miatt kell: a nav-omhv.svg TARTALMA cserélődött
	   (csillag → oktató + értékelés-oszlopok). A base.css maga verziózva jön
	   (feedback_asset_versioned), de a benne hivatkozott SVG URL-je változatlan
	   maradt volna, és a régi jel a cache-ből jött volna vissza. */
	--ic-omhv: url(../img/icons/nav-omhv.svg?v=2);
	/* A Kvíz/Kérdőív modul a korábbi három modul (poll/quiz/survey) utóda — a
	   kvíz-glyph maradt a jele. A nav-poll.svg / nav-survey.svg fájlok megvannak,
	   ha egy későbbi almodul saját jelet kap. */
	--ic-forms: url(../img/icons/nav-quiz.svg);
	--ic-qa: url(../img/icons/nav-qa.svg);
	--ic-attendance: url(../img/icons/nav-attendance.svg);
	--ic-onscreen: url(../img/icons/nav-onscreen.svg);
	--ic-rrf: url(../img/icons/nav-rrf.svg);
	--ic-gaming: url(../img/icons/nav-gaming.svg);
}

/* Brand-jel: a bar-chart glyph helyett akadémiai jel (nyitott könyv), a márka-
   szövegszínre maszkolva. */
html[data-template="base"] .ge-topbar__brand i { display: none; }
html[data-template="base"] .ge-topbar__brand::before {
	content: "";
	width: 24px;
	height: 24px;
	flex: 0 0 auto;
	background-color: currentColor;
	-webkit-mask: var(--ic-brand) center / contain no-repeat;
	        mask: var(--ic-brand) center / contain no-repeat;
}
/* Semmelweis márka: az SE-címer marad — teljes színű kép, NEM maszkolva. */
html[data-icons="semmelweis"] .ge-topbar__brand::before {
	width: 26px;
	height: 26px;
	background-color: transparent;
	-webkit-mask: none;
	        mask: none;
	background: url(../img/se-cimer-atlatszo.png) center / contain no-repeat;
}

/* Fix akció-gombok: a FA-glyph elrejtve, helyette maszkolt SVG a ::before-on. A
   maszk kitöltése currentColor → követi a gomb nyugalmi/hover színét (a gomb saját
   háttere — a hover-kiemelés — külön réteg marad). */
html[data-template="base"] .ge-navbtn--system i,
html[data-template="base"] .ge-navbtn--logout i,
html[data-template="base"] .ge-navbtn--guide i,
html[data-template="base"] .ge-navbtn--module i { display: none; }

html[data-template="base"] .ge-navbtn--system::before,
html[data-template="base"] .ge-navbtn--logout::before,
html[data-template="base"] .ge-navbtn--guide::before,
html[data-template="base"] .ge-navbtn--module::before {
	content: "";
	width: 20px;
	height: 20px;
	flex: 0 0 auto;
	background-color: currentColor;
	-webkit-mask-position: center;
	        mask-position: center;
	-webkit-mask-repeat: no-repeat;
	        mask-repeat: no-repeat;
	-webkit-mask-size: 20px 20px;
	        mask-size: 20px 20px;
}
html[data-template="base"] .ge-navbtn--system::before { -webkit-mask-image: var(--ic-system); mask-image: var(--ic-system); }
html[data-template="base"] .ge-navbtn--logout::before { -webkit-mask-image: var(--ic-logout); mask-image: var(--ic-logout); }
html[data-template="base"] .ge-navbtn--guide::before { -webkit-mask-image: var(--ic-help); mask-image: var(--ic-help); }
html[data-template="base"] .ge-navbtn--module::before { -webkit-mask-image: var(--ic-module); mask-image: var(--ic-module); }
/* Modulonkénti ikon a data-module alapján (a fenti generikus --ic-module felülírása). */
html[data-template="base"] .ge-navbtn--module[data-module="omhv"]::before       { -webkit-mask-image: var(--ic-omhv);       mask-image: var(--ic-omhv); }
html[data-template="base"] .ge-navbtn--module[data-module="forms"]::before      { -webkit-mask-image: var(--ic-forms);      mask-image: var(--ic-forms); }
html[data-template="base"] .ge-navbtn--module[data-module="qa"]::before         { -webkit-mask-image: var(--ic-qa);         mask-image: var(--ic-qa); }
html[data-template="base"] .ge-navbtn--module[data-module="attendance"]::before { -webkit-mask-image: var(--ic-attendance); mask-image: var(--ic-attendance); }
html[data-template="base"] .ge-navbtn--module[data-module="onscreen"]::before   { -webkit-mask-image: var(--ic-onscreen);   mask-image: var(--ic-onscreen); }
html[data-template="base"] .ge-navbtn--module[data-module="rrf"]::before        { -webkit-mask-image: var(--ic-rrf);        mask-image: var(--ic-rrf); }
html[data-template="base"] .ge-navbtn--module[data-module="gaming"]::before     { -webkit-mask-image: var(--ic-gaming);     mask-image: var(--ic-gaming); }

/* =============================================================================
   FEJLÉC = AKCENT (a paletta KÖZÉPSŐ színe) — MINDEN sémánál és az alapnál
   -----------------------------------------------------------------------------
   A felső sáv háttere mindig az akcentszín (a swatch-sor középső, 3. eleme), az
   előtér-tokenek világosak (akcent-kontraszt). Az avatar és az aktív mód-szegmens
   külön kontrasztot kap, hogy ne olvadjon a színes sávba. Mód- és séma-független
   (az itteni --ge-topbar* a módblokkok/séma-leképzés értékeit felülírja, mert
   később jön a fájlban és azonos specifikusságú).
   ============================================================================= */
html[data-template="base"] {
	--ge-topbar: var(--ge-accent);
	--ge-topbar-fg: var(--ge-accent-contrast);
	--ge-topbar-muted: color-mix(in srgb, var(--ge-accent-contrast) 78%, var(--ge-accent));
	--ge-topbar-hover: color-mix(in srgb, #ffffff 16%, transparent);
	/* Aktív fül háttere: erősebb fehér fátyol a hovernél — a színes sávon ez a
	   „kivilágosodás". Külön token, mert a mobil fiókban a világos menü-felülethez
	   kell igazítani (lásd a 900px media query). */
	--ge-topbar-active: color-mix(in srgb, #ffffff 30%, transparent);
	--ge-topbar-border: color-mix(in srgb, #ffffff 24%, transparent);
}
html[data-template="base"] #maintopmenu { border-bottom-color: transparent; }
/* Avatar a színes sávon: világos korong, akcent-színű kezdőbetűkkel. */
html[data-template="base"] .ge-navbtn--avatar {
	background: var(--ge-accent-contrast);
	color: var(--ge-accent);
}
/* Az avatarnak SAJÁT (világos korong) háttere van, ezért az általános aktív-háttér
   nem érvényesülhet rajta: nála a kiemelés egy körülölelő gyűrű. A szabály a
   generikus `.ge-navbtn.is-active` UTÁN jön, azonos specifikussággal → ez nyer. */
html[data-template="base"] .ge-navbtn--avatar.is-active {
	background: var(--ge-accent-contrast);
	color: var(--ge-accent);
	border-color: transparent;
	box-shadow: 0 0 0 2px color-mix(in srgb, var(--ge-topbar-fg) 70%, transparent);
}
