:root {
  --bg: #f5f5f7;
  --fg: #1d1d1f;
  --muted: #6e6e73;
  --accent: #0066ff;
  --accent-hover: #0052cc;
  --error: #d9304b;
  --border: #d2d2d7;
  --card-bg: #fff;
  --radius: 8px;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font: 15px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  background: var(--bg);
  color: var(--fg);
}

main {
  max-width: 1200px;
  margin: 2rem auto;
  padding: 0 1rem;
}

.card {
  background: var(--card-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 1.5rem;
  margin-bottom: 1rem;
}

h1 {
  margin: 0 0 1rem;
  font-size: 1.5rem;
}

h2 {
  margin: 0 0 1rem;
  font-size: 1.2rem;
}

label {
  display: block;
  margin-bottom: 0.25rem;
  font-weight: 500;
}

input[type="password"],
input[type="text"],
input[type="file"] {
  width: 100%;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  font: inherit;
  background: #fff;
}

input[type="password"]:focus,
input[type="text"]:focus {
  outline: 2px solid var(--accent);
  outline-offset: -1px;
  border-color: var(--accent);
}

button {
  padding: 0.5rem 1rem;
  border: 0;
  border-radius: 6px;
  background: var(--accent);
  color: #fff;
  font: inherit;
  font-weight: 500;
  cursor: pointer;
}

button:hover:not(:disabled) {
  background: var(--accent-hover);
}

button:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

button.secondary {
  background: transparent;
  color: var(--accent);
  border: 1px solid var(--border);
}

button.secondary:hover:not(:disabled) {
  background: rgba(0, 102, 255, 0.05);
}

.form-row {
  margin-bottom: 1rem;
}

/* ---------------- Upload: drop zóna + checklist škatulek ---------------- */

.dropzone {
  border: 2px dashed var(--border);
  border-radius: var(--radius);
  padding: 1.5rem 1rem;
  text-align: center;
  background: #fafafc;
  transition: border-color 0.15s, background 0.15s;
}
.dropzone.drag-over {
  border-color: var(--accent);
  background: rgba(0, 102, 255, 0.06);
}
.dropzone-title {
  font-weight: 600;
  margin-bottom: 0.75rem;
}
.dropzone-actions {
  display: flex;
  gap: 0.5rem;
  justify-content: center;
  flex-wrap: wrap;
}
.dropzone-hint {
  margin-top: 0.75rem;
}

.checklist {
  margin-top: 1.25rem;
}
.checklist-head {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 0.75rem;
}
.checklist-head h2 {
  margin: 0;
  flex: 0 0 auto;
}
.checklist-head .muted {
  flex: 1 1 auto;
}

.slot-group {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  margin-bottom: 0.9rem;
  overflow: hidden;
}
.slot-group-title {
  background: #f0f0f4;
  padding: 0.5rem 0.75rem;
  font-weight: 600;
  font-size: 0.9rem;
}

.slot-row {
  padding: 0.6rem 0.75rem;
  border-top: 1px solid var(--border);
}
.slot-row.missing {
  background: #fffbeb;
}
.slot-head {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  flex-wrap: wrap;
}
.slot-status {
  font-weight: 700;
}
.slot-row.filled .slot-status { color: #15803d; }
.slot-row.missing .slot-status { color: #b45309; }
.slot-row.empty .slot-status { color: var(--muted); }
.slot-label { font-weight: 500; }
.slot-hint { font-size: 0.8rem; }

.slot-file {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 0.25rem 0.75rem;
  margin-top: 0.35rem;
}
.slot-file-name {
  grid-column: 1;
  word-break: break-all;
}
.slot-file-meta {
  grid-column: 1;
  grid-row: 2;
  font-size: 0.8rem;
}
.slot-file .slot-select {
  grid-column: 2;
  grid-row: 1 / span 2;
}
.slot-picker {
  margin-top: 0.35rem;
}

.slot-select {
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fff;
  color: inherit;
  font: inherit;
  font-size: 0.875rem;
  max-width: 16rem;
}
.slot-select:focus {
  outline: 2px solid var(--accent);
  outline-offset: -1px;
}

.slot-group.unassigned .slot-group-title { background: #fdf2f4; }
.slot-row.empty-note { font-size: 0.875rem; }

.warn-panel {
  border: 1px solid #f5d78e;
  background: #fffbeb;
  border-radius: var(--radius);
  padding: 0.75rem 1rem;
  margin-bottom: 1rem;
  color: #7c4a03;
  font-size: 0.875rem;
}
.warn-panel-title { font-weight: 600; margin-bottom: 0.35rem; }
.warn-panel ul { margin: 0; padding-left: 1.1rem; }
.warn-panel li { margin: 0.2rem 0; }

/* Potvrzovací pop-up před spuštěním s nekompletním checklistem. */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  z-index: 100;
}
.modal {
  background: #fff;
  border-radius: var(--radius);
  padding: 1.25rem;
  max-width: 30rem;
  width: 100%;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}
.modal-title {
  font-weight: 600;
  font-size: 1.05rem;
  margin-bottom: 0.75rem;
}
.modal p { margin: 0.5rem 0; }
.modal-list { margin: 0.25rem 0 0.75rem; padding-left: 1.2rem; }
.modal-list li { margin: 0.2rem 0; }
.modal-actions {
  display: flex;
  gap: 0.5rem;
  justify-content: flex-end;
  margin-top: 1rem;
  flex-wrap: wrap;
}

/* Varování k injektáži VS do Pohoda XML (doklad nenalezen v exportu). */
.vsupdate-warning {
  color: #b45309;
  font-size: 0.875rem;
  margin-top: 0.4rem;
}
.vsupdate-warning p {
  margin: 0.25rem 0;
}

.error {
  color: var(--error);
  margin-top: 0.5rem;
  font-size: 0.875rem;
}

.muted {
  color: var(--muted);
  font-size: 0.875rem;
}

.spacer {
  height: 1rem;
}

#status {
  position: fixed;
  bottom: 1rem;
  right: 1rem;
  padding: 0.75rem 1rem;
  background: var(--fg);
  color: #fff;
  border-radius: 6px;
  font-size: 0.875rem;
  opacity: 0;
  transition: opacity 0.2s;
  pointer-events: none;
  max-width: 320px;
}

#status.show {
  opacity: 1;
}

/* ----- Phase 2: upload + summary ----- */

.card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 1rem;
}

.card-header h1,
.card-header h2 {
  margin: 0;
}

button.small {
  padding: 0.25rem 0.75rem;
  font-size: 0.875rem;
}

.status {
  font-style: italic;
  margin: 0.75rem 0 0;
}

/* Přehled nahraných souborů — vlastní panel nad .stats, vizuálně oddělený.
   Stacked rows (3) — full-width filename bez ellipsis, čitelné období + počet. */
.files-summary {
  margin: 0 0 1.5rem;
  padding: 1rem 1.25rem;
  background: #f8f8fa;
  border: 1px solid #e1e1e6;
  border-radius: 8px;
  border-left: 3px solid #5470c4;
}

.files-summary-title {
  margin: 0 0 0.75rem;
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.files-summary-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}

