/*
 * Doladění portálových komponent do vizuálu AfrOstravy.
 * Načítá se AŽ ZA Bootstrapem i za booker/microsite CSS — viz komentář
 * v microsite.base.afrostrava.html.twig.
 *
 * Sem patří jen to, co nejde vyřešit utility třídami přímo v šabloně:
 * typicky komponenty, jejichž HTML generuje portál (booker, košík, formuláře)
 * a do kterých se třídy dopsat nedají.
 */

/* --- Typografie ---------------------------------------------------------- */
.afro-site {
    /* Bootstrap reboot nastavuje na body vlastní font i barvu; vracíme AfrOstravu. */
    font-family: var(--font-sans);
    color: var(--color-af-brown-900);
    background-color: var(--color-af-beige-300);
}

.afro-site h1,
.afro-site h2,
.afro-site h3 {
    font-family: var(--font-block);
    font-weight: 500;
}

/* --- Bootstrap tlačítka uvnitř bookeru / košíku -------------------------- */
.afro-main .btn-primary {
    --bs-btn-bg: var(--color-af-red-500);
    --bs-btn-border-color: var(--color-af-brown-900);
    --bs-btn-hover-bg: var(--color-af-orange-500);
    --bs-btn-hover-border-color: var(--color-af-brown-900);
    --bs-btn-active-bg: var(--color-af-orange-500);
    --bs-btn-active-border-color: var(--color-af-brown-900);
}

.afro-main .btn-success {
    --bs-btn-bg: var(--color-af-green-500);
    --bs-btn-border-color: var(--color-af-brown-900);
    --bs-btn-hover-bg: var(--color-af-brown-500);
    --bs-btn-hover-border-color: var(--color-af-brown-900);
}

/* --- Karty a panely portálu --------------------------------------------- */
.afro-main .card {
    background-color: var(--color-af-beige-400);
    border-color: color-mix(in oklab, var(--color-af-brown-900) 10%, transparent);
    border-radius: 1.25rem;
}

.afro-main .form-control,
.afro-main .form-select {
    border-color: color-mix(in oklab, var(--color-af-brown-900) 20%, transparent);
    border-radius: 60px;
}

.afro-main .form-control:focus,
.afro-main .form-select:focus {
    border-color: var(--color-af-red-500);
    box-shadow: 0 0 0 .2rem color-mix(in oklab, var(--color-af-red-500) 20%, transparent);
}

/* --- Ikonové <span> z předlohy ------------------------------------------
   Tailwind build je definuje jako mask-image; Bootstrap reboot jim ale nastaví
   `display: inline`, kvůli čemuž by měly nulovou výšku a nebyly vidět. */
.afro-site [class*="i-ph-"] {
    display: inline-block;
    width: 1.15em;
    height: 1.15em;
    vertical-align: -0.15em;
}

/* ==========================================================================
   Doplněné utility třídy Tailwindu
   ==========================================================================
   `afrostrava.css` je HOTOVÝ build stažený z www.afrostrava.cz — obsahuje jen
   třídy, které používá hlavní web. Cokoliv navíc, co si napíšeme v šablonách
   microsite, v něm NENÍ a tiše nedělá nic (žádná chyba, jen bez efektu; přesně
   takhle skončil obsah pod fixní hlavičkou, protože `pt-[20rem]` neexistovalo).

   Tailwind toolchain na přegenerování buildu nemáme, proto se chybějící utility
   dopisují sem ručně. Hodnoty odpovídají výchozí škále Tailwindu v4
   (1 jednotka = 0.25rem) a barvy berou tokeny z `afrostrava.css`.

   ⚠️ Když v šabloně microsite použiješ novou Tailwind třídu, OVĚŘ, že v
   `afrostrava.css` existuje — a když ne, dopiš ji sem. Audit:
       grep -o '\.<escapovaná-třída>' public/microsite/tickets.afrostrava.cz/afrostrava.css
   ========================================================================== */

/* --- odkazy v celém layoutu --------------------------------------------
   Bootstrap obarvuje `a` modře a podtrhává (`a{color:…;text-decoration:underline}`,
   specificita 0,0,1). Hlavička, patička ani karty to nechtějí.

   ⚠️ SELEKTOR MÁ `:where()` ZÁMĚRNĚ — a nesmí se zjednodušit na `.afro-site a`.
   `:where()` nepřispívá do specificity, takže tohle pravidlo má 0,0,1 — přesně
   jako Bootstrap. Načítá se později, takže nad Bootstrapem vyhraje, ale KAŽDÁ
   utility třída Tailwindu (0,1,0) vyhraje nad ním. To je přesně to, co chceme:
   odkazy bez vlastní barvy zdědí barvu okolí, odkazy s `text-*` / `hover:text-*`
   si svou barvu udrží.

   Zapsané jako `.afro-site a` (0,1,1) by to přebilo i Tailwind — reálně se to
   stalo: položky rozbaleného menu mají `group-data-nav-open:text-af-beige-300`
   (0,2,0)… ale `color:inherit` z `.afro-site a` zdědilo hnědou z hlavičky a
   menu bylo tmavé na tmavém. Stejně tak `btn-solid`/`btn-outline` si díky tomu
   drží bílý text samy a nepotřebují výjimku. */
:where(.afro-site) a {
    color: inherit;
    text-decoration: none;
}

:where(.afro-site) a:hover {
    color: var(--color-af-red-500);
}

/* ⚠️ Tlačítka z pravidla výše MUSÍ být vyjmutá.

   `.btn-solid` si barvu textu drží přes `color: var(--btn-text-color)`, jenže
   to je specificita 0,1,0 — zatímco `:where(.afro-site) a:hover` má 0,1,1
   a na hoveru vyhraje. U červeného tlačítka tím vznikl ČERVENÝ TEXT NA
   ČERVENÉM POZADÍ, takže popisek na hoveru zmizel.

   Barva se bere z proměnných předlohy, ne napevno: `--btn-hover-text-color`
   když ji varianta tlačítka definuje (btn-white ji má), jinak se drží
   klidová `--btn-text-color` (btn-red). */
.afro-site a.btn-solid:hover,
.afro-site a.btn-outline:hover,
.afro-site a[class*="btn-"]:hover {
    color: var(--btn-hover-text-color, var(--btn-text-color));
}

/* --- fade CTA v hlavičce spolu se zbytkem ------------------------------
   Předloha má `[class|=btn]{transition-property:box-shadow,transform}`. Je to
   atributový selektor (0,1,0), tedy stejně specifický jako utility
   `transition-opacity`, a v souboru stojí později — takže vyhraje a tlačítko
   opacity vůbec nepřechází. Při schovávání hlavičky pak logo a datum plynule
   faduje, ale CTA zmizí skokem. Doplňujeme `opacity` do seznamu.

   Timing function se musí vyjmenovat po vlastnostech: tlačítka mají pružinovou
   křivku `cubic-bezier(.5,2.5,.7,.7)`, která záměrně přestřeluje — pro stín
   a posun při hoveru je to správně, ale opacity by s ní spadla na nulu dřív
   než logo a hlavička by se rozpadla na dvě rychlosti. Stín a posun si proto
   pružinu nechávají, opacity dostává stejnou křivku jako zbytek hlavičky. */
