/* Kovovýroba — industriální světlé téma, vysoký kontrast, tmavá navigace.
   Stavové barvy: zelená=hotovo, červená=poznámka/přerušení/blokace, oranžová=po termínu.
   Velké dotykové cíle (ovládání v rukavicích). Viz docs/SPEC.md §11.

   DESIGN TOKENY (re-audit Dávka 5, 2026-08-11c): všechny barvy, poloměry,
   stíny a menší velikosti písma žijí v :root; tmavý režim je JEN přepis
   tokenů v body.theme-dark (žádná komponentní dark pravidla). Nové styly
   piš z tokenů — holý hex mimo tokenové bloky je regrese. Mezery (padding/
   margin) zůstávají záměrně literální: sledují 2px rytmus, ale kódují
   geometrii konkrétní komponenty (často asymetricky) — token by přidal jen
   nepřímost bez deduplikace; sdílený rytmus mezer nesou tokeny --sp-* u gap. */
:root {
  /* Plocha a text */
  --bg: #f4f6f8; --card: #fff; --ink: #1c2733; --muted: #6b7785;
  --line: #d6dde4;
  --field-bg: #fff; /* podklad input/select/textarea (v dark tmavší než karta) */
  /* Akcent + stavové barvy (SPEC §11) — každá s tmavší hover variantou *-d */
  --accent: #1565c0; --accent-d: #0d3f7a;
  --c-done: #2e7d32;    --c-done-d: #1b5e20;    /* zelená — hotovo */
  --c-alert: #c62828;   --c-alert-d: #a51f1f;   /* červená — poznámka / přerušení / blokace */
  --c-overdue: #ef6c00; --c-overdue-d: #c65b00; /* oranžová — po termínu */
  --c-neutral: #546e7a; --c-neutral-d: #37474f; /* šedomodrá — PAUZA (není to problém);
     dostatečný kontrast s bílým textem v obou tématech → bez dark přepisu */
  /* Tmavá lišta (tmavá v OBOU tématech — proto vlastní tokeny, ne --ink/--bg) */
  --nav-bg: #1c2733; --nav-hover: #2b3947; --nav-ink: #c7d2dc;
  /* Podbarvení (tinty) stavů — badge, info boxy, podbarvené řádky.
     Jedna sémantika = jeden token (sjednocení 3 dřívějších odstínů „vybráno/
     nepřečteno/info box" na --tint-accent, 2026-08-11c). */
  --tint-done: #e2f2e3; --tint-alert: #fbe4e4; --tint-overdue: #fdeadb;
  --tint-info: #e1ecf8;   --ink-info: #0d3f7a;   /* badge-info: podklad + text */
  --tint-accent: #eef4fb; --tint-accent-line: #b8d0ea; /* vybraná volba, nepřečtené, info box */
  --tint-main: #e8e8f8;   --ink-main: #3730a3;   /* „🔒 jen hlavní admin" */
  --tint-note: #fff7e6;  /* žlutavý box poznámky operace */
  --row-alert: #fdf3f3;  /* jemné podbarvení řádku s přerušením (slabší než --tint-alert) */
  --hover: #f0f4f8;      /* hover klikacích řádků a odkazových řádků */
  --btn-2: #e3e8ed; --btn-2-h: #d3dae1; /* sekundární tlačítka, segmenty, neutrální badge */
  --thumb-bg: #eef1f4;   /* podklad náhledů výkresů/fotek a plátna anotací */
  --code-bg: #f6f8fa;    /* JSON/knihovní výpisy (historie) */
  --mark: #ffe9a8;       /* zvýraznění shody ve výsledcích hledání */
  /* Paleta odlišení zakázek na Plánovací tabuli (štítek u čísla, 2026-08-21) —
     8 sytých odstínů (Tableau 10 výběr) čitelných jako plný čtvereček ve
     světlém i tmavém režimu → bez dark přepisu. */
  --ord-0: #4e79a7; --ord-1: #f28e2b; --ord-2: #59a14f; --ord-3: #e15759;
  --ord-4: #b07aa1; --ord-5: #76b7b2; --ord-6: #edc948; --ord-7: #9c755f;
  /* Textové varianty téže palety (obarvené číslo zakázky) — na světlé kartě
     tmavší kvůli kontrastu; dark blok je přepisuje světlejšími. */
  --ordt-0: #38597f; --ordt-1: #c26a10; --ordt-2: #3f7a38; --ordt-3: #c13c3e;
  --ordt-4: #8c5b80; --ordt-5: #47827d; --ordt-6: #9a7d0a; --ordt-7: #7d5c49;
  /* Poloměry — škála; mimo ni jen pilulky (16/26px), kruhy (50%) a mikro (3–5px) */
  --r-s: 6px; --r-m: 8px; --r-l: 10px; --r-xl: 12px;
  /* Stíny: 1 = karta, 2 = plovoucí prvek (menu, panel, FAB), 3 = overlay (paleta) */
  --shadow-1: 0 1px 2px rgba(0, 0, 0, .04);
  --shadow-2: 0 6px 18px rgba(0, 0, 0, .18);
  --shadow-3: 0 12px 40px rgba(0, 0, 0, .25);
  /* Typo škála (menší velikosti; nadpisy a speciality zůstávají literální) */
  --fs-xs: 12px; --fs-s: 13px; --fs-m: 14px; --fs-base: 16px;
  /* Rytmus mezer (gap) — sdílená škála; padding/margin viz hlavička souboru */
  --sp-1: 4px; --sp-2: 6px; --sp-3: 8px; --sp-4: 10px; --sp-5: 12px; --sp-6: 16px;
}

/* ── Tmavý režim (appearance.js, backport K9) ─────────────────────────────────
   Per-prohlížeč volba v profilu; default zůstává světlý industriální theme.
   JEDINÝ dark blok = přepis tokenů (Dávka 5); komponentní pravidla dark
   variantu dostávají automaticky. Lišta (--nav-*) se nepřepisuje — je tmavá
   v obou tématech. Hover odstíny *-d se nepřepisují záměrně (fungují i na
   tmavých plochách). */
body.theme-dark {
  --bg: #10161d; --card: #1a222c; --ink: #e6edf3; --muted: #93a1b0;
  --line: #2a3644;
  --field-bg: #10161d;
  --accent: #3b82f6; --accent-d: #2563eb;
  --c-done: #4caf50; --c-alert: #ef5350; --c-overdue: #ff9800;
  --tint-done: #1d3320; --tint-alert: #3a1d1d; --tint-overdue: #3a2a15;
  --tint-info: #16283d;   --ink-info: #7fb3f0;
  --tint-accent: #16283d; --tint-accent-line: #2b5478;
  --tint-main: #24244a;   --ink-main: #b9b9f2;
  --tint-note: #2c2413;
  --row-alert: #2c2020;
  --hover: #212c39;
  --btn-2: #2a3644; --btn-2-h: #38465a;
  --thumb-bg: #232e3a;
  --code-bg: #141b23;
  --mark: #6d5713;
  /* Obarvené číslo zakázky (tabule) — světlejší varianty na tmavé kartě. */
  --ordt-0: #8db4de; --ordt-1: #f8a95c; --ordt-2: #86c77f; --ordt-3: #f08a8c;
  --ordt-4: #d2a9c9; --ordt-5: #93d0ca; --ordt-6: #e5c854; --ordt-7: #c79f87;
  --shadow-2: 0 6px 18px rgba(0, 0, 0, .55);
}

* { box-sizing: border-box; }
body { margin: 0; font-family: system-ui, "Segoe UI", Roboto, sans-serif;
  background: var(--bg); color: var(--ink); font-size: var(--fs-base); }

/* Lišta VŽDY v jednom řádku (5b): nowrap + kompaktní záložky; pod 900 px
   záložky pod brandem s vodorovným posuvem (tablet — primární zařízení dílny
   nechává všechny záložky na jeden dotyk); pod 640 px (telefon) mobilní
   navigace hamburger ☰ + spodní lišta (STANDARD §11, Dávka 6). Verze žije
   v patičce. */
#main-nav { display: flex; align-items: center; flex-wrap: nowrap; gap: var(--sp-3);
  background: var(--nav-bg); color: #fff; padding: 8px 16px; position: sticky;
  top: 0; z-index: 10; }
#main-nav .brand { font-weight: 700; letter-spacing: .3px; white-space: nowrap; }
#main-nav .spacer { flex: 1; }

/* Záložky pohledů v tmavé liště — velké dotykové cíle (min. 44 px, rukavice) */
#main-nav .tabs { display: flex; flex-wrap: nowrap; gap: var(--sp-1); overflow-x: auto; }
#main-nav .tab { background: none; color: var(--nav-ink); font-weight: 600;
  border-radius: var(--r-m); padding: 10px 12px; min-height: 44px; white-space: nowrap; }
#main-nav .tab:hover { background: var(--nav-hover); color: #fff; }
#main-nav .tab.active { background: var(--accent); color: #fff; }
#main-nav > button { min-height: 44px; flex: 0 0 auto; }
/* Ikonové záložky (🔍 Hledání, ⚙ Nastavení) — větší glyf, label nese title/aria */
.tab-icon { font-size: 18px; line-height: 1; padding: 10px; }

/* Jméno + (role) = tlačítko Profilu (5b — sdílené tablety: vidět kdo a co smí) */
.who-btn { background: none; display: flex; flex-direction: column; align-items: flex-end;
  justify-content: center; gap: 0; padding: 3px 10px; color: #fff; }
.who-btn:hover { background: var(--nav-hover); }
.who-name { font-weight: 600; font-size: var(--fs-m); line-height: 1.2; white-space: nowrap; }
.who-role { color: var(--nav-ink); font-size: var(--fs-xs); font-weight: 400; line-height: 1.2;
  white-space: nowrap; }

main { padding: 16px; max-width: 1200px; margin: 0 auto; }

/* Toolbar výpisů (filtry vlevo, akce vpravo) — sdílený skelet listShell */
.toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-4); margin-bottom: 12px; }
.toolbar-left { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-4); flex: 1; }
/* Jedna svislá osa pro hledání, pilulky i tlačítka (nález vlastníka 2026-08-10):
   globální input nese margin-top 4px a .seg-row modalový margin-bottom 12px —
   uvnitř centrovaného flexu by každý prvek seděl jinak vysoko. */
.toolbar input, .toolbar select { margin-top: 0; }
.toolbar .seg-row { margin-bottom: 0; }

/* Sticky hlavička přes VNITŘNÍ scroll tabulky (vzor referenční aplikace) — lepí se jen
   uvnitř kontejneru, nic na stránce nepřekrývá (kliky zůstávají funkční). */
.table-container { overflow-x: auto; }
.table-scroll { max-height: max(320px, calc(100vh - 260px));
  max-height: max(320px, calc(100dvh - 260px)); /* tablety: viditelná výška (viz .modal) */
  overflow-y: auto; }
.table-scroll > table > thead th { position: sticky; top: 0; z-index: 5; background: var(--card); }

/* Stránkování (obálka §6) */
.pager { display: flex; align-items: center; justify-content: center; gap: var(--sp-5); margin: 4px 0 16px; }
.pager:empty { margin: 0; }
.pager-info { color: var(--muted); font-size: var(--fs-m); }

.empty-state { text-align: center; color: var(--muted); padding: 22px 10px; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-l);
  padding: 18px; margin-bottom: 16px; box-shadow: var(--shadow-1); }
.login-card { max-width: 360px; margin: 8vh auto; }
/* Nápověda prvotního spuštění (login.js) — informační box nad formulářem */
.login-note { background: var(--tint-accent); border: 1px solid var(--tint-accent-line);
  border-radius: var(--r-m); padding: 10px 12px; font-size: var(--fs-m); }
h1, h2, h3, h4 { margin: 0 0 12px; }
.muted { color: var(--muted); font-size: var(--fs-m); }

/* Odkazy jednotně v barvě aplikace (sjednocení Přehledu 2026-08-10): bez
   pravidla platily barvy prohlížeče vč. fialové navštívené — accent drží
   i tmavý režim (proměnná se přepíná v body.theme-dark). */
a { color: var(--accent); }
a:hover { color: var(--accent-d); }

label { display: block; margin: 10px 0; font-size: var(--fs-m); color: var(--muted); }
input, select, textarea { display: block; width: 100%; margin-top: 4px; padding: 11px 12px;
  font-size: var(--fs-base); border: 1px solid var(--line); border-radius: var(--r-m);
  background: var(--field-bg); color: var(--ink); }
/* Hvězdička povinného pole u labelu (Nová zakázka, profily) */
.req { color: var(--c-alert); font-weight: 700; }

button { font-size: var(--fs-base); padding: 11px 18px; border: 0; border-radius: var(--r-m);
  background: var(--accent); color: #fff; cursor: pointer; font-weight: 600; min-height: 44px; }
button:hover { background: var(--accent-d); }
button.small { padding: 6px 12px; font-size: var(--fs-m); min-height: 0; }
button.secondary { background: var(--btn-2); color: var(--ink); }
button.secondary:hover { background: var(--btn-2-h); }
button.danger { background: var(--c-alert); }
button.danger:hover { background: var(--c-alert-d); }
button:disabled { opacity: .55; cursor: default; }
button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: 3px solid var(--accent); outline-offset: 1px; }
.btn-row { display: flex; flex-wrap: wrap; gap: var(--sp-4); margin-top: 12px; }

