/* dar.kolegium.org — admin redizajn (28. 9. 2026, docs/ZADANIE-admin-redizajn.md).
   Celý nový vzhľad admina, len z tokenov (public/css/tokens/): žiadna nová hex hodnota, rádius
   ani tieň. Načítaný len shellom admina a prihlásením, po app.css a admin-density.css.
   Každý balík píše len do svojho bloku. */

/* P1 ▸ základ a komponenty */
/* Admin redizajn P1 (28. 9. 2026) · the shell, the page template and the shared components.
   Sizes read the tokens the density layer (admin-density.css) redefines on a fine pointer:
   the values here are the touch-safe ones (44 px targets on a coarse pointer, rule 12), and
   admin-density.css brings them down to the desk sizes of D1 (13 px, 28 px controls, 40 px
   rows, targets >= 24 px). Colours, radii and shadows only from public/css/tokens/. */

/* Touch-safe defaults, at zero specificity so the density layer's `.kan-admin` values win. */
:where(.kan-admin) {
  --admin-row-h: 48px;
  --admin-head-h: 40px;
  --admin-card-head-h: 48px;
  --admin-topbar-h: 48px;
  --admin-page-px: var(--space-8);
}

/* D1 · the admin's base text: plain text and links inside the admin inherit 13 px (the density
   layer's --fs-body on a fine pointer; the touch size on a coarse one) instead of the body's
   17 px. Headings, KPI numbers and components keep their own sizes. */
.kan-admin { font-size: var(--fs-body); line-height: var(--lh-body); }
/* Section, card, step and dialog headings inside the admin are sans, semibold, body-sized (the global h2/h3 rule in
   tokens/base.css is the PUBLIC serif display). Zero specificity beyond a bare element: any component class still wins.
   The page title is `.kan-admin__h1` (h1) and is not touched. */
:where(.kan-admin) :is(h2, h3, h4, h5, h6) { font-family: var(--font-ui); font-size: var(--fs-body); font-weight: var(--fw-semibold); line-height: 1.3; letter-spacing: normal; color: var(--text-heading); }
.kan-admin .kan-inline-link { font-size: var(--fs-small); }

/* === Shell (D3, D7) ====================================================== */
/* The whole admin on white; the sidebar on --navy-50. */
.kan-admin {
  display: grid;
  grid-template-columns: var(--admin-side-w) minmax(0, 1fr);
  min-height: 100vh;
  background: var(--paper);
  color: var(--text-body);
  font-family: var(--font-ui);
}
.kan-side {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  min-width: 0;
  padding: var(--space-3) 10px;
  background: var(--navy-50);
  border-right: 1px solid var(--border-subtle);
}
@media (min-width: 900px) {
  .kan-side { position: sticky; top: 0; align-self: start; height: 100vh; height: 100dvh; }
  .kan-side__nav { flex: 0 1 auto; min-height: 0; overflow-y: auto; }
}
.kan-side__top { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; }
.kan-side__logo {
  display: flex;
  align-items: center;
  flex-shrink: 0;
  min-height: var(--admin-nav-h);
  padding: 0 2px;
  border-radius: var(--radius-sm);
}
.kan-side__logo img { object-fit: contain; display: block; }
/* P0 ▸ B1: the whole logo alone on the first row of the menu, the search under it on the full width. */
.kan-side__top--stack { flex-direction: column; align-items: stretch; gap: var(--space-2); }
.kan-side__brand { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); min-height: 56px; }
.kan-side__logo--full { padding: 0 var(--space-2); }
.kan-side__logo--full img { width: auto; height: 56px; }
.kan-side__logo:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
.kan-side__top--stack .kan-side__search { flex: 0 0 auto; }
.kan-side__search {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex: 1 1 auto;
  min-width: 0;
  min-height: var(--admin-nav-h);
  padding: 0 var(--space-2);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-sm);
  background: var(--paper);
  color: var(--text-muted);
  font-size: var(--admin-nav-fs);
  font-weight: var(--fw-regular);
  text-decoration: none;
}
.kan-side__search:hover { color: var(--text-heading); border-color: var(--border-strong); text-decoration: none; }
.kan-side__search-text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-kbd {
  flex-shrink: 0;
  padding: 2px 5px;
  border: 1px solid var(--border-default);
  border-radius: var(--radius-xs);
  font-family: var(--font-ui);
  font-size: 0.6875rem;
  font-weight: var(--fw-medium);
  line-height: 1;
  color: var(--text-muted);
}
.kan-side__nav { display: flex; flex-direction: column; gap: 1px; padding: 3px; margin: 0 -3px; }
.kan-side__group {
  margin: var(--space-3) 0 6px;
  padding: 0 var(--space-2);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.kan-side__link {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  min-height: var(--admin-nav-h);
  padding: 0 var(--space-2);
  border-radius: var(--radius-sm);
  font-size: var(--admin-nav-fs);
  font-weight: var(--fw-medium);
  line-height: 1.2;
  color: var(--text-body);
  text-decoration: none;
  white-space: nowrap;
  transition: var(--transition-colors);
}
.kan-side__link .kan-icon { color: var(--text-muted); }
.kan-side__link:hover { background: var(--navy-100); color: var(--text-heading); text-decoration: none; }
.kan-side__link.is-active { background: var(--paper); color: var(--text-heading); font-weight: var(--fw-semibold); box-shadow: var(--shadow-1); }
.kan-side__link.is-active .kan-icon { color: var(--accent); }
.kan-side__link--quiet { color: var(--text-muted); }
.kan-side__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kan-side__count {
  flex-shrink: 0;
  margin-left: auto;
  padding: 3px 7px;
  border-radius: var(--radius-pill);
  background: var(--danger-surface);
  color: var(--danger-text);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}
.kan-side__foot { margin-top: auto; display: flex; flex-direction: column; gap: 1px; flex-shrink: 0; }
.kan-side__account { position: relative; margin-top: var(--space-2); padding-top: var(--space-2); border-top: 1px solid var(--navy-100); }
.kan-side__account-summary {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: var(--admin-nav-h);
  padding: 6px var(--space-2);
  border-radius: var(--radius-sm);
  color: var(--text-muted);
  cursor: pointer;
  list-style: none;
}
.kan-side__account-summary::-webkit-details-marker { display: none; }
.kan-side__account-summary:hover,
.kan-side__account[open] > .kan-side__account-summary { background: var(--navy-100); }
.kan-avatar {
  display: grid;
  place-items: center;
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  border-radius: var(--radius-pill);
  background: var(--accent);
  color: var(--on-accent);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
}
.kan-side__who { display: flex; flex-direction: column; gap: 3px; flex: 1 1 auto; min-width: 0; }
.kan-side__name,
.kan-side__email { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.15; }
.kan-side__name { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-side__email { font-size: 0.6875rem; color: var(--text-muted); }
/* The account menu is `.kan-menu` (P0 ▸ C6): `.kan-side__menu` is gone. */
.kan-side__close { display: none; }
.kan-side__scrim[hidden] { display: none; }

/* The column right of the sidebar: the top bar with the breadcrumbs, then the page. */
.kan-admin-page { display: flex; flex-direction: column; min-width: 0; }
.kan-topbar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: var(--admin-topbar-h);
  padding: 0 var(--admin-page-px);
  border-bottom: 1px solid var(--border-subtle);
  background: var(--paper);
}
.kan-topbar__menu,
.kan-topbar__back,
.kan-topbar__search,
.kan-topbar__spacer { display: none; }
.kan-topbar__menu,
.kan-side__close {
  place-items: center;
  flex-shrink: 0;
  width: var(--touch-min);
  height: var(--touch-min);
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-heading);
  cursor: pointer;
}
.kan-topbar__menu:hover,
.kan-side__close:hover { background: var(--surface-sunken); }
.kan-admin .kan-admin__main { padding: var(--admin-main-pad); gap: var(--admin-stack); }

/* Below 900 px (MobilMenu.dc.html). Without JavaScript the sidebar just stands above the page,
   a wrapped list; with it (public/js/admin.js) it becomes a drawer over the page. */
@media (max-width: 899.98px) {
  .kan-admin { grid-template-columns: minmax(0, 1fr); --admin-page-px: var(--space-4); }
  .kan-side { border-right: 0; border-bottom: 1px solid var(--border-subtle); }
  .no-js .kan-side__nav { flex-direction: row; flex-wrap: wrap; }
  .no-js .kan-side__group { flex: 1 1 100%; }

  html:not(.no-js) .kan-side {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    z-index: var(--z-modal);
    width: min(316px, 86vw);
    padding: var(--space-2) var(--space-3) var(--space-3);
    overflow-y: auto;
    border-bottom: 0;
    box-shadow: var(--shadow-2);
    transform: translateX(-100%);
    visibility: hidden;
    transition: transform var(--dur-base) var(--ease-out), visibility 0s linear var(--dur-base);
  }
  html:not(.no-js) .kan-admin.is-menu-open .kan-side {
    transform: none;
    visibility: visible;
    transition: transform var(--dur-base) var(--ease-out), visibility 0s;
  }
  html:not(.no-js) .kan-side__close { display: inline-grid; }
  html:not(.no-js) .kan-side__search { display: none; }
  .kan-side__scrim { position: fixed; inset: 0; z-index: var(--z-scrim); background: var(--scrim); }

  html:not(.no-js) .kan-topbar { position: sticky; top: 0; z-index: var(--z-sticky); min-height: 56px; padding: 0 6px; gap: var(--space-1); }
  html:not(.no-js) .kan-topbar__menu { display: inline-grid; }
  html:not(.no-js) .kan-topbar__back { display: inline-flex; }
  html:not(.no-js) .kan-topbar__spacer { display: block; }
  html:not(.no-js) .kan-topbar__search { display: inline-grid; }
  html:not(.no-js) .kan-topbar__crumbs { display: none; }
}

/* === Page template ======================================================= */
.kan-crumbs { min-width: 0; font-size: var(--fs-small); }
.kan-crumbs__list { display: flex; align-items: center; gap: var(--space-2); min-width: 0; margin: 0; padding: 0; list-style: none; }
.kan-crumbs__item { display: flex; align-items: center; gap: var(--space-2); min-width: 0; white-space: nowrap; }
.kan-crumbs__item + .kan-crumbs__item::before { content: "/"; color: var(--ink-300); }
.kan-crumbs__link,
.kan-crumbs__text { overflow: hidden; text-overflow: ellipsis; }
.kan-crumbs__link { color: var(--text-muted); text-decoration: none; }
.kan-crumbs__link:hover { color: var(--text-heading); text-decoration: underline; }
.kan-crumbs__text { color: var(--text-muted); }
.kan-crumbs__item.is-current { flex-shrink: 1; }
.kan-crumbs__item.is-current .kan-crumbs__text { color: var(--text-heading); font-weight: var(--fw-medium); }

.kan-admin .kan-page-header { align-items: center; flex-wrap: nowrap; gap: var(--space-2) var(--space-4); }
.kan-admin .kan-page-header .kan-admin__header-text { flex: 1 1 auto; gap: 6px; }
.kan-admin .kan-page-header .kan-overline { font-size: 0.6875rem; letter-spacing: 0.08em; }
.kan-admin .kan-page-header .kan-admin__h1-row { gap: 10px; }
.kan-admin .kan-page-header .kan-admin__h1 { font-size: var(--admin-h1); line-height: 1.15; letter-spacing: var(--ls-heading); }
.kan-admin .kan-admin__header-actions { flex-wrap: nowrap; gap: var(--space-2); min-width: 0; }
@media (max-width: 719.98px) {
  .kan-admin .kan-page-header { flex-wrap: wrap; }
  .kan-admin .kan-admin__header-actions { flex-wrap: wrap; }
}

/* === Controls (D4, D5, D6) — every existing admin screen ================= */
/* D4 · a button in the admin is a rectangle with --radius-sm, sentence case, one line. */
.kan-admin .kan-btn,
.kan-admin-signin .kan-btn {
  gap: 6px;
  max-width: 100%;
  min-width: 0;
  border-width: 1px;
  border-radius: var(--radius-sm);
  font-weight: var(--fw-medium);
  letter-spacing: normal;
  text-transform: none;
  white-space: nowrap;
}
.kan-admin .kan-btn > span:not(.kan-icon),
.kan-admin-signin .kan-btn > span:not(.kan-icon) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Sizes at low specificity: admin-density.css refines them on a fine pointer. */
:where(.kan-admin) .kan-btn--md { padding: 0 10px; font-size: var(--fs-small); }
:where(.kan-admin) .kan-btn--sm { padding: 0 var(--space-2); font-size: var(--fs-small); }
.kan-admin .kan-btn--secondary { background: var(--paper); color: var(--text-heading); border-color: var(--border-default); }
.kan-admin .kan-btn--secondary:hover:not(:disabled) { background: var(--surface-sunken); border-color: var(--border-default); color: var(--text-heading); }
.kan-admin .kan-btn--link { color: var(--text-body); text-decoration: none; }
.kan-admin .kan-btn--link:hover:not(:disabled) { background: var(--surface-sunken); color: var(--text-heading); text-decoration: none; }
.kan-admin .kan-btn:disabled,
.kan-admin .kan-btn[aria-disabled="true"] { background: var(--surface-disabled); color: var(--text-disabled); border-color: var(--border-subtle); }
.kan-admin .kan-btn--link:disabled { background: transparent; border-color: transparent; }

.kan-admin .kan-iconbtn {
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-muted);
}
.kan-admin .kan-iconbtn:hover { background: var(--surface-sunken); border-color: transparent; color: var(--text-heading); }
.kan-admin .kan-iconbtn.is-copied { color: var(--success-text); }
.kan-admin .kan-iconbtn--danger:hover { background: var(--destructive-quiet-bg-hover); color: var(--danger-text); }
.kan-admin button.kan-star { color: var(--border-strong); }
.kan-admin button.kan-star:hover,
.kan-admin button.kan-star:focus-visible { color: var(--gold-600); background: transparent; }

/* Fields: one line, the thin frame of the boards, a visible focus ring, never switched off. */
.kan-admin .kan-input,
.kan-admin-signin .kan-input {
  min-width: 0;
  padding: 0 10px;
  border-width: 1px;
  border-color: var(--border-default);
  border-radius: var(--radius-sm);
  box-shadow: none;
  text-overflow: ellipsis;
}
.kan-admin .kan-input:focus,
.kan-admin-signin .kan-input:focus { border-color: var(--focus-ring); }
.kan-admin .kan-input:focus-visible,
.kan-admin-signin .kan-input:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
.kan-admin .kan-input[aria-invalid="true"] { border-color: var(--danger); }
.kan-admin textarea.kan-input,
.kan-admin .kan-textarea { padding: var(--space-2) 10px; text-overflow: clip; }
/* D6 · one arrow, ours: the browser's own is switched off and a small chevron is drawn from
   two token-coloured gradients (no image, no new colour). */
.kan-admin select.kan-input,
.kan-admin .kan-select {
  -webkit-appearance: none;
  appearance: none;
  padding-right: 30px;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--text-muted) 50%),
    linear-gradient(135deg, var(--text-muted) 50%, transparent 50%);
  background-position: calc(100% - 15px) 50%, calc(100% - 11px) 50%;
  background-size: 4px 4px, 4px 4px;
  background-repeat: no-repeat;
  white-space: nowrap;
}
.kan-admin select.kan-input::-ms-expand { display: none; }
/* Inputs whose own class shapes them (the rule above would otherwise win): the search with its
   icon, a suffix, the file input, the address box of a page, the fundraiser text editor. */
.kan-admin .kan-search__input { padding-left: 30px; }
.kan-admin .kan-search__wrap > .kan-icon { left: 10px; width: 14px; height: 14px; }
.kan-admin .kan-input--suffixed { padding-right: var(--space-10); }
.kan-admin .kan-file { padding: var(--space-2) 10px; }
.kan-admin .kan-fund-text__editor { padding-block: var(--space-3); }
.kan-admin .kan-slug { border-width: 1px; border-color: var(--border-default); border-radius: var(--radius-sm); box-shadow: none; }
.kan-admin .kan-slug__prefix { padding-left: 10px; }
.kan-admin .kan-slug__input { border: 0; padding-left: var(--space-1); }

.kan-admin .kan-field__label { font-size: var(--fs-small); font-weight: var(--fw-medium); }

/* D5 · labels of controls stay on one line. */
.kan-admin .kan-lang-tabs__tab { white-space: nowrap; }

/* D17 · the status badge (x-admin.status-badge): pill, icon + word. The tones moved to app.css (P0 ▸ F2 #6) — the public part uses them too. */
.kan-admin .kan-badge { font-weight: var(--fw-medium); line-height: 1.3; }

/* D12 · the Počítač / Mobil switch and every x-segmented in the admin: a compact rectangle
   (Komponenty.dc.html `.segc`), the chosen option white and raised. */
.kan-admin .kan-freq__track {
  gap: 2px;
  padding: 2px;
  border-color: var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--surface-disabled);
}
:where(.kan-admin) .kan-freq__option { min-height: var(--touch-min); font-size: var(--fs-small); }
.kan-admin .kan-freq__option {
  padding: 0 10px;
  border: 0;
  border-radius: var(--radius-xs);
  color: var(--text-muted);
  font-weight: var(--fw-medium);
  white-space: nowrap;
}
.kan-admin .kan-freq__option:has(input:checked),
.kan-admin .kan-freq--links .kan-freq__option[aria-current] {
  background: var(--paper);
  color: var(--text-heading);
  font-weight: var(--fw-semibold);
  box-shadow: var(--shadow-1);
}
.kan-admin .kan-freq--links .kan-freq__track { display: inline-grid; grid-auto-flow: column; grid-template-columns: none; }
.kan-admin .kan-freq--links { display: inline-block; max-width: 100%; }
.kan-freq__dot { display: inline-block; width: 6px; height: 6px; margin-left: var(--space-1); border-radius: var(--radius-pill); background: var(--accent); vertical-align: middle; }
/* P-follow ▸ switch dot */
.kan-freq__count { color: var(--text-muted); font-weight: var(--fw-regular); font-variant-numeric: tabular-nums; }

/* Tables (conventions + x-admin.table): quiet 12 px header, rows at --admin-row-h, one line
   per cell, numbers right, always inside the card. */
.kan-admin .kan-table-wrap { border-color: var(--border-subtle); border-radius: var(--radius-md); box-shadow: none; }
.kan-admin .kan-table th,
.kan-admin .kan-table td { padding-inline: var(--admin-cell-px); }
.kan-admin .kan-table thead th {
  height: var(--admin-head-h);
  padding-block: 0;
}
.kan-admin .kan-table td { height: var(--admin-row-h); color: var(--text-body); }
.kan-admin .kan-atable--in-card { border: 0; border-radius: 0; }
.kan-admin .kan-atable--dense { --admin-row-h: 36px; --admin-cell-px: var(--space-2); }
.kan-cell-trunc { max-width: 0; width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* P0 ▸ B13 · the empty state of the admin: a 20 px icon in a 40 px circle, a 13 px heading, a 12 px sentence, no frame. */
.kan-admin .kan-empty { gap: var(--space-2); padding: var(--space-8) var(--space-4); background: transparent; border: 0; border-radius: 0; }
.kan-admin .kan-empty__icon { width: 40px; height: 40px; border: 0; background: var(--surface-sunken); color: var(--ink-400); }
.kan-admin .kan-empty__icon .kan-icon { width: 20px; height: 20px; }
.kan-admin .kan-empty__title { font-family: var(--font-ui); font-size: var(--fs-small); font-weight: var(--fw-semibold); line-height: 1.4; }
.kan-admin .kan-empty__body { font-size: 0.75rem; line-height: 1.5; }
.kan-admin .kan-empty--inline { padding: var(--space-3) var(--space-4); font-size: var(--fs-small); }
.kan-admin .kan-card__body:not(.kan-card__body--flush) > .kan-empty--inline { padding-inline: 0; }
.kan-atable-empty { display: flex; flex-direction: column; align-items: center; gap: var(--space-2); }
.kan-atable-empty > .kan-empty { align-self: stretch; }

/* === Components ========================================================== */
/* x-admin.card */
.kan-card {
  min-width: 0;
  background: var(--surface-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
}
.kan-card__head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: var(--admin-card-head-h);
  padding: 0 var(--space-4);
  border-bottom: 1px solid var(--border-subtle);
}
.kan-card__title {
  margin: 0;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: var(--font-ui);
  font-size: 0.875rem;
  font-weight: var(--fw-semibold);
  line-height: 1.3;
  letter-spacing: normal;
  color: var(--text-heading);
}
.kan-card__actions { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; flex-shrink: 0; }
.kan-card__body { padding: var(--admin-card-pad); min-width: 0; }
.kan-card__body--flush { padding: 0; }
.kan-card__foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  padding: 10px var(--space-4);
  border-top: 1px solid var(--border-subtle);
}

/* x-admin.kpi-strip */
.kan-kpistrip { display: grid; grid-template-columns: repeat(var(--kpi-count, 4), minmax(0, 1fr)); }
.kan-kpistrip__cell {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
  padding: var(--space-3) var(--space-4);
  border-left: 1px solid var(--border-subtle);
  color: inherit;
  text-decoration: none;
}
.kan-kpistrip__cell:first-child { border-left: 0; }
a.kan-kpistrip__cell:hover { background: var(--surface-sunken); text-decoration: none; }
a.kan-kpistrip__cell:focus-visible { outline-offset: -3px; }
.kan-kpistrip__label,
.kan-kpistrip__value,
.kan-kpistrip__note { margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* P0 ▸ B7: a label may take two lines (the number stays level through the cell's flex column). */
.kan-kpistrip__label { display: flex; align-items: flex-start; gap: 6px; font-size: 0.75rem; font-weight: var(--fw-medium); line-height: 1.2; color: var(--text-muted); overflow: visible; white-space: normal; text-overflow: clip; }
.kan-kpistrip__label-text { min-width: 0; overflow-wrap: break-word; }
/* The 24 px „i" sits in the 14 px label line without making it taller (the values stay level). */
.kan-kpistrip__label .kan-help { margin-block: -6px; }
.kan-kpistrip__value { font-size: 1.125rem; font-weight: var(--fw-semibold); line-height: 1.1; color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-kpistrip__note { font-size: 0.75rem; line-height: 1.2; color: var(--text-muted); }
@media (max-width: 719.98px) {
  .kan-kpistrip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kan-kpistrip__cell:nth-child(odd) { border-left: 0; }
  .kan-kpistrip__cell:nth-child(n + 3) { border-top: 1px solid var(--border-subtle); }
}

/* x-admin.facts */
.kan-facts { display: grid; grid-template-columns: 140px minmax(0, 1fr); margin: 0; }
.kan-facts__row { display: contents; }
.kan-facts__label,
.kan-facts__value { border-bottom: 1px solid var(--border-subtle); }
.kan-facts__label { padding: 10px 0 10px var(--space-4); font-size: 0.75rem; font-weight: var(--fw-medium); line-height: 1.3; color: var(--text-muted); overflow-wrap: break-word; min-width: 0; }
.kan-facts__value { display: flex; align-items: center; gap: 6px; min-width: 0; margin: 0; padding: 10px var(--space-4) 10px var(--space-3); font-size: var(--fs-small); line-height: 1.3; color: var(--text-heading); }
.kan-facts__value.is-muted { color: var(--text-muted); }
.kan-facts__row:last-child > .kan-facts__label,
.kan-facts__row:last-child > .kan-facts__value { border-bottom: 0; }
.kan-facts__text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-facts .kan-copy { flex: 1 1 auto; }
.kan-facts .kan-copy__btn { margin-left: auto; }

/* x-admin.copy (D11) */
.kan-copy { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%; }
.kan-copy__value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; user-select: text; }
.kan-admin .kan-copy__btn { width: var(--touch-min); height: var(--touch-min); flex-shrink: 0; }
.no-js .kan-copy__btn { display: none; }

/* x-admin.form-row (Nastavenia: label left, field right, the „i" instead of a sentence) */
.kan-formrow {
  display: grid;
  grid-template-columns: 200px minmax(0, 1fr);
  gap: var(--space-2) var(--space-6);
  align-items: center;
  min-height: 52px;
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--border-subtle);
}
.kan-formrow:last-child { border-bottom: 0; }
/* P0 ▸ B6: a label wraps onto two lines, nothing is cut with an ellipsis (D5 is for controls). */
.kan-formrow__label { display: flex; align-items: flex-start; gap: 6px; min-width: 0; }
.kan-formrow__label .kan-help { margin-block: -4px; }
.kan-formrow__text { min-width: 0; overflow-wrap: break-word; font-size: var(--fs-small); font-weight: var(--fw-medium); line-height: 1.3; color: var(--text-heading); }
.kan-formrow__value { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
.kan-formrow__control { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); min-width: 0; font-size: var(--fs-small); color: var(--text-heading); }
.kan-formrow__source {
  padding: 3px 6px;
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-xs);
  background: var(--surface-disabled);
  font-size: 0.6875rem;
  font-weight: var(--fw-medium);
  line-height: 1;
  color: var(--text-muted);
  white-space: nowrap;
}
.kan-formrow__hint { margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; color: var(--text-muted); }
@media (max-width: 719.98px) {
  .kan-formrow { grid-template-columns: minmax(0, 1fr); }
}

/* x-admin.state-card */
.kan-state { display: flex; align-items: center; gap: var(--space-3); padding: 14px var(--space-4); }
.kan-state__icon { display: grid; place-items: center; flex-shrink: 0; width: 32px; height: 32px; border-radius: var(--radius-pill); }
.kan-state--green .kan-state__icon { background: var(--success-surface); color: var(--success-text); }
.kan-state--yellow .kan-state__icon { background: var(--warning-surface); color: var(--warning-text); }
.kan-state--grey .kan-state__icon { background: var(--status-paused-bg); color: var(--status-paused-fg); }
.kan-state--red .kan-state__icon { background: var(--danger-surface); color: var(--danger-text); }
.kan-state--blue .kan-state__icon { background: var(--info-surface); color: var(--info-text); }
.kan-state__text { flex: 1 1 auto; min-width: 0; }
.kan-state__title { margin: 0; font-size: 0.875rem; font-weight: var(--fw-medium); line-height: 1.3; color: var(--text-heading); }
.kan-state__body { margin: 3px 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
.kan-state__actions { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; }
@media (max-width: 599.98px) {
  .kan-state { flex-wrap: wrap; }
  .kan-state__body { white-space: normal; }
}

/* x-admin.timeline */
.kan-timeline { margin: 0; padding: 0; list-style: none; }
.kan-timeline__item { position: relative; display: flex; gap: var(--space-3); padding-bottom: var(--space-4); }
.kan-timeline__item:last-child { padding-bottom: 0; }
.kan-timeline__item:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 10px;
  top: 22px;
  bottom: 2px;
  width: 1px;
  background: var(--border-subtle);
}
.kan-timeline__dot { display: grid; place-items: center; flex-shrink: 0; width: 20px; height: 20px; border-radius: var(--radius-pill); background: var(--navy-50); color: var(--navy-400); }
.kan-timeline__item--green .kan-timeline__dot { background: var(--success-surface); color: var(--success-text); }
.kan-timeline__item--yellow .kan-timeline__dot { background: var(--warning-surface); color: var(--warning-text); }
.kan-timeline__item--grey .kan-timeline__dot { background: var(--status-paused-bg); color: var(--status-paused-fg); }
.kan-timeline__item--red .kan-timeline__dot { background: var(--danger-surface); color: var(--danger-text); }
.kan-timeline__item--blue .kan-timeline__dot { background: var(--info-surface); color: var(--info-text); }
.kan-timeline__body { flex: 1 1 auto; min-width: 0; padding-top: 1px; }
.kan-timeline__title { margin: 0; font-size: var(--fs-small); font-weight: var(--fw-medium); line-height: 1.4; color: var(--text-heading); }
.kan-timeline__meta { margin: var(--space-1) 0 0; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }

