/* =========================================================
   NÁVRH 3 — Banded Editorial
   Koncept: instituce ve vzdušné rytmické paginaci.
   Striktní střídání pruhů: navy / cream / navy / cream …
   2 fonty (Source Serif 4 + Inter), žádné heraldické cetky,
   žádné dvouřádkové datumové marquee, žádné gold-frame fotky.
   Méně typografických hlasů, víc bílého místa.
   ========================================================= */

:root {
  /* Dva základní podklady */
  --navy: #14202E;            /* klidný dark slate-navy — méně modrá než dřívější #0C1F3C */
  --navy-deeper: #0E1824;     /* footer, ribbon — hlubší stupeň TÉŽE navy, ne jiná barva */

  /* Scrim přes hero fotky + průhledný header. Nejhlubší stupeň téže
     navy rodiny (tmavší než navy-deeper). Drženo jako RGB trojice,
     aby šlo měnit alfa: rgba(var(--scrim-rgb), .9). */
  --scrim-rgb: 10, 18, 28;
  --paper: #F4EEDF;           /* warm cream, novinový papír */
  --paper-deep: #EBE3CC;      /* lehce hlubší odstín pro vnořené prvky */

  /* Text — dvě jasné role na každém podkladu */
  --ink: #14171F;
  --ink-dim: rgba(20,23,31,0.72);   /* z 0.62: sekundarni text (fs-6) potrebuje 4.5:1 i na paper-deep (bylo 4.21–4.33) */
  --ink-mute: rgba(20,23,31,0.38);  /* jen pro netextove/dekorativni prvky, NE pro text */

  --on-dark: #F4EEDF;
  --on-dark-dim: rgba(244,238,223,0.66);
  --on-dark-mute: rgba(244,238,223,0.42);

  /* Akcent — jediný, gold */
  --gold: #B8923F;
  --gold-light: #D4B878;
  --gold-dark: #7E5D1C;   /* ztmaveno z #8B6A24: 12px labely (.cat/.kicker) na paper i 17px odkazy na paper-deep potrebuji 4.5:1 */

  /* Vlasové linky */
  --rule-light: rgba(20,23,31,0.14);
  --rule-dark: rgba(244,238,223,0.18);

  /* Červená pouze pro live indikátor (currently unused) */
  --red: #C8272D;

  /* Fonty — pouze 2 */
  --font-serif: 'Source Serif 4', 'Iowan Old Style', 'Palatino', Georgia, serif;
  --font-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

  /* Type scale */
  --fs-1: clamp(44px, 6.4vw, 92px);
  --fs-2: clamp(28px, 3.4vw, 52px);
  --fs-3: clamp(19px, 1.8vw, 26px);
  --fs-4: clamp(17px, 1.4vw, 20px);
  --fs-5: 16.5px;
  --fs-6: 14.5px;
  --fs-7: 12px;

  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px;
  --s-5: 24px; --s-6: 32px; --s-7: 48px; --s-8: 64px;
  --s-9: 96px; --s-10: 128px; --s-11: 160px;

  --lh-tight: 1.05;
  --lh-snug: 1.25;
  --lh-normal: 1.5;
  --lh-relaxed: 1.65;

  --ease: cubic-bezier(0.2, 0.8, 0.2, 1);
  --container: 1240px;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: var(--font-sans);
  font-size: var(--fs-5);
  line-height: var(--lh-relaxed);
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-optical-sizing: auto;
  font-feature-settings: "kern" 1, "liga" 1, "calt" 1;
  font-variant-numeric: lining-nums proportional-nums;
  overflow-x: hidden;
}
img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }
ul, ol { list-style: none; }

a:focus-visible, button:focus-visible, input:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
}

.container {
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 var(--s-6);
}
@media (max-width: 640px) { .container { padding: 0 var(--s-4); } }

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap;
}
.skip-link {
  position: absolute; left: -9999px; top: 0;
  padding: 12px 20px; background: var(--navy); color: var(--paper);
  z-index: 100; font-weight: 600;
}
.skip-link:focus { left: 8px; top: 8px; }

/* =========================================================
   SECTION SYSTEM — striktní pruhy
   ========================================================= */
.section {
  padding: var(--s-10) 0;
}
@media (max-width: 720px) {
  .section { padding: var(--s-8) 0; }
}

/* Light band — výchozí (body bg = paper) */
.section--light {
  background: var(--paper);
  color: var(--ink);
}

/* Dark band — navy s cream textem */
.section--dark {
  background: var(--navy);
  color: var(--on-dark);
}
.section--dark h1, .section--dark h2, .section--dark h3, .section--dark h4 {
  color: var(--paper);
}
.section--dark p { color: var(--on-dark-dim); }

/* Deep modifikátor — sladěno s patičkou (navy-deeper). Používá se na
   hero a constitution = uzavírací archivní pás. */
.section--dark.section--deep { background: var(--navy-deeper); }

/* =========================================================
   SECTION DIVIDERS — adjacent same-tone sections.
   Pravidlo: kdykoli sedí dvě sekce stejného tónu (dark/dark nebo
   light/light) vedle sebe, dostane spodní vlasovou linku. Používá
   existující tokeny --rule-dark / --rule-light, takže linka splývá
   s vnitřními separátory (stats-grid, gateway-card, agenda-col).
   Adjacent-sibling selector se přizpůsobí budoucí změně pořadí
   sekcí — když mezi dva tmavé vsadíš světlý, divider automaticky
   zmizí, protože sousedství už nebude same-tone.
   ========================================================= */
.section--dark + .section--dark {
  border-top: 1px solid var(--rule-dark);
}
.section--light + .section--light {
  border-top: 1px solid var(--rule-light);
}
/* Poslední tmavá sekce (Ústava) → patička: tenká zlatá dělící linka, aby se
   dvě navy plochy vizuálně oddělily. Sekce jsou obalené v <main>, takže
   patička není sousedním sourozencem sekce — linku dáme přímo na patičku
   (ta vždy navazuje na tmavý uzavírací pás). */
.site-foot {
  position: relative;
}
/* Dělící linka nad patičkou — světlá vlasová (--rule-dark) jako ostatní
   linky na webu, jen na šířku containeru (ne přes celou stranu), 1px. */
.site-foot::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: calc(min(100%, var(--container)) - 2 * var(--s-6));
  height: 1px;
  background: var(--rule-dark);
}
@media (max-width: 640px) {
  .site-foot::before { width: calc(100% - 2 * var(--s-4)); }
}

/* =========================================================
   TYPOGRAFIE
   ========================================================= */
h1, h2, h3, h4 {
  font-family: var(--font-serif);
  font-weight: 500;
  letter-spacing: -0.02em;
  line-height: var(--lh-tight);
  color: var(--navy);
  font-optical-sizing: auto;
  font-variant-numeric: lining-nums proportional-nums;
}
h1 { font-size: var(--fs-1); letter-spacing: -0.028em; line-height: 1.02; }
h2 { font-size: var(--fs-2); }
h3 { font-size: var(--fs-3); line-height: 1.2; }
h4 { font-size: var(--fs-4); line-height: var(--lh-snug); }
p  { color: var(--ink-dim); }

/* Kicker — používat střídmě (ne na každé sekci) */
.kicker {
  display: inline-block;
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--gold-dark);
  margin-bottom: var(--s-4);
}
.section--dark .kicker { color: var(--gold-light); }

/* Section heading — generický pattern */
.section-head {
  max-width: 720px;
  margin: 0 auto var(--s-8);
  text-align: center;
}
.section-head h2 { margin-bottom: var(--s-4); }
/* Zlatý vlasový oddělovač pod nadpisem sekce — jemná institucionální „ražba".
   Centrovaný, krátký; na tmavém podkladu světlejší odstín zlaté. */
.section-head h2::after {
  content: "";
  display: block;
  width: 52px;
  height: 2px;
  margin: var(--s-4) auto 0;
  background: var(--gold);
}
.section--dark .section-head h2::after { background: var(--gold-light); }
.section-head p {
  font-family: var(--font-serif);
  font-size: var(--fs-4);
  font-style: italic;
  line-height: var(--lh-normal);
  color: var(--ink-dim);
}
.section--dark .section-head p { color: var(--on-dark-dim); }

/* =========================================================
   TOP RIBBON
   ========================================================= */
.ribbon {
  background: var(--navy-deeper);
  color: var(--on-dark-dim);
  transition: background-color 0.35s var(--ease);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.14em;
}
.ribbon .container {
  display: flex;
  align-items: center;
  justify-content: flex-end; /* brand text odstraněn → pravý cluster vpravo */
  height: 38px;
  gap: var(--s-5);
}
.ribbon-right { display: flex; align-items: center; gap: var(--s-5); }
.ribbon-right a, .ribbon-right span[aria-current] { transition: color 0.18s var(--ease); }
.ribbon-right a:hover { color: var(--gold-light); }
.ribbon-right span[aria-current] { color: var(--gold-light); }
.ribbon-sep { width: 1px; height: 14px; background: rgba(244,238,223,0.18); }
.ribbon-zj {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.ribbon-zj svg { width: 16px; height: 16px; }
.ribbon-a11y {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  cursor: pointer;
  color: inherit;
  font: inherit;
  text-transform: inherit;
  letter-spacing: inherit;
  background: none;
  border: 0;
}
.ribbon-a11y:hover { color: var(--gold-light); }
.ribbon-a11y svg { width: 14px; height: 14px; stroke-width: 1.6; }

/* =========================================================
   SITE HEADER — sticky wrapper kolem ribbon + masthead.
   Containing-block musí být <body>, proto sticky až na wrapper,
   ne na potomky (jinak by se odepnul, jak parent opustí viewport).
   ========================================================= */
.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  /* Konstantní tmavý gradient. V solidním stavu ho překryjí pozadí
     potomků (ribbon/masthead/nav), která PLYNULE přejedou z průhledné
     na barevnou — crossfade přes animovatelné barvy potomků dělá
     přechod tmavé→světlé menu hladký (gradient↔barva nejde animovat). */
  background: linear-gradient(180deg,
    rgba(var(--scrim-rgb),0.98) 0%,
    rgba(var(--scrim-rgb),0.93) 55%,
    rgba(var(--scrim-rgb),0.80) 100%);
  transition: box-shadow 0.35s var(--ease);
}
.site-header.is-scrolled {
  box-shadow: 0 4px 18px rgba(20,32,46,0.10);
}
.site-header:not(.is-scrolled) .ribbon { background: transparent; }
.site-header:not(.is-scrolled) .masthead {
  background: transparent;
  border-bottom-color: transparent;
}
.site-header:not(.is-scrolled) .main-nav {
  background: transparent;
  border-bottom-color: rgba(244,238,223,0.20);
}
.site-header:not(.is-scrolled) .main-nav a { color: var(--paper); }
.site-header:not(.is-scrolled) .main-nav a:hover {
  color: var(--gold-light);
  border-bottom-color: var(--gold-light);
}
.site-header:not(.is-scrolled) .main-nav a[aria-current="page"] {
  color: var(--paper);
  border-bottom-color: var(--gold-light);
}
.site-header:not(.is-scrolled) .masthead-logo img { filter: brightness(0) invert(1); }
.site-header:not(.is-scrolled) .masthead-search { border-color: rgba(244,238,223,0.45); }
.site-header:not(.is-scrolled) .masthead-search svg,
.site-header:not(.is-scrolled) .masthead-search input { color: var(--paper); }
.site-header:not(.is-scrolled) .masthead-search input::placeholder { color: rgba(244,238,223,0.62); }
.site-header:not(.is-scrolled) .masthead-search:focus-within { border-color: var(--paper); }
.site-header:not(.is-scrolled) .nav-toggle { color: var(--paper); }

