/* Publikus előadáslista + szűrőpanel (SZAB-30, spec §4.2, §10.2).
   Forrás: a design-prototípus (docs/design/szabadegyetem-prototipus-3.html)
   kártya-nézete, Campus-variáns. Csak a tokens.css változóira épül (ADR-010);
   a közös komponensek (.lap, .gomb, .kategoria, .keretsav-*, .pont) az
   alap.css-ben élnek – itt csak a lista-oldal saját osztályai vannak.
   Mobile-first: az alap szabályok a kis képernyőre szólnak; a szűrő-rács és
   a kártya-tétel szélesebb nézetben többoszloposra vált.

   TUDATOS KIHAGYÁSOK a prototípusból (NEM pótolandók itt):
   - naptár-táblázat, hónap-lapozó → SZAB-104, a következő szekciók
     (a nézet-váltó MÁR ITT van, lásd lentebb);
   - Foglalás gomb MŰKÖDÉSE (most disabled placeholder a sablonban),
     Várólista gomb, „betelt" valós adat → E4;
   - [data-szerep] attribútum-kapcsolós CSS: a saját-keret kiemelés
     (.keretsav-cimke--sajat + .sajat-jel, alap.css) SZERVER-oldali
     feltétellel renderelődik (ADR-006 – a CSS-elrejtés nem védelem). */

/* ===== KERESŐSÁV (a lista-fejléc és a szűrőpanel között; SZAB-75) =====
   Mobile-first: kis képernyőn a mező és a beküldő egymás alatt, teljes
   szélességben (ujjbarát cél); 34rem fölött egy sorban, a mező ALSÓ éléhez
   igazítva – így a gomb nem ugrik fel a címke magasságába. A sáv és a panel
   közti rés SZŰKEBB a panel alattinál: a kettő EGY űrlap, és annak is kell
   látszania. Csak meglévő változók és meglévő töréspont (34rem) – nincs új
   design-token és nincs új breakpoint (ADR-010). */
.kereso-sav {
  display: flex;
  flex-direction: column;
  gap: var(--ter-3);
  margin-bottom: var(--ter-4);
}
.kereso-sav .mezo { margin-bottom: 0; }  /* az alsó margót itt a gap adja */
/* A szabály az `<a class="gomb">` törlőre is illeszkedik – kis képernyőn a
   három vezérlő (mező, beküldő, törlő) egymás alatt, teljes szélességben áll,
   és ehhez NEM kell új CSS (SZAB-89, Képernyő-terv K4). A 48px érintési célt a
   `.gomb { min-height }` adja: sehol nem sérül, és nem is kell érte engedményt
   tenni – a sűrűsödést a vizuális hierarchia kezeli (kitöltött elsődleges +
   körvonalas másodlagos), nem a méret. */
.kereso-sav .gomb { width: 100%; }
/* A TALÁLAT-DARABSZÁM SZABÁLYAI INNEN TÖRÖLVE (SZAB-140/4. kör, Képernyő-terv
   K14/5). A `talalat-szam` egyetlen, feltétel nélküli helye a NÉZET-SOR, tehát
   a sávban nincs többé `.szuro-db` elem – a rá szóló deklarációk HOLT
   szabályok lettek volna. Két deklaráció esett ki:
   - `.kereso-sav .szuro-db { margin-left: auto }` (a K14/4 közös szabályának
     ez a fele). A megmaradó fél, `.nezet-sor .szuro-db { margin-left: auto }`
     szintén törölve: a `.szuro-db` ALAPSZABÁLYA ugyanezt mondja, egy helyen,
     azonos értékkel – a felülíró szabály tehát színtiszta ismétlés lett;
   - `@media (min-width: 34rem) { .kereso-sav .szuro-db { padding-bottom } }`
     – az `align-items: flex-end` melletti alapvonal-korrekció, aminek szintén
     nincs többé mit korrigálnia.
   A K14/4 mérése (a szám ~62px flex-alapja és a hozzá tartozó gap) ezzel
   TÁRGYÁT VESZTETTE; az új tördelési küszöböt a következő blokk mondja ki. */
/* 34rem fölött EGY sor – de TÖRDELHETŐEN (SZAB-89). A sáv a törlővel HÁROM
   elemet visel (a negyedik, a darabszám, a K14/5-tel kikerült), és a
   legszorosabb pont NEM a mobil nézet (ott minden elem teljes szélességű,
   egymás alatt), hanem közvetlenül a töréspont fölött: egy nem tördelő sorban
   a hosszú feliratú törlő mellett a keresőmezőnek ~111px maradna (34rem-en a
   tartalom 512px, ebből a beküldő 102 + a törlő 275 + 2 × 12px `gap`). A
   `flex: 1 1 18rem` a mező ALSÓ KORLÁTJA: ha a sor nem fér ki, a törlő második
   sorba tördelődik, a mező viszont olvasható marad.
   A TÖRDELÉSI KÜSZÖB A SZÁM KIESÉSÉVEL FELJEBB TOLÓDOTT, és a K14/4-ben mért
   763px ezt már nem írja le: aktív szűkítésnél a három elem flex-alapja
   288 + 102 + 275 + 2 × 12px `gap` = ~689px, a tartalom szélessége pedig
   `min(ablak, 64rem) − 2 × var(--ter-4)`. A sáv tehát ~544–721px
   ablakszélességen tördel (a korábbi ~544–795px helyett), és a második
   flex-sorra EGYEDÜL a törlő kerül – ott már nincs mellette halk darabszám,
   amelyik hozzáragadhatna. Szűkítés nélkül a sáv csak ~402px-et kér, tehát
   34rem fölött nem tördel; ≈46rem fölött mindhárom elem egy sorba fér.
   A `18rem` NEM töréspont és NEM design-token, hanem elrendezési hosszméret –
   ugyanaz a fajta érték, mint a meglévő `.akcio-gombok .gomb { min-width }`.
   Új töréspont és új token tehát nem születik (ADR-010). A sorok közti rést a
   meglévő `gap` adja. */
@media (min-width: 34rem) {
  .kereso-sav { flex-direction: row; flex-wrap: wrap; align-items: flex-end; }
  .kereso-sav .mezo { flex: 1 1 18rem; }
  .kereso-sav .gomb { width: auto; }
}

