/* ═══════════════════════════════════════════════════════════════════════
   NASTAVENÍ ZNAČKY — co měnit v novém projektu
   ═══════════════════════════════════════════════════════════════════════
   Šablona se v novém projektu PŘEBARVUJE a přepisuje, nepřestavuje.
   Typografie, mezery, mřížka, zlomy, pohyb, plovoucí lišta, mobilní menu,
   cookies lišta i formulář jsou vyladěné na skutečných zařízeních a mají
   zůstat beze změny. Podrobný postup redesignu: docs/DESIGN.md.

   ── MĚNIT: tokeny v :root (hned níže) ──────────────────────────────────
   Barvy
   · --modr ............ hlavní modrá (akcent značky): tlačítka, odkazy,
                         pilulky rubrik, otevřená karta FAQ, šipky. Bílý
                         text na ní i ona na bílé aspoň 4,5:1.
   · --modr-tm ......... hover akcentu (o stupeň tmavší než --modr)
   · --modr-sv ......... světlejší akcent pro kresby a netextové prvky
                         (na bílé jen jako netextový prvek, ≥ 3:1)
   · --modr-ik ......... akcent na tmavém podkladu (kontakt, patka, štítky
                         na tmavé, zadní strana karet); na --tmava ≥ 4,5:1
   · --tmava ........... hluboká tmavá plocha: formulář, kontakt, patka,
                         mobilní menu, dlaždice a karty
   · --foto-bila ....... barva pozadí portrétu / plátna úvodu (fotka pak
                         na ploše nemá hranu)
   · --bila ............ základní světlé pozadí stránky
   · --seda ............ světlá plocha sekce otázek, hover v liště
   · --linka ........... vlasové linky a obrysy karet
   · --ink ............. hlavní text (≥ 7:1 na bílé)
   · --ink-dim ......... tlumený text (≥ 4,5:1 na bílé i na --seda)
   · --pole-linka, --pole-linka-h ... obrysy polí a neaktivních prvků
                         (≥ 3:1 kvůli WCAG 1.4.11)
   · --chyba, --chyba-bg, --zavazek ... stavové barvy (jen s kontrolou
                         kontrastu)
   · --w, --w-dim, --w-mute, --line-t ... bílá a její průhlednosti na tmavé
                         ploše; měnit jen tehdy, když --tmava přestane být tmavá
   Písmo
   · --ff .............. rodina písma. Font se načítá ve web.html v <head>
                         (<link> na Google Fonts, dnes Geist 100–900
                         i s kurzívou). Nová rodina musí mít skutečné řezy
                         400–800 a skutečnou kurzívu (font-synthesis-weight
                         je vypnuté). 'Interpunkce' nechat v --ff PŘED hlavní
                         rodinou (viz @font-face níže). Po změně rodiny
                         ověřit zlomy nadpisů — max-width jsou v ch.

   Syrové barvy mimo :root (odvozené z tokenů — při změně značky dohledat
   a nahradit RGB složku, krytí ponechat):
   · rgba(106,61,240,…) = --modr ... .hl-nav a[aria-current], .bod-text
     .reseni, .duo::after, .z-odpoved
   · rgba(201,184,255,.20) = --modr-sv ... aura odznaku .f-odznak
   · rgba(0,158,219,.30) ... druhý tón duotónu .duo::after
   · rgba(36,18,61,…) ... tmavý tón posuvníku (html) a pozadí .cookies
   · rgba(36,18,61,…) = --ink ... uvnitř --stin a --stin-plov (jen RGB)
   · #35214F ... výplň automaticky vyplněného pole na tmavém panelu
   · rgba(250,251,253,0) / rgba(252,253,254,.62) ... závoj spodní hrany
     úvodu (.hero-scena::after), navazuje na --bila
   · #hero::before (mobil a zařízení na výšku) ... 21 barev po 5 % z řádku
     y=36 souboru images/hero-platno.webp (sloupce 1080–2559) — po výměně
     plátna navzorkovat znovu
   Obrázky úvodu: images/hero-platno.webp (2560×1488), hero-platno-m.webp
   (1280×744), hero-portret.webp (1600×1600, průhledné pozadí). Při výměně
   ZACHOVAT rozměry i kompozici (postava na stejném místě plátna, levá
   třetina plátna světlá) — jinak nesedí pixelová čísla scény v sekci HERO.

   ── NEMĚNIT ────────────────────────────────────────────────────────────
   · typová stupnice --t-*, proklady --lh-*, prostrkání --ls-*
   · mezery --s1 … --s9, --sekce, --edge
   · mřížka --kol-gap, --kol-7-5, --kol-5-7, --kol-6-6
   · poloměry --r, --r-s, --r-pill; linky --line, --line-akcent, --bar-w,
     --bar-h
   · stíny --stin, --stin-plov (tvar, rozostření, krytí)
   · lišta --hdr, --hdr-vule
   · křivky --ease, --ease-prichod, --ease-kryt a všechny časy a zpoždění
     v transition / animation
   · zlomy media queries (360, 401–560, 561, 640, 900, 1000/1001, 1160,
     1440×900, orientation, hover, prefers-reduced-motion, forced-colors)
   · pixelová čísla scény úvodu (měřítka --s a --u, 1488, 2560, 1273…)
   · názvy tříd a id — čtou je web.html, page.js, motion.js, kotvy.js
     a cookies.js
   Pevné rozměry v komentářích (zlomy nadpisů, výšky karet, šířky loga)
   jsou měřené na textech určité délky: nový obsah držet v podobné délce,
   nebo zlomy ověřit na 320, 375, 390, 768, 1024, 1280 a 1440 px.
   ═══════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════
   ŠABLONA WEBU — hlavní styly
   JEDNA RODINA (dnes Geist 100–900, původně Archivo). JEDNA ODSAZOVACÍ STUPNICE. TŘI POLOMĚRY.
   OSM VELIKOSTÍ PÍSMA.

   Newsreader byl smazán: v <link> se natahoval jen ve váze 400, takže neměl
   tučný řez. Každý <strong> uvnitř serifového odstavce proto fyzicky přepnul
   na Archivo — nebyl to styl, byla to konstrukční vada. K tomu x-výška
   Archivo 0,526 em vs. Newsreader 0,433 em: při stejném font-size vypadal
   Archivo o 21–24 % větší, takže deklarovaná a vnímaná hierarchie mířily
   proti sobě. To je ta „nejednotnost“.
   ═══════════════════════════════════════════════════════════════════════ */

:root{
  /* ── PÍSMO ─────────────────────────────────────────────────────────── */
  /* Písmo kostry = hlas dílny Figtree (SPEC 2.2). Figtree má vlastní českou
     interpunkci („ “ … ·), rodina 'Interpunkce' proto ve stacku není potřeba. */
  --ff:var(--f-ui);   /* Figtree z css/zaklad.css (SPEC 2.4); @font-face Interpunkce níže zůstává */

  /* ── TYPOVÁ STUPNICE — převzato z linkdr.com (Geist) ───────────────
     Naměřeno v jejich DOM: H1 60/800/lh 1.0/ls −.033em · H2 36/600/lh 1.11/
     ls −.03em · lead 20/500/lh 1.4 · text 16/400/lh 1.5 · popisek 14 ·
     mikroverzálky 11/700/ls .12em.
     Dvě odchylky, obě kvůli publiku 20–70 let: běžný text je 18 px místo 16
     (jejich 16 je článek v appce, tohle čte i sedmdesátiletý) a popisek 15
     místo 14. Poměry, váhy a tracking jsou převzaté beze změny. */
  /* Jméno v úvodu je největší prvek na stránce — poměr k nadpisu sekce
     vychází zhruba 4:1, k odstavci 8:1. To je plakátová stupnice, ne
     „nadpis o dva stupně nad textem". */
  --t-mega:clamp(50px,9.4vw,148px);
  --t-display:clamp(38px,4.6vw,60px);
  --t-h2:clamp(28px,3.6vw,50px);
  --t-h3:clamp(19px,1.6vw,23px);
  --t-lead:clamp(19px,1.5vw,20px);
  --t-body:clamp(17px,1.2vw,18px);
  --t-ui:16px;
  --t-cap:15px;
  --t-micro:11px;

  /* jejich proklady: H1 = 1.0 (60/60), H2 = 1.11 (40/36), lead 1.4, text 1.5.
     H1 zvednuto na 1.06 — 1.0 by v češtině uřízlo háček nad velkým Č. */
  /* Souvislý text má jen DVĚ hodnoty: 1.65 pro běžný odstavec a 1.55 pro
     větší uvozující větu. Na stránce jich bylo patnáct a čtyři z nich byly
     pod 1.45 na textu, který se má číst (1.25, 1.30, 1.40, 1.42) — právě
     odtud byl ten pocit sevřenosti. Referenční web, se kterým jsme to
     srovnávali, drží 1.60–1.65 a pod 1.45 jde jen u displejových stupňů. */
  --lh-display:1.06; --lh-h2:1.04; --lh-h3:1.35; --lh-lead:1.55; --lh-body:1.65;
  --ls-display:-.033em; --ls-h2:-.04em; --ls-h3:-.01em;
  --ls-txt:0; --ls-caps:.12em;

  /* MOST: staré názvy kostry → tokeny SPEC (css/zaklad.css). Nemazat, dokud
     je používá page.js / kostra (formulář dotazů, akordeon, mobilní menu). */
  --modr:var(--kouzlo); --modr-tm:var(--kouzlo-h); --modr-sv:var(--s-lev); --modr-ik:var(--p-lev);
  --tmava:var(--noc); --foto-bila:var(--list); --bila:var(--papir); --seda:var(--papir-2);
  --zavazek:var(--uspech); --w:var(--list);
  --w-dim:rgb(var(--papir-rgb) / .88); --w-mute:rgb(var(--papir-rgb) / .74); --line-t:var(--noc-linka);
  --stin:var(--stin-karta); --stin-plov:var(--stin-zvednuta);
  /* --linka, --ink, --ink-dim, --pole-linka, --pole-linka-h, --chyba, --chyba-bg
     definuje css/zaklad.css pod stejným jménem (SPEC 2.4), proto tu nejsou. */

  /* ── MŘÍŽKA A MEZERY ───────────────────────────────────────────────
     Dvousloupcové sekce smějí použít JEN jeden ze tří poměrů a JEN
     --kol-gap. Dřív bylo na stránce 13 svislých os a 4 různé mezery. */
  --edge:clamp(20px,5vw,80px);
  --kol-gap:clamp(32px,4vw,64px);
  --kol-7-5:minmax(0,7fr) minmax(0,5fr);
  --kol-5-7:minmax(0,5fr) minmax(0,7fr);
  --kol-6-6:minmax(0,1fr) minmax(0,1fr);

  /* jedna 4px stupnice; v gap/margin/padding nesmí být syrová px hodnota */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;
  --s6:32px; --s7:48px; --s8:64px; --s9:96px;
  --sekce:clamp(72px,8vw,128px);

  /* ── TVARY — tři poloměry a jedno pravidlo ─────────────────────────
     --r-pill = navigace a odkazy (něco někam VEDE)
     --r-s    = pole, odeslání, hlášky (něco DĚLÁ)
     --r      = fotky a plochy
     Dřív jich bylo sedm. */
  --r:16px; --r-s:12px; --r-pill:999px;
  --line:1px; --line-akcent:3px;
  --bar-w:40px; --bar-h:var(--line-akcent);

  --hdr:80px;            /* motion.js ji měří ze skutečné hlavičky */
  --hdr-vule:24px;
  --ease:cubic-bezier(.22,.61,.24,1);
  /* ── KŘIVKY NÁSTUPU ────────────────────────────────────────────────
     Dvě, ne jedna, a v tom je celý rozdíl mezi „nějaké animace tam jsou"
     a pohybem, který působí draze.

     --ease-prichod je exponenciální doběh: prvek se hned na začátku
     rozjede skoro celou dráhu a zbytek dlouho doplouvá do klidu. Tak se
     hýbe hmota, která něco váží. Symetrická křivka (rozjezd i dojezd
     stejně dlouhý) je naopak to, co dělá pohyb strojovým — a přesně ta
     tu předtím byla.

     --ease-kryt je pro KRYTÍ a je záměrně jiná a mnohem kratší.
     Nejčastější chyba je hnát krytí po téže dlouhé křivce jako pohyb:
     text pak skoro sekundu visí poloprůhledný, špatně se čte a celé to
     působí rozmazaně. Správně se obsah zviditelní rychle (do zhruba
     0,4 s je plně čitelný) a POHYB dojíždí ještě dlouho potom — oko
     čte obsah, periferní vidění vnímá dojezd. */
  --ease-prichod:cubic-bezier(.16,1,.3,1);
  --ease-kryt:cubic-bezier(.33,.9,.4,1);
  color-scheme:light;
}

/* ── RESET ──────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
/* overscroll-behavior:none vypne gumové přetažení nad začátek a pod konec
   stránky — stejně jako to má landing editoru. Bez toho se na trackpadu
   i na telefonu za horní a spodní hranou odhalí šedý podklad prohlížeče
   a lepivá hlavička se odlepí. */
/* ── KULATÁ INTERPUNKCE ─────────────────────────────────────────────────
   Geist kreslí tečku, čárku, dvojtečku, středník i prostředník jako
   ČTVEREČKY. V textu to působí technicky a v drobných stupních to vypadá
   jako vada tisku. Montserrat je má kulaté.

   Nemění se ale písmo — mění se JEN těch pár znaků. `unicode-range`
   omezuje tuhle rodinu na U+2C–2E (čárka, spojovník, tečka), U+3A–3B
   (dvojtečka, středník), U+B7 (prostředník), U+2013–2014 (pomlčky)
   a U+2026 (výpustka). Všechno ostatní propadne na Geist, protože pro
   znaky mimo rozsah se tahle rodina vůbec nezkouší.

   Soubor je podmnožina z Google Fonts (Montserrat, variabilní 100–900,
   licence SIL OFL), 1,7 kB. Hostuje se u nás, aby web ani tiskové PDF
   nezáviselo na cizí URL, která se může změnit.

   POŘADÍ V STACKU JE PODSTATNÉ: 'Interpunkce' musí být PŘED 'Geist',
   jinak si Geist vezme tečku dřív, než na tuhle rodinu dojde řada. */
@font-face{
  font-family:'Interpunkce';
  font-style:normal;
  font-weight:100 900;
  font-display:block;
  src:url('fonts/interpunkce-montserrat.woff2') format('woff2');
  unicode-range:U+2C-2E, U+3A-3B, U+B7, U+2013-2014, U+2026;
}

html{background:var(--bila);scroll-behavior:smooth;overscroll-behavior:none;
  scroll-padding-top:calc(var(--hdr) + var(--hdr-vule));
  -webkit-text-size-adjust:100%;
  /* macOS kreslí posuvník tence a přes obsah, bez vlastní stopy — Windows
     Chromium (Chrome, Edge, Opera) defaultně kreslí širokou neprůhlednou
     dráhu, na téhle stránce bílý pruh vpravo. Vlastní styl to sjednotí
     na obou platformách na tenký, poloprůhledný pruh bez dráhy. */
  scrollbar-width:thin;scrollbar-color:rgb(var(--ink-rgb) / .22) transparent}
html::-webkit-scrollbar{width:10px}
html::-webkit-scrollbar-track{background:transparent}
html::-webkit-scrollbar-thumb{background:rgb(var(--ink-rgb) / .22);
  border-radius:var(--r-pill);border:2px solid transparent;background-clip:padding-box}
html::-webkit-scrollbar-thumb:hover{background:rgb(var(--ink-rgb) / .38);
  border-radius:var(--r-pill);border:2px solid transparent;background-clip:padding-box}
body{font-family:var(--ff);font-weight:400;font-synthesis-weight:none;
  background:var(--bila);color:var(--ink);overscroll-behavior:none;
  -webkit-font-smoothing:antialiased;overflow-x:hidden}
