/* =====================================================================
 * lib/vyzdoba.css — vzhled sezónních ozdob (lib/vyzdoba.js), společný pro IS, CRM a CMS.
 *
 * Do knihovny přešlo 24. 10. 2026 ze tří stejných kopií (IS css/sezona.css, CRM public/crm-vyzdoba.css,
 * CMS public/assets/admin-vyzdoba.css). Tady jsou ozdoby samy: barvy, tvary, animace, tmavý režim
 * a klid pro omezený pohyb. UMÍSTĚNÍ v kostře (posun dýně u loga, velikost a z-index pavučiny,
 * kdy schovat hřbitůvek ve sbaleném menu nebo na nízkém displeji, vzhled přepínače) má každé repo
 * ve svém CSS — kostry se liší a ozdoby je nesmí rozbít.
 *
 * Nic nepřekáží práci (pointer-events: none, Matěj 24. 10. 2026 i u ducha — zalézání pod kurzorem
 * poskakovalo). Stěnu ani barvu místnosti výzdoba nemění (23. 10. 2026, místnost musí zůstat poznat).
 * Tmavý režim: html[data-tema="tmave"] (IS, CRM); jiný přepínač si repo přemapuje proměnnými.
 * Rozměry jdou přebít proměnnými: --vyz-dyne-velikost, --vyz-pavucina-velikost, --vyz-pastvina-vyska.
 * Pravidlo (Matěj 24. 10. 2026): žádná animace přes pracovní plochu — jen pod menu, u loga a v hlavní liště.
 * ===================================================================== */
:root {
  --vyz-dyne: #f28c28; --vyz-dyne-bok: #e2711d; --vyz-dyne-oblicej: #5a2a06; --vyz-stonek: #4f7a2b;
  --vyz-silueta: #2b2433;              /* netopýři, hroby, pavouk */
  --vyz-vlakno: rgba(60, 60, 75, .55);
  --vyz-duch: #fff; --vyz-duch-stin: rgba(40, 30, 70, .18); --vyz-duch-oko: #2b2433;
  --vyz-dyne-velikost: 16px;
  --vyz-pavucina-velikost: 52px;
  --vyz-telo: #ffffff; --vyz-obrys: #c9c3d6; --vyz-oko-j: #2b2433; --vyz-noha-daleko: #ebe7f3;
  --vyz-kopyto-j: #b39ddb; --vyz-kopyto-daleko: #c9bcd9; --vyz-stin-telo: rgba(150, 130, 190, .14); --vyz-stin-zem: rgba(60, 80, 60, .12);
  --vyz-roh-a: #f6d77a; --vyz-roh-b: #e3ad3f;
  --vyz-hriva-1: #f7a8c8; --vyz-hriva-2: #c7a6f2; --vyz-hriva-3: #9fd8e8; --vyz-hriva-4: #b8e6b0;
  --vyz-trava: #8fb98a; --vyz-kopec: #cfdccb; --vyz-zlata: #f6c84b; --vyz-krem: #fff6d6;
  --vyz-pastvina-vyska: 112px;
}
html[data-tema="tmave"] {
  --vyz-silueta: #8d84a6;              /* v tmavém světlejší — tmavá silueta na tmavém panelu zmizela */
  --vyz-vlakno: rgba(220, 220, 235, .35);
  --vyz-duch: #eceaf4; --vyz-duch-stin: rgba(0, 0, 0, .45);
  --vyz-telo: #eceaf4; --vyz-obrys: #8d84a6; --vyz-oko-j: #1b1c22; --vyz-noha-daleko: #c9c4d6;
  --vyz-kopyto-j: #8d84a6; --vyz-kopyto-daleko: #6f6789; --vyz-stin-telo: rgba(20, 10, 40, .25); --vyz-stin-zem: rgba(0, 0, 0, .3);
  --vyz-trava: #5f8a5c; --vyz-kopec: #26332a;
}
.vyz-dyne, .vyz-hrbitov, .vyz-pavucina, .vyz-netopyri, .vyz-duch { pointer-events: none; }

