/* ============================================================
   PORTAL CORE — designové tokeny + komponenty
   Child téma přepisuje POUZE :root tokeny ve svém style.css.
   ============================================================ */
:root {
  /* Barvy — neutrální výchozí sada; portál je přebarví */
  --pt-primary: #2E7D46;
  --pt-primary-dark: #1C4A2E;
  --pt-primary-soft: #E8F3EC;
  --pt-accent: #F2622E;
  --pt-accent-soft: #FDEBE3;
  --pt-highlight: #F5C518;
  /* Stravovací profil — barva značky na mapě i legendy */
  --pt-level-only: #2E7D46;
  --pt-level-vegetarian: #C8891F;
  --pt-level-friendly: #3D7EA6;
  --pt-level-unknown: #6B7A70;

  /* --pt-bg je plocha stránky, --pt-bg-outer plocha kolem ní (okraje
     obrazovky). Dva odstíny místo jednoho, aby se obsah graficky oddělil. */
  --pt-bg: #FBF9F4;
  --pt-bg-outer: #EFEAE0;
  --pt-nav-bg: #FFFFFF;
  /* Text drží zelenočerný odstín, ne čistou černou — ta na teplém podkladu
     tvrdne. Proti původní #1D2721 je o stupeň tmavší kvůli čitelnosti. */
  --pt-ink: #141C17;
  --pt-ink-soft: #5C6B61;
  --pt-card: #FFFFFF;

  /* Šířka plochy stránky. Bootstrap container má 1320 px, tady je o gutter víc. */
  --pt-shell: 1400px;

  /* Tvar & stín */
  --pt-radius: 1.25rem;
  --pt-radius-sm: .75rem;
  --pt-shadow: 0 6px 24px rgba(29, 39, 33, .07);
  --pt-shadow-lg: 0 16px 48px rgba(29, 39, 33, .13);

  /* Typografie */
  --pt-font-head: "Bricolage Grotesque", sans-serif;
  --pt-font-body: "Inter", sans-serif;
}

/* Pojistka proti vodorovnému posuvníku — dekorativní kruhy v hero,
   negativní okraje Bootstrap řádků a podobné drobnosti dokážou stránku
   nepatrně roztáhnout do šířky na mobilu, i když jsou samy o sobě
   ořezané. Nic na webu vodorovné rolování nepotřebuje. */
html {
  overflow-x: hidden;
}

body {
  font-family: var(--pt-font-body);
  background: var(--pt-bg-outer);
  color: var(--pt-ink);
  overflow-x: hidden;
}

/* Plocha stránky mezi menu a patičkou. Na užších obrazovkách vyplní celou
   šířku, takže se okraje samy ztratí a nic se nezalamuje jinak.

   Odsazení odshora odděluje plochu od lišty menu a hlavně nechá vidět horní
   rohy — bez mezery by se zaoblení ztratilo pod lištou.

   POZOR: žádné `overflow: hidden` pro dorovnání rohů. Zabilo by lepivý
   sloupec s kartami na detailu (`position: sticky` nefunguje uvnitř
   přetékajícího předka). */
.pt-shell {
  max-width: var(--pt-shell);
  /* Nahoře větší mezera než dole: lišta menu je přišpendlená (sticky) a
     opticky si část mezery „vezme“, takže stejná hodnota jako dole vypadá
     menší. 3,4 rem nahoře čte jako 1,4 rem dole. */
  margin: 3.4rem auto 1.4rem;
  border-radius: var(--pt-radius);
  background: var(--pt-bg);
  box-shadow: 0 0 0 1px rgba(29, 39, 33, .06), var(--pt-shadow);
}

@media (max-width: 767.98px) {
  /* Na mobilu plocha zabírá celou šířku, zaoblení a mezera po stranách
     by jen ubíraly místo obsahu. */
  .pt-shell { margin: 0 auto; border-radius: 0; }
}

h1, h2, h3, h4, h5, .font-head {
  font-family: var(--pt-font-head);
  font-weight: 700;
  letter-spacing: -.01em;
}

/* ---------- Navbar ---------- */
.pt-navbar { background: var(--pt-nav-bg); border-bottom: 1px solid rgba(29,39,33,.07); }
.pt-logo { font-family: var(--pt-font-head); font-weight: 800; font-size: 1.5rem; color: var(--pt-ink); text-decoration: none; }
.pt-logo .mark { color: var(--pt-primary); }
.pt-logo .tld { color: var(--pt-ink-soft); font-weight: 400; }
.pt-nav { gap: .25rem; margin-left: 1rem; }
.pt-nav .menu-item { position: relative; }
.pt-nav .nav-link { color: var(--pt-ink); font-weight: 600; font-size: .95rem; padding: .5rem 1.1rem; border-radius: 999px; }
.pt-nav .nav-link:hover, .pt-nav .nav-link:focus, .pt-nav .current-menu-item > .nav-link, .pt-nav .current-menu-ancestor > .nav-link { background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
/* top: 100% (bez mezery) — mezera mezi spouštěčem a menu byla mrtvá
   zóna: kurzor cestou dolů opustil :hover na .menu-item-has-children
   a menu zmizelo dřív, než se do něj myš dostala. .35rem odstup od
   spouštěče drží padding-top, ten je pořád uvnitř hoverované plochy. */
.pt-nav .sub-menu { display: none; position: absolute; z-index: 1030; top: 100%; left: 0; min-width: 14rem; margin: 0; padding: .9rem .55rem .55rem; list-style: none; background: var(--pt-card); background-clip: padding-box; border: 1px solid rgba(29,39,33,.08); border-radius: var(--pt-radius-sm); box-shadow: var(--pt-shadow-lg); }
.pt-nav .menu-item-has-children:hover > .sub-menu, .pt-nav .menu-item-has-children:focus-within > .sub-menu { display: block; }
.pt-nav .sub-menu .nav-link { border-radius: .6rem; white-space: nowrap; }
.pt-nav .menu-item-has-children > .nav-link::after { content: ""; display: inline-block; width: .45em; height: .45em; margin-left: .45rem; vertical-align: .2em; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg); }
.pt-menu-toggle { border: 0; border-radius: 999px; padding: .4rem .55rem; }
.pt-menu-toggle:focus { box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }
.pt-nav-actions { padding-left: 1rem; }
@media (max-width: 991.98px) {
  .pt-navbar .navbar-collapse { position: absolute; z-index: 1020; top: 100%; right: 0; left: 0; max-height: calc(100vh - 4rem); overflow-y: auto; padding: 1rem max(1rem, calc((100vw - 1320px) / 2)) 1.25rem; background: var(--pt-bg); border-bottom: 1px solid rgba(29,39,33,.07); box-shadow: var(--pt-shadow-lg); }
  .pt-nav { gap: .2rem; margin: 0 0 .9rem; }
  .pt-nav .nav-link { padding: .7rem .9rem; border-radius: var(--pt-radius-sm); }
  .pt-nav .sub-menu { display: block; position: static; min-width: 0; margin: .15rem 0 .35rem .9rem; padding: 0 0 0 .65rem; border: 0; border-left: 2px solid var(--pt-primary-soft); border-radius: 0; box-shadow: none; background: transparent; }
  .pt-nav .sub-menu .nav-link { padding: .55rem .8rem; white-space: normal; }
  .pt-nav .menu-item-has-children > .nav-link::after { display: none; }
  .pt-nav-actions { padding: .9rem 0 0; border-top: 1px solid rgba(29,39,33,.08); }
}

