/* ═══════════════════════════════════════════════════════════════════════
   DOMINIK HODA — Unhošť 2026
   JEDNA RODINA (Archivo 100–900). 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 ─────────────────────────────────────────────────────────── */
  --ff:'Interpunkce', 'Geist','Helvetica Neue',Arial,sans-serif;

  /* ── 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;

  /* ── BARVY — žádný syrový hex mimo tenhle blok ──────────────────────
     Finální paleta (2026-08-31): ODS modrá jako akcent, NOVÁ hlubší
     midnight navy jako tmavá, světlé tóny původní. Na tmavém podkladu
     je akcent TAKÉ plná ODS modrá — na přání („i dole dej tu ODS"),
     midnight navy je dost hluboká, aby na ní byla znát. */
  --modr:#034EA2;        /* ODS modrá; 8,03:1 na bílé — po experimentech
                            (#042BBF, #3B61BB…) vráceno na přání zpět */
  --modr-tm:#023A79;     /* hover */
  --modr-sv:#3377C8;     /* starší kresby */
  --modr-ik:#3377C8;     /* akcent na tmavém podkladu (zápatí, kontakt) =
                            modrá navzorkovaná z nakreslených ikon karet */
  --tmava:#071A35;       /* midnight navy (nová) */
  /* naměřeno v dominik.jpeg — pozadí ateliéru; když je na něm i sekce,
     fotka nemá hranu */
  --foto-bila:#F9FAFD;
  --bila:#FFFFFF;
  --seda:#F4F6F9;
  --linka:#DFE5EE;
  --ink:#0F1B2D;         /* 17,3:1 na bílé */
  --ink-dim:#4A5A6E;     /* 7,07:1 na bílé, 6,54:1 na šedé */
  --pole-linka:#7A8CA3;  /* 3,44:1 na bílé, 3,18:1 na šedé → WCAG 1.4.11 */
  --pole-linka-h:#4A5C71;
  --chyba:#A4131B;
  --chyba-bg:#FBEDEE;
  --zavazek:#0E7C63;     /* 4,64:1 na bílé */
  --w:#FFFFFF;
  --w-dim:rgba(255,255,255,.88);
  --w-mute:rgba(255,255,255,.72);
  --line-t:rgba(255,255,255,.20);

  /* ── 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);
  --stin:0 2px 8px rgba(15,27,45,.05), 0 12px 32px rgba(15,27,45,.06);
  --stin-plov:0 2px 6px rgba(15,27,45,.06), 0 10px 30px rgba(15,27,45,.10);
  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:rgba(11,28,58,.22) transparent}
html::-webkit-scrollbar{width:10px}
html::-webkit-scrollbar-track{background:transparent}
html::-webkit-scrollbar-thumb{background:rgba(11,28,58,.22);
  border-radius:var(--r-pill);border:2px solid transparent;background-clip:padding-box}
html::-webkit-scrollbar-thumb:hover{background:rgba(11,28,58,.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 (devatenáct, 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 „Díky, mám to."). Dřív tu stálo --s6 podle sekce
   „O mně", 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 — „Kde mě
   potkáte." v kontaktu měla 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ři témata" a „Co chci změnit" 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 „Jsem tu pro vás." 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 ODS 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é
   po „jsou" („Tři témata, která jsou / pro mě důležitá") — 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 16 až 18ch (19ch už láme po „pro mě",
   14ch po „která"). 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 (Co chci prosadit / Co chci změnit / Máte otázku?)
   jako pilulka v ODS 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á ODS 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 ODS 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á ODS 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)}

@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 znakový
   jelen 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}
/* Logo H s kravatou (hodalogo) místo jelena — rastr s průhledným
   pozadím, výška ladí s dřívějším znakem. */
.hl-logo img.hl-logo-znak{width:auto;height:26px;display:block;flex:none}
/* Znakový jelen je 70,9 : 100 (vyšší než široký), ne čtvercový jako
   dřívější stylizovaná silueta — pevná šířka by ho zúžila. Šíř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:rgba(3,78,162,.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 (…Vedení města · Zeptat se ·
   Kontakt — 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 původní studiová fotka i s pozadím (#F9FAFD) —
   když je na tu barvu nastavená celá sekce, fotka nemá hranu a vytrácí se
   do plochy. Proto ne výřez, ne rám, ne stín.
   Unhošť leží pod tím jako náznak: zesvětlená filtrem, ne průhledností,
   aby v ní 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)}

/* Unhošť — náměstí s věží sv. Petra a Pavla.
   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.
   Násobení barvou sekce je předpočítané v souboru (viz níže u .hero-mesto),
   takže bílá plátna JE #F9FAFD 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
   kostel Dominikovi 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 — tlačítko „Zeptat se“ leželo na saku
     (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Ě (v index.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. Násobení je teď zapečené rovnou v souboru: plátno je
   předem vynásobené barvou #F9FAFD, takže jeho bílá JE barva sekce a 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 dominik-vyrez9.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)}
/* 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í. Datum voleb 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
   („Číst smlouvy, ne mluvit.“, 24 znaků). Nový titulek („Pomáhám,
   zastupuji“ / „a prosazuji zájmy lidí.“, 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. */
.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 + výzva k volbám — vlastní řádek pod titulkem, mikro-caps jako
   jinde na webu (kicker, patička). Na přání kandidáta 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. */
/* Výzva k volbám = POKRAČOVÁNÍ úvodního textu: stejný stupeň a řez
   jako „A já budu Váš zástupce." 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). Výzva k volbám 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 fotka náměstí, a bílé ateliérové pozadí by ji zakrylo přesně tam,
   kde stojí věž kostela. Postava před městem 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 kostelem.

   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
   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 sako 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.
   Béžové sako končilo pixely 182,162,142 (jas 165), tmavě modré 51,54,76
   (jas 55). Bílý závoj umí béžovou dotáhnout do bílé nenápadně, ale tmavou
   modř zvedne na 250 jen přes viditelnou šeď — proto u tmavého saka zůstala
   vidět hrana, kde fotka končí. Rozplynutí je proto zapečené přímo v souboru
   dominik-vyrez9.webp: barva přechází do #F9FAFD mezi řádky 1230–1600 a
   teprve pak, když je pixel už bílý, klesá alfa — a to AŽ NA ŘÁDKU 1545.
   Do té doby je sako krycí bílá, ne průhledná: krycí bílá město zakryje,
   průhledná ho pustí skrz a v saku byl vidět chodník. 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ělá to scratchpad/fade4.py. */

/* ── 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)}
}

/* ── NĚCO O MNĚ ───────────────────────────────────────────────────────
   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ěří „Ne politik. Soused.“
   asi 321 px, sloupec 5/12 dává na 1440 px 449 px */
/* max-width v ch drží zalomení „Ne politik. / Soused.“; <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í, které se politických materiálů týká, a spor
   uprostřed kampaně 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
   „Fakulta právnická ZČU“, „Doktorand“ a „TJ Unhošť · kapitán áčka“.
   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}
/* Nová ikona (z rozstříhaného TEST11.jpeg) 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 50/radar 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). Sídliště má neprůhledný obsah
   posazený mimo střed plátna, ostatní (po výměně za TEST12/ikony2) už
   vycházejí ze skriptu vystředěné samy o sobě. */
.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 (50 a radar). */
.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 „Mám řešení!" 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:rgba(3,78,162,.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 Tři témata) — 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 (hřiště, park), 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ří priorit — 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 [[will-change-fixed-containing-block]]): 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}
/* Nové ikony (z rozstříhaného "ikony 2.png") — stejný princip jako
   u Tří priorit: č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 hřiště i parku) 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ěď
     (pošta) 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 pošťácké kartě 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 pošťácká 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,rgba(3,78,162,.55),rgba(0,158,219,.30));
  mix-blend-mode:multiply}

/* ── DEVATENÁCT ─────────────────────────────────────────────────────── */
.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}
.jeleni{display:flex;gap:clamp(5px,.75vw,11px);align-items:flex-end;flex-wrap:wrap;
  margin-bottom:var(--s6)}