/* =========================================================
   MASTHEAD — minimalistický (logo + search), žádný marquee
   Sticky řeší rodičovský .site-header (správně, protože sticky
   uvnitř krátkého rodiče by se ihned odepnul).
   ========================================================= */
.masthead {
  background: var(--paper);
  border-bottom: 1px solid var(--rule-light);
  transition: background-color 0.35s var(--ease), border-color 0.35s var(--ease);
}
.masthead-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-5);
  padding: var(--s-2) 0 var(--s-5); /* méně místa nad logem → logo výš */
  transition: padding 0.22s var(--ease);
}
/* Kondenzovaný stav po scrollu — menší logo, jen 1 řádek textu,
   užší masthead. Nav zůstává v plné velikosti — primární cíl
   uživatele „vždycky vidět menu" je splněn. */
.site-header.is-scrolled .masthead .masthead-inner {
  padding-top: var(--s-3);
  padding-bottom: var(--s-3);
}
.site-header.is-scrolled .masthead .masthead-logo img {
  height: 80px;
  transition: height 0.22s var(--ease);
}
.site-header.is-scrolled .masthead .mh-line-1 {
  font-size: clamp(16px, 1.6vw, 19px);
  transition: font-size 0.22s var(--ease);
}
.site-header.is-scrolled .masthead .mh-line-2 {
  display: none;
}
.site-header.is-scrolled .masthead .masthead-search {
  padding: 6px 12px;
  min-width: 220px;
}
.masthead-logo img,
.mh-line-1,
.masthead-search {
  transition: height 0.22s var(--ease),
              font-size 0.22s var(--ease),
              padding 0.22s var(--ease),
              min-width 0.22s var(--ease),
              border-color 0.35s var(--ease),
              filter 0.35s var(--ease),
              color 0.35s var(--ease),
              background-color 0.35s var(--ease);
}
.masthead-logo {
  display: flex;
  align-items: center;
  gap: var(--s-3);
}
.masthead-logo img {
  height: 104px;
  width: auto;
  flex-shrink: 0;
}
.mh-text {
  display: flex;
  flex-direction: column;
  line-height: 1.05;
}
.mh-line-1 {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: clamp(20px, 2.2vw, 26px);
  color: var(--navy);
  letter-spacing: -0.012em;
}
.mh-line-2 {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  color: var(--ink-dim);
  letter-spacing: 0.04em;
  margin-top: 4px;
}

.masthead-search {
  display: flex;
  align-items: center;
  gap: var(--s-2);
  padding: 9px 14px;
  border: 1px solid var(--rule-light);
  background: transparent;
  min-width: 280px;
  transition: border-color 0.18s var(--ease);
}
.masthead-search:focus-within { border-color: var(--navy); }
.masthead-search svg { width: 16px; height: 16px; color: var(--ink-dim); }
.masthead-search input {
  border: 0; background: transparent; outline: none;
  font: inherit;
  font-size: var(--fs-6);
  color: var(--ink);
  width: 100%;
}
.masthead-search input::placeholder { color: var(--ink-mute); }

@media (max-width: 640px) {
  /* Grid layout: logo + hamburger v horní řadě, search plnou šířkou
     pod tím. Lepší než column (kde by toggle skončil dole, schované
     pod search). */
  .masthead-inner {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: var(--s-3);
    align-items: center;
  }
  .masthead-logo { grid-column: 1; grid-row: 1; }
  .nav-toggle { grid-column: 2; grid-row: 1; }
  .masthead-search { grid-column: 1 / -1; grid-row: 2; min-width: 0; }
}

/* Main nav — light cream, splývá s masthead.
   Sticky řeší rodičovský .masthead (správně, protože container
   `<header>` musí být sticky, ne potomek — sticky uvnitř krátkého
   rodiče unstickne hned, jak rodič opustí viewport). */
.main-nav {
  background: var(--paper);
  border-bottom: 1px solid var(--rule-light);
  transition: background-color 0.35s var(--ease), border-color 0.35s var(--ease);
}
/* Položky zarovnané do bloku — od levého k pravému okraji containeru
   (space-between). První položka má padding-left:0, poslední padding-right:0,
   takže text první/poslední lícuje s okrajem obsahu. */
.main-nav ul { display: flex; flex-wrap: wrap; justify-content: space-between; }
.main-nav a {
  display: inline-flex;
  align-items: center;
  padding: var(--s-4) var(--s-5);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--navy);
  border-bottom: 2px solid transparent;
  transition: color 0.35s var(--ease), border-color 0.35s var(--ease);
}
.main-nav a:first-child { padding-left: 0; }
.main-nav a:last-child { padding-right: 0; }
.main-nav a:hover { color: var(--gold-dark); border-bottom-color: var(--gold); }
.main-nav a[aria-current="page"] {
  color: var(--navy);
  border-bottom-color: var(--navy);
}

/* =========================================================
   HERO — immersive Ken Burns slideshow z fotografií
   Vzorec převzatý z projektu Třeboň: stack absolutně pozicovaných
   slidů, opacity-fade 2.5 s mezi nimi, na obrázku náhodný Ken Burns
   zoom/pan (4 varianty, 12 s). JS přepíná `.active` třídu každých 9 s.
   prefers-reduced-motion → animace vypnuté, viditelný pouze první slide.
   ========================================================= */
/* =========================================================
   INTRO PRELOADER — minimalistická navy „opona": ze středu se vykreslí
   tenká zlatá linka (= šev), pak se navy rozdělí v té lince na dvě půlky
   (horní ujede nahoru, dolní dolů) a odhalí hero. Jen navy + zlatá.
   Ukáže se hned (první paint, z-index nad headerem); po dokreslení linky
   + načtení hero ji JS rozevře (.is-leaving). Bez JS se rozevře a schová
   sama CSS failsafe animacemi. prefers-reduced-motion → skryto.
   ========================================================= */
.intro {
  position: fixed;
  inset: 0;
  z-index: 1000;          /* nad site-header (50) i vším ostatním */
  overflow: hidden;       /* panely se při rozevření čistě uříznou na okraji */
  /* Bez vlastního pozadí — navy dělají panely, ať se po rozevření ukáže
     hero v mezeře mezi nimi. pointer-events:none → po rozjetí panelů (i bez
     JS, kdy zůstanou odjeté) nic neblokuje hero; během intra blokují panely. */
  pointer-events: none;
}
/* Dvě navy poloviny, které se při odchodu rozjedou od sebe (šev = linka).
   Lehký přesah horní půlky kryje sub-pixel mezeru na liché výšce viewportu. */
.intro-panel {
  position: absolute;
  left: 0;
  right: 0;
  height: 50%;
  background: var(--navy-deeper);
  pointer-events: auto;   /* blokuje interakci, dokud kryje viewport */
}
.intro-panel--top {
  top: 0;
  height: calc(50% + 1px);
  animation: intro-split-up 0.6s var(--ease) 1.7s forwards;   /* failsafe */
}
.intro-panel--bottom {
  bottom: 0;
  animation: intro-split-down 0.6s var(--ease) 1.7s forwards; /* failsafe */
}
.intro-line {
  position: absolute;
  top: 50%;
  left: 50%;
  width: min(220px, 44vw);
  height: 2px;
  background: var(--gold);
  transform: translate(-50%, -50%) scaleX(0); /* roste ze středu do stran */
  z-index: 1;                                  /* nad švem panelů */
  pointer-events: none;
  animation: intro-line 0.7s var(--ease) forwards,
             intro-line-out 0.4s var(--ease) 1.7s forwards;   /* failsafe fade */
}
/* JS cesta: rozevřít oponu, jakmile je hero ready (rychlejší než failsafe). */
.intro.is-leaving .intro-panel {
  animation: none;
  transition: transform 0.6s var(--ease);
}
.intro.is-leaving .intro-panel--top { transform: translateY(-100%); }
.intro.is-leaving .intro-panel--bottom { transform: translateY(100%); }
.intro.is-leaving .intro-line {
  animation: none;
  transform: translate(-50%, -50%) scaleX(1);
  opacity: 0;
  transition: opacity 0.3s var(--ease);
}
@keyframes intro-line {
  from { transform: translate(-50%, -50%) scaleX(0); opacity: 0; }
  60%  { opacity: 1; }
  to   { transform: translate(-50%, -50%) scaleX(1); opacity: 1; }
}
@keyframes intro-line-out {
  to { opacity: 0; }
}
@keyframes intro-split-up   { to { transform: translateY(-100%); } }
@keyframes intro-split-down { to { transform: translateY(100%); } }
@media (prefers-reduced-motion: reduce) {
  .intro { display: none; } /* žádné intro — obsah hned */
}