/* ===== NÉZET-VÁLTÓ (SZAB-104; Képernyő-terv K6) =====
   Pirula-pár KÉT LINKBŐL – a nézet URL-állapot, ezért a váltó navigáció, nem
   kapcsoló. Az aktív elem KITÖLTÖTT, a passzív KÖRVONALAS; a különbség
   KITÖLTÉS + BETŰSÚLY, nem csupán színárnyalat, így színtévesztéssel és
   forced-colors módban is megmarad (WCAG 1.4.1).
   A konténeren TILOS az `overflow: hidden` (a prototípus CSS-e ezt teszi): a
   :focus-visible gyűrű `outline-offset: 2px`-szel rajzolódik, és egy vágó
   konténer LEVÁGNÁ – billentyűzetes navigációnál a fókusz láthatatlanná
   válna. A lekerekítés ezért a két gyermek KÜLSŐ sarkain ül.
   Az állapotot az `[aria-current]` szelektálja: így a vizuális és az
   akadálymentes állapot nem tud szétcsúszni. A CSS SEHOL nem szelektál
   `data-testid`-re (ADR-024).
   Mobile-first: a pár teljes szélességű, két nagy, ujjbarát céllal; 34rem
   fölött a tartalmához zsugorodik, balra igazítva. Csak meglévő tokenek és a
   meglévő 34rem töréspont – nincs új token, nincs új breakpoint (ADR-010). */
.nezet-sor {
  display: flex;
  /* SZAB-136 (K2): a sor a nézet-váltó MELLÉ megkapja a kiírt időszakot,
     ezért tördelnie kell – mobilon a váltó alatt külön sorba kerül. */
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ter-2) var(--ter-4);
  margin-bottom: var(--ter-5);
}
/* A KIÍRT IDŐSZAK (SZAB-136, K2): címke + érték. Nem interaktív, nem címsor. */
.idoszak-sor {
  margin: 0;
}
.idoszak-cimke {
  color: var(--szin-tinta-halk);
}
.idoszak-ertek {
  font-weight: 600;
}
/* A TALÁLAT-DARABSZÁM EGYETLEN HELYE a `.nezet-sor` (SZAB-140/4. kör, K14/5) –
   a kiírt időszak BEKEZDÉSÉN KÍVÜL, a flex-konténer önálló elemeként (K14/1:
   enélkül egyetlen szóköznyire ragadna egy ponttal végződő dátum-tartomány
   mögé, és annak folytatásaként olvasódna).
   SZABÁLY IDE SEM KERÜL, és ez immár a TELJES leírás: a jobbra tolást a
   `.szuro-db` alapszabálya adja (`margin-left: auto`, lentebb), egy helyen,
   minden szélességen, nézet-feltétel nélkül. A korábbi két kivétel – a
   `0` / 34rem-`auto` páros (K14/1) és a két hordozóra írt közös felülírás
   (K14/4) – egyaránt megszűnt, és egy sem született a helyükön. */
/* A GYORSVÁLASZTÁS hat vezérlője (SZAB-136, K3). A `.nezet-valto > a` mintája:
   48px érintési cél, kiemelés-szegély, papír háttér; az aktív állapotot az
   `[aria-current]` szelektálja, KITÖLTÉSSEL és betűsúllyal – nem puszta
   színárnyalattal (WCAG 1.4.1, `forced-colors`). A CSS SEHOL nem szelektál
   `data-testid`-re (ADR-024).
   TÖRDEL, nem görget: a görgetősávba rejtett vezérlő látszólag nem létezik.
   A konténeren TILOS az `overflow: hidden` – a `:focus-visible` gyűrű
   `outline-offset`-tel rajzolódik, vágó konténerben láthatatlanná válna. */
.idoszak-gyorsvalaszto {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ter-2) var(--ter-3);
  margin-bottom: var(--ter-5);
}
/* A `.idoszak-gyors-cimke` SZABÁLY TÖRÖLVE (SZAB-140/1): a csoport-címke
   `sr-csak` lett, tehát a halk szín holt deklaráció volna. A NÉV nem veszett el
   – az `aria-labelledby` továbbra is egy VALÓDI szöveg-elemre mutat, csak az
   vizuálisan rejtett. A `.sr-csak` abszolút pozicionált, tehát flex-elemként
   nem foglal helyet, és a `justify-content`-be sem számít bele. */
/* 34rem fölött a blokk a sor JOBB szélére igazodik (SZAB-140/1). A nézet-váltó
   a bal szélen áll, a gyorsválasztás vele szemben – a lap két súlypontja így
   kiegyensúlyozódik, a K4-en kifogásolt „minden balra billen" torlódás
   megszűnik. MOBILON marad a balra igazított tördelés: jobbra igazított, több
   sorba tört érintési célok keskeny képernyőn nehezebben pásztázhatók, és ott a
   blokk amúgy is majdnem teljes szélességű. Meglévő töréspont, új token nincs. */
@media (min-width: 34rem) {
  .idoszak-gyorsvalaszto { justify-content: flex-end; }
}
.idoszak-gomb {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--meret-erintes);  /* 48px érintési cél (a11y §11.5) */
  padding: var(--ter-2) var(--ter-4);
  border: 1px solid var(--szin-kiemeles);
  border-radius: var(--sugar-m);
  background: var(--szin-papir);
  color: var(--szin-kiemeles);
  font-weight: 600;
  text-decoration: none;
}
.idoszak-gomb[aria-current] {
  background: var(--szin-kiemeles);
  color: var(--szin-papir);
  font-weight: 700;
}
.idoszak-gomb:hover:not([aria-current]) {
  background: var(--szin-kiemeles-halk);
}
/* A JELZETT VISSZAESÉS régiója (SZAB-136, K4). A `.uzenet` közös komponenshez
   NEM nyúlunk – itt csak a blokk-térköz és a bekezdés-ritmus áll. */