.afro-site header [class|="btn"] {
    transition-property: box-shadow, transform, opacity;
    transition-timing-function:
        cubic-bezier(.5, 2.5, .7, .7),
        cubic-bezier(.5, 2.5, .7, .7),
        cubic-bezier(.4, 0, .2, 1);
}

/* ==========================================================================
   ⚠️ KOLIZE NÁZVŮ TŘÍD S BOOTSTRAPEM
   ==========================================================================
   Bootstrap má vlastní utility se stejnými názvy jako Tailwind, ale JINÝMI
   hodnotami — a navíc je značkuje `!important`. Načítá se po `afrostrava.css`,
   takže stejnojmennou Tailwind utilitu vždy přebije. Auditem se jich našlo 17,
   z toho pět reálně mění layout:

     třída     chtěné (Tailwind)   co dělal Bootstrap
     px-5      1.25rem             3rem  !important
     px-3      0.75rem             1rem  !important
     gap-4     1rem                1.5rem !important
     mb-4      1rem                1.5rem !important
     pt-4      1rem                1.5rem !important

   Nejhorší byl `px-5`: protože nese `!important`, přebíjel i responzivní
   varianty `md:px-12` / `xl:px-6` / `2xl:px-12` (ty `!important` nemají a
   media query specificitu nezvyšuje). Boční odsazení stránky proto bylo
   48 px na VŠECH šířkách místo 20/48/24/48 — viz `.afro-gutter` níže.

   Audit kolizí se dá zopakovat porovnáním tříd použitých v šablonách proti
   `bootstrap.min.css`; postup je v docs/MICROSITES/tickets.afrostrava.cz.md.

   Řešení: hodnoty vracíme zpět s `!important` a vyšší specificitou. Jsou to
   jmenovitě tyhle třídy — nový kód radši rovnou používej třídy, které se
   s Bootstrapem netlučou. */
.afro-site .px-3 { padding-inline: .75rem !important; }
.afro-site .gap-4 { gap: 1rem !important; }
.afro-site .mb-4 { margin-bottom: 1rem !important; }
.afro-site .pt-4 { padding-top: 1rem !important; }

/* --- boční odsazení stránky ----------------------------------------------
   Nahrazuje `px-5 md:px-12 xl:px-6 2xl:px-12` z předlohy. Vlastní třída proto,
   že `px-5` koliduje s Bootstrapem (viz výše) a kvůli jeho `!important` by
   se neuplatnily ani ty responzivní varianty.

   Hodnoty jsou ZMĚŘENÉ na www.afrostrava.cz, ne odvozené z názvů tříd:
     < 768      20 px
     768–1279   48 px
     1280–1439  24 px
     >= 1440    48 px
   (Poslední zlom je 90rem = 1440 px, ne 96rem — `2xl` je v tom buildu
   přenastavené na 90rem, takže „2xl:px-12" nastupuje dřív, než by člověk
   podle výchozí škály Tailwindu čekal.) */
.afro-gutter {
    --afro-gutter: 1.25rem;
    padding-inline: var(--afro-gutter);
}

@media (min-width: 48rem) { .afro-gutter { --afro-gutter: 3rem; } }
@media (min-width: 80rem) { .afro-gutter { --afro-gutter: 1.5rem; } }
@media (min-width: 90rem) { .afro-gutter { --afro-gutter: 3rem; } }

/* Patička má vlastní schéma (`px-5 md:px-12 lg:px-0`) — od `lg` je obsah
   vycentrovaný pevnou šířkou, takže odsazení padá na nulu. Změřeno na předloze. */
.afro-gutter-footer { padding-inline: 1.25rem; }

@media (min-width: 48rem) { .afro-gutter-footer { padding-inline: 3rem; } }
@media (min-width: 64rem) { .afro-gutter-footer { padding-inline: 0; } }

/* --- seznamy v hlavičce a patičce ---------------------------------------
   Bootstrap reboot dává `ul{padding-left:2rem;margin-bottom:1rem}` a odrážky.
   Tailwind preflight (`padding:0`) ho nepřebije, protože se načítá DŘÍV.
   Markup převzatý z afrostrava.cz ale s odsazením nepočítá — odkazy v patičce
   pak nesedí pod nadpisy sloupců, v menu se posouvá celý seznam a v kartě akce
   se datum s místem odsadí od názvu.

   ZÁMĚRNĚ to není `.afro-site ul` (tedy celý web): popis události na detailu
   je HTML od promotéra a seznamy v něm odsazení i odrážky mít mají. Stejně tak
   booker. Vyjmenované jsou proto jen bloky, jejichž markup píšeme my. */
.afro-site header ul,
.afro-site footer ul,
.afro-event-grid ul {
    margin: 0;
    padding-left: 0;
    list-style: none;
}

/* --- mřížka výpisu událostí ----------------------------------------------
   ZÁMĚRNĚ vlastní třída místo `sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4`.
   `sm:`/`2xl:` varianty build neobsahuje, musely by se dopsat sem — jenže tenhle
   soubor se načítá AŽ ZA `afrostrava.css`, takže by `.sm\:grid-cols-2` přebilo
   `.xl\:grid-cols-3` z buildu (stejná specificita, rozhoduje pořadí) a na
   širokých displejích by zůstaly dva sloupce. Jedno pravidlo s vlastními
   breakpointy tenhle problém nemá. */
.afro-event-grid {
    display: grid;
    grid-template-columns: repeat(1, minmax(0, 1fr));
    gap: 2rem;
}