/* Dýně u loga */
.vyz-dyne { display: inline-flex; transform: rotate(-8deg); }
.vyz-dyne svg { width: var(--vyz-dyne-velikost); height: var(--vyz-dyne-velikost); display: block; }
.vyz-dyne-stred { fill: var(--vyz-dyne); } .vyz-dyne-bok { fill: var(--vyz-dyne-bok); }
.vyz-oblicej { fill: var(--vyz-dyne-oblicej); } .vyz-stonek { stroke: var(--vyz-stonek); }

/* Hřbitůvek s duchem nad patičkou menu */
.vyz-hrbitov { position: relative; flex: none; height: 64px; margin: 24px 10px 0; opacity: .85; }   /* margin-top: pás netopýrů sahá 22 px nad hroby (IS 24. 10. 2026) */
/* Hřbitůvek v liště (CMS bez menu vlevo): menší, celý v liště, hroby na ostrůvku kousek nad spodní hranou */
.vyz-hrbitov.vyz-v-liste { width: 120px; height: 100%; margin: 0 8px; align-self: stretch; overflow: hidden; }
.vyz-hrbitov.vyz-v-liste > svg { inset: auto 0 12px 0; height: 22px; }
.vyz-hrbitov.vyz-v-liste > svg.vyz-krajina { inset: auto 0 8px 0; height: 12px; }
.vyz-v-liste .vyz-duch { width: 14px; bottom: 14px; }
.vyz-v-liste .vyz-duch svg { width: 14px; height: 17px; }
.vyz-v-liste .vyz-netopyri { bottom: 26px; height: 22px; }
.vyz-v-liste .vyz-hejno { transform-origin: 0 0; scale: .55; }
.vyz-hrbitov > svg { position: absolute; inset: auto 0 0 0; width: 100%; height: 64px; z-index: 1; }
.vyz-hrob, .vyz-hlina { fill: var(--vyz-silueta); } .vyz-hrob { opacity: .55; } .vyz-hlina { opacity: .35; }
.vyz-duch { position: absolute; left: 44%; bottom: 10px; width: 30px; animation: vyz-vznaseni 4.5s ease-in-out infinite; }
.vyz-duch svg { width: 30px; height: 36px; display: block; filter: drop-shadow(0 3px 4px var(--vyz-duch-stin)); }
.vyz-duch-telo { fill: var(--vyz-duch); stroke: var(--vyz-silueta); stroke-width: 1.4; stroke-opacity: .4; }   /* obrys: na skoro bílé skleněné liště bílý duch splýval (CMS 24. 10. 2026) */
.vyz-oko { fill: var(--vyz-duch-oko); animation: vyz-mrknuti 6s infinite; transform-origin: center; transform-box: fill-box; }
@keyframes vyz-vznaseni { 0%, 100% { transform: translateY(0) rotate(-3deg); } 50% { transform: translateY(-9px) rotate(3deg); } }
@keyframes vyz-mrknuti { 0%, 94%, 100% { transform: scaleY(1); } 96% { transform: scaleY(.1); } }

/* Pavučina s pavoučkem v pravém horním rohu lišty */
.vyz-pavucina { position: absolute; top: 0; right: 0; width: var(--vyz-pavucina-velikost); height: var(--vyz-pavucina-velikost);
  overflow: hidden; opacity: .9; border-top-right-radius: inherit; }
.vyz-pavucina svg { width: 100%; height: 100%; display: block; }
.vyz-vlakno { fill: none; stroke: var(--vyz-vlakno); stroke-width: .85; }
.vyz-pavouk { fill: var(--vyz-silueta); animation: vyz-houpani 5s ease-in-out infinite; transform-origin: 52px 22px; }
.vyz-nohy { fill: none; stroke: var(--vyz-silueta); stroke-width: .9; stroke-linecap: round; }
@keyframes vyz-houpani { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(5px); } }