.file-info {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 0.85rem;
  align-items: start;
  padding: 0.5rem 0;
  border-top: 1px solid #ececef;
}

.file-info:first-child {
  border-top: none;
  padding-top: 0;
}

.file-info-icon {
  font-size: 1.15rem;
  line-height: 1.3;
}

.file-info-text {
  min-width: 0;
}

.file-info-label {
  font-weight: 600;
  font-size: 0.9rem;
  margin-bottom: 0.15rem;
}

.file-info-name {
  font-size: 0.82rem;
  color: var(--muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  word-break: break-all;
  line-height: 1.4;
}

.file-info-meta {
  text-align: right;
  font-size: 0.82rem;
  white-space: nowrap;
}

.file-info-period {
  color: var(--fg);
  font-weight: 500;
}

.stats {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-bottom: 1rem;
}

.stat {
  flex: 1 1 140px;
  padding: 0.75rem 1rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fafafa;
}

.stat b {
  display: block;
  font-size: 1.5rem;
  font-weight: 600;
}

.stat span {
  font-size: 0.8rem;
  color: var(--muted);
}

.stat.ok {
  border-color: #99d49f;
  background: #f0faf0;
}

.stat.warn {
  border-color: #f0c97a;
  background: #fdf7ec;
}

.tier-breakdown {
  font-size: 0.875rem;
  color: var(--muted);
  padding: 0.5rem 0;
}

.tier-breakdown b {
  color: var(--fg);
}

.tier-badge {
  display: inline-block;
  padding: 0.1rem 0.4rem;
  border-radius: 4px;
  font-size: 0.75rem;
  font-weight: 600;
  background: #e8e8eb;
}

.tier-badge.tier-1 { background: #cfe9d0; }
.tier-badge.tier-2 { background: #ecdcb1; }
.tier-badge.tier-3 { background: #d8d3ed; }

/* Badge "Auto-match: Přesný VS / Komentář VS / Jméno+částka" — v kartě transakce
   nahoře. Účetní rozezná, co spárovala mašina vs. co schválila ručně. */
.auto-tier-badge {
  display: inline-block;
  padding: 0.08rem 0.4rem;
  border-radius: 4px;
  font-size: 0.66rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  margin-bottom: 0.4rem;
  border: 1px solid transparent;
  line-height: 1.4;
}
/* Jednotná modrá pro všechny tiers — bílý text na sytě modrém pozadí
   pro maximální kontrast (rychle čitelné z dálky). */
.auto-tier-badge.auto-tier-1,
.auto-tier-badge.auto-tier-2,
.auto-tier-badge.auto-tier-3 {
  background: #2c5cc8;
  color: #ffffff;
  border-color: #1f4ba6;
}

/* Tag bankovního účtu — odlišuje transakce z různých bank/účtů. */
.match-row-badges {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.3rem;
  margin-bottom: 0.4rem;
}
.match-row-badges .auto-tier-badge {
  margin-bottom: 0;
}
.bank-tag-badge {
  display: inline-block;
  padding: 0.08rem 0.45rem;
  border-radius: 999px;
  font-size: 0.66rem;
  font-weight: 600;
  background: #ede7f6;
  color: #4527a0;
  border: 1px solid #d1c4e9;
  white-space: nowrap;
}
.bank-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  margin-top: 0.3rem;
}

.type-badge {
  display: inline-block;
  padding: 0.1rem 0.4rem;
  border-radius: 4px;
  font-size: 0.75rem;
  background: #e8e8eb;
}

.type-badge.type-expense { background: #f7d6d6; }
.type-badge.type-invoice { background: #d6e5f7; }

.section-summary {
  cursor: pointer;
  list-style: none;
  user-select: none;
}

.section-summary::-webkit-details-marker {
  display: none;
}

.section-summary h2 {
  display: inline-block;
  margin: 0;
}

.section-summary::before {
  content: '▸ ';
  color: var(--muted);
  font-size: 0.875rem;
}

details[open] .section-summary::before {
  content: '▾ ';
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  margin-top: 0.75rem;
  font-size: 0.875rem;
}

.data-table th,
.data-table td {
  text-align: left;
  padding: 0.4rem 0.6rem;
  border-bottom: 1px solid var(--border);
}

.data-table th {
  background: #fafafa;
  font-weight: 600;
  font-size: 0.75rem;
  text-transform: uppercase;
  color: var(--muted);
}

.data-table td.right {
  text-align: right;
}

.data-table td.mono,
.mono {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.875em;
}

.unmatched-list {
  list-style: none;
  padding: 0;
  margin: 0.75rem 0 0;
}

.unmatched-list li {
  padding: 0.6rem 0;
  border-bottom: 1px solid var(--border);
}

.unmatched-list li:last-child {
  border-bottom: 0;
}

.unmatched-head {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
  align-items: baseline;
}

.unmatched-list .comment {
  font-size: 0.825rem;
  margin-top: 0.15rem;
}

.unmatched-list .reason {
  font-size: 0.825rem;
  margin-top: 0.15rem;
  color: #a06108;
}

/* ----- Phase 5: smart suggestions toolbar ----- */

.manual-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  padding: 0.75rem 0;
  margin-bottom: 0.5rem;
  border-bottom: 1px solid var(--border);
}

.toolbar-counter {
  margin-left: auto;
  font-size: 0.875rem;
}

/* ----- Phase 3: manual matching widget ----- */

.manual-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.match-row {
  display: grid;
  grid-template-columns: 1fr minmax(280px, 480px);
  gap: 1rem;
  padding: 1rem 1.25rem;
  background: #fbfbfc;
  border: 1px solid var(--border);
  border-radius: 8px;
  align-items: start;
  margin-bottom: 0.85rem;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
}

.match-row:last-child {
  margin-bottom: 0;
}

.match-row-filled {
  background: linear-gradient(to right, #ecf7ec 0%, #f4faf4 70%, #fbfbfc 100%);
  border-color: #a3d8a8;
  transition: background 0.25s ease, border-color 0.25s ease;
}

/* Auto-match: stejný gradient pattern jako .match-row-filled, jen do modra
   místo zelené. Účetní rychle pozná, co spárovala mašina vs. co schválila ručně. */
.match-row-auto {
  background: linear-gradient(to right, #dde8f8 0%, #ecf2fb 70%, #fbfbfc 100%);
  border-color: #a5c1e3;
  transition: background 0.25s ease, border-color 0.25s ease;
}

/* Hromadná karetní platba spojená s avíza skupinou (Úroveň 1) — neřeší se 1:1 tady,
   ale v sekci Avíza. Ztlumený řádek odsunutý dolů, se zamčeným pickerem. Hover ho
   zase rozsvítí (účetní si může info přečíst). */
/* Řádek odbavený přes avíza dávku — jemný fialový akcent, plně viditelný (editovatelný). */
.match-row-aviza {
  background: #faf8fd;
  border-color: #d9cdeb;
}
.aviza-link-badge {
  font-size: 0.72rem;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  background: #ede7f6;
  color: #5e35b1;
  font-weight: 600;
  white-space: nowrap;
}
/* Buňka pickeru s vybranou avíza dávkou. */
.picker-selected-aviza { border-left: 3px solid #5e35b1; }
.aviza-batch-sel-head { font-weight: 600; color: #5e35b1; display: flex; align-items: center; gap: 0.4rem; }
.aviza-batch-review {
  font-size: 0.66rem; font-weight: 600; color: #7a5a00;
  background: #fff1cf; border-radius: 999px; padding: 0.02rem 0.4rem;
}
/* Karta avíza dávky v pickeru (reuse .doc-card vizuálu). */
.aviza-batch-card { border-left: 3px solid #c5b3e0; }
.aviza-batch-card:hover { background: #f5f0fc; }
/* Záložky Doklady / Avíza v pickeru. */
.picker-tabs { display: flex; gap: 0.25rem; margin: 0.4rem 0; }
.picker-tab {
  flex: 1;
  padding: 0.3rem 0.5rem;
  font-size: 0.85rem;
  cursor: pointer;
  background: #f1f3f7;
  color: var(--fg);
  border: 1px solid var(--border);
  border-radius: 6px;
}
.picker-tab.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.picker-tab:hover:not(.active) { background: #e6eaf2; }
/* Proklik na avíza dávku (v buňce vybrané dávky). */
.aviza-jump { cursor: pointer; transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; }
.aviza-jump:hover { background: #5e35b1; border-color: #5e35b1; color: #fff; }

/* Krátké zvýraznění avíza skupiny po prokliku z GPC. */
.aviza-group-flash {
  animation: aviza-flash 1.6s ease;
}
@keyframes aviza-flash {
  0%, 25% { background: #fff3c4; border-color: #e0b400; box-shadow: 0 0 0 3px rgba(224, 180, 0, 0.35); }
  100% { box-shadow: 0 0 0 3px rgba(224, 180, 0, 0); }
}
.apply-bar-stats-aviza {
  color: #5e35b1;
  font-size: 0.85rem;
  font-weight: 600;
}

/* ---- Nové avízo N:1 (multi-select dokladů pro jeden GPC řádek) ---- */
.match-row-refund {
  background: #fef3f2;
  border-color: #e5b5b0;
}
.picker-selected-refund { border-left: 3px solid #c45040; padding: 0.5rem; }
/* Header nového avíza */
.navizo-header { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.35rem; }
.navizo-header-title { font-weight: 700; color: #1a1a1a; font-size: 0.88rem; }
.navizo-header-vs { font-family: monospace; font-size: 0.78rem; background: #e8e0f0; color: #5b3a8c; padding: 0.1rem 0.4rem; border-radius: 4px; font-weight: 600; }
.navizo-header-count { font-size: 0.78rem; color: #666; }

/* Seznam dokladů v novém avízu */
.navizo-doc-list { list-style: none; margin: 0; padding: 0; }
.navizo-doc-row {
  display: grid; grid-template-columns: 1fr auto; gap: 0.2rem 0.4rem;
  padding: 0.3rem 0; border-bottom: 1px solid #f0e0dd; font-size: 0.82rem;
  align-items: center;
}
.navizo-doc-row:last-child { border-bottom: none; }
.navizo-doc-main { display: flex; align-items: center; gap: 0.4rem; grid-column: 1; }
.navizo-doc-detail { display: flex; align-items: center; gap: 0.4rem; grid-column: 1; color: #555; font-size: 0.78rem; }
.navizo-doc-number { font-weight: 600; color: #333; }
.navizo-doc-name { color: #666; }
.navizo-amt { font-weight: 700; white-space: nowrap; }
.navizo-amt-in { color: #1a1a1a; }
.navizo-amt-out { color: #c45040; }
.navizo-type { font-size: 0.72rem; padding: 0.05rem 0.35rem; border-radius: 3px; font-weight: 600; }
.navizo-type-credit { background: #fde8e5; color: #9a3030; }
.navizo-vs { font-family: monospace; font-size: 0.75rem; color: #666; background: #f5f5f5; padding: 0.05rem 0.3rem; border-radius: 3px; }
.refund-remove { background: none; border: none; cursor: pointer; color: #c45040; font-size: 0.9rem; padding: 0.1rem 0.3rem; grid-row: 1 / 3; grid-column: 2; align-self: center; }

/* Souhrn a progress */
.refund-sel-progress {
  height: 4px; background: #f0e0dd; border-radius: 2px; margin: 0.35rem 0 0.2rem;
  overflow: hidden;
}
.refund-progress-bar { height: 100%; border-radius: 2px; transition: width 0.2s; }
.navizo-summary { font-size: 0.82rem; margin: 0.25rem 0; }
.navizo-summary-row { display: flex; justify-content: space-between; padding: 0.1rem 0; }
.navizo-summary-fee { border-top: 1px solid #e0d8d5; padding-top: 0.2rem; margin-top: 0.1rem; }
.refund-ok { color: #22c55e; font-weight: 600; }
.refund-diff { color: #d97706; font-weight: 600; }
.refund-doc-card { cursor: pointer; }
.refund-doc-card:hover { background: #fef3f2; }
.refund-doc-selected { background: #fde8e5 !important; border-left: 3px solid #c45040; }
.refund-doc-check { font-size: 0.78rem; color: #22c55e; margin-top: 0.15rem; }
.refund-doc-used { opacity: 0.5; cursor: not-allowed !important; background: #f5f5f5 !important; border-left: 3px solid #bbb; }
.refund-doc-used:hover { background: #f5f5f5 !important; }
.refund-doc-used-note { font-size: 0.75rem; color: #999; margin-top: 0.1rem; }
.refund-merchant-row { display: flex; align-items: center; gap: 0.5rem; margin: 0.35rem 0; font-size: 0.82rem; }
.refund-merchant-label { color: #333; white-space: nowrap; font-weight: 600; }
.refund-merchant-select {
  font-size: 0.82rem; font-weight: 600; color: #1a1a1a;
  padding: 0.25rem 1.8rem 0.25rem 0.5rem; border: 1px solid #bbb; border-radius: 6px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23555'/%3E%3C/svg%3E") no-repeat right 0.5rem center;
  appearance: none; -webkit-appearance: none; cursor: pointer;
  transition: border-color 0.15s;
}
.refund-merchant-select:hover { border-color: #888; }
.refund-merchant-select:focus { border-color: #1a73e8; outline: none; box-shadow: 0 0 0 2px rgba(26,115,232,0.15); }

/* ---- „Bez dokladu" (3. možnost párování) ---- */
/* Řádek odbavený bez dokladu — neutrální šedo-béžový akcent (odlišný od avíza fialové). */
.match-row-nodoc {
  background: #f6f5f2;
  border-color: #d9d4c7;
}
/* Buňka pickeru s označením „bez dokladu". */
.picker-selected-nodoc { border-left: 3px solid #8a7a52; }
.nodoc-sel-head { font-weight: 600; color: #6b5d36; display: flex; align-items: center; gap: 0.4rem; }
.apply-bar-stats-nodoc {
  color: #6b5d36;
  font-size: 0.85rem;
  font-weight: 600;
}

/* Tělo záložky „Bez dokladu" v pop-upu. */
.picker-nodoc {
  padding-top: 0.3rem;
}
.picker-nodoc-title { font-size: 0.8rem; color: var(--muted); margin-bottom: 0.4rem; }
.picker-nodoc-chips { display: flex; flex-wrap: wrap; gap: 0.45rem; margin-bottom: 0.55rem; }
.nodoc-chip {
  font-size: 0.95rem;
  padding: 0.45rem 1rem;
  border-radius: 999px;
  cursor: pointer;
  background: #efece4;
  color: #4a4334;
  border: 1px solid #d9d4c7;
}
.nodoc-chip:hover { background: #8a7a52; color: #fff; border-color: #8a7a52; }
.picker-nodoc-row { display: flex; gap: 0.4rem; align-items: stretch; }
.nodoc-note-input {
  flex: 1;
  min-width: 0;
  padding: 0.35rem 0.5rem;
  font-size: 0.85rem;
  border: 1px solid var(--border);
  border-radius: 6px;
}
.nodoc-note-input:focus { outline: none; border-color: #8a7a52; }
.nodoc-confirm {
  white-space: nowrap;
  padding: 0.35rem 0.7rem;
  font-size: 0.82rem;
  font-weight: 600;
  cursor: pointer;
  background: #6b5d36;
  color: #fff;
  border: 1px solid #6b5d36;
  border-radius: 6px;
}
.nodoc-confirm:hover { background: #54492a; border-color: #54492a; color: #fff; }

/* Sekce „bez dokladu" ve výsledcích po vygenerování. */
.nodoc-results {
  margin-top: 0.6rem;
  padding: 0.5rem 0.7rem;
  background: #f6f5f2;
  border: 1px solid #d9d4c7;
  border-radius: 8px;
}
.nodoc-results-list { margin: 0.3rem 0 0; padding-left: 1.1rem; font-size: 0.85rem; }
.nodoc-results-list li { margin: 0.15rem 0; }

/* Přehled transakcí s „umělým" VS (na konci sekce GPC) — malé písmo, decentní. */
.artificial-vs-overview { margin-top: 0.6rem; color: var(--muted, #6b6b6b); }
.artificial-vs-overview small { font-size: 0.75rem; line-height: 1.35; }
.artificial-vs-list { margin: 0.25rem 0 0; padding-left: 1.1rem; }
.artificial-vs-list li { margin: 0.1rem 0; }

/* Sbalitelné sekce (GPC / Avíza) — hlavička s přehledem zůstává, tělo se schová. */
.section-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
}
.section-head h2 { margin: 0; }
.section-head-right { display: flex; align-items: center; gap: 1.25rem; flex-wrap: wrap; }
.section-mini-stats { display: flex; gap: 1rem; }
.section-mini-stat { display: flex; align-items: baseline; gap: 0.3rem; font-size: 0.82rem; color: var(--muted); }
.section-mini-stat b { font-size: 1.1rem; color: var(--fg); }
.section-mini-stat.ok b { color: #1c5c2a; }
.section-mini-stat.warn b { color: #9a6a00; }
.section-head-title { cursor: pointer; }
.section-generate-btn {
  background: #fff;
  color: var(--accent);
  border: 1.5px solid var(--accent);
  border-radius: 6px;
  padding: 0.5rem 0.9rem;
  cursor: pointer;
  font-weight: 600;
}
.section-generate-btn:hover { background: var(--accent); color: #fff; }
.section-generate-btn:disabled { opacity: 0.6; cursor: default; }
.collapsible.collapsed .section-body { display: none; }
.collapsible.collapsed .section-head { margin-bottom: 0; }

/* Filtry GPC transakcí (typ platby / směr / účet) — segmentované přepínače ve 3 řádcích.
   Skrývání je JS-driven (.filtered-out), proto platí i pro řádky překreslené po výběru/reorderu
   a zvládne dynamické hodnoty (bankovní účty). Počet v chipu = #potřeba ruční match / celkem. */
.manual-filter {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.4rem;
  margin: 0 0 0.85rem;
}
.manual-filter-row { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.manual-filter-label { color: var(--muted); font-size: 0.85rem; margin-right: 0.15rem; min-width: 4.5rem; }
.manual-filter-btn {
  background: #fff;
  color: var(--fg);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 0.28rem 0.8rem;
  font-size: 0.82rem;
  font-weight: 500;
  cursor: pointer;
}
.manual-filter-btn:hover { background: var(--accent); color: #fff; border-color: var(--accent); }
.manual-filter-btn.active {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}
.match-row.filtered-out { display: none; }

/* Živý souhrn výpisu dle filtrů — mezi filtry a seznamem.
   1. řádek velkým písmem (Zobrazeno X / Y), 2. řádek menším (rozpad). */
.filter-stats {
  margin: 0.1rem 0 0.9rem;
  padding: 0.55rem 0.85rem;
  background: #f6f8fc;
  border: 1px solid #e3e8f0;
  border-radius: 8px;
}
.filter-stats-main { font-size: 1.15rem; font-weight: 500; display: flex; align-items: center; gap: 0.6rem; }
.reorder-manual-btn { font-size: 0.78rem; padding: 0.2rem 0.65rem; margin-left: auto; white-space: nowrap; }
.filter-stats-main b { font-size: 1.35rem; font-weight: 700; }
.filter-stats-sub { font-size: 0.85rem; color: var(--muted); margin-top: 0.15rem; }
.filter-stats-sub b { font-weight: 700; }
.filter-stats .fs-warn { color: #9a6a00; }
.filter-stats .fs-ok { color: #1c5c2a; }

/* Tag typu platby v kartě transakce (Karta / Převod). */
.pay-type-badge {
  font-size: 0.72rem;
  padding: 0.1rem 0.45rem;
  border-radius: 999px;
  font-weight: 600;
  white-space: nowrap;
}
.pay-type-badge.pay-card { background: #e7e0f6; color: #4a2f8f; }
.pay-type-badge.pay-transfer { background: #dfede2; color: #1c5c2a; }

/* Karta transakce v manual matching:
   [datum · částka] / [jméno] / [meta: ID, VS, komentář] / [reason]
   Hlavní info (datum, částka, jméno) výrazně, technické info níže potlačené.
   Sign a barva částky indikují směr platby (− červená vs. + černá). */

/* Datum vlevo, částka vpravo. Stejná velikost/váha; barva částky závisí na směru. */
.tx-amount-date,
.doc-card-amount-date {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.5rem;
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--fg);
  margin-bottom: 0.4rem;
}

.tx-amount,
.tx-date,
.doc-card-date {
  font-size: inherit;
  font-weight: inherit;
}

.tx-date,
.doc-card-date {
  color: inherit;
}

/* Příjem zelená, výdaj výrazná červená — konsistentní napříč transakcí i dokladem. */
.tx-amount-in,
.doc-card-amount-in {
  color: #1f6e29;
}

.tx-amount-out,
.doc-card-amount-out {
  color: #b91c1c;
}

.doc-card-amount {
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* Pod jménem tenká dashed čára — odděluje hlavní info od metadat (ID, VS, komentář). */
.tx-name {
  font-weight: 600;
  font-size: 1.02rem;
  line-height: 1.3;
  padding-bottom: 0.5rem;
  margin-bottom: 0.5rem;
  border-bottom: 1px dashed #e1e1e6;
  word-break: break-word;
}

.tx-meta {
  font-size: 0.78rem;
  color: var(--muted);
  word-break: break-word;
  line-height: 1.45;
}

.tx-reason {
  font-size: 0.78rem;
  color: #a06108;
  margin-top: 0.35rem;
  line-height: 1.4;
}

.match-row-picker {
  position: relative;
  align-self: start;
}

/* Trigger button — empty state ("+ Vybrat doklad") nebo "Změnit" v selected state */
.picker-trigger {
  padding: 0.55rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fff;
  color: var(--fg);
  font: inherit;
  font-weight: 500;
  cursor: pointer;
  text-align: left;
}

.picker-trigger:hover {
  border-color: var(--accent);
  background: rgba(0, 102, 255, 0.04);
}

.picker-trigger-group {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}
.picker-trigger-group .picker-trigger-empty {
  flex: 1;
  font-size: 0.82rem;
  padding: 0.4rem 0.5rem;
}

.picker-trigger-empty {
  width: 100%;
  border-style: dashed;
  color: var(--accent);
  padding: 0.7rem 1rem;
}

.picker-trigger-empty:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
  border-style: solid;
}

.picker-trigger-plus {
  font-weight: 700;
  margin-right: 0.25rem;
}

/* Selected state — kartička vybraného dokladu + actions */
.picker-selected {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 0.6rem 0.8rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fafafa;
}

.picker-selected-info {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}

.picker-selected-actions {
  display: flex;
  gap: 0.5rem;
}

.picker-remove {
  padding: 0.3rem 0.75rem;
  font-size: 0.875rem;
  background: transparent;
  color: var(--error);
  border: 1px solid var(--border);
  border-radius: 6px;
  font: inherit;
  font-size: 0.875rem;
  cursor: pointer;
}

.picker-remove:hover {
  border-color: var(--error);
  background: rgba(217, 48, 75, 0.05);
}

/* Popover — otevřený seznam kandidátů */
.picker-popover {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  left: auto;
  z-index: 100;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.15);
  max-height: 680px;
  overflow-y: auto;
  padding: 0.75rem;
  width: min(1100px, 92vw);
}

/* Sticky top — drží header + search input nahoře při scrollu kartami. */
.picker-popover-top {
  position: sticky;
  top: -0.75rem;
  background: #fff;
  margin: -0.75rem -0.75rem 0.75rem;
  padding: 0.75rem 0.75rem 0.6rem;
  border-bottom: 1px solid var(--border);
  z-index: 2;
}

.picker-popover-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.5rem;
}

.picker-search-input {
  width: 100%;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  font: inherit;
  background: #fff;
}

.picker-search-input:focus {
  outline: 2px solid var(--accent);
  outline-offset: -1px;
  border-color: var(--accent);
}

.picker-empty {
  padding: 1.5rem;
  text-align: center;
  color: var(--muted);
  font-size: 0.875rem;
}

.picker-close {
  background: transparent;
  border: 0;
  font-size: 1.1rem;
  cursor: pointer;
  color: var(--muted);
  padding: 0.15rem 0.5rem;
  border-radius: 4px;
}

.picker-close:hover {
  color: var(--fg);
  background: #f5f5f7;
}

.picker-section {
  margin-top: 1.1rem;
}

.picker-section:first-child {
  margin-top: 0.25rem;
}

.picker-popover-body .picker-section {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 0.35rem;
}

.picker-popover-body .picker-section-header {
  grid-column: 1 / -1;
}

.picker-section-header {
  font-size: 1rem;
  font-weight: 700;
  color: var(--fg);
  margin-bottom: 0.6rem;
  padding-bottom: 0.35rem;
  border-bottom: 2px solid var(--border);
  letter-spacing: 0.01em;
}

/* Karta jednoho dokladu — uvnitř popoveru i jako "selected" reprezentace */
.doc-card {
  padding: 0.55rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  cursor: pointer;
  margin-bottom: 0.35rem;
  background: #fff;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  transition: background 0.1s, border-color 0.1s;
}

.picker-popover-body .doc-card {
  margin-bottom: 0;
}

.doc-card:last-child {
  margin-bottom: 0;
}

.doc-card:hover {
  background: #f5f5f7;
  border-color: #9ca3af;
}

.doc-card-name {
  font-weight: 600;
  font-size: 1.02rem;
  line-height: 1.3;
}

.doc-card-number {
  font-size: 0.78rem;
  color: var(--muted);
  margin-top: 0.1rem;
}


.doc-card-error {
  font-size: 0.75rem;
  color: var(--error);
  margin-top: 0.1rem;
}

/* Info vysvětlivka na kartě dokladu — místo (chybějící/dlouhé) reference se do GPC
   zapíše syntetický VS z čísla dokladu. Neblokuje výběr, jen informuje. */
.doc-card-note {
  font-size: 0.75rem;
  color: #2c4a8a;
  margin-top: 0.1rem;
}

/* Reverse charge badge — zahraniční nebo tuzemská přenesená daňová povinnost.
   Vizuálně odlišný od match tagů: vlastní řádek, modré ladění (vs. green/orange/red).
   Informuje účetní, že porovnávaná částka je subtotal (bez DPH), ne total. */
.doc-card-reverse-charge {
  display: block;
  margin-top: 0.4rem;
  padding: 0.3rem 0.55rem;
  background: #eef3ff;
  color: #2c4a8a;
  border: 1px solid #b9c7ed;
  border-left: 3px solid #5470c4;
  border-radius: 4px;
  font-size: 0.78rem;
  font-weight: 500;
}

/* Match-status tagy — vlastní sekce v kartě, 4 barevné indikátory. */
.doc-card-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  margin-top: 0.5rem;
  padding-top: 0.4rem;
  border-top: 1px dashed #e8e8eb;
}

.match-tag {
  display: inline-block;
  padding: 0.1rem 0.45rem;
  border-radius: 4px;
  font-size: 0.72rem;
  font-weight: 600;
  border: 1px solid transparent;
  line-height: 1.4;
}

.match-tag-green {
  background: #e3f5e4;
  color: #1f6e29;
  border-color: #a3d8a8;
}

.match-tag-orange {
  background: #fdf0d8;
  color: #8a6312;
  border-color: #f0c97a;
}

.match-tag-red {
  background: #fadde0;
  color: #8a2738;
  border-color: #f0a3ad;
}

.match-tag-gray {
  background: #ececef;
  color: #6e6e73;
  border-color: #c8c8cd;
}

.doc-card-disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.doc-card-disabled:hover {
  background: #fff;
  border-color: var(--border);
}

/* Doklad už vybraný pro jinou TX — vizuálně potlačený, klik neselektuje, jen
 * toggluje inline vysvětlující zprávu uvnitř karty. */
.doc-card-taken {
  background: #f3f3f5;
  border-style: dashed;
  cursor: help;
}

.doc-card-taken .doc-card-name,
.doc-card-taken .doc-card-number,
.doc-card-taken .doc-card-amount-date {
  opacity: 0.65;
}

.doc-card-taken:hover {
  background: #ececef;
  border-color: var(--border);
}

.doc-card-taken-hint {
  font-size: 0.7rem;
  color: var(--muted);
  font-style: italic;
}

.doc-card-taken-message {
  display: none;
  margin-top: 0.5rem;
  padding: 0.55rem 0.7rem;
  background: #fdf7ec;
  border: 1px solid #f0c97a;
  border-radius: 4px;
  font-size: 0.825rem;
  color: #6e4c0a;
  font-style: normal;
}

.doc-card-taken-message.visible {
  display: block;
}

/* N:1 párování — částečně vyčerpaný doklad (přiřazen jiným TX, ale zbývá částka) */
.doc-card-partial {
  border-left: 3px solid #f59e0b;
}

/* N:1 párování — plně vyčerpaný doklad */
.doc-card-exhausted {
  background: #f3f3f5;
  border-style: dashed;
  opacity: 0.55;
  pointer-events: none;
}

/* N:1 — stack: původní částka nad zbytkem */
.doc-card-amount-stack {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}

.doc-card-original-amount {
  font-size: 0.7rem;
  color: #9ca3af;
  line-height: 1.2;
}

/* Řádek transakce v N:1 skupině */
.match-row-multi {
  border-left: 3px solid #f59e0b;
}

/* N:1 mini přehled pod vybraným dokladem v picker-display */
.picker-multi-summary {
  margin-top: 0.5rem;
  padding: 0.5rem 0.6rem;
  background: #fffbeb;
  border: 1px solid #fcd34d;
  border-radius: 6px;
  font-size: 0.8rem;
}

.picker-multi-summary-header {
  font-weight: 600;
  margin-bottom: 0.3rem;
  color: #92400e;
}

.picker-multi-summary ul {
  margin: 0.2rem 0;
  padding-left: 1.2rem;
  list-style: disc;
}

.picker-multi-summary li {
  margin: 0.15rem 0;
}

.picker-multi-summary-total {
  margin-top: 0.35rem;
  font-weight: 600;
  font-size: 0.95rem;
}

/* Surplus confirmation UI */
.surplus-confirm {
  margin-top: 0.4rem;
  padding: 0.45rem 0.55rem;
  background: #fff7ed;
  border: 1px solid #fdba74;
  border-radius: 6px;
}

.surplus-confirm-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  margin-bottom: 0.35rem;
}

.surplus-chip {
  padding: 0.2rem 0.55rem;
  border: 1px solid #d4d4d8;
  border-radius: 12px;
  background: #fff;
  font-size: 0.75rem;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s;
}

.surplus-chip:hover {
  background: #fef3c7;
  border-color: #f59e0b;
}

.surplus-confirm-row {
  display: flex;
  gap: 0.35rem;
  align-items: center;
}

.surplus-confirm input[type="text"] {
  flex: 1;
  padding: 0.3rem 0.5rem;
  border: 1px solid #d4d4d8;
  border-radius: 4px;
  font-size: 0.8rem;
}

.surplus-confirm-btn {
  padding: 0.3rem 0.7rem;
  background: #f59e0b;
  color: #fff;
  border: none;
  border-radius: 4px;
  font-size: 0.8rem;
  cursor: pointer;
  font-weight: 600;
  white-space: nowrap;
}

.surplus-confirm-btn:hover {
  background: #d97706;
}

.surplus-confirmed-row {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  color: #166534;
  font-size: 0.8rem;
}

.surplus-change-btn {
  font-size: 0.7rem;
  padding: 0.15rem 0.45rem;
  cursor: pointer;
}

/* Floating apply bar — pluje nad aplikací u dolního okraje viewportu.
   Šířka odpovídá centrálnímu obsahu (max-width main), zaoblené rohy,
   odsazení od dna pro dojem volné karty plující nad UI. */
.apply-bar {
  position: fixed;
  bottom: 12px;
  left: 1rem;
  right: 1rem;
  z-index: 100;
  pointer-events: none;
}

.apply-bar-inner {
  pointer-events: auto;
  max-width: 1200px;
  margin: 0 auto;
  background: rgba(255, 255, 255, 0.97);
  backdrop-filter: blur(12px);
  border: 1px solid var(--border);
  border-radius: 14px;
  box-shadow:
    0 10px 32px rgba(0, 0, 0, 0.12),
    0 4px 10px rgba(0, 0, 0, 0.06),
    0 1px 2px rgba(0, 0, 0, 0.04);
  padding: 0.7rem 1rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

.apply-bar-info {
  flex: 1 1 200px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}

.apply-bar-stats {
  font-size: 0.85rem;
  color: var(--muted);
  line-height: 1.35;
}

.apply-bar-stats strong {
  color: var(--fg);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.apply-bar-stats-divider {
  color: var(--border);
  margin: 0 0.15rem;
}

.apply-bar-info .status {
  margin: 0;
  font-size: 0.82rem;
}

.apply-bar #apply-btn {
  flex: 0 0 auto;
}

/* „Vygenerovat" + download split-button vedle sebe na pravé straně baru. */
.apply-bar-actions {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 0.4rem;
  flex-wrap: wrap;
}

/* Download split-button: hlavní ZIP tlačítko + caret (šipka s menu) jako jeden celek. */
.apply-download {
  display: flex;
  align-items: stretch;
}
.apply-download .zip-download-btn {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
.apply-download-menu { position: relative; display: flex; }
.apply-download-menu > summary {
  list-style: none;
  user-select: none;
  display: flex;
  align-items: center;
  padding: 0 0.55rem;
  /* Sdílí vzhled s .primary, jen zaoblený vpravo a oddělený jemnou čárou. */
  background: var(--accent);
  color: #fff;
  border-radius: 0 8px 8px 0;
  border-left: 1px solid rgba(255, 255, 255, 0.35);
  cursor: pointer;
  font-size: 0.8rem;
}
.apply-download-menu > summary::-webkit-details-marker { display: none; }
.apply-download-menu > summary:hover { filter: brightness(1.08); }
/* Menu se otevírá NAHORU — bar je u spodního okraje viewportu. */
.apply-download-items {
  position: absolute;
  right: 0;
  bottom: calc(100% + 0.3rem);
  top: auto;
  z-index: 110;
  display: flex;
  flex-direction: column;
  min-width: 18rem;
  max-height: 50vh;
  overflow: auto;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 6px 24px rgba(0, 0, 0, 0.18);
  padding: 0.3rem;
}
.apply-download-items button {
  /* Bílý panel → tmavý text (jinak by globální button{color:#fff} dalo bílé na bílém). */
  background: #fff;
  color: var(--fg);
  border: none;
  border-radius: 6px;
  text-align: left;
  padding: 0.5rem 0.7rem;
  cursor: pointer;
  font-size: 0.88rem;
}
.apply-download-items button:hover:not(:disabled) { background: var(--accent); color: #fff; }
.apply-download-items button:hover:not(:disabled) .muted { color: rgba(255, 255, 255, 0.85); }

main {
  padding-bottom: 2rem;
}

#apply-results {
  margin-top: 1rem;
}

.skipped-list,
.applied-list {
  list-style: none;
  padding: 0;
  margin: 0.5rem 0 0;
  font-size: 0.825rem;
}

.skipped-list li,
.applied-list li {
  padding: 0.2rem 0;
}

@media (max-width: 900px) {
  .picker-popover-body .picker-section {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 640px) {
  .match-row {
    grid-template-columns: 1fr;
  }
  .picker-popover-body .picker-section {
    grid-template-columns: 1fr;
  }
}

/* ----- Phase 4: spinner + polish ----- */

.spinner {
  display: inline-block;
  width: 12px;
  height: 12px;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
  vertical-align: -2px;
  margin-right: 0.5rem;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

.error {
  white-space: pre-wrap;
  padding: 0.5rem 0.75rem;
  background: #fdebef;
  border: 1px solid #f4c0c9;
  border-radius: 6px;
  margin-top: 0.75rem;
}

/* ----- Phase 4: mobile polish ----- */

@media (max-width: 640px) {
  main {
    margin: 1rem auto;
  }
  .card {
    padding: 1rem;
  }
  .card-header {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
  }
  .stats {
    gap: 0.5rem;
  }
  .stat {
    flex: 1 1 100px;
    padding: 0.5rem 0.75rem;
  }
  .stat b {
    font-size: 1.25rem;
  }
  .file-info {
    grid-template-columns: auto 1fr;
  }
  .file-info-meta {
    grid-column: 2;
    text-align: left;
    white-space: normal;
  }
  /* Upload checklist: select pod názvem souboru, ať se vejde na úzký displej. */
  .slot-file {
    grid-template-columns: 1fr;
  }
  .slot-file .slot-select {
    grid-column: 1;
    grid-row: auto;
    max-width: 100%;
    margin-top: 0.35rem;
  }
  .checklist-head {
    flex-wrap: wrap;
  }
  .modal-actions button {
    flex: 1 1 auto;
  }
}

/* ---------------- Avíza z platebních bran (ui-aviza.js) ---------------- */
.aviza-container { margin-bottom: 1.25rem; }
.aviza-container:last-child { margin-bottom: 0; }

.aviza-file {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 1rem 1.25rem;
  background: #fbfbfc;
}
.aviza-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
  flex-wrap: wrap;
}
.aviza-title { margin: 0; font-size: 1.05rem; }
.aviza-sub { margin: 0.15rem 0 0; }
.section-export-btn, .aviza-export-btn {
  background: var(--accent);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 0.5rem 0.9rem;
  cursor: pointer;
  font-weight: 600;
}
.section-export-btn:hover, .aviza-export-btn:hover { background: var(--accent-hover); }
.section-export-btn:disabled, .aviza-export-btn:disabled { opacity: 0.6; cursor: default; }

.aviza-stats { margin: 0.75rem 0 0.5rem; }
.aviza-firmtotals { margin: 0.25rem 0 0.5rem; }

/* Volba bankovního účtu per merchant — export avíz se dělí na soubor per účet. */
.aviza-accounts {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 0.75rem;
  margin: 0.25rem 0 0.5rem;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #f7f9fc;
  font-size: 0.9rem;
}
.aviza-account-pick { display: inline-flex; align-items: center; gap: 0.35rem; }
.aviza-accounts select {
  padding: 0.25rem 0.4rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: #fff;
  color: #1a1a1a;
  font-size: 0.88rem;
}
.aviza-reconcile { margin: 0.25rem 0 0.75rem; font-weight: 600; }
.aviza-reconcile.ok { color: #1c7c34; }
.aviza-reconcile.bad { color: var(--error); }

.aviza-groups { display: flex; flex-direction: column; gap: 0.5rem; }
.aviza-group {
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fff;
  /* POZOR: žádný overflow:hidden — ořezával by popover pickeru (až 500px vysoký),
     když má skupina jen pár transakcí. Rohy zůstávají zaoblené i bez něj, protože
     vnitřní obsah má padding a nesahá na hrany. */
}
/* Hotová skupina (vše auto-matched, nic ke kontrole) — modré ladění jako
   auto-matched karty v GPC sekci (.match-row-auto). Řadí se dolů ve výpisu. */
.aviza-group-done {
  background: linear-gradient(to right, #dde8f8 0%, #ecf2fb 70%, #fbfbfc 100%);
  border-color: #a5c1e3;
}
.aviza-group-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.75rem;
  padding: 0.6rem 0.85rem;
  cursor: pointer;
  flex-wrap: wrap;
}
.aviza-group-main { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; }
.aviza-netto { font-weight: 700; }
.aviza-netto-db { color: #c0392b; }
.aviza-batch-id {
  font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
  letter-spacing: 0.02em;
}
.aviza-terminal { font-size: 0.78rem; }
.aviza-group-meta { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }

.aviza-badge {
  font-size: 0.72rem;
  padding: 0.1rem 0.45rem;
  border-radius: 999px;
  background: #eee;
  white-space: nowrap;
}
.aviza-badge.ok { background: #cfe9d0; color: #1c5c2a; }
.aviza-badge.warn { background: #f6e3b0; color: #7a5a00; }
.aviza-badge.bad { background: #f4cdd4; color: #8a1a2e; }
.aviza-gpc-link { font-size: 0.78rem; color: #1c5c2a; text-decoration: none; cursor: pointer; }
.aviza-gpc-link:hover { text-decoration: underline; }
.aviza-gpc-link.manual { color: #1f4d8f; }
.match-row-highlight { outline: 2.5px solid var(--accent); outline-offset: -1px; border-radius: 6px; }
.aviza-group-highlight { outline: 2.5px solid var(--accent); outline-offset: -1px; border-radius: 6px; }
.aviza-gpc-nolink { font-size: 0.78rem; color: #7a5a00; }
.aviza-gpc-diff { color: #7a5a00; font-weight: 400; }
.aviza-link-manual {
  font-size: 0.66rem; font-weight: 600; color: var(--accent);
  background: #eef4ff; border-radius: 999px; padding: 0.04rem 0.4rem; margin-left: 0.15rem;
}

.aviza-deposit-note {
  margin: 0 0.85rem 0.5rem;
  padding: 0.5rem 0.7rem;
  background: #fff6e0;
  border: 1px solid #e7cf8f;
  border-radius: 6px;
  font-size: 0.82rem;
  color: #5a4500;
  line-height: 1.4;
}
.aviza-deposit-note.warn { background: #fdecec; border-color: #e7a3a3; color: #7a1f1f; }

.aviza-tx-list { padding: 0.5rem 0.85rem 0.75rem; display: flex; flex-direction: column; gap: 0.5rem; }
.aviza-tx {
  display: grid;
  grid-template-columns: 1fr minmax(260px, 420px);
  gap: 0.75rem;
  align-items: start;
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: #fbfbfc;
}
.aviza-tx.is-db { background: linear-gradient(to right, #fdeef0 0%, #fbfbfc 80%); border-color: #e3b3bd; }
.aviza-tx-info { display: flex; align-items: baseline; gap: 0.55rem; flex-wrap: wrap; }
.aviza-dir { font-size: 0.68rem; font-weight: 700; padding: 0.08rem 0.4rem; border-radius: 4px; }
.aviza-dir.cr { background: #d6e5f7; color: #114; }
.aviza-dir.db { background: #f4cdd4; color: #8a1a2e; }
.aviza-amount { font-weight: 700; }
.aviza-amount-db { color: #c0392b; }
.aviza-vs { font-family: ui-monospace, Menlo, monospace; font-size: 0.85rem; }
.aviza-card { font-family: ui-monospace, Menlo, monospace; font-size: 0.78rem; }

.aviza-tx-picker { position: relative; }
.picker-change-btn {
  background: #fff;
  color: var(--accent);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 0.2rem 0.5rem;
  cursor: pointer;
  font-size: 0.78rem;
  font-weight: 600;
}
.picker-change-btn:hover { background: var(--accent); color: #fff; border-color: var(--accent); }

/* „×" odebrání výběru v avíza pickeru — čitelné červené tlačítko (jinak by globální
   button styl dal bílý text). Scope na .aviza-tx-picker, ať nezasáhne manual matching. */
.aviza-tx-picker .picker-remove {
  padding: 0.2rem 0.55rem;
  font-size: 1.05rem;
  line-height: 1;
  font-weight: 700;
  color: var(--error);
  background: #fff;
  border: 1px solid #e3b3bd;
  border-radius: 5px;
}
.aviza-tx-picker .picker-remove:hover {
  background: rgba(217, 48, 75, 0.08);
  border-color: var(--error);
}
.picker-selected.user { border-left: 3px solid #2e9e44; }
.picker-selected.auto { border-left: 3px solid var(--accent); }
.aviza-auto { font-size: 0.7rem; color: var(--accent); font-weight: 600; }
.aviza-auto.warn { color: #7a5a00; }
.aviza-vschange { font-size: 0.78rem; color: #8a1a2e; }
.aviza-vsok { font-size: 0.76rem; }

.aviza-popover { position: absolute; right: 0; z-index: 100; width: min(420px, 90vw); }
.aviza-candidates { display: flex; flex-direction: column; max-height: 320px; overflow-y: auto; }
.aviza-cand {
  text-align: left;
  background: none;
  color: var(--fg);
  border: none;
  border-bottom: 1px solid var(--border);
  padding: 0.5rem 0.6rem;
  cursor: pointer;
  font-size: 0.85rem;
}
.aviza-cand:hover { background: #eef4ff; }

/* Již spárované avíza dávky (vše OK) — schované za toggle, default sbalené. */
.aviza-done-wrap { margin-top: 0.75rem; }
.aviza-done-toggle {
  background: #fff;
  color: var(--accent);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 0.35rem 0.8rem;
  font-size: 0.85rem;
  font-weight: 600;
  cursor: pointer;
}
.aviza-done-toggle:hover { background: var(--accent); color: #fff; border-color: var(--accent); }
.aviza-done-groups { margin-top: 0.5rem; display: flex; flex-direction: column; gap: 0.5rem; }
/* Bez tohoto by display:flex výše přebilo atribut `hidden` a skupiny by nešly schovat. */
.aviza-done-groups[hidden] { display: none; }
.aviza-allmatched { padding: 0.4rem 0; }

.aviza-export-result { margin-top: 0.75rem; padding: 0.6rem 0.8rem; border-radius: 6px; }
.aviza-export-result.ok { background: #ecf7ec; border: 1px solid #a3d8a8; }
.aviza-export-result.error { background: #fdecef; border: 1px solid #e3b3bd; color: var(--error); }
.aviza-export-result .download-btn {
  margin-left: 0.5rem;
  /* Bílé pozadí → tmavý (accent) text. Bez explicitní color by globální
     button{color:#fff} dalo bílý text na světlém = neviditelný. */
  background: #fff;
  color: var(--accent);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 0.2rem 0.5rem;
  cursor: pointer;
}
/* Hover mění stav, ale drží kontrast: modré pozadí → bílý text. */
.aviza-export-result .download-btn:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
}

/* ---------- Avíza: zdroje (ČSOB / Stripe), filtry, sekční export ---------- */

/* Badge zdroje avíza — u souboru i u skupin. */
.source-badge {
  display: inline-block;
  padding: 0.08rem 0.45rem;
  border-radius: 999px;
  font-size: 0.66rem;
  font-weight: 600;
  white-space: nowrap;
  vertical-align: middle;
}
.source-badge.source-csob { background: #e3f0fd; color: #0b4f9e; border: 1px solid #b9d7f5; }
.source-badge.source-stripe { background: #efe9fd; color: #4f2d9e; border: 1px solid #d4c6f5; }

/* Filtr bar sekce Avíza — reuse vizuálu .manual-filter*, jen vlastní okraje. */
.aviza-filter { margin-top: 0.25rem; }

/* Schovávání přes filtry (zdroj = soubor, stav = skupina, směr = transakce). */
.aviza-file.filtered-out,
.aviza-group.filtered-out,
.aviza-tx.filtered-out { display: none; }

/* Systémové řádky Stripe dávky (payout / payout_reversal) — šedé, bez pickeru. */
.aviza-adjustments {
  margin-top: 0.4rem;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.aviza-adjustment {
  display: flex;
  gap: 0.75rem;
  align-items: baseline;
  padding: 0.3rem 0.65rem;
  border: 1px dashed var(--border);
  border-radius: 6px;
  background: #f6f6f8;
  color: var(--muted);
  font-size: 0.8rem;
}
.aviza-adjustment-amount { margin-left: auto; font-variant-numeric: tabular-nums; }

/* Stripe noPayout (výplata 0.00) — informativní, ne varování. */
.aviza-gpc-nolink.nopayout { color: var(--muted); }

/* Očištěný Stripe description v řádku transakce — nezabírat moc místa. */
.aviza-note {
  font-size: 0.74rem;
  max-width: 26rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Sekční export dropdown (details/summary, bez knihoven). */
.section-export-menu, .aviza-export-menu { position: relative; }
.section-export-menu > summary, .aviza-export-menu > summary {
  list-style: none;
  display: inline-block;
  user-select: none;
}
.section-export-menu > summary::-webkit-details-marker, .aviza-export-menu > summary::-webkit-details-marker { display: none; }
.section-export-items, .aviza-export-items {
  position: absolute;
  right: 0;
  top: calc(100% + 0.3rem);
  z-index: 50;
  display: flex;
  flex-direction: column;
  min-width: 16rem;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 6px 24px rgba(0, 0, 0, 0.12);
  padding: 0.3rem;
}
.section-export-items button, .aviza-export-items button {
  background: #fff;
  color: var(--fg);
  border: none;
  border-radius: 6px;
  text-align: left;
  padding: 0.5rem 0.7rem;
  cursor: pointer;
  font-size: 0.88rem;
}
.section-export-items button:hover:not(:disabled), .aviza-export-items button:hover:not(:disabled) { background: var(--accent); color: #fff; }
.section-export-items button:hover:not(:disabled) .muted, .aviza-export-items button:hover:not(:disabled) .muted { color: rgba(255, 255, 255, 0.85); }
.section-export-items button:disabled, .aviza-export-items button:disabled { color: var(--muted); cursor: default; opacity: 0.6; }
.dl-zip-highlight { background: #2d3748 !important; color: #fff !important; font-weight: 600; }
.dl-zip-highlight:hover:not(:disabled) { background: var(--accent) !important; color: #fff !important; }