/* Šířka auto, výška pevná: znakový jelen je vyšší než široký (70,9 : 100),
   pevných 40 × 40 by ho vodorovně roztáhlo.

   VELIKOST JE DANÁ TÍM, ŽE SE DEVATENÁCT MUSÍ VEJÍT NA JEDEN ŘÁDEK.
   Sdělení zní „jeden z devatenácti" — 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. */
.jelen{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 siluet
   nestačí na odlišení jen barva. */
.jelen--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)}
.role{display:none}
.role.je-aktivni{display:block}
.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 slov jako
   "Radní" 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 „Jsem jeden z devatenácti" i patička, takže to
   není nová barva na webu.

   VŠECHNY VOLBY JSOU MĚŘENÉ:
   · bílé tlačítko na panelu ............ 16,92:1
   · tlačítko v modři ODS na panelu ..... 2,11:1  → proto NENÍ v modři ODS
   · tlačítko ve světlé modři ........... 5,57:1, ale bílý text na něm
     jen 3,04:1, tedy pod hranicí pro text
   Bílé tlačítko s tmavým textem je jediná varianta, která projde na obou
   stranách. Akcentní barvou zůstává světlá modř — týž vzorec, jaký web
   má v pravidle `.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 s „Co už se ptali" 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 ODS 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 #14284A 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}
.f-ok{position:absolute;right:var(--s4);bottom:13px;width:20px;height:20px;
  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á ODS 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}
.f-hotovo .t-h3{margin-bottom:var(--s3);color:var(--w)}
.f-hotovo .t-body{color:rgba(255,255,255,.86)}
.f-fajfka{width:34px;height:34px;fill:none;stroke:var(--zavazek);stroke-width:2.6;
  stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:26;stroke-dashoffset:26;margin-bottom:var(--s4);
  transition:stroke-dashoffset .5s var(--ease) .2s}
.formular-panel.je-hotovo .f-fajfka{stroke-dashoffset:0}
.f-echo{margin-top:var(--s5);padding:var(--s4) var(--s5);
  background:rgba(255,255,255,.13);border-radius:var(--r-s);
  font-size:var(--t-cap);line-height:1.55;color:rgba(255,255,255,.86);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* ── 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:rgba(3,78,162,.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 — blok „Osobně" 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 Zavolejte/Volby 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 kandidáta
   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)}
/* Termín voleb 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)}
/* Počet křesel je schovaný ve větě („…má devatenáct míst. O jedno
   z nich se ucházím."), 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 jelenů
   se zkoušela a byla zamítnuta; patka je schválně nízká. */
/* Dva modré pruhy dole: kontakt v ODS 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}
/* Jelen 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:rgba(11,28,58,.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 bloku Volby
     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}
.jelen{transform:translateY(6px);opacity:0;
  transition:opacity .4s var(--ease),transform .4s var(--ease)}
.jeleni.V .jelen{opacity:.20;transform:none}
.jeleni.V .jelen--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}
  .jelen{fill:CanvasText;opacity:1}
  .jelen--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){
  .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)}
}

@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 „Dominik Hoda" bez „Mgr." — reálný text teď
     měří 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 ze „Zeptat se" 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: jelen 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á soused
     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 kostel je za Dominikem 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. */
  /* 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 — dvacet vzorků
     natažených přímo z pixelů řádku, na který pruh navazuje (390 px
     šířka, y=36 v souboru unhost-platno-b.webp), 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,
      #f0f4f9 0%,#edf0f6 5%,#e7edf2 10%,#dfe7ef 15%,#d0e0ea 20%,
      #b8d1e4 25%,#9fbede 30%,#7fa9d4 35%,#6498cb 40%,#4f88c0 45%,
      #4272a5 50%,#416ea2 55%,#426ea0 60%,#406a9d 65%,#3e699d 70%,
      #3c679a 75%,#3d6699 80%,#3b6598 85%,#3b6297 90%,#396094 95%,#375c90 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, 460px) / 1488), calc(100vw / 1480));
    height:calc(1488 * var(--s))}
  /* 80 místo desktopových 215: na šířce telefonu je 215 už moc a postava
     by lezla přes levý okraj. Zmenšeno z původních 150, aby se uvolnilo
     místo pro větší postavu (viz --s výš) — na mobilu je fotka blíž
     pravému okraji, tam ale žádný text nesedí, takže to nevadí. */
  .hero-portret{right:calc(80 * var(--s))}
  /* 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 voleb má na
     mobilu sedět PŘESNĚ uprostřed mezery mezi „A já budu Váš zástupce."
     a rubrikou „Co chci prosadit" 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)}
  .hero-text{max-width:none}
  /* Věta patří do úvodního bloku: běžný odstup odstavce od
     „A já budu Váš zástupce." nad ní. Oddělení od dalšího bloku
     (Co chci prosadit) 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}

  .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 (rychlovlak) a Rychlými kroky 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}
  /* Radar: 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)}
  /* 19 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 — Právo nahoře přes celou šířku,
     Škola a Fotbal vedle sebe pod ním — 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 štítku („ · kapitán áčka") se na úzkou kartu nevejde na
     jeden řádek — viz komentář u karty Fotbal v index.html. */
  .mozaika .dlazdice:not(.dlazdice--siroka) .mikro-dovetek{display:none}
  /* Na mobilu je sloupec ~350 px a devatenáct kusů 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. */
  .jeleni{gap:clamp(2px,.6vw,4px)}
  .jelen{width:auto;height:clamp(16px,5.34vw,24px)}
  .jelen--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}
  .jelen{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. */