/* Netopýři — hejno nad hřbitůvkem, jen v šířce menu (Matěj 24. 10. 2026: přes celou obrazovku rušili) */
.vyz-netopyri { position: absolute; left: 0; right: 0; bottom: 46px; height: 40px; overflow: hidden; z-index: 2; }
.vyz-netopyri.vyz-zprava { transform: scaleX(-1); }   /* zprava doleva */
.vyz-hejno { position: absolute; top: 0; left: -80px; width: 76px; height: 40px; animation: vyz-prelet 7s linear forwards; }
.vyz-hejno svg { position: absolute; width: 26px; height: 11px; fill: var(--vyz-silueta); opacity: .85; animation: vyz-mavani .28s ease-in-out infinite alternate; }
.vyz-hejno svg:nth-child(1) { top: 14px; left: 0; }
.vyz-hejno svg:nth-child(2) { top: 3px; left: 32px; width: 20px; height: 9px; animation-duration: .24s; }
.vyz-hejno svg:nth-child(3) { top: 26px; left: 56px; width: 17px; height: 7px; animation-duration: .31s; }
@keyframes vyz-prelet { from { left: -80px; transform: translateY(6px); } 50% { transform: translateY(-4px); } to { left: 100%; transform: translateY(4px); } }
@keyframes vyz-mavani { from { transform: scaleY(1); } to { transform: scaleY(.6) translateY(2px); } }

/* Jednorožec s třpytkami — pastvina pod menu (v CMS v liště); pase se, jednou za čas okamžik s třpytkami */
.vyz-pastvina { position: relative; flex: none; height: var(--vyz-pastvina-vyska); margin: 0 10px; overflow: hidden; pointer-events: none; }
.vyz-pastvina.vyz-v-liste { width: 112px; height: 100%; margin: 0 8px; align-self: stretch; }   /* přiblížený (Matěj 24. 10. 2026: „trochu přitáhnout, ať je blíže“) */
.vyz-krajina { position: absolute; inset: auto 0 0 0; width: 100%; height: 30px; }
.vyz-v-liste .vyz-krajina { bottom: 8px; height: 12px; }
.vyz-kopec { fill: var(--vyz-kopec); } .vyz-trava { fill: var(--vyz-trava); }
.vyz-kvet1 { fill: var(--vyz-hriva-1); } .vyz-kvet2 { fill: var(--vyz-hriva-2); }
.vyz-jednorozec { position: absolute; left: 50%; bottom: 2px; width: 140px; height: 108px; margin-left: -70px;
  transition: transform 1000ms cubic-bezier(.45, 0, .2, 1); transform-origin: 86% 23%; }