/* ---------- Tlačítka ---------- */
.btn-pt-accent { background: var(--pt-accent); color: #fff; font-weight: 600; border-radius: 999px; padding: .55rem 1.25rem; border: none; }
.btn-pt-accent:hover { background: color-mix(in srgb, var(--pt-accent) 85%, black); color: #fff; }
.btn-pt-primary { background: var(--pt-primary); color: #fff; font-weight: 600; border-radius: 999px; padding: .55rem 1.25rem; border: none; }
.btn-pt-primary:hover { background: var(--pt-primary-dark); color: #fff; }
.btn-pt-ghost { background: transparent; border: 1.5px solid rgba(29,39,33,.18); color: var(--pt-ink); font-weight: 600; border-radius: 999px; padding: .55rem 1.25rem; }
.btn-pt-ghost:hover { border-color: var(--pt-ink); }
.lang-pill { font-size: .85rem; font-weight: 600; border: 1.5px solid rgba(29,39,33,.15); border-radius: 999px; padding: .35rem .8rem; color: var(--pt-ink-soft); background: transparent; text-decoration: none; }

/* ---------- Hero ---------- */
.pt-hero { padding: 2rem 0 3.5rem; position: relative; }
/* Ořezaná vrstva jen pro kruhy na pozadí — hero samo overflow:hidden
   nemá, jinak by ořízlo i dropdown našeptávače vyjíždějící z pole hledání. */
.pt-hero-decor { position: absolute; inset: 0; overflow: hidden; z-index: -1; pointer-events: none; }
.pt-hero h1 { font-size: clamp(2.4rem, 5vw, 3.8rem); font-weight: 800; line-height: 1.08; }
.pt-hero h1 .hl { color: var(--pt-primary); }
.pt-hero .lead { color: var(--pt-ink-soft); max-width: 34rem; }
/* Zmenšené oproti dřívějšímu — hero teď dělí prostor rovným dílem
   s články vpravo (viz front-page.php), hledání a štítky proto
   nemají zabírat víc výšky, než musí. */
.pt-search { background: #fff; border-radius: 999px; box-shadow: var(--pt-shadow-lg); padding: .35rem .35rem .35rem 1.15rem; max-width: 32rem; }
.pt-search input { border: none; outline: none; font-size: .92rem; background: transparent; }
.pt-search .btn-pt-primary { padding: .4rem .95rem; font-size: .88rem; }
.pt-chip { display: inline-flex; align-items: center; gap: .35rem; background: #fff; border: 1px solid rgba(29,39,33,.09); border-radius: 999px; padding: .32rem .8rem; font-size: .78rem; font-weight: 600; color: var(--pt-ink); text-decoration: none; box-shadow: 0 2px 8px rgba(29,39,33,.04); }
.pt-chip:hover { border-color: var(--pt-primary); color: var(--pt-primary-dark); }
.pt-stats { color: var(--pt-ink-soft); font-size: .92rem; }
.pt-stats strong { color: var(--pt-ink); font-family: var(--pt-font-head); font-size: 1.35rem; display: block; }
.hero-blob { position: absolute; border-radius: 50%; filter: blur(80px); opacity: .5; z-index: -1; }

/* ---------- Vyzdvižený magazín v hero ---------- */
.hero-mag { display: flex; flex-direction: column; gap: 1rem; }
/* Bez box-shadow — bílá karta na krémovém pozadí stránky (--pt-bg-outer)
   i s jemným stínem vypadala jako ostrý okraj kolem zaoblených rohů. */
.hero-mag-lead { background: var(--pt-card); border-radius: var(--pt-radius); overflow: hidden; text-decoration: none; color: var(--pt-ink); transition: transform .2s; display: block; }
.hero-mag-lead:hover { transform: translateY(-4px); color: var(--pt-ink); }
.hero-mag-lead .recipe-img, .hero-mag-lead .card-img-top { height: 170px; }
.hero-mag-lead-body { padding: 1rem 1.25rem 1.25rem; }
.hero-mag-lead-body h3 { font-size: 1.2rem; line-height: 1.3; margin: .3rem 0 .4rem; }
.hero-mag-excerpt { font-size: .88rem; color: var(--pt-ink-soft); line-height: 1.45; margin: 0; }

/* Carousel hlavního článku. Bootstrap defaultně dá tečky na spodek
   celého .carousel (position: relative), jenže naše karta má pod
   obrázkem ještě text — tečky tak seděly na bílém popisku, skoro
   neviditelné a přes text to navíc vypadalo jako šmouha. Místo
   toho je posazujeme přesně na spodek obrázku (150px), ne karty. */
.hero-mag-carousel .recipe-img, .hero-mag-carousel .card-img-top { height: 150px; }
.hero-mag-carousel .carousel-indicators { top: 118px; bottom: auto; margin: 0; }
.hero-mag-carousel .carousel-indicators [data-bs-target] { width: 8px; height: 8px; border-radius: 50%; border: none; background: rgba(255,255,255,.6); box-shadow: 0 1px 3px rgba(0,0,0,.35); }
.hero-mag-carousel .carousel-indicators .active { background: var(--pt-primary); box-shadow: 0 1px 3px rgba(0,0,0,.45); }

/* 2 malé vodorovné karty (náhled vlevo, text vpravo) */
.hero-mag-mini-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: .75rem; }
@media (max-width: 575.98px) {
	/* Na mobilu se sloupce hero už tak zalamují pod sebe — druhý
	   sloupeček mini karet by tam byl zbytečně úzký. */
	.hero-mag-mini-list { grid-template-columns: 1fr; }
}
.hero-mag-mini { display: flex; align-items: center; gap: .85rem; background: var(--pt-card); border-radius: var(--pt-radius-sm); box-shadow: var(--pt-shadow); text-decoration: none; color: var(--pt-ink); padding: .6rem .8rem; transition: transform .2s, box-shadow .2s; }
.hero-mag-mini:hover { transform: translateX(3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-primary-dark); }
.hero-mag-mini-thumb { flex: 0 0 auto; width: 56px; height: 56px; border-radius: var(--pt-radius-sm); background: var(--pt-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 1.6rem; overflow: hidden; }
.hero-mag-mini-thumb img { width: 100%; height: 100%; }
.hero-mag-mini-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.hero-mag-mini-title { font-weight: 700; font-size: .92rem; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* ---------- Statistiky jako samostatné bloky ---------- */

/* ---------- Sekce ---------- */
.pt-section { padding: 4rem 0; }
.pt-section-title { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 1.75rem; }
.pt-section-title h2 { font-size: 1.9rem; font-weight: 800; margin: 0; }
.pt-section-title .all { color: var(--pt-primary); font-weight: 600; text-decoration: none; font-size: .95rem; }
/* Odkaz „Všechny X →“ pod dlaždicemi, ne v hlavičce sekce nad nimi — hlavička
   patří titulku, ne rozcestníku k dalšímu obsahu. */
.pt-section-more { margin-top: 1.5rem; text-align: right; }
.pt-section-more .all { color: var(--pt-primary); font-weight: 600; text-decoration: none; font-size: .95rem; }
.pt-section-more .all:hover { color: var(--pt-primary-dark); }

/* Top vegan podniky pod mapou na titulce — stejná karta jako u Kalendáře
   akcí (.portal-event-card): kolečko vlevo, titulek a řádek s ikonou
   vpravo. Kolečko s datem tu nese fotku místa a zlatý rámeček odlišuje
   kartu od běžných akcí, i když sdílí většinu stylu. */
.pt-top-picks { padding: 1.5rem 1.5rem 2rem; }
.pt-top-picks-title { font-size: 1.2rem; margin-bottom: 1rem; }
.pt-top-pick-card { border: 1.5px solid #e3b400; height: 100%; }
.pt-top-pick-card .portal-event-link { height: 100%; align-items: flex-start; }
.pt-top-pick-thumb { width: 56px; height: 56px; padding: 0; overflow: hidden; background: var(--pt-primary-soft); }
.pt-top-pick-thumb img, .pt-top-pick-thumb .recipe-img { width: 100%; height: 100%; object-fit: cover; font-size: 1.4rem; }
.pt-top-pick-eyebrow { display: inline-flex; align-items: center; gap: .3rem; color: #a8790a; }
.pt-top-pick-eyebrow .portal-icon { width: .9em; height: .9em; }
.eyebrow { text-transform: uppercase; letter-spacing: .12em; font-size: .75rem; font-weight: 700; color: var(--pt-accent); }

/* ---------- Karty (recepty, obecné) ---------- */
.recipe-card { background: var(--pt-card); border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); transition: transform .2s, box-shadow .2s; border: none; height: 100%; }
.recipe-card:hover { transform: translateY(-4px); box-shadow: var(--pt-shadow-lg); }
.recipe-img, .recipe-card .card-img-top { height: 180px; display: flex; align-items: center; justify-content: center; font-size: 4rem; background: var(--pt-primary-soft); width: 100%; }
.recipe-card .badge-time { background: rgba(255,255,255,.92); color: var(--pt-ink); font-weight: 600; border-radius: 999px; font-size: .75rem; padding: .3rem .7rem; position: absolute; top: .8rem; left: .8rem; z-index: 1; }
.recipe-card .card-body { padding: 1.1rem 1.25rem 1.25rem; }
.recipe-card h5 { font-size: 1.08rem; margin-bottom: .3rem; }
.recipe-card h5 a { color: inherit; text-decoration: none; }
.recipe-meta { font-size: .82rem; color: var(--pt-ink-soft); }
.tag-diet { font-size: .72rem; font-weight: 700; color: var(--pt-primary-dark); background: var(--pt-primary-soft); border-radius: 999px; padding: .2rem .6rem; }
/*
 * Stejné barvy jako .portal-filter-chip-link na mapě (viz mapa-a-akce
 * ve vegora-design-system): najetí zeleně naznačí „přidá filtr“, ne
 * černě jako obyčejný odkaz. Dvě různé třídy zůstávají — .filter-pill
 * je jednodušší (bez ikony, bez počtu).
 */
.filter-pill { border: 1.5px solid rgba(29,39,33,.13); background: transparent; border-radius: 999px; padding: .45rem 1.1rem; font-weight: 600; font-size: .9rem; color: var(--pt-ink-soft); text-decoration: none; display: inline-block; transition: border-color .2s ease, background .2s ease, color .2s ease; }
.filter-pill:hover { border-color: var(--pt-primary); background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.filter-pill.active { background: var(--pt-primary-dark); color: #fff; border-color: transparent; }

/* ---------- Karta knihy ---------- */
/* Obálka na výšku (poměr knihy), ne na šířku jako u receptu/článku —
   `aspect-ratio` drží tvar i u obálek různé velikosti/kvality. */
.book-card { display: block; background: var(--pt-card); border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); transition: transform .2s, box-shadow .2s; height: 100%; }
.book-card:hover { transform: translateY(-4px); box-shadow: var(--pt-shadow-lg); }
/* contain, ne cover — obálka, co přesně nesedí na 3:4 (širší přebal,
   časopisecký formát…), by se cover jinak uřezala, stejný důvod jako
   u .product-card-cover. */
.book-card-cover { display: flex; align-items: center; justify-content: center; position: relative; aspect-ratio: 3 / 4; background: var(--pt-primary-soft); }
.book-card-cover img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; display: block; }
.book-card-cover-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 2.6rem; }
.book-card-badge { position: absolute; top: .6rem; left: .6rem; font-size: .68rem; padding: .28rem .6rem; box-shadow: 0 1px 4px rgba(0,0,0,.18); }

/* Fotky balení produktů bývají na šířku, ne na výšku jako obálky knih —
   3:4 + cover je proto uřezávalo na nepoznání. 4:3 + contain zobrazí
   celou fotku, případné doplnění po stranách kryje stejné jemné pozadí
   jako u .book-card-cover. */
.product-card-cover { display: flex; align-items: center; justify-content: center; position: relative; aspect-ratio: 4 / 3; background: var(--pt-primary-soft); }
.product-card-cover img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; display: block; }

/* ---------- Odborník ---------- */
/* Portrét, ne produktová fotka — ořez shora, ať nezmizí obličej (stejné
   pravidlo jako u osobností v Inspiraci, viz .insp-person-thumb). */
.poradce-card .card-img-top { object-position: top; }
.poradce-photo-wrap { aspect-ratio: 3 / 4; overflow: hidden; }
.poradce-photo { width: 100%; height: 100%; object-fit: cover; object-position: top; display: block; }

/* Vedle textu jako u odborníků (.poradce-photo-wrap), ne banner nad
   obsahem. object-fit: contain, ne cover — obrázek pojmu bývá fotka
   balení, ne portrét, a cover by ji na nepoznání uřízl (viz 3f3a614). */
/* Bez vlastního boxu/poměru stran — na rozdíl od portrétů odborníků
   nebo obálek knih tu fotka nemá jednotný tvar (balení produktu na
   výšku i našířku), takže si drží svůj vlastní poměr (width:100%,
   height:auto), ne nucený box, co za ní nechává prázdné "pozadí". */
.portal-glossary-cover-img { width: 100%; height: auto; display: block; }
.portal-contact-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .6rem; }
.portal-contact-list li { display: flex; align-items: center; gap: .55rem; }
.portal-contact-list .portal-icon { width: 1.1rem; height: 1.1rem; color: var(--pt-ink-soft); flex-shrink: 0; }
.portal-contact-list a { color: var(--pt-ink); text-decoration: none; word-break: break-word; }
.portal-contact-list a:hover { color: var(--pt-primary-dark); }
.book-card .card-body { padding: 1rem 1.1rem 1.2rem; }
.book-card h5 { font-size: .96rem; line-height: 1.3; margin-bottom: .2rem; }
.book-card h5 a { color: inherit; text-decoration: none; }
.book-card-author { font-size: .82rem; color: var(--pt-ink-soft); margin-bottom: .4rem; }
.book-card-excerpt { font-size: .82rem; color: var(--pt-ink-soft); margin: 0; }

/* ---------- Band (zvýrazněná sekce) ---------- */
.pt-band { background: var(--pt-primary-soft); border-radius: 2rem; }
.pt-band-dark { background: var(--pt-primary-dark); border-radius: 2rem; color: #fff; overflow: hidden; position: relative; }
.pt-band-dark h2 { color: #fff; font-size: 2rem; }
.pt-band-accent { background: var(--pt-accent-soft); border-radius: 2rem; }
.impact-num { font-family: var(--pt-font-head); font-size: 2.2rem; font-weight: 800; color: var(--pt-highlight); }
.impact-label { font-size: .85rem; color: rgba(255,255,255,.75); }

/* ---------- Průvodce / dlaždice ---------- */
.guide-card { border-radius: var(--pt-radius); padding: 1.6rem 1.4rem; height: 100%; text-decoration: none; color: var(--pt-ink); display: block; transition: transform .2s; background: var(--pt-primary-soft); }
.guide-card:hover { transform: translateY(-4px); color: var(--pt-ink); }
.guide-card .ico { font-size: 2.6rem; display: block; margin-bottom: .8rem; }
.guide-card h5 { font-size: 1.05rem; }
.guide-card p { font-size: .85rem; color: var(--pt-ink-soft); margin: 0; }

/* ---------- Články / novinky ---------- */
/* `color`/`text-decoration` tu musí být — karta z card-novinka.php je
   sama <a>, ne <article> s odkazem uvnitř. Bez resetu na tomhle místě
   zdědí titulek i popis výchozí modrou/podtržení prohlížeče (projevilo
   se všude, kde se šablona použije mimo .pt-novinky-sloupce, např. na
   stránce výsledků hledání). U card-article.php (Magazín, pořád ještě
   <article> s odkazem uvnitř) je to neškodný no-op. */
/* display: block chybělo — bez něj zůstal <a> ve výchozím inline
   režimu; vizuálně kartu to nerozbilo (prohlížeč blokuje kolem
   vnořených blokových dětí sám), ale ukazováček nad kartou zůstával
   běžná šipka místo ručičky, protože klikací plocha přesně nesedala
   na tu vykreslenou. */
.article-card { display: block; background: var(--pt-card); border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); border: none; height: 100%; color: inherit; text-decoration: none; transition: transform .2s, box-shadow .2s; }
/* Stejný nadzvednutý hover jako u „Nově přidáno" — dřív měla jen
   sloupcová varianta, karta v Magazínu (starší vzor, viz card-article.php)
   se na hover vůbec nehýbala. */
.article-card:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); }
.article-img, .article-card .card-img-top { height: 150px; display: flex; align-items: center; justify-content: center; font-size: 3rem; background: var(--pt-primary-soft); width: 100%; object-fit: cover; }
/* Logo certifikátu v „Nově přidáno" — stejná výška jako u fotek, ale
   `contain` místo `cover`: ořez by u vysokého loga se dvěma variantami
   pod sebou uřízl skoro všechen obsah. */
.pt-novinka-cert-thumb { height: 150px; padding: 1rem; display: flex; align-items: center; justify-content: center; background: var(--pt-primary-soft); }
.pt-novinka-cert-thumb img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
.pt-novinka-cert-thumb .portal-icon { width: 2.4rem; height: 2.4rem; color: var(--pt-primary); }
.article-card .card-body { padding: 1.1rem 1.25rem; }
.article-card h5 { font-size: 1.02rem; line-height: 1.35; }
.article-card h5 a { color: inherit; text-decoration: none; }
.cat-label { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--pt-accent); }
.news-item { padding: .9rem 0; border-bottom: 1px solid rgba(29,39,33,.08); }
.news-item:last-child { border-bottom: none; }
.news-item a { color: var(--pt-ink); text-decoration: none; font-weight: 600; font-size: .95rem; }
.news-item a:hover { color: var(--pt-primary); }
.news-date { font-size: .78rem; color: var(--pt-ink-soft); }

/* ---------- Magazín (archiv) ---------- */
/* Dvě velké karty nahoře — poslední dva články, vedle sebe na desktopu,
   pod sebou na mobilu. Zbytek stránky jedou po rubrikách níž. */
.mag-feature-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 2.75rem; }
@media (max-width: 767.98px) { .mag-feature-grid { grid-template-columns: 1fr; gap: 1.25rem; } }
.mag-feature-card { display: block; background: var(--pt-card); border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); color: inherit; text-decoration: none; transition: transform .2s, box-shadow .2s; }
.mag-feature-card:hover { transform: translateY(-4px); box-shadow: var(--pt-shadow-lg); color: inherit; }
.mag-feature-thumb { height: 260px; background: var(--pt-primary-soft); }
.mag-feature-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (max-width: 575.98px) { .mag-feature-thumb { height: 200px; } }
.mag-feature-body { padding: 1.4rem 1.5rem 1.6rem; }
.mag-feature-body h2 { font-size: 1.4rem; font-weight: 800; line-height: 1.3; margin: .15rem 0 .55rem; color: var(--pt-ink); }
.mag-feature-excerpt { color: var(--pt-ink-soft); font-size: .92rem; line-height: 1.55; margin: 0; }

/* Sekce podle rubriky — nadpis + řádek karet, stejný vzor jako zbytek webu. */
.mag-section { margin-bottom: 2.75rem; }
.mag-section:last-of-type { margin-bottom: 0; }
.mag-section-title { margin-bottom: 1.25rem; }
.mag-section-title h2 { font-size: 1.3rem; }

/* ---------- Inspirace ---------- */
.insp-part { margin-bottom: 1.75rem; }
.insp-part:last-child { margin-bottom: 0; }
.insp-subhead { display: inline-block; font-family: var(--pt-font-head); font-weight: 700; font-size: 1.05rem; color: var(--pt-ink); text-decoration: none; margin-bottom: .9rem; }
.insp-subhead:hover { color: var(--pt-primary); }
.insp-show-all { display: inline-block; margin-top: 1.1rem; font-weight: 600; font-size: .9rem; color: var(--pt-primary-dark); text-decoration: none; }
.insp-show-all:hover { text-decoration: underline; }
.insp-card { height: 100%; }
/* Citát — foto vlevo, text vpravo, zarovnané nahoru k obrázku.
   Karta je záměrně kompaktní: citátů budou stovky a plná šířka na řádek
   z výpisu dělá nekonečné rolování. Vyniknout má až vybraný citát na
   titulce, kterému větší formát dá `.insp-quote-feature`. */
.insp-quote { background: var(--pt-primary-soft); border-radius: var(--pt-radius); padding: 1.25rem 1.4rem; margin: 0; height: 100%; display: flex; align-items: flex-start; gap: 1.1rem; text-decoration: none; color: var(--pt-ink); transition: box-shadow .2s, transform .2s; }
.insp-quote:hover { box-shadow: var(--pt-shadow-lg); transform: translateY(-2px); color: var(--pt-ink); }
.insp-quote-photo { flex: 0 0 auto; width: 64px; height: 64px; border-radius: 50%; overflow: hidden; background: #fff; display: flex; align-items: center; justify-content: center; box-shadow: var(--pt-shadow); }
.insp-quote-photo img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
.insp-quote-initials { font-family: var(--pt-font-head); font-weight: 800; font-size: 1.5rem; color: var(--pt-primary); }
.insp-quote-text { position: relative; min-width: 0; }
.insp-quote-mark { font-family: var(--pt-font-head); font-size: 1.3rem; color: var(--pt-primary); opacity: .55; margin-right: .15rem; }
.insp-quote-p { font-family: var(--pt-font-head); font-size: 1rem; font-weight: 600; line-height: 1.45; color: var(--pt-ink); margin: 0 0 .45rem; }
/* Vybraný citát na titulce — jediný na stránce, unese velký formát. */
.insp-quote-feature { padding: 1.75rem 2rem; gap: 1.75rem; }
.insp-quote-feature .insp-quote-photo { width: 120px; height: 120px; }
.insp-quote-feature .insp-quote-initials { font-size: 2.6rem; }
.insp-quote-feature .insp-quote-p { font-size: 1.2rem; }
.insp-quote-feature .insp-quote-mark { font-size: 1.6rem; }
.insp-quote-typed.is-typing::after { content: ''; display: inline-block; width: 2px; height: 1.05em; background: var(--pt-primary); margin-left: 2px; vertical-align: -0.15em; animation: zajCaret .8s step-end infinite; }
@keyframes zajCaret { 50% { opacity: 0; } }
.insp-quote cite { font-style: normal; font-weight: 600; font-size: .9rem; color: var(--pt-primary-dark); }
@media (max-width: 575px) { .insp-quote { flex-direction: column; text-align: center; align-items: center; } }
/* Významný den */
/* Významný den je taky termín, takže vypadá jako termín: datum v kolečku
   vlevo, stejně jako u akcí a portrét u osobností. Oranžová se drží pro
   nadpisky sekcí a hlavní tlačítko, v kartě by přebíjela obsah. */
.insp-day { display: flex; align-items: center; gap: 1rem; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); padding: 1rem 1.1rem; height: 100%; transition: transform .2s, box-shadow .2s; text-decoration: none; color: var(--pt-ink); }
.insp-day:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-ink); }
.insp-day-badge { display: flex; flex: 0 0 auto; flex-direction: column; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.insp-day-num { font-family: var(--pt-font-head); font-weight: 800; font-size: 1.5rem; line-height: 1; }
.insp-day-mon { font-size: .66rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
/* Nerozpoznané datum se vejde jen jako text — kolečko by ho uřízlo. */
.insp-day-badge-text { width: auto; min-width: 64px; padding: 0 .8rem; border-radius: 999px; font-size: .85rem; font-weight: 700; }
.insp-day-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.insp-day-when { font-size: .78rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--pt-primary-dark); }
.insp-day-title { font-family: var(--pt-font-head); font-weight: 700; font-size: 1.05rem; line-height: 1.3; }
.insp-day:hover .insp-day-title { color: var(--pt-primary-dark); }
.insp-day-source { font-size: .85rem; color: var(--pt-ink-soft); }

/* ---------- Detail inspirace ---------- */
/* Stavba je stejná jako u místa a akce (.portal-place-*), tady jen doplňky. */
/* Citát a osobnost nemají sloupec s kartami, takže se zúží celý obsah včetně
   drobečků — navigace nesmí začínat jinde než text pod ní. */
.portal-inspirace-narrow { max-width: 46rem; margin: 0 auto; }
a.portal-badge { text-decoration: none; }
a.portal-badge:hover { background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
/* Hlavička detailu potřebuje odstup od drobečků — bez něj se rubrika lepí
   na navigaci a čte se jako její pokračování. */
.portal-place-head { margin-top: 1.6rem; }
.portal-inspirace-person { display: flex; align-items: center; gap: 1.1rem; flex-wrap: wrap; }
.portal-inspirace-person-text { min-width: 0; }
.portal-inspirace-person-text h1 { margin-top: .1rem; }
/* Portrét je hlavní prvek hlavičky, proto větší než miniatura v kartě. */
.portal-nearby-thumb.portal-inspirace-portrait { width: 84px; height: 84px; font-size: 2.2rem; }
/* Sekce pod oběma sloupci — oddělí se linkou, ať je vidět, že už nepatří
   k obsahu nahoře. */
.portal-inspirace-more { padding-top: 2.2rem; border-top: 1px solid rgba(29,39,33,.08); }

/* Upoutávka s fotkou — obsahově neutrální, dnes ji používá „Co se blíží“
   v sekci Inspirace. Fotka je vedle textu, ne pod ním: plakáty mívají text
   přímo v obrázku a překrytí by se s ním tlouklo. */
.portal-spotlight { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); align-items: stretch; margin-bottom: 2rem; border-radius: var(--pt-radius); overflow: hidden; background: var(--pt-card); box-shadow: var(--pt-shadow); color: var(--pt-ink); text-decoration: none; transition: transform .2s, box-shadow .2s; }
.portal-spotlight:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-ink); }
.portal-spotlight-media { display: block; background: var(--pt-primary-soft); }
.portal-spotlight-media img { display: block; width: 100%; height: 100%; object-fit: cover; }
.portal-spotlight-body { display: flex; flex-direction: column; gap: .5rem; padding: 1.8rem 2rem; }
.portal-spotlight-eyebrow { color: var(--pt-accent); font-size: .8rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.portal-spotlight-title { font-family: var(--pt-font-head); font-size: clamp(1.3rem, 2.4vw, 1.8rem); font-weight: 800; line-height: 1.2; }
.portal-spotlight-meta { color: var(--pt-primary-dark); font-size: .9rem; font-weight: 600; }
.portal-spotlight-text { color: var(--pt-ink-soft); font-size: .95rem; }
.portal-spotlight-cta { margin-top: auto; color: var(--pt-primary-dark); font-weight: 700; }
/* Bez fotky zabere text celou dlaždici. */
.portal-spotlight-body:only-child { grid-column: 1 / -1; }
@media (max-width: 767.98px) {
  .portal-spotlight { grid-template-columns: 1fr; }
  .portal-spotlight-media img { max-height: 260px; }
  .portal-spotlight-body { padding: 1.3rem 1.4rem; }
}

/* Jedna úvodní fotka. Odsazení drží stejný rytmus jako `.portal-place-block`:
   od štítků nad ní i od nadpisu pod ní stejná mezera. */
.portal-hero-image { margin: 1.8rem 0 0; border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); background: var(--pt-primary-soft); }
.portal-hero-image img { display: block; width: 100%; height: auto; }
.portal-hero-image + .portal-place-block { margin-top: 2.2rem; }
/* Logo certifikátu vlevo od textu, bez barevného podkladu — je to
   značka se svým vlastním pozadím (často bílým nebo průhledným),
   ne ilustrace, které je potřeba dokreslit rámeček. */