/* x-admin.tabs */
.kan-tabs { display: flex; align-items: center; gap: var(--space-4); min-width: 0; border-bottom: 1px solid var(--border-subtle); }
.kan-tabs__nav { display: flex; gap: var(--space-6); flex: 1 1 auto; min-width: 0; overflow-x: auto; overflow-y: hidden; padding-bottom: 1px; margin-bottom: -1px; }
.kan-tabs__tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
  min-height: var(--touch-min);
  margin-bottom: -1px;
  border-bottom: 2px solid transparent;
  font-size: var(--fs-small);
  font-weight: var(--fw-medium);
  color: var(--text-muted);
  text-decoration: none;
  white-space: nowrap;
}
.kan-tabs__tab:hover { color: var(--text-heading); text-decoration: none; }
.kan-tabs__tab.is-active { border-bottom-color: var(--accent); color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-tabs__tab:focus-visible { outline-offset: -3px; }
.kan-tabs__count {
  padding: 3px 7px;
  border-radius: var(--radius-pill);
  background: var(--surface-sunken);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
  color: var(--text-muted);
  font-variant-numeric: tabular-nums;
}
.kan-tabs__aside { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; padding-bottom: var(--space-1); }
/* x-admin.tabs inside a flush card (the body has no padding): the tabs take the card's own body inset,
   the border line keeps running edge to edge. */
.kan-card__body--flush .kan-tabs { padding-inline: var(--admin-card-pad); }

/* x-admin.filter-bar + x-admin.filter-chip (D9) */
.kan-filterbar { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); min-width: 0; }
.kan-filterbar__search { position: relative; display: flex; align-items: center; flex: 0 1 280px; min-width: 160px; color: var(--text-muted); }
.kan-filterbar__search > .kan-icon { position: absolute; left: 10px; pointer-events: none; }
.kan-admin .kan-filterbar__input { padding-left: 30px; }
.kan-filterbar__chips { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); min-width: 0; }
.kan-filterbar__aside { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }
.kan-filterbar__clear { margin-left: auto; font-size: 0.75rem; font-weight: var(--fw-medium); white-space: nowrap; text-decoration: none; }
.kan-filterbar__aside + .kan-filterbar__clear { margin-left: 0; }
.kan-filterbar__clear:hover { text-decoration: underline; }

.kan-fchip {
  position: relative;
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  min-height: var(--touch-min);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius-chip);
  background: var(--paper);
}
.kan-fchip.is-on { border-style: solid; border-color: var(--accent-border); background: var(--accent-subtle); }
.kan-fchip__details { min-width: 0; }
.kan-fchip__summary {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  min-height: calc(var(--touch-min) - 2px);
  padding: 0 10px;
  border-radius: var(--radius-chip);
  font-size: 0.75rem;
  font-weight: var(--fw-medium);
  line-height: 1;
  color: var(--text-body);
  white-space: nowrap;
  cursor: pointer;
  list-style: none;
}
.kan-fchip__summary::-webkit-details-marker { display: none; }
.kan-fchip.is-on .kan-fchip__summary { padding-right: var(--space-1); }
.kan-fchip__key { color: var(--text-body); }
.kan-fchip.is-on .kan-fchip__key { color: var(--text-muted); }
.kan-fchip__sep { width: 1px; height: 14px; background: var(--accent-border); flex-shrink: 0; }
.kan-fchip__value { min-width: 0; max-width: 16rem; overflow: hidden; text-overflow: ellipsis; color: var(--accent); font-weight: var(--fw-semibold); }
.kan-fchip__chevron { color: var(--accent); transition: transform var(--dur-fast) var(--ease-standard); }
.kan-fchip__details[open] .kan-fchip__chevron { transform: rotate(180deg); }
.kan-fchip__remove {
  display: inline-grid;
  place-items: center;
  flex-shrink: 0;
  width: var(--touch-min);
  height: var(--touch-min);
  margin: -1px 0;
  border-radius: var(--radius-pill);
  color: var(--text-muted);
  text-decoration: none;
}
.kan-fchip__remove:hover { color: var(--text-heading); background: var(--navy-100); }
.kan-fchip__pop {
  position: absolute;
  top: calc(100% + var(--space-1));
  left: 0;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  width: max-content;
  min-width: 220px;
  max-width: min(320px, 90vw);
  padding: var(--space-2);
  background: var(--surface-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-2);
  cursor: auto;
}
.kan-fchip__search { position: relative; display: flex; align-items: center; color: var(--text-muted); }
.kan-fchip__search > .kan-icon { position: absolute; left: 10px; pointer-events: none; }
.kan-admin .kan-fchip__search-input { padding-left: 30px; }
.no-js .kan-fchip__search { display: none; }
.kan-fchip__options { display: flex; flex-direction: column; gap: 1px; max-height: 260px; margin: 0; padding: 0; overflow-y: auto; list-style: none; }
.kan-fchip__option { position: relative; display: flex; align-items: center; min-width: 0; }
.kan-fchip__option[hidden] { display: none; }
.kan-fchip__input { position: absolute; left: 10px; width: 16px; height: 16px; margin: 0; accent-color: var(--accent); }
.kan-fchip__label {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex: 1 1 auto;
  min-width: 0;
  min-height: var(--touch-min);
  padding: 0 10px 0 34px;
  border-radius: var(--radius-sm);
  font-size: var(--fs-small);
  color: var(--text-heading);
  white-space: nowrap;
  cursor: pointer;
}
.kan-fchip__option:hover .kan-fchip__label { background: var(--surface-sunken); }
.kan-fchip__input:checked + .kan-fchip__label { color: var(--accent); font-weight: var(--fw-semibold); }
.kan-fchip__label-text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kan-fchip__count { color: var(--text-muted); font-size: 0.75rem; font-weight: var(--fw-regular); font-variant-numeric: tabular-nums; }
.kan-fchip__none { margin: 0; padding: var(--space-2) 10px; font-size: var(--fs-small); color: var(--text-muted); }
.kan-fchip__custom { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-1); }
.kan-fchip__foot { display: flex; justify-content: flex-end; padding-top: var(--space-1); border-top: 1px solid var(--border-subtle); }
/* With JavaScript a chip applies itself; the button is the no-JS road only. */
html:not(.no-js) .kan-fchip__foot { display: none; }

/* x-admin.summary-line */
.kan-sumline { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-1) var(--space-4); margin: 0; font-size: var(--fs-small); }
.kan-sumline__item { white-space: nowrap; }
.kan-sumline__item + .kan-sumline__item { position: relative; }
.kan-sumline__item + .kan-sumline__item::before {
  content: "";
  position: absolute;
  left: calc(-1 * var(--space-2));
  top: 15%;
  bottom: 15%;
  width: 1px;
  background: var(--border-default);
}
.kan-sumline__value { font-weight: var(--fw-medium); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-sumline__label { color: var(--text-muted); }

/* x-admin.tree (D10) */
.kan-tree { min-width: 0; padding: var(--space-2); }
.kan-tree__list { display: flex; flex-direction: column; gap: 1px; margin: 0; padding: 0; list-style: none; }
.kan-tree__list--kids { margin-left: 15px; padding-left: 6px; border-left: 1px solid var(--border-subtle); }
.kan-tree__item { min-width: 0; }
.kan-tree__row {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  min-height: var(--admin-nav-h);
  padding: 0 var(--space-2);
  border-radius: var(--radius-sm);
  font-size: var(--fs-small);
  font-weight: var(--fw-medium);
  line-height: 1.2;
  color: var(--text-body);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  list-style: none;
}
.kan-tree__row::-webkit-details-marker { display: none; }
.kan-tree__row:hover { background: var(--surface-sunken); color: var(--text-heading); text-decoration: none; }
.kan-tree__branch[open] > .kan-tree__row--branch { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-tree__row--heading { font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
.kan-tree__row--heading:hover { background: transparent; }
.kan-tree__branch[open] > .kan-tree__row--heading { color: var(--text-muted); font-weight: var(--fw-semibold); }
.kan-tree__row.is-active { background: var(--navy-100); color: var(--accent); font-weight: var(--fw-semibold); }
.kan-tree__chevron { color: var(--ink-400); transition: transform var(--dur-fast) var(--ease-standard); }
.kan-tree__branch[open] > summary > .kan-tree__chevron { transform: rotate(90deg); }
.kan-tree__spacer { width: 14px; height: 14px; flex-shrink: 0; }
.kan-tree__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kan-tree__count { flex-shrink: 0; margin-left: auto; padding-left: var(--space-2); font-size: 0.75rem; font-weight: var(--fw-regular); color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-tree__mark {
  flex-shrink: 0;
  margin-left: auto;
  padding: 3px 6px;
  border: 1px solid var(--warning-border);
  border-radius: var(--radius-pill);
  background: var(--warning-surface);
  font-size: 0.6875rem;
  font-weight: var(--fw-medium);
  line-height: 1;
  color: var(--warning-text);
}
.kan-tree__count + .kan-tree__mark { margin-left: var(--space-2); }
.kan-tree__dot { width: 8px; height: 8px; flex-shrink: 0; border-radius: var(--radius-pill); background: var(--ink-400); }
.kan-tree__dot--green { background: var(--success); }
.kan-tree__dot--yellow { background: var(--warning); }
.kan-tree__dot--red { background: var(--danger); }
.kan-tree__dot--blue { background: var(--info); }

/* x-admin.dialog — over the existing .kan-dialog: the foot is a sunken band, buttons right. */
.kan-adialog { width: min(480px, 94vw); border-radius: var(--radius-md); }
.kan-adialog.kan-dialog--wide { width: min(1120px, 94vw); }
.kan-dialog__card.kan-adialog__card { gap: 0; padding: 0; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); box-shadow: var(--shadow-2); }
.kan-adialog__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); padding: var(--space-4) var(--space-4) 0; }
.kan-adialog__titles { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
.kan-adialog__title { margin: 0; font-family: var(--font-ui); font-size: 0.9375rem; font-weight: var(--fw-semibold); line-height: 1.3; letter-spacing: normal; color: var(--text-heading); }
.kan-adialog__body { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-2) var(--space-4) var(--space-4); font-size: var(--fs-small); line-height: 1.5; }
.kan-adialog__body p { margin: 0; }
.kan-adialog__foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4);
  border-top: 1px solid var(--border-subtle);
  background: var(--surface-sunken);
}
/* The component gallery (/admin/_komponenty, local only) — its own grid, nothing else uses it. */
.kan-gallery { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-5); align-items: start; }
.kan-gallery__wide { grid-column: span 2; }
.kan-gallery__stack { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.kan-gallery__row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.kan-gallery__row + .kan-gallery__row { margin-top: var(--space-3); }
.kan-gallery__lead { margin: 0; max-width: 60ch; font-size: 0.75rem; color: var(--text-muted); }
.kan-gallery__body { margin: 0; font-size: var(--fs-small); color: var(--text-body); }
.kan-gallery__meta { margin: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-gallery__input { width: 320px; max-width: 100%; }
.kan-gallery__input--short { width: 120px; }
@media (max-width: 1199.98px) { .kan-gallery { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 719.98px) { .kan-gallery { grid-template-columns: minmax(0, 1fr); } .kan-gallery__wide { grid-column: auto; } }
/* ◂ P1 */

/* P2 ▸ Platby */
/* The line of sums with its „i" beside it, and the toolbar of a detail's embedded list. */
.kan-admin .kan-sumrow { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-admin .kan-sumrow .kan-sumline { min-width: 0; }
/* The period chip's popover: two dates and the three quick periods. */
.kan-pfquick { display: flex; flex-direction: column; gap: var(--space-2); }
.kan-pfquick__links { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-3); font-size: 0.75rem; font-weight: var(--fw-medium); }
.kan-pfquick__links a[aria-current] { color: var(--text-heading); font-weight: var(--fw-semibold); text-decoration: underline; }
/* ◂ P2 */

/* P3 ▸ Trvalé podpory + príkazy */
/* Spôsob in a row: the icon and the word on one line (D5). */
.kan-supports__method { display: inline-flex; align-items: center; gap: var(--space-1); white-space: nowrap; }
.kan-supports__method .kan-icon { color: var(--text-muted); }
/* „ďalšia" / „posledná" before the date in the Platba column. */
.kan-supports__muted { color: var(--text-muted); }
/* The dry run's warnings and skipped rows under its facts. */
.kan-supports__import-body { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3) var(--space-4); border-top: 1px solid var(--border-subtle); }
/* ◂ P3 */

/* P4 ▸ detaily */
/* Two columns (main | 340 px side) shared by the donor, personal-campaign and unfinished-donation
   details; one column below 1100 px. */
.kan-detail { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: var(--space-5); align-items: start; }
.kan-detail__main,
.kan-detail__side { display: flex; flex-direction: column; gap: var(--space-5); min-width: 0; }
@media (max-width: 1100px) { .kan-detail { grid-template-columns: minmax(0, 1fr); } }
.kan-detail__stack { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.kan-detail__muted { margin: 0; font-size: 0.75rem; line-height: 1.5; color: var(--text-muted); }
.kan-detail__note { margin: var(--space-3) 0 0; font-size: 0.75rem; line-height: 1.5; color: var(--text-muted); }
.kan-card__body--flush > .kan-detail__note { margin: 0; padding: var(--space-3) var(--space-4); border-top: 1px solid var(--border-subtle); }
/* A facts list whose values may run to a sentence (consents, proofs, an unfinished gift's data). */
.kan-facts--wrap .kan-facts__value { display: block; white-space: normal; overflow-wrap: anywhere; }
.kan-facts--wrap .kan-facts__value .kan-copy { display: flex; }
.kan-facts--wrap .kan-facts__value .kan-copy__value { min-width: 0; overflow-wrap: anywhere; }
.kan-facts--wrap .kan-facts__value .kan-table__sub { display: block; }
/* A state card's action slot may carry a sentence instead of a button (why the state cannot change). */
.kan-state__blocked { margin: 0; max-width: 380px; font-size: 0.75rem; line-height: 1.45; text-align: right; color: var(--text-muted); }
/* The e-mail detail: the preview | the facts, the same 340 px side column. */
.kan-admin .kan-emaildetail { grid-template-columns: minmax(0, 1fr) 340px; }
@media (max-width: 1100px) { .kan-admin .kan-emaildetail { grid-template-columns: minmax(0, 1fr); } }
/* The personal-campaign visibility form under its state card (moved into a dialog by admin.js). */
.kan-detail__vis .kan-card__body { display: block; }
/* ◂ P4 */

/* P5 ▸ detail platby */
/* Platba.dc.html: the line under the head (donor · when paid · refunded) and the quiet words in card heads. */
.kan-pd__lead {
  /* Hugs the head like the board's third head line: the main column's gap, minus 6 px. */
  margin: calc(6px - var(--admin-stack)) 0 0;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: var(--fs-small);
  line-height: 1.4;
  color: var(--text-muted);
}
.kan-pd__order { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }
.kan-admin .kan-pd__more { font-size: 0.75rem; font-weight: var(--fw-medium); white-space: nowrap; }
.kan-pd .kan-facts__value .kan-export-mark { display: inline-flex; flex-shrink: 0; }
.kan-pd .kan-facts__value .kan-table__campaign-row { min-width: 0; }
/* ◂ P5 */

/* P6 ▸ Prehľad */

/* Page layout: wide screens stack the cards; the chart and the attention card sit side by side. */
.kan-ov { display: flex; flex-direction: column; gap: var(--space-5); min-width: 0; }
.kan-ov__scope { display: none; margin: 0; font-family: var(--font-display); font-size: 1.5rem; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-ov__pair { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--space-5); align-items: start; }
.kan-ov__pair > * { min-width: 0; }
.kan-ov__today, .kan-ov__kpis--phone, .kan-ov__meters, .kan-ov-pay { display: none; }
@media (min-width: 720px) { .kan-ov__kpis--wide { grid-template-columns: repeat(5, minmax(0, 1fr)); } }
@media (max-width: 719.98px) { .kan-ov__pair { grid-template-columns: minmax(0, 1fr); } }
.kan-ov-num { font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--text-muted); }
.kan-ov-muted { color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-ov__empty { margin: 0; padding: var(--space-4); color: var(--text-muted); }

/* Meter bar (Zbierky): the meter tokens, drawn as a plain bar. */
.kan-ov-bar { display: block; width: 120px; max-width: 100%; height: 6px; border-radius: var(--radius-pill); background: var(--meter-track); overflow: hidden; }
.kan-ov-bar__fill { display: block; height: 100%; border-radius: var(--radius-pill); background: var(--meter-fill); }
.kan-ov-bar__fill.is-complete { background: var(--meter-fill-complete); }
.kan-ov-fill { display: inline-flex; align-items: center; gap: 10px; }

/* Income chart: server-drawn SVG bars, calm colours from the tokens. */
.kan-ov-chart__split { display: inline-flex; flex-wrap: nowrap; gap: var(--space-3); font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }
.kan-ov-chart__split strong { font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-ov-chart__total { margin: 0 0 var(--space-3); font-size: 1.25rem; font-weight: var(--fw-semibold); line-height: 1.1; color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-ov-chart__frame { display: flex; gap: var(--space-3); }
.kan-ov-chart__y { position: relative; flex: 0 0 auto; width: 56px; height: 160px; font-size: 0.6875rem; line-height: 1; color: var(--text-muted); text-align: right; font-variant-numeric: tabular-nums; }
.kan-ov-chart__y span { position: absolute; right: 0; transform: translateY(-50%); white-space: nowrap; }
.kan-ov-chart__y span:first-child { transform: none; }
.kan-ov-chart__y span:last-child { transform: translateY(-100%); }
.kan-ov-chart__plot { position: relative; flex: 1 1 auto; min-width: 0; height: 160px; border-bottom: 1px solid var(--border-default); }
.kan-ov-chart__grid { position: absolute; left: 0; right: 0; border-top: 1px solid var(--border-subtle); }
.kan-ov-chart__svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.kan-ov-chart__bar { fill: var(--navy-400); }
.kan-ov-chart__bar:hover { fill: var(--navy-600); }
.kan-ov-chart__bar.is-today { fill: var(--navy-700); }
.kan-ov-chart__axis { display: flex; justify-content: space-between; margin: var(--space-2) 0 0 calc(56px + var(--space-3)); font-size: 0.6875rem; line-height: 1; color: var(--text-muted); }

/* Vyžaduje pozornosť: a row is a link to the filtered list; a zero stays, only quieter. */
.kan-ov-todo { margin: 0; padding: 0; list-style: none; }
.kan-ov-todo li + li { border-top: 1px solid var(--border-subtle); }
.kan-ov-todo__row {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  padding: 0 var(--space-4);
  color: var(--text-body);
  font-size: var(--fs-small);
  text-decoration: none;
}
.kan-ov-todo__row:hover { background: var(--surface-sunken); color: var(--text-heading); text-decoration: none; }
.kan-ov-todo__row:focus-visible { outline-offset: -3px; }
.kan-ov-todo__row .kan-icon { color: var(--text-disabled); flex-shrink: 0; }
.kan-ov-todo__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-ov-todo__count { font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-ov-todo__row.is-zero { color: var(--text-muted); }
.kan-ov-todo__row.is-zero .kan-ov-todo__count { font-weight: var(--fw-regular); color: var(--text-muted); }
.kan-ov-todo__dot { flex: 0 0 8px; width: 8px; height: 8px; border-radius: var(--radius-pill); }
.kan-ov-todo__dot--danger { background: var(--danger); }
.kan-ov-todo__dot--warning { background: var(--warning); }
.kan-ov-todo__dot--zero { background: var(--border-default); }

/* Phone (MobilPrehlad.dc.html): today's big number, 2 x 2 numbers, chart, attention, meters, two-line payments. */
@media (max-width: 599.98px) {
  .kan-ov { gap: var(--space-4); }
  .kan-ov__scope { display: block; }
  .kan-ov__today { display: flex; flex-direction: column; gap: 6px; padding: var(--space-4); background: var(--surface-sunken); border-color: var(--navy-100); }
  .kan-ov__today-value { margin: 0; font-size: 2rem; font-weight: var(--fw-semibold); line-height: 1.1; color: var(--text-heading); font-variant-numeric: tabular-nums; }
  .kan-ov__kpis--wide { display: none; }
  .kan-ov__kpis--phone { display: grid; }
  .kan-ov__pair { grid-template-columns: minmax(0, 1fr); gap: var(--space-4); }
  .kan-ov__meters { display: flex; flex-direction: column; gap: var(--space-3); }
  .kan-ov__campaigns { display: none; }
  .kan-ov__recent-table { display: none; }
  .kan-ov-pay { display: block; margin: 0; padding: 0; list-style: none; }
  .kan-ov-pay li + li { border-top: 1px solid var(--border-subtle); }
  .kan-ov-pay__row { display: flex; align-items: center; gap: var(--space-3); min-height: 56px; padding: var(--space-2) var(--space-4); color: inherit; text-decoration: none; }
  .kan-ov-pay__row:hover { background: var(--surface-sunken); text-decoration: none; }
  .kan-ov-pay__row:focus-visible { outline-offset: -3px; }
  .kan-ov-pay__main { display: flex; flex: 1 1 auto; flex-direction: column; gap: 4px; min-width: 0; }
  .kan-ov-pay__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
  .kan-ov-pay__meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; color: var(--text-muted); }
  .kan-ov-pay__side { display: flex; flex: 0 0 auto; flex-direction: column; align-items: flex-end; gap: 4px; }
  .kan-ov-pay__amount { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; white-space: nowrap; }
  .kan-ov-meter { display: flex; flex-direction: column; gap: 10px; padding: var(--space-4); color: inherit; text-decoration: none; }
  .kan-ov-meter:hover { background: var(--surface-sunken); text-decoration: none; }
  .kan-ov-meter__top { display: flex; align-items: center; gap: var(--space-2); }
  .kan-ov-meter__name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
  .kan-ov-meter .kan-ov-bar { width: 100%; }
  .kan-ov-meter__nums { display: flex; justify-content: space-between; gap: var(--space-2); font-size: var(--fs-small); font-variant-numeric: tabular-nums; color: var(--text-body); }
  .kan-ov-meter__nums strong { color: var(--text-heading); font-weight: var(--fw-semibold); }
  .kan-ov-chart__split { display: none; }
  .kan-ov-chart__y { height: 140px; width: 48px; }
  .kan-ov-chart__plot { height: 140px; }
  .kan-ov-chart__axis { margin-left: calc(48px + var(--space-3)); }
  .kan-ov__recent .kan-card__actions a, .kan-ov__campaigns .kan-card__actions a, .kan-mailvolume .kan-card__actions a { display: inline-flex; align-items: center; min-height: 44px; }
}
.kan-card.kan-mailvolume { margin-top: 0; }
.kan-mailvolume__body { display: flex; flex-direction: column; gap: var(--space-4); }
/* ◂ P6 */

/* P7 ▸ formuláre, Nastavenia, Pravidlá, E-maily */
/* Nastavenia (Nastavenia.dc.html): the vertical sub-menu (176 px) beside the cards (at most 880 px). */
.kan-settings { display: grid; grid-template-columns: 208px minmax(0, 1fr); gap: var(--space-8); align-items: start; }
.kan-settings__main { display: flex; flex-direction: column; gap: var(--space-5); min-width: 0; max-width: 880px; }
.kan-settings--wide .kan-settings__main { max-width: none; }
.kan-settings--wide { gap: var(--space-5); }
.kan-snav { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.kan-snav__link {
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 30px;
  padding: 6px 10px;
  border-radius: var(--radius-sm);
  font-size: var(--fs-small);
  font-weight: var(--fw-medium);
  line-height: 1.3;
  color: var(--text-body);
  text-decoration: none;
  white-space: normal;
}
.kan-snav__link:hover { background: var(--navy-50); color: var(--text-heading); text-decoration: none; }
.kan-snav__link.is-active { background: var(--navy-50); color: var(--accent); font-weight: var(--fw-semibold); }
.kan-snav__text { min-width: 0; overflow-wrap: break-word; }
@media (max-width: 899.98px) {
  .kan-settings, .kan-settings--wide { grid-template-columns: minmax(0, 1fr); gap: var(--space-4); }
  .kan-snav { flex-direction: row; flex-wrap: wrap; }
}
@media (pointer: coarse) { .kan-snav__link { min-height: var(--touch-min); } }

/* Widths of a field inside a settings row (a fact-sized number, a name, a long text). */
.kan-input-wrap--sm { width: 120px; max-width: 100%; }
.kan-input-wrap--md { width: 160px; max-width: 100%; }
.kan-input-wrap--lg { width: 320px; max-width: 100%; }
.kan-input-wrap--fill { width: 100%; }
.kan-formrow__muted { color: var(--text-muted); font-variant-numeric: tabular-nums; min-width: 0; }
.kan-formrow__push { margin-left: auto; }
.kan-formrow__inline { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); min-width: 0; width: 100%; }
.kan-formrow__inline .kan-input { flex: 0 1 260px; min-width: 0; }
.kan-formrow__inline .kan-field { margin: 0; flex: 0 1 200px; }
.kan-formrow--top { align-items: start; }
.kan-formrow--top > .kan-formrow__label { padding-top: 4px; }
.kan-formrow--compact { min-height: 40px; padding-block: var(--space-2); }
.kan-formrow--compact .kan-formrow__text { font-weight: var(--fw-regular); }
.kan-formrow--label-num .kan-formrow__text { font-variant-numeric: tabular-nums; }
.kan-formrow__control > .kan-field__error { flex-basis: 100%; }
.kan-card__note { margin: 0; padding: var(--space-3) var(--space-4); font-size: var(--fs-small); }
.kan-muted { color: var(--text-muted); }
.kan-card__body > .kan-muted:first-child { margin-top: 0; }
/* A band of a form card that keeps its own markup (etapy, the switches): the padding of a row. */
.kan-formblock { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--border-subtle); min-width: 0; }
.kan-formblock:last-child { border-bottom: 0; }
.kan-stack { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; width: 100%; }
.kan-stack__line { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-stack__line--wide { gap: var(--space-6); flex-wrap: wrap; }
.kan-amounts-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-5); }
@media (max-width: 899.98px) { .kan-amounts-pair { grid-template-columns: minmax(0, 1fr); } }
.kan-slugfield { display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap; width: 100%; }
.kan-slugfield[hidden], .kan-formrow [data-slug-line][hidden] { display: none; }
.kan-meterfields { gap: 0; }
.kan-details--flush { border-top: 1px solid var(--border-subtle); padding: var(--space-2) var(--space-4); }

/* Prevádzka: the fold at the bottom (a card with one summary line, open only on its own error). */
.kan-fold > .kan-card__body { padding: 0; }
.kan-fold__summary { display: flex; align-items: center; gap: var(--space-2); min-height: var(--admin-card-head-h); padding: 0 var(--space-4); cursor: pointer; list-style: none; font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-fold__summary::-webkit-details-marker { display: none; }
.kan-fold__summary:hover { background: var(--surface-sunken); }
.kan-fold__chevron { color: var(--ink-400); transition: transform var(--dur-fast) var(--ease-standard); }
.kan-fold__details[open] .kan-fold__chevron { transform: rotate(90deg); }
.kan-fold__body { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3) var(--space-4) var(--space-4); border-top: 1px solid var(--border-subtle); }

/* E-maily: the tree column (272 px) and the item card; the tree dots of the two admin-only groups. */
.kan-settings .kan-mailbox { grid-template-columns: 272px minmax(0, 1fr); gap: var(--space-5); }
@media (max-width: 899.98px) { .kan-settings .kan-mailbox { grid-template-columns: minmax(0, 1fr); } }
.kan-tree__dot--digest { background: var(--surface-inverse); }
.kan-tree__dot--account { background: var(--accent); }
.kan-mailitem__facts { grid-template-columns: 150px minmax(0, 1fr); }
.kan-mailitem__facts .kan-facts__text { white-space: nowrap; }
.kan-mailitem__code { margin: var(--space-3) var(--space-4); }
.kan-mailitem__preview { gap: 0; }
.kan-mailitem__toolbar { padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-subtle); }
.kan-mailitem__campaign-label { font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-mailitem__campaign .kan-select { width: 180px; }
.kan-admin .kan-mailitem__test .kan-btn { white-space: nowrap; height: auto; overflow: hidden; text-overflow: ellipsis; }
.kan-mailitem__add .kan-formrow { flex: 1 1 100%; border-bottom: 0; }
.kan-mailitem__add { display: block; border-top: 1px solid var(--border-subtle); }
.kan-mailitem__levels { margin: 0; padding: var(--space-4); border-top: 1px solid var(--border-subtle); }

/* História odoslaných: the head, the table fit (D5) and the columns. */
.kan-settings .kan-emailhistory__head { margin-top: 0; justify-content: flex-start; }
.kan-emailhistory__title { margin: 0; font-family: var(--font-ui); font-size: 1rem; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-emailhistory table { table-layout: fixed; }
.kan-emailhistory th:nth-child(1), .kan-emailhistory td:nth-child(1) { width: 110px; }
.kan-emailhistory th:nth-child(2), .kan-emailhistory td:nth-child(2) { width: 22%; }
.kan-emailhistory th:nth-child(3), .kan-emailhistory td:nth-child(3) { width: 20%; }
.kan-emailhistory th:nth-child(5), .kan-emailhistory td:nth-child(5) { width: 140px; }
.kan-emailhistory th:nth-child(6), .kan-emailhistory td:nth-child(6) { width: 44px; }
.kan-emailhistory td { overflow: hidden; }
.kan-emailhistory .kan-table__truncate { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-emailhistory__name { display: table-cell; }

/* Pravidlá (Pravidla.dc.html): the new wording on the left, the wording in force, the prepared and the archive on the right. */
.kan-rules { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: var(--space-5); align-items: start; }
.kan-rules__main, .kan-rules__side { display: flex; flex-direction: column; gap: var(--space-5); min-width: 0; }
.kan-rules__saved { margin: 0; }
.kan-rules .kan-card__body { display: flex; flex-direction: column; gap: var(--space-4); }
.kan-rules .kan-card__body--flush { gap: 0; }
.kan-rules__row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-3); }
.kan-rules__confirm { margin-right: auto; min-width: 0; font-size: 0.75rem; }
.kan-rules__status { padding: var(--space-3) var(--space-4); }
.kan-rules__details { padding: 0 var(--space-4) var(--space-3); }
.kan-rules__archive { gap: 0; }
.kan-rules__archive li { padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-subtle); justify-content: space-between; flex-wrap: nowrap; }
.kan-rules__archive li:last-child { border-bottom: 0; }
.kan-rules__archive span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; }
@media (max-width: 1099.98px) { .kan-rules { grid-template-columns: minmax(0, 1fr); } }

/* Formulár stránky: the cards and a 380 px preview column (Stranka.dc.html). */
.kan-admin .kan-pageform__cols { grid-template-columns: minmax(0, 1fr) 380px; gap: var(--space-5); }
.kan-admin .kan-pageform__main { gap: var(--space-5); }
@media (max-width: 1099.98px) { .kan-admin .kan-pageform__cols { grid-template-columns: minmax(0, 1fr); } }
.kan-admin .kan-pageform__side { gap: var(--space-3); }
.kan-admin .kan-preview__size { min-width: 28px; }
.kan-admin .kan-photos { padding: 0; }
.kan-fund-create-form { display: flex; flex-direction: column; gap: var(--space-5); }
/* ◂ P7 */

/* P8 ▸ Zdroje */
/* The funnel card: its head, chips, steps and strip stack inside the card body. */
.kan-funnel > .kan-card__body { display: flex; flex-direction: column; gap: var(--space-5); }

/* D13: the total is the first row of every table, on a light blue (Zdroje „Spolu", campaign „Celá kampaň"). */
.kan-admin .kan-table tr.kan-table__total > *,
.kan-admin .kan-funnel-table tr.kan-funnel-table__total > * { background: var(--navy-50); color: var(--text-heading); font-weight: var(--fw-semibold); }

/* Kampan: the two cards on top (facts | channels), notes inside the links card. */
.kan-kampan-top { display: grid; grid-template-columns: 320px minmax(0, 1fr); gap: var(--space-4); align-items: start; }
.kan-kampan-top .kan-channels { margin-top: 0; }
@media (max-width: 900px) { .kan-kampan-top { grid-template-columns: minmax(0, 1fr); } }
.kan-card__note { margin: 0; padding: var(--space-3) var(--space-4); }
/* ◂ P8 */

/* P9 ▸ dialógy, prihlásenie, knižnica */
/* Dialog pages (Vratenie / Zrusenie / Anonymizacia .dlg): the refund, cancel and erase screens
   are pages so they work without JavaScript, but they wear the look of x-admin.dialog — the same
   `.kan-adialog__head/__body/__foot` parts inside one white box (never a second dialog style). */
.kan-dpage {
  --dpage-w: 480px;
  display: flex;
  flex-direction: column;
  width: min(var(--dpage-w), 100%);
  margin: var(--space-4) auto 0;
  background: var(--paper);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-2);
  overflow: hidden;
}
.kan-dpage--md { --dpage-w: 560px; }
.kan-dpage__form { display: flex; flex-direction: column; margin: 0; }
.kan-dpage__facts { border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); overflow: hidden; }
.kan-dpage__facts .kan-facts__value { align-items: flex-start; }
.kan-dpage__facts--wrap .kan-facts__text { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
.kan-dpage .kan-adialog__title { min-width: 0; }
.kan-dpage .kan-adialog__body > * { min-width: 0; }
.kan-dpage__note { margin: 0; font-size: 0.75rem; line-height: 1.5; color: var(--text-muted); }
/* „Radšej znížiť sumu" (Zrusenie step 1): a tinted panel with the offered amounts. */
.kan-dpage__panel { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3); border-radius: var(--radius-sm); background: var(--navy-50); }
.kan-dpage__panel-title { margin: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-dpage__row { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-2); }
.kan-dpage__row form { margin: 0; }
.kan-dpage__row .kan-field { width: 160px; max-width: 100%; }
.kan-dpage__row .kan-field__label { font-size: 0.75rem; }

