/*
 * Actiwity Dance Company — jediný stylopis webu.
 *
 * Píše se ručně, žádný build step (viz CLAUDE.md → Stack). Žádný externí zdroj:
 * font je lokálně ve `www/fonts/`, nic se netahá z CDN ani z Google Fonts.
 *
 * PALETA JE ZE SMĚRU AA (#120). Do 2026-09-10 tu byly barvy starého webu na Joomle a
 * iterace 1 vědomě nebyla redesign. Veronika si z druhého kola návrhů vybrala směr AA —
 * „street" v barvách značky (#97, #98). Kostra AA je `www/navrhy/styl/smer-a.css`, paleta
 * `www/navrhy/styl/smer-aa.css`; postup celé série #120–#128 je v
 * `claude/plans/2026/09/redesign-aa-implementace.md`.
 *
 * Typografie se nemění: Raleway je písmo starého webu i směru AA, `@font-face` bloky
 * v sekci 1 zůstávají znak po znaku stejné.
 *
 * ==========================================================================
 * ZMĚŘENÉ KONTRASTY (WCAG 2.1)
 * ==========================================================================
 *
 * Hodnoty NEJSOU odhadnuté. Jsou spočítané podle WCAG 2.1 — `(L1 + 0,05) / (L2 + 0,05)`,
 * relativní jas z odečtených RGB s prahem 0,04045 — a přepočítají se, jakmile se jakákoli
 * hodnota v `:root` pohne. Odhad zapsaný jako změřená hodnota je horší než žádné číslo:
 * `#004F4F` na `#0e0e0e` tu jednou stálo jako „kolem 1,7 : 1" a skutečnost byla 2,05 : 1.
 * Závěr se tehdy nezměnil, ale číslo vypadalo jako změřené a nebylo.
 *
 * TEXT (hranice 4,5 : 1 pro běžný text, 3 : 1 pro velký a pro neaktivní prvky)
 *
 *   --text #d6d6de na --cerna ................................... 13,85 : 1  ✔
 *   --text #d6d6de na --cerna-2 ................................. 13,14 : 1  ✔
 *   --text #d6d6de na --cerna-3 ................................. 12,35 : 1  ✔
 *   --text-silny #ffffff na --cerna ............................. 20,01 : 1  ✔
 *   --text-silny #ffffff na --cerna-2 ........................... 18,98 : 1  ✔
 *   --text-tlumeny #8a8a97 na --cerna ............................ 5,87 : 1  ✔
 *   --text-tlumeny #8a8a97 na --cerna-2 .......................... 5,57 : 1  ✔
 *   --text-tlumeny #8a8a97 na --cerna-3 .......................... 5,24 : 1  ✔
 *   --akcent #c26bae na --cerna .................................. 5,73 : 1  ✔
 *   --akcent #c26bae na --cerna-2 ................................ 5,43 : 1  ✔
 *   --akcent #c26bae na --cerna-3 ................................ 5,11 : 1  ✔
 *   --akcent #c26bae na --cerna-ilustrace ........................ 5,52 : 1  ✔
 *   --kysela #c7f53d na --cerna ................................. 15,78 : 1  ✔
 *   --kysela #c7f53d na --cerna-2 ............................... 14,97 : 1  ✔
 *   --text-silny #ffffff na --akcent-tmavy (plné tlačítko) ....... 5,61 : 1  ✔
 *   --cerna #08080a na --kysela (tlačítko po přejetí) ........... 15,78 : 1  ✔
 *   --text #d6d6de na --cerna-ilustrace ......................... 13,36 : 1  ✔
 *   --text-silny #ffffff na --cerna-ilustrace ................... 19,30 : 1  ✔
 *
 * Úvodní blok (#202) — podklad #110d12 a na něm stříkanec, složená barva #2f1d2d
 * (`.uvodni` a `.uvodni::before`, sekce 8). Text stojí na obou:
 *
 *   `.nadhodnota` --kysela #c7f53d na #110d12 ..................... 15,19 : 1  ✔
 *   `.nadhodnota` --kysela #c7f53d na #2f1d2d ..................... 12,41 : 1  ✔
 *   `.styly li` --text-tlumeny #8a8a97 na #110d12 .................. 5,65 : 1  ✔
 *   `.styly li` --text-tlumeny #8a8a97 na #2f1d2d .................. 4,62 : 1  ✔ těsně
 *
 * Úvod `/tanecni-skupiny` (#204) — týž blok, navíc doplněk nadpisu a odstavce s `--text`:
 *
 *   `.h-doplnek` --text-tlumeny #8a8a97 na #110d12 ................. 5,65 : 1  ✔
 *   `.h-doplnek` --text-tlumeny #8a8a97 na #2f1d2d ................. 4,62 : 1  ✔ těsně
 *   `.skupiny__uvod` --text #d6d6de na #110d12 .................... 13,33 : 1  ✔
 *   `.skupiny__uvod` --text #d6d6de na #2f1d2d .................... 10,89 : 1  ✔
 *
 * Doplněk má na telefonu 18,5 px při tloušťce 600, tedy běžný text s hranicí 4,5 : 1
 * (velký by byl až od 18,66 px tučně 700). Stříkanec leží v levých 40 % bloku, přes text.
 *
 * Osa věkových kategorií na `/tanecni-skupiny` (#205) — pás `.sekce` na `--cerna`, řádek
 * po přejetí `--cerna-3` (sekce 6). Nové texty z makety AA:
 *
 *   `.skupiny__vek b` --text-silny #ffffff na --cerna (28–40 px, 800) 20,01 : 1  ✔
 *   `.skupiny__vek b` --akcent #c26bae na --cerna-3 (po přejetí) .... 5,11 : 1  ✔
 *   `.skupiny__vek span` --text-tlumeny #8a8a97 na --cerna (11 px) .. 5,87 : 1  ✔
 *   `.skupiny__vek span` --text-tlumeny #8a8a97 na --cerna-3 ........ 5,24 : 1  ✔
 *   `.skupiny__nazev` --text-silny #ffffff na --cerna ............... 20,01 : 1  ✔
 *   `.skupiny__nazev` --text-silny #ffffff na --cerna-3 ............. 17,85 : 1  ✔
 *   `.skupiny__popis` --text-tlumeny #8a8a97 na --cerna (15 px) ...... 5,87 : 1  ✔
 *   `.skupiny__popis` --text-tlumeny #8a8a97 na --cerna-3 ............ 5,24 : 1  ✔
 *   `.skupiny__vic` --akcent #c26bae na --cerna (11 px, 800) ......... 5,73 : 1  ✔
 *   `.skupiny__vic` --akcent #c26bae na --cerna-3 .................... 5,11 : 1  ✔
 *   `.pozn` --text-tlumeny #8a8a97 na --cerna (15 px) ................ 5,87 : 1  ✔
 *
 * Štítky lig na ose (#219) — text štítku 11 px, 700, tedy běžný text s hranicí 4,5 : 1;
 * rámeček `--linka` je dekorativní (štítek není ovládací prvek, #93):
 *
 *   `.skupiny__ligy li` --text-tlumeny #8a8a97 na --cerna ............ 5,87 : 1  ✔
 *   `.skupiny__ligy li` --text-tlumeny #8a8a97 na --cerna-3 .......... 5,24 : 1  ✔
 *   `.skupiny__liga--nejvyssi` --kysela #c7f53d na --cerna .......... 15,78 : 1  ✔
 *   `.skupiny__liga--nejvyssi` --kysela #c7f53d na --cerna-3 ........ 14,07 : 1  ✔
 *
 * Popisek „let", návěští „Zobrazit kategorii", popis i poznámka jsou běžný text (11–15 px),
 * hranice 4,5 : 1; nejhorší dvojice je 5,11 : 1. Linka poznámky `--akcent` je grafika (3 : 1).
 *
 * Čísla u „Celovečerních tanečních projektů" (#203) — prokládaná sekce `--cerna-2`:
 *
 *   `.cislo b` --kysela #c7f53d na --cerna-2 (44 px, 800) ......... 14,97 : 1  ✔
 *   `.cislo` --text-tlumeny #8a8a97 na --cerna-2 (12 px, 700) ....... 5,57 : 1  ✔
 *
 * Popisek čísla je 12 px, tedy běžný text s hranicí 4,5 : 1. Na panelu ilustrace
 * (`--cerna-ilustrace`) čísla nestojí v žádné šířce.
 *
 * „Přijít se dá i během roku" na `/tanecni-skupiny` (#206) — prokládaná sekce `--cerna-2`,
 * žádná nová barva ani nová dvojice, jen nové texty na dvojicích z hlavní tabulky
 * (přepočítáno 2026-09-16):
 *
 *   `h2` --text-silny #ffffff na --cerna-2 ......................... 18,98 : 1  ✔
 *   odstavec --text #d6d6de na --cerna-2 (17 px) ................... 13,14 : 1  ✔
 *   `.tlacitko` --text-silny #ffffff na --akcent-tmavy ............... 5,61 : 1  ✔
 *   `.tlacitko--obrys` --text-silny #ffffff na --cerna-2 ........... 18,98 : 1  ✔
 *   `.tlacitko` po přejetí --cerna #08080a na --kysela ............. 15,78 : 1  ✔
 *
 * Rám obrysového tlačítka `--linka` na `--cerna-2` má 1,27 : 1 (riziko níž) — tlačítko
 * nese nápis, ne rám, stejně jako obrysové tlačítko v úvodu homepage.
 *
 * Štítky jsou 12 px tučně, tedy běžný text s hranicí 4,5 : 1. Stříkanec se jich na dnešním
 * rozvržení dotýká jen okrajem, ale tvar má roztřepené konce, takže se počítá i horší strana.
 *
 * Lektoři (#207) — úvodní blok bez fotky (`.uvodni--bezfoto`, podklad a stříkanec jako výš),
 * pás „Kdo u nás učí" na `--cerna` a „Přijďte se podívat" na `--cerna-2`. Žádná nová barva
 * ani dvojice, jen nové texty (přepočítáno 2026-09-16):
 *
 *   `.nadhodnota` --kysela #c7f53d na #110d12 / #2f1d2d ...... 15,19 / 12,41 : 1  ✔
 *   `h1` --text-silny #ffffff na #110d12 / #2f1d2d ........... 19,26 / 15,73 : 1  ✔
 *   `.h-doplnek` --text-tlumeny #8a8a97 na #110d12 / #2f1d2d ... 5,65 / 4,62 : 1  ✔ těsně
 *   `h2` „Kdo u nás učí" --text-silny #ffffff na --cerna ............ 20,01 : 1  ✔
 *   `h2` a odstavec „Přijďte se podívat" na --cerna-2 ......... 18,98 / 13,14 : 1  ✔
 *   tlačítka jako u #206 (5,61 / 18,98 / po přejetí 15,78 : 1) ................ ✔
 *
 * Doplněk „Actiwity Dance Company" má na telefonu 18,5 px při 600, tedy běžný text s hranicí
 * 4,5 : 1 — stejný případ jako doplněk skupin. Jméno karty se z `h2` na `h3` změnilo jen
 * v osnově, barva i písmo zůstaly.
 *
 * Kontakt (#208) — úvodní blok bez fotky jako lektoři, dvojice karet adres a karty osob na
 * `--cerna`, „Než zavoláte" na `--cerna-2`. Žádná nová barva ani dvojice, jen nové texty
 * a nová typografie karet osob (přepočítáno 2026-09-16):
 *
 *   `.nadhodnota` --kysela #c7f53d na #110d12 / #2f1d2d ...... 15,19 / 12,41 : 1  ✔
 *   `.uvod` --text-silny #ffffff na #110d12 / #2f1d2d ........ 19,26 / 15,73 : 1  ✔
 *   `.tlacitko` telefon --text-silny #ffffff na --akcent-tmavy ....... 5,61 : 1  ✔
 *   `.tlacitko--obrys` --text-silny #ffffff na #110d12 / #2f1d2d 19,26 / 15,73 : 1  ✔
 *   věta o Infranově --text #d6d6de na --cerna (17 px) ............ 13,85 : 1  ✔
 *   jméno osoby --text-silny #ffffff na --cerna (17 px, 800) ....... 20,01 : 1  ✔
 *   role osoby --akcent #c26bae na --cerna (12 px, 700) ............. 5,73 : 1  ✔
 *   telefon a e-mail osoby --akcent #c26bae na --cerna (18 px, 700) . 5,73 : 1  ✔
 *   „Než zavoláte" `h2` a odstavec na --cerna-2 ............... 18,98 / 13,14 : 1  ✔
 *   tlačítka „Než zavoláte" jako u #206 (5,61 / 18,98 / po přejetí 15,78 : 1) ... ✔
 *
 * Role je 12 px tučně, tedy běžný text s hranicí 4,5 : 1. Telefon a e-mail po přejetí
 * berou `--kysela` z `a:hover` (15,78 : 1).
 *
 * Dekorační prvky (#122) mají vlastní tabulku u pravidla `h2::before` v sekci 3, protože se
 * neměří proti tokenu, ale proti barvě SLOŽENÉ z akcentu a podkladu. Kdo tady hýbe `--akcent`
 * nebo kterýmkoli podkladem, přepočítá i ji.
 *
 * ZAKÁZANÉ DVOJICE — dokázané měřením, nesahat na ně
 *
 *   --akcent-tmavy #a3438d jako TEXT na --cerna .................. 3,57 : 1  ✘
 *   --text-silny #ffffff na --akcent #c26bae ..................... 3,50 : 1  ✘
 *   --akcent #c26bae na --akcent-tmavy #a3438d ................... 1,60 : 1  ✘✘
 *   --text-silny #ffffff na --kysela #c7f53d ..................... 1,27 : 1  ✘✘
 *   žlutá #fcca14 (paleta starého webu) na bílé .................. 1,54 : 1  ✘✘
 *
 * KLÍČ POLARIT — proč jsou akcenty dva a prohodit je nejde
 *
 *   velká plocha  = --akcent-tmavy (magenta loga) + BÍLÝ text ..... 5,61 : 1  ✔
 *   malý prvek    = --akcent (světlá magenta) na ČERNÉ ............ 5,73 : 1  ✔
 *
 * Obráceně obojí padá: bílá na světlé magentě má 3,50 : 1 a tmavá magenta jako drobný
 * text na černé 3,57 : 1. Proto se barva nikdy nemění záměnou jedné hodnoty — `--akcent`
 * a `--akcent-tmavy` nejsou „táž barva světlejší a tmavší k volnému výběru", je to
 * dvoupoloha jedné barvy vázaná na to, jestli nese text, nebo leží pod textem.
 *
 * NEZESVĚTLOVAT PALETU, ABY TEXT PROŠEL. Když magenta něco neunese, je to platný
 * výsledek — zapíše se jako riziko (viz níž), nezvedne se jí jas. U #101 to bylo
 * výslovně odmítnuto jako past.
 *
 * ZMĚŘENÁ RIZIKA, KTERÁ PALETA NEŘEŠÍ A ŘEŠIT NEMÁ
 *
 *   --linka #26262f na --cerna ................................... 1,33 : 1
 *   --linka #26262f na --cerna-2 ................................. 1,27 : 1
 *   --linka #26262f na --cerna-ilustrace ......................... 1,29 : 1
 *   --linka #26262f na podkladu úvodního bloku #110d12 ........... 1,28 : 1
 *
 * Poslední dvě řádky přibyly s #123: od něj nese předěl mezi sekcemi `border-top` v lince,
 * takže linka leží i na podkladu tmavého pruhu a úvodního bloku. Zůstává tím, čím byla —
 * dekorativním předělem, ne hranou, podle které se pozná ovládací prvek.
 *
 * Linka je pod hranicí 3 : 1 z WCAG 1.4.11 a je to vědomé: jsou to dekorativní předěly
 * a rámy, ne prvky, podle kterých se ovládací element poznává. Přepínač menu se pozná
 * podle nápisu (--text-silny, 18,98 : 1) a ikony, ne podle rámečku. Jediné místo, kde
 * hrana nese informaci, je plovoucí panel menu nad textem stránky — ten proto bere
 * `1px solid var(--akcent)` (5,73 : 1 proti podkladu stránky), ne linku. Kdyby se
 * `--linka` někdy zesvětlila, aby „prošla", zešedne celý web; správná odpověď je dát
 * konkrétnímu prvku akcent, jako to dělá panel.
 *
 * KDE SMÍ A NESMÍ BÝT KTERÁ BARVA
 *
 *   --cerna            body, hlavička, úvodní pruh. Jako barva textu jen tam, kde je pod
 *                      textem světlá plocha: --kysela (přejeté tlačítko) a bílá podložka
 *                      log partnerů. Nikde jinde.
 *   --cerna-2          prokládaná sekce, patička, panel menu, karty. Ne jako text.
 *   --cerna-3          hover řádku kategorie, upozornění `.rozpracovano` a od #125 prázdná
 *                      deska místo chybějící fotky lektora (sekce 15). Ne jako text.
 *   --cerna-ilustrace  VÝHRADNĚ panel pod ilustrací na homepage (`.ilustrace`, od #203;
 *                      do #203 celý tmavý pruh) — je to odečtené pozadí ilustrace,
 *                      ne vybraná barva palety (viz komentář u tokenu). Nikde jinde.
 *   --linka            všechny 1px linky a rámy. Nikdy jako text ani jako hrana, podle
 *                      které se prvek pozná.
 *   --text             základní text na kterémkoli tmavém podkladu palety.
 *   --text-silny       nadpisy h1–h4, text na --akcent-tmavy. NIKDY na --akcent ani na
 *                      --kysela.
 *   --text-tlumeny     doplňky, popisy, tiráž. Na drobném textu ještě prochází (5,24 : 1
 *                      na nejsvětlejším podkladu palety), pod --cerna-3 už nejít.
 *   --akcent           text, odkazy, prosvítající masky dekoračních prvků a hrana panelu
 *                      menu — vždy na některém tmavém podkladu palety (na `--cerna`,
 *                      `--cerna-2` i `--cerna-3` prochází, viz tabulka výš).
 *                      NIKDY jako plocha pod bílým textem.
 *   --akcent-tmavy     JEN plné plochy pod bílým textem (hlavní tlačítko, `.preskocit`).
 *                      NIKDY jako barva textu.
 *   --kysela           přejetí a zaostření (`a:hover`, `:focus-visible`, hover karty).
 *                      Jako text jen na tmavém podkladu palety (`--cerna` i `--cerna-2`,
 *                      viz tabulka výš); NIKDY pod bílým textem. Odznaky lig, které
 *                      tuhle barvu nesly ve směru A, po #93 neexistují a nevrátí se.
 *                      Od #202 i text `.nadhodnota` nad `h1` (sekce 3, viz token).
 *   bílá napevno       jediná povolená výjimka z „barvy jen tokeny" mimo obsah SVG:
 *                      podložka log partnerů (sekce 14). Cizí značky se nesmí věšet na
 *                      naši paletu — Břeclav #004F4F má na --cerna 2,13 : 1 a na bílé
 *                      9,41 : 1, JMK #1D34FE 2,83 : 1 a 7,06 : 1. Text na té podložce
 *                      je --cerna (20,01 : 1), ne --text.
 */

/* ==========================================================================
   1. Písmo — lokálně, ne z Google Fonts
   ========================================================================== */

/*
 * Raleway (SIL OFL 1.1, licence ve `www/fonts/OFL.txt`) je písmo starého webu.
 * Variabilní řez pokrývá váhy 400–800 jedním souborem, takže se místo šesti
 * statických souborů stahují dva. `unicode-range` drží české texty na
 * latin-ext; návštěvník, který čte jen latinku, druhý soubor nestáhne.
 */