.portal-cert-detail { display: flex; gap: 1.8rem; align-items: flex-start; }
.portal-cert-logo { flex: 0 0 auto; margin: 0; width: 200px; }
.portal-cert-logo img { display: block; width: 100%; height: auto; object-fit: contain; }
/*
 * Text sedí ve vlastním <div>, ne přímo v `.entry-content` — obecná
 * pravidla „mezera mezi sourozenci" a „nadpis odsazený od textu nad
 * ním" proto necílí na tenhle div/h2 a musí se přebít výslovně,
 * jinak logo a nadpis "O certifikátu" nezačínaly na stejné výšce.
 */
.portal-cert-detail-text { flex: 1 1 auto; min-width: 0; margin-top: 0 !important; }
.portal-cert-detail-text > h2:first-child { margin-top: 0 !important; }
@media (max-width: 575px) {
	.portal-cert-detail { flex-direction: column; }
	.portal-cert-logo { width: 140px; }
}
.insp-detail-source { font-size: .9rem; color: var(--pt-ink-soft); border-top: 1px solid rgba(29,39,33,.1); padding-top: 1rem; }
.insp-detail-source a { color: var(--pt-primary-dark); font-weight: 600; text-decoration: none; }
.insp-detail-source a:hover { text-decoration: underline; }
/* Mezera nad kartou chyběla od chvíle, co odznak „Ověřený citát“ přestal
   být v hlavičce (přesunul se dolů ke zdroji) — s ním zmizel i jediný
   prvek, co dřív dělal odstup od nadpisu „Citát“. */
