/* ============================================================
   PROGRAM — ovládání filtrů (1.9.7)
   Samostatný versovaný soubor (filemtime), NE @import z additionalStyle.css:
   ten jde bez ?ver= a uvázne v Cloudflare cache. Viz docs/08 §F.
   Webflow export (for-caravan.webflow.css) se needituje, jen přebíjí.
   ============================================================ */

/* Filtry dne — stejná šířka a poloha ve všech dnech (tiket „filtry skáčou“).
   Export dává selectu flex: 1 + max-width: 220px a nechává min-width: auto,
   takže nejmenší šířka selectu = nejdelší volba v nabídce daného dne. Na počítači
   (nad 1200 px) má .filters-wrapper navíc kvůli .w-100 na nadpisu i na filtrech
   jen polovinu řádku (494–630 px), kam se 3 × 220 + 2 × 12 = 684 px nevejde,
   a zda se třetí filtr zalomí, rozhodovaly délky voleb: jeden den dva řádky,
   druhý jeden. Platí jen pro blok Program ([data-program-filters]; třída
   .header-with-filters jinde v pluginu ani šabloně není); mobil (do 767 px)
   zůstává podle exportu. „not all and (max-width: …)“ je přesný doplněk
   k breakpointům exportu i při zlomkové šířce okna (zoom); vnější „screen“
   jako u exportu, aby se pravidla nepoužila při tisku. */
@media screen {
    @media not all and (max-width: 767px) {
        [data-program-filters] {
            flex-wrap: nowrap;
        }

        /* Pevný základ 220 px místo šířky podle obsahu. Při nedostatku místa
           (do 1200 px má export mezery 16 px, při 768 px chybí 1 px; klasický
           posuvník ve Windows) se všechny tři zúží stejně (min-width: 0)
           a dlouhý text skončí trojtečkou, kde to prohlížeč u selectu umí. */
        [data-program-filters] > .dropdown-filter {
            flex: 0 1 220px;
            width: 220px;
            min-width: 0;
            text-overflow: ellipsis;
        }
    }

    /* Nadpis dne a filtry v jednom řádku: filtry si vezmou šířku svých selectů
       (3 × 220 + 2 × 12 = 684 px), nadpis zbytek (místo dělení 50 : 50, které
       vzniká z .w-100 na obou). Když hlavička nestačí na nadpis (aspoň 260 px)
       + mezeru 20 px + filtry, tedy pod 964 px, zalomí se filtry celé pod
       nadpis a zarovnají se vpravo jako do 1200 px. To nastane v užším
       kontejneru, např. šablona „Textová stránka“ / „Ubytování“ (750 px) nebo
       sloupec. Stránka programu přes celou šířku (šablona s bannerem) má
       nad 1200 px hlavičku aspoň 994 px (okno 1201 px s posuvníkem 17 px),
       takže tam filtry zůstanou vedle nadpisu. O zalomení rozhoduje jen
       šířka hlavičky, ne text dne, takže dny neskáčou.
       Filtry drží horní hranu řádku, takže je neposune ani nadpis zalomený
       do dvou řádků. Nerozdělitelné slovo nadpisu se raději zalomí, než aby
       přeteklo pod filtry. */
    @media not all and (max-width: 1200px) {
        .header-with-filters {
            flex-wrap: wrap;
        }

        .header-with-filters > [data-program-filters] {
            flex: 0 1 auto;
            align-self: flex-start;
            width: auto;
            max-width: 100%;
            min-width: 0;
            margin-left: auto;
        }

        .header-with-filters > h2 {
            flex: 1 1 260px;
            min-width: 0;
            overflow-wrap: break-word;
        }
    }
}

/* Řádek se shrnutím pod filtry. Filtry samotné jsou .filters-wrapper
   z exportu — export neměníme, jen přebíjíme výše. */
.program-filters-summary {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px 16px;
    margin-top: 12px;
}