@font-face {
	font-family: 'Raleway';
	font-style: normal;
	font-weight: 400 800;
	font-display: swap;
	src: url('../fonts/raleway-latin.woff2') format('woff2');
	unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
	font-family: 'Raleway';
	font-style: normal;
	font-weight: 400 800;
	font-display: swap;
	src: url('../fonts/raleway-latin-ext.woff2') format('woff2');
	unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ==========================================================================
   2. Tokeny — paleta směru AA
   ========================================================================== */

/*
 * Barvy a rozměry jsou VÝHRADNĚ tady. Jediné dvě povolené výjimky na celém webu jsou
 * bílá podložka log partnerů (sekce 14, důvod je u ní) a barvy uvnitř SVG souborů —
 * cizí značky se na naši paletu věšet nesmí. Změřené kontrasty a pravidla „kde smí
 * a nesmí být" jsou v hlavičce souboru; kdo tady mění hodnotu, přepočítá i je.
 */
:root {
	/* --- Podklady ---------------------------------------------------------- */
	--cerna: #08080a;
	--cerna-2: #101014;
	--cerna-3: #17171d;
	--linka: #26262f;

	/*
	 * Jediná barva palety, která není z návrhu AA, a jediná, která se nesmí sjednotit
	 * s `--cerna`. Není vybraná od stolu: je to přesně pozadí ilustrace
	 * `www/img/ilustrace/actiwity-ilustrace-cerna.webp` (změřeno ve všech čtyřech rozích
	 * i uprostřed okraje). Proto na ní obrázek nemá viditelný šev a nepotřebuje rám.
	 * Rozdíl proti `--cerna` je 6 jednotek jasu na kanál a přesně o ten rozdíl jde —
	 * kdo tenhle token „uklidí" na `--cerna`, dostane kolem ilustrace viditelný šev.
	 *
	 * Až se ilustrace vymění za jinou, tahle hodnota se mění s ní.
	 */
	--cerna-ilustrace: #0e0e0e;

	/* --- Text -------------------------------------------------------------- */

	/*
	 * `--text-tlumeny` nesou od #121 štítky sloupců a tiráž v patičce (sekce 10). Do #123
	 * tu stálo, že mu další roli — čísla ve statistikách — přinese homepage; nepřinesla.
	 * Maketa má na homepage blok `.cisla` („400 tanečníků na projektu", „2007 od kdy
	 * studio jede", „4–60 věk tanečníků"), ale to je NOVÝ VIDITELNÝ TEXT a ten je v #123
	 * mimo rozsah — texty se v celé sérii #120–#128 nemění. Zůstává tedy u patičky.
	 *
	 * Od #203 ho nesou i popisky čísel `.cislo` (sekce 9) — nový text, který Jan schválil
	 * 2026-09-16; do té doby platil odstavec výš.
	 *
	 * Nejtmavší podklad, na kterém ještě prochází, je `--cerna-3` (5,24 : 1); pod tuhle
	 * hodnotu se nesmí posunout, jinak přestane platit celá řádka v tabulce nad souborem.
	 */
	--text: #d6d6de;
	--text-silny: #ffffff;
	--text-tlumeny: #8a8a97;

	/* --- Akcenty ----------------------------------------------------------- */

	/*
	 * `--akcent` je magenta loga (#a3438d) posunutá POUZE po ose světlosti: odstín
	 * 313,8° a sytost 41,7 % zůstávají logové, mění se jen L z 45,1 % na 59 %. Světlost
	 * je volená tak, aby na `--cerna` vyšla na 5,73 : 1 — na chlup světelná váha růžové
	 * #ff2e88, kterou ve směru A nahrazuje, aby návrh nezešedl ani nezesvětlal.
	 * Není to barva od stolu a nepřepočítává se.
	 *
	 * `--akcent-tmavy` je magenta loga přesně tak, jak je v logu a jak ji drží tlačítka
	 * starého webu. Leží pod bílým textem, nikdy text nenese.
	 */
	--akcent: #c26bae;
	--akcent-tmavy: #a3438d;

	/*
	 * Kyselá zelená je jediná barva palety neodvozená ze značky — nese „street".
	 * Ve směru A obsluhovala i odznaky lig; ty po #93 neexistují (viz sekce 6), takže
	 * jí v AA zůstává přejetí a zaostření (`a:hover`, `:focus-visible`). Do #124 tu byl
	 * vyjmenovaný i „hover karty" jako třetí role — tím se myslel `border-color` na rámu
	 * dlaždice v rozcestníku a ten s osou zmizel (sekce 6). Nadpis kategorie se při přejetí
	 * zezelená pořád, ale obstarává to globální `a:hover`, ne vlastní pravidlo té komponenty.
	 *
	 * Od #202 nese i `.nadhodnota` (sekce 3) — řádek verzálkami nad `h1`, nový text, který
	 * Jan pro sérii #201–#208 schválil 2026-09-16. V #123 ho nedostala, protože tehdy platilo,
	 * že se texty nemění. Od #203 nese i čísla `.cislo b` u projektů (sekce 9).
	 *
	 * Na černé má 15,78 : 1, takže i jako text prochází s velkou rezervou; pod bílým
	 * textem nesmí být nikdy (1,27 : 1).
	 */
	--kysela: #c7f53d;

	/* --- Písmo ------------------------------------------------------------- */
	--pismo: 'Raleway', 'Trebuchet MS', 'Segoe UI', arial, sans-serif;

	/* --- Rozměry ----------------------------------------------------------- */

	/*
	 * Stupnice mezer směru A. Není lineární schválně: prvních tři kroky drží rytmus
	 * uvnitř komponenty (odstavec, karta), zbylé tři odstupy sekcí a pruhů.
	 *
	 * `--m6` (7rem) bere od #123 `.sekce` na širokém displeji (sekce 5). Do #123 tu
	 * stálo, že ho dostane úvodní blok homepage, protože ho tam má maketa směru AA
	 * (`.hero { padding-block: var(--m6) var(--m5) }`) — nedostal a je to změřené
	 * rozhodnutí, ne opomenutí: úvodní blok stojí nad merch ilustrací a `--m6` by shodilo
	 * podíl ilustrace nad ohybem na 1366 × 618 z 5,1 % na 0 % (viz sekce 8; stav před #179,
	 * od stupňů nadpisů z #179 je tam 0 % i bez `--m6` — přeměřeno v sekci 9). Sekcím pod
	 * ohybem `--m6` nestojí nic, tam tedy je. Do #121 tu stálo, že si token vezme
	 * i hlavička; to nebyla pravda nikdy — hlavička AA má odsazení `--m2` a patička `--m5`.
	 */
	--m1: 0.5rem;
	--m2: 1rem;
	--m3: 1.5rem;
	--m4: 2.5rem;
	--m5: 4rem;
	--m6: 7rem;

	--obal: 78rem;

	/*
	 * Míra řádku — délka textového řádku, na kterou se sází próza (sekce 5). Do #126 to
	 * nebyl token, ale třikrát opsaná hodnota `60ch` u tří komponent (`.uvod`,
	 * `.skupiny__uvod`, `.skupina__sekce > p`) a čtvrtá, nesouvisející hodnota `44rem`
	 * u odpovědí na `/caste-dotazy`. Prózu na zbylých devíti stránkách nekrylo nic —
	 * odstavce tam sázely řádky na celou šířku obsahového sloupce.
	 *
	 * OD #201 JE TO 62ch, NE 60ch — hodnota `p { max-width: 62ch }` ze `smer-a.css` makety AA.
	 *
	 * JE TO `ch`, NE `px` ANI `rem`, A TO JE PODSTATA VĚCI: `1ch` je šířka znaku „0"
	 * v písmu a stupni TOHO PRVKU, takže míra roste se stupněm písma sama. Proto má
	 * běžný odstavec (17 px) jinou šířku než větší odstavec `.vetsi` (1,25rem, tedy
	 * 20 px), a přitom oba drží týchž 62 znaků na řádek. Změřeno v Raleway na vykreslené
	 * stránce: 62ch = 645,05 px při 17 px, 758,88 px při 20 px — shodně s maketou.
	 * Kdo tuhle hodnotu přepíše na pixely, rozejde ty dva odstavce a uvidí to až na stránce.
	 * Úvodní odstavec `.uvod` token nebere, má vlastních 44ch z makety (sekce 5).
	 *
	 * POZOR NA POJMENOVÁNÍ TĚCH ČÍSEL, ať se o tom nevede spor podruhé: `ch` visí na písmu
	 * VČETNĚ ŘEZU, ne jen na stupni. `.skupina__uroven` je `font-weight: 700` a týž token
	 * jí vykreslí **647,15 px**, zatímco běžný odstavec v témže stupni 645,05 px — tučná
	 * nula je o kousek širší. Obě čísla jsou správná a měří dvě různé věci; „62ch = 645 px"
	 * platí pro odstavec v základním řezu, ne pro každý prvek s tímhle tokenem.
	 *
	 * Čísla výš jsou v CSS pixelech, tedy nezávislá na DPR displeje, na kterém se měřilo.
	 */
	--mira: 62ch;

	/*
	 * Jediný stín na webu — plovoucí panel mobilního menu. Panel leží nad textem
	 * stránky, takže potřebuje kromě vlastního pozadí i viditelnou hranu. Na skoro
	 * černém podkladu je stín sám o sobě slabá pomůcka, proto je tvrdší než ve světlé
	 * paletě; nést oddělení ale musí hrana panelu v `--akcent` (viz sekce 4), ne stín.
	 */
	--stin-panel: 0 10px 30px rgb(0 0 0 / 0.6);
}

/* ==========================================================================
   3. Základ
   ========================================================================== */

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

html {
	/*
	 * Starý web měl základ 15px. Držíme výchozích 16px prohlížeče: rozdíl je
	 * opticky zanedbatelný, ale pod 16px se na mobilech hůř čte a iOS zvětšuje
	 * stránku při zaostření na pole.
	 */
	font-family: var(--pismo);
	font-size: 100%;
	-webkit-text-size-adjust: 100%;
}

/*
	STUPEŇ TEXTU JE ZE SMĚRU AA (#201): `body` 1.0625rem / 1.7, tedy 17 px na řádku 28,9 px,
	přesně jako `body` v `www/navrhy/styl/smer-a.css`. Do #201 byl text o stupeň menší
	(16 px / 1.6, zděděné z `html`) a web se tím od makety lišil na každém odstavci.

	Základ `rem` zůstává 16 px (`html` výš), takže se nehýbe nic, co má stupeň v `rem` —
	nadpisy, navigace, patička. Mění se jen to, co stupeň dědí: odstavce, seznamy, adresa.
	Řádkování 1.7 se dědí i do navigace a patičky; tam tím sedí na maketu (13 px / 22,1 px
	a 15 px / 25,5 px, změřeno na maketě AA).
*/
body {
	margin: 0;
	background: var(--cerna);
	color: var(--text);
	font-size: 1.0625rem;
	line-height: 1.7;

	/* Patička drží dole i na krátkých stránkách (chybová hláška, prázdný stav). */
	display: flex;
	flex-direction: column;
	min-height: 100vh;
}

h1,
h2,
h3,
h4 {
	margin: 0 0 var(--m2);
	font-weight: 800;
	line-height: 1.2;
	color: var(--text-silny);
}

/*
	Typografie nadpisů ze směru AA (#179) — `www/navrhy/styl/smer-a.css`, pravidlo
	`h1, h2, h3`, které `smer-aa.css` importuje beze změny. Verzálky, sevřený řádek, lehce
	stažený rozpal, `text-wrap: balance` a stupně `h1` / `h2` níž jsou odtamtud doslova.

	JEN `h1` A `h2`, NE `h3`. Tak zní rozhodnutí z 2026-09-14 („verzálky i stupně velikostí
	na h1 i h2"); maketa verzálky dává i `h3`, ale to rozhodnutí nejmenuje, a `h3` na webu
	sedí v prózách a kartách, kde by verzálky byly jiný zásah než nadpis sekce.

	`line-height` a `letter-spacing` nejsou stupeň ani verzálky, a přesto jsou tu: v maketě
	jsou tatáž deklarace jako verzálky a verzálkový nadpis s řádkem 1,2 by byl jiný nadpis než
	ten, který klientka vybrala. `text-wrap: balance` je z téže deklarace; prohlížeč, který
	ho neumí, zalomí jako dřív.
*/
h1,
h2 {
	line-height: 1.02;
	letter-spacing: -0.02em;
	text-transform: uppercase;
	text-wrap: balance;
}

h1 {
	font-size: clamp(2.75rem, 1.2rem + 6.4vw, 6rem);
}

/*
	Druhý řádek nadpisu — „jméno studia křičí, upřesnění ne". Pravidlo i jeho hodnoty jsou
	z makety (`.h-doplnek` ve `smer-a.css`, homepage makety AA); na webu ho nese `h1` homepage
	a od #204 `h1` rozcestníku skupin („podle věku") — obojí přesně tam, kde maketa nadpis dělí.

	Není to ozdoba, je to podmínka #89. Celý nadpis „Actiwity Dance Company — taneční studio
	v Břeclavi" ve stupni `h1` makety má na 320 px šest řádků a odsune ilustraci pod ohyb
	na všech třech mobilních viewportech z tabulky v sekci 9. Čísla před a po jsou tam.

	Text nadpisu se tím nemění ani o znak — `textContent` je tentýž, jen druhá půlka je ve
	`<span>`. Pomlčka zůstává na konci prvního řádku, na začátek řádku podle české sazby nepatří.
	Barva `--text-tlumeny` je tatáž, kterou nese tlumený text všude jinde na tmavém podkladu.
*/
.h-doplnek {
	display: block;
	margin-top: 0.15em;
	color: var(--text-tlumeny);
	font-size: 0.42em;
	font-weight: 600;
	letter-spacing: 0.06em;
}

/*
	Nadhodnota — krátký řádek verzálkami nad `h1` (#202, `.nadhodnota` ve `smer-a.css`).
	Hodnoty jsou z makety beze změny. Je to obecná třída, ne homepage: tentýž prvek mají
	v maketě i úvody dalších stránek (#204, #207, #208). Stojí jako `<p>` PŘED nadpisem,
	ne uvnitř něj — do `h1` nepatří, vyhledávač by ho četl jako součást titulu stránky.

	Barva `--kysela`; kontrast na podkladu úvodního bloku i na stříkanci je v tabulce nad
	souborem (nejhůř 12,41 : 1).
*/
.nadhodnota {
	margin: 0 0 var(--m2);
	color: var(--kysela);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.22em;
	text-transform: uppercase;
}

/*
 * `position: relative` a `isolation: isolate` nesou čmouhu z pravidla pod tímhle (#122)
 * a nejsou kosmetika. Tah má `z-index: -1`, aby ležel POD textem nadpisu — a bez
 * vlastního vrstvicího kontextu se propadne až pod pozadí sekce, takže v tmavém pruhu
 * homepage a v každé sekci s vlastním podkladem zmizí úplně.
 *
 * Obojí je na `h2`, ne na jeho obalu: nadpis je jediný prvek, o kterém se ví, že tam
 * čmouha patří, a `position` na obalu by ji navázala na výšku celé sekce.
 */
h2 {
	position: relative;
	isolation: isolate;
	font-size: clamp(1.875rem, 1.1rem + 2.8vw, 3rem);
}

/*
 * Čmouha za nadpisem sekce — stopa štětce z vizuální řeči studia (#122). Sada těch tahů
 * je na starém webu na Joomle a nový web ji do #122 nepoužíval; je to hotová vlastní
 * grafika, ne nový dekor.
 *
 * NENÍ TO OBRÁZEK NA POZADÍ, JE TO MASKA. Tvar tahu vyřezává `mask-image`, barvu dává
 * `background: var(--akcent)`. Z obrázku se tedy bere jen průhlednost a prvek se obarvuje
 * z palety — kdyby se magenta jednou měnila, čmouha se mění s ní a nepřekresluje se.
 * Rastr bez alfy by jako maska byl plný obdélník přes celý nadpis; hlídá to
 * `DekoracniPrvkyTest::testMaskyMajiAlfaKanal()`, protože v CSS to vidět není.
 *
 * ČITELNOST NADPISU NESMÍ VISET NA TOM, KAM DOSTŘÍKLA BARVA. Tah má roztřepené konce
 * a u delšího nadpisu kryje jen jeho začátek — zbytek textu leží mimo něj, protože
 * tah má pevnou velikost (viz níž). U #101 tak ve směru AD zmizelo koncové „K" z „Vyberte věk", když
 * nadpis dostal bílou barvu jen kvůli čmouze. Tady je to obráceně a PŘEKLOPIT SE TO
 * NESMÍ: nadpis je `--text-silny`, tedy čitelný sám o sobě na kterémkoli tmavém podkladu
 * palety, a čmouha je prosvítající maska POD ním, ne podklad, který by text musel nést.
 * Změřeno (WCAG 2.1, bílá na složené barvě `0,38 × --akcent` nad podkladem; hranice pro
 * velký text je 3 : 1):
 *
 *   podklad                    složená barva čmouhy   bílá na čmouze   bílá mimo čmouhu
 *   --cerna #08080a .......... #4f2e48 ............... 11,56 : 1  ✔ ... 20,01 : 1  ✔
 *   --cerna-2 #101014 ........ #54334f ............... 10,70 : 1  ✔ ... 18,98 : 1  ✔
 *   --cerna-3 #17171d ........ #583754 ............... 10,05 : 1  ✔ ... 17,85 : 1  ✔
 *   --cerna-ilustrace #0e0e0e  #52314b ............... 11,05 : 1  ✔ ... 19,30 : 1  ✔
 *   úvodní blok #110d12 ...... #54314d ............... 10,92 : 1  ✔ ... 19,26 : 1  ✔
 *
 * Poměry v tabulce jsou počítané ze zaokrouhlené složené barvy, která je v tabulce vedle
 * nich; odečteno přímo z vykreslené stránky z nezaokrouhlených kanálů vyjde o −0,05 až
 * +0,07 jinak (např. 11,61 místo 11,56 na `--cerna`, ale 11,00 místo 11,05 na
 * `--cerna-ilustrace` — zaokrouhlení kanálu jde oběma směry, ne jen nahoru). Na závěru to
 * nic nemění a tabulka je takhle vnitřně kontrolovatelná — složená barva a její poměr
 * k sobě patří. Přeměřeno v #128 na všech pěti řádcích.
 *
 * V tabulce je každý tmavý podklad palety, ne jen ten, pro který se pravidlo psalo —
 * ve směru AD právě tohle chybělo a `.pruh h2` mělo na černém pruhu 1,00 : 1. Nejhorší
 * dvojice je 10,05 : 1, tedy víc než dvojnásobek hranice: nadpis projde na obou stranách
 * hrany tahu a je čitelný i tam, kam maska nedosáhla. Proto nevadí, že tah od #141
 * kryje jen začátek nadpisu: písmena na čmouze i mimo ni mají poměr z tabulky.
 *
 * Dnes tah opravdu leží na dvou z nich — zjištěno projitím všech sedmnácti vykreslených
 * stránek: 64 nadpisů na `--cerna` a jeden na `--cerna-ilustrace` (`.pruh h2` na homepage,
 * přesně ten, který ve směru AD zmizel), plus ztlumený na `/kontakt`. Stav před #203:
 * od #203 pruh neexistuje a nadpis „Celovečerní taneční projekty" stojí na `--cerna-2`
 * (řádek v tabulce výš), řádek `--cerna-ilustrace` je tím pojistka. Na `--cerna-2` `h2`
 * stojí taky — patička a karty rozcestníku, u obojí změřen podklad `#101014` — ale tam je
 * čmouha vypnutá. Na `--cerna-3` nestojí `h2` ani jeden: jediná plocha té barvy je
 * `.rozpracovano` (sekce 5) a ta žádný nadpis neobsahuje. Na podkladu úvodního bloku taky
 * ne — `.uvodni` drží `h1`, a ten čmouhu nemá. Řádky `--cerna-2`, `--cerna-3` a „úvodní
 * blok" jsou tedy pojistka pro krok, který nadpis na jiný podklad přesune, ne popis
 * dnešního stavu.
 *
 * JEDEN TAH V PŘIROZENÉM POMĚRU ZA ZAČÁTKEM NADPISU, NE TAH PŘES CELÝ NADPIS (#141).
 * `6.35em × 3.3em` je poměr masky `stetec-02.webp` (1200 × 624, tedy 1,923 : 1), takže
 * `mask-size: 100% 100%` tvar nedeformuje. Velikost je v `em`, tah tedy roste se stupněm
 * písma, ne s délkou textu — u krátkého i dvouřádkového nadpisu vypadá stejně.
 *
 * Do #141 tah kopíroval šířku nadpisu (`width: calc(100% + 0.9em)` nad `width: fit-content`
 * na `h2`) a obě cesty, jak to udržet, se na vykreslené stránce ukázaly špatně:
 *
 * - Roztažení do boxu zahodilo poměr masky: nejdelší nadpis na `/caste-dotazy` měl tah
 *   14,8 : 1 už před #179, tedy tenký šikmý pruh. Po #179 (verzálky, větší stupeň,
 *   `text-wrap: balance`) se nadpisy zalamují častěji — a u zalomeného nadpisu se box
 *   k textu NESTÁHNE (`fit-content` dorazí na šířku sloupce), takže tah vybíhal daleko za
 *   text a všechny dvouřádkové nadpisy končily na stejné pravé hraně. Jan 2026-09-16:
 *   „ty čmouhy jsou pořád strašné, hlavně na FAQ".
 * - `mask-repeat: repeat-x` (rozhodnutí z 2026-09-14) vyzkoušené na `/caste-dotazy`:
 *   `stetec-02` je stříkanec s kapkou vlevo a v řadě z něj vznikne pás samostatných
 *   „komet", vpravo za textem visících ve vzduchu. Jan vybral tuhle variantu 2026-09-16.
 *
 * Maketa AA má tah taky pevný (`width: 8.5em`, `height: 2.1em`), jen roztažený do 4 : 1.
 * Tady je o kus vyšší, aby poměr držel a tah nebyl úzká linka; zasahuje proto 0,75em nad
 * nadpis a přes první řádek do druhého.
 *
 * `left` se stropem `0.75rem` je z #179 a platí dál: `h2` ve stupních AA má 30–48 px
 * a holé `0.45em` by na 768 px vyjelo za 16px odsazení obalu (změřeno: vodorovný posuvník
 * na sedmi routách). Vpravo tah nevyjede: 6,35em je při největším stupni 305 px a při
 * nejmenším 190 px, obsahový sloupec má na 320 px 288 px.
 *
 * `aria-hidden` netřeba, pseudoelementy odečítač nečte.
 *
 * `@supports` je pojistka, ne obřad: prohlížeč bez masek by `background` a `opacity`
 * vykreslil jako plnou magentovou dlaždici za každým nadpisem, tedy přesně tu vadu,
 * kterou u masky bez alfy hlídá test. Bez masek prvek radši nebude vůbec.
 */
@supports (mask-image: none) {
	h2::before {
		content: '';
		position: absolute;
		left: calc(-1 * min(0.45em, 0.75rem));
		top: -0.75em;
		z-index: -1;
		width: 6.35em;
		height: 3.3em;
		background: var(--akcent);
		opacity: 0.38;
		mask-image: url('../img/dekor/stetec-02.webp');
		mask-repeat: no-repeat;
		mask-size: 100% 100%;
		pointer-events: none;
	}
}

/*
 * Kde čmouha není. Jeden výčet, protože je to jedno rozhodnutí: tah patří za nadpis
 * SEKCE, ne za nadpis karty ani za štítek sloupce.
 *
 * - `.paticka h2` jsou drobné štítky sloupců (0,75rem, váha 800, rozpal 0,2em, tlumená
 *   barva). Sémanticky to `h2` je, protože patička drží tři pojmenované části, ale
 *   dekorace za nimi by z nich udělala třetí hladinu nadpisů na stránce.
 * - Jméno v seznamu lektorů (`.lektori__jmeno`) a nadpis karty rozcestníku (`.skupiny__nazev`)
 *   tu do #207, resp. #205 stály taky, protože byly `h2`. Obě stránky od té doby mají mezipatro
 *   („Kdo u nás učí", „Vyberte věk"), karty nesou `h3` jako v maketě a čmouhu nemají
 *   už z principu — pravidlo níž míří jen na `h2`.
 *
 * U jmen lektorů to navíc nebyla jen věrnost maketě. Na `/o-nas/lektori` stálo osm jmen
 * pod sebou v rozestupech 49–50 px, zatímco tah je 59 px vysoký: změřeno, že se tahy
 * pěti sousedních dvojic přesahovaly o 9–10 px a splynuly v jeden šmouhový pás přes celý
 * seznam. Kdo by jméno vrátil do `h2`, musí vrátit i výjimku.
 */
.paticka h2::before {
	display: none;
}

h3 {
	font-size: 1.25rem;
}

p,
ul,
ol {
	margin: 0 0 var(--m2);
}

a {
	color: var(--akcent);
}

/*
 * Přejetí odkazu je kyselá zelená (15,78 : 1 na `--cerna`) — tak to má směr A a je to
 * jediné místo, kde `--kysela` na dnešním webu opravdu něco obsluhuje. Ostatní role,
 * které pro ni směr A má (čísla ve statistikách, `.nadhodnota`), tu ještě nemají prvek;
 * odznaky lig, které ji nesly taky, po #93 neexistují.
 *
 * Pravidlo je globální schválně: každý odkaz na webu má na přejetí reagovat stejně,
 * ať se to nemusí dopisovat u každé nové komponenty.
 */
a:hover {
	color: var(--kysela);
}

img {
	max-width: 100%;
	height: auto;
}

/*
 * Viditelné zaostření je jediná navigační pomůcka klávesnice. Platí globálně,
 * ať se na něj nezapomene u nově přidaných prvků.
 */
:focus-visible {
	outline: 3px solid var(--kysela);
	outline-offset: 2px;
}

.obal {
	width: 100%;
	max-width: var(--obal);
	margin-inline: auto;
	padding-inline: var(--m2);
}

/* Odkaz pro klávesnici a čtečky — vidět je až po zaostření. */
.preskocit {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: 10;
	padding: var(--m1) var(--m2);
	background: var(--akcent-tmavy);
	color: var(--text-silny);
	text-decoration: none;
}

.preskocit:focus {
	left: 0;
}

/* ==========================================================================
   4. Hlavička a navigace
   ========================================================================== */

/*
 * Hlavička je jedna ze čtyř hladin `z-index` na webu: `-1` dekorační pseudoprvky
 * (`h2::before` v sekci 3 a stříkanec v sekci 8, oba z #122), 5 hlavička,
 * 10 `.preskocit`, 20 panel menu. Hlavička hladinu potřebuje proto, že směr AA staví
 * dekorační čmouhy jako pseudoprvky sekcí pod hlavičkou (#123) — bez vlastní hladiny by
 * se taková čmouha vykreslila přes logo, protože hlavička je v pořadí v kódu první.
 * (Do #128 tady stálo „třetí a zatím poslední hladina" — výčet zapomínal na záporné
 * hladiny, které #122 přidalo. Hladiny se počítají grepem na `z-index`, ne z paměti.)
 *
 * `z-index: 5` zároveň udělá z hlavičky stacking context, takže `z-index: 20` panelu
 * menu platí jen uvnitř ní. To je v pořádku: panel má být nad obsahem stránky
 * (`<main>` je na hladině 0, hlavička na 5) a nad hlavičku samotnou nic nepatří kromě
 * skip-linku, který je její sourozenec na hladině 10 a přebije ji i s panelem.
 * Pátá hladina přibyla v #180: 30 profil lektora (sekce 15), který jako jediný prvek webu leží
 * přes celé okno včetně hlavičky a panelu menu. Šestou nepřidávej, dokud tyhle pět nepřestane
 * stačit. (Do #180 tu stálo „pátou nepřidávej, dokud čtyři nepřestanou stačit". Do #128 tady stálo
 * „čtvrtou … dokud tyhle tři", což si protiřečilo s výčtem na začátku téhož komentáře —
 * oprava výčtu se nedotáhla o pět řádků níž.)
 */
.hlavicka {
	position: relative;
	z-index: 5;
	border-bottom: 1px solid var(--linka);
	background: var(--cerna);
}

.hlavicka__obal {
	/*
	 * Kotva plovoucího panelu menu (#64). Panel se pozicuje k obalu, ne k `.menu`:
	 * díky tomu mu `top: 100%` vyjde přesně na spodní hranu hlavičky a na úzkém
	 * displeji se dá roztáhnout přes celou šířku obsahu jen dvojicí `left`/`right`,
	 * bez `100vw` — to by na desktopu počítalo i se šířkou posuvníku.
	 */
	position: relative;

	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;

	/*
	 * Vodorovná mezera je `--m4` až nad prahem vodorovné navigace (viz níž), ne tady.
	 * Pod prahem stojí v řádce jen logo a přepínač a odráží je od sebe
	 * `justify-content: space-between`, takže by ta mezera nebyla vidět — zato by
	 * ubrala 24 px z místa, které v řádce je. ZMĚŘENO: na 320 px má obsah hlavičky
	 * 273 px (viewport 320 − 15 px posuvník − 2× 16 px odsazení) a logo s přepínačem
	 * měří 239,83 px a se stávající šestnáctipixelovou mezerou
	 * zaberou 255,83 px; se čtyřicetipixelovou mezerou to je 279,83 px, tedy o 6,83 px
	 * víc, než je místa — přepínač se zalomil pod logo a hlavička narostla ze 108 px
	 * na 168 px. Nevracej `--m4` sem.
	 */
	gap: var(--m2);
	padding-block: var(--m2);
}

.hlavicka__logo {
	display: block;
	line-height: 0;

	/*
	 * Logo je ukotvené nahoře (#64). Se samotným `align-items: center` na obalu
	 * se svisle středilo vůči nejvyšší položce řádku — a jakmile `<details>`
	 * vyrostlo o rozbalený seznam, logo se s ním posunulo dolů. Panel je dnes
	 * mimo tok, takže by k tomu dojít nemělo, ale ukotvené logo tu vlastnost
	 * nepotřebuje: cokoli v hlavičce vyroste, logo zůstane, kde je. Řeší se to
	 * na logu, ne převrácením celého obalu — zbytek řádku si tak drží středění
	 * bez dalšího dorovnávání.
	 */
	align-self: flex-start;
}

/*
 * Logo se redesignem nemění tvarem ani barvou — je to pevný bod zadání
 * (`claude/plans/2026/09/redesign-zadani.md`). Mění se jen šířka: směr AA má značku
 * na 132 px, o 18 px užší než starý web. Zdroj je pořád `www/img/actiwity-logo.webp`
 * 300 × 171, takže se jen zmenšuje, ne překresluje.
 */
.hlavicka__logo img {
	width: 132px;
	height: auto;
}

/*
 * Mobilní menu je `<details>`/`<summary>`, ne přepínač v JavaScriptu.
 * Rozbalování umí prohlížeč sám, takže funguje i s vypnutým JS, ovládá se
 * klávesnicí a čtečka ho oznámí jako rozbalovací prvek. `<input type=checkbox>`
 * by to samé uměl jen s podstrčeným `<label>` a bez správné sémantiky.
 *
 * Vlastní pravidlo `.menu` nepotřebuje: panel se kotví k `.hlavicka__obal` (#64)
 * a svislé středění vůči řádku dává obal sám.
 */

.menu__prepinac {
	display: flex;
	align-items: center;
	gap: var(--m1);
	padding: var(--m1) var(--m2);

	/*
	 * Klikací cíl aspoň 44 px. `min-height` tu nese celou práci: verzálkami
	 * ve 0,8125rem má tlačítko přirozenou výšku 38,8 px, tedy o 5,2 px pod hranicí.
	 * ZMĚŘENO s vypnutým `min-height`, ne odvozeno z odsazení.
	 */
	min-height: 2.75rem;
	border: 1px solid var(--linka);

	/*
	 * Verzálky s rozpalem jako u položek navigace (0,8125rem / 800 / 0,14em) — směr AA
	 * dává hlavičce jednu typografickou hladinu a přepínač je její součástí, ne tlačítko
	 * jiného řádu. Váha je o stupeň vyšší než u odkazů, protože přepínač stojí sám.
	 */
	font-size: 0.8125rem;
	font-weight: 800;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--text-silny);
	cursor: pointer;

	/* Výchozí trojúhelníček `<summary>` pryč — máme vlastní ikonu. */
	list-style: none;
}

