/* → docs/CLIENTSFE.md #fe-001 */
:root {
  --page-bg: #F5F1EA; --container-bg: #FFFFFF; --surface: #FFFFFF;
  --primary: #1A1A1A; --border: #E6DFD2; --bg-light: #F3ECE2;
  --text-primary: #2A2420; --text-secondary: #7A6F61; --disabled: #9CA3AF;
  --ok: #21544F; --ok-rgb: 33, 84, 79; --ok-solid: #21544F; --ok-solid-hover: #163D39; --ok-solid-text: white;
  --ok-tint: #E3ECE9; --ok-tint-border: #9CCFC2; --ok-tint-text: #145045;
  --danger: #B3261E; --danger-hover: #8C1D17;
  --chip-strong-bg: #1A1A1A; --chip-strong-bg-hover: #332E29; --chip-strong-text: #FFFFFF;
  --shadow-sm: 0 1px 3px rgba(26,26,26,.10); --shadow-md: 0 4px 14px rgba(91,42,76,.10); --shadow-tint-rgb: 91, 42, 76;
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  --font-display: 'Playfair Display', serif;
  --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px;
}
body{margin:0;background:var(--page-bg);font-family:var(--font-body);color:var(--text-primary)}
.container{max-width:1100px;margin:0 auto;padding:0 24px}
.section{padding:24px 0 0 0;}
img{max-width:100%;border-radius:12px}
.header{position:sticky;top:0;background:var(--container-bg);border-bottom:1px solid var(--border);z-index:1000}
/* Pojistka: position:sticky u hlavičky přestane fungovat, jakmile některý
   PŘEDEK dostane overflow hidden/auto/scroll — sticky se pak váže na něj
   místo na okno a banner při scrollu ujede pryč. Přidáno v době, kdy
   Elfsight vykresloval plovoucí odznak přes portál na <body>; widget je
   dnes inline v hlavičce, takže je to nejspíš zbytečné a dá se to smazat,
   až bude potvrzené, že hlavička drží.
   Výjimka .no-scroll je záměrná: tu si nasazuje mobilní menu (js/main.js),
   aby pod otevřeným panelem zamklo scrollování stránky. */
html { overflow: visible !important; }
body:not(.no-scroll) { overflow: visible !important; }
/* Zámek scrollování pod otevřeným menu (.no-scroll) sebere svislý scrollbar
   a obsah se o jeho šířku roztáhne — na PC to bylo vidět jako odskočení
   celé stránky. scrollbar-gutter drží to místo rezervované pořád, takže
   zmizení scrollbaru už nic nepřepočítává. Řeší to bez JS a bez dopočítávání
   šířky scrollbaru, které bývalo obvyklým obezličkou.
   Na mobilech se nic nemění — tam scrollbar místo nezabírá. */
html { scrollbar-gutter: stable; }
/* .nav{display:flex;justify-content:space-between;align-items:center;padding:12px 0}*/
.nav{position:relative;display:flex;justify-content:right;align-items:center;padding:12px 0;flex-wrap:wrap;gap:0 10px}
.nav-reserve-btn{font-size:14px;padding:8px 16px;white-space:nowrap}
/* .btn-small se v menu používalo, ale nikde nebylo definované — tlačítka
   tak brala plné odsazení z .btn (12×18px). S pěti položkami v menu už se
   hlavička do 720px kontejneru nevešla. flex-wrap výš je pojistka: kdyby
   se to na některé šířce přece jen nevešlo, menu se zalomí pod logo
   místo aby stránka přetekla do strany. */
.btn-small { padding: 7px 12px; font-size: 14px; line-height: 1.2; }
/* Odznaky s hodnocením v hlavičce — vlastní prvky, ne cizí widget.
   `margin-right: auto` drží skupinu vlevo; nav tlačí obsah doprava.
   Dřív tu byl embed Elfsightu zmenšovaný zoomem, protože měl vlastní pevnou
   velikost — tyhle se sázejí rovnou v cílové, takže žádné škálování
   ani breakpointy nepotřebují.
   Obsah je zkrácený na „5/50": zdroj i slovo „recenzí" nese popisek, aby
   odznaky v hlavičce zabraly co nejmíň. Proto taky odpadly breakpointy,
   které dřív ty dva údaje postupně schovávaly. */
