/* ============================================================================
   novy-2026-objednavka.css
   Vrstva vzhledu nad dnesnim objednavkovym formularem fox2 na /objednavka.

   CO TO JE
   Cista CSS vrstva. Nepresouva uzly, nemeni pole, nic neodstranuje. Kresli
   ctyri obrazovky, krok 0 s PSC, krokovnik, souhrn vpravo a mobilni listu
   podle Figmy 15 az 18 (desktop) a M8, M8b, M9, M10 (mobil 390 px).

   JAK SE NACITA
   V hlavicce sablony, az ZA "novy-2026.css" z balicku 25 (odtud jdou tokeny
   --zs-...) a za "content2024.css" a "template2024.css" enginu. Jen na strance
   objednavky. V nahledu (nahled/objednavka.html) se misto novy-2026.css linkuje
   primo podklady/zs26-tokeny.css.

   ZAPINAC
   Vsechny selektory zacinaji "body.zs26-obj". Tridu "zs26-obj" a atribut
   "data-zs26-krok" pridava JS (js/zs26-objednavka.js) na <body id="idbody">.
   Kdyz JS nebezi nebo spadne, z tohoto souboru se neuplatni nic a stranka
   vypada jako dnes. To je zamer, ne opomenuti.

   CO OD JS OCEKAVAM (kontrakt, podklady/KONTRAKT-vrstvy.md)
   - body.zs26-obj                          zapinac
   - body[data-zs26-krok="0..4"]            aktualni obrazovka, ATRIBUT NA BODY
   - body.zs26-obj--fox2                    vrstva ridi zalozku fox2
   - body.zs26-obj--lead                    uzivatel si vyzadal lead formular fox1
                                            (alias body.zs26-obj--fox1 je take osetren)
   - body.zs26-obj--vice                    rozbalena dieta kroku 4
   - #fox2 > [data-zs26-obrazovka="0..4"]   znacka na primych potomcich #fox2,
                                            "0" znamena "vzdy viditelne" (skryte inputy)
   - [data-zs26-volitelne="1"]              volitelne radky kroku 4
   - section.zs26-obj-psc                   krok 0, doporucuji ho vlozit jako PRVNI
                                            primy potomek #fox2 (varianta z KONTRAKTu).
                                            Varianta "tesne pred #fox2" je taky osetrena,
                                            viz sekce 4.
   - .zs26-obj-rozvrzeni                    trida na spolecnem rodici #fox2 a souhrnu,
                                            tedy na div.formular_objednavka (obal fox2).
                                            Krokovnik patri dovnitr nej, jako prvni dite.
   - .zs26-obj-akce__cena a .zs26-obj-akce__cena-popis
                                            dva prvky navic proti KONTRAKTu, potrebuje je
                                            mobilni lista z M9 a M10. Kdyz je JS nevytvori,
                                            lista jen ukaze tlacitka a nic se nerozbije.

   KTERE SELEKTORY ENGINU PREBIJIM A PROC
   1. .obsahy_prepinaci > *            (template2024.css:1114, 1115)
      Viditelnost zalozek. Prebijim, aby fox2 byl videt hned a fox1 nebliknul.
      Specificita body.zs26-obj--fox2 ... > :nth-child(N) = (0,3,0) proti (0,2,0),
      tedy bez !important.
   2. .zal > .zalozkyprepinac_klik     (template2024.css:1118, 1139)
      Pruh zalozek. Krokovnik ho nahrazuje, tak ho schovavam.
      POZOR: treti zalozka jsou darkove poukazy. Kdyz vrstva bezi, nejsou
      prokliknutelne. JS proto nesmi pridat zs26-obj--fox2, kdyz je na body
      trida ZalCustom2. Zapsano i v css/POZNAMKY.md.
   3. .cenik_nabidka .jidelnicek       (template2024.css:648, 652, 685, 688)
      Karty programu, kalorickych rad a delek. Menim jen barvy, ramecek a radius.
      PREPSANO 25. 8.: karusel se v kroku 2 meni na mrizku, viz blok U4. Rozmery
     karet se timto meni, ale position: relative na karte zustava, jinak se
     rozpadne jeji obsah
      (FceRolujParent). U #nabidkaprogram a #nabidkaDnyDelka rozmery menim,
      tam karusel neni.
   4. #nabidka_kodu .klikblok          (template2024.css:1215, 1218)
      Karty kombinace chodu. Prebijim id selektorem uvnitr body.zs26-obj,
      tedy (1,2,1) proti (1,1,0).
   5. .formular_objednavka h2 a h2 .c  (content2024.css:1150, 1149)
      Nadpisy bloku. Cislo v .c je po sbaleni do ctyr obrazovek spatne,
      cislo nese krokovnik, .c tedy skryvam.
   6. #respofix                        (template2024.css:1591, 1592, 2030)
      Dnesni mobilni lista. Nahrazuje ji .zs26-obj-akce.
      Selektor body.zs26-obj[data-zs26-krok] #respofix = (1,3,1), aby prebil
      i .body_v2.StrObjednavka.zal2 #respofix = (1,3,0).
   7. #objednavkaPrehled               (objednavka-2026-08-21.html:1736)
      Dnesni sidebar se souhrnem. Nahrazuje ho aside.zs26-obj-souhrn.
      Skryvam jen tenhle div, ne cely #sidebar, aby zustal modul m147.
   8. input, textarea, button          (content2024.css:1004, 1015, 1023)
      Tyhle zakladni styly maji !important (padding, line-height, box-shadow,
      border u tlacitek). Vlastni pole a tlacitka vrstvy je jinak neprepisou.
      !important pouzivam jen na vlastnich prvcich s prefixem .zs26-obj-,
      a jen na trech mistech: sekce 0 (pole a tlacitka vrstvy),
      tlacitko .zs26-obj-vice v sekci 9 a jeden margin-bottom v sekci 11b.
      Do poli a tlacitek enginu nesaham vubec.

   CO JE NEJISTE
   - Cislovani kroku. KONTRAKT rika data-zs26-krok="0..4" a PSC = 0, NAVRH (c)
     mapuje bloky enginu na obrazovky 2, 3, 4. Pravidla proto pokryvaji vsech pet
     hodnot 0 az 4 a plati jen jedno: pri kroku N je videt obrazovka N.
     Jestli JS oznaci PSC jako krok 1 misto 0, staci v sekci 5 pridat
     [data-zs26-krok="1"] k pravidlu viditelnosti PSC.
   - Sirka sloupce 360 px a mezera 40 px jsou z Figmy 15 az 18 (obsah 1180 px,
     levy sloupec 780 px). Pokud je obsahovy kontejner sablony uzsi, souhrn se
     pod 1024 px stejne sklopi pod formular.
   - Aktivni ramecek karty ma ve Figme barvu odkazu, na to token neni. Beru
     --zs-barva-ramecek-doporucena, coz je nejblizsi semanticky token
     a odpovida zadani "aktivni ramecek tmave zeleny".
   - Sticky souhrn: aside dostava grid-row 2 / span 20, aby mel kam lepit.
     Kdyby JS krokovnik do .zs26-obj-rozvrzeni nedal, posune se souhrn o radek.
   - Inline kalendar z Figmy 17 a preskladani karet z Figmy 16 (aktivni karta
     nahore na mobilu) v CSS nejdou, viz css/POZNAMKY.md.
   ============================================================================ */


/* ---------------------------------------------------------------------------
   0. Zaklad vrstvy a vlastni formularove prvky
   Hlavni misto s !important. Duvod je u kazdeho pravidla.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-rozvrzeni,
body.zs26-obj .zs26-obj-psc,
body.zs26-obj .zs26-obj-souhrn,
body.zs26-obj .zs26-obj-akce,
body.zs26-obj .zs26-obj-krokovnik,
body.zs26-obj .zs26-obj-hlaska {
  font-family: var(--zs-pismo);
  color: var(--zs-barva-text-zakladni);
  box-sizing: border-box;
}

/* Dedeni box-sizing uz resi sablona (template2024.css:4 a 8 az 10,
   html je border-box a * dedi), tady se nic dalsiho nastavovat nemusi. */

/* Vlastni pole vrstvy. content2024.css:1004 dava kazdemu input padding
   28px 31px !important, line-height 16px !important a margin 0 !important.
   Bez !important by pole vrstvy melo 108 px na vysku. */