/*
 * Přejetí obarví rámeček i nápis na `--akcent` (5,73 : 1 na `--cerna`) — ikona jde
 * s ním, protože je nakreslená z `currentcolor`. Zavřený i otevřený přepínač má
 * stejné barvy: obojí je `--text-silny` na `--cerna` (20,01 : 1), panel pod ním má
 * vlastní pozadí `--cerna-2` a přepínač do něj nezasahuje. Ve směru AD byl otevřený
 * přepínač bílý na bílé, tady se to stát nemůže.
 */
.menu__prepinac:hover {
	border-color: var(--akcent);
	color: var(--akcent);
}

.menu__prepinac::-webkit-details-marker {
	display: none;
}

/* Tři čárky nakreslené v CSS, ať se nestahuje ikonový font ani obrázek. */
.menu__ikona {
	position: relative;
	width: 1.25rem;
	height: 2px;
	background: currentcolor;
	box-shadow: 0 -6px currentcolor, 0 6px currentcolor;
}

.menu[open] .menu__ikona {
	background: transparent;
	box-shadow: none;
}

.menu[open] .menu__ikona::before,
.menu[open] .menu__ikona::after {
	content: '';
	position: absolute;
	inset: 0;
	background: currentcolor;
}

.menu[open] .menu__ikona::before {
	transform: rotate(45deg);
}

.menu[open] .menu__ikona::after {
	transform: rotate(-45deg);
}

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

/*
 * `min-height` drží klikací cíl na 44 px (#64) — bez něj má odkaz 38,8 px, tedy stejně
 * jako přepínač a o 5,2 px pod hranicí (změřeno s vypnutým `min-height`; verzálkami ve
 * 0,8125rem je to ještě méně než na starém webu, kde chybělo 2,4 px). Platí i pro
 * vodorovnou navigaci: nemusí se to řešit zvlášť pro každý práh. `flex` je tu proto, aby text
 * zůstal svisle na střed i v řádku vyšším, než potřebuje.
 *
 * Typografie je ze směru AA: verzálky 0,8125rem / 700 / rozpal 0,14em. Základní barva
 * je `--text` (13,85 : 1 na `--cerna`), ne bílá — v AA nese hlavička jednu tišší
 * hladinu a zvýrazněná je až položka, na které návštěvník stojí nebo míří.
 *
 * Podtržení nese `border-bottom`, ne `text-decoration`: v klidovém stavu je průhledný,
 * takže se položka při přejetí ani při zvýraznění nikam neposune. `text-decoration`
 * by se navíc lepilo na účaří textu a s rozpalem 0,14em by přetahovalo za poslední
 * znak — hrana rámu jde přes celou položku a v řádce verzálek drží jednu linku.
 */
.navigace__odkaz {
	display: flex;
	align-items: center;
	min-height: 2.75rem;
	padding-block: var(--m1);
	border-bottom: 2px solid transparent;
	color: var(--text);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	text-decoration: none;
}

/*
 * Hrana je u přejetí i u aktivní položky `--akcent` (5,73 : 1 na `--cerna`) — tak to
 * má směr AA a je to jediná linka v navigaci, takže se nemá lámat na dvě barvy.
 * Rozdíl mezi dočasným a stálým stavem nese TEXT, viz pravidlo u aktivní položky níž.
 */
.navigace__odkaz:hover,
.navigace__odkaz:focus-visible {
	border-bottom-color: var(--akcent);
	color: var(--kysela);
}

/*
 * Aktivní položka je `--akcent`, ne `--kysela`. Kyselá zelená znamená na celém webu
 * „právě na tomhle jsem myší nebo klávesou"; kdyby označovala i stav stránky, splynul
 * by dočasný stav se stálým a v navigaci by po přejetí zmizel rozdíl mezi tím, kde
 * návštěvník je, a tím, na co míří. Směr AA obojí sjednocuje do bílé — tady se ta
 * část nepřebírá právě proto, aby ten rozdíl zůstal (viz implementační plán série).
 */
.navigace__odkaz[aria-current='page'] {
	border-bottom-color: var(--akcent);
	color: var(--akcent);
}

/* --- pod prahem: plovoucí panel pod hamburgerem ---------------------------- */

/*
 * Panel je mimo tok stránky (#64). Dokud byl v toku, rozbalení menu zvýšilo
 * hlavičku a odsunulo celý obsah dolů — člověk klepl na Menu a stránka mu pod
 * rukou uskočila. Plovoucí panel překrývá text pod sebou, takže se při otevření
 * ani zavření nezmění výška hlavičky a nic se neposune.
 *
 * Je to zároveň ten nejběžnější mobilní vzor: panel vypadne zpod tlačítka,
 * zarovnaný k pravému hornímu rohu. Cílová skupina je 6–60 let, takže vyhrává
 * očekávatelnost — zasouvací boční lišta by byla funkce navíc k pochopení.
 */
/*
 * Dolní hranice je zapsaná jako negace horní, ne jako `max-width`. Důvod je dvojí:
 * práh pak stojí v celém souboru jako JEDNO číslo (72em na třech místech, ne 71.999em
 * proti 72em), a `max-width: 71.999em` končí na 1151,984 px, takže mezi ním a 1152 px
 * zůstává 0,016 px skulina bez pravidla. Přepisuješ-li práh, hledej `72em`.
 */
@media not all and (min-width: 72em) {
	.menu__panel {
		position: absolute;

		/* Přesně na spodní hranu hlavičky; `right` na pravou hranu obsahu, tedy pod tlačítko. */
		top: 100%;
		right: var(--m2);

		/*
		 * Nad obsahem stránky, a nejvýš ze všeho. Nad panelem je už jen `.preskocit`
		 * s 10, který je sourozencem hlavičky, takže se s panelem nesrovnává uvnitř
		 * jejího stacking contextu. Celý výčet hladin webu je u `.hlavicka` výš —
		 * jsou čtyři, včetně záporné pro dekor z #122.
		 */
		z-index: 20;

		/*
		 * Šířka podle obsahu, ne přes celou hlavičku. Spodní mez drží panel
		 * čitelný i u krátkých položek („O nás"), horní ho na tabletu nenechá
		 * roztáhnout do prázdna. Nejdelší položka („Úspěchy a vystoupení") měří
		 * 166 px, takže se do 14rem vejde na jeden řádek i s odsazením.
		 */
		min-width: 14rem;
		max-width: 20rem;

		padding: var(--m1) var(--m2);

		/*
		 * Vlastní pozadí, hrana a stín — panel leží nad textem a musí od něj být
		 * odlišený. Hrana je jediné místo v hlavičce, kde `--linka` nestačí: panel je
		 * `--cerna-2` na stránce `--cerna`, tedy rozdíl 1,06 : 1, a `--linka` by k tomu
		 * přidala 1,27 : 1 — otevřené menu by nad textem nebylo ohraničené. `--akcent`
		 * má proti podkladu stránky 5,73 : 1. Stín je tu jako druhá pomůcka, ne první:
		 * černý stín na skoro černé stránce sám oddělení neunese.
		 */
		border: 1px solid var(--akcent);
		background: var(--cerna-2);
		box-shadow: var(--stin-panel);
	}

	.menu__seznam {
		display: flex;
		flex-direction: column;
	}

	.menu__seznam li + li {
		border-top: 1px solid var(--linka);
	}
}

/*
 * Pod 400 px má panel přes celou šířku obsahu. Na takhle úzkém displeji je
 * důležitější velký klikací cíl než úspora místa — panel podle obsahu by tu
 * zabral skoro celou šířku i tak, jen s nahodilým okrajem vlevo.
 */
@media (max-width: 25em) {
	.menu__panel {
		left: var(--m2);
		min-width: 0;
		max-width: none;
	}
}

/* --- od 1152px: vodorovná navigace ---------------------------------------- */

/*
 * Práh je změřený, ne odhadnutý (#64, přeměřeno v #121). Verzálky s rozpalem 0,14em
 * ze směru AA jsou navzdory menšímu stupni písma širší než původní text: sedm položek
 * nowrap měří 778,95 px (O nás 48,56 / Taneční skupiny 143,38 / Lektoři 66,88 /
 * Důležité informace 173,86 / Úspěchy a vystoupení 192,39 / Sponzoři 80,55 /
 * Kontakt 73,33), starý web měl 650 px. Šest mezer po 24 px dá 144 px, navigace tedy
 * potřebuje 922,95 px. K tomu 132 px logo, 40 px mezera mezi ním a menu a 2× 16 px
 * odsazení obalu: hlavička potřebuje 1126,95 px ŠÍŘKY ROZVRŽENÍ (`documentElement.clientWidth`)
 * — 1094,95 px na obsah plus 2× 16 px odsazení. Okno musí být o šířku posuvníku širší.
 * ZMĚŘENO při 15px posuvníku: od okna 1142 px (rozvržení 1127) drží hlavička jednu řádku,
 * na 1137 px (rozvržení 1122) se navigace láme pod logo a hlavička naroste na 168,23 px.
 *
 * 72em (1152 px) není nejbližší celý em nad tím číslem — tím by bylo 71em (1136 px).
 * Rezerva je tam schválně: `width` v media query se vyhodnocuje včetně klasického
 * posuvníku (stejně jako `100vw`), takže okno, na kterém pravidlo poprvé chytne, má
 * o šířku posuvníku menší plochu k rozvržení. Při 15px posuvníku zůstává 1152 − 15 − 32
 * = 1105 px proti potřebným 1094,95 px, tedy ještě 10 px k dobru; na 71em by to bylo
 * −6 px a navigace by se v tom jednom kroku zalomila pod logo.
 *
 * PO KAŽDÉ ZMĚNĚ POČTU NEBO ŠÍŘKY POLOŽEK SE PRÁH PŘEMĚŘUJE — a měř VÝŠKU
 * HLAVIČKY, ne přetečení seznamu. `scrollWidth === clientWidth` na `.menu__seznam`
 * tuhle vadu NECHYTÍ: při rozbité hlavičce (rozvržení 1122 px) hlásí seznam 923/923,
 * tedy žádné přetečení, protože se zalamuje `.hlavicka__obal`, ne seznam. Měřeno na
 * `.hlavicka` (tedy včetně její 1px `border-bottom`): jedna řádka = 108,23 px, dvě
 * = 168,23 px; na `.hlavicka__obal` samotném je to 107,23 a 167,23 px. Přeměřeno v #128
 * a navigace se na jednu řádku vejde už od šířky rozvržení 1127 px, práh 1152 px má tedy
 * 25 px rezervy. Precedent: hlavička se rozsypala mezi 960 a 992 px, protože práh byl
 * odhadnutý.
 * Práh stojí na TŘECH místech v tomhle souboru (negace výš, pravidlo tady, blok
 * `@supports` níž) a všechna tři musí nést tutéž hodnotu.
 */
@media (min-width: 72em) {
	/*
	 * Tady už mezera něco dělá: navigace stojí vedle loga a `space-between` ji odrazí
	 * jen tehdy, když je v řádce místo navíc. Na 1152 px místo navíc není, takže bez
	 * této mezery by první položka začínala přilepená k logu.
	 */
	.hlavicka__obal {
		column-gap: var(--m4);
	}

	.menu__seznam {
		display: flex;
		flex-wrap: wrap;
		align-items: center;

		/*
		 * Svislá mezera se uplatní jen kdyby se seznam přece jen zalomil — nad prahem
		 * se to stát nemá, ale nulová mezera by z toho udělala nečitelnou kaši.
		 */
		gap: var(--m1) var(--m3);
	}
}

/*
 * Na široké obrazovce má být navigace vidět pořád, i když `<details>` není
 * `open`. Jediná cesta, jak obsah zavřeného `<details>` zobrazit bez JS, je
 * `::details-content` (Chrome 131, Safari 18.4, Firefox 139) — jiný fallback
 * neexistuje, `display` na potomcích už na skrývání obsahu nestačí.
 *
 * Proto se `<summary>` schovává až uvnitř `@supports`, spolu s pravidlem, které
 * ho nahrazuje. Prohlížeč bez podpory `::details-content` (a stejně tak bez
 * podpory `@supports selector()`) tenhle blok celý zahodí, takže mu zůstane
 * viditelný přepínač a menu se na desktopu ovládá stejně jako na mobilu.
 * Kdyby `display: none` stálo venku, dostal by hlavičku bez jediného odkazu.
 */
@supports selector(::details-content) {
	@media (min-width: 72em) {
		.menu__prepinac {
			display: none;
		}

		.menu::details-content {
			content-visibility: visible;
			block-size: auto;
		}
	}
}

/* ==========================================================================
   5. Obsah
   ========================================================================== */

/*
	KONTEJNER PŘES CELOU ŠÍŘKU (#179). Do #179 byl `<main>` sám `.obal`, takže podklad a linka
	každé sekce končily na 78rem a na širokém displeji stály sekce jako krabice uprostřed tmy.
	Maketa AA to má obráceně: sekce vede přes celou šířku okna a na `--obal` je omezený až obsah
	uvnitř (`<section class="sekce"><div class="obal">`). To byla nepřesnost převodu, ne
	rozhodnutí — viz tabulka rozdílů v #179.

	Šablony se kvůli tomu nepřestavují. `.obsah` přes celou šířku dostane vnitřní odsazení
	`--okraj`, které obsahový sloupec vrací přesně tam, kde byl: `max(--m2, (šířka − --obal) / 2
	+ --m2)` dá sloupec široký `min(šířka, --obal) − 2 × --m2` a na střed, tedy v zákrytu
	s `.hlavicka__obal` i `.paticka .obal`. Pásy (`.sekce`, `.uvodni`) ten okraj zápornou
	hodnotou ruší a vracejí ho jako vlastní odsazení — tentýž postup, jaký tu do #179 byl s `--m2`,
	jen s okrajem až k hraně okna.

	`100cqw`, NE `100vw`. `vw` počítá i s klasickým posuvníkem a pás by přetekl do strany (důvod,
	proč tu `100vw` nikdy nebylo). `cqw` se měří na `body`, které je kontejnerem velikosti —
	jeho šířka je šířka rozvržení bez posuvníku. Hodnota v `--okraj` se dosazuje až v místě
	použití, a protože `.obsah` ani pásy kontejnerem nejsou, `100cqw` všude znamená totéž `body`.

	Prohlížeč bez kontejnerových jednotek zahodí celý blok `@supports` a zůstane mu stav před
	#179: `.obsah` omezený na `--obal` a pásy široké jako sloupec. Nic se nerozbije.
*/
body {
	container-type: inline-size;
}

.obsah {
	--okraj: var(--m2);

	flex: 1;
	width: 100%;
	max-width: var(--obal);
	margin-inline: auto;
	padding-block: var(--m5);
	padding-inline: var(--okraj);
}

@supports (width: 1cqw) {
	.obsah {
		--okraj: max(var(--m2), calc((100cqw - var(--obal)) / 2 + var(--m2)));

		max-width: none;
	}
}

/*
 * Rytmus stránky. Odstavec od nadpisu odděluje `--m2`, sekci od sekce `--m5` —
 * bez toho splývá konec jedné sekce se začátkem další a stránka se čte jako jeden blok textu.
 *
 * Selektory jsou schválně na přímé potomky `.obsah`: nadpis uvnitř karty (`.skupiny__nazev`)
 * ani uvnitř jiné komponenty tenhle odstup dostat nesmí. Platí to pro všechny stránky, ne jen
 * pro homepage — proto je pravidlo tady a ne u jednotlivých sekcí.
 *
 * `.sekce` je z druhého pravidla vyňatá schválně a není to detail: sekce se od sebe od #123
 * odlišují horní linkou a ty na sebe musí DOSEDAT. Margin mezi nimi by mezi dvě sekce vložil
 * pás podkladu stránky, linka by se octla uprostřed prázdného místa a vypadala by jako
 * nedotažený okraj, ne jako předěl.
 */
.obsah > h2:not(:first-child) {
	margin-top: var(--m5);
}

.obsah > section:not(.sekce) {
	margin-top: var(--m5);
}

/*
	Sekce stránky jako vlastní vodorovný pás — ze směru AA (`www/navrhy/styl/smer-a.css`,
	`.sekce`). Zavedlo ji #123 pro homepage, ale je to layoutová primitiva pro celou sérii
	#120–#128, ne homepage speciál; proto je tady v obsahu, ne v sekci o homepage.

	NESE NÁHRADU ZA VAZBU, KTEROU #120 VYPRÁZDNILO. Do #120 se sekce odlišovaly skokem barvy:
	obsah stál na bílé, tmavý pruh na černé. Paleta AA je tmavá celá, takže skok není k mání
	a sekce by splynuly v jeden svitek. Odlišuje je proto `border-top: 1px solid var(--linka)`
	a prokládání `--cerna-2` (viz `.sekce--prokladana`). Linka je pod hranicí 3 : 1 z WCAG
	1.4.11 (1,33 : 1 na `--cerna`) a je to v pořádku — je to dekorativní předěl, ne hrana,
	podle které se pozná ovládací prvek (viz tabulka nad souborem).

	Záporný `margin-inline` ruší odsazení `--okraj` na `.obsah`, takže podklad i linka sahají
	k okrajům okna a obsah sekce zůstává v zákrytu s hlavičkou (#179, viz `.obsah` výš). Do #179
	tu byl `--m2` a pás končil na `--obal` (78rem) — maketa AA vede sekce přes celou šířku.
	Totéž platí pro `.uvodni`.
*/
.sekce {
	margin-inline: calc(var(--okraj) * -1);
	padding: var(--m5) var(--okraj);
	border-top: 1px solid var(--linka);
}

/*
	Prokládaná sekce. Jediná barva, kterou na tohle paleta má, je `--cerna-2` — proti podkladu
	stránky o `(8, 8, 10)` po kanálech, tedy 1,05 : 1, takže sama o sobě sekci neoznačí;
	nese ji spolu s linkou, ne místo ní. (`#101014` proti `#08080a`.)
*/
.sekce--prokladana {
	background: var(--cerna-2);
}

/*
	Na širokém displeji `--m6`, jak to má směr AA. Práh je 48em, ne 60em jako v maketě:
	zbytek souboru se láme na 48em a druhý práh kvůli jedné komponentě by byl nekonzistence,
	kterou by pak musel znát každý, kdo sem přijde po nás.

	`--m6` dostávají jen sekce, ne úvodní blok, a je to měřené rozhodnutí, ne opomenutí —
	viz komentář u tokenu `--m6` v sekci 2 (důvod byl ohyb ilustrace, od #203 historický).
*/
@media (min-width: 48em) {
	.sekce {
		padding-block: var(--m6);
	}
}

/*
	Poslední sekce ruší spodní odsazení `.obsah`, stejně jako `.uvodni` ruší to horní.
	Sekce mají na patičku dosednout svým vlastním odsazením: bez tohohle se sečte
	odsazení sekce s odsazením `.obsah` a před patičkou zůstane dvojnásobná mezera,
	která nikam nepatří — pás podkladu stránky mezi poslední linkou a linkou patičky.
*/
.obsah > .sekce:last-child {
	margin-bottom: calc(var(--m5) * -1);
}

/*
	DVA SLOUPCE: TEXT A FOTKA (#202) — `.dvojice` a `.foto-vedle` ze `smer-a.css`. Obecná
	primitiva pro celou sérii #201–#208, ne homepage: v maketě AA tak stojí úvod homepage
	a skupin i sekce s fotkou na homepage, skupinách, lektorech a kontaktu. Proto jsou tady
	v obsahu vedle `.sekce`, ne v sekci konkrétní stránky.

	Použití: `<div class="dvojice"><div>…text…</div><figure class="foto-vedle">{include
	obrazek …}</figure></div>`. Pořadí v HTML je pořadí na telefonu, kde jde fotka pod text.
	Tvar text + fotka v sekci vykresluje sdílený blok `dvojiceSFotkou` (#206,
	Layout/@dvojice-s-fotkou.latte) i se `sizes`; úvod stránky má vlastní `uvodniBlok`.
	OBRÁCENÉ SLOUPCE `.dvojice--obracene` (#203, homepage „Celovečerní taneční projekty"):
	obrázek vlevo, text vpravo. V HTML zůstává text první, takže na telefonu jde obrázek pod
	text stejně jako u běžné dvojice; vlevo ho od 60em přesune `order`, jako v maketě.
	Pořadí pro oko a pro odečítač se tím na širokém displeji rozchází, ale jen o jeden
	obrázek vedle textu — čtení textu to nemění. Figura může být `.foto-vedle` i jiná
	(na homepage `.ilustrace`, sekce 9).

	PRÁH 60em, NE 48em, a je to vědomá výjimka z pravidla „zbytek souboru se láme na 48em"
	(viz `.sekce` výš). Maketa lomí dva sloupce na 60em a na 48em (768 px) by vedle fotky
	zbyl sloupec kolem 330 px, do kterého se `h1` homepage ve stupni makety láme po slovech.
	60em už na webu je (patička, sekce 10), takže to není nový práh.

	`.foto-vedle img` ořezává na 4 : 3 přes `object-fit`, jako maketa. `width`/`height`
	doplňuje blok `obrazek` ze souboru; `aspect-ratio` je přebije, takže rezervované místo
	odpovídá vykreslenému výřezu a CLS zůstává nulový.
*/
.dvojice {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-items: center;
	gap: var(--m4);
}

@media (min-width: 60em) {
	.dvojice {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
		gap: var(--m5);
	}

	.dvojice--obracene > :first-child {
		order: 2;
	}
}

.foto-vedle {
	margin: 0;
	line-height: 0;
}