/* Řaditelné hlavičky tabulek (sort.js, §11) */
th.th-sort { cursor: pointer; user-select: none; white-space: nowrap; }
th.th-sort:hover { color: var(--accent); }
th.th-sort:focus-visible { outline: 3px solid var(--accent); outline-offset: -2px; }
/* Sloučené dvouřádkové sloupce (2026-08-24c — Dodavatel/Popis, Název/Popis,
   Zákazník/Popis, Exped./Založ.): dva řaditelné popisky nad sebou v jedné
   hlavičce; 2. řádek BUŇKY (.cell-sub) menším šedým písmem (vzor .muted). */
.th-dual { white-space: nowrap; }
/* Dvojice polí na jednom řádku hlavičky („Kusů · Zmetky", 2026-08-26) —
   blokový řádek jako th-sort-line, hover/focus ale per vnitřní popisek. */
.th-dual .th-sort-pair { display: block; }
.th-dual .th-sort-pair .th-sort { cursor: pointer; user-select: none; }
.th-dual .th-sort-pair .th-sort:hover { color: var(--accent); }
.th-dual .th-sort-pair .th-sort:focus-visible { outline: 3px solid var(--accent); outline-offset: -2px; }
.th-line { display: block; } /* neřaditelná dvouřádková hlavička (Archiv, detail) */
.th-dual .th-sort-line { display: block; cursor: pointer; user-select: none; }
.th-dual .th-sort-line:hover { color: var(--accent); }
.th-dual .th-sort-line:focus-visible { outline: 3px solid var(--accent); outline-offset: -2px; }
.cell-sub { color: var(--muted); font-size: var(--fs-s); }
/* C-L1 (2026-08-27): ořez dlouhých textů ve výpisech na N řádků — počet per
   entita volí ⚙ Zobrazení; --clamp-lines nastavuje pohled na kontejneru
   tabulky přes CSSOM (applyClampLines, plná CSP). Plný text nese title
   buňky (sdílený helper clampCellHtml v utils.js). */
.clamp { display: -webkit-box; -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--clamp-lines, 2); line-clamp: var(--clamp-lines, 2);
  overflow: hidden; overflow-wrap: anywhere; }
/* Cena ve výpisech drží jeden řádek (bod 6 vlastníka 2026-08-24e) — kusy
   „(n ks)" jsou pak vždy 2. řádek, buňka nikdy nemá tři řádky. */
.u-nowrap { white-space: nowrap; }

/* Odkaz vypadající jako tlačítko (stahování souborů — export GDPR apod.) */
a.button-link { display: inline-block; padding: 6px 12px; border-radius: var(--r-m);
  background: var(--accent); color: #fff; font-size: var(--fs-m); font-weight: 600;
  text-decoration: none; }
a.button-link:hover { background: var(--accent-d); }

/* Veřejné stránky /gdpr a /ai (§9, AI Act čl. 50) — stejná grafika jako
   Nápověda (vzor .manual-*, pokyn vlastníka 2026-08-23): kapitoly = karty
   s akcentovaným nadpisem, zvýrazněné boxy Tip/Pozor/Info, vzdušnější
   typografie. Jen tokeny (tmavý režim zdarma), žádné inline styly (CSP). */
.gdpr-page { max-width: 860px; margin: 24px auto; padding: 0 16px;
  line-height: 1.65; }
.gdpr-page > h1 { margin: 8px 0 4px; }
.gdpr-page p { margin: 10px 0; }
.gdpr-page li { margin: 4px 0; }
.gdpr-page section { background: var(--card); border: 1px solid var(--line);
  border-radius: var(--r-s); box-shadow: var(--shadow-1);
  padding: 4px 18px 14px; margin: 16px 0; }
.gdpr-page section > h2 { margin-top: 12px; padding-bottom: 8px;
  border-bottom: 2px solid var(--accent); }
.gdpr-page dl dt { font-weight: 600; margin-top: 8px; }
.gdpr-page dl dd { margin: 0 0 4px; color: var(--muted); }
/* Zvýrazněné boxy (vzor Tip/Pozor Nápovědy): výchozí = info (akcent),
   note-tip = zelená (co si můžete udělat sami), note-warn = červená
   (mantinely „nikdy" / vypnuté funkce). Uvnitř karty podklad --bg. */
.page-note { margin: 10px 0; padding: 6px 12px; border-radius: 4px;
  border-left: 4px solid var(--accent); background: var(--bg); }
.page-note.note-tip { border-left-color: var(--c-done); }
.page-note.note-warn { border-left-color: var(--c-alert);
  background: var(--row-alert); }
.page-note > ul { margin: 6px 0; }
.page-note > p { margin: 4px 0; }

/* Akce vypadající jako odkaz — <button>, ne <a href="#"> (bez JS by skákal na začátek stránky) */
.btn-link { display: inline; background: none; border: 0; padding: 0; min-height: 0;
  color: var(--accent); text-decoration: underline; font-size: inherit; font-weight: 400; cursor: pointer; }
.btn-link:hover { background: none; color: var(--accent-d); }

.inline-form { display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: end; margin-bottom: 14px; }
/* label má globálně margin 10px 0 — uvnitř řádkového formuláře by spodní margin
   posunul input 10px nad zarovnávací linku (align-items: end) a tlačítka/výběrník
   pak seděly níž (nález vlastníka 2026-08-09, karta Reporty). Mezery řeší gap. */
.inline-form label { margin: 0; }
.inline-form input, .inline-form select { width: auto; flex: 1 1 140px; margin-top: 0; }
.inline-form button { flex: 0 0 auto; }
/* Label s vnořeným polem uvnitř .inline-form (⚙ Pošta — výchozí typ hlášení,
   retence): kompaktní popisek nad polem, pole těsně pod ním. */
.inline-label { font-size: var(--fs-s); }
.inline-label input, .inline-label select { margin-top: 2px; }

table { width: 100%; border-collapse: collapse; margin-top: 8px; }
th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line); font-size: var(--fs-m); }
th { color: var(--muted); font-weight: 600; }

/* Sdílené vzory tabulek (Dávka 5 — sjednocení dřívějších kopií):
   klikací řádek (Karty/Zakázky/… i Koš) + rozbalený pod-řádek s panelem
   (poznámky, fotky, zakázky OBJ, detail koše, detail historie). */
.row-click, .trash-row { cursor: pointer; }
.row-click:hover td, .trash-row:hover td { background: var(--hover); }
.notes-row td, .attachments-row td, .sov-sub td, .trash-detail td, .history-detail td {
  background: var(--bg); }

.role-block { padding: 12px 0; border-bottom: 1px solid var(--line); }
.chk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--sp-2); margin: 10px 0; }
/* Skupina checkboxů s legendou (⚙ Měny, 2026-08-24) — fieldset bez rámečku,
   položky vedle sebe (jsou krátké: kódy měn). */
.chk-group { border: 0; padding: 0; margin: 10px 0; display: flex; gap: var(--sp-4); flex-wrap: wrap; }
.chk-group legend { padding: 0; margin-bottom: 6px; font-size: var(--fs-m); color: var(--ink); }
.chk { display: flex; align-items: center; gap: var(--sp-3); margin: 0; color: var(--ink); font-size: var(--fs-m); }
.chk input { width: auto; margin: 0; flex: 0 0 auto; }
  /* flex reset: uvnitř .inline-form by checkbox zdědil flex:1 1 140px
     (pravidlo pro textová pole) a roztáhl se — jména v pickeru Operátoři
     pak nebyla pod sebou (nález vlastníka 2026-07-23b). */

/* Plovoucí tlačítko Nahlásit (bug/vylepšení) */
#feedback-fab { position: fixed; right: 18px; bottom: 18px; z-index: 50;
  background: var(--c-overdue); box-shadow: var(--shadow-2); border-radius: 26px; }
#feedback-fab:hover { background: var(--c-overdue-d); }

/* Modal */
.modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, .45);
  display: flex; align-items: center; justify-content: center; z-index: 100; padding: 16px; }
.modal { --modal-pad: 20px; /* jediný zdroj odsazení — bleed sticky patičky i kompakt z něj počítají */
  background: var(--card); border-radius: var(--r-xl); padding: var(--modal-pad); width: 100%; max-width: 440px;
  /* Vyšší obsah nesmí přerůst okno — tlačítka musí zůstat klikatelná bez
     zmenšování měřítka (nález vlastníka 2026-07-24: „Datové toky AI").
     dvh = skutečně viditelná výška na tabletech s dynamickou lištou
     prohlížeče (100vh tam je víc než okno); starší prohlížeč řádek ignoruje. */
  max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); overflow-y: auto; }
/* Sticky patička modalu (BLOK A 2026-08-06 — hlášení zákazníka „tlačítka nejsou
   vidět, nejde to odkliknout"): POSLEDNÍ akční řádek se lepí ke spodní hraně
   scrollportu, takže je klikatelný i když se obsah do okna nevejde. Bleed přes
   padding modalu negativním marginem z --modal-pad; neprůhledný podklad
   var(--card) kryje protékající obsah v obou tématech. Chytá jen terminální
   řádek (:last-child) — mezilehlé .btn-row a sekční akce (opt-out
   .btn-row-inline v Profilu/Uživatelích) se nelepí. */
/* Modal se sticky patičkou nemá vlastní spodní padding — spodní odsazení nese
   patička sama. Bez toho by se řádek lepil o padding VÝŠ, než je hrana modalu
   (sticky scrollport vs. padding scroll kontejneru), a pod ním by prosvítal
   rolovaný obsah. Starší prohlížeč bez :has() nechá padding být — řádek se
   přilepí o --modal-pad výš (kosmetika, klikatelnost drží). */
.modal:has(> .btn-row:last-child:not(.btn-row-inline)),
.modal:has(> form:last-child > .btn-row:last-child),
.modal:has(> .fb-bottom:last-child) { padding-bottom: 0; }
.modal > .btn-row:last-child:not(.btn-row-inline),
.modal > form:last-child > .btn-row:last-child,
.modal > .fb-bottom:last-child {
  position: sticky; bottom: 0; z-index: 1;
  margin: 12px calc(-1 * var(--modal-pad)) 0;
  padding: 10px var(--modal-pad) var(--modal-pad);
  background: var(--card);
}
/* Informační modal Datové toky AI má dva sloupce — potřebuje víc šířky. */
.modal-flow { max-width: 720px; }

/* Anotační editor hlášení (F7c, vzor referenční aplikace): nástroje ve svislém sloupci
   vlevo, plátno zabírá zbytek šířky (větší snímek) + lupa; na mobilu se
   sloupec překlopí na řádek. */
.fb-modal { max-width: min(1040px, 100%); }
/* Vložení snímku ze schránky (2026-08-26) — řádek tlačítka + hintu nad editorem. */
.fb-paste-row { display: flex; gap: var(--sp-3); align-items: center; flex-wrap: wrap;
  margin-bottom: 8px; }

.fb-work { display: flex; gap: var(--sp-5); align-items: flex-start; margin-bottom: 10px; }
.fb-toolbar { display: flex; flex-direction: column; gap: var(--sp-2); flex: 0 0 150px; }
.fb-tools { display: flex; flex-direction: column; gap: var(--sp-1); }
.fb-toolbar .fb-tool { width: 100%; text-align: left; }
.fb-tool.active { background: var(--accent-d); }
.fb-colors { display: flex; flex-wrap: wrap; gap: 5px; }
.fb-color { width: 26px; height: 26px; min-height: 0; padding: 0; border-radius: 50%;
  border: 2px solid var(--card); box-shadow: 0 0 0 1px var(--line); cursor: pointer; }
.fb-color.active { outline: 2px solid var(--ink); outline-offset: 1px; }
.fb-toolbar .fb-width { width: 100%; margin: 0; padding: 6px 8px; }
.fb-zoom { display: flex; align-items: center; gap: var(--sp-1); flex-wrap: wrap; }
.fb-zoom #fb-zoom-lbl { min-width: 42px; text-align: center; font-size: var(--fs-xs);
  color: var(--muted); }
.fb-zoom-hint { font-size: 11px; }
.fb-canvas-wrap { flex: 1; min-width: 0; max-height: 66vh; max-height: 66dvh; overflow: auto;
  border: 1px solid var(--line); border-radius: var(--r-s); background: var(--thumb-bg); }
#fb-canvas { display: block; cursor: crosshair; touch-action: none; }
.fb-bottom { display: flex; align-items: flex-end; gap: var(--sp-6); flex-wrap: wrap; margin-top: 12px; }
.fb-bottom .fb-type-group { margin: 0; min-width: 200px; }
.fb-actions { margin-left: auto; display: flex; gap: var(--sp-3); }
.fb-text-modal { max-width: 320px; } /* vnořený dialog pro text anotace */