body.zs26-obj .zs26-obj-pole,
body.zs26-obj .zs26-obj-psc__pole {
  width: 100%;
  max-width: 100%;
  height: var(--zs-vyska-pole);
  padding: 0 var(--zs-odstup-base) !important;
  line-height: var(--zs-vyska-pole) !important;
  font-size: 16px !important;
  font-family: var(--zs-pismo) !important;
  color: var(--zs-barva-text-zakladni);
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-pole);
  border-radius: var(--zs-radius-male);
  box-shadow: none !important;
}

/* content2024.css:1023 dava kazdemu :focus box-shadow !important.
   Tokeny stiny nemaji, misto stinu je fokusovy outline. */
body.zs26-obj .zs26-obj-pole:focus,
body.zs26-obj .zs26-obj-psc__pole:focus {
  box-shadow: none !important;
  border-color: var(--zs-barva-ramecek-doporucena) !important;
  outline: 2px solid var(--zs-barva-stav-fokus);
  outline-offset: 2px;
}

/* Vlastni tlacitka vrstvy. content2024.css:1015 dava kazdemu <button>
   padding 21px 25px !important a border 0 !important, takze bez !important
   nejde udelat ani vyska 48 px, ani sekundarni tlacitko s rameckem. */
body.zs26-obj .zs26-obj-tlacitko {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--zs-odstup-sm);
  min-height: var(--zs-vyska-tlacitko);
  padding: 0 var(--zs-odstup-xl) !important;
  font-family: var(--zs-pismo) !important;
  font-size: 16px !important;
  font-weight: 600;
  line-height: 1;
  text-align: center;
  text-decoration: none;
  border: 2px solid transparent !important;
  border-radius: var(--zs-radius-pill);
  cursor: pointer;
  background: var(--zs-barva-akce-primarni);
  color: var(--zs-barva-akce-primarni-text);
  box-shadow: none !important;
}

body.zs26-obj .zs26-obj-tlacitko:hover {
  background: var(--zs-barva-akce-primarni-hover);
  color: var(--zs-barva-akce-primarni-text);
}

body.zs26-obj .zs26-obj-tlacitko--sekundarni {
  background: var(--zs-barva-pozadi-karta);
  color: var(--zs-barva-text-nadpis);
  border-color: var(--zs-barva-akce-sekundarni-ramecek) !important;
}

body.zs26-obj .zs26-obj-tlacitko--sekundarni:hover {
  background: var(--zs-barva-akce-sekundarni-hover);
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-tlacitko--textove {
  min-height: auto;
  padding: var(--zs-odstup-sm) var(--zs-odstup-xs) !important;
  background: transparent;
  color: var(--zs-barva-text-odkaz);
  border-color: transparent !important;
  text-decoration: none;
}

body.zs26-obj .zs26-obj-tlacitko--textove:hover {
  background: transparent;
  color: var(--zs-barva-text-odkaz);
  text-decoration: underline;
}

body.zs26-obj .zs26-obj-tlacitko:focus-visible,
body.zs26-obj .zs26-obj-krokovnik__polozka:focus-visible {
  outline: 2px solid var(--zs-barva-stav-fokus);
  outline-offset: 2px;
}

body.zs26-obj .zs26-obj-tlacitko[disabled],
body.zs26-obj .zs26-obj-tlacitko[aria-disabled="true"] {
  opacity: .45;
  pointer-events: none;
}

/* Typografie vrstvy. Tridy .zs-h2 az .zs-popisek ze zs26-tokeny.css visi pod
   .zs26 a ta na <body> objednavky neni, tak si tvary opisuju z tokenu. */
body.zs26-obj .zs26-obj-nadpis {
  margin: 0 0 var(--zs-odstup-md) 0;
  padding: 0;
  font-size: 26px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.015em;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-perex {
  margin: 0 0 var(--zs-odstup-lg) 0;
  font-size: 17px;
  line-height: 1.5;
  color: var(--zs-barva-text-tlumeny);
}

body.zs26-obj .zs26-obj-popisek {
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--zs-barva-text-popisek);
}


/* ---------------------------------------------------------------------------
   1. Zalozky enginu a lead formular fox1
   Plati jen v rezimu body.zs26-obj--fox2. Fox1 zustava v DOMu, jen display none,
   takze se jeho pole dal serializuji a treti zalozka (darkove poukazy) o data
   neprijde.
   --------------------------------------------------------------------------- */

/* Pruh zalozek nahrazuje krokovnik. */
body.zs26-obj--fox2 .objform > .zal {
  display: none;
}

/* Obsah 0 je fox1, obsah 1 je fox2. Prebiji .obsahy_prepinaci > *.vybrany. */
body.zs26-obj--fox2 .obsahy_prepinaci > :nth-child(1) {
  display: none;
}

body.zs26-obj--fox2 .obsahy_prepinaci > :nth-child(2) {
  display: block;
}

/* Odkaz .zs26-obj-lead vrati lead formular. JS pridava tridu na body,
   osetrene jsou obe varianty nazvu. */
body.zs26-obj--fox2.zs26-obj--lead .obsahy_prepinaci > :nth-child(1),
body.zs26-obj--fox2.zs26-obj--fox1 .obsahy_prepinaci > :nth-child(1),
body.zs26-obj--fox2.ZalCustom2 .obsahy_prepinaci > :nth-child(1) {
  display: block;
}

body.zs26-obj--fox2.zs26-obj--lead .obsahy_prepinaci > :nth-child(2),
body.zs26-obj--fox2.zs26-obj--fox1 .obsahy_prepinaci > :nth-child(2),
body.zs26-obj--fox2.ZalCustom2 .obsahy_prepinaci > :nth-child(2) {
  display: none;
}

/* V rezimu lead nema smysl kreslit krokovnik ani vlastni akce. */
body.zs26-obj--lead .zs26-obj-krokovnik,
body.zs26-obj--lead .zs26-obj-akce,
body.zs26-obj--fox1 .zs26-obj-krokovnik,
body.zs26-obj--fox1 .zs26-obj-akce {
  display: none;
}

/* Dnesni sidebar se souhrnem. Nahrazuje ho aside.zs26-obj-souhrn. */
body.zs26-obj[data-zs26-krok] #objednavkaPrehled {
  display: none;
}


/* ---------------------------------------------------------------------------
   2. Rozvrzeni, dva sloupce
   Grid na div.formular_objednavka (obal fox2), kteremu JS da .zs26-obj-rozvrzeni.
   Levy sloupec je formular, pravy souhrn 360 px. Mezera 40 px = 24 + 16,
   protoze token na 40 px neni.
   row-gap je nula zamerne, odstupy resi margin na detech. Diky tomu muze
   souhrn dostat grid-row 2 / span 20 a mit kam se lepit, aniz by vznikaly
   viditelne mezery mezi prazdnymi implicitnimi radky.
   --------------------------------------------------------------------------- */

/* OPRAVA QA 2026-08-21b: navazano na zs26-obj--fox2. Pri prepnuti na lead
   formular (odkaz "Zavolame vam") JS tridu zs26-obj--fox2 sunda, a kdyz na ni
   grid nevisi, prebije engine (.obsahy_prepinaci > * {display:none}) a na
   zivem webu byly videt oba formulare naraz. Bez zs26-obj--fox2 se vrstva
   uklidi a o viditelnost panelu se stara engine sam.
   OPRAVA QA 2026-08-21: trida je zdvojena zamerne, kvuli specificite.
   div.formular_objednavka je zaroven .obsahy_prepinaci > :nth-child(2),
   na ktere sedi vlastni pravidlo v sekci 1 (display: block, specificita 0,3,0).
   Puvodni body.zs26-obj .zs26-obj-rozvrzeni melo jen 0,2,0 a prohravalo,
   takze grid nikdy nevznikl a souhrn se lepil pod formular. */
body.zs26-obj--fox2 .zs26-obj-rozvrzeni.zs26-obj-rozvrzeni {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  column-gap: calc(var(--zs-odstup-xl) + var(--zs-odstup-base));
  row-gap: 0;
  align-items: start;
}

body.zs26-obj .zs26-obj-rozvrzeni > * {
  grid-column: 1;
  min-width: 0;
}