.idoszak-jelzes {
  margin-bottom: var(--ter-5);
}
.idoszak-jelzes p {
  margin: 0 0 var(--ter-2);
}
.idoszak-jelzes p:last-child {
  margin-bottom: 0;
}
.nezet-valto {
  display: flex;
  flex: 1;
  border: 1px solid var(--szin-kiemeles);
  border-radius: var(--sugar-m);
}
.nezet-valto > a {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--meret-erintes);  /* 48px érintési cél (a11y §11.5) */
  padding: var(--ter-2) var(--ter-4);
  background: var(--szin-papir);
  color: var(--szin-kiemeles);
  font-weight: 600;
  text-decoration: none;
}
.nezet-valto > a:first-child { border-radius: var(--sugar-m) 0 0 var(--sugar-m); }
.nezet-valto > a:last-child { border-radius: 0 var(--sugar-m) var(--sugar-m) 0; }
.nezet-valto > a + a { border-left: 1px solid var(--szin-kiemeles); }
.nezet-valto > a[aria-current] {
  background: var(--szin-kiemeles);
  color: var(--szin-papir);
  font-weight: 700;
}
.nezet-valto > a:hover:not([aria-current]) { background: var(--szin-kiemeles-halk); }
/* 34rem fölött a pár a tartalmához zsugorodik – a `.nezet-sor` flex-konténer
   alapértelmezett `flex-start` igazítása tartja balra. */
@media (min-width: 34rem) {
  .nezet-valto { flex: 0 0 auto; }
  .nezet-valto > a { flex: 0 0 auto; }
}

/* A HÓNAP-SOR SZABÁLYAI KIVEZETVE (SZAB-136, 6.2): `.honap-sor`, `.honap-cim`,
   `.honap-nyil*` és a hozzájuk tartozó töréspont-blokk törölve – a hordozó
   markup megszűnt, tehát holt szabályok lettek volna. Ami a helyükre lépett:
   `.idoszak-sor` / `.idoszak-ertek` (kiírt időszak) és `.idoszak-gyorsvalaszto`
   / `.idoszak-gomb` (gyorsválasztás), mindkettő a nézet-sor környékén, feljebb. */

/* ===== NAPTÁR-TÁBLÁZAT (SZAB-104; Képernyő-terv K1, K5, K7) =====
   A doboz, a keret és az alapstílus a közös `.tabla` / `.tabla-doboz`
   komponensekből jön; a `.naptar` KIZÁRÓLAG a naptár-specifikus részeket
   viszi. Hat oszlopnál a vízszintes cella-padding szűkebb (--ter-3 a --ter-4
   helyett) – ez ~48px nyereség. `white-space: nowrap` SEHOL nincs: minden
   cella tördelhet.

   MOBILE-FIRST (Képernyő-terv K2, K3): az ALAP szabályok a kis képernyőre
   szólnak – a sor egy tömör, flex-tördelő blokk –, és 48rem fölött vált
   vissza valódi táblázatra. A töréspont és a szerkezet a repó házi mintája
   (`.tabla--reszponziv`, alap.css), de a naptár NEM azt az osztályt
   használja, hanem a saját, `.naptar`-ra szűkített szabályait – így az
   `alap.css` és a `sajat_eloadasok.html` viselkedése változatlan marad.

   KÉT TUDATOS ELTÉRÉS a házi mintától (K3):
   (a) a `thead` `display: none`, NEM vizuálisan rejtett. 48rem alatt a
       táblázat-szemantika amúgy is elvész; egy „jelen lévő" fejlécsor a
       képernyőolvasónak HAT ÖSSZEFÜGGÉSTELEN SZÓ volna a lista elején, amely
       semmihez nem kapcsolódik. Zaj, nem segítség.
   (b) `data-cimke` + `::before` generált címke SEHOL nem szerepel. A
       generált szöveg felolvasása böngésző- és képernyőolvasó-függő (ugyanaz
       az érv, amiért a szűrőpanel nyitottság-jele sablon-elem), tehát egy
       címke, amely az EGYETLEN jelentés-hordozó volna, itt böngésző-függő
       szerencse lenne. Nincs is rá szükség: a cellák tartalma ÖNLEÍRÓ – az
       időpont időpontnak látszik, a kategória-pirula kategóriának, a szabad
       helyek értéke megnevezi magát („13 szabad" / „betelt"), a műveletek
       feliratozott gombok. Két mező szorul kontextusra, és mindkettő megkapja:
       a helyszín NEVE az előadó neve MELLETT áll, egy előadás-blokkon belül
       (ez a szerkezet a kártya `.meta` sorában ma is él); a keret azonosságát
       (hallgatói/külsős) pedig a táblázat fölötti szöveges JELMAGYARÁZAT
       mondja ki – az a sor mobilon is ott van, mert a táblázaton KÍVÜL áll. */
.naptar,
.naptar tbody { display: block; }
.naptar thead { display: none; }
.naptar tr {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ter-2) var(--ter-4);
  padding: var(--ter-4) var(--ter-3);
  border-bottom: var(--vonal);
}
.naptar tbody:last-child tr:last-child { border-bottom: 0; }
/* A flex-konténer a gyermekeit blokkosítja, ezért a cellákra nem kell külön
   `display: block`, és nem keletkezik anonim táblázat-doboz. Alapból minden
   cella TELJES SORT foglal: Idő · Előadás · Szabad helyek · Műveletek. */
.naptar td {
  flex: 1 0 100%;
  padding: 0;
  border: 0;
}
/* A Kategória és a Helyszín EGY soron osztozik – pontosan úgy, ahogy a kártya
   `.meta` blokkja teszi ma (gap-pel elválasztva, elválasztó karakter nélkül).
   (A K2 felülírása előtt itt az Előadó és a Helyszín állt párban; az előadó
   azóta a cím cellájába költözött.)
   Egyetlen mező sem esik el: a mobil nézet nem kevesebb, hanem tömörebb. */
.naptar .n-kategoria,
.naptar .n-helyszin { flex: 0 1 auto; }
.naptar .nap-fej { padding: 0; border-bottom: 0; gap: 0; }
/* MOBILON a műveletek teljes szélességű, egymás alatti gombok (K2, K8): itt a
   sormagasság nem szűkös, az ujjbarát cél viszont fontosabb. A saját osztály
   (nem a közös `.muvelet-oszlop`) azért kell, mert 48rem FÖLÖTT a naptár
   VÍZSZINTES gombpárt kér – a közös komponens neve és viselkedése pedig
   „oszlop", és a `sajat_eloadasok.html` táblázatában úgy is kell maradnia. */