@media (min-width: 40rem) {
    .afro-event-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Tři sloupce jsou strop — dál se karty jen roztahují uvnitř `max-w-[90rem]`.
   Čtvrtý stupeň tu byl, ale na širokých displejích dělal karty moc drobné. */
@media (min-width: 80rem) {
    .afro-event-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* --- odsazení / rozměry -------------------------------------------------- */
.mx-auto        { margin-inline: auto; }
.mt-auto        { margin-top: auto; }
.mb-16          { margin-bottom: 4rem; }
.pt-24          { padding-top: 6rem; }
.pb-24          { padding-bottom: 6rem; }
.px-8           { padding-inline: 2rem; }
.py-4           { padding-block: 1rem; }
.py-16          { padding-block: 4rem; }
.max-w-\[46rem\]{ max-width: 46rem; }
.afro-event-media { aspect-ratio: 4 / 3; }

/* --- typografie ---------------------------------------------------------- */
.font-sans          { font-family: var(--font-sans); }
.leading-tight      { line-height: 1.25; }
.no-underline       { text-decoration-line: none; }
.underline-offset-4 { text-underline-offset: 4px; }

/* --- barvy --------------------------------------------------------------- */
.bg-af-brown-900\/40 { background-color: color-mix(in oklab, var(--color-af-brown-900) 40%, transparent); }
.hover\:text-af-red-500:hover { color: var(--color-af-red-500); }

/* --- přechody a stíny ---------------------------------------------------- */
.transition-colors {
    transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
    transition-timing-function: cubic-bezier(.4, 0, .2, 1);
    transition-duration: .15s;
}
.transition-shadow {
    transition-property: box-shadow;
    transition-timing-function: cubic-bezier(.4, 0, .2, 1);
    transition-duration: .15s;
}
.hover\:shadow-2xl:hover {
    box-shadow: 0 25px 50px -12px color-mix(in oklab, var(--color-af-brown-900) 25%, transparent);
}

/* --- ořez anotace na tři řádky ------------------------------------------- */
.line-clamp-3 {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    overflow: hidden;
}

/* --- named group pro karty akcí ------------------------------------------
   `group/card` + `group-hover/card:*` build nezná (hlavní web pojmenované
   skupiny používá jen pro menu a nav položky). */
.group\/card:hover .group-hover\/card\:scale-105 { scale: 1.05; }

/* --- responzivní varianty ------------------------------------------------ */
@media (min-width: 48rem) {   /* md */
    .md\:block        { display: block; }
    .md\:items-center { align-items: center; }
    .md\:mb-24        { margin-bottom: 6rem; }
    .md\:pt-28        { padding-top: 7rem; }
    .md\:line-clamp-3 {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 3;
        overflow: hidden;
    }
}

@media (min-width: 96rem) {   /* 2xl */
    .\32xl\:px-12       { padding-inline: 3rem; }
    .\32xl\:gap-x-36    { column-gap: 9rem; }
    .\32xl\:gap-y-10    { row-gap: 2.5rem; }
}

/* --- odsazení obsahu pod fixní hlavičkou ---------------------------------
   Hlavička je `position: fixed`, takže si `<main>` musí odsadit sám. Řeší se
   TADY a ne utility třídou v šabloně schválně: build neobsahuje ani
   `pt-[20rem]`, ani žádnou dost velkou hodnotu z výchozí škály, takže by
   se na to nedalo spolehnout. Hodnoty odpovídají skutečné výšce hlavičky
   změřené v prohlížeči (mobil 298 px, desktop 182 px) plus rezerva. */
.afro-main { padding-top: 21rem; }

@media (min-width: 48rem) {
    .afro-main { padding-top: 14rem; }
}


/* ==========================================================================
   Detail události (event-detail.afrostrava.html.twig)
   ========================================================================== */

/* --- kontejner detailu ---------------------------------------------------
   `microsite.css` dává `div#event-detail{background:white;border-radius:1em;padding:2em}`.
   Bílá karta na béžovém podkladu AfrOstravy nesedí a `padding:2em` navíc bránil
   hero dosáhnout k okrajům obsahového sloupce.

   Selektor musí mít id + třídu (1,1,0), aby přebil `div#event-detail` (1,0,1) —
   samotné `.afro-detail` (0,1,0) by prohrálo. */
#event-detail.afro-detail {
    background: transparent;
    border-radius: 0;
    padding: 0;
}

/* --- hero ----------------------------------------------------------------
   Předloha (www.afrostrava.cz/programme/) má hero 680–820 px vysoké. Detail
   ho má ZÁMĚRNĚ výrazně nižší — má co nejdřív ukázat popis a nákup, ne dělat
   titulní stranu.

   Pod hero byla původně dekorativní „vlnka" z předlohy — odstraněná, nahrazuje
   ji prostý `margin-bottom`. To SVG mělo přes 48 kB a inlinovalo se do HTML
   každého detailu, což za ten efekt nestálo.

   Hero jde od kraje ke kraji obsahového sloupce: `<main>` má boční odsazení
   `.afro-gutter`, hero ho ruší záporným marginem odvozeným ze stejné proměnné.
   ZÁMĚRNĚ se nepoužívá trik `width:100vw;margin-left:50%` — `100vw` počítá
   i svislý posuvník, takže by stránka dostala vodorovné přetečení. */
.afro-detail-hero {
    height: 15rem;
    margin-inline: calc(var(--afro-gutter, 0px) * -1);
    margin-bottom: 2.5rem;
}

@media (min-width: 48rem) {
    .afro-detail-hero { height: 17rem; margin-bottom: 3.5rem; }
}

@media (min-width: 80rem) { .afro-detail-hero { height: 19rem; } }

/* Titulek hero je v Sekuya — vědomá odchylka od předlohy.

   Předloha (www.afrostrava.cz/programme/) má na tomhle nadpisu SUSE 800;
   od 15. 9. 2026 ho microsite na přání zákazníka kreslí v Sekuya.

   ⚠️ Váha MUSÍ být 400. Sekuya je jednováhový display font (Fontsource:
   `"weights":[400], "variable":false`; jsDelivr vrací pro 700 i 800 chybu 404),
   takže 500 z `.afro-site h1` nebo 800 z dřívějšího `font-extrabold` by si
   prohlížeč dopočítal a písmo by se rozmazalo. `font-synthesis-weight` je tu
   explicitně, i když ho `.afro-site h1` v pojistce níže už nese — kdyby se
   selektor pojistky někdy zúžil, titulek nesmí zůstat bez ní.

   Selektor musí mít dvě třídy (0,2,0), aby přebil `.afro-site h1` (0,1,1). */
.afro-site .afro-detail-hero-title {
    font-family: var(--font-block);
    font-weight: 400;
    font-synthesis-weight: none;
    font-size: 1.75rem;
    line-height: 1.15;
}

/* Stejná specificita (0,2,0) jako základní pravidlo — s holým
   `.afro-detail-hero-title` (0,1,0) prohrávaly a titulek měl 1.75rem všude. */
@media (min-width: 48rem) { .afro-site .afro-detail-hero-title { font-size: 2.25rem; } }
@media (min-width: 80rem) { .afro-site .afro-detail-hero-title { font-size: 2.75rem; } }

/* --- šířka obsahu detailu ------------------------------------------------
   Přes celou šířku obsahového sloupce se text čte špatně, proto je všechno
   pod hero zúžené a vycentrované.

   Šířka sedí na `.event-detail-description`, což je obal CELÉHO obsahu pod
   hero (popis, plánek i nečíslované zóny) — ne jen na popisu. Kdyby ji měl
   jen popis, zbytek detailu by zůstal široký a stránka by se v půlce
   rozšířila. Hero zůstává naopak od kraje ke kraji.

   Modály, toasty a ikona košíku uvnitř jsou `position:fixed`, takže se jich
   omezení netýká. */
.afro-detail .event-detail-description {
    max-width: 64rem;
    margin-inline: auto;
}

/* Popis je CIZÍ HTML od promotéra — do typografie uvnitř nezasahujeme,
   jen mu dáme odstup od plánku. */
.afro-detail .event-detail-description-column-1 {
    margin-bottom: 3rem;
}

/* Kdyby promotér v popisu použil plovoucí obrázek, ať neteče ven. */
.afro-detail .event-detail-description-column-1::after {
    content: "";
    display: block;
    clear: both;
}

.afro-detail .event-detail-description-column-1 img {
    max-width: 100%;
    height: auto;
}

/* --- plánek --------------------------------------------------------------
   Plánek sedí vlevo a u sálu užšího než obsahový sloupec pak vpravo zbývá
   prázdné místo. Centruje se `div.img-responsive.map` — je to BLOKOVÝ prvek
   s pevnou šířkou, takže `text-align:center` na rodiči na něj neplatí
   a musí dostat `margin-inline:auto`.

   Centruje se právě tenhle obal a ne obrázek uvnitř: `<img>` i `<canvas>`
   (překryv z maphilight.js) jsou v něm polohované absolutně, takže se
   posunou s ním a klikací zóny `<area>` zůstanou sedět. */
.afro-detail #home .img-responsive.map,
.afro-detail #home .content-img-responsive > div {
    margin-inline: auto;
}