body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-krokovnik {
  grid-column: 1 / -1;
  grid-row: 1;
}

body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-souhrn {
  grid-column: 2;
  grid-row: 2 / span 20;
  align-self: start;
  position: sticky;
  top: var(--zs-odstup-xl);
}

/* Formular jako karta z Figmy 15 az 18. */
body.zs26-obj .zs26-obj-rozvrzeni > #fox2 {
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-karta);
  padding: var(--zs-odstup-xl);
}

/* Kdyz JS vlozi krok 0 pred #fox2 (varianta b z NAVRH), formular enginu
   se v kroku 0 schova cely. Pole zustavaji v DOMu, serialize je bere
   i pri display none. Kdyz je krok 0 uvnitr #fox2, tohle pravidlo nesedi
   na nic a nic nedela. */
/* OPRAVA QA 2026-08-21: JS oznacuje obrazovku s PSC jako krok 1, ne 0
   (hlavicka js/zs26-objednavka.js, sekce ROZPOR V ZADANI). Krok 0 je jen
   kratky mezistav behem inicializace. Pravidlo proto plati pro oba. */
body.zs26-obj[data-zs26-krok="0"] .zs26-obj-psc ~ #fox2,
body.zs26-obj[data-zs26-krok="1"] .zs26-obj-psc ~ #fox2 {
  display: none;
}

body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-psc {
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-karta);
  padding: var(--zs-odstup-xl);
}

/* Kdyz krok 0 lezi uvnitr #fox2, karta uz je #fox2 sam. */
body.zs26-obj #fox2 > .zs26-obj-psc {
  background: none;
  border: 0;
  border-radius: 0;
  padding: 0;
}


/* ---------------------------------------------------------------------------
   3. Krokovnik
   Figma 15 az 18: pilulky "1 Kam vozit", "2 Jidlo", "3 Od kdy",
   "4 Adresa a kontakt", mezi nimi sipka. Aktivni je tmave zelena,
   hotovy krok ma fajfku. Mobil (M8, M9, M10): aktivni pilulka s nazvem,
   ostatni jen cislo.
   Stav --aktivni a --hotovo nastavuje JS, CSS je jen kresli.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-krokovnik {
  margin: 0 0 var(--zs-odstup-xl) 0;
  padding: 0;
}

body.zs26-obj .zs26-obj-krokovnik > ol {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--zs-odstup-sm);
  margin: 0;
  padding: 0;
  list-style: none;
}

body.zs26-obj .zs26-obj-krokovnik__polozka {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: var(--zs-odstup-xs);
  margin: 0 0 0 var(--zs-odstup-base);
  padding: var(--zs-odstup-sm) var(--zs-odstup-base);
  background: var(--zs-barva-pozadi-karta);
  color: var(--zs-barva-text-nadpis);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-pill);
  font-size: 14.5px;
  font-weight: 600;
  line-height: 1.2;
  list-style: none;
  white-space: nowrap;
}

body.zs26-obj .zs26-obj-krokovnik__polozka:first-child {
  margin-left: 0;
}

/* Sipka mezi pilulkami. Pilulka je inline-flex, takze ::before uvnitr ni by
   sedelo na tmavem pozadi. Proto absolutne, do mezery vlevo (8 px gap
   plus 16 px margin = 24 px). */
body.zs26-obj .zs26-obj-krokovnik__polozka + .zs26-obj-krokovnik__polozka::before {
  content: "\2192";
  position: absolute;
  top: 50%;
  left: calc(var(--zs-odstup-lg) * -1);
  transform: translateY(-50%);
  color: var(--zs-barva-text-popisek);
  font-weight: 400;
}

body.zs26-obj .zs26-obj-krokovnik__polozka--aktivni {
  background: var(--zs-barva-pozadi-tmave);
  border-color: var(--zs-barva-pozadi-tmave);
  color: var(--zs-barva-text-na-tmavem);
}

body.zs26-obj .zs26-obj-krokovnik__polozka--hotovo {
  border-color: var(--zs-barva-ramecek-doporucena);
  color: var(--zs-barva-text-nadpis);
}

/* Fajfka u hotoveho kroku. Kdyby ji JS psal do textu sam, tohle pravidlo
   se zrusi odebranim tridy --hotovo, ne prepsanim obsahu. */
body.zs26-obj .zs26-obj-krokovnik__polozka--hotovo .zs26-obj-krokovnik__nazev::after {
  content: "\00a0\2713";
  color: var(--zs-barva-ikona-check);
}

body.zs26-obj .zs26-obj-krokovnik__polozka--aktivni.zs26-obj-krokovnik__polozka--hotovo .zs26-obj-krokovnik__nazev::after {
  color: var(--zs-barva-text-na-tmavem);
}

/* Zpetny proklik. Kroky, ktere jeste nejsou hotove, JS nechava bez tridy
   --lze, takze na ne kurzor neukazuje. */
body.zs26-obj .zs26-obj-krokovnik__polozka--hotovo,
body.zs26-obj .zs26-obj-krokovnik__polozka--lze {
  cursor: pointer;
}


/* ---------------------------------------------------------------------------
   4. Obrazovky
   #fox2 > [data-zs26-obrazovka="N"] jsou prime deti formulare, oznacene JSkem.
   "0" znamena vzdy viditelne (skryte inputy jazyk a hodnotaObjednavky).

   Pozor na zpusob skryvani. Nejde napsat "vsechno skryj, aktualni ukaz
   pres display block", protoze mezi primymi detmi #fox2 je i div#fakturacni
   s tridou .skryte, kterou ridi engine. Vynuceny display block by ho odkryl.
   Skryva se proto vzdycky jen to, co k aktualnimu kroku nepatri, a viditelne
   prvky zustavaji na svem vlastnim display.
   --------------------------------------------------------------------------- */

body.zs26-obj[data-zs26-krok="0"] #fox2 > [data-zs26-obrazovka]:not([data-zs26-obrazovka="0"]),
body.zs26-obj[data-zs26-krok="1"] #fox2 > [data-zs26-obrazovka]:not([data-zs26-obrazovka="1"]):not([data-zs26-obrazovka="0"]),
body.zs26-obj[data-zs26-krok="2"] #fox2 > [data-zs26-obrazovka]:not([data-zs26-obrazovka="2"]):not([data-zs26-obrazovka="0"]),
body.zs26-obj[data-zs26-krok="3"] #fox2 > [data-zs26-obrazovka]:not([data-zs26-obrazovka="3"]):not([data-zs26-obrazovka="0"]),
body.zs26-obj[data-zs26-krok="4"] #fox2 > [data-zs26-obrazovka]:not([data-zs26-obrazovka="4"]):not([data-zs26-obrazovka="0"]) {
  display: none;
}

/* Krok 0 je videt jen pri data-zs26-krok="0". Sekce PSC nese
   data-zs26-obrazovka="0", takze ji pravidlo vyse nikdy neschova, musi to
   udelat tenhle explicitni radek. */
/* OPRAVA QA 2026-08-21: pridan krok 1, viz POZNAMKY.md sekce 4
   ("kdyz se rozhodnes oznacit PSC jako krok 1, pridej [data-zs26-krok='1']").
   JS se hned po startu prepne na krok 1, bez teto opravy byla prvni
   obrazovka prazdna: PSC schovane a #fox2 taky. */
body.zs26-obj:not([data-zs26-krok="0"]):not([data-zs26-krok="1"]) .zs26-obj-psc {
  display: none;
}

body.zs26-obj[data-zs26-krok="0"] .zs26-obj-psc,
body.zs26-obj[data-zs26-krok="1"] .zs26-obj-psc {
  display: block;
}

/* Zamek behem AJAX volani. JS dava #fox2 tridu zs26-ceka, dokud bezi POST.
   Karty se nedeaktivuji (zadny pointer-events none na kartach, klik enginu
   musi zustat funkcni), jen se zesvetli a kurzor rekne, ze se ceka. */
body.zs26-obj #fox2.zs26-ceka {
  opacity: .6;
  cursor: progress;
}