.naptar .n-akcio-gombok {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--ter-3);
}
/* A „Lezárult" FELIRAT UGYANEZT A DOBOZT KAPJA (SZAB-140/2. kör, K14/3). EGY
   szelektor-lista a gombéval: a felirat így NEM TUD SZÉTCSÚSZNI attól a
   vezérlőtől, amelynek a helyén áll – ha a gomb mérete változik, a feliraté
   vele mozdul. A NEM-VEZÉRLŐ voltát a `.jelzes--gombalak` (alap.css) öt
   csatornája őrzi; itt kizárólag a doboz méretéről van szó. */
.naptar .n-akcio-gombok .gomb,
.naptar .n-akcio-gombok .jelzes--gombalak,
.naptar .n-akcio-gombok .akcio-urlap { width: 100%; }
.naptar .n-ido { font-variant-numeric: tabular-nums; font-weight: 700; }
/* IDŐ (K2 – FELÜLÍRVA): több idősáv esetén sávonként egy blokk. A kezdő és a
   záró időpont MOBILON egy sorban marad (ott van szélesség, a magasság a
   szűkös); 48rem fölött a záró a kezdő ALÁ kerül – lásd a media query-t. */
.naptar .ido-sav { display: block; }
/* ELŐADÓ ÉS CÍM egy cellában (K2 – FELÜLÍRVA): az előadó neve elöl, a cím
   KÜLÖN SORBAN – enélkül a kettő összeolvadna. */
.naptar .n-eloado-nev,
.naptar .n-cim-link { display: block; }
.naptar .n-eloado-nev { font-size: .85rem; }
/* A CÍM nyugalmi állapotban NEM látszik linknek (sötét szöveg, aláhúzás
   nélkül); `:hover`/`:focus` állapotban szín + aláhúzás. Ugyanaz a minta, mint
   a kártya-nézet `.tetel-cim a` szabálya és a prototípus `.n-cim a`-ja. A
   LINK-JELLEG nem vész el: a horgony, a cél-URL és a fókusz-gyűrű változatlan. */
.naptar .n-cim-link {
  color: inherit;
  text-decoration: none;
  font-weight: 600;
}
.naptar .n-cim-link:hover,
.naptar .n-cim-link:focus-visible {
  color: var(--szin-kiemeles);
  text-decoration: underline;
  text-underline-offset: 3px;
}
/* KATEGÓRIA saját oszlopban (K2 – FELÜLÍRVA), a prototípus `.n-kat` alakjában:
   halk, kis betűs, tördelhető – NEM pirula. A pirula egy soros, sorba lógó
   elem volt, és épp az törte ketté a címet. A kártya-nézet `.kategoria`
   pirulája változatlan. */
.naptar .n-kategoria {
  font-size: .75rem;
  color: var(--szin-tinta-halk);
}
.naptar .n-helyszin { font-size: .85rem; }
/* A nap-elválasztó: a `.tabla thead th` szabály thead-re szűkített, tehát ide
   nem ér el. Nem kap nagybetűsítést és betűközt – ez ADAT, nem rovatcím. */
.naptar .nap-fej th {
  flex: 1 0 100%;
  text-align: left;
  padding: var(--ter-3);
  background: var(--szin-hatter);
  border-bottom: var(--vonal);
  font-weight: 500;
  color: var(--szin-tinta);
}
.naptar .nap-szam {
  font-family: var(--betu-cim);
  font-size: 1.1rem;
  font-weight: var(--cim-suly);
}
/* A HÓNAP-ELŐTAG a nap-fejben (SZAB-140/4). Ugyanaz a betű és méret, mint a
   nap-számé – a kettő EGY dátumként olvasandó –, de HALK színnel, hogy a nap
   maradjon a vizuális horgony (ezt a SZAB-104 tudatosan állította be).
   A `--szin-tinta-halk` ezen a `--szin-hatter` hátteren MÁR HASZNÁLT és bevált
   párosítás: pontosan ezt teszi a szomszédos `.nap-fej small` darabszám –
   új kontraszt-kockázat tehát nem keletkezik.
   A jobb oldali rés `em`-ben, nem tokenben: ez BETŰKÖZ a dátumon belül, nem
   elrendezési térköz, tehát a betűmérettel kell skálázódnia. */
.naptar .nap-honap {
  font-family: var(--betu-cim);
  font-size: 1.1rem;
  font-weight: var(--cim-suly);
  color: var(--szin-tinta-halk);
  margin-right: .18em;
}
.naptar .nap-fej small { color: var(--szin-tinta-halk); margin-left: var(--ter-2); }

/* 48rem FÖLÖTT valódi táblázat, TELJES és helyes szemantikával: caption,
   `th scope="col"` az oszlopfejléceken, `th scope="rowgroup"` a
   nap-elválasztón, naponként egy tbody. Ez több, mint amit a prototípus adott.
   A töréspont a repó meglévő készletéből való – új breakpoint nem születik. */