/* Plánek ze seating editoru (SVG) má vlastní kontejner. */
.afro-detail #stadium-container {
    margin-inline: auto;
}

/* --- plánek a zóny -------------------------------------------------------
   Booker zůstává bootstrapový; sjednocujeme jen zaoblení a odsazení,
   ať nevypadá nalepený na popis. */
.afro-detail #myTabContent,
.afro-detail #eventContent {
    margin-bottom: 2rem;
}

/* ==========================================================================
   Vstupenky a košík ve vizuálu AfrOstravy
   ==========================================================================
   HTML těchhle bloků generuje portál (booker a objednávkový formulář), takže
   se do něj nedá zasáhnout třídami v šabloně — vzhled se dolaďuje jen odsud.

   Všechno je scopované pod `.afro-detail` / `.afro-site`, aby to nepřeteklo
   do jiných microsit ani do administrace. Barvy berou tokeny z `afrostrava.css`
   (`--color-af-*`), takže sedí s hlavičkou a patičkou.

   ⚠️ Bootstrap má na utilitách `!important` a na komponentách vlastní
   `--bs-*` proměnné. Kde to jde, přepisují se PROMĚNNÉ (čistší a přežije to
   upgrade Bootstrapu); `!important` jen tam, kde proti stojí utilita.
   ========================================================================== */

/* --- akordeon zón (nečíslované vstupenky) -------------------------------- */
.afro-detail #eventContent .accordion-item {
    background-color: var(--color-af-beige-400);
    border: 1px solid color-mix(in oklab, var(--color-af-brown-900) 12%, transparent);
    border-radius: 1.25rem;
    padding: 1.25rem 1.25rem .5rem;
    margin-bottom: 1.25rem;
}

.afro-detail #eventContent .accordion-item h6 strong {
    font-family: var(--font-block);
    font-size: 1.25rem;
    font-weight: 500;
    color: var(--color-af-brown-900);
}

.afro-detail #eventContent .accordion-body {
    padding-inline: 0;
}

/* --- řádek vstupenky ----------------------------------------------------- */
.afro-detail .cart-item {
    background-color: var(--color-af-beige-300);
    border: 1px solid color-mix(in oklab, var(--color-af-brown-900) 12%, transparent);
    border-radius: 1rem;
    box-shadow: none;
    padding: 1rem 1.25rem;
    transition: border-color .18s, box-shadow .18s;
}

.afro-detail .cart-item:hover {
    border-color: color-mix(in oklab, var(--color-af-red-500) 45%, transparent);
    box-shadow: 0 6px 18px -10px color-mix(in oklab, var(--color-af-brown-900) 45%, transparent);
}

.afro-detail .cart-item .info .title {
    font-family: var(--font-block);
    font-size: 1.05rem;
    font-weight: 500;
    color: var(--color-af-brown-900);
}

/* Jednotková cena je v předloze akcent, ne modrý odkaz.
   `.text-primary` z Bootstrapu nese `!important`, proto stejnou zbraň. */
.afro-detail .cart-item .info .unit-price,
.afro-detail .cart-item .info .unit-price.text-primary {
    color: var(--color-af-red-500) !important;
    font-size: .9375rem;
}

/* --- plus/minus u počtu kusů --------------------------------------------
   Kulaté pilulky ve stylu jazykového přepínače v hlavičce. */
.afro-detail .cart-item .quantity-controls button {
    width: 2.25rem;
    height: 2.25rem;
    border-radius: 999px;
    border: 1px solid color-mix(in oklab, var(--color-af-brown-900) 25%, transparent);
    background-color: transparent;
    color: var(--color-af-brown-900);
    font-size: 1.1rem;
    line-height: 1;
    transition: background-color .18s, color .18s, border-color .18s;
}

.afro-detail .cart-item .quantity-controls button:hover:not(:disabled) {
    background-color: var(--color-af-brown-900);
    border-color: var(--color-af-brown-900);
    color: var(--color-af-beige-300);
}

.afro-detail .cart-item .quantity-controls button:disabled {
    opacity: .35;
    cursor: not-allowed;
}

.afro-detail .cart-item .quantity-controls .quantity {
    border-radius: 999px;
    border-color: color-mix(in oklab, var(--color-af-brown-900) 20%, transparent);
    background-color: transparent;
    font-weight: 600;
    color: var(--color-af-brown-900);
}

/* --- tlačítko „do košíku" ------------------------------------------------
   Tvar i chování kopíruje `btn-solid btn-red` z předlohy (plný tvar,
   zaoblení do pilulky, posun na stisk). */
.afro-detail .cart-item .addToCart,
.afro-detail #eventContent .ticket-button {
    border-radius: 999px;
    border: 1px solid var(--color-af-brown-900);
    background-color: var(--color-af-red-500);
    color: var(--color-white);
    font-weight: 600;
    padding: .55rem 1.4rem;
    box-shadow: 0 3px 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
    transition: background-color .18s, transform .12s, box-shadow .12s;
}

.afro-detail .cart-item .addToCart:hover,
.afro-detail #eventContent .ticket-button:hover {
    background-color: var(--color-af-orange-500);
    color: var(--color-white);
}

.afro-detail .cart-item .addToCart:active,
.afro-detail #eventContent .ticket-button:active {
    transform: translateY(3px);
    box-shadow: 0 0 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
}

/* ==========================================================================
   Objednávkový panel (#orderContent) — košík, doručení, platba, kontakt
   ========================================================================== */

/* Hlavička akordeonu „Objednávka" — Bootstrap ji dělá světle modrou.
   Přepisujeme jeho vlastní proměnné, ne jednotlivá pravidla. */
.afro-detail #orderContent .accordion {
    --bs-accordion-bg: var(--color-af-beige-400);
    --bs-accordion-btn-bg: var(--color-af-brown-900);
    --bs-accordion-btn-color: var(--color-af-beige-300);
    --bs-accordion-active-bg: var(--color-af-brown-900);
    --bs-accordion-active-color: var(--color-af-beige-300);
    --bs-accordion-border-color: color-mix(in oklab, var(--color-af-brown-900) 15%, transparent);
    --bs-accordion-border-radius: 1.25rem;
    --bs-accordion-inner-border-radius: 1.25rem;
    --bs-accordion-btn-focus-box-shadow: none;
}

.afro-detail #orderContent .accordion-button {
    font-family: var(--font-block);
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: .02em;
}

/* Text hlavičky je v portálovém HTML zabalený do `<strong>`, takže mu prohlížeč
   dá 700 — a protože Sekuya žádnou tučnou variantu nemá, VYROBÍ SI JI SÁM
   (synthetic bold) roztažením tahů. Výsledek je rozmazaný. Vracíme 500,
   tedy váhu, kterou font reálně má. Viz i pojistka `font-synthesis-weight`
   na konci souboru. */
.afro-detail #orderContent .accordion-button strong {
    font-weight: 500;
}

/* Šipka akordeonu je v Bootstrapu tmavé SVG — na hnědém pozadí zanikala. */
.afro-detail #orderContent .accordion-button::after {
    filter: invert(1) brightness(1.6);
}

