/* Nowy widok sprawy (etap 1 redesignu, 2026-10-17) — paleta ciepła neutralna.
   WSZYSTKIE reguły pod .ui-v2 (klasa na stałe na <body> w index.html; dawniej przełącznik widoku — stary widok v1
   usunięty 06.11.2026). Kolory i skala tylko przez tokeny poniżej; kontrast par tekstu pilnuje
   tests/test_case_view_tokens.py (≥ 4,5:1). Fonty lokalne (OFL, frontend/fonts/OFL.txt), bez Google Fonts. */

/* --- Fonty (hostowane lokalnie; latin + latin-ext — polskie znaki są w latin-ext) -----------------------------
   Wersja w NAZWIE pliku (.v1.woff2) — przy wymianie fontu nowa nazwa (.v2) i zmiana tutaj; CSS ma ?v=<build> od
   serwera, więc nowe adresy docierają przy wdrożeniu. Bez <style> i bez JS: zgodne z CSP bez 'unsafe-inline'. */
@font-face { font-family: 'Source Sans 3'; font-style: normal; font-weight: 400; font-display: swap;
    src: url('/fonts/source-sans-3-latin-400-normal.v1.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Source Sans 3'; font-style: normal; font-weight: 400; font-display: swap;
    src: url('/fonts/source-sans-3-latin-ext-400-normal.v1.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Source Sans 3'; font-style: normal; font-weight: 600; font-display: swap;
    src: url('/fonts/source-sans-3-latin-600-normal.v1.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Source Sans 3'; font-style: normal; font-weight: 600; font-display: swap;
    src: url('/fonts/source-sans-3-latin-ext-600-normal.v1.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Source Serif 4'; font-style: normal; font-weight: 400; font-display: swap;
    src: url('/fonts/source-serif-4-latin-400-normal.v1.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Source Serif 4'; font-style: normal; font-weight: 400; font-display: swap;
    src: url('/fonts/source-serif-4-latin-ext-400-normal.v1.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Source Serif 4'; font-style: normal; font-weight: 600; font-display: swap;
    src: url('/fonts/source-serif-4-latin-600-normal.v1.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: 'Source Serif 4'; font-style: normal; font-weight: 600; font-display: swap;
    src: url('/fonts/source-serif-4-latin-ext-600-normal.v1.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }

/* --- Tokeny ----------------------------------------------------------------------------------------------------- */
body.ui-v2 {
    /* kolory — pary tekst / tło sprawdzane w teście kontrastu (tests/test_case_view_tokens.py) */
    --cv-bg: #F7F6F3;
    --cv-surface: #FFFFFF;
    --cv-line: #E5E1DA;
    --cv-text: #232220;
    --cv-text-2: #625E58;
    --cv-accent: #2C6656;
    --cv-accent-bg: #EAF3F0;
    --cv-on-accent: #FFFFFF;
    --cv-warn-bg: #FBEBDD;
    --cv-warn-text: #6E3600;
    --cv-danger: #9A2F2F;
    --cv-danger-bg: #F8E7E5;
    --cv-hover: #EFEDE8;
    --cv-focus: #2C6656;

    /* typografia */
    --cv-font-ui: 'Source Sans 3', 'Segoe UI', system-ui, sans-serif;
    --cv-font-serif: 'Source Serif 4', Georgia, 'Times New Roman', serif;
    --cv-fs-12: 12px;
    --cv-fs-13: 13px;
    --cv-fs-14: 14px;
    --cv-fs-15: 15px;
    --cv-fs-17: 17px;
    --cv-fs-19: 19px;
    --cv-fs-22: 22px;
    --cv-lh: 1.45;

    /* odstępy (skala 4) i promienie */
    --cv-sp-1: 4px;
    --cv-sp-2: 8px;
    --cv-sp-3: 12px;
    --cv-sp-4: 16px;
    --cv-sp-5: 20px;
    --cv-sp-6: 24px;
    --cv-sp-8: 32px;
    --cv-r-sm: 4px;
    --cv-r: 6px;
    --cv-r-lg: 10px;
    --cv-r-pill: 999px;

    /* rozmiary celów (dostępność) */
    --cv-target: 32px;
    --cv-target-main: 40px;

    /* ikony */
    --cv-icon: 16px;
    --cv-icon-lg: 20px;
}

/* Wygląd tylko na trasie sprawy w nowym widoku (body.cv-case-route — UiVersion.apply); inne strony bez zmian */
body.cv-case-route {
    background: var(--cv-bg);
    color: var(--cv-text);
    font-family: var(--cv-font-ui);
    font-size: var(--cv-fs-14);
    line-height: var(--cv-lh);
}
body.cv-case-route .app-header { display: none; }

/* widoczny fokus wszędzie w nowym widoku */
body.ui-v2 .cv :focus-visible {
    outline: 2px solid var(--cv-focus);
    outline-offset: 2px;
}

/* ikona ze sprite'a (js/case-view/icons.js) */
body.ui-v2 .cv-icon {
    width: 1em;
    height: 1em;
    flex: none;
    vertical-align: -0.125em;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* --- Powłoka widoku sprawy ------------------------------------------------------------------------------------- */
body.ui-v2 .cv [hidden] { display: none !important; }
body.ui-v2 .cv-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
body.ui-v2 .cv-case { display: flex; flex-direction: column; height: 100vh; min-height: 0; overflow: hidden; }
body.ui-v2 .cv-error { padding-top: var(--cv-sp-8); display: flex; flex-direction: column; gap: var(--cv-sp-3); align-items: flex-start; }
body.ui-v2 .cv-loading { display: flex; justify-content: center; padding: var(--cv-sp-8); }

/* przyciski */
body.ui-v2 .cv-btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--cv-sp-2);
    min-height: var(--cv-target); padding: 0 var(--cv-sp-3); font: 600 var(--cv-fs-13)/1 var(--cv-font-ui);
    color: var(--cv-text); background: var(--cv-surface); border: 1px solid var(--cv-line); border-radius: var(--cv-r);
    cursor: pointer; text-decoration: none; white-space: nowrap; }
body.ui-v2 .cv-btn:hover { background: var(--cv-hover); }
body.ui-v2 .cv-btn-ghost { background: transparent; border-color: transparent; }
body.ui-v2 .cv-btn-ghost:hover { background: var(--cv-hover); }
body.ui-v2 .cv-btn-icon { width: var(--cv-target); padding: 0; }
body.ui-v2 .cv-btn-primary { min-height: var(--cv-target-main); color: var(--cv-on-accent); background: var(--cv-accent);
    border-color: var(--cv-accent); }
body.ui-v2 .cv-btn-primary:hover { background: var(--cv-accent); filter: brightness(1.08); }
body.ui-v2 .cv-btn:disabled { opacity: 0.55; cursor: default; filter: none; }
body.ui-v2 .cv-btn .cv-icon { font-size: var(--cv-icon); }

/* nagłówek */
body.ui-v2 .cv-header { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center;
    gap: var(--cv-sp-4); height: 56px; flex: none; padding: 0 var(--cv-sp-4); background: var(--cv-surface);
    border-bottom: 1px solid var(--cv-line); }
body.ui-v2 .cv-header-left { display: flex; align-items: center; gap: var(--cv-sp-4); min-width: 0; }
body.ui-v2 .cv-product { font: 600 var(--cv-fs-17)/1 var(--cv-font-serif); color: var(--cv-text); text-decoration: none;
    flex: none; }
body.ui-v2 .cv-crumbs { display: flex; align-items: center; gap: var(--cv-sp-2); min-width: 0; font-size: var(--cv-fs-14); }
body.ui-v2 .cv-crumbs a { color: var(--cv-text-2); text-decoration: none; flex: none; }
body.ui-v2 .cv-crumbs a:hover { color: var(--cv-text); text-decoration: underline; }
body.ui-v2 .cv-crumbs-sep { color: var(--cv-text-2); }
body.ui-v2 .cv-case-title { margin: 0; font: 600 var(--cv-fs-17)/1.3 var(--cv-font-serif); color: var(--cv-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
body.ui-v2 .cv-view-switch { display: inline-flex; padding: 3px; gap: 2px; background: var(--cv-bg);
    border: 1px solid var(--cv-line); border-radius: var(--cv-r-lg); }
body.ui-v2 .cv-view-btn { min-height: var(--cv-target); padding: 0 var(--cv-sp-4); font: 600 var(--cv-fs-13)/1 var(--cv-font-ui);
    color: var(--cv-text-2); background: transparent; border: none; border-radius: var(--cv-r); cursor: pointer; }
body.ui-v2 .cv-view-btn[aria-pressed="true"] { color: var(--cv-text); background: var(--cv-surface);
    box-shadow: 0 1px 2px rgba(35, 34, 32, 0.12); }
body.ui-v2 .cv-header-right { display: flex; align-items: center; justify-content: flex-end; gap: var(--cv-sp-1); min-width: 0; }
body.ui-v2 .cv-user-toggle { max-width: 220px; overflow: hidden; text-overflow: ellipsis; }

/* menu rozwijane (case-header.js, user-menu.js) */
body.ui-v2 .cv-case-menu, body.ui-v2 .cv-user-menu, body.ui-v2 .cv-upload-menu-wrap { position: relative; }
body.ui-v2 .cv-upload-menu-wrap .cv-menu { min-width: 180px; }
body.ui-v2 .cv-menu { position: absolute; top: calc(100% + 4px); z-index: 80; min-width: 230px; padding: var(--cv-sp-1);
    background: var(--cv-surface); border: 1px solid var(--cv-line); border-radius: var(--cv-r-lg);
    box-shadow: 0 8px 24px rgba(35, 34, 32, 0.14); }
body.ui-v2 .cv-menu-right { right: 0; }
body.ui-v2 .cv-menu-group { padding: var(--cv-sp-2) var(--cv-sp-3) var(--cv-sp-1); font-size: var(--cv-fs-12);
    color: var(--cv-text-2); }
body.ui-v2 .cv-menu-item { display: flex; align-items: center; gap: var(--cv-sp-2); width: 100%; min-height: var(--cv-target);
    padding: 0 var(--cv-sp-3); font: 400 var(--cv-fs-14)/1.2 var(--cv-font-ui); color: var(--cv-text); text-align: left;
    text-decoration: none; background: none; border: none; border-radius: var(--cv-r); cursor: pointer; }
body.ui-v2 .cv-menu-item:hover, body.ui-v2 .cv-menu-item:focus-visible { background: var(--cv-hover); }
body.ui-v2 .cv-menu-item-danger { color: var(--cv-danger); }

/* siatka: akta | czat | miejsce na panel pisma */
body.ui-v2 .cv-body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(380px, 42%) minmax(0, 1fr); }
body.ui-v2 .cv-docs { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden;
    background: var(--cv-surface); border-right: 1px solid var(--cv-line); }
body.ui-v2 .cv-chat { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: var(--cv-bg); }
body.ui-v2 .cv-analysis { flex: 1; min-height: 0; overflow: auto; }

/* kolumna czatu */
body.ui-v2 .cv-chat .chat-messages { background: var(--cv-bg); padding: var(--cv-sp-5) var(--cv-sp-6); }
body.ui-v2 .cv-chat-form { flex: none; display: flex; flex-direction: column; gap: var(--cv-sp-2);
    margin: 0 var(--cv-sp-6) var(--cv-sp-2); padding: var(--cv-sp-3); background: var(--cv-surface);
    border: 1px solid var(--cv-line); border-radius: var(--cv-r-lg); }
body.ui-v2 .cv-chat-form:focus-within { border-color: var(--cv-accent); }
body.ui-v2 .cv-chat-form .chat-input { width: 100%; border: none; background: transparent; padding: var(--cv-sp-1);
    font: 400 var(--cv-fs-15)/1.45 var(--cv-font-ui); color: var(--cv-text); min-height: 44px; outline: none; }
body.ui-v2 .cv-chat-form-row { display: flex; justify-content: space-between; align-items: center; gap: var(--cv-sp-2); }
body.ui-v2 .cv-chat-hint { margin: 0 var(--cv-sp-6) var(--cv-sp-3); font-size: var(--cv-fs-13); color: var(--cv-text-2); }
body.ui-v2 .cv-chat .chat-resume-bar { margin: 0 var(--cv-sp-6) var(--cv-sp-2); background: var(--cv-warn-bg); border-color: transparent;
    color: var(--cv-warn-text); font-size: var(--cv-fs-13); }

/* --- Tabela akt (case-view/docs-table.js) ---------------------------------------------------------------------- */
body.ui-v2 .cv-body.cv-docs-wide { grid-template-columns: minmax(0, 1fr) minmax(360px, 32%); }
body.ui-v2 .cv-docs-table { display: flex; flex-direction: column; min-height: 0; }
body.ui-v2 .cv-docs-head { flex: none; display: flex; flex-direction: column; gap: var(--cv-sp-2);
    padding: var(--cv-sp-3) var(--cv-sp-4) var(--cv-sp-2); border-bottom: 1px solid var(--cv-line); }
body.ui-v2 .cv-docs-titlebar { display: flex; align-items: center; gap: var(--cv-sp-3); }
body.ui-v2 .cv-docs-title { margin: 0; font: 600 var(--cv-fs-15)/1.2 var(--cv-font-ui); color: var(--cv-text); }
body.ui-v2 .cv-docs-heading { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
body.ui-v2 .cv-docs-pending { font-size: var(--cv-fs-12); color: var(--cv-warn-text); display: inline-flex; align-items: center;
    gap: 4px; white-space: nowrap; }
body.ui-v2 .cv-docs-count { font-size: var(--cv-fs-12); color: var(--cv-text-2); white-space: nowrap; overflow: hidden;
    text-overflow: ellipsis; }
body.ui-v2 #doc-upload-label { flex: none; }
body.ui-v2 .cv-docs-note { display: flex; align-items: center; justify-content: space-between; gap: var(--cv-sp-3);
    min-height: 40px; padding: var(--cv-sp-1) var(--cv-sp-1) var(--cv-sp-1) var(--cv-sp-3); font-size: var(--cv-fs-13);
    line-height: 1.4; color: var(--cv-text); background: var(--cv-bg); border: 1px solid var(--cv-line);
    border-radius: var(--cv-r); }
/* jedna linia: tekst ucięty wielokropkiem (pełny w dymku), przycisk nie zawija się */
body.ui-v2 .cv-docs-note-text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.ui-v2 .cv-docs-note-text .cv-icon { margin-right: var(--cv-sp-1); vertical-align: -2px; }
body.ui-v2 .cv-docs-note .cv-btn { flex: none; }
body.ui-v2 .cv-btn-compact { min-height: var(--cv-target); }
body.ui-v2 .cv-docs-fix { background: var(--cv-warn-bg); border-color: transparent; color: var(--cv-warn-text); }
/* pliki uszkodzone u źródła — poza główną listą, pasek z „Pokaż” / „Ukryj” (02.11.2026) */
body.ui-v2 .cv-docs-corrupt { min-height: 32px; padding-top: 0; padding-bottom: 0; background: var(--cv-danger-bg);
    border-color: transparent; color: var(--cv-danger); }   /* zwarty: razem z „Popraw odczyt” zostaje ≥ 10 wierszy akt przy 768 px */
body.ui-v2 .cv-docs-corrupt .cv-btn { min-height: 28px; }
body.ui-v2 .cv-docs-corrupt .cv-btn[aria-pressed="true"] { color: var(--cv-accent); background: var(--cv-accent-bg);
    border-color: var(--cv-accent); }
/* filtry w jednym rzędzie; gdy się nie mieszczą — przewijanie poziome wewnątrz paska (cienki pasek) */
body.ui-v2 .cv-docs-tools { display: flex; flex-wrap: nowrap; align-items: center; gap: var(--cv-sp-2); overflow-x: auto;
    scrollbar-width: thin; padding-bottom: 1px; }
body.ui-v2 .cv-docs-tools > * { flex: none; }
body.ui-v2 .cv-docs-tools > .cv-search { flex: 1 0 170px; }
body.ui-v2 .cv-search { flex: 1 1 200px; display: flex; align-items: center; gap: var(--cv-sp-2); min-height: var(--cv-target);
    padding: 0 var(--cv-sp-2); background: var(--cv-surface); border: 1px solid var(--cv-line); border-radius: var(--cv-r);
    color: var(--cv-text-2); }
body.ui-v2 .cv-search:focus-within { border-color: var(--cv-accent); }
body.ui-v2 .cv-search input { flex: 1; min-width: 0; border: none; outline: none; background: transparent;
    font: 400 var(--cv-fs-14)/1.3 var(--cv-font-ui); color: var(--cv-text); }
body.ui-v2 .cv-select { min-height: var(--cv-target); max-width: 220px; padding: 0 var(--cv-sp-2);
    font: 400 var(--cv-fs-13)/1 var(--cv-font-ui); color: var(--cv-text); background: var(--cv-surface);
    border: 1px solid var(--cv-line); border-radius: var(--cv-r); }
body.ui-v2 .cv-chip { min-height: var(--cv-target); padding: 0 var(--cv-sp-3); white-space: nowrap; font: 600 var(--cv-fs-12)/1 var(--cv-font-ui);
    color: var(--cv-text-2); background: var(--cv-surface); border: 1px solid var(--cv-line); border-radius: var(--cv-r-pill);
    cursor: pointer; }
body.ui-v2 .cv-chip[aria-pressed="true"] { color: var(--cv-accent); background: var(--cv-accent-bg); border-color: var(--cv-accent); }
body.ui-v2 .cv-check { display: inline-flex; align-items: center; gap: var(--cv-sp-2); min-height: var(--cv-target);
    font-size: var(--cv-fs-13); color: var(--cv-text-2); cursor: pointer; }
/* postęp wgrywania (09.11.2026; był mały szary napis): tekst i pasek w kolorze akcentu nad tabelą akt; zakończenie — ten
   sam kolor, błąd — kolor ostrzeżenia o błędzie; nagranie w transkrypcji — pasek bez postępu (przesuwający się odcinek) */
body.ui-v2 .cv-docs-progress { margin: var(--cv-sp-2) 0 0; padding: var(--cv-sp-2) var(--cv-sp-3);
    background: var(--cv-accent-bg); border: 1px solid var(--cv-accent); border-radius: var(--cv-r); }
body.ui-v2 .cv-docs-progress[hidden] { display: none; }
body.ui-v2 .cv-upload-bar-text { font-size: var(--cv-fs-13); font-weight: 600; color: var(--cv-accent);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.ui-v2 .cv-upload-bar-track { position: relative; height: 6px; margin-top: var(--cv-sp-1); overflow: hidden;
    background: var(--cv-surface); border-radius: 3px; }
body.ui-v2 .cv-upload-bar-fill { height: 100%; width: 0; background: var(--cv-accent); border-radius: 3px;
    transition: width 0.2s; }
/* stan końcowy (zakończono / błąd) od razu w docelowej szerokości — przejście 0,2 s zostawiało na zrzucie pasek ~75 % */
body.ui-v2 .cv-docs-progress.is-done .cv-upload-bar-fill,
body.ui-v2 .cv-docs-progress.is-error .cv-upload-bar-fill { transition: none; }
body.ui-v2 .cv-docs-progress.is-indeterminate .cv-upload-bar-fill { width: 30%; animation: cv-upload-slide 1.4s linear infinite; }
@keyframes cv-upload-slide { from { transform: translateX(-100%); } to { transform: translateX(340%); } }
body.ui-v2 .cv-docs-progress.is-error { background: var(--cv-danger-bg); border-color: var(--cv-danger); }
body.ui-v2 .cv-docs-progress.is-error .cv-upload-bar-text { color: var(--cv-danger); white-space: normal; }
body.ui-v2 .cv-docs-progress.is-error .cv-upload-bar-fill { background: var(--cv-danger); }
@media (prefers-reduced-motion: reduce) {
    body.ui-v2 .cv-docs-progress.is-indeterminate .cv-upload-bar-fill { animation: none; width: 100%; opacity: 0.4; }
}
/* krok wgrywania (DocsTable.confirmUpload) */
body.ui-v2 .cv-upload-files { margin: 0 0 var(--cv-sp-3); padding-left: 0; max-height: 260px; overflow: auto;
    font-size: var(--cv-fs-13); color: var(--cv-text); overflow-wrap: anywhere; }
body.ui-v2 .cv-upload-checking { margin: 0 0 var(--cv-sp-3); font-size: var(--cv-fs-13); color: var(--cv-text-2); }
body.ui-v2 .cv-upload-files .upload-file-note { color: var(--cv-text-2); }
body.ui-v2 .cv-upload-pin { color: var(--cv-text); font-size: var(--cv-fs-14); }
body.ui-v2 .cv-upload-help { margin: var(--cv-sp-1) 0 var(--cv-sp-3); font-size: var(--cv-fs-13); line-height: 1.45; color: var(--cv-text-2); }

body.ui-v2 .cv-table { flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative;
    --cv-cols: 16px 28px minmax(0, 1fr) 112px 136px 32px; }   /* Odczyt 136 px: „błąd przetwarzania” z ikoną ma 132 px (pomiar 29.10) */
/* suma minimów + odstępy < DocsTable WIDE_MIN_PX (880) — kolumny nie wychodzą poza akta */
body.ui-v2 .cv-table--wide { --cv-cols: 16px 28px minmax(150px, 1.5fr) minmax(100px, 0.8fr) minmax(80px, 1fr) minmax(80px, 1fr) 136px 84px 40px; }
/* wąski stan akt (< DocsTable COMPACT_MIN_PX): bez kolumny Typ — typ w dymku tytułu; po regule ekranu ≤ 860 px */
body.ui-v2 .cv-table.cv-table--narrow { --cv-cols: 16px 28px minmax(0, 1fr) 112px 40px; }
body.ui-v2 .cv-table-head, body.ui-v2 .cv-tr { display: grid; grid-template-columns: var(--cv-cols); align-items: center;
    column-gap: var(--cv-sp-3); padding: 0 var(--cv-sp-4); }
body.ui-v2 .cv-table-head { flex: none; min-height: 32px; border-bottom: 1px solid var(--cv-line); background: var(--cv-surface);
    font-size: var(--cv-fs-12); color: var(--cv-text-2); }
body.ui-v2 .cv-th-btn { display: inline-flex; align-items: center; gap: var(--cv-sp-1); min-height: var(--cv-target); padding: 0;
    font: 600 var(--cv-fs-12)/1 var(--cv-font-ui); color: var(--cv-text-2); background: none; border: none; cursor: pointer; }
body.ui-v2 .cv-th[aria-sort="ascending"] .cv-th-btn, body.ui-v2 .cv-th[aria-sort="descending"] .cv-th-btn { color: var(--cv-text); }
body.ui-v2 .cv-sort-asc { transform: rotate(180deg); }
body.ui-v2 .cv-table-body { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; outline: none; }
body.ui-v2 .cv-table-body:focus-visible { box-shadow: inset 0 0 0 2px var(--cv-focus); }
body.ui-v2 .cv-table-spacer { position: relative; }
body.ui-v2 .cv-table-window { position: absolute; top: 0; left: 0; right: 0; will-change: transform; }
body.ui-v2 .cv-tr { height: 44px; border-bottom: 1px solid var(--cv-line); cursor: pointer; }
body.ui-v2 .cv-tr:hover { background: var(--cv-hover); }
body.ui-v2 .cv-tr[aria-selected="true"] { background: var(--cv-accent-bg); box-shadow: inset 3px 0 0 var(--cv-accent); }
body.ui-v2 .cv-td { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--cv-fs-13);
    color: var(--cv-text); }
body.ui-v2 .cv-td-title { font-weight: 600; overflow: hidden; text-overflow: ellipsis; font-size: var(--cv-fs-14); line-height: 1.3; }
body.ui-v2 .cv-td-sub { overflow: hidden; text-overflow: ellipsis; font-size: var(--cv-fs-12); line-height: 1.3; color: var(--cv-text-2); }
body.ui-v2 .cv-td-muted, body.ui-v2 .cv-col-persons, body.ui-v2 .cv-col-topics, body.ui-v2 .cv-col-added { color: var(--cv-text-2); }
body.ui-v2 .cv-col-status { display: flex; align-items: center; gap: var(--cv-sp-2); }
/* przypięcie — osobna wąska kolumna przed tytułem, nie miesza się ze stanem odczytu */
body.ui-v2 .cv-col-pin { display: flex; justify-content: center; overflow: visible; }
/* „w rozmowie” (blok DOKUMENTY SPRAWY, GET /chat-block) — osobna wąska kolumna po przypięciu (D13, 2026-10-29) */
body.ui-v2 .cv-col-chat { display: flex; justify-content: center; overflow: visible; }
body.ui-v2 .cv-in-chat { color: var(--cv-accent); font-size: var(--cv-icon); }
body.ui-v2 .cv-docs-chat-all { color: var(--cv-text-2); background: var(--cv-accent-bg); border-color: transparent; }
body.ui-v2 .cv-docs-chat-all .cv-icon { margin-right: var(--cv-sp-1); vertical-align: -2px; color: var(--cv-accent); }
body.ui-v2 .cv-pin { color: var(--cv-accent); font-size: var(--cv-icon); }
/* menu wiersza (akcje dokumentu): przycisk widoczny przy wskazaniu / zaznaczeniu wiersza, lista zakotwiczona w komórce */
body.ui-v2 .cv-row-more { color: var(--cv-text-2); opacity: 0; }
body.ui-v2 .cv-tr:hover .cv-row-more, body.ui-v2 .cv-tr[aria-selected="true"] .cv-row-more, body.ui-v2 .cv-row-more:focus-visible,
body.ui-v2 .cv-row-more[aria-expanded="true"] { opacity: 1; }
/* wspólne menu wiersza — przy przycisku (position: fixed; wiersze są przerysowywane, komórka nie pomieści listy) */
body.ui-v2 .cv-row-menu-list { position: fixed; top: 0; left: 0; z-index: 90; }
body.ui-v2 .cv-in-chat { white-space: nowrap; }
/* ukryte duplikaty pod tabelą akt (06.11.2026) — jedna linia, rozwinięcie z listą przewijaną wewnątrz */
body.ui-v2 .cv-docs-hidden { flex: none; border-top: 1px solid var(--cv-line); font-size: var(--cv-fs-12); color: var(--cv-text-2); }
body.ui-v2 .cv-docs-hidden-toggle { display: flex; align-items: center; gap: var(--cv-sp-1); width: 100%; min-height: 32px;
    padding: 0 var(--cv-sp-2); background: none; border: 0; color: inherit; font: inherit; text-align: left; cursor: pointer; }
body.ui-v2 .cv-docs-hidden-toggle:hover { color: var(--cv-text); }
body.ui-v2 .cv-docs-hidden-toggle .cv-icon { flex: none; transition: transform .15s; }
body.ui-v2 .cv-docs-hidden-toggle[aria-expanded="false"] .cv-icon { transform: rotate(-90deg); }
body.ui-v2 .cv-docs-hidden-list { margin: 0; padding: 0 var(--cv-sp-2) var(--cv-sp-2); list-style: none; max-height: 30vh;
    overflow-y: auto; }
body.ui-v2 .cv-docs-hidden-item { display: flex; align-items: baseline; gap: var(--cv-sp-2); min-width: 0; padding: 2px 0; }
body.ui-v2 .cv-docs-hidden-name { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    padding: 0; background: none; border: 0; font: inherit; color: var(--cv-accent); text-align: left; cursor: pointer; }
body.ui-v2 .cv-docs-hidden-name:hover { text-decoration: underline; }
body.ui-v2 .cv-docs-hidden-date { flex: none; }
body.ui-v2 .cv-docs-hidden-keeper { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.ui-v2 .cv-table-empty { padding: var(--cv-sp-8) var(--cv-sp-4); text-align: center; font-size: var(--cv-fs-13);
    color: var(--cv-text-2); }

/* odznaki stanu — wygląd odznaki (tło, bez obramowania i kursora przycisku); znaczenie niesie tekst, nie tylko kolor */
body.ui-v2 .cv-badge { display: inline-flex; align-items: center; gap: var(--cv-sp-1); max-width: 100%; padding: 2px var(--cv-sp-2);
    font: 600 var(--cv-fs-12)/1.4 var(--cv-font-ui); border-radius: var(--cv-r-pill); overflow: hidden; text-overflow: ellipsis;
    white-space: nowrap; cursor: inherit; }
body.ui-v2 .cv-badge-warn { color: var(--cv-warn-text); background: var(--cv-warn-bg); }
body.ui-v2 .cv-badge-error { color: var(--cv-danger); background: var(--cv-danger-bg); }
body.ui-v2 .cv-badge-progress, body.ui-v2 .cv-badge-info { color: var(--cv-accent); background: var(--cv-accent-bg); }
body.ui-v2 .cv-badge-muted { color: var(--cv-text-2); background: var(--cv-hover); }

/* --- Czat i elementy starszych komponentów w nowym widoku ------------------------------------------------------
   Komponenty wspólne z dawnym widokiem (chat.js, event-dates.js, client-bar.js, deep-analysis-view.js) korzystają ze
   zmiennych --color-* — także w stylach inline. Na trasie sprawy w nowym widoku mapujemy je na tokeny v2, więc wygląd
   zmienia się bez zmian w tych plikach; w starym widoku i na innych stronach zmienne zostają bez zmian. */
body.cv-case-route {
    --color-bg: var(--cv-bg);
    --color-surface: var(--cv-surface);
    --color-border: var(--cv-line);
    --color-text: var(--cv-text);
    --color-text-secondary: var(--cv-text-2);
    --color-primary: var(--cv-accent);
    --color-primary-light: var(--cv-accent);
    --color-accent: var(--cv-accent);
    --color-accent-light: var(--cv-hover);
    --color-success: var(--cv-accent);
    --color-danger: var(--cv-danger);
    --color-warning: var(--cv-warn-text);
    --color-chat-user: var(--cv-hover);
    --color-chat-assistant: var(--cv-surface);
    --radius: var(--cv-r);
}
body.cv-case-route :is(h1, h2, h3, h4, .empty-state-title) { font-family: var(--cv-font-serif); }
body.cv-case-route .btn { font-family: var(--cv-font-ui); }

body.ui-v2 .cv-chat .chat-message { max-width: min(760px, 92%); }
body.ui-v2 .cv-chat .chat-bubble { font: 400 var(--cv-fs-15)/1.6 var(--cv-font-ui); color: var(--cv-text); padding: var(--cv-sp-3) var(--cv-sp-4);
    border-radius: var(--cv-r-lg); }
body.ui-v2 .cv-chat .chat-message.assistant .chat-bubble { border: 1px solid var(--cv-line); border-bottom-left-radius: var(--cv-r-sm); }
body.ui-v2 .cv-chat .chat-message.user .chat-bubble { background: var(--cv-hover); border-bottom-right-radius: var(--cv-r-sm); }
body.ui-v2 .cv-chat .chat-bubble :is(h1, h2, h3) { font-family: var(--cv-font-serif); color: var(--cv-text); }
body.ui-v2 .cv-chat .chat-notice .chat-bubble { display: flex; gap: var(--cv-sp-2); align-items: flex-start; background: var(--cv-warn-bg);
    color: var(--cv-warn-text); border-color: transparent; font-size: var(--cv-fs-14); }
body.ui-v2 .cv-chat .chat-notice .cv-icon { margin-top: 4px; }
body.ui-v2 .cv-chat .chat-message-meta { font-size: var(--cv-fs-12); color: var(--cv-text-2); }
body.ui-v2 .cv-chat .source-tag { font: 600 var(--cv-fs-12)/1.4 var(--cv-font-ui); border-radius: var(--cv-r-pill); }
body.ui-v2 .cv-chat .verification-log { font-size: var(--cv-fs-13); gap: var(--cv-sp-1); }
body.ui-v2 .cv-chat .verification-step { display: flex; gap: var(--cv-sp-2); align-items: flex-start; }
body.ui-v2 .cv-chat .verification-step .cv-icon { margin-top: 3px; }
body.ui-v2 .cv-chat .verification-step-done .cv-icon { color: var(--cv-accent); }
body.ui-v2 .cv-chat .verification-step-warning { color: var(--cv-warn-text); }
body.ui-v2 .cv-chat .continue-bar { background: var(--cv-warn-bg) !important; border-color: transparent !important; color: var(--cv-warn-text); }
body.ui-v2 .cv-chat .chat-action { font-size: var(--cv-fs-13); }
body.ui-v2 .cv-chat .letter-check { background: var(--cv-surface); border-color: var(--cv-line); }
body.ui-v2 .cv-chat .letter-check-item { background: var(--cv-warn-bg); border-left-color: var(--cv-warn-text); }

/* paski „Reprezentujesz” i „Data zdarzenia” nad rozmową */
body.ui-v2 .cv-chat .event-dates-bar { padding: 0 var(--cv-sp-6); font-size: var(--cv-fs-13); }
body.ui-v2 .cv-chat #client-bar { padding-top: var(--cv-sp-3); }
body.ui-v2 .cv-chat .event-dates-chip { display: flex; align-items: center; gap: var(--cv-sp-1); margin: var(--cv-sp-1) 0; font-size: var(--cv-fs-13);
    color: var(--cv-text-2); }
body.ui-v2 .cv-chat .event-dates-link { display: inline-flex; align-items: center; gap: var(--cv-sp-1); min-height: 28px;
    font: 600 var(--cv-fs-13)/1 var(--cv-font-ui); color: var(--cv-accent); }
body.ui-v2 .cv-chat .event-dates-proposal { background: var(--cv-surface); border: 1px solid var(--cv-line);
    border-left: 3px solid var(--cv-accent); border-radius: var(--cv-r); padding: var(--cv-sp-2) var(--cv-sp-3); }

/* --- Siatka: akta | czat | panel pisma (case-view/letter-panel.js, krok 4 panelu pisma 2026-10-22) -------------- */
/* Naraz szeroki jest tylko JEDEN panel boczny (case-view-v2.js::setPane): cv-pane-letter — pismo szerokie, akta
   zwinięte do paska z licznikami; cv-pane-docs — akta szerokie, pismo zwinięte do paska „Pismo: tytuł”; bez klasy —
   panel pisma zamknięty, dwa panele jak w etapie 1. Czat (kolumna środkowa) zawsze widoczny; przy 1366 px: panel 520,
   czat ≥ 640 w obu stanach. */
body.ui-v2 .cv-rail { display: none; flex-direction: column; align-items: center; gap: var(--cv-sp-2); padding: var(--cv-sp-3) 0;
    font: 600 var(--cv-fs-12)/1 var(--cv-font-ui); color: var(--cv-text-2); background: var(--cv-surface); border: none;
    cursor: pointer; min-width: 0; overflow: hidden; }
body.ui-v2 .cv-rail:hover { background: var(--cv-hover); color: var(--cv-text); }
body.ui-v2 .cv-rail .cv-icon { font-size: var(--cv-icon-lg); flex: none; }
body.ui-v2 .cv-rail span { writing-mode: vertical-rl; white-space: nowrap; }
body.ui-v2 .cv-rail-label { max-height: 60vh; overflow: hidden; text-overflow: ellipsis; }
body.ui-v2 .cv-rail-count { font-weight: 400; }
body.ui-v2 .cv-rail-fix { color: var(--cv-warn-text); font-weight: 400; }
body.ui-v2 .cv-docs-rail { border-right: 1px solid var(--cv-line); }
body.ui-v2 .cv-letter-rail { border-left: 1px solid var(--cv-line); }
body.ui-v2 .cv-letter-slot { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden;
    background: var(--cv-surface); border-left: 1px solid var(--cv-line); }
body.ui-v2 .cv-body.cv-pane-letter { grid-template-columns: 44px minmax(0, 1fr) minmax(520px, 38%); }
body.ui-v2 .cv-body.cv-pane-letter .cv-docs { display: none; }
body.ui-v2 .cv-body.cv-pane-letter .cv-docs-rail { display: flex; }
body.ui-v2 .cv-body.cv-pane-docs { grid-template-columns: minmax(380px, 42%) minmax(0, 1fr) 44px; }
body.ui-v2 .cv-body.cv-pane-docs .cv-letter-rail { display: flex; }

/* Szerokość panelu bocznego (09.11.2026, case-view/panel-resize.js): od 1024 px siatka czyta --cv-docs-w / --cv-letter-w
   (px, ustawione uchwytem i zapamiętane osobno dla akt i pisma); bez zmiennej — domyślna jak wyżej. Tryb pełnoekranowy
   akt (.cv-docs-wide, ⛶) ma wyższą specyficzność i własną siatkę. Poniżej 1024 px — układ jak dotąd, uchwyt ukryty. */
body.ui-v2 .cv-body { position: relative; }
@media (min-width: 1024px) {
    body.ui-v2 .cv-body { grid-template-columns: var(--cv-docs-w, minmax(380px, 42%)) minmax(0, 1fr); }
    body.ui-v2 .cv-body.cv-pane-docs { grid-template-columns: var(--cv-docs-w, minmax(380px, 42%)) minmax(0, 1fr) 44px; }
    body.ui-v2 .cv-body.cv-pane-letter { grid-template-columns: 44px minmax(0, 1fr) var(--cv-letter-w, minmax(520px, 38%)); }
}
/* uchwyt: pas 9 px na granicy panelu i czatu, linia w kolorze akcentu widoczna przy najechaniu, fokusie i przeciąganiu */
body.ui-v2 .cv-resize-handle { position: absolute; top: 0; bottom: 0; width: 9px; margin-left: -4px; z-index: 5;
    cursor: col-resize; touch-action: none; outline: none; }
body.ui-v2 .cv-resize-handle[hidden] { display: none; }
body.ui-v2 .cv-resize-handle::after { content: ''; position: absolute; top: 0; bottom: 0; left: 3px; width: 3px;
    background: var(--cv-accent); opacity: 0; transition: opacity 0.15s; }
body.ui-v2 .cv-resize-handle:hover::after, body.ui-v2 .cv-resize-handle:focus-visible::after,
body.ui-v2 .cv-resize-handle.is-dragging::after { opacity: 1; }
/* fokus z klawiatury: sama linia akcentu (pełna wysokość), bez prostokąta ogólnego stylu fokusu */
body.ui-v2 .cv-resize-handle:focus-visible { outline: none; box-shadow: none; }
body.ui-v2 .cv-body.cv-resizing { cursor: col-resize; user-select: none; }
body.ui-v2 .cv-body.cv-resizing iframe, body.ui-v2 .cv-body.cv-resizing embed { pointer-events: none; }
@media (max-width: 1023px) { body.ui-v2 .cv-resize-handle { display: none; } }

/* Przejście akta ↔ pismo (09.11.2026): pismo wjeżdża z prawej, akta wracają z lewej — 200 ms, tylko transform i
   opacity (panel od razu klikalny, fokus i przewijanie działają w trakcie); ograniczony ruch — bez animacji */
@keyframes cv-enter-right { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }
@keyframes cv-enter-left { from { opacity: 0; transform: translateX(-16px); } to { opacity: 1; transform: none; } }
body.ui-v2 .cv-enter-right { animation: cv-enter-right 200ms ease-out; }
body.ui-v2 .cv-enter-left { animation: cv-enter-left 200ms ease-out; }
@media (prefers-reduced-motion: reduce) {
    body.ui-v2 .cv-enter-right, body.ui-v2 .cv-enter-left { animation: none; }
}

/* panel pisma */
body.ui-v2 .cv-letter-panel { flex: 1; min-height: 0; display: flex; flex-direction: column; }
body.ui-v2 .cv-letter-head { flex: none; display: flex; align-items: flex-start; gap: var(--cv-sp-2);
    padding: var(--cv-sp-3) var(--cv-sp-3) var(--cv-sp-2) var(--cv-sp-5); border-bottom: 1px solid var(--cv-line); }
body.ui-v2 .cv-btn.cv-letter-back { display: none; }
body.ui-v2 .cv-letter-heading { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
body.ui-v2 .cv-letter-title-row { display: flex; align-items: center; gap: var(--cv-sp-1); min-width: 0; }
body.ui-v2 .cv-letter-title { margin: 0; font: 600 var(--cv-fs-17)/1.3 var(--cv-font-ui); color: var(--cv-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
body.ui-v2 .cv-letter-title-input { flex: 1; min-width: 0; font: 600 var(--cv-fs-17)/1.3 var(--cv-font-ui); color: var(--cv-text);
    padding: 2px var(--cv-sp-2); border: 1px solid var(--cv-accent); border-radius: var(--cv-r); background: var(--cv-surface); }
body.ui-v2 .cv-letter-meta { font-size: var(--cv-fs-13); color: var(--cv-text-2); }
body.ui-v2 .cv-letter-others { position: relative; flex: none; padding: var(--cv-sp-1) var(--cv-sp-4); border-bottom: 1px solid var(--cv-line); }
body.ui-v2 .cv-letter-others-menu { min-width: 320px; }
body.ui-v2 .cv-letter-others-item { flex-direction: column; align-items: flex-start; gap: 2px; text-align: left; }
body.ui-v2 .cv-letter-others-item[aria-checked="true"] .cv-letter-others-title { font-weight: 600; }
body.ui-v2 .cv-letter-others-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
body.ui-v2 .cv-letter-others-info { font-size: var(--cv-fs-12); color: var(--cv-text-2); }
body.ui-v2 .cv-letter-banner { flex: none; display: flex; align-items: center; justify-content: space-between; gap: var(--cv-sp-3);
    margin: var(--cv-sp-3) var(--cv-sp-5) 0; padding: var(--cv-sp-2) var(--cv-sp-3); background: var(--cv-warn-bg);
    color: var(--cv-warn-text); border-radius: var(--cv-r); font-size: var(--cv-fs-13); }
body.ui-v2 .cv-letter-body { flex: 1; min-height: 0; overflow: auto; padding: var(--cv-sp-4) var(--cv-sp-5) var(--cv-sp-5); }
body.ui-v2 .cv-letter-text { max-width: 68ch; font: 400 16px/1.6 var(--cv-font-serif); color: var(--cv-text); }
body.ui-v2 .cv-letter-text h1, body.ui-v2 .cv-letter-text h2, body.ui-v2 .cv-letter-text h3 { font-family: var(--cv-font-serif);
    font-weight: 600; line-height: 1.3; margin: 1.2em 0 0.5em; }
body.ui-v2 .cv-letter-text h1 { font-size: 1.25em; } body.ui-v2 .cv-letter-text h2 { font-size: 1.15em; }
body.ui-v2 .cv-letter-text h3 { font-size: 1.05em; }
body.ui-v2 .cv-letter-text p { margin: 0 0 0.8em; }
/* listy: margines na numerację (numery „1.” były ucinane przy lewej krawędzi panelu — 29.10) */
body.ui-v2 .cv-letter-text ol, body.ui-v2 .cv-letter-text ul { margin: 0 0 0.8em; padding-left: 1.8em; }
body.ui-v2 .cv-letter-text li { margin: 0.2em 0; }
body.ui-v2 .cv-letter-text li > p { margin: 0; }
/* pola „[…]” wyróżnione jak w .docx */
body.ui-v2 .cv-letter-text mark.cv-field { background: var(--cv-warn-bg); color: var(--cv-warn-text); padding: 0 2px;
    border-radius: 2px; }
/* pismo na żywo: meta z zegarem */
body.ui-v2 .cv-letter-live { display: inline-flex; align-items: center; gap: 4px; }
/* karta pisma w czacie (zamiast treści pisma w dymku, v2 w trybie pisma) */
body.ui-v2 .cv-letter-card { display: flex; align-items: center; gap: var(--cv-sp-3); margin: var(--cv-sp-2) 0;
    padding: var(--cv-sp-3) var(--cv-sp-4); border: 1px solid var(--cv-line); border-radius: var(--cv-r);
    background: var(--cv-bg); }
body.ui-v2 .cv-letter-card > .cv-icon { flex: none; font-size: var(--cv-icon-lg); color: var(--cv-text-2); }
body.ui-v2 .cv-letter-card-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
body.ui-v2 .cv-letter-card-title { font: 600 var(--cv-fs-15)/1.3 var(--cv-font-serif); color: var(--cv-text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.ui-v2 .cv-letter-card-meta { font-size: var(--cv-fs-13); color: var(--cv-text-2); }
body.ui-v2 .cv-letter-card-open { flex: none; }
body.ui-v2 .chat-bubble .chat-md > :first-child { margin-top: 0; }
body.ui-v2 .chat-bubble .chat-md > :last-child { margin-bottom: 0; }
/* pasek trybu serwisowego: na KAŻDEJ stronie (09.11.2026; dawniej tylko na trasie sprawy — od 02.11) pasek na całą
   szerokość u góry, który przesuwa treść w dół zamiast ją zasłaniać (pigułka pod nagłówkiem zasłaniała tytuł strony
   „Sprawy”, wcześniej tytuł sprawy i pole wyszukiwania akt); app.js::updateImpersonationBanner → body.cv-impersonated */
body.ui-v2 .impersonation-banner { top: 0; left: 0; right: 0; box-sizing: border-box; height: 36px; z-index: 70;
    max-width: none; padding: 0 var(--cv-sp-4); background: var(--cv-warn-bg); color: var(--cv-warn-text);
    border: none; border-bottom: 1px solid var(--cv-warn-text); border-radius: 0; box-shadow: none; }
body.ui-v2 .impersonation-banner span { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
body.ui-v2 .impersonation-banner .btn { background: var(--cv-warn-text); color: #FFFFFF; }
body.ui-v2.cv-case-route.cv-impersonated .cv-case { box-sizing: border-box; padding-top: 36px; }   /* bez marginesu: nie przewija strony */
/* poza sprawą: treść pod paskiem, przyklejony nagłówek strony tuż pod nim */
body.ui-v2.cv-impersonated:not(.cv-case-route) { padding-top: 36px; }
body.ui-v2.cv-impersonated:not(.cv-case-route) .app-header { top: 36px; }
body.ui-v2 .cv-letter-text table { border-collapse: collapse; font-size: 0.95em; }
body.ui-v2 .cv-letter-text td, body.ui-v2 .cv-letter-text th { border: 1px solid var(--cv-line); padding: 4px 8px; }
body.ui-v2 .cv-letter-error { margin-bottom: var(--cv-sp-3); font-size: var(--cv-fs-13); color: var(--cv-danger); }
body.ui-v2 .cv-letter-fields { max-width: 68ch; margin-top: var(--cv-sp-5); padding: var(--cv-sp-3) var(--cv-sp-4);
    background: var(--cv-bg); border: 1px solid var(--cv-line); border-radius: var(--cv-r); }
body.ui-v2 .cv-letter-fields h3 { margin: 0 0 var(--cv-sp-2); font: 600 var(--cv-fs-14)/1.3 var(--cv-font-ui); color: var(--cv-text); }
body.ui-v2 .cv-letter-fields ol { margin: 0; padding-left: 1.4em; font-size: var(--cv-fs-14); line-height: 1.5; }
body.ui-v2 .cv-letter-comment { max-width: 68ch; margin-top: var(--cv-sp-4); font-size: var(--cv-fs-14); }
body.ui-v2 .cv-letter-comment summary { cursor: pointer; font-weight: 600; color: var(--cv-text-2); }
body.ui-v2 .cv-letter-comment-text { margin-top: var(--cv-sp-2); line-height: 1.5; color: var(--cv-text); }
body.ui-v2 .cv-letter-foot { flex: none; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
    gap: var(--cv-sp-2); padding: var(--cv-sp-2) var(--cv-sp-3); border-top: 1px solid var(--cv-line); }
body.ui-v2 .cv-letter-nav { display: flex; align-items: center; gap: 2px; }
body.ui-v2 .cv-letter-version { position: relative; }
body.ui-v2 .cv-letter-version-menu { left: 0; }
body.ui-v2 .cv-letter-prev .cv-icon { transform: rotate(90deg); }      /* chevron bazowo w dół: ‹ i › */
body.ui-v2 .cv-letter-next .cv-icon { transform: rotate(-90deg); }
body.ui-v2 .cv-letter-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; }
body.ui-v2 .cv-letter-actions a.cv-btn { text-decoration: none; }
body.ui-v2 .cv-letters-btn { flex: none; }
body.ui-v2 .cv-header-middle { display: flex; align-items: center; gap: var(--cv-sp-2); justify-self: center; }
body.ui-v2 .cv-draft-note { display: flex; align-items: center; gap: var(--cv-sp-2); margin-top: 4px;
    font: 400 var(--cv-fs-13)/1.3 var(--cv-font-ui); color: var(--cv-text-2); }
body.ui-v2 .cv-draft-note .cv-btn { min-height: 28px; padding: 0 var(--cv-sp-2); }

/* wąski ekran: akta nad czatem, nagłówek w dwóch wierszach (pełne wsparcie telefonu — poza etapem 1) */
@media (max-width: 860px) {
    body.ui-v2 .cv-header { grid-template-columns: minmax(0, 1fr) auto; height: auto; row-gap: var(--cv-sp-2);
        padding: var(--cv-sp-2) var(--cv-sp-3); }
    body.ui-v2 .cv-header-middle { grid-column: 1 / -1; grid-row: 2; justify-self: start; }
    body.ui-v2 .cv-crumbs > a, body.ui-v2 .cv-crumbs-sep { display: none; }
    body.ui-v2 .cv-user-toggle { max-width: 120px; }
    body.ui-v2 .cv-body, body.ui-v2 .cv-body.cv-docs-wide, body.ui-v2 .cv-body.cv-pane-docs {
        grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(240px, 42%) minmax(0, 1fr); }
    body.ui-v2 .cv-body.cv-pane-docs .cv-letter-rail { display: none; }
    /* panel pisma na pełny ekran, przycisk „Wróć do czatu” w nagłówku panelu */
    body.ui-v2 .cv-body.cv-pane-letter { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); }
    body.ui-v2 .cv-body.cv-pane-letter .cv-docs-rail, body.ui-v2 .cv-body.cv-pane-letter .cv-chat { display: none; }
    body.ui-v2 .cv-body.cv-pane-letter .cv-letter-slot { border-left: none; }
    body.ui-v2 .cv-btn.cv-letter-back { display: inline-flex; }
    body.ui-v2 .cv-btn.cv-letter-close { display: none; }
    body.ui-v2 .cv-letter-head { padding-left: var(--cv-sp-3); }
    body.ui-v2 .cv-letter-banner, body.ui-v2 .cv-letter-body { margin-left: var(--cv-sp-3); margin-right: var(--cv-sp-3); }
    body.ui-v2 .cv-letter-body { padding-left: 0; padding-right: 0; }
    body.ui-v2 .cv-docs { border-right: none; border-bottom: 1px solid var(--cv-line); }
    body.ui-v2 #cv-docs-expand { display: none; }
    body.ui-v2 .cv-chat .chat-messages { padding: var(--cv-sp-3); }
    body.ui-v2 .cv-chat-form, body.ui-v2 .cv-chat-hint { margin-left: var(--cv-sp-3); margin-right: var(--cv-sp-3); }
    body.ui-v2 .cv-chat .event-dates-bar { padding: 0 var(--cv-sp-3); }
    body.ui-v2 .cv-table { --cv-cols: 16px 24px minmax(0, 1fr) 96px 100px 36px; }
    body.ui-v2 .cv-table-head, body.ui-v2 .cv-tr { column-gap: var(--cv-sp-2); padding: 0 var(--cv-sp-3); }
}
