/* Styl rozhraní v2 - PŘEVZATO 1:1 ze schválených drátěnek
   (zadani-v2/.../dratenky/html/frumos-*.html, 12. 9. 2026, druhý blok <style>).
   ⛔ Drátěnky jsou vizuální zdroj pravdy a NEPŘEKRESLUJÍ SE - tenhle soubor je
   jejich převod do aplikace, ne nový návrh. Co tu přibylo nad rámec drátěnek,
   je níž v bloku „DOPLŇKY APLIKACE" a má u sebe důvod a kotvu.
   ŽÁDNÉ px mimo assets/tokeny.css (KONVENCE.md § 2, měří brána rozhraní).
   Kotvy: KONVENCE.md § 2/3/10, SPECIFIKACE § 9.4, OB-E3.3. */
*{box-sizing:border-box}
/* Pozadí patří i kořenovému prvku: na krátké obrazovce (Firmy, Nastavení) končí
   mřížka těla dřív než okno a pod obsahem zůstávala bílá plocha, která vypadala
   jako nedodělek (nález persony 12. 9. 2026). */
html{background:var(--plocha);min-height:100%}
/* Každé tlačítko je klikací cíl - minimum 24 px na výšku i šířku (WCAG 2.5.8).
   Bez tohohle měřidlo našlo tlačítka filtru vysoká 20 px (12. 9. 2026). */
button{min-height:var(--m6);min-width:var(--m6)}
html,body{margin:0}
img,svg{max-width:100%}
/* Reset nativních ovládacích prvků PŘED tokeny - prohlížeč jim sám dává
   padding (tlačítko ~1px 6px, select ~1-2px) a checkbox/radio 13x13 px, což
   osa tokenů i klikací cíl chytí. Explicitní třídy níž si padding/rozměr
   nastaví samy (opravné kolo 2, věta 6). */
button{padding:0;margin:0;font-family:inherit}
th,td{padding:0}
input[type="checkbox"],input[type="radio"]{
  width:var(--m6);height:var(--m6);margin:0;accent-color:var(--green);flex:none}
/* Oprava D (KONTROLA-PO-OPRAVE.md, nález 2): `disabled` sám potlačí
   accent-color a prohlížeč zaškrtnuté-ale-needitovatelné pole vykreslí
   vybledle bez ohledu na CSS (accent-color se na disabled ovládací prvky
   podle specifikace nepoužije) - stejná "nedá se to opravit barvou" past
   jako u tlačítka F-04 níž. Řešení je stejné: nespoléhat na nativní vzhled,
   který se stylovat nedá, a nakreslit si zaškrtnuté pole sám - zůstane
   stejně "sytě" zelené jako běžný zaškrtnutý checkbox (F-04 "Účtovat
   porci", F-11 čtyři přepínače), i když je needitovatelné. Platí pro
   KAŽDÝ disabled checkbox v aplikaci (dnes jen M-05), ne jen jedno místo. */
input[type="checkbox"]:disabled{-webkit-appearance:none;appearance:none;
  background:#fff;border:1px solid var(--gray-300);border-radius:var(--radius-s);
  position:relative;cursor:not-allowed}
input[type="checkbox"]:disabled:checked{background:var(--green);border-color:var(--green)}
input[type="checkbox"]:disabled:checked::after{content:"";position:absolute;
  left:7px;top:3px;width:6px;height:11px;border:solid #fff;border-width:0 2px 2px 0;
  transform:rotate(45deg)}
