/* ucto.jhds.cz — vlastní doladění UI MyInvoice
 * ---------------------------------------------------------------------------
 * Nasazeno 2026-09-03. Injektuje nginx (sub_filter) do web/dist/index.html.
 * Soubor leží MIMO strom aplikace, takže ho upgrade MyInvoice nesmaže.
 *
 * PROBLÉM
 *   Seznam vydaných faktur je seskupený po měsících a KAŽDÝ měsíc je vlastní
 *   <table> (proto se hlavička opakuje). Tabulka nemá zadané table-layout,
 *   takže platí default `auto` = šířky sloupců se počítají z obsahu TÉ
 *   konkrétní tabulky. Každý měsíc má jiný nejdelší název klienta, takže
 *   sloupce TYP / DUZP / SPLATNOST / K ÚHRADĚ / STAV skončí v každém měsíci
 *   na jiné x-souřadnici.
 *
 * ŘEŠENÍ
 *   table-layout: fixed + pevné šířky → šířky přestanou záviset na obsahu
 *   a všechny měsíční tabulky se srovnají do jedné mřížky.
 *
 * ZAMĚŘENÍ (důležité!)
 *   Třída .table-sticky-first je v aplikaci na 35 tabulkách v 19 komponentách
 *   s IDENTICKÝM řetězcem tříd. Globální pravidlo by rozbilo zbylých 34.
 *   Rozlišovacím znakem je počet sloupců:
 *       vydané faktury  = 8 th
 *       přijaté faktury = 9 th   -> nedotčeny
 *   Proto :has(th:nth-child(8):last-child) + kontrola hlavičky w-32.
 *
 * FAIL-SAFE
 *   Kdyby upstream markup přestavěl, selektor přestane sedět a seznam se
 *   vrátí přesně k původnímu chování. Nic se nerozbije.
 *
 * ZPĚTNÝ CHOD
 *   Odstranit z vhostu bloky `location = /custom/ui.css` a `sub_filter`,
 *   nginx -t && systemctl reload nginx.
 * ---------------------------------------------------------------------------
 */

/* Pozn.: pravidla schválně NEJSOU v @layer. Tailwind v4 dává utility do
   cascade layers a nevrstvené CSS má nad vrstveným přednost bez ohledu na
   specificitu — proto tohle spolehlivě přebije utilitu `w-32` na hlavičce. */

/* ─── Seznam VYDANÝCH faktur: srovnat sloupce napříč měsíci ─── */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) {
    table-layout: fixed;
    /* Pod tuhle šířku se tabulka nesmí smrsknout — kontejner má overflow-x:auto,
       takže se místo drcení sloupců odscrolluje doprava. */
    min-width: 64rem;
}

/* Šířky se u table-layout:fixed berou VÝHRADNĚ z prvního řádku (thead),
   buňky v tbody je už neovlivní — proto stačí nastavit th. */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(1) { width: 2.5rem; }  /* checkbox   */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(2) { width: 8rem;   }  /* Var. symbol */
/* 3 = KLIENT - ZAKÁZKA: šířku záměrně nezadávám. U fixed layoutu si jediný
   nedourčený sloupec vezme celý zbytek řádku — a je to ten jediný sloupec,
   kterému delší obsah opravdu prospěje. */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(4) { width: 7rem;   }  /* Typ        */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(5) { width: 9.5rem; }  /* DUZP / Vystaveno */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(6) { width: 8.5rem; }  /* Splatnost  */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(7) { width: 9.5rem; }  /* K úhradě   */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > thead > tr > th:nth-child(8) { width: 8.5rem; }  /* Stav       */

/* Dlouhý název klienta teď nesmí sloupec roztáhnout (fixed by ho nechal
   přetéct do sousedního) — ořízne se třemi tečkami. */
table.table-sticky-first:has(> thead > tr > th.w-32):has(> thead > tr > th:nth-child(8):last-child) > tbody > tr > td:nth-child(3) {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ─── Šířka aplikace: 1500 px, vycentrovaně ───────────────────────────────
 * Rozhodnutí Petra 2026-09-03: omezit CELÝ shell včetně horní lišty a menu,
 * ne jen obsahovou plochu.
 *
 * Cílí na kořenový <div> AppLayoutu (a AppShellu = přihlašovací obrazovka,
 * kde je to neškodné — obsah je tam vycentrovaný tak jako tak).
 *
 * Proč to nepotřebuje žádné pozadí navíc:
 *   `body` už má v aplikaci `background: var(--color-neutral-50)`, což je
 *   TÁŽ proměnná, kterou nese `bg-neutral-50` na shellu. Plocha po stranách
 *   tak splyne a v dark režimu se přebarví sama (`.dark` tu proměnnou
 *   předefinovává na #14121c). Žádná napevno zadaná barva = žádná díra.
 *
 * Sticky/fixed prvky to nerozbije:
 *   - horní lišta je `sticky top-0` → sticky se váže na scroll kontejner,
 *     ne na šířku; zůstane přilepená, jen bude široká 1500 px (to je záměr)
 *   - modály a overlaye jsou `fixed inset-0` → viewport-relativní,
 *     zůstanou přes celou obrazovku, jak mají
 */
div.min-h-screen.flex.flex-col.bg-neutral-50 {
    max-width: 1500px;
    margin-inline: auto;
}