.afro-detail #orderContent legend {
    font-family: var(--font-block);
    font-size: 1.1rem;
    font-weight: 500;
    color: var(--color-af-brown-900);
    margin-bottom: .75rem;
}

/* --- tabulka košíku ------------------------------------------------------ */
.afro-detail #orderContent .table {
    --bs-table-bg: transparent;
    --bs-table-striped-bg: color-mix(in oklab, var(--color-af-brown-900) 4%, transparent);
    --bs-table-striped-color: var(--color-af-brown-900);
    --bs-table-color: var(--color-af-brown-900);
    --bs-table-border-color: color-mix(in oklab, var(--color-af-brown-900) 12%, transparent);
}

.afro-detail #orderContent .table thead th {
    font-family: var(--font-block);
    font-weight: 500;
    font-size: .8125rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: color-mix(in oklab, var(--color-af-brown-900) 70%, transparent);
    border-bottom-color: color-mix(in oklab, var(--color-af-brown-900) 20%, transparent);
}

/* Celková částka — zelená z předlohy místo bootstrapí. */
.afro-detail #orderContent .table .text-success,
.afro-detail #orderContent .text-success {
    color: var(--color-af-green-500) !important;
    font-weight: 700;
}

/* Křížek „odebrat z košíku" jako kulaté červené tlačítko. */
.afro-detail #orderContent .table .btn-danger {
    --bs-btn-bg: var(--color-af-red-500);
    --bs-btn-border-color: var(--color-af-brown-900);
    --bs-btn-hover-bg: var(--color-af-orange-500);
    --bs-btn-hover-border-color: var(--color-af-brown-900);
    border-radius: 999px;
    font-weight: 700;
    line-height: 1;
}

/* --- formulářová pole ---------------------------------------------------
   Zaoblení 60px je z newsletterového pole v patičce předlohy. */
.afro-detail #orderContent .form-control,
.afro-detail #orderContent .form-select {
    border-radius: 60px;
    border-color: color-mix(in oklab, var(--color-af-brown-900) 22%, transparent);
    background-color: var(--color-af-beige-300);
    color: var(--color-af-brown-900);
    padding: .6rem 1.1rem;
}

.afro-detail #orderContent .form-control:focus,
.afro-detail #orderContent .form-select:focus {
    border-color: var(--color-af-red-500);
    box-shadow: 0 0 0 .2rem color-mix(in oklab, var(--color-af-red-500) 18%, transparent);
}

/* Přepínače a zaškrtávátka v barvě značky. */
.afro-detail #orderContent .form-check-input:checked {
    background-color: var(--color-af-red-500);
    border-color: var(--color-af-brown-900);
}

.afro-detail #orderContent .form-check-input:focus {
    border-color: var(--color-af-red-500);
    box-shadow: 0 0 0 .2rem color-mix(in oklab, var(--color-af-red-500) 18%, transparent);
}

/* --- potvrzení objednávky ------------------------------------------------ */
.afro-detail #orderContent button[type="submit"],
.afro-detail #orderContent .btn-success {
    --bs-btn-bg: var(--color-af-green-500);
    --bs-btn-border-color: var(--color-af-brown-900);
    --bs-btn-hover-bg: var(--color-af-brown-500);
    --bs-btn-hover-border-color: var(--color-af-brown-900);
    --bs-btn-color: var(--color-white);
    --bs-btn-hover-color: var(--color-white);
    border-radius: 999px;
    font-weight: 600;
    padding: .65rem 1.6rem;
    box-shadow: 0 3px 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
    transition: background-color .18s, transform .12s, box-shadow .12s;
}

.afro-detail #orderContent button[type="submit"]:active,
.afro-detail #orderContent .btn-success:active {
    transform: translateY(3px);
    box-shadow: 0 0 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
}

/* --- plovoucí ikona košíku ----------------------------------------------
   Tvarem i barvou navazuje na zelené kolečko hamburgeru v hlavičce.

   ⚠️ NA KONTEJNERU NEJDE POUŽÍT `display:flex`. Portál jeho viditelnost
   přepíná bootstrapími třídami `.d-none` / `.d-block`, a ty nesou `!important`,
   takže by flex nikdy nevyhrál — kolečko zůstalo `display:block`, ikona se
   zarazila vlevo a odznak s počtem se pozicoval mimo. Centrování proto dělá
   odkaz uvnitř, který se roztáhne přes celé kolečko. */
.afro-site .cart-icon-container {
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 999px;
    background-color: color-mix(in oklab, var(--color-af-green-500) 90%, transparent);
    box-shadow: 0 12px 30px -8px color-mix(in oklab, var(--color-af-green-500) 90%, transparent);
    color: var(--color-af-beige-300);
}

.afro-site .cart-icon-container > a {
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    width: 100%;
    height: 100%;
    color: var(--color-af-beige-300);
    text-decoration: none;
}

.afro-site .cart-icon-container > a:hover {
    color: var(--color-white);
}

/* Ikona má v šabloně inline `style="font-size: 2em"`, což CSS bez `!important`
   nepřebije. `line-height: 1` je nutné — s nulou přerostl box ikony odkaz. */
.afro-site .cart-icon-container .bi {
    font-size: 1.5rem !important;
    line-height: 1;
}

/* Odznak s počtem sedí na horním pravém okraji kolečka. */
.afro-site .cart-icon-container .item-count {
    position: absolute;
    top: -.15rem;
    right: -.15rem;
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 1.4rem;
    height: 1.4rem;
    padding-inline: .3rem;
    border-radius: 999px;
    border: 2px solid var(--color-af-beige-300);
    background-color: var(--color-af-red-500);
    color: var(--color-white);
    font-size: .7rem;
    font-weight: 700;
    line-height: 1;
}

/* --- karta plánku --------------------------------------------------------
   `#home` má z generické šablony bootstrapí rámeček a bílé pozadí; na béžovém
   podkladu to byl jediný bílý blok na stránce. */
.afro-detail #myTabContent #home {
    background-color: var(--color-af-beige-400);
    border-color: color-mix(in oklab, var(--color-af-brown-900) 12%, transparent) !important;
    border-radius: 1.25rem;
    padding-block: 1rem;
}

/* --- „Rozbalit popis" ----------------------------------------------------
   Vedlejší akce, takže obrysové tlačítko (`btn-outline` z předlohy),
   ne plné jako nákup. */
.afro-detail .event-detail-description-column-1 .btn-info {
    --bs-btn-bg: transparent;
    --bs-btn-color: var(--color-af-brown-900);
    --bs-btn-border-color: var(--color-af-brown-900);
    --bs-btn-hover-bg: var(--color-af-brown-900);
    --bs-btn-hover-color: var(--color-af-beige-300);
    --bs-btn-hover-border-color: var(--color-af-brown-900);
    border-radius: 999px;
    font-weight: 600;
    padding: .45rem 1.2rem;
}