/* Sensitive dialogs that share the admin look: the step-up dialog and the close-zbierka dialog. */
.kan-adialog--sm { width: min(400px, 94vw); }
.kan-adialog--md { width: min(680px, 94vw); }
.kan-step-up .kan-step-up__step { gap: 0; }
.kan-step-up .kan-adialog__body .kan-field { margin: 0; }
.kan-step-up .kan-adialog__foot form { margin: 0; }
.kan-adialog__card .kan-adialog__body .kan-field__label { font-size: 0.75rem; }
.kan-adialog__form { display: flex; flex-direction: column; margin: 0; }
.kan-adialog__note { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); background: var(--navy-50); font-size: 0.75rem; line-height: 1.5; color: var(--text-body); }
.kan-adialog__note p { margin: 0; }
/* D16 · the running supports sit UNDER the buttons, in a sunken band with a scroll of its own,
   so a hundred rows never push the buttons off the screen. */
.kan-adialog__list { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3) var(--space-4) var(--space-4); border-top: 1px solid var(--border-subtle); background: var(--surface-sunken); }
.kan-adialog__list-title { margin: 0; font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
.kan-adialog__scroll { max-height: 208px; overflow: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--paper); }
.kan-adialog__scroll:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
.kan-adialog__scroll .kan-table-wrap { border: 0; border-radius: 0; }
.kan-adialog__scroll .kan-table th { position: sticky; top: 0; z-index: 1; background: var(--surface-sunken); }
.kan-adialog__scroll .kan-table td { white-space: nowrap; max-width: 240px; overflow: hidden; text-overflow: ellipsis; }

/* Sign-in, invitation and alert confirmation (Prihlasenie.dc.html): the logo, one centred card
   on --navy-50, the button across the card. */
.kan-admin-signin { background: var(--navy-50); }
.kan-admin-signin__card { max-width: 400px; padding: 28px; gap: var(--space-4); border-color: var(--border-subtle); border-radius: var(--radius-md); box-shadow: var(--shadow-1); }
.kan-admin-signin__head { gap: var(--space-2); align-items: flex-start; }
/* Matej 28. 9. 2026 (DECISIONS, logo): on sign-in the full logo stays 160 px, centred. */
.kan-admin-signin__logo { width: 160px; height: auto; align-self: center; margin-bottom: var(--space-2); }
.kan-admin-signin__h1 { font-size: 1.75rem; line-height: 1.15; }
.kan-admin-signin .kan-result-lead { font-family: var(--font-ui); font-size: var(--fs-small); line-height: 1.55; }
.kan-admin-signin .kan-result-note { font-size: 0.75rem; line-height: 1.5; color: var(--text-muted); }
.kan-admin-signin .kan-btn--full { min-height: 36px; }
@media (pointer: coarse) { .kan-admin-signin .kan-btn--full { min-height: 44px; } }
.kan-admin-signin .kan-totp-input { font-size: 1.25rem; letter-spacing: 0.35em; min-height: 40px; }
.kan-admin-signin .kan-account-form { gap: var(--space-4); }

/* Knižnica fotiek (Kniznica.dc.html): 4 cards of a 16:9 photo, its name, where it is used. */
.kan-photos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-4); }
@media (max-width: 1199.98px) { .kan-photos { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 899.98px) { .kan-photos { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 479.98px) { .kan-photos { grid-template-columns: minmax(0, 1fr); } }
.kan-photo { display: flex; flex-direction: column; overflow: hidden; background: var(--paper); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); }
.kan-photo__frame { display: block; aspect-ratio: 16 / 9; overflow: hidden; background: var(--surface-sunken); }
.kan-photo__frame img { display: block; width: 100%; height: 100%; object-fit: cover; }
.kan-photo__frame:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -2px; }
.kan-photo__foot { display: flex; align-items: center; gap: 6px; padding: var(--space-2) var(--space-2) var(--space-2) var(--space-3); }
.kan-photo__text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.kan-photo__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); text-decoration: none; }
.kan-photo__name:hover { text-decoration: underline; }
.kan-photo__use { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.6875rem; color: var(--text-muted); }
.kan-photo__foot form { margin: 0; flex: 0 0 auto; }
.kan-photos__bar { display: flex; align-items: center; gap: var(--space-3); }
.kan-photos__count { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }
.kan-photo-detail__usage { margin: 0; font-size: var(--fs-small); line-height: 1.5; color: var(--text-body); overflow-wrap: anywhere; }
.kan-photo-detail__note { margin: 0; font-size: 0.75rem; line-height: 1.5; color: var(--text-muted); }
/* ◂ P9 */

/* P10 ▸ hľadanie */
/* ZADANIE §3.3, Hladanie*.dc.html · „Hľadať ⌘K": the window (a native <dialog>, x-admin.search-dialog)
   and the page /admin/hladat share the rows below (admin/search/results.blade.php). */