/* Jednorázové heslo + akce v řádku tabulky */
/* Akce řádku v JEDNOM řádku (audit 2026-07-23 — 🗒 s počtem lámal buňku
   na dva řádky), zarovnání doprava. POZOR: žádný display:flex na <td> —
   vyjmul by buňku z tabulkové mřížky (nižší než řádek, pruh pozadí i linka
   se rozjely; nález vlastníka 2026-07-23b) — děti jsou inline-flex. */
.row-actions { text-align: right; white-space: nowrap; }
.row-actions > * { display: inline-flex; align-items: center; vertical-align: middle;
  margin-left: 6px; }
.row-actions > :first-child { margin-left: 0; }
.pw-box { display: flex; align-items: center; gap: var(--sp-4); background: var(--bg);
  border: 1px solid var(--line); padding: 10px 12px; border-radius: var(--r-m); margin: 8px 0; }
#pw-val { font-size: 18px; font-weight: 700; letter-spacing: 1px; }

/* Toast */
.toast { position: fixed; left: 50%; bottom: 24px; transform: translate(-50%, 20px);
  background: var(--nav-hover); color: #fff; padding: 12px 18px; border-radius: var(--r-m);
  opacity: 0; transition: all .25s; z-index: 200; max-width: 90vw; }
.toast.show { opacity: 1; transform: translate(-50%, 0); }
.toast-success { background: var(--c-done); }
.toast-error { background: var(--c-alert); }

/* Stavové odznaky (SPEC §11): zelená=hotovo, červená=přerušení/blokace, oranžová=po termínu */
.badge { display: inline-block; padding: 3px 10px; border-radius: var(--r-xl); font-size: var(--fs-s);
  font-weight: 600; background: var(--btn-2); color: var(--ink); white-space: nowrap; }
.badge-done { background: var(--tint-done); color: var(--c-done); }
.badge-alert { background: var(--tint-alert); color: var(--c-alert); }
.badge-overdue { background: var(--tint-overdue); color: var(--c-overdue); }
.badge-info { background: var(--tint-info); color: var(--ink-info); }
.badge-main { background: var(--tint-main); color: var(--ink-main); } /* „🔒 jen hlavní admin" (vzor referenční aplikace) */
/* Podíl na ceně OBJ (0040; barevně dle pokynu vlastníka 27h — fialová řada
   se stavovými badge nekoliduje: info=modrá, done=zelená, overdue=oranž). */
.badge-share { background: var(--tint-main); color: var(--ink-main); }

/* Moje úkoly — operátorské karty (SPEC §11: velké dotykové cíle, rukavice) */
.tasks-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 14px; }
.task-card { display: flex; flex-wrap: wrap; gap: var(--sp-5); background: var(--card);
  border: 1px solid var(--line); border-left: 6px solid var(--line); border-radius: var(--r-l);
  padding: 14px; box-shadow: var(--shadow-1);
  cursor: pointer; } /* klik na kartu → detail karty výrobku (2026-07-20) */
.task-card.assigned { border-left-color: var(--accent-d); } /* Přiděleno vám */
.task-card.running { border-left-color: var(--accent); }
.tasks-section-title { margin: 18px 0 10px; font-size: 17px; }
.tasks-section-title:first-child { margin-top: 0; }
/* Supervizorský výběrník „Úkoly uživatele" + banner cizího pohledu ([263]+[4]) */
.tasks-toolbar { display: flex; flex-wrap: wrap; gap: var(--sp-5); align-items: center; margin-bottom: 12px; }
/* Label + select na jedné ose s banerem (vzor .chk) — globální label je
   display:block s marginem, tady by text stál nad selectem a rozhodil výšku
   řádku (nález vlastníka 2026-08-05, C1). */
.tasks-toolbar label { display: flex; align-items: center; gap: var(--sp-3); margin: 0; white-space: nowrap; }
.tasks-toolbar select { width: auto; margin-top: 0; }
#tasks-view-banner { border-left: 4px solid var(--c-overdue); padding: 6px 10px;
  background: var(--tint-overdue); color: var(--c-overdue); border-radius: var(--r-s); }
.task-timer { font-variant-numeric: tabular-nums; } /* tikající čas neposkakuje */
.btn-break { background: var(--c-neutral); } /* PAUZA — neutrální (není to problém) */
.btn-break:hover { background: var(--c-neutral-d); }
/* Povinná poznámka u důvodu přerušení (2026-07-20): červený label + rámeček */
.note-required { color: var(--c-alert); font-weight: 600; }
.note-required textarea { border-color: var(--c-alert); }
.task-thumb { width: 92px; height: 92px; object-fit: contain; background: var(--thumb-bg);
  border: 1px solid var(--line); border-radius: var(--r-m); flex: 0 0 auto; }
.task-info { flex: 1 1 160px; min-width: 0; }
.task-title { font-size: 19px; font-weight: 700; margin-bottom: 2px; }
.task-sub { color: var(--muted); font-size: var(--fs-m); overflow: hidden; text-overflow: ellipsis; }
.task-badges { margin-top: 6px; display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.task-actions { flex-basis: 100%; display: flex; align-items: center; gap: var(--sp-4); flex-wrap: wrap; }
.task-actions button { flex: 1 1 130px; min-height: 56px; font-size: 18px; letter-spacing: .5px; }
.btn-start { background: var(--c-done); }
.btn-start:hover { background: var(--c-done-d); }
.btn-stop { background: var(--accent); }
.btn-pause { background: var(--c-overdue); }
.btn-pause:hover { background: var(--c-overdue-d); }

/* ── Plánovací tabule (Dávka 10; od 2026-08-20 řady per operátor): koš
   Nepřiřazeno vlevo (svislý seznam) + vodorovné řady operátorů pod sebou.
   Svislý scroll řad škáluje na desítky operátorů — sloupcová varianta byla
   při ~20 lidech jeden velký vodorovný posuvník. Drag&drop: plan-dnd.js
   (osa dle kontejneru — řada = X, koš = Y). ── */
.plan-toolbar { margin-bottom: 12px; display: flex; align-items: center; gap: var(--sp-4);
  flex-wrap: wrap; }
.plan-toolbar .search-wrap { flex: 1 1 280px; max-width: 440px; }
.plan-check { display: flex; align-items: center; gap: var(--sp-2); margin: 0; cursor: pointer; }
.plan-check input { width: auto; margin: 0; }
.plan-toolbar select { width: auto; }
.plan-hint { flex-basis: 100%; font-size: var(--fs-s); }
.plan-board { display: flex; gap: var(--sp-5); align-items: flex-start; }
.plan-col { flex: 0 0 272px; min-width: 0; display: flex; flex-direction: column;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-l);
  box-shadow: var(--shadow-1); max-height: calc(100vh - 230px); }
.plan-col-head { display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-3); padding: 10px 12px; border-bottom: 1px solid var(--line); font-weight: 600; }
.plan-col-meta { font-size: var(--fs-s); color: var(--muted); white-space: nowrap; font-weight: 400; }
.plan-col-items { display: flex; flex-direction: column; gap: var(--sp-3); padding: 10px;
  overflow-y: auto; min-height: 64px; }
.plan-col-unassigned { background: var(--bg); }
.plan-lanes { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column;
  gap: var(--sp-4); max-height: calc(100vh - 230px); overflow-y: auto; padding-bottom: 8px; }
.plan-lane { background: var(--card); border: 1px solid var(--line); border-radius: var(--r-l);
  box-shadow: var(--shadow-1); }
.plan-lane-head { display: flex; align-items: center; gap: var(--sp-3); padding: 8px 12px;
  font-weight: 600; cursor: pointer; user-select: none; }
.plan-lane-chevron { color: var(--muted); font-size: var(--fs-s); flex: 0 0 14px; }
.plan-lane-count { color: var(--muted); font-weight: 400; font-size: var(--fs-s);
  white-space: nowrap; }
.plan-lane-head .plan-col-meta { margin-left: auto; }
.plan-lane-items { display: flex; gap: var(--sp-3); padding: 8px 10px; overflow-x: auto;
  border-top: 1px solid var(--line); min-height: 56px; align-items: stretch; }
/* min-width: 0 ruší automatické minimum flex položky — bez něj by nezalomitelný
   podřádek karty (nowrap) roztáhl kartu nad flex-basis (a přes karty i koš). */
.plan-lane-items .plan-card { flex: 0 0 208px; min-width: 0; }
.plan-lane-items .plan-empty { flex: 1 1 auto; display: flex; align-items: center;
  justify-content: center; padding: 8px; }
/* Sbalená řada: jen hlavička; během tažení se řady dočasně rozbalí, aby šlo
   pustit kartu i do sbaleného/prázdného operátora. */
.plan-lane.collapsed .plan-lane-items { display: none; }
.plan-board.plan-dragging .plan-lane .plan-lane-items { display: flex; }
.plan-card { position: relative; display: flex; align-items: flex-start; gap: var(--sp-3);
  background: var(--card);
  border: 1px solid var(--line); border-left: 5px solid var(--line); border-radius: var(--r-m);
  padding: 8px; box-shadow: var(--shadow-1); cursor: grab; user-select: none;
  touch-action: manipulation; }
.plan-card.paused { border-left-color: var(--c-alert); }
/* Běžící karta výrazně (vlastník 2026-08-21): modrý okraj + podbarvení. */
.plan-card.running { border-left-color: var(--accent); background: var(--tint-info); }
.plan-meta-warn { color: var(--c-overdue); font-weight: 600; } /* fronta ≥ práh */
.plan-ord { display: inline-block; width: 10px; height: 10px; border-radius: 3px;
  margin-right: 5px; flex: 0 0 auto; }
.plan-ord-0 { background: var(--ord-0); } .plan-ord-1 { background: var(--ord-1); }
.plan-ord-2 { background: var(--ord-2); } .plan-ord-3 { background: var(--ord-3); }
.plan-ord-4 { background: var(--ord-4); } .plan-ord-5 { background: var(--ord-5); }
.plan-ord-6 { background: var(--ord-6); } .plan-ord-7 { background: var(--ord-7); }
.plan-ordt { font-weight: 600; }
.plan-ordt-0 { color: var(--ordt-0); } .plan-ordt-1 { color: var(--ordt-1); }
.plan-ordt-2 { color: var(--ordt-2); } .plan-ordt-3 { color: var(--ordt-3); }
.plan-ordt-4 { color: var(--ordt-4); } .plan-ordt-5 { color: var(--ordt-5); }
.plan-ordt-6 { color: var(--ordt-6); } .plan-ordt-7 { color: var(--ordt-7); }
.plan-lane-more { display: none; color: var(--muted); font-size: var(--fs-s); }
.plan-lane-overflow .plan-lane-more { display: inline; }
.plan-card-main { flex: 1 1 auto; min-width: 0; }
.plan-card-title { font-weight: 600; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; }
.plan-card-sub { font-size: var(--fs-s); color: var(--muted); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
/* ⚙ Reporty → Hromadné reporty (2026-08-22b): pod-volby odsazené; bez
   „jednotlivých záznamů" zšedlé (disabled na checkboxech drží JS). */
.rep-bulk-sub { display: flex; flex-direction: column; gap: 2px; margin: 2px 0 4px 22px; }
.rep-bulk-sub.is-off { opacity: .55; }

/* Kompaktní badge (pokyn vlastníka 2026-08-22 — stav · podíl · čas v JEDNOM
   řádku): menší padding + ⋮ v rohu karty (absolute) uvolňují celou šířku. */
.plan-card-badges { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 6px; }
.plan-card-badges:empty { display: none; }
.plan-card .badge { padding: 2px 6px; }
/* Ovládací tlačítka karty (vlastník 2026-08-22): symboly ▶ ✖ ⏸ ✔ — barvy
   dědí z akčních tříd Mých úkolů (btn-start/pause/break/stop). */
.plan-card-actions { display: flex; gap: var(--sp-2); margin-top: 6px; }
.plan-card-actions .plan-act { flex: 1 1 0; min-width: 0; min-height: 32px;
  padding: 2px 6px; font-size: 16px; line-height: 1; }
/* ⋮ v rohu (absolute, 2026-08-22): flex sourozenec ubíral kartě ~35 px šířky
   a badge řádek se lámal; titulek si drží odstup přes padding-right. */
.plan-card-menu { position: absolute; top: 6px; right: 6px; padding: 2px 9px; min-height: 30px; }
.plan-card-title { padding-right: 32px; }
.plan-ghost { position: fixed; left: 0; top: 0; z-index: 100; pointer-events: none;
  opacity: .92; box-shadow: var(--shadow-2); cursor: grabbing; }
.plan-drag-src { opacity: .35; }
.plan-placeholder { border: 2px dashed var(--accent); border-radius: var(--r-m);
  background: var(--tint-accent); flex-shrink: 0; }
.plan-empty { border: 2px dashed var(--line); border-radius: var(--r-m); padding: 14px;
  color: var(--muted); text-align: center; font-size: var(--fs-s); }
.plan-menu-row { display: flex; gap: var(--sp-3); margin-bottom: 8px; flex-wrap: wrap; }
.plan-menu-sub { margin: -4px 0 10px; }

/* Výběr důvodu přerušení (§3.4b) — velké radio řádky */
.pause-options { display: flex; flex-direction: column; gap: var(--sp-3); margin: 8px 0; }
.pause-option { display: flex; align-items: center; gap: var(--sp-4); margin: 0; padding: 12px;
  border: 1px solid var(--line); border-radius: var(--r-m); font-size: var(--fs-base); color: var(--ink); cursor: pointer; }
.pause-option:has(input:checked) { border-color: var(--accent); background: var(--tint-accent); }
.pause-option input { width: auto; margin: 0; }

/* Přehled (dashboard) — jednotná grafika sekcí (pokyn vlastníka 2026-08-10):
   víc sekcí v jedné kartě odděluje linka, seznamy mají vzduch a tlumené
   odrážky, „Otevřít … →" je decentní akce vedle nadpisu (ne tučný odkaz). */
#dash-wrap .card > h3:not(:first-child) { margin-top: 18px; padding-top: 14px;
  border-top: 1px solid var(--line); }