@media (min-width: 48rem) {
  .naptar { display: table; }
  .naptar thead { display: table-header-group; }
  .naptar tbody { display: table-row-group; }
  .naptar tr {
    display: table-row;
    gap: 0;
    padding: 0;
    border-bottom: 0;
  }
  .naptar tbody td,
  .naptar thead th {
    padding: var(--ter-3);
    border-bottom: var(--vonal);
  }
  .naptar tbody td { vertical-align: top; }
  .naptar tbody:last-child tr:last-child td { border-bottom: 0; }
  /* A SORMAGASSÁG (K12): a két gomb EGY SORBAN áll, nem egymás alatt – ez a
     legnagyobb tétel, mert egymás alatt a cella két gombnyi (2×48px + rés)
     magas volt, és ez húzta kétszeresére a teljes sort. A tördelés MEGENGEDETT:
     a 48rem körüli keskeny asztali sávban a második gomb alá csúszhat, a
     szokásos asztali szélességen viszont egy sorban marad.
     A gomb kompaktabb, de NEM „mini": a min-height a repó meglévő
     `--meret-erintes-kicsi` (44px) tokenje – a prototípus 36px-es
     `.mini-gomb`-ja nem kerül át (a11y §11.5, 44–48px érintési cél). */
  .naptar .n-akcio-gombok {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--ter-2);
  }
  /* A „Lezárult" felirat itt is EGY szelektor-listában a gombbal (K14/3):
     azonos 44px magasság, azonos padding, azonos betűméret. A felirat így
     ~79px – EGY PIXELLEL keskenyebb, mint a `Foglalás` gomb (~80px) volt,
     tehát a `Részletek` melletti pár 175px, szemben a K12-ben már egysorosnak
     igazolt 176px-es gombpárral: a sormagasságra nézve NEM ÚJ KOCKÁZAT. */
  .naptar .n-akcio-gombok .gomb,
  .naptar .n-akcio-gombok .jelzes--gombalak {
    width: auto;
    min-height: var(--meret-erintes-kicsi);
    padding: var(--ter-2) var(--ter-3);
    font-size: .85rem;
  }
  /* A burkoló ŰRLAP itt CSAK a szélesség-viselkedést veszi át (K2: „a doboz a
     gombon marad"): a mobil `width: 100%`-ot vissza kell állítani, hogy a
     gombpár egy sorba kerülhessen – a magasság, a kitöltés és a betűméret
     viszont a gomb dolga, különben a doboz kétszer rajzolódna. */
  .naptar .n-akcio-gombok .akcio-urlap { width: auto; }
  /* IDŐ (K1 – FELÜLÍRVA): a záró időpont a kezdő ALÁ kerül. Két szövegsor
     (~2×21px) bőven a 44px-es gombpár magassága ALATT marad, tehát a második
     sor a sormagasságba nem kerül semmibe – cserébe az oszlop feleannyi
     széles, és a felszabaduló hely a cím-oszlopé lesz. */
  .naptar .ido-veg { display: block; }
  /* OSZLOP-ARÁNYOK (K12): a hat oszlop MARAD (K2-döntés), de az arányuk
     kiosztott – enélkül az automatikus táblázat-elrendezés a leghosszabb
     szövegű oszlopnak ad a többiek kárára, és a helyszín- meg a
     foglaltság-cella tördel, ami visszahozza a több soros sort. Százalék, nem
     rem: így 48rem-től 64rem-ig arányosan skálázódik.
     A kiosztás CÉLJA, hogy a CÍM egy sorba férjen: az „Előadó és cím" oszlop
     kapja a maradékot (~30%), mert abban a cellában a második sor már a címé. */
  .naptar .n-ido { width: 7%; }
  /* A kategória 14% → 15%: csak kényelem. Egy sorba NEM jön (a
     „Bölcsészet- és társadalomtudomány › Egyéb" ~25%-ot kívánna), a két soros
     tördelés viszont a TERVEZETT alak (K1/4). */
  .naptar .n-kategoria { width: 15%; }
  /* A helyszín 12% → 16%: a foglaltság-oszlopból felszabaduló 5% nagyobbik
     része ide megy – ez éri a legtöbbet. A RÖVID és KÖZEPES terem-nevek
     (`Aula`, `B terem`, `Kari tanácsterem`) így EGY sorba jönnek; a hosszú
     összetettek (`ELTE Fizika 5. előadóterem`) két sorosak maradnak, ahhoz
     ~19% kellene, és annyi nincs (K12).
     16% → 13% (SZAB-105, Képernyő-terv K4): a „Lefoglaltad" jelzés a
     `Részletek` mellett ~195px-et kér a ~174px-es műveleti cellában, és a
     hiányzó ~21px-et innen fedezzük. MIÉRT A HELYSZÍN A DONOR: ha ez a cella
     egy sorral többet tördel, az ~35px – a műveleti cella 44px-es padlója
     ALATT marad, tehát a SORMAGASSÁGBA nem kerül semmibe. A CÍM oszlopa
     ezzel szemben pont az a hely, ahol a második sor ~60px-re ugrik és
     MEGHALADJA a padlót, ezért az érintetlen.
     AZ ÁRA, KIMONDVA: a K12 12% → 16% emelésének nyeresége részben
     visszaadódik – a közepes hosszú terem-nevek („Kari tanácsterem") újra két
     sorba jönnek. Ez VIZUÁLIS tétel, nem sormagasság-tétel. */
  .naptar .n-helyszin { width: 13%; }
  /* A foglaltság a TARTALMÁHOZ méretezve, nem a fejléchez: a leghosszabb eset
     a jel + háromjegyű szám + „szabad" (`▪ 112 szabad` ≈ 91px) + cella-padding
     ≈ 115px ≈ 12%. A korábbi 17% még a hosszabb „Szabad helyek" fejléchez volt
     szabva – a fejléc azóta „Foglaltság", tehát az arány elavult (K12). */
  .naptar .n-keret { width: 12%; }
  /* 20% → 23% (SZAB-105, K4): 23% × 990px = 227,7px, mínusz 24px cella-margó
     = ~204px hasznos, szemben a „Lefoglaltad" + `Részletek` pár ~195px-ével –
     ~9px tartalék, ami a becslés ±4px-es bizonytalanságát fedezi. A közös
     „Foglalok" felirat a mérlegen NEM segít: a szűk eset az, amelyben jelzés
     áll, ott pedig a kizáró lánc (K1) miatt gomb egyáltalán nem renderelődik.
     FIGYELEM: minden itteni szám ANALITIKUS MODELL – böngészőben egy pixelt
     sem mértünk. A Local Testen ez BUKÁS-TÉTEL, nem megfigyelés (K2-kikötés 7,
     SZAB-105 / komment 30772): a SZAB-104 K4-je ugyanezt a kérdést ugyanebben
     a cellában három elrendezési körben rendezte. */
  .naptar .n-akcio { width: 23%; }
}