.kan-finder--window {
  width: min(640px, calc(100vw - 2 * var(--space-4)));
  max-height: calc(100vh - 2 * var(--space-12));
  margin: var(--space-24) auto auto;
  padding: 0;
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  background: var(--surface-card);
  box-shadow: var(--shadow-2);
  color: var(--text-body);
  font-family: var(--font-ui);
  font-size: 0.8125rem;
  overflow: hidden;
}
.kan-finder--window[open] { display: flex; flex-direction: column; }
.kan-finder--window::backdrop { background: var(--scrim); }
@media (max-width: 600px) {
  .kan-finder--window { margin-top: var(--space-4); max-height: calc(100vh - 2 * var(--space-4)); }
}
.kan-finder__head {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
  min-height: 52px;
  padding: 0 var(--space-4);
  border-bottom: 1px solid var(--border-subtle);
  color: var(--text-muted);
}
.kan-finder__input {
  flex: 1 1 auto;
  min-width: 0;
  height: 40px;
  padding: 0;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: 0.9375rem;
  font-weight: var(--fw-medium);
  color: var(--text-heading);
  text-overflow: ellipsis;
}
.kan-finder__input::placeholder { color: var(--text-muted); font-weight: var(--fw-regular); }
.kan-finder__input:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; border-radius: var(--radius-xs); }
.kan-finder__input::-webkit-search-cancel-button { display: none; }
.kan-finder__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  min-width: 24px;
  min-height: 24px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-xs);
  background: transparent;
  cursor: pointer;
}
.kan-finder__close:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
.kan-finder__results { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.kan-finder__results[aria-busy="true"] { opacity: 0.7; }
.kan-finder__foot {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
  min-height: 36px;
  padding: 0 var(--space-4);
  border-top: 1px solid var(--border-subtle);
  background: var(--surface-sunken);
  font-size: 0.75rem;
  color: var(--text-muted);
  white-space: nowrap;
}
.kan-finder__keys { display: inline-flex; align-items: center; gap: 6px; }
.kan-finder__scope { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; text-align: right; }
@media (max-width: 600px) { .kan-finder__foot { display: none; } }

/* The rows (both places). */
.kan-finder__body { padding-bottom: 6px; }
.kan-finder__grp {
  margin: 0;
  padding: var(--space-3) var(--space-4) 6px;
  font-family: var(--font-ui);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.kan-finder__list { margin: 0; padding: 0; list-style: none; }
.kan-finder__row {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  min-height: 36px;
  margin: 0 6px;
  padding: 0 10px;
  border-radius: var(--radius-sm);
  color: var(--text-body);
  text-decoration: none;
  white-space: nowrap;
}
.kan-finder__row:hover { background: var(--navy-50); color: var(--text-body); text-decoration: none; }
.kan-finder__row:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -2px; }
.kan-finder__row[aria-selected="true"] { background: var(--navy-100); }
.kan-finder__row--big { min-height: 56px; }
.kan-finder__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 24px;
  height: 24px;
  border-radius: var(--radius-sm);
  background: var(--navy-50);
  color: var(--navy-400);
}
.kan-finder__row--big .kan-finder__icon { width: 32px; height: 32px; }
.kan-finder__row--more .kan-finder__icon { background: transparent; }
.kan-finder__row[aria-selected="true"] .kan-finder__icon { background: var(--paper); color: var(--accent); }
.kan-finder__text { display: flex; align-items: baseline; gap: 10px; flex: 1 1 auto; min-width: 0; overflow: hidden; }
.kan-finder__row--big .kan-finder__text { flex-direction: column; gap: 4px; }
.kan-finder__title { flex-shrink: 0; max-width: 60%; overflow: hidden; text-overflow: ellipsis; font-weight: var(--fw-medium); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-finder__row--big .kan-finder__title { max-width: 100%; font-size: 0.875rem; }
.kan-finder__row--more .kan-finder__title { color: var(--accent); }
.kan-finder__meta { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-muted); }
.kan-finder__row--big .kan-finder__meta { max-width: 100%; }
.kan-finder__title b, .kan-finder__meta b { font-weight: var(--fw-bold); color: var(--text-heading); }
.kan-finder__kind { flex-shrink: 0; margin-left: auto; font-size: 0.6875rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-finder__row .kan-badge { flex-shrink: 0; margin-left: auto; }
.kan-finder__arrow { flex-shrink: 0; margin-left: auto; color: var(--accent); }
.kan-finder__enter { display: none; flex-shrink: 0; font-size: 0.6875rem; font-weight: var(--fw-semibold); color: var(--accent); }
.kan-finder__row[aria-selected="true"] .kan-finder__enter { display: inline; }
@media (max-width: 600px) {
  .kan-finder__meta { display: none; }
  .kan-finder__row--big .kan-finder__meta { display: block; }
  .kan-finder__title { max-width: none; flex-shrink: 1; }
}
@media (pointer: coarse) {
  .kan-finder__row { min-height: var(--touch-min); }
  .kan-finder__close { min-width: var(--touch-min); min-height: var(--touch-min); }
}

.kan-finder__none {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  padding: 36px var(--space-6) 28px;
  text-align: center;
  color: var(--text-muted);
}
.kan-finder__none p { margin: 0; }
.kan-finder__none-title { font-size: 0.875rem; font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-finder__hint { margin: 0; padding: var(--space-3) var(--space-4) 0; color: var(--text-muted); }

/* The page /admin/hladat. */
.kan-finder-page { display: flex; flex-direction: column; gap: var(--space-4); max-width: 760px; }
.kan-finder-page .kan-filterbar__search { flex: 1 1 auto; }
/* ◂ P10 */

/* P11 ▸ zoznamy */
/* Darci: the name and the e-mail have their own ceilings, the flags collapse to icons (D5). */
.kan-admin .kan-table td.kan-donor-cell { width: 34%; max-width: 0; }
.kan-admin .kan-table td.kan-donor-email { width: 28%; max-width: 0; }
.kan-admin .kan-table td.kan-donor-city { width: 12%; max-width: 0; }
.kan-donor-name { display: flex; align-items: center; gap: var(--space-1); min-width: 0; }
.kan-donor-name .kan-table__link { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-donor-name .kan-badge { flex: none; }
.kan-admin .kan-badge--compact { padding-inline: var(--space-1); }
/* ◂ P11 */

/* Kampaň pri dare ▸ (29. 9. 2026) · Platby: row boxes, the bulk bar; the detail's „ručne". */
.kan-admin .kan-table__select { width: 32px; padding-inline: var(--space-2) 0; }
.kan-admin .kan-table__check { width: 16px; height: 16px; margin: 0; vertical-align: middle; accent-color: var(--accent); }
.kan-admin .kan-bulk { display: flex; align-items: center; gap: var(--space-3); margin-left: auto; white-space: nowrap; }
.kan-facts__muted { flex: none; color: var(--text-muted); }
@media (pointer: coarse) {
  .kan-admin .kan-table__check { width: 24px; height: 24px; }
}
/* ◂ Kampaň pri dare */

/* P8-fix ▸ Zdroje, Kampane a Kampaň podľa plátna (Zdroje.dc.html, Kampane.dc.html, Kampan.dc.html) */
/* The page: one column since Z2 (the tree column is gone); the switch, the chips and the card 16 px apart. */
.kan-funnel-layout { grid-template-columns: minmax(0, 1fr); gap: var(--space-5); }
.kan-funnel-main { gap: var(--space-4); }

/* The funnel card: a head (title + subtitle, the „Zdroj" chip, the „i"), the steps, the sums at its foot. */
.kan-funnel > .kan-card__body { gap: 0; }
.kan-funnel__head {
  flex-direction: row;
  align-items: center;
  gap: 10px;
  padding: 14px var(--space-4);
  border-bottom: 1px solid var(--border-subtle);
}
.kan-funnel__heading { flex: 1 1 auto; min-width: 0; }
.kan-funnel__title { margin: 0; font-family: var(--font-ui); font-size: 0.9375rem; font-weight: var(--fw-semibold); line-height: 1.3; color: var(--text-heading); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-funnel__subtitle { margin: 4px 0 0; font-size: 0.75rem; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-funnel__filter { flex: 0 0 auto; flex-wrap: nowrap; }
.kan-funnel__filter .kan-fchip__pop { left: auto; right: 0; }
.kan-funnel__body { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-4); }

.kan-funnel__steps { gap: var(--space-1); }
.kan-funnel__row {
  grid-template-columns: 200px minmax(0, 1fr) 110px;
  grid-template-areas: "name bar value" "sub bar value";
  column-gap: var(--space-3);
  row-gap: 3px;
  align-items: center;
  min-height: 40px;
}
.kan-funnel__label { display: contents; }
.kan-funnel__name { grid-area: name; align-self: end; font-size: 0.8125rem; font-weight: var(--fw-medium); letter-spacing: normal; text-transform: none; color: var(--text-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-funnel__sub { grid-area: sub; align-self: start; min-width: 0; font-size: 0.75rem; line-height: 1.2; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-funnel__sub--key { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-funnel__value { grid-area: value; text-align: right; font-size: 0.9375rem; font-weight: var(--fw-semibold); line-height: 1; }
.kan-funnel__track { grid-area: bar; display: block; height: 18px; }
.kan-funnel__bar { gap: 2px; min-width: 2px; border-radius: 0; overflow: visible; background: transparent; }
.kan-funnel__seg { flex: 1 1 0; min-width: 2px; border-radius: var(--radius-xs); box-shadow: none; }
.kan-funnel__conn {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding-left: calc(200px + var(--space-3));
  font-size: 0.75rem;
  line-height: 1.2;
  color: var(--text-muted);
  white-space: nowrap;
}
@media (max-width: 700px) {
  .kan-funnel__head { flex-wrap: wrap; }
  .kan-funnel__row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name value" "sub value" "bar bar"; }
  .kan-funnel__conn { padding-left: 0; }
}

/* The tables of Zdroje: the source's colour a small square, the total's word in line with the names,
   the card head's short hint on the right. */
.kan-funnel__swatch { width: 10px; height: 10px; border-radius: var(--radius-xs); box-shadow: none; }
.kan-funnel-table__name--total { padding-left: calc(var(--touch-min) + 10px + 2 * var(--space-2)); }
.kan-card__actions:has(> .kan-card__hint) { flex-shrink: 1; min-width: 0; }
.kan-card__hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; color: var(--text-muted); }
@media (max-width: 700px) { .kan-card__hint { display: none; } }

/* Kampane: the search above the list, the date quiet. */
.kan-kampane-search .kan-filterbar__search { flex: 0 0 280px; }
.kan-kampane__date { color: var(--text-muted); }

/* Kampaň: one 6 px button per channel with its icon and count; the A/B variant a small grey pill;
   the short address in a quiet mono box; the A/B note at the foot of the links card. */
.kan-channels__btn { gap: 6px; }
.kan-channels__btn > .kan-icon:first-child { color: var(--text-muted); }
.kan-channels__count {
  min-width: 0;
  padding: 2px 6px;
  border-radius: var(--radius-pill);
  background: var(--navy-100);
  color: var(--accent);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  line-height: 1;
}
.kan-channels__sub .kan-channels__btn { justify-content: flex-start; width: 100%; }
.kan-channels__sub .kan-channels__count { margin-left: auto; }
.kan-links-variant {
  display: inline-flex;
  align-items: center;
  height: 20px;
  padding: 0 7px;
  border: 1px solid var(--status-paused-bd);
  border-radius: var(--radius-pill);
  background: var(--status-paused-bg);
  color: var(--status-paused-fg);
  font-size: 0.75rem;
  font-weight: var(--fw-medium);
  white-space: nowrap;
}
.kan-kampan__none { color: var(--text-muted); }
.kan-links-address .kan-copy__value {
  padding: 4px 8px;
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--surface-card);
  font-family: var(--font-mono);
  font-size: 0.75rem;
  line-height: 1;
}
.kan-links-address .kan-links-url__base { color: var(--text-muted); }
.kan-links-address .kan-links-url__slug { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-card__note--foot {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 10px var(--space-4);
  border-top: 1px solid var(--border-subtle);
  font-size: 0.75rem;
  color: var(--text-muted);
}
.kan-card__note--foot > .kan-icon { flex-shrink: 0; color: var(--info-text); }
.kan-card__note--foot > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-ask__option { padding: 10px var(--space-3); border-color: var(--border-subtle); border-radius: var(--radius-sm); }
.kan-ask__label { font-size: 0.8125rem; font-weight: var(--fw-medium); }
.kan-ask__hint { font-size: 0.75rem; line-height: 1.45; }
/* ◂ P8-fix */
/* F1 ▸ Platby a hromadne akcie */
/* Platby (29. 9. 2026): the bar of actions for the ticked rows hides itself (and the bulk refund
   when a ticked row cannot be refunded) — `.kan-bulk` and `.kan-btn` set their own display, so
   `hidden` needs saying. The page / personal campaign and Kampaň cells share the width left. */
.kan-admin .kan-bulk[hidden], .kan-admin .kan-bulk .kan-btn[hidden] { display: none; }
.kan-admin .kan-bulk form { margin: 0; }
.kan-admin .kan-adialog__foot form { margin: 0; }
/* The quieter links of a Platby row (date → the payment, zbierka, page, Kampaň): the cell's own
   weight and colour, one line with an ellipsis, a 24 px target. */
.kan-admin .kan-table .kan-payments__link {
  display: block;
  min-height: 24px;
  line-height: 24px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: inherit;
  font-weight: inherit;
  text-decoration: none;
}
.kan-admin .kan-table .kan-payments__link:hover { text-decoration: underline; }
.kan-admin .kan-table .kan-payments__link:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
/* The zbierka cell shares the width left like the other name cells (the table fits its card at
   1280 px too, D5); the year after the name never shrinks. */
.kan-admin .kan-table td.kan-table__campaign.kan-cell-trunc { max-width: 0; }
.kan-admin .kan-table td.kan-cell-trunc .kan-table__campaign-row { max-width: 100%; }
.kan-admin .kan-table td.kan-cell-trunc .kan-table__campaign-row > :not(.kan-table__campaign-name) { flex: none; }
.kan-admin .kan-status-cell__attempts { display: inline-flex; align-items: center; gap: 2px; flex: none; }
.kan-admin .kan-table td.kan-pcol-donor { width: 22%; }
.kan-admin .kan-table td.kan-pcol-campaign { width: 22%; }
.kan-admin .kan-table td.kan-pcol-dest { width: 18%; }
.kan-admin .kan-table td.kan-pcol-link { width: 14%; }
/* ◂ F1 */
/* F2 ▸ cislo daru v zoznamoch */
/* ◂ F2 */
/* F3 ▸ spolocne komponenty */
/* Feedback 2 (Matej, 29. 9. 2026) on the shared components — every list, card and form. */

/* 1 · a sticky table head is opaque: the rows scroll under it, never show through it. The
   separate border model lets the head's bottom line travel with the sticky cells (a collapsed
   border stays behind in the table). */
.kan-admin .kan-table { border-collapse: separate; border-spacing: 0; }
.kan-admin .kan-table thead th { z-index: 2; background: var(--surface-card); }

/* 2 · a table in a card follows the card's rounded corners (its scrolling box clips to them),
   and the pagination under it keeps the card's side padding. */
.kan-admin .kan-card > .kan-card__body--flush:first-child > .kan-atable--in-card:first-child {
  border-top-left-radius: calc(var(--radius-md) - 1px);
  border-top-right-radius: calc(var(--radius-md) - 1px);
}
.kan-admin .kan-card > .kan-card__body--flush:last-child > .kan-atable--in-card:last-child {
  border-bottom-left-radius: calc(var(--radius-md) - 1px);
  border-bottom-right-radius: calc(var(--radius-md) - 1px);
}
.kan-admin .kan-card__body--flush > .kan-pagination {
  padding: var(--space-2) var(--space-4);
  border-top: 1px solid var(--border-subtle);
}

/* 3 · „Skopírované" is a floating tip (admin.js, F3) above the button, always inside the window;
   the old bubble inside the button was cut off by the table cell. */
.kan-admin .kan-iconbtn.is-copied::after { content: none; }
.kan-copytip {
  position: fixed;
  z-index: var(--z-toast);
  padding: 2px var(--space-2);
  border-radius: var(--radius-badge);
  background: var(--surface-inverse);
  color: var(--text-on-dark);
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: var(--fw-semibold);
  line-height: 1.5;
  white-space: nowrap;
  pointer-events: none;
}
.kan-copytip[hidden] { display: none; }

/* 4 · an open „i" floats on the top layer of the page (admin.js places it, F3): never cut by
   a card, a form or a dialog that clips its overflow, flipped and shifted into the window. */
.kan-help__pop.is-floating {
  position: fixed;
  right: auto;
  bottom: auto;
  z-index: var(--z-toast);
  max-width: min(320px, calc(100vw - 2 * var(--space-2)));
  margin: 0;
}

/* 5 · a facts value stays inside its card: one line with an ellipsis (the whole text in its
   title), or — `kan-facts--wrap` — the free text and the label wrap onto more lines. */
.kan-facts__value > * { min-width: 0; max-width: 100%; }
.kan-facts--wrap .kan-facts__text,
.kan-facts--wrap .kan-copy__value {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  overflow-wrap: anywhere;
}

/* 6 · the search of a list is confirmed by Enter or by the button at its right end. */
.kan-admin .kan-filterbar__input { padding-right: 34px; }
.kan-filterbar__go {
  position: absolute;
  top: 50%;
  right: 3px;
  display: inline-grid;
  place-items: center;
  width: 24px;
  height: 24px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-muted);
  cursor: pointer;
  transform: translateY(-50%);
}
.kan-filterbar__go:hover { background: var(--surface-sunken); color: var(--text-heading); }
.kan-filterbar__go:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; }
@media (pointer: coarse) {
  .kan-admin .kan-filterbar__input { padding-right: 48px; }
  .kan-filterbar__go { right: 0; width: 44px; height: 44px; }
}

/* 7 · pickers: an inactive record reads quieter, and the chip says how to find one. */
.kan-fchip__option.is-inactive .kan-fchip__label-text,
.kan-combo__option.is-inactive { color: var(--text-muted); }
.kan-fchip__inactive-hint { margin: 0; padding: var(--space-2) 10px 0; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
.kan-fchip__inactive-hint[hidden] { display: none; }
/* ◂ F3 */
/* F4 ▸ vyber obdobia */
/* x-admin.date-range: two months side by side inside a chip popover (or Zdroje's own). The
   popovers widen for it; below 560 px (or on a coarse pointer under 720 px) it is one month. */
.kan-fchip__pop:has(.kan-drange__picker:not([hidden])),
.kan-funnel-custom__form:has(.kan-drange__picker:not([hidden])) { width: max-content; max-width: min(680px, calc(100vw - 2 * var(--space-4))); }
.kan-drange { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; font-size: var(--fs-small); }
.kan-drange__fields { display: flex; flex-direction: column; gap: var(--space-2); }
.kan-drange__fields[hidden],
.kan-drange__picker[hidden] { display: none; }
.kan-drange__picker { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }

/* Od → Do: the end the next click writes is outlined. */
.kan-drange__ends { display: flex; align-items: center; gap: var(--space-2); }
.kan-drange__ends-arrow { flex-shrink: 0; color: var(--text-muted); }
.kan-drange__end {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex: 1 1 0;
  min-width: 0;
  min-height: var(--control-h);
  margin: 0;
  padding: 0 var(--space-2);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-sm);
  background: var(--surface-card);
  white-space: nowrap;
}
.kan-drange__end.is-next { border-color: var(--accent); background: var(--accent-subtle); }
.kan-drange__end-key { flex-shrink: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-drange__end-value { min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-heading); font-weight: var(--fw-semibold); font-variant-numeric: tabular-nums; }

/* The calendar: the arrows sit on the line of the month names, one at each edge. */
.kan-drange__cal { position: relative; }
.kan-drange__nav { position: absolute; inset: 0 0 auto 0; display: flex; justify-content: space-between; pointer-events: none; }
.kan-admin .kan-drange__navbtn { width: var(--touch-min); height: var(--touch-min); min-width: 0; min-height: 0; pointer-events: auto; }
.kan-drange__months { display: grid; grid-template-columns: repeat(2, max-content); gap: var(--space-5); }
.kan-drange__months[data-count="1"] { grid-template-columns: max-content; justify-content: center; }
.kan-drange__day.is-between { border-radius: 0; background: var(--accent-subtle); color: var(--text-heading); }
.kan-drange__day.is-between:hover { background: var(--accent-subtle-hover); }
.kan-drange__day.is-start,
.kan-drange__day.is-end { background: var(--accent); border-color: var(--accent); color: var(--on-accent); font-weight: var(--fw-semibold); }
.kan-drange__day.is-start:hover,
.kan-drange__day.is-end:hover { background: var(--accent-hover); }
/* The end under the pointer before the second click: an outline, not yet a choice. */
.kan-drange__day.is-end.is-preview { background: var(--accent-subtle-hover); border-color: var(--accent); color: var(--text-heading); }
.kan-drange .kan-field__error { margin: 0; }
/* ◂ F4 */
/* F5 ▸ Prehlad, Nastavenia, Pravidla, Stranky, odkazy */
/* Pravidla: the editor fills the whole width between the sidebar and the side cards (app.css caps .kan-rules at 920 px). */
.kan-admin .kan-rules { max-width: none; }
/* ◂ F5 */
/* F6 ▸ Zdroje s casovou osou */
/* x-admin.filter-chip `pick` (F6): „Vybrať všetko / Zrušiť výber" + „N z M" over the list;
   group headings „Stránky" / „Osobné kampane" / „Neaktívne"; a muted note at an option's end. */
.kan-fchip__details[data-filter-chip-pick] .kan-fchip__pop { width: 340px; max-width: min(340px, 90vw); }
.kan-fchip__pick { display: flex; align-items: center; gap: var(--space-3); padding: 2px 10px var(--space-1); border-bottom: 1px solid var(--border-subtle); font-size: 0.75rem; }
.kan-fchip__pick-btn {
  min-height: 24px;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  color: var(--text-link);
  white-space: nowrap;
  cursor: pointer;
}
.kan-fchip__pick-btn:hover { color: var(--text-link-hover); text-decoration: underline; }
.kan-fchip__pick-btn:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; border-radius: var(--radius-xs); }
.kan-fchip__pick-count { margin-left: auto; color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.kan-fchip__heading { padding: var(--space-2) 10px 2px; font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-muted); white-space: nowrap; }
.kan-fchip__heading[hidden] { display: none; }
.kan-fchip__note { flex: 0 1 auto; max-width: 40%; overflow: hidden; text-overflow: ellipsis; font-size: 0.6875rem; font-weight: var(--fw-regular); color: var(--text-muted); }
@media (pointer: coarse) { .kan-fchip__pick-btn { min-height: 44px; } }

/* Zdroje (Main.dc.html): the chips over the card, the window at the right end. */
.kan-srcactions { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-srcfilters { display: flex; align-items: center; gap: var(--space-3); min-width: 0; }
.kan-srcfilters__bar { flex: 1 1 auto; min-width: 0; }
.kan-srcfilters__range { flex: 0 0 auto; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }

/* F7 · ONE card: the funnel, one row of six boxes as its middle band, „Vývoj v čase" under
   it. The boxes follow the card's own width (a container query): six in a row from 640 px
   (the card at 1280 and 1440 px), three by two below, two by three on a phone. */
.kan-funnel { container-type: inline-size; }
.kan-tl { display: flex; flex-direction: column; min-width: 0; }
.kan-tl__head { display: flex; align-items: center; gap: 10px; padding: 14px var(--space-4) 0; }
.kan-tl__heading { flex: 1 1 auto; min-width: 0; }
.kan-tl__title { margin: 0; font-family: var(--font-ui); font-size: 0.9375rem; font-weight: var(--fw-semibold); line-height: 1.3; color: var(--text-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-tl__subtitle { margin: 4px 0 0; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-tl__modes { flex: 0 0 auto; }

.kan-tl__tiles {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 6px;
  padding: var(--space-3);
  border-top: 1px solid var(--border-subtle);
  border-bottom: 1px solid var(--border-subtle);
  background: var(--surface-sunken);
}
@container (max-width: 639.98px) { .kan-tl__tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@container (max-width: 379.98px) { .kan-tl__tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kan-tl__tile {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  padding: var(--space-2);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-sm);
  background: var(--surface-card);
  color: var(--text-body);
  text-decoration: none;
}
.kan-tl__tile:hover { border-color: var(--accent-border); }
.kan-tl__tile:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; }
.kan-tl__tile.is-on { border-color: var(--accent); background: var(--accent-subtle); }
.kan-tl__tile > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-tl__tile-label { font-size: 0.75rem; color: var(--text-muted); }
/* F7 · six boxes in the card at 1280 px leave ~95 px for a name: it may take two lines (clamped;
   the whole box is in its title). 30. 9. 2026 · two numbers under it, each with its small note
   beside it (the note drops under the number when the box is too narrow). */
.kan-tl__tile > .kan-tl__tile-label { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.3; white-space: normal; min-height: calc(2 * 1.3em); }
.kan-tl__tile > .kan-tl__tile-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 4px; white-space: normal; }
.kan-tl__tile-total { font-size: 0.9375rem; font-weight: var(--fw-semibold); line-height: 1.25; color: var(--text-heading); font-variant-numeric: tabular-nums; white-space: nowrap; }
.kan-tl__tile-total--up { color: var(--success-text); }
.kan-tl__tile-whole { font-size: 0.8125rem; font-weight: var(--fw-semibold); line-height: 1.25; color: var(--text-heading); font-variant-numeric: tabular-nums; white-space: nowrap; }
.kan-tl__tile-sub { font-size: 0.6875rem; color: var(--text-muted); white-space: nowrap; }
.kan-tl__check { display: flex; flex-direction: column; gap: 2px; margin: 0; padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: 0.75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-tl__check-row { display: flex; flex-wrap: wrap; gap: 0 var(--space-2); min-width: 0; }
.kan-tl__check-row > dt { flex: 0 0 auto; min-width: 9em; }
.kan-tl__check-row > dd { flex: 1 1 0; min-width: 0; margin: 0; }
.kan-tl__check-row strong { color: var(--text-heading); font-weight: var(--fw-semibold); }

.kan-tl__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); min-width: 0; padding: 10px var(--space-4) 0; font-size: 0.75rem; }
.kan-tl__layers { display: flex; flex: 0 1 auto; align-items: center; gap: var(--space-3); min-width: 0; margin: 0; }
.kan-tl__layers-set { display: flex; align-items: center; gap: var(--space-4); min-width: 0; margin: 0; padding: 0; border: 0; }
.kan-tl__layers-legend { float: left; padding: 0; margin-right: var(--space-1); color: var(--text-muted); white-space: nowrap; }
.kan-tl__layer { display: inline-flex; align-items: center; gap: 6px; min-height: 24px; color: var(--text-heading); white-space: nowrap; cursor: pointer; }
.kan-tl__layer-input { width: 16px; height: 16px; margin: 0; accent-color: var(--accent); }
.kan-tl__layer-input:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
html:not(.no-js) .kan-tl__layers-apply { display: none; }
.kan-tl__swatch { width: 9px; height: 9px; border: 1px solid; transform: rotate(45deg); flex-shrink: 0; }
.kan-tl__swatch--kampane, .kan-tl__mark--kampane { --mark-fill: var(--gold-500); --mark-line: var(--gold-700); --mark-tint: var(--gold-50); --mark-border: var(--gold-400); --mark-text: var(--text-body); }
.kan-tl__swatch--stranky, .kan-tl__mark--stranky { --mark-fill: var(--navy-700); --mark-line: var(--navy-800); --mark-tint: var(--navy-50); --mark-border: var(--navy-200); --mark-text: var(--navy-700); }
.kan-tl__swatch--osobne, .kan-tl__mark--osobne { --mark-fill: var(--sky-600); --mark-line: var(--sky-700); --mark-tint: var(--sky-100); --mark-border: var(--navy-300); --mark-text: var(--sky-700); }
.kan-tl__swatch--stav, .kan-tl__mark--stav { --mark-fill: var(--green-600); --mark-line: var(--green-700); --mark-tint: var(--green-100); --mark-border: var(--green-600); --mark-text: var(--green-700); }
.kan-tl__swatch { background: var(--mark-fill); border-color: var(--mark-line); }
.kan-tl__note { flex: 0 1 auto; min-width: 0; margin: 0 0 0 auto; padding: 3px 10px; border-radius: var(--radius-pill); background: var(--amber-100); color: var(--amber-700); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.kan-tl__chart { position: relative; padding: var(--space-3) var(--space-4) var(--space-4); }
.kan-tl__frame { display: flex; gap: var(--space-2); padding-top: 24px; }
.kan-tl__y { position: relative; flex: 0 0 auto; width: 64px; height: 240px; font-size: 0.6875rem; line-height: 1; color: var(--text-muted); text-align: right; font-variant-numeric: tabular-nums; }
.kan-tl__y span { position: absolute; right: 0; transform: translateY(-50%); white-space: nowrap; }
.kan-tl__plot { position: relative; flex: 1 1 auto; min-width: 0; height: 240px; border-bottom: 1px solid var(--border-default); }
.kan-tl__grid { position: absolute; left: 0; right: 0; border-top: 1px solid var(--border-subtle); }
.kan-tl__svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; overflow: visible; }
.kan-tl__area { fill: var(--navy-100); opacity: 0.6; }
.kan-tl__line { fill: none; stroke: var(--navy-700); stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }
.kan-tl__barrect { fill: var(--navy-700); }
.kan-tl__dot { position: absolute; width: 9px; height: 9px; border: 2px solid var(--navy-700); border-radius: var(--radius-pill); background: var(--paper); transform: translate(-50%, -50%); pointer-events: none; }
.kan-tl__x { position: relative; height: 14px; margin: var(--space-2) 0 0 calc(64px + var(--space-2)); font-size: 0.6875rem; line-height: 1; color: var(--text-muted); }
.kan-tl__x span { position: absolute; top: 0; transform: translateX(-50%); white-space: nowrap; }

/* A mark: the dashed line down the plot, the diamond at the top (a 24 px link), its box. */
.kan-tl__mark { position: absolute; top: 0; bottom: 0; width: 0; z-index: 2; }
.kan-tl__mark[hidden] { display: none; }
.kan-tl__rule { position: absolute; top: -14px; bottom: 0; left: 0; border-left: 1.5px dashed var(--mark-line); pointer-events: none; }
.kan-tl__diamond {
  position: absolute;
  top: calc(-26px + var(--lane) * 14px);
  left: -12px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: var(--radius-xs);
}
.kan-tl__diamond:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 0; }
.kan-tl__diamond-shape { width: 10px; height: 10px; border: 1px solid var(--mark-line); background: var(--mark-fill); transform: rotate(45deg); transition: transform var(--dur-fast) var(--ease-standard); }
.kan-tl__mark:hover .kan-tl__diamond-shape, .kan-tl__diamond:focus-visible .kan-tl__diamond-shape { transform: rotate(45deg) scale(1.3); }
.kan-tl__tip {
  position: absolute;
  top: calc(4px + var(--lane) * 14px);
  left: 14px;
  z-index: 5;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  width: 300px;
  padding: var(--space-3) 14px;
  border: 1px solid var(--mark-border);
  border-top: 4px solid var(--mark-fill);
  border-radius: var(--radius-md);
  background: var(--mark-tint);
  box-shadow: var(--shadow-2);
}
/* F7 · a closed box is `display: none`, never only invisible: an invisible box still stretched
   the page below the card. */
.kan-tl__mark:not([data-tl-js]):not(:hover):not(:focus-within) .kan-tl__tip,
.kan-tl__mark[data-tl-js]:not(.is-open):not(:focus-within) .kan-tl__tip,
.kan-tl__mark.is-quiet .kan-tl__tip { display: none; }
.kan-tl__mark.is-flip .kan-tl__tip { left: auto; right: 14px; }
.kan-tl__mark:hover, .kan-tl__mark:focus-within, .kan-tl__mark.is-open { z-index: 6; }
.kan-tl__tip p { margin: 0; }
.kan-tl__tip-kind { font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.06em; text-transform: uppercase; color: var(--mark-text); }
.kan-tl__tip-title { font-size: 0.875rem; font-weight: var(--fw-semibold); line-height: 1.3; color: var(--text-heading); }
.kan-tl__tip-sub { font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
.kan-tl__tip-rows { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px var(--space-3); margin: 0; }
.kan-tl__tip-row { min-width: 0; }
.kan-tl__tip-row dt { font-size: 0.6875rem; color: var(--text-muted); }
.kan-tl__tip-row dd { margin: 0; font-size: 0.8125rem; font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-tl__tip-link { display: inline-flex; align-items: center; gap: 4px; align-self: flex-start; font-size: 0.75rem; color: var(--text-link); }

/* F7 · a group of marks: the diamond with its count beside it, a button (no single detail),
   its box a list of links. */
.kan-tl__diamond--group { padding: 0; border: 0; background: none; font: inherit; cursor: pointer; }
.kan-tl__count {
  position: absolute;
  top: -4px;
  left: 15px;
  min-width: 16px;
  padding: 0 4px;
  border-radius: var(--radius-pill);
  background: var(--mark-fill);
  color: var(--paper);
  font-size: 0.625rem;
  font-weight: var(--fw-semibold);
  line-height: 14px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.kan-tl__mark--kampane .kan-tl__count { color: var(--text-heading); }
.kan-tl__tip-list { display: flex; flex-direction: column; gap: 2px; margin: 0; padding: 0; list-style: none; }
.kan-tl__tip-item {
  display: flex;
  align-items: baseline;
  gap: var(--space-2);
  min-height: 24px;
  padding: 2px 0;
  color: var(--text-heading);
  text-decoration: none;
}
.kan-tl__tip-item:hover .kan-tl__tip-name { color: var(--text-link); text-decoration: underline; }
.kan-tl__tip-item:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; border-radius: var(--radius-xs); }
.kan-tl__tip-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.8125rem; font-weight: var(--fw-semibold); }
.kan-tl__tip-date { flex: 0 0 auto; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }

/* F7 · while admin.js brings the new numbers, the parts that change rest calmly. */
[data-zdroje-part][aria-busy="true"] { opacity: 0.55; transition: opacity var(--dur-fast) var(--ease-standard); }
@media (prefers-reduced-motion: reduce) { [data-zdroje-part][aria-busy="true"] { transition: none; } }

@media (max-width: 720px) {
  .kan-srcactions { flex-wrap: wrap; }
  .kan-srcfilters { flex-wrap: wrap; }
  .kan-tl__head { flex-wrap: wrap; }
  .kan-tl__bar { flex-wrap: wrap; }
  .kan-tl__layers-set { flex-wrap: wrap; gap: var(--space-2) var(--space-4); }
  .kan-tl__note { margin-left: 0; white-space: normal; }
  .kan-tl__y { width: 52px; }
  .kan-tl__x { margin-left: calc(52px + var(--space-2)); }
  .kan-tl__tip { width: min(260px, 70vw); }
}
@media (pointer: coarse) {
  .kan-tl__layer { min-height: 44px; }
  .kan-tl__diamond { top: calc(-36px + var(--lane) * 14px); left: -22px; width: 44px; height: 44px; }
  .kan-tl__count { top: 6px; left: 25px; }
  .kan-tl__tip-item { min-height: 44px; align-items: center; }
}
/* ◂ F6 */
/* Z1 ▸ Kampane v menu */
/* ◂ Z1 */
/* Z2 ▸ prepinac zbierok */
/* ◂ Z2 */
/* Z3 ▸ kalendar s hranicami */
/* P0 ▸ B19: the muted day, the arrows' disabled look and the quick links moved to app.css (the public part needs them too). */
/* ◂ Z3 */
/* Z4 ▸ graf */
/* D · a hover bridge: an invisible strip over the box's top edge reaches the diamond's foot, so the
   pointer never leaves the mark on its way to the box (it stops short of the diamond: never a
   click stolen from it). */
.kan-tl__tip::before { content: ""; position: absolute; top: -6px; left: -14px; right: 0; height: 6px; }
.kan-tl__mark.is-flip .kan-tl__tip::before { left: 0; right: -14px; }
.kan-tl__mark.is-open .kan-tl__diamond-shape { transform: rotate(45deg) scale(1.3); }
.kan-tl__tip-link:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; border-radius: var(--radius-xs); }

/* E · the plot is focusable; the vertical line, its dot and its label sit under the marks. */
.kan-tl__plot[data-tl-plot] { touch-action: pan-y; }
.kan-tl__plot[data-tl-plot]:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
.kan-tl__cursor { position: absolute; top: 0; bottom: 0; left: 0; width: 0; z-index: 3; pointer-events: none; }
.kan-tl__cursor[hidden] { display: none; }
.kan-tl__cursor-line { position: absolute; top: 0; bottom: 0; left: 0; border-left: 1px solid var(--navy-400); }
.kan-tl__cursor-dot { position: absolute; left: 0; width: 9px; height: 9px; border: 2px solid var(--navy-700); border-radius: var(--radius-pill); background: var(--paper); transform: translate(-50%, -50%); }
.kan-tl__cursor-dot[hidden] { display: none; }
.kan-tl__cursor-label {
  position: absolute;
  top: 4px;
  left: 8px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  max-width: 220px;
  padding: 4px var(--space-2);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-sm);
  background: var(--surface-card);
  box-shadow: var(--shadow-1);
  font-size: 0.75rem;
  line-height: 1.25;
  white-space: nowrap;
}
.kan-tl__cursor.is-left .kan-tl__cursor-label { left: auto; right: 8px; }
.kan-tl__cursor-value { font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; }
.kan-tl__cursor-date { color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; }

/* F · dates under the chart: the edge ones hug the plot's edge, and without JavaScript every
   second one is left out on a narrow card (admin.js hides exactly the ones that collide). */
.kan-tl__x span[data-edge="end"] { transform: translateX(-100%); }
.kan-tl__x span[data-edge="start"] { transform: none; }
.kan-tl__x span[hidden] { display: none; }
@container (max-width: 600px) {
  .kan-tl__x:not([data-tl-fit]) span:nth-child(even) { display: none; }
}
/* ◂ Z4 */
/* Z5 ▸ užší pruh lievika */
.kan-funnel__bar--narrow { gap: 0; border-radius: var(--radius-xs); overflow: hidden; }
.kan-funnel__bar--narrow .kan-funnel__seg { box-sizing: border-box; min-width: 0; border-radius: 0; }
.kan-funnel__bar--narrow .kan-funnel__seg:not(:last-child) { border-right: 1px solid var(--surface-card); }
/* ◂ Z5 */

/* ── P0 ▸ F2 #8 · B4 pagination, B12 card-header actions ─────────────────────────────────── */
/* B4: pagination buttons are white secondaries (28 px); a disabled one is grey ink only —
   a grey fill read as „broken". */
.kan-admin .kan-pagination .kan-btn--secondary:disabled,
.kan-admin .kan-pagination .kan-btn--secondary[aria-disabled="true"] { background: var(--paper); border-color: var(--border-subtle); color: var(--text-disabled); }
/* B12: one look for an action in a card header — `x-button variant="link" size="sm"`, an arrow
   after the text = go there, a pencil before it = edit; underlined only on hover. */
.kan-admin .kan-card__actions .kan-btn--link { color: var(--text-link); background: transparent; }
.kan-admin .kan-card__actions .kan-btn--link:hover:not(:disabled) { background: transparent; color: var(--text-link-hover); text-decoration: underline; text-underline-offset: 3px; }
@media (pointer: coarse) { .kan-admin .kan-card__actions .kan-btn { min-height: var(--touch-min); } }
/* ── /P0 ▸ F2 #8 ── */

/* ── P0 ▸ F2 #13 · C6 · the one menu: `.kan-menu` (+ the „⋯" button `.kan-more`) ─────────────
   One look for the account menu (C3), the work switch (C2) and „⋯" — it will take over
   `.kan-side__menu` (gone: the account menu is `.kan-menu`); `.kan-ovsw__pop` is already `.kan-freq__pop`. */
.kan-menu {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 200px;
  max-width: min(320px, 90vw);
  margin: 0;
  padding: var(--space-1);
  list-style: none;
  background: var(--surface-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-2);
}
.kan-menu--pop { position: absolute; z-index: var(--z-sticky); top: calc(100% + var(--space-1)); }
.kan-menu--right { right: 0; }
.kan-menu--left { left: 0; }
.kan-menu--up { top: auto; bottom: calc(100% + var(--space-1)); left: 0; right: 0; }
.kan-menu form { margin: 0; }
.kan-menu__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  min-width: 0;
  min-height: var(--touch-min);
  padding: 0 var(--space-2);
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-body);
  font: inherit;
  font-size: var(--admin-nav-fs, var(--fs-small));
  font-weight: var(--fw-medium);
  text-align: left;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
}
.kan-menu__item .kan-icon { flex-shrink: 0; color: var(--text-muted); }
.kan-menu__item:hover { background: var(--surface-sunken); color: var(--text-heading); text-decoration: none; }
.kan-menu__item:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -1px; }
.kan-menu__text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kan-menu__item[aria-current] { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-menu__item[aria-current] .kan-icon { color: var(--accent); }
.kan-menu__item--danger,
.kan-menu__item--danger .kan-icon { color: var(--danger-text); }
.kan-menu__item--danger:hover { background: var(--destructive-quiet-bg-hover); color: var(--danger-text); }
/* K8: may, but cannot now — grey, not clickable, the reason is a second line (it wraps). */
.kan-menu__item[aria-disabled="true"] { flex-wrap: wrap; align-content: center; row-gap: 0; padding-block: var(--space-1); color: var(--text-disabled); cursor: default; }
.kan-menu__item[aria-disabled="true"]:hover { background: transparent; color: var(--text-disabled); }
.kan-menu__item[aria-disabled="true"] .kan-icon { color: var(--text-disabled); }
.kan-menu__why { flex: 1 1 100%; padding-left: 24px; white-space: normal; font-size: var(--fs-legal); font-weight: var(--fw-regular); line-height: 1.35; color: var(--text-muted); }
.kan-menu__sep { height: 1px; margin: var(--space-1) calc(-1 * var(--space-1)); background: var(--border-subtle); border: 0; }
.kan-menu__head { display: flex; flex-direction: column; gap: 2px; padding: var(--space-2); font-size: var(--fs-legal); color: var(--text-muted); }
.kan-menu__head b { font-weight: var(--fw-semibold); color: var(--text-heading); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-menu__note { margin-left: auto; padding-left: var(--space-2); flex-shrink: 0; font-size: var(--fs-legal); font-weight: var(--fw-regular); color: var(--text-muted); }
/* The „⋯" button: 28 × 28 px with a frame like a secondary button; quiet in a table row. */
.kan-more { position: relative; display: inline-flex; }
.kan-more > summary { list-style: none; }
.kan-more > summary::-webkit-details-marker { display: none; }
.kan-more__btn {
  display: inline-grid;
  place-items: center;
  width: var(--control-h);
  height: var(--control-h);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-sm);
  background: var(--paper);
  color: var(--text-heading);
  cursor: pointer;
}
.kan-more__btn--quiet { border-color: transparent; background: transparent; color: var(--text-muted); }
.kan-more__btn:hover,
.kan-more[open] > .kan-more__btn { background: var(--surface-sunken); color: var(--text-heading); }
.kan-more__btn:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
@media (pointer: coarse) { .kan-more__btn { width: var(--touch-min); height: var(--touch-min); } }
/* ── /P0 ▸ F2 #13 ── */
/* P0 ▸ F7 · the gallery's open „⋯" menu needs room to open into. */
.kan-gallery__menu { align-items: flex-start; justify-content: space-between; min-height: 270px; }

/* ── P0 ▸ F2 #10 · B8 · the one switch with a menu option (x-segmented) ───────────────────────
   The last option (or a live zbierka with ročníky/etapy) may be a native <details> whose summary
   is an option; its popup is `.kan-freq__pop` (it was `.kan-ovsw__pop`). Everything is a link or a
   <details>, so it works without JavaScript; admin.js (blok Z2) closes it on Escape / outside
   click and filters a long list. */
.kan-admin .kan-freq--menu .kan-freq__track { position: relative; display: inline-flex; flex-wrap: nowrap; align-items: center; max-width: 100%; }
.kan-admin .kan-freq--links .kan-freq__option { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%; text-decoration: none; }
.kan-freq__long { display: inline; }
.kan-freq__short { display: none; }
.kan-freq__menu { position: relative; display: inline-flex; min-width: 0; border-radius: var(--radius-xs); }
.kan-freq__menu > summary { list-style: none; cursor: pointer; }
.kan-freq__menu > summary::-webkit-details-marker { display: none; }
.kan-freq__menu[open] > summary .kan-icon { transform: rotate(180deg); }
.kan-freq__text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-freq__menu > summary .kan-freq__text { max-width: 200px; }
.kan-admin .kan-freq--links .kan-freq__menu > summary.kan-freq__option:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; }
.kan-freq__pop {
  position: absolute;
  top: calc(100% + var(--space-1));
  left: 0;
  z-index: 30;
  display: flex;
  flex-direction: column;
  gap: 1px;
  width: max-content;
  min-width: 200px;
  max-width: min(320px, 90vw);
  margin: 0;
  padding: var(--space-2);
  background: var(--surface-card);
  border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-2);
}
.kan-freq__pop-link {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: var(--touch-min);
  padding: 0 var(--space-3);
  border-radius: var(--radius-xs);
  overflow: hidden;
  color: var(--text-body);
  text-decoration: none;
}
.kan-freq__pop-link .kan-freq__text { flex: 1 1 auto; }
.kan-freq__pop-link:hover { background: var(--surface-sunken); color: var(--text-heading); }
.kan-freq__pop-link[aria-current] { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-freq__pop-link:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -1px; }
.kan-freq__note { flex: 0 0 auto; margin-left: auto; font-size: 0.6875rem; font-weight: var(--fw-regular); color: var(--text-muted); }
.kan-freq__rows,
.kan-freq__sub { display: flex; flex-direction: column; gap: 1px; margin: 0; padding: 0; list-style: none; }
.kan-freq__rows { max-height: 360px; overflow-y: auto; }
.kan-freq__sub { padding-left: var(--space-4); }
.kan-freq__search[hidden],
.kan-freq__none[hidden],
.kan-freq [data-scope-row][hidden] { display: none; }
.kan-freq__none { margin: 0; padding: var(--space-2) var(--space-3); font-size: 0.75rem; color: var(--text-muted); }
/* The period menu carries Zdroje's own form; it hangs from the right end of the switch. */
.kan-freq__menu.kan-funnel-custom > .kan-funnel-custom__form { right: 0; left: auto; }
@media (pointer: fine) {
  .kan-admin .kan-freq--links .kan-freq__option { min-height: var(--control-h-sm); font-size: 0.75rem; }
}
/* A phone: the track may wrap, the popup hangs from the whole switch so it never leaves the screen;
   the short word replaces the long one. */