.dash-list { margin: 0 0 4px; padding-left: 22px; }
.dash-list li { margin: 6px 0; line-height: 1.55; }
.dash-list li::marker { color: var(--muted); }
#dash-wrap h3 a.small { font-size: var(--fs-m); font-weight: 600; margin-left: 6px;
  white-space: nowrap; text-decoration: none; }
#dash-wrap h3 a.small:hover { text-decoration: underline; }

/* Zakázky — filtry/řádky/donut (dávka 2026-07-20) */
.seg-danger.active { background: var(--c-alert); } /* pilulka Přerušené — červená */
.row-paused td { background: var(--row-alert); } /* jemné podbarvení zakázky s přerušením */
/* vertical-align: inline-flex box se jinak zarovnává spodkem na účaří a 20px
   SVG vysadí graf i „%" nad řádek (hlášení 307/309 — Přehled i sloupec Hotovo). */
.donut-wrap { display: inline-flex; align-items: center; gap: var(--sp-2); white-space: nowrap;
  vertical-align: middle; }
.donut-bg { stroke: var(--line); }
.donut-fg { stroke: var(--c-done); }
.card-alert { border-left: 4px solid var(--c-alert); } /* karta Přerušení v detailu */

/* Karty výrobků — výpis + detail (klikací řádky viz sdílené vzory tabulek) */
/* 36 px (dřív 44) — výška řádku Karet srovnaná s Objednávkami (bod 5,
   vlastník 2026-08-24c): náhled už neurčuje výšku dvouřádkového řádku. */
.row-thumb { width: 36px; height: 36px; object-fit: contain; background: var(--thumb-bg);
  border: 1px solid var(--line); border-radius: var(--r-s); display: block; }
.pd-title { margin: 0; font-size: 22px; }
/* Pager stran vícestránkového výkresu (Dávka 8, §7) — dotyková tlačítka ≥40 px */
.pd-page-nav { display: flex; align-items: center; justify-content: center;
  gap: var(--sp-2); margin-top: var(--sp-2); flex-wrap: wrap; }
.pd-page-nav .small { min-width: 40px; min-height: 40px; }
/* Výběr výkresů z vícevýkresového PDF v modalu Nová karta */
.np-drawing { display: flex; align-items: center; gap: var(--sp-2);
  padding: var(--sp-1) 0; flex-wrap: wrap; }
.np-drawing input[type="checkbox"] { width: auto; }
/* Náhled výkresu větší (rozhodnutí vlastníka 2026-07-17) — výkres je hlavní
   obsah detailu; responsivní breakpoint (media 640) skládá sloupce pod sebe. */
.pd-grid { display: grid; grid-template-columns: minmax(340px, 640px) 1fr; gap: var(--sp-6); }
/* Karta s náhledem: hint „bez výkresu" na střed (výkres sám je block 100 %) */
.pd-thumb-card { text-align: center; }
.pd-thumb { width: 100%; max-height: 640px; object-fit: contain; background: var(--thumb-bg);
  border: 1px solid var(--line); border-radius: var(--r-m); }
/* Zmetky v podřádku Kusů (2026-08-26) — červeně, jen když > 0. */
.cell-scrap { color: var(--c-alert); }

/* ── Přehled (grafický návrh schválen vlastníkem 2026-08-27) ─────────────────
   Klikací dlaždice s počty nahoře + sekce-karty ve 2 sloupcích s barevným
   proužkem dle sémantiky stavů; prázdná sekce = jeden tichý řádek. Čistá
   prezentace stávajícího payloadu — žádná nová logika. */
.dash-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: var(--sp-4); margin-bottom: 12px; }
.dash-tile { background: var(--card); color: var(--ink); border: 1px solid var(--line);
  border-left: 4px solid var(--line); border-radius: var(--r-l); box-shadow: var(--shadow-1);
  padding: 8px 14px; display: flex; flex-direction: column; gap: 2px;
  align-items: flex-start; text-align: left; min-height: 0; }
.dash-tile:hover { background: var(--hover); }
.dash-tile b { font-size: 24px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.dash-tile span { color: var(--muted); font-size: var(--fs-s); }
.dash-tile.dash-alert { border-left-color: var(--c-alert); }
.dash-tile.dash-alert b { color: var(--c-alert); }
.dash-tile.dash-over { border-left-color: var(--c-overdue); }
.dash-tile.dash-over b { color: var(--c-overdue); }
.dash-tile.dash-info { border-left-color: var(--accent); }
.dash-tile.dash-info b { color: var(--accent); }
.dash-tile.dash-ok { border-left-color: var(--c-done); }
.dash-tile.dash-ok b { color: var(--c-done); }
.dash-tile.dash-idle { border-left-color: var(--c-neutral); }
.dash-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-4);
  align-items: start; }
.dash-grid > #dash-sec-paused { grid-column: 1 / -1; } /* tabulka přes šířku */
.dash-sec { padding: 0; overflow: hidden; }
.dash-sec > header { padding: 8px 14px; border-bottom: 1px solid var(--line);
  background: var(--code-bg); }
.dash-sec > header h3 { margin: 0; font-size: 16px; }
.dash-sec-body { padding: 8px 14px 10px; }
.dash-sec-body .dash-list { margin: 0; }
.dash-sec.dash-alert > header { box-shadow: inset 4px 0 0 var(--c-alert); }
.dash-sec.dash-over > header { box-shadow: inset 4px 0 0 var(--c-overdue); }
.dash-sec.dash-info > header { box-shadow: inset 4px 0 0 var(--accent); }
.dash-sec.dash-ok > header { box-shadow: inset 4px 0 0 var(--c-done); }
.dash-sec.dash-idle > header { box-shadow: inset 4px 0 0 var(--c-neutral); }
.dash-sec-empty { color: var(--muted); padding: 8px 14px; font-size: var(--fs-m); }
@media (max-width: 900px) { .dash-grid { grid-template-columns: 1fr; } }

/* Modal „Výdaje" zakázky (2026-08-25/26) — řádky položek + sekce Režie. */
.oxm-row { display: flex; align-items: center; gap: var(--sp-4); padding: 6px 0;
  border-bottom: 1px solid var(--line); }
.oxm-row .oxm-label { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.oxm-overhead { border-top: 1px solid var(--line); padding-top: 10px; }
.oxm-overhead h4 { margin: 0 0 4px; }

/* Modal „Rozdělit cenu" OBJ (0040, 2026-08-27h) — dvousloupec % + částka. */
.so-share-row { align-items: center; }
.so-share-row label { display: flex; align-items: center; gap: var(--sp-3); margin: 0; }
.so-share-row input { width: 110px; }
.so-share-order { min-width: 110px; font-weight: 600; }

/* Výlučný pár filtrů pod sebou (27h — „Bez zakázky" pod „Se zakázkou"). */
.pt-flt-pair { display: flex; flex-direction: column; gap: 2px; }

/* Filtry ⚙ Partnerů (2026-08-27e) — řádek zaškrtávátek nad tabulkou. */
.pt-filter-row { display: flex; gap: var(--sp-5); align-items: center;
  flex-wrap: wrap; margin: 2px 0 8px; }

/* Modal „Souhrn zakázky" (2026-08-26, grafický návrh schválen): skupiny jako
   sekce-karty s uppercase nadpisem; dvousloupcová mřížka se na mobilu skládá. */
.os-grp { border: 1px solid var(--line); border-radius: var(--r-m); overflow: hidden; }
.os-grp > h4 { margin: 0; padding: 6px 14px; font-size: var(--fs-s); letter-spacing: .02em;
  text-transform: uppercase; color: var(--muted); background: var(--code-bg);
  border-bottom: 1px solid var(--line); }
.os-grp-body { padding: 10px 14px; }
.os-two { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 28px; }
@media (max-width: 640px) { .os-two { grid-template-columns: 1fr; } }

.pd-info { display: grid; grid-template-columns: auto 1fr; gap: 6px 18px; margin: 0; }
.pd-info dt { color: var(--muted); font-size: var(--fs-m); }
.pd-info dd { margin: 0; font-weight: 600; }

/* Šablona operací */
.template-list { margin: 0 0 12px; padding-left: 22px; }
.template-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3);
  padding: 8px 0; border-bottom: 1px solid var(--line); }
.template-name { flex: 1 1 220px; display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: center; }
.deps-box { border: 1px solid var(--line); border-radius: var(--r-m); padding: 8px 12px; margin: 10px 0; }
.deps-box legend { color: var(--muted); font-size: var(--fs-m); padding: 0 6px; }

/* Fotogalerie karty */
.photo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: var(--sp-5); margin-bottom: 12px; }
.photo-item { margin: 0; }
.photo-item img { width: 100%; height: 130px; object-fit: cover; border-radius: var(--r-m);
  border: 1px solid var(--line); display: block; }
.photo-item figcaption { font-size: var(--fs-s); color: var(--muted); margin-top: 4px;
  display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; }
.photo-preview { max-width: 100%; max-height: 240px; object-fit: contain; display: block;
  margin: 0 auto 10px; border: 1px solid var(--line); border-radius: var(--r-m); }
.upload-label input { margin-top: 6px; }
/* PDF dlaždice přílohy (Dávka 11): náhled 1. strany, bez náhledu ikona 📄;
   jméno souboru pod náhledem se zkracuje výpustkou. */
.att-pdf { display: block; text-decoration: none; color: inherit; position: relative; }
.att-pdf .att-pdf-ico { display: block; font-size: 48px; text-align: center; height: 130px;
  line-height: 130px; border: 1px solid var(--line); border-radius: var(--r-m);
  background: var(--code-bg); }
.att-pdf .att-pdf-name { display: block; font-size: var(--fs-xs); color: var(--muted);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
/* Odkaz vypadající jako malé sekundární tlačítko (⬇ stažení PDF přílohy) —
   button.* selektory na <a> nechytí. */
a.btn-like { display: inline-block; padding: 4px 10px; border: 1px solid var(--line);
  border-radius: var(--r-m); background: var(--btn-2); color: var(--ink);
  text-decoration: none; font-size: var(--fs-s); }
a.btn-like:hover { background: var(--btn-2-h); }

/* Přepínač režimu v modalu (segmenty) + širší modal + 2sloupcová pole */
/* flex-wrap: na telefonu se segmenty zalomí — jinak řádek roztáhne stránku
   do vodorovného přeteku (chytá e2e test_responsive) */
.seg-row { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-bottom: 12px; }
.seg { background: var(--btn-2); color: var(--ink); font-weight: 600; }
/* Pilulky filtrů ve DVOU řadách + menší (vlastník 2026-08-24e — Zakázky
   3 sloupce, Objednávky 2; „+ Nová zakázka" vpravo drží plnou velikost).
   Na mobilu se vrací jednořádkové rolování (media + force-mobile zrcadlo). */
.seg-2r { display: inline-grid; grid-auto-flow: row; }
.seg-2r-c3 { grid-template-columns: repeat(3, auto); }
.seg-2r-c2 { grid-template-columns: repeat(2, auto); }
.seg-2r .seg { padding: 5px 12px; min-height: 0; font-size: var(--fs-s); }
.seg.active { background: var(--accent); color: #fff; }
.modal-wide { max-width: 560px; }
/* Modal „Operace" z výpisu Zakázek (25b): širší, ať se tabulka Časů vejde
   bez posuvníku, a datum s časem drží jeden řádek. */
.modal-ops { max-width: 880px; } /* 760 → 880 (pokyn vlastníka 2026-08-27) */
.modal-ops .op-logs td { white-space: nowrap; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 12px; }

/* Detail zakázky — operace */
.op-row { padding: 10px 0; border-bottom: 1px solid var(--line); display: flex;
  flex-direction: column; gap: var(--sp-2); }
.op-main { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3); font-size: var(--fs-base); }
.op-note { background: var(--tint-note); border-left: 4px solid var(--c-overdue); padding: 6px 10px;
  border-radius: 4px; font-size: var(--fs-m); }
.op-assign { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); font-size: var(--fs-m); }
.op-logs table { margin-top: 4px; }
.chip-x { background: none; border: 0; color: inherit; padding: 0 0 0 4px; min-height: 0;
  font-size: var(--fs-s); cursor: pointer; font-weight: 700; }