/* ==========================================================================
   Pojistka proti falešnému tučnění Sekuya
   ==========================================================================
   Sekuya je JEDNOVÁHOVÝ display font — má pouze 400 (Fontsource:
   `"weights":[400], "variable":false`; jsDelivr vrací pro 700 i 800 chybu 404).
   Jakmile na ni něco pustí `font-weight: bold` / 600+, prohlížeč tučný řez
   dopočítá sám a písmo se opticky rozmaže.

   Stává se to zákeřně: HTML generuje portál a schované `<strong>`, `<b>` nebo
   `<th>` v něm dědí 700 z prohlížečového stylu, i když v našem CSS je 500.
   Přesně takhle „zmazatěl" nadpis objednávky.

   `font-synthesis-weight: none` prohlížeči dopočítávání zakáže — text pak
   zůstane v reálné váze 400 místo aby se rozmazal. Platí jen pro místa, kde
   Sekuya skutečně používáme; SUSE má všechny váhy 100–900, takže se jí to
   netýká.

   ⚠️ Kdyby někdy bylo potřeba v tomhle layoutu opravdu tučné písmo,
   nesahej po Sekuya — použij SUSE (`var(--font-sans)`).
   ========================================================================== */
.afro-site h1,
.afro-site h2,
.afro-site h3,
.afro-detail #eventContent .accordion-item h6,
.afro-detail #eventContent .accordion-item h6 strong,
.afro-detail .cart-item .info .title,
.afro-detail #orderContent .accordion-button,
.afro-detail #orderContent .accordion-button strong,
.afro-detail #orderContent legend,
.afro-detail #orderContent .table thead th {
    font-synthesis-weight: none;
}

/* ==========================================================================
   Typografie popisu události
   ==========================================================================
   Popis píše promotér v editoru, takže do něj přijde libovolné HTML — nadpisy
   h1–h6, odstavce, číslované i odrážkové seznamy, odkazy. Tady se mu jen
   nastaví rytmus a měřítko; do obsahu se nezasahuje.
   ========================================================================== */

/* --- nadpisy -------------------------------------------------------------
   ⚠️ ZÁMĚRNĚ SUSE, ne Sekuya. Obecné pravidlo `.afro-site h1,h2,h3` dává
   nadpisům Sekuya, což je správně pro titulek stránky, ale ne pro text uvnitř
   popisu: Sekuya je verzálkový display font, takže h1–h3 v něm vyšly obrovské,
   celé velkými písmeny a opticky splývaly — zatímco h4–h6 (které to pravidlo
   nechytá) zůstaly v SUSE. Popis tím dostal dvě různé sady nadpisů.

   Navíc Sekuya nemá tučný řez (viz pojistka `font-synthesis-weight` výše),
   takže nadpisy v ní nejdou odlišit vahou. SUSE má 100–900. */
.afro-detail .event-detail-description-column-1 :is(h1, h2, h3, h4, h5, h6) {
    font-family: var(--font-sans);
    font-weight: 700;
    color: var(--color-af-brown-900);
    line-height: 1.25;
    margin-top: 2rem;      /* nadpis potřebuje vzduch nad sebou, Bootstrap dává 0 */
    margin-bottom: .6rem;
}

/* První nadpis v popisu odsazení shora nechce — navazuje rovnou na hero. */
.afro-detail .event-detail-description-column-1 > :is(h1, h2, h3, h4, h5, h6):first-child {
    margin-top: 0;
}

.afro-detail .event-detail-description-column-1 h1 { font-size: 1.75rem; }
.afro-detail .event-detail-description-column-1 h2 { font-size: 1.5rem; }
.afro-detail .event-detail-description-column-1 h3 { font-size: 1.3rem; }
.afro-detail .event-detail-description-column-1 h4 { font-size: 1.15rem; }
.afro-detail .event-detail-description-column-1 h5 { font-size: 1.05rem; }
.afro-detail .event-detail-description-column-1 h6 { font-size: 1rem; }

/* --- odstavce ------------------------------------------------------------ */
.afro-detail .event-detail-description-column-1 p {
    line-height: 1.65;
    margin-bottom: 1rem;
}

/* --- seznamy -------------------------------------------------------------
   ⚠️ Tohle je oprava, ne kosmetika. Tailwind preflight v `afrostrava.css`
   nastavuje `ol,ul{list-style:none}` a Bootstrap to nevrací zpátky, takže
   seznamy v popisu přišly ÚPLNĚ o čísla i odrážky — zůstal jen odsazený text.
   (Jinde je `list-style:none` žádoucí, proto se vrací adresně jen tady.) */
.afro-detail .event-detail-description-column-1 ol {
    list-style: decimal;
}

.afro-detail .event-detail-description-column-1 ul {
    list-style: disc;
}

.afro-detail .event-detail-description-column-1 :is(ol, ul) {
    padding-left: 1.5rem;
    margin-bottom: 1rem;
}

.afro-detail .event-detail-description-column-1 li {
    line-height: 1.65;
    margin-bottom: .3rem;
}

.afro-detail .event-detail-description-column-1 li::marker {
    color: var(--color-af-red-500);
}

/* Vnořené seznamy — jiný typ odrážky a bez zdvojené spodní mezery. */
.afro-detail .event-detail-description-column-1 :is(ol, ul) :is(ol, ul) {
    margin-top: .3rem;
    margin-bottom: 0;
}

.afro-detail .event-detail-description-column-1 ul ul { list-style: circle; }
.afro-detail .event-detail-description-column-1 ol ol { list-style: lower-alpha; }

/* --- ostatní ------------------------------------------------------------- */
.afro-detail .event-detail-description-column-1 a {
    color: var(--color-af-red-500);
    text-decoration: underline;
    text-underline-offset: 2px;
}

.afro-detail .event-detail-description-column-1 hr {
    border-color: color-mix(in oklab, var(--color-af-brown-900) 18%, transparent);
    margin-block: 2rem;
    opacity: 1;
}

/* --- rozbalený popis (sekundární popis) ----------------------------------
   Obsah se vykresluje do `#description`, které Bootstrap sbaluje třídou
   `.collapse`. Ve sbaleném stavu má `display:none`, takže odsazení nedělá
   mezeru pod tlačítkem — projeví se až po rozbalení. */
.afro-detail .event-detail-description-column-1 #description {
    margin-top: 1.5rem;
}

/* Videa v popisu.
   Promotér je vkládá jako YouTube embed s `width="100%" height="315"`, často
   několik v jednom odstavci. `<iframe>` je ale INLINE prvek, takže se dvě
   stoprocentní videa naskládala těsně na sebe bez jakéhokoliv odstupu —
   mezera mezi nimi byla jen zalomení řádku, které se v HTML sbalí.

   Řešení: z iframu udělat blok s vlastní spodní mezerou. Zároveň se pevná
   výška 315 px nahrazuje poměrem 16:9 — u videa přes celou šířku obsahu
   by jinak zůstal nesmyslně nízký pruh s černými okraji. */
.afro-detail .event-detail-description-column-1 iframe {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    aspect-ratio: 16 / 9;
    border: 0;
    border-radius: 1rem;
    margin-bottom: 1.25rem;
}

.afro-detail .event-detail-description-column-1 iframe:last-child {
    margin-bottom: 0;
}

/* ==========================================================================
   Prodejní CTA v hlavičce z obsahového klíče `header.cta`
   ==========================================================================
   Hodnota klíče je POUZE holý odkaz, tak jak ho vyrobí TinyMCE:

       <p><a href="/site/">Vstupenky</a></p>

   Vzhled tlačítka dělá tenhle blok, ne hodnota klíče — hodnota typu `html`
   prochází při uložení HTMLPurifierem, který zahodí `style` (tedy
   `--btn-text-color`) i `aria-hidden`. Kdyby si měl promotér nosit celé třídy
   tlačítka v obsahu, po prvním uložení v Editoru by se rozpadlo.
   Ověřeno spuštěním purifieru nad původním markupem.
   ========================================================================== */