@media (max-width: 720px) {
  .kan-admin .kan-freq--menu .kan-freq__track { display: flex; flex-wrap: wrap; }
  .kan-freq__menu { position: static; }
  .kan-freq--menu .kan-freq__pop,
  .kan-freq__menu.kan-funnel-custom > .kan-funnel-custom__form { left: 0; right: 0; width: auto; max-width: none; }
  .kan-freq__long { display: none; }
  .kan-freq__short { display: inline; }
}
/* ── /P0 ▸ F2 #10 ── */

/* ── P0 ▸ F3 #17 · B2 + B3 · the top bar below 900 px ─────────────────────────────────────────
   ☰ · „← parent item" · loupe. The H1 stays; the title is no longer said twice. Without JS the
   bar has no ☰ (the menu stands above the page) and the back link and the loupe are plain links. */
.kan-topbar__back {
  align-items: center; gap: var(--space-1);
  flex: 1 1 auto; min-width: 0; min-height: var(--touch-min); padding: 0 var(--space-2);
  border-radius: var(--radius-sm);
  font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); text-decoration: none;
}
.kan-topbar__back:hover { background: var(--surface-sunken); text-decoration: none; }
.kan-topbar__back:focus-visible,
.kan-topbar__search:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
.kan-topbar__back-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-topbar__spacer { flex: 1 1 auto; }
.kan-topbar__search {
  place-items: center; flex-shrink: 0;
  width: var(--touch-min); height: var(--touch-min); border-radius: var(--radius-sm);
  color: var(--text-heading);
}
.kan-topbar__search:hover { background: var(--surface-sunken); }
@media (min-width: 900px) { .kan-topbar__back, .kan-topbar__search, .kan-topbar__spacer { display: none !important; } }
@media (max-width: 899.98px) { .no-js .kan-topbar__back, .no-js .kan-topbar__spacer, .no-js .kan-topbar__search { display: none; } }
/* B15: the „i" beside the H1. */
.kan-admin__h1-row > .kan-help { align-self: center; }
.kan-admin__h1-row > .kan-help .kan-help__pop { font-family: var(--font-ui); }
/* ── /P0 ▸ F3 #17 ── */

/* ── P0 ▸ F3 #19 · B5 · x-admin.form-foot — the one foot of a form ───────────────────────────── */
.kan-formfoot {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-2) var(--space-4);
  min-height: 52px; padding: var(--space-3) var(--space-4);
  background: var(--surface-card); border-top: 1px solid var(--border-subtle);
}
.kan-formfoot__meta {
  display: flex; align-items: center; gap: 6px; min-width: 0; margin: 0;
  font-size: 0.75rem; line-height: 1.4; color: var(--text-muted);
}
.kan-formfoot__meta[hidden] { display: none; }
.kan-formfoot__meta-text { min-width: 0; }
.kan-formfoot__meta--dirty { color: var(--text-heading); font-weight: var(--fw-medium); }
.kan-formfoot__dot { flex-shrink: 0; width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--warning); }
.kan-formfoot__dot[hidden] { display: none; }
.kan-formfoot__meta--error { color: var(--danger-text); font-weight: var(--fw-medium); }
.kan-formfoot__meta--error a { color: inherit; }
.kan-formfoot__actions { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; margin-left: auto; }
/* A long stand-alone form: the foot is the last part of the form and sticks to the bottom of the window. */
.kan-formfoot--sticky {
  position: sticky; bottom: 0; z-index: var(--z-sticky);
  border: 1px solid var(--border-default); border-radius: var(--radius-md); box-shadow: var(--shadow-2);
}
/* A Nastavenia card: it sits in the card's own foot (`.kan-card__foot`), never sticks. */
.kan-formfoot--card { flex: 1 1 auto; min-height: 0; padding: 0; border: 0; background: transparent; }
.kan-btnwhy { display: inline-flex; align-items: center; gap: 2px; }
@media (max-width: 599.98px) {
  .kan-formfoot { flex-wrap: wrap; }
  .kan-formfoot__actions { width: 100%; }
  .kan-formfoot__actions .kan-btn--primary { flex: 1 1 auto; justify-content: center; }
}
@media (pointer: coarse) { .kan-formfoot .kan-btn { min-height: var(--touch-min); } }
/* The focused field is never hidden behind a sticky foot. */
.kan-admin__main:has(.kan-formfoot--sticky) { scroll-padding-bottom: 96px; }
/* ── /P0 ▸ F3 #19 ── */

/* ── P0 ▸ F3 #20 · B18 · the summary of one thing in a confirm dialog (refund, anonymise) ─────
   A compact box under the dialog's title instead of a table of facts: the amount (or the name)
   on the first line, the method · day · zbierka under it. Beside `x-admin.dialog`. */