.chip-x:hover { background: none; color: var(--c-alert); }

/* × na smazání dotazu v Hledání (2026-07-21) — Firefox nativní křížek nekreslí.
   Pole roztažené na šířku (nález vlastníka „zbytečně malé" — mělo výchozí
   šířku inputu ~200 px): zabere dostupnou šířku lišty do stropu 720 px. */
.search-toolbar { flex: 1; }
.search-wrap { position: relative; display: inline-flex; align-items: center;
  flex: 1; max-width: 720px; }
.search-wrap input { padding-right: 34px; width: 100%; }
.search-clear { position: absolute; right: 2px; background: none; border: 0;
  color: var(--muted); font-size: 20px; font-weight: 700; min-height: 0;
  padding: 2px 10px; cursor: pointer; }
.search-clear:hover { background: none; color: var(--c-alert); }

/* Datumové filtry s popisky Od/Do v toolbaru (A28 — Archiv, Historie; vzor
   Reportů): label drží text NAD polem, pole si nechává přirozenou šířku. */
.toolbar .date-label { margin: 0; }
.toolbar .date-label input { width: auto; margin-top: 4px; }

/* Duplicitní e-mail v přehledu uživatelů (blok I) — zvýraznění s PROČ v title */
.dup-email { color: var(--c-alert); font-weight: 600; }

/* Ruční norma min/ks u operace ŠABLONY karty (2026-08-06b) — úzké číselné pole */
.tpl-norm-input { width: 110px; }
/* Naučený/ruční čas operace v náhledu šablony (před Upravit) — ≈/~/✎ + title */
.tpl-time { color: var(--muted); white-space: nowrap; margin-right: 6px; }

/* Pole ceny s měnou CZK/EUR a kurzem ČNB (§3.2b, blok E) */
.price-field { display: flex; flex-direction: column; gap: var(--sp-1); }
.price-field .price-cur { margin: 0; }
.price-field .price-rate { margin: 0; color: var(--muted); }

/* Chips častých frází poznámek (§3.13b) — velká tlačítka nad textareou;
   barvy přes proměnné, ať fungují i v tmavém režimu. */
.note-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin: 6px 0; }
.note-chips .chip { background: var(--card); color: var(--ink); border: 1px solid var(--line);
  border-radius: 16px; padding: 6px 12px; font-size: var(--fs-m); cursor: pointer; min-height: 36px; }
.note-chips .chip:hover { border-color: var(--accent); color: var(--accent); background: var(--card); }
.note-chips .chip-add { border-style: dashed; color: var(--muted); }

/* Zvoneček notifikací */
#bell-btn { position: relative; }
.bell-badge { position: absolute; top: -6px; right: -6px; background: var(--c-alert);
  color: #fff; border-radius: var(--r-l); font-size: 11px; font-weight: 700; padding: 1px 5px;
  min-width: 16px; text-align: center; }
.notif-list { max-height: 55vh; max-height: 55dvh; overflow-y: auto; display: flex;
  flex-direction: column; gap: var(--sp-3); }
.notif-item { border: 1px solid var(--line); border-radius: var(--r-m); padding: 8px 12px; }
.notif-item.unread { border-left: 4px solid var(--accent); background: var(--tint-accent); }
.notif-item p { margin: 6px 0; }

/* Nastavení — postranní menu sekcí + tělo (mobilní překlopení viz media 900).
   Menu roluje NEZÁVISLE uvnitř sticky výšky (vzor .manual-toc Nápovědy —
   nález vlastníka 2026-08-24c: 19 položek přerostlo obrazovku a dorolování
   na spodní položky odsouvalo obsah sekce mimo viewport); top 70 = pod
   sticky horní lištou. */
.settings-layout { display: grid; grid-template-columns: 220px 1fr; gap: var(--sp-6); align-items: start; }
.settings-menu { display: flex; flex-direction: column; gap: var(--sp-1); position: sticky;
  top: 70px; max-height: calc(100vh - 82px); overflow-y: auto; }
.settings-menu button { background: none; color: var(--ink); text-align: left; font-weight: 600;
  padding: 10px 14px; border-radius: var(--r-m); }
.settings-menu button:hover { background: var(--btn-2); }
.settings-menu button.active { background: var(--accent); color: #fff; }
.row-inactive td { color: var(--muted); }

/* Utility (plná CSP style-src 'self' — skrývání přes třídu, ne inline style) */
.u-d-none { display: none !important; }

/* Náhled loga (⚙ Subjekt, dřív Reporty — DOTAZY #7) — omezená výška, proporce zachovány */
.report-logo-preview { display: block; max-height: 64px; max-width: 320px; margin: 8px 0; }

/* QR deep-link zakázky (Dávka 9) — modal „QR kód"; bílé pozadí kvůli
   čitelnosti skeneru i v tmavém režimu */
.qr-img { display: block; width: 220px; height: 220px; margin: 8px auto; background: #fff; padding: 8px; border-radius: 8px; }

/* ARES našeptávač dle názvu (⚙ Subjekt, F7b) — svislý seznam kandidátů pod polem */
.ares-suggest { display: flex; flex-direction: column; gap: 2px; margin: 2px 0 6px; }
.ares-suggest-item { text-align: left; font-size: var(--fs-s); padding: 4px 8px; }

/* Prohledávatelný select (suggest.js, F7c) — input + plovoucí seznam návrhů */
.sug-wrap { position: relative; }
.sug-list { position: absolute; top: 100%; left: 0; right: 0; z-index: 40;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-m);
  max-height: 240px; overflow-y: auto; padding: 4px;
  box-shadow: var(--shadow-2); }
.sug-item { display: block; width: 100%; text-align: left; background: transparent;
  color: var(--ink); border-radius: var(--r-s); padding: 8px 10px; min-height: 0; font-size: var(--fs-m); }
.sug-item:hover, .sug-item.active { background: var(--bg); }
.sug-more { margin: 4px 8px; font-size: var(--fs-s); }

/* Jemné varování pod polem (duplicitní číslo zakázky — neblokuje) */
.field-warn { display: block; margin-top: 4px; color: var(--c-overdue); font-size: var(--fs-s); }

.confirm-text { font-size: 17px; margin: 4px 0 8px; }

/* Poznámky záznamu (§3.13) + detail historie (§3.10) — Fáze 5;
   soft-delete + 🗒 na řádcích + inline editace (2026-07-23, vzor ref. app);
   podbarvení pod-řádků viz sdílené vzory tabulek. */
.note-item { border-top: 1px solid var(--line); padding: 8px 0; }
.note-item:first-child { border-top: 0; }
.note-meta { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; font-size: var(--fs-s); }
.note-meta .note-actions { margin-left: auto; display: flex; gap: var(--sp-2); }
/* Autor poznámky barevně (pokyn vlastníka 2026-07-23) — GLOBÁLNĚ, panel je
   sdílený, takže jedno pravidlo kryje karty/zakázky/OBJ/partnery. */
.note-meta strong { color: var(--accent); }
.note-body { margin: 4px 0 0; white-space: pre-wrap; }
.note-add { display: flex; gap: var(--sp-3); align-items: flex-end; margin-top: 10px; }
.note-add textarea { flex: 1; }
.note-deleted { opacity: 0.55; }
.notes-head { font-weight: 600; color: var(--accent); font-size: var(--fs-s); margin-bottom: 4px;
  display: flex; align-items: center; gap: var(--sp-4); }
.notes-deleted-toggle { font-weight: 400; margin-left: auto; display: inline-flex;
  align-items: center; gap: var(--sp-1); }
.notes-row .notes-panel { background: var(--card); border: 1px solid var(--line);
  border-radius: var(--r-m); padding: 10px 14px; margin: 4px 0; }
.note-edit-form textarea { width: 100%; margin-top: 4px; }
.note-edit-form .btn-row { margin-top: 6px; }
.notes-btn { white-space: nowrap; gap: 5px; } /* inline-flex polyká mezeru 🗒 1 */
/* Ikonová tlačítka řádků svisle pod sebou (zpětná vazba vlastníka 2026-08-22b):
   pevná min. šířka počítá i s počtem („🗒 12") — bez ní se sloupce ikon
   napříč řádky rozjížděly podle toho, kde počet je a kde ne.
   2026-08-24d (pokyn vlastníka): ikony GLOBÁLNĚ malinko menší — kompaktnější
   padding, písmo i min. šířky; sdílí Karty/Zakázky/Objednávky/Archiv. */
.row-actions button.small { padding: 4px 8px; font-size: var(--fs-s); }
.row-actions .notes-btn { min-width: 48px; justify-content: center; }
.row-actions .kebab-btn { min-width: 36px; }
/* Objednávky — šířky sloupců (zpětná vazba vlastníka 2026-08-22b; sloučení
   2026-08-24c): sloučený Dodavatel/Popis je široký (dvouřádkové hodnoty),
   „Dodání" úzké na konci. Šířky nese <th>, buňky je následují; sloučená
   hlavička se cílí přes data-dual (data-sort-field mají vnitřní popisky). */
th[data-sort-view="sov"][data-sort-field="order_code"] { width: 118px; }
th[data-sort-view="sov"][data-dual="supplier-note"] { width: 34%; }
th[data-sort-view="sov"][data-sort-field="delivery_date"] { width: 88px; }
/* Zakázky/Archiv — šířky sloučených sloupců (pokyn vlastníka 2026-08-24d):
   Zákazník/Popis širší (dvouřádkové texty), Cena/ks s kusy na 2. řádku
   malinko širší než dřív; Archiv sdílí přes .th-cust-desc (bez řazení). */
/* Šířky sdílí Zakázky i Archiv (24f — Archiv je nově řaditelný stejnými
   hlavičkami, kotva = data-dual/data-sort-field bez vazby na view). */
th[data-dual="customer-description"] { width: 26%; } /* delší zákazník na 1 řádek */
/* 24f: karta „Frame …" se nesmí lámat po slovech na tři řádky. */
th[data-sort-view="orders"][data-sort-field="product"],
th[data-sort-view="archive"][data-sort-field="product"] { width: 15%; }
th[data-dual="unit_price-quantity"] { width: 110px; }

/* „Výchozí řazení" v posledním sloupci hlavičky (2026-08-22b) — nad 📎/🗒/⋮. */
.th-sort-reset { text-align: right; }
.th-sort-reset button { font-size: var(--fs-s); padding: 2px 8px; min-height: 24px;
  white-space: nowrap; font-weight: 400; }
.notes-btn .notes-count { color: var(--c-overdue); font-weight: 700; }

/* Mrtvé bloky .photos-btn/.photos-panel smazány (A16, 2026-08-27): panel
   příloh dnes staví toggleSubRow třídy .attachments-row/.attachments-panel
   a vzhled drží .photo-grid/.photo-item. */

/* Panel poznámek fotky (C3) — vložený za <figure>; v gridu galerie i flex
   pásu zabírá celý řádek kontejneru (fotky se posunou, kontext zůstává). */
.photo-notes { grid-column: 1 / -1; flex-basis: 100%; background: var(--card);
  border: 1px solid var(--line); border-radius: var(--r-m); padding: 10px 12px; }

/* Lightbox fotky (C2) — přes celý viewport, klik kamkoli/Esc zavře; sdílený
   seznamem Karet i galerií detailu (dřívější target=_blank — konzistence). */
.modal-lightbox { background: none; box-shadow: none; padding: 0; width: auto;
  max-width: none; max-height: none; overflow: visible; cursor: zoom-out; }
.modal-lightbox img { max-width: calc(100vw - 32px); max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px); /* tablety: viditelná výška (viz .modal) */
  object-fit: contain; display: block; border-radius: var(--r-m); }
.sec-badge { margin-left: 6px; }
/* Stavový sloupec 🚦 (2026-07-23) — úzký, na střed; ⏸ jako textový glyf
   BEZ emoji varianty dědí červenou (pokyn vlastníka „Přerušeno červeně"). */
.state-cell { text-align: center; width: 1%; white-space: nowrap; }
/* Číselné buňky výpisů (Kusů…) — úzké, bez zalamování; jednotku nese hlavička
   sloupce, buňka je jen číslo (úspora šířky, pokyn vlastníka 2026-08-21). */
.num-cell { width: 1%; white-space: nowrap; }
.pause-ico { color: var(--c-alert); font-weight: 700; }
/* Stav zakázky v JEDNOM řádku (nález vlastníka 2026-07-23 — badge a ▶ se
   lámaly pod sebe a výšky řádků neseděly): flex se svislým centrováním. */
.stav-line { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: nowrap;
  white-space: nowrap; }
/* Akce stavu pod sebou (pokyn vlastníka 2026-08-21): 🛠 Příprava (mini) a
   ▶ Zahájit výrobu ve sloupci — stavová buňka se neroztahuje do šířky. */
/* Hotovo/Objednávky pod sebou zarovnané jako Příprava/Výroba (24g). */
.ho-stack { display: inline-flex; flex-direction: column; align-items: flex-start;
  gap: 4px; }
