/*
Theme Name: Oldrichov v3
Theme URI: https://oldrichov.cz/
Description: Nová šablona obce Oldřichov v Hájích — navazuje na v2 (skutečná data, kategorie, RSS Munipolis), přepracovaný vzhled a přístupnost dle zákona č. 99/2019 Sb., o přístupnosti internetových stránek a mobilních aplikací (dozor DIA). Postaveno na základě schváleného mockupu v3-mockup-2.
Author: Ing. Marek Precechtel
Author URI: https://belov.cz/
Version: 3.89
Text Domain: oldrichov-v3
*/


/* =========================================================
   DESIGN TOKENS — barevnost a typografie 1:1 podle SOUČASNÉHO
   webu (Oswald, zelená #558B2F / #8BC34A), sekce ve stejném
   pořadí a se stejným obsahem, jaké má web dnes online.
   Odstín velkých zelených ploch mírně ztmaven kvůli WCAG 2.1 AA
   (na #558B2F má bílý běžný text jen 4,1:1 — nesplní DIA).
   ========================================================= */
:root {
  --green-brand:  #02A904;   /* zelená ze znaku — jen erb / drobné akcenty */
  --green-panel:  #8bc34a;   /* světlá — štítky nadpisů widgetů (Kalendář akcí…), jen s tmavým textem */
  --green-fill:   #3f6b23;   /* náhrada dnešní #558B2F pro velké plochy s bílým textem — 6,3:1 AA */
  --green-hero:   #487a28;   /* o trochu světlejší než --green-fill, jen pro dva horní hero panely
                                 (Kalendář akcí/Munipolis, na přání 2.8.2026 "přijde mi to zbytečně
                                 tmavě zelené") — pořád 5,1:1 AA s bílým textem uvnitř panelu */
  --green-text:   #2e5c1a;   /* zelená pro odkazy/text na bílé — 7,5:1 AA */
  --gold:         #FBD303;   /* ze znaku — focus ring, ocenění */
  --red-pay:      #a4241c;   /* platební banner — 5,9:1 s bílým textem */

  --text:       #1c1c1a;
  --text-muted: #5a5a56;
  --border:     #e2e2de;
  --bg:         #ffffff;
  --bg-soft:    #f9f9f9;     /* přesně dnešní .section-contact / pás pod hero */

  --font-display: "Oswald", "Arial Narrow", sans-serif;
  --font-sans: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  --maxw: 1180px;
  --radius: 4px;
  --focus-ring: 0 0 0 3px var(--gold), 0 0 0 5px #14200f;
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 18px;
  line-height: 1.6;
  color: var(--text);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  /* Ochrana proti dlouhým nezalomeným řetězcům (5.8.2026, na přání —
     "v některých příspěvcích jsou vložené videa a je tam velmi dlouhý
     odkaz což výpis úplně rozhodí na šířku"). Když někdo do textu
     příspěvku vloží holý odkaz na video (YouTube apod.), WordPress ho
     automaticky prolinkuje (make_clickable), ale text odkazu zůstává
     jeden dlouhý nezalomitelný "řetězec" — bez tohohle pravidla by ve
     výpisu (`.excerpt`) i v textu příspěvku (`.entry-content`) přetekl
     přes okraj a roztáhl celý sloupec/kartu do šířky. `overflow-wrap`
     se dědí na VŠECHNO uvnitř <body>, takže funguje všude (výpisy
     aktualit, karty fotogalerií, tabulka úřední desky, detail příspěvku),
     ne jen tam, kde se problém zrovna projevil. */
  overflow-wrap: break-word;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--green-text); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; }
a:hover { color: #1d3d10; }
a:focus-visible, button:focus-visible, input:focus-visible, [tabindex]:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
  border-radius: 3px;
}
/* Váha nadpisů (18.8.2026, na přání — „nadpisy Úřad, Obec, Úřední deska
   nedělej tak tučně“). Z 500 (Oswald Medium) na 400 (Regular). Oswald je
   úzkořezové písmo, takže ve velkých stupních působí hutněji než běžný
   bezpatkový font — u nadpisu přes půl obrazovky je to znát nejvíc.
   Hierarchie zůstává, jen ji drží VELIKOST, ne tučnost: h1 → h2 → h3
   jsou 2,4 / 1,7 / 1,25 rem při vahách 400 / 400 / 300. Sedí to i k
   titulkům ve výpisech příspěvků, které mají váhu 400 odjakživa. */
h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 400;
  color: #000;
  line-height: 1.15;
  margin: 0 0 0.5em;
}
h1 { font-size: clamp(1.8rem, 3.6vw, 2.4rem); font-weight: 400; }
h2 { font-size: clamp(1.35rem, 2.4vw, 1.7rem); }
h3 { font-size: 1.25rem; font-weight: 300; font-family: var(--font-display); }

/* Adresní bloky uvnitř textového obsahu stránky (5.8.2026, doplněno u
   page-povinne-informace.php) — prohlížeče nedávají <address> žádný
   výchozí dolní odstup (na rozdíl od <p>), takže následující nadpis
   (h1-h4 mají nahoře margin:0, spoléhají na odstup PŘEDCHÁZEJÍCÍHO prvku)
   bez tohohle pravidla nalepí rovnou na text adresy. Stejná oprava se
   týká i page-prohlaseni-o-pristupnosti.php (taky používá <address> v
   .entry-content). `.contact-grid address` na homepage má vlastní
   pravidlo, sem nezasahuje. */
.entry-content address { font-style: normal; line-height: 1.6; margin: 0 0 1em; }

.container { max-width: var(--maxw); margin: 0 auto; padding: 0 20px; }
.section { padding: 46px 0; }
.section--soft { background: var(--bg-soft); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }

.head-underline { position: relative; padding-bottom: 4px; }
.head-underline::after {
  content: ""; position: absolute; left: 0; bottom: 0;
  width: 34px; height: 3px; background: var(--green-fill);
}

/* =========================================================
   SKIP LINK
   ========================================================= */
.skip-link {
  position: absolute; left: 12px; top: -100px;
  background: #14200f; color: #fff;
  padding: 10px 16px; border-radius: var(--radius);
  font-weight: 600; z-index: 300; text-decoration: none;
}
.skip-link:focus { top: 12px; outline: 3px solid var(--gold); }