.kan-sumbox { display: flex; flex-direction: column; gap: var(--space-1); padding: var(--space-3) var(--space-4); border-radius: var(--radius-sm); background: var(--surface-sunken); }
.kan-sumbox__main { display: flex; align-items: baseline; gap: var(--space-3); min-width: 0; margin: 0; }
.kan-sumbox__amount { flex-shrink: 0; font-size: 1.375rem; font-weight: var(--fw-semibold); line-height: 1.2; color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-sumbox__who { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-sumbox__meta { display: flex; align-items: center; gap: 6px; margin: 0; font-size: var(--fs-small); color: var(--text-muted); }
.kan-sumbox__meta .kan-icon { flex-shrink: 0; }
.kan-sumbox + * { margin-top: var(--space-4); }
/* A dialog that is a form: body and foot inside one <form>; the „i" beside a choice stays on its line. */
.kan-adialog__form .kan-checkbox__label + .kan-help { margin-left: var(--space-1); vertical-align: middle; }
/* ── /P0 ▸ F3 #20 ── */

/* ── P0 ▸ F3 #21 · B17 · a missing author photo is a grey square with an icon, never a broken picture ── */
.kan-fund-read__photo--empty { display: inline-grid; place-items: center; box-sizing: border-box; background: var(--surface-sunken); border: 1px solid var(--border-subtle); color: var(--text-muted); }
/* ── /P0 ▸ F3 #21 ── */

/* P5 ▸ import MASTER · C21–C25 (dropzone, progress-steps, change-review, chyby a výsledok) */
/* --- C21 · x-admin.dropzone → admin-ui.css, blok „GO 1 ▸ import“ ------------------------ */
/* Plocha na pretiahnutie: 170 px, prerušovaný rám, ikona, veta, „Vybrať súbor“ (label nad
   skutočným input[type=file]). Bez JS sa .is-enhanced nepridá → ostane obyčajné pole. */
.kan-drop { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.kan-drop__zone {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 170px;
  padding: var(--space-5) var(--space-4);
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius-md);
  background: var(--surface-sunken);
  text-align: center;
  color: var(--text-body);
}
.kan-drop__icon { display: grid; place-items: center; width: 40px; height: 40px; border-radius: var(--radius-pill); background: var(--paper); color: var(--navy-500); border: 1px solid var(--border-subtle); }
.kan-drop__title { margin: 0; max-width: 520px; font-size: var(--fs-small); font-weight: var(--fw-medium); line-height: 1.4; color: var(--text-heading); }
.kan-drop__hint { margin: 0; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
.kan-drop__input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
/* Fokus na skrytom poli sa ukáže na „Vybrať súbor“ (label). */
.kan-drop__input:focus-visible + .kan-drop__pick { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: var(--focus-ring-offset); }
.kan-drop__note { margin: 0; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
/* ťahá sa súbor nad plochou */
.kan-drop__zone.is-over { border-style: solid; border-color: var(--accent); background: var(--accent-subtle); }
.kan-drop__zone.is-over .kan-drop__icon { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
/* zlý typ súboru */
.kan-drop__zone.is-invalid { border-style: solid; border-color: var(--danger); background: var(--danger-surface); }
.kan-drop__zone.is-invalid .kan-drop__icon { color: var(--danger-text); border-color: var(--danger-border); }
/* neaktívna (smie, ale teraz nejde — K8) */
.kan-drop__zone.is-disabled { border-color: var(--border-subtle); background: var(--surface-disabled); color: var(--text-disabled); }
.kan-drop__zone.is-disabled .kan-drop__title { color: var(--text-disabled); }
/* vybraný súbor: riadok súboru namiesto plochy */
.kan-drop__files { margin: 0; padding: 0; list-style: none; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--paper); }
.kan-drop__file { display: flex; align-items: center; gap: var(--space-3); min-height: var(--admin-row-h); padding: 0 var(--space-3); border-top: 1px solid var(--border-subtle); }
.kan-drop__file:first-child { border-top: 0; }
.kan-drop__file-icon { flex-shrink: 0; color: var(--navy-500); }
.kan-drop__file-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-drop__file-size { flex-shrink: 0; font-size: 0.75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-drop__file > .kan-btn,
.kan-drop__file > .kan-iconbtn { flex-shrink: 0; }
.kan-drop__actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-2); }
/* „Pretiahnite sem…“ na myši, „Vyberte…“ na dotyku — oba texty v lang/, CSS ukáže jeden. */
.kan-drop__touch { display: none; }
@media (pointer: coarse) {
  .kan-drop__mouse { display: none; }
  .kan-drop__touch { display: inline; }
  .kan-drop__zone { min-height: 140px; }
}

/* --- C22 · x-admin.progress-steps → admin-ui.css, blok „GO 1 ▸ import“ --------------------- */
/* Zoznam krokov s fajkami; aktívny krok nesie pruh (ten istý .kan-ov-bar ako teplomer v Prehľade,
   na celú šírku). Žiadne koliesko (K3). */
.kan-psteps { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; }
.kan-psteps__step { display: flex; gap: var(--space-3); padding: var(--space-2) 0; min-width: 0; }
.kan-psteps__mark { display: grid; place-items: center; flex-shrink: 0; width: 20px; height: 20px; margin-top: 1px; border-radius: var(--radius-pill); color: var(--ink-300); }
.kan-psteps__step.is-done .kan-psteps__mark { background: var(--success-surface); color: var(--success-text); }
.kan-psteps__step.is-active .kan-psteps__mark { background: var(--accent-subtle); color: var(--accent); }
.kan-psteps__step.is-failed .kan-psteps__mark { background: var(--danger-surface); color: var(--danger-text); }
.kan-psteps__step.is-waiting .kan-psteps__mark { background: var(--warning-surface); color: var(--warning-text); }
.kan-psteps__body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: var(--space-1); }
.kan-psteps__title { margin: 0; font-size: var(--fs-small); line-height: 1.4; color: var(--text-body); }
.kan-psteps__step.is-active .kan-psteps__title { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-psteps__step.is-pending .kan-psteps__title { color: var(--text-muted); }
.kan-psteps__step.is-failed .kan-psteps__title { color: var(--danger-text); font-weight: var(--fw-medium); }
.kan-psteps__meta { margin: 0; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-psteps__bar { display: flex; align-items: center; gap: var(--space-3); }
.kan-psteps__bar .kan-ov-bar { flex: 1 1 auto; width: auto; max-width: 420px; }
.kan-psteps__count { flex-shrink: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-psteps__foot { display: flex; align-items: center; gap: var(--space-2); margin: var(--space-2) 0 0; padding-top: var(--space-3); border-top: 1px solid var(--border-subtle); font-size: 0.75rem; color: var(--text-muted); }

/* --- C23 · kontrola: kpi-strip + tabs (bez nového komponentu) ---------------------------- */
/* Jediná úprava existujúceho: x-admin.tabs smie ukázať aj počet 0 (prop `zero`), sivý. */
.kan-tabs__count.is-zero { background: transparent; color: var(--text-muted); font-weight: var(--fw-regular); }
.kan-tabs__count.is-alert { background: var(--danger-surface); color: var(--danger-text); }
.kan-tabs__count.is-warn { background: var(--warning-surface); color: var(--warning-text); }
/* Hodnota bunky kpi-strip v tóne (chyby > 0 červeno, 0 zeleno) — len farba textu. */
.kan-kpistrip__value.is-red { color: var(--danger-text); }
.kan-kpistrip__note.is-green { color: var(--success-text); }
/* Päta kontroly: vľavo stav, vpravo tlačidlá (ako x-admin.form-foot z B5). */
.kan-import-foot { display: flex; align-items: flex-end; flex-wrap: wrap; gap: var(--space-2) var(--space-3); padding: 10px var(--space-4); border-top: 1px solid var(--border-subtle); background: var(--surface-sunken); }
.kan-import-foot__state { flex: 1 1 auto; min-width: 0; font-size: var(--fs-small); color: var(--text-muted); }
.kan-import-foot__state strong { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-import-foot__actions { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }

/* --- C24 · x-admin.change-review → admin-ui.css, blok „GO 1 ▸ import“ --------------------- */
/* Tabuľka v karte (x-admin.table inCard). Skupina = účastník: bunka „Účastník“ cez všetky jeho
   riadky (rowspan) s menom, VS a „Použiť všetky v skupine“. Riadok zmeny: pole, bolo, bude, Použiť. */
.kan-chrev { table-layout: fixed; }
.kan-admin .kan-chrev td.kan-chrev__person { vertical-align: top; padding-block: 10px; border-right: 1px solid var(--border-subtle); background: var(--paper); }
.kan-chrev__who { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.kan-chrev__who-name { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-chrev__who-meta { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-chrev__all { display: inline-flex; align-items: center; gap: 6px; min-height: var(--control-h-sm); margin-top: var(--space-1); font-size: 0.75rem; color: var(--text-body); cursor: pointer; white-space: nowrap; }
.kan-chrev__field { color: var(--text-muted); }
.kan-chrev__old { color: var(--text-muted); }
.kan-chrev__new { color: var(--text-heading); font-weight: var(--fw-medium); }
.kan-chrev__val { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* „zmenené v platforme 8. 10. 2026 · Katka“ — druhý riadok bunky (popis, nie ovládač: smie byť). */
.kan-chrev__why { display: block; margin-top: 2px; font-size: 0.75rem; line-height: 1.3; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-chrev tr.is-conflict td { height: 52px; }
.kan-chrev tr.is-off .kan-chrev__new { color: var(--text-muted); font-weight: var(--fw-regular); }
.kan-chrev__use { width: 96px; }
.kan-chrev__use label { display: inline-flex; align-items: center; gap: 6px; min-height: var(--control-h-sm); font-size: 0.75rem; color: var(--text-muted); cursor: pointer; white-space: nowrap; }
.kan-chrev__use .kan-table__check { flex-shrink: 0; }
.kan-chrev__readonly { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }
/* „Možno tá istá osoba“: dve osoby vedľa seba a voľba pod nimi (riadok cez celú šírku). */
.kan-chrev__same td { height: auto; padding-block: var(--space-3); white-space: normal; }
.kan-same { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); }
.kan-same__person { display: flex; flex-direction: column; gap: 2px; min-width: 0; padding: var(--space-2) var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--paper); font-size: 0.75rem; color: var(--text-muted); }
.kan-same__person strong { font-size: var(--fs-small); color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-same__person .is-diff { color: var(--warning-text); font-weight: var(--fw-semibold); }
.kan-same__choice { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-5); grid-column: 1 / -1; margin: 0; padding: 0; border: 0; }
.kan-same__choice legend { padding: 0; margin-bottom: var(--space-1); font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-same__option { display: inline-flex; align-items: center; gap: 6px; min-height: var(--control-h-sm); font-size: var(--fs-small); color: var(--text-body); cursor: pointer; }
.kan-same__option input { width: 16px; height: 16px; margin: 0; accent-color: var(--accent); }
/* Lišta nad tabuľkou: počet, „Použiť všetky“, „Nepoužiť žiadnu“. */
.kan-chrev-bar { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2) var(--space-3); padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: var(--fs-small); color: var(--text-muted); }
.kan-chrev-bar strong { color: var(--text-heading); font-weight: var(--fw-semibold); font-variant-numeric: tabular-nums; }
.kan-chrev-bar__actions { display: flex; gap: var(--space-2); margin-left: auto; }
/* Dotyk / pod 600 px: skupina = karta, zmena = blok „bolo → bude“ a 44 px zaškrtnutie. */
.kan-chrev-cards { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--space-3); }
.kan-chrev-card { border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--paper); }
.kan-chrev-card__head { display: flex; align-items: center; gap: var(--space-2); min-height: var(--touch-min); padding: var(--space-2) var(--space-3); background: var(--surface-sunken); border-bottom: 1px solid var(--border-subtle); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.kan-chrev-card__row { display: flex; align-items: flex-start; gap: var(--space-3); padding: var(--space-3); border-top: 1px solid var(--border-subtle); }
.kan-chrev-card__row:first-of-type { border-top: 0; }
.kan-chrev-card__text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; font-size: var(--fs-small); }
.kan-chrev-card__field { font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-chrev-card__change { overflow-wrap: anywhere; }

/* --- C25 · tabuľka chýb a výsledok importu (vzor x-admin.table) --------------------------- */
.kan-errtable__line { width: 64px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-errtable__error { display: inline-flex; align-items: center; gap: 6px; min-width: 0; color: var(--danger-text); font-weight: var(--fw-medium); }
.kan-errtable__error > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-errtable__fix { color: var(--text-body); }
.kan-errtable__fix label { display: inline-flex; align-items: center; gap: 6px; min-height: var(--control-h-sm); cursor: pointer; white-space: nowrap; }
.kan-errtable__raw { font-family: var(--font-mono); font-size: 0.75rem; color: var(--text-body); }
/* Výsledok importu: karta so zeleným rámom (ako x-admin.state-card green, len rám). */
.kan-card.kan-card--done { border-color: var(--success-border); }
.kan-card.kan-card--done > .kan-card__head { background: var(--success-surface); border-bottom-color: var(--success-border); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.kan-card.kan-card--done .kan-card__title { color: var(--success-text); }
.kan-card.kan-card--warn { border-color: var(--warning-border); }
.kan-card.kan-card--warn > .kan-card__head { background: var(--warning-surface); border-bottom-color: var(--warning-border); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.kan-card.kan-card--warn .kan-card__title { color: var(--warning-text); }
.kan-card.kan-card--error { border-color: var(--danger-border); }
.kan-card.kan-card--error > .kan-card__head { background: var(--danger-surface); border-bottom-color: var(--danger-border); border-radius: var(--radius-md) var(--radius-md) 0 0; }
.kan-card.kan-card--error .kan-card__title { color: var(--danger-text); }
.kan-result__lines { margin: 0; padding: var(--space-3) var(--space-4); list-style: none; display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--fs-small); border-top: 1px solid var(--border-subtle); }
.kan-result__lines li { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-result__lines .kan-icon { flex-shrink: 0; color: var(--text-muted); }

/* --- spoločné: sivá poznámka v hlavičke karty („spustené 14:02 · Katka“) → admin-ui.css, x-admin.card */
.kan-card__meta { flex-shrink: 0; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.kan-card__head > .kan-icon { flex-shrink: 0; color: var(--navy-500); }
.kan-card__msg { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-3); }
.kan-card__msg p { margin: 0; font-size: var(--fs-small); line-height: 1.5; }
.kan-card__buttons { display: flex; flex-wrap: wrap; gap: var(--space-2); justify-content: flex-end; margin-top: var(--space-3); }

.kan-chrev__why > .kan-icon { vertical-align: -2px; margin-right: var(--space-1); }

/* P5 · small additions the canvas frame does not draw: the no-JS plain field, the ring of a step
   that has not started, the note under a table, the group tick drawn by JS, the foot's deposit
   tick, the phone layout of the change table (one set of inputs, so CSS only). */
.kan-drop__plain { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-drop__actions--start { justify-content: flex-start; }
.kan-drop.is-enhanced .kan-drop__plain { display: none; }
.kan-drop__pick-row { display: inline-flex; align-items: center; gap: var(--space-1); }
.kan-drop__zone[hidden], .kan-drop__files[hidden], .kan-drop__actions[hidden] { display: none; }
.kan-psteps__ring { display: block; width: 14px; height: 14px; border: 2px solid var(--ink-300); border-radius: var(--radius-pill); }
.kan-import-note { margin: 0; padding: var(--space-3) var(--space-4); font-size: 0.75rem; color: var(--text-muted); }
.kan-import-lead { margin: 0; padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: var(--fs-small); color: var(--text-body); }
.kan-import-foot__go { display: inline-flex; align-items: center; gap: var(--space-1); }
.kan-import-foot__deposit { display: flex; align-items: center; gap: 6px; margin-top: var(--space-1); color: var(--text-body); cursor: pointer; }
.kan-chrev-wrap__alert { padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--border-subtle); }
.kan-chrev__same-head { display: flex; align-items: center; gap: var(--space-3); margin-bottom: var(--space-2); min-width: 0; }
.kan-chrev__col-person { width: 230px; }
.kan-chrev__col-field { width: 150px; }
.kan-chrev__col-use { width: 104px; }
.kan-card__msg:empty { display: none; }
@media (max-width: 599px) {
  .kan-chrev, .kan-chrev tbody, .kan-chrev tr, .kan-chrev td { display: block; width: auto; }
  .kan-chrev thead, .kan-chrev colgroup { display: none; }
  .kan-chrev__group { margin: var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--paper); }
  .kan-admin .kan-chrev td.kan-chrev__person { border-right: 0; background: var(--surface-sunken); border-radius: var(--radius-md) var(--radius-md) 0 0; }
  .kan-admin .kan-chrev td { height: auto; padding: var(--space-1) var(--space-3); border: 0; white-space: normal; }
  .kan-admin .kan-chrev tr.is-conflict td { height: auto; }
  .kan-admin .kan-chrev tr + tr { border-top: 1px solid var(--border-subtle); }
  .kan-admin .kan-chrev td.kan-chrev__person { padding: var(--space-2) var(--space-3); }
  .kan-chrev__who-name, .kan-chrev__who-meta { white-space: normal; }
  .kan-chrev td[data-label]::before { content: attr(data-label); display: block; font-size: 0.75rem; color: var(--text-muted); }
  .kan-chrev__val { white-space: normal; overflow-wrap: anywhere; }
  .kan-chrev__use { width: auto; }
  .kan-chrev__use label { min-height: var(--touch-min); }
  .kan-same { grid-template-columns: minmax(0, 1fr); }
}
/* P5 · staging 8. 10. 2026 — the switch „Účastníci | Kluby“, the panes (fieldsets), the lines
   that open into the profile after the run (native <details>), the „Možno tá istá osoba“ cards. */
.kan-import-form { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.kan-import-views { align-self: flex-start; }
.kan-import-pane { min-width: 0; margin: 0; padding: 0; border: 0; }
.kan-import-form > .kan-import-pane:not([hidden]) { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-import-pane[hidden] { display: none; }
.kan-import-foot__text { margin: 0; }
.kan-irows { min-width: 0; font-size: var(--fs-small); }
.kan-irows__cols, .kan-irow__sum {
  display: grid; align-items: center; gap: var(--space-3);
  grid-template-columns: 56px minmax(0, 2fr) minmax(0, 2fr) minmax(0, 2fr);
}
.kan-irow__sum { padding: 0 var(--space-4); }
.kan-irows__cols { flex: 1 1 auto; min-width: 0; }
.kan-irows--full .kan-irows__cols, .kan-irows--full .kan-irow__sum { grid-template-columns: 56px minmax(0, 2fr) minmax(0, 2fr) 64px minmax(0, 1.2fr) minmax(0, 2fr); }
.kan-irows__head { display: flex; align-items: center; min-height: 32px; padding: 0 var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); background: var(--surface-sunken); }
.kan-irows__list { margin: 0; padding: 0; list-style: none; }
.kan-irows__list > li { border-bottom: 1px solid var(--border-subtle); }
.kan-irows__line { color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-irows__num { text-align: right; font-variant-numeric: tabular-nums; }
.kan-irow__sum { min-height: var(--admin-row-h); cursor: pointer; list-style: none; color: var(--text-body); }
.kan-irow__sum::-webkit-details-marker { display: none; }
.kan-irow__sum:hover { background: var(--surface-sunken); }
.kan-irow__sum:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: calc(-1 * var(--focus-ring-width)); }
.kan-irow__sum > span { min-width: 0; }
.kan-irow__name { display: flex; align-items: center; gap: var(--space-1); font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-irow__chev { flex-shrink: 0; color: var(--text-muted); transition: transform 120ms; }
.kan-irow[open] .kan-irow__chev { transform: rotate(90deg); }
@media (prefers-reduced-motion: reduce) { .kan-irow__chev { transition: none; } }
.kan-irow__trunc { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-irow__name .kan-irow__trunc { display: inline; }
.kan-irow__meta { margin-left: var(--space-1); font-size: 0.75rem; font-weight: var(--fw-regular); color: var(--text-muted); white-space: nowrap; }
.kan-irow__body { padding: var(--space-2) var(--space-4) var(--space-4); background: var(--surface-sunken); border-top: 1px solid var(--border-subtle); }
.kan-irow__warn { display: flex; align-items: center; gap: var(--space-1); margin: var(--space-1) 0 var(--space-2); color: var(--warning-text); font-weight: var(--fw-medium); }
.kan-irow__warn .kan-icon { flex-shrink: 0; }
.kan-irow__cols { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-3); align-items: start; }
.kan-irow__col { min-width: 0; padding: var(--space-2) var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--paper); }
.kan-irow__col .kan-facts { grid-template-columns: minmax(84px, 40%) minmax(0, 1fr); }
.kan-irow__col .kan-facts__label { padding: 6px 0; }
.kan-irow__col .kan-facts__value { padding: 6px 0 6px var(--space-2); }
.kan-irow__col .kan-facts + .kan-facts { margin-top: var(--space-2); padding-top: var(--space-2); border-top: 1px solid var(--border-subtle); }
.kan-irow__title { margin: 0 0 var(--space-1); font-size: 0.75rem; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-irow__empty { margin: 0; color: var(--text-muted); }
.kan-irow__money .kan-facts__value { justify-content: flex-end; font-variant-numeric: tabular-nums; }
.kan-errtable__error.is-quiet { color: var(--text-muted); }
.kan-admin .kan-chrev tr.kan-chrev__detail td { height: auto; padding: 0; white-space: normal; }
.kan-chrev__detail-sum { display: flex; align-items: center; gap: var(--space-1); min-height: 32px; padding: 0 var(--space-4); cursor: pointer; list-style: none; font-size: 0.75rem; color: var(--text-muted); }
.kan-chrev__detail-sum::-webkit-details-marker { display: none; }
.kan-chrev__detail-sum:hover { color: var(--text-heading); }
.kan-chrev__detail-sum:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: calc(-1 * var(--focus-ring-width)); }
@media (max-width: 899px) {
  .kan-irow__cols { grid-template-columns: minmax(0, 1fr); }
  .kan-irows--full .kan-irows__cols, .kan-irows--full .kan-irow__sum { grid-template-columns: 40px minmax(0, 2fr) minmax(0, 1.5fr) minmax(0, 1.5fr); }
  .kan-irows--full .kan-irows__cols > :nth-child(4), .kan-irows--full .kan-irows__cols > :nth-child(5),
  .kan-irows--full .kan-irow__sum > :nth-child(4), .kan-irows--full .kan-irow__sum > :nth-child(5) { display: none; }
}
@media (max-width: 599px) {
  .kan-irows__head { display: none; }
  .kan-irow__sum, .kan-irows--full .kan-irow__sum { grid-template-columns: 32px minmax(0, 1fr); padding-block: var(--space-2); min-height: var(--touch-min); }
  .kan-irow__sum > :nth-child(n+3) { grid-column: 2; }
}
/* „Možno tá istá osoba“ — a card each, above the change table (never under its header). */
.kan-same-list { margin: 0; padding: var(--space-3) var(--space-4); list-style: none; display: flex; flex-direction: column; gap: var(--space-3); }
.kan-same-card { padding: var(--space-3); border: 1px solid var(--warning-border); border-radius: var(--radius-md); background: var(--paper); }
.kan-same__why { margin: 0 0 var(--space-2); font-size: var(--fs-small); color: var(--text-heading); }
.kan-same__facts { margin: var(--space-1) 0 0; display: flex; flex-direction: column; gap: 2px; }
.kan-same__fact { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: var(--space-2); }
.kan-same__fact dt { color: var(--text-muted); }
.kan-same__fact dd { margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-body); }
.kan-same__fact.is-diff dd { color: var(--warning-text); font-weight: var(--fw-semibold); }
.kan-same__fact.is-diff dt { color: var(--warning-text); }
/* P5 · staging 8. 10. 2026 (3) — „Nahrať“ at every line of Nové / Zmenené (outside the <summary>, so the
   row still opens), „Nenahrá sa“ lines, the rows of Kluby / Školy, the change kinds, „Po nahratí“. */
.kan-irows--pick .kan-irows__pickhead { flex: 0 0 40px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-irows--pick .kan-irows__list > li { display: grid; grid-template-columns: 56px minmax(0, 1fr); align-items: start; }
.kan-irows--pick .kan-irow__sum { padding-left: 0; }
.kan-irow__pick { display: flex; align-items: center; min-height: var(--admin-row-h); padding-left: var(--space-4); }
.kan-irow__pick .kan-table__check { flex-shrink: 0; }
.kan-irows__list > li.is-off .kan-irow__name { color: var(--text-muted); }
.kan-irow__note { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-irow__note .kan-badge { flex-shrink: 0; }
.kan-irows--club .kan-irows__cols, .kan-irows--club .kan-irow__sum { grid-template-columns: minmax(0, 2fr) 56px minmax(0, 2fr) 64px 64px minmax(0, 1.6fr); }
.kan-irows--school .kan-irows__cols, .kan-irows--school .kan-irow__sum { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) 96px minmax(0, 2fr); }
.kan-irow__cols--two { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.kan-irow__changes { margin-bottom: var(--space-3); }
.kan-irow__list { margin: 0 0 var(--space-2); padding: 0; list-style: none; display: flex; flex-direction: column; gap: 2px; }
.kan-irow__list > li { min-width: 0; overflow-wrap: anywhere; color: var(--text-body); }
.kan-chrev__load { display: inline-flex; align-items: center; gap: 6px; min-height: var(--control-h-sm); margin-top: var(--space-1); font-size: 0.75rem; color: var(--text-body); cursor: pointer; white-space: nowrap; }
.kan-chrev__who > .kan-badge { align-self: flex-start; }
.kan-chrev__kind { display: block; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-chrev__group.is-row-off .kan-chrev__new, .kan-chrev__group.is-row-off .kan-chrev__who-name { color: var(--text-muted); }
/* A change field by field (x-admin.change-review list mode): the kind, the old value struck, the new one highlighted. */
.kan-chrev-list { margin: 0; display: flex; flex-direction: column; }
.kan-chrev-list__row { display: grid; grid-template-columns: minmax(96px, 30%) minmax(0, 1fr); gap: var(--space-2); padding: 6px 0; }
.kan-chrev-list__row + .kan-chrev-list__row { border-top: 1px solid var(--border-subtle); }
.kan-chrev-list__field { color: var(--text-muted); }
.kan-chrev-list__change { margin: 0; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--space-2); }
.kan-chrev-list__kind { font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-chrev-list__old { color: var(--text-muted); text-decoration: line-through; overflow-wrap: anywhere; }
.kan-chrev-list__arrow { flex-shrink: 0; color: var(--text-muted); }
.kan-chrev-list__new { padding: 0 var(--space-1); border-radius: var(--radius-sm); background: var(--warning-surface); color: var(--text-heading); font-weight: var(--fw-semibold); overflow-wrap: anywhere; }
.kan-chrev-list__skip { color: var(--text-muted); overflow-wrap: anywhere; }
.kan-chrev__val .kan-chrev-list__new { overflow-wrap: normal; }
/* „Po nahratí“ in the foot of the check. */
.kan-import-foot__title { margin: 0 0 var(--space-1); font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-import-foot__line { margin: var(--space-1) 0 0; }
.kan-import-after { max-width: 360px; background: var(--paper); }
.kan-import-after th[scope="row"] { font-weight: var(--fw-medium); color: var(--text-heading); text-align: left; }
@media (max-width: 899px) {
  .kan-irows--club .kan-irows__cols, .kan-irows--club .kan-irow__sum { grid-template-columns: minmax(0, 2fr) 56px minmax(0, 2fr) minmax(0, 1.6fr); }
  .kan-irows--club .kan-irows__cols > :nth-child(4), .kan-irows--club .kan-irows__cols > :nth-child(5),
  .kan-irows--club .kan-irow__sum > :nth-child(4), .kan-irows--club .kan-irow__sum > :nth-child(5) { display: none; }
  .kan-irow__cols--two { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 599px) {
  .kan-irows--club .kan-irow__sum, .kan-irows--school .kan-irow__sum { grid-template-columns: minmax(0, 1fr); }
  .kan-irows--club .kan-irow__sum > *, .kan-irows--school .kan-irow__sum > * { grid-column: 1; }
  .kan-irows--pick .kan-irows__list > li { grid-template-columns: 48px minmax(0, 1fr); }
  .kan-import-after { max-width: none; }
}
/* P5 · the check, rework (Matej, 8. 10. 2026 evening): one compact summary strip of six cells, the block
   „Možno tá istá osoba“ on top (pairs side by side, two buttons), the switch Účastníci | Kluby | Školy with
   one card of tabs per view, rows one line when closed (native <details>) that open into what is loaded. */
.kan-irv-root { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.kan-irv-root [hidden] { display: none; }
.kan-irv-views-box { display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; scroll-margin-top: var(--space-4); }
.kan-irv-views { align-self: flex-start; max-width: 100%; }
.kan-irv-view { min-width: 0; }
.kan-irv-panel { min-width: 0; }
/* A row: chevron · line · name · what it is · (warning) · state — one line (D5), the rest behind it. */
.kan-irv-list { margin: 0; padding: 0; list-style: none; }
.kan-irv { border-bottom: 1px solid var(--border-subtle); font-size: var(--fs-small); }
.kan-irv:last-child { border-bottom: 0; }
.kan-irv__sum {
  display: grid; grid-template-columns: 14px 72px minmax(0, 2fr) minmax(0, 3fr) auto auto; align-items: center; gap: var(--space-3);
  min-height: var(--admin-row-h); padding: 0 var(--space-4); cursor: pointer; list-style: none; color: var(--text-body);
}
.kan-irv__sum::-webkit-details-marker { display: none; }
.kan-irv__sum:hover { background: var(--surface-sunken); }
.kan-irv__sum:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: calc(-1 * var(--focus-ring-width)); }
.kan-irv__chev { color: var(--text-muted); transition: transform 120ms; }
.kan-irv__item[open] > .kan-irv__sum .kan-irv__chev { transform: rotate(90deg); }
@media (prefers-reduced-motion: reduce) { .kan-irv__chev { transition: none; } }
.kan-irv__line { color: var(--text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-irv__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-irv__meta { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-muted); }
.kan-irv__meta.is-error { color: var(--danger-text); font-weight: var(--fw-medium); }
.kan-irv__flag { display: inline-flex; color: var(--warning-text); }
.kan-irv__sum > .kan-badge { justify-self: end; }
.kan-irv__body { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3) var(--space-4) var(--space-4); border-top: 1px solid var(--border-subtle); background: var(--surface-sunken); }
.kan-irv__body > p { margin: 0; }
.kan-irv__error, .kan-irv__warn { display: flex; align-items: center; gap: var(--space-1); font-weight: var(--fw-medium); }
.kan-irv__error { color: var(--danger-text); }
.kan-irv__warn { color: var(--warning-text); }
.kan-irv__error .kan-icon, .kan-irv__warn .kan-icon { flex-shrink: 0; }
.kan-irv__fix strong, .kan-irv__raw strong { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-irv__fix, .kan-irv__raw, .kan-irv__notes { color: var(--text-body); overflow-wrap: anywhere; }
.kan-irv__notes { color: var(--text-muted); }
.kan-irv-legend { margin: 0; padding: var(--space-2) var(--space-4); border-bottom: 1px solid var(--border-subtle); color: var(--text-muted); font-size: var(--fs-small); }
/* Changes drawn in place: old struck through and muted, new highlighted and bold (strike + weight, never colour alone). */
.kan-irv__old { color: var(--text-muted); text-decoration: line-through; }
.kan-irv__new { padding: 0 var(--space-1); border-radius: var(--radius-sm); background: var(--warning-surface); color: var(--text-heading); font-weight: var(--fw-semibold); text-decoration: none; }
.kan-irv__keep { color: var(--text-muted); }
.kan-irv__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-3); align-items: start; }
.kan-irv__col { min-width: 0; padding: var(--space-2) var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--paper); }
.kan-irv__col .kan-facts { grid-template-columns: minmax(84px, 40%) minmax(0, 1fr); }
.kan-irv__col .kan-facts__label { padding: 6px 0; }
.kan-irv__col .kan-facts__value { padding: 6px 0 6px var(--space-2); }
.kan-irv__money .kan-facts__value { justify-content: flex-end; text-align: right; font-variant-numeric: tabular-nums; }
.kan-irv__title { margin: 0 0 var(--space-1); font-size: 0.75rem; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-irv__list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 2px; }
.kan-irv__list > li { min-width: 0; overflow-wrap: anywhere; color: var(--text-body); }
.kan-irv__empty { margin: 0; color: var(--text-muted); }
/* „Možno tá istá osoba“ — the counter in the head, a compact pair per line. */
.kan-irv-same__count { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--warning-text); white-space: nowrap; }
.kan-irv-same__count.is-done { color: var(--success-text); }
.kan-irv-same__list { margin: 0; padding: 0; list-style: none; }
.kan-irv-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: var(--space-2) var(--space-3); align-items: start; padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: var(--fs-small); }
.kan-irv-pair:last-child { border-bottom: 0; }
.kan-irv-pair[aria-busy="true"] { opacity: 0.7; }
.kan-irv-pair__why { grid-column: 1 / -1; margin: 0; color: var(--text-heading); font-weight: var(--fw-medium); }
.kan-irv-pair__sides { grid-column: 1 / 3; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-3); min-width: 0; }
.kan-irv-pair__side { min-width: 0; padding: var(--space-2) var(--space-3); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--paper); }
.kan-irv-pair__title { display: block; margin-bottom: var(--space-1); font-size: 0.75rem; color: var(--text-heading); }
.kan-irv-pair__facts { margin: 0; display: flex; flex-direction: column; gap: 2px; }
.kan-irv-pair__fact { display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: var(--space-2); }
.kan-irv-pair__fact dt { color: var(--text-muted); }
.kan-irv-pair__fact dd { margin: 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-body); }
.kan-irv-pair__fact.is-diff dt { color: var(--warning-text); }
.kan-irv-pair__fact mark { padding: 0 var(--space-1); border-radius: var(--radius-sm); background: var(--warning-surface); color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-irv-pair__choice { display: flex; flex-direction: column; gap: var(--space-1); align-self: center; }
.kan-irv-pair__btn { white-space: nowrap; }
.kan-irv-pair__btn[aria-pressed="false"] .kan-icon { display: none; }
.kan-irv-foot .kan-import-foot { border-top: 0; }
@media (max-width: 899px) {
    .kan-irv__sum { grid-template-columns: 14px 64px minmax(0, 1fr) auto auto; }
  .kan-irv__meta { display: none; }
}
@media (max-width: 599px) {
    .kan-irv__sum { grid-template-columns: 14px minmax(0, 1fr) auto; min-height: var(--touch-min); padding-block: var(--space-1); }
  .kan-irv__line, .kan-irv__flag { display: none; }
  .kan-irv-pair { grid-template-columns: minmax(0, 1fr); }
  .kan-irv-pair__sides { grid-column: 1; grid-template-columns: minmax(0, 1fr); }
  .kan-irv-pair__choice { flex-direction: row; }
  .kan-irv-pair__btn { flex: 1 1 0; }
  /* The head of the read file (x-admin.progress-steps): the time and the badge go under the name. */
  .kan-psteps-card > .kan-card__head { flex-wrap: wrap; height: auto; min-height: 44px; padding-block: var(--space-2); }
  .kan-psteps-card .kan-card__actions { flex-wrap: wrap; min-width: 0; max-width: 100%; margin-left: 0; }
}
/* ◂ P5 */

/* P6 ▸ osoba, školné, hromadná lišta (C7–C18, C49, C12) */
/* ---- C7 · x-admin.person-header → admin-ui.css, nový blok „Osoba“ (za Page header) ---- */
/* „Aj v:“ — pásik iných účastí nad hlavičkou. Voľný text, zalamuje sa (B6). */
.kan-person-also {
  display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--space-2);
  margin: 0 0 var(--space-2); padding: 0; list-style: none;
  font-size: 0.75rem; line-height: 1.5; color: var(--text-muted);
}
.kan-person-also__key { font-weight: var(--fw-semibold); color: var(--text-body); }
.kan-person-also__list { display: flex; flex-wrap: wrap; gap: 2px var(--space-2); margin: 0; padding: 0; list-style: none; }
.kan-person-also__item:not(:last-child)::after { content: "·" / ""; margin-left: var(--space-2); color: var(--text-muted); }
.kan-person-also a { color: var(--text-link); text-decoration: none; }
.kan-person-also a:hover { text-decoration: underline; }
/* Riadok faktov pod H1: sivý, položky oddelené bodkou, zalamuje sa po položkách. */
.kan-person-head__facts {
  display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--space-2);
  margin: var(--space-1) 0 0; padding: 0; list-style: none;
  font-size: var(--fs-small); line-height: 1.5; color: var(--text-muted);
}
.kan-person-head__fact { display: inline-flex; align-items: center; min-width: 0; }
/* Bodka za položkou (nie pred ňou): pri zalomení ostane na konci riadku, nový riadok začína slovom. */
.kan-person-head__fact:not(:last-child)::after { content: "·" / ""; margin-left: var(--space-2); }
.kan-person-head__fact a { color: var(--text-link); text-decoration: none; }
.kan-person-head__fact a:hover { text-decoration: underline; }
.kan-person-head__fact .kan-copy__value { color: var(--text-body); font-variant-numeric: tabular-nums; }
/* Meno H1 je voľný text: zalomí sa, nikdy „…“ (B6). */
.kan-person-head .kan-admin__h1 { overflow-wrap: anywhere; white-space: normal; }
.kan-person-head .kan-admin__header-text { min-width: 0; flex: 1 1 auto; }
/* Akcie sa nikdy nezúžia na „…“ — ustúpi text (meno sa zalomí). */
.kan-person-head .kan-admin__header-actions { flex-shrink: 0; }
/* Pás stavu (odhlásenie, zvyšok) = existujúci x-alert pod hlavičkou, len odsadený. */
.kan-person-head__band { margin: var(--space-3) 0 0; }

/* ---- C8 · x-admin.person-card → admin-ui.css, blok „Osoba“ ---- */
.kan-person-card .kan-card__head { gap: var(--space-2); padding-block: var(--space-2); }
.kan-person-card__who { display: flex; flex-direction: column; gap: 0; min-width: 0; flex: 1 1 auto; }
.kan-person-card__name { margin: 0; font-family: var(--font-ui); letter-spacing: normal; font-size: var(--fs-small); font-weight: var(--fw-semibold); line-height: 1.35; color: var(--text-heading); overflow-wrap: anywhere; }
.kan-person-card__name a { color: inherit; text-decoration: none; }
.kan-person-card__name a:hover { text-decoration: underline; }
.kan-person-card__rel { font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); }
/* Druh vzťahu je slovo, nie pilulka: pilulky sú len stavy (D17). */
.kan-person-card__kind { font-weight: var(--fw-semibold); color: var(--text-body); }
/* Hodnota faktu + značka vpravo („dostáva e-maily“): značka sa nikdy nezalomí, hodnota sa skráti. */
.kan-person-card__line { display: flex; align-items: center; gap: var(--space-2); min-width: 0; flex: 1 1 auto; flex-wrap: wrap; }
.kan-person-card__line > .kan-copy { min-width: 0; flex: 1 1 140px; }
.kan-person-card__gets { display: inline-flex; align-items: center; gap: 4px; flex-shrink: 0; font-size: 0.75rem; color: var(--success-text); white-space: nowrap; }
.kan-person-card__gets--off { color: var(--text-muted); }
.kan-person-card__consents { display: flex; flex-wrap: wrap; gap: 2px var(--space-3); }
.kan-person-card__consent { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.kan-person-card__consent--off { color: var(--text-muted); }
.kan-person-card__sub { display: block; font-size: 0.75rem; color: var(--text-muted); }
/* Ukončený vzťah: celá karta sivo, bez akcií úprav (história ostáva). */
.kan-person-card--ended { background: var(--surface-sunken); }
.kan-person-card--ended .kan-person-card__name,
.kan-person-card--ended .kan-facts__value { color: var(--text-muted); }
/* C8 · 5. 10. 2026 (KONCEPT-rodiny H1–H9): vlastná adresa osoby, riadok Pošta, riadok Domácnosť. */
.kan-person-card__addr { margin: 0; font-style: normal; line-height: 1.5; color: var(--text-heading); min-width: 0; flex: 1 1 auto; white-space: normal; overflow-wrap: anywhere; }
/* Adresa + ikona: nikdy sa nezalomí ikona pod adresu — zalomí sa text adresy. */
.kan-person-card__line--addr { flex-wrap: nowrap; align-items: flex-start; }
/* Ikona v riadku faktu (Zmeniť adresu, Zaznamenať „Nechce poštu“) vždy vpravo, nezalomí sa. */
.kan-person-card__act { margin-left: auto; flex-shrink: 0; }
.kan-person-card__post { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 0; flex: 1 1 auto; }
.kan-person-card__hh { color: var(--text-muted); }
.kan-person-card__hh a { color: var(--text-link); text-decoration: none; font-weight: var(--fw-semibold); }
.kan-person-card__hh a:hover { text-decoration: underline; }
/* C8 · oslovenie (5. 10. 2026, KONCEPT-rodiny H12–H13): pozdrav + „odhadnuté“ (text, nie pilulka) + „Potvrdiť“. */
.kan-person-card__sal { display: flex; flex-wrap: wrap; align-items: center; gap: 2px var(--space-2); min-width: 0; flex: 1 1 auto; }
.kan-person-card__greet { color: var(--text-heading); }
.kan-person-card__guess { font-size: 0.75rem; color: var(--text-muted); }
.kan-person-card__seg { margin: 0; padding: 0; border: 0; min-width: 0; }
.kan-person-card__dlghelp { display: inline-flex; align-items: center; gap: 4px; margin: 0; }
/* Hlásenie v karte (pod 16 bez rodiča) — existujúci x-alert, v karte bez okraja zboku. */
.kan-person-card__alert { margin: var(--space-3) var(--space-4); }

/* ---- C9 · x-admin.person-picker → admin-ui.css, blok „Osoba“; zlúči sa s .kan-donor-combobox (app.css) ---- */
.kan-ppick { position: relative; display: flex; flex-direction: column; gap: var(--space-2); min-width: 0; }
.kan-ppick__field { position: relative; display: flex; align-items: center; color: var(--text-muted); }
.kan-ppick__field > .kan-icon { position: absolute; left: 10px; pointer-events: none; }
.kan-admin .kan-ppick__input { padding-left: 30px; }
/* Zoznam výsledkov: ten istý biely popover ako .kan-fchip__pop a .kan-combo__list.
   Na plátne je statický (.kan-ppick__list--static), v appke visí pod poľom (absolute). */
.kan-ppick__list {
  position: absolute; top: calc(100% + var(--space-1)); left: 0; right: 0; z-index: 30;
  display: flex; flex-direction: column; gap: 1px;
  margin: 0; padding: var(--space-1); list-style: none;
  max-height: 320px; overflow-y: auto;
  background: var(--surface-card); border: 1px solid var(--border-subtle);
  border-radius: var(--radius-md); box-shadow: var(--shadow-2);
}
.kan-ppick__list--static { position: static; max-height: none; }
/* Bez JS: ↵ vpravo v poli (ten istý .kan-filterbar__go ako filtre, B9). */
.kan-admin .kan-ppick__input--go { padding-right: 34px; }
.kan-ppick__group { padding: var(--space-2) 10px var(--space-1); font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
.kan-ppick__option {
  display: flex; align-items: center; gap: var(--space-2);
  min-height: var(--admin-row-h); padding: var(--space-1) 10px;
  border-radius: var(--radius-sm); cursor: pointer; min-width: 0;
}
.kan-ppick__option:hover, .kan-ppick__option.is-active { background: var(--surface-sunken); }
.kan-ppick__option { position: relative; }
.kan-ppick__option.is-active::before { content: ""; position: absolute; inset-block: 0; left: 0; width: 2px; background: var(--accent); }
.kan-ppick__text { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.kan-ppick__name { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-ppick__name mark { background: var(--highlight-subtle); color: inherit; border-radius: var(--radius-xs); }
.kan-ppick__line { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-ppick__flag { flex-shrink: 0; }
.kan-ppick__new {
  display: flex; align-items: center; gap: var(--space-2);
  min-height: var(--admin-row-h); padding: 0 10px; margin-top: var(--space-1);
  border-top: 1px solid var(--border-subtle); border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--accent); text-decoration: none;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.kan-ppick__new:hover { background: var(--accent-subtle); }
.kan-ppick__none { margin: 0; padding: var(--space-2) 10px; font-size: var(--fs-small); color: var(--text-muted); }
.kan-ppick__more { padding: var(--space-1) 10px; font-size: 0.75rem; color: var(--text-muted); }
.kan-ppick__more a { color: var(--text-link); }
.kan-ppick__skel { display: flex; flex-direction: column; gap: 6px; padding: var(--space-2) 10px; }
/* Vybraná osoba namiesto poľa — vzhľad .kan-donor-combobox__selected v hustote admina. */
.kan-ppick__chosen {
  display: flex; align-items: center; gap: var(--space-3); min-width: 0;
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--accent-border); border-radius: var(--radius-sm); background: var(--accent-subtle);
}
/* Možná duplicita: existujúci x-alert warning + dve tlačidlá v jednom riadku. */
.kan-ppick__dupe-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-top: var(--space-2); }
/* Bez JS: výsledky ako zoznam voľby (.kan-picks / .kan-pick z app.css) na samostatnej stránke. */

/* ---- C10 · x-admin.relations → admin-ui.css, blok „Osoba“ ---- */
.kan-relations .kan-table td.kan-relations__muted,
.kan-relations tr.is-ended td { color: var(--text-muted); }
.kan-relations tr.is-ended .kan-table__link { color: var(--text-muted); }
.kan-relations__gets { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; color: var(--success-text); }
.kan-relations__gets--off { color: var(--text-muted); }
.kan-relations__ended { border-top: 1px solid var(--border-subtle); }
.kan-relations__ended-sum { display: flex; align-items: center; gap: var(--space-2); min-height: var(--admin-row-h); padding: 0 var(--space-4); font-size: 0.75rem; font-weight: var(--fw-semibold); color: var(--text-muted); cursor: pointer; list-style: none; }
.kan-relations__ended-sum::-webkit-details-marker { display: none; }
.kan-relations__ended-sum:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }
.kan-relations__ended[open] .kan-relations__chev { transform: rotate(180deg); }
.kan-relations__alert { margin: var(--space-3) var(--space-4) 0; }
.kan-relations__empty { padding: var(--space-3) var(--space-4); margin: 0; font-size: var(--fs-small); color: var(--text-muted); }
/* Telefón (< 600 px): dvojriadkový riadok (B20) — meno + vzťah, pod tým sivo kontakt. */
.kan-relations__m-list { margin: 0; padding: 0; list-style: none; }
.kan-relations__m-row { display: flex; align-items: center; gap: var(--space-3); min-height: 56px; padding: var(--space-2) var(--space-4); border-top: 1px solid var(--border-subtle); }
.kan-relations__m-row:first-child { border-top: 0; }
.kan-relations__m-text { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.kan-relations__m-name { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-relations__m-line { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ---- C12 · x-address-fields → app.css (zdieľané T aj V), za .kan-account-grid ---- */
.kan-address { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; margin: 0; padding: 0; border: 0; }
.kan-address__legend { padding: 0; margin: 0 0 var(--space-1); font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); }
/* PSČ úzke, obec zvyšok; pod 480 px pod sebou. */
.kan-address__row { display: grid; grid-template-columns: 128px minmax(0, 1fr); gap: var(--space-3); }
@media (max-width: 479px) { .kan-address__row { grid-template-columns: minmax(0, 1fr); } }
.kan-admin .kan-address__row { grid-template-columns: 96px minmax(0, 1fr); }
.kan-address .kan-field { margin: 0; }
/* Fakturačná adresa: zaškrtnutie ju otvorí bez JS (:has). Bez :has ostáva otvorená (bezpečnejšie). */
.kan-address__billing { display: flex; flex-direction: column; gap: var(--space-3); margin: 0; padding: var(--space-3) 0 0 var(--space-4); border: 0; border-left: 2px solid var(--border-subtle); }
@supports selector(:has(*)) {
  .kan-address:not(:has(input[name$="billing_other"]:checked)) .kan-address__billing { display: none; }
}
.kan-address__billing-legend { padding: 0; margin: 0 0 var(--space-1); font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); }
/* Výber krajiny: Slovensko a Česko hore, oddeľovač (natívny <hr> v <select>, Chrome 119+, inak <optgroup>). */

/* ---------------------------------------------------------------
   C13 · x-tuition.breakdown — rozpis výpočtu (dl)
   → app.css (spoločný základ T + V), hustota admina nižšie → admin-ui.css
   Mriežka: [znamienko 16 px] [popis 1fr] [suma auto]; variant Bolo → Bude pridá stĺpec.
   --------------------------------------------------------------- */
.kan-tuition-breakdown { margin: 0; display: flex; flex-direction: column; }
.kan-tuition-breakdown__row {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr) auto;
  align-items: baseline;
  column-gap: var(--space-2);
  padding: 8px var(--space-4);
  border-bottom: 1px solid var(--border-subtle);
}
.kan-tuition-breakdown__row:last-child { border-bottom: 0; }
.kan-tuition-breakdown__row::before { content: ""; color: var(--text-muted); text-align: center; }
.kan-tuition-breakdown__row--eq::before { content: "=" / ""; }
.kan-tuition-breakdown__row dt { margin: 0; min-width: 0; color: var(--text-body); overflow-wrap: anywhere; }
.kan-tuition-breakdown__row dd { margin: 0; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; color: var(--text-heading); }
.kan-tuition-breakdown__sub { display: block; margin-top: 2px; font-size: 0.75rem; font-weight: var(--fw-regular); line-height: 1.4; color: var(--text-muted); }
/* odpočet (zľava, štipendium, podpora, odpustené) */
.kan-tuition-breakdown__row--minus dd { color: var(--text-body); }
/* medzisúčet (= Školné po zľave) */
.kan-tuition-breakdown__row--subtotal dt,
.kan-tuition-breakdown__row--subtotal dd { font-weight: var(--fw-semibold); color: var(--text-heading); }
/* splátka (Záloha, = Doplatok) — so splatnosťou pod popisom */
.kan-tuition-breakdown__row--due dt,
.kan-tuition-breakdown__row--due dd { font-weight: var(--fw-semibold); color: var(--text-heading); }
/* súčtový riadok (D13 vzhľad: jemne modrý) — v rozpise je posledný, lebo rozpis je výpočet */
.kan-tuition-breakdown__row--total { background: var(--navy-50); }
.kan-tuition-breakdown__row--total dt,
.kan-tuition-breakdown__row--total dd { font-weight: var(--fw-semibold); color: var(--text-heading); }
/* zrážka, ktorá čaká na rozhodnutie (štipendium žiada) — suma „—“ */
.kan-tuition-breakdown__row--pending dt,
.kan-tuition-breakdown__row--pending dd { color: var(--text-muted); }
/* príznak preplatku voči predpisu (žltý pás pod súčtom) */
.kan-tuition-breakdown__flag {
  display: flex; align-items: flex-start; gap: var(--space-2);
  margin: 0; padding: 8px var(--space-4);
  background: var(--warning-surface); border-top: 1px solid var(--warning-border);
  color: var(--warning-text); font-size: 0.75rem; line-height: 1.4;
}
.kan-tuition-breakdown__flag .kan-icon { flex: none; margin-top: 1px; }

/* Variant Bolo → Bude (C18): [znamienko] [popis] [bolo dd] [bude dd, šípka pred ním] */
.kan-tuition-breakdown--compare .kan-tuition-breakdown__row,
.kan-tuition-breakdown__head { grid-template-columns: 16px minmax(0, 1fr) 72px 96px; }
.kan-tuition-breakdown__row dd.kan-tuition-breakdown__was { color: var(--text-muted); font-weight: var(--fw-regular); }
.kan-tuition-breakdown__row.is-changed dd.kan-tuition-breakdown__was { text-decoration: line-through; text-decoration-thickness: 1px; }
.kan-tuition-breakdown__row.is-changed dd.kan-tuition-breakdown__now { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-tuition-breakdown__row.is-changed dd.kan-tuition-breakdown__now::before { content: "\2192" / ""; margin-right: var(--space-2); color: var(--text-muted); font-weight: var(--fw-regular); }
.kan-tuition-breakdown__row:not(.is-changed) dd.kan-tuition-breakdown__was { visibility: hidden; }
.kan-tuition-breakdown__head { display: grid; column-gap: var(--space-2); padding: 6px var(--space-4); border-bottom: 1px solid var(--border-subtle); font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-muted); }
.kan-tuition-breakdown__head span:nth-child(3), .kan-tuition-breakdown__head span:nth-child(4) { text-align: right; }

/* → admin-ui.css: hustota T (13 px, riadok 32 px) */
.kan-admin .kan-tuition-breakdown { font-size: var(--fs-small); }
.kan-admin .kan-tuition-breakdown__row { min-height: 32px; padding-block: 7px; font-size: 0.8125rem; line-height: 1.35; }

/* → app.css: verejný vzhľad V (Moje školné, e-mail) — 15–16 px, bez bočných okrajov */
.kan-tuition-breakdown--public .kan-tuition-breakdown__row { padding: 11px 0; font-size: var(--fs-small); line-height: 1.45; }
.kan-tuition-breakdown--public .kan-tuition-breakdown__row--total { margin-inline: calc(-1 * var(--space-3)); padding-inline: var(--space-3); border-radius: var(--radius-sm); }
.kan-tuition-breakdown--public .kan-tuition-breakdown__flag { border-radius: var(--radius-sm); border: 1px solid var(--warning-border); }

/* ---------------------------------------------------------------
   C14 · x-tuition.installments — splátky (tabuľka dense + päta)
   → admin-ui.css (T), verejný variant → app.css
   --------------------------------------------------------------- */
.kan-tuition-installments .kan-table td { vertical-align: middle; }
.kan-tuition-installments .kan-tuition-installments__name { font-weight: var(--fw-semibold); color: var(--text-heading); white-space: nowrap; }
.kan-tuition-installments__amount { white-space: nowrap; font-variant-numeric: tabular-nums; }
.kan-tuition-installments__amount del { color: var(--text-muted); text-decoration-thickness: 1px; }
.kan-tuition-installments__paid { display: block; font-size: 0.75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-tuition-installments__note { color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 0; width: 34%; }
.kan-tuition-installments__foot {
  display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-3); align-items: baseline;
  margin: 0; padding: 10px var(--admin-cell-px, var(--space-3));
  border-top: 1px solid var(--border-subtle); background: var(--surface-sunken);
  font-size: 0.8125rem; color: var(--text-body); font-variant-numeric: tabular-nums;
}
.kan-tuition-installments__foot strong { color: var(--text-heading); font-weight: var(--fw-semibold); }
.kan-tuition-installments__foot .kan-tuition-installments__rest { margin-left: auto; font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-tuition-installments__extra td { background: var(--warning-surface); }

/* Mini (karta „Komu“ v párovaní, C35): bez hlavičky stĺpcov, bez päty, bez stĺpca Výzva,
   riadky 32 px, voliteľný príznak „pokryje“ (modrý pásik vľavo ako vybraný riadok fronty). */
.kan-tuition-installments--mini { border: 0; }
.kan-tuition-installments--mini .kan-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.kan-admin .kan-tuition-installments--mini .kan-table td { height: 32px; padding-inline: var(--space-2); font-size: 0.75rem; }
.kan-tuition-installments--mini .kan-tuition-installments__note,
.kan-tuition-installments--mini .kan-tuition-installments__due-col { display: none; }
.kan-tuition-installments__row--covered > td:first-child { position: relative; }
.kan-tuition-installments__row--covered > td:first-child::before { content: ""; position: absolute; inset-block: 0; left: 0; width: 3px; background: var(--accent); }
.kan-tuition-installments__cover { display: block; font-size: 0.6875rem; color: var(--accent); font-weight: var(--fw-semibold); }

/* ---------------------------------------------------------------
   C15 · x-tuition.progress — dvojaký stav v bunke tabuľky (40 px)
   → admin-ui.css
   --------------------------------------------------------------- */
.kan-tuition-progress { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-tuition-progress .kan-fill { flex: none; gap: 0; }
.kan-tuition-progress .kan-fill__track { width: 56px; }
.kan-tuition-progress .kan-fill__pct { display: none; }   /* percento by opakovalo sumu vedľa pruhu */
.kan-tuition-progress__text { min-width: 0; font-size: 0.8125rem; color: var(--text-body); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.kan-tuition-progress__count { color: var(--text-muted); }
.kan-tuition-progress--none .kan-tuition-progress__text { color: var(--text-muted); }
.kan-tuition-progress--none .kan-fill__track { visibility: hidden; }

/* Dvojriadkový riadok zoznamu na telefóne (B20) — návrh pre x-admin.table mobilný režim */
.kan-mrow { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px var(--space-3); align-items: center; padding: 10px var(--space-4); border-bottom: 1px solid var(--border-subtle); min-height: var(--touch-min); text-decoration: none; color: inherit; }
.kan-mrow__title { min-width: 0; font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-mrow__amount { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; white-space: nowrap; }
.kan-mrow__meta { min-width: 0; font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kan-mrow__badge { justify-self: end; }
.kan-mrow:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }

/* ---------------------------------------------------------------
   C16 · x-tuition.balance — zostatok (T: v pravom stĺpci detailu)
   → admin-ui.css; verejný variant → app.css
   --------------------------------------------------------------- */
.kan-tuition-balance { display: flex; flex-direction: column; gap: var(--space-1); margin: 0; }
.kan-tuition-balance__label { margin: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-tuition-balance__value { margin: 0; font-family: var(--font-numeric); font-size: 1.75rem; font-weight: var(--fw-semibold); line-height: 1.1; letter-spacing: var(--ls-numeric); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-tuition-balance__next { margin: 0; font-size: 0.8125rem; color: var(--text-body); }
.kan-tuition-balance__next b { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-tuition-balance--overdue .kan-tuition-balance__value { color: var(--danger-text); }
.kan-tuition-balance--overdue .kan-tuition-balance__next { color: var(--danger-text); }
.kan-tuition-balance__done { display: inline-flex; align-items: center; gap: var(--space-2); margin: 0; font-size: 1.125rem; font-weight: var(--fw-semibold); color: var(--success-text); }
.kan-tuition-balance__none { display: inline-flex; align-items: center; gap: var(--space-2); margin: 0; font-size: 1.125rem; font-weight: var(--fw-semibold); color: var(--text-muted); }
.kan-tuition-balance__flag { display: flex; align-items: flex-start; gap: var(--space-2); margin: var(--space-2) 0 0; padding: 8px var(--space-3); border: 1px solid var(--warning-border); border-radius: var(--radius-sm); background: var(--warning-surface); color: var(--warning-text); font-size: 0.75rem; line-height: 1.4; }
.kan-tuition-balance__flag .kan-icon { flex: none; margin-top: 1px; }
.kan-tuition-balance--ended .kan-tuition-balance__value { color: var(--text-muted); }

/* ---------------------------------------------------------------
   C17 · x-admin.request-card — žiadosť (štipendium)
   → admin-ui.css (skladá sa z x-admin.card, <details>, x-admin.dialog)
   --------------------------------------------------------------- */
.kan-request { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-request__state { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-2); margin: 0; font-size: 0.8125rem; color: var(--text-body); }
.kan-request__meta { color: var(--text-muted); font-variant-numeric: tabular-nums; }
.kan-request__reason { border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); background: var(--surface-sunken); }
.kan-request__reason > summary {
  display: flex; align-items: center; gap: var(--space-2); min-height: 32px; padding: 0 var(--space-3);
  cursor: pointer; list-style: none; font-size: 0.8125rem; font-weight: var(--fw-medium); color: var(--text-heading);
}
.kan-request__reason > summary::-webkit-details-marker { display: none; }
.kan-request__reason > summary:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; border-radius: var(--radius-sm); }
.kan-request__reason > summary .kan-request__chev { margin-left: auto; transition: transform var(--dur-fast) var(--ease-standard); }
.kan-request__reason[open] > summary .kan-request__chev { transform: rotate(180deg); }
.kan-request__reason-text { margin: 0; padding: 0 var(--space-3) var(--space-3); font-size: 0.8125rem; line-height: 1.5; color: var(--text-body); white-space: pre-line; overflow-wrap: anywhere; }
.kan-request__actions { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; }
.kan-request__decision { margin: 0; padding: var(--space-2) var(--space-3); border-left: 3px solid var(--border-strong); background: var(--surface-sunken); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; font-size: 0.8125rem; line-height: 1.5; color: var(--text-body); overflow-wrap: anywhere; }
.kan-request__decision b { display: block; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); }
.kan-request__empty { margin: 0; font-size: 0.8125rem; color: var(--text-muted); }
@media (prefers-reduced-motion: reduce) { .kan-request__reason > summary .kan-request__chev { transition: none; } }

/* ---------------------------------------------------------------
   C18 · x-admin.diff + dialóg „Upraviť školné“
   → admin-ui.css. Dialóg = x-admin.dialog s novou šírkou 560 px (DIZAJN-diela §8.1).
   --------------------------------------------------------------- */
.kan-adialog--form { width: min(560px, 94vw); }
.kan-diff { display: flex; flex-direction: column; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); overflow: hidden; }
.kan-diff__title { margin: 0; padding: 6px var(--space-3); background: var(--surface-sunken); border-bottom: 1px solid var(--border-subtle); font-size: 0.6875rem; font-weight: var(--fw-semibold); letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-muted); }
.kan-diff .kan-tuition-breakdown__row,
.kan-diff .kan-tuition-breakdown__head { padding-inline: var(--space-3); }
.kan-diff__empty { margin: 0; padding: 10px var(--space-3); font-size: 0.8125rem; color: var(--text-muted); }
.kan-diff-form { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-diff-form__row { display: grid; grid-template-columns: 132px minmax(0, 1fr); gap: var(--space-2) var(--space-3); align-items: start; }
.kan-diff-form__label { padding-top: 6px; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-heading); overflow-wrap: break-word; }
.kan-diff-form__field { display: flex; flex-direction: column; gap: var(--space-1); min-width: 0; }
.kan-diff-form__hint { margin: 0; font-size: 0.75rem; color: var(--text-muted); }
.kan-diff-form__inline { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; }
.kan-diff-form__inline .kan-input-wrap { width: 128px; }
.kan-diff-form__money { width: 128px; }
.kan-adialog__foot .kan-diff-save { display: inline-flex; align-items: center; gap: var(--space-1); }
@media (max-width: 600px) {
  .kan-diff-form__row { grid-template-columns: minmax(0, 1fr); }
  .kan-diff-form__label { padding-top: 0; }
  /* Bolo → Bude na telefóne: „Bude“ vpravo, stará suma prečiarknutá pod ňou; hlavička stĺpcov preč */
  .kan-tuition-breakdown--compare .kan-tuition-breakdown__row { grid-template-columns: 12px minmax(0, 1fr) auto; column-gap: var(--space-2); }
  .kan-tuition-breakdown--compare dd.kan-tuition-breakdown__now { grid-column: 3; grid-row: 1; }
  .kan-tuition-breakdown--compare dd.kan-tuition-breakdown__was { grid-column: 3; grid-row: 2; font-size: 0.75rem; }
  .kan-tuition-breakdown--compare .kan-tuition-breakdown__row:not(.is-changed) dd.kan-tuition-breakdown__was { display: none; }
  .kan-tuition-breakdown--compare .kan-tuition-breakdown__row.is-changed dd.kan-tuition-breakdown__now::before { content: none; }
  .kan-tuition-breakdown__head { display: none; }
}

/* ---------------------------------------------------------------
   C19 · x-admin.phase-card — fáza (Záloha / Doplatok)
   → admin-ui.css (skladá sa z x-admin.card, x-admin.summary-line, x-admin.fill, x-button)
   --------------------------------------------------------------- */
.kan-phases { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-4); }
@media (max-width: 900px) { .kan-phases { grid-template-columns: minmax(0, 1fr); } }
.kan-phase { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-phase__due { margin: 0; font-size: 0.75rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
/* súhrn fázy: mriežka po dvoch (v úzkej karte sa oddeľovač „│“ inak zalomí na začiatok riadku) */
.kan-phase .kan-sumline { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: var(--space-1) var(--space-4); }
.kan-phase .kan-sumline__item::before { display: none; }
.kan-phase__line { margin: 0; font-size: 0.8125rem; color: var(--text-body); font-variant-numeric: tabular-nums; }
.kan-phase__line b { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-phase .kan-fill__track { width: 100%; flex: 1 1 auto; }
.kan-phase .kan-fill__slot { display: none; }
.kan-phase__foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); }
.kan-phase__foot-note { font-size: 0.75rem; color: var(--text-muted); }
.kan-overdue { color: var(--danger-text); font-weight: var(--fw-semibold); }

/* ---------------------------------------------------------------
   C20 · VS v tabuľke — sivé tabulárne číslice (DIZAJN-diela §1.3)
   → admin-ui.css
   --------------------------------------------------------------- */
.kan-vs { font-variant-numeric: tabular-nums; letter-spacing: 0.01em; white-space: nowrap; }
.kan-table .kan-vs, .kan-mrow .kan-vs { color: var(--text-muted); }
.kan-money-neg { white-space: nowrap; font-variant-numeric: tabular-nums; }

/* ---------------------------------------------------------------
/* --- C49 · hromadná lišta (admin-ui.css, nahrádza „.kan-bulk“) -----------------------------
   Stojí na mieste súčtového riadku (.kan-sumrow), kým je niečo označené. */
.kan-bulkbar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  min-height: var(--admin-row-h, var(--touch-min));
  padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3);
  border: 1px solid var(--accent-border);
  border-radius: var(--radius-sm);
  background: var(--accent-subtle);
  font-size: var(--fs-small);
}
@media (min-width: 900px) { .kan-bulkbar { position: sticky; top: 0; z-index: var(--z-sticky); } }
.kan-bulkbar__what { display: flex; align-items: center; flex-wrap: wrap; gap: 2px var(--space-2); min-width: 0; margin: 0; color: var(--text-body); }
.kan-bulkbar__count { font-weight: var(--fw-semibold); color: var(--text-heading); font-variant-numeric: tabular-nums; }
.kan-bulkbar__sum { font-variant-numeric: tabular-nums; white-space: nowrap; }
.kan-bulkbar__sum b { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-bulkbar__warn { display: inline-flex; align-items: center; gap: 4px; padding: 0 var(--space-2); border-radius: var(--radius-pill); background: var(--warning-surface); color: var(--warning-text); white-space: nowrap; }
.kan-bulkbar__all { white-space: nowrap; }
.kan-bulkbar__actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2); margin-left: auto; }
.kan-bulkbar__actions form { margin: 0; }
.kan-bulkbar .kan-btn { white-space: nowrap; }
@media (max-width: 599.98px) {
  .kan-bulkbar { padding: var(--space-2) var(--space-3); }
  .kan-bulkbar__actions { flex: 1 1 100%; margin-left: 0; }
  .kan-bulkbar__actions .kan-btn { flex: 1 1 auto; }
}


/* ── GO 1 · P6 · glue: layout of the detail, the person header pulled under the shell's header,
      the picker's no-JS list, the check boxes of a bulk bar. Tokens only. ───────────────────── */
.kan-person-card .kan-person-card__rel { margin: 0; padding: var(--space-2) var(--space-4) var(--space-1); }
.kan-detail-grid { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: var(--admin-stack); align-items: start; }
.kan-detail-grid__main, .kan-detail-grid__side { display: flex; flex-direction: column; gap: var(--admin-stack); min-width: 0; }
@media (max-width: 1099.98px) { .kan-detail-grid { grid-template-columns: minmax(0, 1fr); } }
.kan-tuition-breakdown__flag--note { background: var(--surface-sunken); border-top-color: var(--border-subtle); color: var(--text-muted); }
.kan-person-card__marks { display: flex; flex-direction: column; gap: var(--space-2); margin: 0 0 var(--space-3); padding: 0; border: 0; }
.kan-ppick__chosen .kan-ppick__text { flex: 1 1 auto; }
.kan-ppick__nojs { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 1px; }
.kan-ppick__nojs-label { display: flex; align-items: center; gap: var(--space-2); min-height: var(--admin-row-h); padding: var(--space-1) 10px; border-radius: var(--radius-sm); cursor: pointer; }
.kan-ppick__nojs-label:hover { background: var(--surface-sunken); }
.kan-ppick__nojs-label:focus-within { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -2px; }
.kan-bulkbar[hidden], .kan-sumrow [hidden], .kan-ppick__list[hidden], .kan-ppick__field[hidden], .kan-ppick__nojs[hidden] { display: none; }
.kan-bulkbar__all { background: none; border: 0; padding: 0; font: inherit; color: var(--text-link); cursor: pointer; text-decoration: underline; }
tr.is-checked > td { background: var(--accent-subtle); }
.kan-diff__alert { margin: var(--space-3) 0 0; }
.kan-diff-form__money .kan-input { text-align: right; }
.kan-diff-form__row .kan-freq { max-width: 220px; }
/* C14 · a card narrower than ~700 px drops the notice column (the figure stays in the row's title). */
.kan-tuition-installments { container-type: inline-size; }
@container (max-width: 699px) { .kan-tuition-installments__note { display: none; } }
/* Účastníci: below a laptop width the „Najbližšie" column gives way (the table stays inside its card, D5). */
/* D5 · a table fits its card: the card (not the window) decides which secondary columns go — the school's
   name first, then Splátky and Najbližšie, then Program; a long cell is cut with an ellipsis. */
.kan-fit { container-type: inline-size; }
.kan-fit .kan-fit-trunc { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-fit .kan-tuition-progress__text { max-width: 170px; }
@container (max-width: 1099px) { .kan-col-next, .kan-fit .kan-tuition-progress__count { display: none; } }
@container (max-width: 899px) { .kan-col-mid { display: none; } }
/* C14 · a phone: no Splatnosť and no Výzva column — the due date is in the breakdown above. */
@media (max-width: 599.98px) { .kan-tuition-installments:not(.kan-tuition-installments--mini) .kan-tuition-installments__due-col { display: none; } }
/* ◂ P6 */

/* ── P0 ▸ F4 #23 · B20 · the admin on a phone ─────────────────────────────────────────────────
   Below 600 px a list is two-line rows (`.kan-mlist`, slot `mobile` of x-admin.table): the name and
   the sum, under it the grey details and the state; the chips of a filter bar fold into one
   „Filtre (n)" (a native <details>, closed by admin.js on a phone), and a tab bar keeps two tabs
   and one „Ďalšie ▾" menu. Wider than that none of this is seen. */
.kan-mlist { display: none; margin: 0; padding: 0; list-style: none; }
.kan-filterbar__fold { display: contents; }
.kan-filterbar__fold > summary { display: none; list-style: none; }
.kan-filterbar__fold > summary::-webkit-details-marker { display: none; }
.kan-tabs__more { display: none; position: relative; }
.kan-tabs__more > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.kan-tabs__more > summary::-webkit-details-marker { display: none; }
.kan-tabs__more .kan-freq__pop { right: 0; left: auto; }
@media (max-width: 599.98px) {
  .kan-mlist { display: block; }
  .kan-atable:has(+ .kan-mlist) { display: none; }
  .kan-mlist__row + .kan-mlist__row { border-top: 1px solid var(--border-subtle); }
  .kan-mlist__link { display: flex; flex-direction: column; gap: 4px; min-height: 56px; padding: var(--space-2) var(--space-4); color: inherit; text-decoration: none; }
  .kan-mlist__link:hover { background: var(--surface-sunken); text-decoration: none; }
  .kan-mlist__link:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }
  .kan-mlist__main { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-3); min-width: 0; }
  .kan-mlist__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
  .kan-mlist__sum { flex: 0 0 auto; font-size: var(--fs-small); font-weight: var(--fw-semibold); font-variant-numeric: tabular-nums; color: var(--text-heading); }
  .kan-mlist__sub { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); min-width: 0; }
  .kan-mlist__meta { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; color: var(--text-muted); }
  .kan-filterbar__fold { display: block; flex: 1 1 100%; }
  .kan-filterbar__fold > summary { display: inline-flex; align-items: center; gap: 6px; min-height: var(--touch-min); padding: 0 var(--space-3); border: 1px solid var(--border-default); border-radius: var(--radius-sm); background: var(--paper); font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); cursor: pointer; }
  .kan-filterbar__fold[open] > .kan-filterbar__chips { margin-top: var(--space-2); }
  .kan-tabs__nav .kan-tabs__tab[data-tab-n]:nth-child(n+3) { display: none; }
  .kan-tabs__more { display: block; }
}
/* ── /P0 ▸ F4 #23 ── */

/* ── P0 ▸ F4 #24 · B21 · the columns of Platby ────────────────────────────────────────────────
   A column never shrinks to two characters: it has a minimum; under 1280 px the less important
   one (Kampaň) is hidden instead — a view concern only, the filter and the export are unchanged. */
.kan-pcol-donor { min-width: 140px; }
.kan-pcol-campaign { min-width: 140px; }
.kan-pcol-dest { min-width: 120px; }
.kan-pcol-link { min-width: 110px; }
@media (max-width: 1279.98px) { .kan-pcol-campaign { display: none; } }
/* ── /P0 ▸ F4 #24 ── */

/* ── GO 1 · P1 ▸ C1–C4 · menu by role, work switch, role line, error pages (katalóg C-kostra.css) ── */
/* C1 · the count's colour by meaning (K2): yellow = to act on, red = something failed. */
.kan-side__count--warn { background: var(--warning-surface); color: var(--warning-text); }
.kan-side__count--danger { background: var(--danger-surface); color: var(--danger-text); }
.kan-side__group { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* C2 · the work switch: the heading of the work group, a native <details> with `.kan-menu`. */
.kan-workswitch { position: relative; margin: var(--space-3) 0 6px; }
.kan-workswitch > summary { list-style: none; }
.kan-workswitch > summary::-webkit-details-marker { display: none; }
.kan-workswitch__summary {
  display: flex;
  align-items: center;
  gap: 6px;
  min-height: var(--control-h-sm, var(--touch-min));
  padding: 0 var(--space-2);
  border-radius: var(--radius-sm);
  font-size: 0.6875rem;
  font-weight: var(--fw-semibold);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-heading);
  cursor: pointer;
}
.kan-workswitch__summary:hover,
.kan-workswitch[open] > .kan-workswitch__summary { background: var(--navy-100); }
.kan-workswitch__summary:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 1px; }
.kan-workswitch__name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-workswitch__summary .kan-icon { flex-shrink: 0; color: var(--text-muted); }
.kan-workswitch[open] > .kan-workswitch__summary .kan-icon { transform: rotate(180deg); }
.kan-workswitch .kan-menu { left: 0; right: 0; min-width: 0; }
@media (pointer: coarse) { .kan-workswitch__summary { min-height: var(--touch-min); } }
/* C3 · the role is the second line of the account row (the e-mail moved into the open menu). */
.kan-side__role { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.15; font-size: 0.6875rem; color: var(--text-muted); }
.kan-menu__head span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* C4 · 403 / 404 / 500 in the admin: the empty state (B13) in the middle of the content. */
.kan-errorpage { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); padding: var(--space-12) var(--space-4); }
.kan-admin .kan-errorpage .kan-empty { max-width: 440px; border: 0; padding: 0; gap: var(--space-3); }
.kan-errorpage .kan-empty__icon { width: 56px; height: 56px; border: 1px solid var(--border-default); border-radius: var(--radius-pill); background: var(--surface-sunken); color: var(--navy-400); display: grid; place-items: center; }
.kan-errorpage .kan-empty__title { font-size: var(--fs-h4); font-weight: var(--fw-semibold); }
.kan-errorpage .kan-empty__body { font-size: var(--fs-small); max-width: 46ch; }
.kan-errorpage__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-2); }
.kan-errorpage__ref { margin: 0; font-size: var(--fs-legal); color: var(--text-muted); font-variant-numeric: tabular-nums; }
/* Without the menu (no session, or the database is what failed): only the logo above the message. */
.kan-errorpage--bare { gap: var(--space-8); min-height: 100vh; background: var(--paper); }
.kan-errorpage--bare > img { height: 56px; width: auto; }
.kan-errorpage--bare .kan-empty { max-width: 440px; border: 0; padding: 0; gap: var(--space-3); }
/* ── /GO 1 · P1 ── */