/* OPRAVA QA 2026-08-21: pointer-events na karty po dobu cekani.
   Bez toho projdou dva rychle kliky na dve ruzne karty jako dva soubezne
   POSTy (overeno na zivem webu, 2 volani, DOM pak urcuje ten, ktery dobehne
   pozdeji). Engine zadnou ochranu proti soubehu nema.
   Zamek je docasny, tridu zs26-ceka sunda ajaxComplete zhruba po 200 ms,
   takze onclick enginu nic trvale neztraci. Zamerne jen na kartach voleb,
   NE na celem #fox2: v kroku 4 posila preform request kazda zmena pole
   a zamek pres cely formular by blokoval psani. */
body.zs26-obj #fox2.zs26-ceka .cenik_nabidka .jidelnicek,
body.zs26-obj #fox2.zs26-ceka #nabidkaprogram .jidelnicek,
body.zs26-obj #fox2.zs26-ceka #nabidka_kodu .klikblok {
  pointer-events: none;
}


/* ---------------------------------------------------------------------------
   5. Krok 0, PSC
   Figma 15 a 15b (desktop), M8 a M8b (mobil).
   Texty z Figmy, JS je pise, CSS jen ramuje:
     nadpis  "Kam vam budeme vozit?"
     perex   "Zadejte PSC, kam mame jidlo vozit. Hned overime, jestli k vam
              jezdime, bez telefonatu a bez registrace."
     label   "PSC doruceni"
     btn     "Overit"
     napoveda "Overime, jestli k vam vozime."
     odkaz   "Zobrazit mapu rozvozu"
     vozime  "Do ... jezdime. Pokracujte vyberem jidla, PSC si pamatujeme."
             + tlacitko "Vybrat jidlo"
     nevozime "Sem zatim nevozime. Nechte nam e-mail nebo telefon, ozveme se,
              az rozvoz rozsirime. Nebo zkuste jine PSC (prace, rodice)."
   Poradi deti .zs26-obj-psc__form, se kterym pocitam:
   <label> (cely radek), <input>, <button>.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-psc__nadpis {
  margin: 0 0 var(--zs-odstup-md) 0;
  padding: 0;
  font-size: 26px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.015em;
  color: var(--zs-barva-text-nadpis);
}

/* OPRAVA QA 2026-08-21: JS stavi nadpis obrazovky dvakrat, jednou v
   div.zs26-obj-zahlavi (h2, text KROKY[1].nadpis) a hned pod tim v sekci PSC
   (h3, tentyz text). Na zivem webu byl nadpis "Kam vam budeme vozit?" videt
   dvakrat pod sebou. Sourozenecky selektor schova ten druhy jen tehdy, kdyz
   zahlavi opravdu existuje, takze pri vypnutem flagu krokovnik nadpis zustane. */
body.zs26-obj .zs26-obj-zahlavi + .zs26-obj-psc .zs26-obj-psc__nadpis {
  display: none;
}

body.zs26-obj .zs26-obj-psc__perex {
  margin: 0 0 var(--zs-odstup-lg) 0;
  font-size: 17px;
  line-height: 1.5;
  color: var(--zs-barva-text-tlumeny);
}

body.zs26-obj .zs26-obj-psc__form {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--zs-odstup-md);
  margin: 0 0 var(--zs-odstup-sm) 0;
  padding: 0;
}

body.zs26-obj .zs26-obj-psc__form > label {
  flex: 0 0 100%;
  position: static;
  margin: 0 0 var(--zs-odstup-sm) 0;
  padding: 0;
  background: none;
  font-size: 16px;
  color: var(--zs-barva-text-zakladni);
}

body.zs26-obj .zs26-obj-psc__pole {
  flex: 0 1 280px;
  width: 280px;
}

body.zs26-obj .zs26-obj-psc__tlacitko {
  flex: 0 0 auto;
}

body.zs26-obj .zs26-obj-psc__napoveda {
  margin: 0 0 var(--zs-odstup-md) 0;
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--zs-barva-text-popisek);
}

body.zs26-obj .zs26-obj-psc__mapa {
  display: inline-block;
  margin: 0 0 var(--zs-odstup-lg) 0;
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
  font-size: 15.5px;
  text-decoration: none;
}

body.zs26-obj .zs26-obj-psc__mapa:hover {
  text-decoration: underline;
}

/* Stavovy blok. Bez varianty je schovany, JS mu prida --vozime, --nevozime
   nebo --chyba. */
body.zs26-obj .zs26-obj-psc__stav {
  display: none;
  margin: 0;
  padding: var(--zs-odstup-lg);
  border-radius: var(--zs-radius-karta);
  font-size: 16px;
  line-height: 1.5;
}

body.zs26-obj .zs26-obj-psc__stav--vozime,
body.zs26-obj .zs26-obj-psc__stav--nevozime,
body.zs26-obj .zs26-obj-psc__stav--chyba {
  display: block;
}

body.zs26-obj .zs26-obj-psc__stav--vozime {
  background: var(--zs-barva-stav-ok-plo);
  color: var(--zs-barva-text-nadpis);
  font-weight: 600;
}

body.zs26-obj .zs26-obj-psc__stav--nevozime {
  background: var(--zs-barva-stav-pozor-plo);
  color: var(--zs-barva-text-zakladni);
}

body.zs26-obj .zs26-obj-psc__stav--chyba {
  background: var(--zs-barva-stav-chyba-plo);
  color: var(--zs-barva-stav-chyba);
}

body.zs26-obj .zs26-obj-psc__stav .zs26-obj-tlacitko {
  margin-top: var(--zs-odstup-base);
}

/* Lead uvnitr stavu nevozime: pole na kontakt, sekundarni tlacitko
   "Ozvete se mi", pod nim odkaz "Zkusit jine PSC". */
body.zs26-obj .zs26-obj-psc__lead {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--zs-odstup-md);
  margin-top: var(--zs-odstup-base);
}

body.zs26-obj .zs26-obj-psc__lead > label {
  flex: 0 0 100%;
  position: static;
  margin: 0;
  padding: 0;
  background: none;
}

body.zs26-obj .zs26-obj-psc__lead .zs26-obj-pole {
  flex: 0 1 280px;
  width: 280px;
}

body.zs26-obj .zs26-obj-psc__lead a {
  flex: 0 0 100%;
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
  text-decoration: none;
}

body.zs26-obj .zs26-obj-psc__lead a:hover {
  text-decoration: underline;
}


/* ---------------------------------------------------------------------------
   6. Restyling karet enginu uvnitr obrazovek
   Lehce a bezpecne. Zadne pointer-events none, zadne zasahy do rozmeru tam,
   kde na nich stoji karusel.
   --------------------------------------------------------------------------- */

/* 6a. Nadpisy bloku.
   Dnes <h2><span class="c">N.</span>Text</h2> v .blok.
   Cislo v .c po sbaleni do ctyr obrazovek neodpovida, cislo nese krokovnik. */
body.zs26-obj #fox2 .blok > h2 {
  margin: 0 0 var(--zs-odstup-md) 0;
  padding: 0;
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.015em;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj #fox2 .blok > h2 > .c {
  display: none;
}

/* Prvni blok kazde obrazovky nese hlavni nadpis z Figmy, ostatni bloky uvnitr
   teze obrazovky jsou podnadpisy ("Jak prave zijete?", "Velikost porce").
   Id jsou stabilni: obrazovka 2 zacina #vyber1, obrazovka 3 #vyber4,
   obrazovka 4 #vyber7 (DOM-objednavka.md, kapitola 3). */
body.zs26-obj #fox2 > #vyber1 > h2,
body.zs26-obj #fox2 > #vyber4 > h2,
body.zs26-obj #fox2 > #vyber7 > h2 {
  font-size: 26px;
  line-height: 1.2;
}

body.zs26-obj #fox2 > #vyber2 > h2,
body.zs26-obj #fox2 > #vyber3 > h2,
body.zs26-obj #fox2 > #vyber5 > h2 {
  font-size: 17.5px;
  line-height: 1.35;
}

/* Cary mezi bloky uvnitr jedne obrazovky jsou v novem rozvrzeni sum. */
body.zs26-obj #fox2 > hr[data-zs26-obrazovka] {
  border: 0;
  height: var(--zs-odstup-xl);
  margin: 0;
  background: none;
}