/* ===== A KERET-CELLA TÖMÖR ALAKJA (K7 – FELÜLÍRVA, PO-döntés) =====
   A prototípus koncepciója: JEL + ÉRTÉK, egy sorban. A korábbi két teljes
   szöveges címke egymás alatt állt, és a sort két sorossá tette.

   A WCAG 1.4.1 („a jelentést ne KIZÁRÓLAG szín közölje") NÉGY nem-szín
   csatornán teljesül – a részletes levezetés a change `design.md`
   „Képernyő-terv / K7" szakaszában áll:
   (1) a táblázat fölötti szöveges JELMAGYARÁZAT (`.naptar-jelmagyarazat`);
   (2) ALAK-különbség: a hallgatói jel kitöltött négyzet, a külsős GYŰRŰ;
   (3) a keret neve szövegként a cellában (`sr-csak` + `title`);
   (4) az érték megtartja a szavát („13 szabad" / „betelt").
   A `.keretsav-rud` továbbra sem kerül a naptár-sorba: `aria-hidden`, tehát
   információt nem hordoz, csak arányt – ahhoz pedig itt nincs szélesség. */
.keretsav-mini {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ter-1) var(--ter-3);
  font-size: .8rem;
}
/* A `line-height: 1.3` a törzsszöveg 1.6-ja helyett: a két egymás alatti chip
   így ~45px magas, épp a 44px-es gombpár szintjén – enélkül a foglaltság-cella
   lenne a sor legmagasabb eleme. Ez TIPOGRÁFIAI szűkítés, nem szerkezet-
   változtatás: a cella alakja (két keret egymás alatt) VÁLTOZATLAN.

   A `white-space: nowrap` SZŰK, INDOKOLT KIVÉTEL a K1 „minden cella tördelhet"
   szabálya alól (a prototípus `.mini-keret`-je is ezt teszi): a chip egyetlen
   rövid, oszthatatlan adat („112 szabad"), és ha a szám meg a szó külön sorba
   kerül, a cella NÉGY sorossá válik – pontosan az a magasság-hiba, amit a
   K12 megszüntet. A chip így ~91px-es alsó korlátot ad az oszlopnak, ami épp a
   12%-os arány alapja. Vízszintes túlcsordulást nem okoz: a korlát 115px, a
   legszűkebb táblázat-szélességen is elfér. */
.keretsav-mini-tetel {
  display: inline-flex;
  align-items: center;
  gap: var(--ter-1);
  line-height: 1.3;
  white-space: nowrap;
  color: var(--szin-tinta-halk);
  padding: 2px 6px;
  border-radius: var(--sugar-s);
  border: 1px solid transparent;
}
.keretsav-mini-tetel b { font-weight: 700; color: var(--szin-tinta); }
/* Saját-keret kiemelés: a látható SZEGÉLY megjelenése (átlátszó → látható) is
   nem-szín csatorna, a „· a tiéd" szöveg pedig `sr-csak`-ban áll – láthatóan
   kiírva épp a bejelentkezett látogató sorát törné két sorba. */
.keretsav-mini-tetel--sajat {
  background: var(--szin-kiemeles-halk);
  border-color: color-mix(in srgb, var(--szin-kiemeles) 45%, transparent);
  color: var(--szin-tinta);
}
/* ALAK-különbség (WCAG 1.4.1), KIZÁRÓLAG a naptár tömör jelein és a
   jelmagyarázatban: a kártya és a részletező keret-sávja változatlan, mert ott
   a teljes szöveges címke amúgy is ott áll a jel mellett. */
.keretsav-mini .pont--kulsos,
.naptar-jelmagyarazat .pont--kulsos {
  background: transparent;
  border-radius: 999px;
  box-shadow: inset 0 0 0 2px var(--keret-kulsos);
}
/* A jelmagyarázat lapon EGYSZER áll, a hónap-sor és a táblázat között – a
   sormagasságba tehát nem kerül semmibe. */
.naptar-jelmagyarazat {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ter-1) var(--ter-3);
  margin: 0 0 var(--ter-3);
  font-size: .78rem;
  color: var(--szin-tinta-halk);
}
.naptar-jelmagyarazat .jelmagyarazat-tetel {
  display: inline-flex;
  align-items: center;
  gap: var(--ter-1);
}

/* ===== AZ ÜRES IDŐSZAK KIÚT-MUTATÓJA (SZAB-136, Képernyő-terv K5) =====
   A „Másik időszakot …" sor a meglévő `.lap.ures-talalat` dobozon belül.
   MOSTANTÓL MUTATÓ, NEM LINK-SOR: a kiút a doboz FÖLÖTT álló, feltétel nélkül
   renderelt időszak-vezérlőkre (gyorsválasztás + dátummezők) hivatkozik. A
   flex-elrendezés megmarad – a mondat így is tördelhető –, de a `gap` már nem
   két kiút elválasztását szolgálja. */
.ures-kiutak {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--ter-2) var(--ter-4);
}

/* ===== SZŰRŐPANEL (details/summary – JS nélkül összecsukható, §10.2) ===== */
.szuro-panel {
  background: var(--szin-papir);
  border: var(--vonal);
  border-radius: var(--kartya-sugar);
  margin-bottom: var(--ter-5);
}
.szuro-nyito {
  cursor: pointer;
  font-weight: 700;
  padding: var(--ter-4) var(--ter-5);
  min-height: 48px; /* érintési cél (a11y §11.5) */
  display: flex;
  align-items: center;
  gap: var(--ter-3);
  border-radius: var(--kartya-sugar);
  /* A natív jelölő KIFEJEZETT elrejtése (SZAB-88 / D1). A `display: flex`
     amúgy is elnyomja a `list-item` dobozt – a böngésző nem generál jelölőt –,
     de erre nem hagyatkozunk: a `list-style: none` a szabvány-szerinti út, a
     WebKit-specifikus szabály pedig (lentebb) a Safari saját háromszögét
     tünteti el. A helyükre a `.szuro-nyito-jel` lép. */
  list-style: none;
}
.szuro-nyito::-webkit-details-marker { display: none; }