.nav-reviews-group { margin-right: auto; display: flex; align-items: center; gap: 5px; }
.nav-reviews {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 4px 7px; border: 1px solid var(--border); border-radius: var(--radius-sm);
    background: var(--surface); color: var(--text-primary);
    font-size: 12px; line-height: 1; text-decoration: none; white-space: nowrap;
}
.nav-reviews:hover { border-color: var(--ok); }
/* Logo zdroje místo hvězdy. 16 px je minimum, které Google pro svou značku
   uvádí — menší už se nesmí. Nepřebarvuje se ani nijak neupravuje. */
.nav-reviews__logo { width: 16px; height: 16px; flex: none; display: block; object-fit: contain; }
.nav-reviews__value { font-weight: 700; }
/* Na mobilu odpadá číselné hodnocení — tutéž informaci nesou hvězdičky
   vedle něj (kreslí se na desetinu přesně), takže číslo jen ubíralo místo
   v úzké liště. Počet recenzí zůstává: ten z hvězdiček vyčíst nejde.
   Hodnota se tím neztrácí ani pro odečítač obrazovky — nese ji aria-label
   celého odkazu. */
@media (max-width: 640px) {
    .nav-reviews__rating { display: none; }
    /* Oba odznaky pod sebe do jednoho sloupce — v úzké liště se vedle sebe
       nevešly a tlačily na logo. Skupina zůstává JEDNOU položkou hlavičky,
       takže zbytek (logo, rezervace, přepínač) pokračuje na řádku vedle ní.
       align-items: stretch, ať jsou oba odznaky stejně široké a nezubatily
       levý okraj. */
    .nav-reviews-group { flex-direction: column; align-items: stretch; gap: 3px; }
    /* Odznak na úzkém displeji utažený — mezery a odsazení na polovinu.
       Logo zdroje zůstává 16 px: menší ho Google pro svou značku nedovoluje. */
    .nav-reviews { gap: 2px; padding: 2px 4px; }
    .nav-reviews__stars { margin: 0; }

    /* Celá hlavička na JEDEN řádek. Bez toho se zalomila a přepínač motivu
       s hamburgerem spadly pod logo. Ušetřit se muselo zhruba 60 px, což
       jedno opatření neuneslo — proto čtyři drobná naráz:
       mezery mezi položkami, velikost loga, odsazení tlačítka a jeho text. */
    .nav { gap: 0 5px; flex-wrap: nowrap; }
    /* flex: none je tu KVŮLI PŘEKRYVU, ne kvůli místu. Bez něj se <a class="logo">
       jako flex položka smrskla pod šířku vlastního obrázku (53 px vs. 89 px),
       obrázek přetekl doprava a tlačítko „Rezervovat", které stojí v DOM za ním,
       ho přemalovalo — na S23 Ultra o 30 px. Měřeno stejně na 360, 384 i 412 px. */
    .logo { flex: none; }
    /* Odsazení obrázku dolů z 12/18 px: v liště, kde se počítá každý pixel,
       je 36 px vodorovného paddingu kolem 60px loga zbytečný luxus. */
    .header .logo-img { width: 60px; height: auto; padding: 8px 6px; }
    .nav-reserve-btn { font-size: 13px; padding: 7px 8px; }
    /* Hamburger je 44px terč, ale vodorovně z něj tolik místa nepotřebuje —
       svislá výška (a tedy plocha pro palec) zůstává. */
    .hamburger { width: 34px; }
    /* „Rezervujte zde" → „Rezervovat": ušetří přes 25 px a nic neubírá na
       srozumitelnosti, protože tlačítko stojí vedle loga studia. */
    .nav-reserve-long { display: none; }
}
/* Nad mobilem se zobrazuje plný text, kratší je schovaný. */
.nav-reserve-short { display: none; }
@media (max-width: 640px) { .nav-reserve-short { display: inline; } }
/* Hvězdičky za hodnotou. Dvě vrstvy nad sebou: spodní šedá pětice udává
   šířku, horní žlutá je ořezaná na --star-fill (procenta z 5). Necelé
   hodnoty tak nepotřebují vlastní půlhvězdičkový glyf.
   Pozor: obě vrstvy musí mít IDENTICKOU typografii, jinak se rozejdou. */