/* TinyMCE obaluje obsah do `<p>` a nejde to vypnout (config nemá
   `forced_root_block: ''`). `display: contents` obal vyřadí z layoutu, takže
   se odkaz chová, jako by byl přímo ve flexu hlavičky. */
.afro-header-cta > p {
    display: contents;
    margin: 0;
}

/* Tvar a barvy odpovídají `btn-solid btn-red` z předlohy. Zapsané ručně,
   protože třídy předlohy na odkaz z obsahu nedosáhnou. */
.afro-header-cta a {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    border: 1px solid var(--color-af-brown-900);
    border-radius: 999px;
    background-color: var(--color-af-red-500);
    color: var(--color-white);
    padding: .5rem 1.25rem;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
    box-shadow: 0 3px 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
    transition: background-color .18s, transform .12s, box-shadow .12s;
}

@media (min-width: 48rem) {
    .afro-header-cta a { gap: .5rem; }
}

.afro-header-cta a:hover {
    background-color: var(--color-af-orange-500);
    color: var(--color-white);
}

.afro-header-cta a:active {
    transform: translateY(3px);
    box-shadow: 0 0 0 0 color-mix(in oklab, var(--color-af-brown-900) 90%, transparent);
}

/* Ikona vstupenky. Přes `::before`, protože `<span class="i-ph-ticket">`
   z hodnoty klíče by purifier sice nechal, ale promotér by ho musel psát ručně
   ve zdrojovém kódu — a při každé editaci textu by hrozilo, že o něj přijde.
   Maska je stejná jako u `.i-ph-ticket` v `afrostrava.css`. */
.afro-header-cta a::before {
    content: "";
    flex: none;
    width: 1.15em;
    height: 1.15em;
    background-color: currentColor;
    -webkit-mask: var(--af-icon-ticket) no-repeat center / contain;
    mask: var(--af-icon-ticket) no-repeat center / contain;
    --af-icon-ticket: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 256 256'%3E%3Cpath fill='currentColor' d='M232 104a8 8 0 0 0 8-8V64a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a8 8 0 0 0 8 8a24 24 0 0 1 0 48a8 8 0 0 0-8 8v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a8 8 0 0 0-8-8a24 24 0 0 1 0-48M32 167.2a40 40 0 0 0 0-78.4V64h56v128H32Zm192 0V192H104V64h120v24.8a40 40 0 0 0 0 78.4'/%3E%3C/svg%3E");
}

/* Kdyby promotér napsal víc odstavců, vznikla by dvě tlačítka vedle sebe.
   Zobrazuje se jen první — v popisu klíče je to napsané, tohle je pojistka. */
.afro-header-cta > p ~ p {
    display: none;
}

/* ==========================================================================
   Sloupce odkazů v patičce z obsahových klíčů `footer.column-1..4`
   ==========================================================================
   Hodnota klíče je holá struktura, jakou vyrobí TinyMCE — bez jediné třídy:

       <h4>Organizace</h4>
       <ul><li><a href="/site/">Vstupenky</a></li>…</ul>

   Původní markup měl vzhled v utility třídách přímo na `h4` a `ul`. Ty ale
   promotér v editoru psát nebude (a kdyby je vypsal do zdrojového kódu, při
   další editaci by o ně přišel), takže se sem přenesly 1:1 jako CSS:

       h4  →  mb-4 text-xs font-medium uppercase
       ul  →  text-af-beige-300/70 flex flex-col gap-y-1 text-[0.90625rem]
       a   →  hover:text-af-yellow-500
   ========================================================================== */
.afro-footer-nav h4 {
    margin-bottom: 1rem;        /* mb-4 */
    font-size: .75rem;          /* text-xs */
    line-height: 1.3333;        /* = calc(1/.75), patří k text-xs — viz poznámka u .afro-nav */
    font-weight: 500;           /* font-medium */
    text-transform: uppercase;
    color: var(--color-af-beige-300);
}

.afro-footer-nav ul {
    display: flex;
    flex-direction: column;
    gap: .25rem;                /* gap-y-1 */
    font-size: .90625rem;
    color: color-mix(in oklab, var(--color-af-beige-300) 70%, transparent);
    /* reset odsazení a odrážek řeší `.afro-site footer ul` výš */
}

.afro-footer-nav a {
    color: inherit;
    text-decoration: none;
}

.afro-footer-nav a:hover {
    color: var(--color-af-yellow-500);
}

/* Kdyby promotér nadpis smazal, ať se sloupec nerozjede proti sousedům. */
.afro-footer-nav > :first-child {
    margin-top: 0;
}

/* ==========================================================================
   Rozbalovací menu z obsahového klíče `menu.items`
   ==========================================================================
   Hodnota klíče je holý odrážkový seznam odkazů z TinyMCE, bez jediné třídy:

       <ul><li><a href="/site/">Vstupenky</a></li>…</ul>

   Původní markup měl u každé položky navíc inline SVG „bublinu" a podtržení
   přes `before:` utility na odkazu. Obojí se přeneslo sem do pseudoelementů —
   promotér tak jen přidává, ubírá a přeřazuje položky a o vzhled se nestará.
   ========================================================================== */
.afro-nav ul {
    font-family: var(--font-block);
    display: flex;
    flex-direction: column;
    gap: 1rem;                  /* gap-y-4 */
    font-size: 1.25rem;         /* text-xl */
    line-height: 1.4;           /* = calc(1.75/1.25), viz níž */
    font-weight: 500;
    list-style: none;
    margin: 0;
    padding: 0;
}

/* ⚠️ `line-height` se musí přenášet spolu s velikostí písma. Tailwindí utility
   `text-*` nastavují OBOJE (`.text-5xl{font-size:var(--text-5xl);line-height:…}`)
   a hodnoty jsou v tématu předlohy: xl 1.75/1.25, 3xl 1.2, 4xl 2.5/2.25, 5xl 1.
   Když se přepíše jen `font-size`, zdědí se řádkování po okolí (1.5) a seznam
   povyroste — menu tím bylo o 176 px vyšší než v předloze (856 místo 680 px). */
@media (min-width: 48rem) { .afro-nav ul { gap: 1.5rem;  font-size: 1.875rem; line-height: 1.2; } }      /* md */
@media (min-width: 64rem) { .afro-nav ul { gap: 2.25rem; font-size: 2.25rem;  line-height: 1.1111; } }   /* lg */
@media (min-width: 80rem) { .afro-nav ul { font-size: 3rem; line-height: 1; } }                          /* xl */
@media (min-width: 90rem) { .afro-nav ul { gap: 2.5rem; } }                                              /* 2xl */

.afro-nav li {
    display: flex;
    align-items: center;
    gap: .75rem;                /* gap-x-3 */
}

/* Žlutá „bublina" před položkou. V předloze je to inline SVG s `opacity-0`,
   které se rozsvítí jen u aktivní položky — tady je z toho maska v `::before`,
   aby ji promotér nemusel mít v obsahu. Místo si drží vždy, takže se seznam
   při přepnutí aktivní položky nerozskáče. */