/* 6b. Karty programu, #vyber1.
   PREPSANO 25. 8., viz blok U4: karusel se v kroku 2 meni na mrizku, sipky
   se skryvaji a rozmery karet se meni. Puvodne (FceRolujParent
   a .kolsipka v template2024.css:701). Menim jen barvy a ramecek. */
body.zs26-obj #fox2 .cenik_nabidka .jidelnicek {
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-karta);
  transition: none;
}

body.zs26-obj #fox2 .cenik_nabidka .jidelnicek:hover {
  background: var(--zs-barva-pozadi-jemne);
  border-color: var(--zs-barva-ramecek-doporucena);
}

body.zs26-obj #fox2 .cenik_nabidka .jidelnicek.act {
  background: var(--zs-barva-akcent-limetka-plo);
  border: 2px solid var(--zs-barva-ramecek-doporucena);
}

body.zs26-obj #fox2 .cenik_nabidka .jidelnicek h6 {
  color: var(--zs-barva-text-nadpis);
  font-weight: 700;
  font-size: 14px;
}

/* 6c. Velikost porce, #nabidkaprogram (varianta kJ).
   Kontejner ma trida "cenik_nabidka nabidkaKalorickeRady", tedy grid
   repeat(auto-fill, 120px) s kartami vysokymi 110 px (template2024.css:1242
   a 1273). Figma 16 z toho dela cipy "Menu", "Menu XL". Karusel tu neni
   (#of_volba2 ma tridu cenikpasNE), takze rozmery menit muzu. */
body.zs26-obj #fox2 #nabidkaprogram {
  display: flex;
  flex-wrap: wrap;
  gap: var(--zs-odstup-sm);
  white-space: normal;
}

body.zs26-obj #fox2 #nabidkaprogram .jidelnicek {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  min-width: 88px;
  height: auto;
  min-height: var(--zs-vyska-tlacitko-male);
  margin: 0;
  padding: var(--zs-odstup-sm) var(--zs-odstup-base);
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-male);
}

body.zs26-obj #fox2 #nabidkaprogram .jidelnicek.act {
  background: var(--zs-barva-akcent-limetka-plo);
  border: 2px solid var(--zs-barva-ramecek-doporucena);
}

/* Vnitrni obal karty ma v enginu vysku 100 % a vlastni flex
   (template2024.css:1282), pri automaticke vysce cipu to musi jit dolu. */
body.zs26-obj #fox2 #nabidkaprogram .jidelnicek > div {
  width: auto;
  height: auto;
  margin: 0;
  padding: 0;
}

body.zs26-obj #fox2 #nabidkaprogram .jidelnicek h6 {
  position: static;
  top: auto;
  bottom: auto;
  width: auto;
  margin: 0;
  padding: 0;
  font-size: 15.5px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--zs-barva-text-nadpis);
  white-space: nowrap;
}

/* 6d. Kombinace chodu, #nabidka_kodu .klikblok.
   Figma 16, karta s nazvem a cenou za den. Cena uz je v DOMu, sedi
   jako textovy uzel vedle <h6> (objednavka-zal2-typ5-kod-CD-program1.html:1173). */
body.zs26-obj #fox2 #nabidka_kodu .klikblok {
  flex-direction: column;
  gap: var(--zs-odstup-xs);
  padding: var(--zs-odstup-md) var(--zs-odstup-base);
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-male);
  color: var(--zs-barva-text-zakladni);
  transition: none;
}

body.zs26-obj #fox2 #nabidka_kodu .klikblok:hover {
  background: var(--zs-barva-pozadi-jemne);
  border-color: var(--zs-barva-ramecek-doporucena);
}

body.zs26-obj #fox2 #nabidka_kodu .klikblok.act {
  background: var(--zs-barva-akcent-limetka-plo);
  border: 2px solid var(--zs-barva-ramecek-doporucena);
}

/* V karte je jeden vnitrni obal a v nem <h6>Celodenni</h6> plus holy textovy
   uzel "558 Kc" (markup enginu ma navic zavirajici </span>, takze se cena
   neda zamerit vlastnim selektorem). Cena je druhy radek diky blokovemu h6. */
body.zs26-obj #fox2 #nabidka_kodu .klikblok > div {
  width: 100%;
  font-size: 14.5px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--zs-barva-text-tlumeny);
}

body.zs26-obj #fox2 #nabidka_kodu .klikblok h6 {
  margin: 0;
  padding: 0;
  font-size: 15.5px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj #fox2 #nabidka_kodu .klikblok.act h6 {
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj #fox2 .rozbalKody {
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
}

/* 6e. Delky, #nabidkaDnyDelka.
   Figma 17: cip se dvema radky, nazev a "5 dnu, 1 240 Kc". Druhy radek v DOMu
   dnes neni, doplnit ho muze jen JS, viz css/POZNAMKY.md. CSS pripravuje misto. */
body.zs26-obj #fox2 #nabidkaDnyDelka.cenik_nabidka.nabidkaDnyDelka {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  grid-auto-rows: auto;
  grid-gap: var(--zs-odstup-sm);
  white-space: normal;
}

body.zs26-obj #fox2 #nabidkaDnyDelka .jidelnicek {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--zs-odstup-xs);
  width: auto;
  height: auto;
  min-height: 56px;
  margin: 0;
  padding: var(--zs-odstup-md) var(--zs-odstup-sm);
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-male);
  text-align: center;
}

body.zs26-obj #fox2 #nabidkaDnyDelka .jidelnicek.act {
  background: var(--zs-barva-akcent-limetka-plo);
  border: 2px solid var(--zs-barva-ramecek-doporucena);
}

/* Kontejner delek nese i tridu "nabidkaprogram", takze na nej sedi
   template2024.css:702 az 705 (karta 130x90, vnitrni obal s paddingem 25 px).
   Oboje musi dolu, jinak je cip dvakrat vyssi, nez ma byt. */
body.zs26-obj #fox2 #nabidkaDnyDelka .jidelnicek > div {
  width: auto;
  height: auto;
  margin: 0;
  padding: 0;
}

body.zs26-obj #fox2 #nabidkaDnyDelka .jidelnicek h6 {
  position: static;
  top: auto;
  bottom: auto;
  width: auto;
  margin: 0;
  padding: 0;
  font-size: 15.5px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--zs-barva-text-nadpis);
  white-space: normal;
}

/* Radek s cenou, ktery do karty doplni JS. */
body.zs26-obj #fox2 #nabidkaDnyDelka .zs26-obj-cip-cena {
  font-size: 13.5px;
  line-height: 1.3;
  color: var(--zs-barva-text-popisek);
  font-weight: 400;
}

/* 6f. Doplnky, #vyber5. Karta si nechava foto, meni se jen ramecek. */
body.zs26-obj #fox2 .nabidka_doplnky .doplnek {
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-karta);
  background: var(--zs-barva-pozadi-karta);
}

body.zs26-obj #fox2 .nabidka_doplnky .doplnek.act {
  background: var(--zs-barva-akcent-limetka-plo);
  border: 2px solid var(--zs-barva-ramecek-doporucena);
}


/* ---------------------------------------------------------------------------
   7. Souhrn objednavky
   Figma 16 a 17, pravy panel. Kremove pozadi, dl radky, cena za den velka,
   celkem, stav.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-souhrn {
  background: var(--zs-barva-pozadi-sekce-2);
  border-radius: var(--zs-radius-karta);
  padding: var(--zs-odstup-xl);
}

body.zs26-obj .zs26-obj-souhrn__nadpis {
  margin: 0 0 var(--zs-odstup-base) 0;
  padding: 0;
  font-size: 17.5px;
  font-weight: 700;
  line-height: 1.35;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-souhrn__radky {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  column-gap: var(--zs-odstup-md);
  row-gap: var(--zs-odstup-sm);
  margin: 0 0 var(--zs-odstup-base) 0;
  padding: 0 0 var(--zs-odstup-base) 0;
  border-bottom: 1px solid var(--zs-barva-ramecek-karta);
}

body.zs26-obj .zs26-obj-souhrn__radky dt {
  margin: 0;
  font-size: 15.5px;
  color: var(--zs-barva-text-popisek);
}

body.zs26-obj .zs26-obj-souhrn__radky dd {
  margin: 0;
  font-size: 15.5px;
  font-weight: 700;
  color: var(--zs-barva-text-nadpis);
  text-align: right;
}

body.zs26-obj .zs26-obj-souhrn__cena-den {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--zs-odstup-md);
  margin: 0 0 var(--zs-odstup-sm) 0;
  font-size: 17.5px;
  font-weight: 700;
  color: var(--zs-barva-text-nadpis);
}

/* Castka. JS ji podle KONTRAKTu sype dovnitr, obalena at je <strong>
   nebo <span class="zs26-obj-souhrn__castka">. */