.program-filters-count {
    color: var(--black, #121930);
    opacity: .7;
    font-size: 15px;
    line-height: 1.4;
    font-variant-numeric: tabular-nums;
}

/* normalize.css resetuje tlačítku jen barvu, písmo a kurzor — zbytek
   (padding 1px 6px, border 2px outset, background ButtonFace a na iOS
   nativní vzhled) by zůstal z prohlížeče, proto explicitní reset. */
.program-filters-reset {
    -webkit-appearance: none;
    appearance: none;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    padding: 6px 14px;
    border: 1px solid var(--black, #121930);
    border-radius: 9999px;
    background: transparent;
    color: inherit;
    font: inherit;
    font-size: 14px;
    line-height: 1.2;
    text-align: center;
    cursor: pointer;
    transition: background-color .2s, color .2s;
}

.program-filters-reset:hover,
.program-filters-reset:focus-visible {
    background-color: var(--black, #121930);
    color: #fff;
}

/* [hidden] musí přebít display:inline-flex výše, jinak by tlačítko
   zůstalo vidět i schované. Skryté části okna řečníka (prázdný profil,
   chybějící prezentace) musí stejně tak zmizet i proti třídám z exportu. */
.program-filters-reset[hidden],
.program-empty-state[hidden],
.popup-overlay [hidden] {
    display: none !important;
}

/* Prázdný stav — ukáže se jen když filtr nic nenajde. */
.program-empty-state {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 16px;
    margin: 24px 0;
    padding: 32px;
    border: 1px dashed var(--black, #121930);
    border-radius: 20px;
}

.program-empty-state > .paragraph {
    margin: 0;
}

@media screen and (max-width: 767px) {
    .program-filters-summary {
        align-items: flex-start;
        justify-content: space-between;
    }

    .program-empty-state {
        padding: 24px;
    }
}

/* ============================================================
   DETAIL ŘEČNÍKA (medailonek)
   Okno i jeho styly jsou z Webflow exportu — ten zůstává beze změny.
   Tady je jen to, co k němu chybělo: zobrazení, posuv dlouhého obsahu,
   křížek jako skutečné tlačítko a medailonek bez profilu.
   ============================================================ */

/* Export má .popup-overlay { display: none }. Otevření přidá třídu (JS navíc
   nastavuje inline display, aby okno fungovalo i při staré CSS z cache). */
.popup-overlay.is-open {
    display: flex;
}

/* Dlouhý profil se dřív nevešel: .pop-up má height:auto a overflow:hidden,
   takže konec textu zmizel pod okrajem obrazovky. Roluje vnitřek, ne celé
   okno — křížek je absolutní vůči .pop-up, takže zůstane na místě. */
.popup-overlay .pop-up {
    max-height: calc(100vh - 48px);
}

@supports (height: 100dvh) {
    .popup-overlay .pop-up {
        max-height: calc(100dvh - 48px);
    }
}

.popup-overlay .pop-up-content-wrapper {
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
}

/* Křížek byl <div role="button"> — nereagoval na Enter ani mezerník.
   Jako <button> potřebuje zrušit vzhled od prohlížeče (na iOS i nativní tvar). */
button.pop-up-close {
    -webkit-appearance: none;
    appearance: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    font: inherit;
    line-height: 0;
}

button.pop-up-close:focus-visible {
    opacity: 1;
    outline: 2px solid currentColor;
    outline-offset: 4px;
    border-radius: 4px;
}

/* Medailonek řečníka, jehož okno by nemělo co ukázat (bez profilu, přednášek
   i prezentací — viz abf_speaker_has_content): zůstává <a>, ale bez href,
   role i tabindexu — tedy neklikací a nedosažitelný tabulátorem. Zbývá
   sundat vizuální sliby: kurzor, reakci na najetí a šipku „vede dál“. */
.abf-speaker-static,
.abf-speaker-static * {
    cursor: default;
}

.speaker-card.abf-speaker-static:hover,
.speaker-row.abf-speaker-static:hover,
.speaker-info.abf-speaker-static:hover {
    color: var(--red);
}

.abf-speaker-static > .icon-32px,
.abf-speaker-static .speaker-arrow {
    visibility: hidden;
}

/* ============================================================
   ŘEČNÍCI — tituly ve jméně (1.9.10, PR3)
   Tituly („Ing.“, „Ph.D.“) se vykreslují v samostatném prvku
   span.abf-titul (karta přednášky, karty i seznam bloku Řečníci,
   okno řečníka). Okno má u jména .speaker-name-info verzálky
   (text-transform: uppercase z Webflow exportu) a „ING.“, „PH.D.“
   je gramaticky špatně; jméno styl webu zachová, titul ne.
   !important proto, aby titul nezvětšilo ani vlastní CSS webu.
   ============================================================ */
.abf-titul {
    text-transform: none !important;
    font-variant-caps: normal;
}