/* =========================================================
   HERO VIEWPORT — obal kolem hero + meeting stripu. Společně vyplní
   přesně jednu výšku obrazovky: hero pohltí volné místo (flex-grow),
   pruh „Nejbližší schůze" si drží přirozenou výšku a lícuje se spodním
   okrajem obrazovky. Header je position:fixed (mimo tok), obsah začíná
   na y=0 → 100vh obalu = spodní okraj viewportu při scroll-top, žádné
   bílé místo pod pruhem.
   ========================================================= */
.hero-viewport {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  min-height: 100svh; /* mobilní browser chrome — pruh zůstane vidět */
}
.hero-viewport > .hero {
  flex: 1 0 auto;
}

.hero {
  /* 72vh = hero zabírá většinu viewportu ale spodní hrana jasně
     ukazuje na další sekci pod ní. Předtím 88vh působilo příliš
     monumentálně a uživatel musel scrollovat aby vůbec viděl
     existenci dalšího obsahu. */
  min-height: 72vh;
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  /* navy-deeper sladěno s constitution + footer — tři tmavé kotvy,
     mezi nimi obsah na světlém papíře. */
  background: var(--navy-deeper);
  /* Fixní header překrývá vršek hero — odsadíme obsah o jeho výšku
     (--header-h nastaví JS, fallback pro no-JS). */
  padding-top: var(--header-h, 232px);
}
.hero-bg {
  position: absolute;
  inset: 0;
  z-index: 1;
}
.hero-slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 2.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.hero-slide.active { opacity: 1; }
/* Dark gradient overlay — drží text čitelný proti jakékoli fotce.
   Barva sladěna s --navy-deeper (#0E1824 = rgb 14,24,36) kvůli
   kontinuu hero ↔ constitution ↔ footer. */
.hero-slide::after {
  content: '';
  position: absolute;
  inset: 0;
  /* Dvě vrstvy: vodorovná (vlevo tmavší pod textem, vpravo světlá, kde text
     není) drží čitelnost; svislý základ jemně kryje horní hranu (k navigaci)
     a spodní přechod do meeting stripu. Pravá půlka tak zůstane vzdušná. */
  background:
    linear-gradient(90deg,
      rgba(var(--scrim-rgb),0.72) 0%,
      rgba(var(--scrim-rgb),0.52) 42%,
      rgba(var(--scrim-rgb),0.20) 68%,
      rgba(var(--scrim-rgb),0.06) 100%),
    linear-gradient(180deg,
      rgba(var(--scrim-rgb),0.32) 0%,
      rgba(var(--scrim-rgb),0.16) 45%,
      rgba(var(--scrim-rgb),0.42) 100%);
}
.hero-slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Desaturace + jemný contrast — fotky působí klidnější, méně
     turistické, lépe ladí s navy overlay (duotone-like efekt).
     Scrim i grayscale zlehčeny, ať hero nepůsobí příliš tmavě. */
  filter: grayscale(0.5) contrast(1.05);
}

/* Ken Burns variants */
@keyframes kb-1 { from { transform: scale(1); } to { transform: scale(1.08); } }
@keyframes kb-2 { from { transform: scale(1.08) translate(-1%,-0.5%); } to { transform: scale(1) translate(0.5%,0.5%); } }
@keyframes kb-3 { from { transform: scale(1.02) translateY(-1%); } to { transform: scale(1.10) translateY(0.5%); } }
@keyframes kb-4 { from { transform: scale(1.06) translateX(1%); } to { transform: scale(1.02) translateX(-1%); } }
.kb-1 img { animation: kb-1 12s cubic-bezier(0.25, 0.1, 0.25, 1) forwards; }
.kb-2 img { animation: kb-2 12s cubic-bezier(0.25, 0.1, 0.25, 1) forwards; }
.kb-3 img { animation: kb-3 12s cubic-bezier(0.25, 0.1, 0.25, 1) forwards; }
.kb-4 img { animation: kb-4 12s cubic-bezier(0.25, 0.1, 0.25, 1) forwards; }

.hero .container {
  position: relative;
  z-index: 2;
  padding-top: var(--s-9);
  padding-bottom: var(--s-9);
  color: var(--paper);
  width: 100%;
}
.hero-content {
  max-width: 720px;
}

/* Status badge — kombinuje to, co dřív bylo v Today stripu */
.hero-status {
  display: inline-flex;
  align-items: center;
  gap: var(--s-3);
  padding: 9px 16px;
  background: rgba(10, 24, 48, 0.45);
  border: 1px solid rgba(244,238,223,0.22);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--paper);
  margin-bottom: var(--s-6);
}
.hero-status .hs-label { color: var(--gold-light); font-weight: 600; }
.hero-status .hs-sep {
  display: inline-block;
  width: 1px;
  height: 12px;
  background: rgba(244,238,223,0.30);
}

.hero h1 {
  color: var(--paper);
  max-width: 12ch;
  margin-bottom: var(--s-5);
  text-shadow: 0 1px 16px rgba(0,0,0,0.4);
}
.hero .lead {
  font-family: var(--font-serif);
  font-size: var(--fs-4);
  font-style: italic;
  font-weight: 400;
  color: rgba(244,238,223,0.94);
  max-width: 52ch;
  line-height: var(--lh-normal);
  margin-bottom: var(--s-6);
  text-shadow: 0 1px 10px rgba(0,0,0,0.35);
}
.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--s-3);
}
/* Hero CTA — stejný text-link se šipkou jako ostatní CTA na webu
   (uppercase, zlatá linka, animovaná →), jen v bílé pro tmavý hero. */
.hero-cta {
  align-self: flex-start;
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--paper);
  border-bottom: 1px solid var(--gold);
  padding-bottom: 4px;
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.hero-cta:hover { color: var(--gold-light); border-bottom-color: var(--gold-light); }

@media (prefers-reduced-motion: reduce) {
  .hero-slide { transition: none; }
  .kb-1 img, .kb-2 img, .kb-3 img, .kb-4 img { animation: none; transform: none; }
}
@media (max-width: 720px) {
  .hero { min-height: 65vh; }
  .hero .container { padding-top: var(--s-7); padding-bottom: var(--s-7); }
}

/* =========================================================
   MEETING STRIP — tmavý proužek pod hero se stavem nejbližší schůze.
   Navy (o stupínek světlejší než dno hero) + vlasová linka nahoře =
   čte se jako samostatný pruh. Tenký, plně čitelný (zlatý label).
   ========================================================= */
.meeting-strip {
  background: var(--navy);
  border-top: 1px solid rgba(244,238,223,0.10);
}
.meeting-strip .container {
  display: flex;
  align-items: center;
  gap: var(--s-3) var(--s-4);
  flex-wrap: wrap;
  padding-top: var(--s-4);
  padding-bottom: var(--s-4);
}
.ms-label {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--paper);
}
.ms-info {
  font-family: var(--font-serif);
  font-size: var(--fs-5);
  color: var(--paper);
}
.ms-link {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--s-2);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--paper);
  transition: color 0.18s var(--ease);
}
.ms-link:hover { color: var(--gold-light); }
@media (max-width: 640px) {
  .ms-link { margin-left: 0; }
}

/* =========================================================
   BUTTONS — minimální, žádný gold fill
   ========================================================= */
.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--s-2);
  padding: 12px 22px;
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  border: 1px solid currentColor;
  transition: background 0.2s var(--ease), color 0.2s var(--ease);
}
.btn svg { width: 14px; height: 14px; fill: currentColor; }

/* Na light pozadí */
.btn-primary {
  background: var(--navy);
  color: var(--paper);
  border-color: var(--navy);
}
.btn-primary:hover { background: var(--ink); border-color: var(--ink); }
.btn-secondary {
  background: transparent;
  color: var(--navy);
  border-color: var(--navy);
}
.btn-secondary:hover { background: var(--navy); color: var(--paper); }

/* Na dark pozadí (override) */
.section--dark .btn-primary {
  background: var(--paper);
  color: var(--navy);
  border-color: var(--paper);
}
.section--dark .btn-primary:hover { background: var(--gold-light); border-color: var(--gold-light); }
.section--dark .btn-secondary {
  background: transparent;
  color: var(--paper);
  border-color: var(--rule-dark);
}
.section--dark .btn-secondary:hover { background: var(--paper); color: var(--navy); border-color: var(--paper); }

/* =========================================================
   GOLD FRAME — decentní rámeček (matted print feel)
   .gold-frame      = double-rule: outer 1px gold @ 0.6 + inset 6px 1px gold @ 0.3
                      Pro velké fotky (hero, předseda, lead news) — editorial
   .gold-frame--thin = jen vnější 1px gold @ 0.5
                      Pro drobné thumbnaily v news listu
   Pseudo-prvky leží nad fotkou (z-index 2) s pointer-events: none,
   takže neblokují klik na odkaz.
   ========================================================= */
.gold-frame {
  position: relative;
}
.gold-frame::before {
  content: '';
  position: absolute;
  inset: 0;
  border: 1px solid var(--gold);
  opacity: 0.6;
  pointer-events: none;
  z-index: 2;
}
.gold-frame::after {
  content: '';
  position: absolute;
  inset: 6px;
  border: 1px solid var(--gold);
  opacity: 0.3;
  pointer-events: none;
  z-index: 2;
}
.gold-frame--thin::before {
  border-width: 1px;
  opacity: 0.5;
}
.gold-frame--thin::after { display: none; }

/* =========================================================
   AGENDA — Tisky · Schůze · Kalendář (dark band, 3 sloupce)
   ========================================================= */