body.zs26-obj .zs26-obj-souhrn__cena-den strong,
body.zs26-obj .zs26-obj-souhrn__cena-den .zs26-obj-souhrn__castka {
  font-size: 28px;
  font-weight: 700;
  letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-souhrn__rozpad {
  margin: 0 0 var(--zs-odstup-md) 0;
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--zs-barva-text-popisek);
}

body.zs26-obj .zs26-obj-souhrn__celkem {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--zs-odstup-md);
  margin: 0 0 var(--zs-odstup-sm) 0;
  font-size: 17.5px;
  font-weight: 700;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-souhrn__celkem strong,
body.zs26-obj .zs26-obj-souhrn__celkem .zs26-obj-souhrn__castka {
  font-size: 20px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

body.zs26-obj .zs26-obj-souhrn__stav {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--zs-barva-text-popisek);
}

body.zs26-obj .zs26-obj-souhrn a {
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
  text-decoration: none;
}

body.zs26-obj .zs26-obj-souhrn a:hover {
  text-decoration: underline;
}

/* Karta "Nevite si rady?" pod souhrnem, Figma 16. Odkaz na lead vetev fox1. */
body.zs26-obj .zs26-obj-lead {
  margin: var(--zs-odstup-base) 0 0 0;
  padding: var(--zs-odstup-xl);
  background: var(--zs-barva-pozadi-karta);
  border: 1px solid var(--zs-barva-ramecek-karta);
  border-radius: var(--zs-radius-karta);
  font-size: 15.5px;
  line-height: 1.55;
  color: var(--zs-barva-text-tlumeny);
}

body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-lead {
  grid-column: 2;
}

body.zs26-obj .zs26-obj-lead a {
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
  text-decoration: none;
}

body.zs26-obj .zs26-obj-lead a:hover {
  text-decoration: underline;
}


/* ---------------------------------------------------------------------------
   8. Akce a mobilni lista
   Desktop: primarni "Pokracovat: <nazev dalsiho kroku>", vedle textove "Zpet".
   Mobil: lepi se dolu, vlevo cena, vpravo tlacitko (M9, M10).
   Dnesni lista enginu #respofix se schova.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-akce {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--zs-odstup-xl);
  margin: var(--zs-odstup-xl) 0 0 0;
}

body.zs26-obj .zs26-obj-akce__cena {
  display: none;
  font-size: 20px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1.2;
  color: var(--zs-barva-text-nadpis);
}

body.zs26-obj .zs26-obj-akce__cena-popis {
  display: none;
  font-size: 13.5px;
  line-height: 1.3;
  color: var(--zs-barva-text-popisek);
}

body.zs26-obj .zs26-obj-akce__napoveda {
  font-size: 15.5px;
  color: var(--zs-barva-text-popisek);
}

/* Dnesni mobilni lista. Selektor s atributem, aby prebil
   .body_v2.StrObjednavka.zal2 #respofix (template2024.css:2030), ktery ma
   tri tridy. Bez toho by to chtelo !important. */
body.zs26-obj[data-zs26-krok] #respofix {
  display: none;
}


/* ---------------------------------------------------------------------------
   9. Dieta kroku 4
   Volitelne radky jsou v DOMu porad (serializuji se), jen se neukazuji.
   Skryva se pres :not(), ne pres vynuceny display, aby se pri rozbaleni
   vratil kazdemu uzlu jeho vlastni display. Dulezite u div#fakturacni,
   ktery ma tridu .skryte a ridi si ho engine pres class_toggle.
   --------------------------------------------------------------------------- */

body.zs26-obj:not(.zs26-obj--vice) [data-zs26-volitelne="1"] {
  display: none;
}

/* Textove tlacitko "Dalsi moznosti". Je to <button>, takze na nej sedi
   content2024.css:1015 s padding 21px 25px !important a border 0 !important.
   Odtud ty !important, jinak by to bylo zelene tlacitko se 42 px paddingu. */
body.zs26-obj .zs26-obj-vice {
  display: inline-flex;
  align-items: center;
  gap: var(--zs-odstup-xs);
  min-height: auto;
  margin: var(--zs-odstup-base) 0;
  padding: var(--zs-odstup-sm) var(--zs-odstup-xs) !important;
  background: transparent;
  border: 0 !important;
  color: var(--zs-barva-text-odkaz);
  font-family: var(--zs-pismo) !important;
  font-size: 15.5px !important;
  font-weight: 600;
  line-height: 1.3;
  cursor: pointer;
  box-shadow: none !important;
}

body.zs26-obj .zs26-obj-vice:hover {
  color: var(--zs-barva-text-odkaz);
  text-decoration: underline;
}

body.zs26-obj .zs26-obj-vice::before {
  content: "+";
  font-weight: 700;
}

body.zs26-obj--vice .zs26-obj-vice::before {
  content: "\2212";
}

body.zs26-obj .zs26-obj-vice:focus-visible {
  outline: 2px solid var(--zs-barva-stav-fokus);
  outline-offset: 2px;
}


/* ---------------------------------------------------------------------------
   10. Hlasky vrstvy
   Figma 16: informacni pas na kremovem pozadi s tmave zlutym textem.
   --------------------------------------------------------------------------- */

body.zs26-obj .zs26-obj-hlaska {
  margin: var(--zs-odstup-base) 0;
  padding: var(--zs-odstup-md) var(--zs-odstup-base);
  border-radius: var(--zs-radius-male);
  font-size: 15.5px;
  font-weight: 600;
  line-height: 1.5;
}

/* OPRAVA QA 2026-08-21: prazdna hlaska nesmi zabirat misto. JS ji znacky
   data-zs26-prazdne="1" dava uz od zacatku, CSS to nevyuzivalo, takze v
   mobilni lepici liste zabirala cely radek navic (lista mela 157 px misto
   zhruba 72 px a prekryvala obsah). */
body.zs26-obj .zs26-obj-hlaska[data-zs26-prazdne="1"] {
  display: none;
}

body.zs26-obj .zs26-obj-hlaska--info {
  background: var(--zs-barva-pozadi-sekce-2);
  color: var(--zs-barva-stav-pozor);
}

body.zs26-obj .zs26-obj-hlaska--chyba {
  background: var(--zs-barva-stav-chyba-plo);
  color: var(--zs-barva-stav-chyba);
}

body.zs26-obj .zs26-obj-hlaska a {
  color: inherit;
  text-decoration: underline;
}


/* ---------------------------------------------------------------------------
   11a. Do 1024 px, jeden sloupec
   Souhrn se sklopi pod formular a prestane byt sticky.
   --------------------------------------------------------------------------- */

@media (max-width: 1024px) {

  /* OPRAVA QA 2026-08-21: stejne zdvojeni jako u desktopove varianty,
     jinak by desktopovy grid (0,3,0) prebil tenhle mobilni prepis (0,2,0). */
  body.zs26-obj--fox2 .zs26-obj-rozvrzeni.zs26-obj-rozvrzeni {
    display: block;
  }

  body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-souhrn,
  body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-lead {
    position: static;
    top: auto;
    width: auto;
    margin-top: var(--zs-odstup-xl);
  }

  body.zs26-obj .zs26-obj-krokovnik {
    margin-bottom: var(--zs-odstup-base);
  }

}


/* ---------------------------------------------------------------------------
   11b. Do 700 px, mobil podle M8, M8b, M9, M10 (navrh kreslen na 390 px)
   - karta bez ramecku, obsah az k okrajum
   - krokovnik: aktivni pilulka s nazvem, ostatni jen cislo
   - PSC: pole a tlacitko pod sebou, oboji na celou sirku
   - akce: lepici lista dole, vlevo cena, vpravo tlacitko
   --------------------------------------------------------------------------- */

