/*
  Centrální sklad – jediná sdílená šablona stylů (DESIGN_SYSTEM.md).
  Vytaženo z mockupu (theme.py BASE + nav2.py NAV_CSS + unify.py UNI_CSS) bez vrstev s !important.
  Pravidla: tokeny jen tady; lokální styly obrazovek jen s důvodem; panely nikdy overflow:hidden
  (sticky hlavička tabulky by se lepila k panelu); sticky offsety přes --thead-top měřenou v app.js.
*/

/* ---------- 1. Tokeny ---------- */
:root {
  --sidebar-w: 216px;
  --workspace-gap: 20px;
  --content-px: 24px;
  --tabbar-h: 41px;
  --thead-top: 41px;           /* spodní hrana fixních vrstev; nastavuje app.js (ResizeObserver) */

  --bg: #F6F7F4;
  --panel: #FFFFFF;
  --work-bg: #FBFCFA;
  --ink: #1F1F1F;
  --ink2: #4D4D4D;
  --muted: #767676;
  --line: #E3E6DF;
  --line2: #D5D5D5;
  --hover: #F6F7F4;

  --green: #81B644;
  --green-hover-btn: #6C9B36;
  --green-dark: #59822E;
  --green-hover: #3A5123;
  --green-soft: #E6F1D6;
  --green-tint: #F2F8EA;
  --green-line: #B9D39A;
  --doc-out-bg: #5B7449;       /* hlavička výdejky: tlumená varianta --green-dark, světlejší než menu (prompt 79) */
  --doc-out-hover: #4A5F3B;

  --red: #BF0426;
  --red-soft: #FDF3F4;
  --red-line: #F1D3D8;
  --amber: #B86B0E;
  --amber-soft: #FFF8EC;
  --amber-line: #F3E2C2;
  --unsaved-bg: #FFFBF2;

  --menu-bg: #3A5123;
  --menu-text: #DCE8CC;
  --menu-sub: #C7D8B2;

  --r: 8px;
  --r-panel: 10px;
  --shadow-pop: 0 8px 24px rgba(0, 0, 0, .14);
  --shadow-work: 0 2px 6px rgba(0, 0, 0, .05);
}

/* ---------- 2. Základ ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { height: 100%; }
body {
  margin: 0; min-height: 100%;
  font: 14px/1.45 Ubuntu, system-ui, sans-serif;
  background: var(--bg); color: var(--ink);
  font-variant-numeric: tabular-nums;
}
a { color: var(--green-dark); text-decoration: none; }
a:hover { color: var(--green-hover); text-decoration: underline; }
input, select, textarea, button { font: inherit; color: var(--ink); }
h1, h2, h3 { margin: 0; font-weight: 500; color: var(--ink); }
h1 { font-size: 20px; }
h2 { font-size: 15.5px; }
p { margin: 0 0 10px; }
:focus-visible { outline: 2px solid var(--green); outline-offset: -1px; }
.num { text-align: right; }
.muted { color: var(--muted); }
.ink2 { color: var(--ink2); }
.lat { font-size: 12.5px; color: var(--muted); font-style: italic; }
.pname { font-size: 15px; font-weight: 500; color: var(--ink); }
.pname:hover { color: var(--green-hover); }

/* ---------- 3. Rozložení: menu · pracovní plocha ---------- */
.app { display: flex; min-height: 100vh; background: var(--bg); }
.ws { flex: 1 1 560px; min-width: 0; display: flex; flex-direction: column; padding-left: var(--workspace-gap); }
main { padding: 12px var(--content-px) 24px; display: flex; flex-direction: column; gap: 14px; }
.flash { padding: 10px var(--content-px) 0; display: flex; flex-direction: column; gap: 8px; }