.afro-nav li::before {
    content: "";
    flex: none;
    width: 1.5rem;              /* w-6 */
    height: 35px;               /* viz poznámka níž — NE poměr viewBoxu */
    opacity: 0;
    background-color: var(--color-af-yellow-500);
    transition: opacity .24s;
    -webkit-mask: var(--af-nav-blob) no-repeat center / contain;
    mask: var(--af-nav-blob) no-repeat center / contain;
    --af-nav-blob: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='61' height='35' viewBox='0 0 61 35'%3E%3Cpath fill='%23000' d='M37.1777 34.1358C27.7577 32.3458 18.2477 30.9357 8.94771 28.6457C1.28771 26.7557 -0.712277 23.6857 0.207723 16.7057C0.487723 14.5557 1.77771 11.8757 3.47771 10.6757C16.7877 1.25573 31.5177 -2.57426 47.5177 1.80574C57.4077 4.51574 61.5077 10.7357 60.7477 19.6757C60.2277 25.7557 55.8777 30.6157 48.9477 32.1157C45.1877 32.9257 41.2577 32.9657 37.4077 33.3457C37.3277 33.6057 37.2477 33.8657 37.1677 34.1257L37.1777 34.1358Z'/%3E%3C/svg%3E");
}

/* ⚠️ Výška 35 px je schválně, a NENÍ to poměr stran viewBoxu (61×35 by při
   šířce 24 px dalo 13,8 px). V předloze je bublina inline `<svg>` s atributy
   `width="61" height="35"` a třídou `w-6`/`lg:w-10` — ta přepíše jen ŠÍŘKU,
   takže element si pořád rezervuje 35 px výšky. Na desktopu to nevadí (řádek
   textu je vyšší), ale na mobilu tím položky dostávají víc vzduchu.
   Bez toho bylo menu na 390 px o 49 px nižší než v předloze (364 vs 413).
   Samotná kresba se nemění — maska má `contain`, takže se vycentruje. */
@media (min-width: 64rem) {
    .afro-nav li::before { width: 2.5rem; }   /* lg:w-10 — výška zůstává 35 px */
}

.afro-nav li[data-active]::before {
    opacity: 1;
}

/* Menu se zobrazuje jen v rozbaleném stavu (`group-data-nav-open:flex` na obalu),
   kde je pozadí tmavě hnědé — proto rovnou béžová, ne hnědá se stavovou variantou. */
.afro-nav a {
    position: relative;
    color: var(--color-af-beige-300);
    font-weight: 500;
    text-decoration: none;
}

/* Podtržení, které vyjíždí zleva doprava. V předloze je to `before:` na odkazu;
   tady `::after`, protože `::before` už patří bublině na `<li>`. */
.afro-nav a::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -.375rem;
    width: 0;
    height: .1875rem;
    transform: translateX(-50%);
    border-radius: 999px;
    background-color: var(--color-af-yellow-500);
    transition: width .24s;
}

@media (min-width: 64rem) {
    .afro-nav a::after { bottom: -.75rem; }   /* lg:before:-bottom-3 */
}

.afro-nav a:hover::after,
.afro-nav li[data-active] a::after {
    width: 100%;
}

.afro-nav a:hover {
    color: var(--color-af-beige-300);   /* hover nesmí přebít obecné pravidlo pro odkazy */
}

/* --- rozbalené menu se nesmí useknout -----------------------------------
   Panel menu je `position: absolute` uvnitř fixní hlavičky a začíná 15 dvh
   (na `lg` 5,5 dvh) od horního okraje. Když je položek víc nebo je okno nízké,
   spodek vyteče mimo obrazovku — a protože se při otevření menu nastavuje
   `body { overflow: hidden }`, nedá se k němu doscrollovat VŮBEC.

   Reálně to nebyl okrajový případ: na běžném 1440×900 chyběla poslední položka
   (menu přetékalo o 42 px), na 1280×500 o 388 px.

   Panel proto dostává strop podle výšky okna a vlastní scroll. Počítá se ze
   stejných hodnot, jaké má panel v `top-*`, plus 2 rem rezervy dole.
   `overscroll-behavior: contain` brání tomu, aby se scroll na konci seznamu
   přenesl na stránku pod menu. */
.afro-nav-panel {
    max-height: calc(100dvh - 15dvh - 2rem);
    overflow-y: auto;
    /* Podtržení poslední položky (`.afro-nav a::after`) visí 12 px POD odkazem,
       takže bez rezervy přeteklo panel o 7 px a posuvník naskočil i tam, kde se
       menu pohodlně vejde (1920×1080). Odsazení je na PANELU, ne na `<nav>` —
       výška `<nav>` je schválně shodná s předlohou na pixel a nesmí se hnout. */
    padding-bottom: 1rem;
    overscroll-behavior: contain;
    scrollbar-width: thin;
    scrollbar-color: color-mix(in oklab, var(--color-af-beige-300) 45%, transparent) transparent;
}

@media (min-width: 64rem) {
    .afro-nav-panel { max-height: calc(100dvh - 5.5dvh - 2rem); }
}

/* Posuvník ve stylu menu — výchozí systémový na hnědém podkladu ruší.
   `scrollbar-width`/`scrollbar-color` výše pokrývá Firefox, tohle WebKit. */
.afro-nav-panel::-webkit-scrollbar {
    width: 6px;
}

.afro-nav-panel::-webkit-scrollbar-track {
    background: transparent;
}

.afro-nav-panel::-webkit-scrollbar-thumb {
    border-radius: 999px;
    background-color: color-mix(in oklab, var(--color-af-beige-300) 45%, transparent);
}

.afro-nav-panel::-webkit-scrollbar-thumb:hover {
    background-color: color-mix(in oklab, var(--color-af-beige-300) 70%, transparent);
}

/* --- odkazy v objednávkovém formuláři -----------------------------------
   Typicky odkaz na obchodní podmínky u zaškrtávátka. Markup generuje SDÍLENÁ
   komponenta `templates/components/order-form.html.twig`, do které se sahat
   nesmí (používají ji všechny microsity), takže se řeší jen odsud.

   Bez tohohle pravidla odkaz splýval s textem: obecné
   `:where(.afro-site) a { color: inherit; text-decoration: none }` mu vzalo
   barvu i podtržení, takže na něm nebylo poznat, že je klikací.

   `:not([class*="btn"])` vyjímá tlačítka — bez toho by je selektor
   (specificita 1,2,1) přebil a „Potvrdit objednávku" by zčervenalo. */
.afro-detail #orderContent a:not([class*="btn"]) {
    color: var(--color-af-red-500);
    text-decoration: underline;
    text-underline-offset: 2px;
    font-weight: 600;
}

.afro-detail #orderContent a:not([class*="btn"]):hover {
    color: var(--color-af-orange-500);
}

/* --- spodní řádek patičky (skupina „Copyright") -------------------------
   Obsah jde z klíčů, takže odkaz uvnitř nemá třídy — původní
   `hover:text-af-yellow-500` se přenáší sem. */
.afro-copyright a {
    color: inherit;
    text-decoration: none;
}

.afro-copyright a:hover {
    color: var(--color-af-yellow-500);
}