.agenda-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0;
  border-top: 1px solid var(--rule-dark);
}
.agenda-col {
  padding: var(--s-6) var(--s-5);
  border-left: 1px solid var(--rule-dark);
  display: flex;
  flex-direction: column;
}
.agenda-col:first-child { border-left: 0; padding-left: 0; }
.ag-title {
  font-family: var(--font-serif);
  font-size: clamp(20px, 1.8vw, 24px);
  font-weight: 500;
  color: var(--paper);
  margin-bottom: var(--s-4);
  padding-bottom: var(--s-3);
  border-bottom: 1px solid var(--rule-dark);
  display: flex;
  align-items: center;
  gap: var(--s-3);
}
.ag-icon {
  width: 24px;
  height: 24px;
  color: var(--gold-light);
  flex-shrink: 0;
}
.agenda-list { display: flex; flex-direction: column; flex: 1; }
.agenda-list li {
  border-bottom: 1px solid rgba(244,238,223,0.08);
}
.agenda-list li:last-child { border-bottom: 0; }
.agenda-list a {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: var(--s-3) 0;
  transition: opacity 0.18s var(--ease);
}
.agenda-list a:hover { opacity: 0.78; }
.ag-meta {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--gold-light);
}
.ag-meta--upcoming { color: var(--gold-light); }
.ag-meta--paused   { color: rgba(244,238,223,0.70); }
.ag-meta--past     { color: rgba(244,238,223,0.58); } /* z 0.42: na navy potrebuje 4.5:1 (bylo 3.56) */
.ag-name {
  font-family: var(--font-serif);
  font-size: 17px;
  font-weight: 500;
  color: var(--paper);
  line-height: 1.3;
}
.ag-sub {
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  color: var(--on-dark-dim);
}
.ag-link {
  /* margin-top: auto přilepí link na dno flex-column sloupce
     bez ohledu na výšku obsahu výše (kalendář vs. agenda-list);
     tím se „Všechny tisky → / Přehled schůzí → / Celý kalendář →"
     sjednotí na stejnou výšku napříč 3 sloupci. */
  margin-top: auto;
  padding-top: var(--s-5);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--gold-light);
  border-bottom: 1px solid var(--gold);
  padding-bottom: 2px;
  align-self: flex-start;
  transition: color 0.18s var(--ease);
}
.ag-link:hover { color: var(--paper); }

/* Mini kalendář */
.agenda-cal {
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  color: var(--on-dark-dim);
  margin-bottom: var(--s-4);
}
.cal-head, .cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}
.cal-head {
  margin-bottom: var(--s-2);
  text-align: center;
}
.cal-head span {
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--gold-light);
  padding: 4px 0;
}
.cal-grid span {
  text-align: center;
  padding: 8px 0;
  font-variant-numeric: lining-nums tabular-nums;
  color: var(--paper);
  border-radius: 2px;
}
.cal-empty { color: transparent !important; }
.cal-today {
  border: 1px solid var(--gold);
  color: var(--gold-light) !important;
}
.cal-event {
  background: var(--gold);
  color: var(--navy) !important;
  font-weight: 600;
}

@media (max-width: 900px) {
  .agenda-grid { grid-template-columns: 1fr; }
  .agenda-col { border-left: 0; padding-left: 0; border-top: 1px solid var(--rule-dark); padding-top: var(--s-5); }
  .agenda-col:first-child { border-top: 0; padding-top: 0; }
}

/* =========================================================
   VIDEO — 5 streamů + archiv (light band)
   ========================================================= */
.video-grid {
  display: grid;
  grid-template-columns: 7fr 5fr;
  gap: var(--s-8);
  border-top: 1px solid var(--rule-light);
  padding-top: var(--s-5);
}
.stream-list { display: flex; flex-direction: column; }
.stream-list li { border-bottom: 1px solid var(--rule-light); }
.stream-list li:last-child { border-bottom: 0; }
.stream-list a {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: var(--s-4);
  align-items: center;
  padding: var(--s-4) 0;
  transition: opacity 0.18s var(--ease);
}
.stream-list a:hover { opacity: 0.75; }
.stream-num {
  font-family: var(--font-serif);
  font-size: clamp(28px, 2.6vw, 38px);
  font-weight: 400;
  font-style: italic;
  color: var(--gold-dark); /* --gold dával na paper jen 2.51:1; gold-dark projde i pro velký text */
  line-height: 1;
  letter-spacing: -0.02em;
}
.stream-info { display: flex; flex-direction: column; gap: 2px; }
.stream-info strong {
  font-family: var(--font-serif);
  font-size: 19px;
  font-weight: 500;
  color: var(--navy);
}
.stream-info small {
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  color: var(--ink-dim);
}

.video-aside {
  padding-left: var(--s-6);
  border-left: 1px solid var(--rule-light);
}
.va-title {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--navy);
  margin-bottom: var(--s-4);
  padding-bottom: var(--s-3);
  border-bottom: 1px solid var(--rule-light);
}
.va-list { display: flex; flex-direction: column; }
.va-list li { border-bottom: 1px solid var(--rule-light); }
.va-list li:last-child { border-bottom: 0; }
.va-list a {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--s-3) 0;
  transition: opacity 0.18s var(--ease);
}
.va-list a:hover { opacity: 0.7; }
.va-list span {
  font-family: var(--font-serif);
  font-size: 17px;
  font-weight: 500;
  color: var(--navy);
}
.va-list small {
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  color: var(--ink-dim);
}

@media (max-width: 900px) {
  .video-grid { grid-template-columns: 1fr; gap: var(--s-5); }
  .video-aside { padding-left: 0; border-left: 0; border-top: 1px solid var(--rule-light); padding-top: var(--s-5); }
}

/* =========================================================
   NEWSROOM — light band
   ========================================================= */
.newsroom-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s-5);
  padding-bottom: var(--s-4);
  border-bottom: 1px solid var(--rule-light);
  margin-bottom: var(--s-7);
}
.newsroom-head h2 {
  font-size: clamp(28px, 3vw, 42px);
}
.newsroom-head .nh-link {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--navy);
  border-bottom: 1px solid var(--gold);
  padding-bottom: 2px;
  white-space: nowrap;
}
.newsroom-head .nh-link:hover { color: var(--gold-dark); border-bottom-color: var(--gold-dark); }
@media (max-width: 720px) {
  .newsroom-head { flex-direction: column; align-items: flex-start; gap: var(--s-3); }
}

.news-grid {
  display: grid;
  grid-template-columns: 7fr 5fr;
  gap: var(--s-8);
  align-items: start;
}
.news-lead { display: block; padding-bottom: var(--s-5); }
/* Featured karta — hover je čistě editorial: zoom fotky + nadpis zlatě
   s podtržením. Bez stínu/liftu kolem karty — ten působil jako „rámeček"
   nalepený na text (karta nemá vnitřní odsazení po stranách). */
.news-lead .nl-photo { margin-bottom: var(--s-4); overflow: hidden; }
.news-lead .nl-photo img {
  width: 100%; height: 420px;
  object-fit: cover;
  transition: transform 0.5s var(--ease);
}
.news-lead:hover .nl-photo img { transform: scale(1.02); }
.news-lead .nl-meta {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--ink-dim);
  margin-bottom: var(--s-3);
}
.news-lead .nl-meta .cat { color: var(--gold-dark); font-weight: 600; }
.news-lead .nl-meta .dot { width: 3px; height: 3px; border-radius: 50%; background: var(--ink-mute); }
.news-lead h3 {
  font-family: var(--font-serif);
  font-size: clamp(26px, 2.6vw, 36px);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.015em;
  color: var(--navy);
  margin-bottom: var(--s-3);
  max-width: 22ch;
  transition: color 0.18s var(--ease);
}
.news-lead:hover h3 { color: var(--gold-dark); }
.news-lead .nl-dek {
  font-family: var(--font-serif);
  font-size: var(--fs-4);
  font-style: italic;
  line-height: var(--lh-normal);
  color: var(--ink-dim);
  max-width: 50ch;
}

.news-secondary { display: flex; flex-direction: column; }
.news-item {
  display: grid;
  grid-template-columns: 1fr 130px;
  gap: var(--s-4);
  padding: var(--s-5) 0;
  border-top: 1px solid var(--rule-light);
}
.news-item:first-child { border-top: 0; padding-top: 0; }
.news-item .ni-photo { width: 130px; height: 90px; overflow: hidden; }
.news-item .ni-photo img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.4s var(--ease); }
.news-item:hover .ni-photo img { transform: scale(1.05); }
.news-item .ni-meta {
  display: flex;
  gap: var(--s-3);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--ink-dim);
  margin-bottom: 6px;
}
.news-item .ni-meta .cat { color: var(--gold-dark); font-weight: 600; }
.news-item h4 {
  font-family: var(--font-serif);
  font-size: 17px;
  font-weight: 500;
  line-height: 1.25;
  color: var(--navy);
  transition: color 0.18s var(--ease);
}
.news-item:hover h4 { color: var(--gold-dark); }
@media (max-width: 900px) {
  .news-grid { grid-template-columns: 1fr; gap: var(--s-6); }
  .news-lead .nl-photo img { height: 280px; }
}
@media (max-width: 560px) {
  .news-item { grid-template-columns: 1fr; }
  .news-item .ni-photo { width: 100%; height: 160px; order: -1; }
}

/* =========================================================
   STATS — dark band, 4 čísla
   ========================================================= */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
  border-top: 1px solid var(--rule-dark);
  border-bottom: 1px solid var(--rule-dark);
}
.stat-cell {
  padding: var(--s-7) var(--s-5);
  border-left: 1px solid var(--rule-dark);
  text-align: left;
}
.stat-cell:first-child { border-left: 0; padding-left: 0; }
.stat-cell .sc-label {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--gold-light);
  margin-bottom: var(--s-3);
}
.stat-cell .sc-value {
  font-family: var(--font-serif);
  font-size: clamp(56px, 6.5vw, 110px);
  font-weight: 500;
  line-height: 0.92;
  color: var(--paper);
  letter-spacing: -0.03em;
  font-variant-numeric: lining-nums tabular-nums;
  margin-bottom: var(--s-2);
}
.stat-cell .sc-unit {
  font-family: var(--font-serif);
  font-size: var(--fs-4);
  font-style: italic;
  color: var(--on-dark-dim);
  margin-bottom: var(--s-3);
}
.stat-cell .sc-note {
  font-size: var(--fs-6);
  color: var(--on-dark-dim);
  line-height: var(--lh-normal);
  max-width: 28ch;
}
@media (max-width: 900px) {
  .stats-grid { grid-template-columns: 1fr 1fr; }
  .stat-cell:nth-child(odd) { border-left: 0; padding-left: 0; }
  .stat-cell:nth-child(n+3) { border-top: 1px solid var(--rule-dark); padding-top: var(--s-6); }
}
@media (max-width: 560px) {
  .stats-grid { grid-template-columns: 1fr; }
  .stat-cell { border-left: 0; padding-left: 0; }
  .stat-cell:nth-child(n+2) { border-top: 1px solid var(--rule-dark); }
}

/* =========================================================
   SPEAKER — light band, klidný portrét + role + bio + odkaz
   (citát odstraněn — nebyl ověřitelný; ZD požaduje pouze
   foto + info + odkaz)
   ========================================================= */