/* P9 ▸ GO 1 · hromadné odoslanie výziev · C26–C29 (tri kroky, náhľad e-mailu, pás TEST, príjemcovia) */
/* --- C26 · x-admin.steps ------------------------------------------------------------------ */
.kan-sendsteps { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--space-3); }
.kan-sendsteps__card.is-active { border-color: var(--accent-border); }
.kan-sendsteps__head { display: flex; align-items: center; gap: var(--space-3); min-height: var(--admin-card-head-h); padding: 0 var(--space-4); min-width: 0; }
.kan-sendsteps__num { display: grid; place-items: center; flex-shrink: 0; width: 24px; height: 24px; border-radius: var(--radius-pill); border: 1px solid var(--border-default); background: var(--paper); color: var(--text-muted); font-size: 0.75rem; font-weight: var(--fw-semibold); font-variant-numeric: tabular-nums; }
.kan-sendsteps__step.is-active .kan-sendsteps__num { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.kan-sendsteps__step.is-done .kan-sendsteps__num { background: var(--success-surface); border-color: var(--success-surface); color: var(--success-text); }
.kan-sendsteps__title { margin: 0; flex-shrink: 0; font-size: var(--fs-body); font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-sendsteps__step.is-pending .kan-sendsteps__title { color: var(--text-muted); font-weight: var(--fw-medium); }
.kan-sendsteps__summary { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-small); color: var(--text-muted); }
.kan-sendsteps__change { margin-left: auto; flex-shrink: 0; }
.kan-sendsteps__body { padding: var(--space-3) var(--admin-card-pad) var(--admin-card-pad); display: flex; flex-direction: column; gap: var(--space-3); }
.kan-sendsteps__foot { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-2); padding: 10px var(--space-4); border-top: 1px solid var(--border-subtle); background: var(--surface-sunken); border-radius: 0 0 var(--radius-md) var(--radius-md); }
.kan-sendsteps__form { display: flex; margin: 0; }
@media (pointer: coarse), (max-width: 600px) {
  .kan-sendsteps__head { flex-wrap: wrap; padding-block: var(--space-2); }
  .kan-sendsteps__summary { flex-basis: 100%; white-space: normal; order: 3; }
  .kan-sendsteps__foot .kan-btn, .kan-sendsteps__form { width: 100%; }
  .kan-sendsteps__foot .kan-btn { min-height: var(--touch-min); justify-content: center; }
}
/* --- C27 · Komu ---------------------------------------------------------------------------- */
.kan-recipients { display: flex; flex-direction: column; gap: var(--space-2); }
.kan-recipients__summary { margin: 0; font-size: var(--fs-body); color: var(--text-heading); }
.kan-recipients__summary strong { font-weight: var(--fw-semibold); }
.kan-recipients__summary span { font-size: var(--fs-small); color: var(--text-muted); }
.kan-skipped { margin: 0; font-size: var(--fs-small); color: var(--text-body); }
.kan-skipped__label { color: var(--text-muted); margin-right: var(--space-1); }
.kan-skipped__item + .kan-skipped__item::before { content: "·"; margin: 0 var(--space-2); color: var(--border-strong); }
.kan-send-summary { margin: 0; font-size: var(--fs-small); color: var(--text-body); }
.kan-callcards { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--space-3); }
.kan-callcards__count { margin: 0; font-size: var(--fs-body); color: var(--text-body); }
/* P9 ▸ Výzvy a e-maily — „Automatické výzvy" (one line + dialog „Nastavenie a priebeh") a „Ručné výzvy" */
.kan-autocalls { margin-bottom: var(--space-4); }
.kan-autocalls__line { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4); margin: 0 0 var(--space-2); color: var(--text-body); }
.kan-autocalls__test { display: inline-flex; align-items: center; gap: var(--space-2); }
.kan-autocalls__note { margin: 0 0 var(--space-2); color: var(--text-body); }
.kan-autocalls__muted { color: var(--text-muted); }
.kan-autocalls__rules { margin: 0 0 var(--space-3); padding-left: var(--space-5); color: var(--text-body); }
.kan-autocalls__rules li { margin-bottom: var(--space-1); }
.kan-autocalls__h { margin: var(--space-4) 0 var(--space-2); font-size: var(--fs-body); font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-calls-section { margin: var(--space-5) 0 var(--space-3); font-size: var(--fs-body); font-weight: var(--fw-semibold); color: var(--text-heading); }
/* the four terms of the automatic calls: one plain row each */
.kan-autolist { list-style: none; margin: 0 0 var(--space-3); padding: 0; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); }
.kan-autolist__row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(0, 2fr) auto 72px; align-items: center; gap: var(--space-3); min-height: var(--admin-row-h); padding: 0 var(--space-3); }
.kan-autolist__row + .kan-autolist__row { border-top: 1px solid var(--border-subtle); }
.kan-autolist__stage { font-weight: var(--fw-semibold); color: var(--text-heading); white-space: nowrap; }
.kan-autolist__sends { color: var(--text-body); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-autolist__row form { margin: 0; justify-self: end; }
@media (max-width: 700px) {
  .kan-autolist__row { grid-template-columns: 1fr auto; padding-block: var(--space-2); }
  .kan-autolist__sends { grid-column: 1 / -1; white-space: normal; }
}
/* --- C28 · x-admin.email-preview ----------------------------------------------------------- */
.kan-epv { display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; }
.kan-epv__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4); }
.kan-epv__pager { display: flex; align-items: center; gap: var(--space-1); }
.kan-epv__pos { min-width: 72px; text-align: center; font-size: var(--fs-small); font-variant-numeric: tabular-nums; color: var(--text-heading); }
.kan-epv__who { display: flex; flex-direction: column; min-width: 0; flex: 1 1 200px; }
.kan-epv__name, .kan-epv__mail { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-epv__name { font-size: var(--fs-small); font-weight: var(--fw-medium); color: var(--text-heading); }
.kan-epv__mail { font-size: 0.75rem; color: var(--text-muted); }
.kan-epv__tools { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; }
.kan-epv__test { margin: 0; }
.kan-epv .kan-iconbtn.is-disabled { opacity: .4; pointer-events: none; }
.kan-epv__stage { padding: var(--space-3); background: var(--surface-sunken); border-radius: var(--radius-md); }
@media (pointer: coarse), (max-width: 600px) { .kan-epv__tools { margin-left: 0; width: 100%; flex-wrap: wrap; } }
/* --- C29 · pás TEST (K9) ------------------------------------------------------------------- */
.kan-testband { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-1) var(--space-3); padding: var(--space-2) var(--space-4); margin-bottom: var(--space-3); background: var(--highlight); color: var(--on-highlight); border-radius: var(--radius-sm); font-size: var(--fs-small); }
.kan-testband__word { font-size: 0.9375rem; font-weight: var(--fw-bold); letter-spacing: 0.12em; }
.kan-testband__link { color: inherit; font-weight: var(--fw-semibold); text-decoration: underline; }
/* ◂ P9 */
/* P6 ▸ časť B: Prehľad, Kluby a školy, Cenník */
.kan-phase .kan-card__body { display: flex; flex-direction: column; gap: var(--space-3); }
.kan-phase.kan-card { gap: 0; }
.kan-phases > .kan-phase { min-width: 0; }
.kan-todo { margin: 0; padding: 0; list-style: none; }
.kan-todo__link { display: flex; align-items: center; gap: var(--space-3); min-height: var(--admin-row-h); padding: 0 var(--space-4); color: var(--text-body); text-decoration: none; border-top: 1px solid var(--border-subtle); }
.kan-todo li:first-child .kan-todo__link { border-top: 0; }
.kan-todo__link:hover { background: var(--surface-sunken); }
.kan-todo__link:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }
.kan-todo__count { min-width: 28px; font-weight: var(--fw-semibold); font-variant-numeric: tabular-nums; color: var(--warning-text); }
.kan-todo__link .kan-icon { margin-left: auto; color: var(--text-muted); }
tr.is-muted td { color: var(--text-muted); }
.kan-teacher-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-3); }
@media (max-width: 719.98px) { .kan-teacher-row { grid-template-columns: minmax(0, 1fr); } }
.kan-schoolsupport__sum { margin: 0; padding: var(--space-3) var(--space-4); color: var(--text-body); font-variant-numeric: tabular-nums; }
.kan-schoolsupport__sum strong { color: var(--text-heading); }
.kan-price-card + .kan-price-card { margin-top: var(--admin-stack); }
/* B2 ▸ */ .kan-price-note { margin-top: var(--admin-stack); } /* ◂ B2 */
.kan-price-foot { display: flex; justify-content: flex-end; margin-top: var(--admin-stack); }
/* The state words of Pošta and Súhlas start level with the other values of x-admin.facts: the icon follows the word. */
.kan-person-card__post > .kan-person-card__gets > .kan-icon:first-child { order: 2; }
/* Splátkový kalendár ▸ Cenník a termíny: the schedule rows of the dialog and the lock of a programme */
.kan-schedule { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--space-2); }
.kan-schedule__row { display: flex; align-items: center; gap: var(--space-2); min-width: 0; }
.kan-schedule__name { flex: 0 0 auto; min-width: 72px; white-space: nowrap; color: var(--text-body); }
.kan-schedule__row .kan-date { flex: 0 1 180px; min-width: 0; }
.kan-schedule__fixed { display: inline-flex; align-items: center; gap: var(--space-1); color: var(--text-muted); white-space: nowrap; }
.kan-price-lock { display: inline-flex; vertical-align: middle; margin-left: var(--space-1); color: var(--text-muted); }
/* ◂ Splátkový kalendár */
/* ◂ P6 časť B */
/* P11 ▸ história a Peťa (C30 História, Školné → Diela, Ručný príjem) */
.kan-history .kan-card__head { flex-wrap: wrap; gap: var(--space-2); }
.kan-history .kan-card__actions { margin-left: auto; min-width: 0; max-width: 100%; }
.kan-history__badge { display: inline-block; margin-left: var(--space-2); padding: 0 var(--space-2); border-radius: var(--radius-pill); background: var(--status-paused-bg); color: var(--status-paused-fg); font-size: 0.6875rem; font-weight: var(--fw-medium); line-height: 18px; vertical-align: 1px; }
.kan-timeline__title strong { font-weight: var(--fw-semibold); }
.kan-history__diff { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1); margin: var(--space-1) 0 0; font-size: var(--fs-small); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.kan-history__was { color: var(--text-muted); }
.kan-history__is { font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-history__diff .kan-icon { color: var(--text-muted); flex: none; }
.kan-history__links { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-3); margin: var(--space-1) 0 0; font-size: var(--fs-legal); }
.kan-history__links a { color: var(--text-link); }
.kan-history__full { font-size: var(--fs-small); color: var(--text-link); }
.kan-timeline__body { overflow-wrap: anywhere; }
.kan-freq__more { display: none; }
@media (max-width: 720px) {
  .kan-freq__late,
  .kan-admin .kan-freq--links .kan-freq__option.kan-freq__late { display: none; }
  .kan-freq__more { display: inline-flex; min-width: 0; }
  .kan-freq__more > summary { width: 100%; justify-content: space-between; }
  .kan-history .kan-card__actions { margin-left: 0; width: 100%; }
  .kan-history .kan-freq { width: 100%; }
  .kan-admin .kan-history .kan-freq--menu .kan-freq__track { display: grid; grid-template-columns: auto auto minmax(0, 1fr); width: 100%; }
}
.kan-works-table td.kan-works-name { white-space: nowrap; }
.kan-works-table tr.is-muted td { color: var(--text-muted); }
.kan-works-ex { margin-top: var(--admin-stack); }
.kan-income-pick { display: flex; flex-direction: column; gap: var(--space-2); margin: 0 0 var(--space-3); }
.kan-income-foot { display: flex; justify-content: flex-end; gap: var(--space-2); }
.kan-income-page { max-width: 560px; }
.kan-income-hint { margin: 0; font-size: var(--fs-small); color: var(--text-muted); }
/* ◂ P11 história a Peťa */