.visually-hidden {
  position: absolute !important; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* =========================================================
   TOP UTILITY BAR — přístupnostní ovládání (požadavek DIA);
   na dnešním webu není, jde o povinný doplněk, proto drženo
   maximálně nenápadně
   ========================================================= */
.util-bar {
  background: #f2f2f0;
  border-bottom: 1px solid var(--border);
  font-size: 0.82rem;
  color: var(--text-muted);
  padding: 6px 0;
}
.util-bar .container { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.util-links { display: flex; gap: 16px; flex-wrap: wrap; }
.util-links a { color: var(--text-muted); text-decoration: none; }
.util-links a:hover { color: var(--green-text); text-decoration: underline; }
.a11y-controls { display: flex; gap: 8px; align-items: center; }
.a11y-controls span { margin-right: 2px; }
.a11y-controls button {
  background: #fff; border: 1px solid var(--border); color: var(--text);
  padding: 2px 8px; border-radius: 4px; cursor: pointer; font: inherit; font-size: 0.8rem;
  min-width: 30px; min-height: 30px;
}
.a11y-controls button:hover { border-color: var(--green-text); color: var(--green-text); }
.a11y-controls button[aria-pressed="true"] { background: var(--green-fill); color: #fff; border-color: var(--green-fill); }

/* =========================================================
   HEADER + NAVIGACE
   ========================================================= */
.site-header { background: #fff; border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 100; }
.site-header .container { display: flex; align-items: center; gap: 20px; padding-top: 12px; padding-bottom: 12px; }
/* Širší max-width JEN pro horní lištu hlavičky (6.8.2026, na přání —
   "zkontroluj hlavní menu, aby bylo ve stejné řádce... menu lítá"), ne
   pro celý web — `.site-header > .container` (dítě, ne obecné potomek)
   míří VÝHRADNĚ na tenhle vnější řádek loga+menu, ne na vnitřní
   `.container.dropdown__grid` uvnitř mega menu (ten je taky potomek
   `.site-header`, ale o několik úrovní hlouběji, takže obecný selektor
   `.site-header .container` by ho omylem zasáhl taky — proto child
   combinator `>`). Běžný obsah webu (`--maxw: 1180px`) zůstává beze
   změny, mění se jen šířka, do které se vejde logo + 9 položek menu +
   lupa. Viz vysvětlení u `.main-nav > ul` a mediálního dotazu níž, kde
   se řeší SKUTEČNÁ příčina "lítání" menu. */
.site-header > .container { max-width: 1360px; }
.brand { display: flex; align-items: center; gap: 12px; text-decoration: none; color: #000; flex-shrink: 0; }
/* Logo je celá "lockup" značka (erb + nápis uvnitř SVG, viz komentář v
   header.php) — jen pevná výška, šířka podle přirozeného poměru stran. */
.brand img { height: 44px; width: auto; flex-shrink: 0; }

.main-nav { margin-left: auto; display: flex; gap: 2px; align-items: center; }
/* PŮVODNĚ `flex-wrap: wrap` (6.8.2026, na přání — "zkontroluj hlavní menu,
   aby bylo ve stejné řádce i když je za položkou submenu... menu lítá").
   Skutečná příčina: devět položek menu + lupa se přirozeně (bez zalomení)
   vejdou až na ~1000px šířky, ale hlavička byla omezená sdíleným
   `--maxw: 1180px` (po odečtení loga/mezer/lupy zbylo míst jen ~890px) —
   menu se tak VŽDY zalamovalo na 2 řádky, na jakékoli obrazovce širší
   než telefon (přepínač na hamburger menu byl nastavený jen na 760px,
   viz mediální dotaz níž), ne jen výjimečně při úzkém okně. K tomu se
   navíc při dokončení načtení webfontu Oswald (`display=swap` ve
   functions.php) mění šířky písmen oproti dočasnému náhradnímu fontu —
   proto to vypadalo, že menu "lítá"/přeskakuje, ne jen že je rozdělené
   na dva řádky natrvalo. Oprava: `.site-header > .container` má teď
   vlastní širší max-width (1360px, viz výš) A mediální dotaz pro
   hamburger menu byl posunutý z 760px rovnou na 1360px (dole) — takže se
   VŽDY buď menu vejde na jeden řádek (širší obrazovky), nebo se rovnou
   použije hamburger menu (užší obrazovky/tablety), nikdy ne zalomený
   dvouřádkový stav mezi tím. `nowrap` tohle vynucuje deklarativně — kdyby
   se přesto obsah nevešel (např. výrazně delší text položky menu v
   budoucnu), přetečení bude rovnou vidět/testovatelné, ne tiše
   schované za zalomením řádku.

   OPRAVA (6.8.2026, na přání — "mobilní menu se přepíná příliš brzy, než
   může být zobrazeno"): 1360px byl jen odhad "ať je určitě dost místa",
   ne změřená hodnota — ve skutečnosti se devítka položek + lupa i se
   skutečným SVG logem (reálný Oswald, ne náhradní font) vejde na jeden
   řádek už od ~1067px šířky hlavičky (změřeno Playwright binárním
   hledáním minimální šířky bez zúžení `.main-nav > ul`). Hamburger
   menu se tak zbytečně nasazovalo i na širokých obrazovkách/oknech mezi
   ~1067–1360px, kde by se vodorovné menu klidně vešlo — proto se
   PŘEPÍNAČ na hamburger menu (mediální dotaz níž) stáhnul z 1360px na
   1150px (~83px rezerva nad změřeným minimem, na scrollbar/zoom/budoucí
   drobné rozšíření textu položky). Šířka `.site-header > .container`
   (řádek výš, 1360px) NEBYLA měněna — pořád dává hezkou rezervu na
   opravdu širokých monitorech, jen už neurčuje, KDY se menu sbalí do
   hamburgeru, to teď dělá jen mediální dotaz samostatně. */
.main-nav > ul { display: flex; list-style: none; margin: 0; padding: 0; gap: 2px; flex-wrap: nowrap; }
/* POZOR: záměrně BEZ position:relative na <li> — .dropdown.cols-4 (mega
   menu) se má opírat o .site-header (position:sticky, taky "positioned"
   ancestor), aby šlo přes celou šířku okna, ne jen o šířku svého <li>.
   .dropdown.cols-2/.dropdown (nepoužité v šabloně) by tím taky "sjely" na
   .site-header místo na svůj <li> — bez dopadu, dokud se nezačnou reálně
   používat, pak by potřebovaly vlastní position:relative wrapper. */
.main-nav a, .main-nav button.nav-trigger {
  display: inline-flex; align-items: center; gap: 5px;
  /* Tenčí řez (5.8.2026, na přání — "udělej tenší písmo v menu, zdá se mi
     příliš tlusté"), ze 500 na 400 — stejný směr jako u H3/výpisu aktualit
     jinde na webu ("ztenši písmo"), tady jen o jeden stupeň, ať zůstane
     v uppercase/Oswald pořád dost čitelné jako klikací menu, ne jako běžný
     odstavcový text. Velikost mírně zvětšena z 0.9rem na 0.95rem (9.8.2026,
     na přání — "mírně zvěrši písmo horního menu"). Ověřeno Playwrightem
     (skutečné SVG logo + Oswald), že minimální šířka hlavičky bez zúžení
     položky "Spolky a zájmové aktivity" vzroste jen mírně (~1276px →
     ~1319px) — pořád nad hranicí přepnutí na hamburger (1150px), stejný
     už dřív existující jev jako předtím, jen o něco širší pásmo. */
  font-family: var(--font-display); font-weight: 400; font-size: 0.95rem;
  text-transform: uppercase; letter-spacing: 0.02em;
  color: #000; text-decoration: none;
  /* Vodorovný padding zúžený z 10px na 8px (6.8.2026, spolu s opravou
     zalamování menu výš) — pár px navíc rezervy na jeden řádek, výška
     (min-height: 44px) beze změny, klikací plocha zůstává dost velká. */
  padding: 10px 8px; background: transparent; border: none; cursor: pointer;
  min-height: 44px;
}
.main-nav a:hover, .main-nav button.nav-trigger:hover, .main-nav a[aria-current="page"] { color: var(--green-text); }
.main-nav .caret { font-size: 0.65rem; }

.dropdown {
  position: absolute; top: 100%; left: 0; margin-top: 1px;
  min-width: 230px; background: #fff; border: 1px solid var(--border);
  padding: 10px 0; display: none; z-index: 90;
}
.dropdown.cols-2 { display: none; grid-template-columns: 1fr 1fr; min-width: 410px; gap: 0 8px; padding: 10px 14px; }
.dropdown[data-open="true"] { display: block; }
.dropdown.cols-2[data-open="true"] { display: grid; }
.dropdown ul { list-style: none; margin: 0; padding: 0; }
.dropdown a { display: block; padding: 7px 18px; font-family: var(--font-sans); font-size: 0.92rem; text-transform: none; letter-spacing: 0; font-weight: 400; color: var(--text); text-decoration: none; }
.dropdown.cols-2 a { padding: 7px 4px; }
.dropdown a:hover { color: var(--green-text); background: var(--bg-soft); }

/* Mega menu (Úřad/Obec/Škola/Spolky) — přes celou šířku okna, stejně jako
   ve v2 (.navbar .megamenu { left:0; right:0; width:100% }). Panel se
   OPÍRÁ o .site-header (position: sticky = "positioned" ancestor pro
   position:absolute potomky), ne o konkrétní <li> spouštěče — proto
   .main-nav > ul > li výš nahoře nemá position:relative, jinak by mega
   menu zůstalo přisáté jen k šířce svého tlačítka. Uvnitř je běžný
   .container (--maxw), aby sloupce s odkazy nebyly roztažené přes celý
   monitor na širokých obrazovkách. */
.dropdown.cols-4 {
  display: none; position: absolute; left: 0; right: 0; top: 100%; width: 100%;
  min-width: 0; margin-top: 1px; background: #fff;
  border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
  box-shadow: 0 16px 28px rgba(0,0,0,0.12); padding: 0; z-index: 90;
}
.dropdown.cols-4[data-open="true"] { display: block; }
.dropdown.cols-4 .dropdown__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0 28px; padding: 22px 20px; }
.dropdown.cols-4 a { padding: 7px 4px; }
@media (max-width: 1100px) {
  .dropdown.cols-4 .dropdown__grid { grid-template-columns: repeat(2, 1fr); gap: 0 20px; }
}

.nav-toggle { display: none; margin-left: auto; background: var(--green-fill); color: #fff; border: none; padding: 10px 16px; border-radius: var(--radius); font: inherit; font-weight: 600; cursor: pointer; min-height: 44px; }
.search-btn { background: transparent; border: 1px solid var(--border); border-radius: 50%; width: 44px; height: 44px; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; }
.search-btn:hover { border-color: var(--green-text); }
.search-btn svg { width: 18px; height: 18px; color: #000; }

/* =========================================================
   PÁS OCENĚNÍ — nový prvek nad hero fotkou (na přání starostky)
   ========================================================= */
.awards-bar { background: linear-gradient(180deg, #fdf7e0 0%, #f8ecc0 100%); border-top: 3px solid var(--green-fill); border-bottom: 3px solid var(--gold); padding: 14px 0 16px; }
.awards-kicker { text-align: center; margin: 0 0 8px; font-family: var(--font-display); font-size: 0.74rem; font-weight: 500; letter-spacing: 0.16em; text-transform: uppercase; color: var(--green-text); }
.awards-inner { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 0; }
.award-item { display: flex; align-items: center; gap: 12px; padding: 6px 30px; text-align: left; }
.award-item + .award-item { border-left: 1px solid rgba(46,92,26,0.28); }
.award-icon { width: 44px; height: 44px; flex-shrink: 0; border-radius: 50%; background: var(--green-fill); color: var(--gold); display: flex; align-items: center; justify-content: center; box-shadow: 0 0 0 3px rgba(251,211,3,0.55); }
.award-icon svg { width: 22px; height: 22px; }
.award-text strong { display: block; font-family: var(--font-display); font-weight: 500; font-size: 1rem; text-transform: uppercase; letter-spacing: 0.015em; color: #1c1c1a; line-height: 1.2; }
.award-text span { display: block; font-size: 0.8rem; color: var(--text-muted); margin-top: 1px; }
@media (max-width: 760px) {
  .award-item { padding: 8px 0; width: 100%; justify-content: center; }
  .award-item + .award-item { border-left: none; border-top: 1px dashed rgba(46,92,26,0.28); }
  .awards-inner { flex-direction: column; }
}

/* =========================================================
   HERO — reálná fotka + titulek a widgety jako elegantní karty
   přesahující spodní okraj (modernější podání, menu beze změny)
   ========================================================= */
.hero {
  position: relative; min-height: 440px; display: flex; align-items: flex-end;
  background-size: cover; background-position: center 55%;
  color: #fff; padding: 48px 0 0;
}
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background-image: linear-gradient(180deg, rgba(8,20,8,0) 0%, rgba(8,20,8,0.42) 38%, rgba(8,20,8,0.74) 58%, rgba(8,20,8,0.74) 100%);
}
.hero-inner { position: relative; z-index: 2; width: 100%; }
/* Titulek + podtitul vystředěné (1.8.2026, na přání) — věta "Vítejte na
   oficiálních stránkách obce..." (dřív .hero p.lead) byla zrušená úplně,
   ne jen skrytá, takže i její CSS pravidlo je pryč. */
.hero-title-block { text-align: center; margin: 0 0 26px; }
.hero h1 { color: #fff; text-shadow: 0 2px 10px rgba(0,0,0,0.55); margin-bottom: 6px; }
.hero .subtitle {
  font-family: var(--font-display); font-size: 1.02rem; font-weight: 400; color: #cdeab5;
  text-shadow: 0 1px 6px rgba(0,0,0,0.5); margin: 0; text-transform: uppercase; letter-spacing: 0.04em;
}
.hero .credit { position: absolute; right: 20px; top: 14px; z-index: 2; color: #fff; font-size: 0.76rem; background: rgba(6,14,6,0.72); padding: 3px 9px; border-radius: 3px; }

/* WIDGETY — přesahují spodní okraj hero fotky, zelené karty */
.hero-panels { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; transform: translateY(46%); position: relative; z-index: 3; }
.hero-panel { background: var(--green-hero); color: #fff; border-radius: 8px; padding: 20px 24px 18px; box-shadow: 0 10px 28px rgba(0,0,0,0.25); }
/* Nadpisy "Kalendář akcí"/"Munipolis" bez podtržovací linky, tenké a
   větší písmo (6.8.2026, na přání — "nejsem přítelem podtržení...
   raději bez podtržení a tenké velké písmo") — dřív měly `border-bottom`
   (vizuálně působilo jako trvalé podtržení pod celým nadpisem) a tučnější
   řez (zděděná váha 500 z obecného pravidla h1-h4). Teď stejný princip
   jako sitewide `h3` (Oswald, váha 300, větší velikost), jen o něco menší
   než 1.25rem, ať se vejde vedle "Munipolis" i na užších šířkách hero
   panelů. */
.hero-panel h2 { font-size: 1.2rem; font-weight: 300; margin: 0 0 12px; text-transform: none; color: #fff; }
.hero-panel ul { list-style: none; margin: 0; padding: 0; }
.hero-panel li { padding: 7px 0; border-bottom: 1px dashed rgba(255,255,255,0.28); }
.hero-panel li:last-child { border-bottom: none; }
/* Odkazy v boxu Kalendář akcí/Munipolis bez trvalého podtržení a bez
   tučného řezu (3.8.2026, na přání — "podobně jako v zápatí... zruš pod
   odkazy podtržení a nepiš odkazy tučně") — stejný princip jako
   .site-footer a: podtržení se objeví jen na :hover/:focus-visible, ne
   trvale. Zlatý focus ring (sitewide a:focus-visible) zůstává, podtržení
   na focus je jen navíc. */
.hero-panel .title { margin: 0 0 2px; font-size: 0.95rem; font-weight: 400; }
.hero-panel .title a { color: #fff; text-decoration: none; }
.hero-panel .title a:hover, .hero-panel .title a:focus-visible { color: #cdeab5; text-decoration: underline; }
.hero-panel .meta { margin: 0; font-size: 0.82rem; color: #d9ecc9; }
.hero-panel .more { display: inline-block; margin-top: 12px; font-size: 0.85rem; font-weight: 400; color: #fff; text-decoration: none; }
.hero-panel .more:hover, .hero-panel .more:focus-visible { text-decoration: underline; }

/* Prázdné místo pod úvodní fotkou.
   Zelené panely se posouvají dolů přes okraj fotky (`translateY(46%)`),
   takže část jejich výšky visí do prostoru pod ní. Tenhle prvek to místo
   drží — bez něj by panely zajely do sekce Úřad.

   POZOR: hodnota je svázaná s VÝŠKOU PANELŮ, tedy i s POČTEM položek
   v nich. Když se změní počet (front-page.php, `oldrichov_get_upcoming_events`
   / `oldrichov_get_munipolis_items`), musí se přeměřit i tohle.

   18.8.2026: ze dvou položek na tři → přesah panelů vzrostl ze 106 na
   135 px, mezera na 137 px tedy zachovává původní odstup ~48 px. */
.hero-spacer { height: 137px; }

.quick-links-row { background: var(--bg-soft); border-bottom: 1px solid var(--border); padding: 12px 0; }
.quick-links-row .container { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: center; }
.pill-btn {
  display: inline-flex; align-items: center; border: 1px solid var(--border); background: #fff;
  color: var(--text); text-decoration: none; padding: 6px 14px; border-radius: 3px; font-size: 0.85rem;
  min-height: 34px;
}
.pill-btn:hover { border-color: var(--green-text); color: var(--green-text); }

@media (max-width: 760px) {
  .hero-panels { grid-template-columns: 1fr; transform: translateY(30%); }
  /* Pod 760 px jsou panely pod sebou, takže jsou dvakrát vyšší a přesah je
     větší — 18.8.2026 se třetí položkou vzrostl ze 144 na 182 px. */
  .hero-spacer { height: 248px; }
}

/* =========================================================
   ÚŘAD / OBEC — dva sloupce se svislým štítkem. Vzhled nadpisu
   (2.8.2026, inspirace screenshotem smashingmagazine.com —
   "LATEST POSTS" v postranním sloupci): krátká svislá linka
   NAHOŘE, pod ní otočený text (writing-mode: vertical-rl +
   rotate(180deg), na přání — vyzkoušené i vzpřímené písmeno pod
   písmenem přesně podle screenshotu, ale uživatel dal přednost
   otočenému textu).
   ========================================================= */
.two-col { display: grid; grid-template-columns: 2fr 1fr; gap: 48px; }
.col-labeled { position: relative; padding-left: 28px; }
.col-label-vert {
  position: absolute; left: 0; top: 4px;
  display: flex; flex-direction: column; align-items: center;
}
.col-label-vert .col-rule { width: 1px; height: 48px; margin-bottom: 10px; background: var(--border); }
.col-label-vert .col-label {
  writing-mode: vertical-rl; transform: rotate(180deg);
  font-family: var(--font-display); font-weight: 300; font-size: 0.72rem; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--text-muted);
}
/* Homepage "Aktuality z úřadu"/"Aktuality z obce" (9.8.2026, na přání —
   "dej čárku z druhé strany textu, polohu textu nech jak je, myslím
   poloha seshora"): čárka (`.col-rule`) přehozená z NAD text POD text
   (`order`), text zůstává na stejném místě odshora jako předtím —
   `padding-top` na `.col-label-vert` nahrazuje prostor, co dřív zabírala
   čárka + mezera nad textem (48px + 10px = 58px), ať se text neposune.
   Filtr Rok na archive.php (`.deska-sidebar--year`) sdílí STEJNÉ třídy,
   ale beze změny — viz přepis níž, tam čárka zůstává nahoře. */
.col-label-vert { padding-top: 58px; }
.col-label-vert .col-rule { order: 2; margin-bottom: 0; margin-top: 10px; }
.col-label-vert .col-label { order: 1; }
.deska-sidebar--year .col-label-vert { padding-top: 0; }
.deska-sidebar--year .col-label-vert .col-rule { order: 1; margin-bottom: 10px; margin-top: 0; }
.deska-sidebar--year .col-label-vert .col-label { order: 2; }
.block-header { margin-bottom: 18px; }

/* Velikost textu výpisu příspěvků (1.8.2026, na přání) — zvětšeno na
   úroveň dnešního webu: tam je nadpis příspěvku obyčejné Bootstrapí <h3>
   (1.75rem/28px na desktopu) a datum/úryvek obyčejný odstavec (1rem/16px,
   žádná zmenšená "muted" varianta) — viz blog_simple_list()/blog_classics()
   v v2/inc-fce.php. Platí i pro archive.php, který stejné třídy sdílí.
   Řez ztenčen ze 700 na 400 (3.8.2026, na přání — "ztenši písmo výpisu
   aktualit a úřední desky"), stejný směr jako u H3/postranních boxů výše. */
.news-list-plain { list-style: none; margin: 0 0 20px; padding: 0; }
.news-list-plain .news-item { padding: 14px 0 20px; }
.news-list-plain .news-item:first-child { padding-top: 0; }
.news-list-plain .title { margin: 0 0 4px; font-size: 1.5rem; font-weight: 400; line-height: 1.2; }
.news-list-plain .title a { color: #000; text-decoration: none; }
.news-list-plain .title a:hover { color: var(--green-text); text-decoration: underline; }
.news-list-plain .meta { font-size: 1rem; color: var(--text-muted); margin: 0; }

.news-list-photo { list-style: none; margin: 0 0 20px; padding: 0; }
.news-list-photo .news-item { display: flex; gap: 16px; padding: 16px 0 22px; }
.news-list-photo .news-item:first-child { padding-top: 0; }
/* min-width:0 na textový sloupec (5.8.2026, viz "dlouhý odkaz rozhodí
   výpis na šířku" výše) — flex položky mají výchozí min-width:auto, což
   se počítá z NEJDELŠÍHO nezalomitelného obsahu (typicky dlouhá URL v
   úryvku). Bez týhle nuly by textový sloupec odmítal zmenšit se pod tu
   šířku, i když .thumb-sm nalevo (flex-shrink:0) svou šířku drží pevně —
   `overflow-wrap` výš by se tak neměl na čem projevit. */
.news-list-photo .news-item > div { min-width: 0; flex: 1; }
/* Náhled je teď <a> (proklik do příspěvku, 2.8.2026, na přání), ne <div> —
   display:block, ať se šířka/výška vůbec uplatní (výchozí display odkazu je
   inline). aria-hidden+tabindex="-1" v HTML: odkaz je jen pro myš, klávesnici
   a čtečkám stačí sousední odkaz na nadpisu, ať netabují na dva odkazy se
   stejným cílem. */
.news-list-photo .thumb-sm { display: block; width: 200px; height: 150px; flex-shrink: 0; border-radius: 3px; background-size: cover; background-position: center; }
.news-list-photo .title { margin: 0 0 4px; font-size: 1.5rem; font-weight: 400; line-height: 1.2; }
.news-list-photo .title a { color: #000; text-decoration: none; }
.news-list-photo .title a:hover { color: var(--green-text); text-decoration: underline; }
.news-list-photo .meta { font-size: 1rem; color: var(--text-muted); margin: 0 0 4px; }
.news-list-photo .excerpt { font-size: 1rem; margin: 0; }
.news-list-photo .thumb-sm { position: relative; }
.news-list-photo .thumb-sm.is-video::after {
  content: ""; position: absolute; inset: 0; margin: auto; width: 26px; height: 26px; border-radius: 50%;
  background: rgba(0,0,0,0.55) url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white"><path d="M8 5v14l11-7z"/></svg>') center/12px no-repeat;
}

/* Dvousloupcová mřížka výpisu (3.8.2026, na přání "vypsat prispevky tagu 32
   do dvou sloupcu, nahledovy obrazek vlevo, text vpravo") — modifikátor k
   .news-list-photo, zatím použitý jen na page-podnikani.php. Každá položka
   si dál nese svůj vlastní vzhled náhled-vlevo/text-vpravo (.news-item je
   pořád display:flex, beze změny) — mění se jen .news-list-photo samotné,
   z jednoho sloupce na dvousloupcovou mřížku. Pod 760px (stejný zlom jako
   mobilní menu) se vrací na jeden sloupec, ať se náhled 200×150 + text
   nemačkají do úzkého políčka. */
.news-list-photo--grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: 32px; }
.news-list-photo--grid .news-item:nth-child(2) { padding-top: 0; }

/* =========================================================
   VÝSLEDKY HLEDÁNÍ (search.php)
   17.8.2026 — přepsáno z vloženého Google CSE widgetu na vlastní výsledky
   (`.search-results`/`.gsc-control-cse` odstraněny, už nemají co stylovat).
   Skoro všechno je recyklované: seznam výsledků `.news-list-photo`,
   formulář `.deska-search`, odznaky dokumentů `.deska-table__files`,
   nadpisy bloků `.post-side__title`. Tady je jen to, co je specifické.
   ========================================================= */
.search-page { max-width: 860px; }
.search-page__summary { margin: 0 0 24px; color: var(--text-muted); }
/* Bloky pod výsledky (dokumenty, odkaz na Google, tipy) — stejná linka a
   odsazení jako oddělovače sekcí jinde v tématu, ne nový vlastní vzhled. */
.search-page__docs,
.search-page__more,
.search-page__tips { margin-top: 28px; padding-top: 20px; border-top: 1px solid var(--border); }
/* `.deska-table__files` je jinde plovoucí popup nad tabulkou úřední desky
   (position:absolute) — tady je to obyčejný seznam, stejně jako v pravém
   sloupci příspěvku, takže se pozicování ruší.
   POZOR NA SPECIFICITU: pravidlo `.deska-table__files` je v tomhle souboru
   NÍŽ (sekce ÚŘEDNÍ DESKA). Při stejně silném selektoru vyhraje pozdější,
   takže jednotřídní `.search-page__files` nestačilo — seznam odletěl mimo
   obrazovku a blok Dokumenty vypadal prázdný (ověřeno screenshotem).
   Dvě třídy stejně jako u `.post-side .deska-table__files`. */
.search-page .deska-table__files {
  position: static; width: auto; max-width: none; padding: 0; margin: 0 0 10px;
  background: none; border: none; box-shadow: none;
}

/* =========================================================
   MODÁLNÍ OKNO (Kalendář obsazenosti Besedy)
   ========================================================= */
.modal { display: none; position: fixed; inset: 0; z-index: 260; background: rgba(10,14,10,0.6); align-items: center; justify-content: center; padding: 20px; }
.modal.is-open { display: flex; }
.modal-dialog { width: 100%; max-width: 640px; }
.modal-content { background: #fff; border-radius: 8px; overflow: hidden; box-shadow: 0 20px 50px rgba(0,0,0,0.35); }
.modal-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--border); }
.modal-header h2 { margin: 0; font-size: 1.15rem; }
.modal-close { background: transparent; border: none; font-size: 1.1rem; line-height: 1; cursor: pointer; padding: 8px; min-width: 40px; min-height: 40px; color: var(--text); }
.modal-close:hover { color: var(--green-text); }
.modal-body { padding: 20px; }

/* Modál fotogalerie (GalleryModal, footer.php) — PŘEDĚLÁNO na skutečně
   celoobrazovkový prohlížeč se swipe gestem (6.8.2026, na přání — "u
   fotogaleii udelej fullscreen popup nahledu ne jen modalni a fotku
   zobrauj v puvodni zobrazeni, plus posunovat dle gest vlevo vpravo,
   mrkni na v7"). Dřív malá bílá karta (`.modal-dialog--gallery`,
   max-width 900px, fotka max. 75vh) — `.modal--lightbox` teď vynechává
   `.modal-dialog`/`.modal-content` obálku úplně (přímé děti `.modal`),
   tmavé poloprůhledné pozadí přes celé okno, fotka `object-fit: contain`
   uvnitř `.lightbox__image-wrap` (= PŮVODNÍ poměr stran, nikdy oříznutá,
   jen zmenšená na to, co se do okna vejde — černé pruhy nahoře/dole nebo
   po stranách, když se poměr stran fotky a obrazovky liší, stejné chování
   jako v7). Zjednodušená obdoba v7's lightboxu (v7/js/main.js) — bez
   zoomu a pásu náhledů, ty tady požadované nebyly. Klik na tmavé pozadí
   ZÁMĚRNĚ nezavírá (stejný záměr jako v7, viz jeho komentář "Klik mimo
   obrázek záměrně NEzavírá") — u fullscreen prohlížeče prakticky není kam
   kliknout "mimo", zavírá se křížkem nebo Esc (funguje beze změny přes
   obecný `.modal` mechanismus v main.js). */
.modal--lightbox { background: rgba(6,10,6,0.94); padding: 0; flex-direction: column; align-items: stretch; }
.modal--lightbox .modal-close {
  position: absolute; top: 12px; right: 12px; z-index: 3;
  color: #fff; background: rgba(0,0,0,0.35); border-radius: 50%;
}
.modal--lightbox .modal-close:hover { color: #fff; background: rgba(0,0,0,0.55); }
/* Tlačítko Stáhnout (6.8.2026, na přání — "dopln ... ikonku pro ulozeni",
   viz v7's `.lightbox__download`) — kolečko stejné velikosti jako křížek
   zavření, jen o kousek vlevo od něj (right: 60px = 12px okraj + 40px šířka
   křížku + 8px mezera). href/download atribut nastavuje main.js na
   aktuální fotku (`updateGalleryDownload()`). */
.lightbox__download {
  position: absolute; top: 12px; right: 60px; z-index: 3;
  display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%;
  color: #fff; background: rgba(0,0,0,0.35); text-decoration: none;
}
.lightbox__download:hover { color: #fff; background: rgba(0,0,0,0.55); }
.lightbox__counter {
  position: absolute; top: 18px; left: 16px; z-index: 3; color: #fff;
  font-family: var(--font-display); font-size: 0.86rem; letter-spacing: 0.02em;
  background: rgba(0,0,0,0.35); padding: 4px 12px; border-radius: 20px;
}
.lightbox__counter:empty { display: none; }
/* Stage = celá plocha mezi křížkem/počítadlem nahoře a popiskem dole.
   `flex: 1; min-height: 0;` (ne jen `flex: 1`) — bez `min-height: 0` by
   flex položka v koloně nešla zmenšit pod výšku svého obsahu, což by u
   fotky vyšší než okno protáhlo celý modál mimo viewport. */
.lightbox__stage { position: relative; flex: 1; min-height: 0; touch-action: pan-y; }
.lightbox__nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 48px; height: 48px; border-radius: 50%; border: none; cursor: pointer;
  background: rgba(0,0,0,0.35); color: #fff; font-size: 1.7rem; line-height: 1;
  display: flex; align-items: center; justify-content: center;
}
.lightbox__nav:hover:not(:disabled) { background: rgba(0,0,0,0.55); }
.lightbox__nav:disabled { opacity: 0.25; cursor: default; }
.lightbox__nav--prev { left: 14px; }
.lightbox__nav--next { right: 14px; }
/* `.lightbox__image-wrap` = celá plocha stage (`inset: 0`, ne podle
   obsahu) — aktuální i sousední fotka (během tažení) sdílí STEJNOU buňku
   (`grid-column/row: 1`, viz .lightbox__image), navrstvené na sebe. */
/* `touch-action: none` (17.8.2026, spolu s pojistkou v main.js — viz
   galleryFinishOnce()): bez něj si prohlížeč u dotykových displejů a
   přesných touchpadů může vodorovný pohyb vyhodnotit jako posun stránky,
   gesto si vzít pro sebe a to naše uprostřed zrušit (`pointercancel`).
   Přepínání fotek pak vypadalo, že po pár tazích přestalo fungovat. */
.lightbox__image-wrap { position: absolute; inset: 0; display: grid; place-items: center; overflow: hidden; touch-action: none; }
.lightbox__image {
  grid-column: 1; grid-row: 1;
  max-width: 96%; max-height: 96%; object-fit: contain;
  box-shadow: 0 8px 32px rgba(0,0,0,0.5);
  transition: transform 0.32s cubic-bezier(0.22,0.61,0.36,1), opacity 0.32s ease;
  will-change: transform, opacity;
  /* Pointer eventy chytá `.lightbox__image-wrap` (main.js), ne samotná
     fotka — jinak by prohlížeč nabízel nativní drag-n-drop obrázku a
     vlastní swipe by se s ním rval. */
  -webkit-user-drag: none; user-select: none; pointer-events: none;
}
.modal--lightbox.is-dragging .lightbox__image { transition: none; }
.lightbox__image--neighbor { z-index: 1; }
.lightbox__image--neighbor[hidden] { display: none; }
.lightbox__caption {
  margin: 0; padding: 12px 60px; text-align: center; color: #fff;
  font-size: 0.92rem; text-shadow: 0 1px 3px rgba(0,0,0,0.7);
}
.lightbox__caption:empty { display: none; }
/* Zamčení scrollu stránky pod fullscreen popupem, viz openModal()/
   closeModal() v main.js — týká se JEN `.modal--lightbox` (ostatní menší
   modály, kde je pozadí vidět, scroll stránky nezamykají). */
body.is-lightbox-open { overflow: hidden; }
@media (max-width: 560px) {
  .lightbox__nav { width: 40px; height: 40px; font-size: 1.4rem; }
  .lightbox__nav--prev { left: 6px; }
  .lightbox__nav--next { right: 6px; }
  .lightbox__caption { padding: 10px 46px; font-size: 0.86rem; }
}

/* Modál kalendáře obsazenosti Besedy (CalendarModal, footer.php) — vložený
   Google Kalendář (iframe), viz oldrichov_get_beseda_calendar_embed_url()
   ve functions.php. Bez nastaveného odkazu zůstává úzký dialog s hláškou
   "připravuje se" (výchozí .modal-dialog/.modal-body výše). */
.modal-dialog--calendar { max-width: 760px; }
.modal-body--calendar { padding: 0; }
.modal-body--calendar #calendar1 iframe { width: 100%; height: 600px; display: block; }
.calendar-embed-fallback { padding: 10px 20px; margin: 0; border-top: 1px solid var(--border); font-size: 0.9rem; }
@media (max-width: 560px) {
  .modal-body--calendar #calendar1 iframe { height: 460px; }
}

/* Vložené video na detailu příspěvku (9.8.2026, na přání — vlastní pole
   `watch`, single.php). Poměr stran 16:9 přes nativní `aspect-ratio`
   (stejná technika jako `.thumb .img`/`.gallery-card__mosaic` jinde v
   tématu) — ne starší "padding-top: 56.25%" trik, protože ten by tady
   počítal výšku procentem ze šířky RODIČE (článku), ne z vlastní finální
   šířky videa po přesahu přes okraj (viz dál) — se zápornými okraji by tak
   vyšel mírně zkreslený poměr stran. `aspect-ratio` počítá vždy ze
   skutečné vykreslené šířky prvku, takže je to spolehlivé i s přesahem.
   Roztažení přes šířku příspěvku (9.8.2026, na přání — "roztáhněme přes
   šířku příspěvku"): `single.php`'s `.container` má `max-width: 860px`,
   ale sám `.container` má `padding: 0 20px` (viz pravidlo výše), takže
   běžný obsah (nadpis, text, obrázek) je fakticky jen ~820px — o 20px užší
   na každé straně, než je celková šířka příspěvku. Video záměrně "vybublá"
   přes tenhle vnitřní odstup (`margin: 0 -20px`), ať sahá až k VNĚJŠÍMU
   okraji příspěvku (860px), ne jen k okraji textového sloupce — běžný
   způsob, jak zvýraznit hlavní médium příspěvku oproti běžnému textu pod
   ním. */
.post-video { position: relative; width: auto; aspect-ratio: 16 / 9; margin: 0 -20px 24px; border-radius: 8px; overflow: hidden; background: #000; }
.post-video iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; display: block; }

/* Náhledový obrázek statické stránky nad archivním výpisem (17.8.2026,
   viz oldrichov_render_page_lead_image() ve functions.php) — stejné
   zaoblení i odsazení, jaké má náhledový obrázek na detailu příspěvku
   (single.php), aby to byl zjevně tentýž prvek, ne nový. */
.page-lead-image { margin: 0 0 24px; border-radius: 8px; overflow: hidden; }
.page-lead-image img { display: block; width: 100%; height: auto; }

/* Náhradní banner u úředních dokumentů bez vlastní fotky (17.8.2026, viz
   komentář v single.php). Obdoba v2's `test-2017.jpg`, ale poskládaná
   z HTML + SVG loga místo rastru. Pevná výška místo poměru stran — obsah
   je vektor a text, ne fotka, a pás tak nikdy neodsune obsah příliš
   daleko dolů. Zaoblení a spodní odsazení stejné jako u náhledové fotky
   příspěvku, ať to působí jako tentýž prvek, ne nová komponenta. */
.post-doc-banner {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px;
  height: 240px; margin: 0 0 24px; padding: 20px;
  background: var(--bg-soft); border: 1px solid var(--border); border-radius: 8px;
}
.post-doc-banner__logo { width: min(340px, 78%); height: auto; }
.post-doc-banner__sub {
  font-family: var(--font-display); font-weight: 300; font-size: 0.78rem;
  letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-muted); text-align: center;
}
@media (max-width: 560px) {
  .post-doc-banner { height: 170px; gap: 10px; }
  .post-doc-banner__sub { font-size: 0.7rem; letter-spacing: 0.1em; }
}

/* =========================================================
   PŘÍLOHY A FOTOGALERIE U PŘÍSPĚVKU (single.php)
   Doplněno 1.8.2026 — přílohy stejná vizuální řeč jako sloupec Přílohy na
   dokumentových stránkách (.deska-table__files, viz sekce ÚŘEDNÍ DESKA
   výše), fotogalerie jako responzivní mřížka náhledů s lightboxem.
   ========================================================= */
.post-attachments { margin: 28px 0; padding-top: 20px; border-top: 1px solid var(--border); }
.post-attachments__title { font-size: 1.1rem; margin: 0 0 12px; }
.post-attachments .deska-table__files { margin-top: 0; }

.post-gallery-wrap { margin: 28px 0; padding-top: 20px; border-top: 1px solid var(--border); }
/* Náhled fotogalerie u příspěvku (single.php, 4.8.2026, na přání —
   inspirace idnes.cz, temp/Snímek…idnes.cz.jpeg, a v7): recykluje STEJNOU
   ".thumbs"/".thumb" mřížku jako fotogalerie jinde na webu (žádná nová
   dlaždicová komponenta, žádný nový responzivní zlom — stejné 4/2 sloupce
   jako fotogalerie jinde, viz media query u ".thumbs" níž v sekci
   RESPONSIVE). ".post-gallery__item" (JS hook v main.js) teď zůstává čistě
   funkční třída beze VLASTNÍHO vzhledu — vizuál dostává přes ".thumb", ne
   přes starou img-based mřížku (ta odstraněná).

   PŘEDĚLÁNO 6.8.2026 (na přání — "koukni na Snímek obrazovky 2026-08-04
   141858.png a inspiruj se, žádné animace, jen full screen poup náhledů"):
   screenshot ukazuje čtyři dlaždice TĚSNĚ vedle sebe v jedné zaoblené
   bílé kartě (ne čtyři samostatné dlaždice s vlastním stínem/zaoblením
   a velkou mezerou mezi sebou jako dřív), poslední dlaždice jednobarevná
   s ikonkou fotoaparátu a číslem, bez animace při najetí myší. Zdrojová
   inspirace měla tmavě modrou — nahrazeno `--green-fill` (barva webu).
   Zůstává STEJNÁ `.thumbs`/`.thumb` základní třída (beze změny pro
   zbytek webu, např. dlaždice "Fotografie" na homepage) — tahle karta
   jen PŘEPISUJE vzhled uvnitř `.post-gallery-wrap` užšími selektory, ať
   se nic jinde na webu nezmění. Stejná úprava (bez animace, ne barva
   karty) aplikovaná i na mřížku VŠECH fotek uvnitř fullscreen popupu
   (`.gallery-grid-body .thumb`, viz níž) — je to jedna a tatáž fotogalerie,
   jen zúžený náhled vs. kompletní výpis, měly by se chovat stejně staticky. */
.post-gallery-wrap .thumbs {
  gap: 3px; background: #fff; border-radius: 10px; overflow: hidden;
  box-shadow: 0 2px 10px rgba(0,0,0,0.12);
}
.post-gallery-wrap .thumb figure { border-radius: 0; box-shadow: none; }
/* Bez podkladové fotky (viz single.php) nemá "figure" žádný obsah, který
   by mu dal výšku — bez "height: 100%" by se srazilo na 0px, i když je
   jeho rodič `<a>` díky výchozímu grid `align-items: stretch` natažený
   na výšku řady. */
.post-gallery-wrap .thumb--more figure { background: var(--green-fill); height: 100%; }
/* Žádná animace při najetí myší (viz doc-komentář výš) — přepisuje
   základní ".thumb"/".thumb:hover" transformace jen v tomhle kontextu. */
.post-gallery-wrap .thumb,
.post-gallery-wrap .thumb .img,
.gallery-grid-body .thumb,
.gallery-grid-body .thumb .img { transition: none; }
.post-gallery-wrap .thumb:hover,
.gallery-grid-body .thumb:hover { transform: none; }
.post-gallery-wrap .thumb:hover figure { box-shadow: none; }
.gallery-grid-body .thumb:hover figure { box-shadow: 0 2px 10px rgba(0,0,0,0.4); }
.post-gallery-wrap .thumb:hover .img,
.gallery-grid-body .thumb:hover .img { transform: none; }
/* Poslední dlaždice náhledu, když je fotek víc než se vejde — velké "+N"
   uprostřed (obdoba fotoaparátu s číslem na idnes.cz), místo drobné
   bublinky ".thumb-count" (ta by se tu jako hlavní sdělení dlaždice
   ztratila). PŮVODNĚ ztmavená SKUTEČNÁ fotka (`filter: brightness(0.4)`)
   pod překryvem — 6.8.2026 (na přání, inspirace přiloženým screenshotem
   "Snímek obrazovky 2026-08-04 141858.png") přepnuto na jednobarevnou
   dlaždici bez fotky pod ní (`.thumb--more figure`, viz níž u
   `.post-gallery-wrap`) — věrnější tomu, co bylo na screenshotu. */
.thumb-more-overlay {
  position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 4px; color: #fff; font-family: var(--font-display); font-weight: 500; font-size: 1.4rem;
}
.thumb-more-overlay svg { opacity: 0.9; }
/* Fullscreen popup se všemi fotkami jako náhledy (PostGalleryModal,
   single.php) — scrollovací mřížka uvnitř (může mít desítky fotek). Klik
   na jednotlivou dlaždici uvnitř otevře existující GalleryModal
   (zvětšenina) nad tímhle popupem — stejný z-index vrstva jako ostatní
   ".modal", pořadí v DOM (GalleryModal je ve footer.php, tedy AŽ za
   tímhle) rozhoduje, který je navrchu.

   PŘEDĚLÁNO 6.8.2026 (na přání — "uprav popup okno náhledů na fullscreen,
   ktery prekryje celou stránku, podobně jako v7"): dřív bílá karta na
   tlumeném pozadí (`.modal-dialog--gallery-grid`, max-width 1100px/95vw,
   78vh) — `.modal--gallery-grid` teď přebírá STEJNÝ tmavý celoobrazovkový
   základ jako `.modal--lightbox` výš (bez `.modal-dialog`/`.modal-content`
   obálky, žádný padding na `.modal`), jen s vlastní hlavičkou
   (`.gallery-grid-header` — nadpis + křížek, oboje bílé na tmavém pozadí)
   nad scrollovací mřížkou (`.gallery-grid-body`, `flex: 1; min-height: 0;`
   stejný důvod jako u `.lightbox__stage` — jinak by dlouhá mřížka
   protáhla celý modál mimo viewport). Otevírání/zavírání (scroll lock,
   klik na pozadí NEzavírá) sdílí stejnou větev v main.js jako
   `.modal--lightbox`, viz `openModal()`/`closeModal()`. Stín dlaždic při
   hoveru (`.gallery-grid-body .thumb:hover figure` výš) ztmavený víc než
   jinde (`rgba(0,0,0,0.4)` místo `0.12`), protože na tmavém pozadí by
   původní jemný stín nebyl vidět. */
.modal--gallery-grid { background: rgba(6,10,6,0.94); padding: 0; flex-direction: column; align-items: stretch; }
.gallery-grid-header {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  flex: 0 0 auto; padding: 14px 20px; color: #fff;
}
.gallery-grid-header h2 {
  margin: 0; font-size: 1.1rem; color: #fff;
  font-family: var(--font-display); font-weight: 300;
}
.modal--gallery-grid .modal-close { color: #fff; background: rgba(0,0,0,0.35); border-radius: 50%; }
.modal--gallery-grid .modal-close:hover { color: #fff; background: rgba(0,0,0,0.55); }
.gallery-grid-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 20px 24px; }
.gallery-grid-body .thumbs { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
@media (max-width: 560px) {
  .gallery-grid-header { padding: 12px 16px; }
  .gallery-grid-body { padding: 0 12px 20px; }
  .gallery-grid-body .thumbs { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 10px; }
}

/* Rubriky a štítky u příspěvku (single.php, 4.8.2026) — druhý pokus po
   "ten nadpis zruš... vypisuj třeba méně graficky zvýrazněně, třeba s
   ikonkou a hintem že to jsou rubriky a tohle jsou štítky": žádné <h2>,
   žádné barevné pilulky (na rozdíl od ".tag-cloud" na homepage/výpisech)
   — jen drobná ikonka (obrys, stejný styl jako "+N" u galerie výš) +
   malý zetlumený popisek a obyčejné odkazy oddělené čárkou v běžném
   textu. Záměrně nenápadné, ať to dole pod obsahem nesoutěží o pozornost. */
.post-taxonomy { margin: 24px 0 0; padding-top: 16px; border-top: 1px solid var(--border); display: flex; flex-wrap: wrap; align-items: center; gap: 8px 22px; }
/* Řádek rubrik/štítků je BLOK s ikonkou jako obyčejným inline prvkem, ne
   flex (24.8.2026, na přání — „nezalamuj rubriky tak, aby ikonka byla
   samostatně“). Ve flexu byly ikonka a výčet dvě samostatné položky: jakmile
   se výčet nevešel na jeden řádek, spadl CELÝ pod ikonku a ta zůstala na
   prvním řádku sama (viz temp/Snímek obrazovky 2026-08-24 101217.png).
   V inline toku se text zalomí až ZA ikonkou, takže ikonka vždycky stojí
   u prvního řádku výčtu. `vertical-align` srovná 15px ikonku na účaří
   drobnějšího textu. */
.post-taxonomy__row { display: block; margin: 0; font-size: 0.86rem; color: var(--text-muted); }
.post-taxonomy__icon { display: inline-block; vertical-align: -3px; margin-right: 6px; opacity: 0.75; }
.post-taxonomy__row a { color: var(--text-muted); text-decoration: underline; text-decoration-color: var(--border); text-underline-offset: 2px; }
.post-taxonomy__row a:hover { color: var(--green-text); text-decoration-color: currentColor; }

/* =========================================================
   DETAIL PŘÍSPĚVKU — PRAVÝ SLOUPEC "PODROBNOSTI" (single.php)
   17.8.2026, na přání — "líbí se mi použít vertikální text vícekrát
   v rámci stránek jako sjednocující prvek" (screenshot dnešního webu
   temp/Snímek obrazovky_17-8-2026_84844_oldrichov.cz.jpeg, kde má v2
   u detailu příspěvku svislý štítek "Podrobnosti").

   Mřížka je RECYKLOVANÁ `.deska-layout` (2.1fr + 1fr) z dokumentových
   stránek a svislý štítek RECYKLOVANÝ `.col-labeled`/`.col-label-vert`
   z homepage a archive.php — žádná nová vizuální řeč, jen rozšíření té
   existující na další šablonu. Proto je tady jen to, co je pro tenhle
   sloupec skutečně specifické.
   ========================================================= */
/* Čtecí sloupec: dřív měl celý `.container` natvrdo max-width 860px
   (inline styl v single.php). Teď drží šířku `.deska-layout` mřížka —
   `min-width: 0` je nutnost každého grid dítěte, které má uvnitř něco
   potenciálně širokého (dlouhá URL v textu, `<pre>`, tabulka v obsahu
   příspěvku): bez něj má grid položka `min-width: auto` a dlouhý
   nezalomitelný obsah by sloupec roztlačil, místo aby se zalomil.
   `max-width` drží čtecí řádek v rozumné délce i na velkých monitorech. */
.post-main { min-width: 0; max-width: 860px; }
/* Nadpis je samostatná položka mřížky v 1. řádku, obsah a "Podrobnosti"
   až ve 2. řádku (17.8.2026, na přání — "tu pravou část s meta informacemi
   … dej do roviny začátku příspěvku ne nadpisu"). Řeší to SDÍLENÁ třída
   `.deska-head` (viz sekce ÚŘEDNÍ DESKA níž) — stejný prvek, jaký od
   17.8.2026 používají i statické stránky s postranním menu, dokumentové
   stránky a archivní výpisy. Tady se k ní nic zvláštního nepřidává. */
/* Video se u 860px `.container`u záměrně roztahovalo přes jeho vnitřní
   padding (`margin: 0 -20px`, viz `.post-video` výš). Uvnitř mřížky už
   žádný takový vnitřní odstup není — přesah by video vystrčil pod svislý
   štítek vlevo a do mezery mřížky vpravo. */
.post-layout .post-video { margin-left: 0; margin-right: 0; }
.post-side.col-labeled { padding-left: 28px; }
/* Štítek začíná úplně nahoře (v rovině H1 v levém sloupci), čárka pod
   textem — stejné pořadí jako homepage, jen bez jejího `padding-top`,
   který tam existuje kvůli zachování původní polohy textu. */
.post-side .col-label-vert { padding-top: 0; }
.post-side__block { margin-bottom: 26px; }
.post-side__block:last-child { margin-bottom: 0; }
.post-side__block + .post-side__block { padding-top: 22px; border-top: 1px solid var(--border); }
/* Velikost písma v pravém sloupci „Podrobnosti“ (18.8.2026, na přání —
   „přijde mi, že by se to písmo dalo o nějaké procento zvětšit“).
   Zvětšeno zhruba o desetinu napříč celým sloupcem, ať to zůstane
   proporční: nadpisy bloků 0,85 → 0,92 rem, hodnoty 0,9 → 1 rem,
   popisky údajů 0,72 → 0,78 rem, seznamy 0,88 → 0,95 rem.

   POZNÁMKA K SYSTÉMU: nadpisy ostatních vedlejších bloků na webu
   (`.deska-sidebar h2`, `.footer-col h3`, `.hero-panel h2`) zůstávají na
   0,85 rem. `.post-side__title` se od nich tedy o kousek liší — je to
   vědomá výjimka pro tenhle jeden sloupec, ne nedopatření. Kdyby se
   někdy sjednocovalo, sjednotit směrem NAHORU, ne zpátky dolů. */
.post-side__title { font-size: 0.92rem; font-family: var(--font-display); font-weight: 300; text-transform: uppercase; letter-spacing: 0.03em; margin: 0 0 10px; color: var(--text-muted); }
/* Definiční seznam místo jednoho meta řádku — v úzkém sloupci by se
   "Vyvěšeno · Sňato · Zveřejnil" beztak zalomilo, takže je čitelnější
   (a pro čtečku obrazovky popsanější) mít popisek a hodnotu jako dvojici. */
.post-side__meta { margin: 0; font-size: 1rem; }
.post-side__meta dt { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin: 0 0 2px; }
.post-side__meta dd { margin: 0 0 12px; color: #000; }
.post-side__meta dd:last-child { margin-bottom: 0; }
.post-side__links { margin: 12px 0 0; font-size: 0.95rem; line-height: 1.9; }
/* POZOR: `.deska-table__files` je od 9.8.2026 PLOVOUCÍ POPUP nad tabulkou
   úřední desky (`position: absolute; top: 100%`) — v pravém sloupci je to
   ale obyčejný seznam příloh, ne popup, takže se pozicování musí zrušit,
   jinak by seznam vylétl mimo sloupec (nejbližší pozicovaný předek by byl
   až sticky hlavička). Stejný nedopatřený stav měl do 17.8.2026 i starý
   blok `.post-attachments` v single.php — ten už neexistuje, přílohy se
   vykreslují jen tady. */
.post-side .deska-table__files {
  position: static; width: auto; max-width: none; padding: 0; margin: 0;
  background: none; border: none; box-shadow: none;
}
/* Přílohy tady NEJSOU „pilulky“ (24.8.2026, na přání — „zrušit pozadí pod
   přílohami a rámeček, jen to červené označení PDF je dostačující“).
   V tabulce úřední desky má chip pozadí a rámeček proto, že leží v plovoucím
   popupu nad tabulkou a musí se od ní opticky odlepit — v pravém sloupci
   žádné takové pozadí není a rámeček jen přidával šum vedle sousedních
   prostých údajů (Vyvěšeno, Zveřejnil, rubriky). Zůstává barevný odznak
   typu souboru: informaci „je to PDF“ nic jiného nenese.

   Seznam se přitom staví POD sebe — bez rámečků by dvě přílohy na jednom
   řádku splynuly v jednu větu. Vzhled odkazu je stejný jako u rubrik/štítků
   níž (podtržení v barvě linky, zelená při najetí), ať se sloupec drží
   jedné typografické řeči. */
.post-side .deska-table__files { display: block; }
.post-side .deska-table__files li + li { margin-top: 8px; }
.post-side .deska-table__files a {
  background: none; border: none; border-radius: 0; padding: 0;
  font-size: 0.95rem; font-weight: 400; color: #000;
  text-decoration: underline; text-decoration-color: var(--border); text-underline-offset: 2px;
}
.post-side .deska-table__files a:hover,
.post-side .deska-table__files a:focus-visible {
  background: none; color: var(--green-text); text-decoration-color: currentColor;
}
.post-side .deska-table__ext { font-size: 0.7rem; }

/* Sdílení a tisk jako kroužky (18.8.2026, na přání — „sdílení udělat jen
   jako ikonky v kroužku, jako je ikonka hledání, plus přidat tisk“).
   Rozměr 44×44 a tenký rámeček jsou převzaté 1:1 z `.search-btn`
   (lupa v hlavičce), ať je na první pohled vidět, že jde o tentýž prvek.
   Čtyři kroužky se i s mezerami vejdou do sloupce širokého ~310 px.

   44 px je zároveň s velkou rezervou nad hranicí, kterou žádá WCAG 2.2
   (kritérium 2.5.8 Target Size, minimum 24×24) — u ikonky bez popisku je
   velikost terče to jediné, co ji dělá použitelnou na dotyku.

   `<button>` (tisk) potřebuje `font: inherit` a `padding: 0`, jinak si
   prohlížeč prosadí vlastní vzhled formulářového prvku a kroužek se
   rozjede vůči sousedním odkazům. */
.share-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 12px 0 0; }
.share-btn {
  width: 44px; height: 44px; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 50%;
  color: #000;
  cursor: pointer;
  padding: 0;
  font: inherit;
  text-decoration: none;
  transition: border-color 0.2s ease, color 0.2s ease;
}
.share-btn:hover, .share-btn:focus-visible { border-color: var(--green-text); color: var(--green-text); }
.share-btn svg { width: 19px; height: 19px; }
/* Rubriky/štítky se v úzkém sloupci vrací POD sebe (na šířku článku
   stály vedle sebe, viz `.post-taxonomy` výš) a bez horní linky —
   oddělení už dělá `.post-side__block + .post-side__block`. */
.post-side .post-taxonomy { margin: 0; padding-top: 0; border-top: none; flex-direction: column; align-items: stretch; gap: 8px; }
@media (max-width: 900px) {
  /* `.deska-layout` se pod 900px sesype do jednoho sloupce (viz sekce
     ÚŘEDNÍ DESKA) — svislý štítek by v plné šířce působil jako omyl,
     takže se z něj stane obyčejný vodorovný nadpis nad podrobnostmi,
     stejný jako ostatní `.post-side__title`. */
  .post-main { max-width: none; }
  .post-side.col-labeled { padding-left: 0; padding-top: 22px; border-top: 1px solid var(--border); }
  .post-side .col-label-vert { position: static; flex-direction: row; align-items: center; gap: 10px; margin: 0 0 16px; }
  .post-side .col-label-vert .col-rule { width: 28px; height: 1px; margin: 0; order: 0; }
  .post-side .col-label-vert .col-label { writing-mode: horizontal-tb; transform: none; order: 1; font-size: 0.8rem; }
}

/* Procházení předchozí/následující příspěvek (2.8.2026, na přání — "u
   aktualit dopln prochazeni predchozi, nasledujici"), viz single.php. */
.post-adjacent-nav { display: flex; justify-content: space-between; gap: 24px; margin: 8px 0 28px; padding-top: 20px; border-top: 1px solid var(--border); }
.post-adjacent-nav__link { display: flex; flex-direction: column; gap: 4px; max-width: 46%; text-decoration: none; }
.post-adjacent-nav__link--next { text-align: right; margin-left: auto; }
.post-adjacent-nav__dir { font-family: var(--font-display); font-size: 0.78rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--green-text); }
/* Název předchozího/následujícího příspěvku (18.8.2026, na přání — „odkaz
   předchozí, další, názvy příspěvků nedělej tučně“). Váha 400 = přesně
   jako titulky ve výpisech aktualit (.news-list-plain/.news-list-photo
   .title), takže se tenhle odkaz konečně chová jako všechny ostatní
   odkazy na příspěvek. Že je to odkaz, drží podtržení při najetí a
   zelený nadpisek PŘEDCHOZÍ/DALŠÍ nad ním — na tučnost se to spoléhat
   nemusí. */
.post-adjacent-nav__title { font-weight: 400; color: #000; }
.post-adjacent-nav__link:hover .post-adjacent-nav__title,
.post-adjacent-nav__link:focus-visible .post-adjacent-nav__title { color: var(--green-text); text-decoration: underline; }
@media (max-width: 640px) {
  .post-adjacent-nav { flex-direction: column; gap: 14px; }
  .post-adjacent-nav__link, .post-adjacent-nav__link--next { max-width: 100%; text-align: left; margin-left: 0; }
}

/* =========================================================
   COOKIE LIŠTA
   ========================================================= */
.cookie-bar {
  position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 250;
  max-width: 560px; margin: 0 auto; background: #14200f; color: #fff;
  border-radius: 8px; padding: 18px 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.3);
}
.cookie-bar[hidden] { display: none; }
.cookie-bar h2 { color: #fff; font-size: 1.05rem; margin: 0 0 6px; }
.cookie-bar p { font-size: 0.88rem; margin: 0 0 14px; color: rgba(255,255,255,0.88); }
.cookie-bar .actions { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; }
.cookie-bar .btn-accept {
  background: var(--gold); color: #14200f; border: none; padding: 9px 20px; border-radius: var(--radius);
  font-weight: 700; cursor: pointer; font: inherit; min-height: 40px;
}
.cookie-bar a { color: #fff; font-size: 0.85rem; }

/* =========================================================
   EDITAČNÍ TLAČÍTKO — plovoucí "Upravit" pro přihlášeného
   uživatele s právem editace aktuální stránky/příspěvku
   (1.8.2026) — viz oldrichov_render_edit_fab() ve functions.php.
   Nižší z-index než .cookie-bar (250), aby lišta zůstala nahoře
   čitelná, kdyby se obě náhodou překryly; dokud je cookie lišta
   viditelná, main.js dopočítá a nastaví `bottom` inline (podle
   skutečné výšky lišty, ne napevno v CSS — viz positionEditFab()),
   ať tlačítko na mobilu nezmizí pod širokou cookie lištou.
   ========================================================= */
.edit-fab {
  position: fixed; right: 16px; bottom: 16px; z-index: 240;
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--green-fill); color: #fff; text-decoration: none;
  padding: 10px 16px; border-radius: 999px; font-weight: 700; font-size: 0.9rem;
  box-shadow: 0 6px 18px rgba(0,0,0,0.25); line-height: 1;
  transition: background 0.15s ease, transform 0.15s ease, bottom 0.15s ease;
}
.edit-fab:hover, .edit-fab:focus-visible { background: var(--green-text); color: #fff; text-decoration: none; transform: translateY(-2px); }
.edit-fab svg { flex-shrink: 0; }
@media (max-width: 480px) {
  .edit-fab { right: 12px; bottom: 12px; padding: 9px 14px; font-size: 0.85rem; }
}

/* =========================================================
   ZPĚT NAHORU (17.8.2026, na přání — "chybí šipka nahoru při dlouhé
   stránce"). Objeví se až po odrolování, viz main.js.

   Sedí ve stejném rohu jako editační tlačítko, ale o patro níž
   (z-index 235 < 240) a main.js ho v případě potřeby posune nad
   editační tlačítko i nad cookie lištu, ať se nikdy nepřekrývají.
   Velikost 46×46 px — pohodlný cíl i prstem na mobilu.
   ========================================================= */
.to-top {
  position: fixed; right: 16px; bottom: 16px; z-index: 235;
  width: 46px; height: 46px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: #fff; color: var(--green-text);
  border: 1px solid var(--border); border-radius: 999px; cursor: pointer;
  box-shadow: 0 6px 18px rgba(0,0,0,0.18);
  transition: background 0.15s ease, color 0.15s ease, transform 0.15s ease, bottom 0.15s ease;
  animation: to-top-in 180ms ease-out;
}
.to-top:hover, .to-top:focus-visible { background: var(--green-fill); color: #fff; border-color: var(--green-fill); transform: translateY(-2px); }
.to-top[hidden] { display: none; }
@keyframes to-top-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (max-width: 480px) {
  .to-top { right: 12px; bottom: 12px; }
}
@media (prefers-reduced-motion: reduce) {
  .to-top { animation: none; }
  /* `html { scroll-behavior: smooth }` (nahoře v souboru) by jinak plynule
     posouval celou stránku i tomu, kdo si pohyb vypnul — a tohle tlačítko
     odroluje přes celou její délku, takže je to ten nejvýraznější pohyb
     na webu. */
  html { scroll-behavior: auto; }
}

.link-list { list-style: none; margin: 0; padding: 0; }
.link-list li { padding: 7px 0; border-bottom: none; }
.link-list a { color: #333; text-decoration: none; font-size: 0.95rem; }
.link-list a::before { content: "›"; color: var(--green-text); font-weight: 700; margin-right: 8px; }
.link-list a:hover { color: var(--green-text); text-decoration: underline; }

/* Nadpis nad "Odkazy" na úvodní straně (3.8.2026, na přání — "seznam na
   úvodní straně používej v podobné podobě jako výpis podstránek, bez
   pozadí") — stejný typografický vzor jako .deska-sidebar h2/.subpage-links
   h2 (verzálky, tenčí, šedý text), ale bez boxu/pozadí kolem seznamu. */
.link-list-col__title { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.03em; margin: 0 0 10px; color: var(--text-muted); }

/* =========================================================
   DROBEČKOVÁ NAVIGACE (2.8.2026, na přání — "dopln drobeckovou navigaci")
   — oldrichov_render_breadcrumbs() ve functions.php, volaná hned po
   get_header() v každé šabloně kromě homepage (tam funkce sama nic
   nevykreslí, is_front_page() guard uvnitř). Tenký pruh hned pod
   hlavičkou, přes celou šířku (mimo .container), aby vizuálně oddělil
   navigaci webu od obsahu stránky.
   ========================================================= */
.breadcrumbs { background: var(--bg-soft); border-bottom: 1px solid var(--border); padding: 10px 0; }
.breadcrumbs ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 0; font-size: 0.86rem; color: var(--text-muted); }
.breadcrumbs li { display: flex; align-items: center; }
.breadcrumbs li:not(:first-child)::before { content: "›"; color: var(--text-muted); font-weight: 700; margin: 0 8px; }
.breadcrumbs a { color: var(--text-muted); text-decoration: none; }
.breadcrumbs a:hover, .breadcrumbs a:focus-visible { color: var(--green-text); text-decoration: underline; }
.breadcrumbs [aria-current="page"] { color: var(--text); font-weight: 600; }

/* Podstránky (2.8.2026, na přání — "u statickych stranek vypisovat jejich
   podstranky") — oldrichov_render_child_pages() ve functions.php,
   vypisuje přímé potomky aktuální stránky podle SKUTEČNÉ hierarchie stránek
   z administrace. Recykluje .link-list, jen v novém bloku pod obsahem
   článku (page.php), stejný nadpisový vzor jako .deska-sidebar h2. */
.subpage-links { margin-top: 28px; padding-top: 20px; border-top: 1px solid var(--border); }
.subpage-links h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.03em; margin: 0 0 10px; color: var(--text-muted); }

.load-more { margin-top: 2px; }
/* Podtržení vždy veselou zelenou (2.8.2026, na přání) — text zůstává
   černý, dokud na odkaz nenajedete myší/fokusem, pak zezelená i on. */
.load-more a { text-decoration: none; text-transform: uppercase; font-size: 0.82rem; letter-spacing: 0.04em; font-weight: 700; border-bottom: 2px solid var(--green-panel); color: #000; padding-bottom: 2px; }
.load-more a:hover, .load-more a:focus-visible { border-color: var(--green-fill); color: var(--green-text); }
.load-more a::after { content: ' →'; }

/* Filtr "Rok" (2.8.2026, na přání — "u kategorii a štítků, výpisů doplň
   možnost filtrovat dle roku") — obyčejné odkazy/pilulky, sdílené mezi
   archive.php (rubriky/štítky) a dokumentovými stránkami (Úřední deska a
   spol.). Vykresluje je oldrichov_render_year_filter() ve functions.php. */
.year-filter { margin: 2px 0 22px; }
/* Svislý seznam, "co rok to řádek" (3.8.2026, na přání), místo dřívějších
   vodorovných pilulek — recykluje vzhled .link-list (odrážka ›, bez
   pozadí), jen aktivní rok je tučný a zelený místo vlastní pilulky. */
.year-filter ul { list-style: none; margin: 0; padding: 0; }
.year-filter li { padding: 3px 0; }
.year-filter a {
  display: inline-block; font-family: var(--font-display);
  font-size: 0.9rem; font-weight: 500; letter-spacing: 0.01em;
  color: var(--text); text-decoration: none;
}
.year-filter a::before { content: "›"; color: var(--green-text); font-weight: 700; margin-right: 8px; }
.year-filter a:hover, .year-filter a:focus-visible { color: var(--green-text); text-decoration: underline; }
.year-filter a.is-active { color: var(--green-text); font-weight: 700; }
/* Počet příspěvků u každého roku (4.8.2026, na přání — "doplň ke každému
   roku počet příspěvků") — tenčí a šedý, ať vizuálně nekonkuruje roku
   samotnému; nedědí tučný řez aktivního roku. */
.year-filter__count { font-weight: 400; color: var(--text-muted); }

/* =========================================================
   ÚŘEDNÍ HODINY + KONTAKT + PLATBA — pás jako dnešní section-contact
   ========================================================= */
.contact-band { background: var(--bg-soft); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); padding: 38px 0; }
.contact-grid { display: grid; grid-template-columns: 1fr 1.5fr 1fr; gap: 32px; }
.contact-grid h3 { text-transform: uppercase; font-family: var(--font-display); font-weight: 500; font-size: 0.98rem; letter-spacing: 0.03em; margin-bottom: 12px; }
.hours-table { width: 100%; border-collapse: collapse; font-size: 0.94rem; }
.hours-table td { padding: 4px 0; }
.hours-table td:first-child { font-weight: 700; width: 2.4em; }
.contact-grid address { font-style: normal; font-size: 0.94rem; line-height: 1.75; }
.pay-banner { border-radius: var(--radius); overflow: hidden; line-height: 0; }
.pay-banner a { display: block; }
.pay-banner img { display: block; width: 100%; height: auto; }
.pay-banner a:focus-visible img { outline: 3px solid var(--green-fill); outline-offset: -3px; }

/* =========================================================
   PÁS FAKT — plná zelená (dnes #558B2F)
   ========================================================= */
.facts { background: var(--green-fill); color: #fff; padding: 30px 0; }
.facts-grid { display: grid; grid-template-columns: repeat(4, 1fr); }
.fact { padding: 0 22px; border-left: 1px solid rgba(255,255,255,0.35); }
.fact:first-child { border-left: none; padding-left: 0; }
.fact .num { font-family: var(--font-display); font-size: clamp(1.7rem, 3vw, 2.3rem); font-weight: 500; display: block; line-height: 1.05; }
.fact .label { font-size: 0.86rem; opacity: 0.95; }
@media (max-width: 760px) {
  .facts-grid { grid-template-columns: repeat(2, 1fr); row-gap: 18px; }
  .fact:nth-child(3) { border-left: none; padding-left: 0; }
}

/* =========================================================
   FOTOGALERIE — stejný vzor jako .thumb na dnešním webu
   ========================================================= */
.thumbs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.thumb { text-decoration: none; color: inherit; display: block; transition: transform 0.2s ease, box-shadow 0.2s ease; }
.thumb:hover { transform: translateY(-3px); }
.thumb figure { margin: 0; position: relative; overflow: hidden; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.12); }
.thumb:hover figure { box-shadow: 0 10px 22px rgba(0,0,0,0.2); }
.thumb .img { aspect-ratio: 4/3; background-size: cover; background-position: center; display: block; transition: transform 0.3s ease; }
.thumb:hover .img { transform: scale(1.05); }
.thumb-overlay { position: absolute; inset: 0; padding: 0.9rem; display: flex; flex-direction: column; justify-content: flex-end; background: linear-gradient(180deg, rgba(0,0,0,0) 40%, rgba(0,0,0,0.72) 100%); color: #fff; }
.thumb-date { font-size: 0.76rem; opacity: 0.95; margin-bottom: 2px; }
.thumb-title { margin: 0; font-size: 0.96rem; font-weight: 700; }
.thumb-count { position: absolute; top: 8px; right: 8px; background: rgba(0,0,0,0.6); color: #fff; padding: 3px 8px; font-size: 0.78rem; font-weight: 700; border-radius: 3px; }

/* Lazy load náhledů fotek (9.8.2026, na přání — "při načítání náhledů
   fotografií doplň lazy load animaci"). Náhledy dřív měly URL rovnou
   v inline stylu (background-image), takže se natáhly hned se stránkou;
   teď je URL v atributu data-bg (main.js) a obrázek se stáhne, až se
   náhled přiblíží k viewportu — do té doby je vidět jemně animovaný
   "shimmer" pruh místo prázdného/blikajícího místa. Atributový selektor
   [data-bg] platí pro všechny druhy náhledů najednou (.img ve
   fotogaleriích, .thumb-sm u novinek, mozaika výpisu fotogalerií). */
[data-bg] { position: relative; overflow: hidden; background-color: var(--bg-soft); }
[data-bg]::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: linear-gradient(100deg, rgba(255,255,255,0) 30%, rgba(255,255,255,0.65) 50%, rgba(255,255,255,0) 70%);
  background-size: 200% 100%;
  animation: img-shimmer 1.3s ease-in-out infinite;
}
[data-bg].img--loaded::before { content: none; }
[data-bg].img--loaded { animation: img-fade-in 0.35s ease; }
@keyframes img-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
@keyframes img-fade-in { from { opacity: 0.2; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  [data-bg]::before { animation: none; }
  [data-bg].img--loaded { animation: none; }
}

/* Výpis fotogalerií (kategorie Fotogalerie v archive.php + volitelná
   šablona template-vypis-fotogalerie.php, 4.8.2026, na přání — "dodělej
   totéž pro výpis fotogalerií, aby tam byl nějaký grafický rozdíl...
   první tři obrázky, název a krátký text s počtem fotografií") — grafická
   karta místo jednoho velkého náhledu s bublinkou počtu
   (`.thumb`/`.thumb-count` výše): mozaika prvních až 3 fotek z DANÉ
   galerie (ne jen featured thumbnail) + viditelný název + text pod ní,
   ať je vizuálně jasné, že jde o VÝPIS galerií (více fotoreportáží), ne
   o výpis jednotlivých fotek jako uvnitř jedné galerie (single.php) nebo
   ve zbytku webu.
   Jeden řádek místo mřížky, s úryvkem textu (5.8.2026, na přání — "myslím,
   že klidně může být jedna fotogalerie na řádek s delším popisem, a
   nevypisuj kdo zveřejnil, spíš kousek textu") — náhled mozaiky pevné
   velikosti vlevo (`.gallery-card__mosaic`, 220×150, stejný princip jako
   `.thumb-sm` u `.news-list-photo`), název/datum+počet fotek/úryvek
   vpravo (`.gallery-card__body`). Autor ZMIZEL ze `.gallery-card__meta`
   (zůstal jen datum + počet fotek) — nahradil ho úryvek textu příspěvku
   (`.gallery-card__excerpt`, stejný `oldrichov_truncate()` jako jinde).
   Animace přiblížení fotek při najetí myší (`transform: scale()`) ZRUŠENA
   na stejné přání — zůstal jen jemný stín karty při hoveru.
   Mozaika: 1 fotka = celá plocha; 2 fotky = dvě "náhodné" varianty
   (vedle sebe / nad sebou); 3 fotky = čtyři "náhodné" varianty (velká +
   dvě menší, rotující na všech 4 stranách) — modifikátor `--1`/`--2`/`--3`
   podle skutečného počtu fotek v dané galerii (ne vždy 3, viz PHP v
   archive.php) KOMBINOVANÝ s `--v0`…`--v3` podle
   `oldrichov_gallery_mosaic_variant()` (6.8.2026, na přání — "dokážeš dát
   ve výpisu fotogalerií náhodně rozložení náhledů tři náhledy jak jsou
   dnes a variabilně to měnit u dalšího řádku fotogalerie atd.") — hash
   z ID příspěvku, takže "náhodné", ale u KONKRÉTNÍ galerie vždy stejné
   (žádné blikání při refreshi/stránkování), a liší se řádek od řádku. */
.gallery-list { list-style: none; margin: 0 0 20px; padding: 0; }
.gallery-list li { padding: 20px 0; }
.gallery-list li:first-child { padding-top: 0; }
.gallery-card { text-decoration: none; color: inherit; display: flex; gap: 20px; align-items: flex-start; }
.gallery-card__mosaic {
  display: grid; gap: 4px; width: 220px; height: 150px; flex: none; border-radius: 8px; overflow: hidden;
  box-shadow: 0 2px 8px rgba(0,0,0,0.12); transition: box-shadow 0.2s ease;
}
.gallery-card:hover .gallery-card__mosaic { box-shadow: 0 10px 22px rgba(0,0,0,0.2); }
.gallery-card__mosaic .img { background-size: cover; background-position: center; }
.gallery-card__mosaic--1 { grid-template-columns: 1fr; }
/* 2 fotky — varianta v0 vedle sebe (původní), v1 nad sebou */
.gallery-card__mosaic--2.gallery-card__mosaic--v0 { grid-template-columns: 1fr 1fr; }
.gallery-card__mosaic--2.gallery-card__mosaic--v1 { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; }
/* 3 fotky — v0 velká vlevo (původní), v1 velká vpravo, v2 velká nahoře, v3 velká dole */
.gallery-card__mosaic--3.gallery-card__mosaic--v0 { grid-template-columns: 2fr 1fr; grid-template-rows: 1fr 1fr; }
.gallery-card__mosaic--3.gallery-card__mosaic--v0 .img:nth-child(1) { grid-row: 1 / span 2; }
.gallery-card__mosaic--3.gallery-card__mosaic--v1 { grid-template-columns: 1fr 2fr; grid-template-rows: 1fr 1fr; }
.gallery-card__mosaic--3.gallery-card__mosaic--v1 .img:nth-child(3) { grid-row: 1 / span 2; grid-column: 2; }
.gallery-card__mosaic--3.gallery-card__mosaic--v2 { grid-template-columns: 1fr 1fr; grid-template-rows: 2fr 1fr; }
.gallery-card__mosaic--3.gallery-card__mosaic--v2 .img:nth-child(1) { grid-column: 1 / span 2; }
.gallery-card__mosaic--3.gallery-card__mosaic--v3 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 2fr; }
.gallery-card__mosaic--3.gallery-card__mosaic--v3 .img:nth-child(3) { grid-row: 2; grid-column: 1 / span 2; }
.gallery-card__body { flex: 1; min-width: 0; }
.gallery-card__title { margin: 0 0 4px; font-size: 1.25rem; font-weight: 400; line-height: 1.2; color: #000; }
.gallery-card:hover .gallery-card__title { color: var(--green-text); text-decoration: underline; }
.gallery-card__meta { font-size: 0.92rem; color: var(--text-muted); margin: 0 0 4px; }
.gallery-card__excerpt { font-size: 1rem; margin: 0; }
@media (max-width: 480px) { .gallery-card { flex-direction: column; } .gallery-card__mosaic { width: 100%; height: auto; aspect-ratio: 16/10; } }

/* =========================================================
   ŠTÍTKY
   ========================================================= */
.tag-cloud { display: flex; flex-wrap: wrap; gap: 8px; }
.tag-cloud a { background: #eee; color: #444; padding: 5px 12px; border-radius: 3px; font-size: 0.86rem; text-decoration: none; }
.tag-cloud a:hover { background: var(--green-fill); color: #fff; }

/* =========================================================
   NEWSLETTER
   ========================================================= */
.newsletter { max-width: 620px; margin: 0 auto; text-align: center; }
.newsletter h2 { margin-bottom: 8px; text-transform: uppercase; }
.newsletter > p { color: var(--text-muted); margin: 0 0 20px; }
.newsletter form { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; align-items: flex-end; margin-bottom: 14px; }
.newsletter .field { text-align: left; }
.newsletter label { display: block; font-size: 0.9rem; font-weight: 600; margin-bottom: 6px; }
.newsletter input[type="email"] { padding: 10px 14px; border: 1px solid var(--border); border-radius: var(--radius); font: inherit; font-size: 1rem; min-width: 260px; }
.btn-grey {
  display: inline-block; background: var(--green-fill); color: #fff; padding: 10px 24px; border: none;
  border-radius: var(--radius); font: inherit; font-weight: 700; cursor: pointer; min-height: 42px;
  text-transform: uppercase; font-size: 0.88rem; letter-spacing: 0.03em;
  /* text-decoration:none doplněno 9.8.2026, kdy se .btn-grey poprvé použilo
     na <a> (404.php) — dřív jen na <button>, kde na tom nezáleželo, ale
     web má sitewide podtržené odkazy (a { text-decoration: underline }),
     takže by tlačítko-odkaz jinak vypadalo podtržené. */
  text-decoration: none;
}
.btn-grey:hover { background: #2e4f19; }
/* Tlačítko "Odebírat" bez zaškrtnutého souhlasu GDPR (6.8.2026) — zřetelně
   ztlumené/"disabled" vzezření, ne jen stejná zelená s jiným kurzorem. */
.btn-grey:disabled { background: #9aa79a; cursor: not-allowed; }
.btn-grey:disabled:hover { background: #9aa79a; }
.checkbox-row { display: flex; gap: 8px; align-items: flex-start; font-size: 0.85rem; justify-content: center; color: var(--text-muted); }
.newsletter form .checkbox-row { width: 100%; margin-top: 4px; }
.newsletter-notice { max-width: 560px; margin: 0 auto 16px; padding: 10px 16px; border-radius: var(--radius); font-size: 0.92rem; text-align: left; }
.newsletter-notice--success { background: #eaf3e3; color: var(--green-text); border: 1px solid #c3ddb0; }
.newsletter-notice--info { background: var(--bg-soft); color: var(--text); border: 1px solid var(--border); }
.newsletter-notice--error { background: #fbe9e7; color: var(--red-pay); border: 1px solid #f0c4bd; }

/* =========================================================
   BANNER DISTRIBUCE — zelený pás s bílou kartou uvnitř
   ========================================================= */
.util-banner { background: var(--green-fill); padding: 26px 0; }
.util-banner .card {
  background: #fff; border-radius: var(--radius); padding: 18px 24px;
  display: flex; align-items: center; justify-content: center;
}
.util-banner .card img { max-width: 100%; height: auto; display: block; }

/* =========================================================
   PATIČKA — plná zelená, prosté řádky odkazů (jako dnes)
   ========================================================= */
.site-footer { background: var(--green-fill); color: #fff; padding: 44px 0 20px; }
/* Podtržení jen na najetí myší/focus (3.8.2026, na přání — "v zápatí je
   strašně moc podtrženého textu, asi bych se vyhl podtrhávat odkazy. až na
   ně najedu myší") — dřív měly odkazy v patičce TRVALE tečkované podtržení
   (border-bottom), teď žádné, dokud na ně nenajedete myší nebo je
   neprocházíte klávesnicí. Klávesnicoví uživatelé i tak dostanou zlatý
   focus ring (a:focus-visible, viz výše) — podtržení na :focus-visible je
   navíc, ne jediný signál. */
.site-footer a { color: #fff; text-decoration: none; }
.site-footer a:hover, .site-footer a:focus-visible { text-decoration: underline; }
.footer-grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 30px; margin-bottom: 30px; }
/* Nadpisy v patičce ("Kontakty na úřad"/"Rychlé odkazy"/"Další odkazy"/
   "Přístupnost") bez podtržovací linky, tenké a větší písmo (6.8.2026, na
   přání — "nejsem přítelem podtržení... raději bez podtržení a tenké
   velké písmo") — dřív měly `border-bottom` (vypadalo jako trvalé
   podtržení) a tučnější řez (500). Teď stejný princip jako sitewide `h3`
   (Oswald, váha 300, větší velikost, 1.05rem místo 0.9rem — o něco menší
   než plných 1.25rem, ať se "Kontakty na úřad" vejdou na jeden/dva řádky
   i v nejužším sloupci patičky). */
.footer-col h3 { color: #fff; font-size: 1.05rem; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 12px; font-family: var(--font-display); font-weight: 300; }
.footer-col p, .footer-col ul { font-size: 0.92rem; }
.footer-col ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 7px; }
.footer-bottom { border-top: 1px solid rgba(255,255,255,0.3); padding-top: 16px; display: flex; justify-content: space-between; font-size: 0.82rem; flex-wrap: wrap; gap: 10px; color: rgba(255,255,255,0.85); }
.footer-bottom a { color: rgba(255,255,255,0.85); }
@media (max-width: 1000px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 760px) { .footer-grid { grid-template-columns: 1fr; } }

/* =========================================================
   RESPONSIVE
   ========================================================= */
@media (max-width: 1000px) {
  .thumbs { grid-template-columns: repeat(2, 1fr); }
  .contact-grid { grid-template-columns: 1fr; gap: 24px; }
}
/* Přepínač vodorovné menu ↔ hamburger menu (6.8.2026, přesunuto z
   `max-width: 760px` na `max-width: 1360px` — na přání "zkontroluj hlavní
   menu, aby bylo ve stejné řádce... menu lítá", viz vysvětlení u
   `.main-nav > ul` výš). Devět položek menu + lupa se do vodorovné lišty
   nevejde dřív než přibližně od ~1200px šířky hlavičky — mezi 761px a
   ~1360px se dřív menu VŽDY zalamovalo na 2 řádky (ne jen výjimečně),
   protože pro vodorovnou lištu prostě nebylo dost místa. Teď se v celém
   tomhle rozmezí rovnou použije už existující/funkční hamburger menu
   (beze změny vzhledu/chování toho menu samotného) místo věčně
   zalomeného řádku. Nad 1360px má `.site-header > .container` zase dost
   místa (max-width: 1360px, viz výš), aby se všech 9 položek vešlo na
   jeden řádek beze zalomení.

   STAŽENO NA 1150px (6.8.2026, na přání — "mobilní menu se přepíná
   příliš brzy, než může být zobrazeno"): ~1200px výš byl jen odhad od
   oka, ne změřená hodnota. Playwright binárním hledáním (skutečné SVG
   logo + skutečně načtený Oswald, ne náhradní font) změřil, že menu bez
   jakéhokoli zúžení potřebuje jen ~1067px šířky hlavičky — 1360px tak
   zbytečně posílalo do hamburgeru i široká okna/obrazovky mezi
   ~1067–1360px, kde by se vodorovné menu klidně vešlo (přesně ten pocit
   "menu se přepíná (do hamburgeru) příliš brzy"). Nová hranice 1150px
   dává ~83px rezervu nad změřeným minimem (scrollbar, zoom prohlížeče,
   drobné budoucí rozšíření textu položky) a pořád platí to samé —
   nikdy ne zalomený dvouřádkový stav, buď čistě jeden řádek, nebo rovnou
   hamburger. */
@media (max-width: 1150px) {
  .main-nav { display: none; }
  .site-header.nav-open .main-nav {
    display: block; position: absolute; top: 100%; left: 0; right: 0;
    background: #fff; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
    padding: 6px 0 10px; box-shadow: 0 8px 18px rgba(0,0,0,0.14); max-height: calc(100vh - 64px); overflow-y: auto;
  }
  .site-header.nav-open .main-nav > ul { flex-direction: column; gap: 0; width: 100%; }
  .site-header.nav-open .main-nav > ul > li { width: 100%; }
  .site-header.nav-open .main-nav a, .site-header.nav-open .main-nav button.nav-trigger { width: 100%; padding: 12px 20px; }
  .site-header.nav-open .dropdown, .site-header.nav-open .dropdown.cols-2, .site-header.nav-open .dropdown.cols-4 {
    position: static; border: none; box-shadow: none; padding: 0 0 0 20px; min-width: 0; grid-template-columns: 1fr;
  }
  .site-header.nav-open .dropdown.cols-4 .dropdown__grid { display: block; padding: 0; }
  .site-header.nav-open .search-btn { margin: 10px 20px 0; }
  .nav-toggle { display: inline-flex; align-items: center; gap: 6px; }
}
@media (max-width: 760px) {
  .news-list-photo--grid { grid-template-columns: 1fr; }
  .news-list-photo--grid .news-item:nth-child(2) { padding-top: 16px; }
  .two-col { grid-template-columns: 1fr; gap: 36px; }
  .newsletter form { flex-direction: column; align-items: stretch; }
  .newsletter input[type="email"] { min-width: 0; }
}

/* =========================================================
   KALENDÁŘ AKCÍ (page-kalendar-akci.php) — inspirováno v7, přizpůsobeno
   barvám/typografii tohoto webu.
   ========================================================= */
.cal-subscribe-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 0 0 8px; }
.cal-subscribe-btn {
  display: flex; align-items: center; gap: 12px; padding: 14px 16px;
  border: 1px solid var(--border); border-radius: var(--radius); background: #fff;
  color: var(--text); text-decoration: none; transition: border-color 0.15s, background 0.15s;
}
.cal-subscribe-btn:hover { border-color: var(--green-fill); background: var(--bg-soft); }
.cal-subscribe-btn strong { display: block; font-size: 0.92rem; }
.cal-subscribe-btn small { display: block; font-size: 0.78rem; color: var(--text-muted); font-weight: 400; }
.cal-subscribe-icon { flex-shrink: 0; color: var(--green-fill); }

.cal-tabs { display: flex; gap: 4px; border-bottom: 2px solid var(--border); margin-bottom: 0; }
.cal-tabs__tab {
  flex: 1; text-align: center; padding: 10px 12px; background: none; border: none;
  border-bottom: 3px solid transparent; cursor: pointer; font: inherit; color: var(--text-muted);
  margin-bottom: -2px;
}
.cal-tabs__tab.is-active { color: var(--green-text); border-bottom-color: var(--green-fill); }
.cal-tabs__label { display: block; font-family: var(--font-display); font-weight: 500; text-transform: uppercase; font-size: 0.86rem; letter-spacing: 0.04em; }
.cal-tabs__sub { display: block; font-size: 0.78rem; margin-top: 2px; }

.cal-view { display: none; }
.cal-view.is-active { display: block; }

.cal-strip { background: var(--bg-soft); border-bottom: 1px solid var(--border); padding: 20px 0; }
.cal-strip__grid { display: grid; gap: 20px; max-width: 1100px; margin: 0 auto; padding: 0 20px; justify-content: center; }
.cal-strip__grid--month { grid-template-columns: minmax(260px, 340px); }
.cal-strip__grid--quarter { grid-template-columns: repeat(3, minmax(220px, 1fr)); }
.cal-strip__grid--year { grid-template-columns: repeat(4, minmax(180px, 1fr)); }
.cal-strip__legend { max-width: 1100px; margin: 12px auto 0; padding: 0 20px; font-size: 0.78rem; color: var(--text-muted); display: flex; gap: 18px; flex-wrap: wrap; align-items: center; }
.cal-strip__dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
.cal-strip__dot--future { background: var(--green-fill); }
.cal-strip__dot--past { background: var(--text-muted); }
.cal-strip__holiday-mark { display: inline-block; width: 16px; height: 16px; line-height: 16px; text-align: center; border-radius: 3px; background: #fbe9e7; color: var(--red-pay); font-size: 0.7rem; margin-right: 4px; vertical-align: middle; }

.cal-mini { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 10px; }
.cal-mini--current { border-color: var(--green-fill); box-shadow: 0 0 0 1px var(--green-fill); }
.cal-mini__head { font-family: var(--font-display); font-weight: 500; text-align: center; font-size: 0.88rem; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.03em; }
.cal-mini__grid { width: 100%; border-collapse: collapse; table-layout: fixed; }
.cal-mini__grid th { font-size: 0.68rem; color: var(--text-muted); font-weight: 400; padding-bottom: 4px; }
.cal-mini__grid td { text-align: center; padding: 1px; height: 30px; vertical-align: middle; }
.cal-mini__num { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%; font-size: 0.82rem; }
.cal-mini__day.is-today .cal-mini__num { background: var(--text); color: #fff; font-weight: 700; }
.cal-mini__day.has-event .cal-mini__num { font-weight: 700; }
.cal-mini__link { display: inline-block; position: relative; text-decoration: none; color: inherit; }
.cal-mini__dot { display: block; width: 4px; height: 4px; border-radius: 50%; background: var(--green-fill); margin: 1px auto 0; }
.cal-mini__day.is-past .cal-mini__dot { background: var(--text-muted); }
.cal-mini__day.is-today .cal-mini__dot { background: #fff; }
.cal-mini__holiday { display: inline-block; cursor: help; }
.cal-mini__day.is-holiday .cal-mini__num { color: var(--red-pay); }
.cal-mini__empty { }

.cal-view .block-header { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.cal-view .block-header .meta { margin: 0; }

.events { list-style: none; margin: 0 0 8px; padding: 0; }
.events__item {
  display: flex; align-items: center; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--border);
  text-decoration: none; color: var(--text);
}
.events__item:hover .events__body strong { text-decoration: underline; color: var(--green-text); }
.events__item--past { opacity: 0.7; }
.events .date {
  flex-shrink: 0; width: 52px; text-align: center; font-family: var(--font-display);
}
.events .date strong { display: block; font-size: 1.3rem; line-height: 1.1; }
.events .date__month { display: block; font-size: 0.72rem; text-transform: uppercase; color: var(--text-muted); }
.events__body { flex: 1; min-width: 0; }
.events__body strong { display: block; font-size: 1rem; }
.events__sub { display: block; font-size: 0.85rem; color: var(--text-muted); margin-top: 2px; }
.events__remaining {
  flex-shrink: 0; font-size: 0.76rem; font-weight: 700; color: var(--green-text);
  background: var(--bg-soft); border: 1px solid var(--border); border-radius: 999px; padding: 3px 10px;
}

@media (max-width: 760px) {
  .cal-subscribe-grid { grid-template-columns: 1fr; }
  .cal-strip__grid--quarter, .cal-strip__grid--year { grid-template-columns: minmax(0, 1fr); }
  .cal-tabs__sub { display: none; }
}

/* =========================================================
   KONTAKT — mapa jako "hero" (page-kontakt.php), stejně jako
   měla stránka Kontakty na v2 (Leaflet + dlaždice Mapy.cz),
   teď přes celou šířku okna hned pod hlavičkou, ne uvnitř
   omezeného .container. Mapa je 3rd-party embed a je jako
   výjimka uvedená v prohlášení o přístupnosti — proto pod ní
   (v obsahu stránky) zůstává textový odkaz "Zobrazit na Mapy.cz".

   `z-index: 1` na `.contact-hero` (5.8.2026, na přání — "zajisti aby menu
   bylo nad mapou kontakty, teď se menu skryje mapou na stránce kontakt")
   — Leaflet svým vnitřním `.leaflet-pane` vrstvám (dlaždice/značky/popupy)
   nastavuje z-index 200 až 700. `.contact-hero` má `position: relative`,
   ale BEZ vlastního z-indexu nezaloží novou "stacking context" — takže by
   se ty vysoké hodnoty porovnávaly rovnou se `.site-header` (z-index: 100,
   position: sticky) ve stejné nadřazené vrstvě a mapa (700) by header
   (100) i s rozbaleným menu přebila. Přidaný `z-index: 1` na `.contact-hero`
   zavře Leafletovy vnitřní z-indexy DOVNITŘ vlastní stacking context —
   ven z `.contact-hero` se pak porovnává jen ta jednička, hluboko pod
   hlavičkou. */
.contact-hero { position: relative; z-index: 1; width: 100%; height: 420px; background: var(--bg-soft); border-bottom: 1px solid var(--border); }
.contact-hero__map { width: 100%; height: 100%; }
.contact-hero__noscript { margin: 0; padding: 14px 20px; text-align: center; background: var(--bg-soft); font-size: 0.92rem; }
.contact-hero .leaflet-control-attribution a { color: var(--green-text); }
@media (max-width: 640px) {
  .contact-hero { height: 260px; }
}

/* =========================================================
   ÚŘEDNÍ DESKA + DALŠÍ DOKUMENTOVÉ KATEGORIE
   (page-uredni-deska.php, template-dokumenty.php) — tabulka
   dokument/přílohy/vyvěšeno/sňato + postranní panel s odkazy
   na související stránky Úřadu.
   ========================================================= */
.deska-layout { display: grid; grid-template-columns: 2.1fr 1fr; gap: 40px; align-items: start; }
/* NADPIS NAD DVOUSLOUPCOVOU MŘÍŽKOU (17.8.2026, na přání — "výpis podstránek,
   dokumentů u statických stránek začal ve výšce začátku příspěvku", ne
   v rovině nadpisu). Sdílený prvek: `<header class="deska-head …">` jako
   PŘÍMÉ dítě `.deska-layout`, hned před obsahem a postranním sloupcem.

   `grid-column: 1 / -1` zabere celý první řádek, takže obsah i pravý sloupec
   spadnou samy do druhého řádku a začnou přesně ve stejné výšce — a to bez
   toho, aby se musely explicitně umisťovat. `max-width` pak nadpis vizuálně
   drží v šířce levého sloupce; `calc()` počítá přesně tutéž šířku, jakou mu
   dá `grid-template-columns: 2.1fr 1fr` s mezerou 40px (2.1 ze 3.1 dílu
   zbytku po odečtení mezery). POZOR: kdyby se poměr sloupců nebo mezera
   nahoře změnily, je potřeba je změnit i tady.

   NAHRAZUJE dřívější `.archive-sidebar-align` — neviditelnou "maketu"
   nadpisu v pravém sloupci (4.8.2026). Ta držela jen u vždy jednořádkových
   nadpisů: měla natvrdo `white-space: nowrap` a obsah `&nbsp;`, takže u
   dvou- a víceřádkového názvu stránky (v užším pravém sloupci se navíc
   lámal jinak než v levém) zarovnání rozhodila. Mřížka si výšku řádku
   spočítá sama, ať je nadpis jakkoli dlouhý. */
.deska-layout > .deska-head {
  grid-column: 1 / -1;
  min-width: 0;
  max-width: calc((100% - 40px) * 2.1 / 3.1);
}
/* Oddělovač mezi vlastním obsahem stránky a následným výpisem příspěvků
   (9.8.2026, na přání — "dat pod obsah mezeru nebo nějaký oddělovač obsahu
   vlastní stránky a následného výpisu příspěvků", template-vypis-stitku-
   rubrik-archiv.php). Stejná linka/mezera jako `.post-attachments`/
   `.subpage-links`/`.post-taxonomy` jinde v tématu — jedna sdílená vizuální
   řeč pro "tady začíná další samostatná sekce", ne nová vlastní. */
.deska-section-divider { margin-top: 28px; padding-top: 20px; border-top: 1px solid var(--border); }
/* Hledání nad tabulkou (4.8.2026, na přání — "doplň hledani nad uredni
   deskou", inspirace belov.cz) — pole + čtvercové tlačítko s lupou hned
   vedle sebe, žádná mezera mezi nimi (spojený vzhled). */
.deska-search { display: flex; max-width: 420px; margin: 4px 0 22px; }
.deska-search input[type="search"] {
  flex: 1; min-width: 0; padding: 10px 14px; border: 1px solid var(--border); border-right: none;
  border-radius: var(--radius) 0 0 var(--radius); font: inherit; font-size: 0.95rem;
}
.deska-search button {
  flex: none; width: 44px; background: var(--green-fill); color: #fff; border: none;
  border-radius: 0 var(--radius) var(--radius) 0; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.deska-search button:hover { background: #2e4f19; }
.deska-search button svg { width: 18px; height: 18px; }
/* Řádek nad tabulkou dokumentů: počet + stažení do CSV + odběr RSS
   (18.8.2026, viz inc/export-a-odber.php). Odkazy jsou schválně drobné a
   nezvýrazněné — jsou to nástroje navíc, ne to hlavní, proč sem člověk
   přišel. `flex-wrap` proto, že na mobilu se pod sebe zalomí. */
.deska-count { color: var(--text-muted); font-size: 0.9rem; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 18px; }
.deska-count__akce { display: inline-flex; align-items: center; gap: 6px; color: var(--green-text); }
.deska-count__akce svg { flex-shrink: 0; }
/* Odsazení na dotyk: 24×24 px je nejmenší cíl, který ještě projde
   WCAG 2.2 (kritérium 2.5.8 Target Size) — samotný řádek textu o výšce
   ~18 px by neprošel. */
.deska-count__akce { min-height: 24px; }
.deska-table-wrap { margin-top: 8px; }
.deska-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
.deska-table th {
  text-align: left; font-family: var(--font-display); font-weight: 500; text-transform: uppercase;
  font-size: 0.78rem; letter-spacing: 0.03em; color: var(--text-muted);
  border-bottom: 2px solid var(--border); padding: 8px 10px;
}
.deska-table td { padding: 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
.deska-table tbody tr:hover { background: var(--bg-soft); }
/* Ztenčeno ze 700 na 400 (3.8.2026, na přání — "ztenši písmo výpisu aktualit
   a úřední desky"). */
.deska-table td:first-child a { font-weight: 400; }

/* Sloupce s daty — širší, ať se datum nezalamuje na dva řádky
   (9.8.2026, na přání — "u uredni desky rozsir sloupec vyveseno, aby
   se datum nealamoval").

   Pořadí sloupců je: 1 Dokument · 2 Přílohy · 3 Vyvěšeno · 4 Sňato.

   18.8.2026: přidán i čtvrtý sloupec (Sňato). Do té doby tam u většiny
   dokumentů stála jen pomlčka, takže úzký sloupec nevadil — od verze 3.86
   se ale datum sejmutí dopočítává (viz inc/uredni-lhuta.php), takže je
   plný a bez tohohle pravidla se lámal na dva řádky.

   POZOR: kdyby se měnilo pořadí nebo počet sloupců v tabulce
   (inc/dokumentova-kategorie.php), přepsat i tahle čísla. */
.deska-table th:nth-child(3),
.deska-table td:nth-child(3),
.deska-table th:nth-child(4),
.deska-table td:nth-child(4) { white-space: nowrap; }

/* Sloupec Přílohy — kompaktní počet (klik/Enter rozbalí seznam), obdoba
   v2's dropdownu s odznakem počtu (viz doc-komentář v
   inc/dokumentova-kategorie.php, doplněno 1.8.2026). Seznam příloh se
   od 9.8.2026 zobrazuje jako plovoucí popup nad tabulkou (ne že by
   rozbalením roztáhl výšku řádku), odznak jen s číslem bez ikonky sponky
   (ta se v každém řádku neopakuje) — na přání, viz komentář v
   inc/dokumentova-kategorie.php. `.deska-attachments` potřebuje
   position:relative, ať se `.deska-table__files` popup umístí vůči
   odznaku, ne vůči celé stránce. `.deska-table-wrap` proto beze
   `overflow-x`, jinak by popup uřízlo (viz níž). */
.deska-attachments { position: relative; }
.deska-attachments summary {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  font-size: 0.86rem; color: var(--text); list-style: none;
}
.deska-attachments summary::-webkit-details-marker { display: none; }
.deska-attachments summary::marker { content: ''; }
.deska-attachments summary:hover { color: var(--green-text); }
.deska-attachments__badge {
  display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px;
  background: var(--green-fill); color: #fff; border-radius: 999px; padding: 0 6px;
  font-size: 0.76rem; font-weight: 700;
}
.deska-table__files {
  list-style: none; margin: 6px 0 0; padding: 10px; display: flex; flex-wrap: wrap; gap: 6px;
  position: absolute; top: 100%; left: 0; z-index: 40; width: max-content; max-width: 280px;
  background: #fff; border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: 0 8px 24px rgba(0,0,0,0.14);
}
.deska-table__files a {
  display: inline-flex; align-items: center; gap: 5px; font-size: 0.76rem; font-weight: 600;
  color: var(--text); background: var(--bg-soft); border: 1px solid var(--border);
  border-radius: 999px; padding: 3px 6px 3px 10px; text-decoration: none;
}
.deska-table__files a:hover { border-color: var(--green-fill); background: #fff; color: var(--green-text); }
.deska-table__ext {
  font-size: 0.66rem; font-weight: 700; letter-spacing: 0.02em; color: #fff;
  background: var(--text-muted); border-radius: 999px; padding: 1px 6px;
}
.deska-table__files a.type-pdf .deska-table__ext { background: #b3261e; }
.deska-table__files a.type-doc .deska-table__ext { background: #2b579a; }
.deska-table__files a.type-xls .deska-table__ext { background: #217346; }
.deska-table__files a.type-ppt .deska-table__ext { background: #b7472a; }
/* Sloupec s postranními widgety — od 2.8.2026 jsou v něm DVA boxy
   ".deska-sidebar" (Úřad — dokumenty" + "Úřad", viz page-uredni-deska.php
   / template-dokumenty.php), stejná dvojice widgetů jako na staré
   úřední desce (screenshot). Wrapper je potřeba, ať oba boxy zůstanou
   v pravém sloupci ".deska-layout" mřížky pod sebou, ne vedle sebe. */
.deska-sidebar-col { display: flex; flex-direction: column; gap: 24px; }
/* Bez pozadí (3.8.2026, na přání — "bez pozadi", po zobrazení náhledu s
   filtrem Rok pořád v šedém boxu) — stejný princip jako .subpage-links/
   .link-list-col__title: jen nadpis (verzálky, tenčí, šedý text) + prostý
   seznam, žádný box. Platí pro VŠECHNY postranní widgety, které tuhle třídu
   sdílí (Podstránky a menu sekce na page.php, filtr Rok na archive.php,
   widgety "Úřad"/"Úřad — dokumenty" na dokumentových stránkách). */
.deska-sidebar { padding: 0; }
.deska-sidebar h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.03em; margin: 0 0 10px; color: var(--text-muted); }
.deska-sidebar .link-list a[aria-current="page"] { color: var(--green-text); font-weight: 700; }
/* Loga partnerů pod seznamem podstránek — jen sekce Knihovna (knihovny.cz)
   a Škola (Nadace Ivana Dejmala + Střevlík), 13.8.2026, na přání — "sekce
   knihovna a škola bude potřeba dodat loga pod sloupec seznamu podstránek
   jak je v temp/knihovna.html a temp/skola.html". Vodorovný pás, zalamuje
   se na mobilu; obrázky omezené výškou (různé poměry stran log), ne šířkou,
   ať dvě loga vedle sebe (Škola) nepůsobí nevyváženě. */
.sidebar-logos { display: flex; flex-wrap: wrap; align-items: center; gap: 20px; margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--border); }
.sidebar-logos a { display: inline-flex; }
.sidebar-logos img { max-height: 44px; max-width: 100%; width: auto; }

/* Filtr Rok na archive.php → "Archív příspěvků" (4.8.2026, na přání —
   "u vypisu kategorii a filtrování dle roku dej místo slovo rok text: Archív
   příspěvků a vertikálně jak je na úvodní straně. výpis dej do roviny
   začátku výpisu, tedy v rovině pod nadpisem"; upřesněno — "nadpis bude
   před výpisem roků"). Nadpis svislý STEJNOU třídou `.col-label-vert` jako
   na homepage — tam stojí VEDLE (před) nadpisu "Úřad"/"Obec", tady stejně
   vedle (před) výpisem roků, ne jako samostatný blok nad ním (to byla
   první verze — zabírala zbytečně výšku, i vizuálně to nepůsobilo jako
   nadpis PŘED výpisem, ale nad ním). `.col-labeled`/`.col-label-vert` jsou
   beze změny (definice výše u ÚŘAD/OBEC) — jen `.deska-sidebar--year`
   dorovnává padding-left, protože `.deska-sidebar { padding: 0 }` (výše)
   by jinak vlastní padding-left `.col-labeled` přebilo (stejná specificita,
   pozdější pravidlo v pořadí zdrojového souboru vyhrává). Pravý sloupec
   je pořád zarovnaný na úroveň, kde v levém sloupci začíná samotný výpis
   příspěvků (pod nadpisem H1 kategorie/štítku) — od 17.8.2026 to ale řeší
   mřížka přes `.deska-head` (viz sekce ÚŘEDNÍ DESKA výše), ne dřívější
   neviditelná "maketa" nadpisu `.archive-sidebar-align`. Ta byla z markupu
   i z CSS odstraněna: držela jen u jednořádkových nadpisů (`nowrap` +
   `&nbsp;`), u delšího názvu stránky zarovnání rozhodila. */
.deska-sidebar--year.col-labeled { padding-left: 28px; }
.deska-table-wrap + .link-list a,
nav[aria-label="Stránkování dokumentů"] .link-list a {
  display: inline-block; min-width: 1.6em; text-align: center; padding: 2px 4px;
}
nav[aria-label="Stránkování dokumentů"] .link-list a[aria-current="page"],
nav[aria-label="Stránkování dokumentů"] .link-list .page-numbers.current {
  color: #fff; background: var(--green-fill); border-radius: var(--radius); font-weight: 700; text-decoration: none;
}
nav[aria-label="Stránkování dokumentů"] .link-list a[aria-current="page"]::before,
nav[aria-label="Stránkování dokumentů"] .link-list .page-numbers.current::before { content: none; }
/* paginate_links() vykresluje aktuální stránku jako <span class="page-numbers
   current">, ne jako <a> — pravidlo výše cílilo jen na a[aria-current="page"],
   takže se aktuální stránka nikdy nezvýraznila (7.8.2026, na přání — "u
   kategorie úřední desky nastavit styl úřední desky, viz temp/uredni deska.html",
   porovnáno Playwright screenshotem se skutečnou v2 stránkou — tam má aktuální
   číslo stránky zřetelně zelené pozadí, ve v3 chybělo). .page-numbers je
   společná třída WordPressu pro VŠECHNY odkazy stránkování (i "Další »"), proto
   zúženo přes .current, aby zbylé odkazy zůstaly beze změny.*/
nav[aria-label="Stránkování dokumentů"] .link-list .page-numbers.current {
  display: inline-block; min-width: 1.6em; text-align: center; padding: 2px 4px;
}
@media (max-width: 900px) {
  .deska-layout { grid-template-columns: 1fr; }
  /* Jeden sloupec — nadpis se musí vrátit na plnou šířku, jinak by ho
     `calc()` výše zúžil na ~2/3 obrazovky. */
  .deska-layout > .deska-head { max-width: none; }
}
@media (max-width: 560px) {
  .deska-table thead { display: none; }
  .deska-table, .deska-table tbody, .deska-table tr, .deska-table td { display: block; width: 100%; }
  .deska-table tr { border-bottom: 2px solid var(--border); padding: 10px 0; }
  .deska-table td { border-bottom: none; padding: 4px 0; }
  .deska-table td::before { content: attr(data-label) ": "; font-weight: 700; }
  .deska-table td:first-child::before { content: none; }
}

/* Stránka 404 (404.php, 9.8.2026, na přání — "udělej stránku 404, to nám
   chybí"). Velké zetlumené číslo nad nadpisem je jen dekorace
   (aria-hidden, informace "stránka nenalezena" nese h1). */
.error-404-content { max-width: 640px; text-align: center; padding: 40px 0 60px; }
.error-404__code {
  font-family: var(--font-display); font-weight: 700; font-size: 5rem; line-height: 1;
  color: var(--bg-soft); margin: 0 0 8px; -webkit-text-stroke: 2px var(--border);
}
.error-404-content .block-header { text-align: center; }
.error-404-content .block-header::after { left: 50%; transform: translateX(-50%); }
.error-404__links { margin-top: 32px; }
.error-404__links h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--text-muted); margin: 0 0 10px; }
.error-404__links .link-list { display: inline-flex; flex-direction: column; text-align: left; }

/* =========================================================
   JEMNÉ ANIMACE (17.8.2026, na přání — "pojďme přidat nějaké jemné
   animace zobrazení horního menu seshora dolů, animace popup Google
   kalendáře, vše jen jemně")

   Záměrně až na konci souboru: všechna pravidla tu jen PŘIDÁVAJÍ
   `animation` k existujícím stavům (`[data-open="true"]`, `.is-open`,
   `.nav-open`), nic nepřepisují. Díky umístění na konci taky spolehlivě
   přebijí dřívější pravidla se stejně silným selektorem — na to už jsem
   v tomhle souboru jednou narazil u `.deska-table__files`.

   Proč `animation` a ne `transition`: všechny tyhle prvky se otevírají
   změnou `display` (none → block/flex/grid), a `display` se nedá plynule
   přechodovat — `transition` by se nespustila vůbec. `animation` naopak
   naběhne přesně ve chvíli, kdy se prvek začne vykreslovat.

   Animuje se jen `opacity` a `transform`, což prohlížeč zvládne bez
   překreslování rozvržení (žádné škubání ani na slabším notebooku).
   Trvání 160–200 ms je pod hranicí, kdy začne být čekání vnímatelné —
   pohyb je znát, ale nezdržuje.

   PŘÍSTUPNOST: pohyb na obrazovce může vadit lidem s vestibulárními
   potížemi, proto úplně na konci sekce stojí `prefers-reduced-motion`,
   který všechno tohle vypne (tj. respektuje se systémové nastavení
   "omezit pohyb" ve Windows/macOS/Androidu/iOS). Web bez animací funguje
   naprosto stejně, nic se tím neschovává.
   ========================================================= */
@keyframes nav-drop { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@keyframes modal-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes modal-rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* Rozbalovací nabídky v hlavičce — "sjedou" seshora dolů. Platí pro
   všechny tři varianty (jednoduchá, dvousloupcová, mega menu přes celou
   šířku) i pro panel hledání pod lupou, protože ten sdílí třídu
   `.dropdown`. */
.dropdown[data-open="true"],
.dropdown.cols-2[data-open="true"],
.dropdown.cols-4[data-open="true"] { animation: nav-drop 160ms ease-out; }

/* Popup Kalendáře obsazenosti Besedy: tmavé pozadí se prolne, samotné
   bílé okno navíc nepatrně nadjede zdola. `.modal-dialog` mají jen
   "obyčejné" modály — oba celoobrazovkové (lightbox fotky a mřížka všech
   náhledů) žádnou takovou obálku nemají, takže se u nich okno nehýbe a
   zůstává jen prolnutí. */
.modal.is-open { animation: modal-fade 160ms ease-out; }
.modal.is-open .modal-dialog { animation: modal-rise 200ms ease-out; }

@media (max-width: 1150px) {
  /* Rozbalené hamburger menu — stejný pohyb jako u rozbalovacích nabídek
     na širokých obrazovkách, ať se web chová všude stejně. */
  .site-header.nav-open .main-nav { animation: nav-drop 180ms ease-out; }
}

@media (prefers-reduced-motion: reduce) {
  .dropdown[data-open="true"],
  .dropdown.cols-2[data-open="true"],
  .dropdown.cols-4[data-open="true"],
  .site-header.nav-open .main-nav,
  .modal.is-open,
  .modal.is-open .modal-dialog { animation: none; }
}

/* =========================================================
   VYSOKÝ KONTRAST / VĚTŠÍ PÍSMO (DIA požadavek)
   ========================================================= */
body.high-contrast { --text: #000; --text-muted: #000; --bg: #fff; --bg-soft: #eee; --green-text: #003d00; --green-fill: #003d00; --green-hero: #003d00; --border: #000; }
body.text-lg { font-size: 20px; }
body.text-xl { font-size: 22px; }

/* Vyhledávací pole na stránce 404 (18.8.2026) — stejný tvar jako pole
   v rozbalovacím panelu hledání v hlavičce, jen na plnou šířku textového
   sloupce. Na úzkých obrazovkách se tlačítko přesune pod pole, ať se do
   řádku vejde rozumně dlouhý dotaz. */
/* `margin: … auto` — obsah stránky 404 je vystředěný (.error-404-content),
   takže pole musí být taky, jinak by viselo u levého okraje. */
.error-404__search { display: flex; gap: 8px; max-width: 520px; margin: 0 auto 22px; text-align: left; }
.error-404__search input {
  flex: 1; min-width: 0;
  padding: 10px 14px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  font: inherit;
}
.error-404__search .btn-grey { text-transform: none; white-space: nowrap; }
@media (max-width: 520px) {
  .error-404__search { flex-direction: column; align-items: stretch; }
}

/* =========================================================
   FOKUS POD LEPIVOU HLAVIČKOU (WCAG 2.2, kritérium 2.4.11
   "Focus Not Obscured") — přidáno 17. 8. 2026
   =========================================================
   Hlavička je `position: sticky; top: 0` (viz .site-header výš), takže při
   svislém posunu stránky pořád překrývá horních ~69 px okna. Kdykoli
   prohlížeč sám odroloval na nějaký prvek — skok přes odkaz s kotvou
   (#footer-contact v horní liště, #main ze "Přeskočit na hlavní obsah",
   odkazy v obsahu příspěvku), nebo posun při tabování na prvek pod okrajem
   okna — přistál ten prvek přesně POD hlavičkou a nebyl vidět. U ovládání
   klávesnicí to znamená, že uživatel nevidí, kde právě je.

   `scroll-padding-top` na kořeni říká prohlížeči, aby při každém takovém
   posunu nechal nahoře volné místo. Platí i pro posun vyvolaný fokusem, ne
   jen pro kotvy. `scroll-margin-top` na cílových prvcích je záloha pro
   starší prohlížeče, které `scroll-padding` na <html> ještě neumí.

   POZOR: kdyby se změnila výška hlavičky (výška loga `.brand img`, nebo
   svislé odsazení `.site-header .container`), změnit i --sticky-h. */
:root { --sticky-h: 70px; }

html { scroll-padding-top: calc(var(--sticky-h) + 16px); }

/* Záloha pro prohlížeče, které `scroll-padding-top` na <html> ještě neumí:
   odsazení se dá na samotné cíle skoků. V @supports schválně — jinak by se
   obě hodnoty sečetly a nad nadpisem by zůstávala dvojnásobná mezera
   (ověřeno měřením: 172 px místo 86 px). Nadpisy jsou tu proto, že na ně
   míří odkazy z obsahu článku; #main je cíl odkazu "Přeskočit na hlavní
   obsah". */
@supports not (scroll-padding-top: 1px) {
  #main,
  :target,
  h1[id], h2[id], h3[id],
  .deska-table tbody tr:target { scroll-margin-top: calc(var(--sticky-h) + 16px); }
}

/* Na úzkých obrazovkách je hlavička o kus nižší (menu se schová pod
   hamburger), takže by se jinak nechávala zbytečně velká mezera. */
@media (max-width: 640px) {
  :root { --sticky-h: 62px; }
}

/* Když si uživatel zvětší písmo (tlačítka A+ / A++ v horní liště), zvětší se
   i řádek hlavičky — mezera musí povyrůst s ním, jinak se problém vrátí. */
body.text-lg  { --sticky-h: 76px; }
body.text-xl  { --sticky-h: 82px; }


/* =========================================================
   TISK — přidáno 17. 8. 2026
   =========================================================
   Do teď v celém souboru nebylo ani jedno `@media print`. Úřední deska,
   vyhlášky, rozpočty a zápisy ze zastupitelstva se přitom tisknou běžně —
   a na papír šlo i celé menu, cookie lišta, kolečko "nahoru" a barevné
   plochy, které spolykaly toner a odsunuly vlastní text na druhou stranu.

   Zásada: na papír patří nadpis, text, tabulka dokumentů a adresa webu.
   Nic, co se dá jen kliknout. */
@media print {

  /* --- co se netiskne vůbec ------------------------------------------- */
  .util-bar,            /* nastavení písma a kontrastu */
  .site-header,         /* logo + hlavní menu + lupa */
  #search-panel,
  .awards-bar,          /* pás ocenění na úvodní stránce */
  .nav-toggle,
  .search-btn,
  .skip-link,
  .to-top,              /* kolečko "zpět nahoru" */
  .edit-fab,            /* plovoucí tlačítko Upravit pro přihlášené */
  .cookie-bar,
  .site-footer,         /* kontakt a úřední hodiny — na výtisku zbytečné,
                           odkud výtisk je, říká řádek nad obsahem (#main::before) */
  .modal,               /* lightbox fotek, mřížka náhledů, kalendář Besedy */
  .newsletter,          /* přihlášení k odběru novinek */
  .hero-panels,         /* kalendář akcí + hlášení na úvodní straně */
  .hero-spacer,
  .post-adjacent-nav,   /* předchozí / následující příspěvek */
  .page-numbers,        /* stránkování výpisů */
  .search-page__more,
  .search-page__tips,
  .col-label-vert,      /* svislé štítky sloupců — na papíře jen matou */
  .col-rule,
  .deska-sidebar:not(.post-side),  /* postranní NAVIGACE: podstránky, menu sekce,
                                      filtr Rok, widget Dokumenty — samé odkazy,
                                      na papíře k ničemu. `.post-side` má tutéž
                                      třídu, ale nese ÚDAJE o dokumentu, proto
                                      ta výjimka — nesmí se odstranit. */
  .sidebar-logos,
  iframe { display: none !important; }

  /* Sdílení na Facebook / X a odkazy .ics — na papíře nedávají smysl,
     zbytek postranního sloupce (datum, rubrika, přílohy) ano. */
  .post-side__block--share { display: none !important; }

  /* --- základ ---------------------------------------------------------- */
  html { scroll-padding-top: 0; }

  body {
    background: #fff !important;
    color: #000 !important;
    font-size: 11pt;
    line-height: 1.45;
  }

  /* Zvětšené písmo ani vysoký kontrast nemají na papír co dělat —
     na obrazovce zůstávají, jak si je uživatel nastavil. */
  body.text-lg, body.text-xl { font-size: 11pt; }

  /* Zelené plochy by na papíře byly jen šedý flek přes celou stranu. */
  .hero, .facts, .post-doc-banner {
    background: none !important;
    color: #000 !important;
  }
  .hero { min-height: 0 !important; padding: 0 0 12pt !important; }
  .hero h1 { color: #000 !important; }

  /* --- rozložení -------------------------------------------------------- */
  /* Dvousloupcové rozvržení (obsah + postranní panel) se na A4 nevejde —
     panel se vytiskne pod textem. */
  .deska-layout, .post-layout, .facts-grid {
    display: block !important;
  }
  .container, .deska-head { max-width: none !important; padding: 0 !important; }
  .post-side, .deska-sidebar {
    margin-top: 14pt;
    padding-left: 0 !important;
    border-top: 1pt solid #000;
    padding-top: 8pt;
  }

  /* --- postranní sloupec „Podrobnosti“ na co nejmíň řádků --------------- */
  /* Na obrazovce je to úzký sloupec, kde má každý údaj vlastní řádek. Na
     papíře je ale přes celou šířku strany, takže by z pěti údajů bylo pět
     skoro prázdných řádků. Všechno se proto slévá do souvislého textu
     oddělovaného tečkami: „Vyvěšeno: 1. 8. 2026 · Sňato: 31. 8. 2026 ·
     Zveřejnil(a): Obecní úřad“. */
  .post-side__block { margin: 0 0 4pt !important; padding: 0 !important; border: 0 !important; }

  .post-side__meta { margin: 0; }
  .post-side__meta dt,
  .post-side__meta dd { display: inline; margin: 0; font-size: 10pt; }
  .post-side__meta dt { font-weight: 600; color: #000 !important; letter-spacing: 0 !important; }
  .post-side__meta dd { color: #000 !important; }
  .post-side__meta dt::after { content: ": "; }
  /* Oddělovač před každou další dvojicí — `dd + dt` je každé dt kromě
     prvního, takže na začátku řádku žádná osiřelá tečka nezůstane. */
  .post-side__meta dd + dt::before { content: " · "; font-weight: 400; }

  /* Nadpis bloku (Přílohy) na týž řádek jako jeho obsah. */
  .post-side__title {
    display: inline;
    font-size: 10pt !important;
    letter-spacing: 0 !important;
    color: #000 !important;
  }
  .post-side__title::after { content: ": "; }

  /* Seznam příloh do řádku za nadpis, bez odrážek a bez „bublin“. */
  /* `!important` je tu nutné: obecné pravidlo pro `.deska-table__files` výš
     (rozbalení plovoucího popupu na obyčejný seznam) nastavuje
     `display: block !important` a bez tohohle by nadpis „Přílohy“ zůstal
     sám na řádku a seznam spadl pod něj. */
  .post-side .deska-table__files { display: inline !important; margin: 0; padding: 0; }
  .post-side .deska-table__files li { display: inline; font-size: 10pt; }
  .post-side .deska-table__files li + li::before { content: " · "; }
  .post-side .deska-table__files a {
    display: inline !important;
    background: none !important;
    border: 0 !important;
    padding: 0 !important;
    box-shadow: none !important;
    font-weight: 400 !important;
  }
  /* `.post-side .deska-table__ext` musí být v selektoru taky: na obrazovce
     má odznak v pravém sloupci od 24.8.2026 vlastní (o kousek větší)
     velikost přes dvě třídy, a to by tuhle tiskovou hodnotu jinak přebilo. */
  .deska-table__ext,
  .post-side .deska-table__ext {
    background: none !important;
    border: 0 !important;
    padding: 0 !important;
    font-size: 9pt;
    color: #000 !important;   /* světlá šedá se na kopírce ztratí */
  }
  .deska-table__ext::before { content: " ("; }
  .deska-table__ext::after  { content: ")"; }

  /* Rubriky a štítky vedle sebe, ne pod sebou. */
  .post-side .post-taxonomy { display: block; }
  .post-side .post-taxonomy__row { display: inline; font-size: 10pt; }
  .post-side .post-taxonomy__row + .post-taxonomy__row::before { content: " · "; }

  /* Odkazy „Stáhnout do kalendáře (.ics)“ / „Přidat do Google Kalendáře“ —
     na papíře se na ně kliknout nedá, tak ať neberou řádky. */
  .post-side__block .post-side__links { display: none !important; }

  /* --- text ------------------------------------------------------------- */
  a { color: #000 !important; text-decoration: underline; }

  /* Adresa odkazu za jeho textem — na papíře je odkaz jinak k ničemu.
     Záměrně JEN v samotném textu příspěvku/stránky: u seznamů v postranním
     panelu nebo v tabulce dokumentů by z toho byla nečitelná změť. */
  .entry-content a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-size: 9pt;
    word-break: break-all;
  }
  /* Vnitřní odkazy webu i odkazy na kotvy adresu nevypisují. */
  .entry-content a[href^="#"]::after,
  .entry-content a[href*="oldrichov.cz"]::after { content: ""; }

  h1, h2, h3, h4 { page-break-after: avoid; break-after: avoid; }
  h1 { font-size: 18pt; }
  h2 { font-size: 14pt; }
  h3 { font-size: 12pt; }

  p, li, blockquote { orphans: 3; widows: 3; }

  img { max-width: 100% !important; page-break-inside: avoid; break-inside: avoid; }

  /* --- tabulka dokumentů (úřední deska, vyhlášky, rozpočty) -------------- */
  /* Hlavička tabulky se zopakuje na každé další straně a řádek se nerozlomí
     v půlce — u vícestránkového seznamu dokumentů to je celý rozdíl mezi
     použitelným a nepoužitelným výtiskem. */
  .deska-table { width: 100% !important; border-collapse: collapse; }
  .deska-table thead { display: table-header-group; }
  .deska-table tr { page-break-inside: avoid; break-inside: avoid; }
  .deska-table th, .deska-table td {
    border: 1pt solid #666 !important;
    padding: 4pt 6pt !important;
    background: none !important;
    color: #000 !important;
  }
  /* Plovoucí popup se seznamem příloh se na papír rozbalí jako obyčejný
     seznam pod řádkem, ne jako okno mimo stránku. */
  .deska-table__files {
    position: static !important;
    display: block !important;
    box-shadow: none !important;
    border: 0 !important;
    padding: 0 !important;
  }

  /* --- hlavička a patička výtisku --------------------------------------- */
  /* Odkud výtisk je — na úřadě se to hodí, aby bylo poznat, že jde o
     dokument z obecního webu, a ne o anonymní list papíru. Vloží se jen
     jednou, na začátek stránky před hlavní obsah. */
  #main::before {
    content: "Obec Oldřichov v Hájích — oldrichov.cz";
    display: block;
    font-size: 9pt;
    color: #000;
    border-bottom: 1pt solid #000;
    padding-bottom: 4pt;
    margin-bottom: 10pt;
  }

  @page {
    margin: 15mm 14mm;
  }
}