/* Kinyithatóság-jelzés (SZAB-88, Képernyő-terv K1–K2). A HORDOZÓ a sablonban
   áll – üres, `aria-hidden` elem –, a MEGJELENÉST innen kapja, a natív
   `[open]` állapotból: a szerver csak a kezdeti állapotot ismeri, a látogató
   első kattintása után egy sablonból rendert jel hazudna.
   Szegélyekkel RAJZOLT szögletjel, nem betűkarakter: a self-hosted készlet
   `latin-ext` részhalmaz, abban nincs geometriai szimbólum (a `▾` a
   rendszer-betűre esne vissza), és a szegély-rajz `forced-colors` módban is
   megmarad – ott a böngésző a szegély színét rendszer-színre cseréli –, míg
   egy háttérkép eltűnne. Ugyanaz a házi minta, mint a `.pont` és a
   `.keretsav-rud`: üres doboz, amit a CSS rajzol meg.
   A szín `var(--szin-tinta-halk)` a panel papír-hátterén ≈5,0:1 – a WCAG
   1.4.11 (nem-szöveges kontraszt) 3:1 küszöbe fölött. A jel ÁLLAPOTOT
   azonosít, tehát ez a küszöb rá normatívan vonatkozik: halványabb szín
   (pl. `--szin-vonal`) nem használható.
   A `margin-left: auto` a sor túlsó végére tolja: a felirat és az
   aktív-szűkítés pirulája BALRA marad, a nyitottság-jel JOBBRA – a két jelzés
   így soha nem takarja egymást. Átmenetet szándékosan NEM kap: az
   állapotváltás azonnali, ezért `prefers-reduced-motion` szabály sem kell. */
.szuro-nyito-jel {
  flex: none;
  margin-left: auto;
  width: .5rem;
  height: .5rem;
  border-right: 2px solid var(--szin-tinta-halk);
  border-bottom: 2px solid var(--szin-tinta-halk);
  /* Az elforgatás a doboz KÖZEPE körül történik, a látott „V" optikai közepe
     viszont eltolódik – ezt igazítja vissza a kis függőleges eltolás. */
  transform: translateY(-.12rem) rotate(45deg);
}
.szuro-panel[open] .szuro-nyito-jel {
  transform: translateY(.12rem) rotate(225deg);
}
.szuro-urlap {
  padding: 0 var(--ter-5) var(--ter-5);
}
.szuro-racs {
  display: grid;
  gap: 0 var(--ter-4);
  grid-template-columns: 1fr;
}
/* AZ IDŐSZAK-MEZŐK a szűrő-rácsban (SZAB-136 K1, ÁTRENDEZVE SZAB-140/2).
   A `.mezo-par` FLEX-BURKOLÓ ÉS A HÁROM SZABÁLYA TÖRÖLVE: a két dátummező már
   nem szomszéd, az elhelyezésüket a rács végzi. Ami az érvekből MEGMARADT: a
   mezők alapstílusát továbbra is a KÖZÖS `alap.css` adja
   (`.mezo input[type=date]`), és a WebKit dátummezőjének nagy intrinsic
   szélessége miatt a `min-width: 0` ott is kell, ahol a mező rács-cellában ül –
   a rács-elem alapértelmezett `min-width: auto`-ja ugyanúgy kilógatná.

   MIÉRT DŐLT MEG a K1 eredeti elrendezése: a dátum-pár egy rács-cellába zsúfolt
   két mezője ÉS a három soros közös súgó a nyitott panelt ~430px magasra tolta
   (48rem fölött), amitől a találatok kigörögtek a képernyőről. A mai alak
   ~299px – a megtakarítás ~131px (≈31%), és ebből ~90px a súgó rövidítése,
   ~48px a külön gomb-sor megszűnése (a teljes mérés a change design.md
   „Képernyő-terv / K13" szakaszában áll). */
.szuro-racs .mezo { min-width: 0; }
/* A `.mezo--idoszak-veg .sugo` SZABÁLY TÖRÖLVE (SZAB-140/2. kör, K14/2): a
   közös időszak-súgó teljes egészében kikerült a panelből (PO-döntés), tehát a
   hordozója sincs többé – holt szabály lett volna. A `.mezo--idoszak-veg`
   osztály MEGMARAD: az elhelyezést (`grid-column`/`grid-row`) továbbra is az
   viszi, lentebb a két töréspont-blokkban.
   A ZÁRÓ MEZŐ FELIRATA `sr-csak` – vizuálisan nincs, a NEVE viszont megvan.
   A `.sr-csak` abszolút pozicionált, tehát NULLA magasságot foglal: ezért nem
   kell hozzá külön szabály, és ezért ingyen teljesül a PO kikötése („a második
   mező fölött ne legyen felirat"). */
.szuro-gombok {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ter-3);
}
/* A TALÁLAT-DARABSZÁM – EGY SZABÁLY, EGY HORDOZÓ (SZAB-140/4. kör, K14/5).
   Az osztálynév a szűrő-lábbeli eredetét őrzi (terv `.szuro-db`), a hordozó
   viszont ma a NÉZET-SOR: a `talalat-szam` a lapon egyetlen, feltétel nélküli
   helyen áll, mindkét nézetben. Ez a `margin-left: auto` az EGYETLEN igazítási
   deklaráció a számra – nincs fölötte se hordozó-, se töréspont-, se
   nézet-kivétel; a szám a sorának utolsó elemeként a jobb szélre kerül.
   A CSS SEHOL nem szelektál `data-testid`-re (ADR-024). */