@media (max-width: 700px) {

  /* Karta se na mobilu rozpusti, jinak by byl obsah dvakrat odsazeny. */
  body.zs26-obj .zs26-obj-rozvrzeni > #fox2,
  body.zs26-obj .zs26-obj-rozvrzeni > .zs26-obj-psc {
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
  }

  body.zs26-obj .zs26-obj-souhrn,
  body.zs26-obj .zs26-obj-lead {
    padding: var(--zs-odstup-base);
  }

  /* Krokovnik: 1 ✓  2 Jidlo  3  4 */
  body.zs26-obj .zs26-obj-krokovnik > ol {
    flex-wrap: wrap;
    gap: var(--zs-odstup-xs);
  }

  body.zs26-obj .zs26-obj-krokovnik__polozka {
    margin-left: 0;
    padding: var(--zs-odstup-xs) var(--zs-odstup-md);
    font-size: 13.5px;
  }

  body.zs26-obj .zs26-obj-krokovnik__polozka + .zs26-obj-krokovnik__polozka::before {
    content: none;
  }

  body.zs26-obj .zs26-obj-krokovnik__polozka:not(.zs26-obj-krokovnik__polozka--aktivni) .zs26-obj-krokovnik__nazev {
    display: none;
  }

  /* U hotoveho kroku bez nazvu musi fajfka viset na cisle. */
  body.zs26-obj .zs26-obj-krokovnik__polozka--hotovo:not(.zs26-obj-krokovnik__polozka--aktivni) .zs26-obj-krokovnik__cislo::after {
    content: "\00a0\2713";
    color: var(--zs-barva-ikona-check);
  }

  body.zs26-obj .zs26-obj-nadpis,
  body.zs26-obj .zs26-obj-psc__nadpis,
  body.zs26-obj #fox2 > #vyber1 > h2,
  body.zs26-obj #fox2 > #vyber4 > h2,
  body.zs26-obj #fox2 > #vyber7 > h2 {
    font-size: 22px;
  }

  body.zs26-obj .zs26-obj-perex,
  body.zs26-obj .zs26-obj-psc__perex {
    font-size: 16px;
  }

  /* M8: pole na celou sirku, tlacitko pod nim taky na celou sirku. */
  body.zs26-obj .zs26-obj-psc__form {
    display: block;
  }

  /* margin-bottom nese !important, protoze content2024.css:1004 ma
     margin: 0px !important na kazdem input. Bez nej by tlacitko pod polem
     na mobilu sedelo nalepene. */
  body.zs26-obj .zs26-obj-psc__pole,
  body.zs26-obj .zs26-obj-psc__lead .zs26-obj-pole {
    flex: none;
    width: 100%;
    margin-bottom: var(--zs-odstup-md) !important;
  }

  body.zs26-obj .zs26-obj-psc__tlacitko,
  body.zs26-obj .zs26-obj-psc__stav .zs26-obj-tlacitko,
  body.zs26-obj .zs26-obj-psc__lead .zs26-obj-tlacitko {
    width: 100%;
  }

  body.zs26-obj .zs26-obj-psc__stav {
    padding: var(--zs-odstup-base);
  }

  /* M9: cipy delek uzsi, at se vejdou dva az tri v radku. */
  body.zs26-obj #fox2 #nabidkaDnyDelka.cenik_nabidka.nabidkaDnyDelka {
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  }

  /* M9 a M10: lepici lista dole. Prostor pod obsahem, at lista nic nezakryva. */
  body.zs26-obj .zs26-obj-rozvrzeni {
    padding-bottom: calc(var(--zs-odstup-sekce) + var(--zs-odstup-2xl));
  }

  body.zs26-obj .zs26-obj-akce {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 11;
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--zs-odstup-md);
    margin: 0;
    padding: var(--zs-odstup-md) var(--zs-odstup-base);
    padding-bottom: calc(var(--zs-odstup-md) + env(safe-area-inset-bottom, 0px));
    background: var(--zs-barva-pozadi-stranka);
    border-top: 1px solid var(--zs-barva-ramecek-karta);
  }

  body.zs26-obj .zs26-obj-akce__cena {
    display: block;
    grid-column: 1;
    grid-row: 1;
  }

  body.zs26-obj .zs26-obj-akce__cena-popis {
    display: block;
    grid-column: 1;
    grid-row: 2;
  }

  body.zs26-obj .zs26-obj-akce__dalsi {
    grid-column: 2;
    grid-row: 1 / span 2;
    justify-self: end;
  }

  /* Zpet se na mobilu do listy nevejde, patri nad ni, do obsahu. */
  body.zs26-obj .zs26-obj-akce__zpet {
    display: none;
  }

  body.zs26-obj .zs26-obj-akce__napoveda {
    display: none;
  }

}

/* ==========================================================================
   Uklid funnelu, 25. 8. 2026
   Sest zasahu ze zadani. Vse je aditivni a visi na body.zs26-obj, takze
   vypnuti vrstvy vrati stranku do dnesniho stavu.
   ========================================================================== */

/* --------------------------------------------------------------------------
   U1. Treti sloupec pryc, formular dostane misto

   Zmereno 25. 8. 2026 v prohlizeci na webvyvoj2:
     .main_limit.obsah  1330 px
     #clanek             945 px
     #sidebar            325 px
   Vlastni formular mel 445 px, tedy 33 % obalu, zatimco dva bocni panely
   dohromady 617 px. Sloupec "Neni vam neco jasne" je stary Joomla modul m147
   v #sidebar_float.sidebar2, ne cast teto vrstvy.

   Duvod, proc mizi: ve vzorku deseti webu (5 svet, 5 CZ) ma bocni sloupec
   s napovedou jediny web, a to Zdrave stravovani. Svet resi totez mikrotextem
   pod tlacitkem (4 z 5) nebo odkazem "Need help?" v hlavicce funnelu
   (CookUnity). Obsah se nezahazuje: telefon jde do souhrnu, oba odkazy ke
   kroku 2 primo k vyberu programu, tedy do mista pochybnosti.

   Schovava se AZ #sidebar_float, ne #sidebar, aby zustala mrizka sablony
   nedotcena a slo to vratit jedinym pravidlem. Deje se to jen na objednavce
   (body.zs26-obj) a jen kdyz vrstva bezi.
   -------------------------------------------------------------------------- */
/* Zmereno 25. 8., retez nad formularem:
     .main_limit.obsah  1330 px, display: grid, DVA sloupce
       #dcomponent      1005 px, padding-right 60 px
         #clanek         945 px
       #sidebar          325 px
   Schovat sidebar nestaci: grid mu drzi sloupec dal, takze #clanek zustane
   na 945. Musi se proto zuzit i mrizka na jeden sloupec. Jsou to tri pravidla,
   ne jedno, a smazanim kterehokoliv z nich se stav vrati. */
body.zs26-obj[data-zs26-krok] #sidebar { display: none; }
body.zs26-obj[data-zs26-krok] .main_limit.obsah { grid-template-columns: minmax(0, 1fr); }
body.zs26-obj[data-zs26-krok] #dcomponent { padding-right: 0; width: auto; }

/* --------------------------------------------------------------------------
   U2. Doplnky pryc, cely krok 5

   Attach rate na 28 443 objednavkach fox2 (leden 2025 az srpen 2026, dopocet
   nad primarnim exportem): polevka 0, fresh 0, dezert 0, smoothie zelene 0,
   smoothie barevne 0. Ve formulari jdou koupit jen dve svaciny (doplnek=29
   a 30, 89 Kc), a u casti programu blok hlasi, ze nejde pridat nic.

   Blok se skryva, NEMAZE. Skryta pole enginu zustavaji ve formulari se svymi
   vychozimi hodnotami, takze se odesle totez, co kdyz na doplnky nikdo neklikne.
   Vraceni je smazani tohoto pravidla.
   -------------------------------------------------------------------------- */
body.zs26-obj[data-zs26-krok] #fox2 > #vyber5 { display: none; }

/* --------------------------------------------------------------------------
   U3. Kombinace chodu se nesmi orezavat

   Zmereno 25. 8.: rada ikon chodu u kombinace koncila za pravym okrajem,
   posledni polozka Vecere byla useknuta. Ve 445 px se to nevejde, v 770 px uz
   ano, ale zalamovat se to musi tak jako tak.
   -------------------------------------------------------------------------- */