.vyz-v-liste .vyz-jednorozec { width: 60px; height: 46px; margin-left: -30px; bottom: 7px; }
.vyz-jednorozec svg { width: 100%; height: 100%; overflow: visible; display: block; }
.vyz-obrysy .vyz-t { fill: var(--vyz-obrys); stroke: var(--vyz-obrys); stroke-width: 2.6; stroke-linejoin: round; }
.vyz-vyplne .vyz-t { fill: var(--vyz-telo); }
.vyz-brisko { fill: var(--vyz-stin-telo); }
.vyz-noha-daleko { fill: var(--vyz-noha-daleko); stroke: var(--vyz-obrys); stroke-width: 1; }
.vyz-kopyto-j { fill: var(--vyz-kopyto-j); } .vyz-kopyto-daleko { fill: var(--vyz-kopyto-daleko); }
.vyz-stin { fill: var(--vyz-stin-zem); }
.vyz-tvar { fill: var(--vyz-hriva-1); opacity: .45; }
.vyz-chripi { fill: var(--vyz-obrys); } .vyz-usta { fill: none; stroke: var(--vyz-obrys); stroke-width: 1; stroke-linecap: round; }
.vyz-ucho-vnitr { fill: var(--vyz-hriva-1); opacity: .7; }
.vyz-roh-a { stop-color: var(--vyz-roh-a); } .vyz-roh-b { stop-color: var(--vyz-roh-b); }
.vyz-roh { fill: url(#vyz-roh); stroke: var(--vyz-roh-b); stroke-width: .8; stroke-linejoin: round; }
.vyz-roh-pruh { stroke: var(--vyz-roh-b); stroke-width: .9; stroke-linecap: round; opacity: .8; }
.vyz-oko-j ellipse { fill: var(--vyz-oko-j); } .vyz-lesk { fill: #fff; } .vyz-rasy { stroke: var(--vyz-oko-j); stroke-width: .8; stroke-linecap: round; fill: none; }
.vyz-oko-j { transform-box: fill-box; transform-origin: 50% 70%; animation: vyz-mrk 6s infinite; }
.vyz-pramen { fill: none; stroke-width: 3.4; stroke-linecap: round; }
.vyz-c1 { stroke: var(--vyz-hriva-1); } .vyz-c2 { stroke: var(--vyz-hriva-2); } .vyz-c3 { stroke: var(--vyz-hriva-3); } .vyz-c4 { stroke: var(--vyz-hriva-4); }
/* Pasení: krk se skloní od kohoutku k trávě, drobné okusování, občas zvedne hlavu; ocas se vlní, ucho cukne */
.vyz-hlava { transform-box: view-box; transform-origin: 104px 52px; animation: vyz-paseni 9s ease-in-out infinite; }
@keyframes vyz-paseni { 0%, 10% { transform: rotate(80deg); } 14% { transform: rotate(76deg); } 18% { transform: rotate(80deg); }
  22% { transform: rotate(77deg); } 26%, 58% { transform: rotate(80deg); } 68%, 82% { transform: rotate(0deg); } 92%, 100% { transform: rotate(80deg); } }
.vyz-ocas { transform-box: view-box; transform-origin: 46px 47px; animation: vyz-ocas 3.6s ease-in-out infinite; }
@keyframes vyz-ocas { 0%, 100% { transform: rotate(-3deg); } 50% { transform: rotate(8deg); } }
@keyframes vyz-mrk { 0%, 95%, 100% { transform: scaleY(1); } 97% { transform: scaleY(.1); } }
/* Okamžik: hlava nahoru, přiblížení na hlavu, mrknutí, spousta třpytek z rohu */
.vyz-okamzik .vyz-hlava { animation: none; transform: rotate(0deg); transition: transform 600ms ease-out; }
.vyz-okamzik .vyz-jednorozec { transform: translate(-50px, 26px) scale(2.2); }
.vyz-okamzik.vyz-v-liste .vyz-jednorozec { transform: scale(1.12); }
.vyz-okamzik .vyz-oko-j { animation: vyz-mrk-okamzik 3.6s 1 forwards; }
@keyframes vyz-mrk-okamzik { 0%, 42% { transform: scaleY(1); } 47% { transform: scaleY(.1); } 53%, 100% { transform: scaleY(1); } }
.vyz-trpytky { position: absolute; left: 88%; top: 6%; width: 0; height: 0; }
.vyz-trpytky i { position: absolute; left: 0; top: 0; width: var(--s); height: var(--s); margin: calc(var(--s) / -2); opacity: 0; border-radius: 50%;
  animation: vyz-trpytka var(--d) cubic-bezier(.15, .6, .35, 1) var(--z) forwards; }
.vyz-trpytky i.vyz-hvezda { border-radius: 0; clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%); }
.vyz-b1 { background: var(--vyz-zlata); } .vyz-b2 { background: var(--vyz-hriva-1); } .vyz-b3 { background: var(--vyz-hriva-2); }
.vyz-b4 { background: var(--vyz-hriva-3); } .vyz-b5 { background: var(--vyz-hriva-4); } .vyz-b6 { background: var(--vyz-krem); }
@keyframes vyz-trpytka { 0% { opacity: 0; transform: translate(0, 0) scale(.2) rotate(0deg); } 12% { opacity: 1; }
  55% { opacity: 1; transform: translate(var(--x), var(--y)) scale(1) rotate(var(--r)); } 70% { opacity: .35; } 80% { opacity: 1; }
  100% { opacity: 0; transform: translate(var(--x), calc(var(--y) + var(--pad))) scale(.6) rotate(var(--r)); } }

/* Třídy, které nesou jen strukturu (kontroly „třída bez stylu“ v repech je jinak hlásí, CRM 24. 10. 2026) */
.vyz-silueta, .vyz-detail, .vyz-hriva { pointer-events: none; }
.vyz-text { min-width: 0; }

/* Přepínač: ikona v pevné šířce; zbytek vzhledu (jako okolní položky menu) dává repo třídou z data-vyzdoba-prepinac-trida */
.vyz-prepinac { text-align: left; cursor: pointer; }
:where(.vyz-prepinac .vyz-ikona) { display: inline-block; width: 16px; text-align: center; font-size: 14px; line-height: 1; }

@media (prefers-reduced-motion: reduce) {
  .vyz-duch, .vyz-oko, .vyz-pavouk, .vyz-ocas, .vyz-oko-j { animation: none; }
  .vyz-hlava { animation: none; transform: rotate(80deg); }
  .vyz-netopyri, .vyz-trpytky { display: none; }
}

/* Vlajka na žerdi k 28. říjnu (lib/vyzdoba.js, republika; 27. 10. 2026). Pohyb je SMIL — omezený pohyb ho zastaví
   skriptem (pauseAnimations), rozměry kontejneru dávají .vyz-pastvina / .vyz-v-liste. */
:root {
  --vyz-zerd: #8a5a2b; --vyz-zerd-lesk: rgba(255, 235, 200, .55);
  --vyz-hlavice-a: #ffe58a; --vyz-hlavice-b: #c9962e; --vyz-hlavice-kov: #d8a73c;
  --vyz-lipa: #7cb342; --vyz-lipa-zilka: rgba(40, 90, 20, .45); --vyz-vetvicka: #6d4c2a;
  --vyz-kvitek: #fff; --vyz-kvitek-stred: #f6c84b;
  --vyz-vlajka-obrys: rgba(40, 30, 50, .35);     /* tenký obrys — bílý pruh na skle a na bílém */
  --vyz-vlajka-stin: rgba(40, 30, 50, .16);      /* tvrdý stín pod látkou */
  --vyz-vlajka-stin-lista: rgba(40, 30, 50, .28); /* v liště (zmenšeno na 44 %) o něco tmavší, ať látka drží i na červené */
  --vyz-stuha-obrys: rgba(40, 30, 50, .4);
}
html[data-tema="tmave"] {
  --vyz-zerd: #a8744a; --vyz-zerd-lesk: rgba(255, 235, 200, .35);
  --vyz-hlavice-a: #ffe9a0; --vyz-hlavice-b: #b8862a; --vyz-hlavice-kov: #c9992f;
  --vyz-lipa: #6fa63d; --vyz-lipa-zilka: rgba(10, 40, 0, .5); --vyz-vetvicka: #8a6240;
  --vyz-kvitek: #e8e6f0;
  --vyz-vlajka-obrys: rgba(0, 0, 0, .5); --vyz-vlajka-stin: rgba(0, 0, 0, .35); --vyz-vlajka-stin-lista: rgba(0, 0, 0, .45); --vyz-stuha-obrys: rgba(0, 0, 0, .55);
}

/* Kontejnery: pod menu (.vyz-pastvina.vyz-stozar) a v liště (.vyz-pastvina.vyz-v-liste.vyz-stozar) */
.vyz-stozar { pointer-events: none; }
.vyz-stozar > .vyz-vlajka { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.vyz-vlajecka { display: inline-block; width: 16px; height: 12px; margin-left: 5px; vertical-align: -1px; pointer-events: none; }
.vyz-vlajecka > .vyz-vlajka { width: 100%; height: 100%; display: block; overflow: visible; }

/* Krajina */
.vyz-pahorek { fill: var(--vyz-kopec, #cfdccb); } .vyz-stebla { fill: var(--vyz-trava, #8fb98a); }
.vyz-kvitek { fill: var(--vyz-kvitek); } .vyz-kvitek-stred { fill: var(--vyz-kvitek-stred); }
.vyz-stin-paty { fill: var(--vyz-stin-zem, rgba(60, 80, 60, .12)); }

/* Žerď, hlavice, stužka, lípa */
.vyz-zerd { fill: var(--vyz-zerd); } .vyz-zerd-lesk { fill: none; stroke: var(--vyz-zerd-lesk); stroke-width: .6; }
.vyz-zerd-mala { fill: none; stroke: var(--vyz-zerd); stroke-width: 1.3; stroke-linecap: round; }
.vyz-hlavice { stroke: var(--vyz-hlavice-b); stroke-width: .4; }   /* zlato dává gradient v atributu fill (id se v náhledu přejmenovávají) */ .vyz-hlavice-kov { fill: var(--vyz-hlavice-kov); }
.vyz-zlato-a { stop-color: var(--vyz-hlavice-a); } .vyz-zlato-b { stop-color: var(--vyz-hlavice-b); }
.vyz-stuha-obrys, .vyz-stuha-bila, .vyz-stuha-cervena, .vyz-stuha-modra { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.vyz-stuha-obrys { stroke: var(--vyz-stuha-obrys); stroke-width: 3.6; }
.vyz-stuha-bila { stroke: #fff; stroke-width: 2.9; }
.vyz-stuha-cervena { stroke: #d7141a; stroke-width: .95; } .vyz-stuha-modra { stroke: #11457e; stroke-width: .95; }
.vyz-masle { fill: #fff; stroke: var(--vyz-stuha-obrys); stroke-width: .7; stroke-linejoin: round; }
.vyz-vetvicka { fill: none; stroke: var(--vyz-vetvicka); stroke-width: .9; stroke-linecap: round; }
.vyz-lipa { fill: var(--vyz-lipa); } .vyz-zilka { fill: none; stroke: var(--vyz-lipa-zilka); stroke-width: .5; stroke-linecap: round; }

/* Látka */
.vyz-latka-stin { fill: var(--vyz-vlajka-stin); }
.vyz-latka-obrys { fill: none; stroke: var(--vyz-vlajka-obrys); stroke-width: .9; stroke-linejoin: round; }
.vyz-vlajecka .vyz-latka-obrys { stroke-width: .5; }
.vyz-v-liste .vyz-latka-obrys { stroke-width: 1.6; }     /* v liště je kresba zmenšená na 44 %, na červené liště musí červený pruh držet hranu */
.vyz-v-liste .vyz-latka-stin { fill: var(--vyz-vlajka-stin-lista); }

/* Skupiny jen se strukturou a pohybem v SMIL (ohyb žerdi kolem paty, švih stužky kolem uzlu, odlétající lístky, látka);
   kontroly „třída bez stylu“ v repech je jinak hlásí */
.vyz-ohyb, .vyz-stuha, .vyz-listek, .vyz-latka { pointer-events: none; }

@media (prefers-reduced-motion: reduce) {
  /* Pohyb je v SMIL: zastaví ho skript (svg.pauseAnimations()); v čase 0 stojí vlajka v klidné fázi a lístky jsou schované. */
  .vyz-stozar, .vyz-vlajecka { animation: none; }
}