.speaker-grid {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: var(--s-8);
  align-items: center;
  max-width: 1080px;
  margin: 0 auto;
}
.speaker-photo img {
  width: 100%;
  height: auto;
  display: block;
}
.speaker-content h2 {
  font-size: clamp(28px, 3vw, 44px);
  font-weight: 500;
  margin-bottom: var(--s-2);
}
.speaker-content .sp-role {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  color: var(--ink-dim);
  margin-bottom: var(--s-5);
}
.speaker-content .sp-bio {
  font-family: var(--font-serif);
  font-size: var(--fs-4);
  line-height: var(--lh-normal);
  color: var(--ink);
  max-width: 52ch;
  padding-left: var(--s-4);
  border-left: 2px solid var(--gold);
}
.speaker-content .speaker-cta { margin-top: var(--s-6); }

@media (max-width: 900px) {
  .speaker-grid { grid-template-columns: 1fr; gap: var(--s-6); }
  .speaker-photo { max-width: 360px; }
}

/* =========================================================
   ROZCESTNÍK — 5 subwebů (dark band)
   5 ZD-doporučených odkazů: Pro média · PI · PK · REKOS · Digi. repozitář
   ========================================================= */
.gateway-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 0;
  border-top: 1px solid var(--rule-dark);
  border-bottom: 1px solid var(--rule-dark);
}
.gateway-card {
  padding: var(--s-6) var(--s-4);
  border-left: 1px solid var(--rule-dark);
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
  transition: background 0.2s var(--ease);
}
.gateway-card:first-child { border-left: 0; padding-left: 0; }
.gateway-card:hover { background: rgba(244,238,223,0.04); }
.gw-icon {
  display: inline-flex;
  width: 32px;
  height: 32px;
  color: var(--gold-light);
}
.gw-icon svg {
  width: 100%;
  height: 100%;
}
.gateway-card h3 {
  font-family: var(--font-serif);
  font-size: clamp(18px, 1.5vw, 22px);
  font-weight: 500;
  color: var(--paper);
  line-height: 1.2;
  margin-top: var(--s-2);
}
.gateway-card p {
  font-family: var(--font-sans);
  font-size: var(--fs-6);
  color: var(--on-dark-dim);
  line-height: var(--lh-normal);
  flex: 1;
}
.gw-arrow {
  /* Card-level dekorátor — větší než inline šipky (22 vs 18),
     stejný typografický rámec (sans 400). Hover translateX
     sladěno s ostatními šipkami (6 px). */
  font-family: var(--font-sans);
  font-weight: 400;
  color: var(--gold-light);
  font-size: 22px;
  line-height: 1;
  margin-top: var(--s-2);
  transition: transform 0.3s var(--ease);
}
.gateway-card:hover .gw-arrow { transform: translateX(6px); }

/* =========================================================
   LINK ARROW — sjednocený inline šipkový dekorátor.
   Větší než link text (1.5em → typicky 18 px pro 12 px text),
   s translateX hover animací. aria-hidden v HTML kvůli SR.
   Používá se v: ag-link, nh-link, how-card .more.
   ========================================================= */
.link-arrow {
  display: inline-block;
  margin-left: 0.5em;
  font-size: 1.5em;
  font-weight: 400;
  line-height: 1;
  vertical-align: -0.18em;
  transition: transform 0.3s var(--ease);
  will-change: transform;
}
.ag-link:hover .link-arrow,
.nh-link:hover .link-arrow,
.how-card:hover .link-arrow,
.hero-cta:hover .link-arrow {
  transform: translateX(6px);
}

/* Hover sloupcových karet: zlatý proužek nahoře, narůstá zleva
   (zachová plochý „editorial" styl, jen přidá zlatý akcent). */
.how-card, .gateway-card { position: relative; }
.how-card::after,
.gateway-card::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.3s var(--ease);
}
.how-card:hover::after,
.gateway-card:hover::after { transform: scaleX(1); }
@media (prefers-reduced-motion: reduce) {
  .how-card::after, .gateway-card::after { transition: none; }
}

@media (max-width: 1024px) {
  .gateway-grid { grid-template-columns: repeat(3, 1fr); }
  .gateway-card:nth-child(3n+1) { border-left: 0; padding-left: 0; }
  .gateway-card:nth-child(n+4) { border-top: 1px solid var(--rule-dark); }
}
@media (max-width: 720px) {
  .gateway-grid { grid-template-columns: 1fr 1fr; }
  .gateway-card { border-left: 1px solid var(--rule-dark); padding-left: var(--s-4); }
  .gateway-card:nth-child(odd) { border-left: 0; padding-left: 0; }
  .gateway-card:nth-child(n+3) { border-top: 1px solid var(--rule-dark); }
}
@media (max-width: 480px) {
  .gateway-grid { grid-template-columns: 1fr; }
  .gateway-card { border-left: 0; padding-left: 0; border-top: 1px solid var(--rule-dark); }
  .gateway-card:first-child { border-top: 0; }
}

/* =========================================================
   HOW — light band, římské číslice I–IV
   ========================================================= */
.how-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
  border-top: 1px solid var(--rule-light);
  border-bottom: 1px solid var(--rule-light);
}
.how-card {
  padding: var(--s-6) var(--s-5);
  border-left: 1px solid var(--rule-light);
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
  transition: background 0.2s var(--ease);
}
.how-card:first-child { border-left: 0; padding-left: 0; }
.how-card:hover { background: rgba(184,146,63,0.06); }
.how-roman {
  font-family: var(--font-serif);
  font-size: clamp(40px, 4vw, 64px);
  font-weight: 400;
  font-style: italic;
  color: var(--gold-dark); /* --gold dával na paper jen 2.45:1; gold-dark projde i pro velký dekorativní text */
  line-height: 0.9;
  letter-spacing: -0.02em;
  padding-bottom: var(--s-3);
  border-bottom: 1px solid var(--rule-light);
}
.how-card h3 {
  font-size: clamp(19px, 1.6vw, 22px);
  margin-top: var(--s-2);
}
.how-card p {
  font-family: var(--font-serif);
  font-size: var(--fs-6);
  color: var(--ink-dim);
  line-height: var(--lh-normal);
  flex: 1;
}
.how-card .more {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--navy);
  margin-top: var(--s-2);
  transition: color 0.18s var(--ease);
}
.how-card:hover .more { color: var(--gold-dark); }

@media (max-width: 900px) {
  .how-grid { grid-template-columns: 1fr 1fr; }
  .how-card:nth-child(odd) { border-left: 0; padding-left: 0; }
  .how-card:nth-child(n+3) { border-top: 1px solid var(--rule-light); }
}
@media (max-width: 560px) {
  .how-grid { grid-template-columns: 1fr; }
  .how-card { border-left: 0; padding-left: 0; border-top: 1px solid var(--rule-light); }
  .how-card:first-child { border-top: 0; }
}

/* =========================================================
   CONSTITUTION — dark band, klidný citát
   ========================================================= */
.constitution-inner {
  max-width: 820px;
  margin: 0 auto;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--s-5);
}
.constitution-emblem {
  width: 56px; height: 56px;
  opacity: 0.7;
  filter: brightness(1.4);
}
.constitution h2 {
  font-family: var(--font-serif);
  font-size: clamp(24px, 2.6vw, 36px);
  font-style: italic;
  font-weight: 400;
  line-height: 1.35;
  color: var(--paper);
  letter-spacing: -0.012em;
  max-width: 32ch;
}
.constitution .attribution {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--on-dark-dim);
}
.constitution .attribution strong { color: var(--gold-light); font-weight: 600; }
.constitution .rule {
  width: 56px;
  height: 1px;
  background: var(--gold);
  opacity: 0.6;
}

/* =========================================================
   FOOTER — navy darker, 2 fonty / 3 velikosti / 3 barvy
   ========================================================= */
.site-foot {
  --ft-bright: var(--paper);
  --ft-body: rgba(244,238,223,0.62);
  --ft-accent: var(--gold-light);

  background: var(--navy-deeper);
  color: var(--ft-body);
  padding: var(--s-8) 0 var(--s-5);
  font-family: var(--font-sans);
  font-size: 14.5px;
  line-height: var(--lh-normal);
}
.site-foot a { color: var(--ft-body); transition: color 0.18s var(--ease); }
.site-foot a:hover { color: var(--ft-bright); }

.foot-top {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: var(--s-6);
  padding-bottom: var(--s-7);
  border-bottom: 1px solid rgba(244,238,223,0.16);
}
.foot-brand { display: flex; flex-direction: column; gap: var(--s-4); }
.foot-brand .foot-logo { display: flex; align-items: center; gap: var(--s-3); }
.foot-brand .foot-logo img {
  height: 88px;
  width: auto;
  flex-shrink: 0;
  /* Inverzní jednobarevná (světlá) varianta dle PSP grafického manuálu —
     samostatný asset logo-psp-inverse.png (oficiální symbol z manuálu,
     přebarvený na --paper) místo CSS filtru. Zachová čistý monochrom
     bez nechtěné modifikace symbolu. */
  opacity: 0.95;
}
.foot-brand .foot-logo .ft-text {
  font-family: var(--font-serif);
  font-weight: 600;
  font-size: 20px;
  color: var(--ft-bright);
  line-height: 1.15;
  letter-spacing: -0.012em;
}
.foot-brand .foot-logo .ft-text small {
  display: block;
  font-family: var(--font-sans);
  font-size: 14.5px;
  font-weight: 400;
  color: var(--ft-body);
  text-transform: none;
  letter-spacing: 0;
  margin-top: 3px;
}
.foot-brand p {
  font-family: var(--font-sans);
  font-size: 14.5px;
  color: var(--ft-body);
  max-width: 38ch;
}
.foot-brand .foot-social { display: flex; gap: var(--s-2); margin-top: var(--s-2); }
.foot-brand .foot-social a {
  width: 34px; height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(244,238,223,0.22);
  color: var(--ft-body);
  transition: color 0.18s var(--ease), border-color 0.18s var(--ease);
}
.foot-brand .foot-social a:hover { color: var(--ft-bright); border-color: var(--ft-bright); }
.foot-brand .foot-social svg { width: 16px; height: 16px; fill: currentColor; }