.insp-detail-quote { background: var(--pt-primary-soft); border-radius: var(--pt-radius); padding: 2rem 2.25rem; margin: 1.25rem 0 0; }
.insp-detail-quote-text { font-family: var(--pt-font-head); font-size: 1.6rem; font-weight: 700; line-height: 1.4; color: var(--pt-ink); margin: .5rem 0 1rem; }
.insp-detail-quote cite { font-style: normal; font-weight: 600; font-size: 1rem; color: var(--pt-primary-dark); }
.insp-detail-quote cite a { color: inherit; text-decoration: none; }
.insp-detail-quote cite a:hover { text-decoration: underline; }
.insp-detail-person-thumb { flex: 0 0 auto; width: 96px; height: 96px; border-radius: 50%; overflow: hidden; background: var(--pt-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 2.5rem; }
.insp-detail-person-thumb img { width: 100%; height: 100%; }

/* ---------- Stránkování (archivy) ---------- */
.pt-pagination { display: flex; flex-wrap: wrap; justify-content: center; gap: .6rem; margin-top: 2rem; }
.pt-pagination .page-numbers { display: inline-flex; align-items: center; justify-content: center; min-width: 2.4rem; height: 2.4rem; padding: 0 .7rem; border-radius: 999px; background: var(--pt-card); box-shadow: var(--pt-shadow); color: var(--pt-ink); text-decoration: none; font-weight: 600; font-size: .9rem; transition: transform .15s, box-shadow .15s; }
.pt-pagination .page-numbers:hover { transform: translateY(-2px); box-shadow: var(--pt-shadow-lg); color: var(--pt-primary-dark); }
.pt-pagination .page-numbers.current { background: var(--pt-primary); color: #fff; box-shadow: none; }
.pt-pagination .page-numbers.dots { background: transparent; box-shadow: none; }
.pt-pagination .page-numbers.prev, .pt-pagination .page-numbers.next { padding: 0 1.1rem; }
/* Slavný vegan / osobnost */
.insp-person { display: flex; align-items: center; gap: 1rem; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); padding: 1rem 1.1rem; height: 100%; text-decoration: none; color: var(--pt-ink); transition: transform .2s, box-shadow .2s; }
.insp-person:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-primary-dark); }
.insp-person-thumb { flex: 0 0 auto; width: 64px; height: 64px; border-radius: 50%; overflow: hidden; background: var(--pt-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 1.8rem; }
.insp-person-thumb img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
.insp-person-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.insp-person-field { color: var(--pt-primary-dark); font-size: .7rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.insp-person-name { font-family: var(--pt-font-head); font-weight: 700; font-size: 1.05rem; }
.insp-person-excerpt { font-size: .85rem; color: var(--pt-ink-soft); }
/* Odznak „Ověřený citát“ patří ke zdroji — stojí vedle odkazu na něj,
   ne osamocený nad textem citátu, kde působil jako nesouvisející prvek. */
.portal-quote-source { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; margin-top: 1.5rem; }
.portal-quote-source .portal-source-link { margin-top: 0; }

/* Sporný citát — celý blok červeně orámovaný, ne jen odznak, ať je na
   první pohled jasné, že je to jiná kategorie než běžný zdroj. */
.portal-quote-disputed { margin-top: 1.5rem; padding: 1rem 1.2rem; border: 1px solid rgba(157,45,32,.35); border-radius: var(--pt-radius-sm); background: #fbe6e2; }
.portal-quote-disputed-note { margin: .55rem 0 0; font-size: .92rem; color: #7a2419; line-height: 1.5; }

/* Odkaz na zdroj pod textem — vypadá jako jedna věta, ne jako tlačítko. */
.portal-source-link { margin: 1.5rem 0 0; font-size: .92rem; }
.portal-source-link a { display: inline-flex; align-items: baseline; gap: .4rem; color: var(--pt-primary-dark); font-weight: 700; text-decoration: none; }
.portal-source-link a:hover { text-decoration: underline; }
.portal-source-link span { color: var(--pt-ink-soft); font-weight: 500; }

.insp-person-badges { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .35rem; }
.insp-person-badges .portal-badge { font-size: .78rem; }

/* Certifikáty — logo ve čtverci, ne v kolečku jako u osobnosti (kruhový
   ořez by u loga uřízl rohy a text). Bez rámečku uvnitř loga: většina
   log má bílé/průhledné pozadí a splynula by s kartou. */
.insp-cert { display: flex; align-items: center; gap: 1rem; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); padding: 1rem 1.1rem; height: 100%; text-decoration: none; color: var(--pt-ink); transition: box-shadow .2s; }
.insp-cert:hover { box-shadow: var(--pt-shadow-lg); color: var(--pt-ink); }
.insp-cert-logo { flex: 0 0 auto; width: 64px; height: 64px; border-radius: var(--pt-radius-sm); overflow: hidden; background: var(--pt-primary-soft); display: flex; align-items: center; justify-content: center; font-size: 1.6rem; padding: .4rem; }
.insp-cert-logo img { width: 100%; height: 100%; object-fit: contain; }
.insp-cert-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.insp-cert-name { font-family: var(--pt-font-head); font-weight: 700; font-size: 1.05rem; }
.insp-cert:hover .insp-cert-name { color: var(--pt-primary-dark); }
.insp-cert-issuer { color: var(--pt-primary-dark); font-size: .78rem; font-weight: 700; }
.insp-cert-excerpt { font-size: .85rem; color: var(--pt-ink-soft); }

/* ---------- Mapa ---------- */
.country-chip { background: #fff; border-radius: 999px; padding: .5rem 1.1rem; font-weight: 600; font-size: .9rem; text-decoration: none; color: var(--pt-ink); border: 1px solid rgba(29,39,33,.08); }
.country-chip:hover { border-color: var(--pt-primary); color: var(--pt-primary-dark); }
.portal-map { width: 100%; min-height: 340px; border-radius: var(--pt-radius); background: var(--pt-primary-soft); z-index: 0; }
.portal-map-large { height: min(68vh, 700px); min-height: 480px; box-shadow: var(--pt-shadow); }
.portal-map-detail { min-height: 320px; box-shadow: var(--pt-shadow); }
.portal-map .leaflet-control-attribution { font-size: .68rem; }
.portal-map .leaflet-popup-content-wrapper { border-radius: var(--pt-radius-sm); box-shadow: var(--pt-shadow-lg); }
.portal-map-popup { display: flex; flex-direction: column; gap: .45rem; min-width: 180px; }
.portal-map-popup img { width: calc(100% + 40px); max-height: 120px; margin: -14px -20px .35rem; object-fit: cover; border-radius: var(--pt-radius-sm) var(--pt-radius-sm) 0 0; }
.portal-map-popup strong { font-family: var(--pt-font-head); font-size: 1rem; }
.portal-map-popup span { color: var(--pt-ink-soft); font-size: .82rem; }
/* Odznak dědí obecné pravidlo pro span výš (barva/velikost textu v popupu) —
   bez vlastní specifičtější sady by zlatá barva i tvar odznaku zmizely. */
.portal-map-popup .portal-badge-top.portal-map-popup-top { align-self: flex-start; color: #7a5b00; font-size: .74rem; }
.portal-map-popup a { color: var(--pt-primary-dark); font-weight: 700; text-decoration: none; }
.portal-map-filters { display: grid; grid-template-columns: minmax(220px, 2fr) minmax(160px, 1fr) minmax(160px, 1fr) auto; gap: .8rem; align-items: end; padding: 1rem; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); }
.portal-map-filter { display: flex; flex-direction: column; gap: .3rem; }
.portal-map-filter label { font-size: .75rem; font-weight: 700; color: var(--pt-ink-soft); }
.portal-map-filter input, .portal-map-filter select { width: 100%; min-height: 42px; border: 1.5px solid rgba(29,39,33,.14); border-radius: var(--pt-radius-sm); padding: .55rem .75rem; background: #fff; color: var(--pt-ink); }
.portal-map-filter input:focus, .portal-map-filter select:focus { outline: 0; border-color: var(--pt-primary); box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }
.portal-map-status { min-height: 1.4em; color: var(--pt-ink-soft); font-size: .88rem; }
.portal-map-status[data-state="error"] { color: #9d2d20; }
.portal-map-status[data-state="ready"] { color: var(--pt-primary-dark); font-weight: 600; }
/* Karty ve výsledcích drží tvar karty osobnosti z Inspirace: měkký roh,
   stín místo rámečku a po najetí lehké nadzvednutí. Platí pro mapu, akce
   i „Místa poblíž“ — je to jeden a tentýž prvek. */
.portal-place-results { display: flex; flex-direction: column; gap: .75rem; max-height: min(68vh, 700px); min-height: 240px; overflow-y: auto; padding: .25rem .35rem .35rem .25rem; }
/* `color`/`text-decoration` tu musí být — karta ve výsledcích mapy
   (map.js resultCard()) je teď sama <a> přes celý blok, ne jen titulek
   uvnitř. Bez resetu na tomhle místě by titulek/adresa/štítky zdědily
   výchozí modrou/podtržení prohlížeče (stejná past jako dřív u
   .article-card). U karty akce (<article> s odkazem uvnitř) neškodí. */
.portal-place-card { background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); color: inherit; text-decoration: none; display: block; transition: transform .2s, box-shadow .2s, background .2s; }
.portal-place-card:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: inherit; }
/* `is-active` zapíná najetí na odpovídající značku na mapě — stejné
   zvýraznění, jaké dostane karta akce, sjednocené mezi oběma mapami. */
.portal-place-card.is-active { background: var(--pt-primary-soft); transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); }
.portal-place-card-body { padding: 1rem 1.1rem; }
.portal-place-card h3 { font-family: var(--pt-font-head); font-size: 1.05rem; font-weight: 700; margin: 0 0 .2rem; color: var(--pt-ink); }
.portal-place-card:hover h3 { color: var(--pt-primary-dark); }
.portal-place-card-meta, .portal-place-card-address { margin: 0; color: var(--pt-ink-soft); font-size: .85rem; }
.portal-place-card-address { margin-top: .25rem; }
.portal-place-card-top { margin-bottom: .5rem; font-size: .74rem; padding: .28rem .6rem; }
/* Top podnik má i v seznamu vlastní zlatý lem, ne jen odznak nahoře —
   ať je vidět i při rychlém scrollování bez čtení textu. */
.portal-place-card.is-top-pick { border: 1.5px solid #e3b400; }
.portal-back-link { display: inline-flex; color: var(--pt-primary-dark); font-weight: 700; text-decoration: none; }
.portal-place-level { display: inline-flex; margin-top: .35rem; padding: .3rem .7rem; border-radius: 999px; color: var(--pt-primary-dark); background: var(--pt-primary-soft); font-size: .8rem; font-weight: 700; }
.portal-place-contact { padding: 1.4rem; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); }
.portal-place-contact dl { display: grid; gap: .8rem; margin: 1rem 0 0; }
.portal-place-contact dl > div { padding-bottom: .8rem; border-bottom: 1px solid rgba(29,39,33,.08); }
.portal-place-contact dl > div:last-child { padding-bottom: 0; border-bottom: 0; }
.portal-place-contact dt { color: var(--pt-ink-soft); font-size: .75rem; margin-bottom: .2rem; }
.portal-place-contact dd { margin: 0; font-weight: 600; }
.portal-place-contact a { color: var(--pt-primary-dark); text-decoration: none; }

/* ---- Značky na mapě --------------------------------------------------- */
/* Barva = stravovací profil, tvar uvnitř = druh podniku. */
.portal-marker { background: none; border: 0; }
.portal-marker svg { width: 32px; height: 38px; overflow: visible; filter: drop-shadow(0 2px 3px rgba(19,26,21,.35)); }
.portal-marker .portal-marker-pin { fill: currentColor; stroke: #fff; stroke-width: 1.5; }
.portal-marker .portal-marker-glyph { color: #fff; }
.portal-marker--only { color: var(--pt-level-only); }
.portal-marker--vegetarian { color: var(--pt-level-vegetarian); }
.portal-marker--friendly { color: var(--pt-level-friendly); }
.portal-marker--unknown { color: var(--pt-level-unknown); }
/* Akce není podnik: barva proto nesmí sáhnout do škály profilů, kde zelená
   znamená „100% veganské". Drží základní barvu portálu. */
.portal-marker--event { color: var(--pt-primary); }
/* Top podnik: zlatý prstenec kolem špendlíku navíc k barvě profilu —
   ta zůstává nosičem informace „co se tu jí", prstenec jen říká „vybrané". */
.portal-marker--top .portal-marker-pin { stroke: #e3b400; stroke-width: 2.4; }
.leaflet-marker-icon.portal-marker { transition: transform .15s ease; transform-origin: 50% 100%; }
.leaflet-marker-icon.portal-marker:hover, .leaflet-marker-icon.portal-marker:focus { transform: scale(1.12); z-index: 500 !important; }

.portal-map-legend { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem 1rem; margin: 0 0 .9rem; color: var(--pt-ink-soft); font-size: .8rem; }
.portal-map-legend span { display: inline-flex; align-items: center; gap: .4rem; }
.portal-map-legend i { width: .7rem; height: .7rem; border-radius: 50%; }
.portal-map-legend .is-only { background: var(--pt-level-only); }
.portal-map-legend .is-vegetarian { background: var(--pt-level-vegetarian); }
.portal-map-legend .is-friendly { background: var(--pt-level-friendly); }

/* ---- Filtry mapy ------------------------------------------------------ */
.portal-filters { display: flex; flex-direction: column; gap: .8rem; margin-bottom: 1.2rem; }
.portal-filters-bar { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; }

.portal-search { position: relative; flex: 1 1 16rem; min-width: 0; }
.portal-search .portal-icon { position: absolute; top: 50%; left: .95rem; width: 1.05rem; height: 1.05rem; transform: translateY(-50%); color: var(--pt-ink-soft); pointer-events: none; }
.portal-search input { width: 100%; min-height: 46px; padding: .6rem 1rem .6rem 2.6rem; border: 1.5px solid rgba(29,39,33,.14); border-radius: 999px; background: var(--pt-card); color: var(--pt-ink); }
.portal-search input:focus { outline: 0; border-color: var(--pt-primary); box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }

/* U éček je hledání jen jeden z filtrů ve stejném řádku (vedle skupiny
   A/B/C), ne jediný prvek celé šířky jako u míst — proto max-width. Na
   mobilu (řádek se zalomí) by to naopak zbytečně zúžilo pole. */
@media (min-width: 768px) {
	.ecko-search { max-width: 50%; }
}

/* Přepínač profilu: vypadá jako jeden celek, ovládá se jako radio skupina. */
.portal-segmented { display: inline-flex; padding: .22rem; border: 1px solid rgba(29,39,33,.1); border-radius: 999px; background: var(--pt-card); }
.portal-segmented input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.portal-segmented label { padding: .45rem .95rem; border-radius: 999px; color: var(--pt-ink-soft); font-size: .84rem; font-weight: 600; white-space: nowrap; cursor: pointer; transition: background .2s ease, color .2s ease; }
.portal-segmented label:hover { color: var(--pt-primary-dark); }
.portal-segmented input:checked + label { background: var(--pt-primary); color: #fff; }
.portal-segmented input:focus-visible + label { box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }
/* Voleb může být víc, než se vejde na řádek (druhy akcí) — zalomí se
   uvnitř skupiny, aby zůstala jedním celkem. */
.portal-segmented-wrap { display: flex; flex-wrap: wrap; }

.portal-toggle { margin: 0; }
.portal-toggle input { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); }
.portal-toggle span { display: inline-flex; align-items: center; gap: .4rem; min-height: 46px; padding: .5rem 1.1rem; border: 1.5px solid rgba(29,39,33,.14); border-radius: 999px; background: var(--pt-card); color: var(--pt-ink-soft); font-size: .86rem; font-weight: 600; cursor: pointer; transition: border-color .2s ease, background .2s ease, color .2s ease; }
.portal-toggle span:hover { border-color: var(--pt-primary); color: var(--pt-primary-dark); }
.portal-toggle input:checked + span { border-color: transparent; background: var(--pt-primary); color: #fff; }
.portal-toggle input:focus-visible + span { box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }

.portal-toggle.is-disabled span { opacity: .45; cursor: not-allowed; }
.portal-toggle.is-disabled span:hover { border-color: rgba(29,39,33,.14); color: var(--pt-ink-soft); }
/* Top vegan podnik — zlatý rámeček i nezaškrtnutý, ať filtr vypadá stejně
   výjimečně jako odznak, který za ním stojí. */
.portal-toggle-top span { border-color: #e3b400; color: #7a5b00; }
.portal-toggle-top span:hover { border-color: #c99a00; color: #7a5b00; }
.portal-toggle-top input:checked + span { border-color: transparent; background: linear-gradient(135deg, #ffe9a8, #ffd873); color: #7a5b00; }

/* Filtr skupiny éček (A = bezpečné, B = sledujte, C = nedoporučujeme) —
   stejný vzor jako u zlatého přepínače výš, jen barva jde přes proměnnou. */
.ecko-toggle-a { --ecko-color: #2E7D46; --ecko-text: #fff; }
.ecko-toggle-b { --ecko-color: #C99A00; --ecko-text: #fff; }
.ecko-toggle-c { --ecko-color: #C62828; --ecko-text: #fff; }
[class*="ecko-toggle-"] span { border-color: var(--ecko-color); color: var(--ecko-color); font-weight: 800; }
[class*="ecko-toggle-"] span:hover { border-color: var(--ecko-color); color: var(--ecko-color); }
[class*="ecko-toggle-"] input:checked + span { border-color: transparent; background: var(--ecko-color); color: var(--ecko-text); }
.portal-radius select { min-height: 46px; padding: .5rem 1rem; border: 1.5px solid rgba(29,39,33,.14); border-radius: 999px; background: var(--pt-card); color: var(--pt-ink); font-size: .86rem; font-weight: 600; }
.portal-radius select:focus { outline: 0; border-color: var(--pt-primary); box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }
.portal-visitor-marker { fill: var(--pt-accent); fill-opacity: .9; stroke: #fff; stroke-width: 3; }

.portal-filter-row { display: flex; flex-wrap: wrap; gap: .4rem; }
.portal-filter-chip { margin: 0; }
.portal-filter-chip input { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); }
/* Symbol typu podniku ve štítku. Stejná velikost jako u přepínačů nahoře,
   ať řada filtrů drží jednu výšku. */
.portal-filter-chip span .portal-icon { width: 1rem; height: 1rem; margin-right: .35rem; }
.portal-filter-chip span { display: inline-flex; align-items: center; padding: .38rem .85rem; border: 1px solid rgba(29,39,33,.12); border-radius: 999px; background: var(--pt-card); color: var(--pt-ink); font-size: .82rem; font-weight: 600; cursor: pointer; transition: border-color .2s ease, background .2s ease, color .2s ease; }
.portal-filter-chip span:hover { border-color: var(--pt-primary); background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.portal-filter-chip input:checked + span { border-color: transparent; background: var(--pt-primary-dark); color: #fff; }
.portal-filter-chip input:focus-visible + span { box-shadow: 0 0 0 .2rem var(--pt-primary-soft); }

.portal-filters-more summary { display: inline-flex; align-items: center; gap: .45rem; padding: .5rem .95rem; border: 1px solid rgba(29,39,33,.12); border-radius: 999px; color: var(--pt-ink-soft); font-size: .85rem; font-weight: 600; cursor: pointer; list-style: none; }
.portal-filters-more summary::-webkit-details-marker { display: none; }
.portal-filters-more summary:hover { border-color: var(--pt-primary); color: var(--pt-primary-dark); }
.portal-filters-more[open] summary { border-color: var(--pt-primary); background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
/* Osy filtru pod sebou s popiskem po straně. Bez oddělení splývaly země,
   obce a typy v jednu změť štítků, kde nebylo poznat, co k čemu patří. */
.portal-filter-block { display: flex; align-items: flex-start; gap: 1rem; padding: .65rem 0; }
.portal-filter-block + .portal-filter-block { border-top: 1px solid rgba(29,39,33,.08); }
/*
 * 4.5rem stačilo na krátké štítky u mapy (OBEC, ZEMĚ), ale „DOBA
 * PŘÍPRAVY“ u receptů se do toho nevešlo a zalomilo na dva řádky —
 * shodilo to i pilulky vedle sebe. white-space:nowrap + širší základ
 * podle nejdelšího štítku, který se zatím používá.
 */
.portal-filter-block-label { flex: 0 0 8rem; padding-top: .55rem; color: var(--pt-ink-soft); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; }
.portal-filter-block > .portal-filter-row { flex: 1 1 auto; min-width: 0; }
@media (max-width: 575.98px) {
	.portal-filter-block { flex-direction: column; gap: .35rem; }
	.portal-filter-block-label { flex: none; padding-top: 0; white-space: normal; }
}

/* Země přepíná edici, takže je to odkaz — vypadat má ale jako ostatní štítky. */
.portal-filter-chip-link { display: inline-flex; padding: .38rem .85rem; border: 1px solid rgba(29,39,33,.12); border-radius: 999px; background: var(--pt-card); color: var(--pt-ink); font-size: .82rem; font-weight: 600; text-decoration: none; transition: border-color .2s ease, background .2s ease, color .2s ease; }
.portal-filter-chip-link:hover { border-color: var(--pt-primary); background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.portal-filter-chip-link.is-active { border-color: transparent; background: var(--pt-primary-dark); color: #fff; }
.portal-filter-chip-link:focus-visible { box-shadow: 0 0 0 .2rem var(--pt-primary-soft); outline: none; }

/* Zavřený přepínač stojí v řadě za obcemi, otevřený zabere celý řádek a
   sjede pod ně — jinak by rozbalené obce začínaly uprostřed řádku. */
.portal-cities-more[open] { display: flex; flex-direction: column; flex-basis: 100%; }
.portal-cities-more[open] > summary { order: 2; align-self: flex-start; margin-top: .55rem; }
.portal-cities-more[open] > .portal-filter-row { order: 1; }
.portal-cities-more .portal-cities-more-close { display: none; }
.portal-cities-more[open] .portal-cities-more-open { display: none; }
.portal-cities-more[open] .portal-cities-more-close { display: inline; }
.portal-filter-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.35em; height: 1.35em; padding: 0 .3em; border-radius: 999px; background: var(--pt-primary); color: #fff; font-size: .72rem; }
.portal-filter-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1.1rem; margin-top: .8rem; padding: 1.2rem; border: 1px solid rgba(29,39,33,.09); border-radius: var(--pt-radius); background: var(--pt-card); }
.portal-filter-group { min-width: 0; margin: 0; padding: 0; border: 0; }
.portal-filter-group legend { display: flex; align-items: center; gap: .35rem; width: auto; margin-bottom: .5rem; padding: 0; color: var(--pt-ink-soft); font-size: .74rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.portal-filter-group legend .portal-icon { width: 1rem; height: 1rem; color: var(--pt-primary); }
.portal-filters-reset { align-self: flex-start; padding: 0; border: 0; background: none; color: var(--pt-primary-dark); font-size: .82rem; font-weight: 600; text-decoration: underline; cursor: pointer; }

@media (max-width: 575.98px) {
  /* Přepínač se posouvá do strany; zalomení popisků by rozbilo výšku pilulek. */
  .portal-segmented { display: flex; max-width: 100%; overflow-x: auto; scrollbar-width: none; }
  .portal-segmented::-webkit-scrollbar { display: none; }
  .portal-toggle, .portal-toggle span { width: 100%; justify-content: center; }
}

/* ---- Detail místa ---------------------------------------------------- */
/* Nahoře stejná mezera jako dole — obsah nesmí doléhat na horní hranu plochy
   (`.pt-shell`), když je pod ní stejně velký volný pruh. */
.portal-place { padding: 4rem 0; }
.portal-icon { width: 1.15em; height: 1.15em; flex: none; }

.portal-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem; margin-bottom: 1.4rem; color: var(--pt-ink-soft); font-size: .85rem; }
.portal-crumbs a { color: var(--pt-ink-soft); text-decoration: none; }
.portal-crumbs a:hover { color: var(--pt-primary-dark); }
.portal-crumbs [aria-current] { color: var(--pt-ink); font-weight: 600; }

/* Fotomozaika: první snímek dominuje, ostatní se skládají vedle něj. */
.portal-gallery { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 1fr; gap: .5rem; margin-bottom: 2.2rem; border-radius: var(--pt-radius); overflow: hidden; aspect-ratio: 16 / 7; }
.portal-gallery-item { position: relative; display: block; overflow: hidden; background: var(--pt-primary-soft); }
.portal-gallery-item img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.portal-gallery-item:hover img { transform: scale(1.045); }
.portal-gallery[data-count="1"] { grid-template-columns: 1fr; }
.portal-gallery[data-count="2"] { grid-template-columns: repeat(2, 1fr); }
.portal-gallery[data-count="3"] { grid-template-columns: repeat(3, 1fr); }
/*
 * U 4 i 5 fotek zůstává základních 4 sloupců (viz .portal-gallery výš) —
 * náhledový obrázek zabere 2×2 buňky, na zbytek zbydou 4 volné buňky.
 * U čtyř fotek se tak jedna buňka nevyužije, ale nic nepřeteče.
 *
 * Dřív měl řádek pro 4 fotky vlastní 3sloupcovou mřížku: náhledový
 * obrázek v ní zabral 2×2 ze 6 buněk a na tři zbývající fotky zbyly
 * jen dvě volné buňky. Čtvrtá fotka se tak neměla kam vejít a prohlížeč
 * jí sám přidal řádek navíc mimo mřížku svázanou pevným poměrem stran —
 * v různých prohlížečích (a někdy i při přenačtení) se to chovalo jinak,
 * což se navenek jevilo jako „rozpadlá" galerie.
 */
.portal-gallery[data-count="4"] > :first-child,
.portal-gallery[data-count="5"] > :first-child { grid-column: span 2; grid-row: span 2; }
.portal-gallery[data-count="4"],
.portal-gallery[data-count="5"] { grid-template-rows: repeat(2, 1fr); }
.portal-gallery-hidden { display: none; }
.portal-gallery-more { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: .4rem; background: rgba(19,26,21,.62); color: #fff; font-weight: 700; font-size: .9rem; }

.portal-place-grid { display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(0, 1fr); gap: 3rem; align-items: start; }
.portal-place-head h1 { margin: .3rem 0 0; font-size: clamp(1.9rem, 4vw, 2.7rem); }
.portal-place-eyebrow { margin: 0; color: var(--pt-primary-dark); font-size: .8rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.portal-place-chain { margin: .45rem 0 0; color: var(--pt-ink-soft); font-size: .93rem; }
.portal-place-badges { display: flex; flex-wrap: wrap; gap: .45rem; margin-top: 1rem; }
.portal-badge { display: inline-flex; align-items: center; gap: .35rem; padding: .38rem .8rem; border-radius: 999px; font-size: .82rem; font-weight: 600; color: var(--pt-ink-soft); background: rgba(29,39,33,.06); }
.portal-badge-level { color: #fff; background: var(--pt-primary); font-weight: 700; }
/* Top vegan podnik — stejná zlatá jako hvězda u Google hodnocení,
   ať je odznak na první pohled jasně jiná liga než ostatní štítky. */
.portal-badge-top { color: #7a5b00; background: linear-gradient(135deg, #ffe9a8, #ffd873); font-weight: 700; }
.portal-badge-top .portal-icon { color: #a8790a; }
.portal-badge .portal-icon { width: 1em; height: 1em; }
.portal-dot { width: .5rem; height: .5rem; border-radius: 50%; background: currentColor; }
.portal-tone-ok { color: var(--pt-primary-dark); background: var(--pt-primary-soft); }
.portal-tone-soft { color: var(--pt-ink); background: rgba(29,39,33,.07); }
.portal-tone-warn { color: #8a5200; background: #fdf0d8; }
.portal-tone-stop { color: #9d2d20; background: #fbe6e2; }
.portal-tone-muted { color: var(--pt-ink-soft); background: rgba(29,39,33,.06); }

.portal-discount { display: flex; align-items: flex-start; gap: .55rem; margin: 1.3rem 0 0; padding: .75rem 1rem; border-radius: var(--pt-radius-sm); background: var(--pt-accent-soft); color: #8a3a12; font-size: .92rem; }
.portal-discount .portal-icon { flex: none; margin-top: .12rem; color: var(--pt-accent); }

/* ---------- Éčka — škála škodlivosti A (nejbezpečnější) až E (nejrizikovější) ---------- */
/* Barvy jdou postupně od zelené po červenou — pořadí, ne jen nálepka,
   musí být vidět na první pohled i bez čtení písmene. */
.ecko-znamka { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 2.4rem; height: 2.4rem; border-radius: 50%; font-family: var(--pt-font-head); font-weight: 800; font-size: 1.15rem; }
.ecko-znamka-sm { width: 1.8rem; height: 1.8rem; font-size: .92rem; }
.ecko-znamka-lg { width: 3.6rem; height: 3.6rem; font-size: 1.6rem; }
.ecko-znamka-a { background: #2E7D46; color: #fff; }
.ecko-znamka-b { background: #C99A00; color: #fff; }
.ecko-znamka-c { background: #C62828; color: #fff; }
.ecko-znamka-none { background: rgba(29,39,33,.08); color: var(--pt-ink-soft); }

.ecko-popis p { margin: 0 0 .8rem; }
.ecko-popis p:last-child { margin-bottom: 0; }

/* WYSIWYG polia (hero_lead, sekce_*_popisek) vrací vlastní <p> — v místech,
   kde už wrapper nese mt/mb utility třídy, se vnitřní odstavec nesmí
   přidávat další mezeru navíc. */
.lead p,
.pt-band-mapa-text .text-secondary p { margin: 0 0 .5rem; }
.lead p:last-child,
.pt-band-mapa-text .text-secondary p:last-child { margin-bottom: 0; }
.ecko-legenda { display: flex; flex-wrap: wrap; align-items: center; gap: .9rem; font-size: .82rem; color: var(--pt-ink-soft); }
.ecko-legenda-item { display: flex; align-items: center; gap: .4rem; }

/* Skupina příznaků kombinovaných přes OR (viz portal_ecko_priznaky_skupiny) —
   rámeček je vizuálně odlišuje od ostatních příznaků, které se sčítají přes AND. */
.ecko-priznak-skupina { display: flex; align-items: center; gap: .5rem; padding: .35rem .6rem; border: 1.5px dashed rgba(29,39,33,.18); border-radius: 999px; }
.ecko-priznak-nebo { font-size: .74rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--pt-ink-soft); }
.ecko-priznaky-napoveda { margin: .5rem 0 0; font-size: .78rem; color: var(--pt-ink-soft); }

/* height: 100% — sloupec mřížky (Bootstrap .row má align-items: stretch)
   se natáhne na výšku nejvyššího řádku; karta samotná to musí dotáhnout
   dál, jinak by měla jen výšku vlastního obsahu a řádek by byl nerovný. */
.ecko-card { display: flex; align-items: center; gap: 1rem; height: 100%; background: var(--pt-card); border-radius: var(--pt-radius); box-shadow: var(--pt-shadow); padding: 1rem 1.1rem; text-decoration: none; color: var(--pt-ink); transition: transform .2s, box-shadow .2s; }
.ecko-card:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-ink); }
.ecko-card-body { display: flex; flex-direction: column; gap: .3rem; min-width: 0; }
.ecko-card-kod { font-family: var(--pt-font-head); font-weight: 800; font-size: .82rem; color: var(--pt-primary-dark); letter-spacing: .04em; }
.ecko-card-nazev { font-weight: 700; font-size: 1rem; line-height: 1.3; }
.ecko-card:hover .ecko-card-nazev { color: var(--pt-primary-dark); }
.ecko-card-priznaky { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .15rem; }
.ecko-card-priznaky .portal-badge { font-size: .72rem; padding: .22rem .55rem; }

.portal-place-block { margin-top: 2.6rem; }
.portal-place-block > h2 { margin-bottom: 1rem; font-size: 1.3rem; }
/* Vlastnosti jako dlaždice — každá skupina má vlastní kartu s ikonou. */
.portal-feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: .8rem; }
.portal-feature { display: flex; flex-direction: column; gap: .75rem; padding: 1.15rem; background: var(--pt-card); border: 1px solid rgba(29,39,33,.09); border-radius: var(--pt-radius-sm); transition: border-color .2s ease, box-shadow .2s ease; }
.portal-feature:hover { border-color: rgba(46,125,70,.35); box-shadow: var(--pt-shadow); }
.portal-feature-head { display: flex; align-items: center; gap: .45rem; }
.portal-feature-icon { display: inline-flex; align-items: center; justify-content: center; flex: none; color: var(--pt-primary); }
.portal-feature-icon .portal-icon { width: 1.05rem; height: 1.05rem; }
.portal-feature h3 { margin: 0; color: var(--pt-ink-soft); font-family: var(--pt-font-body); font-size: .74rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.portal-chips { display: flex; flex-wrap: wrap; gap: .4rem; margin: 0; padding: 0; list-style: none; }
.portal-chip { display: inline-flex; align-items: center; padding: .3rem .75rem; border-radius: 999px; background: var(--pt-primary-soft); border: 1px solid transparent; color: var(--pt-primary-dark); font-size: .78rem; font-weight: 600; text-decoration: none; transition: background .2s ease, border-color .2s ease; }
a.portal-chip:hover { border-color: var(--pt-primary); background: color-mix(in srgb, var(--pt-primary-soft) 82%, var(--pt-primary)); }

.portal-nearby { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: .7rem; }
.portal-nearby-card { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.1rem; border-radius: var(--pt-radius); background: var(--pt-card); box-shadow: var(--pt-shadow); text-decoration: none; transition: transform .2s, box-shadow .2s; }
.portal-nearby-card:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); }
.portal-nearby-thumb { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; flex: none; border-radius: 50%; overflow: hidden; background: var(--pt-primary-soft); font-size: 1.6rem; }
.portal-nearby-thumb img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
.portal-nearby-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.portal-nearby-body strong { font-family: var(--pt-font-head); color: var(--pt-ink); font-size: 1.05rem; font-weight: 700; }
.portal-nearby-card:hover .portal-nearby-body strong { color: var(--pt-primary-dark); }
.portal-nearby-body small { color: var(--pt-ink-soft); font-size: .85rem; }

.portal-place-aside { position: sticky; top: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }
.portal-card { padding: 1.3rem; background: var(--pt-card); border: 1px solid rgba(29,39,33,.08); border-radius: var(--pt-radius); }
.portal-card > h2 { margin-bottom: .9rem; font-size: 1.05rem; }
.portal-card-map { padding: .45rem; overflow: hidden; }
.portal-card-map .portal-map-detail { border-radius: calc(var(--pt-radius) - .45rem); }

.portal-actions { display: grid; gap: .5rem; }
.portal-action { display: inline-flex; align-items: center; justify-content: center; gap: .45rem; padding: .72rem 1.1rem; border-radius: 999px; font-weight: 700; font-size: .92rem; text-decoration: none; transition: background .2s ease, color .2s ease; }
.portal-action-primary { color: #fff; background: var(--pt-primary); }
.portal-action-primary:hover { color: #fff; background: var(--pt-primary-dark); }
.portal-action-outline { color: var(--pt-primary-dark); border: 1.5px solid rgba(29,39,33,.15); }
.portal-action-outline:hover { color: var(--pt-primary-dark); border-color: var(--pt-primary); background: var(--pt-primary-soft); }
/* Víc jídelních lístků: <details> zvládne rozbalení bez kusu JS. */
.portal-menu-picker { position: relative; }
.portal-menu-picker summary { display: flex; align-items: center; justify-content: center; gap: .45rem; padding: .72rem 1.1rem; border: 1.5px solid rgba(29,39,33,.15); border-radius: 999px; color: var(--pt-primary-dark); font-weight: 700; font-size: .92rem; cursor: pointer; list-style: none; transition: border-color .2s ease, background .2s ease; }
.portal-menu-picker summary::-webkit-details-marker { display: none; }
.portal-menu-picker summary::after { content: "⌄"; margin-top: -.35em; font-size: 1.05em; transition: transform .2s ease; }
.portal-menu-picker[open] summary { border-color: var(--pt-primary); background: var(--pt-primary-soft); }
.portal-menu-picker[open] summary::after { transform: rotate(180deg); margin: .2em 0 0; }
.portal-menu-picker summary:hover { border-color: var(--pt-primary); }
.portal-menu-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.4em; height: 1.4em; padding: 0 .35em; border-radius: 999px; background: var(--pt-primary-soft); color: var(--pt-primary-dark); font-size: .74rem; }
.portal-menu-picker[open] .portal-menu-count { background: #fff; }
.portal-menu-picker ul { display: grid; gap: .15rem; margin: .4rem 0 0; padding: .35rem; list-style: none; border: 1px solid rgba(29,39,33,.1); border-radius: var(--pt-radius-sm); background: var(--pt-card); }
.portal-menu-picker ul a { display: block; padding: .55rem .75rem; border-radius: .5rem; color: var(--pt-ink); font-size: .9rem; font-weight: 600; text-decoration: none; }
.portal-menu-picker ul a:hover { background: var(--pt-primary-soft); color: var(--pt-primary-dark); }

.portal-channels { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: .3rem; margin-top: .9rem; padding-top: .9rem; border-top: 1px solid rgba(29,39,33,.08); }
.portal-channels a { display: flex; flex-direction: column; align-items: center; gap: .3rem; padding: .55rem .2rem; border-radius: var(--pt-radius-sm); color: var(--pt-ink-soft); font-size: .7rem; font-weight: 600; text-decoration: none; transition: background .2s ease, color .2s ease; }
.portal-channels a:hover { color: var(--pt-primary-dark); background: var(--pt-primary-soft); }
.portal-channels .portal-icon { width: 1.35rem; height: 1.35rem; }

.portal-contact { display: grid; gap: .85rem; margin: 0; padding: 0; list-style: none; }
.portal-contact li { display: flex; align-items: flex-start; gap: .65rem; font-size: .92rem; line-height: 1.45; }
.portal-contact .portal-icon { width: 1.15rem; height: 1.15rem; margin-top: .12rem; color: var(--pt-primary); }
.portal-contact a { color: var(--pt-ink); text-decoration: none; }
.portal-contact a:hover { color: var(--pt-primary-dark); text-decoration: underline; }
.portal-inline-link { display: block; margin-top: .2rem; color: var(--pt-primary-dark) !important; font-size: .82rem; font-weight: 600; }

.portal-open-state { display: flex; flex-wrap: wrap; align-items: baseline; gap: .4rem; margin: 0 0 .9rem; padding: .55rem .85rem; border-radius: var(--pt-radius-sm); font-size: .88rem; }
.portal-open-state strong { font-weight: 700; }
.portal-open-state span { opacity: .85; }
.portal-hours { width: 100%; border-collapse: collapse; }
.portal-hours th, .portal-hours td { padding: .42rem 0; font-size: .88rem; text-align: left; font-weight: 500; }
.portal-hours th { color: var(--pt-ink-soft); font-weight: 500; }
.portal-hours td { text-align: right; }
.portal-hours td.is-closed { color: var(--pt-ink-soft); }
.portal-hours tr.is-today th, .portal-hours tr.is-today td { color: var(--pt-primary-dark); font-weight: 700; }

.portal-place-report { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .5rem; margin: 0; padding: 0 .3rem; color: var(--pt-ink-soft); font-size: .8rem; }
/* V hlavním sloupci navazuje na obsah, ne na sloupec s kartami — potřebuje
   proto odsazení, jinak doléhá na poslední kartu nad sebou. */
.portal-place-main > .portal-place-report { margin-top: 2rem; }
.portal-place-report a { color: var(--pt-primary-dark); font-weight: 600; text-decoration: none; }

/* Lightbox galerie */
/* Jen otevřený dialog se vykresluje — jinak by autorský display přebil UA display:none. */
.portal-lightbox[open] { display: flex; }
.portal-lightbox { position: fixed; inset: 0; z-index: 1080; align-items: center; justify-content: center; padding: 1.5rem; background: rgba(14,19,16,.93); border: 0; }
.portal-lightbox::backdrop { background: rgba(14,19,16,.93); }
.portal-lightbox img { max-width: 100%; max-height: 84vh; border-radius: var(--pt-radius-sm); object-fit: contain; }
.portal-lightbox button { position: absolute; display: flex; align-items: center; justify-content: center; width: 2.9rem; height: 2.9rem; border: 0; border-radius: 50%; background: rgba(255,255,255,.14); color: #fff; font-size: 1.3rem; cursor: pointer; }
.portal-lightbox button:hover { background: rgba(255,255,255,.26); }
.portal-lightbox .portal-lightbox-close { top: 1rem; right: 1rem; }
.portal-lightbox .portal-lightbox-prev { left: 1rem; }
.portal-lightbox .portal-lightbox-next { right: 1rem; }
.portal-lightbox-count { position: absolute; bottom: 1.1rem; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,.75); font-size: .82rem; }

/* Průvodce na pokračování: rejstřík kapitol vlevo, text vpravo. Obrácené
   pořadí sloupců než u místa — rejstřík je navigace, čte se před textem. */
.portal-article-grid { display: grid; grid-template-columns: minmax(0, 16rem) minmax(0, 1fr); gap: 3rem; align-items: start; }
.portal-article-grid .entry-content { max-width: 42rem; }

/* Titulní fotka seriálu je banner přes celou šířku nad rozdělením na
   sloupce — kdyby byla uvnitř sloupce s textem, rejstřík kapitol vedle
   ní by vypadal osaměle a moc úzce. */
.portal-hero-image-article { aspect-ratio: 21 / 9; }
.portal-hero-image-article img { width: 100%; height: 100%; object-fit: cover; object-position: top; }

/* Šablona „Fotka přes celou šířku“ — titulek, drobečky a datum leží
   přímo na fotce. Tmavý přechod dole (kde je text) drží čitelnost na
   libovolném motivu, nahoře skoro mizí, ať fotka zůstane vidět. */
.portal-article-hero { position: relative; border-radius: var(--pt-radius); overflow: hidden; box-shadow: var(--pt-shadow); }
/* Přes drobečky, nadpis (i dvouřádkový) a datum musí zbýt místo — samotný
   poměr stran 21:9 by je u delšího titulku uřízl. */
.portal-article-hero .portal-hero-image-article { margin: 0; border-radius: 0; box-shadow: none; min-height: 24rem; }
.portal-article-hero-scrim { position: absolute; inset: 0; background: linear-gradient(0deg, rgba(10,15,12,.82) 0%, rgba(10,15,12,.45) 45%, rgba(10,15,12,0) 75%); pointer-events: none; }
/* Vlastní proměnná, ať jde stejnou hodnotou zarovnat i rejstřík kapitol
   pod fotkou — jinak by odsazení muselo být natvrdo na dvou místech
   a při změně by se snadno rozjelo. */
.portal-article { --article-hero-pad: clamp(1.2rem, 4vw, 2.6rem); }
.portal-article-hero-text { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 1.6rem var(--article-hero-pad) 2.4rem; }
/* Druhá, sytější vrstva jen pod samotným textem — plošný přechod na
   celé fotce (`.portal-article-hero-scrim`) dá atmosféru nahoře, tahle
   vrstva drží čitelnost tam, kde text opravdu sedí. */
.portal-article-hero-text { background: linear-gradient(0deg, rgba(10,15,12,.75) 0%, rgba(10,15,12,.5) 55%, rgba(10,15,12,0) 100%); }
.portal-article-hero-text .portal-crumbs-on-image,
.portal-article-hero-text .portal-crumbs-on-image a { color: rgba(255,255,255,.78); }
.portal-article-hero-text .portal-crumbs-on-image a:hover,
.portal-article-hero-text .portal-crumbs-on-image [aria-current] { color: #fff; }
.portal-article-hero-text .portal-place-eyebrow { color: #fff; opacity: .85; }
.portal-article-hero-text h1 { color: #fff; }
/* Štítky mají normálně tlumené, skoro průhledné pozadí — na bílé stránce
   to stačí, na fotce (obzvlášť světlé) v tom ale zmizí i s textem. Tady
   proto vlastní neprůhledá varianta, čitelná na libovolném motivu. */
.portal-article-hero-text .portal-badge { background: rgba(255,255,255,.92); color: var(--pt-ink); }
/* Rejstřík kapitol se přisune ke spodnímu okraji fotky a o kousek do ní
   zasáhne — vlastní neprůhledné pozadí drží text čitelný i přes motiv. */
/* Dvě třídy schválně — vyšší specificita, ať to platí bez ohledu na
   pořadí v souboru vůči obecnému `.portal-article-grid { margin-top }`. */
.portal-article-grid.portal-article-grid-overlap { margin-top: -1.1rem; position: relative; z-index: 1; }
/* Zarovnáno s datem nad ním — stejná proměnná jako odsazení fotky,
   ať drží pohromadě i při změně šířky. */
.portal-article-grid-overlap .portal-chapters { margin-left: var(--article-hero-pad); }

@media (max-width: 767.98px) {
  /* Na úzkém displeji by přesah čitelnost spíš zhoršil než pomohl. */
  .portal-article-grid.portal-article-grid-overlap { margin-top: 0; }
  .portal-hero-image-article { aspect-ratio: 4 / 5; }
}
/* Odsazení nad mřížkou samo o sobě — funguje, ať fotka nad ní je nebo není. */
.portal-article-grid { margin-top: 2.2rem; }

.portal-chapters { position: sticky; top: 1.5rem; padding: 1.3rem; background: var(--pt-card); border: 1px solid rgba(29,39,33,.08); border-radius: var(--pt-radius); }
.portal-chapters-title { display: block; margin-bottom: .8rem; font-family: var(--pt-font-head); font-size: .8rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--pt-primary-dark); }
.portal-chapters-list { margin: 0; padding: 0; list-style: none; counter-reset: none; display: flex; flex-direction: column; gap: .15rem; }
.portal-chapter > a,
.portal-chapter > span { display: flex; gap: .6rem; padding: .55rem .6rem; border-radius: var(--pt-radius-sm); text-decoration: none; color: var(--pt-ink-soft); font-size: .92rem; line-height: 1.35; transition: background .2s ease, color .2s ease; }
.portal-chapter > a:hover { background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
/* Číslo drží svůj sloupec, aby delší názvy nezačínaly každý jinde. */
.portal-chapter-num { flex: 0 0 1.3rem; font-family: var(--pt-font-head); font-weight: 700; color: var(--pt-primary); }
.portal-chapter.is-current > span { background: var(--pt-primary-soft); color: var(--pt-ink); font-weight: 700; }

.portal-chapter-nav { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin-top: 2.4rem; }
.portal-chapter-nav a { display: flex; flex-direction: column; gap: .25rem; padding: 1rem 1.15rem; background: var(--pt-card); border: 1px solid rgba(29,39,33,.08); border-radius: var(--pt-radius); text-decoration: none; color: var(--pt-ink); transition: transform .2s ease, box-shadow .2s ease; }
.portal-chapter-nav a:hover { transform: translateY(-2px); box-shadow: var(--pt-shadow); }
/* Když předchozí kapitola chybí, „další“ nemá viset vlevo. */
.portal-chapter-nav .portal-chapter-next:only-child { grid-column: 2; }
.portal-chapter-nav .portal-chapter-next { text-align: right; }
.portal-chapter-nav-label { font-size: .8rem; font-weight: 700; color: var(--pt-primary-dark); }
.portal-chapter-nav-title { font-family: var(--pt-font-head); font-weight: 700; }

@media (max-width: 991.98px) {
  .portal-place-grid { grid-template-columns: 1fr; gap: 2rem; }
  .portal-place-aside { position: static; }
  .portal-gallery { aspect-ratio: 4 / 3; }
  /* Na úzkém displeji je rejstřík rozcestník nad textem, ne sloupec. */
  .portal-article-grid { grid-template-columns: 1fr; gap: 1.6rem; }
  .portal-chapters { position: static; }
}
@media (max-width: 575.98px) {
  .portal-chapter-nav { grid-template-columns: 1fr; }
  .portal-chapter-nav .portal-chapter-next:only-child { grid-column: 1; }
}
@media (max-width: 575.98px) {
  /* Mřížka se řídí počtem fotek: pevné rozvržení by u jedné nechalo prázdné pole. */
  .portal-gallery { grid-template-columns: repeat(2, 1fr) !important; grid-template-rows: none !important; grid-auto-rows: auto; aspect-ratio: auto; }
  .portal-gallery > .portal-gallery-item { grid-column: auto !important; grid-row: auto !important; aspect-ratio: 1 / 1; }
  .portal-gallery > .portal-gallery-item:first-child { grid-column: span 2 !important; aspect-ratio: 16 / 10; }
  .portal-channels { grid-auto-flow: row; grid-template-columns: repeat(4, 1fr); }
}

@media (max-width: 991.98px) {
  .portal-map-filters { grid-template-columns: 1fr 1fr; }
  .portal-map-filter-search { grid-column: 1 / -1; }
  .portal-map-large { height: 55vh; min-height: 420px; }
  .portal-place-results { max-height: none; }
}
@media (max-width: 575px) {
  .portal-map-filters { grid-template-columns: 1fr; }
  .portal-map-filter-search { grid-column: auto; }
  .portal-map-filters .btn-pt-primary { width: 100%; }
  .portal-map-large { min-height: 380px; }
}

/* ---------- Ingredience receptu + přepočet porcí ---------- */
.servings-stepper { display: flex; align-items: center; gap: .4rem; }
.servings-btn { width: 1.9rem; height: 1.9rem; border-radius: 50%; border: 1.5px solid rgba(29,39,33,.15); background: #fff; font-size: 1.1rem; line-height: 1; cursor: pointer; color: var(--pt-ink); display: flex; align-items: center; justify-content: center; padding: 0; }
.servings-btn:hover { border-color: var(--pt-primary); color: var(--pt-primary); }
.servings-count { font-family: var(--pt-font-head); font-weight: 800; min-width: 1.3rem; text-align: center; font-size: 1.05rem; }
.servings-label { font-size: .85rem; color: var(--pt-ink-soft); }
.ingr-row { display: flex; gap: .5rem; align-items: baseline; }
.ingr-qty { font-weight: 600; white-space: nowrap; color: var(--pt-primary-dark); }
.ingr-note { font-style: italic; color: var(--pt-ink-soft); font-size: .9rem; }
.ingr-name { color: var(--pt-ink); }
.ingr-products { display: flex; flex-basis: 100%; flex-wrap: wrap; gap: .35rem; margin-top: .25rem; padding-left: 1rem; }
.ingr-products a { font-size: .75rem; color: var(--pt-primary-dark); }

/* ---------- Produkty a nabídky ---------- */
.product-card .recipe-img, .product-card .card-img-top { object-fit: contain; padding: .7rem; background: #fff; }
/* Detail produktu: fotka omezená na max. 65 % sloupce a vystředěná,
   ne přes celou šířku (img-fluid) — u obalů s vlastním (často
   světlým) pozadím od výrobce to jinak vždycky přebilo text vedle. */
.product-photo { display: block; max-width: 65%; height: auto; margin: 0 auto; }
.product-status { position: absolute; top: .8rem; left: .8rem; padding: .3rem .65rem; border-radius: 999px; background: rgba(255,255,255,.94); font-size: .7rem; font-weight: 700; box-shadow: var(--pt-shadow); }
.product-status-verified { color: var(--pt-primary-dark); }
.product-status-not_vegan { color: #9d2d20; }
.product-facts { padding: 1.5rem; border-radius: var(--pt-radius); background: var(--pt-card); box-shadow: var(--pt-shadow); }
.product-facts h2 { font-size: 1rem; margin-top: 1rem; }
.product-facts h2:first-child { margin-top: 0; }
/* Odkaz na značku uvnitř dl — bez tohohle padne na výchozí prohlížečovou
   modrou, ne na zelenou webu (viz zapamatované pravidlo: odkazy nikdy
   výchozí modrá). */
.product-facts dd a { color: var(--pt-primary-dark); text-decoration: underline; font-weight: 600; }
.product-offers { padding: 1.4rem; border-radius: var(--pt-radius); background: var(--pt-card); box-shadow: var(--pt-shadow); }
.product-offers h2 { font-size: 1.25rem; margin-bottom: 1rem; }
.product-offer { display: grid; gap: .8rem; padding: 1rem 0; border-top: 1px solid rgba(29,39,33,.08); }
.product-offer:first-of-type { border-top: 0; padding-top: 0; }
.product-offer > div { display: flex; justify-content: space-between; gap: 1rem; }
.product-offer small { color: var(--pt-ink-soft); }

/* Slovník: box "Kde koupit" seskupený po produktu (víc obchodů pod
   jedním názvem), ne plochý seznam nabídek jako .product-offer výš —
   tam je vždycky jen jeden produkt (stránka samotného produktu/knihy),
   tady jich může být víc. */
.product-offer-group { display: grid; gap: .6rem; padding: 1rem 0; border-top: 1px solid rgba(29,39,33,.08); }
.product-offer-group:first-of-type { border-top: 0; padding-top: 0; }
.product-offer-group h3 { font-size: .95rem; margin: 0; }
.product-offer-group h3 a { color: inherit; }
.product-offer-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .6rem; }
.product-offer-row span { font-size: .88rem; color: var(--pt-ink-soft); }
.product-offer-group small { display: block; color: var(--pt-ink-soft); }

/* Menší tlačítko Koupit, s ikonou tašky — vedle textu obchodu se
   nemá roztahovat na celou šířku jako hlavní akce stránky. */
/* justify-self: start — .product-offer je grid, ne flex, takže by
   se tlačítko jako přímé dítě jinak roztáhlo na celou šířku (grid
   výchozí justify-items: stretch). */
.btn-pt-sm { display: inline-flex; align-items: center; justify-self: start; gap: .4rem; flex: 0 0 auto; padding: .4rem .9rem; font-size: .85rem; }
.btn-pt-sm .portal-icon { width: 1rem; height: 1rem; }

/* ---------- Slovník pojmů ---------- */
/* Odkaz vložený automaticky filtrem the_content (viz glossary.php) —
   tečkované podtržení, ne plná čára, ať se opticky liší od běžných odkazů
   v textu a je jasné, že vede na definici, ne na jinou stránku obsahu. */
/* .entry-content a (main.css:1124) je specifičtější (třída+element) než
   samotné .portal-glossary-link (jen třída) a přebíjelo by mu barvu i
   tučnost — proto tu dvojitý selektor, ať uvnitř entry-content vyhraje
   tohle pravidlo, ne to obecné pro odkazy v textu. */
.entry-content a.portal-glossary-link,
.portal-glossary-link { text-decoration: underline dotted; text-decoration-color: rgba(46,125,70,.35); text-underline-offset: .18em; transition: text-decoration-color .15s ease; color: var(--pt-accent); font-weight: 600; font-size: 85%; letter-spacing: .05em; }
.entry-content a.portal-glossary-link:hover,
.portal-glossary-link:hover { text-decoration-color: currentColor; color: var(--pt-primary-dark); }

.portal-glossary-abbr { font-size: .7rem; font-weight: 700; color: var(--pt-primary-dark); background: var(--pt-primary-soft); border-radius: 999px; padding: .15rem .55rem; margin-left: .5rem; vertical-align: middle; }

/* „Kde ho najdete na webu“ — odkazy na certifikát a recepty, co pojem
   používají. Jako chipy, ne jako seznam, ať víc odkazů vedle sebe
   nepůsobí jako dlouhá tabulka. */
.portal-glossary-found { display: flex; flex-wrap: wrap; gap: .6rem; margin-top: .8rem; }
.portal-glossary-found-link { display: inline-flex; align-items: center; gap: .45rem; padding: .5rem .9rem; border-radius: 999px; background: var(--pt-card); box-shadow: var(--pt-shadow); text-decoration: none; color: var(--pt-ink); font-weight: 600; font-size: .92rem; transition: box-shadow .15s, color .15s; }
.portal-glossary-found-link svg { width: 18px; height: 18px; flex: 0 0 auto; color: var(--pt-primary); }
.portal-glossary-found-link:hover { box-shadow: var(--pt-shadow-lg); color: var(--pt-primary-dark); }

.portal-glossary-list { border-top: 1px solid rgba(29,39,33,.08); }
.portal-glossary-letter { font-size: 1.6rem; font-weight: 800; letter-spacing: .02em; color: var(--pt-ink); padding: 1.3rem 0 .5rem; }
/* Miniatura (je-li) vlevo přes celou výšku řádku; termín a popis pod
   sebou vpravo, oba začínají na stejné hraně — popis pod nadpisem,
   ne pod obrázkem. */
.portal-glossary-row { display: flex; align-items: flex-start; gap: .7rem; padding: .85rem 0; border-top: 1px solid rgba(29,39,33,.08); text-decoration: none; color: inherit; }
.portal-glossary-list .portal-glossary-letter + .portal-glossary-row { border-top: 0; }
.portal-glossary-row:hover .portal-glossary-term { color: var(--pt-primary-dark); }
.portal-glossary-body { display: flex; flex-direction: column; gap: .3rem; min-width: 0; }
.portal-glossary-term { font-weight: 600; font-size: 1.05rem; }
.portal-glossary-excerpt { color: var(--pt-ink-soft); font-size: .88rem; }

/* Contain, ne cover, ze stejného důvodu jako všude jinde (main.css u
   produktů/knih). */
.portal-glossary-thumb { flex: 0 0 auto; width: 2.75rem; height: 2.75rem; border-radius: var(--pt-radius-sm, .5rem); overflow: hidden; background: var(--pt-primary-soft); display: flex; align-items: center; justify-content: center; }
.portal-glossary-thumb img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; display: block; }

/* ---------- Akce ---------- */
/* Datum je u akce první otázka, proto stojí ve vlastním bloku vlevo a dá se
   přeletět očima ve sloupci karet pod sebou. */
.portal-events-lead { max-width: 44rem; margin: -.5rem 0 .8rem; color: var(--pt-ink-soft); }
.portal-events-lead p { margin: 0 0 .8rem; }
.portal-events-lead p:last-child { margin-bottom: 0; }
/* Součást odstavce, ne tlačítko — jen tučně a zeleně zvýrazněné, ať
   je vidět, ale nepůsobí jako oddělená akce od zbytku textu. */
.portal-events-cta { display: inline-block; margin-top: .3rem; color: var(--pt-primary-dark); font-weight: 700; text-decoration: none; }
.portal-events-cta:hover { text-decoration: underline; }
/* Doplňková volba, ne hlavní akce stránky — klasický podtržený odkaz,
   ne tlačítko jako .portal-events-cta. */
.portal-events-past-link { margin: .5rem 0 1.5rem; text-align: right; }
.portal-events-past-link a { color: var(--pt-primary-dark); text-decoration: underline; font-weight: 600; font-size: .9rem; }
/* Druh akce se filtruje na serveru, takže štítek je odkaz, ne zaškrtávátko —
   vzhledem ale zůstává tímtéž prvkem jako filtry mapy. */
.portal-filter-link { text-decoration: none; }
.portal-filter-link.is-active span { border-color: transparent; background: var(--pt-primary-dark); color: #fff; }
.portal-events-nomap { display: flex; align-items: center; justify-content: center; height: 100%; min-height: 12rem; padding: 1.5rem; border: 1px dashed rgba(29,39,33,.18); border-radius: var(--pt-radius); color: var(--pt-ink-soft); text-align: center; }
/* Karta akce stojí na stejném podkladu jako karta místa ve výsledcích mapy
   (.portal-place-card) — liší se jen blokem s datem vlevo. */
.portal-event-list { display: grid; gap: .75rem; }
/* Datum v kolečku na místě portrétu — zbytek karty je tentýž prvek jako
   karta osobnosti v Inspiraci, včetně nadzvednutí po najetí. Zvýraznění
   `is-active` zapíná najetí na odpovídající značku na mapě. */
.portal-event-card { transition: transform .2s, box-shadow .2s, background .2s; }
.portal-event-card.is-active { background: var(--pt-primary-soft); transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); }
.portal-event-link { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.1rem; color: inherit; text-decoration: none; }
.portal-event-date { display: flex; flex: none; flex-direction: column; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.portal-event-day { font-family: var(--pt-font-head); font-size: 1.5rem; font-weight: 800; line-height: 1; }
.portal-event-month { font-size: .66rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.portal-event-body { display: flex; flex-direction: column; gap: .2rem; min-width: 0; }
.portal-event-eyebrow { color: var(--pt-primary-dark); font-size: .7rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; }
.portal-event-title { font-family: var(--pt-font-head); font-size: 1.05rem; font-weight: 700; line-height: 1.3; }
.portal-event-card:hover .portal-event-title { color: var(--pt-primary-dark); }
.portal-event-when, .portal-event-where { display: flex; align-items: center; gap: .4rem; color: var(--pt-ink-soft); font-size: .85rem; }
.portal-event-when .portal-icon, .portal-event-where .portal-icon { flex: none; width: 1em; height: 1em; }
.portal-event-badges:not(:empty) { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .3rem; }
.portal-map-note { margin: .6rem 0 0; color: var(--pt-ink-soft); font-size: .8rem; }
/* Proběhlá akce zůstává čitelná, ale nemá poutat pozornost. */
.portal-event-card.is-past { opacity: .72; }
.portal-event-card.is-past .portal-event-date { background: rgba(29,39,33,.06); color: var(--pt-ink-soft); }
.portal-event-past { background: rgba(29,39,33,.06); color: var(--pt-ink-soft); }
.portal-event-past .portal-icon { color: var(--pt-ink-soft); }
.portal-event-term { margin: 0 0 .9rem; }
.portal-event-term strong { display: block; font-size: 1.15rem; }
.portal-event-term span { color: var(--pt-ink-soft); font-size: .9rem; }
.portal-events-switch { margin-top: 1.6rem; font-size: .9rem; }
.portal-events-switch a { color: var(--pt-primary-dark); text-decoration: underline; font-weight: 600; }

/* ---------- Formulář (obecný, ne jen pro akce) ---------- */
.portal-form { max-width: 46rem; }
.portal-form-lead { margin-bottom: 1.5rem; color: var(--pt-ink-soft); }
/* <legend> je nativně vykreslovaný, ne obyčejný blokový/grid prvek —
   prohlížeč ho staví na okraj rámečku fieldsetu bez ohledu na
   display: grid na rodiči, takže "trčel" nad kartou místo aby byl
   uvnitř. Fieldset proto NENÍ grid, mřížka polí je ve vlastním
   .portal-form-grid uvnitř — legend tak zůstává čistě nad ní, v
   normálním toku karty, ne rozkročený přes její horní okraj. */
.portal-form fieldset { margin: 0 0 1.6rem; padding: 1.3rem; border: 1px solid rgba(29,39,33,.09); border-radius: var(--pt-radius); background: var(--pt-card); }
.portal-form legend { padding: 0 .4rem; margin-bottom: 1rem; font-family: var(--pt-font-head); font-size: 1.05rem; font-weight: 700; color: var(--pt-primary-dark); }
.portal-form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: .9rem 1rem; }
.portal-field { display: flex; flex-direction: column; gap: .3rem; font-size: .9rem; }
.portal-field > span { font-weight: 600; }
.portal-field small { color: var(--pt-ink-soft); font-size: .78rem; }
.portal-field input, .portal-field select, .portal-field textarea { padding: .55rem .75rem; border: 1px solid rgba(29,39,33,.18); border-radius: var(--pt-radius-sm); background: #fff; color: var(--pt-ink); font: inherit; font-size: .92rem; }
.portal-field input:focus, .portal-field select:focus, .portal-field textarea:focus { border-color: var(--pt-primary); outline: 2px solid var(--pt-primary-soft); outline-offset: 1px; }
.portal-field-wide { grid-column: 1 / -1; }
.portal-field-narrow { max-width: 9rem; }
/* Zaškrtávátko potřebuje popisek vedle sebe, ne nad sebou. */
.portal-field-check { flex-direction: row; align-items: center; gap: .5rem; }
.portal-field-check input { width: 1.1rem; height: 1.1rem; flex: none; }
.portal-form-note { margin-bottom: 1.5rem; padding: 1rem 1.2rem; border-radius: var(--pt-radius-sm); }
.portal-form-note.is-ok { background: var(--pt-primary-soft); color: var(--pt-primary-dark); }
.portal-form-note.is-error { background: #fbe6e2; color: #9d2d20; }
.portal-form-note p, .portal-form-note ul { margin: .4rem 0 0; }
.portal-form-note ul { padding-left: 1.1rem; }
/* Past na roboty — pole nesmí být vidět ani dostupné klávesnicí. */
.portal-form-trap { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.portal-form-actions { margin-top: .5rem; }

/* ---------- Hodnocení Google ---------- */
/* Číslo je cizí dílo, proto vždy s odkazem na zdroj a datem stažení
   (v atributu title). Vzhledem se odlišuje od našich vlastních štítků. */
.portal-rating { color: var(--pt-ink); background: var(--pt-card); border: 1px solid rgba(29,39,33,.14); text-decoration: none; }
.portal-rating:hover { border-color: var(--pt-primary); color: var(--pt-ink); }
.portal-rating-star { color: var(--pt-highlight); }
.portal-rating-count, .portal-rating-source { color: var(--pt-ink-soft); font-weight: 500; }
.portal-rating-source { font-size: .78rem; }

/* ---------- Obsah příspěvku ---------- */
/* Platí pro obě šablony článku (single.php i tpl-clanek-banner.php) —
   text se nekopíruje, typografie je jen jedna, sdílená přes tuhle třídu. */
.entry-content { max-width: 46rem; font-size: 1.05rem; line-height: 1.75; color: var(--pt-ink); }
.entry-content img { max-width: 100%; height: auto; border-radius: var(--pt-radius-sm); }

/* Mezera se dává zespodu odstavci, ne přes `> * + *` — element v selektoru
   má vyšší specificitu, takže `.entry-content p` sousedské pravidlo přebilo
   na nulu a odstavce lezly na sebe. */
.entry-content > * + * { margin-top: 1.3rem; }
.entry-content p { margin: 0 0 1.4rem; }
/* Poslední prvek mezeru dolů nepotřebuje — jinak by odsadil patičku bloku. */
.entry-content > :last-child { margin-bottom: 0; }

.entry-content h2,
.entry-content h3,
.entry-content h4 { font-family: var(--pt-font-head); color: var(--pt-ink); line-height: 1.3; margin-top: 2.4rem; }
.entry-content h2 { font-size: 1.55rem; font-weight: 800; }
.entry-content h3 { font-size: 1.25rem; font-weight: 700; }
.entry-content h4 { font-size: 1.08rem; font-weight: 700; }
/* První nadpis nemá odtahovat od úvodního odstavce stejně jako ty pod textem. */
.entry-content > h2:first-child,
.entry-content > h3:first-child { margin-top: 0; }

.entry-content a { color: var(--pt-primary-dark); font-weight: 600; text-decoration-color: rgba(46,125,70,.35); text-underline-offset: .18em; transition: text-decoration-color .15s ease; }
.entry-content a:hover { text-decoration-color: currentColor; }

.entry-content strong { color: var(--pt-ink); font-weight: 700; }

.entry-content ul,
.entry-content ol { padding-left: 1.3rem; display: flex; flex-direction: column; gap: .5rem; }
.entry-content li { padding-left: .3rem; }
.entry-content li::marker { color: var(--pt-primary); font-weight: 700; }

/* Levý pruh místo uvozovek — necituje řeč, jen odlišuje odstavec od textu okolo. */
.entry-content blockquote { margin: 0; padding: .2rem 0 .2rem 1.3rem; border-left: 3px solid var(--pt-primary); color: var(--pt-ink-soft); font-style: italic; }

.entry-content hr { border: none; border-top: 1px solid rgba(29,39,33,.12); margin: 2.4rem 0; }

/* ---------- Patička ---------- */
.pt-footer { background: var(--pt-primary-dark); color: rgba(255,255,255,.8); padding: 3.5rem 0 2rem; margin-top: 4rem; }
.pt-footer h6 { color: #fff; font-family: var(--pt-font-head); font-size: .95rem; margin-bottom: 1rem; }
.pt-footer a { color: rgba(255,255,255,.7); text-decoration: none; font-size: .9rem; }
.pt-footer a:hover { color: #fff; }
/* Odkazy v řádku vedle sebe, ne sloupcem pod sebou — nadpis skupiny
   ("Objevte"/"Navigace") sedí na začátku stejné řádky. */
.pt-footer-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: .5rem 1.4rem; margin-bottom: 1rem; }
.pt-footer-row h6 { margin: 0; flex: 0 0 auto; }
.pt-footer .menu, .pt-footer-links { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: .5rem 1.4rem; }
.pt-footer .menu li, .pt-footer-links li { margin: 0; }
.footer-lang { font-size: .82rem; border: 1px solid rgba(255,255,255,.25); border-radius: 999px; padding: .25rem .7rem; color: rgba(255,255,255,.8); text-decoration: none; display: inline-block; margin: 0 .25rem .5rem 0; }

/* Logo přesunuté dolů ke copyrightu (na střed), viz footer.php. */
.pt-footer-bottom { display: flex; flex-direction: column; align-items: center; gap: .8rem; text-align: center; margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid rgba(255,255,255,.12); }
.pt-footer-logo { color: #fff; }
.pt-footer-copyright { margin: 0; font-size: .82rem; color: rgba(255,255,255,.5); }
/* Kolečka jako u sociálních ikon všude jinde na webu — jen v tmavší
   variantě, ať na zeleném pozadí patičky nesplynou s okolím. */
.pt-footer-social { display: flex; gap: .6rem; }
.pt-footer-social a { display: flex; align-items: center; justify-content: center; width: 2.2rem; height: 2.2rem; border-radius: 50%; background: rgba(255,255,255,.1); color: #fff; }
.pt-footer-social a:hover { background: rgba(255,255,255,.2); }
.pt-footer-social .portal-icon { width: 1.1rem; height: 1.1rem; }

/* Newsletter — zatím jen naoko (viz komentář ve footer.php), ale
   vypadá jako plnohodnotný pruh přes celou šířku, ne jako sloupec
   mezi ostatními (na rozdíl od nich chce upoutat, ne jen doplnit). */
.pt-newsletter-band { background: var(--pt-primary); margin: -3.5rem 0 2.5rem; padding: 1.6rem 0; }
.pt-newsletter-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1.2rem; }
.pt-newsletter-text { display: flex; flex-direction: column; gap: .2rem; }
.pt-newsletter-text strong { font-family: var(--pt-font-head); font-size: 1.05rem; color: #fff; }
.pt-newsletter-text span { font-size: .85rem; color: rgba(255,255,255,.75); }
.pt-newsletter-form { display: flex; gap: .6rem; flex-wrap: wrap; }
.pt-newsletter-form input { padding: .6rem 1.1rem; border-radius: 999px; border: none; min-width: 220px; font-size: .9rem; }
.pt-newsletter-form button { white-space: nowrap; }
@media (max-width: 767px) {
	.pt-newsletter-inner { flex-direction: column; align-items: flex-start; }
	.pt-newsletter-form { width: 100%; }
	.pt-newsletter-form input { flex: 1; }
}

/* Oblíbené — stejná data jako hero štítky, jen v tmavé variantě
   (stejný vzor jako .footer-lang). */
.pt-footer-tags { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: 2.5rem; }
.pt-footer-tag { border: 1px solid rgba(255,255,255,.25); border-radius: 999px; padding: .4rem 1rem; font-size: .82rem; color: rgba(255,255,255,.8); }
.pt-footer-tag:hover { border-color: #fff; background: rgba(255,255,255,.08); color: #fff; }

/* Certifikáty jako pruh důvěryhodnosti — loga v malých bílých
   destičkách, ať jsou vidět i ta s průhledným/barevným pozadím. */
.pt-footer-certs-title { margin: 2.5rem 0 1rem; padding-top: 2rem; border-top: 1px solid rgba(255,255,255,.12); }
.pt-footer-certs { display: flex; flex-wrap: wrap; gap: .8rem; }
.pt-footer-certs a { width: 3.2rem; height: 3.2rem; padding: .4rem; border-radius: var(--pt-radius-sm); background: #fff; display: flex; align-items: center; justify-content: center; }
.pt-footer-certs img { width: 100%; height: 100%; object-fit: contain; }

/* Certifikáty už mají vlastní odsazení/linku nad sebou — druhá by byla nadbytečná. */
.pt-footer-certs + .pt-footer-bottom { margin-top: 0; padding-top: 1.5rem; border-top: none; }

/* Filtry archivu receptů — stejné prvky jako mapa, jen odkazy místo zaškrtávátek. */
.portal-recipe-filters { margin-bottom: 1.6rem; }
.portal-recipe-summary { justify-content: space-between; margin-top: .4rem; }
.portal-recipe-count { color: var(--pt-ink-soft); font-size: .9rem; }
.portal-recipe-filters .portal-filters-reset { color: var(--pt-ink-soft); font-size: .9rem; }
/* Hledání a filtry běží přes AJAX (recipe-filters.js) — než dorazí nová
   odpověď, obal jen ztlumí, ať je jasné, že se něco děje, ale výsledky
   nezmizí a klik se nedá zopakovat omylem dvakrát. */
#recipe-archive.is-loading { opacity: .55; pointer-events: none; transition: opacity .15s; }
/* Hledá se rovnou při psaní, tlačítko je pak jen navíc — beze-JS
   zůstává funkční, JS ho jen schová (viz recipe-filters.js). */
#recipe-archive.js-live-search .portal-recipe-filters button[type="submit"] { display: none; }

/* Spotlight na výšku — v užším sloupci by dva sloupce vedle sebe nedýchaly. */
.portal-spotlight-vertical { grid-template-columns: 1fr; margin-bottom: 0; height: 100%; }
.portal-spotlight-vertical .portal-spotlight-media img { aspect-ratio: 16 / 10; height: auto; }

/* Rychlé vstupy k dnešnímu tipu. */
.dnes-rychle { margin-bottom: 1.2rem; }
.dnes-rychle-label {
	display: block;
	margin-bottom: .5rem;
	color: var(--pt-ink-soft);
	font-size: .72rem;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
}

/*
 * Mapa na titulce až do rohu panelu.
 *
 * Odsazení nese textová část, ne panel — mapa se proto dotkne hrany
 * sama a zaoblení převezme po panelu (overflow: hidden). Dřív to
 * řešily záporné okraje proti odsazení mřížky, jenže ta má vlastní
 * rozestup, takže mapa hranu buď nedosáhla, nebo přetekla a ořízla
 * si ovládání zoomu.
 */
.pt-band-mapa { overflow: hidden; }
.pt-band-mapa-inner { display: grid; gap: 0; }
.pt-band-mapa-text { padding: 2rem 1.5rem; }
.pt-band-mapa-media { min-height: 20rem; }
.pt-band-mapa .portal-map { width: 100%; height: 100%; min-height: 20rem; border-radius: 0; }

@media (min-width: 992px) {
	.pt-band-mapa-inner { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); align-items: center; }
	.pt-band-mapa-text { padding: 3rem; }
	.pt-band-mapa-media { align-self: stretch; min-height: 28rem; }
}

/*
 * Karty akcí na titulce stejně vysoké.
 *
 * Adresa se u některých akcí zalomí na dva řádky a karta pak
 * přerůstá sousedy — v řadě tří to vypadalo rozsypaně.
 */
.section-akce .portal-event-card { height: 100%; }
.section-akce .portal-event-link { height: 100%; }

/* Dnes — dvě poloviny vedle sebe: významný den a narozeniny.
   Klik posune na odpovídající sekci níž na stránce, ne na detail. */
.pt-dnes-row { margin-top: 2.5rem; margin-bottom: 2.5rem; }
.pt-dnes { display: grid; grid-template-columns: 1fr; gap: 1rem; }
.pt-dnes-item { display: flex; align-items: center; gap: 1rem; min-width: 0; padding: 1.1rem 1.5rem; border-radius: var(--pt-radius); background: var(--pt-primary-soft); text-decoration: none; color: var(--pt-ink); }
.pt-dnes-icon { display: flex; align-items: center; justify-content: center; flex: none; width: 2.6rem; height: 2.6rem; border-radius: 50%; background: var(--pt-card); font-size: 1.3rem; line-height: 1; }
.pt-dnes-text { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
.pt-dnes-label { color: var(--pt-ink-soft); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
.pt-dnes-value { font-weight: 700; }
.pt-dnes-note { color: var(--pt-ink-soft); font-size: .84rem; }
a.pt-dnes-item:hover .pt-dnes-value { color: var(--pt-primary-dark); text-decoration: underline; }

@media (min-width: 768px) {
	.pt-dnes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 992px) {
	.pt-dnes { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* Rozcestí pod hero — čtyři dlaždice na hlavní části webu. */
.pt-rozcesti-nadpis { margin-bottom: 1rem; font-family: var(--pt-font-head); font-size: 1.4rem; font-weight: 800; }
.pt-rozcesti-row { margin-top: 2.5rem; margin-bottom: 2.5rem; }
.pt-rozcesti-tile { display: flex; flex-direction: column; gap: .3rem; height: 100%; padding: 1.3rem 1.4rem; border-radius: var(--pt-radius); background: var(--pt-card); box-shadow: var(--pt-shadow); color: var(--pt-ink); text-decoration: none; transition: transform .2s, box-shadow .2s; }
.pt-rozcesti-tile:hover { transform: translateY(-3px); box-shadow: var(--pt-shadow-lg); color: var(--pt-ink); }
.pt-rozcesti-ikona { font-size: 1.6rem; line-height: 1; }
.pt-rozcesti-nazev { font-family: var(--pt-font-head); font-size: 1.05rem; font-weight: 800; }
.pt-rozcesti-popis { color: var(--pt-ink-soft); font-size: .88rem; line-height: 1.45; }

}

/* Druhý řádek u karty „Nově přidáno“ — délka se podle typu liší schválně. */
.pt-novinka-radek { margin: .3rem 0 0; color: var(--pt-ink-soft); font-size: .84rem; line-height: 1.4; }

/* === Našeptávač k hledání === */
.portal-suggest-anchor { position: relative; }
.portal-suggest {
	position: absolute;
	z-index: 60;
	top: calc(100% + .5rem);
	left: 0;
	right: 0;
	max-height: 26rem;
	overflow-y: auto;
	padding: .5rem;
	border: 1px solid rgba(29,39,33,.1);
	border-radius: var(--pt-radius);
	background: var(--pt-card);
	box-shadow: var(--pt-shadow-lg);
}
.portal-suggest-group {
	margin: .5rem .6rem .2rem;
	color: var(--pt-ink-soft);
	font-size: .7rem;
	font-weight: 700;
	letter-spacing: .07em;
	text-transform: uppercase;
}
.portal-suggest-item {
	display: flex;
	align-items: center;
	gap: .7rem;
	padding: .5rem .6rem;
	border-radius: .7rem;
	color: var(--pt-ink);
	text-decoration: none;
}
.portal-suggest-item:hover, .portal-suggest-item.is-active {
	background: var(--pt-primary-soft);
	color: var(--pt-ink);
}
.portal-suggest-item img { width: 40px; height: 40px; border-radius: .5rem; object-fit: cover; flex: none; }
.portal-suggest-body { display: flex; flex-direction: column; min-width: 0; }
.portal-suggest-nazev { font-weight: 600; font-size: .92rem; line-height: 1.3; }
.portal-suggest-top { margin-left: .35rem; color: #e3b400; font-size: .8em; }
.portal-suggest-recommended { margin-left: .35rem; color: var(--pt-ink-soft); font-size: .72em; font-weight: 500; text-transform: uppercase; letter-spacing: .04em; }
.portal-suggest-meta { color: var(--pt-ink-soft); font-size: .78rem; }
.portal-suggest-empty { margin: 0; padding: .8rem .6rem; color: var(--pt-ink-soft); font-size: .9rem; }
/*
 * Přišpendlené dole přes position:sticky, ne jen poslední položka
 * v seznamu — jinak zajel odkaz mimo dohled hned, jak se v delším
 * seznamu odscrolovalo, a bylo nutné dojet až na konec, aby šel
 * vůbec vidět.
 */
.portal-suggest-all {
	position: sticky;
	bottom: 0;
	z-index: 1;
	display: block;
	margin: .3rem -.5rem -.5rem;
	padding: .6rem;
	border-top: 1px solid rgba(29,39,33,.08);
	background: var(--pt-card);
	color: var(--pt-primary);
	font-size: .88rem;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
}
.portal-suggest-all:hover { color: var(--pt-primary-dark); }

/* Výsledky hledání — skupiny po typech. */
.portal-search-group-title { margin-bottom: 1rem; font-size: 1.3rem; font-weight: 800; }

/*
 * Nově přidáno — sloupcové řazení místo mřížky po řádcích.
 *
 * CSS grid řadí po řádcích: výška řádku se řídí nejvyšší kartou v něm,
 * takže pod kratšími zbývala díra, než začal další řádek. Sloupce
 * (column-count) plní karty odshora dolů v každém sloupci zvlášť,
 * takže různě vysoké karty na sebe navazují bez mezer.
 */
.pt-novinky-sloupce { column-count: 2; column-gap: 1rem; }
.pt-novinky-sloupce > .article-card {
	/* Zděděné height:100% je pro mřížky se stejně vysokými kartami
	   vedle sebe — tady by jen roztáhlo kartu na výšku sloupce. */
	height: auto;
	margin-bottom: 1rem;
	break-inside: avoid;
	/* Stín karty se v CSS sloupcích u zlomu ořízne a vypadá jako
	   tenká 3D hrana pod kartou. Tenký rámeček dělá stejnou práci
	   (odliší kartu od pozadí), ale neořezává se. */
	box-shadow: none;
	border: 1px solid rgba(29,39,33,.08);
	/* Karta je teď jeden odkaz přes celý blok, ne obrázek a titulek
	   zvlášť — potřebuje proto vlastní barvu a chování při najetí. */
	display: block;
	color: inherit;
	text-decoration: none;
	transition: box-shadow .2s, border-color .2s;
}
/*
 * Žádný transform na hoveru — schválně. `will-change`/`backface-visibility`
 * blikání karet 2.–4. v pořadí nevyřešily, protože jde o hlubší chybu
 * vykreslování transformovaných prvků uvnitř CSS sloupců (ne o chybějící
 * kompozitní vrstvu). Transform je jediná vlastnost z trojice, která mění
 * vizuální polohu boxu, a přesně to prohlížeč u zalomení sloupce špatně
 * překresluje. Zvednutí bez posunu — jen stín a zvýrazněný rámeček —
 * dává skoro stejný pocit hoveru bez rizika.
 */
.pt-novinky-sloupce > .article-card:hover {
	box-shadow: var(--pt-shadow-lg);
	border-color: transparent;
}
.pt-novinky-sloupce > .article-card:hover h5 { color: var(--pt-primary-dark); }
@media (min-width: 768px) {
	.pt-novinky-sloupce { column-count: 3; }
}
@media (min-width: 992px) {
	.pt-novinky-sloupce { column-count: 4; }
}
.pt-novinka-popis { margin: .3rem 0 0; color: var(--pt-ink-soft); font-size: .84rem; line-height: 1.4; }