/* staging 8. 10. ▸ Kontaktné osoby: jedna sekcia, karta na kontakt, detail kontaktu (tokeny, bez nových hodnôt) */
.kan-contacts { display: flex; flex-direction: column; gap: var(--admin-stack); min-width: 0; }
.kan-contacts__head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); min-height: 32px; }
.kan-contacts__title { margin: 0; font-family: var(--font-ui); letter-spacing: normal; font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-heading); }
.kan-contacts__parent { display: flex; }
.kan-contacts .kan-relations__alert { margin: 0; }
.kan-contacts__ended { border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--surface); }
.kan-contacts .kan-relations__empty { padding: 0; }
.kan-ccard { min-width: 0; max-width: 100%; overflow: hidden; }
.kan-contact__open { display: flex; align-items: center; gap: var(--space-2); min-height: 44px; padding: var(--space-2) var(--space-4); color: inherit; text-decoration: none; border-bottom: 1px solid var(--border-subtle); }
.kan-contact__open:hover { background: var(--surface-sunken); }
.kan-contact__open:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }
.kan-contact__open > .kan-icon { flex-shrink: 0; color: var(--text-muted); }
.kan-contact__who { display: flex; align-items: baseline; gap: var(--space-2); min-width: 0; flex: 1 1 auto; }
.kan-contact__who .kan-person-card__name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; min-width: 0; }
.kan-contact__rel { flex: none; font-size: 0.75rem; line-height: 1.4; color: var(--text-muted); white-space: nowrap; }
.kan-contact__pill { display: inline-flex; align-items: center; gap: 4px; flex-shrink: 0; padding: 1px var(--space-2); border-radius: var(--radius-pill); background: var(--success-surface); color: var(--success-text); font-size: 0.75rem; line-height: 1.5; white-space: nowrap; }
.kan-contact__facts { display: flex; flex-direction: column; margin: 0; padding: var(--space-1) var(--space-4); min-width: 0; }
.kan-contact__row { display: grid; grid-template-columns: 88px minmax(0, 1fr); align-items: center; column-gap: var(--space-2); min-height: 32px; padding: 3px 0; }
.kan-contact__row + .kan-contact__row { border-top: 1px solid var(--border-subtle); }
.kan-contact__row dt { margin: 0; font-size: 0.75rem; font-weight: var(--fw-medium); color: var(--text-muted); white-space: nowrap; }
.kan-contact__row dd { display: flex; align-items: center; gap: var(--space-2); margin: 0; min-width: 0; font-size: var(--fs-small); line-height: 1.3; color: var(--text-heading); }
.kan-contact__row dd > * { flex-shrink: 0; }
.kan-contact__row dd > .kan-copy, .kan-contact__row dd > .kan-contact__text { flex: 0 1 auto; min-width: 0; }
.kan-contact__text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kan-contact__none { color: var(--text-muted); }
.kan-contact__off { font-size: 0.75rem; color: var(--text-muted); white-space: nowrap; }
.kan-contact__fill { white-space: nowrap; font-size: var(--fs-small); }
@media (max-width: 480px) { .kan-contact__row { grid-template-columns: 72px minmax(0, 1fr); } }
.kan-contact-dialog__marks { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); margin-top: var(--space-3); font-size: var(--fs-small); }
.kan-contact-dialog__marks-label { color: var(--text-muted); }
/* /staging Kontaktné osoby */

/* ── GO 1 · E-maily školného: picker vľavo, náhľad vpravo (≥ 1000 px), pod tým pod sebou ── */
.kan-tmails { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--admin-card-gap); align-items: start; }
@media (min-width: 1000px) { .kan-tmails { grid-template-columns: minmax(260px, 300px) minmax(0, 1fr); } .kan-tmails__picker { position: sticky; top: var(--space-4); } }
.kan-tmails__preview { min-width: 0; }
.kan-tmails__groups, .kan-tmails__items { list-style: none; margin: 0; padding: 0; }
.kan-tmails__group { border-bottom: 1px solid var(--border-subtle); padding: var(--space-2) 0; }
.kan-tmails__group:last-child { border-bottom: 0; }
.kan-tmails__grouptitle { display: block; padding: var(--space-1) var(--space-4); font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--text-muted); }
.kan-tmails__item { display: block; padding: var(--space-1) var(--space-4); min-height: 28px; line-height: 24px; font-size: var(--fs-body-sm); color: var(--text-heading); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; border-left: 3px solid transparent; }
.kan-tmails__grouptitle + .kan-tmails__items .kan-tmails__item { padding-left: var(--space-6); }
.kan-tmails__item:hover { background: var(--surface-sunken); }
.kan-tmails__item[aria-current="page"] { background: var(--accent-subtle); border-left-color: var(--accent); font-weight: var(--fw-semibold); }
.kan-tmails__item:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: -3px; }
@media (pointer: coarse) { .kan-tmails__item { min-height: 44px; line-height: 36px; } }
.kan-tmails__toolbar { padding: var(--space-3) 0; justify-content: space-between; }
.kan-tmails__stage { background: var(--surface-sunken); border-radius: var(--radius-md); padding: 0; }
.kan-tmails__frame { height: 720px; margin: 0 auto; }
@media (min-width: 1000px) { .kan-tmails__frame { height: max(560px, calc(100vh - 340px)); } }
/* H2 ▸ Odoslané e-maily školného: the plain text of a copy, readable and wrapped, tokens only */
.kan-sentmail__text { margin: 0; padding: var(--space-3) var(--space-4); max-height: 28rem; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; background: var(--surface-sunken); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); font-family: var(--font-ui); font-size: var(--fs-small); line-height: 1.5; color: var(--text-heading); }
.kan-sentmail__col { display: flex; flex-direction: column; gap: var(--space-4); min-width: 0; }
.kan-sentmail__text:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring); outline-offset: 2px; }
/* ◂ H2 */

/* P3 ▸ kluby výzvy */
/* Výber klubov v kroku „Komu": celé názvy na viac riadkov (výnimka z D5 len pre tento výber), širší popover. */
.kan-fchip--wrap .kan-fchip__pop { width: 440px; max-width: min(440px, 90vw); }
.kan-fchip--wrap .kan-fchip__options { max-height: 340px; }
.kan-fchip--wrap .kan-fchip__label { align-items: flex-start; min-height: 0; padding-top: var(--space-2); padding-bottom: var(--space-2); white-space: normal; }
.kan-fchip--wrap .kan-fchip__input { top: 10px; }
.kan-fchip--wrap .kan-fchip__label-text { overflow: visible; text-overflow: clip; overflow-wrap: anywhere; line-height: 1.35; }
.kan-fchip--wrap .kan-fchip__count { flex: 0 0 auto; padding-top: 1px; }
@media (pointer: coarse) { .kan-fchip--wrap .kan-fchip__label { min-height: 44px; } }
/* ◂ P3 */

/* P4 ▸ zoznam príjemcov výzvy */
.kan-recipients__list-link { margin: 0; font-size: var(--fs-small); }
/* the list is read in full: cells wrap (like the club picker, an exception to D5 for this list only) */
.kan-admin .kan-atable .kan-recipients__cell { white-space: normal; overflow-wrap: break-word; vertical-align: top; }
.kan-recipients__line { display: block; }
.kan-recipients__pager { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin-top: var(--space-4); font-size: var(--fs-small); color: var(--text-body); }
/* ◂ P4 */

/* PODPORA SKOLY ▸ (16. 10. 2026) the dialogs of a line item and of a pupil added by hand */
.kan-schoolline-form { display: grid; gap: var(--space-3); }
.kan-schoolline-form__pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3); }
@media (max-width: 480px) { .kan-schoolline-form__pair { grid-template-columns: minmax(0, 1fr); } }
/* ◂ PODPORA SKOLY */