.foot-col h3 {
  font-family: var(--font-sans);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--ft-accent);
  margin-bottom: var(--s-3);
}
.foot-col ul { display: flex; flex-direction: column; gap: 6px; }
.foot-col li {
  font-family: var(--font-sans);
  font-size: 14.5px;
  color: var(--ft-body);
}

.foot-bottom {
  padding-top: var(--s-4);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--s-4);
  flex-wrap: wrap;
  font-family: var(--font-sans);
  font-size: 12px;
  color: var(--ft-body);
}
.foot-bottom nav { display: flex; gap: var(--s-5); flex-wrap: wrap; }

/* Kredit autorů fotografií (CC BY-SA 4.0) — nenápadný řádek pod colophonem. */
.foot-credit {
  margin: var(--s-3) 0 0;
  font-family: var(--font-sans);
  font-size: 11px;
  color: var(--ft-body); /* odebrana extra opacity 0.7 — kombinace s --ft-body (0.62) dávala 0.43 => 3.8:1 */
}
.foot-credit a { text-decoration: underline; }

@media (max-width: 900px) {
  .foot-top { grid-template-columns: 1fr 1fr; }
  .foot-brand { grid-column: 1 / -1; }
}
@media (max-width: 560px) {
  .foot-top { grid-template-columns: 1fr; }
}

/* =========================================================
   A11Y PANEL — replikace 9-funkčního widgetu z projektu Třeboň
   Popover otevíraný z ribbon-a11y tlačítka. role="dialog".
   Skrytý přes [hidden] dokud JS nezruší.
   ========================================================= */
.a11y-panel {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(420px, 100vw);
  background: var(--paper);
  color: var(--ink);
  box-shadow: -16px 0 48px rgba(20,32,46,0.18);
  z-index: 1000;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transform: translateX(100%);
  transition: transform 0.32s var(--ease);
  font-family: var(--font-sans);
}
.a11y-panel[hidden] { display: none; }
.a11y-panel.is-open { transform: none; }

.a11y-panel-inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
}

.a11y-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--s-5) var(--s-5);
  border-bottom: 1px solid var(--rule-light);
  background: var(--navy);
  color: var(--paper);
  flex-shrink: 0;
}
.a11y-panel-head h2 {
  font-family: var(--font-serif);
  font-size: var(--fs-3);
  font-weight: 500;
  letter-spacing: -0.01em;
}
.a11y-close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(244,238,223,0.08);
  color: var(--paper);
  transition: background 0.18s var(--ease);
}
.a11y-close:hover { background: rgba(244,238,223,0.18); }
.a11y-close svg { width: 18px; height: 18px; }

.a11y-panel-body {
  flex: 1;
  overflow-y: auto;
  padding: var(--s-5);
  display: flex;
  flex-direction: column;
  gap: var(--s-5);
}

.a11y-group { border: 0; padding: 0; margin: 0; }
.a11y-group legend {
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--ink-dim);
  margin-bottom: var(--s-3);
  padding: 0;
}

.a11y-btn-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--s-2);
}
.a11y-opt {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: var(--s-3) var(--s-2);
  min-height: 56px;
  background: var(--paper-deep);
  border: 1px solid var(--rule-light);
  color: var(--ink);
  font-family: var(--font-sans);
  cursor: pointer;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease), color 0.18s var(--ease);
}
.a11y-opt:hover { background: rgba(184,146,63,0.08); border-color: var(--gold); }
.a11y-opt[aria-pressed="true"] {
  background: var(--navy);
  color: var(--paper);
  border-color: var(--navy);
}
.a11y-opt-glyph {
  font-family: var(--font-serif);
  font-weight: 500;
  line-height: 1;
}
.a11y-opt-label {
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.a11y-toggle-list { display: flex; flex-direction: column; }
.a11y-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-3);
  padding: var(--s-3) 0;
  min-height: 44px;
  border-bottom: 1px solid var(--rule-light);
  cursor: pointer;
  font-family: var(--font-sans);
  font-size: var(--fs-5);
  color: var(--ink);
}
.a11y-toggle:last-child { border-bottom: 0; }
.a11y-toggle input { position: absolute; opacity: 0; pointer-events: none; }
.a11y-toggle-label {
  flex: 1;
  font-weight: 500;
}
.a11y-toggle-track {
  position: relative;
  display: inline-block;
  width: 44px;
  height: 24px;
  border-radius: 12px;
  background: rgba(20,23,31,0.18);
  transition: background 0.2s var(--ease);
  flex-shrink: 0;
}
.a11y-toggle-track::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--paper);
  box-shadow: 0 1px 2px rgba(0,0,0,0.2);
  transition: transform 0.2s var(--ease);
}
.a11y-toggle input:checked ~ .a11y-toggle-track {
  background: var(--gold);
}
.a11y-toggle input:checked ~ .a11y-toggle-track::after {
  transform: translateX(20px);
}
.a11y-toggle input:focus-visible ~ .a11y-toggle-track {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
}

.a11y-panel-foot {
  padding: var(--s-4) var(--s-5);
  border-top: 1px solid var(--rule-light);
  flex-shrink: 0;
}
.a11y-reset {
  width: 100%;
  padding: 12px 16px;
  background: transparent;
  color: var(--navy);
  border: 1px solid var(--navy);
  font-family: var(--font-sans);
  font-size: var(--fs-7);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  cursor: pointer;
  transition: background 0.18s var(--ease), color 0.18s var(--ease);
  min-height: 44px;
}
.a11y-reset:hover { background: var(--navy); color: var(--paper); }

/* Overlay za panelem — dekorativní ztmavení stránky.
   Pseudo-element body::before je řízen třídou na <body>.
   pointer-events: none je KLÍČOVÉ: bez něj backdrop (pseudo-element
   nepozicovaného body) zachytával kliknutí i NAD panelem a žádný
   ovládací prvek uvnitř panelu nešel kliknout. Zavření klikem mimo
   řeší JS listener onOutsideClick na document, ne tento overlay. */
body.a11y-open {
  overflow: hidden; /* zabránit scrollu pod modálním panelem */
}
body.a11y-open::before {
  content: '';
  position: fixed;
  inset: 0;
  background: rgba(20,32,46,0.4);
  z-index: 999;
  pointer-events: none;
  animation: a11y-fadein 0.2s ease-out;
}
@keyframes a11y-fadein { from { opacity: 0; } to { opacity: 1; } }

@media (max-width: 480px) {
  .a11y-panel { width: 100vw; }
}
@media (prefers-reduced-motion: reduce) {
  .a11y-panel { transition: none; }
  body.a11y-open::before { animation: none; }
}

/* =========================================================
   A11Y MODES — třídy na <html>, řízené panelem
   ========================================================= */

/* 1) Velikost písma — scale --fs tokenů
   Cascada CSS custom properties zajistí, že všechny font-size:
   var(--fs-N) se přepočítají automaticky. */
html.font-large {
  --fs-1: clamp(54px, 7.6vw, 110px);
  --fs-2: clamp(34px, 4.1vw, 62px);
  --fs-3: clamp(22px, 2.1vw, 30px);
  --fs-4: clamp(20px, 1.6vw, 24px);
  --fs-5: 20px;
  --fs-6: 17px;
  --fs-7: 14px;
}
html.font-xlarge {
  --fs-1: clamp(62px, 8.8vw, 128px);
  --fs-2: clamp(38px, 4.6vw, 72px);
  --fs-3: clamp(24px, 2.3vw, 34px);
  --fs-4: clamp(22px, 1.8vw, 27px);
  --fs-5: 22px;
  --fs-6: 19px;
  --fs-7: 15px;
}

/* 2) Vysoký kontrast — bílé pozadí, černý text, gold ztmavený.
   Tokeny přepsány tak, aby cascada propagovala do celého CSS.
   Hero fotky a obrázkové bg se ztmaví, aby text nad nimi byl čitelný. */
html.high-contrast {
  --paper: #ffffff;
  --paper-deep: #f4f4f4;
  --navy: #000000;
  --navy-deeper: #000000;
  --ink: #000000;
  --ink-dim: #000000;
  --ink-mute: #333333;
  --on-dark: #ffffff;
  --on-dark-dim: #ffffff;
  --on-dark-mute: #dddddd;
  --rule-light: #000000;
  --rule-dark: #ffffff;
  --gold: #6b4f00;
  --gold-light: #ffd700;
  --gold-dark: #4a3500;
  --red: #b00000;
}
html.high-contrast .hero-bg img,
html.high-contrast .news-lead .nl-photo img,
html.high-contrast .news-item .ni-photo img,
html.high-contrast .speaker-photo img {
  filter: contrast(1.4) grayscale(0.4);
}
html.high-contrast .hero-slide::after {
  background: linear-gradient(180deg, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0.85) 100%) !important;
}
/* V dark sekcích redefine --gold na světlejší variantu — cascada
   propaguje do všech inner pravidel (gw-num, gold-frame, atd.),
   takže gold-dark (#6b4f00) nezůstane neviditelný na černém bg. */
html.high-contrast .section--dark,
html.high-contrast .hero,
html.high-contrast .ribbon,
html.high-contrast .site-foot {
  --gold: var(--gold-light);
}
html.high-contrast .gold-frame::before,
html.high-contrast .gold-frame::after { opacity: 1; }
html.high-contrast img { outline: 1px solid currentColor; outline-offset: 0; }
/* WCAG: tlumené meta/credit texty mají literal rgba / opacity, které na
   černém hc pozadí spadnou pod 4.5:1 — v hc je rozsvítíme na plnou bílou. */
html.high-contrast .ag-meta--past,
html.high-contrast .ag-meta--paused { color: var(--on-dark); }
html.high-contrast .foot-credit,
html.high-contrast .foot-credit a { color: var(--on-dark); opacity: 1; }

/* 3) Tmavý režim — všechny .section--light se převrátí na navy.
   Hero zůstává jako bylo (už je dark). */