.stav-actions { display: inline-flex; flex-direction: column; gap: 2px;
  align-items: stretch; }
.stav-actions button { width: 100%; }
button.mini { padding: 2px 8px; font-size: var(--fs-s); min-height: 0; }
.history-json { background: var(--code-bg); border-radius: var(--r-m); padding: 10px; margin: 4px 0;
  font-size: var(--fs-s); white-space: pre-wrap; word-break: break-word; max-height: 320px;
  overflow: auto; }
.history-diff { margin: 4px 0; }
.history-diff th, .history-diff td { padding: 4px 8px; font-size: var(--fs-s); }
.history-diff td { word-break: break-word; }

/* Multi-výběr filtrů (§8) — rozbalovací panel se zaškrtávátky */
.mpick { position: relative; display: inline-block; }
.mpick-panel { position: absolute; top: calc(100% + 4px); left: 0; z-index: 30;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-m);
  padding: 8px 12px; min-width: 220px; max-height: 280px; overflow-y: auto;
  box-shadow: var(--shadow-2); }
/* Bez display:block — základní .chk flex drží checkbox a text na JEDNOM řádku
   (globální input je display:block a v blokovém labelu padal na vlastní řádek);
   flex kontejnery jsou blokové, takže se položky stackují svisle i tak. */
.mpick-panel .chk { margin: 6px 0; white-space: nowrap; }
/* Filtr delších nabídek psaním (2026-07-21i) — plná šířka panelu. */
.mpick-filter { width: 100%; margin-bottom: 6px; }

/* Hledání: nativní křížek type="search" (Chrome) se dubloval s naším
   .search-clear (21c pro Firefox) → nativní schovat (nález snímkování 22b). */
.search-wrap input[type="search"]::-webkit-search-cancel-button {
  -webkit-appearance: none;
  appearance: none;
}

/* Záložka Objednávky (2026-07-22): nadpis stránky + rozbalený pod-řádek
   se zakázkami (bod k — odsazený strom pod hlavním řádkem; podbarvení viz
   sdílené vzory tabulek). */
.view-title { margin: 0 0 10px; }
.sov-sub-box { padding: 4px 8px 8px 32px; }
.sov-sub-row { margin: 4px 0; }
.row-expanded td { border-bottom: none; }
.mpick-count { font-variant-numeric: tabular-nums; }

/* Paleta příkazů (Ctrl+K, §11) + nápověda zkratek `?` */
.pal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, .35); z-index: 90;
  display: flex; align-items: flex-start; justify-content: center;
  padding-top: 12vh; padding-top: 12dvh; }
.pal-card { background: var(--card); border-radius: var(--r-xl); width: min(520px, 92vw);
  box-shadow: var(--shadow-3); overflow: hidden; }
.pal-input { width: 100%; border: 0; border-bottom: 1px solid var(--line);
  border-radius: 0; padding: 14px 16px; font-size: var(--fs-base); background: var(--card);
  color: var(--ink); }
.pal-input:focus { outline: none; }
.pal-list { max-height: 320px; overflow-y: auto; padding: 6px; }
.pal-item { display: flex; justify-content: space-between; align-items: center;
  gap: var(--sp-5); padding: 9px 12px; border-radius: var(--r-m); cursor: pointer; }
.pal-item:hover, .pal-active { background: var(--bg); }
.pal-empty { padding: 14px 16px; }
.pal-keys { display: inline-flex; gap: var(--sp-1); }
kbd { background: var(--bg); border: 1px solid var(--line); border-bottom-width: 2px;
  border-radius: 5px; padding: 1px 6px; font-size: var(--fs-xs); font-family: inherit; }
.help-keys td { padding: 5px 10px; }

/* Hledání (Fáze 5) — výsledky jako odkazové řádky se snippetem z výkresu.
   .search-hit-row = řádek s akcí (Přijato u OBJ, 2026-08-24): tlačítko nesmí
   být VNOŘENÉ v odkazu (klik by navigoval, nevalidní HTML) → flex sourozenec. */
.search-hit { display: block; padding: 8px 10px; border-radius: var(--r-m); color: var(--ink);
  text-decoration: none; border-top: 1px solid var(--line); }
h3 + .search-hit, h3 + .search-hit-row { border-top: 0; }
.search-hit-row { display: flex; align-items: center; border-top: 1px solid var(--line); }
.search-hit-row > .search-hit { flex: 1 1 auto; border-top: 0; }
.search-hit-row > .small { flex: 0 0 auto; margin: 0 10px 0 8px; }
.search-hit:hover { background: var(--hover); }
.search-hit .badge { margin-left: 8px; }
.search-snippet { display: block; font-size: var(--fs-s); margin-top: 2px; }
.search-snippet mark { background: var(--mark); color: inherit; border-radius: 3px; padding: 0 2px; }

/* Zálohy (Fáze 5) — stav posledního běhu (stavové barvy tokeny — sjednoceno) */
.backup-ok { color: var(--c-done); font-weight: 600; }
.backup-bad { color: var(--c-alert); font-weight: 600; }

/* 2FA / TOTP (§2) — enrollment a záchranné kódy; sloupec na střed širších
   modalů. QR zůstává na BÍLÉ i v tmavém režimu (kontrast pro čtečku). */
.totp-enroll { max-width: 420px; margin: 0 auto; }
.totp-qr { width: 200px; height: 200px; display: block; margin: 8px auto; background: #fff;
  padding: 8px; border-radius: var(--r-m); }
.totp-key { user-select: all; word-break: break-all; }
.totp-recovery { columns: 2; list-style: none; padding: 0; margin: 12px 0; }
.totp-recovery li { padding: 2px 0; }

/* ── Smart-table (§11, backport vzoru referenční aplikace) ─────────────────────
   Kebab „⋮" řádkové menu — plovoucí singleton v <body>; position:fixed žije
   v třídě (plná CSP), souřadnice doplní table-actions.js přes CSSOM. */
.kebab-menu { position: fixed; z-index: 60; min-width: 180px; padding: 6px;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--r-l);
  box-shadow: var(--shadow-2); }
.kebab-menu button { display: block; width: 100%; text-align: left;
  background: transparent; color: var(--ink); border-radius: var(--r-s); }
.kebab-menu button:hover { background: var(--btn-2); }
.kebab-menu button.danger { color: var(--c-alert); background: transparent; }
.kebab-btn { min-width: 44px; } /* dotykový cíl i pro samotné „⋮" */

/* Lišta hromadných akcí nad tabulkou (#<view>-bulkbar) */
.bulk-bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-4);
  padding: 8px 12px; margin-bottom: 12px; background: var(--card);
  border: 1px solid var(--accent); border-radius: var(--r-l); }
.bulk-count { font-weight: 600; }

/* Výběrový sloupec (checkbox) — velké dotykové cíle i v rukavicích */
th.sel-cell, td.sel-cell { width: 36px; }
.sel-cell input { width: 20px; height: 20px; margin: 0; display: inline-block; }

/* Koš — inline detail „co bylo smazáno" (klikací řádek + podbarvení detailu
   viz sdílené vzory tabulek) */
.trash-detail-info { display: grid; grid-template-columns: auto 1fr; gap: 2px 18px; margin: 4px 0; }
.trash-detail-info dt { color: var(--muted); font-size: var(--fs-s); }
.trash-detail-info dd { margin: 0; font-size: var(--fs-m); }

/* ── AI asistent (F7, docs/AI.md) — vysouvací panel zprava, na mobilu celý ────
   Bez inline stylů (plná CSP); tmavý režim jede z proměnných. */
.llm-panel { position: fixed; top: 0; right: 0; bottom: 0; z-index: 55;
  width: min(420px, 100vw); display: flex; flex-direction: column;
  background: var(--card); border-left: 1px solid var(--line);
  box-shadow: -6px 0 18px rgba(0, 0, 0, .15); /* směrový stín zásuvky — mimo škálu */
  padding: 12px 14px; }
.llm-head { display: flex; align-items: center; gap: var(--sp-3); }
.llm-notice { margin: 6px 0 0; font-size: var(--fs-s); }
.llm-cloud-note { margin: 2px 0 0; font-size: var(--fs-s); }
/* Záložky chatu (Výkresy/Výroba/Aplikace) — segmentový řádek pod hlavičkou */
.llm-src { font-weight: normal; opacity: 0.75; }
/* Popis rozsahu aktivní záložky chatu (F7c dolaďky) */
.llm-mode-hint { margin: 4px 0 0; font-size: var(--fs-s); }
.llm-messages { flex: 1; overflow-y: auto; margin: 10px 0; display: flex;
  flex-direction: column; gap: var(--sp-3); }
.llm-msg { border-radius: var(--r-l); padding: 8px 10px; max-width: 92%;
  white-space: pre-wrap; word-break: break-word; }
.llm-user { align-self: flex-end; background: var(--accent); color: #fff; }
.llm-ai { align-self: flex-start; background: var(--bg); border: 1px solid var(--line); }
.llm-error { align-self: flex-start; background: var(--tint-alert); color: var(--c-alert); }
/* Systémová poznámka vlákna (F7d „přepnuto") — bez bubliny, přes celou šířku */
.llm-note { align-self: center; text-align: center; font-size: var(--fs-xs); }
.llm-cites { margin-top: 6px; font-size: var(--fs-s); }
.llm-cites a { margin-right: 6px; }
.llm-stats { margin-top: 4px; font-size: var(--fs-xs); }
/* Composer: Odeslat POD vstupem (F7c — rozhodnutí vlastníka z živého klikání) */
#llm-chat-form { display: flex; flex-direction: column; gap: var(--sp-3); }
#llm-chat-form textarea { resize: none; }
.llm-composer-row { display: flex; gap: var(--sp-3); }
.llm-composer-row #llm-send { flex: 1; }
/* Tlačítka PDF/XLSX/CSV pod odpovědí s reportem (nástroj order_report) */
.llm-report-links { margin-top: 6px; font-size: var(--fs-s); display: flex;
  flex-wrap: wrap; gap: var(--sp-2); align-items: center; }
.llm-chip-x { background: transparent; border: 0; cursor: pointer; color: inherit;
  padding: 0 2px; font-size: var(--fs-m); }
#llm-scope-chip { margin-bottom: 4px; }

/* Stránka Nápověda (F7c; grafika Dávka 8 — pokyn vlastníka: odstavce
   a stínování): kapitoly = jemně stínované sekce, Tip/Pozor boxy, vzdušnější
   typografie. Jen tokeny (tmavý režim zdarma), žádné inline styly (CSP). */
.manual-head { display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4); flex-wrap: wrap; }
.manual-content { max-width: 780px; line-height: 1.65; }
.manual-content h2, .manual-content h3, .manual-content h4 { margin-top: 18px; }
.manual-content p { margin: 10px 0; }
.manual-content li { margin: 4px 0; }
.manual-section { background: var(--bg); border: 1px solid var(--line);
  border-radius: var(--r-s); padding: 4px 18px 14px; margin: 16px 0; }
.manual-section > h3 { margin-top: 12px; padding-bottom: 8px;
  border-bottom: 2px solid var(--accent); }
.manual-content blockquote { margin: 10px 0; padding: 6px 12px; border-radius: 4px;
  border-left: 4px solid var(--accent); background: var(--bg); color: var(--muted); }
.manual-section blockquote { background: var(--thumb-bg); }
.manual-content blockquote.manual-tip { border-left-color: var(--c-done); color: inherit; }
.manual-content blockquote.manual-warn { border-left-color: var(--c-alert);
  background: var(--row-alert); color: inherit; }
.manual-content table { max-width: 100%; }
/* Interaktivní nápověda (Dávka 11): obsah vlevo (sticky), text vpravo;
   zvýraznění shod hledání přes mark.hl — vše třídami (CSP), tokeny (dark). */
.manual-layout { display: grid; grid-template-columns: 240px 1fr; gap: var(--sp-6);
  align-items: start; }
.manual-toc { position: sticky; top: 12px; max-height: calc(100vh - 24px);
  overflow-y: auto; font-size: var(--fs-s); border-right: 1px solid var(--line);
  padding-right: 10px; }
.manual-toc a { display: block; padding: 3px 0; color: var(--ink);
  text-decoration: none; }
.manual-toc a:hover { color: var(--accent); text-decoration: underline; }
.manual-content mark.hl { background: var(--row-alert); color: inherit;
  border-radius: 2px; padding: 0 1px; outline: 1px solid var(--c-alert); }
/* Skok z obsahu/deep-linku nesmí schovat nadpis pod horní lištu (nález
   vlastníka 2026-08-22) — rezerva i na vnitřní odsazení sekce. */
.manual-content h3[id], .manual-content h4[id] { scroll-margin-top: 72px; }
/* Hlavička Nápovědy: titulek bez spodního marginu (h2 default 12px ho ve
   flex řádku posouval nad střed — nález vlastníka 2026-08-22), hledání
   roste mezi titulkem a tlačítkem PDF se stropem šířky. */
.manual-head h2 { margin: 0; }
.manual-head .search-wrap { flex: 1 1 320px; max-width: 640px; }
#manual-q { min-width: 240px; }