img,svg{display:block;max-width:100%}
button,input,textarea{font:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
a{color:inherit;-webkit-tap-highlight-color:transparent}
button{-webkit-tap-highlight-color:transparent}
::selection{background:var(--modr);color:#fff}
/* Zalamování 2026: balance drží řádky nadpisu opticky stejně dlouhé,
   pretty hlídá sirotky (osamocené slovo na posledním řádku odstavce).
   Obojí je progresivní vylepšení — prohlížeč bez podpory je ignoruje.
   POZOR: balance NEsmí na nadpisy sekané přes splitLines (R-lines) —
   motion.js jim přepisuje textContent na <i> po řádcích a balance by
   se pral s ručním zlomem; těm zůstává výchozí zalamování. */
h1,h2:not(.R-lines),h3,.z-otazka{text-wrap:balance}
p{text-wrap:pretty}
:focus{outline:none}
/* Dvoubarevný prstenec: tmavé jádro + světlý lem drží ≥3:1 na bílé,
   na šedé i na plné modré. Pole formuláře mají vlastní, decentnější. */
:focus-visible{outline:3px solid var(--ink);outline-offset:2px;
  box-shadow:0 0 0 6px var(--bila),0 0 0 8px var(--ink);border-radius:var(--r-s)}
.na-modre :focus-visible,.na-tmave :focus-visible,#hlavicka :focus-visible{
  outline-color:var(--bila);
  box-shadow:0 0 0 6px rgba(255,255,255,.55),0 0 0 8px var(--bila)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}

/* ── TYPOGRAFIE ───────────────────────────────────────────────────────
   Velikost ani rodinu neurčuje nikdy element — vždy třída. */
h1,h2,h3{font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit}

.t-display{font-size:var(--t-display);font-weight:800;line-height:var(--lh-display);
  letter-spacing:var(--ls-display);color:var(--ink)}
/* Nadpisy sekcí nesou 60 px a váhu 800. Na 36 px a šestistovce byly proti
   sedmdesátce v úvodu neviditelné a stránka neměla druhý typografický
   stupeň — jen obří jméno a pak samý odstavec. */
.t-h2{font-size:var(--t-h2);font-weight:800;line-height:var(--lh-h2);
  letter-spacing:var(--ls-h2);color:inherit}
/* MEZERA POD NADPISEM — jedna hodnota pro celý web. .t-h2 sama žádnou
   neměla, takže tři sekce (řada znaků, poradna, otázky) měly odstavec
   nalepený přímo pod účařím: naměřeno 0 px. U stupně 50 px s prokladem
   1,04 je řádkový box těsný, takže nula znamená doslova nulu.
   Hodnota je --s4, protože přesně tu má vztah nadpis→text všude jinde
   (čtyři body programu i nadpis po odeslání formuláře). Dřív tu stálo
   --s6 podle úvodní sekce představení, jenže 32 px byla na webu osamocená výjimka — sjednoceno dolů,
   ne nahoru. Odsazení sedí na ODSTAVCI, ne na nadpisu: nadpisy, po kterých
   následuje mřížka nebo obrázek, si tím drží vlastní odstup. */
.t-h2 + p{margin-top:var(--s4)}
/* Totéž pro nadpis, po kterém následuje blok místo odstavce — nadpis
   v kontaktu měl taky nulu. */
.t-h2 + div{margin-top:var(--s4)}
.t-h3{font-size:var(--t-h3);font-weight:700;line-height:var(--lh-h3);
  letter-spacing:var(--ls-h3);color:inherit}
.t-lead{font-size:var(--t-lead);font-weight:500;line-height:var(--lh-lead);
  letter-spacing:var(--ls-txt);color:var(--ink);max-inline-size:44ch}
.t-body{font-size:var(--t-body);font-weight:400;line-height:var(--lh-body);
  color:var(--ink-dim);max-inline-size:62ch}
.t-cap{font-size:var(--t-cap);font-weight:500;line-height:1.45;color:var(--ink-dim)}
.t-micro{font-size:var(--t-micro);font-weight:700;line-height:1.3;
  letter-spacing:var(--ls-caps);text-transform:uppercase}
.t-zavazek{color:var(--zavazek);font-weight:600;margin-top:var(--s4)}

/* ── IKONY — Tabler Icons (MIT) ─────────────────────────────────────── */
.ico{width:1.15em;height:1.15em;flex:none;fill:none;stroke:currentColor;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.s-ikonou{display:flex;align-items:flex-start;gap:var(--s3)}
.t-micro.s-ikonou{align-items:center;gap:var(--s2)}
.ico-btn{width:1.05em;height:1.05em;stroke-width:2.2;
  transition:transform .28s var(--ease)}
.btn:hover .ico-btn{transform:translateX(4px)}

/* ── OBAL, PLOCHY, HLAVA SEKCE ──────────────────────────────────────── */
.wrap{width:100%;max-width:1280px;margin-inline:auto;padding-inline:var(--edge)}
section{padding-block:var(--sekce)}
/* #kdo → #program: plný --sekce nahoře i dole na obou (až 128+128 px)
   dělal mezi poslední kartou témat a rubrikou sekce kroků díru, jako
   by spolu vůbec nesouvisely — přitom na sebe plynule navazují (kroky
   jsou pokračování programu). Míň prostoru na tomhle jednom švu, ne na
   celé stránce. */
#kdo{padding-top:var(--s7);padding-bottom:var(--s8)}
#program{padding-top:var(--s8)}
/* Kontakt → patka: plných 128 px pod posledním řádkem kontaktů dělalo
   před nízkou patkou prázdný pás; 48 px stačí, patka má vlastní odstup.
   A stejně tak nahoře: plný --sekce nad nadpisem kontaktu dělal mezi
   poradnou a kontaktem díru — 64 px drží oddělení sekcí, ne propast. */
/* Kontakt i patka v jedné hluboké tmavě modré (světlá šedá i hlavní modrá
   plocha vyzkoušeny a zamítnuty) — dole je zkrátka jen tmavá. */
#kontakt{padding-top:var(--s8);padding-bottom:var(--s7)}
/* jediný způsob, jak se sekce otevírá */
.sek-hlava{margin-bottom:var(--s8)}
.sek-hlava > * + *{margin-top:var(--s5)}
.zvyrazneni{color:var(--modr);font-weight:700}
/* Nadpis témat má i na širokých displejích držet dva řádky zalomené
   zhruba v polovině (laděno na nadpisu o 38 znacích, zlom po čtvrtém
   slově) — na plnou šířku byl jednořádkový a působil jako titulek novin,
   ne jako blok. 17ch je font-relativní, takže zlom drží na každém
   rozlišení; změřené pásmo správného zlomu je u nadpisu té délky 16 až
   18ch (19ch už posunulo zlom o slovo dál, 14ch o slovo dřív). Při jiné
   délce nadpisu pásmo ověřit znovu. Na mobilu (pod 561 px) se nechává přirozené
   zalomení sloupcem — 17ch by tam byl UŽŠÍ než sloupec a rozbil by
   ho na tři řádky. */
@media(min-width:561px){#kdo .sek-hlava h2{max-width:17ch}}
/* Zpátky na čistý text bez plochy — obdélníkový štítek (i bílý na
   modré, i světle modrý na tmavé) čte se jako label komponenta ze
   staršího webdesignu. Rozlišení nese barva a prostrkaná verzálka
   samotná, žádná krabička okolo. */
.stitek{color:var(--modr);margin-bottom:var(--s4);display:block}
/* Tři nosné rubriky (sekce témat, kroků a otázek)
   jako pilulka v hlavní modré s bílým textem — na přání zadavatele mají
   vystoupit z řady běžných štítků. Ostatní štítky zůstávají holé
   verzálky. */
.stitek--pilulka{display:inline-block;padding:var(--s2) var(--s4);
  border-radius:var(--r-pill);background:var(--modr);color:var(--w)}
/* MODRÉ ČÁRKY ODSTRANĚNY z celého webu na přání zadavatele. Byly nad
   štítkem sekce, nad štítkem programového bodu, nad nadpisem formuláře,
   vlevo od kickeru v úvodu a vlevo od echa odeslané otázky. Rozlišení
   nese samotná mikrotypografie — prostrkané verzálky v modři jsou
   dostatečně odlišené i bez pruhu. */

/* Šedá je pryč ze všech světlých sekcí — jen bílá, tmavá a modrá zůstávají
   jako barevné plochy. .na-sede je teď stejná bílá jako .na-bile; jméno
   třídy zůstalo (mění se přes ni layout, ne barva), ale barvu nenese. */
.na-bile{background:var(--bila)}
.na-sede{background:var(--bila)}
.na-modre{background:var(--modr);color:var(--w)}
.na-modre .stitek{color:var(--w)}
.na-modre .t-body,.na-modre .t-lead{color:var(--w-dim)}
.na-tmave{background:var(--tmava);color:var(--w)}
/* Štítky na tmavé v modré Z IKON (--modr-ik) — plná hlavní modrá byla na tmavé
   moc tmavá a bílá zase žádný akcent; tahle střední modrá je táž, jakou
   nesou nakreslené ikony karet, takže nejde o novou barvu navíc. */
.na-tmave .stitek{color:var(--modr-ik)}
.na-tmave .t-body,.na-tmave .t-lead{color:var(--w-dim)}

/* tři poměry pro celou stránku, jedna mezera */
.poradna,.otazky-hlava,.otazky{display:grid;column-gap:var(--kol-gap)}
.poradna{grid-template-columns:var(--kol-7-5)}
.otazky-hlava{grid-template-columns:var(--kol-7-5)}
/* Celá sekce na světlé šedé: bílá plocha kolem krátkého akordeonu
   působila prázdně. Na šedé dostanou bílé karty i bílá pole formuláře
   obrys plochy a sekce se opticky zaplní. */
#otazky{background:var(--seda)}
/* Užší levý sloupec, širší akordeon — poměr z referenčního vzoru.
   Dvě řádky mřížky: nahoře vlevo úvod (pilulka, nadpis, odstavec),
   pod ním formulář; akordeon sedí ve DRUHÉ řádce vedle formuláře
   a středí se VŮČI NĚMU (align-self:center), ne vůči celému sloupci
   i s nadpisem — přesně tak to zadavatel chtěl. */
.otazky{grid-template-columns:minmax(0,5fr) minmax(0,7fr);
  align-items:start;row-gap:var(--s6)}
.otazky-uvod{grid-column:1;grid-row:1}
.otazky .formular-panel{grid-column:1;grid-row:2;align-self:start;width:100%}
/* Seznam se NEcentruje živě přes align-self — při rozbalení odpovědi by
   se celý přepočítal a poskočil. Kotví ho jednorázový margin-top, který
   po načtení spočítá page.js tak, aby SLOŽENÝ seznam seděl uprostřed
   výšky formuláře; rozbalená odpověď pak roste jen SMĚREM DOLŮ. */
.otazky .faq-seznam{grid-column:2;grid-row:2;align-self:start}
.otazky-uvod > h2{margin-top:var(--s5)}
.otazky-uvod > .t-lead{margin-top:var(--s5);font-size:15px;line-height:1.65;
  color:var(--ink-dim);max-width:46ch}

/* ── FAQ AKORDEON (podle referenčního vzoru) ─────────────────────────
   Položka = zaoblená světlá karta; řádek otázky nese kulaté modré
   tlačítko se šipkou, odpověď se rozbaluje pod ním. Výška se animuje
   trikem grid-template-rows 0fr→1fr — jediný způsob, jak plynule
   rozbalit obsah neznámé výšky bez měření v JS. */
/* Barevná řeč akordeonu = řeč zbytku webu: klidná šedá karta, na
   hover se ohlásí vlasovým obrysem, OTEVŘENÁ karta zbělá, dostane
   modrý vlasový obrys a měkký stín — stejné „vystoupení z plochy",
   jakým mluví dlaždice a panely jinde. Otázka otevřené karty se
   přebarví do hlavní modré. */
.faq-pol{border:var(--line) solid var(--linka);border-radius:16px;
  background:var(--bila);overflow:hidden;
  transition:background .25s var(--ease),border-color .25s var(--ease),
  box-shadow .25s var(--ease)}
@media(hover:hover){.faq-pol:not(.otevrena):hover{border-color:var(--pole-linka)}}
/* OTEVŘENÁ karta je plná hlavní modrá s bílým textem (referenční vzor) —
   jediná sytá plocha v seznamu, nejde přehlédnout, která odpověď se čte. */
.faq-pol.otevrena{background:var(--modr);border-color:var(--modr);
  box-shadow:var(--stin)}
.faq-pol.otevrena .faq-ot{color:#fff}
.faq-pol.otevrena .faq-text{color:rgba(255,255,255,.88)}
.faq-pol.otevrena .faq-meta{color:rgba(255,255,255,.62)}
.faq-pol.otevrena .faq-meta b{color:#fff}
.faq-pol.otevrena .faq-sip{background:#fff;color:var(--modr)}
.faq-ot:focus-visible{outline:3px solid var(--modr);outline-offset:-3px;
  border-radius:16px}
.faq-pol + .faq-pol{margin-top:var(--s4)}
.faq-ot{display:flex;align-items:center;justify-content:space-between;
  gap:var(--s4);width:100%;padding:18px var(--s5);cursor:pointer;
  text-align:left;font-family:inherit;font-size:17px;font-weight:600;
  letter-spacing:-.01em;line-height:1.35;color:var(--ink)}
.faq-sip{flex:none;width:32px;height:32px;border-radius:50%;
  background:var(--modr);color:#fff;display:flex;align-items:center;
  justify-content:center;transition:transform .3s var(--ease),
  background .2s var(--ease)}
.faq-sip svg{width:13px;height:13px;fill:none;stroke:currentColor;
  stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
/* Hover ztmavuje kolečko jen na ZAVŘENÝCH kartách — na otevřené modré
   kartě musí kolečko zůstat bílé (tmavě modrá na modré vypadala špatně). */
@media(hover:hover){
  .faq-pol:not(.otevrena) .faq-ot:hover .faq-sip{background:var(--modr-tm)}
  .faq-pol.otevrena .faq-ot:hover .faq-sip{background:#fff;color:var(--modr)}
}
.faq-pol.otevrena .faq-sip{transform:rotate(180deg)}
/* Výšku rozbalení animuje JS přes pevné px (viz page.js): přechod
   grid-template-rows 0fr→1fr část mobilních prohlížečů neumí plynule
   a rozbalení tam SKÁKALO. height v px umí animovat všechno. */
.faq-telo{height:0;overflow:hidden;
  transition:height .42s var(--ease)}
/* Obsah se nevytahuje jen výškou — zároveň se prolne a dojede pár pixelů
   shora. Bez toho vypadá text během rozjezdu jako přiskřípnutý pod
   hranou; s prolnutím je vidět odpověď, ne posouvající se pruh.
   Otevírání má malé zpoždění (text nabíhá, až je pro něj místo),
   zavírání ho nemá — text zmizí dřív, než se karta stihne sesypat. */
.faq-telo-in{min-height:0;opacity:0;transform:translateY(-5px);
  transition:opacity .2s var(--ease),transform .2s var(--ease)}
.faq-pol.otevrena .faq-telo-in{opacity:1;transform:none;
  transition:opacity .34s var(--ease) .07s,transform .34s var(--ease) .07s}
.faq-text{padding:0 var(--s5);color:var(--ink-dim);
  font-size:14.5px;line-height:1.65}
.faq-text + .faq-text{padding-top:var(--s3)}
.faq-meta{display:block;padding:var(--s3) var(--s5) var(--s4);
  font-size:12.5px;color:var(--pole-linka-h)}
.faq-meta b{font-weight:700;color:var(--modr)}

/* Stránkování odpovědí (page.js): ‹ 01 / 02 › pohromadě uprostřed pod
   seznamem. Šipky JSOU kolečka karet (.faq-sip) — plná hlavní modrá, bílá
   šipka, 32 px, tentýž hover —, jen otočené do stran. Žádná linka ani
   popisek. Čítač jedním tónem: zvýrazněné aktuální číslo vedle šedého
   celkového působilo nesourodě.
   Skrytá položka zůstává v DOM jako soused, takže první viditelná karta
   na další stránce by bez pravidla s [hidden] dostala horní mezeru. */
.faq-nav{display:flex;align-items:center;justify-content:center;gap:var(--s3);
  margin-top:var(--s5)}
.faq-pol[hidden] + .faq-pol{margin-top:0}
.faq-pocitadlo{min-width:4.5ch;text-align:center;font-size:14px;font-weight:600;
  letter-spacing:.02em;color:var(--ink-dim);font-variant-numeric:tabular-nums}
.faq-pocitadlo b{color:inherit;font-weight:inherit}
.faq-sipka{position:relative;width:32px;height:32px;flex:none;border:0;
  border-radius:var(--r-pill);display:flex;align-items:center;justify-content:center;
  background:var(--modr);color:#fff;cursor:pointer;touch-action:manipulation;
  transition:background .2s var(--ease),opacity .2s var(--ease),transform .1s var(--ease)}
/* dotyková plocha 44 px, viditelné kolečko zůstává 32 px jako na kartách */
.faq-sipka::before{content:'';position:absolute;inset:-6px;border-radius:inherit}
.faq-sipka svg{width:13px;height:13px;fill:none;stroke:currentColor;
  stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
@media(hover:hover){
  .faq-sipka:not([aria-disabled="true"]):hover{background:var(--modr-tm)}
}
.faq-sipka:not([aria-disabled="true"]):active{transform:scale(.94)}
/* Krajní (neaktivní) šipka: ne vybledlá modrá, ale bílé kolečko s vlasovým
   obrysem a šedou šipkou — týž obrys, jaký mají karty. Obrys je vnitřní
   stín, takže kolečko zůstává přesně 32 px a nic neposkočí. */
.faq-sipka[aria-disabled="true"]{background:var(--bila);color:var(--pole-linka);
  box-shadow:inset 0 0 0 1px var(--linka);cursor:default}
.faq-sipka:focus-visible{outline:3px solid var(--modr);outline-offset:3px;box-shadow:none}

@media(prefers-reduced-motion:reduce){
  .faq-telo{transition:none!important}.faq-sip{transition:none}
  .faq-telo-in{transition:none!important;opacity:1;transform:none}
}

/* ── HLAVIČKA — plovoucí pilulka ────────────────────────────────────── */
/* ŽÁDNÝ will-change:transform na hlavičce ani pilulce — NIKDY. Zkusil se
   jako „zrychlení" scrollu a rozbil mobilní menu: will-change:transform
   dělá z prvku containing block pro position:fixed potomky, takže se
   .hl-menu-wrap (fixed, inset:0 — viz komentář u něj: musí ležet vůči
   VIEWPORTU, ne vůči pilulce) ukotvil k pilulce a panel se ořízl do ní.
   Plynulosti scrollu to navíc nepomohlo. */
#hlavicka{position:fixed;top:0;left:0;right:0;z-index:100;
  padding:var(--s4) var(--edge) 0;
  padding-top:calc(env(safe-area-inset-top,0px) + var(--s4));pointer-events:none}
.hl{display:flex;align-items:center;gap:var(--s2);
  width:max-content;max-width:100%;margin-inline:auto;pointer-events:auto;
  background:rgba(255,255,255,.88);
  backdrop-filter:blur(18px) saturate(1.4);-webkit-backdrop-filter:blur(18px) saturate(1.4);
  border:var(--line) solid var(--linka);
  border-radius:var(--r-pill);padding:var(--s2) var(--s2) var(--s2) var(--s5);
  box-shadow:var(--stin-plov)}
/* flex:none — bez toho se logo v úzké mobilní liště smrskává spolu
   s ostatními položkami. U textu by to jen zkrátilo řádek, ale znak
   loga má šířku auto (dopočítanou z poměru stran), takže smrsknutí
   jeho vlastního boxu obraz zdeformuje. Zmenšovat se má nav, ne logo. */
.hl-logo{display:inline-flex;align-items:center;gap:var(--s3);min-height:44px;flex:none;
  font-size:var(--t-cap);font-weight:800;letter-spacing:-.02em;white-space:nowrap;
  text-decoration:none;color:var(--ink);
  /* Bez svislé dělicí linky za logem — odstraněno na přání, rozestup
     stačí. (Mobilní pravidlo, které linku nulovalo, tím pádem jen
     neškodně přebíjí nuly.) */
  padding-right:var(--s3);margin-right:var(--s1)}
.hl-logo svg{width:24px;height:24px;fill:var(--modr);flex:none}
/* Varianta loga jako rastr (<img>) místo SVG znaku — s průhledným
   pozadím, výška ladí se SVG znakem. */
.hl-logo img.hl-logo-znak{width:auto;height:26px;display:block;flex:none}
/* Znak nemusí být čtvercový (původní měl poměr 70,9 : 100, vyšší než
   široký) — pevná šířka by ho zúžila nebo roztáhla. Šířka auto,
   výška daná. */
.hl-logo svg.hl-logo-znak{width:auto;height:26px}
/* Mimo .hl (viz komentář v HTML u #hl-menu-panel) — na desktopu úplně
   schovaný, na mobilu se stává celoobrazovkovým panelem. */
.hl-menu-wrap{display:none}
.hl-menu-btn{display:none}
.hl-nav{display:flex;gap:var(--s1)}
.hl-nav a{position:relative;display:inline-flex;align-items:center;min-height:44px;
  white-space:nowrap;padding:0 var(--s3);border-radius:var(--r-pill);
  text-decoration:none;color:var(--ink-dim);
  font-size:var(--t-cap);font-weight:500;
  transition:color .2s var(--ease),background .2s var(--ease)}
@media(hover:hover){.hl-nav a:hover{color:var(--ink);background:var(--seda)}}
.hl-nav a[aria-current="true"]{color:var(--modr);background:rgb(var(--kouzlo-rgb) / .08)}
.hl-cta{display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;
  padding:0 var(--s5);border-radius:var(--r-pill);background:var(--modr);color:#fff;
  font-size:var(--t-cap);font-weight:700;letter-spacing:var(--ls-txt);
  text-decoration:none;white-space:nowrap;flex:none;margin-left:var(--s2);
  transition:background .2s var(--ease),transform .1s var(--ease)}
.hl-cta:hover{background:var(--modr-tm)}
/* CTA sedí v desktopovém nav MEZI položkami (… předposlední odkaz · CTA ·
   poslední odkaz — pořadí na přání zadavatele). Selektor .hl-nav a (0,1,1) je
   silnější než .hl-cta (0,1,0), takže bez téhle přebíjky by pilulka
   zdědila šedý vzhled položky. Mobilní panel má vlastní kopii, kde CTA
   zůstává samostatně dole — tam tohle neplatí. */
.hl-nav a.hl-cta{padding:0 var(--s5);background:var(--modr);color:#fff;
  font-weight:700;margin-left:var(--s2)}
@media(hover:hover){.hl-nav a.hl-cta:hover{background:var(--modr-tm);color:#fff}}
.hl-cta:active{transform:scale(.97)}
.skip{position:absolute;left:var(--s2);top:var(--s2);z-index:200;transform:translateY(-200%);
  background:var(--modr);color:#fff;padding:var(--s4) var(--s5);border-radius:var(--r-s);
  text-decoration:none;font-weight:700;transition:transform .2s var(--ease)}
.skip:focus{transform:none}

/* ── HERO ─────────────────────────────────────────────────────────────
   Světlý úvod. Portrét je VÝŘEZ s průhledným pozadím a se spodkem
   zapečeným do bílé (images/hero-portret.webp); sekce i bílé části plátna
   jsou čistě bílé (--bila, #FFFFFF), takže fotka nikde nemá hranu a
   vytrácí se do plochy. Proto žádný rám ani stín.
   Motiv v pozadí leží pod tím jako náznak: zesvětlený, ne průhledný,
   aby v něm nebyla šedivá špína.
   Z úvodu editoru VF je převzatý kicker s LEVÝM PRUHEM (ne pilulka
   s tečkou — to je nejrozeznatelnější podpis šablony) a dvojice tlačítek.
   Naměřeno v předloze portrétu: temeno 4,6 %, zornice 34,8 %, ramena
   73,2 % — proto portrét nikdy nesmí do bloku širšího než čtverec. */
/* --bila (čistě bílá). Dřív tu žádná CSS proměnná neuměla přebít
   pixely zapečené v souborech samotných (portrét i městské plátno měly
   podklad #F9FAFD/#F9FBFC, ne čistou bílou) — na širokém desktopu, kde
   ta plocha kolem postavy i po stranách plátna tvoří velké souvislé
   pole, to bylo vidět jako ostrý obdélník. Opraveno přímo v obrazových
   souborech (jednorázový přepočet pixelů 25. 8., ne v CSS) — mají teď
   na těch místech skutečných (255,255,255), takže sekce a fotka
   konečně sedí na stejnou hodnotu, ne jen opticky blízkou. */
#hero{position:relative;overflow:hidden;padding:0;background:var(--bila)}

/* Plátno s motivem v pozadí úvodu (images/hero-platno.webp).
   HOTOVÉ PLÁTNO: snímek je vygradovaný v Photoshopu a má v sobě zapečenou
   geometrii, obě rozplynutí i krytí. CSS tu proto nemá masku, filtr, opacity
   ani blend. Postupně tu bylo všechno z toho — řetězec sepia→hue-rotate→
   saturate, dvě masky přes mask-composite, duotón blendem `color`,
   isolation:isolate a nakonec mix-blend-mode:multiply. Nic z toho už neplatí
   a nic z toho se sem nemá vracet: každá další vrstva efektu se ukázala jako
   místo, kde se to rozbije.
   Barva sekce je předpočítaná přímo v souboru (viz níže u .hero-mesto),
   takže bílá plátna JE čistá bílá #FFFFFF (= --bila) a snímek nemá hranu. */
/* ── SCÉNA: MĚSTO + POSTAVA JAKO JEDEN CELEK ─────────────────────────────
   Měřítko scény --s (velikost jednoho pixelu plátna) řídí VÝHRADNĚ výška
   sekce. Dřív město běželo na object-fit:cover, tedy na max(šířka, výška):
   při zúžení okna se přeškálovalo, kdežto postava viselá na výšce ne — a
   motiv v pozadí postavě ujel za rameno. Teď obojí visí na téže veličině, takže
   se nemůžou rozejít při žádné velikosti okna.
   Že šířku měřítko neřídí, nevadí: plátno má levou třetinu i spodek čistě
   bílé (změřeno: sloupce 0–640 a řádky 1448–1487 jsou přesně 255), takže
   na širokém monitoru není co odhalit — bílá vedle bílé. */
.hero-scena{position:absolute;inset:0;z-index:0;overflow:hidden;
  pointer-events:none;
  /* Měřítko se počítá z TÉŽE hodnoty, jakou má výška sekce — tedy přímo
     z min(93vh,890px) z .hero-in. Container query by dala totéž, ale tohle
     nic nezapíná a nezavádí do řetězce další zádrhel. Když se výška sekce
     v .hero-in změní, MUSÍ se změnit i tady, jinak se scéna rozejde.

     DRUHÁ MEZ JE ŠÍŘKA. Jen z výšky by postava na užším okně zabrala 71 %
     obrazovky a sazba by neměla kam — hlavní tlačítko leželo na postavě
     (na 1001 px o 172 px, a to už před posunem doleva). Dělitel je 2560,
     tedy šířka plátna: obě meze se přesně protínají na 1440 px, takže
     schválená kompozice zůstává na pixel stejná a mění se jen pod ní.
     Že plátno pak na užším okně nesahá k levému okraji, nevadí — jeho levá
     třetina je stejně bílá jako sekce. */
  --s:min(calc(min(93vh, 890px) / 1488), calc(100vw / 2560))}
/* PROČ decoding="sync" NA PLÁTNĚ (ve web.html) — nesahat na to.
   Snímek vnořený dvakrát do absolutně umístěných obalů s overflow:hidden
   se s decoding="async" v Chromiu nikdy nezkompozituje: element má správnou
   velikost i pozici, je načtený, viditelný, kresba do <canvas> z něj vrátí
   oblohu (55,94,142) — a přesto se nevykreslí vůbec nic. Portrét vedle něj
   se kreslil celou dobu právě proto, že sync má. Nepomohl z-index, pevné px
   místo calc(), jiné pořadí v DOM ani vypnutý blend; pomohlo jedině sync.

   ŽÁDNÝ mix-blend-mode. Dřív tu bylo multiply, aby čistě bílé plátno splynulo
   s podkladem sekce. Barva sekce je teď zapečená rovnou v souboru: bílé
   části plátna jsou čistá bílá #FFFFFF, stejná jako --bila, takže hrana
   snímku není vidět ani bez blendu. Výsledek je identický, jen o jednu
   křehkou vlastnost méně.

   Snímek zůstává v obalu a vyplňuje ho na 100 % — geometrii nese obal. */
.hero-mesto{position:absolute;top:0;right:0;z-index:0;overflow:hidden;
  width:calc(2560 * var(--s));height:calc(1488 * var(--s))}
.hero-mesto img{width:100%;height:100%;max-width:none;display:block}
/* Levý fade je ZAPEČENÝ přímo v souboru (hladká smoothstep rampa,
   plná bílá do px 500, čistá fotka od px 1750) — CSS závoje se zkoušely
   dvakrát a vždycky dělaly vlastní viditelný pruh. */

/* Spodní hrana sekce fotku dřív gilotinovala vodorovným řezem. Závoj ji
   rozpustí a končí bílou, takže na švu s další sekcí není barevný schod. */
/* Bílý závoj spodní hrany — POUZE PRO MĚSTO. Leží pod portrétem (z-index 1
   mezi fotkou města a postavou), ne nad ním. Nad portrétem tvořil DRUHÝ
   přechod: začínal výš než rozplynutí zapečené ve výřezu a zesvětloval sako
   i košili, takže se přes sebe kreslily dva fady s různým počátkem a bylo to
   vidět. Rozplynutí postavy si obstarává výhradně soubor portrétu images/hero-portret.webp. */
.hero-scena::after{content:'';position:absolute;left:0;right:0;bottom:0;z-index:1;
  height:clamp(120px,22%,220px);pointer-events:none;
  background:linear-gradient(180deg,rgba(250,251,253,0) 0%,
    rgba(252,253,254,.62) 44%,var(--bila) 74%,var(--bila) 100%)}

.hero-in{position:relative;z-index:4;display:flex;flex-direction:column;
  justify-content:center;
  min-height:min(93vh,890px);
  padding-block:calc(var(--hdr) + var(--s5)) var(--s6)}
/* Úvod na desktopu zabírá CELÉ okno. Sám je vysoký jen min(93vh,890px)
   (na té výšce visí měřítko scény), takže pod ním vykukovala horní hrana
   sekce #kdo. Po načtení to vidět nebylo — pilulka rubriky další sekce
   ještě čekala na nástup —, ale jakmile jednou nastoupila, svítila po
   návratu nahoru na spodním okraji okna a vypadalo to, že stránka
   nedojela až nahoru. Zbytek do výšky okna dorovná bílý okraj POD sekcí:
   marginem, ne paddingem, aby se scéna (inset:0) nenatáhla a nerozjelo se
   měřítko ani spodní závoj. Na mobilu je vykukující další sekce záměr
   (viz .hero-in v @media max-width:1000px), proto jen desktop. */
@media(min-width:1001px) and (orientation:landscape){
  #hero{margin-bottom:max(0px, calc(100vh - min(93vh, 890px)))}
}
/* 540 px — táž šířka levého sloupce jako v úvodu editoru. Širší sloupec
   dojel textem do fotky. */
.hero-text{min-width:0;max-width:540px}

/* POŘADÍ A POČET PRVKŮ PODLE ÚVODU EDITORU VF — a to je celý smysl téhle
   verze: kicker → titulek → jeden odstavec → dvě tlačítka. Čtyři bloky,
   nic víc. Předchozí verze měla šest (jméno, claim, odstavec, tlačítka,
   telefon, tři fakta) a právě z toho byla nepřehledná.
   Jméno se proto přesouvá do kickeru — přesně jak editor drží značku
   v řádku „VF REAL ESTATE · VIDEO EDITOR · 2026“ a velký titulek nechává
   pro tvrzení. Rok nebo datum jde do třetího segmentu téhož řádku. */
/* Tři modré webu mají v úvodu každá svou roli: světlá --modr-sv je pruh
   u kickeru (netextový prvek, na bílé má 3,04:1 — na text by nestačila),
   akcentní --modr nese kurzívu v titulku a druhé tlačítko, hluboká
   --tmava vyplňuje hlavní tlačítko a váže úvod na tmavé sekce pod ním. */
.hero-rada{display:inline-block;
  font-size:14px;font-weight:600;line-height:1.5;letter-spacing:.13em;
  text-transform:uppercase;color:var(--ink-dim)}
.hero-rada b{font-weight:800;color:var(--modr)}

/* Titulek nese TVRZENÍ, ne jméno. Druhý řádek kurzívou v akcentu — Geist
   má na Google Fonts skutečný italic, takže to není nakloněná antikva. */
/* Titulek úvodu musí vést nad nadpisy sekcí: ty vyrostly na 60 px a při
   70 px byl rozdíl 1,17:1, což se nečte jako hierarchie, ale jako chyba. */
/* Zmenšeno z clamp(40px,5.6vw,80px) — ten byl laděný na krátký titulek
   (jeden řádek, 24 znaků). Delší dvouřádkový titulek (19–23 znaků na
   řádek) se do stejného 540px sloupce při 80px přetékal na víc řádků.
   55px je změřený strop, kde se ještě obě řádky vejdou každá na jeden
   řádek při 540px šířce sloupce — řádky titulku proto držet do zhruba
   23 znaků. */
.hero-jmeno{margin-top:var(--s5);font-size:clamp(30px,4.4vw,55px);
  font-weight:800;line-height:1.0;letter-spacing:-.042em;color:var(--ink)}
.hero-jmeno .l1,.hero-jmeno .l2{display:block}
.hero-jmeno .l2{font-style:italic;color:var(--modr)}

/* Datum + závěrečná výzva — vlastní řádek pod titulkem, mikro-caps jako
   jinde na webu (kicker, patička). Na přání majitele webu v modré pilulce,
   ne jako holý text: v úvodu je to jediná informace s termínem a musí být
   vidět na první pohled. Pilulka NENÍ odkaz ani tlačítko — je to štítek,
   proto <span> v odstavci, žádný <a> ani <button>: nic by nedělal a jen
   by mátl klávesnici i odečítač obrazovky. */
/* Závěrečná výzva = POKRAČOVÁNÍ úvodního textu: stejný stupeň a řez
   jako zdůrazněná věta nad ní, jen v hluboké modři, aby
   uzavírala úvod jako druhý úder. Pilulkové pozadí i mikro-verzálky
   se zkoušely a byly zamítnuty — dělaly z věty tlačítko/štítek. */
.hero-volby{margin-top:var(--s4);font-size:var(--t-body);font-weight:700;
  line-height:var(--lh-body);color:var(--tmava)}

/* Širší sloupec (dřív 440px) — na 440 se text lámal po pár slovech
   a čtení působilo trhaně, „odseknuté" uprostřed věty. Na plnou šířku
   hero-text sloupce (540px) drží řádky delší a plynulejší. */
.hero-pod{margin-top:var(--s5);font-size:var(--t-body);line-height:var(--lh-body);
  color:var(--ink-dim);max-width:100%}
/* Bez tučného řezu — důraz věty nese hluboká modř, ne váha (tučné
   zamítnuto). Závěrečná výzva pod ní tučná zůstává. */
.hero-pod--dukraz{margin-top:var(--s4);color:var(--tmava)}
.hero-akce{display:flex;gap:var(--s3);flex-wrap:wrap;margin-top:var(--s6)}
/* Hlavní tlačítko v úvodu je hluboká modř, ne akcentní — odliší se tím od
   pilulky v liště a úvod dostane třetí barvu. */
.hero-akce .btn-1{background:var(--tmava)}
.hero-akce .btn-2{border-color:var(--modr);color:var(--modr)}
@media(hover:hover){
  .hero-akce .btn-1:hover{background:var(--modr)}
  .hero-akce .btn-2:hover{border-color:var(--tmava);color:var(--tmava)}
}

/* ── PORTRÉT ────────────────────────────────────────────────────────────
   Teď se používá VÝŘEZ, ne původní fotka: podklad už není prázdná bílá,
   ale plátno s motivem v pozadí, a bílé ateliérové pozadí by ho zakrylo
   přesně tam, kde stojí jeho dominanta. Postava před motivem navíc říká
   „jsem odsud“ —
   což je celá myšlenka téhle úvodní obrazovky.
   Ukotvený ke SPODNÍ HRANĚ CELÉ SEKCE, ne k buňce — proto sedí hlavou
   vysoko, stejně jako maskot v úvodu editoru. Dole se rozplyne, aby ho
   hrana sekce neusekla. Bez drop-shadow: ta na tomhle výřezu kreslí
   obdélníkový halo. */
/* Velikost podle předlohy od zadavatele (odměřeno z jeho překryvu na
   1854 px): výška ≈ 82 % sekce. Pravá hrana lícuje s VNĚJŠÍ osou stránky
   — tedy s okrajem 1280px wrapperu, ne s okrajem textu uvnitř něj. Držet
   ho u hrany OKNA znamenalo, že na širokém monitoru odplouval doprava;
   držet ho u okraje TEXTU ho naopak táhlo o --edge doleva do sazby. */
/* Postava se udává v PIXELECH PLÁTNA, ne v procentech sekce — tím je
   přibitá k městu. Čísla odpovídají schválené kompozici na 1440×837, kde
   jeden pixel plátna měřil 0,5625 px: výška 716 px = 1273, horní odsazení
   93 px = 165. Ukotvení je k pravému okraji, protože tam je ukotvené i
   plátno; vázat postavu na okraj 1280px obalu znamenalo, že se na širokém
   monitoru rozešla s motivem v pozadí.

   PRAVÉ ODSAZENÍ 215, ne 142. Původních 142 px plátna (80 px na 1440)
   odpovídalo starému ukotvení k okraji obalu — jenže to na širším okně
   rostlo s šířkou, takže po přepnutí na okraj okna postava opticky uskočila
   doprava. 215 ji vrací doleva na všech šířkách naráz.
   Výš už to nejde: mez určuje DRUHÉ TLAČÍTKO na okně 1280 px, kde se rameno
   postavy rozšiřuje doleva. Měřeno proti skutečné siluetě výřezu, ne proti obálce
   (ta je z velké části průhledná a lhala by): při 215 zbývá v nejtěsnějším
   místě 48 px, při 284 už jen 9 px a při 320 se text a postava překryjí. */
.hero-portret{position:absolute;z-index:2;
  top:calc(165 * var(--s));
  right:calc(215 * var(--s));
  height:calc(1273 * var(--s));
  width:auto;max-width:none}
/* ŽÁDNÁ MASKA NA PORTRÉTU — a ani žádný CSS fade.
   Světlé oblečení končilo pixely 182,162,142 (jas 165), tmavé 51,54,76
   (jas 55). Bílý závoj umí světlou barvu dotáhnout do bílé nenápadně, ale
   tmavou zvedne na 250 jen přes viditelnou šeď — proto u tmavého oblečení
   zůstala vidět hrana, kde fotka končí. Rozplynutí je proto zapečené přímo
   v souboru portrétu (images/hero-portret.webp, 1600×1600): barva přechází
   do bílé zhruba mezi řádky 1220–1465 a teprve pak, když je pixel už bílý,
   klesá alfa — až od řádku ~1483, na posledním řádku je nulová (změřeno PIL
   na schváleném portrétu i na zástupném). Nový portrét připravit stejně.
   Do té doby je oblečení krycí bílá, ne průhledná: krycí bílá město zakryje,
   průhledná ho pustí skrz a v oblečení prosvítalo pozadí. Alfa proto smí klesat
   jen tam, kde už závoj sekce dole drží město na čisté bílé (ta má proto
   dorazit na 100 % už ve 74 % své výšky, ne až na jejím konci). Poslední řádek
   je zcela průhledný a bílý zároveň — hrana neexistuje. Přechod je ROVNÝ;
   varianta se zakřivenou hranicí byla zamítnuta.
   Ve stejném kroku je odečtený bílý lem: okraj výřezu měl v sobě zapečené
   ateliérové pozadí (147,149,172 proti vnitřku 55,67,105), nad bílou to
   nebylo vidět, nad fotkou města ano. Barvu poloprůhledných pixelů proto
   nahrazuje barva nejbližšího krycího pixelu — ale JEN OD KRKU DOLŮ. Nahoře
   totiž poloprůhledné pixely nejsou znečištěné pozadí, ale jednotlivé prameny
   vlasů; přebarvit je znamená udělat z nich tvrdý obrys. První pokus to
   ignoroval a vlasy se rozešly s originálem o 38 stupňů jasu v průměru
   (max 228) na 16 tisících pixelech. Dělal to jednorázový skript mimo
   šablonu — nový portrét potřebuje stejnou úpravu přímo v souboru. */

/* ── TLAČÍTKA ───────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s3);
  min-height:56px;padding:0 var(--s6);border-radius:var(--r-pill);text-decoration:none;
  font-size:var(--t-ui);font-weight:700;letter-spacing:var(--ls-txt);
  transition:background .2s var(--ease),color .2s var(--ease),
             border-color .2s var(--ease),transform .1s var(--ease)}
.btn:active{transform:scale(.98)}
.btn-1{background:var(--modr);color:#fff}
.btn-2{border:var(--line) solid var(--pole-linka);color:var(--ink);background:var(--bila)}
@media(hover:hover){
  .btn-1:hover{background:var(--modr-tm)}
  .btn-2:hover{border-color:var(--modr);color:var(--modr)}
  .na-modre .btn-1{background:var(--bila);color:var(--modr)}
  .na-modre .btn-1:hover{background:var(--seda)}
  .na-tmave .btn-2{border-color:var(--line-t);color:var(--w);background:transparent}
  .na-tmave .btn-2:hover{border-color:var(--w);color:var(--w)}
}

/* ── PŘEDSTAVENÍ (sekce #kdo) ─────────────────────────────────────────
   Nad mřížkou je jen štítek sekce, nadpis patří DO levého sloupce.
   Textový blok se proti dlaždicím VYCENTRUJE na výšku — roztažení přes
   celou výšku s podpisem přišpendleným dolů (margin-top:auto) sice
   srovnalo obě hrany, ale uprostřed sloupce zůstala prázdná díra.
   ZÁMEK: žádná ikona v kolečku, žádné bílé pozadí pod textem v dlaždici. */
/* Oba sloupce lícují nahoře i dole: text se roztáhne na výšku skupiny
   dlaždic a podpis se přisadí ke spodní hraně (margin-top:auto). Se
   „start“ končil textový sloupec o kus výš a dvojice působila rozvázaně. */
/* Tři položky do dvou sloupců přes grid-template-areas, ne přes pořadí
   v DOM — uvod a zbytek sedí oba v levém sloupci pod sebou (přesně jako
   dřív jeden nedělený .kdo-text), dlaždice napravo přes obě řady. Na
   mobilu se stejné tři položky přeskládají do jednoho sloupce v pořadí
   uvod → dlaždice → zbytek (viz media query), aniž by se cokoli měnilo
   tady v HTML. */
.kdo-in{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);
  grid-template-areas:'uvod moz' 'zbytek moz';
  gap:var(--kol-gap);align-items:center;margin-top:var(--s5)}
.kdo-text--uvod{grid-area:uvod}
.mozaika{grid-area:moz}
.kdo-text--zbytek{grid-area:zbytek}
/* nadpis se musí vejít na jeden řádek — v 36 px měřil původní nadpis
   (19 znaků, dvě krátké věty) asi 321 px, sloupec 5/12 dává na 1440 px
   449 px */
/* max-width v ch drží zalomení krátkého nadpisu na dva řádky; <br> nejde
   použít, nadpis přesazuje splitLines z motion.js přes textContent. */
/* --s4, ne --s6: tahle sekce měla jako jediná na webu 32 px a rozcházela
   se se všemi ostatními nadpisy. */
.kdo-text h2{margin-bottom:var(--s4);max-width:9ch}
.kdo-text{min-width:0}
.kdo-uvod{font-size:clamp(19px,1.6vw,23px);font-weight:500;line-height:var(--lh-lead);
  letter-spacing:-.018em;color:var(--ink);max-width:32ch}
.kdo-uvod b{font-weight:600;color:var(--modr)}
/* Celý řádek mezi odstavci, ne 0,83. Bloky pak stojí samostatně místo aby
   splývaly do jednoho sloupce textu. */
.kdo-text p + p{margin-top:var(--s6)}
.kdo-text .t-body{color:var(--ink-dim);max-width:38ch}
/* p.kdo-podpis, ne .kdo-podpis: `.kdo-text p + p` má vyšší specificitu
   (0,2,1) a přebilo by tenhle margin. */
.kdo-text p.kdo-podpis{margin-top:var(--s6);padding-top:var(--s5);
  border-top:var(--line) solid var(--linka);
  font-size:var(--t-cap);color:var(--ink-dim)}
.kdo-podpis b{display:block;font-size:var(--t-ui);font-weight:700;
  letter-spacing:-.02em;color:var(--ink);margin-bottom:2px}

.mozaika{display:grid;gap:var(--s4);
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  grid-template-areas:'siroka siroka' 'skola fotbal'}
.dlazdice{position:relative;border-radius:var(--r);overflow:hidden;isolation:isolate;
  display:flex;align-items:flex-end;background:var(--tmava);min-height:min(40vh,340px)}
/* Dlaždice nese jen fotku jako sotva znatelnou texturu a text. Kresba tu
   byla, ale její výška se v toku přičítala k textu a dlaždice narostly
   z 340 na 392 px — rozešly se tím se sloupcem textu vedle. Kresby zůstaly
   jen u programových kroků, kde na ně je místo. */
.dlazdice > div{position:relative;z-index:2;color:#fff;padding:var(--s6)}
.dlazdice .t-micro{color:var(--w);display:block;margin-bottom:var(--s3)}
.dlazdice h3{font-size:clamp(21px,1.85vw,25px);font-weight:700;
  letter-spacing:-.028em;line-height:1.14}
.dlazdice p{margin-top:var(--s3);font-size:var(--t-cap);line-height:var(--lh-body);
  color:rgba(255,255,255,.88)}

.dlazdice--siroka{grid-area:siroka;min-height:min(34vh,300px)}
.mozaika .dlazdice:nth-of-type(2){grid-area:skola}
.mozaika .dlazdice:nth-of-type(3){grid-area:fotbal}
/* široká dlaždice nese o stupeň větší nadpis, ale musí zůstat pod .t-h2 */
.dlazdice--siroka h3{font-size:clamp(22px,2vw,27px)}
.dlazdice--siroka p{max-width:44ch}


/* ── PROGRAM — varianta A ─────────────────────────────────────────────
   Střídavé velké bloky: fotka a text vedle sebe, u sudých obráceně.
   Číslo sedí v modrém kolečku vedle rubriky. */
/* ── TEXTURA POD KRESBOU ──────────────────────────────────────────────
   Původní fotka se vrací, ale jen jako sotva znatelný podklad. Krytí samo
   o sobě nestačí: 5 % tmavé fotky na tmavě modré ploše nedá vůbec nic,
   protože obojí je tmavé. Proto SCREEN — ten zesvětluje, takže se z fotky
   propíšou jen světlé partie a vznikne z toho struktura, ne obraz. */
.dl-textura,.bod-textura{position:absolute;inset:0;z-index:0;
  width:100%;height:100%;object-fit:cover;pointer-events:none;
  filter:grayscale(1) contrast(1.15);
  mix-blend-mode:screen;opacity:.14}
.bod-textura{opacity:.11}

/* ── KRESBY ───────────────────────────────────────────────────────────
   Sedm vlastních ilustrací místo stock fotek. Bílá linka na navy ploše,
   akcent --modr-sv (ten smí být jen na tmavém podkladu). Dvě mřížky:
   200×150 pro viněty v dlaždicích, 560×385 pro programové desky — poměry
   těch slotů se liší a jednotný viewBox by se v každém ořezával jinak.
   Tloušťka tahu, zakončení a paleta jsou napříč všemi sedmi shodné; to
   dělá dojem jednoho autora, ne shodné číslo viewBoxu.
   Kresleno vlastní rukou schválně: Freepik/Storyset i Icons8 mají
   v podmínkách omezení pro některé druhy použití, a spor po spuštění
   webu je horší než odpoledne u křivek. */
.kresba .ob{fill:none;stroke:var(--w);stroke-width:2.6;
  stroke-linecap:round;stroke-linejoin:round;
  vector-effect:non-scaling-stroke}
.kresba .t{stroke-width:2.1}
/* Výplně v kresbách nesou PLNOU světlou modř — tutéž, jakou mají štítky
   v dlaždicích sekce představení.
   Ztlumení na 34 % z ní na tmavě modrém podkladu dělalo šedomodrou skvrnu
   a barva se v ničem neshodovala se zbytkem webu. */
.kresba .pl{fill:var(--modr-sv);opacity:1}
.kresba .pn{fill:var(--w)}
/* Kreslení tahu: pathLength="1" normalizuje délku každé cesty na jedničku,
   takže se dá animovat bez měření v JS. */
.kresba .ob{stroke-dasharray:1;stroke-dashoffset:1;
  transition:stroke-dashoffset 1.1s var(--ease)}
.kresba .pl{opacity:0;transition:opacity .7s var(--ease) .5s}
.V .kresba .ob,.odhal.V .kresba .ob{stroke-dashoffset:0}
.V .kresba .pl,.odhal.V .kresba .pl{opacity:1}
.kresba .hyb{animation:kresba-dychat 6s ease-in-out infinite}
@keyframes kresba-dychat{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@media(prefers-reduced-motion:reduce){
  .kresba .ob{stroke-dashoffset:0;transition:none}
  .kresba .pl{opacity:1;transition:none}
  .kresba .hyb{animation:none}
}

/* ── PROGRAM — střídavé bloky ─────────────────────────────────────────
   Bez číslování a bez svislé osy: pořadí bodů nenese žádnou informaci
   (nejsou to kroky v čase ani priority), takže číslice i linka byly jen
   grafika navíc — zkusmé 01–04 v obrysu se zadavateli nelíbilo a je
   pryč. Nese to střídání stran a vlasová linka mezi body. */
.bod{display:grid;grid-template-columns:var(--kol-6-6);
  column-gap:var(--s8);align-items:center;padding-block:var(--s8)}
.bod + .bod{border-top:var(--line) solid var(--linka)}
.bod:nth-child(even) .bod-foto{order:2}

.bod-foto{border-radius:var(--r);overflow:hidden;aspect-ratio:16/11;
  position:relative;box-shadow:var(--stin);background:var(--tmava);
  display:grid;place-items:center}
.bod-foto .kresba{width:100%;height:100%;display:block}
/* Ikona (vyřezaná ze společného archu ikon) jako popředí — vystředěná,
   přiměřeně velká (ne přes celou plochu), stejná role jako dřív měla
   ruční kresba. Plné tmavě modré pozadí ikony je VYŘÍZNUTÉ přímo
   v souboru (chroma-key skriptem, ne CSS trikem) — .png se skutečnou
   průhledností, takže fotka v pozadí (.bod-textura) je vidět přirozeně,
   beze zbytku po hranaté ploše ikony.
   PIXELY, NE CSS TRANSFORM: u ikon 1 a 2 byla kresba uvnitř
   1024×1024 plátna posazená o ~80 px níž než střed (ověřeno přes
   alpha-bbox v Pythonu) — žádné množství CSS zarovnání to nespraví,
   protože prohlížeč centruje OBDÉLNÍK OBRÁZKU, ne viditelný obsah
   uvnitř něj. Soubory jsou proto přeoříznuté přesně na obsah a znovu
   vysazené na čerstvé průhledné plátno se stejnou mezerou na všech
   stranách — obsah je teď v souboru samotném na střed, takže stačí
   obyčejné CSS centrování beze změny podle karty.
   POZICOVÁNO ABSOLUTNĚ + inset:0 + margin:auto, ne přes grid
   place-items: ikona je čtverec v obdélníkovém (16:11) boxu — ať už se
   škáluje podle šířky nebo výšky, na jedné ose vždy buď přeteče, nebo
   nedosáhne kraje, a grid v prvním případě spadl ze "safe" :center na
   :start (přilepené nahoru). max-width/max-height % + auto rozměry
   totéž vyřeší spolehlivě a je to od gridu úplně nezávislé. */
.bod-ikona-nova{position:absolute;inset:0;z-index:1;margin:auto;
  max-width:92%;max-height:92%;width:auto;height:auto;display:block}
/* Skutečné geometrické vystředění VIDITELNÉHO OBSAHU (ne plátna souboru)
   v obdélníku karty — u každé karty samostatně, žádná "referenční karta".
   Spočteno v Pythonu z alfa kanálu: střed bounding boxu neprůhledných
   pixelů vs. střed celého plátna, rozdíl převeden na % (translate % je
   vždy vůči VLASTNÍ velikosti prvku, proto to funguje i po škálování
   přes max-width/max-height výše). Třetí ikona má neprůhledný obsah
   posazený mimo střed plátna, ostatní už vycházejí ze skriptu vystředěné
   samy o sobě. U nových ikon posuny přepočítat, nebo ikony vystředit
   přímo v souboru. */
.bod:nth-child(3) .bod-ikona-nova{transform:translate(-0.59%,3.81%)}
/* Na výslovné přání ještě kousek výš oproti přesnému matematickému
   středu (ikony 1 a 2). */
.bod:nth-child(1) .bod-ikona-nova{transform:translate(-2%,0.6%)}
.bod:nth-child(2) .bod-ikona-nova{transform:translateY(-4.4%)}


/* Štítek kategorie — stejná modrá čárka jako nad nadpisem každé sekce. */
.bod-stitek{display:block;margin-bottom:var(--s4);
  font-size:13.5px;font-weight:700;letter-spacing:.15em;color:var(--ink)}
/* --modr-sv je vyhrazená POUZE pro tmavý podklad (nedostatečný kontrast
   na bílé) — tenhle štítek sedí na bílé kartě, proto plná --modr, ne
   modr-sv. Pořád ta „hezká modrá", jen bezpečná verze pro tohle pozadí. */
.bod-stitek--reseni{color:var(--modr)}

.bod-text h3{margin-bottom:var(--s4);font-size:clamp(22px,1.9vw,27px);
  font-weight:700;line-height:1.15;letter-spacing:-.03em}

/* Box s řešením uvnitř .bod-text — odděluje popis problému (prostá
   próza nad ním) od konkrétního návrhu. Tónovaná plocha + akcentní linka
   vlevo, stejná modř jako zbytek webu, ne nový barevný jazyk navíc. */
.bod-text .reseni{margin-top:var(--s5);padding:var(--s5) var(--s5) var(--s5) var(--s6);
  background:rgb(var(--kouzlo-rgb) / .05);border-left:3px solid var(--modr);
  border-radius:0 var(--r-s) var(--r-s) 0}
.reseni-stitek{display:block;margin-bottom:var(--s3);
  font-size:var(--t-ui);font-weight:800;letter-spacing:-.01em;color:var(--modr)}
.reseni p{font-size:var(--t-body);line-height:var(--lh-body);color:var(--ink-dim)}
.reseni p + p{margin-top:var(--s4)}

.popiska{display:block;margin-top:var(--s3);font-size:var(--t-cap);color:var(--ink-dim)}

/* ── KROKY — dvousloupcové rozvržení, 2×2 karty vlevo + text vpravo ────
   Podle vzoru z hlavního webu (foto-mřížka vlevo, kicker+nadpis+text
   vpravo, svisle vystředěné vedle sebe). Karty zůstávají tmavá dlaždice
   (stejný jazyk jako karty témat) — jen se teď otáčí: přední strana
   nese ikonu + nadpis, po najetí myší (desktop) nebo klepnutí (dotyk,
   přes .je-otevrena z motion.js) se ukáže zadní strana s odpovědí.
   Pevná výška karty, protože obě strany musí sdílet jeden box. */
.kroky-plocha{display:grid;grid-template-columns:var(--kol-6-6);
  column-gap:var(--kol-gap);align-items:center;margin-top:var(--s7)}
.kroky-text{margin-top:0}
.kroky{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s5)}

/* Otočná mechanika 1:1 podle .fc-card z hlavního webu (landing-body.ts):
   otáčí se JEDNA obálka (.krok-inner), ne každá strana zvlášť — to je to,
   co dřív dělalo rotaci "rozbitou nahoře" (dvě protiběžné rotace uvnitř
   společného perspective kontejneru se navzájem bily). K tomu stejná
   opacity-pojistka: backface-visibility:hidden je na mobilním Safari
   po vnoření do perspective+preserve-3d nespolehlivé (otočená strana
   prosvítala zrcadlově) — proto se každá strana navíc na druhou polovinu
   1,15s rotace natvrdo schová přes opacity.
   Výška NENÍ přes aspect-ratio — v Chromu (Opera/Chrome) se v kombinaci
   s otáčeným 3D potomkem (transform-style:preserve-3d) přepočítala špatně
   a otočená karta se zobrazila jen v polovině výšky ("půlkarta"). Místo
   toho klasický padding-top trik na ::before: čistě 2D box, který výšku
   určí NEZÁVISLE na tom, co se uvnitř otáčí. Čtvercový poměr (dřív 3:4)
   a nižší, ať karty zbytečně neroztahují sloupec. */
/* ŽÁDNÁ podkladová barva na .krok. Zkoušelo se to jako pojistka proti
   probliknutí, ale podklad se neotáčí — karta se pak během otáčení
   nezužovala do hrany a vypadalo to, že se točí jen obsah uvnitř
   nehybné dlaždice. Uživatel to zamítl. Probliknutí se řeší časováním
   (viz níž), ne podkladem.
   tap-highlight pryč zůstává: na Androidu tap na kartu jinak blikne
   světlým obdélníkem. */
.krok{position:relative;border-radius:var(--r);
  -webkit-tap-highlight-color:transparent;
  perspective:1400px;outline:none}
.krok::before{content:'';display:block;padding-top:108%}
/* PŘESNĚ podle předlohy z hlavního webu (.fc-inner v landing-body.ts):
   1,15 s a cubic-bezier(.65,0,.35,1). Zrychlená varianta (0,9 s a ostřejší
   křivka) se zkoušela kvůli probliknutí a byla zamítnuta — otočení musí
   být pomalé a plynulé, švih vypadá lacině. Probliknutí se řeší časováním
   krytí obou stran (viz níž), NE zkrácením pohybu. */
.krok-inner{position:absolute;inset:0;
  transition:transform 1.15s cubic-bezier(.65,0,.35,1);
  transform-style:preserve-3d;-webkit-transform-style:preserve-3d;will-change:transform}
/* isolation:isolate uzavírá mix-blend-mode fotky do téhle jedné strany.
   Bez toho se míchání řeší až v rodiči, který zároveň drží preserve-3d,
   a prohlížeč kvůli tomu 3D podstrom zplošťuje — právě to dělá z otáčení
   sérii překreslení celé karty. */
.krok-front,.krok-back{position:absolute;inset:0;border-radius:var(--r);
  overflow:hidden;isolation:isolate;
  backface-visibility:hidden;-webkit-backface-visibility:hidden}
.krok-back{transform:rotateY(180deg);-webkit-transform:rotateY(180deg)}
/* PŘEPNUTÍ STRAN UPROSTŘED OTOČENÍ. Předloha z hlavního webu přepíná
   obě strany skokem (0s .575s) — na tmavém pozadí hlavního webu se ten
   tvrdý střih ztratí, tady na světlé sekci byl vidět jako bliknutí.
   Místo skoku CROSSFADE 120 ms se středem přesně v půlce otočení
   (0,515 + 0,06 = 0,575 s = polovina z 1,15 s): odcházející strana měkce
   mizí, nastupující měkce nabíhá, obě přes sebe. Že by v prolnutí
   prosvítala odvrácená strana zrcadlově, hlídá backface-visibility —
   a v okně prolnutí je karta stejně natočená skoro hranou (zhruba
   75 až 105 stupňů, do ~40 px šířky). Symetrická křivka otočení znamená,
   že totéž časování platí pro oba směry — žádné směrové výjimky. */
.krok-front{transition:opacity .12s linear .515s}
.krok-back{opacity:0;transition:opacity .12s linear .515s}

@media(hover:hover){
  .krok:hover .krok-inner,.krok:focus-within .krok-inner{transform:rotateY(180deg)}
  .krok:hover .krok-front,.krok:focus-within .krok-front{opacity:0}
  .krok:hover .krok-back,.krok:focus-within .krok-back{opacity:1}
}
.krok.je-otevrena .krok-inner{transform:rotateY(180deg)}
.krok.je-otevrena .krok-front{opacity:0}
.krok.je-otevrena .krok-back{opacity:1}

/* ── PŘEDNÍ STRANA — stejná dlaždice jako .dlazdice/.dl-textura jinde na
   webu: plná tmavě modrá plocha, fotka jen jako sotva znatelná struktura
   (SCREEN + 14% krytí — stejné hodnoty jako .dl-textura), ne vlastní
   fotografický vzor jen pro tuhle kartu. */
.krok-front{display:flex;flex-direction:column;justify-content:center;
  color:var(--bila);background:var(--tmava)}
.krok-foto{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;display:block;pointer-events:none;
  filter:grayscale(1) contrast(1.15);mix-blend-mode:screen;opacity:.14}
/* SCREEN znamená, že tmavý pixel nepřidá NIC. Na kartách, kde má snímek
   tmavou spodní polovinu (dvě ze šesti fotek), proto struktura v dolní části
   karty zmizela úplně a vypadalo to, že fotka končí v půlce.
   Řešení je STLAČENÝ KONTRAST, ne zvednutý jas. Kontrast pod 1 stáhne
   tóny ke středu: černá se zvedne nad práh viditelnosti (a struktura je
   vidět i dole), zatímco světlá klesne, takže karta zůstane tmavě modrá.
   Zvednutý jas dělal pravý opak — světlé plochy vyskočily a z karty byla
   světle modrá fotka (zkoušeno brightness 2.2, zamítnuto).
   Krytí 0,11 je stejné jako u .bod-textura na kartách témat — obojí
   musí být stejně tmavé. Změřeno na snímcích: referenční karta má střední
   jas 49,1, tahle při 0,11 pak 49,7 (při 0,15 to bylo 53,2 a šlo to poznat). */
.krok-front .krok-foto{filter:grayscale(1) contrast(.62);opacity:.11}
/* Ikona + nadpis jako JEDNA jednotka uprostřed karty (ne ikona nahoře
   a text přilepený dole) — .krok-front sám centruje celý obsah, ikona
   nemá vlastní rostoucí zónu. */
.krok-ico-wrap{position:relative;z-index:1;display:flex;
  align-items:flex-end;justify-content:center;padding:0 var(--s4)}
/* Ikona musí být vidět HNED, ne až po scroll-reveal — .krok nesmí nést
   clip-path/transform (viz komentář u #hlavicka o will-change): jakákoli
   taková vlastnost na stejném prvku, který zároveň nese perspective pro
   otáčení karty, donutí prohlížeč zploštit 3D podstrom a karta se při
   rotaci useknutá zobrazí jen napůl. Ikony proto NEJSOU .odhal a jejich
   obrys/výplň se nespoléhá na .V třídu, kterou by jinak dodal scroll
   observer. */
.krok-ico{display:block;width:78%;height:auto;aspect-ratio:560/385}
.krok-ico .ob{stroke-width:3.4;stroke-dashoffset:0}
.krok-ico .ob.t{stroke-width:2.6}
.krok-ico .pl{opacity:1}
/* Ikony karet (vyřezané ze společného archu) — stejný princip jako
   u karet témat: čtvercové .png s vyříznutým tmavým pozadím (chroma-key
   skriptem), obsah přeoříznutý a znovu vysazený na střed čerstvého
   průhledného plátna, takže samotný soubor je už geometricky vystředěný
   a stačí obyčejné procentuální zvětšení bez transform hacků. */
.krok-ico-nova{display:block;width:74%;height:auto;margin:0 auto;
  transform:translateY(0%)}
.krok-front-body{position:relative;z-index:1;margin-top:var(--s2);padding:0 var(--s4);width:100%;
  box-sizing:border-box;text-align:center}
.krok-front-body .krok-rys{display:none}
.krok-rys{display:block;width:28px;height:3px;margin-bottom:var(--s3);
  background:var(--w);border-radius:2px}
.krok-front-body h3{font-size:17px;font-weight:700;letter-spacing:-.02em;line-height:1.25}
.krok-najet{position:absolute;z-index:1;left:0;right:0;bottom:var(--s4);
  text-align:center;font-size:9px;font-weight:700;
  letter-spacing:var(--ls-caps);text-transform:uppercase;color:rgba(255,255,255,.72)}
.krok-najet-tap{display:none}
@media(hover:none){.krok-najet-mys{display:none}.krok-najet-tap{display:inline}}

/* ── ZADNÍ STRANA — stejná fotková textura jako přední strana (jen
   krytí trochu vyšší, aby se karta při otočení necítila jako jiný
   materiál), vlastní krátký nadpis + odpověď místo holého odstavce. */
.krok-back{display:flex;flex-direction:column;justify-content:center;
  padding:var(--s5);box-sizing:border-box;color:var(--bila);
  background:var(--tmava)}
/* Stejné podání jako přední strana: stlačený kontrast zvedne TMAVÉ
   partie snímku nad práh viditelnosti — s výchozím kontrastem přes
   SCREEN se spodek fotky (tmavý u tmavších fotek) nepropsal vůbec
   a vypadalo to, že fotka končí v půlce karty a dole zbývá holý pruh. */
.krok-back .krok-foto{filter:grayscale(1) contrast(.62);opacity:.10}
/* Modře, ne bíle — na přání zadavatele; stejná modrá jako ostatní
   akcenty na tmavém podkladu (--modr-ik, ze stejné rodiny jako telefon
   a štítky v zápatí). */
.krok-back-stitek{position:relative;z-index:1;display:block;margin-top:0;margin-bottom:var(--s3);
  font-size:11.5px;font-weight:700;letter-spacing:var(--ls-caps);
  text-transform:uppercase;color:var(--modr-ik)}
.krok-back p{position:relative;z-index:1;font-size:14.5px;font-weight:700;line-height:1.6;color:rgba(255,255,255,.88)}
/* Ryska na zadní straně byla ZRUŠENA (na přání zadavatele): po otočení
   karty seděla nad štítkem jako škrtnutí a rozbíjela klid textu.
   Na přední straně je vypnutá odjakživa (.krok-front-body .krok-rys),
   takže .krok-rys teď nikde nesvítí — pravidlo výš zůstává jen proto,
   že span v přední straně v HTML pořád je. */

@media(max-width:900px){
  .kroky-plocha{grid-template-columns:1fr;row-gap:var(--s6)}
  .kroky-text{order:-1}
}
@media(max-width:560px){
  /* 2×2 zůstává i na mobilu — čtyři maličkosti mají působit jako sada,
     ne jako čtyři samostatné pásy přes celou šířku. Sloupec je pak ale
     jen ~160 px a odpověď na zadní straně má pevnou výšku karty, do které
     se musí vejít: karta jde proto na výšku (160 %), mezera mezi kartami
     se utáhne a písmo na obou stranách o kousek dolů. Nejdelší odpověď
     je ta, která tenhle poměr určuje — při jakékoli změně textu
     ověřit, že se pořád vejde. Pod 361 px už 2×2 nedává (viz níž). */
  .kroky{gap:var(--s4)}
  .krok::before{padding-top:160%}
  .krok-front-body h3{font-size:14px}
  .krok-back{padding:var(--s3)}
  .krok-back-stitek{font-size:9.5px;margin-bottom:var(--s2)}
  .krok-back p{font-size:11.5px;line-height:1.45}
  /* Ikona a nadpis jsou JEDNA jednotka na středu karty, ikona těsně nad
     textem. Zóna kolem ikony se proto nesmí roztahovat (flex:0 1 auto):
     s flex:1 spolkla celý zbytek karty na výšku, ikona se v ní vykreslila
     na střed a mezi ní a nadpisem zůstal prázdný pás. Ikona roste podle
     ŠÍŘKY karty; max-height je pojistka, kdyby se sestava nevešla —
     zmenší se místo toho, aby přetekla přes „Klepněte“. */
  .krok-ico-wrap{flex:0 1 auto;min-height:0;align-items:center}
  .krok-ico-nova{width:100%;height:auto;max-height:100%;object-fit:contain}
  .krok-najet{bottom:8px;font-size:8px}
}
/* 160 % je poměr pro nejužší sloupec, kde 2×2 ještě platí (361 px displej =
   153px karta). Změřené minimum je tam 140 %, ale s nulovou rezervou —
   160 % nechává přes 20 px, aby to nepadlo na jiném vykreslení písma. Od 401 px výš
   je sloupec širší, odpověď se láme do míň řádků a karta by při stejném
   poměru byla zbytečně vytáhlá (na 560px displeji 244×361). */
@media(min-width:401px) and (max-width:560px){
  .krok::before{padding-top:112%}
  /* Nižší karta = míň místa na výšku, ikona proto o kus menší, ať
     dvouřádkový nadpis nenaráží na „Klepněte“. */
  .krok-ico-nova{width:88%}
}
/* Nejužší telefony (320 px = sloupec 132 px): odpověď na zadní straně by
   se musela lámat po dvou slovech a při pevné výšce karty by se ořízla —
   na kartě s nejdelší odpovědí přetékala o 34 px nahoru i dolů. Tady se proto 2×2
   vzdává a karty jdou pod sebe na plnou šířku. */
@media(max-width:360px){
  .kroky{grid-template-columns:1fr;gap:var(--s5)}
  /* 68 % (poměr z širších mobilů) dávalo na 320px displeji kartu 280×190
     a nejdelší odpověď z ní čouhala o 11 px. 78 % je nejmenší poměr,
     do kterého se vejde. */
  .krok::before{padding-top:78%}
  .krok-front-body h3{font-size:17px}
  /* Na široké nízké kartě je 100 % šířky moc — sestava ikona + nadpis by
     narazila na „Klepněte“. */
  .krok-ico-nova{width:52%}
  .krok-back{padding:var(--s5)}
  .krok-back-stitek{font-size:11.5px;margin-bottom:var(--s3)}
  .krok-back p{font-size:14.5px;line-height:1.6}
}

.duo{position:relative;isolation:isolate}
.duo img{filter:grayscale(1) contrast(1.06) brightness(1.02)}
.duo::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(140deg,rgb(var(--kouzlo-rgb) / .55),rgba(0,158,219,.30));
  mix-blend-mode:multiply}

/* ── ŘADA ZNAKŮ (sekce s číslem) ────────────────────────────────────── */
.devatenact{display:grid;grid-template-columns:1fr auto;gap:var(--kol-gap);align-items:center}
.devatenact-cislo{font-size:clamp(96px,13vw,200px);font-weight:800;line-height:.8;
  letter-spacing:-.06em;color:transparent;-webkit-text-stroke:2px var(--modr-sv);opacity:.55}
.znaky{display:flex;gap:clamp(5px,.75vw,11px);align-items:flex-end;flex-wrap:wrap;
  margin-bottom:var(--s6)}
/* Šířka auto, výška pevná: znak nemusí být čtvercový (původní měl poměr
   70,9 : 100), pevných 40 × 40 by ho vodorovně roztáhlo.

   VELIKOST JE DANÁ TÍM, ŽE SE VŠECH DEVATENÁCT ZNAKŮ MUSÍ VEJÍT NA JEDEN
   ŘÁDEK. Sdělení zní „jeden z mnoha" — jakmile se řada zalomí, přestane
   se dát spočítat a obrázek nic neříká. Sloupec má na 1440 px 892 px;
   při výšce 44 px a mezeře 16,6 px potřebovala řada 897 px a lámala se
   o pět pixelů. Se stropem 41 px a mezerou 0,75vw vychází 764 px, na
   1024 px pak 542 px z dostupných 595. */
.znak{width:auto;height:clamp(26px,2.9vw,41px);fill:var(--w);opacity:.20;flex:none}
/* Zvýrazněný o čtvrtinu vyšší — v řadě devatenácti drobných znaků
   nestačí na odlišení jen barva. */
.znak--zvyrazneny{fill:var(--modr-sv);opacity:1;height:clamp(32px,3.6vw,51px)}

/* ── PORADNA (nevyužito, ponecháno pro pozdější použití) ──────────────── */
.poradna{align-items:center}
.poradna-kdy{display:flex;flex-direction:column;gap:var(--s3)}
.poradna-kdy div{display:flex;justify-content:space-between;gap:var(--s5);
  border-bottom:var(--line) solid rgba(255,255,255,.34);padding-bottom:var(--s3);
  font-size:var(--t-body)}
.poradna-kdy span:first-child{color:var(--w-mute)}
.poradna-kdy span:last-child{font-weight:700}

/* ── VEDENÍ — kdo za co odpovídá, procházení šipkami ───────────────────
   Jeden sloupec, barevně rozdělený na dva pásy misto dvou sekcí s velkou
   mezerou mezi sebou (proto padding-block:0 na #poradna — každý pás si
   nese svůj vlastní). Nahoře .na-modre (úvod), dole .na-tmave (role) —
   malý kicker (agenda) nad velkým jménem role, stejný princip jako
   "OBCHOD & VÝVOJ" → "Richard" v týmové sekci editoru, jen role místo
   osoby. --modr-sv smí nést akcent, protože dolní pás je tmavý podklad. */
.vedeni-sekce{padding-block:0}
/* Oba pásy stejně vysoké — ne podle toho, kolik má který zrovna textu
   (nahoře 3 řádky úvodu, dole nadpis role + 3 odrážky). Sdílená min-
   height + shodné odsazení na obou stranách. Horní pás (statický obsah)
   se smí svisle centrovat; dolní NE — jeho obsah se mění podle role
   (různě dlouhé odrážky), a se svislým centrováním by se při každém
   přepnutí posunul i řádek se jménem a šipkami o kus jinam. Proto dolní
   pás drží obsah PŘILEPENÝ NAHOŘE — mění se jen to, kolik prázdného
   místa zbyde pod odrážkami, ne pozice čehokoli nad nimi. */
.vedeni-pas{min-height:clamp(320px,32vw,420px);box-sizing:border-box;
  padding-block:var(--s8)}
.vedeni-pas--horni{display:flex;align-items:center}
.vedeni-uvod{max-width:56ch;margin-top:var(--s4)}
/* Všech pět rolí leží ve STEJNÉ buňce mřížky a neaktivní jsou jen
   neviditelné (visibility), ne vyjmuté z toku (display:none). Buňka tak
   má pořád výšku nejdelší role a tmavě modrý pás se při přepínání
   nezkracuje ani neprodlužuje — dřív byl u role s nejkratším textem kratší než u nejdelší.
   visibility:hidden zároveň schová skryté role čtečkám i klávesnici. */
.vedeni-panely{display:grid}
.role{grid-area:1 / 1;visibility:hidden}
.role.je-aktivni{visibility:visible}
.role-kicker{display:block;margin-bottom:var(--s3);color:var(--w)}
/* Šipky hned za jménem role, malá pevná mezera — ne roztažené přes
   celou šířku (space-between na 64ch dělalo u krátkých názvů
   rolí díru mezi textem a šipkami). Jméno má pevnou min-width
   Šipky POD jménem role, ne vedle něj — na přání zadavatele stejně na
   počítači jako na mobilu (vedle jména na desktopu poskakovaly podle
   délky slova a řešilo se to min-width kotvou; pod jménem sedí vždycky
   na stejném místě samy od sebe). */
.role-top{display:flex;flex-direction:column;align-items:flex-start;
  gap:var(--s4);margin-bottom:var(--s5)}
.role-jmeno{font-size:clamp(32px,3.4vw,48px);
  font-weight:800;line-height:1.05;letter-spacing:-.03em;color:var(--bila)}
.role-body{display:flex;flex-direction:column;gap:var(--s4);
  list-style:none;margin:0;padding:0;max-width:64ch;
  font-size:var(--t-body);line-height:var(--lh-body);color:var(--w-dim)}
.role-body li{padding-left:var(--s5);position:relative}
.role-body li::before{content:'';position:absolute;left:0;top:.65em;
  width:6px;height:6px;border-radius:50%;background:var(--w)}
.vedeni-nav{display:flex;align-items:center;gap:var(--s3);flex:none}
.vedeni-sipka{width:36px;height:36px;border-radius:50%;flex:none;
  border:var(--line) solid var(--line-t);background:transparent;color:var(--bila);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  touch-action:manipulation;transition:border-color .2s var(--ease),opacity .2s var(--ease)}
.vedeni-sipka .ico{width:17px;height:17px}
.vedeni-sipka--zpet .ico{transform:scaleX(-1)}
@media(hover:hover){
  .vedeni-sipka:hover{border-color:var(--bila);opacity:.75}
}
.vedeni-pocitadlo{font-size:13px;font-weight:700;letter-spacing:.04em;color:var(--w-mute)}
.vedeni-aktualni{color:var(--bila)}

/* ── OTÁZKY: hlava ──────────────────────────────────────────────────── */
/* Odsazení bylo na celou --sekce (až 128 px) a mezi hlavičkou a oběma
   panely zela díra — sekce působila prázdně. */
.otazky-hlava{align-items:end;margin-bottom:var(--s7)}
/* ── FORMULÁŘ ─────────────────────────────────────────────────────────
   PANEL V TMAVÉ MODŘI. Formulář je jediná akce v celé sekci, kdežto
   odpovědi vedle něj jsou doklad — dva bílé panely vedle sebe si
   konkurovaly a nebylo poznat, co se po člověku chce. Tmavá modř je táž
   plocha, jakou má sekce s řadou znaků i patička, takže to
   není nová barva na webu.

   ODESLÁNÍ JE PLNÁ HLAVNÍ MODRÁ (.f-odeslat, var(--modr)) s bílým textem
   (8,03:1). Naměřené kontrasty pro případnou změnu barev:
   · bílé tlačítko na panelu ............ 16,92:1
   · hlavní modrá plocha proti panelu ... 2,11:1 → proto je tlačítko přes
     celou šířku panelu a vysoké, aby se jako plocha nepřehlédlo
   · světlá modř jako plocha ............ 5,57:1, ale bílý text na ní
     jen 3,04:1, tedy pod hranicí pro text
   Akcentní barvou štítků na tmavé ploše zůstává světlá modř — týž vzorec
   jako pravidlo `.na-tmave .stitek`. */
/* Přilepené k horní hraně, ne vystředěné ve výšce okna. Vystředění ve
   100svh boxu vytvářelo nahoře prázdnou plochu, dokud panel „nedojel"
   do středu — vedle sloupce odpovědí, který začíná hned na vrcholu
   řádku, to působilo rozjeté a nehotové. Standardní přilepení k `top`
   drží panel v jedné ose se sloupcem odpovědí hned od začátku a samo se
   uvolní, až sloupec odpovědí dojede na konec. */
.formular-sloup{position:sticky;align-self:start;
  top:calc(var(--hdr) + var(--hdr-vule))}
.formular-sloup > *{width:100%}

/* Formulář = TMAVĚ MODRÁ karta (vrácena na přání), ale v moderním
   řezu: velké rohy, měkký stín, pole VYPLNĚNÁ průsvitnou bílou bez
   obtahu — obtah dostanou až fokusem. Drátěné rámečky zamítnuty. */
.formular-panel{position:relative;background:var(--tmava);color:var(--w);
  border:0;border-radius:20px;
  box-shadow:var(--stin);padding:clamp(22px,2vw,32px);overflow:visible;
  display:grid;grid-template-areas:'stav';align-items:start;
  transition:height .34s var(--ease)}
.formular-panel.je-hotovo{overflow:hidden}
.formular-panel.je-slozeno{overflow:visible;height:auto}
.formular-panel.je-slozeno .formular{display:none}
.formular-nadpis{grid-area:stav;align-self:start;color:var(--w);
  margin-bottom:var(--s6);position:relative;z-index:1}

.formular{grid-area:stav;position:relative;z-index:1;margin-top:0;
  display:flex;flex-direction:column;gap:var(--s4);padding:0;accent-color:var(--modr);
  transition:opacity .22s var(--ease),transform .22s var(--ease)}
.formular-panel.je-hotovo .formular{
  opacity:0;transform:translateY(-8px);pointer-events:none;visibility:hidden}

.f-dvojice{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4)}
.f-radek{display:flex;flex-direction:column;gap:var(--s3);position:relative;min-width:0}
/* Štítky drobnými prostrkanými verzálkami — táž mikrotypografie, jakou
   nese každý štítek na webu. */
.f-radek label{font-size:11px;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;
  line-height:1.35;color:rgba(255,255,255,.78)}

/* JEDNA BARVA NA STAV. Obtah i prstenec berou barvu z týchž dvou
   proměnných, takže když se stav změní, přebarví se obojí naráz. Dřív to
   byly nezávislé deklarace a stav přepsal jen jednu z nich — u modrého
   fokusu i u červené chyby proto zůstávala vidět původní bílá linka. */
.f-radek input,.f-radek textarea{
  --ram:transparent;
  --prsten:transparent;
  font-size:15px;font-weight:500;line-height:1.5;
  color:var(--w);background:rgba(255,255,255,.10);
  border:var(--line) solid var(--ram);
  box-shadow:0 0 0 3px var(--prsten);
  border-radius:var(--r-s);padding:14px 16px;width:100%;
  transition:background .16s var(--ease),border-color .16s var(--ease),
             box-shadow .16s var(--ease)}
.f-radek textarea{min-height:112px;max-height:60vh;resize:none}
.f-radek input::placeholder,.f-radek textarea::placeholder{
  color:rgba(255,255,255,.60);opacity:1}
@media(hover:hover){
  .f-radek input:hover,.f-radek textarea:hover{background:rgba(255,255,255,.15)}
}
/* Fokus: pole zbělá a dostane výrazný obtah s měkkým prstencem.
   Border-width se nemění, takže pole neposkočí. */
.f-radek input:focus,.f-radek textarea:focus,
.f-radek input:focus-visible,.f-radek textarea:focus-visible{
  outline:none;background:rgba(255,255,255,.16);
  --ram:rgba(255,255,255,.85); --prsten:rgba(255,255,255,.25)}
.f-radek input:-webkit-autofill,.f-radek input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--w);
  -webkit-box-shadow:0 0 0 100px #35214F inset;
  caret-color:var(--w)}
/* Chyba přebíjí i fokus — když je pole špatně vyplněné, má to být vidět
   i ve chvíli, kdy v něm člověk zrovna stojí. */
.f-radek input:user-invalid,.f-radek textarea:user-invalid,
.f-radek [aria-invalid="true"],
.f-radek input:user-invalid:focus,.f-radek textarea:user-invalid:focus,
.f-radek [aria-invalid="true"]:focus{
  --ram:#FF9AA3; --prsten:rgba(255,154,163,.30)}
/* Fajfka jen když je pole SKUTEČNĚ vyplněné a platné. Samotné
   :user-valid považuje prázdné pole za platné, takže po smazání obsahu
   fajfka zůstala svítit u prázdného řádku. :not(:placeholder-shown)
   znamená „něco v tom je". */
/* :valid, ne :user-valid. Fajfka má potvrzovat AKTUÁLNÍ tvar průběžně
   při psaní; :user-valid se spustí až po opuštění pole a navíc bere
   prázdné nepovinné pole jako platné — přesně proto zůstávala svítit
   u prázdného řádku poté, co se obsah smazal.
   :not(:placeholder-shown) je druhá pojistka: znamená „něco v tom je". */
.f-radek input[type="email"]:valid:not(:placeholder-shown) + .f-ok{
  opacity:1;transform:none}
/* Fajfka sedí v obalu jen kolem pole (bez štítku), takže je vždycky svisle
   uprostřed pole — na počítači i na mobilu, kde má pole jinou výšku.
   Pole má vpravo místo navíc, aby text nikdy nepodjel pod fajfku. */
.f-obal{position:relative;display:block}
.f-obal input[type="email"]{padding-right:46px}
.f-ok{position:absolute;right:var(--s4);top:50%;margin-top:-9px;width:18px;height:18px;
  fill:none;stroke:var(--w);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;
  pointer-events:none;opacity:0;transform:scale(.7);
  transition:opacity .18s var(--ease),transform .18s var(--ease)}

.f-zprava{display:flex;align-items:flex-start;gap:var(--s3);
  font-size:var(--t-ui);font-weight:500;line-height:1.45;
  border-radius:var(--r-s);padding:var(--s3) var(--s4);
  margin-top:calc(var(--s4) * -1 + var(--s3))}
.f-zprava[data-typ="chyba"]{background:rgba(255,179,185,.16);color:#FFD5D8;
  border:var(--line) solid rgba(255,179,185,.55)}
.f-zprava[data-typ="info"]{background:rgba(255,255,255,.14);color:var(--w);
  border:var(--line) solid rgba(255,255,255,.45)}
.f-zprava[hidden]{display:none}

/* TLAČÍTKO: plná hlavní modrá s bílým textem. */
.f-odeslat{
  display:flex;align-items:center;justify-content:center;gap:var(--s3);
  width:100%;min-height:54px;padding:0 var(--s6);
  background:var(--modr);color:#fff;border:0;border-radius:var(--r-pill);
  font-size:var(--t-ui);font-weight:700;letter-spacing:var(--ls-txt);
  cursor:pointer;position:relative;
  transition:background .2s var(--ease),transform .1s var(--ease)}
.f-odeslat .ico-btn{transition:transform .2s var(--ease)}
@media(hover:hover){
  .f-odeslat:hover{background:var(--modr-tm)}
  .f-odeslat:hover .ico-btn{transform:translateX(4px)}
}
.f-odeslat:active{transform:scale(.99)}
.f-odeslat:focus-visible{outline:3px solid rgba(255,255,255,.75);outline-offset:3px}
.f-odeslat[data-stav="odesila"]{background:var(--modr-tm);cursor:progress}
.f-odeslat[data-stav="odesila"]::after{
  content:'';width:16px;height:16px;border-radius:var(--r-pill);
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;
  animation:f-toc .7s linear infinite}
@keyframes f-toc{to{transform:rotate(1turn)}}

/* Honeypot: past na roboty. Musí být SKUTEČNĚ skrytý, ale ne display:none
   — to ho část botů pozná a pole vynechá. */
.hp{position:absolute !important;width:1px;height:1px;overflow:hidden;
  clip-path:inset(50%);white-space:nowrap;border:0;padding:0;margin:-1px}

.f-pozn{font-size:13px;line-height:1.55;color:rgba(255,255,255,.80)}
.f-pozn .ico{width:1.05em;height:1.05em;flex:none;stroke:rgba(255,255,255,.80);
  fill:none;stroke-width:2;margin-top:.15em}

/* Stav po odeslání. Leží ve stejné buňce mřížky jako formulář — ten odplave
   a poděkování připluje, takže návštěvník vidí, co odeslal. */
.f-hotovo{grid-area:stav;align-self:start;opacity:0;transform:translateY(8px);
  pointer-events:none;visibility:hidden;color:var(--w);
  transition:opacity .3s var(--ease) .1s,transform .3s var(--ease) .1s}
.formular-panel.je-hotovo .f-hotovo{opacity:1;transform:none;
  pointer-events:auto;visibility:visible}
.f-hotovo:focus{outline:none}
/* Formální potvrzení: odznak v hlavní modré s jemnou aurou místo zelené
   fajfky (zelená na midnight navy působila jako cizí barva), štítek
   drobnými verzálkami, citace dotazu s modrým pruhem — týž pruh nese
   kicker v úvodu — a podpis majitele webu pod vlasovou linkou. */
.f-hotovo-hlava{display:flex;align-items:center;gap:var(--s3);margin-bottom:var(--s5)}
.f-odznak{width:40px;height:40px;flex:none;border-radius:var(--r-pill);
  display:flex;align-items:center;justify-content:center;
  background:var(--modr);box-shadow:0 0 0 6px rgba(201,184,255,.20)}
.f-hotovo-stitek{color:var(--w-mute)}
.f-hotovo .t-h3{margin-bottom:var(--s3);color:var(--w)}
.f-hotovo .t-body{color:var(--w-dim)}
.f-fajfka{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:2.6;
  stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:26;stroke-dashoffset:26;
  transition:stroke-dashoffset .5s var(--ease) .2s}
.formular-panel.je-hotovo .f-fajfka{stroke-dashoffset:0}
.f-echo{margin:var(--s5) 0 0;padding:var(--s4) var(--s5);
  background:rgba(255,255,255,.06);
  border-left:var(--line-akcent) solid var(--modr-ik);
  border-radius:0 var(--r-s) var(--r-s) 0}
.f-echo figcaption{color:var(--w-mute);margin-bottom:var(--s2)}
.f-echo blockquote{margin:0;font-size:var(--t-cap);line-height:1.55;color:var(--w);
  overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.f-podpis{margin-top:var(--s5);
  display:flex;flex-direction:column;gap:2px;
  font-size:14px;line-height:1.45;color:var(--w-mute)}
.f-podpis b{color:var(--w);font-weight:700}
.f-znovu{margin-top:var(--s5);min-height:44px;padding:0 var(--s5);
  display:inline-flex;align-items:center;
  border:var(--line) solid var(--line-t);border-radius:var(--r-pill);
  background:transparent;color:var(--w);font:inherit;font-size:15px;font-weight:600;
  cursor:pointer;touch-action:manipulation;
  transition:border-color .2s var(--ease),background .2s var(--ease)}
@media(hover:hover){
  .f-znovu:hover{border-color:var(--w);background:rgba(255,255,255,.06)}
}
.f-znovu:focus-visible{outline:3px solid rgba(255,255,255,.75);outline-offset:3px;box-shadow:none}

/* ── PORADNA: ROZHOVOR ────────────────────────────────────────────────
   Ne chat. Bublinová konverzace byla slepá ulička — čte se jako Facebook
   a s řečí tohohle webu nemá nic společného. Web mluví vlasovými linkami,
   drobnými prostrkanými verzálkami s modrým pruhem a velkou sazbou.
   Poradna teď mluví stejně: je to tištěný rozhovor, ne okno messengeru.

   Otázka je NADPIS v plném stupni, ne text v bublině — je to nejsilnější
   věc v záznamu a má tak i vypadat. Odpověď drží akcentní linka vlevo:
   týž prvek, jaký nese štítek sekce i echo ve formuláři. */
/* Karta stála na šedé ploše sekce, teď je sekce bílá jako karta — bez
   vlastní hrany by splynula úplně a stín samotný na malém mobilním
   displeji nestačí. Tenký okraj drží tvar karty i bez barevného
   podkladu. */
.odpovedi{position:relative;background:var(--bila);border-radius:var(--r);box-shadow:var(--stin);
  border:var(--line) solid var(--linka);
  padding:clamp(24px,2.4vw,36px)}
/* Stejná kreslená ikona jako v tmavém formuláři, jen v akcentní modré
   na bílé — obě strany dvousloupce teď nesou stejný ilustrovaný podpis. */
.odpovedi-deco{position:absolute;z-index:0;right:12px;bottom:12px;
  width:140px;height:auto;pointer-events:none;opacity:.07}
.odpovedi-deco .ob{stroke:var(--modr);stroke-dashoffset:0}
.odpovedi-deco .pl{fill:var(--modr);opacity:1}
.odpovedi-hlava,#otazky-seznam{position:relative;z-index:1}
.odpovedi-hlava{display:flex;justify-content:space-between;align-items:baseline;
  gap:var(--s3);flex-wrap:wrap;
  padding-bottom:var(--s5);margin-bottom:var(--s7);
  border-bottom:var(--line) solid var(--linka)}
.odpovedi-hlava .t-micro{color:var(--ink-dim);font-size:var(--t-cap);
  letter-spacing:0;text-transform:none;font-weight:600}

.zaznam{padding:0;background:none;border:0;margin-top:var(--s8)}
.zaznam:first-of-type{margin-top:0}
/* Záznam, který zrovna prochází středem okna, vystoupí — zbytek trochu
   ustoupí. Při rolování dlouhým seznamem odpovědí to říká „tenhle teď
   čtete", aniž by na stránce přibyl jediný nový prvek. Jen opacita, bez
   škálování — velikost textu má zůstat stálá, mění se jen to, jak moc
   je vidět. */
/* Nástup a ústup mají záměrně jinou křivku, ne jen jinou třídu.
   --ease je ease-out (rychlý start, dlouhé dohasínání) — pro nástup
   do popředí to sedí, ale obráceně, při ústupu do pozadí, dělá většinu
   poklesu hned v první čtvrtině a zbytek se pak jen plazí — vypadalo to
   jako trhnutí, ne jako zesvětlování. Ústup proto běží pomaleji a po
   rovnoměrnější (lineární) křivce, ať je vidět celou dobu. */
.zaznam{opacity:.5;will-change:opacity;
  transition:opacity .9s linear}
.zaznam.aktivni{opacity:1;
  transition:opacity .45s var(--ease)}
@media(prefers-reduced-motion:reduce){
  .zaznam{opacity:1;transition:none}
}

/* Štítek tazatele. BEZ modrého pruhu: odsazoval jméno od levé osy, takže
   se rozešlo s otázkou pod ním a blok vypadal jako dvakrát zarovnaný.
   Teď stojí všechno — jméno, otázka i odpověď — na téže levé ose. */
.z-stitek{display:flex;align-items:baseline;gap:var(--s3);flex-wrap:wrap;
  margin-bottom:var(--s4)}
.z-kdo{font-size:var(--t-micro);font-weight:700;letter-spacing:var(--ls-caps);
  text-transform:uppercase;color:var(--modr)}
.z-datum{font-size:var(--t-micro);font-weight:600;color:var(--ink-dim)}
.z-datum::before{content:'·';margin-right:var(--s2);opacity:.55}

/* Otázka nese záznam, takže má stupeň nadpisu — ne velikost běžného textu
   v šedém obdélníku, jak to měla bublina. */
.z-otazka{font-size:clamp(20px,1.6vw,24px);font-weight:700;line-height:1.24;
  letter-spacing:-.028em;color:var(--ink);margin-bottom:var(--s5)}

/* Odpověď má vlastní plochu — slabý modrý nádech (3,5 % firemní modři,
   žádná šedá) se zaoblením. Původně to bylo jen levé odsazení; tahle
   podoba vznikla pro mobil, kde odpověď bez plochy splývala s bílým
   podkladem, a ukázalo se, že dává odpovědi tvar i na desktopu — otázka
   je nadpis, odpověď je blok, na obou velikostech stejným jazykem. */
.z-odpoved{background:rgb(var(--kouzlo-rgb) / .035);border-radius:var(--r-s);
  padding:var(--s4) var(--s5);margin-top:var(--s2)}
.z-text{font-size:var(--t-body);font-weight:400;line-height:var(--lh-body);
  color:var(--ink-dim);max-inline-size:62ch}
.z-text + .z-text{margin-top:var(--s5)}

/* Nástup jemný: text prosvitne, linka doroste. Žádné poskakování. */
.zaznam .z-stitek,.zaznam .z-otazka,.zaznam .z-text{
  opacity:0;transform:translateY(6px);
  transition:opacity .34s var(--ease),transform .34s var(--ease)}
.zaznam .z-otazka{transition-delay:.06s}
.zaznam .z-text{transition-delay:.12s}
.zaznam .z-odpoved{clip-path:inset(0 0 100% 0);
  transition:clip-path .5s var(--ease) .1s}
.zaznam.V .z-stitek,.zaznam.V .z-otazka,.zaznam.V .z-text{opacity:1;transform:none}
.zaznam.V .z-odpoved{clip-path:inset(0 0 0 0)}
@media(prefers-reduced-motion:reduce){
  .zaznam .z-stitek,.zaznam .z-otazka,.zaznam .z-text{opacity:1;transform:none;transition:none}
  .zaznam .z-odpoved{clip-path:none;transition:none}
}

/* ── KONTAKT + PATIČKA ──────────────────────────────────────────────── */
/* Dva sloupce, ne tři — třetí blok byl odstraněn a dva bloky v třísloupcové
   mřížce nechávaly vpravo prázdnou třetinu. */
.kontakt{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s8)}
.k-blok{display:flex;flex-direction:column;gap:var(--s3);align-items:flex-start}
/* Rubriky obou kontaktních bloků BEZ ikon — ikony u nich byly dvakrát předělané
   a pořád překážely. Jsou to tytéž prostrkané verzálky jako štítky sekcí
   (.stitek na tmavé = --modr-sv), takže kontakt mluví stejně jako
   zbytek webu. Rozlišení nese mikrotypografie, žádná dekorace. */
.k-blok .stitek{margin-bottom:0}
/* telefon a e-mail jsou dva nejdůležitější cíle na webu majitele
   a jako inline odkazy byly nejmenší (29 px a 24 px) */
.k-tel{display:inline-flex;align-items:center;min-height:48px;
  font-size:clamp(26px,3vw,42px);font-weight:700;letter-spacing:-.035em;
  color:var(--modr-ik);text-decoration:none;line-height:1.1}
.k-tel:hover{color:var(--w)}
/* E-mail a Facebook jako pilulkové kanály — stejný tvar (r-pill, vlasový
   okraj) jako tlačítka a štítky jinde na webu, ikona v pevném stupni
   18 px místo em-ové drobotiny u podtrženého textu. Jeden vizuální
   jazyk pro všechny kontaktní cíle. */
/* E-mail a Facebook jako tiché řádky: ikona v akcentní modré + bílý
   text, žádné ohraničení (pilulky s obrysem se zadavateli nelíbily —
   dělaly z kontaktů tlačítka, která nic nedělají). min-height drží
   48px dotykový cíl i bez krabičky. */
/* Těsně pod číslem, ať levý sloupec drží pohromadě a výškou odpovídá
   pravému (nadpis + datum + dvouřádkový odstavec). */
.k-kanaly{display:flex;flex-direction:column;align-items:flex-start;margin-top:0}
.k-kanal{display:inline-flex;align-items:center;gap:var(--s3);
  min-height:44px;color:var(--w);
  font-size:var(--t-body);font-weight:600;text-decoration:none;
  transition:color .2s var(--ease)}
.k-kanal .ico{width:19px;height:19px;color:var(--modr-ik);stroke-width:1.8;
  transition:color .2s var(--ease)}
.k-kanal:hover{color:rgba(255,255,255,.72)}
.k-radek{color:var(--w-dim);font-size:var(--t-body);line-height:var(--lh-body)}
/* Datum (termín) ve stejném stupni jako telefonní číslo v sousedním bloku,
   ať mají oba sloupce jednu kotvu a sekce nestojí na jedné noze. */
.k-datum{font-size:clamp(24px,2.6vw,36px);font-weight:700;letter-spacing:-.035em;
  line-height:1.1;color:var(--modr-ik)}
/* Číslo je schované ve větě pod datem, ne v odtrženém štítku — štítek s číslicí vedle
   data působil jako skóre a zadavateli se nelíbil. */
/* Jeden jediný řádek: podpis vlevo, copyright uprostřed, kredit vpravo.
   Grid 1fr auto 1fr — krajní sloupce stejně široké, takže © sedí na
   skutečném středu stránky, ne na středu zbylého místa. Řada znaků
   se zkoušela a byla zamítnuta; patka je schválně nízká. */
/* Dva modré pruhy dole: kontakt v hlavní modré, patka pod ním v hluboké
   tmavé — rozlišení nese jen barva, žádná linka. (Původně obráceně,
   prohozeno na přání.) */
#patka{background:var(--tmava);color:var(--w);padding-block:var(--s5)}
.patka-radek{display:grid;grid-template-columns:1fr auto 1fr;
  align-items:center;gap:var(--s5)}
.patka-radek .patka-kredit{justify-self:end}
.patka-copy{justify-self:center;text-align:center;
  color:var(--w-dim);font-size:13px;line-height:1.6}
.patka p{color:var(--w-dim);font-size:13px}
/* Podpis — týž lockup jako logo v hlavičce, jen na tmavé a s podtitulkem. */
.patka-podpis{display:inline-flex;align-items:center;gap:var(--s4);
  color:var(--w);white-space:nowrap}
/* Znak v patce v modré z ikon — detail akcentní modré na tmavé. */
.patka-podpis svg{width:auto;height:40px;fill:var(--modr-ik);flex:none}
.patka-podpis .patka-znak{width:auto;height:40px;display:block;flex:none}
.patka-jmeno{display:flex;flex-direction:column;gap:2px;
  font-size:18px;font-weight:800;letter-spacing:-.02em;line-height:1.2}
.patka-jmeno small{font-size:12.5px;font-weight:500;letter-spacing:0;
  color:var(--w-dim);white-space:normal}
/* Kredit tvůrce — tichá poznámka, ne prvek: celé v tlumené bílé a
   drobném stupni, jen jméno nese vlasové podtržení a na hover se přebarví.
   min-height 44px drží dotykový cíl i u takhle malého odkazu. */
.patka-kredit{display:inline-flex;align-items:center;gap:var(--s1);
  font-size:13px;color:var(--w-mute);white-space:nowrap}
.patka-kredit a{display:inline-flex;align-items:center;min-height:44px;
  font-weight:600;color:var(--w-mute);text-decoration:underline;
  text-decoration-color:rgba(255,255,255,.28);text-underline-offset:4px;
  text-decoration-thickness:1px;
  transition:color .2s var(--ease),text-decoration-color .2s var(--ease)}
.patka-kredit a:hover{color:var(--w);text-decoration-color:var(--w)}

/* ── SOUHLAS S COOKIES ──────────────────────────────────────────────────
   Plovoucí karta v rohu, ne pruh přes celou šířku dole — týž princip
   jako pilulka menu v hlavičce (blur, jemný okraj, plné zaoblení), ale
   v TMAVÉ modři, ne bílá. Bílá karta na světlém hero pozadí byla první
   věc, která na obrazovce svítila — přesně to, co si zadavatel nepřál
   („ať to nekazí první dojem"). Tmavá splyne s klidem webu a čeká na
   svůj moment. Jeden řádek — ikona, věta, dvě tlačítka vedle sebe —
   ne vysoká karta s textem nad tlačítky. */
.cookies{position:fixed;left:var(--s4);right:var(--s4);bottom:var(--s4);z-index:90;
  max-width:720px;margin-inline:auto;
  background:rgb(var(--ink-rgb) / .94);color:var(--w);
  backdrop-filter:blur(18px) saturate(1.4);-webkit-backdrop-filter:blur(18px) saturate(1.4);
  border:var(--line) solid var(--line-t);border-radius:var(--r-pill);
  box-shadow:var(--stin-plov);padding:var(--s3) var(--s3) var(--s3) var(--s5);
  display:flex;align-items:center;gap:var(--s4);
  /* will-change: karta má backdrop-filter (rozostření všeho pod sebou).
     Bez vlastní kompozitní vrstvy prohlížeč při KAŽDÉM kroku transformace
     přepočítává i to rozostření pozadí znovu — to je přesně to, co dělalo
     odchod trhaný, ne animaci samotnou. Se svou vrstvou se rozostření
     spočítá jednou a transform/opacity nad ním pak jen skládá GPU. */
  will-change:opacity,transform;
  opacity:0;transform:translateY(16px);transition:opacity .3s var(--ease),transform .3s var(--ease)}
.cookies.je-videt{opacity:1;transform:none}
/* Odchod: rovnoměrná (lineární) křivka, ne --ease. --ease je ease-out —
   rychlý start, dlouhé dohasínání — a při ZMENŠOVÁNÍ/MIZENÍ dělá většinu
   pohybu hned na začátku, zbytek pak jen doplouvá. Přesně tohle dřív
   dělalo trhaný dojem u zvýraznění odpovědi v poradně (viz .zaznam) a
   platí to i tady. Lineární tempo je vidět stejně po celou dobu. */
.cookies.mizi{opacity:0;transform:translateY(10px) scale(.97);
  transition:opacity .4s linear,transform .4s linear}
/* .cookies{display:flex} má STEJNOU specificitu jako nativní pravidlo
   prohlížeče `[hidden]{display:none}` (třída vs. atribut, obojí 0-1-0) —
   a při shodné specificitě vyhrává autorské CSS nad UA stylesheetem, ne
   pořadí v souboru. Bez tohohle pravidla teda `display:flex` platilo,
   i když měla karta `hidden`, a neviditelná (opacity:0), ale pořád
   position:fixed a klikatelná lišta ležela dál přes cokoli pod sebou —
   přesně proto nešel na mobilu otevřít odkaz na Instagram v patičce, po
   odmítnutí/přijetí ho neviditelně překrývala. `[hidden]` teď dostává
   vlastní pravidlo s vyšší specificitou (třída + atribut), aby doopravdy
   vyhrálo. Odchozí animace (.mizi) tím není dotčená: `hidden` se nastaví
   JS až PO jejím doběhnutí. */
.cookies[hidden]{display:none}
.cookies > .ico{width:20px;height:20px;stroke:var(--w);flex:none}
.cookies p{flex:1;min-width:0;font-size:var(--t-cap);line-height:1.4;
  color:var(--w-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cookies-tl{display:flex;gap:var(--s2);flex:none}
/* Vlastní tlačítka, ne .btn — .btn má 56px pro plnou šířku sekce,
   tady je potřeba nízké a úzké, ať se celý pruh vejde na jeden řádek. */
.cookies-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:40px;padding:0 var(--s4);border-radius:var(--r-pill);
  font-size:13px;font-weight:700;white-space:nowrap;border:0;cursor:pointer;
  transition:background .2s var(--ease),color .2s var(--ease),
             border-color .2s var(--ease),transform .1s var(--ease),opacity .2s var(--ease)}
.cookies-btn:active{transform:scale(.97)}
.cookies-btn--duch{background:transparent;color:var(--w-mute);
  border:var(--line) solid var(--line-t)}
.cookies-btn--duch:disabled{opacity:.4;cursor:default}
.cookies-btn--plny{background:var(--w);color:var(--tmava)}
@media(hover:hover){
  .cookies-btn--duch:hover{border-color:var(--w);color:var(--w)}
  .cookies-btn--plny:hover{background:var(--seda)}
}
/* Fajfka: schovaná (šířka 0) do chvíle, než klik přidá .je-potvrzeno —
   pak se za sebou (šířka se otevře, tah se domaluje) vykreslí stejným
   jazykem jako fajfka odeslaného formuláře (.f-fajfka). stroke:currentColor,
   ať jde barvou s textem tlačítka i ve stavu :hover. */
.cookies-fajfka{width:0;height:16px;flex:none;fill:none;stroke:currentColor;
  stroke-width:3;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:26;stroke-dashoffset:26;opacity:0;
  transition:width .2s var(--ease),opacity .15s var(--ease)}
#cookies-prijmout.je-potvrzeno .cookies-fajfka{width:16px;opacity:1;
  transition:width .2s var(--ease),opacity .15s var(--ease),
             stroke-dashoffset .35s var(--ease) .1s;
  stroke-dashoffset:0}
#cookies-prijmout.je-potvrzeno{background:var(--w)}
@media(max-width:640px){
  /* Plovoucí karta, ne pruh přes celou šířku — max-width + auto okraje
     ji drží užší než displej a vycentrovanou, i na 320px zůstává vidět
     kus pozadí po obou stranách. Celá věta se čte normálně (zalomí se
     na dva řádky), tlačítka mají vlastní řádek pod ní. Zaoblení karty
     je --r (stejné jako u ostatních karet na webu), NE pilulka — na
     kartě, která takhle roste do výšky, dělá pilulkový poloměr z rohů
     pokřivený balónek. */
  .cookies{left:var(--s4);right:var(--s4);bottom:var(--s3);
    max-width:380px;margin-inline:auto;
    flex-wrap:wrap;align-items:flex-start;
    padding:var(--s4);border-radius:var(--r);gap:var(--s3)}
  .cookies > .ico{margin-top:2px}
  .cookies p{white-space:normal;font-size:13px}
  .cookies-tl{flex-basis:100%;gap:var(--s3)}
  .cookies-btn{flex:1}
}

@media(max-width:560px){
  /* Podpis nahoře na středu; © a kredit VEDLE SEBE na posledním řádku
     (přání zadavatele) — na 335px sloupci se vejdou jen zmenšené na
     10,5 px. Žádný nový obal v HTML: © jde do levé buňky, kredit do
     pravé, podpis se roztáhne přes obě. */
  /* Podpis VYCENTROVANÝ ve svislé mezeře mezi textem pravého kontaktního bloku
     a posledním řádkem (© + kredit): nad ním kontakt pb 24 + patka pt 24
     = 48 px, pod ním proto row-gap taky 48 px. Obojí je táž tmavá
     plocha, takže se ty vzdálenosti čtou jako jedna mezera. */
  #kontakt{padding-bottom:var(--s5)}
  #patka{padding-top:var(--s5)}
  .patka-radek{grid-template-columns:auto auto;justify-content:space-between;
    align-items:baseline;gap:var(--s7) var(--s3)}
  .patka-podpis{grid-column:1/3;justify-self:center;text-align:left}
  .patka-copy{grid-column:1;justify-self:start;font-size:10.5px}
  p.patka-kredit{grid-column:2;justify-self:end;white-space:nowrap;font-size:10.5px}
  .patka-kredit a{min-height:0}
  #patka{padding-block:var(--s5)}
}

/* ── POHYB ──────────────────────────────────────────────────────────── */
/* align-items:flex-start by sloupec smrskl na nejširší řádek a text uvnitř
   by se pak lámal po jednom slově; proto stretch a šířka celého sloupce.
   Skutečné zalomení řídí max-width nadpisu, ne šířka flex kontejneru. */
.R-lines{display:flex;flex-direction:column;align-items:stretch;width:100%}
.ln{display:block;overflow:hidden;padding-block:.09em;margin-block:-.09em}
.ln > i{display:block;font-style:inherit;transform:translateY(118%);
  transition:transform .95s var(--ease-prichod)}
.V .ln:nth-child(1) > i{transition-delay:0ms}
.V .ln:nth-child(2) > i{transition-delay:80ms}
.V .ln:nth-child(3) > i{transition-delay:160ms}
.V .ln:nth-child(n+4) > i{transition-delay:220ms}
.V .ln > i{transform:none}
/* ŽÁDNÝ OŘEZ. Dřív se deska odkrývala shora dolů (clip-path) za 0,85 s —
   ostrá hrana, která se přes obrázek přehnala jako roleta; působilo to
   rychle a tvrdě. Teď se prolne a zároveň doplave zdola s doznívajícím
   zvětšením: stejný pohyb jako u textu vedle, jen delší, protože plocha
   je velká. (Ořez měl navíc vedlejší efekt — Chromium podle něj počítá
   viditelnou plochu, takže pozorovatel s prahem 0,18 nikdy nespustil,
   viz komentář v motion.js.) */
.odhal{opacity:0;transform:translateY(26px) scale(1.045);
  transition:opacity .55s var(--ease-kryt),
             transform 1.25s var(--ease-prichod)}
.odhal.V{opacity:1;transform:none}
.znak{transform:translateY(6px);opacity:0;
  transition:opacity .4s var(--ease),transform .4s var(--ease)}
.znaky.V .znak{opacity:.20;transform:none}
.znaky.V .znak--zvyrazneny{opacity:1}

/* ── NÁSTUP OBSAHU ────────────────────────────────────────────────────
   Nadpisy mají odhalení po řádcích (.R-lines), fotky clip-path (.odhal).
   Zbytek obsahu — štítky, uvozující věty, karty, kontaktní bloky —
   dosud naskakoval hotový, takže půlka stránky byla v pohybu a půlka
   ne. Tohle to sjednocuje: prvky uvnitř nástupového kontejneru čekají
   o 14 px níž a průhledné, kontejner dostane .V od observeru
   v motion.js a děti nastoupí po sobě.

   Skrytý stav visí na třídě `nastup` na <html>, kterou dává inline
   skript v <head> — a JEN když prohlížeč umí IntersectionObserver
   a návštěvník nemá vypnutý pohyb. Bez JS se tedy nikdy nic neschová;
   kdyby motion.js nedoběhl, pojistka v něm stejně po 1,2 s odhalí vše.

   SEZNAM KONTEJNERŮ MUSÍ SOUHLASIT s polem NASTUP v motion.js.
   Vynechané schválně:
   · .R-lines  — má vlastní odhalení, dvě animace přes sebe se perou
   · .formular-panel dětmi — .formular a .f-hotovo mají opacity/transform
     obsazené přepínáním stavu po odeslání; panel proto nastupuje vcelku */
html.nastup :is(.sek-hlava,.bod-text,.kroky,.vedeni-panely,.otazky-uvod,
  .kontakt,.patka-radek) > *:not(.R-lines),
html.nastup .formular-panel{
  opacity:0;transform:translateY(16px);
  transition:opacity .42s var(--ease-kryt),transform .95s var(--ease-prichod)}
/* panel si nese vlastní přechod výšky (stav po odeslání) — musí zůstat */
html.nastup .formular-panel{
  transition:height .34s var(--ease),
             opacity .5s var(--ease-kryt),transform 1.05s var(--ease-prichod)}
html.nastup :is(.sek-hlava,.bod-text,.kroky,.vedeni-panely,.otazky-uvod,
  .kontakt,.patka-radek).V > *,
html.nastup .formular-panel.V{opacity:1;transform:none}
/* Kaskáda. Čtvrtý a další prvek už čekat nemusí — na dlouhém seznamu
   (šest karet .krok) by poslední nastupoval skoro sekundu po prvním. */
html.nastup :is(.sek-hlava,.bod-text,.kroky,.vedeni-panely,.otazky-uvod,
  .kontakt,.patka-radek).V > :nth-child(2){transition-delay:70ms}
html.nastup :is(.sek-hlava,.bod-text,.kroky,.vedeni-panely,.otazky-uvod,
  .kontakt,.patka-radek).V > :nth-child(3){transition-delay:140ms}
html.nastup :is(.sek-hlava,.bod-text,.kroky,.vedeni-panely,.otazky-uvod,
  .kontakt,.patka-radek).V > :nth-child(n+4){transition-delay:200ms}

/* ── ÚVOD ─────────────────────────────────────────────────────────────
   Hero nečeká na scroll — je vidět hned, takže nastupuje po načtení
   (třídu .V dá <main> hned první snímek po startu motion.js).
   Scéna (město + postava) se JEN prolne: ta má geometrii spočítanou
   na pixel z měřítka --s a jakýkoli transform by ji rozladil. */
html.nastup .hero-scena{opacity:0;transition:opacity 1.2s var(--ease-kryt)}
html.nastup .hero-text > *{opacity:0;transform:translateY(18px);
  transition:opacity .5s var(--ease-kryt),transform 1.05s var(--ease-prichod)}
html.nastup .uvod-nastoupil .hero-scena,
html.nastup .uvod-nastoupil .hero-text > *{opacity:1;transform:none}
html.nastup .uvod-nastoupil .hero-text > :nth-child(1){transition-delay:60ms}
html.nastup .uvod-nastoupil .hero-text > :nth-child(2){transition-delay:140ms}
html.nastup .uvod-nastoupil .hero-text > :nth-child(3){transition-delay:220ms}
html.nastup .uvod-nastoupil .hero-text > :nth-child(4){transition-delay:300ms}
html.nastup .uvod-nastoupil .hero-text > :nth-child(n+5){transition-delay:380ms}

/* ── VYSOKÝ KONTRAST (Windows) ──────────────────────────────────────── */
@media (forced-colors: active){
  .duo::after{display:none}
  .hl{border:2px solid CanvasText}
  section{border-top:1px solid CanvasText}
  .btn,.hl-cta{border:2px solid ButtonBorder}
  .skip{border:2px solid CanvasText}
  .znak{fill:CanvasText;opacity:1}
  .znak--zvyrazneny{fill:Highlight}
  .hl-logo svg{fill:CanvasText}
  .ico{stroke:CanvasText}
  .hl-nav a[aria-current="true"]{outline:2px solid Highlight;outline-offset:-2px}
  .z-otazka{border-bottom:1px solid CanvasText}
  .dlazdice{border:2px solid CanvasText}
  .dlazdice::after{forced-color-adjust:none}
  .f-radek input,.f-radek textarea,.f-hotovo,.f-zprava{border:2px solid CanvasText}
  .f-radek input:focus,.f-radek textarea:focus{outline:3px solid Highlight}

  .odhal{clip-path:none;transform:none}
}

/* ── RESPONZIVITA ───────────────────────────────────────────────────── */
/* ── ÚZKÝ DESKTOP: JEN ODSTAVEC ───────────────────────────────────────
   Mezi 1000 a 1120 px se sazba a postava perou o šířku: 540px sloupec plus
   ~500px široká postava se do 1020 px prostě nevejdou. Změřeno proti
   skutečné siluetě výřezu: kicker má rezervu 70–120 px, nadpis 164–283 px
   a tlačítka leží v té šířce už celá POD postavou — kolidauje výhradně
   odstavec (−25 px na 1020 px). Zužuje se proto jen on, a spojitě: na
   1120 px vyjde vzorec přesně na svých 440 px, takže na hranici nic
   neposkočí. Scény ani zlomu se to netýká — postava zůstává přibitá
   k městu úplně stejně. */
@media(min-width:1001px) and (max-width:1160px) and (orientation:landscape){
  .hero-pod{max-width:calc(100vw - 720px)}
}
/* Tlačítka. Na krátkém okně (1001×700) se sazba svisle vystředí do menší
   výšky, takže řada tlačítek dosedne níž na postavu — a tam je rameno širší.
   Nejtěsnější naměřené místo bylo 3 px u druhého tlačítka. Řeší to spojité
   ubrání vodorovného odsazení z 32 na 24 px mezi 1160 a 1000 px; obě
   tlačítka se tím zúží a druhé odskočí doleva o ~32 px. Spojitě proto, aby
   na hranici zlomu nic neposkočilo — pevná hodnota v media query by tam
   udělala schod. */
@media(min-width:1001px){
  .hero-akce .btn{padding-inline:clamp(24px, calc(24px + (100vw - 1000px) * .05), 32px)}
}

/* ── ÚVOD NA ŠÍŘKU POD ROZMĚREM PŘEDLOHY ──────────────────────────────────
   Schválená kompozice je 1440×900 (sekce 837 px). Na menším okně na šířku
   (notebook, tablet otočený na šířku) se dřív zmenšovala jen scéna, kdežto
   písmo a sloupec zůstávaly skoro stejně velké — fotka menší, text větší
   a odstavec se lámal jinak. Teď se celý úvod zmenšuje JEDNÍM měřítkem jako
   obraz: --u je velikost jednoho pixelu předlohy = min(šířka/1440,
   výška/900). Postava, město, písmo, mezery, šířka sloupce i jeho poloha
   se násobí stejným číslem, takže poměry i pozice sedí přesně jako na
   počítači. Na 1440×900 a větším se blok nepoužije a úvod je beze změny;
   na hranici vycházejí oba způsoby na pixel stejně, nic neposkočí.
   Čísla jsou změřená na předloze: sloupec 152 px od okraje, 540 px široký,
   horní odsazení 104 (lišta 80 + 24), spodní 32, kicker 14 px, titulek
   55 px, odstavce 17,28 px, mezery 24 a 16 px. Když se změní předloha,
   musí se změnit i tady. Telefon otočený na šířku (pod 1001 px) zůstává
   u mobilního složení — v měřítku předlohy by měl písmo kolem 8 px. */
@media (min-width:1001px) and (orientation:landscape) and (max-width:1439.98px),
       (min-width:1001px) and (orientation:landscape) and (max-height:899.98px){
  #hero{--u:min(1px, calc(100vw / 1440), calc(100vh / 900));
    margin-bottom:max(0px, calc(100vh - 837 * var(--u)))}
  #hero .hero-scena{--s:calc(var(--u) * .5625)}
  .hero-in{min-height:calc(837 * var(--u));max-width:none;
    padding-block:calc(104 * var(--u)) calc(32 * var(--u));
    padding-inline:calc(max(0px, (100vw - 1440 * var(--u)) / 2) + 152 * var(--u)) 0}
  .hero-text{max-width:calc(540 * var(--u))}
  .hero-rada{font-size:calc(14 * var(--u))}
  .hero-jmeno{margin-top:calc(24 * var(--u));font-size:calc(55 * var(--u))}
  .hero-pod{margin-top:calc(24 * var(--u));font-size:calc(17.28 * var(--u));max-width:100%}
  .hero-pod--dukraz{margin-top:calc(16 * var(--u))}
  .hero-volby{margin-top:calc(16 * var(--u));font-size:calc(17.28 * var(--u))}
}

/* ── ÚVOD SLOŽENÝ POD SEBE: úzký displej NEBO jakékoli zařízení na výšku ──
   Vyčleněno z bloku max-width:1000px, aby stejné složení dostal i tablet na
   výšku širší než 1000 px (iPad Pro 1024×1366) — dřív na něm naskočilo
   desktopové rozvržení a úvod zabral jen horní půlku obrazovky. */
@media (max-width:1000px), (orientation:portrait){
  /* Mezera nahoře, ale barevná, ne plátem stránkové šedé/bílé. Čistá
     mezera v barvě stránky dělala švík přesně tam, kde plave lišta menu.
     Pruh proto pokračuje SKUTEČNÝMI barvami plátna — 21 zastávek po 5 %
     natažených přímo z pixelů řádku, na který pruh navazuje (řádek y=36
     souboru images/hero-platno.webp, sloupce 1080–2559: plátno je ukotvené
     vpravo a na 390px telefonu je z něj vidět právě 1480 px) — po výměně
     plátna navzorkovat znovu (postup v docs/NOVY-PROJEKT.md), ne odhadnutá
     dvoubarevná šňůra. Vlevo to není čistá bílá, ale slabě namodralá šeď — proto
     dvoubarevný přechod bílá→modrá dělal na kraji vlastní, druhý švík. */
  #hero{display:flex;flex-direction:column;position:relative;
    padding-top:36px}
  #hero::before{content:'';position:absolute;top:0;left:0;right:0;
    height:36px;z-index:0;
    background:linear-gradient(90deg,
      #becde1 0%,#aec0da 5%,#9db3d2 10%,#8fa9cc 15%,#819fc7 20%,
      #7898c1 25%,#7799c4 30%,#698cbc 35%,#638bbb 40%,#6087ba 45%,
      #5d85b7 50%,#5b82b9 55%,#547db3 60%,#4d78b3 65%,#4474af 70%,
      #406fac 75%,#396ba8 80%,#3366a9 85%,#2e63a5 90%,#2a61a5 95%,#285ea5 100%)}
  /* Dvě meze. Výška pásu, aby nezabral celou obrazovku, a šířka dělená 1480
     (postava 1273 + odsazení 80 + 127 levého odstupu) — bez ní by na úzkém
     a vysokém displeji 320×844 přeteklo rameno přes levý okraj.
     ŽÁDNÁ třetí mez zdola: dorovnávat měřítko tak, aby plátno dosáhlo na
     oba okraje pásu, znamená pás vysoký přes 600 px. Že plátno na širším
     pásu nesahá vlevo až ke kraji, nikdo nepozná — jeho levá čtvrtina je
     stejně bílá jako sekce. */
  .hero-scena{position:relative;inset:auto;flex:none;width:100%;
    --s:min(calc(min(56vh, 640px) / 1488), calc(100vw / 1480));
    height:calc(1488 * var(--s))}
  /* Postava vždycky uprostřed šířky. Dřív seděla 80 px plátna od pravého
     okraje — na telefonu to vycházelo skoro na střed, ale na tabletu na
     výšku zela vlevo prázdná plocha. Šířková mez --s (1480 = postava 1273
     + okraje) platí dál, takže se postava vejde i na nejužší displej. */
  .hero-portret{right:auto;left:50%;transform:translateX(-50%)}
  /* Vyšší podlaha než 120px: scéna je na mobilu jen ~370 px vysoká, takže
     22% dá necelých 82 px a spodní hrana fotky pod portrétem je vidět
     jako ostrý řez. 180 px pokryje skoro polovinu scény a řez zmizí. */
  /* Pořád vidět hrana i po zvýšení na 180px — přechod na plnou barvu
     nastupuje až na 74 % vlastní výšky pásu (viz základní pravidlo),
     takže i 180px vysoký pás má poslední skutečně krycí barvu až kolem
     jeho 133. pixelu, ne na okraji scény. Vyšší podlaha (230px, skoro
     2/3 scény) dá tomu krytí víc místa, než dojde na spodní hranu. */
  .hero-scena::after{height:clamp(230px,58%,260px)}
  /* Spodní odsazení je menší, protože pilulka s termínem má na
     mobilu sedět PŘESNĚ uprostřed mezery mezi zdůrazněnou větou úvodu
     a rubrikou další sekce. Ta mezera se skládá ze
     tří dílů: odstup nad pilulkou (margin .hero-volby), tenhle spodek
     úvodu a horní odsazení sekce #kdo (48 px). Aby vyšlo 60 px nad
     i pod, musí být nad 60 a tady 12. Když se změní odsazení #kdo,
     musí se přepočítat i tyhle dvě hodnoty. */
  .hero-in{min-height:0;padding-block:var(--s5) var(--s3)}
  /* sazba ve středovém sloupci — na telefonu přes celou šířku, na tabletu
     na výšku nejvýš 620 px, vystředěná pod postavou */
  .hero-in{max-width:calc(620px + 2 * var(--edge))}
  .hero-text{max-width:none}
  .hero-pod{max-width:100%}
  /* Věta patří do úvodního bloku: běžný odstup odstavce od
     zdůrazněné věty nad ní. Oddělení od dalšího bloku
     (rubrika sekce #kdo) obstarává spodek úvodu (--s3) + horní odsazení
     sekce #kdo (--s7) = 60 px, tedy víc než odstavec, míň než dřívější
     vycentrovaná propast. Velikost se dědí ze základního pravidla
     (t-body jako důraz nad ní) a věta se láme jako běžný text. */
  /* tři řádky prostrkaných verzálek jsou na mobilu moc — menší stupeň
     a užší prostrkání to srazí na dva */
  .hero-rada{font-size:13px;letter-spacing:.08em}
}

@media(max-width:1000px){
  /* hlavička zůstává jednořádkovou pilulkou — dřív se lámala na dva řádky
     (132 px = 15,6 % obrazovky) a poloměr padal ze 100px na 22px */
  #hlavicka{padding-inline:var(--s3)}
  /* .hl-menu-wrap je na mobilu position:absolute (viz níže) — v běžném
     toku lišty zůstávají jen logo a tlačítko Menu, tedy míň obsahu než
     dřív se čtyřmi odkazy + CTA. width:max-content by proto pilulku
     smrsklo na šířku dvou položek — width:100% ji roztáhne na celou
     šířku wrapu, justify-content:space-between rozežene logo a tlačítko
     na krajní konce. */
  .hl{position:relative;width:100%;flex-wrap:nowrap;justify-content:space-between;
    border-radius:var(--r-pill);
    padding:var(--s2) var(--s2) var(--s2) var(--s4);gap:var(--s2)}
  /* Desktopová kopie nav + CTA (uvnitř .hl) je na mobilu schovaná —
     mobilní kopie žije v samostatném #hl-menu-panel, mimo pilulku. */
  .hl > .hl-nav,.hl > .hl-cta{display:none}
  .hl-logo{border-right:0;margin-right:0;padding-right:0}
  /* 132px bylo spočítané na původní jméno bez titulu — s titulem text
     měřil 136px, ořezávalo by ho to. 170px má naměřenou rezervu (na 390px
     displeji zbývá 197px) a pořád je to pojistka, ne volný prostor. */
  .hl-logo span{max-width:170px;overflow:hidden;text-overflow:ellipsis}

  /* ── HAMBURGER MENU ────────────────────────────────────────────────
     Nahradil vodorovně rolovací seznam odkazů (nešlo je přečíst všechny
     naráz) i variantu s jedinou aktuální položkou (chybělo v ní vidět
     celou nabídku, ne jen kde návštěvník zrovna je). Tlačítko + panel
     žijí v DOM pořád, na desktopu je jen CSS dělá neviditelnými a
     .hl-menu-wrap neúčinným obalem (display:contents), aby tam nav a
     CTA seděly přesně jako předtím. */
  /* Stejné tlačítko jako .hl-cta předtím — modrá pilulka, ne malá
     ikona. Lišta si tak drží svou dřívější šířku a váhu, jen poslední
     slovo se změnilo z textu CTA na „Menu". */
  .hl-menu-btn{display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;
    padding:0 var(--s5);border-radius:var(--r-pill);background:var(--modr);color:#fff;
    font-size:var(--t-cap);font-weight:700;letter-spacing:var(--ls-txt);
    border:0;flex:none;margin-left:var(--s2);cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    transition:background .2s var(--ease),transform .1s var(--ease)}
  .hl-menu-btn:active{transform:scale(.97)}
  .hl-menu-ikona{position:relative;width:16px;height:12px;flex:none}
  .hl-menu-ikona span{position:absolute;left:0;right:0;height:2px;
    background:#fff;border-radius:1px;
    transition:transform .25s var(--ease),opacity .2s var(--ease),top .25s var(--ease)}
  .hl-menu-ikona span:nth-child(1){top:0}
  .hl-menu-ikona span:nth-child(2){top:5px}
  .hl-menu-ikona span:nth-child(3){top:10px}
  /* Tři čárky → křížek. Prostřední zmizí, krajní se sejdou na střed
     a překříží — stejný jazyk jako šipka u tlačítek: nic neskočí,
     jen se to plynule přetočí. */
  #hlavicka.menu-otevrene .hl-menu-ikona span:nth-child(1){top:5px;transform:rotate(45deg)}
  #hlavicka.menu-otevrene .hl-menu-ikona span:nth-child(2){opacity:0}
  #hlavicka.menu-otevrene .hl-menu-ikona span:nth-child(3){top:5px;transform:rotate(-45deg)}

  /* Celoobrazovkový přehoz, ne pilulka pod pilulkou. Druhý vodorovný
     pruh působil jako menu z roku 2012 (rozevírák pod tlačítkem) — tohle
     je jazyk, jakým mobilní menu mluví dnes: tmavá plocha přes celý
     displej, velké řádky pod sebou, jedna jasná akce dole. Panel je
     position:fixed vůči viewportu (ne vůči pilulce), takže leží NAD
     celou stránkou; pilulka nahoře (a v ní tlačítko s křížkem na
     zavření) musí mít vyšší z-index, aby zůstala klikatelná i nad ním. */
  .hl{z-index:2}
  /* Nahoře, ne rozprostřené přes celou výšku — čtyři položky uprostřed
     prázdné obrazovky působily rozplácle. Nav sedí hned pod hlavičkou,
     CTA drží dole přes margin-top:auto na sobě samém — bez flex:1 na
     navu ani justify-content:center. */
  .hl-menu-wrap{position:fixed;inset:0;z-index:1;
    background:var(--tmava);overflow:hidden;
    display:flex;flex-direction:column;
    padding:calc(env(safe-area-inset-top,0px) + 108px) var(--s6)
      calc(env(safe-area-inset-bottom,0px) + var(--s7));
    opacity:0;visibility:hidden;pointer-events:none;
    transition:opacity .22s var(--ease),visibility 0s linear .22s}
  #hlavicka.menu-otevrene .hl-menu-wrap{opacity:1;visibility:visible;pointer-events:auto;
    transition:opacity .22s var(--ease)}
  /* Vodoznak: znak loga jako duch (4 % bílé) přetéká pravý dolní roh.
     Absolutně umístěný prvek by se kreslil NAD in-flow sourozenci,
     proto nav i CTA dostávají vlastní vrstvu nad ním. */
  .hl-menu-znak{position:absolute;right:-11vw;bottom:-6vh;
    height:min(58vh,470px);width:auto;fill:rgba(255,255,255,.04);
    pointer-events:none}
  .hl-menu-wrap > .hl-nav,.hl-menu-wrap > .hl-cta{position:relative;z-index:1}
  /* Číslo + vlasová linka před každou položkou: říká „tohle je jiná
     kategorie", ne jen řádek v seznamu. counter-reset/increment, ne
     napevno 01–04 v HTML — odkazy zůstávají stejné pro desktop i mobil,
     číslování je jen mobilní css. */
  .hl-nav{flex-direction:column;gap:0;counter-reset:menu-polozka}
  .hl-nav a{width:auto;min-height:0;padding:16px 0;white-space:nowrap;
    display:flex;align-items:baseline;gap:var(--s4);
    border-radius:0;border-top:1px solid var(--line-t);background:none!important;
    font-size:clamp(24px,7.5vw,30px);font-weight:800;letter-spacing:-.02em;color:var(--w);
    counter-increment:menu-polozka;
    /* Ústup je teď JEDEN pohyb pro všechny položky naráz (viz níže) —
       rozestupný nástup zůstává jen pro otevření. */
    opacity:0;transform:translateY(8px);
    transition:opacity .18s var(--ease),transform .18s var(--ease)}
  .hl-nav a:first-child{border-top:0}
  .hl-nav a::before{content:counter(menu-polozka,decimal-leading-zero);
    flex:none;font-size:14px;font-weight:700;color:rgba(255,255,255,.65);
    letter-spacing:0;font-variant-numeric:tabular-nums}
  /* Rozestupný nástup patří VÝHRADNĚ otevřenému stavu (vyšší specificita
     než plain .hl-nav a) — při zavírání proto zpoždění neplatí a všechny
     čtyři zmizí naráz, ne jedna po druhé se stejným rozestupem, se
     kterým přišly. To předtím dělalo ústup vizuálně nedbalý. */
  #hlavicka.menu-otevrene .hl-nav a{opacity:1;transform:none;
    transition:opacity .3s var(--ease),transform .3s var(--ease)}
  #hlavicka.menu-otevrene .hl-nav a:nth-child(1){transition-delay:.08s}
  #hlavicka.menu-otevrene .hl-nav a:nth-child(2){transition-delay:.14s}
  #hlavicka.menu-otevrene .hl-nav a:nth-child(3){transition-delay:.2s}
  #hlavicka.menu-otevrene .hl-nav a:nth-child(4){transition-delay:.26s}
  .hl-nav a[aria-current="true"]{color:var(--w)}
  .hl-cta{width:100%;justify-content:center;min-height:60px;
    font-size:var(--t-ui);margin-top:auto}

  /* Tvář jde první: odkaz se otevírá na telefonu a první, co má návštěvník
     vidět, je člověk, ne sazba. Scéna vypadne z absolutního ukotvení do
     toku a text jde pod ni. Postavu nic nepřenastavuje kromě odsazení —
     drží se týchž pixelů plátna jako na desktopu, jen se scéna zmenší
     a --s s ní, takže motiv v pozadí je za postavou přesně jako na monitoru.

     JEDINÝ ZLOM. Zkoušel jsem pro úvod vlastní zlom na 1100 px, aby se
     skládal dřív než zbytek stránky — a vzniklo tím mezi 1000 a 1100 px
     třetí, nesmyslné rozvržení s pásem vysokým 640 px. Buď desktop, nebo
     mobil; nic mezi tím. Kolizi sazby s postavou na úzkém desktopu proto
     řeší užší textový sloupec (viz níže), ne další zlom. */

  .poradna,.otazky,.otazky-hlava{grid-template-columns:minmax(0,1fr);row-gap:var(--s8)}
  /* Desktopové přiřazení do řádků mřížky (formulář i akordeon v řádce 2)
     by v jednosloupci poskládalo oba PŘES SEBE — na mobilu se ruší
     a prvky jdou přirozeně pod sebe: úvod, formulář, odpovědi. */
  .otazky{row-gap:var(--s6)}
  .otazky-uvod,.otazky .formular-panel,.otazky .faq-seznam{
    grid-column:auto;grid-row:auto;align-self:auto}
  .formular-sloup{position:static;height:auto;display:block}
  /* KLÍČOVÉ PRO PLYNULOST SCROLLU — dvě mobilní vypnutí, která při
     jedné z přestaveb karet vypadla (zůstal po nich jen komentář) a
     přesně od té doby se stránka sekala:
     1. Dimování .aktivni: na mobilu jinak platí desktopové
        .zaznam{opacity:.5;transition:opacity .9s} a observer přepíná
        třídu při KAŽDÉM průjezdu středem okna → devítisetmilisekundová
        opacity animace uprostřed scrollu = zásek. (motion.js observer
        na mobilu ani neběží, ale CSS pojistka tu musí být taky —
        breakpoint a matchMedia se nesmí rozejít.)
     2. Nástup po řádcích (z-stitek/z-otazka/z-text/z-odpoved): v kartě,
        která je vidět celá naráz, by jen blikal a přidával recalc. */
  .zaznam{opacity:1!important;transition:none!important;will-change:auto}
  .zaznam .z-stitek,.zaznam .z-otazka,.zaznam .z-text{
    opacity:1!important;transform:none!important;transition:none!important}
  .zaznam .z-odpoved{clip-path:none!important;transition:none!important}
  .formular-panel{position:static}
  /* Otázky a odpovědi na mobilu: jedna karta, listuje se šipkami.
     PRVNÍ verze řešila další kartu vodorovným scroll-snap swipem — na
     doteku se ale prakticky vždy prát se SVISLÝM scrollem stránky,
     takže rolování přes sekci sekalo. DRUHÁ verze měla display:none na
     nezobrazených a vnitřní overflow-y na odpovědi — vnitřní scroll
     zase chytal prst (stránka pod ním stála) a karty měly každá jinou
     výšku. TEĎ: všechny karty leží v JEDNÉ grid buňce (grid-area 1/1),
     nezobrazené jsou jen visibility:hidden — pořád se počítají do
     výšky buňky, takže KAŽDÁ karta má přesně stejnou velikost (podle
     nejdelší odpovědi) a nic neposkakuje. Text je zmenšený, aby i
     nejdelší odpověď stála celá v kartě — ŽÁDNÝ vnitřní scroll. */
  .odpovedi{background:none;border:0;box-shadow:none;
    padding-inline:var(--s4);padding-block:var(--s4) 0}
  /* Bez bílé karty (viz výš) nemá "roh karty" na co navázat. */
  .odpovedi-deco{display:none}
  .odpovedi-hlava{padding-inline:0;margin-bottom:var(--s5)}
  #otazky-seznam{position:relative;display:grid}
  #otazky-seznam .zaznam{grid-area:1/1;margin-top:0;
    visibility:hidden;pointer-events:none;
    background:var(--bila);border-radius:var(--r);box-shadow:var(--stin);
    border:var(--line) solid var(--linka);padding:var(--s4) var(--s5)}
  #otazky-seznam .zaznam.zobrazena{visibility:visible;pointer-events:auto}
  /* Nástup nové karty = krátké „přisunutí" ze strany, kam se listuje
     (směrovou třídu přepíná motion.js). Jen transform+opacity, běží
     na kompozitoru; animuje se VÝHRADNĚ příchozí karta, žádný layout. */
  #otazky-seznam.listuje-dopredu .zaznam.zobrazena{
    animation:karta-zprava .32s var(--ease)}
  #otazky-seznam.listuje-zpet .zaznam.zobrazena{
    animation:karta-zleva .32s var(--ease)}
  /* Menší stupeň než desktop: karta má být kompaktní blok otázka+odpověď,
     ne vysoký panel. Menší mezery ze stejného důvodu. */
  #otazky-seznam .z-otazka{font-size:17px;margin-bottom:var(--s3)}
  #otazky-seznam .z-text{font-size:14px;line-height:1.5}
  #otazky-seznam .z-text + .z-text{margin-top:var(--s3)}
  #otazky-seznam .z-stitek{margin-bottom:var(--s3)}
  #otazky-seznam .z-odpoved{padding:var(--s3) var(--s4)}
  @keyframes karta-zprava{
    from{opacity:0;transform:translateX(28px)}
    to{opacity:1;transform:none}}
  @keyframes karta-zleva{
    from{opacity:0;transform:translateX(-28px)}
    to{opacity:1;transform:none}}
  /* Šipky — kruhové, položené přes okraj karty. Reuse #i-sipka (šipka
     doprava); „zpět" je jen zrcadlené přes scaleX. touch-action:manipulation
     ať tap nečeká na dvojklik. */
  .karta-sipka{position:absolute;top:50%;transform:translateY(-50%);
    z-index:2;width:44px;height:44px;border-radius:50%;
    display:flex;align-items:center;justify-content:center;
    background:var(--bila);border:var(--line) solid var(--linka);
    box-shadow:var(--stin);color:var(--ink);touch-action:manipulation;
    transition:opacity .2s var(--ease)}
  .karta-sipka:disabled{opacity:0;pointer-events:none}
  .karta-sipka .ico{width:20px;height:20px}
  /* Odsazení je přesně půlka průměru (44/2), takže STŘED kolečka leží
     na hraně karty, ne kousek uvnitř. Dřív tu bylo −12 px a kolečko
     tím pádem viselo o 10 px dovnitř, což vypadalo jako nedotažené. */
  .karta-sipka--zpet{left:-22px;transform:translateY(-50%) scaleX(-1)}
  .karta-sipka--dalsi{right:-22px}
  /* Hlava sekce (--s8, 64px) + horní padding prvního bodu (--s7, 48px)
     dávaly pod sebou 112px prázdna — na mobilu to působilo jako díra.
     Úplně bez mezery (0) zase splývalo příliš — hlava a první bod
     vypadaly jako jeden odstavec. --s5 mezi nimi drží odstup, ale ne
     díru. */
  .sek-hlava{margin-bottom:var(--s6)}
  .bod{grid-template-columns:1fr;row-gap:var(--s5);padding-block:var(--s7)}
  .bod:first-of-type{padding-top:var(--s5)}
  /* Šev mezi posledním bodem programu a sekcí kroků měl na mobilu
     224 px: 48 pod posledním bodem + 64 pod sekcí #kdo + 64 nad #program.
     Na širokém displeji to drží rytmus, na úzkém je to díra přes půl
     obrazovky. Ubráno 56 px, na 168 — ne až na doraz, sekce se pořád
     mají od sebe oddělit. */
  .bod:last-of-type{padding-bottom:var(--s5)}
  #kdo{padding-bottom:var(--s6)}
  /* Vždy obrázek, pak text — na mobilu žádné střídání jako na desktopu.
     .bod-foto je v DOM první, takže stačí zrušit order:2 ze sudých
     záznamů a pořadí drží samo, u každého bodu stejně. */
  .bod:nth-child(even) .bod-foto{order:0}
  /* Druhá ikona: na desktopu je posunutá nahoru na přání (translateY(-4.4%)),
     ale ve stojaté mobilní kartě je slack nahoře i dole jen pár pixelů,
     takže se ikona lepila přímo na horní hranu. Soubor je geometricky
     vystředěný sám o sobě (bbox posun 0,00 %), takže tady stačí posun
     zrušit. */
  .bod:nth-child(2) .bod-ikona-nova{transform:none}
  /* uvod → dlaždice → zbytek, ne uvod+zbytek → dlaždice. Jeden sloupec,
     dlaždice fyzicky mezi oběma texty, ne jen opticky přes order. */
  .kdo-in{grid-template-columns:1fr;
    grid-template-areas:'uvod' 'moz' 'zbytek';gap:var(--s7)}
  /* Číslo blíž k textu, ne v odděleném prázdném pásu pod ním — s velkou
     mezerou (--s6) vypadalo jako samostatný blok, ne jako součást
     odstavce nad ním. Menší mezera zkrátí i celou sekci na výšku. */
  .devatenact{grid-template-columns:1fr;gap:var(--s3)}
  .devatenact-cislo{justify-self:end}
  /* Tři bloky vedle sebe na desktopu drží odstup samotnými sloupci; pod
     sebou na mobilu potřebují oddělit — ale BARVOU a vzduchem, ne linkou
     (linky odstraněny na přání; rozlišení nese modrý štítek rubriky
     a větší mezera mezi bloky). */
  .kontakt{grid-template-columns:1fr;gap:var(--s7)}
}
@media(max-width:560px){
  /* TŘI VNOŘENÁ ODSAZENÍ. Stránka 20 px + bílá karta 22 px + modré pole
     odpovědi 24 px = 66 px na každou stranu. Na 390px displeji z toho
     odstavci zbylo 255 px (34 znaků na řádek), na 320px displeji 185 px —
     tedy 16 až 26 znaků, tři čtyři slova. Text se pak láme uprostřed
     myšlenky a odpověď naroste na devět řádků.
     Nejde jen zrušit odsazení karty: karta má být vidět jako karta.
     Ubírá se proto na obou vnořených úrovních naráz. */
  /* Tři vnořená odsazení: stránka 20 + panel 24 + akcentní linka 24.
     Na 320px displeji z textu zbylo 16 znaků na řádek. */
  .odpovedi{padding-inline:var(--s4)}
  .vedeni-tab{padding:0 var(--s4);font-size:14px}
  /* Tónovaná karta odpovědi je teď v základním pravidle (.z-odpoved),
     tady se jen stahuje odsazení na užší sloupec. */
  .z-odpoved{padding:var(--s4)}
  /* Jméno a e-mail pod sebe — vedle sebe má každé pole ~150 px. */
  .f-dvojice{grid-template-columns:1fr}

  /* Stejný poměr jako na desktopu — široká dlaždice nahoře přes celou
     šířku, dvě menší vedle sebe pod ní — ne všechny tři pod sebou.
     Dvě dlaždice vedle sebe mají na 375 px pod 170 px, takže tahle
     dvojice dostává menší odsazení a menší písmo (viz níže), jinak by
     se text lámal po dvou slovech. */
  .mozaika{gap:var(--s3)}
  .mozaika .dlazdice:not(.dlazdice--siroka){min-height:min(30vh,220px)}
  .mozaika .dlazdice:not(.dlazdice--siroka) > div{padding:var(--s4)}
  .mozaika .dlazdice:not(.dlazdice--siroka) h3{font-size:18px}
  .mozaika .dlazdice:not(.dlazdice--siroka) p{font-size:12px;line-height:1.4}
  /* Dovětek mikroštítku (.mikro-dovetek) se na úzkou kartu nevejde na
     jeden řádek — viz komentář u třetí dlaždice ve web.html. */
  .mozaika .dlazdice:not(.dlazdice--siroka) .mikro-dovetek{display:none}
  /* Na mobilu je sloupec ~350 px a devatenáct znaků se do něj musí vejít
     taky — proto výrazně méně. Výška je vw-fluidní, ne pevná: pevných
     20 px bylo tak spočítané, aby se vešlo i na nejužší podporovaný
     320px displej, a na běžných 375–430px pak řada zabírala jen asi
     tři čtvrtiny sloupce — zbytek působil jako prázdné místo. */
  .znaky{gap:clamp(2px,.6vw,4px)}
  .znak{width:auto;height:clamp(16px,5.34vw,24px)}
  .znak--zvyrazneny{height:clamp(21px,7.01vw,31px)}
  .btn{width:100%}
  .f-radek input,.f-radek textarea{padding:15px 17px}
  .f-odeslat{min-height:60px}
  .f-ok{right:var(--s4);bottom:var(--s4)}
}

/* ── OMEZENÝ POHYB ──────────────────────────────────────────────────── */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;
    transition-duration:.01ms!important;animation-iteration-count:1!important}
  html{scroll-behavior:auto}
  .ln > i{transform:none!important}
  .odhal{clip-path:none!important;transform:none!important}
  .znak{opacity:.20!important;transform:none!important}
  .f-hotovo .f-fajfka{stroke-dashoffset:0}
  .f-odeslat[data-stav="odesila"]::after{animation:none}
}

/* Na nejužších displejích (320 px = sloupec 280 px) se 10,5px verze
   hesla v pilulce nevejde (318 px) — ještě o stupeň níž. Samostatný
   blok na konci souboru, NEVKLÁDAT dovnitř media bloku ≤1000 px:
   jednou už vložená závorka rozťala mobilní pravidla vejpůl. */