html.dark-mode body {
  background: var(--navy-deeper);
  color: var(--paper);
}
html.dark-mode .masthead {
  background: var(--navy);
  border-bottom-color: var(--rule-dark);
}
html.dark-mode .mh-line-1 { color: var(--paper); }
html.dark-mode .mh-line-2 { color: var(--on-dark-dim); }
html.dark-mode .masthead-search { border-color: var(--rule-dark); background: rgba(244,238,223,0.04); }
html.dark-mode .masthead-search input { color: var(--paper); }
html.dark-mode .masthead-search input::placeholder { color: var(--on-dark-mute); }
html.dark-mode .masthead-search svg { color: var(--on-dark-dim); }
html.dark-mode .main-nav { background: var(--navy-deeper); border-top-color: var(--rule-dark); }
html.dark-mode .main-nav a { color: var(--paper); }
html.dark-mode .main-nav a:hover,
html.dark-mode .main-nav a[aria-current="page"] { color: var(--gold-light); }
html.dark-mode .section--light {
  background: var(--navy);
  color: var(--paper);
}
html.dark-mode .section--light h1,
html.dark-mode .section--light h2,
html.dark-mode .section--light h3,
html.dark-mode .section--light h4 { color: var(--paper); }
html.dark-mode .section--light .kicker { color: var(--gold-light); }
html.dark-mode .section--light p,
html.dark-mode .section--light .lead { color: var(--on-dark-dim); }
html.dark-mode .news-lead h3,
html.dark-mode .news-item h4 { color: var(--paper); }
html.dark-mode .news-lead .nl-meta,
html.dark-mode .news-item .ni-meta { color: var(--on-dark-dim); }
/* .cat zůstával gold-dark i na navy (3.27:1) — na tmavém je gold-light. */
html.dark-mode .nl-meta .cat,
html.dark-mode .ni-meta .cat { color: var(--gold-light); }
html.dark-mode .news-item { border-top-color: var(--rule-dark); }
html.dark-mode .stream-info strong,
html.dark-mode .va-list span { color: var(--paper); }
html.dark-mode .stream-num { color: var(--gold-light); } /* gold-dark by na navy spadl pod 3:1 */
html.dark-mode .stream-info small,
html.dark-mode .va-list small { color: var(--on-dark-dim); }
html.dark-mode .stream-list li,
html.dark-mode .va-list li,
html.dark-mode .va-title,
html.dark-mode .video-aside,
html.dark-mode .video-grid { border-color: var(--rule-dark); }
html.dark-mode .va-title { color: var(--paper); }
html.dark-mode .how-card { border-left-color: var(--rule-dark); }
html.dark-mode .how-card h3,
html.dark-mode .how-card .more { color: var(--paper); }
html.dark-mode .how-card p { color: var(--on-dark-dim); }
html.dark-mode .how-card:hover { background: rgba(184,146,63,0.10); }
html.dark-mode .how-grid { border-color: var(--rule-dark); }
html.dark-mode .how-roman { color: var(--gold-light); border-bottom-color: var(--rule-dark); } /* gold-dark by na navy spadl pod 3:1 */
html.dark-mode .speaker-content h2,
html.dark-mode .speaker-content .sp-bio { color: var(--paper); }
html.dark-mode .speaker-content .sp-role { color: var(--on-dark-dim); }
html.dark-mode .newsroom-head { border-bottom-color: var(--rule-dark); }
html.dark-mode .newsroom-head .nh-link { color: var(--gold-light); }
html.dark-mode .btn-secondary { color: var(--paper); border-color: var(--rule-dark); }
html.dark-mode .btn-secondary:hover { background: var(--paper); color: var(--navy); }
html.dark-mode .btn-primary { background: var(--paper); color: var(--navy); border-color: var(--paper); }

/* 4) Větší řádkování */
html.a11y-line-height body { line-height: 2; }
html.a11y-line-height p,
html.a11y-line-height li,
html.a11y-line-height .lead,
html.a11y-line-height blockquote,
html.a11y-line-height .sp-bio,
html.a11y-line-height .ag-name,
html.a11y-line-height .gateway-card p,
html.a11y-line-height .open-card p,
html.a11y-line-height .how-card p,
html.a11y-line-height .news-lead .nl-dek { line-height: 2; }

/* 5) Mezery mezi písmeny */
html.a11y-letter-spacing body {
  letter-spacing: 0.08em;
  word-spacing: 0.16em;
}
/* Nadpisy s tight tracking přepíšeme, aby nezbytně nevypadaly špatně */
html.a11y-letter-spacing h1,
html.a11y-letter-spacing h2,
html.a11y-letter-spacing h3,
html.a11y-letter-spacing h4 { letter-spacing: 0.02em; }

/* 6) Zvýraznit odkazy — outline + underline na všech <a> kromě
   tlačítek a navigace (kde už mají vlastní viditelný styl). */
html.a11y-highlight-links a:not(.btn):not(.skip-link):not(.a11y-close) {
  outline: 2px solid var(--gold);
  outline-offset: 2px;
  text-decoration: underline !important;
  text-underline-offset: 3px;
  text-decoration-thickness: 1.5px;
}

/* 7) Velký kurzor — 48×48 SVG cursor s vysokým kontrastem */
html.a11y-large-cursor,
html.a11y-large-cursor * {
  cursor: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 24 24'><path d='M5.5 3.2 L18 11.5 12 12.5 16 19.5 13 21 9 14 5.5 16.5 Z' fill='%23000' stroke='%23fff' stroke-width='1.2' stroke-linejoin='round'/></svg>") 4 4, auto !important;
}
html.a11y-large-cursor a,
html.a11y-large-cursor button,
html.a11y-large-cursor input,
html.a11y-large-cursor [role="button"],
html.a11y-large-cursor [role="link"] {
  cursor: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 24 24'><path d='M9 3.5 V13 L6 10 L4.5 11.5 L9.5 16.5 L11 18 L14 19 H17 V11 L15.5 9.5 V8 L14 6.5 V5 L12.5 3.5 H11 V3 L9 3.5 Z' fill='%23000' stroke='%23fff' stroke-width='0.8' stroke-linejoin='round'/></svg>") 12 4, pointer !important;
}

/* 8) Zastavit animace — universální vypnutí, silnější než
   prefers-reduced-motion (uživatel ho aktivoval ručně). */
html.a11y-stop-animations *,
html.a11y-stop-animations *::before,
html.a11y-stop-animations *::after {
  animation-duration: 0s !important;
  animation-delay: 0s !important;
  transition-duration: 0s !important;
  transition-delay: 0s !important;
}
html.a11y-stop-animations { scroll-behavior: auto !important; }

/* =========================================================
   FOCUS-VISIBLE — komplexní pokrytí všech interaktivních prvků
   Doplnění základního pravidla v § 84-87.
   ========================================================= */
.news-lead:focus-visible,
.news-item:focus-visible,
.gateway-card:focus-visible,
.how-card:focus-visible,
.agenda-list a:focus-visible,
.stream-list a:focus-visible,
.va-list a:focus-visible,
.committee-row:focus-visible,
.open-card:focus-visible {
  outline: 3px solid var(--gold);
  outline-offset: 3px;
  position: relative;
  z-index: 2;
}
.section--dark .agenda-list a:focus-visible,
.section--dark .gateway-card:focus-visible,
.section--dark .committee-row:focus-visible {
  outline-color: var(--gold-light);
}

/* =========================================================
   TOUCH TARGETS — minimální 44×44 px na mobile (WCAG 2.5.5)
   Aplikováno pouze pod 720 px, aby desktop layouty nebyly přepsány.
   ========================================================= */
@media (max-width: 720px) {
  .ribbon a,
  .ribbon-a11y,
  .ribbon span[aria-current] { min-height: 44px; display: inline-flex; align-items: center; }
  .ribbon { height: auto; padding: var(--s-2) 0; }
  .ribbon-right { flex-wrap: wrap; gap: var(--s-3) var(--s-4); }
  .main-nav a { min-height: 48px; }
  .foot-col a,
  .foot-bottom a { display: inline-block; min-height: 44px; line-height: 44px; padding: 0 4px; }
  .foot-social a { width: 44px; height: 44px; }
}

/* =========================================================
   ANIMACE — decentní reveal, count-up, gold underline
   Aktivní pouze pokud JS přidá body.js-anim, takže bez JS
   se nic neschová. Respektuje prefers-reduced-motion.
   ========================================================= */

/* Hero on-load — staggered fade-up: badge → H1 → lead → tlačítka */
body.js-anim .hero-status,
body.js-anim .hero h1,
body.js-anim .hero .lead,
body.js-anim .hero-actions {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease);
}
body.js-anim .hero.is-loaded .hero-status { opacity: 1; transform: none; transition-delay: 0.20s; }
body.js-anim .hero.is-loaded h1            { opacity: 1; transform: none; transition-delay: 0.36s; }
body.js-anim .hero.is-loaded .lead         { opacity: 1; transform: none; transition-delay: 0.52s; }
body.js-anim .hero.is-loaded .hero-actions { opacity: 1; transform: none; transition-delay: 0.68s; }

/* Scroll-reveal — generic fade+slide pro solo prvky (.section-head,
   .speaker-photo, .speaker-content, atd.). Stagger-grupy řeší
   pravidla níž, aby se nekombinovaly dva přechody přes sebe. */
body.js-anim .reveal:not(.reveal-stagger) {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  will-change: opacity, transform;
}
body.js-anim .reveal:not(.reveal-stagger).is-visible {
  opacity: 1;
  transform: none;
}

/* Stagger-parent zůstává viditelný (žádný hide), schované jsou jeho
   přímé děti. Když parent dostane .is-visible, děti se postupně
   ukáží podle nth-child delaye — žádný dvojitý transform.
   Background-color je v transition listě záměrně — některé děti
   (.how-card, .gateway-card) mají hover background a bez toho by
   se po revealu přestal animovat (transition shorthand by jejich
   původní transition rule přepsal). */