/* Podobné výkresy (detail karty) */
.similar-list { margin: 0; padding-left: 22px; }
.similar-list li { padding: 2px 0; }

/* ── Patička (standard §11, vzor referenční aplikace) — verze + zkratky, GDPR/AI Act
   vpravo; prázdná (nepřihlášen) se skryje, v tisku reportů překáží → skrýt. ── */
#app-footer { max-width: 1200px; margin: 24px auto 16px; padding: 12px 16px;
  border-top: 1px solid var(--line); color: var(--muted); font-size: var(--fs-s);
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--sp-3); }
#app-footer:empty { display: none; }
#app-footer > div { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); }
#app-footer .foot-name { font-weight: 600; }
#app-footer a { color: var(--accent); text-decoration: none; }
#app-footer a:hover { text-decoration: underline; }
#app-footer .btn-link { font-size: inherit; text-decoration: none; }
#app-footer .btn-link:hover { text-decoration: underline; }
.foot-badge { display: inline-block; padding: 2px 8px; border-radius: var(--r-l);
  background: var(--tint-done); color: var(--c-done); font-weight: 600; font-size: var(--fs-xs);
  white-space: nowrap; }
/* Odznak jako odkaz (✓ AI Act → /ai): zelená odznaku musí přebít #app-footer a. */
#app-footer a.foot-badge { color: var(--c-done); }
@media print { #main-nav, #app-footer, #feedback-fab { display: none; } }

/* AI hledání — pod-nadpis sekce Poznámky uvnitř karty výsledků (2026-07-23) */
.ai-notes-head { margin-top: 12px; font-size: var(--fs-m); }

/* ── Mobilní navigace (Dávka 6, STANDARD §11): hamburger ☰ + drawer + spodní
   lišta. Základ žije MIMO @media (drawer je zasunutý transformem, burger
   a lišta display:none) — mobilní blok 640 níže je jen zviditelní, takže
   force-mobile zrcadlí pouhé display přepínače. ───────────────────────────── */
#nav-burger { display: none; background: none; padding: 10px; min-width: 44px;
  align-items: center; justify-content: center; }
#nav-burger:hover { background: var(--nav-hover); }
.burger-box { display: flex; flex-direction: column; gap: 5px; width: 20px; }
.burger-line { height: 2px; border-radius: 1px; background: #fff;
  transition: transform .2s, opacity .2s; }
/* Animace ☰ → × (čárky se protočí do kříže, prostřední zmizí) */
#nav-burger[aria-expanded="true"] .burger-line:nth-child(1) { transform: translateY(7px) rotate(45deg); }
#nav-burger[aria-expanded="true"] .burger-line:nth-child(2) { opacity: 0; }
#nav-burger[aria-expanded="true"] .burger-line:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.drawer-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, .45); z-index: 115; }
#nav-drawer { position: fixed; top: 0; bottom: 0; left: 0; z-index: 120;
  width: min(300px, 86vw); background: var(--card); box-shadow: var(--shadow-3);
  transform: translateX(-105%); transition: transform .2s; overflow-y: auto;
  padding: 8px 8px calc(8px + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; gap: 2px; }
#nav-drawer.open { transform: none; }
.drawer-head { font-weight: 700; letter-spacing: .3px; padding: 12px 12px 10px;
  border-bottom: 1px solid var(--line); margin-bottom: 6px; }
.drawer-item { display: flex; align-items: center; gap: var(--sp-4); background: none;
  color: var(--ink); text-align: left; font-weight: 600; padding: 10px 12px;
  border-radius: var(--r-m); min-height: 44px; }