.szuro-db {
  color: var(--szin-tinta-halk);
  font-size: .88rem;
  margin-left: auto;
}
@media (min-width: 34rem) {
  .szuro-racs { grid-template-columns: 1fr 1fr; }
  /* KÉT OSZLOP: a rács a DOM-sorrendben tölt (fő kategória · helyszín /
     előadó · IDŐSZAK KEZDETE), a ZÁRÓ dátum pedig a KEZDŐ ALATT, a 2. oszlop
     3. sorában – ez a PO kikötése.
     A művelet-pár itt EGÉSZ SZÉLES, saját sorban marad, NEM a záró mező
     mellett: ebben a sávban egy rács-oszlop ~223–271px, a
     „Keresés és szűrők törlése" gomb viszont ~248px széles – a gombsor
     beleszorítva a szövegét tördelné és MAGASABB lenne, mint amennyit a
     kompakt sor megspórol. A mellé-helyezés ezért csak 48rem fölött lép be,
     ahol három oszlopnyi (~702px) hely van rá. */
  .szuro-racs .mezo--idoszak-veg { grid-column: 2; grid-row: 3; }
  .szuro-racs .szuro-gombok { grid-column: 1 / -1; grid-row: 4; }
}
@media (min-width: 48rem) {
  .szuro-racs { grid-template-columns: repeat(4, 1fr); }
  /* NÉGY OSZLOP – a PO által kért alak:
       1. sor: Fő kategória · Helyszín · Előadó · Időszak kezdete
       2. sor: [ Keresés · Keresés és szűrők törlése ]        · Időszak vége
     A záró mező a kezdő ALATT (4. oszlop), a művelet-pár vele EGY VONALBAN, a
     BAL oldalon, az 1–3. oszlopon.
     A sor ALSÓ éle a közös igazítási vonal: a záró mező (a magasabb elem) adja
     a sormagasságot, a gombsor pedig `align-self: end`-del hozzá simul – így a
     gombsor alja és a súgó alja egy szintre kerül. A záró mező ALSÓ MARGÓJA
     azért esik ki, mert ez az UTOLSÓ rács-sor: alatta a `.szuro-urlap` 24px-es
     paddingja adja az elválasztást, kétszer nem kell.
     Az elrendezés kizárólag GRID-HELYEZÉS: nincs `order`, nincs `tabindex`, a
     bejárási sorrend a DOM-é marad (a mezők, majd a műveletek). */
  .szuro-racs .mezo--idoszak-veg {
    grid-column: 4;
    grid-row: 2;
    margin-bottom: 0;
  }
  .szuro-racs .szuro-gombok {
    grid-column: 1 / 4;
    grid-row: 2;
    align-self: end;
    margin-bottom: 0;
  }
}

/* ===== NAPI DÁTUM-HORGONY (a kártyák naponkénti csoport-fejléce) ===== */
.datum-horgony {
  display: flex;
  align-items: baseline;
  gap: var(--ter-3);
  margin: var(--ter-6) 0 var(--ter-4);
  padding-bottom: var(--ter-3);
  border-bottom: 2px solid var(--szin-tinta);
}
.datum-nap {
  font-family: var(--betu-cim);
  font-size: 2.2rem;
  font-weight: 600;
  line-height: 1;
}
.datum-ho {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
}
.datum-het {
  color: var(--szin-tinta-halk);
  font-size: .88rem;
  margin-left: auto;
}

/* ===== ELŐADÁS-KÁRTYÁK (szemantikus ul > li lista; terv .lista/.tetel) ===== */
.lista {
  display: grid;
  gap: var(--ter-5);
  list-style: none;
  padding: 0;
  margin: 0;
}
.tetel {
  background: var(--szin-papir);
  border: var(--vonal);
  border-radius: var(--kartya-sugar);
  padding: var(--ter-5);
  display: grid;
  gap: var(--ter-4);
}
/* Szélesebb nézetben kétoszlopos tétel: tartalom + akció-oszlop (Campus). */
@media (min-width: 48rem) {
  .tetel {
    grid-template-columns: 1fr 15rem;
    align-items: start;
  }
}
.tetel-cim {
  font-size: 1.4rem;
  margin: var(--ter-2) 0 var(--ter-3);
}
.tetel-cim a {
  color: inherit;
  text-decoration: none;
}
.tetel-cim a:hover,
.tetel-cim a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 3px;
}
.ismerteto {
  color: var(--szin-tinta-halk);
  margin: 0 0 var(--ter-4);
}
.meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ter-2) var(--ter-4);
  font-size: .88rem;
  color: var(--szin-tinta-halk);
}
.meta a {
  color: var(--szin-kiemeles);
  font-weight: 600;
  text-decoration: none;
}
.meta a:hover,
.meta a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 3px;
}
.tetel-akcio {
  display: grid;
  gap: var(--ter-3);
  align-content: start;
}
.akcio-gombok {
  display: flex;
  gap: var(--ter-2);
  flex-wrap: wrap;
}
/* A „Lezárult" felirat a KÁRTYÁN is a gomb szélesség-viselkedését kapja
   (SZAB-140/2. kör, K14/3): a 240px-es akció-oszlopban két `min-width: 8.5rem`
   elem nem fér egy sorba, tehát a felirat a `Részletek` FÖLÉ tördelődik,
   teljes szélességben – pontosan úgy, ahogy a helyére lépő `Helyet foglalok`
   gomb tette. AZ ÁRA: a megkezdett kártya akció-blokkja 48px-ről 104px-re nő,
   tehát az előző kör „mellékesen egy sorba fér" nyeresége visszaadódik.
   Miért vállalható: a FOGLALHATÓ kártyáé ma is 104px, tehát a lap legmagasabb
   kártyája nem lesz magasabb – a megkezdett kártya lesz ugyanolyan, mint a
   többi. */
/* A BEKÜLDŐ EGYSÉG BURKOLÓJA UGYANEBBE A SZELEKTOR-LISTÁBA kerül (SZAB-105,
   Képernyő-terv K2, K14/3 elve): a foglalás-indító MA űrlap, tehát a
   flex-konténer gyermeke a burkoló `form`, nem a gomb. A `flex`/`min-width`
   ezért a burkolóra kell – ha a gomb kapná, a burkoló szabad méretezéssel
   kicsúszna a gombpár rendjéből, és a `Részletek` melletti tördelés
   megváltozna. A LÁTHATÓ DOBOZ (szegély, kitöltés, magasság) a gombon marad. */
.akcio-gombok .gomb,
.akcio-gombok .jelzes--gombalak,
.akcio-gombok .akcio-urlap {
  flex: 1;
  min-width: 8.5rem;
}
/* A burkoló SAJÁT doboza nulla: nem tol, nem húz, és a gombot teljes
   szélességben engedi. `display: contents` NEM jöhet szóba (K2) – a
   dobozvesztett elemek akadálymentességi fája böngésző-függő. */
.akcio-urlap {
  margin: 0;
  display: flex;
}
.akcio-urlap > .gomb { width: 100%; }

/* Üres találat doboza. */
.ures-talalat p { margin: 0 0 var(--ter-3); }
.ures-talalat p:last-child { margin-bottom: 0; }