/* ---------- 4. Levé menu (nav2) ---------- */
.nav {
  width: var(--sidebar-w); flex: 0 0 var(--sidebar-w);
  background: var(--menu-bg); color: var(--menu-text);
  padding: 0 0 16px; display: flex; flex-direction: column;
  position: sticky; top: 0; height: 100vh; overflow: auto; align-self: flex-start;
}
.nav .brand {
  display: flex; align-items: center; gap: 10px; padding: 16px 18px 14px;
  font-weight: 700; color: #fff; font-size: 15px; letter-spacing: .01em;
  border-bottom: 1px solid rgba(255, 255, 255, .10); margin-bottom: 6px;
}
.nav .brand .lg { width: 26px; height: 26px; border-radius: 7px; background: var(--green); display: inline-flex; align-items: center; justify-content: center; color: #fff; }
.nav a, .nav .grp {
  display: flex; align-items: center; gap: 10px; padding: 8px 18px;
  color: var(--menu-text); text-decoration: none; font-size: 14px; line-height: 18px;
  border-left: 3px solid transparent;
}
.nav .grp { color: #fff; font-weight: 500; margin-top: 4px; }
.nav .grp .car { margin-left: auto; opacity: .6; font-size: 10px; }
.nav .grp.open .car { transform: rotate(180deg); }
.nav .ni { flex: 0 0 16px; opacity: .85; }
.nav a:hover { background: rgba(255, 255, 255, .07); color: #fff; text-decoration: none; }
.nav a.sub { padding-left: 44px; font-size: 13.5px; color: var(--menu-sub); }
.nav a.on { background: rgba(255, 255, 255, .14); color: #fff; border-left-color: var(--green); font-weight: 500; }
.nav .nb { margin-left: auto; background: rgba(255, 255, 255, .16); color: #fff; border-radius: 9px; padding: 0 7px; font-size: 11.5px; line-height: 18px; font-weight: 500; }
.nav .nb-y { background: #D99A2B; color: var(--ink); }
.nav .nb-r { background: var(--red); }
.nav .foot { margin-top: auto; padding: 12px 18px 0; border-top: 1px solid rgba(255, 255, 255, .10); display: flex; align-items: center; gap: 10px; color: var(--menu-sub); font-size: 13px; }
.nav .foot a { padding: 0; border: 0; margin-left: auto; color: var(--menu-sub); }
.nav .foot a.who { margin-left: 0; }
.nav .avatar { width: 24px; height: 24px; border-radius: 50%; background: var(--green); display: inline-flex; align-items: center; justify-content: center; color: #fff; font-size: 11px; font-weight: 500; }

/* ---------- 5. Globální lišta (.tabbar) a rychlé hledání (.qs) ---------- */
.tabbar {
  position: sticky; top: 0; z-index: 20; height: var(--tabbar-h);
  background: var(--panel); border-bottom: 1px solid var(--line);
  padding: 0 16px 0 20px; display: flex; gap: 2px; align-items: center; flex-wrap: nowrap;
}
.tab { padding: 10px 12px; font-size: 14px; color: var(--ink2); text-decoration: none; border-bottom: 2px solid transparent; white-space: nowrap; }
.tab.on { color: var(--ink); font-weight: 500; border-bottom-color: var(--green); }
.tab:hover { text-decoration: none; color: var(--ink); }
.qs { position: relative; margin-left: auto; width: 320px; flex: 0 1 320px; min-width: 150px; }   /* při mnoha záložkách (Skladové pozice při 1366) se zúží, nevytvoří vodorovný posuv */
.qs input { height: 32px; padding: 4px 34px 4px 32px; border-radius: 16px; border: 1px solid var(--line2); background: #fff; width: 100%; font-size: 14px; }
.qs > svg { position: absolute; left: 11px; top: 8px; }
.qs .kbd { position: absolute; right: 9px; top: 7px; font-size: 11px; color: var(--muted); border: 1px solid var(--line2); border-radius: 5px; padding: 1px 6px; background: #fff; line-height: 14px; }
.qs .sug { position: absolute; left: 0; right: 0; top: 36px; z-index: 50; background: #fff; border: 1px solid var(--line2); border-radius: var(--r-panel); box-shadow: var(--shadow-pop); padding: 6px 0; }
.qs .sug a { display: flex; flex-direction: column; gap: 1px; padding: 6px 12px; color: var(--ink); font-size: 13.5px; line-height: 1.3; }
.qs .sug a:hover, .qs .sug a.on { background: var(--hover); text-decoration: none; }
.qs .sug a.on { box-shadow: inset 3px 0 0 var(--green); }
.qs .sug .sug-codes { font-size: 12.5px; }
.qs .sug .sug-all { border-top: 1px solid var(--line2); margin-top: 4px; padding-top: 8px; color: var(--green-hover); font-weight: 500; }
.qs .sug .sug-state { padding: 8px 12px; font-size: 13px; color: var(--muted); }
.qs .sug .sug-state.err { color: var(--red); }
@media (max-width: 1400px) { .qs { width: 260px; flex-basis: 260px; } .tab { padding: 10px 9px; } }
@media (max-width: 1440px) { .tab { padding: 10px 6px; } .qs { min-width: 120px; } .qs .kbd { display: none; } }   /* moduly s mnoha záložkami (Skladové pozice) se vejdou i při 1366 bez vodorovného posuvu */

/* ---------- 6. Fixní pracovní hlavička (.work) ---------- */
.work {
  position: sticky; top: var(--tabbar-h); z-index: 12;
  background: var(--work-bg); border-bottom: 1px solid var(--line2); box-shadow: var(--shadow-work);
  padding: 10px var(--content-px); display: flex; flex-direction: column; gap: 10px;
}
.work header { display: flex; align-items: center; gap: 14px; }
.work header h1 { min-width: 0; flex: 1 1 auto; }
.work header h1 .sum { margin-left: 10px; }   /* název a souhrn tečou jako jeden odstavec: souhrn se zalomí pod název, nikdy do úzkých sloupců; akce se zalomí uvnitř (prompt 75) */
.work header .sum { color: var(--muted); font-weight: 400; font-size: 15px; display: inline; padding: 0; border: 0; background: none; border-radius: 0; }   /* souhrn v nadpisu ≠ souhrnná lišta .sum (patička dokladu): nepřebírá její odsazení, rámeček ani flex (prompt 75) */
.work header .actions { margin-left: auto; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: flex-end; min-width: 0; flex: 0 1 auto; }
.frow1, .frow2 { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.chips { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; min-height: 28px; font-size: 13px; color: var(--muted); }
.review-switch { display: flex; gap: 8px; flex-wrap: wrap; margin: 0 0 10px; }                 /* Ke kontrole › Koncept + připraveno × Čeká na fotografii (prompt 35) */
.review-switch .btn.on { background: var(--green-tint); border-color: var(--green); color: var(--green-hover); font-weight: 500; }
.review-switch .n { margin-left: 6px; font-weight: 500; }
.photo-wait { font-size: 12.5px; color: var(--amber); margin-top: 2px; white-space: normal; overflow: visible; }
.chip { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 6px 0 10px; border-radius: 14px; background: var(--green-soft); color: var(--green-hover); font-size: 13px; }
.chip a { color: var(--green-hover); font-size: 12px; padding: 0 4px; }

/* ---------- 7. Tlačítka, pole, štítky ---------- */
.btn {
  height: 34px; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 0 14px; border-radius: var(--r); border: 1px solid var(--line2); background: #fff;
  color: var(--ink); font-size: 14px; font-weight: 500; line-height: 1; cursor: pointer;
  text-decoration: none; white-space: nowrap;
}
.btn:hover { background: var(--hover); text-decoration: none; color: var(--ink); }
.btn-primary { background: var(--green); border-color: var(--green); color: #fff; }
.btn-primary:hover { background: var(--green-hover-btn); border-color: var(--green-hover-btn); color: #fff; }
.btn-ghost { border-color: transparent; background: transparent; color: var(--green-dark); }
.btn-ghost:hover { background: var(--green-tint); }
.btn-danger { color: var(--red); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .45; cursor: not-allowed; pointer-events: none; }

.in, .sel, .ta {
  border: 1px solid var(--line2); border-radius: var(--r); background: #fff; font-size: 14px;
}
.in, .sel { height: 34px; padding: 0 10px; }
.sel {
  padding-right: 28px; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%234D4D4D' stroke-width='1.5' fill='none'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 10px center;
}
.ta { padding: 8px 10px; width: 100%; line-height: 1.45; resize: vertical; }
.in:focus, .sel:focus, .ta:focus { outline: 2px solid var(--green); outline-offset: -1px; border-color: var(--green); }
.in[readonly], .cell-ro { background: var(--hover); color: var(--ink2); }
.chk { width: 16px; height: 16px; accent-color: var(--green); margin: 0; vertical-align: middle; cursor: pointer; }
.chkbox { display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 10px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; font-size: 14px; color: var(--ink); white-space: nowrap; }
.stab { display: inline-flex; align-items: center; height: 34px; padding: 0 14px; border-radius: var(--r); border: 1px solid var(--line2); background: #fff; color: var(--ink2); text-decoration: none; font-size: 14px; }
.stab.on { background: var(--green-tint); border-color: var(--green-line); color: var(--ink); font-weight: 500; }

.pill { display: inline-block; border-radius: 10px; padding: 1px 7px; font-size: 11.5px; font-weight: 500; line-height: 16px; white-space: nowrap; }
.pill-g { background: var(--green-soft); color: var(--green-hover); }
.pill-y { background: var(--amber-soft); color: var(--amber); }
.pill-r { background: var(--red-soft); color: var(--red); }
.pill-x { background: #EEF0EA; color: var(--ink2); }
.pill-b { background: var(--green-soft); color: var(--green-dark); }

.hint {
  display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%;
  border: 1px solid var(--green-dark); color: var(--green-dark); font-size: 10.5px; font-weight: 700; font-style: normal;
  margin-left: 6px; vertical-align: middle; cursor: help; background: #fff;
}
.hint:hover { background: var(--green-dark); color: #fff; }

/* ---------- 8. Panely a sekce ---------- */
.panel, .sec, .card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-panel); overflow: visible; }
.sec > .sh, .panel > .sh { padding: 12px 20px; border-bottom: 1px solid var(--line); display: flex; align-items: center; gap: 12px; flex-wrap: wrap; border-radius: var(--r-panel) var(--r-panel) 0 0; }
.sh .d { font-size: 13px; color: var(--muted); margin-top: 2px; }
.sec > .sb, .panel > .sb { padding: 16px 20px; }

/* záložky uvnitř modulu / karty (.ptabs) */
.ptabs { display: flex; gap: 4px; align-items: stretch; padding: 0 12px; background: #fff; border: 1px solid var(--line); border-bottom: 1px solid var(--line2); border-radius: var(--r-panel) var(--r-panel) 0 0; }
.ptab { display: flex; align-items: center; padding: 0 14px; height: 44px; color: var(--ink2); text-decoration: none; font-size: 14.5px; white-space: nowrap; border: 0; border-bottom: 2px solid transparent; margin-bottom: -1px; background: transparent; border-radius: 6px 6px 0 0; }
.ptab:hover { color: var(--ink); text-decoration: none; background: var(--hover); }
.ptab.on { color: var(--ink); font-weight: 500; border-bottom-color: var(--green); background: #fff; }
.ptabs + .panel { border-top: 0; border-radius: 0 0 var(--r-panel) var(--r-panel); }

/* ---------- 9. Datová tabulka seznamů (.tt.fx / .pt) ---------- */
table.tt, table.pt { border-collapse: collapse; width: 100%; table-layout: fixed; font-size: 14px; }
.tt th, .pt th, .th {
  position: sticky; top: var(--thead-top); z-index: 3; background: #fff;
  font-size: 11.5px; font-weight: 500; color: var(--muted); text-transform: uppercase; letter-spacing: .04em;
  padding: 9px 6px; height: 36px; border-bottom: 1px solid var(--line2); text-align: left; white-space: nowrap; line-height: 1.2; vertical-align: bottom;
}
.tt th.num, .pt th.num, .th.num { text-align: right; }   /* záhlaví číselného sloupce nad hodnotami (čísla vpravo); `.tt th` jinak přebije `.num` (Issue #28) */
.tt td, .pt td, .td { padding: 4px 6px; height: 44px; border-bottom: 1px solid var(--line); vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tt.dense td, .pt.dense td { height: 36px; }
.tt th.cell-wrap, .tt td.cell-wrap { white-space: normal; overflow-wrap: anywhere; }   /* celý údaj zalomit místo oříznutí (dlouhé seznamy pozic v logu, delší záhlaví úzkého sloupce – integrace #196) */
.tt tr:hover > td, .pt tr:hover > td { background: var(--hover); }
tr.sel > td { background: var(--green-tint); }
tr.sel > td:first-child { box-shadow: inset 3px 0 0 var(--green); }
tr.cur > td { background: var(--green-tint); }
tr.cur > td:first-child { box-shadow: inset 3px 0 0 var(--green); }
tr.cur.sel > td { background: #F3F4F1; }
.pt tr.v td { color: var(--ink2); font-size: 13.5px; }
.pt tr.v td:first-child { box-shadow: inset 3px 0 0 var(--green-soft); }
.pt tr.p.open td { border-bottom-color: transparent; }
.pt tr.v.last td { border-bottom: 1px solid var(--line2); }
.td .in, .td .sel { height: 32px; }
.tfoot, .tsum { padding: 8px 14px; font-size: 13px; color: var(--muted); border-top: 1px solid var(--line); }
.exp { display: inline-flex; align-items: center; gap: 4px; color: var(--green-dark); font-size: 13px; }
.exp .tri { display: inline-block; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid var(--green-dark); }
.exp.closed .tri { transform: rotate(-90deg); }

/* ---------- 10. Stavy (.ds hlavní stav, .ds2 indikátory) ---------- */
.ds { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; white-space: nowrap; color: var(--ink); }
.ds .dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; background: var(--green); flex: 0 0 7px; }
.ds.open .dot { background: var(--amber); }
.ds.done .dot, .ds.off .dot { background: #C8CBC3; }
.ds.err .dot { background: var(--red); }
.ds.err { color: var(--red); }
.ds2 { font-size: 12px; color: var(--muted); white-space: nowrap; line-height: 14px; }
.ds2.warn { color: var(--amber); }
.ds2.err { color: var(--red); font-weight: 500; }
.ds2 .ic { display: inline-flex; width: 12px; height: 12px; border-radius: 50%; align-items: center; justify-content: center; font-size: 8.5px; font-weight: 700; color: #fff; margin-right: 3px; vertical-align: 1px; }
.ds2.warn .ic { background: var(--amber); }
.ds2.err .ic { background: var(--red); }
.st { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink2); }
.st .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); display: inline-block; }
.st.off .dot { background: #C8CBC3; }
tr.off td { color: var(--muted); }
.st.warn { color: var(--amber); }
.warn-text { color: var(--amber); font-weight: 600; }
.st.err { color: var(--red); }
.st .ic { display: inline-flex; width: 15px; height: 15px; border-radius: 50%; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; }
.st.warn .ic { background: var(--amber); }
.st.err .ic { background: var(--red); }

/* ---------- 11. Upozornění (.al) ---------- */
.al { display: grid; grid-template-columns: auto 1fr auto; gap: 4px 14px; align-items: start; padding: 10px 16px; border-radius: var(--r-panel); border: 1px solid var(--line); background: #fff; font-size: 14px; }
.al .lab { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; white-space: nowrap; line-height: 22px; }
.al .lab.wrap { display: block; white-space: normal; grid-column: 1 / -1; }             /* dlouhá hláška (např. překryv inventur s odkazy) – zalomit, ne vodorovný posuv */
.al .ic { display: inline-flex; width: 16px; height: 16px; border-radius: 50%; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; flex: 0 0 16px; }
.al ul { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 3px; }
.al li { line-height: 22px; }
.al li a { color: var(--ink); }
.al li a:hover { color: var(--green-hover); }
.al li b { font-weight: 500; }
.al .more { font-size: 13px; white-space: nowrap; line-height: 22px; }
.al.err, .al.error { background: var(--red-soft); border-color: var(--red-line); }
.al.err .ic { background: var(--red); }
.al.err .lab, .al.error .lab { color: var(--red); }
.al.warn, .al.warning { background: var(--amber-soft); border-color: var(--amber-line); }
.al.warn .ic { background: var(--amber); }
.al.warn .lab, .al.warning .lab { color: var(--amber); }
.al.success, .al.info { background: var(--green-tint); border-color: var(--green-line); }

/* ---------- 12. Stránkování a lišta výběru ---------- */
.pager { display: flex; align-items: center; gap: 16px; padding: 8px 14px; border-top: 1px solid var(--line); font-size: 13px; color: var(--muted); flex-wrap: wrap; }
.pager .pages { display: flex; gap: 4px; margin-left: auto; }
.pager .pages a, .pager .pages span { min-width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; padding: 0 6px; }
.pager .pages span.on { background: var(--green-tint); color: var(--ink); font-weight: 500; }
.selbar, .selbar2 { position: sticky; bottom: 0; z-index: 5; background: #fff; border-top: 2px solid var(--green); box-shadow: 0 -4px 16px rgba(0, 0, 0, .06); padding: 10px 16px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* ---------- 13. Formuláře (popisek nad polem, jeden tok, max ~1000 px) ---------- */
.form { max-width: 1040px; }
.fgrp { display: flex; align-items: center; gap: 10px; margin: 26px 20px 10px; font-size: 15.5px; font-weight: 500; color: var(--ink); white-space: nowrap; }
.fgrp::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.frow, .fld { display: flex; flex-direction: column; gap: 6px; align-items: stretch; padding: 7px 20px; max-width: 1040px; }
.frow .fl, .fld .fl, label.fl { font-size: 14px; color: var(--ink2); line-height: 18px; }
.frow .fh, .fld .fh { font-size: 12.5px; color: var(--muted); line-height: 1.35; }
.frow .in, .frow .sel, .fld .in, .fld .sel { height: 38px; width: 100%; max-width: 560px; }
.frow2, .pair { display: flex; flex-wrap: wrap; gap: 6px 20px; padding: 0 20px; max-width: 1040px; }
.frow2 > .fld, .pair > .fld { flex: 1 1 300px; padding-left: 0; padding-right: 0; }
.frow.miss, .fld.miss { background: var(--amber-soft); }
/* Pole v těle bloku (.pblock-b): vodorovné odsazení dává blok, pole ho nepřidává podruhé – hrany polí lícují s nadpisem bloku (prompt 75). */
.pblock-b .fld, .pblock-b .frow, .pblock-b .frow2, .pblock-b .pair { padding-left: 0; padding-right: 0; }
.req { color: var(--red); margin-left: 3px; }
.cnt { font-size: 12px; color: var(--muted); text-align: right; margin-top: 3px; }
.cnt.bad { color: var(--red); }

/* ---------- 14. Doklady ---------- */
.addbar { padding: 14px 20px; border-bottom: 1px solid var(--line); background: #fff; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.addbar .in { height: 40px; font-size: 15px; border: 1.5px solid var(--green); max-width: 640px; flex: 1 1 360px; }
tr.cdet > td { background: var(--red-soft); border-bottom: 1px solid var(--red-line); padding: 0; height: auto; white-space: normal; }
.cbox { padding: 12px 16px 14px 32px; display: flex; flex-direction: column; gap: 10px; }
.cbox .th { position: static; font-size: 11.5px; }
tr.unsaved > td { background: var(--unsaved-bg); }

/* ---------- 15. Popovery, fotky, dialogy ---------- */
.pop { position: absolute; left: 0; top: 34px; z-index: 8; width: min(560px, 70vw); background: #fff; border: 1px solid var(--line2); border-radius: var(--r-panel); box-shadow: var(--shadow-pop); padding: 14px; text-align: left; white-space: normal; color: var(--ink); }
.ph { position: relative; display: inline-block; vertical-align: middle; }
.thumb { width: 36px; height: 27px; border-radius: 5px; background: #E9EEE2; border: 1px solid var(--line); display: block; cursor: zoom-in; object-fit: cover; }
.thumb.miss { background: #fff; border: 1.5px dashed var(--red); cursor: pointer; }
.thumb.pend { background: var(--amber-soft); border: 1.5px dashed var(--amber); }      /* jen univerzální foto (prompt 35) */
.ph .pv { display: none; position: absolute; left: 46px; top: -12px; z-index: 8; background: #fff; border: 1px solid var(--line2); border-radius: var(--r-panel); box-shadow: var(--shadow-pop); padding: 10px; width: 520px; }
.ph:hover .pv { display: block; }
.ph .pv .img { width: 500px; height: 375px; border-radius: 6px; background: #E9EEE2; display: flex; align-items: center; justify-content: center; color: var(--green-hover); font-size: 13px; }
.ph .pv .cap { display: flex; gap: 10px; align-items: center; margin-top: 8px; font-size: 13px; color: var(--muted); }
.dlg-backdrop { position: fixed; inset: 0; z-index: 40; background: rgba(31, 31, 31, .35); display: flex; align-items: flex-start; justify-content: center; padding-top: 8vh; }
.dlg { background: #fff; border-radius: var(--r-panel); border: 1px solid var(--line2); box-shadow: var(--shadow-pop); width: min(960px, 92vw); max-height: 84vh; overflow: auto; }
.dz { border: 1.5px dashed var(--line2); border-radius: var(--r); padding: 16px; text-align: center; color: var(--ink2); }

/* ---------- 16. Přihlášení (bez menu) ---------- */
.login-page { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: var(--bg); }
.login-box { width: 380px; background: #fff; border: 1px solid var(--line); border-radius: var(--r-panel); padding: 28px; }

/* ---------- 17. Přihlášení – detail ---------- */
.login-box h1 { font-size: 21px; margin: 4px 0 14px; }
.login-brand { font-size: 13px; color: var(--muted); font-weight: 600; text-transform: uppercase; letter-spacing: .04em; }
.login-box .fld { padding: 7px 0; }
.login-box .fld .in { max-width: none; }
.login-row { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.login-row .chkbox { border: 0; padding: 0; height: auto; }
.login-submit { width: 100%; height: 44px; font-size: 16px; margin-top: 18px; }
.login-foot { margin-top: 16px; font-size: 13px; }
.login-box .al { margin-bottom: 10px; }

/* ---------- 18. Doklad (příjemka) ---------- */
.doc-head { flex-direction: row; align-items: flex-start; gap: 18px; padding: 14px var(--content-px); }
.doc-head-main { flex: 1 1 420px; min-width: 0; }
.doc-head .crumbs { font-size: 12px; color: var(--muted); }
.doc-head .doc-title { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 2px; }
.doc-head h1 { font-size: 21px; }
.doc-facts { display: flex; flex-wrap: wrap; gap: 4px 28px; margin-top: 10px; }
.doc-facts .k { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; font-weight: 600; }
.doc-facts .v { font-size: 15px; white-space: nowrap; }
.doc-head .actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.doc-head .actions form { display: inline; }
/* 18a. Příjemka × výdejka na první pohled (prompt 79, Issue #218): barevně jen pracovní hlavička dokladu, plocha zůstává neutrální.
   Příjemka = světlá zelená + tmavě zelený text; výdejka = tlumená tmavší zelená (--doc-out-bg, světlejší než menu) + bílý text. Ikona směru
   = ikony Příjemky / Výdejky z menu; štítek typu / účelu .doc-kind; stav zůstává samostatný .pill. Barvy jen na prvcích hlavičky, ne zděděně
   (okno Zrušit doklad v akcích má vlastní neutrální vzhled). */
.doc-head .doc-ico { width: 30px; height: 30px; flex: 0 0 30px; border-radius: var(--r); display: inline-flex; align-items: center; justify-content: center; background: #fff; color: var(--green-hover); }
.doc-head .doc-kind { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border-radius: 12px; font-size: 13px; font-weight: 500; white-space: nowrap; background: #fff; color: var(--green-hover); border: 1px solid var(--green-line); }
.doc-head .doc-facts > div { max-width: 440px; min-width: 0; }
.doc-head .doc-facts .v { white-space: normal; overflow-wrap: anywhere; }   /* dlouhý název skladu se zalomí uvnitř údaje (nejvýš 440 px), ostatní údaje zůstanou vedle; hlavička nepřeteče */
.work.doc-in { background: var(--green-soft); border-bottom-color: var(--green-line); }
.doc-in .doc-ico { border: 1px solid var(--green-line); }
.doc-in .doc-head-main .crumbs, .doc-in .doc-head-main .crumbs a, .doc-in .doc-head-main h1, .doc-in .doc-facts .k { color: var(--green-hover); }
.doc-in .doc-head-main .crumbs a { text-decoration: underline; }
.doc-in .actions > .btn-ghost { color: var(--green-hover); }
.doc-in .actions > .btn-ghost:hover { background: #fff; }
.work.doc-out { background: var(--doc-out-bg); border-bottom-color: var(--green-hover); }
.doc-out .doc-kind { border-color: #fff; }
.doc-out .doc-head-main .crumbs, .doc-out .doc-head-main .crumbs a, .doc-out .doc-head-main h1, .doc-out .doc-facts .k, .doc-out .doc-facts .v,
.doc-out .doc-facts .v a, .doc-out .doc-facts .v .muted, .doc-out .doc-facts .v.muted { color: #fff; }
.doc-out .doc-head-main .crumbs a, .doc-out .doc-facts .v a { text-decoration: underline; }
.doc-out .doc-facts .v { font-weight: 500; }
.doc-out .actions > .btn-ghost { color: #fff; }
.doc-out .actions > .btn-ghost:hover { background: var(--doc-out-hover); }
.doc-out .actions .btn-primary { box-shadow: 0 0 0 2px #fff; }                 /* hlavní tlačítko nezanikne na zeleném podkladu */
.doc-out .actions .btn:focus-visible { outline-color: #fff; }
.doc-body { display: flex; flex-direction: column; gap: 16px; }
.sh .sh-actions { margin-left: auto; display: flex; gap: 8px; }
.dochead { display: flex; align-items: center; gap: 10px 18px; flex-wrap: wrap; padding: 12px 20px; font-size: 14px; }
.dochead .k { color: var(--muted); font-size: 12.5px; margin-right: 4px; }
.dochead .v { color: var(--ink); white-space: nowrap; }
.dochead .sep { width: 1px; height: 18px; background: var(--line2); }
.fld .ro { height: 38px; line-height: 38px; color: var(--ink2); }
.costs { padding: 0 20px 16px; }
.costs-table th, .costs-table td { position: static; }
.costs-table td { height: 40px; }
.cost-add { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.stabs { margin-left: 8px; display: flex; gap: 6px; flex-wrap: wrap; }                 /* 1366 px: 8 podzáložek se zalomí, nikdy vodorovný posuv (Codex 2. 11. 2026) */
.addbar { display: block; }
.addbar-row { display: flex; gap: 12px; align-items: center; }
.addbar-row strong { white-space: nowrap; font-size: 15px; }
.suggestions { position: relative; }
.sug-list { margin: 8px 0 0; border: 1px solid var(--line2); border-radius: 12px; max-width: min(1100px, 100%); overflow: hidden; background: #fff; }
.sug-item { display: flex; gap: 10px; align-items: center; padding: 7px 10px; font-size: 14px; color: var(--ink); text-decoration: none; border-top: 1px solid var(--line); }
.sug-item:first-child { border-top: 0; }
.sug-item.first, .sug-item.active, .sug-item:hover { background: var(--green-tint); text-decoration: none; }
.sug-item.active { outline: 2px solid var(--green); outline-offset: -2px; }
.sug-item .sug-text { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vpanel { margin: 0 20px 16px; border: 1px solid var(--green-line); border-radius: var(--r-panel); overflow: visible; background: #fff; box-shadow: 0 2px 8px rgba(0, 0, 0, .05); }
.vpanel .vh { padding: 10px 14px; background: var(--green-tint); border-bottom: 1px solid #D9E6C6; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; border-radius: var(--r-panel) var(--r-panel) 0 0; }
.vpanel .vh-label { font-size: 12.5px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.vpanel .vh-actions { margin-left: auto; display: flex; gap: 8px; }
.vpanel .vh-keep { flex: 1 1 100%; display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink2); }
.vpanel th, .vpanel .th { position: static; }
.vpanel th.shade, .vpanel td.shade { background: var(--hover); }
.vpanel th.green { background: var(--green-tint); }
.vpanel .cell.qty { border-color: var(--green); }
.vpanel tr.active > td { background: var(--green-tint); }
.table-wrap { overflow: visible; }
.it .cell, .vpanel .cell { width: 100%; min-width: 0; height: 30px; padding: 2px 6px; font-size: 13.5px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; }
.it .cell.num, .vpanel .cell.num { text-align: right; }
.it .cell.bold { font-weight: 700; }
.it .cell.miss { border-color: #E4B56A; background: var(--amber-soft); }
.it th { padding: 9px 8px; }
.it td { padding: 6px 8px; height: 48px; line-height: 1.25; }
.it td.state { line-height: 1.3; white-space: normal; }
.it tr.unsaved > td { background: var(--amber-soft); }
.it tr.unsaved > td:first-child { box-shadow: inset 3px 0 0 var(--amber); }
.it tr.draft > td { color: var(--muted); }
.it tr.conf > td { background: var(--red-soft); }
.it tr.conf > td:first-child { box-shadow: inset 3px 0 0 var(--red); }
.it tr.void > td { color: var(--muted); text-decoration: line-through; }
.it td.empty { height: 60px; text-align: center; }
.it .sec2 { font-size: 12px; color: var(--muted); }
.rs { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; white-space: nowrap; }
.rs .dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; background: var(--green); }
.rs.amber { color: var(--amber); } .rs.amber .dot { background: var(--amber); }
.rs.grey { color: var(--muted); } .rs.grey .dot { background: #C8CBC3; }
.rs.red { color: var(--red); } .rs.red .dot { background: var(--red); }
.rs .ic { display: inline-flex; width: 15px; height: 15px; border-radius: 50%; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; background: var(--red); }
.cbox-head { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.cbox table { border-collapse: collapse; font-size: 13.5px; width: auto; }
.cbox td, .cbox th { padding: 5px 18px 5px 0; text-align: left; border: 0; white-space: nowrap; height: auto; position: static; background: transparent; }
.cbox th { font-size: 11.5px; color: var(--muted); font-weight: 500; text-transform: uppercase; letter-spacing: .04em; }
.cbox-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.red { color: var(--red); }
.sum { display: flex; gap: 0; align-items: stretch; flex-wrap: wrap; padding: 12px 20px; border-top: 1px solid var(--line2); background: var(--work-bg); font-size: 14px; border-radius: 0 0 var(--r-panel) var(--r-panel); }
.sum > div { padding: 0 24px 0 0; margin-right: 24px; border-right: 1px solid var(--line2); }
.sum > div:last-child { border-right: 0; }
.sum .k { font-size: 12.5px; color: var(--muted); line-height: 16px; white-space: nowrap; }
.sum .v { font-size: 15px; white-space: nowrap; }
.sum .v.strong { font-weight: 500; }
.sum small { font-size: 12.5px; color: var(--muted); font-weight: 400; }

/* ---------- 19. Obecné ---------- */
/* cíl odkazu ani fokusované pole nesmí zůstat pod fixními vrstvami */
.it tr, .vpanel, .vpanel .cell, .addbar, .sec, .al { scroll-margin-top: calc(var(--thead-top) + 12px); }
/* upozornění u prodejní ceny nově založeného produktu (static/js/price_hint.js, Issue #7) – jen informace, uložit jde vždy */
.price-hint { font-size: 12px; line-height: 16px; color: var(--amber); margin-top: 2px; font-weight: 400; white-space: nowrap; }
.fld .price-hint { white-space: normal; }
.price-hint button { background: none; border: 0; padding: 0 2px; font: inherit; font-weight: 500; color: var(--green-dark); text-decoration: underline; cursor: pointer; }
.price-hint button:hover { color: var(--green-hover); }
.margin-low { color: var(--amber); }   /* marže nového produktu pod doporučenou hodnotou (karta › 2, příjemka); bez tučného – úzký sloupec */

/* ---------- 20. Seznam produktů ---------- */
.search-in { position: relative; flex: 1 1 360px; max-width: 520px; }
.frow1 .sel { max-width: 260px; }
.search-in svg { position: absolute; left: 11px; top: 9px; }
.search-in .in { width: 100%; padding-left: 34px; }
.chips .chips-count { margin-left: 4px; }
.chips .chips-count strong { color: var(--ink); font-weight: 500; }
.chips .chips-right { margin-left: auto; display: flex; gap: 14px; align-items: center; }
.chips a.on { font-weight: 500; color: var(--ink); }
.pt td.chk-cell { text-align: center; padding: 0; }
.pt td.photo { overflow: visible; }
/* skutečný malý náhled (Issue #150): jen obrázek – bez zvětšení a běžný kurzor; bez fotky nenápadný prázdný rámeček (univerzální foto zůstává oranžové) */
.pt td.photo .thumb { cursor: default; }
.pt td.photo .thumb.miss, .pt td.photo .thumb.none { background: transparent; border: 1px dashed var(--line2); }
.pt .pid { font-weight: 500; color: var(--ink); }
.pt td.strong { font-weight: 500; color: var(--ink); }
.pt tr.p.open td { border-bottom-color: transparent; }
.pager .pbtn { height: 30px; padding: 0 10px; }
.pager .nums { display: inline-flex; gap: 10px; align-items: center; padding: 0 6px; }
.pager .nums .on { color: var(--ink); font-weight: 500; }
.selbar .strong { font-weight: 500; }
.selbar .sel-label { margin-left: 14px; font-size: 13px; }
.selbar .sel-right { margin-left: auto; display: flex; gap: 8px; }

.btn-sm { height: 28px; padding: 0 10px; font-size: 13px; }
.doc-facts .v.muted, .sum .v.red { color: var(--red); }
.sec2.red { color: var(--red); }

/* ---------- 21. Karta produktu (mockup Main / MainVarianty) ---------- */
.card-head { flex-direction: row; align-items: flex-start; gap: 20px; padding: 14px var(--content-px); }
.card-head .ph .thumb { width: 84px; height: 63px; border-radius: 6px; }
.card-head .ph .pv { left: 94px; }
.card-head-main { flex: 1 1 420px; min-width: 0; }
.card-head .crumbs { font-size: 13px; color: var(--muted); line-height: 16px; }
.card-head .card-title { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; margin-top: 3px; }
.card-head h1 { font-size: 21px; line-height: 28px; letter-spacing: -.01em; }
.card-head .lat { font-size: 14.5px; }
.card-head .st { font-size: 13.5px; }
.card-head .actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.card-head .actions form { display: inline; }
.stats { display: flex; gap: 0; margin-top: 12px; flex-wrap: wrap; }
.stats > div { padding: 0 22px; border-left: 1px solid var(--line); white-space: nowrap; }
.stats > div:first-child { padding-left: 0; border-left: 0; }
.stats .k { font-size: 12.5px; color: var(--muted); line-height: 16px; }
.stats .v { font-size: 15px; color: var(--ink); margin-top: 2px; line-height: 20px; font-variant-numeric: tabular-nums; }
.stats .v a { color: var(--ink); text-decoration: none; border-bottom: 1px dotted #B9C4AE; }
.stats .v a:hover { color: var(--green-hover); }
.card-body { display: flex; flex-direction: column; gap: 10px; }
.ptabs .filled { margin-left: auto; align-self: center; font-size: 13.5px; color: var(--muted); padding: 0 4px 0 12px; white-space: nowrap; }
@media (max-width: 1400px) { .ptab { padding: 0 10px; font-size: 14px; } .ptabs .filled { font-size: 13px; padding-left: 8px; } }   /* 1366 px: záložky karty bez vodorovného posuvu */
@media (max-width: 1100px) { .ptabs { flex-wrap: wrap; } .ptabs .filled { margin-left: 0; } }       /* úzké okno: záložky se zalomí, stránka se neposouvá do strany (prompt 36) */
.ptabs .filled strong { color: var(--ink); font-weight: 500; }
.cols { padding: 24px 28px 28px; }
.col { display: flex; flex-direction: column; gap: 34px; max-width: 980px; }
.cols.tight .col { gap: 6px; }                                   /* textové řádky (detail objednávky), ne formulářová pole */
.cols.tight .col p { margin: 0; }
.cols.tight .col p.muted { margin-top: 10px; }
.fsec { padding: 4px 0; }
.fsec h3 { margin: 0 0 16px; font-size: 15.5px; font-weight: 500; color: var(--ink); display: flex; align-items: center; gap: 10px; }
.fsec h3 .n { color: var(--muted); font-weight: 400; font-size: 13.5px; }
.fsec .frows { display: flex; flex-direction: column; gap: 14px; }
.fsec .fld { padding: 0; max-width: none; }
.fsec .frow2, .fsec .pair { padding: 0; max-width: none; }
.fsec .fld .lb { font-size: 14px; color: var(--ink2); display: flex; align-items: center; line-height: 18px; }
.fsec .fld.ro .lb { color: var(--muted); }
.fsec .fld .vl { font-size: 14.5px; color: var(--ink); min-height: 38px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.fsec .cell { border: 1px solid var(--line2); border-radius: var(--r); padding: 0 12px; background: #fff; height: 38px; box-sizing: border-box; width: 100%; font-size: 14.5px; }
.fsec textarea.cell { height: 76px; padding: 9px 12px; resize: vertical; line-height: 1.45; font-family: inherit; }
.fsec select.cell { appearance: none; -webkit-appearance: none; padding-right: 28px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%234D4D4D' stroke-width='1.5' fill='none'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; }
.fsec .cell:focus { outline: 2px solid var(--green); outline-offset: -1px; border-color: var(--green); }
.fsec .cell.miss { border-color: #E4B56A; background: var(--amber-soft); }
.shops { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px 10px; max-width: 760px; }
.shop { display: inline-flex; align-items: center; gap: 8px; font-size: 14.5px; height: 36px; padding: 0 10px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; color: var(--ink); cursor: pointer; user-select: none; }
.shop.on { border-color: #B9D39A; background: var(--green-tint); }
.shop.wide { grid-column: span 2; }
.kvt { display: grid; grid-auto-flow: column; grid-template-rows: auto auto; gap: 2px 0; border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; width: max-content; max-width: 100%; }
.kvt span { padding: 5px 0; text-align: center; min-width: 46px; font-size: 13.5px; }
.kvt .k { background: #F6F7F4; color: var(--muted); font-size: 12px; border-bottom: 1px solid var(--line); padding: 5px 8px; }
.kvt .v { color: var(--ink); font-weight: 500; }
.kvt .v.lo { font-weight: 400; color: var(--ink2); }
.note { font-size: 13.5px; color: var(--muted); line-height: 1.45; }
.note b { font-weight: 500; color: var(--ink2); }
.gal-head { padding: 16px 28px 0; display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; }
.gal-head h2 { margin: 0; font-size: 15.5px; font-weight: 500; }
.gal-head .gal-actions { margin-left: auto; display: flex; gap: 8px; align-self: center; }
.figs { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 16px; padding: 20px 28px 8px; }
.fig { border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: #fff; }
.fig .im { aspect-ratio: 4 / 3; background: #E9EEE2; display: flex; align-items: center; justify-content: center; color: var(--muted); font-size: 12.5px; position: relative; overflow: hidden; }
.fig .im img { width: 100%; height: 100%; object-fit: contain; display: block; }   /* skutečný tvar souboru (3:4 i jiný poměr), ne ořez náhledem – Issue #42 */
.fig .lowres { color: #9A5B00; font-weight: 500; }
.unsaved-dialog.crop-dialog { max-width: 640px; width: min(640px, calc(100vw - 32px)); }
.crop-dialog .crop-help { margin: 0 0 10px; font-size: 13.5px; color: var(--ink2); }
.crop-dialog .crop-orient { display: flex; gap: 16px; align-items: center; margin: 0 0 10px; font-size: 14px; }
.crop-dialog .crop-stage { display: flex; justify-content: center; background: #F3F5EF; border-radius: 8px; padding: 10px; }
.crop-dialog .crop-frame { position: relative; overflow: hidden; background: #fff; outline: 2px solid var(--green, #81B644); cursor: grab; touch-action: none; max-width: 100%; }
.crop-dialog .crop-frame img { position: absolute; left: 0; top: 0; max-width: none; transform-origin: 0 0; user-select: none; pointer-events: none; }
.crop-dialog .crop-zoom { display: flex; gap: 10px; align-items: center; margin: 12px 0 14px; font-size: 14px; }
.crop-dialog .crop-zoom input { flex: 1; }
.crop-dialog .crop-info { margin: -6px 0 14px; font-size: 13px; color: var(--muted); min-height: 1.4em; }
.fig.warn { border-color: #E4B56A; }
.fig .b { padding: 8px 10px 10px; }
.fig .b .cell { height: 30px; font-size: 13px; padding: 0 8px; border-radius: 6px; border: 1px solid var(--line2); width: 100%; }
.fig .acts { display: flex; justify-content: space-between; margin-top: 6px; font-size: 13px; }
.fig .bd { position: absolute; left: 8px; top: 8px; font-size: 11.5px; font-weight: 500; padding: 1px 7px; border-radius: 9px; line-height: 16px; }
.fig .bd.main { background: var(--green-soft); color: var(--green-hover); }
.fig .bd.warn { background: var(--amber-soft); color: var(--amber); }
.fig .bd.pend { background: var(--amber-soft); color: var(--amber); }                       /* univerzální foto (prompt 35) – zástupná, ne vlastní */
.gal-photo-state { flex-basis: 100%; margin: 0; font-size: 13.5px; color: var(--amber); }
.gal-photo-state.err { color: var(--red); }
.fig-add { border: 1.5px dashed var(--line2); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--green-dark); font-size: 13.5px; text-decoration: none; text-align: center; line-height: 1.45; min-height: 120px; cursor: pointer; }
.fig-add:hover, .fig-add.over { background: var(--green-tint); text-decoration: none; }
.fig .gal-btns { display: flex; gap: 2px; }
.fig .gal-btns .lnk { background: none; border: 0; padding: 0 4px; color: var(--green-dark); cursor: pointer; font-size: 14px; line-height: 20px; border-radius: 4px; }
.fig .gal-btns .lnk:hover { background: var(--green-tint); }
.fig .gal-btns .lnk.danger { color: var(--red); }
.gal-foot { margin: 12px 28px 18px; padding-top: 12px; border-top: 1px solid var(--line); font-size: 14px; display: flex; gap: 22px; align-items: center; flex-wrap: wrap; color: var(--ink2); }
.gal-foot .k { color: var(--muted); }
.gal-foot .right { margin-left: auto; font-size: 13.5px; }
/* část 2 – tabulka variant */
.vt-wrap { overflow-x: auto; container-type: inline-size; }
.vt-wrap .tt th { position: static; }                                        /* uvnitř posuvného obalu nejde lepit k hlavičce stránky – lepila se o --thead-top níž (Dostupnosti, Dodavatelé, Hromadné úpravy) */
.vt { border-collapse: collapse; width: 100%; table-layout: auto; font-size: 14px; }
.vt .th { position: static; padding: 9px 6px; }
.vt .td { padding: 7px 6px; height: auto; white-space: nowrap; overflow: visible; }
.vt .td.photo { overflow: visible; }
.vt input.cell { width: 72px; }
.vt input.cell.w-pack { width: 64px; }
.vt input.cell.w-height { width: 80px; }
.vt input.cell.w-code { width: 92px; }
.vt select.cell { width: auto; min-width: 60px; }
.vt select.cell.w-avail { width: 128px; }
.vt .td.r, .vt .th.r { text-align: right; }
.vt .td .cell { height: 30px; padding: 2px 6px; font-size: 13.5px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; }
.vt .td .cell.num { text-align: right; }
.vt .td .cell.bold { font-weight: 700; }
.vt .td .cell.miss { border-color: #E4B56A; background: var(--amber-soft); }
.vt .td .cell.sel { padding-right: 22px; }
.vt .code { font-size: 15px; font-weight: 700; color: var(--ink); text-decoration: none; }
.vt .code:hover { color: var(--green-hover); }
.vt .vphoto { display: flex; width: 48px; height: 36px; border-radius: 6px; border: 1px solid #D9E6C6; background: #F2F8EA; font-size: 10px; color: var(--ink2); align-items: center; justify-content: center; text-decoration: none; overflow: hidden; }
.vt .vphoto img { width: 100%; height: 100%; object-fit: cover; }
.vt .vphoto.none { border: 2px solid var(--green); background: var(--red-soft); color: var(--red); font-weight: 700; text-align: center; line-height: 1.1; }
.vt tr.new > .td { background: var(--green-tint); }
/* rozbalený řádek Ceny v shopech: obsah se drží levého okraje posuvného okna, i když je tabulka odscrollovaná */
.vt .shop-prices-box { position: sticky; left: 0; display: inline-block; max-width: calc(100cqw - 12px); overflow-x: auto; padding: 2px 0; }
.vt .shop-prices-box .tt th { position: static; }
.vt tr.new > .td:first-child { box-shadow: inset 3px 0 0 var(--green); }
.vt .sub { font-size: 11px; color: var(--amber); }
.vt .wh { font-size: 12px; color: var(--muted); }
.card-foot { display: flex; gap: 10px; align-items: center; justify-content: flex-end; padding: 10px 0 8px; border-top: 1px solid var(--line); margin-top: 4px; }
.card-foot .left { margin-right: auto; font-size: 13.5px; color: var(--muted); }
.menu-wrap { position: relative; }
.menu-wrap .menu { display: none; position: absolute; right: 0; top: 38px; z-index: 30; background: #fff; border: 1px solid var(--line2); border-radius: var(--r-panel); box-shadow: var(--shadow-pop); min-width: 240px; padding: 6px 0; }
.menu-wrap.open .menu { display: block; }
.menu-wrap .menu a, .menu-wrap .menu button { display: block; width: 100%; text-align: left; padding: 8px 14px; font-size: 14px; color: var(--ink); background: transparent; border: 0; cursor: pointer; text-decoration: none; }
.menu-wrap .menu a:hover, .menu-wrap .menu button:hover { background: var(--hover); }
.menu-wrap .menu .danger { color: var(--red); }
.menu-wrap .menu .sep { height: 1px; background: var(--line); margin: 6px 0; }

.checks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 14.5px; }
.checks li a { color: var(--ink); }
.checks li.st { color: var(--ink); }
.checks li.st.err a, .checks li.st.warn a { color: inherit; }
.fsec .cnt { font-size: 12px; color: var(--muted); text-align: right; margin-top: 3px; }
.fsec .cnt.bad { color: var(--red); }

/* 19b. Diagnostika (rozbalitelná surová data, např. detail objednávky – Codex 2. 11. 2026) */
details.diag { margin-top: 8px; font-size: 13px; }
details.diag summary { cursor: pointer; color: var(--muted); }
details.diag pre { margin: 6px 0 0; padding: 8px 10px; background: var(--hover); border: 1px solid var(--line2); border-radius: var(--r); font-size: 12px; line-height: 1.4; max-height: 320px; overflow: auto; white-space: pre-wrap; }

/* 20a. Přehled objednávek – nedokončené mapování skupin (Codex 2. 11. 2026) */
.tt tr.warn-row td { background: var(--amber-soft); }
.tt tr.unmapped td:last-child .cell { border-color: var(--amber-line); background: var(--amber-soft); }

/* 20b. Seznam produktů – Více filtrů a nedostupné prvky (Codex 2. 11. 2026) */
.more-filters { width: 100%; padding: 8px 10px; border: 1px dashed var(--line); border-radius: var(--r-panel); background: var(--hover); }
.more-filters .chkbox { border: 0; padding: 0; height: auto; }
.chips-right .off, .off[aria-disabled="true"] { color: var(--muted); cursor: not-allowed; text-decoration: none; border-bottom: 1px dotted var(--line); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .55; cursor: not-allowed; }

/* 21c. Kompaktní blok kontrol na kartě (Codex 2. 11. 2026): souhrn + první blokující, zbytek rozbalitelně po skupinách */
.card-checks { border: 1px solid var(--line); border-radius: var(--r-panel); background: #fff; padding: 8px 14px; font-size: 14px; }
.card-checks.has-block { background: var(--red-soft); border-color: var(--red-line); }
.card-checks.has-warn { background: var(--amber-soft); border-color: var(--amber-line); }
.cc-sum { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; line-height: 24px; }
.cc-sum .cc-b, .cc-sum .cc-w { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; white-space: nowrap; }
.cc-sum .cc-b { color: var(--red); }
.cc-sum .cc-w { color: var(--amber); }
.cc-sum .cc-b .ic { background: var(--red); }
.cc-sum .cc-w .ic { background: var(--amber); }
.cc-sum .ic, .cc-list .ic { display: inline-flex; width: 16px; height: 16px; border-radius: 50%; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; flex: 0 0 16px; }
.cc-groups { display: inline-flex; flex-wrap: wrap; gap: 4px 10px; color: var(--ink2); font-size: 13px; }
.cc-groups .cc-g { white-space: nowrap; }
.cc-groups .cc-g b { font-weight: 500; color: var(--ink); }
.cc-right { margin-left: auto; display: inline-flex; align-items: center; gap: 12px; }
.cc-right .more { font-size: 13px; white-space: nowrap; }
.cc-list { margin: 4px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 2px; }
.cc-list li { line-height: 22px; display: flex; align-items: center; gap: 8px; }
.cc-list li a { color: var(--ink); }
.cc-list li a:hover { color: var(--green-hover); }
.cc-list li.b .ic { background: var(--red); }
.cc-list li.w .ic { background: var(--amber); }
.cc-all { margin-top: 8px; padding-top: 8px; border-top: 1px solid rgba(0,0,0,.08); display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 8px 24px; }
.cc-gh { font-weight: 500; font-size: 13px; color: var(--ink2); margin-bottom: 2px; }

/* 21a. Detail varianty v části 2 (Codex 2. 11. 2026): řádek pod variantou – identifikace, sklady a pozice, rezervace, nákup */
.vt .vdetail { position: sticky; left: 0; box-sizing: border-box; width: calc(100cqw - 12px); max-width: calc(100cqw - 12px); display: flex; flex-wrap: wrap; gap: 16px 28px; padding: 10px 8px 12px; }
.vdetail .vd-col { flex: 0 1 auto; min-width: 240px; max-width: 460px; }
.vdetail .tt { width: auto; }
.vdetail h4 { margin: 0 0 8px; font-size: 13.5px; font-weight: 500; color: var(--ink); display: flex; gap: 8px; align-items: baseline; }
.vdetail h4 .n { color: var(--muted); font-weight: 400; font-size: 12.5px; }
.vdetail .kv { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; font-size: 13.5px; line-height: 22px; }
.vdetail .kv .k { color: var(--muted); }
.vdetail .kv .v { text-align: right; white-space: nowrap; }
.vdetail .fld { margin-bottom: 8px; }
.vdetail .fld .cell { width: 100%; max-width: 200px; }
.vdetail .ean-now { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; } .vdetail .ean-now .cell { width: 160px; } .vdetail .ean-now .btn { user-select: none; }   /* „Přiřadit EAN ihned“ u nové varianty (prompt 71) */
.vdetail .tt th, .vdetail .tt td { font-size: 13px; padding: 4px 8px; }
.vdetail .tt thead th { position: static; }                                   /* vnořená tabulka: hlavička nelepí (sticky patří jen hlavní tabulce) */
.vdetail .pill { background: #EEF0EA; color: var(--ink2); }
.vdetail .note { margin-top: 6px; }
.vt a[aria-expanded="true"] { font-weight: 500; }

/* 21b. Neuložené změny karty (Codex 2. 11. 2026): pilulka u Uložit, tečka u aktivní záložky, dialog Uložit / Zahodit / Zůstat */
.unsaved-pill { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 14px; background: var(--amber-soft); border: 1px solid var(--amber-line); color: var(--amber); font-size: 13px; font-weight: 500; white-space: nowrap; }
.unsaved-pill::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--amber); }
.ptab.dirty::after { content: "•"; color: var(--amber); margin-left: 6px; font-size: 18px; line-height: 0; }
.btn.btn-attention { box-shadow: 0 0 0 3px var(--amber-line); }
.unsaved-dialog { border: 1px solid var(--line); border-radius: var(--r-panel); padding: 20px 22px; max-width: 460px; width: calc(100% - 32px); font: inherit; color: var(--ink); box-shadow: 0 12px 40px rgba(0,0,0,.18); }
.unsaved-dialog::backdrop { background: rgba(20, 30, 10, .35); }
.unsaved-dialog h2 { margin: 0 0 8px; font-size: 17px; font-weight: 500; }
.unsaved-dialog p { margin: 0 0 16px; font-size: 14px; line-height: 1.45; color: var(--ink2); }
.unsaved-dialog .row { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.confirm-dialog { max-width: 560px; }                     /* Zrušit celý doklad (Issue #30) – stejný dialog jako Neuložené změny */
.confirm-dialog .confirm-list { margin: 0 0 14px; padding-left: 18px; font-size: 14px; line-height: 1.45; color: var(--ink2); }
.confirm-dialog .ta { margin: 6px 0 16px; }
.confirm-dialog .al { margin: 0 0 12px; }

/* ---------- 22. Přehled ---------- */
.tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px; }
.tile { display: block; background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-panel); padding: 14px 18px; text-decoration: none; color: var(--ink); }
.tile:hover { border-color: var(--green); text-decoration: none; }
.tile .k { font-size: 13px; color: var(--muted); }
.tile .v { font-size: 28px; font-weight: 500; line-height: 1.2; margin-top: 4px; font-variant-numeric: tabular-nums; }
.tile.warn .v { color: var(--amber); }
.tile.on { border-color: var(--green); background: var(--green-tint); }
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 16px; }
.two-col .tt th { position: static; }
.sec + .two-col { margin-top: 16px; }

/* ---------- 23. Popisy: Náhled × HTML, vizuální editor (zadání v2, 31. 10. 2026) ---------- */
/* přepínač (templates/_text_view.html): html[data-textview] nastaví server podle předvolby uživatele */
.textview .btn[aria-pressed="true"] { background: var(--panel-2, #eef3ee); font-weight: 500; border-color: var(--line-strong, #b9c4b9); }
html[data-textview="html"] .tx-view { display: none !important; }
html:not([data-textview="html"]) .tx-src { display: none !important; }
.tx-view { white-space: normal; word-break: break-word; line-height: 1.5; }
.tx-view p { margin: 0 0 .6em; } .tx-view ul, .tx-view ol { margin: 0 0 .6em 1.2em; padding: 0; }
.tx-view h1, .tx-view h2, .tx-view h3, .tx-view h4 { font-size: 1.05em; margin: .6em 0 .3em; }
.tx-view img { max-width: 100%; height: auto; } .tx-view table { border-collapse: collapse; } .tx-view td, .tx-view th { border: 1px solid var(--line); padding: 2px 6px; }
/* pole s HTML popisem (static/js/text_editor.js): stav "" = náhled, "text" = editor, "html" = kód */
.htmlprev { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; background: var(--panel); font-size: 13.5px; max-height: 420px; overflow: auto; }
.htmlprev .edit-html { margin-top: 8px; display: flex; gap: 6px; }
[data-htmlfield][data-edstate="text"] .htmlprev { display: none !important; }
[data-htmlfield][data-edstate="html"] .tx-view { display: none !important; }
[data-htmlfield][data-edstate="html"] .tx-src { display: block !important; }
.ed-mount { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); font-size: 13.5px; }
.ed-toolbar { display: flex; gap: 4px; flex-wrap: wrap; padding: 6px 8px; border-bottom: 1px solid var(--line); position: sticky; top: 0; background: var(--panel); border-radius: 8px 8px 0 0; z-index: 1; }
.ed-btn { min-width: 30px; padding: 2px 8px; font-size: 13px; }
.ed-btn[aria-pressed="true"] { background: var(--panel-2, #eef3ee); font-weight: 600; border-color: var(--line-strong, #b9c4b9); }
.ed-btn.ed-align { display: inline-grid; place-items: center; padding: 2px 6px; }           /* zarovnání (Issue #95): ikona čar, popis v title / aria-label */
.ed-btn.ed-align[data-align="left"] { margin-left: 6px; }                                   /* oddělení skupiny zarovnání od seznamů */
.ed-area .ProseMirror { min-height: 120px; max-height: 480px; overflow: auto; padding: 10px 12px; outline: none; line-height: 1.5; white-space: pre-wrap; word-break: break-word; }
.ed-area .ProseMirror:focus { box-shadow: inset 0 0 0 2px var(--green-soft, #d8e8d8); }
.ed-area .ProseMirror p { margin: 0 0 .6em; } .ed-area .ProseMirror ul, .ed-area .ProseMirror ol { margin: 0 0 .6em 1.2em; padding: 0; }
.ed-area .ProseMirror h1, .ed-area .ProseMirror h2, .ed-area .ProseMirror h3, .ed-area .ProseMirror h4, .ed-area .ProseMirror h5 { font-size: 1.05em; margin: .6em 0 .3em; }
.ed-area .ProseMirror a { color: var(--green); text-decoration: underline; }
.ed-mount.ed-readonly { border-style: dashed; }
.ed-mount.ed-readonly .ProseMirror { min-height: 0; }
.ed-bar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 6px; font-size: 12.5px; }
.ed-msg { color: var(--muted); } .ed-msg.warn { color: var(--amber); } .ed-msg.info { color: var(--muted); }
/* překlad vedle češtiny (karta › 3 Texty) */
.beside { border: 1px dashed var(--line); border-radius: 8px; padding: 8px 12px; background: var(--panel); font-size: 13.5px; margin-top: 6px; }
.beside .k { font-size: 12px; color: var(--muted); margin-bottom: 4px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.beside .tx { white-space: pre-wrap; word-break: break-word; }
/* prompt 73: překlad vedle češtiny ve dvou sloupcích (čeština vlevo, překlad vpravo); užší okno = pod sebou */
.fld-cz { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
@media (min-width: 1200px) {
  .frows.beside-on > .fld { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 18px; align-items: start; }
  .frows.beside-on > .fld > .beside-slot .beside { margin-top: 0; }
}

/* české texty (karta › 3 Texty, zadání v2): generování, kandidát, platná čeština, podklady */
.gen-box { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); margin: 0 0 12px; font-size: 13.5px; }
.gen-box > summary { padding: 8px 12px; cursor: pointer; }
.gen-box .gen-body { padding: 4px 12px 12px; }
.inline-opt > summary { cursor: pointer; font-size: 12.5px; }
/* Karta › 3 › Vybrat, co generovat (integrace #196, zpětná vazba Jana / Codex k #177): připomínka a volba AI modelu v jednom řádku lícují
   spodní hranou – zavřená volba má výšku pole (text uprostřed), otevřená = popisek nad polem jako .lf-fld; při zúžení se řádek zalomí */
.gen-opts { align-items: flex-end; }
.gen-opts > .inline-opt > summary { padding: 8px 0; line-height: 18px; }
.gen-opts > .inline-opt[open] > summary { padding: 0 0 3px; }
.gen-opt-f { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-height: 34px; }
.cand { border: 1px solid var(--line-strong, #b9c4b9); border-left: 4px solid var(--green); border-radius: 8px; padding: 8px 12px; margin-top: 8px; background: var(--panel); font-size: 13.5px; }
.cand .k { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 6px; font-size: 12.5px; }
.cand .tx, .live-box .tx { white-space: pre-wrap; word-break: break-word; }
.cand ins, .diffw ins { background: var(--green-soft); text-decoration: none; } .cand del, .diffw del { background: var(--red-soft); text-decoration: line-through; }
.live-box { margin-top: 6px; font-size: 13px; }
.live-box > summary { cursor: pointer; }
.live-box .tx { border: 1px dashed var(--line); border-radius: 8px; padding: 8px 12px; margin-top: 4px; background: var(--panel); }
.research { font-size: 13.5px; } .research ul { margin: 0 0 8px 1.2em; padding: 0; } .research p { margin: 4px 0; }
.fld .tr-err { font-size: 12.5px; color: var(--red); margin-top: 4px; } .fld .tr-warn { font-size: 12.5px; color: var(--amber); margin-top: 4px; }

/* 21d. Upozornění na stejný / podobný produkt při zakládání (Issue #44): nejbližší shoda + nejvýš tři další, bez rozcestníku */
.unsaved-dialog.dup-dialog { max-width: 620px; width: min(620px, calc(100vw - 32px)); }
/* Karta › 3: výběr jazyků k zařazení překladů (prompt 72) */
.unsaved-dialog.tt-dialog { max-width: 680px; width: min(680px, calc(100vw - 32px)); }
.tt-dialog .tt-sel-bar { display: flex; gap: 6px; margin: 0 0 8px; }
.tt-dialog .tt-choices { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 6px; max-height: 52vh; overflow-y: auto; }
.tt-dialog .tt-choice label { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 10px; row-gap: 2px; padding: 8px 10px; border: 1px solid var(--line); border-radius: var(--r); cursor: pointer; font-size: 13.5px; line-height: 1.4; }
.tt-dialog .tt-choice input { grid-row: span 3; margin-top: 3px; }
.tt-dialog .tt-choice .tt-c-main, .tt-dialog .tt-choice .tt-c-st, .tt-dialog .tt-choice .tt-c-f { grid-column: 2; }
.tt-dialog .tt-choice.lbox-missing .sym { color: var(--red); } .tt-dialog .tt-choice.lbox-ok .sym { color: var(--green); }
.tt-dialog .tt-choice.off label { cursor: default; background: var(--bg); color: var(--ink2); }
.tt-dialog .tt-summary { margin: 0 0 8px; color: var(--ink); }
.dup-dialog .dup-typed { margin-bottom: 10px; }
.dup-list { display: flex; flex-direction: column; gap: 6px; margin: 0 0 16px; }
.dup-item { display: grid; grid-template-columns: 48px 1fr; gap: 10px; align-items: center; padding: 6px 8px; border: 1px solid var(--line); border-radius: var(--r-panel); font-size: 13.5px; }
.dup-item.closest { border-color: var(--amber); background: var(--amber-soft); }
.dup-thumb { width: 48px; height: 36px; background: #F3F5EF; border-radius: 4px; display: flex; align-items: center; justify-content: center; }
.dup-thumb img { max-width: 48px; max-height: 36px; object-fit: contain; }
.dup-name { font-weight: 500; }
.dup-meta { display: block; font-size: 12.5px; margin-top: 2px; }
.dup-more { font-size: 12.5px; padding-left: 4px; }

/* 21e. Parametry variant (Issue #50): jeden editor pro Nový produkt, novou variantu i detail varianty; hodnota celá (dlouhý text se posouvá v poli, celý v titulku) */
.vparams { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.vp-rows { display: flex; flex-direction: column; gap: 6px; }
.vp-row { display: grid; grid-template-columns: minmax(140px, 200px) minmax(180px, 1fr) auto auto; gap: 8px; align-items: center; }
.vp-row .vp-value { width: 100%; min-width: 0; }
.vp-note { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.vp-note.warn { color: var(--amber); }
.vp-remove { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 14px; padding: 2px 6px; }
.vp-remove:hover { color: var(--red); }
.vparams .vp-add { align-self: flex-start; }
/* souhrn parametrů v řádku varianty (prompt 33): štítky vedle sebe přes celou šířku buňky, zalomení až při nedostatku místa, celý text bez výpustky */
.vp-chips-cell { white-space: normal; overflow: visible; }
.vp-chips { display: flex; flex-wrap: wrap; gap: 3px 4px; max-width: none; width: 100%; padding: 2px 0; }
.vp-chip { display: inline-block; max-width: 100%; white-space: normal; overflow-wrap: anywhere; line-height: 1.35; font-size: 12.5px; padding: 1px 6px; border-radius: 4px; background: var(--hover); border: 1px solid var(--line); }
.vp-chip b { font-weight: 500; color: var(--muted); }
.vrows { display: flex; flex-direction: column; gap: 12px; }
.vrow { border: 1px solid var(--line); border-radius: var(--r-panel); padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; }
.vrow-head { display: flex; justify-content: space-between; align-items: center; font-weight: 500; }
.vrow-ids { display: grid; grid-template-columns: repeat(3, minmax(140px, 220px)); gap: 10px; }
.vrow-ids > .fld { padding-left: 0; padding-right: 0; }     /* pole ve sloupcích mřížky: mřížka dává mezery, pole nepřidává vlastní odsazení (prompt 75) */
.vdetail .vd-col.vd-params { flex: 1 1 440px; min-width: 360px; max-width: 640px; }
.vp-missing { margin: 6px 0; }

/* 21g. Karta › 2: seznam variant × detail jedné varianty, prodej v kanálech, slevy varianty; karta › 1: přehled kanálů (Issue #56, prompt 22) */
.vd-back { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 10px 12px; border: 1px solid var(--green-line); border-bottom: 0; border-radius: var(--r) var(--r) 0 0; background: var(--green-tint); }
.vd-back .vd-badge { margin-left: auto; padding: 2px 8px; border-radius: 6px; background: var(--green-soft); color: var(--green-hover); font-size: 12px; font-weight: 500; }
.vt.detail-open { outline: 1px solid var(--green-line); outline-offset: -1px; }
.vt tbody.vgroup.open > tr > .td { background: var(--green-tint); }
.vt tbody.vgroup.open > tr.vsum > .td:first-child { box-shadow: inset 3px 0 0 var(--green); }
.vt tbody.vgroup.open > tr.variant-detail > .td:first-child { box-shadow: inset 3px 0 0 var(--green); }
.vt tr.variant-detail > .td { white-space: normal; padding: 4px 12px 16px; }
.vt .vd-title { position: sticky; left: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 16px; justify-content: space-between; padding: 10px 0; border-top: 1px solid var(--green-line); max-width: calc(100cqw - 24px); }
.vt .vd-title h3 { margin: 0; font-size: 15px; font-weight: 500; }
.vt .vd-title h3 .code { color: var(--green-dark); font-size: 15px; }
.vt .vd-title .vd-tp { font-size: 13px; color: var(--ink2); font-weight: 500; }
.vt .vd-grid { position: sticky; left: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; max-width: calc(100cqw - 24px); }
.vd-block { min-width: 0; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; }
.vd-block h4 { margin: 0 0 10px; font-size: 14px; font-weight: 500; display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: baseline; }
.vd-block h4 .n { color: var(--muted); font-weight: 400; font-size: 12.5px; }
.vd-block h5 { margin: 14px 0 6px; font-size: 13px; font-weight: 500; }
.vd-block .tt { width: 100%; }
.vd-block .vd-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 12px; margin-top: 12px; }
.vd-block .vd-fields .vd-wide { grid-column: 1 / -1; }
.vd-block .vd-fields .cell { width: 100%; box-sizing: border-box; }
/* prompt 51 bod 3: rozbalovací pole s rámečkem a šipkou (Přepravní třída v detailu varianty) – celá plocha je jeden <select> */
.vd-block select.cell.sel-box, select.cell.sel-box { appearance: none; -webkit-appearance: none; display: block; width: 100%; max-width: 380px; height: 36px; box-sizing: border-box; padding: 0 34px 0 10px; font-size: 14px;
  border: 1px solid var(--line2); border-radius: var(--r); cursor: pointer; color: var(--ink);
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1.5l5 5 5-5' stroke='%234D4D4D' stroke-width='1.6' fill='none'/%3E%3C/svg%3E") no-repeat right 12px center; }
.vd-block select.cell.sel-box:hover:not(:disabled), select.cell.sel-box:hover:not(:disabled) { border-color: var(--green-dark); }
select.cell.sel-box:focus-visible { outline: 2px solid var(--green); outline-offset: 1px; border-color: var(--green-dark); }
select.cell.sel-box:disabled { cursor: default; background-color: var(--hover); color: var(--ink2); }
label.lb[for] { cursor: pointer; }
.vd-block .vd-inline { display: flex; flex-wrap: wrap; gap: 6px; }
.vd-block .vd-inline .cell { width: auto; flex: 1 1 110px; }
/* prompt 51 bod 8: sbalený podblok detailu varianty (Jednotka a obsah balení) – za parametry, před Nastavení e-shopů a prodejny */
.vd-sub { margin-top: 14px; border-top: 1px solid var(--line); padding-top: 10px; }
.vd-sub > summary { cursor: pointer; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; list-style: none; border-radius: 4px; }
.vd-sub > summary::-webkit-details-marker { display: none; }
.vd-sub > summary:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
/* rozbalovací šipka (prompt 82): ▸ sbaleno, ▾ rozbaleno – řídí ji jen skutečný stav `details[open]`, nikdy vlastní příznak */
.vd-sub > summary .vd-caret { display: inline-block; width: 10px; color: var(--green-dark); font-size: 12px; line-height: 1; }
.vd-sub > summary .vd-caret::before { content: "▸"; }
.vd-sub[open] > summary .vd-caret::before { content: "▾"; }
.vd-sub > summary .vd-sub-h { font-weight: 500; color: var(--green-dark); font-size: 14px; }
.vd-sub > summary .n { color: var(--muted); font-size: 12.5px; }
.vd-sub[open] > summary { margin-bottom: 10px; }
.vd-units .vd-inline { display: flex; gap: 8px; align-items: center; }
.vd-units .vd-inline .num { flex: 0 0 110px; }
.vd-units .note { margin-top: 8px; font-size: 12.5px; }
.vd-block .fld .sub { color: var(--muted); font-size: 12px; }
.vd-block .vd-stock tfoot th { background: var(--green-tint); font-weight: 600; text-transform: none; letter-spacing: 0; font-size: 13.5px; color: var(--ink); }
.vd-block .kv { display: flex; gap: 8px; font-size: 13px; }
.vd-block .kv .k { color: var(--muted); }
@media (max-width: 1500px) { .vt .vd-grid { grid-template-columns: minmax(0, 1fr); } }   /* 1366 px: bloky pod sebe v pořadí 1 → 2 → 3 → 4, text se nezužuje */
.ch-chips { display: inline-flex; flex-wrap: wrap; gap: 4px; align-items: center; }
.ch-chip { padding: 1px 7px; border-radius: 6px; background: var(--hover); border: 1px solid var(--line); font-size: 12.5px; }
.ch-chip.on { background: var(--green-tint); border-color: var(--green-line); color: var(--green-hover); }
.ch-chip.pos { background: var(--amber-soft); border-color: var(--amber-line); color: var(--amber); }
.ch-chip.none { color: var(--red); }
.ch-src { font-size: 11.5px; color: var(--muted); }
.ch-src-line { margin: 8px 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.ch-badge { padding: 2px 8px; border-radius: 6px; font-size: 12px; font-weight: 500; }
.ch-badge.auto { background: var(--green-soft); color: var(--green-hover); }
.ch-badge.manual { background: var(--amber-soft); color: var(--amber); }
.ch-badge.old { background: var(--hover); color: var(--ink2); }
.ch-list .ch-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 7px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
.ch-list .ch-row.sub { padding-left: 14px; font-size: 13px; }
.ch-list .ch-why { font-size: 12px; color: var(--amber); padding: 2px 0 4px; }
.ch-list .ch-each summary, .ch-prices summary { cursor: pointer; color: var(--green-dark); padding: 8px 0 4px; }
.ch-reset { margin-top: 8px; font-size: 12.5px; }
.ch-note { margin-top: 8px; padding: 8px 10px; background: var(--hover); border-radius: var(--r); }
.vs-panel .vs-head { margin: 6px 0; }
.vs-table th { font-weight: 400; text-align: left; white-space: normal; text-transform: none; letter-spacing: 0; font-size: 13.5px; color: var(--ink); }
.vs-table td.r { text-align: right; white-space: nowrap; }
.vs-table select.cell { min-width: 190px; }
.vd-common > summary { cursor: pointer; list-style: none; }
.vd-common > summary h3 { display: inline-flex; gap: 8px; align-items: baseline; margin: 0; }
.vd-common > summary h3::before { content: "▸"; color: var(--muted); }
.vd-common[open] > summary h3::before { content: "▾"; }
.vd-errsum a { margin-left: 4px; }
.ch-sum { width: auto; min-width: 340px; }
.ch-sum th { font-weight: 400; text-align: left; padding-right: 24px; text-transform: none; letter-spacing: 0; font-size: 13.5px; color: var(--ink); }
.ch-state { padding: 1px 8px; border-radius: 6px; font-size: 12.5px; background: var(--hover); border: 1px solid var(--line); }
.ch-state.all { background: var(--green-tint); border-color: var(--green-line); color: var(--green-hover); }
.ch-state.some { background: var(--amber-soft); border-color: var(--amber-line); color: var(--amber); }
.ch-links { margin-top: 18px; }
.ch-links > summary { cursor: pointer; font-weight: 500; }
.ch-links > div { font-size: 13px; padding: 3px 0; }
/* 21j. Nastavení › Parametry variant (Issue #68): parametr = rozbalovací řádek s hodnotami, stav pilulkou s textem, potvrzení akce nahoře */
.vpa-list { display: flex; flex-direction: column; gap: 6px; max-width: 1180px; margin-top: 10px; }
.vpa-param { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); }
.vpa-param > summary { padding: 8px 12px; cursor: pointer; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.vpa-param.is-off > summary .vpa-name { color: var(--muted); }
.vpa-name { font-weight: 600; }
.vpa-body { padding: 0 12px 10px; }
.vpa-pacts { gap: 10px; flex-wrap: wrap; margin: 2px 0 8px; font-size: 13px; }
.vpa-values tr[data-hit] td:first-child { font-weight: 600; text-decoration: underline; text-decoration-color: var(--green-line); text-underline-offset: 3px; }
.vpa-confirm { border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: 8px; padding: 10px 14px; max-width: 1180px; }
.vpa-confirm h3 { margin: 0 0 6px; font-size: 15px; } .vpa-confirm ul { margin: 0 0 10px 1.2em; padding: 0; font-size: 13.5px; }
.vpa-search { gap: 8px; }
.vpa-values td, .vpa-bulk td { white-space: normal; overflow-wrap: anywhere; }
/* 21k. Karta › 5 Parametry a RP – „Přehledné bloky“ (Issue #74, prompt 34): ohraničené bloky s jemně zelenou hlavičkou, dva sloupce podle místa,
   návody samostatně přes celou šířku, ostatní části sbalené; sbalení jen skrývá (pole zůstávají ve formuláři) */
.pb-title { margin: 4px 0 12px; font-size: 15.5px; font-weight: 500; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
.pb-title .n { color: var(--muted); font-weight: 400; font-size: 13px; }
.pb-col { max-width: 1400px; gap: 0; }                         /* část 5: bloky ve dvou sloupcích potřebují víc než 980 px formulářového sloupce */
.pb-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, max(420px, calc(50% - 8px))), 1fr))   /* nejvýš dva sloupce, pod ~860 px jeden */; gap: 16px; align-items: start; }
.pb-grid .pb-wide { grid-column: 1 / -1; }
.pb-stack { display: flex; flex-direction: column; gap: 16px; min-width: 0; }      /* část 5 (prompt 46): sloupec bloků pod sebou, nezávislý na výšce sousedního */
.pb-after { margin-top: 16px; }
.pb-grid .pblock-b td > .cell { width: 100%; min-width: 0; box-sizing: border-box; }   /* pole v tabulkách bloků se přizpůsobí šířce buňky – v úzkém sloupci nepřetečou ani se neořežou */
.pb-col .chkbox { white-space: normal; height: auto; min-height: 34px; padding-top: 4px; padding-bottom: 4px; max-width: 100%; }   /* dlouhý popisek (seznam je úplný · nepotvrzeno…) se v úzkém okně zalomí */
.pblock { min-width: 0; border: 1px solid var(--line); border-radius: var(--r, 8px); background: #fff; }
.pblock-h { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; padding: 10px 14px; background: var(--green-tint); border-bottom: 1px solid var(--line); border-radius: var(--r, 8px) var(--r, 8px) 0 0; }
.pblock-h h3 { margin: 0; font-size: 14.5px; font-weight: 500; color: var(--green-dark); }
.pblock-h .n { margin-left: auto; color: var(--muted); font-size: 12.5px; font-weight: 400; text-align: right; }
.pblock-b { padding: 12px 14px; min-width: 0; }
.pblock-b .tt { width: 100%; }
.pblock-b .tt td { white-space: normal; }
.pb-wrap { overflow-wrap: anywhere; }
.pb-opts { display: flex; flex-wrap: wrap; gap: 4px 14px; }
/* prompt 51 bod 7: Návody na pěstování – dva rovnoměrné sloupce přes celou šířku bloku, na úzkém displeji jeden */
.pb-guide { border: 0; margin: 0 0 12px; padding: 0; min-width: 0; }
.pb-guide:last-of-type { margin-bottom: 0; }
.pb-guide legend { padding: 0; margin-bottom: 8px; font-size: 14px; }
.pb-guide legend .lat { color: var(--muted); font-size: 12.5px; margin-left: 6px; }
.pb-guide-opts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 24px; }
.pb-guide-opts .chkbox { align-items: flex-start; min-width: 0; overflow-wrap: anywhere; }
@media (max-width: 760px) { .pb-guide-opts { grid-template-columns: 1fr; } }
.pb-pair { display: grid; grid-template-columns: 1fr; gap: 8px; }
.pb-pair .cell { width: 100%; box-sizing: border-box; }
.pb-sub { margin-top: 10px; border-top: 1px solid var(--line); padding-top: 8px; }
.pb-sub > summary { cursor: pointer; color: var(--green-dark); font-size: 13.5px; }
.pb-folds { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; }
.pblock-fold > summary { list-style: none; cursor: pointer; border-bottom: 0; border-radius: var(--r, 8px); }
.pblock-fold > summary::-webkit-details-marker { display: none; }
.pblock-fold > summary h3::before { content: "▸"; display: inline-block; width: 16px; color: var(--muted); font-size: 12px; }
.pblock-fold[open] > summary { border-bottom: 1px solid var(--line); border-radius: var(--r, 8px) var(--r, 8px) 0 0; }
.pblock-fold[open] > summary h3::before { content: "▾"; }
.pblock-fold > summary:focus-visible, .pb-sub > summary:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.pblock-fold .pblock-b .tt { max-width: none !important; }
/* 21l. Karta › 1 Hlavní údaje a › 7 Pokročilé v blocích (Issue #82, prompt 36): stejné bloky jako část 5 (.pblock); vlevo Název a zařazení · Příznaky · Kde
   se prodává, vpravo Rostlinopas · Jen pro nás · Stav vazeb; pod nimi Fotografie přes celou šířku (jeden řádek náhledů, rozbalení, detail snímku) */
.hu-grid { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.hu-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
@media (max-width: 1180px) { .hu-grid { grid-template-columns: minmax(0, 1fr); } }
.hu-blk.fsec { padding: 0; }
.hu-blk .pblock-b { padding: 14px 16px; }
.hu-row3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 16px; align-items: end; }    /* Druh · Daňová kategorie · Stav karty: popisky i pole v jedné výšce */
@media (max-width: 640px) { .hu-row3 { grid-template-columns: minmax(0, 1fr); } }
.hu-eff { margin-top: -8px; }
.hu-blk .ch-sum { min-width: 0; width: 100%; }
.hu-blk .kvt { max-width: 100%; overflow-x: auto; }
/* příznaky: obdélníkové volby vedle sebe, zapnutý = ✓ + zelená; platnost u zapnutého příznaku s jeho názvem */
.pflags { display: flex; flex-wrap: wrap; gap: 8px; }
.pflag { position: relative; display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; border: 1px solid var(--line2); border-radius: var(--r, 8px); background: #fff; padding: 0 4px 0 0; min-height: 38px; max-width: 100%; }
.pchip { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 12px; cursor: pointer; font-size: 14px; color: var(--ink); border-radius: var(--r, 8px); user-select: none; }
.pchip-in { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.pchip-t::before { content: "+ "; color: var(--muted); }
.pflag:has(.pchip-in:checked) { background: var(--green-tint); border-color: var(--green); }
.pflag:has(.pchip-in:checked) .pchip { color: var(--green-hover); font-weight: 500; }
.pflag:has(.pchip-in:checked) .pchip-t::before { content: "✓ "; color: var(--green-hover); }
.pflag:has(.pchip-in:focus-visible) { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.pflag:has(.pchip-in:disabled) .pchip { cursor: default; }
.pdates { display: none; align-items: center; gap: 6px 10px; flex-wrap: wrap; padding: 4px 6px; font-size: 13px; color: var(--ink2); }
.pflag:has(.pchip-in:checked) .pdates { display: inline-flex; }
.pdates-t { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }            /* název pro čtečky; vizuálně je hned vedle */
.pdates label { display: inline-flex; align-items: center; gap: 4px; }
.fsec .pdates .cell { height: 30px; width: 148px; padding: 0 8px; font-size: 13.5px; }
/* fotografie */
.gal-block { margin-top: 16px; }
.gal-block .pblock-h h3 { font-size: 15px; }
.gal-bar { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.gal-bar .gal-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.gal-url { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.gal-url .cell { width: 240px; max-width: 100%; height: 32px; border: 1px solid var(--line2); border-radius: var(--r); padding: 0 10px; font-size: 13.5px; }
.gal-drop { border: 1.5px dashed var(--line2); border-radius: var(--r); padding: 5px 12px; color: var(--green-dark); font-size: 13px; cursor: pointer; }
.gal-drop:hover, .gal-drop.over { background: var(--green-tint); }
.gal-wrap { container-type: inline-size; }
.gal-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; }
.gal-grid.collapsed > .gal-item:nth-child(n+7) { display: none; }
@container (max-width: 900px) { .gal-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } .gal-grid.collapsed > .gal-item:nth-child(n+5) { display: none; } }
@container (max-width: 560px) { .gal-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .gal-grid.collapsed > .gal-item:nth-child(n+4) { display: none; } }
@container (max-width: 380px) { .gal-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .gal-grid.collapsed > .gal-item:nth-child(n+3) { display: none; } }
.gal-item { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.gal-thumb { position: relative; aspect-ratio: 4 / 3; display: flex; align-items: center; justify-content: center; padding: 0; background: #F3F5EF; border: 1px solid var(--line); border-radius: 7px; cursor: pointer; color: var(--muted); font: inherit; font-size: 12.5px; }
.gal-thumb img { width: 100%; height: 100%; object-fit: contain; display: block; border-radius: 6px; }
.gal-thumb.warn { border-color: #E4B56A; }
.gal-thumb[aria-pressed="true"] { outline: 2px solid var(--green); outline-offset: 2px; }
.gal-thumb:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.gal-thumb .bd { position: absolute; left: 6px; top: 6px; font-size: 11.5px; font-weight: 500; padding: 1px 7px; border-radius: 9px; line-height: 16px; background: #fff; color: var(--ink2); border: 1px solid var(--line); }
.gal-thumb .bd.main { background: var(--green-soft); color: var(--green-hover); border-color: transparent; }
.gal-thumb .bd.bd2 { left: auto; right: 6px; }
.gal-thumb .bd.pend { background: var(--amber-soft); color: var(--amber); border-color: transparent; }
.gal-thumb .bd.warn { background: var(--amber-soft); color: var(--amber); border-color: transparent; }
.gal-sub { font-size: 12.5px; color: var(--muted); overflow-wrap: anywhere; line-height: 1.35; }
.gal-foot2 { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; margin-top: 12px; }
.gal-foot2 .note { margin-left: auto; font-size: 13px; }
.gal-empty { color: var(--muted); font-size: 14px; padding: 6px 0 4px; }
.gal-detail { margin-top: 14px; border: 1px solid var(--green-line, var(--line)); border-radius: var(--r, 8px); background: #fff; }
.gal-detail:focus { outline: none; }
.gal-detail:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.gal-detail-h { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 12px; background: var(--green-tint); border-bottom: 1px solid var(--line); border-radius: var(--r, 8px) var(--r, 8px) 0 0; }
.gal-detail-h h4 { margin: 0; font-size: 14px; font-weight: 500; color: var(--green-dark); }
.gal-detail-b { display: grid; grid-template-columns: minmax(180px, 320px) minmax(0, 1fr); gap: 16px; padding: 12px; }
@media (max-width: 760px) { .gal-detail-b { grid-template-columns: minmax(0, 1fr); } }
.gal-detail-im img { width: 100%; aspect-ratio: 4 / 3; object-fit: contain; background: #F3F5EF; border-radius: 6px; display: block; }
.gal-detail-f { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.gal-detail-f .fld .lb { font-size: 13.5px; color: var(--ink2); display: block; margin-bottom: 4px; }
.gal-detail-f .cell { width: 100%; height: 34px; border: 1px solid var(--line2); border-radius: var(--r); padding: 0 10px; font-size: 14px; box-sizing: border-box; }
.gal-assign { border: 0; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 16px; }
.gal-assign legend { font-size: 13.5px; color: var(--ink2); margin-bottom: 4px; padding: 0; }
.gal-assign .note { flex-basis: 100%; font-size: 12.5px; }
.gal-assign .amber { color: var(--amber); }
.gal-detail-acts { display: flex; flex-wrap: wrap; gap: 8px; }
.gal-detail-acts .btn.danger { color: var(--red); }
.gal-block .gal-foot { margin: 14px 0 0; }
/* prompt 51 bod 2: příchod z fotky varianty (karta › 2) – co se vybírá a kam se po uložení vrátí; řádek té varianty zvýrazněný */
.gal-return { margin: 0 0 12px; padding: 10px 14px; border: 1px solid var(--green-line); background: var(--green-tint); border-radius: var(--r); font-size: 14px; color: var(--ink); }
.gal-return a { margin-left: 6px; }
.gal-foot .vimg.on { outline: 2px solid var(--green); outline-offset: 3px; border-radius: 6px; }
/* část 7: sbalené bloky A–F, souhrn chyb, lokální posuv jen u opravdu širokých tabulek */
.p7-folds { margin-top: 0; }
.p7-folds > .fsec { padding: 0; }
.p7-errors { border: 1px solid #E8B4B4; background: #FDF3F3; color: var(--red); border-radius: var(--r, 8px); padding: 10px 14px; margin-bottom: 12px; font-size: 14px; }
.p7-errors a { color: var(--red); text-decoration: underline; }
.p7-scroll { overflow-x: auto; max-width: 100%; }
.p7-scroll .tt { min-width: 640px; }
.p7-scroll .tt thead th { position: static; }                             /* v lokálním posuvu by se sticky hlavička lepila k obalu a překryla řádky */
/* 21m. Karta › 8 Historie (Issue #86, prompt 37): tři bloky pod sebou s jemně odlišenou hlavičkou (změny zeleně, pohyby studeně, doklady teple –
   barva doplňuje nadpis, není nositelem významu), filtry v řádku, kompaktní řádky (~34 px), detail změny po rozkliknutí */
.hist { gap: 16px; }
.hblk-p > .pblock-h { background: #EEF3F6; }                 /* lokální odstín: pohyby – studená šedomodrá (token pro modrou v projektu není) */
.hblk-p > .pblock-h h3 { color: #3D5565; }
.hblk-d > .pblock-h { background: #FBF5EC; }                 /* lokální odstín: doklady – teplá neutrální */
.hblk-d > .pblock-h h3 { color: #6E5530; }
.hfilters { margin-bottom: 10px; }                        /* řádek filtru = sdílené .lf-row / .lf-fld (prompt 75) */
.hreset { align-self: center; font-size: 13.5px; }
.htable td { padding-top: 6px; padding-bottom: 6px; vertical-align: top; line-height: 1.4; }
.htable .nowrap { white-space: nowrap; }
.htable .hdoc { padding-left: 18px; }      /* odstup levě zarovnaného dokladu od číselného Ocenění / Množství */
.htable .hwrap, .htable .hsum { white-space: normal; overflow-wrap: anywhere; }
.hact { font-weight: 500; color: var(--ink); }
.hcat { font-size: 12px; color: var(--muted); margin-left: 6px; }       /* druh změny vedle akce – řádek zůstane jednořádkový */
.htable .hexp-col { width: 44px; }
.hk { color: var(--ink2); }
.hb { color: #8A4B4B; }
.ha { color: var(--green-hover); }
.hexp { background: none; border: 1px solid var(--line2); border-radius: 6px; width: 26px; height: 24px; cursor: pointer; color: var(--ink2); font: inherit; font-size: 12px; }
.hexp:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 1px; }
.hdetail > td { background: #FAFBF8; white-space: normal; }
/* vnořená tabulka detailu: obecná pravidla `.tt th/td` (lepící hlavička, pevná výška, nowrap, ořez) platí jen pro hlavní tabulku */
.htable .hdetail > td { height: auto; overflow: visible; }
.htable .hchanges th { position: static; height: auto; background: none; border-bottom: 1px solid var(--line); vertical-align: bottom; }
.htable .hchanges td { height: auto; white-space: normal; overflow: visible; text-overflow: clip; border-bottom: 1px solid var(--line); }
.htable .hchanges tr:last-child > td { border-bottom: 0; }
.htable .hchanges tr:hover > td { background: none; }
.htable .hdetail:hover > td { background: #FAFBF8; }
.hchanges { border-collapse: collapse; margin: 4px 0 8px; font-size: 13.5px; width: 100%; }
.hchanges th { text-align: left; font-weight: 500; color: var(--muted); font-size: 12px; padding: 3px 12px 3px 0; text-transform: none; letter-spacing: 0; }
.hchanges td { padding: 3px 12px 3px 0; vertical-align: top; overflow-wrap: anywhere; }
.hchanges td:first-child { width: 24%; color: var(--ink2); }
.hnote { font-size: 13.5px; margin: 4px 0 8px; overflow-wrap: anywhere; }
.htech summary { cursor: pointer; font-size: 13px; color: var(--green-dark); }
.htech dl { margin: 6px 0 0; display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 2px 12px; font-size: 12.5px; }
.htech dt { color: var(--muted); }
.htech dd { margin: 0; }
.htech pre { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12px; font-family: var(--mono, ui-monospace, monospace); }
.hempty { color: var(--muted); font-size: 14px; padding: 6px 0; }
.hpager { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-top: 10px; font-size: 13.5px; }
.hstat { padding: 1px 8px; border-radius: 6px; font-size: 12.5px; background: var(--hover); border: 1px solid var(--line); white-space: nowrap; }
.hstat-closed, .hstat-settled { background: var(--green-tint); border-color: var(--green-line); color: var(--green-hover); }
.hstat-open, .hstat-pending { background: var(--amber-soft); border-color: var(--amber-line); color: var(--amber); }
.hstat-cancelled, .hstat-rejected { background: var(--red-soft); border-color: var(--red-line); color: var(--red); }
.hitem { display: inline-block; margin-right: 14px; }
/* 21n. Nová příjemka / Nová výdejka v sekcích (Issue #92, prompt 44): bloky `.pblock` z 21k pod sebou, malé pořadové označení,
   jedno pořadí polí jako dřív; dvojice vedle sebe zarovnané nahoře, na úzké ploše pod sebou. Jen tyto dva formuláře (.dn-form). */
.dn-form { max-width: 1040px; }
.dn-form > form { display: flex; flex-direction: column; gap: 16px; }
.dn-sec .pblock-h { align-items: center; gap: 10px; }
.dn-step { display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 5px; background: var(--green-soft); color: var(--green-dark); font-size: 12px; font-weight: 500; flex: none; }
.dn-sec .pblock-b { padding: 8px 14px 10px; }                  /* stejné odsazení jako ostatní bloky; pole ho nepřidávají (prompt 75) */
.dn-sec .pair { align-items: flex-start; }                     /* dvojice: stejná horní hrana i při nápovědě / doplňujícím textu pod jedním polem */
.dn-sec .fld .sel, .dn-sec .fld .in { min-width: 0; }
.dn-sec .fld select.sel { text-overflow: ellipsis; }           /* dlouhý název dodavatele / skladu: výběr nepřeteče, celý název je v rozbalení */

/* 21f. Příjemka › Výběr variant (Issue #52): všechny vyplněné parametry s názvy čitelně v buňce, EAN jako identifikátor pod vlastní hlavičkou.
   Šířky (kontrola Roman / Codex 5. 11. 2026 – při 1366 px se ořezávala prodejní cena): ceny, množství a sklad mají pevnou šířku podle obsahu
   (12 990 tučně, 1 234,50, nejdelší název skladu), Parametry dostanou zbytek; „Upravit parametry“ je v buňce parametrů, ne ve vlastním sloupci. */
.suggestions .vpanel { margin-left: 0; margin-right: 0; }       /* přesné ID / EAN: odsazení už zajišťuje .addbar, panel má stejnou šířku jako po výběru názvu */
.vp-table th.vp-id, .vp-table td.vp-id { width: 5.5rem; white-space: nowrap; }
.vp-table th.vp-params, .vp-table td.vp-params { white-space: normal; text-align: left; }
.vp-table th.vp-buy, .vp-table td.vp-buy { width: 6.25rem; }       /* 1 234,50 / 12 345,67 celé */
.vp-table th.vp-sell, .vp-table td.vp-sell { width: 5.5rem; }      /* 12 990 / 129 990 tučně celé */
.vp-table th.vp-whsel, .vp-table td.vp-whsel { width: 10rem; }     /* nejdelší název skladu (Zahradní centrum) včetně šipky výběru */
.vp-table th { white-space: normal; line-height: 1.25; }       /* úzké okno (1366): hlavička se zalomí uvnitř buňky, nepřeteče do sousední */
.vp-table th.vp-ean, .vp-table td.vp-ean { width: 8.5rem; white-space: nowrap; text-align: left; font-variant-numeric: tabular-nums; overflow: visible; }
.vp-table td.vp-params .vp-plist { display: flex; flex-wrap: wrap; column-gap: 14px; row-gap: 2px; min-width: 0; flex: 0 1 auto; }   /* parametry vedle sebe, zalomí se až bez místa (Issue #88) */
.vp-table td.vp-params .vp-line { line-height: 1.35; max-width: 100%; overflow-wrap: anywhere; }      /* dlouhá hodnota se zalomí uvnitř, nic se neořízne */
.vp-table td.vp-params .vp-k { color: var(--muted); }
.sug-item .sug-text.sug-multi { white-space: normal; }
.sug-item .sug-variant { display: flex; flex-wrap: wrap; column-gap: 12px; row-gap: 1px; font-size: 12.5px; color: var(--ink); line-height: 1.35; }
.sug-item .sug-p { overflow-wrap: anywhere; }
.sug-head { padding: 6px 10px; font-size: 12.5px; font-weight: 500; color: var(--ink2); background: var(--hover); border-top: 1px solid var(--line2); }
/* prompt 51 bod 9: návrhy podobných názvů – v seznamu produktů nad tabulkou, v liště hledání pod přesnými výsledky */
.sug-box { margin: 0 0 12px; padding: 10px 14px; border: 1px dashed var(--line2); border-radius: var(--r); background: var(--work-bg); font-size: 14px; line-height: 1.7; }
.sug-box a { font-weight: 500; }
.sug-box a.muted { font-weight: 400; font-size: 12.5px; }
#qs-sug .sug-suggest .pill { margin-left: 6px; font-size: 11px; }
.sug-item.sug-similar .pill { flex: none; }
.vpe-current { display: flex; flex-wrap: wrap; column-gap: 14px; row-gap: 2px; font-size: 13.5px; margin-top: 4px; }
.vpe-current .vp-k { color: var(--muted); }
.it td.rvar-td { white-space: normal; overflow: visible; }
.rvar-edit { display: block; margin-top: 2px; padding: 0; border: 0; background: none; font: inherit; font-size: 12.5px; color: var(--green-dark); cursor: pointer; text-align: left; }
.rvar-edit:hover { text-decoration: underline; }
.rvar-edit:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 1px; }
/* prompt 52: celá karta produktu z příjemky (nové okno) a obnova katalogových údajů po jejím uložení */
.rvar-card, .vp-card { display: block; margin-top: 2px; font-size: 12.5px; color: var(--green-dark); text-decoration: none; white-space: normal; }   /* v úzkém sloupci panelu (1366 px) se zalomí, nepřeteče (Issue #128) */
.rvar-card:hover, .vp-card:hover { text-decoration: underline; }
.catalog-refresh-error { margin: 0 0 10px; grid-template-columns: 1fr auto; }
tr.catalog-gone td { background: var(--amber-soft); }
.from-receipt b { font-weight: 600; }
.vp-drafts { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; margin-top: 8px; font-size: 13px; color: var(--ink2); }
.vp-drafts button { font: inherit; font-size: 13px; border: 1px solid var(--amber-line); background: var(--amber-soft); color: var(--ink); border-radius: 6px; padding: 2px 8px; cursor: pointer; }
.vp-drafts button.vp-drop { border-color: var(--line2); background: #fff; color: var(--muted); padding: 2px 6px; }
.vp-table th.shade { font-size: 11.5px; letter-spacing: 0; }
.vp-table th.vp-qty { width: 5.75rem; }                         /* „Množství“ celé i při 1366 px */
.vp-table th.vp-wh, .vp-table td.vp-wh { width: 4.75rem; padding-left: 6px; padding-right: 6px; }   /* názvy skladů (Prodejna) se při 1366 px vejdou celé, bez přetečení do Nákupu */
.vp-table td.vp-params .vp-pwrap { display: flex; flex-wrap: wrap; align-items: center; column-gap: 12px; }   /* široké okno: tlačítko vedle parametrů, úzké: pod nimi */
.vpanel .vp-notice, .vp-notice { margin: 0 14px 8px; padding: 6px 10px; border-radius: 6px; background: var(--green-tint); border: 1px solid var(--green-line); font-size: 13.5px; }
.vpeditor { margin: 0 20px 16px; padding: 12px 14px; border: 1px solid var(--amber); border-radius: var(--r-panel); background: #fff; display: flex; flex-direction: column; gap: 10px; }
.vpeditor .vpe-note { font-size: 13px; color: var(--muted); margin-top: 4px; max-width: 900px; }
.vpeditor .vpe-actions { display: flex; gap: 8px; }
.vpeditor .vrow-ids { grid-template-columns: repeat(2, minmax(140px, 220px)); }

/* 21i. Karta › 4 Kategorie (Issue #66): přiřazené kategorie s cestou + strom podle rodiče (odsazení přes --d), hledání s cestou,
   sbalené účinné zařazení v e-shopech; stav rozbalení v aria-expanded (šipka se otáčí), zásah hledání tučně, ne jen barvou */
.ct-layout { display: grid; grid-template-columns: minmax(320px, 1fr) minmax(360px, 1.1fr); gap: 20px; align-items: start; max-width: 1280px; }
@media (max-width: 1280px) { .ct-layout { grid-template-columns: 1fr; } }
.ct-h { font-weight: 500; margin: 0 0 8px; }
.ct-list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 8px; background: var(--panel); }
.ct-row { display: flex; align-items: center; gap: 10px; padding: 6px 10px; border-top: 1px solid var(--line); font-size: 13.5px; flex-wrap: wrap; }
.ct-row:first-child { border-top: 0; }
.ct-row.is-main { background: var(--green-tint); }
.ct-row.is-main .ct-main span { font-weight: 600; color: var(--green-dark); }
.ct-main { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; cursor: pointer; }
.ct-path { flex: 1; min-width: 180px; }
.ct-acts { display: inline-flex; gap: 4px; margin-left: auto; }
.ct-empty { margin: 8px 0 0; }
.ct-msg { margin: 6px 0 0; font-size: 13px; } .ct-msg:empty { display: none; } .ct-msg.err { color: var(--red); }
.ct-treebox { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); padding: 8px 10px; }
.ct-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.ct-tools input[type=search] { max-width: 320px; flex: 1; }
.ct-tree { list-style: none; margin: 0; padding: 0; max-height: 520px; overflow-y: auto; font-size: 13.5px; }
.ct-node { display: flex; align-items: center; gap: 4px; padding: 2px 4px 2px calc((var(--d, 1) - 1) * 18px + 2px); border-radius: 6px; }
.ct-node:hover { background: var(--hover); }
.ct-tog, .ct-sp { flex: none; width: 22px; height: 22px; }
.ct-tog { border: 0; background: none; padding: 0; cursor: pointer; color: var(--ink2); border-radius: 4px; }
.ct-tog span { display: inline-block; transition: transform .12s; }
.ct-tog[aria-expanded="true"] span { transform: rotate(90deg); }
.ct-tog:focus-visible, .ct-lab input:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 1px; }
.ct-lab { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.ct-root { font-weight: 600; color: var(--ink2); padding-left: 2px; }
/* prompt 51 bod 6: hlavní kategorie (kořen a 1. úroveň pod ním) jemně podbarvené, podkategorie bez podbarvení; výběr = zaškrtnutí + tučný zelený název */
.ct-node.ct-top { background: var(--green-tint); margin-top: 2px; }
.ct-node.ct-top:hover { background: var(--green-soft); }
.ct-node.ct-lvl1 .ct-name { font-weight: 600; }
.ct-node:has(> .ct-lab input:checked) .ct-name { font-weight: 600; color: var(--green-dark); }
.ct-node.ct-hit .ct-name, .ct-node.ct-hit .ct-root { font-weight: 600; text-decoration: underline; text-decoration-color: var(--green-line); text-underline-offset: 3px; }
.ct-node.ct-ctx { color: var(--muted); }
.ct-node.ct-flash { background: var(--amber-soft); box-shadow: inset 0 0 0 1px var(--amber-line); }
.ct-help-link { margin-left: auto; font-size: 13px; font-weight: 400; }
.ct-help { margin-top: 12px; max-width: 1280px; font-size: 13.5px; border: 1px dashed var(--line2); border-radius: 8px; padding: 6px 12px; background: var(--work-bg); }
.ct-help > summary { cursor: pointer; font-weight: 500; }
.ct-help ol { margin: 8px 0 4px 1.2em; padding: 0; } .ct-help li { margin: 4px 0; }
#eff-fold > summary { list-style: none; cursor: pointer; }
#eff-fold > summary::-webkit-details-marker { display: none; }
#eff-fold > summary h3::before { content: "▸"; color: var(--muted); font-size: 12px; }
#eff-fold[open] > summary h3::before { content: "▾"; }
#eff-fold:not([open]) > summary h3 { margin-bottom: 4px; }
.ct-problems { margin: 0 0 8px 1.2em; padding: 0; font-size: 13px; color: var(--red); }

/* 24. Mobilní pracoviště /m/ (Inventura skladu, Změna pozice – Issue #26): 1 sloupec, tlačítka 48–52 px, bez vodorovného posuvu,
   hlášky vždy s ikonou a textem (ne jen barvou). Vlastní hlavička bez administrativního menu; tokeny z :root. */
.mw-body { background: var(--bg); min-height: 100vh; -webkit-text-size-adjust: 100%; }
.mw-head { position: sticky; top: 0; z-index: 20; background: var(--menu-bg); color: var(--menu-text); padding: 10px 16px 8px; padding-top: max(10px, env(safe-area-inset-top)); }
.mw-head-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.mw-act { flex: 1; color: #fff; font-size: 17px; font-weight: 500; text-decoration: none; min-height: 44px; display: inline-flex; align-items: center; }
.mw-act:hover { color: #fff; text-decoration: none; }
.mw-out { margin: 0; flex: 0 0 auto; }
.mw-link { background: transparent; border: 1px solid rgba(255,255,255,.45); color: #fff; border-radius: var(--r); min-height: 44px; padding: 0 12px; font: inherit; font-size: 13.5px; cursor: pointer; }
.mw-ctx { display: flex; flex-wrap: wrap; gap: 2px 14px; font-size: 14px; margin-top: 4px; }
.mw-ctx .k { color: var(--menu-sub); font-size: 12.5px; }
.mw-ctx b { color: #fff; font-weight: 500; overflow-wrap: anywhere; }
.mw-pos-now b { font-size: 17px; }
.mw-main { max-width: 640px; margin: 0 auto; padding: 14px 16px 40px; display: flex; flex-direction: column; gap: 14px; }
.mw-h1 { font-size: 20px; font-weight: 500; margin: 2px 0 0; }
.mw-card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-panel); padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.mw-card-h { font-size: 15.5px; font-weight: 500; }
.mw-note { font-size: 13.5px; color: var(--ink2); margin: 0; }
.mw-note.mw-strong { font-size: 15px; color: var(--ink); }
.mw-lbl { font-size: 14px; color: var(--ink2); }
.mw-in { width: 100%; min-width: 0; min-height: 50px; padding: 0 12px; font: inherit; font-size: 17px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; color: var(--ink); }
.mw-in:focus, .mw-btn:focus-visible, .mw-seg-b:focus-visible, .mw-big:focus-visible, .mw-task:focus-visible, .mw-link:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; }
.mw-in-big { min-height: 56px; font-size: 20px; letter-spacing: .02em; }
.mw-row { display: flex; gap: 8px; align-items: stretch; }
.mw-row .mw-in { flex: 1 1 auto; }
.mw-row .mw-btn { flex: 0 0 auto; }
.mw-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 50px; padding: 0 16px; font: inherit; font-size: 16px; font-weight: 500; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; color: var(--ink); cursor: pointer; text-decoration: none; text-align: center; }
.mw-btn:hover { background: var(--hover); color: var(--ink); text-decoration: none; }
.mw-btn[disabled] { opacity: .45; cursor: not-allowed; }
.mw-primary { background: var(--green); border-color: var(--green); color: #fff; }
.mw-primary:hover { background: var(--green-hover-btn); border-color: var(--green-hover-btn); color: #fff; }
.mw-ghost { background: transparent; border-color: transparent; color: var(--green-dark); }
.mw-danger { color: var(--red); }
.mw-form { display: flex; flex-direction: column; gap: 10px; }
.mw-seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; }
.mw-seg-b { min-height: 48px; padding: 0 6px; border: 1px solid var(--line2); background: #fff; border-radius: var(--r); font: inherit; font-size: 15px; color: var(--ink); cursor: pointer; text-decoration: none; display: flex; align-items: center; justify-content: center; text-align: center; }
.mw-seg-b.on { background: var(--green-tint); border-color: var(--green); color: var(--green-hover); font-weight: 500; box-shadow: inset 0 -3px 0 var(--green); }
.mw-choice { display: flex; flex-direction: column; gap: 14px; }
.mw-area { margin: 18px 0 8px; font-size: 14px; font-weight: 500; color: var(--ink2); text-transform: uppercase; letter-spacing: .04em; }   /* prompt 51: modul nad dlaždicemi */
.mw-area:first-child { margin-top: 0; }
.nav .sub .ext { font-size: 11px; opacity: .8; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.mw-big { display: flex; flex-direction: column; gap: 4px; padding: 20px 18px; min-height: 120px; justify-content: center; border-radius: var(--r-panel); background: var(--panel); border: 2px solid var(--green); color: var(--ink); text-decoration: none; }
.mw-big:hover { background: var(--green-tint); text-decoration: none; color: var(--ink); }
.mw-big .t { font-size: 22px; font-weight: 500; color: var(--green-hover); }
.mw-big .d { font-size: 15.5px; }
.mw-big .n { font-size: 13.5px; color: var(--ink2); }
.mw-big.off { border-color: var(--line2); color: var(--muted); }
.mw-big.off .t { color: var(--muted); }
.mw-tasks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.mw-task { display: flex; flex-direction: column; gap: 2px; padding: 12px 14px; min-height: 52px; border: 1px solid var(--line2); border-radius: var(--r); text-decoration: none; color: var(--ink); background: #fff; }
.mw-task:hover { background: var(--green-tint); text-decoration: none; color: var(--ink); }
.mw-task .t { font-size: 16px; font-weight: 500; }
.mw-task .r { font-size: 13.5px; color: var(--amber); }
.mw-task .s { font-size: 14px; color: var(--green-dark); }
.mw-task.done .s { color: var(--muted); }
.mw-msg, .mw-status { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border-radius: var(--r-panel); border: 1px solid var(--line); background: #fff; font-size: 15px; flex-wrap: wrap; }
.mw-msg .ic, .mw-status .ic { flex: 0 0 22px; width: 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: #fff; background: var(--muted); }
.mw-msg > span:last-child, .mw-status .tx { flex: 1 1 200px; min-width: 0; overflow-wrap: anywhere; }
.mw-msg.error, .mw-status.err { background: var(--red-soft); border-color: var(--red-line); }
.mw-msg.error .ic, .mw-status.err .ic { background: var(--red); }
.mw-msg.warn, .mw-status.warn { background: var(--amber-soft); border-color: var(--amber-line); }
.mw-msg.warn .ic, .mw-status.warn .ic { background: var(--amber); }
.mw-msg.success, .mw-status.ok { background: var(--green-tint); border-color: var(--green-line); }
.mw-msg.success .ic, .mw-status.ok .ic { background: var(--green-dark); }
.mw-status { position: sticky; top: calc(var(--mw-head-h, 96px) + var(--mw-camera-h, 0px)); z-index: 10; }
.mw-status .mw-btn { min-height: 44px; }
.mw-camera { position: sticky; top: var(--mw-head-h, 96px); z-index: 15; display: flex; flex-direction: column; gap: 6px; width: 100%; max-width: 640px; margin: 0 auto; padding: 8px 12px; background: var(--panel); border-bottom: 1px solid var(--line2); }
.mw-cam-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.mw-cam-toolbar .mw-btn { min-height: 48px; font-size: 14px; }
.mw-camera[data-camera="paused"] .mw-video { display: none; }
.mw-camera[data-camera="paused"] .mw-cam-toolbar { grid-column: 1 / -1; }
.mw-camera[data-camera="paused"] { display: grid; grid-template-columns: 1fr auto; align-items: center; }
.mw-camera[data-camera="paused"] .mw-next { min-height: 50px; font-size: 16px; }
.mw-settings summary { cursor: pointer; min-height: 48px; display: flex; align-items: center; font-weight: 500; }
.mw-settings:not([open]) { padding-top: 0; padding-bottom: 0; }
.mw-savebar { position: sticky; bottom: 0; z-index: 9; display: flex; align-items: center; gap: 10px; padding: 10px 0 max(10px, env(safe-area-inset-bottom)); background: var(--panel); border-top: 1px solid var(--line); }
.mw-savebar > span { flex: 1; font-size: 13.5px; }
.mw-savebar.dirty > span { color: var(--amber); font-weight: 500; }
.mw-body input, .mw-body button, .mw-body summary { scroll-margin-top: calc(var(--mw-head-h, 96px) + var(--mw-camera-h, 0px) + 12px); }
.mw-product { scroll-margin-top: calc(var(--mw-head-h, 96px) + var(--mw-camera-h, 0px) + 12px); }
.mw-video { position: relative; width: 100%; aspect-ratio: 16 / 9; max-height: min(32dvh, 260px); background: #111; border-radius: var(--r); overflow: hidden; }
.mw-video video { width: 100%; height: 100%; object-fit: cover; display: block; }
.mw-frame { position: absolute; left: 10%; right: 10%; top: 25%; bottom: 25%; border: 3px solid #fff; border-radius: 10px; box-shadow: 0 0 0 9999px rgba(0, 0, 0, .35); pointer-events: none; }
[data-camera="paused"] .mw-frame { border-color: var(--amber); }
.mw-cam-state { font-size: 14px; color: var(--ink2); }
.mw-next { min-height: 64px; font-size: 20px; }
.mw-prod { display: flex; gap: 12px; align-items: flex-start; min-width: 0; }
.mw-prod img { width: 72px; height: 72px; object-fit: cover; border-radius: var(--r); flex: 0 0 72px; border: 1px solid var(--line); }
.mw-prod > div { min-width: 0; }
.mw-prod-name { font-size: 17px; font-weight: 500; overflow-wrap: anywhere; }
.mw-prod-meta { font-size: 15px; overflow-wrap: anywhere; }
.mw-count { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.mw-count .k { font-size: 14px; color: var(--ink2); flex: 1 1 100%; }
.mw-count .v { font-size: 52px; line-height: 1; font-weight: 500; color: var(--ink); }
.mw-count .u { font-size: 18px; color: var(--ink2); }
.mw-qty { display: flex; flex-direction: column; gap: 8px; }
.mw-last { font-size: 14px; color: var(--ink2); overflow-wrap: anywhere; }
.mw-actions { gap: 8px; }
.mw-list summary { cursor: pointer; font-size: 15.5px; font-weight: 500; min-height: 44px; display: flex; align-items: center; }
.mw-list ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 14.5px; }
.mw-list li { overflow-wrap: anywhere; border-top: 1px solid var(--line); padding-top: 8px; }
.mw-dialog { border: 1px solid var(--line2); border-radius: var(--r-panel); padding: 18px 16px; width: min(560px, calc(100vw - 24px)); max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); overflow-y: auto; box-shadow: var(--shadow-pop); }
.mw-dialog[open] { display: flex; flex-direction: column; gap: 10px; }
.mw-dialog::backdrop { background: rgba(0, 0, 0, .45); }
.mw-dialog h2 { font-size: 19px; font-weight: 500; margin: 0; }
.mw-choose { display: flex; flex-direction: column; gap: 8px; }
.mw-choice-b { justify-content: flex-start; text-align: left; flex-wrap: wrap; height: auto; padding: 10px 14px; font-weight: 400; }
.mw-plist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.mw-plist li { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 6px; align-items: center; border: 1px solid var(--line); border-radius: var(--r); padding: 6px 8px; }
.mw-plist li.muted { color: var(--muted); }
.mw-plist .c { flex: 1 1 120px; font-size: 18px; font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
.mw-plist .nw { font-size: 12px; font-weight: 500; color: var(--amber); background: var(--amber-soft); border-radius: 10px; padding: 1px 6px; display: block; width: fit-content; }
.mw-plist .mw-btn { min-height: 48px; font-size: 15px; padding: 0 12px; }
.mw-diff { font-size: 15px; overflow-wrap: anywhere; }
.mw-diff .rm { color: var(--red); font-weight: 500; margin-right: 6px; }
.mw-diff .ad { color: var(--green-hover); font-weight: 500; margin-right: 6px; }
.mw-check { display: flex; gap: 10px; align-items: center; min-height: 48px; font-size: 15px; }
.mw-check input { width: 24px; height: 24px; }
.mw-targets { display: flex; flex-wrap: wrap; gap: 6px; font-size: 13.5px; }
.mw-targets .k { flex: 1 1 100%; color: var(--ink2); }
.mw-targets .tg { border: 1px solid var(--line2); border-radius: 14px; padding: 3px 10px; background: #fff; }
.mw-targets .tg.ok { border-color: var(--green-line); background: var(--green-tint); }
.mw-targets .tg.err { border-color: var(--red-line); background: var(--red-soft); }
/* 24b. Mobilní převod mezi sklady (Issue #102): přehled převodů, rozepsané × uložené položky, stav zdrojového skladu */
.mw-tlist, .mw-tlines { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.mw-titem { display: flex; flex-wrap: wrap; gap: 2px 10px; align-items: baseline; border: 1px solid var(--line); border-radius: var(--r); padding: 10px 12px; color: var(--ink); text-decoration: none; min-height: 48px; }
.mw-titem:hover, .mw-titem:focus-visible { background: var(--green-tint); text-decoration: none; }
.mw-route { flex: 1 1 100%; font-weight: 500; color: var(--green-dark); overflow-wrap: anywhere; }
.mw-tline { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 10px; align-items: start; border: 1px solid var(--line); border-radius: var(--r); padding: 8px 10px; }
.mw-tline.err { border-color: var(--red-line); background: var(--red-soft); }
.mw-tl-main { min-width: 0; overflow-wrap: anywhere; font-size: 15px; }
.mw-tl-main .muted { font-size: 13px; }
.mw-tl-q { text-align: right; white-space: nowrap; font-size: 14px; }
.mw-tl-q .v { font-size: 22px; font-weight: 500; }
.mw-tag { display: block; margin-top: 2px; font-size: 12px; font-weight: 500; border-radius: 4px; padding: 1px 6px; white-space: normal; max-width: 150px; margin-left: auto; }
.mw-tag.ok { background: var(--green-soft); color: var(--green-hover); }
.mw-tag.wait { background: var(--amber-soft); color: var(--amber); }
.mw-tl-act { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px; }
.mw-tl-act .mw-in { flex: 1 1 90px; min-width: 0; }
.mw-err { color: var(--red); font-size: 13px; font-weight: 500; margin-top: 2px; }
.mw-stock .mw-count .v { font-size: 40px; }
/* 24c. Společný scanner na PC (Issue #104, static/js/scanner.js): dialog kamery k poli (obrazovky Skladové pozice) – rámeček = čtená oblast 80 % × 50 % */
.scan-dlg { width: min(560px, 94vw); border: 1px solid var(--line2); border-radius: var(--r-panel); padding: 14px; box-shadow: var(--shadow-pop); }
.scan-dlg::backdrop { background: rgba(0, 0, 0, .35); }
.scan-dlg-h { display: flex; align-items: center; gap: 10px; justify-content: space-between; margin-bottom: 10px; }
.scan-video { position: relative; width: 100%; aspect-ratio: 4 / 3; background: #111; border-radius: var(--r); overflow: hidden; }
.scan-video video { width: 100%; height: 100%; object-fit: cover; display: block; }
.scan-frame { position: absolute; left: 10%; top: 25%; width: 80%; height: 50%; border: 3px solid #fff; border-radius: 6px; box-shadow: 0 0 0 9999px rgba(0, 0, 0, .25); }
.scan-state { margin-top: 8px; font-size: 14px; color: var(--ink2); }
.scan-next { margin-top: 8px; }
.scan-note { margin: 8px 0 0; font-size: 12.5px; color: var(--muted); }
/* etapa 2: Fotoaparát u pole Přidat položku (příjemka, výdejka) – stejná výška jako pole; v úzkém okně (tablet na výšku) se zalomí pod pole */
.scan-btn { flex: none; }
.addbar .scan-btn { height: 40px; }
.addbar-row:has(> .scan-btn) { flex-wrap: wrap; }
@media (min-width: 768px) { .mw-main { padding-top: 20px; } .mw-choice { flex-direction: row; } .mw-big { flex: 1 1 0; } }

/* 21h. Karta › 3 Texty – fronty a stavy jazyků (Issue #64): boxíky CZ + cílové shopy (symbol + kód + text, barva není jediný signál),
   hlavní akce nad meta popisem, ⓘ odhad (klik / klávesnice / najetí), sbalené Vyhledávače a adresa */
.tt-wrap { margin: 0 0 12px; }
.lang-boxes { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
/* prompt 51 bod 4: pravidelná mřížka – počet sloupců jen podle šířky (ne podle textu ani stavu), stejné šířky, řádky přesně pod sebou,
   stejná výška boxů v řádku; text stavu se zalomí, neořízne */
.lang-boxes { display: grid; grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)); align-items: stretch; }
.lang-boxes > .lbox { min-width: 0; display: flex; }
.lbox a { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 4px 10px 4px 6px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--panel); color: var(--ink); text-decoration: none; font-size: 13px; max-width: 320px; }
.lang-boxes .lbox a { display: flex; flex: 1 1 auto; width: 100%; max-width: none; box-sizing: border-box; }   /* box vyplní buňku mřížky */
.lbox a:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.lbox .sym { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; font-size: 12px; font-weight: 700; color: #fff; flex: none; }
.lbox .code { font-weight: 600; }
.lbox .st { color: var(--ink2); white-space: normal; overflow-wrap: anywhere; line-height: 1.3; }
.lbox-ok a { background: var(--green-tint); border-color: var(--green-line); } .lbox-ok .sym { background: var(--green-dark); }
.lbox-queued a, .lbox-review a { background: var(--amber-soft); border-color: var(--amber-line); } .lbox-queued .sym, .lbox-review .sym { background: var(--amber); }
.lbox-missing a { background: var(--red-soft); border-color: var(--red-line); } .lbox-missing .sym { background: var(--red); }
.tt-act { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 8px; font-size: 13px; }
.tq-bar { border: 1px solid var(--line); border-radius: 8px; background: var(--work-bg); padding: 10px 12px; margin: 0 0 14px; }
.tq-main { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; font-size: 13.5px; }
.tq-info { margin: 6px 0 0; font-size: 12.5px; }
.tq-msg { font-size: 13px; margin: 0; } .tq-msg:empty { display: none; }
.tq-msg.ok, .tq-msg.success { color: var(--green-dark); } .tq-msg.err, .tq-msg.error { color: var(--red); } .tq-msg.info { color: var(--ink2); }
.tq-bar .gen-box { margin: 8px 0 0; }
.tq-bar .gen-box > summary { list-style: none; } .tq-bar .gen-box > summary::-webkit-details-marker { display: none; }
.tq-bar .gen-box[open] > summary { border-bottom: 1px solid var(--line); }
.tip { position: relative; display: inline-flex; }
.tip-btn { width: 22px; height: 22px; border-radius: 50%; border: 1px solid var(--line2); background: var(--panel); color: var(--green-dark); cursor: pointer; font-size: 13px; line-height: 1; padding: 0; }
.tip-btn:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.tip-body { display: none; position: absolute; left: 0; top: calc(100% + 6px); z-index: 30; width: 320px; max-width: 70vw; padding: 8px 10px; border: 1px solid var(--line2);
  border-radius: 8px; background: var(--panel); box-shadow: 0 4px 14px rgba(0,0,0,.12); font-size: 12.5px; color: var(--ink2); }
.tip:hover .tip-body, .tip:focus-within .tip-body, .tip.open .tip-body { display: block; }
.fsec-fold > summary { list-style: none; cursor: pointer; }
.fsec-fold > summary::-webkit-details-marker { display: none; }
.fsec-fold > summary h3 { margin-bottom: 10px; }
.fsec-fold > summary h3::before { content: "▸"; color: var(--muted); font-size: 12px; }
.fsec-fold[open] > summary h3::before { content: "▾"; }
.fsec-fold:not([open]) > summary h3 { margin-bottom: 4px; }

/* 25. Tisková sestava dokladu (Issue #93, prompt 39): příjemka / výdejka – náhled na obrazovce = A4 při tisku a Uložit jako PDF v prohlížeči.
   Bez navigace a editačních prvků; opakovaná hlavička tabulky, řádek se nedělí mezi stránky, číslo dokladu a stránky v okrajích @page. */
.pdoc-body { background: #EEF0EB; }
.pdoc-bar { position: sticky; top: 0; z-index: 5; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 10px 16px; background: #fff; border-bottom: 1px solid var(--line2); }
.pdoc-bar .muted { flex: 1 1 260px; font-size: 13px; }
.pdoc-pending { max-width: 210mm; margin: 12px auto 0; padding: 8px 12px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: 6px; font-size: 13.5px; box-sizing: border-box; }
.pdoc { max-width: 210mm; margin: 12px auto 24px; padding: 10mm; background: #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, .12); box-sizing: border-box; font-size: 10pt; line-height: 1.25; color: #1d241e; }   /* kompaktní sestava (prompt 54): okraje ~10 mm, bez vnitřního odsazení v tisku */
.pdoc-head { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; border-bottom: 2px solid var(--green-dark); padding-bottom: 4px; }
.pdoc-head h1 { margin: 0; font-size: 15pt; font-weight: 600; letter-spacing: .01em; line-height: 1.15; }
.pdoc-kind { font-size: 8.5pt; text-transform: uppercase; letter-spacing: .06em; color: var(--green-dark); font-weight: 600; }
.pdoc-status { font-size: 9.5pt; margin-top: 1px; }
.pdoc-status.warn { font-weight: 600; }
.pdoc-firm { text-align: right; font-size: 9pt; }
.pdoc-banner { margin: 6px 0 0; padding: 4px 8px; border: 2px solid #8A4B4B; color: #8A4B4B; font-weight: 600; text-align: center; border-radius: 4px; }
.pdoc-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px 14px; margin: 6px 0 8px; font-size: 9pt; }
.pdoc-meta > div { display: grid; grid-template-columns: 36% minmax(0, 1fr); gap: 6px; break-inside: avoid; }
.pdoc-meta dt { color: #5b645c; font-size: 8.5pt; }
.pdoc-meta dd { margin: 0; overflow-wrap: anywhere; }
.pdoc-table { width: 100%; border-collapse: collapse; font-size: 9pt; line-height: 1.2; table-layout: fixed; }   /* pevné šířky: produkt dostane zbytek, nic se nerozšíří podle hlavičky */
.pdoc-table thead { display: table-header-group; }                 /* hlavička na každé tiskové stránce */
.pdoc-table th { text-align: left; font-weight: 600; border-bottom: 1.5px solid #333; padding: 2px 3px; vertical-align: bottom; white-space: normal; font-size: 8.5pt; line-height: 1.2; }
.pdoc-table td { border-bottom: .5px solid #bbb; padding: 1.5px 3px; vertical-align: top; overflow-wrap: anywhere; }   /* bez pevné minimální výšky – řádek je vysoký jen podle obsahu, nic se neořezává */
.pdoc-table tr { break-inside: avoid; }                            /* běžný řádek se nedělí; mimořádně dlouhý prohlížeč rozdělí bezpečně */
.pdoc-table .c-no { width: 6mm; color: #5b645c; }
.pdoc-table .c-id { width: 18mm; white-space: nowrap; }
.pdoc-table .c-qty { width: 12mm; text-align: right; }
.pdoc-table .c-wh { width: 18mm; font-size: 8.5pt; }
.pdoc-table .c-num { width: 14.5mm; text-align: right; }
.pdoc-table .c-state { width: 15mm; font-size: 8pt; }
.pdoc-name i { color: #5b645c; }
.pdoc-name { display: inline; }
.pdoc-params { display: inline; font-size: 8.5pt; }                 /* parametry hned za názvem na stejném řádku – nižší řádky, nic se nevynechá */
.pdoc-name + .pdoc-params::before { content: " · "; color: #8a928b; }
.pdoc-params > span { overflow-wrap: anywhere; }
.pdoc-params > span + span::before { content: " · "; color: #8a928b; }
.pdoc-sub { font-size: 8pt; color: #3d463e; line-height: 1.15; }
.pdoc-empty { text-align: center; color: #5b645c; padding: 6px; }
.pdoc-sum { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 2px 16px; margin: 4px 0 0; padding-top: 4px; border-top: 1.5px solid #333; break-inside: avoid; }
.pdoc-block { margin-top: 8px; break-inside: avoid-page; }
.pdoc-block h2 { font-size: 10pt; margin: 0 0 2px; }
.pdoc-block ul { margin: 0; padding-left: 18px; }
.pdoc-void { color: #6b2f2f; }
.pdoc-void .pdoc-table td { text-decoration: line-through; text-decoration-color: rgba(107, 47, 47, .5); }
.pdoc-void .pdoc-table td.c-state { text-decoration: none; }
.pdoc-foot { display: flex; justify-content: space-between; gap: 12px; margin-top: 8px; padding-top: 4px; border-top: .5px solid #bbb; font-size: 8.5pt; color: #5b645c; break-inside: avoid; }
.pdoc { page: pdoc; }                                              /* pojmenovaná stránka: A4 a okraje jen pro tuto sestavu, ne pro tisk jiných obrazovek */
@page pdoc { size: A4; margin: 10mm; @bottom-right { content: "strana " counter(page) " / " counter(pages); font: 8pt Ubuntu, system-ui, sans-serif; color: #5b645c; } }
@page pdoc { @top-right { font: 8pt Ubuntu, system-ui, sans-serif; color: #5b645c; } }
@media print {
  .pdoc-body { background: #fff; }
  .pdoc-bar, .pdoc-pending { display: none !important; }
  .pdoc { max-width: none; margin: 0; padding: 0; box-shadow: none; }
}
@media screen and (max-width: 820px) { .pdoc { padding: 6mm 4mm; } .pdoc-meta { grid-template-columns: 1fr; } }   /* jen obrazovka: tiskový výstup (A4 ≈ 718 px) by jinak dostal vnitřní odsazení navíc a jeden sloupec hlavičky */

/* 21o. Karta › 2 › detail varianty: Přidat / změnit fotografii (Issue #97, prompt 40) – dialog nad stejnou galerií jako část 1 */
.vphoto-kv .v { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; white-space: normal; }
.vph-current { display: inline-flex; align-items: center; gap: 6px; }
.vph-thumb { width: 48px; height: 36px; object-fit: cover; border-radius: 4px; border: 1px solid var(--line); }
.vph-pending { color: var(--amber); font-size: 13px; }
.vph { width: min(980px, calc(100vw - 32px)); max-height: calc(100vh - 48px); padding: 0; border: 1px solid var(--line2); border-radius: var(--r-panel, 10px); }
.vph::backdrop { background: rgba(20, 30, 20, .35); }
.vph-h { padding: 14px 18px 10px; border-bottom: 1px solid var(--line); background: var(--green-tint); }
.vph-h h2 { margin: 0 0 4px; font-size: 16px; font-weight: 500; }
.vph-ctx { font-size: 13.5px; overflow-wrap: anywhere; }
.vph-tabs { display: flex; gap: 4px; padding: 10px 18px 0; border-bottom: 1px solid var(--line); }
.vph-tab { border: 1px solid transparent; border-bottom: 0; background: none; padding: 7px 12px; font: inherit; font-size: 14px; cursor: pointer; border-radius: 6px 6px 0 0; color: var(--ink2); }
.vph-tab.on { border-color: var(--line); background: #fff; color: var(--ink); font-weight: 500; margin-bottom: -1px; }
.vph-pane { padding: 14px 18px; max-height: calc(100vh - 300px); overflow: auto; }
.vph-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); gap: 10px; }
.vph-img { display: flex; flex-direction: column; gap: 4px; padding: 6px; border: 1px solid var(--line2); border-radius: 8px; background: #fff; cursor: pointer; font: inherit; text-align: left; }
.vph-img img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 4px; background: var(--hover); }
.vph-img.is-current { border-color: var(--green-line); box-shadow: inset 0 0 0 2px var(--green-line); }
.vph-img.is-chosen { border-color: var(--green-dark); box-shadow: inset 0 0 0 2px var(--green-dark); }
.vph-img:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.vph-img.is-current .vph-cap::after { content: " · teď u varianty"; color: var(--green-dark); }
.vph-noimg { display: grid; place-items: center; aspect-ratio: 4 / 3; border-radius: 4px; background: var(--hover); color: var(--muted); font-size: 13px; }
.vph-cap { font-size: 12.5px; color: var(--ink2); overflow-wrap: anywhere; }
.vph-use { font-size: 11.5px; color: var(--muted); overflow-wrap: anywhere; }
.vph-note { margin: 0 0 10px; font-size: 13.5px; color: var(--ink2); max-width: 70ch; }
.vph-file { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; font-size: 14px; }
.vph-status { padding: 0 18px; min-height: 20px; font-size: 13.5px; color: var(--green-dark); }
.vph-status.err { color: var(--red); }
.vph-f { display: flex; gap: 8px; justify-content: flex-end; padding: 12px 18px; border-top: 1px solid var(--line); }

/* 26. Seznamy dokladů a objednávek – společný vzhled (Issue #99, prompt 42): blok Hledání a období (.lf), tabulka se zelenou hlavičkou a
   filtrovacím řádkem pod sloupci (.lt), stavový štítek (.stag), zvýrazněný kladný zbytek (.lt-pos), patička (.lt-foot). Jen třídy
   těchto seznamů – ostatní tabulky .tt se nemění. Oba řádky hlavičky lepí společně: sticky je celý thead (žádná pevná výška řádku). */
.lf { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-panel); margin-bottom: 12px; }
.lf-h { margin: 0; padding: 8px 14px; font-size: 14px; font-weight: 500; color: var(--green-dark); background: var(--green-tint); border-bottom: 1px solid var(--line); border-radius: var(--r-panel) var(--r-panel) 0 0; }
.lf-b { padding: 10px 14px 10px; display: flex; flex-direction: column; gap: 8px; }
.lf-row { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; }
.lf-fld { display: flex; flex-direction: column; gap: 3px; }
.lf-l { font-size: 12.5px; color: var(--ink2); }
.lf-q { flex: 1 1 320px; max-width: 640px; }
.lf-q .in { width: 100%; }
.lf-per .sel { width: 200px; }
.lf-date .in { width: 150px; }
.lf-src .sel { width: 200px; }
.lf-fld .sel { max-width: 280px; text-overflow: ellipsis; }   /* dlouhý název úseku / kategorie: celý v rozbalení, řádek se neroztáhne (prompt 75) */
.lf-fld .red, .lf-fld .fh { font-size: 12.5px; max-width: 280px; }
.lf-multi .sel { height: auto; padding: 4px 6px; background-image: none; width: 130px; }   /* vícenásobný výběr (Přehled objednávek) – v bloku, ne pod sloupcem */
.lf-multi.lf-wide .sel { width: 220px; }
.lf-multi.lf-wider .sel { width: 320px; max-width: 100%; }
.lf-fld .sel.on { border-color: var(--green); background-color: var(--green-tint); }
.lf-chips { min-height: 28px; }
.lf-reset { margin-left: auto; }
.lt-panel > .sh { border-bottom: 0; }
table.lt thead { position: sticky; top: var(--thead-top); z-index: 3; }
table.lt th { position: static; background: var(--green-tint); color: var(--green-dark); text-transform: none; letter-spacing: 0; font-size: 12.5px; border-bottom: 0; }
table.lt thead tr:first-child th { padding-top: 8px; padding-bottom: 4px; height: 30px; }
table.lt tr.lt-frow th { padding: 0 4px 6px; height: auto; vertical-align: top; border-bottom: 1px solid var(--line2); overflow: visible; }
.lt-sel { width: 100%; height: 30px; font-size: 13px; padding: 0 18px 0 6px; background-position: right 5px center; color: var(--ink2); text-overflow: ellipsis; }
.lt-sel.on { border-color: var(--green); background-color: #fff; color: var(--ink); font-weight: 500; box-shadow: inset 0 -2px 0 var(--green); }
table.lt tbody tr:focus-within > td { background: var(--green-tint); }
.lt-doc a strong { color: var(--green-dark); }
.lt-doc a:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; border-radius: 3px; }
.lt-state { white-space: normal; }
.stag { display: inline-block; padding: 1px 6px; border-radius: 4px; border: 1px solid transparent; font-size: 12.5px; font-weight: 500; line-height: 18px; white-space: nowrap; }
.stag.open { background: var(--amber-soft); color: var(--amber); }
.stag.wait { background: var(--amber-soft); color: var(--amber); border-color: var(--amber-line); }
.stag.ok { background: var(--green-soft); color: var(--green-hover); }
.stag.err { background: var(--red-soft); color: var(--red); border-color: var(--red-line); }
.stag.off { background: #EEF0EA; color: var(--ink2); }
.lt-state .ds2 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 2px; }
.lt-pos { display: inline-block; padding: 0 6px; border-radius: 4px; background: var(--amber-soft); color: var(--amber); font-weight: 500; }
.lt-foot { gap: 12px 16px; }
/* úzké zobrazení (návrh výslovně omezený, ne celá responzivita): tabulka si drží použitelné šířky sloupců a filtrů a posouvá se
   vodorovně ve vlastním obalu – hlavička, filtry a data spolu; lepení hlavičky k liště stránky uvnitř posuvného obalu nejde (jako .vt-wrap) */
@media (max-width: 1000px) {
  .lt-scroll { overflow-x: auto; }
  .lt-scroll > table.lt { min-width: 1040px; }
  table.lt thead { position: static; }
}
.lt-foot .lt-size { color: var(--muted); }
.lt-foot .lt-step.off { color: var(--muted); }

/* vždy poslední: [hidden] musí přebít display u všech tříd */
/* Vyskakovací oznámení (prompt 51 bod 5): vpravo dole, zmizí samo; druh = symbol + slovo + barva (barva není jediný signál) */
.toast-region { position: fixed; right: 20px; bottom: 20px; z-index: 1000; display: flex; flex-direction: column; gap: 8px; max-width: min(440px, calc(100vw - 32px)); pointer-events: none; }
.toast { pointer-events: auto; display: flex; gap: 10px; align-items: flex-start; padding: 10px 14px; border-radius: var(--r); border: 1px solid var(--line2); background: #fff; box-shadow: var(--shadow-pop); font-size: 14px; line-height: 1.4; color: var(--ink); transition: opacity .25s, transform .25s; }
.toast.out { opacity: 0; transform: translateY(6px); }
.toast-sym { flex: none; width: 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; color: #fff; background: var(--ink2); }
.toast-ok { border-color: var(--green-line); background: var(--green-tint); } .toast-ok .toast-sym { background: var(--green-dark); }
.toast-already, .toast-info { border-color: var(--line2); } .toast-already .toast-sym { background: var(--ink2); }
.toast-partial { border-color: var(--amber-line); background: var(--amber-soft); } .toast-partial .toast-sym { background: var(--amber); }
.toast-error { border-color: var(--red-line); background: var(--red-soft); } .toast-error .toast-sym { background: var(--red); }
@media (max-width: 760px) { .toast-region { left: 16px; right: 16px; bottom: 16px; max-width: none; } }
/* 27. Změna dokladu v jiném okně nebo pracovišti (prompt 53, Issue #124, static/js/doc_state.js): trvalé upozornění nad dokladem,
   přehled Neuloženo, zablokované upravující prvky po uzavření jinde (náhled a tisk zůstávají) */
.doc-change { margin: 0 0 12px; padding: 12px 16px; border-radius: var(--r-panel); border: 1px solid var(--line); background: #fff; font-size: 14px; display: flex; flex-direction: column; gap: 6px; position: sticky; top: var(--thead-top, 0px); z-index: 6; }
.doc-change .dc-title { font-weight: 600; font-size: 15px; }
.doc-change .dc-detail { color: var(--ink2); white-space: normal; }
.doc-change .dc-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.doc-change.dc-locked { background: var(--red-soft); border-color: var(--red-line); border-left: 4px solid var(--red); }
.doc-change.dc-locked .dc-title { color: var(--red); }
.doc-change.dc-changed { background: var(--amber-soft); border-color: var(--amber-line); border-left: 4px solid var(--amber); }
.doc-change.dc-offline { background: #fff; border-left: 4px solid var(--ink2); }
.doc-change.dc-pulse { animation: dc-pulse .6s ease-out 2; }
@keyframes dc-pulse { 50% { box-shadow: 0 0 0 4px var(--red-line); } }
.doc-unsaved-kept { position: static; background: var(--amber-soft); border-color: var(--amber-line); }
.doc-unsaved-kept ul { margin: 0; padding-left: 18px; }
.doc-unsaved-kept .btn { align-self: flex-start; }
.doc-locked-elsewhere .doc-off { pointer-events: none; opacity: .45; text-decoration: line-through; }
.doc-locked-elsewhere input[readonly].cell, .doc-locked-elsewhere [data-doc-disabled] { background: var(--bg2, #f4f4f2); color: var(--ink2); cursor: not-allowed; }
/* 27b. Smazat / Storno řádku dokladu během odesílání (prompt 55, Issue #129): bez dvojího kliknutí, text zůstává čitelný */
[data-line-delete][aria-busy="true"] { pointer-events: none; opacity: .55; cursor: progress; }
/* 28. Nová inventura v blocích (prompt 56, Issue #132): bloky .pblock jako Nová příjemka (21n), sklad po skladu, shrnutí u tlačítka */
.inv-new .inv-whs { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.inv-new .inv-wh { margin: 10px 20px 4px; padding: 8px 14px 10px; border: 1px solid var(--line); border-radius: var(--r, 8px); min-width: 0; }
.inv-new .inv-wh > legend { padding: 0 6px; font-weight: 500; color: var(--green-dark); }
.inv-new .inv-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; padding: 4px 0; }
.inv-new .inv-row > .fl { min-width: 120px; margin: 0; }
.inv-new .inv-sub { padding-left: 12px; border-left: 2px solid var(--green-soft); margin: 4px 0; }
.inv-new .inv-sub .fld { padding-left: 0; padding-right: 0; }
.inv-new .inv-note { margin: 4px 20px 0; white-space: normal; }
.inv-summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 16px; padding: 12px 14px; border: 1px solid var(--line); border-radius: var(--r, 8px); background: var(--green-tint); }
.inv-summary b { font-weight: 500; }
@media (max-width: 760px) { .inv-new .inv-wh { margin: 10px 8px 4px; } .inv-new .inv-row > .fl { min-width: 100%; } }
/* 29. Sčítači a pozice (prompt 58, Issue #134): hlavička s rozsahem, blok Přidělení práce s kompaktními řádky (úkol · kolo · pracovník ·
   napočítáno · stav), souhrn nepřidělených, neuložené změny, sbalené bloky Pracovníci a Rozšířit rozsah; stav vždy i textem */
.sc-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 8px 20px; margin-top: 6px; }
.sc-wh { font-size: 17px; font-weight: 500; color: var(--ink); }
.sc-facts { display: flex; flex-wrap: wrap; gap: 4px 16px; color: var(--muted); font-size: 13px; margin-top: 2px; }
.sc-facts b { color: var(--ink); font-weight: 500; }
.sc-switch { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.sc-block { margin-top: 0; }
.sc-block > .pblock-h .sc-spread { margin-left: auto; }
.sc-unassigned { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 6px; padding: 8px 12px; margin-bottom: 8px; border: 1px solid var(--red-line); background: var(--red-soft); border-radius: var(--r, 8px); white-space: normal; }
.sc-unassigned.ok { border-color: var(--line); background: var(--green-tint); }
.sc-unassigned .ic { font-weight: 700; }
.sc-dirty { padding: 6px 12px; margin-bottom: 8px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: var(--r, 8px); color: var(--amber); }
.sc-table { display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: var(--r, 8px); }
.sc-row { display: grid; grid-template-columns: minmax(220px, 2.2fr) 70px minmax(220px, 2fr) 120px minmax(200px, 1.6fr); gap: 4px 14px; align-items: start; padding: 7px 12px; border-top: 1px solid var(--line); }
.sc-hrow { border-top: 0; background: var(--green-tint); color: var(--muted); font-size: 12.5px; padding-top: 6px; padding-bottom: 6px; border-radius: var(--r, 8px) var(--r, 8px) 0 0; }
.sc-hrow .num, .sc-qty { text-align: right; }
.sc-group { padding: 6px 12px; border-top: 1px solid var(--line); background: #fafaf7; font-weight: 500; color: var(--green-dark); }
.sc-row .sel { width: 100%; max-width: 280px; }
.sc-unassigned.ok + .sc-dirty { margin-top: 0; }
.sc-row.sc-unassigned, .sc-row.sc-local-empty { box-shadow: inset 3px 0 0 var(--red); }
.sc-row.sc-submitted { background: #fbfbf9; }
.sc-k { display: none; color: var(--muted); font-size: 12px; }
.sc-helpers { margin-top: 3px; font-size: 13px; }
.sc-helpers summary { cursor: pointer; }
.sc-help-list { display: flex; flex-wrap: wrap; gap: 4px 10px; padding: 4px 0; }
.sc-proposal { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 4px; background: var(--amber-soft); color: var(--amber); font-size: 12px; }
.sc-recount { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.sc-recount .sel { height: 28px; font-size: 12.5px; max-width: 160px; }
.sc-hist { margin-top: 4px; font-size: 12.5px; }
.sc-hist ul { margin: 2px 0 0; padding-left: 16px; }
.sc-wtable { border-collapse: collapse; margin: 4px 0; font-size: 12.5px; }
.sc-wtable th, .sc-wtable td { padding: 2px 10px 2px 0; text-align: left; border-bottom: 1px solid var(--line); }
.sc-wfix { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; margin: 2px 0 6px; }
.sc-wfix input { height: 28px; font-size: 12.5px; }
.sc-work-none { font-size: 12.5px; margin: 4px 0 0; }
.sc-save { display: flex; justify-content: flex-end; align-items: center; gap: 12px; }
.sc-dirty-inline { color: var(--amber); font-size: 13px; }
.sc-empty { padding: 10px 12px; }
.sc-workers td { white-space: normal; }
.sc-add, .sc-more { margin-top: 10px; }
.sc-inline { display: flex; flex-wrap: wrap; gap: 8px; }
.sc-more summary { cursor: pointer; color: var(--green-dark); }
.sc-note { margin: 0 0 8px; white-space: normal; }
.sc-place-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px 14px; align-items: end; }
.sc-place-form .fld { padding: 0; margin: 0; }
/* hlášky inventury (důvod odmítnutí spuštění, doplněné / odebrané úkoly) bývají dlouhé – zalomit celé, ne přetéct (Issue #140) */
.al.inv-msg .lab { white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 1100px) {
  .sc-hrow { display: none; }
  .sc-row { grid-template-columns: 1fr 1fr; }
  .sc-place { grid-column: 1 / -1; }
  .sc-k { display: inline; }
  .sc-qty { text-align: left; }
}
@media (max-width: 600px) { .sc-row { grid-template-columns: 1fr; } .sc-row .sel { max-width: none; } }
/* 30. Průběh inventury (prompt 59, Issue #137): stav počítání s ukazatelem odevzdaných úkolů, důvody blokace uzavření textem, místa
   a pracovníci (řádky jako Sčítači 29), rozdíly s detailem přímo pod položkou, sbalené doplňky, uzavření na konci stránky */
.pr-kpis { display: flex; flex-wrap: wrap; gap: 10px 36px; }
.pr-kpi .k { color: var(--muted); font-size: 12.5px; }
.pr-kpi .v { font-size: 15px; }
.pr-kpi .v b { font-size: 20px; font-weight: 500; }
.pr-bar { height: 10px; margin: 10px 0 4px; border-radius: 5px; background: var(--line); overflow: visible; }
.pr-bar > span { display: block; height: 100%; border-radius: 5px; background: var(--green); min-width: 0; }
.pr-bar-note { font-size: 12.5px; white-space: normal; }
.pr-why { margin-top: 10px; padding: 8px 12px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: var(--r, 8px); white-space: normal; }
.pr-why ul { margin: 4px 0 0; padding-left: 18px; }
.pr-ok { margin-top: 10px; padding: 8px 12px; border: 1px solid var(--line); background: var(--green-tint); border-radius: var(--r, 8px); }
/* prompt 65: další krok, filtr problémů, společné schválení */
.pr-next { margin: 0 0 12px; padding: 12px 16px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: var(--r-panel); }
.pr-next.ok { border-color: var(--green); background: var(--green-tint); }
.pr-next-t { font-size: 17px; font-weight: 600; }
.pr-next-s { margin-top: 2px; font-size: 13.5px; color: var(--ink2); overflow-wrap: anywhere; }
.pr-pfilter { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; margin-bottom: 10px; }
.pr-ptable .pr-dact { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.pr-facts { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 8px 14px; margin: 8px 0; }
.pr-facts div { border: 1px solid var(--line); border-radius: var(--r); padding: 6px 10px; background: #fff; min-width: 0; }
.pr-facts dt { font-size: 12.5px; color: var(--muted); }
.pr-facts dd { margin: 0; overflow-wrap: anywhere; }
.pr-approve-f { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 8px; }
.pr-shops { flex-basis: 100%; border: 1px solid var(--line); border-radius: var(--r); padding: 8px 12px; margin: 0; display: flex; flex-wrap: wrap; gap: 8px 14px; }
.pr-shops legend { padding: 0 4px; }
.pr-targets { flex-basis: 100%; margin-top: 4px; }
.pr-shops .note { flex-basis: 100%; margin: 0; }
.pr-trow { grid-template-columns: minmax(220px, 2.2fr) 70px minmax(160px, 1.4fr) 120px minmax(220px, 1.8fr); }
.pr-inline { display: inline; }
.pr-inline .btn { padding: 0 4px; height: auto; }
.pr-filters { margin-bottom: 6px; }
.pr-legend { margin: 0 0 8px; font-size: 12.5px; white-space: normal; }
.pr-table td { vertical-align: top; }
.pr-table th { white-space: normal; }
.pr-open { white-space: normal; height: auto; min-height: 28px; padding: 2px 6px; text-align: left; line-height: 1.25; }
.pr-item.pr-open-row td { background: var(--green-tint); border-bottom-color: transparent; }
.pr-detail > td { background: var(--green-tint); border-top: 0; padding: 0 10px 12px; }
.pr-dbox { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px 18px; padding: 10px 12px; background: #fff; border: 1px solid var(--line); border-radius: var(--r, 8px); white-space: normal; }
.pr-dh { font-weight: 500; color: var(--green-dark); margin: 2px 0 4px; }
.pr-dact { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; align-items: center; }
.pr-dact .in { max-width: 260px; }
.pr-batch { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 8px; }
.pr-brow { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.pr-brow .in { max-width: 320px; }
.pr-more { display: flex; flex-direction: column; gap: 10px; white-space: normal; }
.pr-close { margin-top: 4px; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r, 8px); background: #fff; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 18px; }
.pr-close h3 { margin: 0; font-size: 15px; font-weight: 500; flex: 1 1 100%; }
.pr-close p { margin: 0; flex: 1 1 360px; white-space: normal; }
.pr-why-inline { color: var(--amber); font-weight: 500; }
@media (max-width: 1100px) { .pr-trow { grid-template-columns: 1fr 1fr; } .pr-dbox { grid-template-columns: 1fr; } }
@media (max-width: 600px) { .pr-trow { grid-template-columns: 1fr; } }
/* 24d. Mobilní pracoviště › Poslední akce (prompt 60, Issue #139): sbalený blok pod hlavní prací, kompaktní řádky, čekající zvlášť */
.mw-recent > summary { cursor: pointer; list-style: none; }
.mw-recent > summary::-webkit-details-marker { display: none; }
.mw-recent > summary::before { content: "▸ "; color: var(--muted); }
.mw-recent[open] > summary::before { content: "▾ "; }
.mw-recent-ctx { margin: 6px 0; font-size: 14px; }
.mw-recent-ctx .k { color: var(--muted); font-size: 12px; }
.mw-recent-list { margin: 4px 0 8px; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 6px; font-size: 14px; line-height: 1.35; }
.mw-recent-list li { padding: 6px 8px; border: 1px solid var(--line); border-radius: 8px; background: #fff; overflow-wrap: anywhere; }
.mw-recent-list li .t { color: var(--muted); font-size: 12.5px; }
.mw-recent-list li.mw-recent-undo, .mw-recent-list li.mw-recent-cancelled { background: #fafaf7; color: var(--ink2); }
.mw-recent-pending { margin: 6px 0; padding: 6px 8px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: 8px; font-size: 14px; }
.mw-recent-pending ul { margin: 4px 0 0; padding-left: 18px; }
.mw-recent-err { color: var(--red); font-size: 14px; }
.mw-recent-full { display: block; margin: 4px 0 8px; color: var(--green-dark); font-weight: 500; text-decoration: underline; }
.mw-recent-full .muted { display: block; font-weight: 400; text-decoration: none; font-size: 13px; }
.mw-recent-list li.mw-recent-wait { border-color: var(--amber-line); background: var(--amber-soft); }
/* Odpis ze skladu (prompt 61, Issue #154): přehled před odesláním, výsledek podle potvrzení serveru, nevybraný sklad */
.mw-off { opacity: .55; }
.mw-wo-sum { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 6px 0; }
.mw-wo-sum div { border: 1px solid var(--line); border-radius: var(--r); padding: 6px 8px; min-width: 0; }
.mw-wo-sum dt { color: var(--muted); font-size: 12px; }
.mw-wo-sum dd { margin: 2px 0 0; font-weight: 700; font-size: 16px; overflow-wrap: anywhere; }
#mw-wo-mode[data-mode="execute"], #mw-sum-effect { color: var(--ink); }
.mw-wo-result[data-result="executed"] { border-color: var(--green-line, var(--line)); background: var(--green-soft); }
.mw-wo-result[data-result="proposed"] { border-color: var(--amber-line); background: var(--amber-soft); }
.mw-wo-confirm { margin: 6px 0; padding-left: 18px; max-height: 40vh; overflow-y: auto; font-size: 14px; }
/* ---------- Úvodní Přehled: souhrn a napojení e-shopů (Issue #152) ---------- */
.overview-range { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.overview-periods { display: flex; gap: 6px; flex-wrap: wrap; }
.overview-periods .overview-selected { background: var(--green-soft); border-color: var(--green-line); color: var(--green-dark); }
.overview-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.overview-kpi { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-panel); padding: 16px 20px; }
.overview-kpi .k { color: var(--ink2); font-size: 13.5px; }
.overview-kpi .v { margin: 7px 0 4px; font-size: 30px; line-height: 1.2; font-weight: 500; }
.overview-context { font-size: 13px; color: var(--ink2); }
.overview-kpi.overview-warning { background: var(--amber-soft); border-color: var(--amber-line); }
.overview-warning .v { color: var(--amber); }
.overview-table { table-layout: auto; }
.overview-table th, .overview-table td { white-space: normal; overflow-wrap: anywhere; }
.overview-table th:first-child { width: 29%; }
.overview-table td.num, .overview-table th.num { width: 10%; white-space: nowrap; }
.overview-table th:nth-child(5) { width: 19%; }
.overview-table th:last-child { width: 22%; }
.overview-table tfoot { background: var(--bg); font-weight: 500; }
.overview-foot { padding: 12px 20px; border-top: 1px solid var(--line); font-size: 13px; color: var(--ink2); }
.overview-sync summary { cursor: pointer; white-space: nowrap; }
.overview-sync .rs.muted .dot { background: var(--muted); }
.overview-sync-detail { padding-top: 10px; min-width: 160px; font-size: 13px; }
.overview-sync-detail dl { margin: 8px 0; }
.overview-sync-detail dl div { margin-bottom: 6px; }
.overview-sync-detail dd { margin: 0; font-weight: 500; }
.overview-facts { padding: 4px 20px 16px; margin: 0; }
.overview-facts > div { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; }
.overview-facts dd { margin: 0; font-weight: 500; }
.overview-details > summary { padding: 14px 20px; cursor: pointer; color: var(--ink2); font-weight: 500; }
.overview-tasks, .overview-help { margin: 0; padding: 0 20px 20px; }
.overview-help h2 { margin: 16px 0 8px; }
@media (max-width: 1000px) { .overview-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } .overview-bottom { grid-template-columns: 1fr; } }
/* 31. Vícenásobný výběr v rozbalovací nabídce (prompt 62, Issue #155; templates/_multiselect.html, static/js/multiselect.js): sbalené pole
   vzhledu .sel se souhrnem, nabídka pod polem zůstává otevřená při zaškrtávání, Vybrat vše / Zrušit výběr, vysvětlivka významu prázdné hodnoty */
.msel { position: relative; width: 100%; max-width: 420px; }
.msel-btn { width: 100%; min-height: 34px; display: flex; align-items: center; gap: 8px; padding: 4px 10px; border: 1px solid var(--line2); border-radius: var(--r);
  background: #fff; font: inherit; font-size: 14px; color: var(--ink); text-align: left; cursor: pointer; }
.msel-btn:focus-visible, .msel.open .msel-btn { outline: 2px solid var(--green); outline-offset: -1px; border-color: var(--green); }
.msel-sum { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.msel.msel-empty .msel-sum { color: var(--ink2); }
.msel-caret { color: var(--muted); }
.msel-panel { position: absolute; z-index: 30; left: 0; right: 0; top: calc(100% + 4px); background: #fff; border: 1px solid var(--line2); border-radius: var(--r);
  box-shadow: 0 6px 18px rgba(0, 0, 0, .12); padding: 8px; max-height: 340px; overflow-y: auto; }
.msel-acts { display: flex; gap: 6px; flex-wrap: wrap; padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--line); }
.msel-opts { display: flex; flex-direction: column; }
.msel-opt { display: flex; align-items: center; gap: 8px; min-height: 36px; padding: 4px 6px; border-radius: 6px; cursor: pointer; font-size: 14px; }
.msel-opt:hover, .msel-opt:focus-within { background: var(--hover); }
.msel-opt.msel-extra span { color: var(--amber); }
.msel-kept { margin-top: 4px; color: var(--amber); }
.msel-note { margin: 6px 2px 0; font-size: 12.5px; color: var(--muted); line-height: 1.4; }
/* 32. Skladové pozice › Štítky pozic a Vymazat přiřazení (prompt 63, Issue #157): společný výběr pozic (skupiny podle předpony, „x z y“),
   formáty štítků, náhled dopadu na e-shopy a potvrzení rozsahu */
.ppick { border: 1px solid var(--line); border-radius: var(--r); padding: 10px 12px; margin-bottom: 10px; background: #fff; }
.ppick-title { font-weight: 500; margin-bottom: 6px; }
.ppick-scope { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.ppick-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.ppick-q { flex: 1 1 220px; max-width: 360px; }
.ppick-count { font-weight: 500; color: var(--ink2); }
.ppick-g { border-top: 1px solid var(--line); }
.ppick-g > summary { cursor: pointer; padding: 7px 4px; display: flex; gap: 10px; align-items: baseline; list-style: none; }
.ppick-g > summary::-webkit-details-marker { display: none; }
.ppick-g > summary::before { content: "▸"; color: var(--muted); }
.ppick-g[open] > summary::before { content: "▾"; }
.ppick-g.has > summary .ppick-gt { color: var(--green-dark); }
.ppick-gt { font-weight: 500; min-width: 140px; }
.ppick-gall { display: flex; gap: 8px; align-items: center; padding: 2px 4px 6px 22px; font-size: 13.5px; color: var(--ink2); }
.ppick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 4px 10px; padding: 0 4px 10px 22px; }
.ppick-p { display: flex; gap: 6px; align-items: center; min-height: 30px; font-size: 14px; cursor: pointer; }
.ppick-p.off span:first-of-type { color: var(--muted); }
.pl-form .pblock, .pc-form .pblock { margin-bottom: 14px; }
.pl-formats { border: 0; padding: 0; margin: 0 0 10px; display: flex; flex-direction: column; gap: 6px; }
.pl-fmt { height: auto; padding: 8px 10px; white-space: normal; align-items: flex-start; max-width: 640px; }
.pl-code { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.pl-code .note { flex-basis: 100%; }
.pl-copies { max-width: 220px; margin-bottom: 10px; }
.pc-whs, .pc-shops, .pc-modes { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.pc-mode { display: flex; margin-bottom: 6px; max-width: 520px; }
.pc-sum, .pc-targets { margin: 8px 0 12px; }
.pc-sum .tot td { font-weight: 500; border-top: 2px solid var(--line2); }
.pc-confirm { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; margin-top: 12px; padding: 12px; border: 1px solid var(--red-line); border-radius: var(--r); background: var(--red-soft); }
.pc-ok { height: auto; white-space: normal; padding: 8px 10px; }
.pc-form .al .lab, .pl-form .al .lab { white-space: normal; display: block; font-weight: 400; }
.pc-skip, .pc-batches { margin: 6px 0 10px; padding-left: 18px; font-size: 14px; }
/* 32b. Náhled Vymazat přiřazení po pozicích (prompt 69): souhrn, bloky pozic s kompaktními řádky, stránkování, zneplatněný náhled */
.pc-preview h3[tabindex], .pc-errors { scroll-margin-top: calc(var(--thead-top) + 16px); }
.pc-preview h3[tabindex]:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; }
.pc-facts { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px 16px; margin: 0 0 12px; }
.pc-facts div { border: 1px solid var(--line); border-radius: var(--r); padding: 6px 10px; background: #fff; min-width: 0; }
.pc-facts dt { font-size: 12.5px; color: var(--muted); }
.pc-facts dd { margin: 0; overflow-wrap: anywhere; }
.pc-only { margin-bottom: 12px; }
.pc-h { margin: 16px 0 4px; font-size: 15px; font-weight: 600; }
.pc-pager { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; justify-content: space-between; margin: 8px 0; font-size: 14px; }
.pc-pager-b { display: flex; gap: 8px; }
.pc-pos { border: 1px solid var(--line); border-radius: var(--r); margin: 0 0 8px; background: #fff; }
.pc-pos-h { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; padding: 6px 12px; border-bottom: 1px solid var(--line); background: var(--hover); }
.pc-pos.empty .pc-pos-h { border-bottom: 0; }
.pc-code { font-size: 15px; }
.pc-n { margin-left: auto; color: var(--ink2); font-size: 13.5px; }
.pc-items { list-style: none; margin: 0; padding: 0; }
.pc-item { display: flex; gap: 10px; align-items: flex-start; padding: 6px 12px; border-top: 1px solid var(--line); font-size: 14px; }
.pc-item:first-child { border-top: 0; }
.pc-item .thumb { flex: 0 0 36px; margin-top: 2px; cursor: default; }
.pc-what { min-width: 0; flex: 1; overflow-wrap: anywhere; }
.pc-res { display: flex; flex-wrap: wrap; gap: 2px 14px; font-size: 13.5px; }
.pc-del { color: var(--red); font-weight: 500; }
.pc-none { color: var(--amber); font-weight: 500; }
.pc-empty { margin: 0; padding: 6px 12px 8px; color: var(--ink2); font-size: 14px; }
.pc-confirm-sum { flex-basis: 100%; margin: 0; }
.pc-count { max-width: 140px; }
.pc-err-list { grid-column: 1 / -1; margin: 4px 0 0; padding-left: 20px; }
.pc-preview.stale .pc-pos, .pc-preview.stale .pc-facts { opacity: .45; }
/* 34. Zrušit inventuru (prompt 67, Issue #160): souhrn rušené inventury, důvod a výslovné potvrzení */
.ic-sum { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0 0 12px; }
.ic-sum div { display: contents; }
.ic-sum dt { color: var(--muted); }
.ic-sum dd { margin: 0; font-weight: 500; overflow-wrap: anywhere; }
.ic-confirm { display: flex; flex-direction: column; gap: 12px; max-width: 720px; margin-top: 12px; }
.ic-ok { height: auto; white-space: normal; padding: 8px 10px; }
.ic-actions { display: flex; gap: 8px; }
.ic-form .al .lab { white-space: normal; display: block; }
/* 35. Skladové pozice › Mobilní pracoviště (prompt 68): kroky s načteným stavem, volba dopadu na e-shopy bez předvýběru, výběr pozic na telefonu */
.mw-picked { float: right; font-weight: 400; font-size: 14px; color: var(--ink2); }
.mw-picked.ok { color: var(--green-hover); font-weight: 500; }
fieldset.mw-card { margin: 0; }
fieldset.mw-card > legend { float: left; width: 100%; padding: 0; }
.mw-shops .mw-check, #mw-scope .mw-check { align-items: flex-start; min-height: 44px; }
.mw-shops .mw-check input, #mw-scope .mw-check input { flex: 0 0 auto; margin-top: 2px; }
.mw-shop-list { display: flex; flex-direction: column; padding-left: 34px; }
#mw-preview-out p, #mw-preview-out ul { margin: 4px 0; font-size: 14.5px; }
#mw-preview-out ul { padding-left: 18px; }
.mw-body .ppick { min-width: 0; }
.mw-body .ppick-bar { flex-wrap: wrap; }
.mw-body .ppick-q { flex: 1 1 100%; }
.mw-body .ppick-grid { grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); }
.mw-body .ppick-p { min-height: 44px; }

/* ---------- 33. Ceny a slevy (prompt 76): kurzy, přepínač e-shopů, detail pravidel, náhled ---------- */
.pr-form { display: flex; flex-direction: column; gap: 14px; max-width: 1240px; }
.pr-form .in.num { width: 120px; text-align: right; }
.pr-unit-in { display: inline-flex; align-items: center; gap: 6px; }
.pr-unit { color: var(--muted); font-size: 13px; white-space: nowrap; }
.pr-used { color: var(--muted); font-size: 12px; max-width: 240px; }
.pr-rates .lf-row, .pr-sur .lf-row, .pr-main { align-items: flex-start; }   /* pod polem může být poznámka / chyba různé výšky – pole lícují nahoře u popisku */
.pr-ro { display: inline-flex; align-items: center; min-height: 34px; color: var(--ink2); }
.lf-fld.has-err .in, .lf-fld.has-err .sel { border-color: var(--red); }
.lf-fld .red { font-size: 12.5px; max-width: 320px; }
.pr-switch { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; }
.pr-tab { gap: 6px; }
.pr-tab.on { background: var(--green-tint); border-color: var(--green); color: var(--green-hover); }
.pr-tab.err { border-color: var(--red); }
.pr-tab-dot { color: var(--amber); font-size: 12px; }
.pr-tab-err { color: var(--red); font-size: 12px; font-weight: 700; }
.pr-js [data-pr-hidden] { display: none; }
.pr-shop { display: flex; flex-direction: column; gap: 12px; border-top: 1px solid var(--line); padding-top: 12px; }
.pr-shop-h { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 16px; }
.pr-shop-h h4 { margin: 0; font-size: 16px; font-weight: 500; }
.pr-counts { margin-left: auto; color: var(--ink2); font-size: 13px; }
.pr-sandbox { margin: 0; }
.pr-facts { display: grid; grid-template-columns: minmax(140px, 180px) minmax(0, 1fr); gap: 6px 14px; margin: 0; font-size: 13.5px; }
.pr-facts dt { color: var(--muted); }
.pr-facts dd { margin: 0; }
.pr-sur > summary { cursor: pointer; padding: 8px 0; }
.pr-sur .lf-row { padding: 6px 0 4px; }
.pr-preview { border: 1px solid var(--line); border-radius: var(--r); padding: 10px 12px; max-width: 520px; }
.pr-preview-h { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; margin-bottom: 6px; }
.pr-shop.pr-stale .pr-preview-t { opacity: .55; }
.pr-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.work header .pr-dirty { color: var(--amber); font-size: 13.5px; }
.work header .pr-saved { font-size: 13.5px; }
@media (max-width: 760px) { .pr-facts { grid-template-columns: minmax(0, 1fr); } .pr-counts { margin-left: 0; } }
/* ---------- 34. Náhled na sklad › Kde je produkt (prompt 78) ---------- */
.pf-find { margin-bottom: 14px; }
.pf-q { flex: 1 1 360px; max-width: 560px; }
.pf-q .in { width: 100%; height: 38px; font-size: 15px; }
.pf-choices > summary { cursor: pointer; padding: 8px 0; }
.pf-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 6px; }
.pf-choice { display: flex; gap: 10px; align-items: center; padding: 6px 10px; border: 1px solid var(--line); border-radius: var(--r); color: var(--ink); }
.pf-choice:hover { background: var(--hover); text-decoration: none; }
.pf-choice.on { background: var(--green-tint); border-color: var(--green); }
.pf-id { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: 13.5px; }
.pf-card { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.pf-ident { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.pf-name { font-size: 16px; font-weight: 500; }
.pf-cardlink { margin-left: auto; }
.pf-scroll { overflow-x: auto; }
.pf-table { width: 100%; max-width: 1100px; }
.pf-table th, .pf-table thead th { position: static; }          /* malá tabulka v bloku – hlavička se nepřilepuje pod pracovní hlavičku */
.pf-table th.num, .pf-table td.num { width: 110px; }
.pf-table td { white-space: normal; vertical-align: top; }
.pf-table tr.pf-zero td { color: var(--muted); }
.pf-table tfoot td { font-weight: 500; border-top: 1px solid var(--line2); }
.pf-pos { margin: 0 4px 4px 0; }
.pf-more { display: inline; } .pf-more > summary { display: inline; cursor: pointer; color: var(--green-dark); font-size: 13px; }
/* 36. Skladové pozice › Obsah a přesuny pozic (prompt 74): čtyři kroky v blocích .pblock (32/32b), obsah po produktech se zaškrtnutím,
   tři akce, náhled po produktech (odebere se červeně, přidá se zeleně, bez pozice oranžově), skrytý výchozí odesílač Enteru v hledání */
.oc-default { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); border: 0; }
.oc-only { margin-bottom: 14px; }
.oc-wh { margin: 0 0 10px; }
.oc-count { display: flex; flex-wrap: wrap; gap: 4px 18px; margin-bottom: 10px; font-size: 14px; }
.oc-note-msg { margin-bottom: 10px; }
.oc-search { margin-bottom: 10px; }
.oc-q { flex: 1 1 300px; max-width: 460px; }
.oc-selbar { display: flex; flex-wrap: wrap; gap: 8px 10px; align-items: center; margin-bottom: 10px; }
.oc-selbar .note { flex: 1 1 260px; margin: 0; }
.oc-emptypos { margin: 0 0 10px; padding: 6px 10px; border: 1px dashed var(--line2); border-radius: var(--r); font-size: 14px; color: var(--ink2); overflow-wrap: anywhere; }
.oc-none { border: 1px solid var(--line); border-radius: var(--r); }
.oc-items, .oc-prev { border: 1px solid var(--line); border-radius: var(--r); background: #fff; margin-bottom: 8px; }
.oc-pick { display: inline-flex; align-items: center; min-height: 28px; flex: 0 0 auto; cursor: pointer; }
.oc-acts { border: 0; padding: 0; margin: 0 0 12px; display: flex; flex-wrap: wrap; gap: 8px; }
.oc-acts legend { margin-bottom: 6px; }
.oc-act { height: auto; padding: 8px 12px; white-space: normal; align-items: flex-start; flex: 1 1 260px; max-width: 420px; }
.oc-act input { margin-top: 2px; }
.oc-act:has(input:checked) { border-color: var(--green-line); background: var(--green-tint); }
.oc-act-del:has(input:checked) { border-color: var(--red-line); background: var(--red-soft); }
.oc-act:has(input:disabled) { opacity: .7; cursor: not-allowed; }
.oc-target { margin-bottom: 12px; }
.oc-target .lf-fld { flex: 0 1 300px; }
.oc-target .note { flex: 1 1 240px; margin: 0; }
.oc-shopsf { border: 0; padding: 0; margin: 0 0 12px; }
.oc-shopsf legend { margin-bottom: 6px; }
.oc-shopsf .pc-mode { height: auto; padding: 8px 10px; white-space: normal; max-width: 720px; }
.oc-shopsf, .oc-preview h3[tabindex] { scroll-margin-top: calc(var(--thead-top) + 16px); }
.oc-add { color: var(--green-dark); font-weight: 500; }
.oc-same .pc-what > div:first-child { color: var(--ink2); }
.oc-confirm { border-color: var(--green-line); background: var(--green-tint); }
.oc-preview.stale .pc-items, .oc-preview.stale .pc-facts { opacity: .45; }
.oc-recent { margin-top: 4px; }
.oc-res td { white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 900px) { .oc-act { max-width: none; } .oc-q { max-width: none; } }

/* 36b. Mobilní Obsah a přesuny pozic (prompt 74): obsah pozic jako seznam se zaškrtnutím (cíl dotyku 44 px), náhled po produktech */
.mw-oc-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.mw-oc-item { border-top: 1px solid var(--line); }
.mw-oc-item:first-child { border-top: 0; }
.mw-oc-item .mw-check { align-items: flex-start; min-height: 44px; padding: 6px 0; font-size: 14.5px; }
.mw-oc-item .mw-check input { flex: 0 0 auto; margin-top: 2px; }
.mw-oc-item .mw-check > span { min-width: 0; overflow-wrap: anywhere; }
.mw-oc-img { width: 48px; height: 36px; object-fit: cover; border-radius: 4px; flex: 0 0 48px; }
#mw-act .mw-check { align-items: flex-start; min-height: 44px; }
#mw-act .mw-check input { flex: 0 0 auto; margin-top: 2px; }
.mw-oc-prev { list-style: none; padding: 0; margin: 6px 0; display: flex; flex-direction: column; gap: 6px; font-size: 14px; overflow-wrap: anywhere; }
.mw-oc-prev li { border-top: 1px solid var(--line); padding-top: 6px; }

/* ---------- Fronta a dávky textů a překladů – filtry a výběr (prompt 80, Issue #219) ---------- */
.qf .qf-docs .in { width: 240px; }
.qf .chips { margin-top: 2px; }
.sec > form > .sh { padding: 12px 20px; border-bottom: 1px solid var(--line); display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }   /* hlavička sekce uvnitř formuláře výběru (fronty) */
.qf-scope { flex-wrap: wrap; align-items: center; }
.qf-scope .chkbox { white-space: nowrap; }
.qf-table td { vertical-align: top; }
.qf-table th { white-space: normal; line-height: 1.25; }          /* dlouhé názvy sloupců (Do fronty zařadil, Založeno z dokladu) na dva řádky místo zkrácení */
.qf-table td.qf-wrap { white-space: normal; }
.qf-preview .sb { padding: 10px 14px; }
/* 37. K tisku › Karty k tisku z dokladů (prompt 81, Issue #220): postup v pěti krocích (bloky .pblock z 21k/36), vybrané doklady,
   položky dokladů a počet štítků, sloupce CSV s pořadím, náhled CSV s vyznačeným chybějícím / rizikovým údajem */
.lb-switch { margin: 0 0 8px; }
.lb-form .pblock { margin-bottom: 14px; }
.lb-form .sub { font-size: 12.5px; line-height: 1.35; }
.lb-steps { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 4px; font-size: 13.5px; color: var(--ink2); }
.lb-steps li { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px 4px 4px; border: 1px solid var(--line); border-radius: 14px; background: #fff; }
.lb-steps li + li::before { content: "→"; color: var(--muted); margin: 0 4px 0 -2px; }
.lb-steps li.on { border-color: var(--green-line); background: var(--green-tint); color: var(--ink); font-weight: 500; }
.lb-steps li.done .dn-step { background: var(--green); color: #fff; }
.lb-search { margin-bottom: 10px; }
.lb-q { flex: 1 1 280px; max-width: 420px; }
.lb-found { margin-bottom: 8px; }
.lb-docs { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: var(--r); background: #fff; }
.lb-doc { display: flex; flex-wrap: wrap; gap: 4px 14px; align-items: center; padding: 8px 12px; border-top: 1px solid var(--line); font-size: 14px; }
.lb-doc:first-child { border-top: 0; }
.lb-doc > span:first-child { min-width: 0; overflow-wrap: anywhere; }
.lb-doc-n { color: var(--ink2); }
.lb-doc-b { margin-left: auto; display: flex; flex-wrap: wrap; gap: 6px; }
.lb-modes { border: 0; padding: 0; margin: 0 0 10px; display: flex; flex-wrap: wrap; gap: 8px; }
.lb-modes legend { margin-bottom: 6px; }
.lb-mode:has(input:checked) { border-color: var(--green-line); background: var(--green-tint); }
.lb-merge { height: auto; min-height: 34px; white-space: normal; padding: 6px 10px; margin-bottom: 10px; max-width: 820px; }
.lb-cnt { max-width: 90px; }
.lb-err { color: var(--red); }
.lb-cols { list-style: none; margin: 0 0 12px; padding: 0; max-width: 820px; border: 1px solid var(--line); border-radius: var(--r); background: #fff; }
.lb-col { display: flex; gap: 8px; align-items: center; padding: 3px 8px; border-top: 1px solid var(--line); font-size: 14px; }
.lb-col:first-child { border-top: 0; }
.lb-col.on { background: var(--green-tint); }
.lb-col-l { display: flex; gap: 8px; align-items: center; flex: 1; min-width: 0; cursor: pointer; overflow-wrap: anywhere; }
.lb-ord { width: 56px; height: 28px; text-align: right; }
.lb-col-b { display: flex; gap: 2px; }
.lb-format { margin-bottom: 10px; }
.lb-tpl { margin: 4px 0 14px; padding-top: 4px; border-top: 1px solid var(--line); }
.lb-tpl .lf-row { margin-bottom: 8px; }
.lb-csv th { white-space: normal; }
.lb-miss { color: var(--amber); font-weight: 500; }
.lb-miss::before { content: "⚠ "; }
.lb-risk { color: var(--amber); }
.lb-preview.stale .pc-facts, .lb-preview.stale .lb-csv { opacity: .45; }
.lb-final { display: flex; flex-wrap: wrap; gap: 8px 10px; align-items: center; }
.lb-final .note { flex-basis: 100%; margin: 0; }
.lb-errors { scroll-margin-top: calc(var(--thead-top) + 16px); }
/* 38. Nastavení › Uživatelé – e-mail, filtr stavu, ukončení přístupu (prompt 83, Issue #222): smazat nepoužitý × deaktivovat × aktivovat
   znovu, potvrzení s dopadem a předáním úkolů inventury; potvrzení sdílí souhrn a tlačítka se Zrušit inventuru (34) */
.ua-state { display: inline-flex; align-items: center; gap: 8px; }
.ua-state .sel { width: auto; min-width: 190px; }
.tt tr.ua-off td { color: var(--muted); }
.tt tr.ua-off td a strong { color: var(--muted); }
.ua-alert { margin: 12px 20px 0; }
.ua-email-note { margin-top: 4px; max-width: 560px; }
.ua-email-changed { margin-top: 6px; max-width: 560px; }
.ua-body { padding: 0 20px 20px; }
.ua-confirm { max-width: 980px; display: flex; flex-direction: column; gap: 12px; }
.ua-title { margin: 4px 0 0; font-size: 16px; }
.ua-tasks h4 { margin: 4px 0 4px; font-size: 14.5px; }
.ua-tasks p { margin: 0 0 8px; }
.ua-ttable td { vertical-align: top; }
.ua-ttable .sel { width: 100%; }
.ua-docs { overflow-wrap: anywhere; }
/* 39. Pěstování - texty (prompt 84, Issue #224; templates/growing/, static/js/growing.js): filtry + abeceda v pracovní hlavičce,
   seznam názvů vlevo (vlastní posuv) a čitelný detail vpravo (přilepený); pod 1100 px pod sebou; pod 760 px levé menu jako lišta
   s tlačítkem Menu a hlavička se neposouvá s obsahem (telefon). Jen tokeny a sdílené prvky (.sec, .btn, .lf-row, .chip, .al). */
.gr-filters { gap: 8px 12px; }
.gr-filters .gr-q { flex: 1 1 320px; max-width: 520px; }
.gr-filters .gr-q .in { width: 100%; }
.gr-filters .gr-k .sel { min-width: 220px; max-width: 280px; }
.gr-abc { display: flex; flex-wrap: wrap; gap: 4px; }
.gr-l { display: inline-flex; align-items: center; justify-content: center; min-width: 30px; height: 28px; padding: 0 7px; border: 1px solid var(--line2); border-radius: 6px; background: #fff; color: var(--ink2); font-size: 13px; text-decoration: none; }
.gr-l:hover { background: var(--hover); color: var(--ink); text-decoration: none; }
.gr-l.on { background: var(--green-tint); border-color: var(--green); color: var(--green-hover); font-weight: 500; }
.gr-l.empty { color: var(--muted); border-style: dashed; }
.gr-chips .gr-clear { margin-left: 4px; }
.gr-layout { display: grid; grid-template-columns: minmax(260px, 360px) minmax(0, 1fr); gap: 16px; align-items: start; }
.gr-list { position: sticky; top: calc(var(--thead-top) + 12px); max-height: calc(100vh - var(--thead-top) - 36px); display: flex; flex-direction: column; min-height: 0; }
.gr-lh { padding: 10px 14px; border-bottom: 1px solid var(--line); font-size: 13.5px; color: var(--ink2); display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; background: var(--green-tint); border-radius: var(--r-panel) var(--r-panel) 0 0; }
.gr-lh .gr-revf { margin-left: auto; font-size: 13px; }
.gr-items { list-style: none; margin: 0; padding: 6px; overflow-y: auto; min-height: 0; }
.gr-item { display: flex; flex-direction: column; gap: 1px; padding: 7px 10px; border-radius: var(--r); color: var(--ink); text-decoration: none; border-left: 3px solid transparent; }
.gr-item:hover { background: var(--hover); text-decoration: none; color: var(--ink); }
.gr-item.on { background: var(--green-tint); border-left-color: var(--green); }
.gr-it-t { font-size: 14.5px; font-weight: 500; overflow-wrap: anywhere; }
.gr-item.on .gr-it-t { color: var(--green-hover); }
.gr-it-c { font-size: 12.5px; color: var(--muted); }
.gr-it-s { font-size: 12.5px; color: var(--ink2); overflow-wrap: anywhere; }
.gr-empty { padding: 16px; font-size: 14px; }
.gr-empty .btn { margin-top: 4px; }
.gr-detail { min-width: 0; scroll-margin-top: calc(var(--thead-top) + 12px); }
.gr-dh { padding: 16px 22px 14px; border-bottom: 1px solid var(--line); display: flex; flex-direction: column; gap: 6px; }
.gr-dcat { font-size: 13px; color: var(--green-dark); }
.gr-dh h2 { font-size: 21px; font-weight: 500; overflow-wrap: anywhere; }
.gr-alt, .gr-note { font-size: 13px; color: var(--muted); }
.gr-acts { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 6px; }
.gr-copied { font-size: 13.5px; color: var(--green-dark); font-weight: 500; }
.gr-review { margin: 12px 22px 0; grid-template-columns: 1fr; }
.gr-review form { margin-top: 4px; }
.gr-body { padding: 18px 22px 8px; font-size: 15px; line-height: 1.65; max-width: 78ch; overflow-wrap: break-word; user-select: text; }
.gr-body p { margin: 0 0 .9em; }
.gr-body ul, .gr-body ol { margin: 0 0 .9em 1.3em; padding: 0; }
.gr-body h1, .gr-body h2, .gr-body h3, .gr-body h4 { font-size: 16px; margin: 1em 0 .4em; }
.gr-foot { padding: 10px 22px 14px; border-top: 1px solid var(--line); font-size: 12.5px; color: var(--muted); line-height: 1.5; }
.gr-fallback { margin: 0 22px 16px; padding: 10px 12px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: var(--r); display: flex; flex-direction: column; gap: 8px; }
.gr-fallback p { margin: 0; font-size: 13.5px; }
.gr-fallback .btn { align-self: flex-start; }
/* formulář */
.gr-formpage { display: flex; flex-direction: column; gap: 12px; }
.gr-form { padding: 8px 0 18px; }
.gr-form .frow2 > .fld .in, .gr-form .frow2 > .fld .sel { max-width: none; }
.gr-form .err-text { color: var(--red); }
.gr-similar, .gr-draft { margin: 4px 20px; }
.gr-similar .al { grid-template-columns: 1fr; }
.gr-sim-list { padding-left: 2px; }
.gr-confirm { margin-top: 6px; height: auto; padding: 6px 10px; white-space: normal; }
.gr-draft { grid-template-columns: 1fr; }
.gr-textfld .ed-mount { font-size: 14.5px; }
.gr-textfld .ed-area .ProseMirror { min-height: 260px; max-height: 60vh; line-height: 1.6; }
.gr-src { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 13px; }
.gr-preview { border: 1px dashed var(--line2); border-radius: var(--r); background: var(--panel); max-width: none; padding: 12px 16px; max-height: 420px; overflow: auto; }
.gr-conflict { grid-template-columns: 1fr; }
.gr-conf-b p { margin: 6px 0; }
.gr-conf-cur { border: 1px solid var(--line); background: #fff; border-radius: var(--r); padding: 10px 12px; margin: 6px 0; max-height: 320px; overflow: auto; }
.gr-conf-cur .gr-body { padding: 6px 0 0; font-size: 14px; }
.gr-conf-cur .gr-body ul { list-style: disc; display: block; } .gr-conf-cur .gr-body ol { list-style: decimal; display: block; }   /* .al ul je jinak seznam hlášek bez odrážek */
/* historie a kategorie */
.gr-diff { margin: 0 22px 16px; font-size: 13.5px; }
.gr-diff ul { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.gr-diff li { padding: 4px 8px; border-radius: 6px; overflow-wrap: anywhere; }
.gr-diff li.dold { background: var(--red-soft); }
.gr-diff li.dnew { background: var(--green-tint); }
.gr-diff li.dsame { color: var(--muted); }
.gr-cats { max-width: 920px; }
.gr-cats td .in { width: 100%; max-width: 420px; }
.gr-cat-acts { display: flex; gap: 6px; align-items: center; }
.gr-inline { display: inline; }
.gr-cat-new { padding: 14px 20px 16px; }
.gr-navbtn { display: none; }
@media (max-width: 1100px) {
  .gr-layout { grid-template-columns: minmax(0, 1fr); }
  .gr-list { position: static; max-height: 46vh; }
}
@media (max-width: 760px) {
  body:has(.gr-page) .app { flex-direction: column; }
  body:has(.gr-page) .nav { position: static; width: auto; flex: none; height: auto; padding-bottom: 0; align-self: stretch; }
  body:has(.gr-page) .nav .brand { margin-bottom: 0; border-bottom: 0; padding: 10px 16px; }
  body:has(.gr-page) .nav > a, body:has(.gr-page) .nav .foot { display: none; }
  body:has(.gr-page) .nav.gr-nav-open > a { display: flex; }
  body:has(.gr-page) .nav.gr-nav-open .foot { display: flex; padding-bottom: 12px; }
  body:has(.gr-page) .gr-navbtn { display: inline-flex; margin-left: auto; height: 30px; align-items: center; padding: 0 12px; border-radius: var(--r); border: 1px solid rgba(255, 255, 255, .35); background: transparent; color: #fff; font-size: 13.5px; cursor: pointer; }
  body:has(.gr-page) .ws { padding-left: 0; }
  body:has(.gr-page) .tabbar { padding: 0 8px; }
  body:has(.gr-page) .qs { display: none; }
  body:has(.gr-page) .work { position: static; padding: 10px 16px; }
  body:has(.gr-page) .work header { flex-wrap: wrap; }
  body:has(.gr-page) main { padding: 12px 16px 24px; }
  .gr-filters .gr-q, .gr-filters .gr-k { flex: 1 1 100%; max-width: none; }
  .gr-filters .gr-k .sel { max-width: none; width: 100%; }
  .gr-l { min-width: 34px; height: 32px; }
  .gr-dh, .gr-body, .gr-foot { padding-left: 16px; padding-right: 16px; }
  .gr-review, .gr-fallback, .gr-diff { margin-left: 16px; margin-right: 16px; }
  .gr-list { max-height: none; }
  .gr-items { max-height: 50vh; }
}
/* 40. Dokončení produktových karet u příjemek (prompt 85): obdélníkové boxy s mírně zaoblenými rohy (ne kolečka) odděleně od stavu dokladu,
   souhrn nedostatků v potvrzení uzavření a v detailu uzavřené příjemky, zdrojový doklad a nedostatky v přehledu produktů */
.cards-box { display: inline-flex; align-items: center; justify-content: center; gap: 4px; min-height: 26px; padding: 3px 10px; border: 1px solid; border-radius: 6px;
  font-size: 12.5px; font-weight: 600; line-height: 1.25; white-space: nowrap; text-decoration: none; max-width: 100%; }
.cards-box.todo { background: var(--amber-soft); border-color: var(--amber-line); color: var(--amber); }
.cards-box.todo:hover, .cards-box.todo:focus-visible { background: #FDEFD6; border-color: #E8C994; color: #8F520A; }
.cards-box.ok { background: var(--green-tint); border-color: var(--green-line); color: var(--green-dark); font-weight: 500; }
.cards-box.pending { background: var(--hover); border-color: var(--line2); color: var(--ink2); font-weight: 500; }
.cards-box .cb-ic { font-weight: 400; }
.cards-box .cb-more { font-weight: 500; opacity: .85; }
.lt-cards { vertical-align: middle; }
.lt-cards .cards-box { width: 100%; white-space: normal; text-align: center; }
.cards-pill { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border: 1px solid var(--amber-line); border-radius: 6px; background: var(--amber-soft);
  color: var(--amber); font-size: 12.5px; font-weight: 600; text-decoration: none; white-space: nowrap; }
.cards-pill:hover { background: #FDEFD6; }
.cards-sum { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 16px; margin: 12px 0; padding: 12px 16px; border-radius: var(--r);
  background: var(--amber-soft); border: 1px solid var(--amber-line); color: var(--ink2); }
.cards-sum.ok { background: var(--green-tint); border-color: var(--green-line); }
.cards-sum .cs-n { font-size: 24px; font-weight: 700; color: var(--amber); line-height: 1; }
.cards-sum .cs-l { margin-left: -10px; font-weight: 600; color: var(--amber); }
.cards-sum .cs-t { white-space: nowrap; }
.cards-sum .cs-k strong { margin-left: 4px; color: var(--ink); }
.cards-sum .cs-sep { width: 1px; align-self: stretch; background: var(--amber-line); }
.cards-sum .cs-note { flex-basis: 100%; font-size: 12.5px; }
.cards-sec .sh { flex-wrap: wrap; }
.cards-src { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 6px; margin: 0 0 12px; padding: 10px 14px; border-radius: var(--r);
  background: var(--green-tint); border: 1px solid var(--green-line); color: var(--green-hover); }
.cards-src .cs-l { font-weight: 600; }
.cards-src .cs-hint { flex-basis: 100%; font-size: 12.5px; }
.card-todo { margin-top: 6px; }
.card-todo .ct-miss { color: var(--amber); font-weight: 600; font-size: 12.5px; white-space: normal; }
.card-todo details { margin: 2px 0 6px; font-size: 12.5px; }
.card-todo details > summary { cursor: pointer; color: var(--green-dark); width: fit-content; }
.card-todo details > summary:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; border-radius: 3px; }
.card-todo .ct-list { margin: 4px 0 2px; padding-left: 16px; font-size: 12.5px; color: var(--ink2); white-space: normal; }
.card-todo .ct-list a { color: var(--ink2); }
.card-todo .ct-var { font-size: 12.5px; margin-bottom: 6px; white-space: normal; }
td.cards-done { color: var(--green-dark); font-weight: 600; }

/* ---------- Fronty CZ textů a zahraničních překladů – společný postup, bloky dávek, selhané, historie (prompt 86, Issue #231) ---------- */
.qx-intro { display: flex; flex-direction: column; gap: 8px; }
.qx-switch { display: flex; gap: 8px; flex-wrap: wrap; }
.qx-lead { margin: 0; color: var(--ink2); }
.qx-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 18px; font-size: 13.5px; color: var(--ink2); }
.qx-steps li + li::before { content: "→ "; color: var(--muted); }
.qx-steps b { color: var(--green-dark); font-weight: 500; }
.qx-fetch { margin: 0; }
.qx-msgs { display: flex; flex-direction: column; gap: 8px; }
.qf .qf-q { flex: 1 1 240px; max-width: 340px; }
.qf .qf-q .in { width: 100%; }
.qx-batches { display: flex; flex-direction: column; gap: 14px; }
.qx-batches, .qx-batch, .qx-fold { scroll-margin-top: calc(var(--thead-top) + 12px); }   /* kotva / pozornost po sestavení pod pevnými vrstvami */
.qx-batches:empty { display: none; }
.qx-batch { border-color: var(--green-line); }
.qx-batch.qx-new { box-shadow: 0 0 0 2px var(--green); }
.qx-batch:focus { outline: none; }
.qx-bh { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; padding: 12px 20px; background: var(--green-tint); border-bottom: 1px solid var(--line); border-radius: var(--r-panel) var(--r-panel) 0 0; }
.qx-bh h2 { color: var(--green-dark); font-size: 16px; }
.qx-state { margin-left: auto; }
.qx-uncertain .qx-bh, .qx-failed .qx-bh { background: var(--amber-soft); }
.qx-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr)); gap: 12px; padding: 16px 20px; }
.qx-tile { background: var(--bg); }
.qx-tile:hover { border-color: var(--line); }                       /* dlaždice není odkaz */
.qx-tile .v { color: var(--green-dark); }
.qx-tile.qx-price { background: var(--amber-soft); border-color: var(--amber-line); }
.qx-tile.qx-price .v { color: var(--amber); }
.qx-sub { font-size: 12px; color: var(--muted); line-height: 1.35; margin-top: 3px; white-space: normal; overflow-wrap: anywhere; }
.qx-sub.warn, .qx-pop .warn { color: var(--amber); }
.qx-act { padding: 12px 20px 16px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.qx-act > p, .qx-act .note { margin: 0; }
.qx-act > .al { width: 100%; }
.qx-send { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0; }
.qx-confirm { white-space: normal; height: auto; min-height: 34px; padding: 6px 10px; max-width: 100%; }
.qx-big { height: 42px; padding: 0 22px; font-size: 15px; }
.qx-content { width: 100%; }
.qx-content > summary, .qx-more > summary, .qx-retry > summary { list-style: none; display: inline-flex; align-items: center; }
.qx-content > summary::-webkit-details-marker, .qx-more > summary::-webkit-details-marker, .qx-retry > summary::-webkit-details-marker, .qx-fold > summary::-webkit-details-marker { display: none; }
.qx-content > summary::after { content: "▸"; margin-left: 8px; }
.qx-content[open] > summary::after { content: "▾"; }
.qx-content[open] > summary { margin-bottom: 8px; }
.qx-ctable td { height: auto; padding: 6px; }
.qx-res { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.qx-foot { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: center; justify-content: space-between; padding: 10px 20px; border-top: 1px solid var(--line); }
.qx-foot-a { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.qx-foot form { margin: 0; }
.qx-selbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 10px 20px; border-bottom: 1px solid var(--line); }
.qx-count { font-size: 13.5px; color: var(--ink2); }
.qx-main-acts { display: flex; gap: 8px; flex-wrap: wrap; margin-left: auto; }
.qx-more, .qx-retry { position: relative; display: inline-block; }
.qx-pop { position: absolute; right: 0; z-index: 20; margin-top: 6px; width: min(380px, 80vw); background: #fff; border: 1px solid var(--line2); border-radius: var(--r); box-shadow: var(--shadow-pop); padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; white-space: normal; align-items: flex-start; }
.qx-pop p { margin: 0; font-size: 13px; }
.qx-allnote { margin: 0; padding: 8px 20px; background: var(--green-tint); border-bottom: 1px solid var(--line); font-size: 13.5px; }
.qx-table td { vertical-align: top; height: auto; padding-top: 8px; padding-bottom: 8px; overflow: visible; }   /* akce a rozbalovací nabídka se neořezávají */
.qx-racts { white-space: normal; }
.qx-racts .btn { white-space: nowrap; }
.qx-racts > * { margin: 0 4px 4px 0; }
.qx-fold > summary.qx-fold-h { cursor: pointer; padding: 14px 20px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; list-style: none; }
.qx-fold > summary.qx-fold-h::before { content: "▸"; color: var(--green-dark); }
.qx-fold[open] > summary.qx-fold-h::before { content: "▾"; }
.qx-fold[open] > summary.qx-fold-h { border-bottom: 1px solid var(--line); }
.qx-fold-t { font-size: 15.5px; font-weight: 500; }
.qx-fold-n { font-size: 13px; color: var(--muted); }
.qx-fold-b { padding: 0 0 8px; }
.qx-fold-b > .note, .qx-views, .qx-hf { padding: 10px 20px 0; margin: 0; }
.qx-views { display: flex; gap: 8px; flex-wrap: wrap; }
.qx-views .chip { padding: 0 12px; }
.qx-views .chip.on { background: var(--green-dark); color: #fff; }
.qx-hf { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: flex-end; padding-bottom: 10px; }
.qx-pager { padding: 8px 20px; }
.qx-pager-n { padding: 6px 20px; margin: 0; font-size: 12.5px; }
.qx-dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px 16px; margin: 0; }
.qx-dl dt { color: var(--muted); }
.qx-dl dd { margin: 0; overflow-wrap: anywhere; }
.qx-legend { font-size: 13px; margin: 0; }
@media (max-width: 900px) {          /* úzké okno: řádky tabulek jako karty, hlavní akce celou šířkou – žádný vodorovný posuv */
  .qx-table thead, .qx-htable thead, .qx-ctable thead { display: none; }
  .qx-table, .qx-table tbody, .qx-table tr, .qx-table td, .qx-htable, .qx-htable tbody, .qx-htable tr, .qx-htable td, .qx-ctable, .qx-ctable tbody, .qx-ctable tr, .qx-ctable td { display: block; width: auto; }
  .qx-table tr, .qx-htable tr, .qx-ctable tr { border-bottom: 1px solid var(--line); padding: 8px 14px; }
  .qx-table td, .qx-htable td, .qx-ctable td { border: 0; height: auto; padding: 2px 0; white-space: normal; overflow: visible; text-align: left; }
  .qx-table td[data-l]::before, .qx-htable td[data-l]::before, .qx-ctable td[data-l]::before { content: attr(data-l) ": "; color: var(--muted); font-size: 12px; }
  .qx-table td[data-l="Výběr"]::before, .qx-table td[data-l="Akce"]::before { content: none; }
  .qx-main-acts { margin-left: 0; width: 100%; }
  .qx-main-acts .btn, .qx-big, .qx-selbar .btn { flex: 1 1 auto; white-space: normal; height: auto; min-height: 34px; }
  .qx-state { margin-left: 0; }
  .qx-pop { position: static; width: auto; box-shadow: none; }
  .qx-dl { grid-template-columns: minmax(0, 1fr); }
  .qx-tiles { padding: 12px 14px; }
  .qx-bh, .qx-act, .qx-foot, .qx-selbar { padding-left: 14px; padding-right: 14px; }
}

/* 41. Objednávky – záložky Objednávky | Statistiky | Nastavení stavů (prompt 88, Issue #237; templates/orders/, static/js/orders.js): odkazové
   záložky v liště, základní filtry v mřížce se zarovnanými popisky, sbalené Další filtry s počtem aktivních, období s rozhodným datem, krátký
   souhrn po měnách, upozornění na neúplné mapování jedním řádkem, ≤ 760 px řádky seznamu jako karty a levé menu sbalené do lišty */
.ord-page { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.ord-tabs { display: flex; gap: 2px; align-items: center; min-width: 0; }
.ord-frow { display: grid; grid-template-columns: minmax(220px, 2fr) minmax(170px, 1fr) minmax(170px, 1fr) minmax(200px, 1.4fr) auto; gap: 8px 12px; align-items: end; }
.ord-frow .lf-fld { min-width: 0; }
.ord-frow .lf-fld .sel, .ord-frow .lf-fld .in { width: 100%; max-width: none; }
.ord-frow .msel { max-width: none; }
.ord-frow .lf-go { align-self: end; }
.ord-more { border-top: 1px solid var(--line); padding-top: 6px; }
.ord-more > summary { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; cursor: pointer; list-style: none; min-height: 30px; padding: 2px 6px 2px 0; border-radius: 6px; font-size: 13.5px; color: var(--green-dark); }
.ord-more > summary::-webkit-details-marker { display: none; }
.ord-more > summary::before { content: "▸"; display: inline-block; width: 12px; color: var(--green-dark); transition: transform .15s; }
.ord-more[open] > summary::before { transform: rotate(90deg); }
.ord-more > summary:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.ord-more-t { font-weight: 500; }
.ord-more > summary .muted { font-size: 12.5px; }
.ord-more-b { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); padding: 6px 0 2px; }
.ord-more-b .lf-date .in { width: 100%; }
.ord-scope { margin: 0; font-size: 13px; color: var(--ink2); overflow-wrap: anywhere; }
.ord-scope .k { color: var(--muted); }
.ord-scope strong { font-weight: 500; color: var(--ink); }
.ord-sum { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 28px; padding: 2px 2px 0; }
.ord-kpi { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ord-kpi strong { font-size: 22px; font-weight: 500; line-height: 1.15; color: var(--ink); white-space: nowrap; }
.ord-kpi span { font-size: 12.5px; color: var(--muted); }
.ord-kpi-warn strong { color: var(--amber); }
.ord-sum-note { flex: 1 1 100%; margin: 0; font-size: 12.5px; color: var(--muted); }
.ord-limit { margin: 0; display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 8px; padding: 6px 12px; border: 1px solid var(--amber-line); background: var(--amber-soft); border-radius: var(--r); font-size: 13px; color: var(--amber); }
.ord-limit .ic { display: inline-flex; width: 16px; height: 16px; border-radius: 50%; align-items: center; justify-content: center; font-size: 10px; font-weight: 700; color: #fff; background: var(--amber); flex: 0 0 16px; align-self: center; }
.ord-limit a { color: var(--green-hover); font-weight: 500; }
.ord-att > details > summary, .ord-explain > summary { cursor: pointer; list-style: none; }
.ord-att > details > summary::-webkit-details-marker, .ord-explain > summary::-webkit-details-marker { display: none; }
.ord-att > details > summary::before, .ord-explain > summary::before { content: "▸"; color: var(--green-dark); transition: transform .15s; }
.ord-att > details[open] > summary::before, .ord-explain[open] > summary::before { transform: rotate(90deg); }
.ord-att > details > summary:focus-visible, .ord-explain > summary:focus-visible { outline: 2px solid var(--green-dark); outline-offset: -2px; }
.ord-att > details:not([open]) > summary { border-bottom: 0; }
.ord-explain:not([open]) > summary { border-bottom: 0; }
.ord-att-hint { font-size: 12.5px; }
.ord-explain-b p { margin: 0 0 8px; max-width: 980px; font-size: 13.5px; line-height: 1.5; }
.ord-tbl td.ord-wrap { white-space: normal; overflow-wrap: anywhere; }
.ord-tbl td.ord-wrap .ds2, .ord-tbl .lt-state .ds2 { white-space: normal; overflow-wrap: anywhere; }
.ord-res { font-size: 12.5px; color: var(--ink2); white-space: nowrap; }
.ord-st { font-weight: 500; }
.ord-tbl .lt-doc a { overflow-wrap: anywhere; }
.ord-seg { margin: 0 0 12px; }
.ord-bt td.ord-wrap { white-space: normal; overflow-wrap: anywhere; }
.ord-note { margin: 10px 0 0; font-size: 12.5px; color: var(--muted); }
.ord-dochead .ord-wrapv .v { white-space: normal; }
.ord-chk { display: inline-flex; align-items: center; gap: 8px; min-height: 34px; font-size: 14px; }
.ord-map { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.ord-map .cell { flex: 1 1 150px; min-width: 0; }
.ord-states td.ord-wrap { white-space: normal; }
.ord-att > details > summary { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; padding: 12px 20px; }
.ord-att > details > summary h2, .ord-explain > summary h2 { margin: 0; }
.ord-att > details[open] > summary { border-bottom: 1px solid var(--line); }
.ord-ms .msel-sum { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }   /* dlouhý výběr se nerozroste do výšky – celý výběr v title tlačítka */
.ord-states th { white-space: normal; line-height: 1.25; }
.ord-frow.ord-frow-s { grid-template-columns: minmax(200px, 320px) auto auto auto; justify-content: start; }
.ord-navbtn { display: none; }
@media (max-width: 1250px) {
  .ord-frow { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ord-frow .ord-q { grid-column: 1 / -1; }
  .ord-frow .lf-go { justify-self: start; }
  .ord-more-b { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }
}
@media (max-width: 760px) {
  .ord-frow, .ord-more-b, .ord-frow.ord-frow-s { grid-template-columns: minmax(0, 1fr); }
  .ord-page .al { grid-template-columns: minmax(0, 1fr); }
  .ord-page .al .lab { white-space: normal; }
  .ord-page .dochead .v { white-space: normal; }
  .lt-scroll.ord-scroll { overflow: visible; }
  .lt-scroll.ord-scroll > table.ord-tbl { min-width: 0; }
  table.ord-tbl thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  table.ord-tbl, table.ord-tbl tbody { display: block; }
  table.ord-tbl tbody tr { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 4px 12px; padding: 10px 12px; border-bottom: 1px solid var(--line); }
  table.ord-tbl td { display: block; height: auto; padding: 0; border: 0; white-space: normal; overflow: visible; overflow-wrap: anywhere; text-align: left; }
  table.ord-tbl td.num { text-align: left; }
  table.ord-tbl td[data-l]::before { content: attr(data-l); display: block; font-size: 11.5px; color: var(--muted); }
  table.ord-tbl td.empty { grid-column: 1 / -1; }
  .ord-kpi strong { font-size: 19px; }
  body:has(.ord-page) .app { flex-direction: column; }
  body:has(.ord-page) .nav { position: static; width: auto; flex: none; height: auto; padding-bottom: 0; align-self: stretch; }
  body:has(.ord-page) .nav .brand { margin-bottom: 0; border-bottom: 0; padding: 10px 16px; }
  body:has(.ord-page) .nav > a, body:has(.ord-page) .nav .foot { display: none; }
  body:has(.ord-page) .nav.ord-nav-open > a { display: flex; }
  body:has(.ord-page) .nav.ord-nav-open .foot { display: flex; padding-bottom: 12px; }
  body:has(.ord-page) .ord-navbtn { display: inline-flex; margin-left: auto; height: 30px; align-items: center; padding: 0 12px; border-radius: var(--r); border: 1px solid rgba(255, 255, 255, .35); background: transparent; color: #fff; font-size: 13.5px; cursor: pointer; }
  body:has(.ord-page) .ws { padding-left: 0; }
  body:has(.ord-page) .tabbar { padding: 0 8px; overflow-x: auto; }
  body:has(.ord-page) .qs { display: none; }
  body:has(.ord-page) .work { position: static; padding: 10px 16px; }
  body:has(.ord-page) .work header { flex-wrap: wrap; }
  body:has(.ord-page) main { padding: 12px 16px 24px; }
}

/* 42. Výdejky › Vratky a správa skladů (prompt 87, Issue #234; templates/documents/return*.html, _returns_list_extra.html, _return_badges.html,
   templates/orders/_returns_bulk.html + _order_returns.html, templates/stock/warehouse_form.html, static/js/returns.js): vysvětlivka skladu Vratky,
   stav změny v Shoptetu, rozřazení po položkách (převod + cílový sklad v jedné buňce), hromadný výběr v seznamu objednávek. Číslo 42: 40 = #235, 41 = #238. */
.ret-intro { margin: 0 0 12px; padding: 10px 16px; border: 1px solid var(--line); border-radius: var(--r-panel); background: #fff; font-size: 13.5px; line-height: 1.45; color: var(--ink2); }
.ret-intro p { margin: 0; }
.ret-intro p + p { margin-top: 6px; }
.ret-tbl td, .ret-lines td { vertical-align: top; }
.ret-tbl .ds2, .ret-lines .ds2 { white-space: normal; }
.ret-order { margin-bottom: 12px; }
.ret-order .sh h2 a { color: inherit; }
.ret-order .sh-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.ret-al { margin: 10px 20px; }
.ret-problem td { background: var(--amber-soft); }
.ret-status-opt { margin: 0 0 12px; }
.ret-sync { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; padding: 10px 20px; border-top: 1px solid var(--line); font-size: 13.5px; }
.ret-sync .ds2 { white-space: normal; flex-basis: 100%; }
.ret-sync.warn { background: var(--amber-soft); }
.ret-sync.err { background: var(--red-soft); }
.ret-sync-acts { display: inline-flex; gap: 6px; margin-left: auto; }
.ret-sync-acts form { display: inline; }
.ret-move { display: flex; gap: 6px; align-items: center; }
.ret-move .in { width: 56px; flex: 0 0 56px; }
.ret-move .sel { min-width: 0; flex: 1 1 auto; }
.ret-lines .in.num { width: 56px; }
.ret-lines { min-width: 0; }
.ret-lines th { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ret-lines td .in:not(.num) { width: 100%; }
.ret-foot { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding: 12px 20px 16px; }
.ret-fix > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 12px 20px; }
.ret-fix > summary h2 { margin: 0; font-size: 16px; font-weight: 500; }
.ret-fix[open] > summary { border-bottom: 1px solid var(--line); }
.ret-fix-rows { display: flex; flex-wrap: wrap; gap: 0 12px; }
.ret-audit { font-size: 12.5px; color: var(--ink2); word-break: break-word; }
.ret-bulk { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 6px 20px 10px; font-size: 13.5px; }
.ret-pick-chk { margin: 0 6px 0 0; vertical-align: -2px; }
.wh-note { margin: 0 20px 8px; max-width: 1000px; }
.wh-shops { padding: 0 20px 8px; max-width: 1040px; }
.wh-shops .in { width: 100%; max-width: 140px; height: 32px; }
.rs-tbl td { vertical-align: top; white-space: normal; }
.rs-tbl .ds2 { white-space: normal; }
.rs-tbl .inline-opt { margin-right: 8px; }

/* 45. Shopy – výběr Ostré / Testovací + e-shop, hlavička shopu, záložky Přehled | Sklady | Připojení | Další nastavení (prompt 88, Issue #237;
   templates/shops/shop_list.html, static/js/shops.js). Jen prezentace: prostředí (ostrý × testovací) a režim odesílání jsou dva štítky,
   nouzová brzda je oddělený blok platný pro všechny shopy; dlouhé názvy a domény se zalomí, akce zůstávají vidět. */
.shp-pick { display: flex; align-items: flex-end; gap: 8px 12px; flex-wrap: wrap; min-width: 0; }
.shp-env { display: inline-flex; gap: 6px; }
.shp-env-b { display: inline-flex; align-items: center; height: 34px; padding: 0 14px; border: 1px solid var(--line2); border-radius: var(--r); background: #fff; color: var(--ink); font-size: 14px; white-space: nowrap; }
.shp-env-b:hover { background: var(--hover); color: var(--ink); text-decoration: none; }
.shp-env-b.on { background: var(--green-tint); border-color: var(--green); color: var(--green-hover); font-weight: 500; }
.shp-sel { display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; min-width: 0; }
.shp-sel .sel { width: 300px; max-width: 100%; }
.shp-find .in { width: 170px; }
.shp-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.btn.shp-brake-link { border-color: var(--red-line); }
.shp-msgs { display: flex; flex-direction: column; gap: 8px; }
.al.shp-brake-on { align-items: center; }
.al.shp-brake-on .lab { white-space: normal; }
.al.shp-brake-on ul { min-width: 0; }
.shp-head { display: flex; align-items: center; gap: 12px 16px; flex-wrap: wrap; min-width: 0; padding: 2px 0; }
.shp-badge { flex: 0 0 auto; min-width: 52px; height: 52px; padding: 0 8px; border-radius: var(--r-panel); background: var(--green-soft); color: var(--green-hover); display: flex; align-items: center; justify-content: center; font-size: 19px; font-weight: 500; }
.shp-badge.test { background: #EEF0EA; color: var(--ink2); border: 1px dashed var(--line2); }
.shp-id { flex: 1 1 280px; min-width: 0; }
.shp-name { font-size: 19px; font-weight: 500; overflow-wrap: anywhere; }
.shp-meta { color: var(--ink2); font-size: 13.5px; overflow-wrap: anywhere; margin-top: 2px; }
.shp-code { font-weight: 500; color: var(--ink); }
.shp-tags { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; }
.shp-tags .pill { font-size: 12.5px; padding: 2px 9px; }
.shp-twin { font-size: 13.5px; white-space: nowrap; }
.shp-tabs { margin-top: 2px; }
.shp-panel { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.shp-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.shp-card { border: 1px solid var(--line); border-radius: var(--r-panel); background: #fff; padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.shp-card h3 { font-size: 15.5px; font-weight: 500; }
.shp-card .btn { align-self: flex-start; }
.shp-kv { margin: 0; display: flex; flex-direction: column; }
.shp-kv > div { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; border-bottom: 1px solid var(--line); }
.shp-kv dt { color: var(--ink2); }
.shp-kv dd { margin: 0; font-weight: 500; text-align: right; overflow-wrap: anywhere; }
.shp-say { margin: 0; color: var(--ink2); font-size: 13.5px; }
.amber-t { color: var(--amber); }
.al.shp-alert { grid-template-columns: minmax(0, 1fr); }
.al .lab.wrap .ic { display: inline-flex; vertical-align: -2px; margin-right: 8px; }
.shp-alert-l li { white-space: normal; overflow-wrap: anywhere; }
.shp-next { white-space: nowrap; font-weight: 500; }
.al .shp-alert-l li a.shp-next { color: var(--green-dark); }
.shp-ok { margin: 0; }
.shp-fold { border-top: 1px solid var(--line); padding-top: 10px; }
.shp-fold > summary { cursor: pointer; color: var(--ink2); font-size: 14px; list-style: none; display: inline-flex; align-items: center; gap: 6px; padding: 4px 2px; border-radius: 4px; }
.shp-fold > summary::-webkit-details-marker { display: none; }
.shp-fold > summary::before { content: "▸"; color: var(--muted); font-size: 12px; width: 12px; }
.shp-fold[open] > summary::before { content: "▾"; }
.shp-fold > summary:focus-visible { outline: 2px solid var(--green-dark); outline-offset: 2px; }
.shp-fold-b { padding: 12px 0 0; display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.shp-fold-b h4, .pblock-b h4 { margin: 4px 0 0; font-size: 13.5px; font-weight: 500; color: var(--ink); }
.shp-grid { margin: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px 20px; }
.shp-grid > div { min-width: 0; }
.shp-grid > div.wide { grid-column: 1 / -1; }
.shp-grid dt { font-size: 12.5px; color: var(--ink2); }
.shp-grid dd { margin: 2px 0 0; overflow-wrap: anywhere; }
.shp-tech { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; }
.tt.shp-tt th { position: static; }      /* tabulky uvnitř panelu: hlavička se nelepí k oknu (je pod záložkami, ne pod pracovní hlavičkou) */
.tt.shp-tt td { white-space: normal; }
.tt.shp-tt th { white-space: normal; vertical-align: bottom; height: auto; }
.tt.shp-tt .rs { white-space: normal; align-items: baseline; }
.tt.shp-tt .rs .dot { flex: 0 0 7px; transform: translateY(-1px); }
.shp-twrap { overflow-x: auto; }
.shp-wh { min-width: 760px; }
.shp-events { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; font-size: 13.5px; }
.shp-events li { overflow-wrap: anywhere; }
.shp-events .when { display: inline-block; min-width: 120px; color: var(--ink2); }
.shp-links { margin: 0; font-size: 13.5px; }
.shp-sec-h { display: flex; align-items: baseline; gap: 6px 14px; flex-wrap: wrap; }
.shp-sec-h h3 { font-size: 15.5px; font-weight: 500; }
.shp-foot { margin: 0; color: var(--ink2); font-size: 13px; }
.shp-blocks { display: flex; flex-direction: column; gap: 16px; max-width: 1100px; }
.shp-blocks .pblock-b { display: flex; flex-direction: column; gap: 10px; }
.shp-danger { border-color: var(--red-line); }
.shp-danger > .pblock-h { background: var(--red-soft); border-bottom-color: var(--red-line); }
.shp-danger > .pblock-h h3 { color: var(--red); }
.shp-vat-form { display: flex; flex-direction: column; gap: 10px; }
.chkbox.shp-confirm { white-space: normal; height: auto; min-height: 34px; padding: 6px 10px; align-self: flex-start; max-width: 100%; }
@media (max-width: 1100px) { .work header:has(.shp-pick) { flex-wrap: wrap; } }
@media (max-width: 900px) { .shp-cards { grid-template-columns: minmax(0, 1fr); } .shp-sel .sel { width: 240px; } }
/* úzká obrazovka: levé menu sbalené do lišty s tlačítkem Menu (stejný postup jako Objednávky › 41, jen pro tuto obrazovku; sjednocení do
   společné komponenty = samostatný krok po sloučení obou PR), výběr shopu na celou šířku, žádný vodorovný posuv stránky */
.shp-navbtn { display: none; }
@media (max-width: 760px) {
  body:has(.shp-page) .app { flex-direction: column; }
  body:has(.shp-page) .nav { position: static; width: auto; flex: none; height: auto; padding-bottom: 0; align-self: stretch; }
  body:has(.shp-page) .nav .brand { margin-bottom: 0; border-bottom: 0; padding: 10px 16px; }
  body:has(.shp-page) .nav > a, body:has(.shp-page) .nav .foot { display: none; }
  body:has(.shp-page) .nav.shp-nav-open > a { display: flex; }
  body:has(.shp-page) .nav.shp-nav-open .foot { display: flex; padding-bottom: 12px; }
  body:has(.shp-page) .shp-navbtn { display: inline-flex; margin-left: auto; height: 30px; align-items: center; padding: 0 12px; border-radius: var(--r); border: 1px solid rgba(255, 255, 255, .35); background: transparent; color: #fff; font-size: 13.5px; cursor: pointer; }
  body:has(.shp-page) .ws { padding-left: 0; }
  body:has(.shp-page) .tabbar { padding: 0 8px; overflow-x: auto; }
  body:has(.shp-page) .qs { display: none; }
  body:has(.shp-page) .work { position: static; padding: 10px 16px; }
  body:has(.shp-page) .work header { flex-wrap: wrap; }
  body:has(.shp-page) .work header .actions { justify-content: flex-start; flex: 1 1 100%; }
  body:has(.shp-page) main { padding: 12px 16px 24px; }
  .shp-pick, .shp-sel { width: 100%; }
  .shp-sel .lf-fld { flex: 1 1 100%; }
  .shp-sel .sel, .shp-find .in { width: 100%; }
  .shp-env { flex: 1 1 100%; }
  .shp-env-b { flex: 1 1 0; justify-content: center; }
  .shp-panel { padding: 14px 12px 16px; }
  .shp-tabs { flex-wrap: wrap; padding: 0 4px; }
  .shp-tabs .ptab { padding: 0 9px; font-size: 14px; }
  .shp-kv > div { flex-wrap: wrap; }
  .shp-grid { grid-template-columns: minmax(0, 1fr); }
  .al.shp-brake-on { grid-template-columns: minmax(0, 1fr); }
  .shp-twrap { overflow-x: visible; }
  .shp-wh { min-width: 0; }
  .shp-wh thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .shp-wh, .shp-wh tbody { display: block; }
  .shp-wh tbody tr { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 6px 12px; padding: 10px 4px; border-bottom: 1px solid var(--line); }
  .tt.shp-wh td { display: block; height: auto; padding: 0; border: 0; text-align: left; }
  .shp-wh td:nth-child(-n+2) { grid-column: 1 / -1; }
  .shp-wh td[data-l]::before { content: attr(data-l); display: block; font-size: 11.5px; color: var(--muted); }
}

[hidden] { display: none !important; }