.foto-vedle img {
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

/*
	Fotka s čistě černým pozadím (`#000`) na tmavém podkladu (`--cerna` je `#08080a`): kolem
	ní by byl vidět černější obdélník. `lighten` vezme po kanálech světlejší z fotky a podkladu,
	takže černé pozadí převezme barvu podkladu a zbytek fotky se nezmění. Homepage, sekce
	„Celovečerní taneční projekty" (2026-09-17). Stejný postup má ilustrace v úvodu
	(`.uvodni .ilustrace`, sekce 8).
*/
.foto-vedle--prolnuta img {
	mix-blend-mode: lighten;
}

/*
	MÍRA ŘÁDKU PRO PRÓZU — jedno pravidlo pro celý web (#126). Do #126 byla tatáž hodnota
	opsaná u tří komponent a próza na zbylých devíti stránkách nebyla krytá vůbec: změřeno
	na vykreslené stránce v okně 1280 px, že `/zasady-zpracovani-osobnich-udaju` sází všech
	sedm odstavců i seznam na **1216 px**, tedy na celou šířku obsahového sloupce, kdežto
	detail věkové kategorie na **587,47 px**. Dvojnásobek míry na desítce právních odstavců
	se nečte — oko po konci řádku nenajde začátek dalšího.

	PRÓZA SE POZNÁ PODLE TOHO, ŽE NEMÁ TŘÍDU, a je to pravidlo, ne shoda: každý odstavec
	a seznam, který je obsahem stránky, je v šablonách holý `<p>` / `<ul>`, kdežto každý
	prvek komponenty třídu nese (`.sponzori`, `.skupiny`, `.chyba__odkazy`, `.kontakt__osoby`,
	`.lektori`, `.tlacitka`). Proto `:not([class])` — bez něj by míra 62 znaků spadla i na
	mřížku log partnerů, která má vlastní šířku (#146), a na osu věkových kategorií, která má
	být přes celý sloupec.

	Pět prózových prvků třídu přesto má, protože nesou i něco jiného než měřítko, a jsou
	proto vyjmenované ručně (od #205 i popis kategorie a poznámka pod osou rozcestníku).
	Kdyby se sem přidal šestý, patří do tohohle výčtu, ne do
	vlastního pravidla s vlastní hodnotou — právě to se v #126 uklízelo.

	Odpovědi na `/caste-dotazy` sem přešly ze `44rem` (sekce 12). Byla to jediná další míra
	na webu a nic ji neodlišovalo od ostatní prózy; 44rem je navíc 704 px, tedy o pětinu víc
	než míra zbytku webu, takže odpovědi na dotazy měly delší řádek než samotný obsah stránek.
*/
.obsah :is(p, ul, ol):not([class]),
.obsah .skupiny__uvod,
.obsah .skupina__uroven,
.obsah .skupiny__popis,
.obsah .pozn,
.obsah .vetsi {
	max-width: var(--mira);
}

/*
	Úvodní odstavec stránky (perex). Větší a tmavší než běžný text, ať je vidět, kde se začíná
	číst. Stupeň 1.1875rem (19 px) a šířka 44ch jsou z `.hero__text .perex` makety AA (#201);
	řádkování dědí 1.7 z `body`, stejně jako v maketě.

	44ch místo `--mira` je vědomé: maketa sází perex užší než běžný odstavec a v rozvržení se
	dvěma sloupci (úvod vedle fotky) na tom stojí. Proto `.uvod` ve výčtu míry výš NENÍ —
	selektor `.obsah .uvod` by tuhle šířku přebil.
*/
.obsah .uvod {
	max-width: 44ch;
}

.uvod {
	font-size: 1.1875rem;
	color: var(--text-silny);
}

/*
	Větší odstavec (#201) — `.vetsi` z makety AA, 1.25rem / 1.6. Nese ho samostatný text
	sekce, která nemá nic jiného než nadpis a pár vět (na homepage „Co se u nás tančí"
	a „Kam se ozvat"). Třída je jen tam, kde ji má maketa; běžný odstavec v sekci zůstává
	holý `<p>`. Šířku řádku bere z výčtu míry výš.
*/
.vetsi {
	font-size: 1.25rem;
	line-height: 1.6;
}

/*
	ODRÁŽKOVÉ SEZNAMY V OBSAHU — pět seznamů na čtyřech stránkách (`/sponzori` dva,
	`/zasady-zpracovani-osobnich-udaju`, `/o-nas/uspechy-a-vystoupeni`, detail věkové
	kategorie; seznam stylů z homepage je od #202 štítky `.styly`). Směr AA pro ně NEMÁ
	VZOR: `www/navrhy/styl/smer-a.css` nestyluje `ul` ani `ol` ani jednou a všech pět
	seznamů, které maketa má (`.osa`, `.styly`, `.lide`, `.odkazy`, `.menu__seznam`), si
	reset nese samo ve své třídě. Seznam v obsahu
	tak do #126 zůstával přesně tak, jak ho kreslí prohlížeč: `list-style: disc`
	a `padding-left: 40px` (změřeno).

	ODRÁŽKA JE ČÁRKA, NE KOLEČKO, a není to vkus. V celém AA není jediný `border-radius` —
	ostré hrany jsou nosný rys návrhu a výchozí `disc` by byl jediný kruh na webu. Čárka
	navíc navazuje na dva prvky, které v AA existují: `.pozn` má svislou linku v `--akcent`
	a `.styly li` rámeček v `--linka`. Barva je `--akcent`, tedy táž, kterou nese odrážka
	nejbližšího příbuzného prvku.

	`padding-left` je `--m3` (24 px), ne prohlížečových 40 px: 40 px je skoro `--m5` a na
	320 px odkrojí osmou část šířky. Odsazení nese `li`, ne `ul` — seznam tak začíná
	v zákrytu s odstavci nad ním a pod ním, a to i uvnitř `.sekce`, kde by odsazený seznam
	vypadal jako vsazená citace.

	`top: 0.77em` je změřená, ne odhadnutá hodnota: čárka má sedět na optický střed prvního
	řádku, tedy o kousek nad středem řádkového boxu. Při 17px písmu a `line-height: 1.7`
	(`body` v sekci 3, od #201) je střed čárky 14,09 px od horní hrany boxu 28,9 px, 0,36 px
	nad jeho středem. Do #201 to bylo `0.72em` při 16 px / 1.6 (0,28 px nad středem boxu 25,6 px);
	se starou hodnotou by čárka po #201 ujela o 1,2 px nahoru. Kdo změní stupeň nebo
	`line-height` na `body`, změní i tohle.

	Číslované seznamy (`ol`) tu pravidlo NEMAJÍ, a to schválně: jediný `<ol>` na webu je
	`.skupiny` (osa věkových kategorií), která má vlastní vzhled a třídu. Holý `<ol>` na
	webu není ani jeden, takže by to bylo pravidlo bez prvku. Až takový seznam vznikne,
	patří sem vedle tohohle bloku a odrážkou mu má být číslo v `--akcent`.
*/
.obsah ul:not([class]) {
	padding-left: 0;
	list-style: none;
}

.obsah ul:not([class]) > li {
	position: relative;
	margin-bottom: var(--m1);
	padding-left: var(--m3);
}

.obsah ul:not([class]) > li::before {
	content: '';
	position: absolute;
	left: 0;
	top: 0.77em;
	width: 0.5rem;
	height: 2px;
	background: var(--akcent);
}

/*
	Vedoucí slova v seznamech na `/sponzori` a `/zasady-zpracovani-osobnich-udaju` jsou
	`<strong>` a nesou strukturu položky („**Logo na tréninkovém oblečení.** Na tanečním
	kostýmu je reklama…"). Směr AA `strong` nestyluje, ale `b` ano — `.adresa b`
	a `.paticka b` dostávají `--text-silny`. Tohle pravidlo je totéž rozhodnutí pro obsah:
	silný text je bílý. Na podkladu stránky `--cerna` má 20,01 : 1, na prokládané sekci
	`--cerna-2` 18,98 : 1 (WCAG 2.1). Samotná tučnost na `--text` #d6d6de položku odliší
	taky — ta má na `--cerna` 13,85 : 1 — ale slabě; rozdíl 13,85 proti 20,01 je na desítce
	položek to, co rozhoduje, jestli se seznam čte jako výčet pojmů, nebo jako odstavce
	za sebou. Obojí prochází s velkou rezervou, tady tedy nejde o čitelnost, ale o hierarchii.

	Čárka odrážky výš je grafika, ne text, takže jí stačí 3 : 1: `--akcent` #c26bae má
	na `--cerna` **5,73 : 1**, na `--cerna-2` **5,43 : 1**.
*/
.obsah strong {
	color: var(--text-silny);
}

/*
	Odstavec, který návštěvníkovi říká „tohle ještě není hotové". Odliší se od běžného
	odstavce, ať je na první pohled jasné, že to není obsah stránky — a ať se pozná, když
	někdo takovou stránku vypustí ven jako hotovou.

	Patří k němu právě jedna třída: `.rozpracovano` z `@rozpracovano.latte` (#39), která na
	stránce zároveň znamená `noindex`. Druhá třída `.skupina__doplnujeme` tu byla do #55 pro
	detail složky, kde většina údajů čekala na klientku — stránky věkových kategorií žádné
	takové údaje nemají, takže odešla i se selektorem.
*/
.rozpracovano {
	padding: var(--m3);
	border-left: 3px solid var(--linka);
	background: var(--cerna-3);
}

/* ==========================================================================
   6. Taneční skupiny podle věku (#55)
   ========================================================================== */

/*
	Rozcestník věkových kategorií — markup je v bloku `Layout/@vekove-kategorie.latte`.
	Do 2026-09-01 stál na `/tanecni-skupiny` i na homepage; sekce na homepage je pryč (#63),
	takže tyhle třídy dneska obsluhují jedinou stránku. Styl se kvůli tomu nepřepisuje: karty
	jsou tatáž komponenta, jen na jednom místě.

	Je to hlavní cesta, kterou má rodič na webu projít — proto karty, ne holý seznam odkazů.

	OD #124 JE TO OSA, NE MŘÍŽKA KARTIČEK. Do #124 tu byl `repeat(auto-fill, minmax(15rem, 1fr))`,
	tedy pět orámovaných dlaždic vedle sebe. Osa věku místo mřížky je podle release notes jedna
	z věcí, kvůli kterým si klientka vybrala směr A (`www/navrhy/styl/smer-a.css`, `.osa`):
	kategorie jdou pod sebou od nejmladších, každá zabírá celou šířku obsahového sloupce
	a od sousedů ji dělí vlasová linka.

	LINKY MEZI ŘÁDKY DOSEDAJÍ NA SEBE A JE TO PODMÍNKA, NE VKUS. Kategorie na sebe navazují bez
	mezery i bez překryvu (klientka 2026-09-07, #91: 4–6, 7–11, 12–15, 16+, 25+), takže osa
	mezi dvěma řádky nesmí udělat díru ani je nechat přesahovat. Proto `border-top` na každém
	řádku a `border-bottom` jen na posledním — ne `gap`, ne rámeček dokola, ne `margin`.

	POZOR: `claude/plans/2026/09/redesign-zadani.md:122-128` tvrdí rozpětí „4–8, 8–11" a že
	„překryv na osmém roce je záměr". To zrušilo #91 a zadání je v tomhle bodě zastaralé;
	platí rozdělení z NEONu (`content/vekove-kategorie.neon`, sekce o věkových hranicích).

	`.skupiny__uvod` tu do #126 mělo vlastní pravidlo, které nedělalo nic než `max-width: 60ch`.
	Míru řádku mu dnes dává společný výčet prózy v sekci 5, tedy týž `--mira` jako všem
	ostatním odstavcům na webu; třída v šabloně zůstává, jen ji tady neobsluhuje nic.
*/

/*
	Záporný `margin-inline` ruší `--m2` z odsazení `.obsah`, takže linky a podbarvení řádku
	sahají k okrajům obsahového sloupce (ne okna — osa je v maketě uvnitř `.obal`, na rozdíl
	od `.sekce`, viz #179), kdežto text řádku zůstává v zákrytu se zbytkem
	stránky (odsazení se vrací jako `padding-inline` na `.skupiny__polozka`). Postup a důvod jsou
	tytéž jako u `.sekce` v sekci 5, jen s `--m2` místo `--okraj` — řádek osy je vodorovný pás,
	ne dlaždice, ale končí na hraně sloupce.
*/
/*
	`margin-top: var(--m3)` je odstup od nadpisu „Vyberte věk" (#205). Maketa AA dává `h2`
	`margin-bottom: var(--m3)`, web globálně `--m2` (sekce 3) a mění se jen tady: margin nadpisu
	a seznamu se slijí na větší z nich, takže mezi nadpisem a první linkou osy je 24 px jako v maketě.
*/
.skupiny {
	margin: var(--m3) calc(var(--m2) * -1) 0;
	padding: 0;
	list-style: none;
}

/*
	`position: relative` je tu kvůli klikací ploše: odkaz v nadpisu roztahuje `::after` přes
	celý řádek, takže se dá kliknout kamkoli, ne jen na text. Je to jediná cesta, jak mít
	velký klikací cíl bez JavaScriptu a bez `<a>` obalujícího blokový obsah. Ostatní prvky
	řádku (číslo, větve, popis, „Zobrazit kategorii") jsou neumístěné, takže `::after` leží
	nad nimi a klik kamkoli do řádku trefí odkaz.

	OD #205 MÁ ŘÁDEK DVA SLOUPCE UŽ NA TELEFONU (maketa AA, `.kat__odkaz` pod 60em): vlevo
	velké číslo věku, vpravo všechno ostatní pod sebou. Od 48em přibude třetí sloupec pro
	„Zobrazit kategorii" (viz media query níž).

	UMÍSTĚNÍ JE ÚPLNÉ V KAŽDÉM STAVU, NE ZPOLA PŘEPSANÉ. Poučení z vady makety, kvůli které
	se do #205 rozdávalo umístění jen v jednom stavu: směr A dává `grid-column`/`grid-row`
	v základním pravidle a v mobilní media query přesouvá „Zobrazit kategorii" do druhého
	sloupce (`.kat__vic { grid-column: 2 }`), ale `grid-row: 1 / -1` ze základu nepřepíše —
	návěští pak na 360 px překryje nadpis o 19 px (AUTONOMOUS-DECISIONS.md k #124). Tady má
	v základu explicitní umístění jen číslo (levý sloupec) a zbytek jde `grid-column: 2`
	s automatickým řádkem, tedy pod sebe v pořadí HTML. Media query přidává „Zobrazit
	kategorii" `grid-column` i `grid-row` naráz, takže neexistuje stav, ve kterém by
	platila jen půlka.

	`grid-row: 1 / span 5` místo `1 / -1` z makety: řádky mřížky jsou implicitní a `-1` míří
	na konec EXPLICITNÍ mřížky, která žádné řádky nemá — `1 / -1` tak vydá jediný řádek a číslo
	by první řádek nafouklo na svou výšku. Pět je nejvyšší počet prvků v pravém sloupci
	(nadpis, větve, štítky lig, popis, návěští); nevyužité implicitní řádky mají výšku nula
	a `row-gap` je nula, takže nic nepřidají. Svislé mezery nesou marginy prvků.
*/
.skupiny__polozka {
	position: relative;
	display: grid;
	grid-template-columns: 5.5rem minmax(0, 1fr);
	column-gap: var(--m3);
	padding: var(--m4) var(--m2);
	border-top: 1px solid var(--linka);
	transition: background-color 0.15s ease;
}

.skupiny__polozka > * {
	grid-column: 2;
}

.skupiny__polozka:last-child {
	border-bottom: 1px solid var(--linka);
}

/*
	Přejetí podbarví celý řádek, jak to má směr A (`.kat__odkaz:hover { background: var(--cerna-3) }`),
	a obarví číslo věku v `--akcent` (`.kat__odkaz:hover .kat__vek b`). Kontrasty obou stavů
	jsou v tabulce nad souborem, blok #205.
*/
.skupiny__polozka:hover {
	background: var(--cerna-3);
}

.skupiny__polozka:hover .skupiny__vek b {
	color: var(--akcent);
}

/*
	Nadpis kategorie je od #205 bílý, jako `.kat__nazev` v maketě. Do #205 měl barvu odkazu
	`--akcent` a po přejetí kyselou zelenou z globálního `a:hover`; teď barvu dědí z nadpisu
	(`--text-silny`) i po přejetí — přejetí ukazuje podbarvení řádku a číslo v `--akcent`.
	Podtržení při přejetí a fokusu zůstává: je to jediný znak odkazu na samotném textu.
*/
.skupiny__odkaz,
.skupiny__odkaz:hover {
	color: inherit;
	text-decoration: none;
}

.skupiny__odkaz::after {
	content: '';
	position: absolute;
	inset: 0;
}

.skupiny__odkaz:hover,
.skupiny__odkaz:focus-visible {
	text-decoration: underline;
}

/*
	Velké číslo věku (#205) — `.kat__vek` z makety AA, hodnoty doslova: 800, řádek 1,
	`letter-spacing: -0.03em`, číslo 1,75rem na telefonu a 2,5rem od 48em, popisek „let"
	0,6875rem verzálkami s rozpalem 0,2em v `--text-tlumeny`.

	Číslo se čte z názvu (`VekovaKategorie::vekZkracene()`), pole `vek` v obsahu není.
	`letter-spacing: -0.03em` do #205 nesl nadpis kategorie, protože roli velkého věku hrál
	on; teď ji má zpátky číslo, jako v maketě.

	`align-self: start` drží číslo nahoře u nadpisu, i když pravý sloupec je vyšší.
*/
.skupiny__vek {
	grid-column: 1;
	grid-row: 1 / span 5;
	align-self: start;
	margin: 0;
	color: var(--text-silny);
	font-weight: 800;
	line-height: 1;
	letter-spacing: -0.03em;
}

.skupiny__vek b {
	display: block;
	font-size: 1.75rem;
	transition: color 0.15s ease;
}

.skupiny__vek span {
	display: block;
	margin-top: 0.35em;
	color: var(--text-tlumeny);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.2em;
	text-transform: uppercase;
}

/*
	Nadpis kategorie — `h3` od #205, stupeň 1,5rem a verzálky podle `.kat__nazev` makety AA.
	Verzálky se dávají tady, ne globálně na `h3`: rozhodnutí z 2026-09-14 (sekce 3) je dává
	jen `h1` a `h2`, a `h3` na jiných stránkách tím #205 nemění. Řádkování a rozpal jsou
	tytéž jako u `h1`/`h2` (sekce 3), aby verzálky na webu vypadaly všude stejně.

	Do #205 to byl `h2` ve stupni `clamp(1.375rem, 1.1rem + 1.2vw, 1.75rem)` v levém sloupci
	o šířce 15rem, protože roli největšího údaje (věku) nesl nadpis. Tu roli převzalo číslo
	a nadpis se přestěhoval do pravého sloupce, takže změřená šířka 15rem i vlastní stupeň
	pozbyly smysl. Zmizely i `position: static` a `isolation: auto`: vracely hodnoty, které
	`h2` bralo kvůli čmouze, a `h3` je nemá. Pravidlo pro klikací řádek platí dál — nadpis
	nesmí být umístěný, jinak se `::after` odkazu vztáhne k němu (`elementFromPoint()`, #124).
*/
.skupiny__nazev {
	margin-bottom: var(--m1);
	font-size: 1.5rem;
	line-height: 1.02;
	letter-spacing: -0.02em;
	text-transform: uppercase;
}

/*
	Větve kategorie na kartě rozcestníku (#92) — „taneční kroužek", „soutěžní složky".

	Schválně to NENÍ štítek: větev a liga nejsou tentýž druh údaje a nemají vypadat jako
	dva kusy jednoho výčtu. Od #219 jsou ligy pod větvemi štítky (`.skupiny__ligy`), větve
	zůstávají textem — rozdíl tvaru je to, co je od sebe odlišuje. Maketa AA větve nezná.

	Položky jsou pod sebou, ne vedle sebe. Vejdou se na řádek jen na širokém displeji
	a zalomený výčet oddělený mezerou se čte jako jedna dlouhá věta; dva krátké řádky
	přečte rodič na mobilu na jeden pohled a to je celý smysl téhle změny.
*/
.skupiny__formy {
	margin: 0 0 var(--m1);
	padding: 0;
	list-style: none;
	font-size: 0.9375rem;
	color: var(--text);
}

/*
	Soutěžní úroveň na kartě rozcestníku jako řada štítků (#219) — `.kat__ligy`, `.liga`
	a `.liga--top` z makety AA: 0,6875rem, 700, prostrkání 0,1em, verzálky v `--text-tlumeny`
	s rámečkem `--linka`; nejvyšší liga v `--kysela` i s rámečkem.

	TVAR HLÍDÁ #93. Do 2026-09-10 tu byl odznak `.skupiny__udaj`: pilulka s tlumeným podkladem
	a zaoblením. Na kartě, která je klikací celá (`.skupiny__odkaz::after`), vypadal jako
	samostatné tlačítko a klientka po něm čekala stránku o ligách. Od #93 do #219 byla úroveň
	proto prostým textem. Štítky se vracejí jen v tvaru, který jako tlačítko nepůsobí: **žádný
	podklad, žádné zaoblení, žádný hover ani vlastní kurzor** — stejně jako `.styly` v úvodu
	homepage (sekce 8). Kdo sem přidá `background`, `border-radius` nebo `:hover`, vrací #93.
	Kurzor nad štítkem zůstává `pointer`, protože klikací je celá karta.

	Mezera nad štítky je `--m1` a přičítá se k `--m1` pod větvemi (`.skupiny__formy`) — marginy
	položek mřížky se neslévají, takže mezi větvemi a štítky je `--m2`, stejně jako mezi štítky
	a popisem (`margin-top` popisu). Kontrasty jsou v tabulce nad souborem, blok #219.
*/
.skupiny__ligy {
	display: flex;
	flex-wrap: wrap;
	gap: var(--m1);
	margin: var(--m1) 0 0;
	padding: 0;
	list-style: none;
}

.skupiny__ligy li {
	padding: 0.2rem 0.6rem;
	border: 1px solid var(--linka);
	color: var(--text-tlumeny);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

.skupiny__ligy .skupiny__liga--nejvyssi {
	border-color: var(--kysela);
	color: var(--kysela);
}

/*
	Popis kategorie (#205) — `naplnLekce`, `.kat__popis` z makety AA: 0,9375rem v `--text-tlumeny`.
	Od větví a štítků lig nad ním ho odděluje `--m2`, stejně jako v maketě `.kat__ligy` (margin
	pod ligami). Tlumená barva je tu schválně: větve (`--text`) a ligy jsou fakta, podle
	kterých rodič vybírá, popis je doprovodný text. Míru řádku dává výčet prózy v sekci 5.
*/
.skupiny__popis {
	margin: var(--m2) 0 0;
	font-size: 0.9375rem;
	color: var(--text-tlumeny);
}

/*
	„Zobrazit kategorii" (#205) — `.kat__vic` z makety AA: 0,6875rem, 800, rozpal 0,16em,
	verzálky v `--akcent`, bez zalomení. Není to odkaz (viz hlavička `@vekove-kategorie.latte`),
	jen návěští, že řádek vede dál; barvu odkazu nese proto, že klikací opravdu je.

	Na telefonu stojí v pravém sloupci pod popisem (maketa pod 60em), s `--m2` nad sebou —
	maketa tam dává `gap: var(--m3)` mezi všechny řádky, jenže tady `row-gap` zůstává nula
	(viz `.skupiny__polozka`), takže mezeru nese margin jen u návěští.
*/
.skupiny__vic {
	margin: var(--m2) 0 0;
	color: var(--akcent);
	font-size: 0.6875rem;
	font-weight: 800;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	white-space: nowrap;
}

/*
	Poznámka pod osou (#205) — `.pozn` z makety AA doslova: svislá linka `--akcent` vlevo,
	`--text-tlumeny`, 0,9375rem. `margin-bottom` je nula, protože poznámka je poslední prvek
	pásu `.sekce` a spodní mezeru nese odsazení pásu.
*/
.pozn {
	margin: var(--m4) 0 0;
	padding-left: var(--m3);
	border-left: 3px solid var(--akcent);
	color: var(--text-tlumeny);
	font-size: 0.9375rem;
}

/*
	Tři sloupce od 48em: číslo věku, obsah řádku, „Zobrazit kategorii" svisle na středu vpravo.

	PRÁH JE 48em, NE 60em JAKO V MAKETĚ. Zbytek souboru se láme na 48em a druhý práh kvůli
	jedné komponentě by byl nekonzistence, kterou by pak musel znát každý, kdo sem přijde
	po nás — stejné rozhodnutí a stejný důvod jako u `.sekce` v sekci 5.

	ŠÍŘKA LEVÉHO SLOUPCE 9rem JE Z MAKETY. Do #205 tu byla změřená `15rem`, jenže to byla šířka
	pro NÁZEV kategorie ve stupni 28 px (měření nejdelšího názvu „Hlavní věková kategorie
	od 16 let" na dva řádky). V levém sloupci je od #205 číslo — nejširší „12–15" má ve 40 px
	tučně kolem 120 px, tedy pod 144 px sloupce — a název je v pravém sloupci, kde má místa dost.

	NÁVĚŠTÍ STOJÍ V ŘÁDKU NADPISU (`grid-row: 1`, svisle na jeho středu), ne uprostřed celé
	karty. Tak ho maketa ve skutečnosti vykresluje: její `grid-row: 1 / -1` vydá jediný řádek
	(důvod u `.skupiny__polozka`), takže „Zobrazit kategorii" sedí vedle názvu. Umístění
	návěští se tu dává celé (sloupec i řádek), viz `.skupiny__polozka`.
*/
@media (min-width: 48em) {
	.skupiny__polozka {
		grid-template-columns: 9rem minmax(0, 1fr) auto;
		column-gap: var(--m4);
	}

	.skupiny__vek b {
		font-size: 2.5rem;
	}

	.skupiny__vic {
		grid-column: 3;
		grid-row: 1;
		align-self: center;
		margin: 0;
	}
}

/*
	Stránka věkové kategorie (`Skupiny/detail.latte`) je próza, ne výčet údajů.

	V MAKETÁCH NEMÁ JEDINÝ VZOR a je to největší mezera série #120–#128 — rozcestník má
	propracovanou osu, detail kategorie ani jeden prvek. Vzhled je proto poskládaný
	z primitiv, které už na webu jsou, ne vymyšlený vedle nich:

	  `h1` + `.uvod`  úvodní blok stránky. `.uvod` (sekce 5) je sdílený odstavec „tady se
	                  začíná číst" — větší a bílý; do #124 tu měl detail vlastní třídu
	                  `.skupina__uvod`, která nedělala nic jiného než `max-width: 60ch`,
	                  tedy třetinu toho, co `.uvod` umí. Zrušená, ne přejmenovaná.
	  `.sekce`        tři až čtyři vodorovné pásy s horní linkou (sekce 5, zavedlo #123 pro
	                  homepage jako layoutovou primitivu celé série). Na tmavém webu je to
	                  jediná věc, která oddělí „Jak vypadá trénink" od „Kdy se dá přijít";
	                  bez ní se stránka čte jako jeden svitek odstavců.
	  `--prokladana`  přesně jeden pás na stránku má podklad `--cerna-2`, stejně jako má
	                  homepage jednu prokládanou sekci (#87). Nese ho „Jak vypadá trénink",
	                  protože to je na téhle stránce obsahové jádro.

	Počet pásů se mezi kategoriemi liší: u `mini-4-6` a `dospeli-25-plus` neznáme větve ani
	úroveň (`@TODO-KLIENT`), takže první pás vůbec nevznikne a stránka má o jeden méně.
	Prokládaný je vždycky týž pás podle významu, ne podle pořadí — jinak by se stránky
	rozešly v tom, která barva kde leží.

	Míru řádku odstavcům v pásech od #126 nedává pravidlo tady, ale společný výčet prózy
	v sekci 5. Holé `<p>` pokrývá `:not([class])`, jediný odstavec s třídou
	(`.skupina__uroven` níž) je v tom výčtu vyjmenovaný ručně. Do #126 tu stálo
	`.skupina__sekce > p { max-width: 60ch }`, tedy třetí opis téže hodnoty.
*/

/*
	Soutěžní úroveň na detailu (#93) — „Soutěžní úroveň: hobby liga, druhá liga i extraliga".
	Stejná formulace jako na kartě rozcestníku, ale vlastní třída: kartu i detail sází jiný
	kontext a sloučit obojí do jednoho bloku bylo v #93 zamítnuto (blok by bral dva parametry,
	aby ušetřil jeden řádek).

	BARVU ZMĚNILO #124 Z `--akcent` NA `--text-silny` a je to tentýž důvod, jaký v #93 zrušil
	odznak na kartě: `--akcent` je na tomhle webu barva odkazu (`a` v sekci 3), takže tučná
	veta v barvě odkazu vypadá jako odkaz, který nikam nevede. Na detailu to bylo o to horší,
	že o pár řádků výš skutečný odkaz („Kontakt") stojí a má tutéž barvu. Silná bílá dá větě
	stejnou váhu, aniž by lhala o tom, že se dá kliknout.

	`--text-silny #ffffff` má na podkladu, na kterém věta skutečně leží — tedy na `--cerna`
	#08080a, protože prokládaný je jiný pás — **20,01 : 1**; kdyby se prokládání někdy
	přesunulo, na `--cerna-2` #101014 by to bylo **18,98 : 1**. Poměry jasů podle WCAG 2.1
	z barev odečtených z vykreslené stránky. Do #124 tu stálo `--akcent #c26bae`, tedy
	5,73 : 1 — prošlo to, ale za cenu toho zdání odkazu.

	Šířku řádku téhle větě nedává vlastní pravidlo, ale společný výčet prózy v sekci 5, kde
	je třída vyjmenovaná — je to odstavec uvnitř pásu jako každý jiný a dvě pravidla na tentýž
	`max-width` by se dřív nebo později rozešla.

	Do #124 tu taky stálo, že úroveň „není odznak jako v rozcestníku". To byla nepravda od #93:
	odznak v rozcestníku od té doby neexistuje a obě místa jsou prostý text.
*/
.skupina__uroven {
	font-weight: 700;
	color: var(--text-silny);
}

/*
	Odkaz zpět na rozcestník. Od #124 stojí uvnitř posledního pásu, ne za ním: `.sekce` dosedá
	na patičku vlastním odsazením (`.obsah > .sekce:last-child` v sekci 5) a odstavec za pásem
	by to pravidlo vypnul — před patičkou by zbyl prázdný pruh podkladu stránky o výšce
	odsazení pásu i odsazení `.obsah`.
*/
.skupina__zpet {
	margin-top: var(--m4);
}

/* ==========================================================================
   7. Tlačítka — odkazy, které jsou výzvou k akci
   ========================================================================== */

/*
	Odkaz, který má návštěvník kliknout jako první (na rozcestník skupin, na kontakt). Je to
	pořád `<a>`, ne `<button>` — vede na jinou stránku, takže se musí dát otevřít v nové kartě
	a zkopírovat.

	Výška 3 rem = 48 px, tedy nad doporučeným minimem klikacího cíle (44 px) i s jedním řádkem
	textu.

	Plocha je `--akcent-tmavy`, NE `--akcent`, a je to ta podstatná věc na celém tomhle
	pravidle. Směr A měl hlavní tlačítko na světlém akcentu a bílý text na něm měl 3,50 : 1,
	tedy pod hranicí; AA to opravuje tím, že plnou plochu nese magenta loga, kde má bílá
	5,61 : 1. Kdyby někdo „sjednotil" tlačítko na `--akcent`, vrátí přesně tuhle vadu.
*/
.tlacitka {
	display: flex;
	flex-wrap: wrap;
	gap: var(--m2);
	margin-bottom: 0;
}

/*
	Od 22.5em (360 px) stojí dvojice tlačítek na jednom řádku, ne na dvou (#89). Je to
	měřená věc, ne vkus: na 360 px klesne dvojice ze 112 px na 71 px, tedy 41 px, o které
	jde ilustrace v pruhu pod úvodním blokem výš. Proto se tu tlačítka i o něco zúží —
	`flex: 1 1 0` je srovná na stejnou šířku a `padding-inline` jde na `--m1`.

	Výška klesá na 2,75 rem = 44 px, což je pořád doporučené minimum klikacího cíle. Níž
	nejít.

	Pixely v tomhle komentáři jsou naměřené na písmu tlačítek před #186 (1rem, bez verzálek).
	Princip platí dál; čísla pro dnešní písmo jsou v komentáři u `.tlacitko` níž.

	Rozsah je uzavřený z obou stran a obě hranice mají důvod. Spodní 22.5em je kvůli 320px
	displejům, ale ne kvůli přetečení — to je proměřené a nenastává: `flex-basis: 0` sice
	tlačítka zúží, `min-width` flex prvku ale zůstává `auto`, takže se nezmenší pod nejdelší
	slovo nápisu a `scrollWidth` na 320 px zůstává 320. Nápis „Taneční skupiny podle věku"
	se tam ovšem zalomí na tři řádky a tlačítka narostou na 97 px; dva řádky po 48 px stojí
	112 px, takže celý ten trik ušetří 15 px. Nad ohyb se ilustrace na 320 px nedostane ani
	tak (úvodní blok tam měří 502 px při výšce okna 480), takže by to bylo 15 px zaplacených
	stísněným tlačítkem o třech řádcích — a to se nevyplatí. Pod 360 px proto zůstává
	původní zalomení na dva řádky.

	Horní hranice 47.99em drží desktop nedotčený: tam se dvojice na jeden řádek vejde
	i s `flex-wrap: wrap`, takže by `flex: 1 1 0` jen roztáhl obě tlačítka přes celou šířku
	sloupce. To je změna vzhledu bez užitku — nad ohybem je na desktopu ilustrace vidět
	i bez ní.

	`:not(:only-child)`: samotné tlačítko („Ozvat se" v poslední sekci homepage, #203) se
	nesrovnává s ničím, takže se na telefonu nerozprostírá přes celý sloupec a drží šířku
	nápisu jako v maketě.

	Od #203 stojí ilustrace pod ohybem všude (pořadí sekcí podle makety), takže důvod
	„41 px pro ilustraci" už neplatí. Pravidlo zůstává: dvojice na jednom řádku je na
	telefonu kompaktnější a #203 do úvodního bloku nesahá.
*/
@media (min-width: 22.5em) and (max-width: 47.99em) {
	.tlacitka {
		flex-wrap: nowrap;
	}

	.tlacitka .tlacitko:not(:only-child) {
		flex: 1 1 0;
		min-height: 2.75rem;
		padding-inline: var(--m1);
	}
}

/*
	Stupeň a řádkování tlačítka jsou pevné, ne zděděné. Od #201 má `body` 17 px / 1.7
	a tlačítko by s ním narostlo: na 360–390 px, kde se popisek zalomí na dva řádky, by
	řádek tlačítek v úvodním bloku homepage povyrostl ze 71,2 px na 74,4 px (změřeno)
	a posunul ilustraci pod ohyb (#89). Stupeň je od #186 podle makety (komentář níž),
	řádkování 1.6 zůstává ze stavu před #201.
*/
.tlacitko {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 3rem;
	padding: var(--m1) var(--m3);
	border: 2px solid var(--akcent-tmavy);
	background: var(--akcent-tmavy);
	color: var(--text-silny);
	font-size: 0.8125rem;
	line-height: 1.6;
	font-weight: 800;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	text-decoration: none;
	transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

/*
	Písmo tlačítek ze směru AA (#186) — `.tl` ve `www/navrhy/styl/smer-a.css`: verzálky,
	0,8125rem, váha 800, prostrkání 0,16em a odsazení 0,95 × 1,9rem. Text se nemění, verzálky
	dělá jen `text-transform`.

	PLNÉ PROSTRKÁNÍ A ODSAZENÍ MAKETY JSOU AŽ OD 48em. Pod tím je prostrkání 0,1em a odsazení
	zůstává dnešní, protože tlačítka na telefonu rozhodují o ohybu ilustrace (#89). S 0,16em
	se „Taneční skupiny podle věku" na 360–375 px láme na tři řádky místo dvou, dvojice naroste
	ze 71,2 na 82,4 px a ilustrace klesne. Maketa pro telefon vlastní pravidlo nemá.
	Změřeno na homepage (CDP, `setDeviceMetricsOverride`, DPR 1, fonty načtené), podíl
	ilustrace nad ohybem před #186 → s plnou maketou → takhle:

	  320 × 568   0 %    → 0 %    → 0 %      (řádek tlačítek 112 → 125,6 → 112 px)
	  360 × 660   23,1 % → 13,7 % → 26,7 %
	  375 × 667   25,4 % → 16,1 % → 29,0 %
	  390 × 745   57,6 % → 56,0 % → 60,7 %
	  390 × 844   79,4 % → 78,1 % → 82,2 %
	  768 × 1024  77,2 % → 75,6 % → 75,6 %
	  1920 × 1080 74,2 % → 72,6 % → 72,6 %   (tlačítka 48 → 55,2 px vysoká)

	Na telefonu tedy ilustrace oproti stavu před #186 vidět víc, ne míň — verzálky ve stupni
	0,8125rem jsou užší než dřívější 1rem, i s prostrkáním. Na 1366 × 618 je ilustrace pod
	ohybem před i po.

	Kontrast se nemění: barvy ani plochy tlačítek se nesahaly (5,61 : 1 v klidu, 15,78 : 1
	po přejetí). Menší stupeň je pořád tučný nápis v tlačítku vysokém nejméně 44 px.
*/
@media (min-width: 48em) {
	.tlacitko {
		padding: 0.95rem 1.9rem;
		letter-spacing: 0.16em;
	}
}

/*
	Po přejetí se tlačítko rozsvítí kyselou zelenou a text na něm zčerná — `--cerna` na
	`--kysela` má 15,78 : 1. Barva textu se tu MUSÍ přepsat, zdědit ji z klidového stavu
	nejde: bílá na `--kysela` má 1,27 : 1, což je nejhorší dvojice, jakou tahle paleta umí.
*/
.tlacitko:hover,
.tlacitko:focus-visible {
	border-color: var(--kysela);
	background: var(--kysela);
	color: var(--cerna);
}

/*
	Druhotné tlačítko: stejný tvar, ale bez výplně, aby dvě tlačítka vedle sebe nesoupeřila.
	Text je `--text-silny` (19,26 : 1 na podkladu úvodního bloku) a rám `--linka`, ne akcent —
	magenta v rámu by z druhotného tlačítka udělala druhé hlavní. Jako barva textu je
	`--akcent-tmavy` navíc zakázaná (3,57 : 1 na černé), takže sem ani dosadit nešla.

	Přejetí dědí z `.tlacitko`, tedy plnou kyselou zelenou s černým textem. Je to úmyslné:
	obrysové tlačítko se pod rukou chová jako každé jiné a nemusí mít vlastní stav.
*/
.tlacitko--obrys {
	background: transparent;
	border-color: var(--linka);
	color: var(--text-silny);
}

/* ==========================================================================
   8. Úvodní blok homepage
   ========================================================================== */

/*
	ČÍSLA V TÉHLE SEKCI JSOU PŘEMĚŘENÁ PRO #123, tedy pro dnešní stupnici mezer směru AA.
	Do #123 tu stála čísla z #89 (stupnice před #120, kde `--m4` byla 2rem a `--m5` 3rem)
	a byla označená jako neplatná; jsou nahrazená, ne přepsaná odhadem.

	Měřeno v prohlížeči při `APP_DEBUG=0` po vymazání celého tempDir, výška okna z
	`window.innerHeight` (ne z tabulky zařízení). `.hlavicka` měří 108,23 px na každé šířce
	(z toho 1 px je její `border-bottom`; `.hlavicka__obal` uvnitř má 107,23 px).
	Kdo hýbe stupnicí mezer, přeměří to znovu — a k číslu napíše, co měří.
*/

/*
	Pruh pod hlavičkou s `h1`, úvodním odstavcem a dvěma tlačítky. Záporné okraje ruší odsazení
	`--okraj` na `.obsah`, takže podklad sahá k okrajům okna (#179, jako `.hero` v maketě AA)
	a nahoře navazuje na hlavičku; proč `cqw` a ne `100vw`, je u `.obsah` v sekci 5.

	Podtón je namíchaný z akcentu, ne nová barva v paletě. Prohlížeč bez `color-mix()` dostane
	`--cerna-2` z prvního řádku. Odstín je slabý schválně — pět procent akcentu v černé dá
	#110d12, tedy podklad, na kterém drží celá paleta: `--text` 13,33 : 1, `--text-silny`
	19,26 : 1, `--akcent` 5,51 : 1, `--kysela` 15,19 : 1, `--text-tlumeny` 5,65 : 1. Sytější
	mix by akcent jako barvu textu poslal pod hranici.
*/
.uvodni {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	margin: calc(var(--m5) * -1) calc(var(--okraj) * -1) var(--m5);
	padding: var(--m3) var(--okraj);
	background: var(--cerna-2);
	background: color-mix(in srgb, var(--akcent) 5%, var(--cerna));
	border-bottom: 1px solid var(--linka);
}

/*
	Stříkanec v úvodním bloku (#122) — druhý a jediný další dekorační prvek směru AA.
	Tentýž princip jako čmouha za nadpisem (sekce 3): tvar dává maska, barvu
	`background: var(--akcent)`, z obrázku se bere jen průhlednost.

	V maketě ho nese `.hero`; u nás je úvodní blok `.uvodni` a jiný prvek na webu není,
	takže se prvek nasazuje sem. Je to jediné místo, kde se `stetec-04` používá.

	CELÝ TVAR MUSÍ LEŽET UVNITŘ BLOKU. První verze prvek posadila do levého horního rohu
	se zápornými odsazeními (`left: -8vw`, `top: -6vw`, `42vw` na stranu) a nechala
	`overflow: hidden`, ať přesahy uřízne. V maketě to nevadí, protože `.hero` je navrchu
	stránky a řez splývá s okrajem okna; u nás je `.uvodni` blok UVNITŘ stránky s vlastním
	světlejším podkladem, takže řezná linka leží v ploše a je vidět. Změřeno na 1440 px:
	pseudoelement 605×605 na (−115, −86) v bloku 1248×422,4, tedy přesah 115,2 px vlevo,
	86,4 px nahoře a 96,0 px dole — z organického stříkance zbyl obdélník se třemi rovnými
	řezy. Našla to vizuální kontrola klientky („čmouhy jsou usekaný"), ne měření.

	Proto jsou dnes odsazení i rozměry v PROCENTECH bloku a všechna kladná: `3 %` + `40 %`
	na šířku končí na 43 %, `6 %` + `88 %` na výšku končí na 94 %. Tím je box uvnitř
	klipujícího obdélníku při každé šířce okna už z konstrukce, ne díky štěstí, a
	`mask-size: contain` s `mask-position: center` drží uvnitř boxu i vykreslený tvar.
	Změřeno na sedmnácti šířkách 320–1920 px: nejmenší odstup tvaru od hrany ořezu je
	9,5 px (na 320 px vlevo), nikde nula a nikde vodorovný posuvník.

	`overflow: hidden` proto dnes nic neřeže — ověřeno, že s ním i bez něj má blok na 320,
	768 i 1440 px stejnou geometrii i stejnou výšku dokumentu. Zůstává jako pojistka:
	kdyby #123 blok zmenšil nebo tvar zvětšil, drží stříkanec doma místo toho, aby vylezl
	na hlavičku. `position: relative` k tomu patří — bez něj by se `left`/`top` vztáhly
	k `.obsah`.

	`isolation: isolate` na rodiči je tentýž nosník jako u čmouhy a bez něj prvek zmizí:
	`z-index: -1` drží tah pod nadpisem a tlačítky, ale bez vrstvicího kontextu spadne až
	pod podklad úvodního bloku, který je krycí. `overflow: hidden` vrstvicí kontext
	nevytváří, jen ořez — sám to nezachrání.

	Krytí je 0,17, tedy necelá polovina čmouhy: je to plocha přes 40 % bloku, ne tah za
	nadpisem, a při krytí čmouhy by z úvodního bloku byla magentová deska. Složená barva
	je #2f1d2d na podkladu bloku #110d12 a text nad ní prochází s rezervou — změřeno na
	všech prvcích, které se s tvarem opravdu překrývají: bílý `h1` 15,73 : 1 (mimo
	stříkanec 19,26 : 1), bílý úvodní odstavec 15,73 : 1, `--text` v řádku tlačítek
	10,89 : 1 a bílý text obrysového tlačítka 15,73 : 1. Plné tlačítko má vlastní krycí
	podklad `--akcent-tmavy`, takže se ho stříkanec netýká. Nejtěsnější hodnota je tedy
	10,89 : 1 proti hranici 4,5 : 1 — text prochází na obou stranách hrany tvaru, což je
	u prvku s roztřepenými konci podmínka, ne bonus.

	`@supports` má tentýž důvod jako u čmouhy — bez masek by z prvku byl plný magentový
	obdélník přes 40 % šířky a 88 % výšky úvodního bloku, takže radši nebude vůbec.
*/
@supports (mask-image: none) {
	.uvodni::before {
		content: '';
		position: absolute;
		left: 3%;
		top: 6%;
		z-index: -1;
		width: 40%;
		height: 88%;
		background: var(--akcent);
		opacity: 0.17;
		mask-image: url('../img/dekor/stetec-04.webp');
		mask-repeat: no-repeat;
		mask-size: contain;
		mask-position: center;
		pointer-events: none;
	}
}

/*
	OD #203 STOJÍ ILUSTRACE POD OHYBEM VŠUDE (pořadí sekcí podle makety, #89 se podle Jana
	ignoruje), takže „pixel ilustrace" níž je historický důvod. Sevřené mobilní mezery
	zůstávají — úvod je na telefonu kompaktnější a #203 do úvodního bloku nesahá.

	ČÍSLA V TOMHLE KOMENTÁŘI JSOU Z #123, TEDY PŘED STUPNI NADPISŮ Z #179. Od #179 je `h1`
	homepage vyšší (na 360 px 156,2 px místo 100,8 px, na desktopu 243 px místo 96 px), takže
	výšky bloku i podíly níž popisují dřívější stav. Přeměřený podíl ilustrace je v úvodu sekce 9;
	princip — každý ušetřený pixel nad pruhem je pixel ilustrace — platí beze změny.

	Na mobilu je blok o `--m3` sevřenější než na desktopu (#89). Není to kosmetika:
	na telefonu spolyká hlavička s úvodním blokem 539,89 px z pětisetpixelové obrazovky
	a každý ušetřený pixel je pixel, o který výš začíná ilustrace v pruhu pod ním.

	Kolik to je, přeměřeno pro #123 vstříknutím desktopových hodnot do vykreslené stránky
	na šířce 360 px. Měří se VÝŠKA `.uvodni`, která je dnes 432,10 px:

	  sevřený `padding-block` (`--m3` místo `--m5`) .................. 80,00 px
	  sevřené vnitřní mezery (`h1` `--m2`, `.uvod` `--m3`) ........... 24,00 px
	  obojí naráz (blok by měřil 536,10 px) ......................... 104,00 px

	K tomu tlačítka na jednom řádku místo dvou (sekce 7) ušetří dalších 40,81 px. Na
	360 × 660 se tím podíl ilustrace nad ohybem drží na 44,2 % místo 5,7 %, které by zbylo
	při desktopových mezerách (přeměřeno při stropu 41vh: blok by měřil 536,10 px a horní
	hrana ilustrace by spadla ze 540,44 px na 644,44 px).

	Záporný `margin-top` se přitom nemění — ten ruší `padding-block` `.obsah`, ne vlastní
	odsazení bloku, takže na hlavičku blok dosedá stejně v obou šířkách.

	`--m6` tenhle blok NEDOSTÁVÁ, i když ho maketa směru AA na `.hero` má a komentář
	u tokenu to tak předpovídal. Je to měřená věc: `padding-block: var(--m6) var(--m5)`
	na desktopu shodí podíl ilustrace nad ohybem na 1366 × 618 z 5,1 % na 0 % a na
	1920 × 890 ze 64,9 % na 54,3 % (přeměřeno při stropu 41vh, vstříknutím do vykreslené
	stránky, jinak beze změny). Sekce pod ohybem `--m6` mají (sekce 5), úvodní blok ne.
*/
@media (min-width: 48em) {
	.uvodni {
		padding-block: var(--m5);
	}
}

/*
	Úvodní blok dosedá na sekci pod sebou: bez vlastního `margin-bottom` a `border-bottom`,
	protože `.sekce` nese horní linku sama. Jinak by mezi nimi zůstal pás podkladu stránky
	a dvě linky nad sebou. Do #203 tu stálo `.uvodni:has(+ .pruh)` v sekci 9 — pod úvodem byl
	vždy tmavý pruh. Od #203 je pod ním „Co se u nás tančí", tedy obecná `.sekce`, a pravidlo
	platí pro kteroukoli.

	Prohlížeč bez `:has()` dostane mezeru `--m5` a v ní dvě linky místo jedné — je to vidět,
	ale nic se nerozbije a žádný obsah se neztratí.
*/
.uvodni:has(+ .sekce) {
	margin-bottom: 0;
	border-bottom: 0;
}

/*
	`text-wrap: balance` vyrovná délku řádků nadpisu, ať poslední řádek nezůstane na jedno
	slovo. Prohlížeč, který ho neumí, zalomí jako dřív — nic se tím nerozbije.
*/
.uvodni h1 {
	max-width: 28ch;
	margin-bottom: var(--m2);
	text-wrap: balance;
}

.uvodni .uvod {
	margin-bottom: var(--m3);
}

/*
	Na desktopu se vnitřní mezery úvodního bloku vracejí na původní hodnoty. Sevřenější
	rozestupy v base jsou mobilní opatření pro #89 (viz komentář u `.uvodni`) — na šířce,
	kde je ilustrace vedle textu a nad ohyb se vejde i tak, by jen ubíraly bloku vzduch.
*/
@media (min-width: 48em) {
	.uvodni h1 {
		margin-bottom: var(--m3);
	}

	.uvodni .uvod {
		margin-bottom: var(--m4);
	}
}

/*
	Úvod BEZ FOTKY (#207, `.hero--bezfoto` makety AA; sdílený blok `uvodniBlokBezFotky`
	v `Layout/@uvod-bez-fotky.latte`). Lektoři, v maketě i kontakt. Podklad, stříkanec a mezery jsou
	z `.uvodni`, jiný je jen sloupec textu: maketa ho na `.hero__obal` stahuje na `56rem`
	včetně vnitřního odsazení `--m3` na obou stranách a centruje. Obsah je tedy `53rem`
	(848 px) uprostřed — na 1366 px začíná na x 259 jako v maketě. Pod šířkou 53rem + okraje
	je sloupec celý a text začíná u okraje jako jinde.
*/
.uvodni--bezfoto > div {
	max-width: 53rem;
	margin-inline: auto;
}

/*
	Úvod ve dvou sloupcích (#202, `.hero__obal` makety AA). Oproti obecné `.dvojice` (sekce 5)
	má text o kus širší sloupec než fotka — `1.05fr` / `0.95fr` je poměr z makety. Na ten
	poměr, mezeru `--m5` a šířku `--obal` je vázané `sizes` fotky ve sdíleném bloku
	`uvodniBlok` (`Layout/@uvod.latte`, od #204); kdo tu něco změní, přepočítá i ho.

	Fotka má v maketě filtr `contrast(1.08) saturate(1.1)`, ale jen v úvodu, ne u fotek
	v sekcích — proto je tady, ne u `.foto-vedle`.
*/
@media (min-width: 60em) {
	.dvojice--uvod {
		grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
	}
}

.uvodni .foto-vedle img {
	filter: contrast(1.08) saturate(1.1);
}

/*
	Ilustrace v úvodu homepage (od 2026-09-17, `uvodniBlok` s `ilustrace: true`). Pozadí
	ilustrace je v souboru zapečené jako `--cerna-ilustrace` (#0e0e0e) a úvod stojí na
	`--cerna-2` (#101014), takže by kolem kresby byl vidět tmavší obdélník. `lighten` vezme
	po kanálech světlejší z obrázku a podkladu úvodu: pozadí kresby splyne s úvodem, barevná
	kresba je všude světlejší než podklad a nezmění se. Prolnutí končí na `.uvodni`, které má
	`isolation: isolate`. Deska panelu (`background`) se tu proto vypíná — s ní by se obrázek
	prolnul s ní, ne s úvodem.
*/
.uvodni .ilustrace {
	background: none;
}

.uvodni .ilustrace img {
	mix-blend-mode: lighten;
}

/*
	Štítky stylů pod tlačítky (#202, `.styly` makety AA) — rámečky v `--linka`, drobné
	verzálky v `--text-tlumeny`. Kontrast i nad stříkancem je v tabulce nad souborem
	(4,62 : 1, těsně nad hranicí; tmavší podklad ani světlejší tlumený text tu paleta nemá,
	takže se nic z toho neposouvá).

	Odstup od tlačítek kopíruje vzor mezer úvodního bloku výš: na telefonu sevřenější
	`--m3`, od 48em `--m4` z makety.
*/
.styly {
	display: flex;
	flex-wrap: wrap;
	gap: var(--m1);
	margin: var(--m3) 0 0;
	padding: 0;
	list-style: none;
}

.styly li {
	padding: 0.35rem 0.8rem;
	border: 1px solid var(--linka);
	color: var(--text-tlumeny);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

@media (min-width: 48em) {
	.styly {
		margin-top: var(--m4);
	}
}

/* ==========================================================================
   9. Celovečerní taneční projekty — panel ilustrace a čísla
   ========================================================================== */

/*
	Do #203 tu byl „tmavý pruh s ilustrací" (`.pruh`, `.pruh__obsah`, `.pruh__ilustrace`):
	sekce hned pod úvodním blokem v barvě pozadí ilustrace, ilustrace nad ohybem se stropem
	`41vh` a `sizes` ve `vh` (#89, #123). Jan 2026-09-16 rozhodl #89 při převodu makety AA
	ignorovat a všechno, co drželo ilustraci nad ohybem, je pryč: strop výšky, nulové horní
	odsazení na telefonu, `prioritni` načítání i test, který hlídal `sizes` proti stropu.
	Historie a měření jsou v gitu, v #89, #123 a v `AUTONOMOUS-DECISIONS.md` (#203).

	Sekce je dnes obyčejná `sekce` s `.dvojice--obracene` (sekce 5). Od 2026-09-17 stojí
	druhá, hned pod úvodním blokem (rozhodnutí Jana), a proto není prokládaná: úvod má
	podklad `--cerna-2` a prokládání se střídá. Ilustrace se tentýž den přestěhovala do
	úvodního bloku a v sekci je místo ní fotka `.foto-vedle`. Maketa má sekci čtvrtou,
	prokládanou a s ilustrací. Panel `.ilustrace` a čísla níž tu zůstávají, protože je
	používá úvod a sekce.
*/

/*
	Panel ilustrace: obrázek přes celou šířku sloupce na podkladu `--cerna-ilustrace`, tedy
	přesně na barvě pozadí ilustrace (viz token v sekci 2). Obrázek panel kryje celý, podklad
	je vidět jen do doby, než se líně načtený obrázek stáhne — místo prázdné díry je tam tmavá
	deska v rozměrech obrázku (`width`/`height` z bloku `obrazek`). V úvodu homepage se deska
	vypíná a obrázek se s podkladem úvodu prolíná (`.uvodni .ilustrace`, sekce 8).

	`max-width: 36rem` je šířka sloupce `.dvojice` od `--obal` (78rem − 2rem − 4rem, polovina).
	Na desktopu se tedy nic nemění, strop platí jen v jednom sloupci pod 60em: na tabletu by
	jinak ilustrace na výšku (1125 × 1600) měřila přes 1000 px. `sizes` v `uvodniBlok`
	s tímhle stropem počítá (`(min-width: 38rem) 36rem`).
*/
.ilustrace {
	max-width: 36rem;
	margin: 0;
	line-height: 0;
	background: var(--cerna-ilustrace);
}

.ilustrace img {
	display: block;
	width: 100%;
	height: auto;
}

/*
	Čísla pod textem — `.cisla` a `.cislo` z makety AA, hodnoty beze změny (mezera `--m4`,
	číslo 2.75rem / 800 v `--kysela`, popisek 0.75rem / 700 verzálkami v `--text-tlumeny`).
	Kontrast je v tabulce v hlavičce souboru.

	Rozdíl proti maketě: v maketě má popisek `max-width: 12ch` a číslo s ním sdílí šířku, takže
	se „4–60" na 1366 px zalomí na „4–" a „60". Tady číslo nezalamuje (`white-space: nowrap`)
	a `min-width: min-content` nechá položku rozšířit na šířku čísla; popisek se pak zalamuje
	pod ním jako v maketě. Slova ani stupně se tím nemění.

	`ul` bez odrážek: je to seznam kvůli odečítači (tři položky), ne výčet k čtení.
*/
.cisla {
	display: flex;
	flex-wrap: wrap;
	gap: var(--m4);
	margin: var(--m4) 0 0;
	padding: 0;
	list-style: none;
}

.cislo {
	max-width: 12ch;
	min-width: min-content;
	color: var(--text-tlumeny);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	line-height: 1.4;
}

.cislo b {
	display: block;
	margin-bottom: 0.2em;
	color: var(--kysela);
	font-size: 2.75rem;
	font-weight: 800;
	letter-spacing: -0.02em;
	white-space: nowrap;
}

/* ==========================================================================
   10. Patička
   ========================================================================== */

/*
	Patička je `--cerna-2`, tedy prokládaná plocha palety, ne magenta: kotví ji kruhový znak
	studia s plně krycím černým diskem a na barevné ploše by kruh vypadal jako vyříznutá díra.

	Disk znaku je odečtený `#000000` (změřeno v `www/img/ilustrace/actiwity-emblem.webp`,
	rohy jsou průhledné). S podkladem patičky se tedy nikdy nekryl přesně a nekryje se ani
	teď: proti dosavadnímu `#0e0e0e` měl 1,088 : 1, proti `--cerna-2` má 1,106 : 1. Rozdíl
	je pod hranicí rozlišitelnosti, žádný nový šev nevzniká — a `--cerna-ilustrace` si
	patička brát nesmí, ten token patří výhradně panelu ilustrace (sekce 9).

	Magenta v patičce drží jedinou roli — barvu odkazů. Na tomhle podkladu je `--akcent`
	použitelná i jako TEXT (5,43 : 1); ve staré paletě to neplatilo a odkazy proto nesly
	žlutou. Do #121 nesla magenta i čtyřpixelovou linku nad patičkou a podtržítko pod
	nadpisy sloupců; ve směru AA je předěl obyčejná `--linka` a nadpisy jsou drobné
	štítky bez dekorace, protože patička je tišší patro webu, ne jeho vlastní sekce.
*/
.paticka {
	background: var(--cerna-2);
	border-top: 1px solid var(--linka);

	/*
	 * Barva textu se schválně nepředepisuje — dědí se `--text` z `body` (13,14 : 1 na
	 * `--cerna-2`). Do #121 tu byla bílá napevno, takže patička křičela stejně jako
	 * obsah. Bílá zůstává jen jménům (`.paticka strong`), kde nese hierarchii.
	 *
	 * Stupeň písma se naopak předepisuje, a to DĚDIČNOSTÍ na obalu, ne výčtem prvků:
	 * patička je o stupeň tišší než obsah. Výčet (`.paticka p, .paticka address, …`)
	 * tady nefunguje — `.paticka p` má vyšší specificitu než `.paticka__tiraz`, takže
	 * by tiráž zůstala na 15 px místo 13 px. Zjištěno měřením, ne odhadem.
	 */
	padding-block: var(--m5);
	font-size: 0.9375rem;
}

/*
	Odkazy v patičce jsou `--akcent` (5,43 : 1 na `--cerna-2`). Do #120 tu byla žlutá
	`#fcca14` z palety starého webu — v paletě AA žádná žlutá není a nevrací se ani jako
	výjimka: na světlém podkladu má 1,54 : 1 a jediné, co ji tu drželo, byl tmavý podklad.
*/
.paticka a {
	color: var(--akcent);
}

/*
	Přejetí je kyselá zelená jako všude jinde na webu (14,97 : 1 na `--cerna-2`). Pravidlo
	tu zůstává jen proto, aby přebilo `.paticka a` nad sebou — `a:hover` ze sekce 3 má nižší
	specificitu. Kdyby se `.paticka a` jednou zrušilo, tohle může jít s ním.
*/
.paticka a:hover,
.paticka a:focus-visible {
	color: var(--kysela);
}

/*
	Nadpisy sloupců jsou ve směru AA drobné štítky, ne nadpisy sekce: 0,75rem, váha 800,
	rozpal 0,2em, barva `--text-tlumeny` (5,57 : 1 na `--cerna-2` — na drobném textu je
	to nad hranicí 4,5 : 1, ověřeno v tabulce nad souborem). Sémanticky to `<h2>` zůstává,
	protože patička drží tři pojmenované části a z toho plyne hladina nadpisů v obsahu.

	Čmouha za nadpisy (#122) se patičky nedotýká a nesmí: tady jsou štítky a dekorace za
	nimi by z nich udělala třetí hladinu nadpisů na stránce. Vypíná ji
	`.paticka h2::before { display: none }` — pravidlo stojí v sekci 3 u čmouhy samotné,
	protože je to jedno rozhodnutí o tom, za kterými nadpisy tah patří. Do #205 u něj stála
	i výjimka `.skupiny__nazev` a do #207 `.lektori__jmeno`; obojí je dnes `h3` bez čmouhy. Kdo tady mění stupeň písma nebo
	barvu štítků, ať se tam podívá.
*/
.paticka h2 {
	margin-bottom: var(--m2);
	font-size: 0.75rem;
	font-weight: 800;
	letter-spacing: 0.2em;
	color: var(--text-tlumeny);
	text-transform: uppercase;
}

/* Jména lidí a název studia — jediné místo v patičce, kde zůstává bílá (18,98 : 1). */
.paticka strong {
	color: var(--text-silny);
}

/*
	Znak studia jako třetí díl mřížky, svisle na střed vedle sousedního sloupce. Zdroj má
	průhledné rohy, takže se nic ořezávat nemusí — `border-radius` tu schválně není, kruh je
	součástí obrázku.

	Černý disk uvnitř znaku na tomhle podkladu splyne (1,106 : 1) a zůstane vidět jen
	fialový kroužek s trojúhelníkem. Tak to má být; podkládat znak jinou barvou by z něj
	udělalo nálepku.

	Za textem jako vodoznak schválně není: pod textem by snížil čitelnost a to je horší než
	žádný znak. Na mobilu je zastropovaný na 9 rem, ať z něj nebude půl obrazovky; ve třetí
	dráze mřížky si směr AA bere 12 rem.
*/
.paticka__emblem {
	width: 100%;
	max-width: 9rem;
	margin: 0 auto;
	justify-self: center;
	align-self: center;
	line-height: 0;
}

/*
	Tři díly: kontakt, sloupec se dvěma seznamy odkazů a znak studia. Šířky jsou zapsané
	natvrdo, ne přes `auto-fit`: znak není sloupec textu a s ostatními se o šířku dělit nemá.
*/
.paticka__sloupce {
	display: grid;
	gap: var(--m4);
	grid-template-columns: 1fr;
}

/* Dva seznamy odkazů nad sebou v jednom sloupci, zarovnané k jeho začátku. */
.paticka__sloupec {
	display: grid;
	gap: var(--m4);
	align-content: start;
}

/*
	Směr AA má u patičky jen dva stavy: jeden sloupec, nebo tři. Mezistupeň se dvěma
	dráhami, který tu byl do #121, zmizel — na dvou dráhách vycházel znak studia přes
	celou šířku pod texty, tedy čtvrtý blok navíc, a AA přesně tomu předchází tím, že
	znak dostane vlastní dráhu, nebo žádnou.
*/
@media (min-width: 60em) {
	.paticka__sloupce {
		grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(0, 1fr);
	}

	.paticka__emblem {
		max-width: 12rem;
	}
}

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

.paticka__seznam li {
	margin-bottom: var(--m1);
}

.paticka__adresa {
	font-style: normal;
}

/* Každá položka je víceřádková (jméno, role, telefon, e-mail), potřebuje větší odstup. */
.paticka__osoby li {
	margin-bottom: var(--m2);
}

/*
	Tiráž je nejtišší řádek webu — `--text-tlumeny` (5,57 : 1 na `--cerna-2`) je přesně
	role, pro kterou ten token vznikl v #120. Bílá tu byla proto, že ji patička
	předepisovala všemu; s dědičností `--text` už není důvod ji držet.
*/
.paticka__tiraz {
	margin: var(--m3) 0 0;
	padding-top: var(--m3);
	border-top: 1px solid var(--linka);
	color: var(--text-tlumeny);
	font-size: 0.8125rem;
}

/* ==========================================================================
   11. Chybové stránky (404, 500)
   ========================================================================== */

/*
 * Chybová stránka je krátká, takže se na širokém monitoru ztrácí. Omezená šířka
 * a větší odsazení z ní dělají zjevný „konec cesty" s rozcestníkem, ne useknutou
 * podstránku. Vzhled sdílí s webem, protože běží ve stejném layoutu.
 */
.chyba {
	max-width: 40rem;
}

.chyba__kod {
	margin-bottom: var(--m1);
	color: var(--akcent);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-size: 0.875rem;
}

.chyba__text {
	font-size: 1.125rem;
}

.chyba__kamdal {
	margin-top: var(--m5);
	padding-top: var(--m3);
	border-top: 1px solid var(--linka);
}

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

.chyba__odkazy li {
	margin-bottom: var(--m1);
}

/* ==========================================================================
   12. Časté dotazy (/caste-dotazy)
   ========================================================================== */

/*
 * Každý dotaz je `h2` + odstavec (#10). Bez odsazení by druhá otázka začínala hned pod
 * odpovědí na první a stránka by se četla jako jeden souvislý text. Odděluje se mezerou,
 * ne rámečkem ani linkou — je to pořád jen posloupnost nadpisů, ne karty.
 *
 * Míru řádku dává odpovědím od #126 společný výčet prózy v sekci 5 — odpověď na dotaz je
 * odstavec jako každý jiný. Do #126 tu stálo `.faq h2 + p { max-width: 44rem }`, což byla
 * jediná další míra na webu: 704 px proti 587,47 px zbytku, tedy nejdelší řádek z celého
 * webu právě na stránce, která se čte po jedné otázce.
 */

/* Odstup je tentýž jako mezi sekcemi jinde na webu (viz `.obsah > h2`), ať má web jeden rytmus. */
.faq h2:not(:first-child) {
	margin-top: var(--m5);
}

/* ==========================================================================
   13. Kontakt (/kontakt) (#13)
   ========================================================================== */

/* Adresa není citace — kurzíva, kterou jí dává výchozí styl prohlížeče, jí nesluší. */
.kontakt__adresa {
	font-style: normal;
	margin-bottom: var(--m2);
}

/*
 * Mapa okolí sálů (#119) — blok `mapaOdkaz` v `@kontakt-casti.latte`, na homepage, `/kontakt`
 * a „Důležitých informacích". Šířka drží míru textu, ať mapa nepřeroste odstavec nad ní.
 * Mapa je světlá (styl `liberty`), od tmavé stránky se tedy odliší sama. Linka kolem obrázku
 * zůstává jako tichý rámeček ve stejném tónu jako linky sekcí, ne kvůli kontrastu.
 */
.mapa {
	max-width: var(--mira);
	margin: 0 0 var(--m3);
}

.mapa__odkaz {
	display: block;
}

.mapa__obrazek {
	display: block;
	margin-bottom: var(--m1);
	border: 1px solid var(--linka);
}

/* Atribuce je podmínka licence — musí zůstat čitelná, proto `--text-tlumeny`, ne menší. */
.mapa__atribuce {
	margin-top: var(--m1);
	color: var(--text-tlumeny);
	font-size: 0.8125rem;
}

.mapa__atribuce a {
	color: inherit;
}

/*
 * Rámované karty osob a adres (#187) — ze směru AA (`www/navrhy/styl/smer-a.css`,
 * `.karta-adresa` a `.lide--kontakt` / `.osoba--kontakt`, maketa `stranky/kontakt.html`).
 * Linka, ne stín ani podklad: na tmavé paletě by stín nebyl vidět a `--linka` je tentýž
 * tichý předěl, jakým se od sebe odlišují sekce.
 *
 * ODDĚLENO OD PATIČKY. Obsah karty osoby vykresluje blok `kontaktniOsoba`
 * z `@kontakt-casti.latte`, který sdílí i patička. Pravidla proto visí jen na třídách
 * `.kontakt__*`, které nese obal na stránce `/kontakt`, nikdy na prvcích uvnitř bloku —
 * patička (`.paticka__osoby`) z nich nedostane nic.
 *
 * Šířka karet osob je strop `52rem` z makety (`.lide--kontakt`). Karty adres stojí od #208 jako
 * v maketě vedle sebe (`.dvojice`, sekce 5): od 60em každá v polovině obsahu, pod 60em pod
 * sebou a do stropu `52rem`, ať na tabletu mají s osobami jeden pravý okraj.
 *
 * Vnitřní odsazení je z makety (`--m4` u adres, `--m3` u osob), jen pod 48em se adresám
 * snižuje na `--m3`: na 320 px by 40 px z každé strany spolklo čtvrtinu šířky karty.
 */
.kontakt__karta,
.kontakt__osoby {
	max-width: 52rem;
}

.kontakt__karta {
	padding: var(--m3);
	border: 1px solid var(--linka);
}

@media (min-width: 48em) {
	.kontakt__karta {
		padding: var(--m4);
	}
}

/*
 * Dvojice karet adres (#208). `.dvojice` zarovnává sloupce na střed, což sedí textu vedle
 * fotky. Karta sálů je ale kvůli mapě (#119) o stovky pixelů vyšší než karta spolku, takže
 * na střed by spolek visel uprostřed prázdna a `stretch` by z tlumené karty udělal velký
 * prázdný čárkovaný rámeček. Obě karty proto začínají nahoře, nadpisy stojí v jedné řadě.
 */
.kontakt__adresy {
	align-items: start;
}

/* Poslední prvek karty (mapa, otevírací doba, IČO) nemá k rámečku přidávat svůj odstup. */
.kontakt__karta > :last-child {
	margin-bottom: 0;
}

/*
 * Adresa spolku je v tlumené kartě (#122, #187). Tak to má směr AA: v maketě nese tenhle
 * údaj `.karta-adresa--tlumena` a je to rozhodnutí o hierarchii dvou adres na jedné
 * stránce — sály jsou to, co rodič hledá, adresa spolku je úřední doplněk, kde se netrénuje
 * (říká to i odstavec pod ní). Z makety je čárkovaný rámeček a čmouha ztlumená krytím.
 *
 * Tlumenou barvu textu z makety (`color: var(--text-tlumeny)` na kartě i nadpisu) karta
 * NEPŘEBÍRÁ. Uvnitř karty je `strong` s názvem spolku, kterému `.obsah strong` dává
 * `--text-silny`, takže by se ztlumil jen zbytek a vznikla by třetí hladina barev, kterou
 * maketa nemá (tam je název v `b` pod `.adresa b`). Ztišení nese čárkovaná linka a čmouha.
 *
 * Ztlumení čmouhy je zapsané krytím, ne jinou barvou: složená barva zůstává na téže ose
 * palety. Bílý nadpis nad ní má 17,43 : 1 (složená barva #221621 nad podkladem stránky
 * `--cerna`) proti 11,56 : 1 na plné čmouze — tlumenější tah dělá nadpis ještě čitelnějším,
 * ne méně. Obě čísla jsou počítaná ze zaokrouhlené složené barvy jako celá tabulka v sekci 3;
 * odečteno z vykreslené stránky vyjde 17,45 : 1, respektive 11,61 : 1.
 */
.kontakt__karta--tlumena {
	border-style: dashed;
}

.kontakt__karta--tlumena h2::before {
	opacity: 0.14;
}

/*
 * `min(18rem, 100%)`, ne holé `18rem` z makety: na 320 px zbývá po odsazení stránky 288 px,
 * tedy přesně 18rem bez rezervy, a sloupec by na užším okně vytlačil mřížku ze stránky.
 */
.kontakt__osoby {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(18rem, 100%), 1fr));
	gap: var(--m3);
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * Typografie karty osoby podle `.osoba--kontakt` makety AA (#208): jméno verzálkami, role
 * drobně magentově verzálkami, telefon a e-mail větší a tučně.
 *
 * BEZ ZÁSAHU DO BLOKU `kontaktniOsoba`. Blok sdílí patička a vykresluje `<strong>` se jménem,
 * roli jako holý text a odkazy, oddělené `<br>` — role nemá vlastní prvek, na který by šla
 * třída. Karta proto dostane styl role jako výchozí písmo a jméno a odkazy si ho přepíšou.
 * Sloupec flexboxu udělá z každého kusu vlastní řádek (holý text role je anonymní položka)
 * a `<br>` se schová, jinak by mezi položkami přidal prázdné řádky. HTML patičky zůstává
 * znak po znaku stejné a pravidla visí jen na `.kontakt__osoba`.
 *
 * Hodnoty jsou z makety: jméno `.osoba__jmeno` + `h3` (1,0625rem, 800, řádkování 1,02,
 * rozpal −0,02em), role `.osoba__role` (0,75rem, 700, rozpal 0,1em, odstup `--m1`), telefon
 * a e-mail `.osoba--kontakt .osoba__bio` (1,125rem, 700). Kontrast v tabulce nad souborem.
 */
/* Dlouhý e-mail se v úzké kartě zalomí (`overflow-wrap`), místo aby přetekl přes rámeček. */
.kontakt__osoba {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	color: var(--akcent);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	padding: var(--m3);
	border: 1px solid var(--linka);
	overflow-wrap: anywhere;
}

.kontakt__osoba br {
	display: none;
}

.kontakt__osoba strong {
	margin-bottom: 0.2em;
	font-size: 1.0625rem;
	font-weight: 800;
	line-height: 1.02;
	letter-spacing: -0.02em;
}

.kontakt__osoba a {
	font-size: 1.125rem;
	letter-spacing: normal;
	text-transform: none;
}

.kontakt__osoba a:first-of-type {
	margin-top: var(--m1);
}

/* ==========================================================================
   14. Partneři (/sponzori) (#61)
   ========================================================================== */

/*
 * Loga partnerů jsou **cizí značky, ne dekorace webu**. Barvu si nesou samy: Jihomoravský kraj
 * ji má napevno v souboru (`#1D34FE` a `#FB5271`), Břeclav ji na svém webu bere z CSS, takže
 * je její oficiální `#004F4F` dopsaná do kořenového `<svg>` v archivu. Ani jedno se tady
 * nepřebarvuje a ani jedno nesmí viset na naší paletě — kdyby se barvy webu jednou měnily,
 * značky se s nimi měnit nesmějí.
 *
 * Do #120 stála loga přímo na stránce, bez podkladu: obsah byl bílý, takže bílá dlaždice
 * pod bílou stránkou nekreslila nic než linku navíc. Paleta AA je tmavá a tím se ta úvaha
 * obrací — obě značky mají světlý podklad jako podmínku správného užití a na `--cerna` jsou
 * nečitelné. Změřeno (WCAG 2.1, hranice pro grafiku je 3 : 1):
 *
 *   Břeclav `#004F4F` na `--cerna` ..... 2,13 : 1  ✘   na bílé ..... 9,41 : 1  ✔
 *   JMK `#1D34FE` na `--cerna` ......... 2,83 : 1  ✘   na bílé ..... 7,06 : 1  ✔
 *
 * Proto má sekce partnerů BÍLOU PODLOŽKU NAPEVNO. Je to jedna ze dvou vědomých výjimek
 * z pravidla „barvy jen jako tokeny v `:root`" (druhá jsou barvy uvnitř SVG) a nesmí se
 * „uklidit" na token: token, který by někdo jednou otočil, by shodil kontrast cizích log —
 * a to je horší než nekonzistence v CSS. Ze stejného důvodu tu není `--text-silny`, i když
 * má tutéž hodnotu: tohle není barva našeho webu, tohle je požadavek cizích značek.
 *
 * Podložka je na `<li>`, ne na `.sponzori__odkaz`: odkaz je v šabloně podmíněný
 * (`n:tag-if`), takže partner bez URL by zůstal bez podkladu.
 */
/*
 * JEDEN BÍLÝ OSTROV, NE DVA BÍLÉ OBDÉLNÍKY — to je celá změna, kterou tady #126 udělalo,
 * a je to oprava nálezu z pohledu, ne z měření. Do #126 nesla bílou podložku každá
 * `<li>` zvlášť. Ve světlém webu to bylo v pořádku (bílá na bílé nekreslila nic), ale
 * v paletě AA z toho jsou dvě samostatné bílé dlaždice různé šířky — loga mají různý
 * poměr stran, takže při společné výšce 3rem vyšla jedna 776 px a druhá 332 px široká —
 * s černou mezerou mezi sebou. Změřené to bylo správně (kontrast log i textu prochází),
 * a přesto to na stránce vypadalo jako dva obrázky, kterým se nepovedlo průhledné pozadí.
 *
 * Podložka je proto od #126 na `<ul>`: jeden bílý tvar s vlastní hranou, tedy rozhodnutí,
 * které je na stránce vidět jako rozhodnutí.
 *
 * OD #146 UŽ TO NENÍ PÁS PŘES CELÝ SLOUPEC, ALE OSTROV VE ŠÍŘCE LOG. #126 ho vedlo přes
 * celý obsahový sloupec (se záporným `margin-inline: -var(--m2)`, jako `.skupiny`), jenže
 * dvě loga zabírala z té bílé plochy jen necelou pětinu: změřeno na 1351 px pás
 * 1248 × 135,6 px, loga 473 + 186 px na výšku 48 px, bílá bez log 81,3 %. Na tmavé stránce
 * je taková plocha nejsilnější prvek stránky, a přitom nic nenese. #146 proto rozhodnutí
 * z #126 („jeden pás přes celý sloupec") vědomě ruší:
 *
 *   - `width: fit-content` stáhne pás na řádku log. Zůstává u levé hrany, ne na středu
 *     sloupce: próza nad ním je zarovnaná vlevo a užší než sloupec, takže vystředěný ostrov
 *     visel mimo její osu (ověřeno pohledem na 1351 px).
 *   - Záporný `margin-inline` a vracející `padding-inline` z #126 ZŮSTÁVAJÍ, i když by se
 *     u užšího tvaru zdály zbytečné. Nesou dvě věci: loga dál stojí v zákrytu s textem nad
 *     pásem a bílá přesahuje o `--m2` do okraje, a `fit-content` do dostupné šířky počítá
 *     i záporné marginy (sloupec + 2 × `--m2`), takže se řádka log zalomí na téže šířce
 *     jako do #146. ZMĚŘENO: s `margin: 0` a paddingem `--m3` dokola se loga zalomila už
 *     při layoutu 799 px místo 751 px, na 768 px byl pás dvouřádkový, 168 px vysoký.
 *   - Svislý padding `--m3` místo `--m4` — to je celé „snížit padding" z #146.
 *   - `display: block` na logu (níž) ubírá 7,6 px mezery pod účařím, kterou řádkový `<img>`
 *     v blokovém odkazu přidával k výšce pásu, aniž by v ní cokoli bylo.
 *
 * Když se loga na jeden řádek nevejdou (úzký displej), `fit-content` dorazí na sloupec
 * + 2 × `--m2`, tedy na šířku pásu do #146 — nic nepřečnívá. Čísla před a po jsou
 * v `AUTONOMOUS-DECISIONS.md` u #146.
 *
 * BÍLÁ JE TU NAPEVNO A NESMÍ SE „UKLIDIT" NA TOKEN. Loga jsou cizí značky a světlý podklad
 * mají jako podmínku správného užití; token, který by někdo jednou otočil, by shodil jejich
 * kontrast. Změřeno (WCAG 2.1, hranice pro grafiku 3 : 1):
 *
 *   Břeclav `#004F4F` na `--cerna` ..... 2,13 : 1  ✘   na bílé ..... 9,41 : 1  ✔
 *   JMK `#1D34FE` na `--cerna` ......... 2,83 : 1  ✘   na bílé ..... 7,06 : 1  ✔
 *
 * Je to jedna ze dvou vědomých výjimek z pravidla „barvy jen jako tokeny v `:root`"
 * (druhá jsou barvy uvnitř SVG). Ze stejného důvodu tu není `--text-silny`, i když má
 * tutéž hodnotu: tohle není barva našeho webu, tohle je požadavek cizích značek.
 *
 * `color: var(--cerna)` je na pásu, ne na položce, a není zbytečné: partner bez loga se
 * v šabloně vypíše jménem (`{else}` v `Sponzori/default.latte`) a bez tohohle řádku by ten
 * text zdědil `--text` z `body` a stál světle šedý na bílé — 1,45 : 1 proti 20,01 : 1
 * u `--cerna`. Dnes mají logo oba partneři v `content/sponzori.neon`, takže to vidět není;
 * `logo` je ale nepovinné pole a vada by se objevila prvním partnerem bez souboru.
 *
 * Třída `.sponzori__polozka` tím v šabloně zůstala bez jediného pravidla — stejně jako
 * `.skupiny__uvod` v sekci 6. Ze šablony se neodstranila schválně: celá série #120–#128
 * se drží toho, že se vykreslené HTML nemění, a zrušená třída je změna HTML, která by
 * tu záruku rozvázala kvůli kosmetice. Kdo bude jednou stylovat jednotlivého partnera
 * (třetí logo s výrazně jiným poměrem stran), má háček připravený tady.
 */
.sponzori {
	display: flex;
	flex-wrap: wrap;
	align-items: center;

	/*
	 * Loga jsou na pásu NA STŘED, ne u levého okraje, a je to odpověď na past, kterou
	 * #61 pojmenovalo: jmenují se jen dva partneři, zbylých sedmnáct log ze starého webu
	 * má prázdný `alt` a žádný odkaz, jména se nedají odvodit — a redesign nesmí udělat
	 * plochu, která tvrdí, že tam něco chybí. Dvě loga u levého okraje pásu nechávala
	 * vpravo 40 % prázdné bílé, což se čte přesně takhle: jako řada, která pokračuje.
	 * Na střed je z těch dvou log symetrický celek, tedy „tohle jsou naši partneři",
	 * ne „tady mělo být víc". Souměrnost nese tvrzení o úplnosti, zarovnání vlevo ne.
	 *
	 * Od #146 je pás stažený na šířku log (viz komentář výš), takže vpravo prázdná bílá
	 * nezbývá a středění je znát, až když se loga na úzkém displeji zalomí pod sebe —
	 * kratší řádek pak stojí na středu ostrova, ne u jeho levé hrany.
	 */
	justify-content: center;

	gap: var(--m3) var(--m5);
	width: fit-content;
	margin: 0 calc(var(--m2) * -1);
	padding: var(--m3) var(--m2);
	list-style: none;

	/* Viz komentář výš — bílá napevno je tu záměr, ne opomenutý token. */
	background: #fff;
	color: var(--cerna);
}

/*
 * Loga se srovnávají na společnou výšku, ne šířku. Obě značky jsou ležaté nápisy, jen každý
 * jinak protáhlý: JMK 9,79 : 1, Břeclav 3,87 : 1 (kresba vyplňuje `viewBox` obou souborů
 * prakticky celý, změřeno `getBBox()` — 562,36 × 57,45, resp. 772,57 × 199,90). Společná šířka
 * by z prvního udělala vlásek a z druhého pruh přes stránku, zatímco na společné výšce sedí obě
 * v jedné řádce jako rovnocenné značky.
 *
 * POZOR, ať se nepřepíše zpátky: do #142 tu stálo, že „obě SVG mají jen `viewBox`" a že se
 * „bez zadané výšky smrsknou na nulu". NEPLATÍ ANI JEDNO. Pletly se tu čtyři hodnoty, z nichž
 * každá měří něco jiného — změřeno v Chrome až po `complete`, na líném `<img>` je
 * `naturalWidth` nula a měřit se z něj nedá:
 *
 *                                         JMK                 Břeclav
 *   kořenová značka `<svg>` ....  width + height + viewBox     jen viewBox
 *   přirozená velikost .........  562 × 57                     300 × 78   (ne nula)
 *   atributy v `<img>` .........  562 × 57                     773 × 200
 *   box na stránce .............  ≈ 470 × 48                   ≈ 186 × 48
 *
 * Rendrované rozměry jsou schválně na celé pixely a s „≈". Nejsou to totiž vlastnosti log, ale
 * vlastnosti displeje: na monitoru s DPR 1,8 změří i obyčejný `height: 48px` div 47,99 px
 * a všechny šířky odvozené od výšky se s ním posunou. Desetinná místa by tu tedy nikdo
 * nepřeměřil. Co přeměřit jde, je pravidlo, které je generuje:
 *
 *   šířka boxu = výška × poměr stran,   poměry změřené vyrendrováním ve velké výšce:
 *   JMK 9,788516 (= 562,36 / 57,451),   Břeclav 3,865 (= 773 / 200, přesně)
 *
 * `width`/`height` na kořenovém `<svg>` má jen JMK (`562.36px` / `57.451px`); Břeclav má
 * opravdu jen `viewBox="0 0 773 200"`. Nulu z toho ale nedostaneš: SVG bez rozměrů má pořád
 * poměr stran z `viewBox`u, takže mu prohlížeč dá výchozích 300 px šířky a výšku dopočítá —
 * odtud těch změřených 300 × 78.
 *
 * Skutečný důvod pro `width: auto` je atribut `width` v `<img>` (píše ho `App\Media\Obrazky`
 * z `viewBox`u, ne z `width`/`height` souboru). Atributy jsou prezentační pokyn, takže dokud
 * je vlastní deklarace nepřebije, URČUJÍ BOX — při `height: 3rem` by byl 562 × 48, resp.
 * 773 × 48. Obrázek by se přitom nezdeformoval, ten uhlídá `object-fit: contain` níž; rozbil
 * by se box a kolem obrázku by zbylo prázdno. Změřeno s odstraněným `width: auto`:
 *
 *   JMK ......  box 562 × 48,  obrázek ≈ 470 × 48,  po stranách ≈ 46 px prázdna
 *   Břeclav ..  box 773 × 48,  obrázek ≈ 186 × 48,  po stranách ≈ 294 px prázdna
 *
 * „Obrázek" je tu celý `viewBox` zmenšený na výšku boxu, ne obtažená kresba — `contain` fituje
 * `viewBox`, ne `getBBox()`. U těchhle dvou souborů je to skoro totéž (viz poměry výš).
 *
 * `width: auto` tedy stáhne box na obrázek a šířku nechá dopočítat z poměru stran.
 *
 * Jiná hodnota, ať se nepoplete s předchozí: ≈ 473 px je u JMK REZERVACE PŘED NAČTENÍM, ne
 * obrázek. Než se soubor stáhne, počítá prohlížeč box z atributů `<img>`, a ty jsou zaokrouhlené
 * na celé pixely — jejich poměr 562/57 = 9,8596 je o kousek širší než skutečný 9,7885. Box tedy
 * startuje na ≈ 473 px a po načtení sedne na ≈ 470 px, tj. posune se o ≈ 3 px. Je to posun jen
 * ve vodorovné ose, výšku drží `height: 3rem` — svislý CLS z toho nevzniká. Břeclav se
 * neposune vůbec: jeho atributy 773 × 200 jsou opsané rovnou z `viewBox`u, takže poměr před
 * načtením i po něm sedí na chlup.
 *
 * `object-fit: contain` je pojistka pro úzké displeje. Nápis JMK je ve 3rem výšky ≈ 470 px
 * široký a pod `max-width: 100%` by se mu ořízla jen šířka — obrázek by se roztáhl. S `contain`
 * se místo toho zmenší celý a zůstane v poměru.
 *
 * Tím se ale rozchází pátá hodnota: na úzkém displeji drží 48 px VÝŠKU BOX, ne viditelný
 * obrázek. Změřeno při layoutovém viewportu 320 px (`documentElement.clientWidth`, tedy bez
 * posuvníku ukrajujícího šířku — na užším okně desktopu vyjdou čísla o ten posuvník menší):
 * řádka má 288 px (320 − 2 × 16 px odsazení), JMK v ní má box 288 × 48, ale `contain` v něm
 * obrázek zmenší na 288 × ≈ 29 a nad ním a pod ním nechá ≈ 9 px prázdna. Břeclav se do řádky
 * vejde celý (≈ 186 px), takže letterboxuje jen protáhlejší JMK. „Obě loga drží výšku 48 px"
 * tedy platí o boxu a jen do chvíle, než se řádka zúží.
 */
.sponzori__odkaz {
	display: block;
}

/*
 * Jediné místo na webu, kde se obrys zaostření nesmí vzít z globálního pravidla (sekce 3).
 *
 * Globální `:focus-visible` kreslí `3px solid var(--kysela)` a je to správně všude, kde se
 * zaostřuje na tmavém podkladu — `--kysela` má na `--cerna` 15,78 : 1 a na `--cerna-2`
 * 14,97 : 1. Pás partnerů je ale `background: #fff` (viz `.sponzori` výš) a je to JEDINÝ
 * světlý podklad v celém stylopisu — ověřeno výčtem všech deklarací `background` v souboru,
 * zbylých 21 je tmavý token, akcent, nebo `--kysela`. Na bílé má `--kysela` 1,27 : 1, což
 * je vůbec nejhorší dvojice, jakou tahle paleta umí: obrys na bílém pásu přestane být vidět
 * a klávesnice ztratí jedinou pomůcku, kterou na těch dvou odkazech má.
 *
 * Čísla jsou poměr BARVY OBRYSU k podkladu, na kterém obrys leží (WCAG 1.4.11, hranice
 * 3 : 1 pro netextový prvek), ne poměr textu — v pásu žádný text není, jsou v něm dvě loga:
 *
 *   --kysela #c7f53d na #fff (dnešní globální obrys) ..... 1,27 : 1  ✘
 *   --akcent #c26bae na #fff ............................. 3,50 : 1  ✔ (těsně)
 *   --akcent-tmavy #a3438d na #fff ....................... 5,61 : 1  ✔
 *
 * Bere se `--akcent-tmavy`, protože to není jen nejvyšší z těch tří čísel, ale i ten token,
 * kterému KLÍČ POLARIT v hlavičce souboru přiřazuje právě tuhle roli: `--akcent-tmavy` je
 * poloha akcentu pro světlou plochu, `--akcent` pro tmavou. Je to tedy stejná barva ve
 * stejné roli jako na plném tlačítku, kde bílý text na `--akcent-tmavy` má shodně 5,61 : 1.
 *
 * Pravidlo je schválně úzké, na jeden selektor, a GLOBÁLNÍ PRAVIDLO SE NESMÍ PŘEPSAT.
 * Doloženo měřením obrysu na všech routách (16 ze sitemapy + 404, šířky 390 a 1440 px,
 * 662 zaostřitelných prvků): obrys zaostření leží na webu právě na pěti plochách, a to
 * jsou `--cerna`, `--cerna-2`, podklad úvodního bloku `#110d12`, bílá pásu partnerů
 * a `#2c1b2a` — což není token, ale STŘÍKANEC (`.uvodni::before`, sekce 8) složený nad
 * úvodním blokem, na kterém stojí obě tlačítka homepage při 1440 px. Proti barvě obrysu:
 *
 *                          --kysela        --akcent-tmavy
 *   --cerna #08080a ...... 15,78 : 1  ✔     3,57 : 1  ✔ (těsně)
 *   uvodní blok #110d12 .. 15,19 : 1  ✔     3,44 : 1  ✔ (těsně)
 *   --cerna-2 #101014 .... 14,97 : 1  ✔     3,39 : 1  ✔ (těsně)
 *   stříkanec #2c1b2a .... 12,76 : 1  ✔     2,89 : 1  ✘ PROPAD
 *   bílá #ffffff .......... 1,27 : 1  ✘     5,61 : 1  ✔
 *
 * Kdyby se tedy `--akcent-tmavy` dosadilo globálně, nevznikl by jen slabší obrys —
 * na stříkanci by spadl na 2,89 : 1, tedy POD hranici 3 : 1, a z opravy jedné vady by
 * byla vada druhá. Rozsah `--kysela` na tmavém je 12,76–15,78 : 1, ne 14,97–15,78:
 * spodní konec drží ta složená plocha, kterou výčet tokenů nevidí. Proto se plochy
 * počítají z vykreslených pixelů, ne z deklarací `background`.
 *
 * Kdo někdy přidá druhý světlý podklad, přidá sem selektor — ne naopak.
 */
.sponzori__odkaz:focus-visible {
	outline-color: var(--akcent-tmavy);
}

.sponzori__logo {
	/* Blok, ne řádek: jinak pod logem zbývá mezera pro dotahy písma (viz `.sponzori`). */
	display: block;
	width: auto;
	height: 3rem;
	max-width: 100%;
	object-fit: contain;
}

/* ==========================================================================
   15. Lektoři (/o-nas/lektori) (#125)
   ========================================================================== */

/*
	Mřížka portrétních karet — ze směru AA (`www/navrhy/styl/smer-a.css`, `.lide` / `.osoba__*`).
	Do #125 neměla stránka jediné pravidlo: osm jmen `h2` pod sebou, každé s odstavcem, co
	o něm víme. Zadání redesignu (bod 3) chce, aby rodič viděl, komu dítě svěřuje — proto
	portrét, jméno a role na kartě a krátké bio.

	OD #180 SE Z REFERENCE (gamifactory.eu, „Náš tím") ODKRÝVÁNÍ BIA PŘEJETÍM PŘEVZALO. Do #180
	tu stálo, že `.lektori*` nemá jediné pravidlo s `:hover`. Důvod byl platný pro bio o jedné až
	třech větách; po #95 mají bia až 584 znaků a řádek mřížky se natahoval podle nejdelšího.
	Jan 2026-09-14 rozhodl: bio v náhledu přes fotku, klik otevře profil. Co z původního důvodu
	platí dál a drží se: bio je v HTML natvrdo a jednou (náhled i profil jsou tentýž prvek),
	hover není jediná cesta (zaostření ukáže náhled, klepnutí otevře profil) a profil se otevře
	bez JavaScriptu přes `:target`. Náhled a profil jsou pravidla na konci téhle sekce.

	Jména zůstávají `h2`, ne `h3` jako v maketě (`.osoba__jmeno`). Osnova webu nemá mezipatro
	„Kdo u nás učí“ — je to nový viditelný text a ten je v sérii #120–#128 mimo rozsah —
	takže jména visí přímo pod `h1`. Čmouha za nadpisem je jim proto vypnutá v sekci 3;
	důvod je změřený a je u toho pravidla, ne tady.

	NA MOBILU JSOU SLOUPCE DVA NATVRDO, NE `auto-fill` JAKO V MAKETĚ, A JE TO ZMĚŘENÉ
	ROZHODNUTÍ. Maketa má `repeat(auto-fill, minmax(15rem, 1fr))` ve všech šířkách. Na 390 px
	zbývá po odsazení `.obal` 358 px obsahu, takže se vejde jediný sloupec — a portrét 3 : 4
	v něm vyjde na 358 × 477,33 px, tedy skoro na celou výšku telefonu. Měřeno na vykreslené
	stránce při `APP_DEBUG=0`, viewport 390 px, karta v nasazované podobě (se spodní linkou
	i odsazením): z toho osm portrétů 3818,6 px a výška celé stránky s jedním sloupcem
	**přibližně dvojnásobek** té se dvěma — kolem 6,5 tisíce px proti 3,3 tisícům.

	NEZAPISUJ SEM VÝŠKU STRÁNKY JAKO PŘESNÉ ČÍSLO. Za #125 se ten pár změnil třikrát
	(6284/3186 → 6480/3284 → 6485/3288) a tři kola ověření dostala tři výsledky, protože
	`documentElement.scrollHeight` **závisí na DPR**: Chrome při DPR 1,8 zaokrouhlí 1px linku
	na 0,5556 CSS px, takže se čtyři až osm řádků posune o jednotky pixelů. Každé to číslo bylo
	změřené správně a každé na jiném displeji. Argument na nich nestojí, tak je tu neuvádíme.

	CO JE PŘESNÉ A NEZÁVISLÉ NA DPR je rozdíl na řádek, změřený zlomkově na samotné mřížce,
	ne na stránce: `.lektori` je se `padding-bottom: var(--m3)` a spodní linkou o **přesně
	100,000 px** vyšší při čtyřech řádcích (dva sloupce) a o **přesně 200,000 px** při osmi
	(jeden sloupec), tedy **25,000 px na řádek** = `--m3` 24 px plus 1px linka. Tohle je ta
	veličina, o kterou v odůvodnění jde. („24,5 px na řádek", které tu stálo, bylo aritmeticky
	nemožné.) Osm obrazovek
	prázdné desky za sebou nevypadá jako mřížka, která čeká na fotky,
	ale jako rozbité rozvržení. Dva sloupce z toho na 390 px dělají portréty 167 × 222,66 px
	a na 320 px 132 × 176 px, tedy dvě karty vedle sebe — což je zároveň to, jak mřížky lidí
	na telefonu vypadají běžně. Od 48em nastupuje `auto-fill` z makety beze změny a na hranici
	nevzniká skok — změřeno na vykreslené stránce: na 767 px dá dvojice sloupce 355,6 px,
	na 772 px dá `auto-fill` 358,1 px, a teprve na 800 px se `auto-fill` přepne na tři sloupce
	po 240 px (to je jeho vlastní chování z makety, ne něco zavedeného tady).

	Přesně 768 px se schválně neuvádí jako naměřený bod: při DPR 1,8 hlásí `innerWidth` 768,
	ale skutečná šířka je 767,78 px, takže `matchMedia('(min-width: 768px)')` je ještě `false`
	a měření na „768" popisuje dvojici sloupců, ne `auto-fill`. Hodnoty vedle sebe ale vycházejí
	tak blízko (355,6 vs. 358,1 px), že je přechod nepostřehnutelný bez ohledu na to, na které
	straně prahu se prohlížeč zaokrouhlí.

	`minmax(0, 1fr)` (ne `1fr`) je kvůli tomu, aby dlouhé jméno sloupec nerozšířilo nad
	jeho podíl — `1fr` je zkratka za `minmax(auto, 1fr)` a `auto` se řídí obsahem.
*/
/*
	Mřížka lektorů: jeden sloupec na nejmenších telefonech, dva od 24em (384 px), od 48em kolik
	se vejde po 15rem.

	JEDEN SLOUPEC POD 384 PX (2026-09-13, po prohlídce na 320 px). Dva sloupce tam dávaly kartu
	široké ~130 px: jméno se lámalo do tří řádků, role do šesti a do bia se vešla dvě tři slova
	na řádek. Hranice 24em nechává jeden sloupec na 320, 360 a 375 px a dva od 390 px (iPhone
	12 a novější, 412 px Android), kde je karta ~165 px a čte se.

	Cena: v jednom sloupci je karta široká až ~350 px a portrét má 600 px
	(`KonverzeDoWebp::MaxDelsiHranaPodle`), tedy na nejmenších telefonech s dvojnásobnou
	hustotou mírně pod 2×. Strop se kvůli tomu nezvedá — web nemá `srcset` a těžší by byly
	fotky i na desktopu.

	`margin-top: var(--m3)` je odstup od nadpisu „Kdo u nás učí" (#207), stejně jako u osy
	kategorií pod „Vyberte věk" (#205): maketa AA dává `h2` `margin-bottom: var(--m3)`, web
	globálně `--m2` a mění se jen tady. Margin nadpisu a mřížky splyne, výsledek je 24 px.
*/
.lektori {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--m4) var(--m3);
	margin: var(--m3) 0 0;
	padding: 0;
	list-style: none;
}

@media (min-width: 24em) {
	.lektori {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 48em) {
	.lektori {
		grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
	}
}

/*
	Karta nemá rám ani podklad — ve směru AA ji ohraničuje jen mezera (`gap`) a fotka. Rám
	dokola by ze sedmnácti karet udělal sedmnáct dlaždic a mřížka by se vrátila k tomu, co #124
	z rozcestníku kategorií schválně odstranilo.

	SPODNÍ LINKU MÁ NAVÍC PROTI MAKETĚ A JE TO ODPOVĚĎ NA ZMĚŘENOU VADU. Měřeno bylo v #125,
	kdy neměl fotku ani bio nikdo; **#95 ten stav změnilo a měření níž je proto historické.**
	Co z něj platí dál, je až závěr — a ten je potvrzený novým měřením na konci komentáře.
	Tehdejší stav: roli nebo bio má z osmi lektorů jeden a půl (Veronika obojí, Filip jen roli)
	— zbylým sedmi obojí chybí. Výška řádku gridu se ale měří podle nejvyšší karty v řádku, takže Veroničino bio
	vytáhne celý první řádek. Změřeno na 390 px (`getBoundingClientRect()`, `APP_DEBUG=0`;
	jednotky pixelu se hýbou s DPR, viz výš): Veroničina karta má **≈ 519 px** i s odsazením
	a linkou, 494 px bez nich. Karta jen se jménem má tři různé výšky a je potřeba vědět,
	která je která, jinak z nich vyjde nesmyslný krok:

	  - **259,9 px** — obsah po spodní hranu `h2`, tedy dokud kartu nic nenatahuje,
	  - **263,3 px** — content-box karty; rozdíl 3,4 px je `margin-bottom` toho `h2`,
	  - **≈ 288 px** — vykreslená výška v řádku, kde ji nic nenatahuje (content-box plus
	    `padding-bottom` 24 px a 1px linka).

	Ten krok 259,9 → 288 tedy není 28 px z ničeho: je to 3,4 px margin nadpisu plus 25 px
	odsazení a linky. Sousedka v prvním řádku se ale natáhne na Veroničiných ≈ 519 px, takže
	pod jejím jménem zůstane **≈ 259 px** prázdna. Bez linky je to díra, s linkou
	je to prázdná buňka — mez, na kterou řádek dosedne, je vidět, a prázdné místo tím vypadá
	jako záměr, protože jím je (CHYBEJICI-PODKLADY.md). Je to tentýž postup, jakým #124
	vyřešilo prázdné řádky osy věkových kategorií: drží je linka a stejné odsazení, ne výplň.

	Až bia dorazí, linka se kreslit nepřestane — pravidlo platí dál a mazat se nebude. Změní
	se jen to, co dělá: z meze, která ohraničuje prázdno, bude obyčejný předěl mezi řádky
	mřížky, protože se karty srovnají do podobné výšky a nebude pod čím zůstávat prázdno.

	ČÍSLA NÍŽ JSOU PO PRVNÍM KOLE PODKLADŮ A DRUHÉ KOLO JE ZMĚNILO. Filip Heger od té doby
	má fotku i bio o pěti větách a přibyla jedenáctá karta (Martin Otáhal), takže jeho
	148,2 px prázdna už neplatí a nejvyšší kartou je teď nejspíš on. Znovu změřené to
	není. Závěr odstavce se tím nemění — karty mají dál různou délku bia a linka dál
	ohraničuje předěl — ale kdo bude čísla citovat, ať je nejdřív přeměří.

	BIA DORAZILA (#95) A TA PŘEDPOVĚĎ SEDĚLA. Přeměřeno 2026-09-13 na 1920 px, kde má mřížka
	čtyři sloupce, `APP_DEBUG=0`; „prázdno" je mezera mezi spodkem posledního odstavce karty
	a spodkem karty, tedy to, co linka ohraničuje:

	  - **řádek 1** (výška 589,3 px): Veronika 25 px, Filip **148,2 px**, David 71,4 px,
	    Karla 47,4 px,
	  - **řádek 2** (615 px): Julie 25 px, Anna 49 px, Renata 73 px, Adéla 73 px,
	  - **řádek 3** (687 px): Kristýna 25 px, Veronika Vlasáková 25 px.

	Těch 25 px je dolní mez, ne prázdno: je to `padding-bottom` 24 px plus linka, tedy karta,
	která výšku řádku sama určuje. Nejhorší případ spadl z ≈ 259 px na **148,2 px** a je to
	jediná karta — Filip Heger, který má desku místo fotky a roli místo bia. Zbytek se drží
	pod 75 px, což je zhruba dva řádky textu. Linka tedy opravdu přešla do role, kterou jí
	odstavec výš předpovídal: ohraničuje předěl, ne díru.
*/
.lektori__polozka {
	/*
		`position: relative` je kotva dvou věcí z #180: roztaženého `::after` odkazu jména (klikací
		je celá karta) a náhledu bia, který leží přes fotku. Kotva pro „Zavřít" (`.lektori__kotva`)
		se k ní taky vztahuje.
	*/
	position: relative;
	margin: 0;
	padding-bottom: var(--m3);
	border-bottom: 1px solid var(--linka);
}

.lektori__osoba {
	/*
		OSOBA JE GRID KVŮLI ŠTÍTKU S PŘEZDÍVKOU (#95). Štítek sedí v levém dolním rohu fotky,
		ale v HTML stojí až za jménem — tak ho odečítač přečte ve správném pořadí (jméno →
		přezdívka) a šablona nemusí fotku obalovat. Fotka i štítek proto dostanou explicitně
		první řádek gridu a překryjí se; jméno a role se samy poskládají do dalších řádků.
		Do #180 byl gridem celý `<li>`; od #180 je v něm i náhled bia a „Zavřít", které
		do řádků fotky nepatří, proto grid dostala jen tahle část karty.
	*/
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-content: start;
}

/*
	Portrét. Poměr 3 : 4 drží `aspect-ratio`, ne rozměry souboru — `width`/`height` v atributech
	dodává blok `obrazek` z rozměrů souboru na disku (kvůli CLS), ale kreslí se přes `object-fit`
	v poměru mřížky, aby různě vysoké fotky nedělaly různě vysoké karty. Poměr 3 : 4 mají
	nasazené portréty už ze souboru (`KonverzeDoWebp::Vyrezy`), takže `object-fit` tady nic
	neuřezává — je to pojistka pro fotku, která dorazí příště a výřez ještě mít nebude.

	PORTRÉTY JSOU BAREVNÉ A ŽÁDNÝ `filter` TU NENÍ. Do 2026-09-13 tu stálo
	`filter: grayscale(1) contrast(1.1)`, převzaté z makety směru AA — a je to poučný případ,
	proč se pravidlo nedá schválit na zástupném obsahu.

	V maketě měly všechny karty zástupnou siluetu, tedy šedé SVG. `grayscale(1)` na šedém SVG
	nedělá nic viditelného, takže se ten filtr při výběru směru **nemohl projevit**: formálně
	schválený, fakticky neviděný. Poprvé se ukázal až v #95, kdy dorazilo osm skutečných fotek.
	Klientka si obojí prohlédla vedle sebe a vybrala barvu.

	Argument pro šeď byl přitom skutečný a padl až na tom srovnání: osm fotek od osmi lidí je
	osm různých prostředí — selfie u tyrkysového jezera, ateliérový portrét na černé, kšiltovka
	před listovou stěnou, mobil v pokoji proti bílé zdi. Šeď je sjednotí do jednoho pásu.
	Bere ale s sebou to, kvůli čemu ta stránka existuje: že jsou to konkrétní mladí lidé,
	ne zaměstnanecké portréty. Sjednocení tedy dělá mřížka sama — shodný poměr 3 : 4, shodná
	šířka sloupce, shodný odstup — a barvu si každá fotka nechá.

	**Nevracet to „pro pořádek do souladu s maketou".** Maketa AA (`www/navrhy/styl/smer-a.css`)
	je srovnaná se stejným rozhodnutím; směry B, AB a AC si svůj šedý filtr nechávají, protože
	vybrané nejsou a jsou to záznamy toho, co se ukazovalo.
*/
.lektori__portret,
.lektori__panel-foto {
	display: block;
	grid-row: 1;
	grid-column: 1;
	width: 100%;
	aspect-ratio: 3 / 4;
	margin-bottom: 0;
	object-fit: cover;
}

/*
	CHYBĚJÍCÍ FOTKA = PRÁZDNÁ DESKA VE STEJNÉM POMĚRU. Po pěti kolech podkladů #95 má fotku
	třináct lektorů ze sedmnácti; desku má Veronika Krejčířová Tučková a tři jména doplněná
	v #177, která zatím podklady neposlala. Pravidlo
	tím neztratilo smysl — lektoři se mění a další přírůstek zase nějakou chvíli fotku mít
	nebude (viz #172, správa lektorů v administraci).

	Co to je: plocha `--cerna-3` s vlasovou linkou dokola, ve stejném poměru 3 : 4 a se stejným
	odstupem, jaký bude mít fotka. Nic v ní není — žádná silueta, žádná ikona, žádný text.

	Proč zrovna tohle:

	- NESMÍ TO VYPADAT JAKO ROZBITÝ OBRÁZEK. Rozbitý `<img>` prohlížeč kreslí jako ikonu
	  s natrženým listem a vedle ní `alt`; tady není `<img>` vůbec, takže není co rozbít.
	  Co z desky návštěvník opravdu vidí, je **jen to obtažení**: výplň `--cerna-3` má proti
	  podkladu stránky 1,12 : 1, tedy nevnímatelně málo (měřeno níž), takže se čte pravidelný
	  obdélník z vlasové linky, ne plocha. Na „fotka ještě nedorazila" to stačí — obtažení je
	  pravidelné a spodní linka řádek uzavírá — ale povrch místo díry tady deska nepředstírá.
	- NESMÍ TO MASKOVAT CHYBĚJÍCÍ PODKLAD VÝPLNÍ. Zástupná silueta z makety
	  (`www/navrhy/assets/portret-zastupny.svg`) je maketní výbava pro klientku — na ostrém
	  webu by tvrdila, že tam něco je. Prázdné místo je záměr (CHYBEJICI-PODKLADY.md),
	  drží ho linka a stejné odsazení, ne náhradní obsah. Je to tentýž postup, jakým #124
	  vyřešilo prázdné řádky osy věkových kategorií.
	- MUSÍ TO DRŽET RYTMUS MŘÍŽKY. Viz komentář u `{if}` v šabloně: bez desky by první dodaná
	  fotka nechala pod třemi kartami vedle sebe díru o celou výšku portrétu.

	Kontrasty. Deska proti podkladu stránky: `--cerna-3 #17171d` na `--cerna #08080a` =
	1,12 : 1. Linka je vidět proti obojímu, takže má dvě hodnoty: 1,33 : 1 proti podkladu
	stránky (tabulka nad souborem) a 1,19 : 1 proti desce pod sebou. Všechny tři jsou pod
	3 : 1 z WCAG 1.4.11 a je to v pořádku: není to ovládací prvek ani hrana, podle které se
	ovládací prvek pozná, a nenese žádnou informaci — tu nese jméno pod deskou.
*/
.lektori__portret--chybi,
.lektori__panel-foto--chybi {
	background: var(--cerna-3);
	border: 1px solid var(--linka);
}

/*
	Jméno je nadpis karty, ne nadpis sekce — bere velikost z makety (`.osoba__jmeno`, 1,0625rem,
	tedy 17 px), ne z globálního `h2`, které je od #179 `clamp(1.875rem, 1.1rem + 2.8vw, 3rem)`,
	tedy 30 px na 390 px a 48 px na 1366 px. Osm nadpisů v té velikosti by v mřížce přehlušilo
	roli i bio a stránka by se rozpadla na osm sekcí místo jedné mřížky.

	Do #205 byl druhou `h2` v roli nadpisu karty `.skupiny__nazev` (sekce 6). Od #205 je to
	`h3` pod sekčním nadpisem „Vyberte věk", jako v maketě, a stupeň 1,5rem má z `.kat__nazev`.
*/
.lektori__jmeno {
	/*
		Od #207 je jméno `h3` (mezipatro „Kdo u nás učí"). Do té doby bylo `h2` a muselo vracet
		`position: static` a `isolation: auto`, které globální `h2` nastavuje kvůli čmouze. Podmínka
		klikací karty (#180) platí dál: `::after` odkazu jména se roztahuje `inset: 0`
		k nejbližšímu pozicovanému předkovi, a ten má být `<li>`, ne nadpis — nadpis jména proto
		nesmí dostat `position`.

		Verzálky, rozpal a vyvážené zalomení jméno do #207 dědilo z pravidla `h1, h2` (sekce 3).
		Globální `h3` je nemá (rozhodnutí 2026-09-14), takže jsou tu vypsané, aby se karta
		přechodem na `h3` vzhledově nezměnila — maketa má jméno verzálkami taky. Tytéž hodnoty
		nese `.lektori__panel-jmeno` v profilu.
	*/
	/* Odstup od fotky nese jméno, ne fotka — margin fotky by jinak vešel do buňky se štítkem. */
	margin: var(--m2) 0 0.2em;
	font-size: 1.0625rem;
	line-height: 1.25;
	letter-spacing: -0.02em;
	text-transform: uppercase;
	text-wrap: balance;
}

/*
	Přezdívka jako štítek v levém dolním rohu fotky (#95, druhé kolo). Ve studiu si skoro všichni
	říkají přezdívkou a rodič ji uslyší na tréninku dřív než příjmení.

	Umístění dělá grid karty (`.lektori__polozka` výš): štítek sdílí s fotkou první řádek
	a zarovná se ke spodku a doleva. V `<h2>` není — nadpis nese jméno, podle kterého člověka
	najde vyhledávač i odečítač.

	ČERNÝ PODKLAD JE PODMÍNKA ČITELNOSTI, NE ZDOBENÍ. Fotky jsou barevné a každá má jiné pozadí:
	bílá zeď u Martina Otáhala a Karly Hýblové, růžové světlo u Julie Klvačové, zelené listí
	u Davida Hřibňáka. Průhledný štítek by na polovině z nich splynul. Na `--cerna` má
	`--akcent` kontrast 5,73 : 1, tedy nad hranicí 4,5 : 1 pro běžný text bez ohledu na to,
	co je na fotce pod ním.

	PÍSMO JE STEJNÉ JAKO JMÉNO POD FOTKOU — řez 800, 1,0625rem, řádkování 1,25 (`.lektori__jmeno`,
	do #207 `h2`). Přezdívka je jméno, jen to druhé, a tak se i čte; menší písmo role
	(0,75rem, pak 0,875rem) se na 286 px široké fotce četlo jako cedulka. Hodnoty se tu opakují
	schválně místo sdílené třídy: jméno je `<h3>` s vlastním `margin` a pozicí, štítek `<p>`
	v rohu fotky — společné mají jen písmo. Kdo změní písmo jména, změní ho i tady.
	Rozhodnuto po dvou prohlídkách na vykreslené stránce (2026-09-13). Barva zůstává
	`--akcent` s obrysem, aby se štítek od jména lišil: jméno je bílé.

	Ostré rohy, žádný `border-radius`: směr AA drží ostré hrany všude (hlavička `smer-aa.css`
	v maketách), zaoblená pilulka by byla jediný kulatý tvar na stránce.
*/
.lektori__prezdivka,
.lektori__panel-prezdivka {
	grid-row: 1;
	grid-column: 1;
	align-self: end;
	justify-self: start;
	margin: 0 0 var(--m1) var(--m1);
	padding: 0.1em 0.5em;
	border: 1px solid var(--akcent);
	background: var(--cerna);
	color: var(--akcent);
	font-size: 1.0625rem;
	font-weight: 800;
	line-height: 1.25;
}

/*
	Role. `--akcent` má na podkladu stránky 5,73 : 1 (tabulka nad souborem), takže i na
	0,75rem (12 px) prochází s rezervou — 12 px je běžný text, tedy hranice 4,5 : 1, ne 3 : 1.
	Drobný text v akcentu na webu není nový (odkazy v patičce jsou 0,9375rem, sekce 10),
	nový je jen ten rozpal: `letter-spacing: 0.1em` s verzálkami je z makety (`.osoba__role`)
	a nese ho jediná komponenta, proto je hodnota tady a ne v tokenu.
*/
.lektori__role,
.lektori__panel-role {
	margin: 0 0 var(--m1);
	color: var(--akcent);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

/*
	Bio. Tlumená barva ho odliší od role a od jména, ne od obsahu — `--text-tlumeny #8a8a97`
	má na podkladu stránky 5,87 : 1 (tabulka nad souborem), tedy nad hranicí 4,5 : 1 pro
	běžný text i na 0,9375rem.

	TŘETÍ NÁLEZ Z OVĚŘENÍ PR #109 (`.h-doplnek` na Lektorech, 390 px, 3,07 : 1) SE TÍMHLE
	PRAVIDLEM NEOPRAVUJE, PROTOŽE NENÍ CO OPRAVIT — nález je planý poplach. Doměřeno v #125
	na vykreslené maketě na 390 px: `.h-doplnek` je ve směru AD `#c26bae` a vlastní podklad
	má `#0c0c0c` (`background: var(--cerna)` plus `width: fit-content`, tedy černý štítek
	pod textem), což je 5,60 : 1. Těch 3,07 : 1 je `#c26bae` na `--sediva #f0f0f0`, tedy
	na podkladu SEKCE, který ale ten štítek zakrývá — měřilo se proti pozadí za prvkem
	místo proti jeho vlastnímu. Ve směru AA, ze kterého tahle stránka vychází, je
	`.h-doplnek` navíc `--text-tlumeny #8a8a97` na `--cerna #08080a`, tedy 5,87 : 1;
	AA se nález nikdy netýkal. Maketa se proto nesahá a `.h-doplnek` se na ostrý web
	nepřenáší z jiného důvodu — je to druhý řádek nadpisu („Actiwity Dance Company“),
	tedy nový viditelný text, a ten je v sérii #120–#128 mimo rozsah.

	Roli „doplňkový text u lektorů“ nese na ostrém webu tohle pravidlo a jeho 5,87 : 1 je
	změřené z RGB odečtených z vykreslené stránky (`rgb(138, 138, 151)` na `rgb(8, 8, 10)`),
	ne spočítané z tokenů. Kdo sem přidá další tlumený text, přepočítá ho proti podkladu,
	který má prvek skutečně pod sebou — ne proti `--cerna` z hlavy.
*/
.lektori__popis {
	margin: 0;
	color: var(--text-tlumeny);
	font-size: 0.9375rem;
}

/*
	Bio má odstavce a odrážky z filtru `|markdown` (#239, dřív `|odstavce` z #237). Mezera je jen mezi bloky, ne nad prvním
	a pod posledním, ať náhled i profil začínají a končí na stejném místě jako dřív s jedním `<p>`.
*/
.lektori__popis > * {
	margin: 0;
}

.lektori__popis > * + * {
	margin-top: var(--m1);
}

.lektori__popis > ul,
.lektori__popis > ol {
	padding-left: 1.25em;
}

/*
	NÁHLED BIA PŘES FOTKU (#180). Ze stavu karty v mřížce: panel přesně přes portrét (stejná šířka
	a poměr 3 : 4 jako `.lektori__portret`), bio nahoře, výzva „Celý profil" dole.

	Neviditelný je jen `opacity`, ne `display` ani `visibility`: bio zůstává v HTML i ve stromu
	přístupnosti, odečítač ho u jména přečte a vyhledávač ho vidí. Ukáže ho najetí myší
	(jen `(hover: hover)` — na dotyku by „přilepený" hover po klepnutí ukázal náhled těsně před
	otevřením profilu) a zaostření odkazu jména z klávesnice (`:focus-visible`, všude) — pravidla a důvod jsou
	u `.lektori__polozka--profil:has(…)` níž.

	BIO SE DO NÁHLEDU NEZKRACUJE V TEXTU, JEN SE OŘÍZNE. Délku, která se vejde, bez skriptu
	nezjistíme (záleží na šířce sloupce), takže bio teče shora a co přeteče, schová `overflow`.
	Přechod do ztracena u výzvy (`::before` výzvy) je barvy `--cerna`, tedy stejné jako podklad
	náhledu — u krátkého bia leží na prázdné ploše a není vidět, u dlouhého rozpustí useknutý
	řádek. Podklad je plný a průhlednost nese `opacity` celého panelu (0,92), aby se přechod
	a podklad nesčítaly do dvou různých odstínů.

	Kontrast: bio je v náhledu `--text` (#d6d6de), ne tlumené — pod panelem s `opacity` 0,92
	prosvítá 8 % fotky, na bílé zdi (Martin Otáhal, Karla Hýblová) to zesvětlí podklad nejvýš
	na ~ rgb(28, 28, 30) a `--text-tlumeny` by spadl pod 4,5 : 1. `--text` tam má přes 10 : 1.
*/
.lektori__nahled {
	position: absolute;
	top: 0;
	left: 0;
	display: flex;
	flex-direction: column;
	width: 100%;
	aspect-ratio: 3 / 4;
	/*
		`min-height: 0` a `overflow: hidden` drží poměr 3 : 4 i u dlouhého bia. Bez nich platí
		`min-height: auto` a `aspect-ratio` panel natáhne na výšku obsahu — změřeno u Filipa
		Hegera (584 znaků) na 1920 px: 491 px panelu přes 381 px portrétu.
	*/
	min-height: 0;
	overflow: hidden;
	padding: var(--m2);
	background: var(--cerna);
	opacity: 0;
	transition: opacity 0.2s ease;
}

.lektori__nahled .lektori__popis {
	flex: 1 1 auto;
	min-height: 0;
	overflow: hidden;
	color: var(--text);
}

.lektori__vyzva {
	position: relative;
	flex: none;
	margin: 0;
	padding-top: var(--m1);
	color: var(--akcent);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

.lektori__vyzva::before {
	content: '';
	position: absolute;
	bottom: 100%;
	left: 0;
	right: 0;
	height: 2.5em;
	background: linear-gradient(to bottom, transparent, var(--cerna));
}

/*
	KDY JE NÁHLED VIDĚT (oprava #180 po nahlášení 2026-09-15). Jen dvě cesty:

	- NAJETÍ MYŠÍ na kartu, a jen v `(hover: hover)` — na dotyku by „přilepený" hover po
	  klepnutí ukázal náhled těsně před otevřením profilu. Selektor je `.lektori__osoba:hover`,
	  ne `:hover` celé karty: otevřený profil leží v DOM uvnitř `<li>`, takže myš nad oknem
	  profilu je pro prohlížeč „nad kartou" a po zavření by na ní hover visel, dokud se myš
	  nepohne. Přes celou kartu se roztahuje `::after` odkazu jména, a ten je v `.lektori__osoba`
	  — najetí kamkoli na kartu (i na náhled) je tedy `:hover` osoby.
	- ZAOSTŘENÍ ODKAZU JMÉNA Z KLÁVESNICE, `:focus-visible`. Do opravy tu bylo `:focus-within`,
	  které platí i pro fokus po kliknutí myší a pro fokus, který `lektori.js` po zavření
	  profilu vrací na jméno. Náhled pak na kartě zůstal otevřený, i když myš byla jinde.
*/
.lektori__polozka--profil:has(.lektori__odkaz:focus-visible) .lektori__nahled {
	opacity: 0.92;
}

@media (hover: hover) {
	.lektori__osoba:hover ~ .lektori__profil .lektori__nahled {
		opacity: 0.92;
	}
}

/*
	Klikací karta — stejný vzor jako `.skupiny__odkaz` (sekce 6). Jméno zůstává bílé jako
	nadpis karty bez odkazu, aby se karty s biem a bez něj v mřížce nelišily barvou jména.
	`z-index: 1` je nad náhledem (ten je pozicovaný a v HTML až za jménem, takže by jinak
	klepnutí na bio chytil on) — lokální hladina uvnitř karty, ne nová hladina webu.
*/
.lektori__odkaz {
	color: inherit;
	text-decoration: none;
}

.lektori__odkaz::after {
	content: '';
	position: absolute;
	inset: 0;
	z-index: 1;
}

.lektori__odkaz:hover,
.lektori__odkaz:focus-visible {
	text-decoration: underline;
}

/*
	Kotva pro „Zavřít" bez JavaScriptu — nulový bod na horní hraně karty, na který prohlížeč po
	zavření profilu odroluje. `scroll-margin-top` nechá nad kartou pětinu výšky okna (nejmíň
	`--m3`, nejvíc 10rem). Do opravy 2026-09-15 to bylo jen `--m3` a karta po zavření dosedla
	k hornímu okraji tak, že to vypadalo jako skok jinam. Hlavička webu `sticky` není, takže
	víc místa kvůli ní netřeba. S JavaScriptem se na kotvu neroluje — `lektori.js` vrátí
	stránku na pozici z doby otevření.
*/
.lektori__kotva {
	position: absolute;
	top: 0;
	left: 0;
	scroll-margin-top: clamp(var(--m3), 20vh, 10rem);
}

/*
	PROFIL LEKTORA (#180) — okno přes stránku, když adresa míří na `#lektor-<slug>`.

	Proč `:target` a ne `<dialog>` nebo `popover`: obojí potřebuje k otevření JavaScript nebo
	`popovertarget` na `<button>`, a `popover` neumí přímý odkaz ani tlačítko Zpět. `:target`
	otevře profil odkazem bez skriptu, profil jde sdílet adresou a Zpět ho zavře.

	OPRAVA PO NAHLÁŠENÍ (2026-09-15). Do opravy mířil `:target` na `<li>` a karta se sama stala
	oknem (`position: fixed; inset: 0`). Vypadla tím z mřížky, ostatní karty se přeskládaly,
	pod profilem zůstala díra a panely visely nahoře jako dva samostatné boxy. Teď:

	- `:target` míří na `.lektori__profil` uvnitř karty. V mřížce jsou profil, okno i tělo
	  `display: contents` — nemají vlastní box, náhled bia se kotví ke kartě jako dřív.
	  V `:target` se profil vykreslí jako `fixed` vrstva a `<li>` se nehne: jeho výšku dál
	  určuje jen `.lektori__osoba` (náhled je absolutní, levý panel `display: none`).
	- Plocha kolem je `.lektori__profil` sám (tma s 94 % krytím), `.lektori__okno` je jeden rám
	  vystředěný na obě osy, s „Zavřít" nahoře a oběma panely pod ním. Když se obsah do výšky
	  okna nevejde, roluje jen `.lektori__telo`, takže „Zavřít" zůstává vidět.
	- Vlevo kopie fotky, jména, přezdívky a role (`.lektori__panel`), vpravo bio
	  (`.lektori__nahled` — tentýž prvek jako náhled v mřížce). Pod 48em pod sebou.

	`z-index: 30` je pátá hladina webu (výčet u `.hlavicka`, sekce 4): profil musí být nad
	hlavičkou (5), skip-linkem (10) i panelem menu (20). Roztažený `::after` odkazu jména
	(`z-index: 1`) je pod ním.

	ROLOVÁNÍ STRÁNKY POD PROFILEM zastaví `html:has(…)` s `overflow: hidden`, a `scrollbar-gutter:
	stable` k tomu patří: samotné `overflow: hidden` schová klasický posuvník, stránka se rozšíří
	o jeho šířku (15 px, změřeno v Chromu na Linuxu, `h1` uskočilo o 7,5 px) a po zavření se
	vrátí. Prohlížeč bez `:has()` stránku pod profilem rolovat nechá; nic nepřestane fungovat.
*/
.lektori__profil,
.lektori__okno,
.lektori__telo {
	display: contents;
}

.lektori__zavrit,
.lektori__panel {
	display: none;
}

.lektori__profil:target {
	position: fixed;
	inset: 0;
	z-index: 30;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--m2);
	background: rgb(8 8 10 / 0.94);
}

html:has(.lektori__profil:target) {
	overflow: hidden;
	scrollbar-gutter: stable;
}

/* `max-height: 100%` spolu s `min-height: 0` na těle drží okno ve výšce okna prohlížeče. */
.lektori__profil:target .lektori__okno {
	display: flex;
	flex-direction: column;
	width: 100%;
	max-width: 36rem;
	max-height: 100%;
	border: 1px solid var(--linka);
	background: var(--cerna-2);
}

/* `min-height` drží klikací cíl na 44 px jako přepínač a navigace (#64); `flex` drží text na středu. */
.lektori__profil:target .lektori__zavrit {
	display: flex;
	flex: none;
	align-self: flex-end;
	align-items: center;
	min-height: 2.75rem;
	margin: var(--m2) var(--m2) 0;
	padding: var(--m1) var(--m2);
	border: 1px solid var(--akcent);
	background: var(--cerna);
	color: var(--akcent);
	font-weight: 800;
	text-decoration: none;
}

.lektori__profil:target .lektori__zavrit:hover,
.lektori__profil:target .lektori__zavrit:focus-visible {
	text-decoration: underline;
}

.lektori__profil:target .lektori__telo {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	min-height: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
}

/* Levý panel má grid jako `.lektori__osoba`: fotka a štítek přezdívky sdílí první řádek. */
.lektori__profil:target .lektori__panel {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-content: start;
	padding: var(--m3);
}

/*
	Jméno v profilu má písmo globálního `h2` (sekce 3) ve stupni 1,5rem, který měl profil i do
	opravy. Nadpis to není schválně: nadpisem lektora je jméno v kartě, tohle je jeho kopie.
*/
.lektori__panel-jmeno {
	margin: var(--m2) 0 0.2em;
	color: var(--text-silny);
	font-size: 1.5rem;
	font-weight: 800;
	line-height: 1.25;
	letter-spacing: -0.02em;
	text-transform: uppercase;
	text-wrap: balance;
}

/*
	`min-height: auto` a `overflow: visible` ruší pojistky náhledu a nejsou úklid: položka
	s `overflow: hidden` má minimální výšku nulovou, takže by ji grid těla stáhl pod výšku bia
	a konec textu uřízl. Změřeno do opravy na 390 px u Kristýny Šimkové (337 znaků):
	`scrollHeight` = `clientHeight`, bio useknuté.
*/
.lektori__profil:target .lektori__nahled {
	position: static;
	width: auto;
	aspect-ratio: auto;
	min-height: auto;
	overflow: visible;
	padding: var(--m3);
	border-top: 1px solid var(--linka);
	background: none;
	opacity: 1;
	transition: none;
}

.lektori__profil:target .lektori__nahled .lektori__popis {
	overflow: visible;
	font-size: 1rem;
}

.lektori__profil:target .lektori__vyzva {
	display: none;
}

@media (min-width: 48em) {
	.lektori__profil:target {
		padding: var(--m4) var(--m3);
	}

	.lektori__profil:target .lektori__okno {
		max-width: 58rem;
	}

	.lektori__profil:target .lektori__telo {
		grid-template-columns: minmax(0, 20rem) minmax(0, 1fr);
	}

	.lektori__profil:target .lektori__nahled {
		border-top: 0;
		border-left: 1px solid var(--linka);
	}

	/* Jméno a role nad fotkou („vlevo celá fotka, nad ní jméno, přezdívka, pozice"). */
	.lektori__panel-jmeno {
		grid-row: 1;
		margin-top: 0;
	}

	.lektori__panel-role {
		grid-row: 2;
		margin-bottom: var(--m2);
	}

	.lektori__panel-foto,
	.lektori__panel-prezdivka {
		grid-row: 3;
	}
}

/* ==========================================================================
   16. Omezený pohyb
   ========================================================================== */

/*
 * Přechody na webu jsou jen tři (tlačítko, karta kategorie, náhled bia lektora z #180) a všechny jsou dekorativní. Kdo má
 * v systému nastavené omezení pohybu, dostane změnu skokem — pravidlo je tady jednou pro
 * všechny prvky, ať se na něj u dalšího přechodu nezapomene.
 */
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		transition-duration: 0.01ms !important;
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		scroll-behavior: auto !important;
	}
}