body.js-anim .reveal-stagger > * {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 0.7s var(--ease),
              transform 0.7s var(--ease),
              background-color 0.2s var(--ease);
  will-change: opacity, transform;
}
body.js-anim .reveal-stagger.is-visible > * {
  opacity: 1;
  transform: none;
}
body.js-anim .reveal-stagger.is-visible > *:nth-child(1) { transition-delay: 0s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(2) { transition-delay: 0.07s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(3) { transition-delay: 0.14s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(4) { transition-delay: 0.21s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(5) { transition-delay: 0.28s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(6) { transition-delay: 0.35s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(7) { transition-delay: 0.42s; }
body.js-anim .reveal-stagger.is-visible > *:nth-child(8) { transition-delay: 0.49s; }

/* Constitution emblem — jemné scale-in (přidává se k translateY,
   který už dědí ze stagger-parent rule). */
body.js-anim .reveal-stagger > .constitution-emblem {
  transform: translateY(12px) scale(0.92);
}
body.js-anim .reveal-stagger.is-visible > .constitution-emblem {
  transform: none;
}

/* Stats count-up — anti-shift, aby se cell „neskákalo" během
   přepisu textContent z 0 → cíl (tabular nums už nastavený). */
body.js-anim .stat-cell .sc-value { min-width: 1ch; }

/* Gold underline u news titulků — fixní 56px linka rostoucí
   zleva, jemnější než full-width underline. */
.news-lead h3,
.news-item h4 {
  position: relative;
}
.news-lead h3::after,
.news-item h4::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -6px;
  width: 56px;
  height: 1px;
  background: var(--gold);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.45s var(--ease);
  pointer-events: none;
}
.news-lead:hover h3::after,
.news-item:hover h4::after,
.news-lead:focus-visible h3::after,
.news-item:focus-visible h4::after {
  transform: scaleX(1);
}

@media (prefers-reduced-motion: reduce) {
  body.js-anim .hero-status,
  body.js-anim .hero h1,
  body.js-anim .hero .lead,
  body.js-anim .hero-actions,
  body.js-anim .reveal,
  body.js-anim .reveal.is-visible,
  body.js-anim .reveal-stagger > *,
  body.js-anim .reveal-stagger.is-visible > *,
  body.js-anim .constitution-emblem.reveal {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .news-lead h3::after,
  .news-item h4::after {
    display: none;
  }
}

/* =========================================================
   RESPONSIVE REFINEMENTY — doladění napříč breakpointy
   Existující @media v souboru pokrývají hlavní layoutové změny;
   tento blok řeší jemnější problémy specifické pro real zařízení:
   • Mobile menu — 6 dlouhých českých položek se vejde čitelně
   • Hero — landscape phone (short height) a velmi malé výšky
   • Kalendář v agendě — min target size na 320 px
   • Newsroom + footer — drobné polishe
   • Container padding — užší na velmi malých zařízeních
   ========================================================= */

/* =========================================================
   HAMBURGER MENU — viditelný pod 1024 px.
   Default desktop: hidden. Mobile: visible, nav je collapsed,
   klik na toggle otevře/zavře. Aria-expanded ovládá ikona barů/X.
   ========================================================= */
.nav-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  background: transparent;
  border: 1px solid var(--rule-light);
  color: var(--navy);
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.18s var(--ease), border-color 0.18s var(--ease);
}
.nav-toggle:hover { background: rgba(184,146,63,0.08); border-color: var(--gold); }
.nav-toggle:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.nav-toggle-icon { width: 22px; height: 22px; }
.nav-toggle-icon--close { display: none; }
.nav-toggle[aria-expanded="true"] .nav-toggle-icon--bars { display: none; }
.nav-toggle[aria-expanded="true"] .nav-toggle-icon--close { display: block; }

/* === Pod 1024 px — hamburger se zobrazí, main-nav collapsed === */
@media (max-width: 1024px) {
  .nav-toggle { display: inline-flex; }
  /* Main-nav skryté dokud uživatel neklepne na hamburger */
  .main-nav { display: none; border-top: 1px solid var(--rule-light); }
  .main-nav.is-open { display: block; }
  /* Otevřené mobilní menu = vždy solidní tmavý panel s bílými odkazy,
     ať je header průhledný (vrch) nebo solidní (po scrollu) — jinak by
     spodní položky prosvítaly přes hero. */
  .site-header .main-nav.is-open {
    background: rgba(14,24,36,0.98);
    border-top-color: var(--rule-dark);
  }
  .site-header .main-nav.is-open a {
    color: var(--paper);
    border-bottom-color: var(--rule-dark);
  }
  .site-header .main-nav.is-open a[aria-current="page"] {
    color: var(--gold-light);
    border-bottom-color: var(--gold-light);
  }
  .main-nav ul {
    flex-direction: column;
    flex-wrap: nowrap;
    padding: var(--s-3) 0;
  }
  .main-nav a {
    display: block;
    width: 100%;
    padding: var(--s-4) 0;
    border-bottom: 1px solid var(--rule-light);
    font-size: var(--fs-6);
    letter-spacing: 0.10em;
  }
  .main-nav li:last-child a { border-bottom: 0; }
  /* Když je menu otevřené, scroll page zafixovat */
  body.nav-open { overflow: hidden; }
}

/* === Ribbon brand text — skrýt pod 768 px aby pravý cluster
       (CS/EN/ZJ/Přístupnost/ISP) zůstal na jednom řádku === */
@media (max-width: 768px) {
  .ribbon-brand { display: none; }
  .ribbon .container { justify-content: flex-end; }
}
/* === Pod 640 px: skrýt textový label „Přístupnost" (ikona zůstává)
       a celý odkaz Přihlášení ISP. Důvod: pravý cluster i s brand-hide
       stále wrappuje. Přístupnost je tlačítko s aria-label, takže
       a11y nestrádá; ISP je niche utility — odkazuje se v patičce. === */
@media (max-width: 640px) {
  .ribbon-a11y .ribbon-label { display: none; }
  .ribbon-isp { display: none; }
  /* Po skrytí ISP zbývá jen jeden separator před a11y — pokud je
     to ten poslední, můžeme ho schovat tak, aby ribbon byl čistý. */
  .ribbon-isp + .ribbon-sep,
  .ribbon-a11y + .ribbon-sep { display: none; }
}

/* === Tablet portrait (720–900) === */
@media (max-width: 900px) {
  /* Hero typografie — H1 a lead mírně zmenšit aby seděly */
  .hero h1 { letter-spacing: -0.012em; }
  .hero .lead { font-size: var(--fs-5); max-width: 100%; }

  /* News-lead foto kompaktnější aby news grid nebyl moc dlouhý */
  .news-lead .nl-photo img { height: 320px; }

  /* Agenda title — zmenšit ikonu pro lepší proporce */
  .ag-icon { width: 20px; height: 20px; }
}

/* === Mobile (480–720) === */
@media (max-width: 720px) {
  /* Main-nav řeší hamburger (>= 1024 viditelný) — žádné nav úpravy zde */

  /* Hero — content padding kompaktnější, aby tlačítka byla viditelná
     bez scrollování i na 360×640 portrait. */
  .hero .container { padding-top: var(--s-6); padding-bottom: var(--s-6); }
  .hero-status { font-size: 11px; letter-spacing: 0.1em; }
  .hero h1 { line-height: 1.0; }
  .hero .lead { font-size: var(--fs-6); }
  /* Tlačítka stack pod sebou s konzistentní mezerou (předchozí
     flex-wrap pro 2 buttons + 140px min se na 360 viewport
     chovalo nekonzistentně). */
  .hero-actions { flex-direction: column; align-items: stretch; gap: var(--s-3); }
  .hero-actions .btn { width: 100%; justify-content: center; }

  /* Calendar — min target 36 px pro klikací buňky kalendáře */
  .cal-grid span { padding: 10px 0; font-size: var(--fs-7); }
  .cal-head span { font-size: 10px; }

  /* News-lead h3 — menší font na mobile */
  .news-lead h3 { font-size: 22px; max-width: 100%; }
  .news-lead .nl-photo img { height: 240px; }

  /* Speaker — fotka menší aby nezabírala 50% obrazovky */
  .speaker-photo { max-width: 280px; margin: 0 auto; }
  .speaker-content blockquote,
  .speaker-content .sp-bio { padding-left: var(--s-3); }

  /* Footer brand — logo menší, popisek úzký */
  .foot-brand .foot-logo img { height: 72px; }
  .foot-brand p { font-size: var(--fs-6); }

  /* Rozcestník — gateway karty na mobile menší padding */
  .gateway-card { padding: var(--s-4) var(--s-3); gap: var(--s-2); }
  .gw-icon { width: 28px; height: 28px; }
}

/* === Small mobile (360–480) === */
@media (max-width: 480px) {
  /* Container ještě užší padding — víc prostoru pro obsah */
  .container { padding: 0 var(--s-3); }

  /* Hero — minimum text */
  .hero { min-height: 60vh; }
  .hero h1 { font-size: clamp(40px, 11vw, 56px); }

  /* Ribbon — položky pod sebou nebo užší gap */
  .ribbon-right { gap: var(--s-2) var(--s-3); flex-wrap: wrap; }
  .ribbon .container { padding: var(--s-2) var(--s-3); }
  .ribbon-brand { font-size: 11px; max-width: 100%; }

  /* Masthead při scrollu — ještě kompaktnější */
  .site-header.is-scrolled .masthead .masthead-logo img { height: 56px; }

  /* Agenda — menší vertical padding */
  .agenda-col { padding: var(--s-4) 0; }
  .ag-title { font-size: 18px; }

  /* Stats — čísla menší aby seděla */
  .stat-cell .sc-value { font-size: clamp(48px, 14vw, 72px); }
  .stat-cell { padding: var(--s-5) 0; }

  /* How — římské číslice menší */
  .how-roman { font-size: 36px; }
  .how-card { padding: var(--s-5) var(--s-3); }

  /* Newsroom head — link mírně menší */
  .newsroom-head h2 { font-size: 24px; }
  .newsroom-head .nh-link { font-size: 11px; }

  /* Constitution — citát menší */
  .constitution-inner h2,
  .section--deep .constitution-inner h2 { font-size: 20px; }
  .constitution-emblem { width: 44px; height: 44px; }
}

/* === Landscape phone (low height) — hero nesmí přerůst viewport === */
@media (max-height: 500px) and (orientation: landscape) {
  .hero { min-height: auto; padding: var(--s-6) 0; }
  .hero .container { padding-top: var(--s-5); padding-bottom: var(--s-5); }
  .hero h1 { font-size: clamp(32px, 4.5vw, 48px); line-height: 1.0; }
  .hero .lead { font-size: var(--fs-6); }
  .hero-status { margin-bottom: var(--s-3); }
}

/* === Extra-large desktop (1600+) — container neroste neúměrně === */
@media (min-width: 1600px) {
  /* Container má hard cap 1240 v base — toto je jen reminder, kdyby
     někdo měnil v base. Žádné změny zde, dokumentace. */
}