body.zs26-obj #fox2 #nabidka_kodu .klikblok {
  min-width: 0;
  overflow: visible;
}
body.zs26-obj #fox2 #nabidka_kodu .klikblok .chody,
body.zs26-obj #fox2 #nabidka_kodu .klikblok > div:last-child {
  display: flex;
  flex-wrap: wrap;
  gap: var(--zs-odstup-sm);
  min-width: 0;
}

/* --------------------------------------------------------------------------
   U4. Vyber programu bez karuselu

   Zmereno 25. 8.: z deseti programu byly ve 445 px videt 3,5 karty a obe
   sipky lezely na kartach. V sirsim sloupci se mrizka vejde cela, takze
   karusel neni k cemu. Sipky se skryvaji, posuvny pas se meni na mrizku.
   Kdyby engine sipky potreboval k necemu jinemu, staci smazat prvni pravidlo.
   -------------------------------------------------------------------------- */
body.zs26-obj[data-zs26-krok="2"] #vyber1 .karusel_sipka,
body.zs26-obj[data-zs26-krok="2"] #vyber1 [class*="sipka"],
body.zs26-obj[data-zs26-krok="2"] #vyber1 [class*="arrow"] { display: none; }
/* CHYBA A OPRAVA 25. 8.: karusel ma obal .okoloslider s PEVNOU vyskou na jednu
   radu (zmereno 170 px). Kdyz se .cenik_nabidka uvnitr zmeni na mrizku, naroste
   na 346 px, ale obal zustane 170 a druha a treti rada se pretiskne pres text
   pod nim. Muj prvni QA test to nechytil, protoze meril jen VODOROVNE preteceni.
   Obal proto musi pustit vysku taky. */
body.zs26-obj[data-zs26-krok="2"] #vyber1 .okoloslider {
  height: auto;
  min-height: 0;
  max-height: none;
  overflow: visible;
}
/* Mezi obalem a mrizkou je jeste DRAHA slideru, bezejmenny div s position:
   absolute a pevnou vyskou. Dokud je absolutni, je mimo tok, obal se sesype
   na nulu a text pod nim se pretiskne pres karty. Vratit ji do toku je proto
   podminka toho, aby mrizka vubec mohla fungovat. */
body.zs26-obj[data-zs26-krok="2"] #vyber1 .okoloslider > div {
  position: static;
  height: auto;
  min-height: 0;
  width: auto;
  left: auto;
  top: auto;
  transform: none;
}
body.zs26-obj[data-zs26-krok="2"] #vyber1 .cenik_nabidka {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: var(--zs-odstup-sm);
  overflow: visible;
  width: auto;
  white-space: normal;
  transform: none;
}
/* POZOR, tohle je misto, kde jsem 25. 8. rozbil stranku, at to nikdo neopakuje.
   Karta MUSI zustat position: relative, protoze jeji obsah .jidelnicek_ic
   (ikona i nazev v h6) je v enginu position: absolute a karta je jeho
   containing block (template2024.css:677 a :685). Kdyz karte dam static,
   obsah se odpouta k nejblizsimu pozicovanemu predkovi a natahne se na jeho
   rozmer: zmereno 880x346 px v karte 170x110. Ikony a nazvy pak plavou mimo boxy.
   Merenim: pred 22 prvku mimo svou kartu, po navratu na relative 0. */
body.zs26-obj[data-zs26-krok="2"] #vyber1 .cenik_nabidka > .jidelnicek {
  width: auto;
  margin: 0;
  float: none;
  display: block;
}

/* --------------------------------------------------------------------------
   U5. Popisky, ktere se orezavaly

   Zmereno 25. 8. na kroku 3 u programu KETO: checkbox mel popisek
   "...etne vikendu.", tedy useknute "vcetne". Vinik je pevna sirka a
   zaporny odsazeny text, ne delka slova.
   -------------------------------------------------------------------------- */
body.zs26-obj #fox2 #vyber4 label,
body.zs26-obj #fox2 #nabidkaDnyVikend,
body.zs26-obj #fox2 #nabidkaDnyVikend label {
  display: flex;
  align-items: center;
  gap: var(--zs-odstup-sm);
  width: auto;
  min-width: 0;
  overflow: visible;
  text-indent: 0;
  white-space: normal;
  line-height: 1.4;
}
body.zs26-obj #fox2 #nabidkaDnyVikend input[type="checkbox"] {
  flex: 0 0 auto;
  margin: 0;
  position: static;
  width: 20px;
  height: 20px;
}

/* --------------------------------------------------------------------------
   U6. Napoveda ze zruseneho sloupce, ted u mista pochybnosti
   -------------------------------------------------------------------------- */
body.zs26-obj .zs26-obj-napoveda {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--zs-odstup-sm);
  margin: var(--zs-odstup-sm) 0 0;
  padding: 0;
  font-size: 14px;
  line-height: 1.5;
  color: var(--zs-barva-text-tlumeny);
}
body.zs26-obj .zs26-obj-napoveda a {
  color: var(--zs-barva-text-odkaz);
  font-weight: 600;
}
body.zs26-obj .zs26-obj-souhrn__kontakt {
  margin: var(--zs-odstup-base) 0 0;
  padding: var(--zs-odstup-base) 0 0;
  border-top: 1px solid var(--zs-barva-ramecek-karta);
  font-size: 14px;
  line-height: 1.6;
  color: var(--zs-barva-text-tlumeny);
}
body.zs26-obj .zs26-obj-souhrn__kontakt strong {
  display: block;
  font-size: 17px;
  color: var(--zs-barva-text-nadpis);
}
body.zs26-obj .zs26-obj-souhrn__kontakt a { color: var(--zs-barva-text-odkaz); }

/* poznamka pod krokem, kde se dnes nerika neco podstatneho */
body.zs26-obj .zs26-obj-poznamka {
  margin: var(--zs-odstup-sm) 0 0;
  font-size: 14px;
  line-height: 1.5;
  color: var(--zs-barva-text-tlumeny);
}
body.zs26-obj .zs26-obj-poznamka strong { color: var(--zs-barva-text-nadpis); }

@media (max-width: 1024px) {
  body.zs26-obj[data-zs26-krok] #sidebar { display: none; }
}

/* --------------------------------------------------------------------------
   U7. Pás Můj výběr pod mřížkou programů

   Můj výběr není v enginu program, nemá typ a běží na jiném software na
   vlastní URL. Do mřížky programů proto nepatří jako další karta, patří pod ni
   jako samostatný pás. Totéž rozhodnutí už padlo na homepage v modulu 02.
   -------------------------------------------------------------------------- */
body.zs26-obj .zs26-obj-vyber {
  margin: var(--zs-odstup-base) 0 0;
  padding: var(--zs-odstup-base) var(--zs-odstup-lg);
  background: var(--zs-barva-pozadi-sekce);
  border: 1px solid var(--zs-barva-akce-primarni);
  border-radius: var(--zs-radius-karta);
}
body.zs26-obj .zs26-obj-vyber__stitek {
  display: inline-block;
  margin: 0 0 var(--zs-odstup-xs);
  padding: 4px 10px;
  background: var(--zs-barva-akcent-zluta);
  border-radius: var(--zs-radius-pill);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--zs-barva-text-na-limetce);
}
body.zs26-obj .zs26-obj-vyber__nazev {
  margin: 0 0 var(--zs-odstup-xs);
  font-size: 20px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--zs-barva-text-nadpis);
}
body.zs26-obj .zs26-obj-vyber__popis {
  margin: 0 0 var(--zs-odstup-sm);
  font-size: 15px;
  line-height: 1.5;
  color: var(--zs-barva-text-tlumeny);
}
body.zs26-obj .zs26-obj-vyber__odkaz {
  display: inline-flex;
  align-items: center;
  min-height: var(--zs-vyska-tlacitko-male);
  padding: 0 var(--zs-odstup-lg);
  background: var(--zs-barva-akce-primarni);
  border-radius: var(--zs-radius-pill);
  font-size: 15px;
  font-weight: 700;
  color: var(--zs-barva-akce-primarni-text);
  text-decoration: none;
}
body.zs26-obj .zs26-obj-vyber__odkaz:hover { background: var(--zs-barva-akce-primarni-hover); }