.drawer-item:hover { background: var(--btn-2); }
.drawer-item.active { background: var(--accent); color: #fff; }
.drawer-ico { width: 24px; text-align: center; font-size: 17px; flex: 0 0 auto; }
.drawer-caret { margin-left: auto; color: var(--muted); transition: transform .2s; }
.drawer-item.active .drawer-caret { color: #fff; }
.drawer-group-btn[aria-expanded="true"] .drawer-caret { transform: rotate(90deg); }
.drawer-group { display: flex; flex-direction: column; gap: 2px; }
/* Sekce Nastavení kompaktně (místo 18 trvale viditelných textových položek) */
.drawer-sub { padding: 7px 12px 7px 24px; font-weight: 500; min-height: 40px;
  font-size: var(--fs-m); }
.drawer-sep { border-top: 1px solid var(--line); margin: 6px 4px; }

/* Spodní lišta — 3 nejčastější záložky dle role (nav.js); safe-area pro
   telefony s gestem místo tlačítek. */
#bottom-bar { display: none; position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  background: var(--card); border-top: 1px solid var(--line);
  padding: 4px 6px calc(4px + env(safe-area-inset-bottom)); }
.bb-item { flex: 1 1 0; display: flex; flex-direction: column; align-items: center;
  gap: 2px; background: none; color: var(--muted); font-size: var(--fs-xs);
  font-weight: 600; padding: 6px 4px; min-height: 52px; border-radius: var(--r-m); }
.bb-item:hover { background: var(--hover); color: var(--muted); }
.bb-item.active { color: var(--accent); }
.bb-item.active:hover { color: var(--accent); }
.bb-ico { font-size: 20px; line-height: 1; }

/* ── Responsivita (Dávka 5): breakpointy 900 (tablet na výšku / nav se láme)
   + 640 (mobil); jediné výjimky = kompakt záložek 1100 (plný počet záložek
   se na primárním tabletu ~1024–1280 px musí vejít do řádku bez posuvníku)
   a kompakt modalů na VÝŠKU 700 (konec souboru). Bloky jsou na konci
   souboru schválně — stejná specificita jako základ, přebíjí se pořadím. ── */
@media (max-width: 1100px) {
  #main-nav .tab { padding: 10px 8px; font-size: var(--fs-m); }
  /* Užší okna: badge a tlačítka Stavu se smí zalomit — tabulka Zakázek jinak
     nutila vodorovný posuvník (nález vlastníka 2026-08-21 „nevejde se"). */
  .stav-line { flex-wrap: wrap; white-space: normal; }
}
@media (max-width: 900px) {
  #main-nav { flex-wrap: wrap; }
  #main-nav .tabs { order: 10; flex-basis: 100%; }
  main { padding: 12px; }
  .settings-layout { grid-template-columns: 1fr; }
  .settings-menu { flex-direction: row; flex-wrap: wrap; position: static; max-height: none; }
  /* Nápověda (Dávka 11): obsah nad textem — sloupec vlevo se nevejde. */
  .manual-layout { grid-template-columns: 1fr; }
  .manual-toc { position: static; max-height: none; border-right: 0;
    border-bottom: 1px solid var(--line); padding: 0 0 8px; }
}
@media (max-width: 640px) {
  main { padding: 10px; }
  .inline-form input, .inline-form select { flex-basis: 100%; }
  .who-role { display: none; } /* na mobilu šetří místo; role je v Profilu */
  .table-scroll { max-height: none; } /* malý displej: scroll celé stránky je přirozenější */
  .pd-grid, .grid-2 { grid-template-columns: 1fr; } /* detail karty pod sebe */
  /* Tabule na telefonu: koš Nepřiřazeno nahoru (omezená výška), řady pod ním
     scrollují se stránkou; karty v řadě snapují. Přesun mezi řadami řeší
     ⋮ menu (drag přes půl obrazovky je na malém displeji nepohodlný). */
  /* align-items: stretch — základ má flex-start a ve sloupcovém režimu by
     řady dostaly shrink-to-fit šířku obsahu (~1500 px karet) → celá stránka
     by rolovala do strany; stretch drží řady na šířku boardu a karty rolují
     UVNITŘ .plan-lane-items (A22, mobilní vlna 2026-08-27). */
  .plan-board { flex-direction: column; align-items: stretch; }
  .plan-col { flex-basis: auto; width: 100%; max-height: 40vh; }
  .plan-lanes { max-height: none; overflow-y: visible; }
  .plan-lane-items { scroll-snap-type: x proximity; }
  .plan-lane-items .plan-card { flex-basis: 78vw; scroll-snap-align: start; }
  .llm-panel { width: 100vw; }
  /* Pole nové poznámky na celou šířku (A22 — na 390 px mělo ~54 px);
     tlačítko Přidat se zalomí pod textareu. */
  .note-add { flex-wrap: wrap; }
  .note-add textarea { flex-basis: 100%; }
  /* Hlavička detailu zakázky/karty (A22): nadpis na vlastním řádku přes celou
     šířku, akční tlačítka se zalomí POD něj; šedý dovětek („výroba už běží")
     jako samostatný řádek — konec překryvů dlouhého názvu s tlačítky. */
  .toolbar-left:has(.pd-title) { flex-basis: 100%; }
  .toolbar .pd-title { flex-basis: 100%; }
  #od-production-note { flex-basis: 100%; }
  .fb-work { flex-direction: column; }
  .fb-toolbar { flex: 0 0 auto; flex-direction: row; flex-wrap: wrap; }
  .fb-tools { flex-direction: row; flex-wrap: wrap; }
  .fb-toolbar .fb-tool, .fb-toolbar .fb-width { width: auto; }

  /* ── Mobilní navigace (Dávka 6): záložky a ikony lišty jedou do draweru,
     objeví se hamburger + spodní lišta; obsah dostává spodní vůli, ať
     neskončí pod fixní lištou. ── */
  #main-nav .tabs { display: none; }
  #main-nav > .tab-icon { display: none; } /* ⚙ — v draweru jako skupina */
  #help-btn, #logout-btn { display: none; } /* přesun do draweru */
  #nav-burger { display: inline-flex; }
  #bottom-bar { display: flex; }
  #app-footer { margin-bottom: 78px; }
  #feedback-fab { bottom: 84px; }

  /* Pilulkové filtry a menu sekcí Nastavení v JEDNOM řádku s posuvem —
     svislý sloupec pilulek zabíral půl displeje (snímek „před", Dávka 6).
     min-width: 0 = flex položka smí být užší než obsah (jinak nowrap řádek
     roztáhne toolbar a stránka přeteče do strany — chytá e2e). */
  .toolbar-left { min-width: 0; }
  /* mask-image: fade pravého kraje = vodítko „dá se rolovat" (A24). Čistě CSS:
     maska tlumí jen obsah, který dosahuje k pravé hraně kontejneru — když se
     pilulky vejdou, ve fade zóně nic není a nic se netlumí. */
  .seg-row { flex-wrap: nowrap; overflow-x: auto; max-width: 100%; min-width: 0;
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
    mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
  .seg-row .seg { flex: 0 0 auto; white-space: nowrap; } /* pilulka se nemačká, roluje se */
  .seg-2r { display: flex; } /* dvě řady jen na desktopu — mobil roluje řádek */
  /* Hledací pole se nesmí zmáčknout na pár znaků — radši se zalomí na vlastní
     řádek (min-width přebíjí min-width: 0 rodiče). */
  .toolbar .search-wrap { min-width: 220px; }
  .settings-menu { flex-wrap: nowrap; overflow-x: auto; }
  .settings-menu button { white-space: nowrap; }

  /* ── Výpisy → karty (STANDARD §11; jen kontejnery .resp-cards — listShell;
     popisky dodává td[data-label] z hlavičky, list-view.js) ── */
  .resp-cards { max-height: none; overflow: visible; }
  .resp-cards table, .resp-cards tbody, .resp-cards tr, .resp-cards td {
    display: block; width: 100%; }
  .resp-cards thead { display: none; } /* popisky nesou td::before z data-label */
  .resp-cards tr { border: 1px solid var(--line); border-radius: var(--r-l);
    margin: 0 0 10px; padding: 4px 0; background: var(--card); }
  .resp-cards td { display: flex; justify-content: space-between;
    align-items: baseline; gap: var(--sp-5); padding: 5px 12px; border: none;
    text-align: right; }
  .resp-cards td::before { content: attr(data-label); flex: 0 0 38%;
    font-size: var(--fs-xs); font-weight: 600; color: var(--muted); text-align: left; }
  .resp-cards td:not([data-label]) { justify-content: flex-end; }
  .resp-cards td:not([data-label])::before { content: none; }
  .resp-cards td:empty { display: none; }
  /* Pod-řádky s panely (poznámky/fotky/detail koše) a hlášky přes celou šířku */
  .resp-cards td[colspan] { display: block; text-align: left; }
  .resp-cards td.empty-state { text-align: center; }
  /* Stavová řádka zakázky (badge + ▶) se v kartě smí zalomit — nowrap
     z tabulky by přetekl přes okraj karty (snímek „po" 1. iterace). */
  .resp-cards .stav-line { flex-wrap: wrap; white-space: normal;
    justify-content: flex-end; }
  /* 24f — re-audit mobilu: checkbox + stavová ikona kompaktně VEDLE SEBE
     v čele karty (dřív dva vysoké prázdné řádky) a druhé řádky buněk
     (.cell-sub, ▸ počty) POD hodnotou vpravo (dřív se tlačily do řádku
     vedle hodnoty a karta působila rozházeně). */
  .resp-cards td.sel-cell, .resp-cards td.state-cell { display: inline-flex;
    width: auto; padding: 8px 12px 0; }
  .resp-cards td:not([colspan]) { flex-wrap: wrap; }
  .resp-cards td:not([colspan]) > div { flex-basis: 100%; display: flex;
    flex-wrap: wrap; justify-content: flex-end; gap: var(--sp-2); }
  .resp-cards .cell-sub { text-align: right; }
  /* C-L1: karty drží MIN. 2 řádky ořezu (čitelnost) — --clamp-lines-m
     dopočítává applyClampLines jako max(volba, 2); display se vrací na
     -webkit-box (pravidlo `td > div` výše ho přepnulo na flex). */
  .resp-cards td:not([colspan]) > div.clamp { display: -webkit-box;
    -webkit-line-clamp: var(--clamp-lines-m, 2); line-clamp: var(--clamp-lines-m, 2); }

  /* ── Modály celoobrazovkově (lightbox zůstává vycentrovaný náhled) ── */
  .modal-overlay { padding: 0; align-items: stretch; }
  .modal:not(.modal-lightbox) { max-width: none; height: 100%;
    max-height: 100vh; max-height: 100dvh; border-radius: 0; }

  /* ── Multi-výběr filtrů → bottom-sheet (absolutní panel přetékal displej) ── */
  .mpick-panel { position: fixed; left: 0; right: 0; top: auto; bottom: 0;
    min-width: 0; max-height: 70vh; max-height: 70dvh;
    border-radius: 16px 16px 0 0; box-shadow: var(--shadow-3); z-index: 110; }

  /* ── Dotykové cíle ≥40×40 px (A23) — neviditelná hit-area ::after přes střed
     prvku; vizuál se nemění. .plan-card-menu je už position:absolute (roh
     karty), proto NENÍ v relative skupině — ::after na něm funguje rovnou. ── */
  .row-actions .kebab-btn, .chip-x, .llm-chip-x, #llm-close { position: relative; }
  .row-actions .kebab-btn::after, .plan-card-menu::after, .chip-x::after,
  .llm-chip-x::after, #llm-close::after { content: ""; position: absolute;
    left: 50%; top: 50%; width: max(100%, 40px); height: max(100%, 40px);
    transform: translate(-50%, -50%); }
  /* Checkbox výběru: VĚDOMÁ výjimka z „vizuál neměň" — Chromium kreslí nativní
     checkbox přes celý border-box (padding/transparent border glyf nezmenší,
     ověřeno empiricky), neviditelná hit-area tedy u <input> nejde. Větší
     checkbox na telefonu ladí se SPEC §11 (velké dotykové cíle, rukavice). */
  .sel-cell input { width: 40px; height: 40px; }

  /* Reporty — Ekonomika (A24): zaškrtávátko „Včetně rozpracovaných" a Zobrazit
     na samostatných řádcích; checkbox nesmí zdědit flex-basis 100 % textových
     polí .inline-form (roztahoval se přes celý řádek labelu). */
  .inline-form .chk { flex-basis: 100%; }
  .inline-form .chk input { flex-basis: auto; }
  #eco-form button[type="submit"]:not([data-fmt]) { flex-basis: 100%; }

  /* Hledání (A24): akční tlačítko výsledku (Přijato…) POD textem — vedle
     snippetu se na 390 px mačkalo. */
  .search-hit-row { flex-direction: column; align-items: stretch; }
  .search-hit-row > .small { align-self: flex-start; margin: 0 10px 10px; }
}

/* Ruční „Mobilní verze" (patička, 2026-08-06b): desktopové prohlížeče meta
   viewport ignorují, proto body.force-mobile ZRCADLÍ mobilní bloky @media
   ≤1100/≤900/≤640 výše — PLNÉ zrcadlo (Dávka 5), synchronizaci vynucuje
   guard test test_force_mobile_mirror (stejné deklarace pro každý selektor;
   navíc jen strop šířky main — simulace úzkého displeje na širokém okně). */
body.force-mobile #main-nav { flex-wrap: wrap; }
body.force-mobile #main-nav .tabs { order: 10; flex-basis: 100%; display: none; }
body.force-mobile #main-nav .tab { padding: 10px 8px; font-size: var(--fs-m); }
body.force-mobile .stav-line { flex-wrap: wrap; white-space: normal; }
body.force-mobile .settings-layout { grid-template-columns: 1fr; }
body.force-mobile .manual-layout { grid-template-columns: 1fr; }
body.force-mobile .manual-toc { position: static; max-height: none; border-right: 0;
  border-bottom: 1px solid var(--line); padding: 0 0 8px; }
body.force-mobile .settings-menu { flex-direction: row; flex-wrap: nowrap; position: static;
  overflow-x: auto; max-height: none; }
body.force-mobile main { padding: 10px; max-width: 900px; }
body.force-mobile .inline-form input, body.force-mobile .inline-form select { flex-basis: 100%; }
body.force-mobile .who-role { display: none; }
body.force-mobile .table-scroll { max-height: none; }
body.force-mobile .pd-grid, body.force-mobile .grid-2 { grid-template-columns: 1fr; }
body.force-mobile .plan-board { flex-direction: column; align-items: stretch; }
body.force-mobile .plan-col { flex-basis: auto; width: 100%; max-height: 40vh; }
body.force-mobile .plan-lanes { max-height: none; overflow-y: visible; }
body.force-mobile .plan-lane-items { scroll-snap-type: x proximity; }
body.force-mobile .plan-lane-items .plan-card { flex-basis: 78vw; scroll-snap-align: start; }
body.force-mobile .llm-panel { width: 100vw; }
body.force-mobile .note-add { flex-wrap: wrap; }
body.force-mobile .note-add textarea { flex-basis: 100%; }
body.force-mobile .toolbar-left:has(.pd-title) { flex-basis: 100%; }
body.force-mobile .toolbar .pd-title { flex-basis: 100%; }
body.force-mobile #od-production-note { flex-basis: 100%; }
body.force-mobile .fb-work { flex-direction: column; }
body.force-mobile .fb-toolbar { flex: 0 0 auto; flex-direction: row; flex-wrap: wrap; }
body.force-mobile .fb-tools { flex-direction: row; flex-wrap: wrap; }
body.force-mobile .fb-toolbar .fb-tool, body.force-mobile .fb-toolbar .fb-width { width: auto; }
/* Mobilní navigace (Dávka 6) — zrcadlo display přepínačů */
body.force-mobile #main-nav > .tab-icon { display: none; }
body.force-mobile #help-btn, body.force-mobile #logout-btn { display: none; }
body.force-mobile #nav-burger { display: inline-flex; }
body.force-mobile #bottom-bar { display: flex; }
body.force-mobile #app-footer { margin-bottom: 78px; }
body.force-mobile #feedback-fab { bottom: 84px; }
body.force-mobile .toolbar-left { min-width: 0; }
body.force-mobile .seg-row { flex-wrap: nowrap; overflow-x: auto; max-width: 100%;
  min-width: 0;
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
  mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
body.force-mobile .seg-row .seg { flex: 0 0 auto; white-space: nowrap; }
body.force-mobile .seg-2r { display: flex; }
body.force-mobile .toolbar .search-wrap { min-width: 220px; }
body.force-mobile .settings-menu button { white-space: nowrap; }
body.force-mobile .resp-cards td.sel-cell, body.force-mobile .resp-cards td.state-cell {
  display: inline-flex; width: auto; padding: 8px 12px 0; }
body.force-mobile .resp-cards td:not([colspan]) { flex-wrap: wrap; }
body.force-mobile .resp-cards td:not([colspan]) > div { flex-basis: 100%; display: flex;
  flex-wrap: wrap; justify-content: flex-end; gap: var(--sp-2); }
body.force-mobile .resp-cards .cell-sub { text-align: right; }
body.force-mobile .resp-cards td:not([colspan]) > div.clamp { display: -webkit-box;
  -webkit-line-clamp: var(--clamp-lines-m, 2); line-clamp: var(--clamp-lines-m, 2); }
body.force-mobile .resp-cards .stav-line { flex-wrap: wrap; white-space: normal;
  justify-content: flex-end; }
/* Výpisy → karty — zrcadlo bloku .resp-cards */
body.force-mobile .resp-cards { max-height: none; overflow: visible; }
body.force-mobile .resp-cards table, body.force-mobile .resp-cards tbody,
body.force-mobile .resp-cards tr, body.force-mobile .resp-cards td {
  display: block; width: 100%; }
body.force-mobile .resp-cards thead { display: none; }
body.force-mobile .resp-cards tr { border: 1px solid var(--line); border-radius: var(--r-l);
  margin: 0 0 10px; padding: 4px 0; background: var(--card); }
body.force-mobile .resp-cards td { display: flex; justify-content: space-between;
  align-items: baseline; gap: var(--sp-5); padding: 5px 12px; border: none;
  text-align: right; }
body.force-mobile .resp-cards td::before { content: attr(data-label); flex: 0 0 38%;
  font-size: var(--fs-xs); font-weight: 600; color: var(--muted); text-align: left; }
body.force-mobile .resp-cards td:not([data-label]) { justify-content: flex-end; }
body.force-mobile .resp-cards td:not([data-label])::before { content: none; }
body.force-mobile .resp-cards td:empty { display: none; }
body.force-mobile .resp-cards td[colspan] { display: block; text-align: left; }
body.force-mobile .resp-cards td.empty-state { text-align: center; }
/* Modály celoobrazovkově + bottom-sheet filtrů — zrcadlo */
body.force-mobile .modal-overlay { padding: 0; align-items: stretch; }
body.force-mobile .modal:not(.modal-lightbox) { max-width: none; height: 100%;
  max-height: 100vh; max-height: 100dvh; border-radius: 0; }
body.force-mobile .mpick-panel { position: fixed; left: 0; right: 0; top: auto; bottom: 0;
  min-width: 0; max-height: 70vh; max-height: 70dvh;
  border-radius: 16px 16px 0 0; box-shadow: var(--shadow-3); z-index: 110; }
/* Dotykové cíle ≥40 px + Reporty/Hledání zalomení (A23/A24) — zrcadlo */
body.force-mobile .row-actions .kebab-btn, body.force-mobile .chip-x,
body.force-mobile .llm-chip-x, body.force-mobile #llm-close { position: relative; }
body.force-mobile .row-actions .kebab-btn::after, body.force-mobile .plan-card-menu::after,
body.force-mobile .chip-x::after, body.force-mobile .llm-chip-x::after,
body.force-mobile #llm-close::after { content: ""; position: absolute;
  left: 50%; top: 50%; width: max(100%, 40px); height: max(100%, 40px);
  transform: translate(-50%, -50%); }
body.force-mobile .sel-cell input { width: 40px; height: 40px; }
body.force-mobile .inline-form .chk { flex-basis: 100%; }
body.force-mobile .inline-form .chk input { flex-basis: auto; }
body.force-mobile #eco-form button[type="submit"]:not([data-fmt]) { flex-basis: 100%; }
body.force-mobile .search-hit-row { flex-direction: column; align-items: stretch; }
body.force-mobile .search-hit-row > .small { align-self: flex-start; margin: 0 10px 10px; }
body.force-mobile .os-two { grid-template-columns: 1fr; }
body.force-mobile .dash-grid { grid-template-columns: 1fr; }

/* ── Kompaktní režim modalů (P5, BLOK A 2026-08-06) ───────────────────────────
   Nízká okna — 1366×768 s lištami prohlížeče, tablety na šířku: menší
   odsazení, ať se běžné dialogy (Přerušit) vejdou celé bez rolování; sticky
   patička (u .modal výš) zůstává pojistkou pro extrémy. Dotykové cíle
   tlačítek (44 px) se NEzmenšují. Blok je na KONCI souboru schválně —
   .pause-option apod. mají stejnou specificitu a přebíjí se pořadím.
   (Osa VÝŠKY — vědomá výjimka z breakpointů 900+640, viz Dávka 5.) */
@media (max-height: 700px) {
  .modal { --modal-pad: 14px; }
  .modal h3 { margin-bottom: 8px; }
  .modal label { margin: 4px 0; }
  /* Speciální labely mají margin 0 už v základu — kompaktní pravidlo výš by
     ho svou specificitou přebilo, proto ho tu explicitně vracíme. */
  .modal .chk, .modal .pause-option, .modal .fb-type-group { margin: 0; }
  .modal input, .modal select, .modal textarea { padding: 6px 10px; }
  /* Utaženo 2026-08-22: dialog Přerušit nese nově i pole Zmetky (ks) —
     bez zmenšení radií/chipů by se na 1366×660 nevešel celý (cíl P5). */
  .pause-options { gap: 3px; margin: 4px 0; }
  .pause-option { padding: 4px 10px; }
  /* Chips frází se lámou do několika řádků (nejvyšší kus dialogu Přerušit) —
     v nízkém okně stačí menší; pořád pohodlný cíl pro prst. */
  .note-chips { gap: 4px; margin: 4px 0; }
  .note-chips .chip { padding: 3px 8px; min-height: 26px; font-size: var(--fs-s); }
}