select{min-height:calc(var(--m8) + var(--m2));padding:var(--m2) var(--m3);
  font-family:inherit;font-size:var(--fs-mensi);border-radius:var(--radius-s);
  border:1px solid var(--gray-300);background:#fff;max-width:100%;box-sizing:border-box}
.btn-kruh{padding:0;width:var(--m8);height:var(--m8);border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  border:1px solid var(--gray-300);background:#fff;color:var(--gray-800);
  font-weight:700;cursor:pointer;line-height:1}
body{background:var(--plocha);color:var(--gray-900);
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  font-size:var(--fs-zaklad);line-height:var(--lh);min-height:100vh;
  display:flex;flex-direction:column;min-width:0}
h1{font-size:var(--fs-titulek);font-weight:700;line-height:var(--lh-tesne);
  margin:0 0 var(--m4)}
h2{font-size:var(--fs-nadpis);font-weight:700;line-height:var(--lh-tesne);
  color:var(--gray-900);margin:var(--m6) 0 var(--m3)}
h2:first-child{margin-top:0}
p{margin:0 0 var(--m3)}
a{color:var(--zelena-text)}
.obsah{flex:1;padding:var(--m4);padding-bottom:var(--m12);width:100%;max-width:1080px;
  margin:0 auto;min-width:0;box-sizing:border-box}

/* --- lišta --- */
/* Pozn.: schválně BEZ ukotvení (CSS position sticky/fixed) - opravné kolo 1, věta B: žádná
   pevná pozice v drátěnkách (mobilní bottom-bar překrýval obsah). Lišta,
   nav i tlačítka jedou v normálním toku dokumentu. */
header.lista{display:flex;align-items:center;justify-content:space-between;
  gap:var(--m3);padding:var(--m3) var(--m4);background:#fff;
  box-shadow:var(--shadow)}
header.lista .lista-znacka{display:flex;align-items:center;gap:var(--m2)}
header.lista img.logo{height:var(--m6);width:auto;display:block}
header.lista .lista-role{font-size:var(--fs-mensi);font-weight:600;color:var(--gray-700)}
header.lista .lista-pozdrav{font-size:var(--fs-mensi);font-weight:600;color:var(--gray-900)}
header.lista .lista-vpravo{display:flex;align-items:center;gap:var(--m3);text-align:right}
header.lista .lista-dnes{font-size:var(--fs-drobne);color:var(--gray-500)}
header.lista .lista-dnes .mesic{color:var(--gray-400);font-weight:400}
header.lista a.dnes-odkaz{font-size:var(--fs-drobne);font-weight:600;color:var(--zelena-text);
  text-decoration:none;border:1px solid var(--forest);border-radius:var(--radius-s);
  padding:var(--m1) var(--m2);white-space:nowrap}

/* --- lišta přihlašovací obrazovky: dvě loga a věta o spolupráci --- */
/* PROČ ZVLÁŠTNÍ TŘÍDA (15. 9. 2026): na `?p=prihlaseni` není role ani datum,
   takže `justify-content:space-between` by dvojici log roztáhlo přes celou
   šířku. `.lista-uvod` proto přepíná lištu na sloupec, zbytek aplikace
   zůstává beze změny. Zarovnání je VLEVO jako všude jinde - logo aplikace
   začíná na stejné svislici jako obsah pod ním.
   VÝŠKA LOGA je `--m12` (48 px) proti běžným `--m6` (24 px), tedy přesně
   dvojnásobek lišty - žádné nové px, jen jiný token. */
header.lista.lista-uvod{flex-direction:column;align-items:center;
  justify-content:flex-start;gap:var(--m2);padding:var(--m8) var(--m4) var(--m6)}
/* Pavel 15. 9. 15:42: „skutečně centrálně do středu logo Frumoš, pod to
   ‚ve spolupráci s' a logo dean & david, pod to opět na střed přístupy;
   loga klidně 2× větší". Sloupec na střed, výšky 2× proti prvnímu návrhu:
   Frumoš 2 × --m12 (96 px), partner 3 × --m12 (144 px, dvoupatrová značka). */
header.lista.lista-uvod .uvod-sloupec{display:flex;flex-direction:column;align-items:center;
  gap:var(--m3);text-align:center}
header.lista.lista-uvod img.logo{height:calc(var(--m12) * 2)}
header.lista.lista-uvod img.logo-partner{height:calc(var(--m12) * 3)}
header.lista.lista-uvod .uvod-spoluprace{margin:0;font-size:var(--fs-zaklad);
  font-weight:600;color:var(--gray-700)}
/* obsah přihlašovací obrazovky na střed a užší - je to vstupní brána, ne
   pracovní obrazovka; formuláře uvnitř zůstávají zarovnané vlevo (čitelnost) */
body[data-obrazovka^="prihlaseni"] main.obsah{max-width:760px}
body[data-obrazovka^="prihlaseni"] main.obsah > h1{text-align:center}
body[data-obrazovka^="prihlaseni"] .demo-prihlaseni .demo-nadpis{text-align:center}
body[data-obrazovka^="prihlaseni"] .demo-prihlaseni form.demo-tlacitka{justify-content:center}

/* --- předvedení: tlačítka rolí pod přihlašovacím formulářem --- */
/* Vykreslí se jen s vyplněným `DEMO_UCTY` v config.php (mimo git). Tlačítka
   jsou `.btn-secondary`, protože primární akce obrazovky zůstává jedna -
   „Poslat přihlašovací odkaz" (brána rozhraní, osa primarni-tlacitko). */
.demo-prihlaseni .demo-nadpis{margin:0 0 var(--m3);font-size:var(--fs-mensi);
  font-weight:600;color:var(--gray-700)}
.demo-prihlaseni form.demo-tlacitka{display:flex;flex-wrap:wrap;gap:var(--m2);
  margin:0;min-width:0}
.demo-prihlaseni form.demo-tlacitka .btn{width:auto;flex:1 1 auto;min-width:0}

/* --- nav: statický vodorovný pruh pilulek hned pod lištou (390 i výš) --- */
nav.hlavni{display:flex;gap:var(--m2);background:#fff;
  border-bottom:1px solid var(--gray-200);padding:var(--m3) var(--m4);
  overflow-x:auto;-webkit-overflow-scrolling:touch;width:100%;max-width:100%;
  min-width:0;flex-wrap:nowrap}
nav.hlavni > a{display:inline-flex;align-items:center;justify-content:center;
  gap:var(--m1);min-height:var(--m8);padding:var(--m2) var(--m4);
  border-radius:var(--radius-l);font-size:var(--fs-drobne);color:var(--gray-700);
  background:var(--gray-100);text-decoration:none;white-space:nowrap;flex:0 0 auto}
nav.hlavni a[aria-current="page"]{color:var(--zelena-text);font-weight:600;
  background:var(--green-light)}

/* --- záložky sekce: DRUHÁ úroveň nabídky, POD h1 obrazovky (přeskupení
   navigace OB-E2.2, 12. 9. - majitel: "nejsem si jistý, jestli se uživatel
   v nabídce vyzná"). Vykreslí se, jen když sekce hlavní položky má víc než
   jednu obrazovku (`zalozky_sekce()` jinak vrací "" - prázdný pruh je horší
   než žádný). Barevně schválně JINAK než nav.hlavni (plná --forest/bílá, ne
   --green-light/--zelena-text) - na 390 px sedí hned pod pilulkami hlavní
   nabídky a musí jít opticky rozlišit, která úroveň je která. --- */
nav.zalozky-sekce{display:flex;gap:var(--m2);flex-wrap:wrap;margin:0 0 var(--m4);
  padding-bottom:var(--m3);border-bottom:1px solid var(--gray-200)}
nav.zalozky-sekce a{display:inline-flex;align-items:center;min-height:var(--m8);
  padding:var(--m2) var(--m4);border-radius:var(--radius-l);font-size:var(--fs-drobne);
  font-weight:600;color:var(--gray-700);background:var(--gray-100);text-decoration:none;
  white-space:nowrap}
nav.zalozky-sekce a[aria-current="page"]{color:#fff;background:var(--forest)}

/* --- tlačítka --- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--m2);
  min-height:var(--m12);padding:var(--m3) var(--m4);border-radius:var(--radius-s);
  font-size:var(--fs-zaklad);font-weight:600;font-family:inherit;border:1px solid transparent;
  cursor:pointer;text-decoration:none;line-height:var(--lh-tesne)}
.btn-primary{background:var(--green);color:#fff;width:100%}
.btn-primary:hover{background:var(--green-dark)}
/* Oprava E (KONTROLA-PO-OPRAVE-2.md: "Poslat vzkaz" na manazerka-05 vypadá
   vypnuté) - PŘÍČINA není to jedno tlačítko, je to třída `.btn-secondary`
   samotná: měla `border-color` z `.btn` základu (`transparent`), takže na
   bílé kartě (`.karta{background:#fff}`) šlo poznat aspoň podle světle šedé
   výplně (--gray-100 na bílé), ale kdekoli tlačítko sedí PŘÍMO na ploše
   stránky (`body{background:var(--plocha)}`, #eceae5) - jako "Poslat vzkaz"
   pod `<form class="formular">` mimo kartu, nebo "Přidat adresu"/"Přidat
   nezávozový den" na F-11 - je `--gray-100` (#f3f4f6) od `--plocha` (#eceae5)
   opticky k nerozeznání a tlačítko beze zbytku splyne s pozadím. Oprava je
   v TŘÍDĚ (border teď viditelný vždy, na libovolném pozadí), ne v jednom
   místě - týká se všech dnešních i budoucích `.btn-secondary` na celou šířku
   webu, samo se nikde ručně neopakuje. */
.btn-secondary{background:var(--gray-100);color:var(--gray-800);border-color:var(--gray-300);width:100%}
.btn-danger{background:#fff;color:var(--cervena-text);border-color:var(--red)}
/* Oprava D (KONTROLA-PO-OPRAVE.md, nález 1): F-04 má DVĚ rovnocenné akce
   (zrušit volbu / navýšit počet), obě odesílají doplněk sjetiny - ale měřidlo
   (osa primarni-tlacitko) chce právě JEDNO .btn-primary na obrazovku, takže
   druhá akce nemůže nést tutéž třídu. `.btn-secondary` (--gray-100, "tišší",
   teď s viditelným `--gray-300` rámečkem - viz Oprava E výš) je pro věci jako
   "Tisk" nebo "Poslat vzkaz" - u rovnocenné akce ale i s rámečkem pořád
   vypadá "tišeji" než primární. `.btn-tmava` je třetí cesta: plná barva, bílý
   text, čitelný kontrast - stejná "tmavá výplň = aktivní" konvence jako
   `--forest` jinde v appce (aktivní den v `.prepinac-dnu`, aktivní záložka
   sekce, aktivní pilulka období) - ale BEZ třídy btn-primary, takže měřidlo
   pořád najde přesně jedno .btn-primary. Použij všude, kde je potřeba druhá
   rovnocenná akce vedle jednoho .btn-primary na téže obrazovce. */
.btn-tmava{background:var(--forest);color:#fff;width:100%}
.btn-riadek{width:auto;min-height:var(--m8);padding:var(--m2) var(--m3);font-size:var(--fs-mensi)}
.akce{display:flex;flex-direction:column;gap:var(--m2);margin:var(--m4) 0}
/* ───── akce, která už proběhla, je STAV (nález F-02, kolo 2 OB-E3.3c) ─────
   Věta nahrazuje tlačítko na jeho místě, takže je vidět na první pohled,
   že se tu už nic klikat nemá. Kreslí se RÁMEČKEM a textem, ne barvou
   pozadí - na papíře i v tmavém režimu pozadí zmizí a zbyla by holá věta
   k nerozeznání od popisku. */
.stav-akce{display:inline-block;padding:var(--m2);border:1px solid var(--gray-400);
  border-left:4px solid var(--gray-700);border-radius:var(--radius-s);
  color:var(--gray-900);font-weight:600}
@media (min-width:900px){
  .akce{flex-direction:row;justify-content:flex-end}
  .btn{width:auto;min-width:220px}
  .btn-secondary,.btn-danger,.btn-tmava{min-width:160px}
}

/* --- karty obecně --- */
.karta{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);
  padding:var(--m4);margin-bottom:var(--m4)}
.karta-zvyrazneno{border:1px solid var(--forest)}

/* --- odznaky stavu --- */
.stav{display:inline-flex;align-items:center;gap:var(--m1);padding:var(--m1) var(--m2);
  border-radius:var(--radius-s);font-size:var(--fs-drobne);font-weight:600;
  border:1px solid transparent;white-space:nowrap}
.stav .stav-ikona{display:inline-block;width:var(--m3);height:var(--m3);
  background:currentColor;flex:none}
.stav[data-tvar="kruh"] .stav-ikona{border-radius:50%}
.stav[data-tvar="ctverec"] .stav-ikona{border-radius:0}
.stav[data-tvar="kosoctverec"] .stav-ikona{border-radius:0;transform:rotate(45deg);
  width:calc(var(--m3) * .8);height:calc(var(--m3) * .8)}
.stav[data-tvar="trojuhelnik"] .stav-ikona{clip-path:polygon(50% 0%,0% 100%,100% 100%)}
.stav[data-stav="hori"],.stav[data-stav="sjetina-neodesla"],.stav[data-stav="nenahlaseno"],
.stav[data-stav="neuplny"]{background:var(--red-light);color:var(--cervena-text);
  border-color:var(--cervena-text)}
.stav[data-stav="ceka"],.stav[data-stav="ceka-frumos"],.stav[data-stav="ceka-manazerka"],
.stav[data-stav="uzavreno"]{background:var(--orange-light);color:var(--oranzova-text);
  border-color:var(--oranzova-text)}
.stav[data-stav="potvrzeno"],.stav[data-stav="nahlaseno"],.stav[data-stav="ok"],
.stav[data-stav="odeslana"]{background:var(--green-light);color:var(--zelena-text);
  border-color:var(--zelena-text)}
.stav[data-stav="bezi"],.stav[data-stav="nevozi-se"],.stav[data-stav="zruseno"],
.stav[data-stav="ze-skladby"],.stav[data-stav="voli"],
.stav[data-stav="odhlasen"]{background:var(--gray-100);color:var(--gray-700)}
.stav[data-stav="voli"]{border-color:var(--forest)}
.stavy-dvojice{display:flex;gap:var(--m2);flex-wrap:wrap;margin-bottom:var(--m3)}
.stavy-dvojice .popisek{font-size:var(--fs-drobne);color:var(--gray-500);align-self:center}

/* --- datum/lhůta --- */
time .mesic{color:var(--gray-500);font-weight:400;font-size:var(--fs-drobne)}
.lhuta{display:block;font-size:var(--fs-drobne);color:var(--gray-500);margin-top:var(--m1)}
.lhuta strong{color:var(--gray-700)}

/* --- bannery (P2 hierarchie na F-01/F-08) --- */
.banner{border-radius:var(--radius);padding:var(--m3) var(--m4);margin-bottom:var(--m3);
  border:1px solid transparent}
.banner h3{font-size:var(--fs-mensi);font-weight:700;margin:0 0 var(--m1);
  text-transform:none}
.banner p{margin:0;font-size:var(--fs-mensi)}
.banner-hori{background:var(--red-light);border-color:var(--cervena-text)}
.banner-hori h3{color:var(--cervena-text)}
.banner-ceka{background:var(--orange-light);border-color:var(--oranzova-text)}
.banner-ceka h3{color:var(--oranzova-text)}
.banner-info{background:#fff;border-color:var(--gray-200)}
.banner-info h3{color:var(--gray-700)}

/* --- přepínač dnů --- */
.prepinac-dnu{display:flex;gap:var(--m1);background:var(--gray-100);padding:var(--m1);
  border-radius:var(--radius);margin-bottom:var(--m4);overflow-x:auto}
.prepinac-dnu a{flex:1;min-width:56px;text-align:center;padding:var(--m2) var(--m1);
  border-radius:var(--radius-s);text-decoration:none;color:var(--gray-700);font-size:var(--fs-drobne)}
.prepinac-dnu a strong{display:block;font-size:var(--fs-mensi)}
.prepinac-dnu a[aria-current="page"]{background:var(--forest);color:#fff}
.prepinac-dnu a[data-dnes="1"]:not([aria-current="page"]){border:1px solid var(--forest)}

/* --- karta jídla, 3 režimy --- */
.karta-jidlo{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);
  overflow:hidden;margin-bottom:var(--m4);display:flex;flex-direction:column;min-width:0;
  border:2px solid transparent}
/* U-02 (12. 9. - Pavel: "vybraný oběd vždy nějak zvýrazni barvou, nebo
   rámeček apod."): počet/zaškrtnutí/zvolená náhrada > 0 musí být zjevné na
   první pohled, ne jen číslem u tlačítek - transparentní výchozí border výš
   drží rozměr karty stejný, ať je vybraná nebo ne (žádný skok v mřížce). */
.karta-jidlo[data-vybrano="1"]{border-color:var(--green)}
.karta-jidlo[data-vybrano="1"] .kj-telo{background:var(--green-light)}
.karta-jidlo .kj-foto{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;
  background:var(--gray-100)}
.karta-jidlo .zastupny{width:100%;aspect-ratio:16/9;display:flex;align-items:center;
  justify-content:center;text-align:center;padding:var(--m3);font-weight:700;
  font-size:var(--fs-mensi);color:#fff}
.karta-jidlo .kj-telo{padding:var(--m3) var(--m4);min-width:0;box-sizing:border-box;width:100%}
.karta-jidlo .kj-radek{display:flex;justify-content:space-between;align-items:flex-start;
  gap:var(--m2);min-width:0}
/* min-width:0 + overflow-wrap: bez nich flexová položka odmítne zúžit pod šířku
   nejdelšího slova a dlouhý název jídla vystrčí obsah za okraj karty (nález osy
   orez-obsahu na F-07, 12. 9.). */
.karta-jidlo .kj-nazev{font-weight:700;font-size:var(--fs-zaklad);min-width:0;overflow-wrap:anywhere}
.karta-jidlo .kj-cena{font-weight:700;font-size:var(--fs-zaklad);white-space:nowrap}
.karta-jidlo .kj-popis{font-size:var(--fs-drobne);color:var(--gray-500);margin-top:var(--m1)}
/* flex-wrap (P-44, 15. 9. 2026): popisek podílu je delší než karta u dlouhých
   názvů jídel („Podíl v procentech u planted Crunchy Chicken Bowl") a bez
   zalomení tlačil číselné pole ven z karty - `.karta-jidlo` má
   `overflow:hidden`, takže pole zmizelo. Brána to neviděla, protože měřila
   jen přetečení dokumentu; od 15. 9. měří osa `prvek-preteka` každý rám. */
.karta-jidlo .kj-spodek{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  margin-top:var(--m3);gap:var(--m2)}
/* .btn-kruh (viz reset výš) - tady jen barvy/velikost písma navíc */
button.detail-i{width:var(--m6);height:var(--m6);font-size:var(--fs-drobne);color:var(--gray-600)}
.mnozstvi{display:flex;align-items:center;gap:var(--m2)}
.mnozstvi button{background:var(--gray-50);font-size:var(--fs-nadpis);color:var(--gray-800)}
.mnozstvi output{min-width:var(--m6);text-align:center;font-weight:700}
/* flex-shrink:0 + min-width:max-content (opravné kolo 7 - nález F-07, 12. 9.):
   `label.zaskrtnuti` je samo flex dítě `.kj-spodek` (`justify-content:
   space-between`) - bez tohohle ho prohlížeč u jediné položky skladby
   (100 %, o znak delší než běžných 25/50 %) smáčkl pod vlastní obsah a
   odznak s podílem se pak uřízl na "1" o okraj karty (`.karta-jidlo` má
   `overflow:hidden`). Nezalomitelný obsah (zaškrtávátko + "100 %") musí mít
   vždy svou plnou přirozenou šířku, ne se podřídit space-between. */
label.zaskrtnuti{display:flex;align-items:center;gap:var(--m2);font-size:var(--fs-mensi);
  flex-shrink:0;min-width:max-content}
/* Na kartě jídla (X-02, P-44/15. 9.) smí popisek zalomit: `min-width:max-content`
   výš drží celý název jídla na jednom řádku a u „planted Crunchy Chicken Bowl"
   přetekl rám o 13-18 px. Odznak podílu (`.podil`) má flex-shrink:0 a nowrap,
   takže původní vada z kola 7 (uříznuté „100 %") se nevrací. */
.karta-jidlo label.zaskrtnuti{min-width:0;flex-shrink:1}
.karta-jidlo label.zaskrtnuti span:not(.podil){overflow-wrap:break-word;min-width:0}
label.zaskrtnuti .podil{font-weight:700;color:var(--zelena-text);white-space:nowrap;flex-shrink:0}
.kj-sprava select,.kj-sprava input{font-family:inherit;font-size:var(--fs-mensi);
  padding:var(--m2);border-radius:var(--radius-s);border:1px solid var(--gray-300)}
@media (min-width:900px){
  /* minmax(0,1fr), NE holé 1fr - grid sloupec má jinak implicitní minimum
     "auto" (= min-content obsahu karty), takže se nesmrští a mřížka tlačí
     rodiče šířeji, než je k dispozici (opravné kolo 5, věta 1). Sloupce
     zůstávají pevně 3 (schválené rozvržení), jen smí být užší než obsah. */
  .mrizka-jidel{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:var(--m4)}
  .karta-jidlo{margin-bottom:0;min-width:0}
}

/* --- filtr (select - firma/pobočka/stav, hodně možností) --- */
form.filtr{display:flex;flex-wrap:wrap;gap:var(--m2);margin-bottom:var(--m3)}
form.filtr select,form.filtr input{font-family:inherit;font-size:var(--fs-mensi);
  padding:var(--m2) var(--m3);border-radius:var(--radius-s);border:1px solid var(--gray-300);
  background:#fff;flex:1;min-width:120px}

/* --- filtr jako pilulky (málo možností, vidět všechny najednou - Pavel 26. 8.) --- */
.filtr-pilulky{display:flex;flex-wrap:wrap;gap:var(--m2);margin-bottom:var(--m3)}
.filtr-pilulky button{font-family:inherit;cursor:pointer;border:1px solid var(--gray-300);
  background:#fff;color:var(--gray-700);border-radius:var(--radius-l);
  padding:var(--m2) var(--m4);font-size:var(--fs-mensi);min-height:var(--m8)}
.filtr-pilulky button[aria-current="true"]{background:var(--forest);color:#fff;
  border-color:var(--forest);font-weight:600}

/* --- filtr období + vlastní rozsah (P-21, 12. 9.: "filtrovat podle dnů... a já
   nevím co ještě") - pilulky rychlé volby + dvojice datumových polí v JEDNOM
   <form class="filtr">, aby se nenatáhl počet formulářů na obrazovce (KONVENCE
   § 3: nejvýš 3 na obrazovku). `.pole` mimo `form.formular` by bez týhle
   dvojice pravidel zůstalo nestylované (selektor `form.formular .pole` na něj
   nesedí). */
.filtr-obdobi .pole{display:flex;flex-direction:column;gap:var(--m1);min-width:140px}
.filtr-obdobi .pole label{font-size:var(--fs-drobne);font-weight:600;color:var(--gray-700)}

/* --- přepínač podoby (anonymní/jmenovitě - P-21/P-23, 12. 9.): DVĚ různé
   stránky, žádné skryté panely na jedné - stejný vzor jako `.prepinac-dnu`
   (odkazy, aktivní `aria-current="page"`), jen na dvě položky místo na dny. --- */
.prepinac-podoba{display:flex;gap:var(--m1);background:var(--gray-100);padding:var(--m1);
  border-radius:var(--radius);margin-bottom:var(--m4);max-width:420px}
.prepinac-podoba a{flex:1;text-align:center;padding:var(--m2) var(--m3);
  border-radius:var(--radius-s);text-decoration:none;color:var(--gray-700);font-size:var(--fs-mensi)}
.prepinac-podoba a[aria-current="page"]{background:var(--forest);color:#fff;font-weight:600}

/* --- tisk (P-21, Obrazovka A "Souhrnný přehled k přepisu"): zmizí navigace
   a filtry, zůstane hlavička s rozsahem/firmou, tabulka a součet - na papír
   kreslíme rámečkem, ne barevnou plochou (KONVENCE § 6, "Tisková podoba"). --- */
@media print{
  header.lista,nav.hlavni,nav.zalozky-sekce,form.filtr,form.filtr-pilulky,.prepinac-podoba,.akce{display:none}
  body{background:#fff}
  .karta,.tabulka-obal,.souhrn,.banner{box-shadow:none;border:1px solid var(--gray-300);background:#fff}
  main.obsah{max-width:none;padding:0}

  /* ⛔ DATUM SE NEZALAMUJE (Pavel 13. 9. 2026, P-34: „a tady datumy").
     Pravidlo visí na `<time>`, které vyrábí `cas_znacka()` v layout.php -
     tedy na JEDINÉM místě, kudy datum do stránky vstupuje. Kdyby viselo
     na sloupci tabulky, platilo by pro jednu tabulku a příští datum
     v kartě nebo hlavičce by se zalomilo znovu. */
  time{white-space:nowrap}

  /* Dlouhý nedělitelný řetězec (e-mail, adresa serveru) je jediné, co
     smí lámat uvnitř slova - ne proto, že je to hezké, ale protože jinak
     roztlačí sloupec a zalomí všechno ostatní kolem. Odtud se braly
     dvouřádkové datumy v souhrnu: šířku ukradl e-mail vedle. */
  .rozlisovaci-udaj,td a[href^="mailto:"]{overflow-wrap:anywhere}
}

/* --- řádkový seznam: KARTY pod 900 px, tabulka od 900 px výš ---
   Persony (opravné kolo 4, věta A): vodorovný posuv se na telefonu nenajde -
   sloupec „Smlouva"/„Cena"/„Jmenovitě" i celé akce mizely za okrajem. Pod
   900 px se `<tr>` stává kartou, `<td>` řádkem „popisek: hodnota"
   (`data-label` z hlavičky), první sloupec (identita řádku - jméno/den/jídlo/
   firma) je tučný nadpis karty bez popisku. Nic se neořezává CSS elipsou -
   `title` na buňce nese plnou hodnotu navíc. */
.tabulka-obal{border-radius:var(--radius);box-shadow:var(--shadow);
  background:#fff;margin-bottom:var(--m4)}
table.seznam{width:100%;border-collapse:collapse;font-size:var(--fs-mensi)}
table.seznam thead{display:none}
table.seznam tbody{display:block}
table.seznam tr{display:block;padding:var(--m3) var(--m4);border-bottom:1px solid var(--gray-200)}
table.seznam tbody tr:last-child{border-bottom:none}
table.seznam td{display:flex;justify-content:space-between;align-items:flex-start;
  gap:var(--m3);padding:var(--m1) 0;border:none;white-space:normal;text-align:right;
  overflow-wrap:break-word;min-width:0}
table.seznam td::before{content:attr(data-label);font-size:var(--fs-drobne);font-weight:600;
  color:var(--gray-500);text-align:left;flex:none}
table.seznam td[data-label=""]::before{content:none}
table.seznam td:first-child{display:block;text-align:left;font-weight:700;
  font-size:var(--fs-zaklad);color:var(--gray-900);padding-bottom:var(--m2);
  margin-bottom:var(--m2);border-bottom:1px solid var(--gray-100);overflow-wrap:break-word}
table.seznam td:first-child::before{content:none}
table.seznam td.akce-bunka{display:block;text-align:left}
table.seznam td.akce-bunka::before{content:none}
table.seznam td.akce-bunka .btn-riadek{width:100%;margin:var(--m1) 0}
table.seznam .slabe{color:var(--gray-400)}
/* vedlejší sloupce (opravné kolo 5, věta 2) - slité do JEDNOHO textového
   řádku „Popisek: hodnota · Popisek: hodnota", ne dalších dvojic pod sebou;
   drží krátké karty (M-01 na 390 px muselo pod práh 2000 px). */
table.seznam td.td-vedlejsi{display:inline;padding:0;text-align:left;
  font-size:var(--fs-drobne);color:var(--gray-600);white-space:normal}
table.seznam td.td-vedlejsi::before{content:attr(data-label) ": "}
table.seznam td.td-vedlejsi + td.td-vedlejsi::before{content:" · " attr(data-label) ": "}
/* ⛔ `, print` NENÍ OZDOBA (P-32, 13. 9. 2026). A4 je široká 794 px, takže
   papír spadl pod breakpoint 900 px a tiskl KARTY: jedno jídlo zabralo přes
   půl stránky a Pavel napsal „tady to je zbytecne obrovske". Papír není úzká
   obrazovka - dostává tabulkové rozvržení bez ohledu na šířku okna. Rozdíl
   se změří jen v tiskové emulaci NA ŠÍŘCE A4; v okně 1440 px vada mizí
   (tests/kontrola-tisk-tabulka-A4.mjs). */
@media (min-width:900px), print{
  .tabulka-obal{overflow-x:auto}
  table.seznam thead{display:table-header-group}
  table.seznam tbody{display:table-row-group}
  table.seznam tr{display:table-row;padding:0;border-bottom:none}
  /* Pozn. (opravné kolo 7 - nález osy header-mezera/tabulka-akce, 12. 9.):
     BEZ nowrap tady jako výchozí - blanket white-space:nowrap na VŠECH buňkách
     nutil i "Karlín, 3. patro, Karlín, 5. patro" a "Přidat místo" na jeden
     nezalomitelný řádek, tabulka pak natáhla stránku za viewport a poslední
     sloupec se uřízl přesně na okraji 1440 px (frumos-06, "Přida"). Běžné
     sloupce SMĚJÍ zalomit (min-width:0, overflow-wrap) - jen sloupec Akce
     (níž, `.akce-bunka`) zůstává nezalomitelný a úzký. */
  /* ⛔ `break-word`, NE `anywhere` (kolo K1, OC-01). `anywhere` zmenšuje
     i MIN-CONTENT šířku sloupce, takže prohlížeč láme i krátká jednoslovná
     pole uprostřed slova, aby tabulku zúžil - na F-06 se lámalo „Firm/a",
     „Delt/a", „Ga/ma". `break-word` zalomí slovo AŽ KDYŽ se na řádek
     nevejde, a na výpočet šířky sloupce nemá vliv. Dlouhý nedělitelný
     řetězec (e-mail, adresa) má vlastní třídu `.bunka-dlouha` níž.
     Byl to vedlejší efekt starší opravy přetečení z 12. 9. */
  table.seznam th,table.seznam td{display:table-cell;padding:var(--m2) var(--m3);
    text-align:left;border-bottom:1px solid var(--gray-100);min-width:0;overflow-wrap:break-word}
  /* Sem a jen sem patří agresivní lámání: e-mail a URL nemají mezery a bez
     něj vystrčí tabulku za okraj. */
  table.seznam td.bunka-dlouha{overflow-wrap:anywhere}
  table.seznam th{font-size:var(--fs-drobne);color:var(--gray-500);font-weight:600;
    background:var(--gray-50)}
  table.seznam tbody tr:last-child td{border-bottom:none}
  table.seznam td::before{content:none}
  /* ⛔ `display:table-cell` PATŘÍ SEM. Mobilní pravidlo `table.seznam
     td:first-child{display:block}` má vyšší specificitu než `table.seznam td`
     výš v tomhle bloku, takže první buňka KAŽDÉ tabulky zůstávala blokem
     i na 1440 px a prohlížeč ji balil do anonymní buňky. Naměřeno 13. 9.
     měřidlem P-32; táž vada u `.akce-bunka` níž. */
  table.seznam td:first-child{display:table-cell;font-weight:inherit;font-size:inherit;color:inherit;
    padding:var(--m2) var(--m3);margin-bottom:0;border-bottom:1px solid var(--gray-100)}
  /* sloupec akcí se smrskne na obsah (width:1%%, běžný trik na "auto-fit"
     tabulkový sloupec), tlačítko samo nesmí zalomit text - jinak se "Přidat
     místo" uřízne na "Přida" (závěrečné kolo, věta 6). Třída patří PŘÍMO na
     <td> (parametr `akce_indexy` v `radkovy_seznam` - opravné kolo 7), dřív
     seděla jen na vnořeném <div> a selektor `td.akce-bunka` proto nikdy
     nesedl - tenhle blok byl fakticky mrtvý kód. */
  table.seznam td.akce-bunka{display:table-cell;white-space:nowrap;width:1%}
  table.seznam td.akce-bunka .btn-riadek{width:auto;white-space:nowrap;
    margin:var(--m1) var(--m1) var(--m1) 0}
  table.seznam td.td-vedlejsi{display:table-cell;font-size:inherit;color:inherit}
  table.seznam td.td-vedlejsi::before,
  table.seznam td.td-vedlejsi + td.td-vedlejsi::before{content:none}
}

/* --- sbalená skupina (deaktivovaní apod.) - nativní <details>, bez JS --- */
details.skupina-sbalena{background:#fff;border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:var(--m4);padding:var(--m3) var(--m4)}
details.skupina-sbalena summary{cursor:pointer;font-weight:700;
  font-size:var(--fs-nadpis);color:var(--gray-900);list-style:revert}
details.skupina-sbalena[open] summary{margin-bottom:var(--m3)}

/* --- souhrn objednávky --- */
.souhrn{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);
  padding:var(--m4);margin:var(--m4) 0}
.souhrn .souhrn-cena{font-size:var(--fs-titulek);font-weight:700;margin-bottom:var(--m3)}
.souhrn .souhrn-radek{display:flex;justify-content:space-between;font-size:var(--fs-mensi);
  padding:var(--m1) 0;border-top:1px solid var(--gray-100)}
.souhrn .souhrn-radek:first-of-type{border-top:none}

/* --- měsíční kalendář (1440) --- */
/* Pozn. (opravné kolo 1, věta G): nadpis a mřížka mizí SPOLU - obal
   `.kalendar-blok` skrývá obojí na mobilu, ne jen `.kalendar` samotný
   (jinak zůstal osamělý prázdný "září 2026" nadpis na 390 px). */
.kalendar-blok{display:none}
.kalendar{display:none}
@media (min-width:900px){
  .kalendar-blok{display:block}
  .kalendar{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--m1);
    background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--m4)}
  .kalendar .kal-hlavicka{font-size:var(--fs-drobne);font-weight:700;color:#fff;
    background:var(--forest);text-align:center;padding:var(--m1);border-radius:var(--radius-s)}
  .kalendar .kal-den{border-radius:var(--radius-s);padding:var(--m2);min-height:64px;
    background:var(--gray-50);font-size:var(--fs-drobne)}
  .kalendar .kal-den .cislo{font-weight:700}
  .kalendar .kal-den .mesic{color:var(--gray-400);margin-left:var(--m1)}
  .kalendar .kal-den[data-dnes="1"]{border:2px solid var(--forest)}
  .kalendar .kal-den.mimo{opacity:.4}
  .kalendar .kal-den .neotevreno{color:var(--gray-400);font-style:italic}
  .zamestnanec-tyden-mobil{display:block}
}
@media (min-width:900px){.zamestnanec-tyden-mobil{display:none}}

/* ───── Z-01: týden zaměstnance na 1440 px (OB-E3.2a) ─────
   ⛔ `.zamestnanec-tyden-mobil` výš je z drátěnky TELEFONNÍ blok - nad 900 px
   má `display:none`. Kdyby Z-01 týden kreslila do něj, na notebooku by se
   nevykreslil vůbec, ačkoli ho zadání § 3.2/2 na 1440 px vyžaduje (T2-060).
   Naměřeno 15. 9. 2026: snímek `Z-01-zamestnanec.png` měl 900 px, tedy jen
   horní kartu - DOM asserce přitom procházely, protože prvky v dokumentu
   BYLY (memory: grep do zdroje neuvidí, co dělá CSS).
   Telefon se neladí ani neměří (P-17), takže tenhle blok je JEDEN pro obě
   šířky: mřížka, která se sama zalomí podle místa. */
.zamestnanec-tyden{display:grid;gap:var(--m4);
  grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
.zamestnanec-tyden .karta{margin-bottom:0;min-width:0}

/* --- trend pruhy --- */
/* Pozn. (opravné kolo 2, věta 4): % výška z inline `style` na dítěti flex
   sloupce se nezobrazí (containing block nemá pevnou výšku - `align-items:
   flex-end` sloupec NEROZTÁHNE). Řešení: pevná škála tříd `.trend-1..8`,
   násobky `--m4`, a číslo se vždy tiskne NAD sloupec - bez čísla to není
   trend, jen barevné pruhy bez smyslu. */
.trend{display:flex;align-items:flex-end;gap:var(--m3);margin:var(--m3) 0}
.trend .sloupec{flex:1;display:flex;flex-direction:column;align-items:center;
  justify-content:flex-end;gap:var(--m1)}
.trend .sloupec .cislo-trendu{font-size:var(--fs-drobne);font-weight:700;color:var(--gray-700)}
.trend .sloupec .pruh{width:100%;background:var(--green-light);border:1px solid var(--zelena-text);
  border-radius:var(--radius-s) var(--radius-s) 0 0}
.trend .sloupec .popisek{font-size:var(--fs-drobne);color:var(--gray-500)}
.trend-1{height:calc(var(--m1) * 1)}
.trend-2{height:calc(var(--m1) * 2)}
.trend-3{height:calc(var(--m1) * 3)}
.trend-4{height:calc(var(--m1) * 4)}
.trend-5{height:calc(var(--m1) * 5)}
.trend-6{height:calc(var(--m1) * 6)}
.trend-7{height:calc(var(--m1) * 7)}
.trend-8{height:calc(var(--m1) * 8)}
.trend-9{height:calc(var(--m1) * 9)}
.trend-10{height:calc(var(--m1) * 10)}
.trend-11{height:calc(var(--m1) * 11)}
.trend-12{height:calc(var(--m1) * 12)}
.trend-13{height:calc(var(--m1) * 13)}
.trend-14{height:calc(var(--m1) * 14)}
.trend-15{height:calc(var(--m1) * 15)}
.trend-16{height:calc(var(--m1) * 16)}
.trend-17{height:calc(var(--m1) * 17)}
.trend-18{height:calc(var(--m1) * 18)}
.trend-19{height:calc(var(--m1) * 19)}
.trend-20{height:calc(var(--m1) * 20)}
.trend-21{height:calc(var(--m1) * 21)}
.trend-22{height:calc(var(--m1) * 22)}
.trend-23{height:calc(var(--m1) * 23)}
.trend-24{height:calc(var(--m1) * 24)}

/* --- formuláře --- */
form.formular{display:flex;flex-direction:column;gap:var(--m3);min-width:0;max-width:100%}
form.formular .pole{display:flex;flex-direction:column;gap:var(--m1);min-width:0}
form.formular label{font-size:var(--fs-mensi);font-weight:600;color:var(--gray-700)}
/* zaškrtávátko + text na JEDNOM řádku, svisle vystředěné - jinak 24px
   checkbox vedle 15px textu vypadá "odtržený" od popisku (závěrečné kolo,
   věta 4: frumos-04 "Účtovat porci"). Ponecháno jako záchranná síť pro
   holé <label><input type=checkbox>...</label>. PŘÍČINA vady U-08 (12. 9.,
   dva neúspěšné zásahy do .prepinac): tahle :has() varianta má VYŠŠÍ
   specificitu (0,2,3 - form+.formular+label+:has(input[type])) než
   `label.prepinac` (0,1,1), takže i po přepnutí .prepinac z flexu na grid
   PŘEBÍJELA jeho `display` zpátky na flex - proto se čísla po obou
   zásazích do label.prepinac ani nehnula, měnili jsme vlastnost, která
   nikdy nebyla vítězem kaskády. `:not(.prepinac)` tu díru zavírá. */
form.formular label:not(.prepinac):has(> input[type="checkbox"]),
form.formular label:not(.prepinac):has(> input[type="radio"]){
  display:flex;align-items:center;gap:var(--m2);font-weight:400}
.dny-tydne-vyber{display:flex;flex-wrap:wrap;gap:var(--m2) var(--m4)}

/* --- přepínač (U-08, 12. 9. - Pavel: "tady vidíš, že to posrané" - čtyři
   zaškrtávátka bez popisků, texty slité do úzkého sloupce vpravo mimo
   formulář). Vlastní třída na <label>, GRID o dvou sloupcích NASTAVENÝ
   PŘÍMO (ne podmíněně přes :has()), takže řádek drží i mimo <form> a mimo
   <fieldset>: čtvereček vlevo, text a vysvětlení ve druhém sloupci pod
   sebou. ŽÁDNÝ obalový <span> kolem textu - dřívější `.prepinac-telo`
   (flex uvnitř grid rodiče) končil s width:0 a left za pravým okrajem
   rodiče (naměřeno v Chrome 12. 9.), protože skutečnou příčinou byl výš
   popsaný :has() konflikt, ne flex/grid na tomhle místě. Bez mezivrstvy
   nemá druhé pravidlo co přebít. --- */
label.prepinac{display:grid;grid-template-columns:auto minmax(0,1fr);
  align-items:start;gap:var(--m1) var(--m3);width:100%;
  padding:var(--m2) 0;cursor:pointer;font-weight:400}
/* Rozměr musí být tady znovu: v gridu prvek ztratil šířku z obecného pravidla
   a měřidlo ho našlo jako 13×24 px (minimum klikacího cíle je 24×24). */
label.prepinac input[type="checkbox"]{grid-column:1;margin-top:var(--m1);
  width:var(--m6);height:var(--m6);flex:none}
label.prepinac .prepinac-text{grid-column:2;font-size:var(--fs-mensi);font-weight:600;color:var(--gray-900)}
label.prepinac .prepinac-vysvetleni{grid-column:2;font-size:var(--fs-drobne);color:var(--gray-500);font-weight:400}
/* Oprava D (nález 2): needitovatelný přepínač to musí říct i TEXTEM, ne jen
   vzhledem checkboxu (KONTROLA-PO-OPRAVE.md: "nevím, jestli si tohle jako
   manažerka můžu sama přepnout") - tmavší a tučnější než `.prepinac-vysvetleni`,
   aby to nepůsobilo jako další "mimochodem" poznámka, ale jako stav pole. */
label.prepinac .prepinac-needituje{grid-column:2;font-size:var(--fs-drobne);font-weight:600;color:var(--gray-700)}
.pole-prepinace{display:flex;flex-direction:column}
.pole-prepinace label.prepinac{border-bottom:1px solid var(--gray-100)}
.pole-prepinace label.prepinac:last-child{border-bottom:none}

/* --- počet obědů podle dne (P-20, nahrazuje "Počet obědů (X)" + checkboxy
   "Dny závozu" - dohoda nese počet pro každý den zvlášť, 0 = ten den se
   nevozí) --- */
.tyden-pocty{display:flex;flex-wrap:wrap;gap:var(--m3);margin-top:var(--m1)}
.tyden-pocty .den-pocet{display:flex;flex-direction:column;gap:var(--m1);width:76px;max-width:100%}
.tyden-pocty .den-pocet label{font-size:var(--fs-drobne);font-weight:600;color:var(--gray-700)}
.tyden-pocty .den-pocet input{width:100%;text-align:center;box-sizing:border-box}

/* --- rozcestníková karta (U-06, 12. 9. - Pavel: "vůbec netuším, co bych
   zde dělal, klikal na to nebo?"): CELÁ karta je <a>, s rámečkem reagujícím
   na najetí a šipkou - ne jen informační banner bez cíle. --- */
a.karta-klik{display:flex;align-items:center;justify-content:space-between;gap:var(--m4);
  text-decoration:none;color:inherit;cursor:pointer;border:1px solid var(--gray-200);
  border-left:4px solid var(--gray-300)}
a.karta-klik:hover{border-color:var(--forest);box-shadow:0 2px 8px rgba(0,0,0,.12)}
a.karta-klik[data-skupina="hori"]{border-left-color:var(--cervena-text)}
a.karta-klik[data-skupina="ceka"]{border-left-color:var(--oranzova-text)}
a.karta-klik .kk-obsah h3{margin:0 0 var(--m1);font-size:var(--fs-mensi);font-weight:700;color:var(--gray-900)}
a.karta-klik .kk-obsah p{margin:0;font-size:var(--fs-drobne);color:var(--gray-600)}
a.karta-klik .kk-akce{color:var(--zelena-text);font-weight:600;margin-top:var(--m2);font-size:var(--fs-drobne)}
a.karta-klik .kk-sipka{font-size:var(--fs-titulek);color:var(--gray-400);flex:none;line-height:1}
.uvod-obrazovky{font-size:var(--fs-mensi);color:var(--gray-600);margin:0 0 var(--m3)}

/* --- den ke schválení: přehled místo zdi textu (U-04) --- */
ul.prehled-dne{list-style:none;margin:0 0 var(--m3);padding:0;display:flex;flex-direction:column;gap:var(--m1)}
ul.prehled-dne li{display:flex;justify-content:space-between;gap:var(--m3);
  font-size:var(--fs-mensi);padding:var(--m1) 0;border-bottom:1px solid var(--gray-100)}
ul.prehled-dne li:last-child{border-bottom:none}
ul.prehled-dne strong{font-weight:700}
ul.rozpis-skladby{margin:0;padding-left:var(--m4);font-size:var(--fs-mensi);color:var(--gray-700)}
ul.rozpis-skladby li{padding:var(--m1) 0}
/* :not([type=checkbox]):not([type=radio]) je tu z nálezu F-07 (12. 9. 20:2x,
   změřeno přes CSS.getMatchedStylesForNode): `form.formular input` má
   specificitu (0,1,2) a přebíjelo reset `input[type="checkbox"]` (0,1,1)
   výš, takže KAŽDÉ zaškrtávátko uvnitř formuláře dostalo width:100%.
   Na F-07 vyšlo 66 px místo 24 a vytlačilo odznak „100 %" o 35 px za hranu
   karty, která ho ořízla (karta má overflow:hidden). Postižená byla tři
   zaškrtávátka na dvou obrazovkách (F-07, F-08 2×) z dvanácti celkem -
   proto se opravuje PRAVIDLO, ne jedno místo. Dvě dřívější opravy (kolo 7:
   flex-shrink:0 + min-width:max-content na label.zaskrtnuti) mířily na
   flexbox karty a vadu jen přetvořily ze „smáčknuté" na „přetečenou". */
/* :not(.podil-pole) (P-44, 15. 9. 2026) - TŘETÍ zásah téhož pravidla do
   karty jídla: specificita (0,3,2) přebila `.karta-jidlo .podil-pole`
   (0,2,0) a číselné pole podílu dostalo width:100 %, tedy 267 px přes okraj
   karty (overflow:hidden → pole neviditelné). Obecné pravidlo pro formulář
   si nesmí nárokovat pole uvnitř karty jídla; výjimka je tady, ne !important
   u karty. Měří osa `prvek-preteka` v bráně rozhraní. */
form.formular input:not([type="checkbox"]):not([type="radio"]):not(.podil-pole),
form.formular select,form.formular textarea{font-family:inherit;
  font-size:var(--fs-zaklad);padding:var(--m3);border-radius:var(--radius-s);
  border:1px solid var(--gray-300);background:#fff;width:100%;max-width:100%;
  box-sizing:border-box}
/* fieldset má v prohlížečích vlastní min-width:min-content (neposlouchá
   flex-shrink jako běžný box) - bez min-width:0 dřepne rodič širší, než je
   obrazovka (F-07 přetékalo 412 > 390 px, opravné kolo 5, věta 1). */
form.formular fieldset{border:1px solid var(--gray-200);border-radius:var(--radius);
  padding:var(--m4);margin:0;min-width:0;max-width:100%;box-sizing:border-box}
form.formular legend{font-weight:700;font-size:var(--fs-mensi);padding:0 var(--m2)}
/* Oprava E (KONTROLA-PO-OPRAVE-2.md, F-11 "Cena při náhradě" splývá s
   přepínačem nad sebou) - PŘÍČINA je obecná: `<fieldset>` sám nemá mezi
   svými přímými dětmi ŽÁDNOU mezeru (na rozdíl od `form.formular`, který má
   `gap` MEZI fieldsety, ne UVNITŘ nich) - týká se stejně "Uzávěrka a
   nahlášení"/"Kontakt a odesílatel" na F-11 i všech čtyř fieldsetů na F-07
   (byly slité úplně stejně, jen to nikdo nenahlásil, protože to jsou samé
   vstupní řádky, ne toggle-list následovaný cizím prvkem). Sourozenecký
   selektor (ne :has, ne přepis na display:flex u <fieldset> kvůli <legend>)
   dá stejnou mezeru MEZI KAŽDÝM polem (`.pole`, `.pole-prepinace`, ...) ve
   VŠECH fieldsetech najednou - stejná `--m3` mezera, jakou `form.formular`
   používá mezi celými fieldsety. */
form.formular fieldset > * + *{margin-top:var(--m3)}
.diff-hodnota{font-weight:700;color:var(--oranzova-text)}
.poznamka{font-size:var(--fs-drobne);color:var(--gray-500)}
/* ───── stránkování jako ovládací prvek, ne poznámka pod čarou ─────
   Pavel 13. 9. 2026 nad firemní nabídkou: „je to strasne prtave - toho si
   nikdo nevsimne". Za tím řádkem přitom leželo 24 z 33 jídel. Proto lišta
   s vlastním pozadím a tlačítky, ne šedý text; a proto se to řeší tady,
   protože komponentu používají všechny seznamy. */
/* ───── mezistránka nevratné akce (includes/akce.php, OB-E3.3c) ─────
   Žádná nová barva ani poloměr - používá se karta a tokeny, které aplikace
   už má (KONVENCE § 2). Seznam adres a rozsahu je obyčejný seznam, jen bez
   odrážek: adresy se čtou po řádcích, ne v souvislé větě. */
.potvrzeni-akce{max-width:44rem}
.potvrzeni-akce h2{margin-top:0}
.potvrzeni-komu,.potvrzeni-rozsah{margin:0 0 var(--m3) 0;padding:0;list-style:none}
.potvrzeni-komu li,.potvrzeni-rozsah li{padding:var(--m1) 0;font-weight:600;
  border-bottom:1px solid var(--gray-200)}
.potvrzeni-komu li:last-child,.potvrzeni-rozsah li:last-child{border-bottom:0}

.strankovani{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:var(--m3);margin-top:var(--m4);padding:var(--m3) var(--m4);
  background:var(--gray-50);border:1px solid var(--gray-200);border-radius:var(--radius)}
.strankovani-kde{font-size:var(--fs-mensi);color:var(--gray-600);font-weight:600}
.strankovani-akce{display:flex;align-items:center;gap:var(--m2)}
.strankovani-stav{font-size:var(--fs-drobne);color:var(--gray-500);padding:0 var(--m2)}
/* klikací cíl stránkování >=24x24 (over-dratenky.mjs, opravné kolo 4) */
.odkaz-strankovani{display:inline-flex;align-items:center;min-height:var(--m6);
  padding:var(--m2) var(--m3);border:1px solid var(--gray-300);border-radius:var(--radius-s);
  background:#fff;font-weight:600;font-size:var(--fs-mensi);text-decoration:none}
.odkaz-strankovani:hover{border-color:var(--forest)}
/* Vypnutý směr zůstane vidět, jen nejde kliknout - zmizelý prvek by vypadal
   jako vada rozhraní, ne jako konec seznamu.
   ⛔ KONTRAST NEJMÍŇ 4,5 : 1 (nález K1-S-01, WCAG 1.4.3). Do 14. 9. tu stálo
   `--gray-400` (#9ca3af) na `--gray-100` (#f3f4f6) = 2,5 : 1 - na 13 trasách
   text, který na monitoru u okna prostě není vidět. Že je prvek vypnutý, se
   pozná pozadím, rámečkem a kurzorem; barvou písma se to platit nemá.
   `--gray-600` (#4b5563) na `--gray-100` dává 6,5 : 1. Měří brana-trasy.mjs. */
.odkaz-strankovani.je-vypnuty{color:var(--gray-600);background:var(--gray-100);
  border-color:var(--gray-200);cursor:default}
/* ⛔ LISTOVÁNÍ SE NETISKNE (nález K1-7-P1). Na papíře je „Předchozí · strana
   1 z 3 · Další" pokyn, který nejde splnit - a hůř: tvrdí, že list je jen
   výřez, i když na papír jdou všechny položky. */
@media print{.strankovani{display:none !important}}
/* dvojí práh stránkování (opravné kolo 6): karta jedné položky na 390 px je
   vyšší než řádek tabulky - proto míň položek na stránku na telefonu (10)
   než na počítači (25). Řádky nad mobilním limitem se pod 900 px vůbec
   nevykreslí (výška 0), na počítači se objeví. */
table.seznam tr.radek-jen-desktop{display:none}
.poznamka.jen-desktop{display:none}
@media (min-width:900px), print{
  table.seznam tr.radek-jen-desktop{display:table-row}
  .poznamka.jen-mobil{display:none}
  .poznamka.jen-desktop{display:block}
}

/* --- rozvržení: 390 nejdřív, od 900 dvousloupcové s bočním nav ---
   Pozn. (opravné kolo 1, věta A): sloupce i řádky MUSÍ mít nav a obsah
   explicitně přiřazené (grid-column), jinak auto-placement podle pořadí
   v DOM (nav je za main) hodí nav do širokého sloupce a obsah do úzkého -
   přesně vada z prvního kola. Žádné ukotvení (věta B). */
@media (min-width:900px){
  /* align-content:start (opravné kolo 7 - nález osy header-mezera, 12. 9.):
     `body` nese `min-height:100vh` (výš, mimo media query) a dva řádky "auto".
     Bez tohle to výchozí `align-content:normal` chová v CSS Gridu jako
     "stretch" - na KRÁTKÝCH obrazovkách (přihlášení, jednoduchý formulář),
     kde obsah nevyplní celou výšku okna, prohlížeč rozpočítá zbylý prostor
     mezi oba "auto" řádky a NATÁHNE i řádek 1 (hlavička). `header.lista` je
     flex s `align-items:center`, takže se jeho obsah pak vycentruje uprostřed
     nafouknutého řádku - vznikne prázdný pruh NAD logem (a tenčí i POD ním
     před nav/main). Na dlouhých obrazovkách (kalendář, tabulky) to nebylo
     vidět, protože tam žádný zbylý prostor není. `align-content:start` řádky
     nechá na jejich přirozené výšce; zbylý prostor (pokud je) skončí AŽ ZA
     posledním řádkem, na konci stránky - kde je neviditelný a nevadí. */
  body{display:grid;grid-template-columns:240px minmax(0, 1fr);grid-template-rows:auto auto;
    align-content:start}
  header.lista{grid-column:1 / -1;grid-row:1}
  nav.hlavni{grid-column:1;grid-row:2;flex-direction:column;align-items:stretch;
    justify-content:flex-start;overflow-x:visible;border-bottom:none;
    border-right:1px solid var(--gray-200);gap:var(--m1);padding:var(--m4) var(--m2)}
  nav.hlavni a{justify-content:flex-start;border-radius:var(--radius-s)}
  main.obsah{grid-column:2;grid-row:2;max-width:1100px}
  .dvousloupec{display:grid;grid-template-columns:2fr 1fr;gap:var(--m6);align-items:start}
}

/* --- etikety (F-10) --- */
/* ⛔ ETIKETY JSOU TABULKA (nález F-10, kolo 2 OB-E3.3c). Byly to `<div>`,
   takže když list přetekl na další stranu, hlavička s časem dovozu a
   kontaktem se na ní neobjevila - v Chrome umí zopakovat záhlaví na každé
   straně JEN `<thead>` (`display: table-header-group`). Tabulka je tu
   kvůli STRÁNKOVÁNÍ, ne kvůli mřížce: na obrazovce se chová jako blok. */
.etikety-listu{width:100%;border-collapse:separate;border-spacing:0 0}
.etikety-listu thead th{text-align:left;padding:var(--m2) 0;font-size:var(--fs-drobne);
  color:var(--gray-700);border-bottom:1px solid var(--gray-300)}
.etikety-listu .eh-firma{display:block;font-weight:700;color:var(--gray-900)}
.etikety-listu .eh-zbytek{display:block}
.etiketa-prazdna{border:none;padding:0}
.etiketa{background:#fff;border:1px dashed var(--gray-300);border-radius:var(--radius-s);
  padding:var(--m3);margin-bottom:var(--m2);vertical-align:top}
.etiketa .e-firma{font-size:var(--fs-drobne);color:var(--gray-500)}
.etiketa .e-jidlo{font-weight:700}
.etiketa .e-cislovani{font-size:var(--fs-drobne);color:var(--gray-500)}

/* --- matice (F-05) --- */
@media (min-width:900px), print{
  table.matice td,table.matice th{text-align:center}
  table.matice td:first-child,table.matice th:first-child{text-align:left}

  /* ⛔ SLOUPEC IDENTITY SI DRŽÍ ŠÍŘKU (Pavel 13. 9. 2026: „tady ten sloupec
     firma-misto, nejak divne se lame text, protoze je ten sloupec maly").
     Příčina není v tom sloupci: prohlížeč rozdělí šířku mezi všechny
     sloupce a pět denních sloupců s dlouhým odznakem („Čeká na manažerku")
     si vezme tolik, že na jméno firmy zbude pár znaků a láme se po
     slabikách. Řeší se to tedy TADY, spodní mezí na sloupec identity -
     ne zkracováním jmen a ne tvrdou šířkou v px (ta by se rozbila na užším
     okně). `ch` je šířka číslice v použitém písmu, takže mez drží i když se
     změní stupeň písma - třeba v tisku, kde je od P-34 menší. */
  table.matice td:first-child,table.matice th:first-child{min-width:24ch}
  /* Pod 1200 px (P-45, 15. 9. 2026): 24ch + pět dnů s odznakem přeteklo rám
     o 104 px v okně 1024 px - identita drží 14ch, odznaky se lámou (níž). */
  @media (max-width:1199px){ table.matice td:first-child,table.matice th:first-child{min-width:12ch} }
  /* Odznak se smí zalomit uvnitř buňky dne; dřív držel celou svou délku
     a tlačil ji do sloupce identity. */
  table.matice td .stav{white-space:normal}
}

/* ═══════════════════ DOPLŇKY APLIKACE (OB-E3.3) ═══════════════════
   Co drátěnky nemají a aplikace potřebuje, PLUS dvě opravy třídy vady,
   které se naměřily na schválených drátěnkách bránou § 9.4. Obojí je
   opravené TADY, v jedné třídě - ne na každé obrazovce zvlášť.
   ⛔ Do `zadani-v2/` se nesahá; rozpor je vypsaný ve zprávě z dávky. */

/* ───── OPRAVA 1 · kontrast primárního tlačítka (naměřeno 2,59 : 1) ─────
   ROZPOR V ZADÁNÍ, ne volba programátora:
     · SPECIFIKACE § 9.4 žádá kontrast textu nejméně 4,5 : 1 a brána ho měří;
     · KONVENCE § 2 v jedné větě říká OBOJÍ - „tmavá výplň (aktivní den,
       primární tlačítko) je --forest" a zároveň „hlavní akce zelená --green
       s bílým textem jen u tlačítka (kontrast 2,59 : 1)".
   Naměřeno 13. 9. na schválených drátěnkách: `.btn-primary` = 2,59 : 1 na
   VŠECH 14 obrazovkách - je to třída vady, ne jedno tlačítko. Z obou hodnot,
   které KONVENCE § 2 nabízí, vyhovuje oběma dokumentům jen `--forest`
   (11 : 1). Bere se tedy ta, která neporušuje nic; tvar, velikost ani pozice
   tlačítka se nemění, mění se jedna výplň (zákon 18: oprava dodá metodu,
   nikdy nezmění předepsanou hodnotu na pohodlnější).
   Zelená zůstává značkou Frumoše jinde (odznaky „v pořádku", obrys vybrané
   karty jídla, trend) - tam se na ní netiskne bílý text. */
.btn-primary{background:var(--forest);color:#fff}
.btn-primary:hover{background:var(--green-dark);color:#fff}

/* ───── OPRAVA 2 · klikací cíl popisku pole (naměřeno 23 px) ─────
   `<label for="…">` JE klikací cíl (kliknutí zaostří pole) a brána § 9.4 ho
   měří spolu s tlačítky. Popisek má `--fs-mensi` (15 px) × `--lh` (1,5) =
   22,5 px, tedy 23 px - pod prahem 24 px. Naměřeno na F-07 (14 prvků) a F-11
   (9 prvků); je to vada KOMPONENTY popisku, ne těch dvou obrazovek.
   Minimum výšky drží řádek na 24 px bez jediné změny textu a rozvržení. */
form.formular label,form.filtr label,.den-pocet label{min-height:var(--m6);
  display:flex;align-items:center}
/* Přepínač má vlastní grid (U-08) - ten se minimem výšky rozbít nesmí. */
form.formular label.prepinac{display:grid}

/* ───── pravidlo u pole (N1, SS-02, SS-03, SS-04, T2-075) ─────
   Meze a formát se píšou POD pole, ne až do chybové hlášky po uložení:
   „na statické drátěnce pravidla vidět nejsou, protože drátěnka neběží"
   (BACKLOG, nález N1 z posudku správce). Barva --gray-600 je o stupeň
   tmavší než `.poznamka`, protože tohle není mimochodem poznámka, ale
   podmínka, kterou pole přijme. */
.pravidlo-pole{display:block;font-size:var(--fs-drobne);line-height:var(--lh);
  color:var(--gray-600);font-weight:400}

/* ───── rozlišovací údaj u jména (T2-068, SS-05) ─────
   Dva lidé téhož jména se nesmějí zaměnit na OBJEDNÁVCE, ETIKETĚ ani
   v PODKLADU - proto e-mail u každého výskytu, ne jen na jedné obrazovce. */
.rozlisovaci-udaj{display:block;font-size:var(--fs-drobne);color:var(--gray-600);font-weight:400}
table.seznam .rozlisovaci-udaj{display:inline-block;margin-left:var(--m2)}

/* ───── etiketa: jméno a řádek alergenů (F-10, P-14, P-26) ─────
   Etiketa se kreslí RÁMEČKEM a TEXTEM (`.etiketa` výš má border dashed) -
   z tiskárny nevyjede nic, co je jen `background` (SPECIFIKACE § 9.4,
   memory: tisk background se nevytiskne). Řádek alergenů se tiskne, jen
   když jídlo alergeny má; náhradní text se nepíše (P-26). */
.etiketa .e-jmeno{font-weight:700;color:var(--gray-900)}
.etiketa .e-alergeny{font-size:var(--fs-drobne);color:var(--gray-700)}
@media print{
  .etiketa{break-inside:avoid;border-style:solid;border-color:var(--gray-700)}
  .prepinac-podoba,.filtr-pilulky,.pravidlo-pole{display:none}
}

/* ───── honeypot (rules/web-forms.md, vrstva 1) ─────
   Pole musí být v DOM (robot ho vyplní), ale mimo obraz. Posun je ve `vw`,
   ne v px - px smí stát jen v assets/tokeny.css (KONVENCE § 2). Rozměr
   zůstává nad prahem klikacího cíle, aby brána § 9.4 nehlásila nález nad
   polem, které žádný člověk nevidí ani nepotřebuje trefit. */
.honeypot{position:absolute;inset-inline-start:-100vw;top:0}
.honeypot input{width:var(--m12);height:var(--m8)}

/* ───── dvě sekce návrhů změn (N2 z posudku správce, F-08) ─────
   Jednodenní výjimka a trvalá změna dohody se podle P-07 potvrzují JINAK -
   hromadná akce proto nikdy nesmí přeběhnout přes obě. Oddělené `<section>`
   s vlastním nadpisem a vlastní vysvětlující větou. */
section.sekce-navrhu{margin-bottom:var(--m8)}
section.sekce-navrhu > h2{margin-top:0}
section.sekce-navrhu .sekce-veta{font-size:var(--fs-mensi);color:var(--gray-600);margin-bottom:var(--m3)}

/* ───── zástupný blok jídla bez fotky (KONVENCE § 1) ─────
   Tmavá výplň `--forest`, aby bílý název prošel kontrastem; kategorie se
   pozná textem, ne jen barvou. */
.karta-jidlo .zastupny{background:var(--forest)}

/* ───── řádek nastavení: hodnota + pravidlo (F-11) ───── */
.pole-nastaveni{display:flex;flex-direction:column;gap:var(--m1);
  padding:var(--m3) 0;border-bottom:1px solid var(--gray-100)}
.pole-nastaveni:last-child{border-bottom:none}
.pole-nastaveni .klic{font-size:var(--fs-drobne);color:var(--gray-600);font-weight:600}

/* ───── podíl ve výchozí skladbě (F-07, OB-E3.4 ho převezme) ─────
   Drátěnka má u karty jen zaškrtávátko a nezměnitelný popisek „20 %",
   ačkoli testy T2-006 až T2-008 počítají s libovolným zadaným číslem
   a součtem 100 % (RIZENI § 2, „Navíc proti drátěnkám" u OB-E3.4).
   Číselné pole je proto na kartě už tady - jinak by výchozí skladbu
   nešlo zadat vůbec. */
.karta-jidlo .podil-pole{width:var(--m12);min-height:var(--m8);text-align:center;
  font-family:inherit;font-size:var(--fs-mensi);padding:var(--m2);
  border:1px solid var(--gray-300);border-radius:var(--radius-s);flex:none}
.karta-jidlo label.zaskrtnuti span{font-size:var(--fs-drobne);color:var(--gray-600)}
/* tlačítko přiřazené k formuláři atributem `form` uvnitř buňky akcí */
table.seznam td.akce-bunka button.btn-riadek{width:100%;margin:var(--m1) 0}
@media (min-width:900px){
  /* display:block + width:max-content (P-45, 15. 9. 2026): tři tlačítka
     vedle sebe („Doplnit smlouvu · Upravit firemní nabídku · Ukončit
     dohodu") dělala ze sloupce Akce 600 px a tabulka F-06 v okně kolem
     1000 px přetekla rám - poslední tlačítko uříznuté, posuvník na macOS
     neviditelný. Pod sebou je sloupec široký jako nejdelší tlačítko. */
  table.seznam td.akce-bunka button.btn-riadek{display:block;width:max-content;white-space:nowrap;
    margin:var(--m1) 0}
}
@media (min-width:900px){
  /* Odznak stavu v řádkovém seznamu se smí zalomit (P-45): „Chybí smlouva
     o zpracování" na jednom řádku dělal sloupec Smlouva 250 px a F-06 v okně
     1024 px přetekl. Stejné pravidlo už platí v matici F-05. */
  table.seznam td .stav{white-space:normal}
}

/* ───── OPRAVA 3 · odkaz kolem odznaku stavu (naměřeno 19 px) ─────
   V matici F-05 je odznak zabalený do `<a>`, aby se z buňky dalo kliknout do
   dne. `<a>` je ale inline a brána § 9.4 ho měřila jako klikací cíl vysoký
   19 px (53 prvků ze 67). Je to vada KOMPONENTY „odkaz kolem odznaku", ne
   jedné obrazovky - drží ji proto třída, ne úprava v šabloně. */
a.odkaz-odznak{display:inline-flex;align-items:center;min-height:var(--m6);
  text-decoration:none}

/* ───── sbalená skupina na obrazovce Nastavení (F-11) ─────
   24 klíčů ve čtyřech skupinách má 4041 px a čtyři seznamy dalších ~600 -
   obrazovka měla 5548 px proti prahu 3000 (naměřeno 13. 9.). Komponenta
   `details.skupina-sbalena` je ze schválené sady drátěnek a je bez skriptu
   (nativní `<details>`), takže obrazovka dává smysl i bez JS. Otevřená
   zůstává první skupina - časy uzávěrky se mění nejčastěji. */
details.skupina-sbalena > summary{font-size:var(--fs-nadpis)}
details.skupina-sbalena fieldset{border:none;padding:0}
details.skupina-sbalena legend{padding:0}

/* ───── aktivní volba přepínače podoby není odkaz (kolo K1, OC-07) ─────
   Odkaz na stránku, na které stojím, je druhá navigace na týž cíl. Aktivní
   volba je proto `<span>`; vzhled zůstává stejný jako u odkazu, aby dvojice
   vypadala jako jeden přepínač (schválená drátěnka F-12). */
.prepinac-podoba span[aria-current="page"]{flex:1;text-align:center;
  padding:var(--m2) var(--m3);border-radius:var(--radius-s);
  background:var(--forest);color:#fff;font-weight:600;font-size:var(--fs-mensi)}

/* ═════════ TISKOVÝ LIST NA ADRESU (F-09 a F-10, P-31) ═════════
   Jeden list = jedna dodávka: hlavička (den · pobočka · firma · místo
   a adresa · čas · kontakt) → souhrnná tabulka jídlo × počet s řádkem
   CELKEM → etikety téže adresy. Kostru kreslí `includes/tiskovy-list.php`,
   vzhled drží tenhle blok - obě obrazovky mají stejný papír. */
.tiskovy-list{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);
  padding:var(--m4);margin-bottom:var(--m6)}
.tiskovy-list > h2{margin:0 0 var(--m2);font-size:var(--fs-nadpis)}
.tiskovy-list > h3{margin:var(--m4) 0 var(--m2);font-size:var(--fs-zaklad);color:var(--gray-700)}
/* ⛔ HLAVIČKA LISTU JE TABULKA (P-40, 14. 9. 2026). Popisek vlevo, hodnota
   vpravo, každý údaj na vlastním řádku, mezi řádky slabá linka. Řádek FIRMA
   se zvýrazňuje TUČNÝM PÍSMEM a SVISLOU LINKOU - ne `background`, protože
   pozadí z tiskárny nevyjede (memory `tisk-background-se-nevytiskne`)
   a zvýraznění by na papíře prostě nebylo. */
.list-hlavicka{width:100%;border-collapse:collapse;margin-bottom:var(--m3)}
.list-hlavicka th,.list-hlavicka td{padding:var(--m1) var(--m2);text-align:left;
  vertical-align:top;border-bottom:1px solid var(--gray-200);font-size:var(--fs-mensi)}
.list-hlavicka th{width:14em;white-space:nowrap}
.list-hlavicka .radek-firma th,.list-hlavicka .radek-firma td{font-weight:700;
  font-size:var(--fs-nadpis);border-left:3px solid var(--forest);
  border-bottom:2px solid var(--forest);padding-top:var(--m2);padding-bottom:var(--m2)}
.list-radek{margin:var(--m1) 0;font-size:var(--fs-mensi);color:var(--gray-900)}
/* Popisek říká, CO to číslo je - na papíře bez něj řidič hádá, jestli
   „11:30" je čas dovozu, nebo čas vyzvednutí. */
.list-popisek{font-size:var(--fs-drobne);color:var(--gray-500);font-weight:600;
  margin-inline-end:var(--m1)}
.list-popisek:not(:first-child){margin-inline-start:var(--m3)}
/* ⛔ KLIKACÍ CÍL ≥ 24 px (§ 9.4). Odkaz `tel:` je inline a brána ho měřila
   jako 92 × 19 px - táž třída vady jako `a.odkaz-odznak` výš. Řidič ho mačká
   palcem v autě, takže to není kosmetika. */
.odkaz-telefon{display:inline-flex;align-items:center;min-height:var(--m6);
  color:var(--zelena-text);font-weight:600;text-decoration:underline}

/* ───── co je v DOM jen kvůli papíru ─────
   ⛔ Obrazovka ukazuje VÝŘEZ (práh výšky 3 000 px, § 9.4), tiskárna dostává
   VŠECHNO. Kdyby se zbytek listů a etiket nevykreslil vůbec, vytiskla by
   kuchyně jen to, co bylo zrovna vidět - a nikdo by si toho nevšiml, protože
   stránka by vypadala správně. */
.jen-tisk{display:none}
@media print{
  .jen-tisk{display:block}
  /* ⛔ KAŽDÝ LIST NA NOVOU STRANU. „ale ne zase natlacene na sebe" (P-31).
     Mezera to neudělá - dvě dodávky by skončily na jednom archu. */
  .tiskovy-list + .tiskovy-list{break-before:page;page-break-before:always}
  .tiskovy-list{box-shadow:none;border:none;padding:0;margin-bottom:0;
    break-inside:auto}
  .list-hlavicka{break-after:avoid;break-inside:avoid}
  .tiskovy-list > h3{break-after:avoid}
  /* Náhledová věta „na obrazovce jsou listy 1-3 z 16" na papíře nedává
     smysl - papír má všechny. */
  .poznamka[data-strankovani]{display:none}
  /* Vodorovný posuv na papíře neexistuje: co přeteče, se uřízne. */
  .tabulka-obal{overflow:visible}
  /* ⛔ ETIKETY VE DVOU SLOUPCÍCH (P-32, „tady to je zbytecne obrovske").
     Etiketa je štítek na krabičku, ne odstavec: jedna pod druhou přes celou
     šířku archu spolykala třikrát víc papíru, než je potřeba. Dva sloupce
     drží čitelnost (stejné písmo) a zkrátí arch na polovinu; rámeček
     zůstává, protože z tiskárny nevyjede nic, co je jen `background`. */
  .etikety-listu{width:100%;table-layout:fixed;border-spacing:var(--m2)}
  /* ⛔ TOHLE JE TA OPRAVA: záhlaví tabulky se opakuje na KAŽDÉ straně, na
     kterou etikety přetečou. Bez něj strana 13 čtrnáctistránkového PDF
     neobsahovala ani firmu, ani čas dovozu, ani kontakt (naměřeno 14. 9.). */
  .etikety-listu thead{display:table-header-group}
  /* ⛔ `.jen-tisk{display:block}` výš by z buňky udělalo blok a tabulka by se
     rozpadla na jednu etiketu na řádek - PDF vyskočilo ze 14 stran na 29
     (naměřeno 14. 9. při téhle opravě). Buňka zůstává buňkou. */
  td.etiketa.jen-tisk{display:table-cell}
  .etikety-listu tr{break-inside:avoid}
  .etikety-listu .etiketa{margin-bottom:0;width:50%}
}

/* --- přihlašovací stránka na střed i na širokém okně (Pavel 15. 9. 16:51) --- */
/* Body je od 900 px mřížka „240 px nav + obsah"; přihlášení žádnou nav nemá,
   takže main seděl ve 2. sloupci a byl posunutý o šířku neexistující nabídky
   doprava. Tady se roztáhne přes oba sloupce a vycentruje sám. Odstup
   nadpisu od hlavičky s logy je --m8, ať nadpis nesedí nalepený na liště. */
@media (min-width:900px){
  body[data-obrazovka^="prihlaseni"] main.obsah{grid-column:1 / -1;max-width:760px;margin:0 auto}
}
body[data-obrazovka^="prihlaseni"] main.obsah > h1{margin-top:var(--m8)}