.nav-reviews__stars {
    position: relative; display: inline-block; flex: none;
    color: var(--border); font-size: 11px; line-height: 1;
    letter-spacing: 0.5px; white-space: nowrap; margin: 0 1px;
}
.nav-reviews__stars-on {
    position: absolute; inset: 0 auto 0 0; overflow: hidden;
    width: var(--star-fill, 100%); color: #f5b301; white-space: nowrap;
}
.logo a { justify-content: left; text-decoration: none;}
.logo img{max-height:100px}
.motto {text-align: center; font-style: italic; color: var(--primary); font-family: var(--font-display); margin-top: 8px; font-size: 1.4rem;}
.btn {padding: 12px 18px;border-radius: var(--radius-md);text-decoration: none}
.btn-primary{background:var(--ok-solid);color:var(--ok-solid-text)}
/* ===== FOTOGRAFICKÉ POZADÍ STRÁNKY =====
   Snímek provozovny za obsahem — potisk, ne obrázek: má dát stránce
   materiál salonu, ne přitáhnout pohled. Proto tak nízké krytí.

   z-index: -1 (ne 0): vrstva se tím dostane NAD podklad plátna (barvu
   z body), ale POD běžný obsah v toku. Bez toho by fixní vrstva ležela
   přes text, protože sekce stránky nemají vlastní z-index.

   position: fixed na VLASTNÍM divu, ne background-attachment: fixed na
   body — ten iOS Safari kreslí ve velikosti dokumentu, takže by se snímek
   na telefonu roztáhl přes celou délku stránky.

   KAŽDÝ MOTIV MÁ VLASTNÍ SNÍMEK, ne jeden přebarvovaný filtrem. Světlý
   nese levou půlku salonu (mycí box a zrcadlo, prosvětlené do krémové),
   tmavý pravou (křeslo a hodiny, potopené do černé). Důvod je prostý:
   jeden světlý snímek odbarvený na 7 % se na skoro černém podkladu
   (--page-bg #0A0908 v tmavém motivu) ztratí úplně — byla to tedy
   ozdoba, kterou v noci nikdo neviděl.
   Snímky jsou dodané už nagradované, takže se tu nic neodbarvuje;
   grayscale zmizel a mění se jen krytí. Když soubor chybí, nevykreslí
   se nic (je to CSS pozadí, ne <img>) a stránka drží dál. */
:root {
    --pozadi-foto: url('/images/assets/bg-light.jpg');
    --pozadi-kryti: .85;
}
html[data-theme="dark"] {
    --pozadi-foto: url('/images/assets/bg-dark.jpg');
    --pozadi-kryti: .55;
}
.pozadi {
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    display: flex;
    justify-content: center;
}
.pozadi::before {
    content: "";
    /* Šířka obsahu (.container 1100px), na mobilu celá obrazovka. */
    width: min(100%, 1100px);
    height: 100%;
    background: var(--pozadi-foto) center center / cover no-repeat;
    /* cover drží poměr stran a případný přebytek ořízne — na širokých
       obrazovkách se tedy snímek ořízne, nikdy nedeformuje. */
    opacity: var(--pozadi-kryti);
    transition: opacity .3s ease;
    /* Boční přechod: bez něj by pruh široký 1100px končil na širokém
       monitoru viditelnou svislou hranou. */
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 14%, #000 86%, transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0, #000 14%, #000 86%, transparent 100%);
}
/* Kdo si vyžádal vyšší kontrast, chce číst, ne obdivovat potisk. */
@media (prefers-contrast: more) {
    .pozadi { display: none; }
}
@media print {
    .pozadi { display: none; }
}

.hero {
    padding: 90px 0;
    color: #fff;
    background: url('/images/hero.png') left/contain no-repeat, linear-gradient(180deg, #E3E3E3 10%, var(--page-bg) 90%);
    text-align: center;
}
/* About grid */
.about-grid{display:grid;grid-template-columns:1fr 1fr 1fr;grid-template-rows:auto auto;gap:24px}
.about-text{grid-column:1 / span 2;grid-row:1;text-justify:inter-character;text-align:justify}
/* Zvýraznění v „O nás": tučné + podtržené. Podtržení v em, aby drželo
   poměr při jakékoli velikosti písma; offset kvůli dotažnicím (j, p, y). */
.about-text strong{font-weight:700;text-decoration:underline;text-decoration-thickness:.07em;text-underline-offset:.16em}
.footer { padding: 40px 0 28px; margin-top: 8px; border-top: 1px solid var(--border); }
.footer__inner{display: flex;justify-content: center;align-items: center;text-align: center;}
.footer__inner + .footer__inner { margin-top: 4px; }
/* Odstavce v patičce mají výchozí okraje prohlížeče (projekt nemá reset),
   které mezi oběma řádky dělaly nápadnou mezeru navíc. */
.footer__inner p { margin: 0; }
.footer__links { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; font-size: 14px; }
.footer__links a { color: var(--text-secondary); text-decoration: none; }
.footer__links a:hover { color: var(--primary); text-decoration: underline; }
.footer__sep { color: var(--text-secondary); opacity: .45; }
.footer__copy { font-size: 12.5px; color: var(--text-secondary); opacity: .8; }

/* Výchozí mobilní stav: menu skryté */
.menu {
    list-style: none;
    margin: 0;
    padding: 0;
    display: none; /* skryté, dokud není .is-open */
    flex-direction: column;
    gap: 18px;
}

/* Hamburger je viditelny na vsech sirkach. */
.hamburger {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    font-size: 1.4rem;
    line-height: 1;
    background: transparent;
    border: 0;
    cursor: pointer;
    /* Bez explicitní barvy má <button> UA default (černá) — v tmavém
       motivu byl hamburger neviditelný. */
    color: var(--text-primary, #2A2420);
}
/* Menu je odsuvny panel na VSECH sirkach — vodorovne menu v hlavicce
   uz neexistuje. Sest polozek plus logo, prepinac motivu a odznak
   hodnoceni se do 720px kontejneru nevejde, a zuzovat je donekonecna
   znamena jen posouvat okamzik, kdy se hlavicka zase zalomi. */
.menu {
    /* Panel visí na .nav (ta má position: relative), ne na okně. Pravý okraj
       tak LÍCUJE S HAMBURGEREM sám od sebe — 24 px je odsazení kontejneru,
       tedy přesně tam, kde hamburger končí.
       Dřív to počítal max(24px, calc((100vw - --page-w)/2 + 24px)). Fungovalo
       to, ale 100vw zahrnuje šířku scrollbaru, kdežto kontejner se centruje
       podle plochy bez něj — panel byl o půl scrollbaru vedle a při zamčení
       scrollování se to měnilo. Navázáním na .nav ta závislost mizí úplně.
       top: 100% = těsně pod navigací, takže není potřeba ani měřená výška
       hlavičky. */
    position: absolute;
    right: 24px;
    top: calc(100% + 6px);
    box-sizing: border-box;      /* projekt nemá reset — jinak by se šířka sčítala s paddingem */
    width: min(78vw, 230px);
    z-index: 1100; /* nad sticky headerem */
    /* TMAVÉ sklo v obou motivech, ne --surface-rgb podle schématu. Ve světlém
       motivu vycházelo světlé sklo, na kterém seděla tmavá tlačítka jako
       nálepky — panel působil jako slepenec dvou nesouvisejících vrstev.
       Tmavé sklo drží nabídku jako jeden celek a odkazy v ní můžou být
       prostý světlý text. Je to záměrný kontrast vůči stránce, ne chyba. */
    /* Zprůhledňuje se JEN výplň panelu (alfa v rgba), ne obsah — opacity
       na celém prvku by vyblednula i písmo.
       Sklo dělá hlavně ROZOSTŘENÍ, ne krytí: čím nižší krytí, tím víc je
       obsah pod panelem vidět, a silné rozostření zařídí, že se z něj
       stane barevná mlha místo čitelného textu pod textem.

       VÝCHOZÍ JE SVĚTLÉ SKLO pro světlý motiv, tmavé se přepíná níž. Světlé
       je přitom shovívavější: tmavý text na něm drží 16:1 nad světlou
       stránkou a 4,6:1 i nad tmavou fotkou, kdežto bílý text na tmavém skle
       se při stejném krytí dostane pod doporučenou hodnotu a nese ho stín. */
    --menu-glass:    rgba(255, 255, 255, 0.42);
    --menu-hairline: rgba(0, 0, 0, 0.10);
    --menu-shadow:   0 14px 38px rgba(0, 0, 0, 0.20);
    --menu-ink:      #191817;
    /* Světlá svatozář — pomáhá tam, kde pod sklem prosvítá tmavá fotka. */
    --menu-ink-glow: 0 1px 3px rgba(255, 255, 255, 0.85);
    --menu-hover:    rgba(0, 0, 0, 0.09);
    background: var(--menu-glass);
    -webkit-backdrop-filter: blur(26px) saturate(140%);
    backdrop-filter: blur(26px) saturate(140%);
    /* Vlas po obvodu odlepí panel od pozadí — v obou motivech jinou barvou,
       jinak by v tom svém splynul. */
    border: 1px solid var(--menu-hairline);
    border-radius: 14px;
    padding: 8px;
    box-shadow: var(--menu-shadow);
    display: flex;
    flex-direction: column;
    gap: 2px;
    /* Skrývá se průhledností a krátkým posunem, ne odsunutím za okraj okna:
       panel u okraje nestojí, takže by z něj po translateX(100%) zůstal
       viset kus. Chová se to teď jako rozbalovací nabídka pod hamburgerem,
       což odpovídá i tomu, odkud se otevírá.
       visibility se zpožďuje o délku přechodu, aby stihl doběhnout. */
    opacity: 0;
    visibility: hidden;
    transform: translateY(-6px);
    pointer-events: none;
    transition: opacity .18s ease, transform .18s ease, visibility 0s linear .18s;
}

/* Tmavý motiv: sklo se invertuje. Ne přebarvením textu — celá sada se
   vymění naráz, aby spolu sklo, vlas, stín i svatozář ladily. */
html[data-theme="dark"] .menu {
    --menu-glass:    rgba(18, 17, 15, 0.38);
    --menu-hairline: rgba(255, 255, 255, 0.14);
    --menu-shadow:   0 14px 38px rgba(0, 0, 0, 0.38);
    --menu-ink:      #fff;
    --menu-ink-glow: 0 1px 4px rgba(0, 0, 0, 0.75), 0 0 12px rgba(0, 0, 0, 0.45);
    --menu-hover:    rgba(255, 255, 255, 0.12);
}

/* Po kliknut  na hamburger */
.menu.is-open {
    opacity: 1;
    visibility: visible;
    transform: none;
    pointer-events: auto;
    transition: opacity .18s ease, transform .18s ease, visibility 0s;
}

/* Odkazy v panelu jsou ŘÁDKY NABÍDKY, ne tlačítka. V HTML si nesou třídy
   .btn .btn-small .btn-primary kvůli sdílenému vzhledu jinde na webu, tady
   se ale jejich pozadí i odsazení přebíjí — na tmavém skle by z nich byly
   tmavé pilulky na tmavém podkladu.
   Specificita stačí: .menu a je (0,1,1), .btn-primary i .btn-small jen
   (0,1,0), takže tahle pravidla vyhrávají bez !important.
   Barva je natvrdo světlá, protože sklo je tmavé v obou motivech. */
.menu a {
    display: block;
    background: transparent;
    color: var(--menu-ink);
    /* Svatozář drží písmo čitelné i tam, kde skrz průhledné sklo prosvítá
       pozadí opačného jasu. Kontrast samotných barev tam na doporučenou
       hodnotu nemusí dosáhnout, tohle je to, co rozdíl reálně dělá. */
    text-shadow: var(--menu-ink-glow);
    text-decoration: none;
    font-size: 15px;
    font-weight: 600;
    padding: 10px 12px;
    border-radius: 9px;
    transition: background-color .12s ease, color .12s ease;
}
/* Podbarvení místo podtržení — v seznamu se čte líp a nekmitá výška řádku. */
.menu a:hover, .menu a:focus-visible {
    background: var(--menu-hover);
    color: var(--menu-ink);
    text-decoration: none;
}


/* zablokování scrollu pod panelem (přidává JS) */
.no-scroll { overflow: hidden; }

/* Překryv NEZTMAVUJE — je to jen neviditelný zachytávač kliknutí vedle
   panelu. Dřív měl 55 % černé, jenže tím zabíjel celý smysl skla: panel
   je nad ním, takže se neprosvítala stránka, ale ztmavená plocha. Sklo se
   pak porovnávalo s překryvem místo s obsahem a působilo naopak světleji
   než okolí. Zavírání kliknutím vedle i zámek scrollování fungují dál. */
.menu-backdrop {
    position: fixed; inset: 0;
    background: transparent;
    z-index: 1090;              /* těsně pod panelem menu */
    display: none;
}
.menu-backdrop.is-open { display: block; }

@media(max-width:992px){.about-grid{grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto}.about-text{grid-column:1/span 2;grid-row:1}}
@media(max-width:640px){.about-grid{grid-template-columns:1fr}.about-text,.img1,.img2,.img3{grid-column:1;grid-row:auto}}

.card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    padding: 20px;
    box-shadow: var(--shadow-sm);
}

    .card h4 {
        margin-top: 0;
        font-family: var(--font-display);
        color: var(--primary);
    }

    .card .meta {
        display: flex;
        gap: 12px;
        margin: 8px 0 0 0;
    }

    .card .price {
        color: var(--ok);
        font-weight: 700;
        white-space: nowrap;
        margin-left: auto;
        text-align: right;
    }

    .card .time {
        color: var(--text-secondary);
    }

    .card .note {
        max-width: 65%;
        min-width: 65%;
        padding-right:10px;
        border-right: 1px solid var(--border);
        color: var(--text-secondary);
        text-align:justify;
    }

    .booking__info {
        margin-bottom: 24px;
        text-align:justify;
        max-width:50%;
        flex: 1 1 0;
        min-width: 0px;
    }

    .booking__info table {
        width: 100%;
        border-collapse: collapse;
        font-size: 1em;
        margin-top: 12px;
    }

    .booking__info td {
        padding: 4px 8px;
        border-bottom: 1px solid var(--border);
    }

    .booking__info tr:last-child td {
        border-bottom: none;
    }

    .booking-flex {
        display: flex;
        gap: 40px;
        align-items: flex-start;
    }

@media (max-width: 900px) {
    .booking-flex {
        flex-direction: column;
        gap: 0px;
    }

    .booking__info {
        margin-left: 0px;
        max-width:90%;
    }

    .about-text {
        margin-left: 12px;
        margin-right: 12px;
    }
}

    /* Lightbox pro mapu */
    .map-lightbox {
        position: fixed;
        inset: 0;
        background: rgba(30, 20, 40, 0.85);
        display: flex;
        align-items: center;
        justify-content: center;
        z-index: 2000;
    }

    .map-lightbox-content {
        position: relative;
        width: 90vw;
        max-width: 1200px;
        height: 80vh;
        background: var(--container-bg);
        border-radius: 16px;
        overflow: hidden;
        box-shadow: 0 8px 48px rgba(var(--shadow-tint-rgb),0.18);
        display: flex;
        flex-direction: column;
    }

        .map-lightbox-content iframe {
            width: 100%;
            height: 100%;
            border: 0;
            display: block;
        }

    .map-lightbox-close {
        position: absolute;
        top: 12px;
        right: 18px;
        background: var(--container-bg);
        border: none;
        font-size: 2rem;
        color: var(--ok);
        cursor: pointer;
        z-index: 10;
        border-radius: 50%;
        width: 40px;
        height: 40px;
        line-height: 36px;
        box-shadow: 0 2px 8px rgba(var(--shadow-tint-rgb),0.08);
    }

/* → docs/CLIENTSFE.md #fe-002 */

@media (max-width: 767px) {
    /* → docs/CLIENTSFE.md #fe-003 */
}



/* 1) Společný rodič obou prvků (titulek + tlačítko) přepneme na GRID.
      Používáme :has(.sectionG), aby se úprava aplikovala jen tam, kde je v něm H2. */
.es-main-content:has(.sectionG),
.Main__Content-sc-96675056-1:has(.sectionG) {
    display: grid;
    grid-template-columns: auto 1fr; /* sloupec pro H2, sloupec pro tlačítko */
    align-items: center;
    column-gap: 16px;
    row-gap: 0; /* první řádek kompaktní */
}

    /* 2) Titulkový blok (s vaším H2) jde do 1. sloupce */
    .es-main-content:has(.sectionG) .es-widget-title-container {
        grid-column: 1 / 2;
    }

    /* 3) Kontejner s tlačítkem "Ohodnoťte nás na Google" jde do 2. sloupce a zarovná se vpravo */
    .es-main-content:has(.sectionG) .es-header-component-top {
        grid-column: 2 / 3;
        justify-self: end; /* tlačítko doprava */
    }

    /* 4) Všechny ostatní sourozenci (další obsah widgetu) se ZALOMÍ na další řádek
      a roztáhnou přes celé 2 sloupce, tzn. pod první řádek. */
    .es-main-content:has(.sectionG) > :not(.es-widget-title-container):not(.es-header-component-top) {
        grid-column: 1 / -1; /* přes oba sloupce = nový řádek */
    }

/* 5) Doladění H2, aby se drželo na jednom řádku a bez extra mezer */
.sectionG h2 {
    margin: 0;
    white-space: nowrap;
}

/* 6) Křížek „Close Badge" u plovoucího odznaku s hodnocením — skrytý.
   Zavření si prohlížeč pamatuje v localStorage a odznak se sám nevrátí,
   takže si ho návštěvník jedním kliknutím vypne natrvalo.
   Cílíme na .es-close-button a aria-label; třídy typu
   BadgeCloseButton__CloseButton-sc-<hash> jsou generované styled-components
   a mění se při každém buildu Elfsightu, takže se na ně spolehnout nedá.
   !important je nutné — widget si styly vkládá s vysokou specificitou.
   Skrývá se i OBAL tlačítka (.es-close-button-container): samotné tlačítko
   sice zmizelo, ale obal si držel svou plochu a klik do ní odznak dál
   zavíral — proto to zpočátku vypadalo, že skrytí nefunguje. */
.es-close-button,
.es-close-button-container,
button[aria-label="Close Badge"],
[class*="BadgeCloseButton"] {
    display: none !important;
}


    .btn-open-bookings:focus-visible,
    #openInNewTab:focus-visible,
    dialog button:focus-visible {
        outline: 3px solid var(--ok);
        outline-offset: 2px;
    }

@media (max-width: 640px) {
    dialog {
        width: 96vw !important;
    }
}


/* Výchozí stav: logo skryté (dokud je vidět hero) */
.logo-img {
    display: block;
    width: auto;
    height: 50px; /* upravte podle potřeby; nebo např. 32px */
    opacity: 0; /* skryté */
    padding: 12px 18px;
    border-radius: 0px;
    transform: translateY(-2px);
    transition: opacity 160ms ease, transform 160ms ease;
    pointer-events: none; /* až neklikatelné, když je skryté (volitelné) */
}

/* Viditelné logo po odscrollování za hero */
.logo-visible {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
}

/* Pro tmavé/poloprůhledné hlavičky lze přidat jemný světlý filtr (volitelné) */
.header .logo-img {
    filter: drop-shadow(0 1px 1px rgba(0,0,0,.35));
}

/* Svetla/tmava varianta loga (logo-light.jpg/logo-dark.jpg) prepinana
   cistee CSS podle [data-theme="dark"] na <html>, zadny JS. */
.logo-img.logo-dark { display: none; }
html[data-theme="dark"] .logo-img.logo-light { display: none; }
html[data-theme="dark"] .logo-img.logo-dark { display: block; }

/* Jemná animace otevření stage */
@keyframes lb-fade {
    from {
        opacity: 0;
        transform: scale(.98);
    }

    to {
        opacity: 1;
        transform: scale(1);
    }
}

/* → docs/CLIENTSFE.md #fe-005 */
@media (max-width: 700px) {
    [class*="FloatingSmall__Container"],
    [class*="Floating__Container"] {
        left: 10px !important;
        right: auto !important;
    }
}


/* ----------------------------------------------------------------
   404 (viz 404.php). Stránka jede na sdílené právní šabloně, přidané
   je jen rozcestí — návštěvník, který sem spadl, potřebuje odpověď
   „kam tedy", ne omluvu.
   ---------------------------------------------------------------- */
.ctyri-kod {
    font-family: var(--font-display);
    font-size: clamp(46px, 12vw, 72px);
    line-height: 1; margin: 0 0 2px;
    color: var(--border);
    letter-spacing: -.02em;
}
.ctyri-rozcestnik { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ctyri-rozcestnik a {
    display: block; text-decoration: none;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius-md); padding: 11px 14px;
    color: var(--text-primary); transition: border-color .15s;
}
.ctyri-rozcestnik a:hover { border-color: var(--ok); }
.ctyri-rozcestnik b { display: block; font-size: 15px; }
.ctyri-rozcestnik span { display: block; font-size: 13px; color: var(--text-secondary); margin-top: 1px; }
.ctyri-pomoc { font-size: 14px; color: var(--text-secondary); }
