/* ==========================================================================
   Svatební weby na míru — pracovní náhled
   Čisté CSS, bez knihoven a bez externích fontů.
   ========================================================================== */

:root {
  /* ==================================================================
     PALETA ODVOZENÁ ZE ZDROJOVÉ HERO ILUSTRACE

     Odstíny níž nejsou odhadnuté ani převzaté ze staršího konceptu —
     jsou odebrané přímo z assets/watercolor-hero-desktop-v11-background.png
     (průměr oblasti po odfiltrování světlého oparu):

       les, střední vrstva   (y 66,5–71,5 %)  #99A8A5   modrozelený
       vzdálené kopce        (y 62,5–66,5 %)  #98A9A9   modrošedý
       dlažba terasy         (y 95,5–99,5 %)  #D9CAB6   pískový
       papír samotné kresby  (opar nad krajinou) #F5ECE1 teplý papír

     Dřívější zelenošedá (#E3E8DF) měla žlutozelený nádech (G−B = 9),
     kdežto les v ilustraci je modrozelený (B−R = 12, G−B = 3). Nová
     paleta tenhle posun srovnává, takže plochy působí jako zesvětlené
     části téže kresby. */
  --hero-forest: #99A8A5;
  --hero-hills:  #98A9A9;
  --hero-paving: #D9CAB6;
  --hero-paper:  #F5ECE1;
  --hero-sky:    #F4EDE8;  /* změřený průměr horních ~10 px mobilního podkladu */

  /* Zesvětlené akvarelové varianty pro plochy stránky.

     Prosté zesvětlení posunem k bílé o 70 % srazilo i sytost na třetinu
     a plochy vycházely prakticky šedé (ověřeno vyrenderováním). Lesní tóny
     se proto zesvětlují na cílový jas, ale s ponechaným barevným odstupem
     (u --wash G−R = 8, G−B = 4, tedy modrozelený charakter lesa
     v ilustraci). Hodnoty jsou zapsané napevno, aby byly čitelné
     a nezávisely na podpoře color-mix. */
  --paper:     #F9F4ED;  /* --hero-paper zesvětlený o 40 % — světlé sekce, karty */
  --wash:      #DEE6E2;  /* --hero-forest zesvětlený na jas 228 — hlavní plocha stránky */
  --wash-soft: #E4EAE9;  /* --hero-hills zesvětlené na jas 232 — jemně odlišný lesní tón */
  --wash-deep: #D0D9D5;  /* --hero-forest zesvětlený na jas 215 — závěrečná sekce */
  --sand:      #EEE7DE;  /* --hero-paving zesvětlený o 55 % — výplně a orámování */

  /* Akvarel maketek zařízení (viz .wcdev a inline SVG v index.html).
     Tělo je světlá teplá šedobéžová, světla přecházejí do papíru stránky,
     šalvěj zůstává jen pro stíny a kontura je teplá šedá — ne tmavý obrys.
     Drží se ve stejné rodině jako ilustrace, jen o stupeň tlumeněji, aby
     kresba zařízení nekonkurovala obsahu na displeji. */
  --dev-body:   #DDD8CE;
  --dev-light:  #F9F4ED;
  --dev-shade:  #B7C1B9;
  --dev-line:   #8D867C;

  /* Zpětná kompatibilita: dosavadní selektory používají --cream, mapuje se
     na novou plochu, aby barva zůstala na jednom místě a nikde se
     nevkládala natvrdo. */
  --cream: var(--wash);

  /* Text a hlavní tlačítka zůstávají v dosavadní tmavě hnědé. */
  --ink:        #30231C;
  --ink-soft:   #6D6057;

  /* Linky a akcent přeladěné do lesního (modrozeleného) tónu při zachování
     původního jasu, aby se nezměnil kontrast textu ani drobných prvků:
     --accent  #66765A → #5E706D (jas 112,6 → 108)
     --accent-ink #4A5642 → #46514F (jas 82 → 78,5) */
  --line:       #D8D6CC;
  --accent:     #5E706D;
  --accent-ink: #46514F;
  --accent-bg:  var(--paper);

  /* písma */
  --serif: Georgia, "Iowan Old Style", "Palatino Linotype", Palatino, "Times New Roman", serif;
  --sans:  system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;

  /* rytmus */
  --radius:      14px;
  --radius-sm:   8px;
  --shadow:      0 18px 40px -28px rgba(48, 35, 28, .45);
  --shadow-soft: 0 60px 90px -60px rgba(48, 35, 28, .38);
  --section-y:   clamp(4rem, 9vw, 7rem);
  --container:   1120px;
}

/* Nulový nosič SVG filtrů na začátku <body>. Bez vyřazení z toku je to
   `display:inline` prvek, který si vytvoří ANONYMNÍ ŘÁDKOVÝ BOX o výšce
   celého line-height — naměřeno 27,2 px na mobilu a 28,9 px na desktopu.
   O tolik se posouval začátek hero a nad ilustrací zůstával pruh papíru,
   který pod pevnou hlavičkou tvořil rovný barevný předěl. Filtry se
   odkazují přes id, k funkčnosti nepotřebují být v toku ani viditelné. */
.wc-defs {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
  pointer-events: none;
}

/* Nulový nosič SVG filtrů na začátku <body>. Bez vyřazení z toku je to
   `display:inline` prvek, který si vytvoří ANONYMNÍ ŘÁDKOVÝ BOX o výšce
   celého line-height — naměřeno 27,2 px na mobilu a 28,9 px na desktopu.
   O tolik se posouval začátek hero a nad ilustrací zůstával pruh papíru,
   který pod pevnou hlavičkou tvořil rovný barevný předěl. Filtry se
   odkazují přes id, k funkčnosti nepotřebují být v toku ani viditelné. */
.wc-defs {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
  pointer-events: none;
}

/* --- základ ------------------------------------------------------------- */

*, *::before, *::after { box-sizing: border-box; }

/* Atribut [hidden] musí platit i na prvcích, kterým některá třída nastavuje
   vlastní display (typicky .btn{display:inline-block}) — pravidlo třídy
   jinak přebije výchozí [hidden]{display:none} z prohlížeče a prvek skrytý
   z JS zůstane vidět. */
[hidden] { display: none !important; }

html {
  scroll-behavior: smooth;
  scroll-padding-top: 6rem;
}

body {
  margin: 0;
  /* Týž teplý papír, jakým se maluje plocha sekcí (--wc-section-fill
     v concept-watercolor.css) — stránka je jeden souvislý podklad, ne
     střídající se barevné panely. */
  background: var(--paper);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 1.0625rem;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 {
  font-family: var(--serif);
  font-weight: 400;
  line-height: 1.18;
  letter-spacing: -0.01em;
  margin: 0 0 .6em;
}

h1 {
  font-size: clamp(2.4rem, 3.4vw, 3.6rem);
  line-height: 1.08;
  letter-spacing: -0.015em;
}
h2 { font-size: clamp(1.65rem, 3vw, 2.35rem); }
h3 { font-size: 1.2rem; }

p { margin: 0 0 1.1rem; }
p:last-child { margin-bottom: 0; }

a { color: var(--accent-ink); }

:focus-visible {
  outline: 2px solid var(--accent-ink);
  outline-offset: 3px;
  border-radius: 3px;
}

.container {
  width: min(100% - 2.5rem, var(--container));
  margin-inline: auto;
}

.center { text-align: center; }

/* --- drobné prvky ------------------------------------------------------- */

.eyebrow {
  font-size: .78rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--accent-ink);
  margin-bottom: .9rem;
}

.lead {
  font-size: clamp(1.08rem, 1.6vw, 1.25rem);
  color: var(--ink-soft);
  max-width: 46ch;
}

.note {
  font-size: .95rem;
  color: var(--ink-soft);
}

/* --- tlačítka ------------------------------------------------------------
   SPOLEČNÝ PRINCIP pro všechny malované prvky na webu — DVĚ vrstvy, ne
   jedna, přesně proto, aby plocha nikdy nevypadala "rozpadlá":

     ::before — SPOLEHLIVÝ ZÁKLAD. Plná barva bez filtru, zatažená 2 px
       dovnitř od hrany. Nese úplně stejnou výplň jako vrstva níž, takže
       při správném vykreslení s ní splyne k nerozeznání — je to čistě
       pojistka. Ověřeno na vlastní oči: filtrovaná vrstva sama uměla na
       konkrétním zařízení erodovat tak silně, že skrz tlačítko prosvítalo
       pozadí stránky (velká světlá plocha uprostřed tmavého tlačítka).
       S tímhle základem pod ní se to už stát nemůže — tlačítko zůstává
       čitelné a vyplněné, i kdyby se filtr rozpadl úplně.
     ::after — MALOVANÝ OKRAJ. Táž výplň přes filtr #wc-edge (viz inline
       <svg> v index.html), sahá až na skutečnou hranu prvku a dává mu
       lehce nepravidelný, akvarelový obrys. Leží NAD základem (vyšší
       z-index), takže v běžném vykreslení je vidět jen ona; kdyby
       erodovala, prosvítá spolehlivý základ pod ní, nikdy pozadí stránky.

   Text a ikony leží nad oběma vrstvami, filtr se jich nedotkne a zůstávají
   ostré. Reakce na najetí mění VÝHRADNĚ pigment (sytost/krytí) na OBOU
   vrstvách, nikdy tvar, velikost ani polohu — nic se neposouvá a layout
   se nehýbe. */

.wc-surface {
  position: relative;
  /* vlastní hladina, aby ::before/::after se záporným z-indexem zůstaly
     uvnitř prvku (pod textem) a nepropadly pod pozadí sekce */
  isolation: isolate;
  background: transparent;
  border: 0;
}

.wc-surface::before {
  content: "";
  position: absolute;
  inset: 2px;
  z-index: -2;
  border-radius: inherit;
}

.wc-surface::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  filter: url(#wc-edge);
  transition: background-color .22s ease, opacity .22s ease, box-shadow .22s ease;
}

.btn {
  display: inline-block;
  font: inherit;
  font-size: .97rem;
  text-decoration: none;
  padding: .8rem 1.5rem;
  border-radius: 999px;
  cursor: pointer;
  transition: color .2s ease;
}

/* HLAVNÍ TLAČÍTKO (hero, kontakt) — tmavě hnědá plocha s klidným středem.
   Strukturu dělají tři sotva znatelné lazury: světlejší nahoře vlevo,
   hustší pigment dole vpravo. Najetím pigment jen zteplá a přisytí se.
   Výplň je na ::before i ::after stejná, aby obě vrstvy splynuly. */
.btn--primary {
  color: var(--paper);
}
.btn--primary::before,
.btn--primary::after {
  background-color: var(--ink);
  background-image:
    radial-gradient(68% 120% at 26% 22%, rgba(255, 252, 246, .1), rgba(255, 252, 246, 0) 70%),
    radial-gradient(56% 110% at 82% 84%, rgba(12, 6, 2, .26), rgba(12, 6, 2, 0) 72%),
    radial-gradient(120% 60% at 50% 110%, rgba(12, 6, 2, .14), rgba(12, 6, 2, 0) 68%);
}

@media (hover: hover) {
  .btn--primary:hover::before,
  .btn--primary:hover::after { background-color: #45301F; }
}
.btn--primary:focus-visible::before,
.btn--primary:focus-visible::after { background-color: #45301F; }

/* VEDLEJŠÍ TLAČÍTKO (Zvětšit počítač / Zvětšit telefon) — papírový vnitřek
   a tenká šalvějová kontura. Najetím přibude uvnitř světlá lazura a kontura
   mírně zesílí; rozměr ani tvar se nemění. Kontura (box-shadow) zůstává
   jen na ::after (plná hrana) — na 2px zataženém ::before by vytvářela
   viditelný druhý prstenec uvnitř. */
.btn--zoom {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  color: var(--ink);
  font-size: .9rem;
  padding: .6rem 1.1rem;
}
.btn--zoom::before,
.btn--zoom::after {
  background-color: var(--paper);
}
.btn--zoom::after {
  box-shadow: inset 0 0 0 1px rgba(94, 112, 109, .55);
}
@media (hover: hover) {
  .btn--zoom:hover::before,
  .btn--zoom:hover::after { background-color: var(--wash-soft); }
  .btn--zoom:hover::after { box-shadow: inset 0 0 0 1.6px rgba(94, 112, 109, .85); }
}
.btn--zoom:focus-visible::before,
.btn--zoom:focus-visible::after { background-color: var(--wash-soft); }
.btn--zoom:focus-visible::after { box-shadow: inset 0 0 0 1.6px rgba(94, 112, 109, .85); }
.btn--zoom .btn__icon { flex: none; opacity: .8; }

.btn:disabled {
  opacity: .45;
  cursor: not-allowed;
}

/* --- textové odkazy ------------------------------------------------------
   Samostatné textové odkazy nesou slabý šalvějový tah pořád; v menu se
   objeví teprve při najetí. Tah kreslí .nav a::after / .wc-link::after
   v motion.css — tady zůstává jen barva textu a jistota, že se nikde
   nevrací podtržení linkou. */

.wc-link {
  position: relative;
  color: var(--ink-soft);
  text-decoration: none;
  transition: color .2s ease;
}
.wc-link:hover { color: var(--ink); }

/* --- přeskočení na obsah ------------------------------------------------ */

.skip-link {
  position: absolute;
  left: -9999px;
}
.skip-link:focus {
  left: 1rem;
  top: 1rem;
  z-index: 100;
  background: var(--ink);
  color: var(--paper);
  padding: .7rem 1.1rem;
  border-radius: var(--radius-sm);
  text-decoration: none;
}

/* --- hlavička ----------------------------------------------------------- */

/* Lišta sama nic nekreslí — podklad je samostatná vrstva .site-header::before
   (viz motion.css), aby šlo plynule přepínat jen její krytí. Žádný rámeček,
   žádný stín, žádné rozostření pozadí: podklad je krycí papír. */
.site-header {
  position: sticky;
  top: 0;
  z-index: 20;
  background: transparent;
}

.site-header__inner {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  min-height: 4.2rem;
}

.wordmark {
  font-family: var(--serif);
  font-size: 1.06rem;
  letter-spacing: .02em;
  color: var(--ink);
  text-decoration: none;
  white-space: nowrap;
}

.nav { margin-left: auto; }

.nav ul {
  display: flex;
  gap: 1.4rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

/* Podtržení nese malovaný tah .nav a::after (motion.css), ne linka. */
.nav a {
  position: relative;
  color: var(--ink-soft);
  text-decoration: none;
  font-size: .93rem;
  padding-block: .35rem;
  transition: color .2s ease;
}
.nav a:hover { color: var(--ink); }

/* --- úvodní sekce ------------------------------------------------------- */

.hero__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
  margin-top: 2rem;
}

/* nenápadný textový odkaz vedle hlavního tlačítka — žádný další
   obrysový button, jen podtržení při hoveru */
.hero__secondary { font-size: .95rem; }

/* --- akvarelové maketky zařízení ----------------------------------------
   Notebook a telefon nejsou fotorealistické mockupy, ale kresba ve stejné
   výtvarné řeči jako hero ilustrace: obrys je mírně rozechvělá křivka,
   uvnitř vrstvená lazura se srážením pigmentu u hrany a se zrnem papíru.
   Celé je to inline SVG přímo v index.html — žádný další rastrový soubor.

   Displej je v kresbě skutečná DÍRA (fill-rule: evenodd), skrz kterou
   prosvítá screenshot ležící pod ní. .wcdev__screen je proto o něco VĚTŠÍ
   než otvor: rozechvělá hrana se tak vždy překrývá s obrázkem a nikde
   nevznikne škvíra.

   Křivka otvoru (#wcL-scr v notebooku, #wcP-scr v telefonu — táž geometrie
   se přes <use> používá i ve zvětšeném náhledu) byla přegenerovaná: v levém
   horním rohu notebooku táhly dva sousední řídicí body křivku ~5 jednotek
   mimo plochu .wcdev__screen (viewBox 1000×700), takže tam skrz mezeru
   prosvítalo pozadí stránky místo fotky (ověřeno vyrenderováním — viditelné
   i ve zvětšeném náhledu, který stejnou geometrii sdílí). Kotevní body na
   okrajích zůstaly beze změny (jejich jemné vlnění je v pořádku, jemné
   != rozbité); přepočítané jsou jen řídicí body křivky mezi nimi —
   standardní Catmull-Rom (dělitel 20 místo obvyklých 6, stejná technika
   jinde na webu), který stejnou křivku vede hladčeji a bez přestřelení
   v rozích. Ověřeno vzorkováním celé křivky po ~2,5° kroku na obou
   zařízeních: nově nikde nevystupuje mimo .wcdev__screen. */

.showcase__devices {
  margin: 0;
}

/* Vlastní plocha obou zařízení. Předsunutý telefon je v ní absolutně
   pozicovaný a přečnívá pod notebook; spodní odsazení mu na ten přesah
   dělá místo UVNITŘ plochy, takže popisek i obě volby pod ní začínají až
   pod skutečným spodním okrajem celé kompozice. Odsazení je v procentech,
   tedy vůči šířce — s velikostí zařízení se škáluje samo. */
.showcase__stage {
  position: relative;
  padding-bottom: 8.5%;
}

.wcdev {
  position: relative;
  /* Vlastní hladina vrstev. Bez ní by kresba i displej obou zařízení
     ležely v jednom stohu a rám notebooku by přemaloval displej
     telefonu (ověřeno vyrenderováním). */
  isolation: isolate;
}

.wcdev__art {
  display: block;
  width: 100%;
  height: auto;
  position: relative;
  z-index: 2;
  /* kresba leží NAD displejem, klikat na živý náhled ale musí jít skrz */
  pointer-events: none;
}

.wcdev__screen {
  position: absolute;
  z-index: 1;
  overflow: hidden;
  background: var(--paper);
}

.wcdev__shot {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}

/* Otvor displeje má poměr PŘESNĚ 16:10 (844 × 527,5 jednotky viewBoxu
   1000 × 700), tedy formát, ve kterém je i screenshot 1440 × 900 — obsah
   se nikde neořezává. Kreslený otvor v SVG je o 2,5 jednotky menší než
   tenhle box, takže rám vždy překryje jeho hranu a nevznikne škvíra. */
.wcdev--laptop .wcdev__screen {
  left: 7.8%;
  top: 5.4286%;
  width: 84.4%;
  height: 75.3571%;
  border-radius: 6px;
}

/* Telefon stojí před notebookem vpravo dole — klasická dvojice, která
   ukazuje tentýž web v obou šířkách najednou. */
.wcdev--phone {
  position: absolute;
  right: -2%;
  bottom: 0;
  width: 23.5%;
  z-index: 3;
}
/* Otvor displeje má poměr PŘESNĚ 1:2 (252 × 504 jednotky viewBoxu
   300 × 584), tedy profil 390 × 780 CSS px, ve kterém se vykresluje živý
   náhled. Tloušťka rámu zůstala beze změny (24 j. po stranách, 20 nahoře,
   21 dole) — změnila se jen výška těla. */
.wcdev--phone .wcdev__screen {
  left: 8%;
  top: 4.7945%;
  width: 84%;
  height: 86.3014%;
  border-radius: 18px;
}

/* --- vstup do zvětšené ukázky -------------------------------------------
   Klikací plocha přes celé zařízení. Telefon leží v DOM později a má vyšší
   z-index, takže v místě překryvu dostane klik on — obě oblasti tedy fungují
   samostatně i tam, kde se kresby překrývají. Jeho plocha je zúžená přesně
   na tělo telefonu (obrys v jeho viewBoxu sahá od 3,3 % do 97,4 % šířky),
   aby průhledný okraj kolem něj nebral kliky notebooku pod sebou. */

.wcdev__hit {
  position: absolute;
  inset: 0;
  z-index: 5;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: zoom-in;
  border-radius: 10px;
}
.wcdev--phone .wcdev__hit { inset: 1.3% 2.6% 4.8% 3.3%; border-radius: 20px; }
.wcdev__hit:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

.u-hidden-visually {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Dvě popsané volby pod kompozicí. Na úzkém okně je nahrazuje jediné
   tlačítko — skutečné desktopové rozvržení reference se tam nevejde. */
.showcase__zoom {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .7rem;
  margin: 1.3rem 0 0;
}

/* Dřívější, samostatná definice .btn--zoom (plná --paper výplň + rámeček
   přímo na prvku) tu zůstávala jako mrtvý, ale KONFLIKTNÍ kód — každý
   .btn--zoom v HTML má i .wc-surface, takže tahle pozdější definice ve
   zdroji přebíjela .wc-surface{background:transparent;border:0} a kreslila
   pod painterly ::before/::after vrstvu ještě vlastní rovný obdélníkový
   rámeček. Odstraněno; vzhled i chování teď dává výhradně .wc-surface
   systém výš.

   Dřív tu bylo i pravidlo, které pod 949px obě tlačítka schovávalo a
   nahrazovalo je variantou .btn--zoom-solo — jenže ta v HTML vůbec
   neexistovala, takže na mobilu zmizely OBĚ volby prohlížení ("Verze pro
   počítač/telefon") beze zbytku a po kompozici zařízení zůstala jen
   prázdná mezera (ověřeno vyrenderováním — .showcase__zoom mělo výšku 0,
   ale okolní mřížkové mezery kolem prázdného řádku zůstávaly). Obě
   tlačítka teď zůstávají viditelná na všech šířkách; přepínání zařízení
   uvnitř zvětšeného náhledu funguje na dotyku stejně jako na počítači. */

/* --- zvětšená ukázka: modální okno --------------------------------------
   Jedno okno pro obě zobrazení. Uvnitř běží JEDINÝ iframe se skutečným
   webem — přepínač mu mění ROZMĚRY, ne měřítko, takže se text vždy
   vykresluje v běžné velikosti a nikdy nejde o zmenšený široký rám. */

.preview {
  position: fixed;
  inset: 0;
  z-index: 60;
  display: flex;
  /* --preview-gap = odsazení okna od okraje prohlížeče (zadaný rozsah
     16–24 px); na telefonu okno vyplní celou plochu. */
  --preview-gap: 20px;
  --preview-pad: 6px;
  --preview-phone-w: 390px;
  opacity: 0;
  transition: opacity .22s ease;
}
.preview.is-open { opacity: 1; }

/* Závoj nad marketingovou stránkou: teplý hnědý tón a jemné rozostření
   toho, co je pod ním. backdrop-filter působí VÝHRADNĚ na obsah za touhle
   vrstvou — dialog, zařízení, ovládání i vložený web leží nad ní a zůstávají
   ostré. */
.preview__scrim {
  position: absolute;
  inset: 0;
  background: rgba(48, 35, 28, .5);
  -webkit-backdrop-filter: blur(5px);
  backdrop-filter: blur(5px);
}

.preview__dialog {
  position: relative;
  margin: auto;
  display: flex;
  flex-direction: column;
  width: calc(100% - 2 * var(--preview-gap));
  height: calc(100% - 2 * var(--preview-gap));
  background: var(--paper);
  border-radius: 12px;
  overflow: hidden;
  transform: translateY(8px);
  transition: width .26s var(--wc-ease, cubic-bezier(.22, .61, .36, 1)),
              transform .26s var(--wc-ease, cubic-bezier(.22, .61, .36, 1));
  /* dotazovací kontejner pro délku popisků v liště (viz .preview__long) */
  container-type: inline-size;
}

/* Telefon nepotřebuje celou šířku obrazovky — okno se zúží na ~640 px
   a zůstane vystředěné. Výška se nemění, takže horní hrana okna sedí při
   přepnutí zařízení na témže místě. */
.preview[data-mode="phone"] .preview__dialog {
  width: min(640px, calc(100% - 2 * var(--preview-gap)));
}

/* V úzké liště stačí kratší název ("Ukázka webu"). Přepínač ani celé
   „Zavřít náhled ×" se nezkracují — ty musí zůstat čitelné pořád. */
@container (max-width: 700px) {
  .preview__long { display: none; }
}

/* Na úzké obrazovce se ovládání rozdělí do DVOU kompaktních řádků:
   nahoře název a zavření, pod nimi přepínač s popiskem režimu. Obojí
   zůstává trvale viditelné. */
@container (max-width: 560px) {
  .preview__title { order: 1; }
  .preview__close { order: 2; }
  .preview__switch {
    order: 3;
    flex-basis: 100%;
    margin-left: 0;
    justify-content: center;
  }
  .preview__hint { order: 4; text-align: center; }
}
.preview.is-open .preview__dialog { transform: none; }

.preview__guard { position: absolute; width: 1px; height: 1px; opacity: 0; }

/* Ovládací lišta — stojí mimo scrollovanou plochu náhledu, takže se
   s referenčním webem neposouvá a zavření je dostupné pořád. */
.preview__bar {
  flex: none;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .5rem .9rem;
  padding: .55rem .8rem;
}

.preview__title {
  margin: 0;
  font-family: var(--serif);
  font-size: 1rem;
  color: var(--ink);
  white-space: nowrap;
}

.preview__switch {
  display: inline-flex;
  /* dvě automatická odsazení (tady a u .preview__close) rozdělí volné
     místo rovnoměrně: název vlevo, přepínač uprostřed, zavření vpravo.
     Když přepínač na úzkém okně odpadne, připadne všechno místo zavření. */
  margin-left: auto;
  padding: 2px;
  border-radius: 999px;
  background: var(--sand);
}
.preview__switch button {
  border: 0;
  background: transparent;
  color: var(--ink-soft);
  font: inherit;
  font-size: .85rem;
  padding: .35rem .95rem;
  border-radius: 999px;
  cursor: pointer;
  transition: background-color .2s ease, color .2s ease;
}
/* aktivní režim nese jemná šalvějová plocha, ne obrys ani stín */
.preview__switch button[aria-pressed="true"] {
  background: var(--wash-deep);
  color: var(--ink);
}
.preview__switch button:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

/* Stálý popisek režimu Počítač. V režimu Telefon nemá co hlásit. */
.preview__hint {
  flex-basis: 100%;
  order: 4;
  margin: 0;
  font-size: .76rem;
  color: var(--ink-soft);
}
.preview[data-mode="phone"] .preview__hint { display: none; }
/* Rada na otočení dává smysl jen tam, kde je náhled opravdu malý —
   tedy v úzké liště. Výchozí stav i přepnutí drží pohromadě, aby pozdější
   pravidlo se stejnou specifičností nepřebilo to z @container. */
.preview__hint-rotate { display: none; }
@container (max-width: 560px) {
  .preview__hint-rotate { display: inline; }
}



.preview__close {
  margin-left: auto;
  border: 1px solid var(--line);
  background: var(--paper);
  color: var(--ink);
  font: inherit;
  font-size: .85rem;
  padding: .35rem .85rem;
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color .2s ease, border-color .2s ease;
}
.preview__close:hover { background: var(--sand); border-color: var(--accent); }

.preview__stage {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: grid;
  justify-items: center;
  /* safe center: když je zařízení vyšší než plocha (nízké okno), nesmí se
     jeho horní část dostat mimo dosah scrollu */
  align-content: safe center;
  overflow: auto;
  padding: var(--preview-stage-pad, 0) var(--preview-gap) var(--preview-gap);
  /* Dotazovací kontejner pro velikost zařízení níž. Díky němu se celé
     zařízení vejde pod lištu a jeho proporce se nikdy nepřizpůsobují tvaru
     okna — počítá se z obou rozměrů najednou, ne jen z jednoho. */
  container-type: size;
}

/* Plocha kolem zvětšeného telefonu zůstává jednotný teplý papír —
   dřívější šedozelená lazura z ní dělala samostatný barevný panel uprostřed
   okna a soupeřila s obsahem displeje. */

/* --- zvětšené zařízení ---------------------------------------------------
   Kresba se nekopíruje: SVG uvnitř obsahuje jen <use href="#wcL-art">,
   resp. "#wcP-art" — tytéž skupiny, které se kreslí v malých maketkách
   v sekci Ukázka. Poměr stran proto odpovídá jejich viewBoxu (notebook
   1000 × 700, telefon 300 × 620) a tloušťka korpusu vůči displeji zůstává
   stejná jako v malé verzi.

   Rozměr se bere z OBOU stran dostupné plochy (min ze šířky a z výšky
   přepočtené poměrem), takže zařízení nikdy nepřeteče pod lištu ani se
   nedeformuje. */
.preview__device {
  position: relative;
  isolation: isolate;
  /* záloha pro prohlížeče bez jednotek container query */
  width: 100%;
  height: 100%;
}

/* Rozměr se bere z OBOU stran dostupné plochy, ale výšku odvozuje
   aspect-ratio ze šířky — ne samostatný výpočet. Díky tomu ani minimální
   rozměr (nízké okno, viz media query níž) nemůže zařízení natáhnout jen
   v jedné ose: proporce rámu i obsahu zůstávají vždy stejné. */
.preview__device { height: auto; }

.preview[data-mode="desktop"] .preview__device {
  aspect-ratio: 1000 / 700;
  width: min(100cqw, 142.857cqh);
}
.preview[data-mode="phone"] .preview__device {
  /* viewBox telefonu 300 × 584 → 300/584 = 0,5137 a 584/300 = 1,94667 */
  aspect-ratio: 300 / 584;
  width: min(100cqw, 51.37cqh);
}

.preview__art {
  position: relative;
  z-index: 2;
  display: block;
  width: 100%;
  height: 100%;
  /* kresba leží nad displejem — ovládat živý web se musí dát skrz ni */
  pointer-events: none;
}

/* Otvor displeje. Procenta jsou táž jako u malých maketek (viz .wcdev),
   takže živý web sedí přesně tam, kde v kresbě otvor je. */
.preview__screen {
  position: absolute;
  z-index: 1;
  overflow: hidden;
  background: var(--paper);
}
.preview[data-mode="desktop"] .preview__screen {
  left: 7.8%;
  top: 5.4286%;
  width: 84.4%;
  height: 75.3571%;
  border-radius: 6px;
}
.preview[data-mode="phone"] .preview__screen {
  left: 8%;
  top: 4.7945%;
  width: 84%;
  height: 86.3014%;
  border-radius: 18px;
}

/* Vnitřní rozlišení nastavuje skript (--live-w / --live-h podle profilu
   zařízení), měřítko dopočítává z otvoru displeje. transform-origin vlevo
   nahoře, takže se zmenšený obraz kryje s otvorem bod po bodu. */
.preview__iframe {
  position: absolute;
  top: 0;
  left: 0;
  border: 0;
  display: block;
  width: var(--live-w, 100%);
  height: var(--live-h, 100%);
  transform: scale(var(--live-scale, 1));
  transform-origin: top left;
  background: var(--paper);
}

/* Náhradní stav, když se vložení nepovede — stručná zpráva a obě cesty
   dál. Odkaz na samostatné otevření reference se na webu nikde nenabízí. */
.preview__fallback {
  max-width: 28rem;
  text-align: center;
  color: var(--ink-soft);
}
.preview__fallback-actions {
  display: flex;
  flex-wrap: wrap;
  gap: .6rem;
  justify-content: center;
  margin: 1.2rem 0 0;
}

/* Skutečný mobil: okno vyplní celou plochu, ale kreslené tělo ZŮSTÁVÁ —
   zmenšuje se spolu s obsahem jedním měřítkem, takže se proporce rámu ani
   webu nikdy neprotahují nezávisle. */
@media (max-width: 700px) {
  .preview {
    --preview-gap: 0px;
    --preview-stage-pad: 10px;
  }
  .preview__dialog,
  .preview[data-mode="phone"] .preview__dialog { border-radius: 0; width: 100%; }
}

/* Úzká lišta: dva řádky, obojí kompaktní. Bez zkracování názvu do
   výpustky — na to je tu kratší varianta textu (.preview__long). */
@media (max-width: 560px) {
  .preview__bar { gap: .35rem .5rem; padding: .5rem .7rem; }
  .preview__title { font-size: .88rem; }
  .preview__long--wide { display: none; }
  .preview__close { padding-inline: .7rem; }
}

/* Nízké okno (nebo telefon na šířku): lišta se musí vejít na jeden řádek
   a náhledu nesmí sebrat celou výšku. */
/* Nízké okno (nebo telefon na šířku): lišta se musí vejít a náhledu nesmí
   sebrat celou výšku. Zařízení si drží minimální rozměr a plocha kolem něj
   se místo toho dá posouvat — zavření i přepínání zůstávají v liště, která
   se neposouvá. */
@media (max-height: 520px) {
  .preview { --preview-gap: 8px; }
  .preview__bar { padding: .35rem .7rem; gap: .3rem .7rem; }
  .preview__title { font-size: .85rem; }
  .preview__switch button,
  .preview__close { font-size: .78rem; padding-block: .25rem; }
  .preview__hint { font-size: .7rem; }
  /* Telefon na výšku se do nízkého okna nevejde tak, aby v něm zbylo na
     web použitelné místo. Drží si proto minimální rozměr a posouvá se
     místo něj plocha kolem (lišta se neposouvá, zavření i přepínání jsou
     tedy pořád po ruce). */
  .preview[data-mode="phone"] .preview__device {
    width: max(242px, min(100cqw, 51.37cqh));
  }
}

@media (prefers-reduced-motion: reduce) {
  .preview,
  .preview__dialog { transition: none !important; transform: none !important; }
}

/* --- sekce -------------------------------------------------------------- */

.section { padding-block: var(--section-y); }

/* Jediná barevně odlišená plocha na stránce. Barvu maluje ručně malovaná
   vrstva ::before (viz concept-watercolor.css), rámeček zůstává průhledný
   jen kvůli výšce boxu — žádná geometrická linka ani stín. */
.section--closing {
  border-top: 1px solid transparent;
}

/* Společná mřížka: KAŽDÁ sekce začíná na stejné levé hraně kontejneru.
   Délku řádku omezují jednotlivé textové bloky (max-width v ch), ne
   zužování a vystřeďování celého kontejneru — dřív se právě tím začátky
   obsahu mezi širokými a úzkými sekcemi přeskakovaly. */
.section__head {
  max-width: 56ch;
  margin-bottom: clamp(2rem, 4vw, 3rem);
}

.section__intro {
  color: var(--ink-soft);
  max-width: 58ch;
}

.section__outro {
  margin-top: 2.2rem;
  max-width: 62ch;
  color: var(--ink-soft);
}

/* --- ukázka — hlavní důkaz kvality služby -------------------------------
   Nejvýraznější blok stránky, hned za hero: krátký text a konkrétní
   přínosy vlevo, kresba notebooku s telefonem vpravo. Druhý sloupec musí
   dostat šířku přímo — obsah uvnitř (SVG kresba) je width:100 %, takže
   "auto" sloupec by celou sestavu zúžil. */

.showcase {
  display: grid;
  /* Pořadí v DOM (nadpis → zařízení → volby → přínosy) odpovídá tomu, co
     má návštěvník na mobilu vidět. Na desktopu je přes pojmenované oblasti
     přeskládané do dvou sloupců, aniž by se s DOM hýbalo. */
  grid-template-columns: minmax(0, 0.85fr) minmax(min(360px, 100%), 1.15fr);
  grid-template-areas:
    "head     devices"
    "benefits devices"
    "benefits zoom";
  gap: clamp(2.5rem, 4.5vw, 4rem);
  align-items: start;
}

.showcase__head     { grid-area: head; max-width: 52ch; }
.showcase__benefits { grid-area: benefits; max-width: 52ch; }
.showcase__devices  { grid-area: devices; }
.showcase__zoom     { grid-area: zoom; }

/* Mobilní náhrada čtyř přínosů jedním souvislým odstavcem (viz media query
   níž, stejný zlom 900px jako u "Co na webu bude") — na širokém okně skrytá,
   ukazuje se jen .benefits sama. Běžné písmo, žádné tučné začátky vět. */
.benefits-mobile {
  display: none;
  max-width: 52ch;
}

/* Přínosy: tučné názvy jsou vidět vždycky, doplňující vysvětlení se na
   mobilu rozbalují SPOLEČNĚ pod jedním ovládáním a objeví se přímo pod
   svým názvem. Bez odrážek a bez rámečků/linek — položky od sebe odlišuje
   jen rozestup (14px — "položky uvnitř skupiny", viz komentář u sekce
   "Co na webu bude" níž), zarovnané na společný levý okraj obsahu. */
.benefits {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.benefits li { color: var(--ink-soft); }

.benefits strong {
  display: block;
  color: var(--ink);
  font-weight: 600;
}

/* Základ (bez JS, nebo na desktopu, kam skript .is-collapsible nikdy
   nepřidá): vysvětlení je prosté, viditelné, mezera název→text je padding
   na vnitřním obalu (viz .benefits__detail-inner). Animovaný sbalený stav
   nastupuje, jen když má seznam .is-collapsible (mobil) — stejný princip
   jako u FAQ/.disclosure: základ funguje i bez JS. */
.benefits__detail {
  display: block;
  font-size: .96rem;
}
.benefits__detail-inner {
  display: block;
  padding-top: 7px;
}

.benefits.is-collapsible .benefits__detail {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .24s ease;
}
.benefits.is-collapsible .benefits__detail-inner { overflow: hidden; }

.benefits.is-collapsible.is-open .benefits__detail {
  grid-template-rows: 1fr;
  opacity: 1;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .3s ease .08s;
}

/* Ovládání se ukazuje, teprve když ho skript zapne (.is-collapsible) —
   bez JS zůstanou vysvětlení rozbalená a tlačítko se vůbec neobjeví.
   Šipka sdílí tvar i otáčení se stejnou logikou "otevřeno/zavřeno" jako
   u FAQ a "Co si připravit" — jedno vizuální označení stavu pro všechna
   tři rozbalování na webu. */
.benefits__toggle {
  display: none;
  align-items: center;
  gap: .5rem;
  margin-top: .7rem;
  padding: .5rem 0;
  font: inherit;
  font-size: .95rem;
  background: none;
  border: 0;
  cursor: pointer;
}
.benefits__toggle::before {
  content: "";
  width: .5rem;
  height: .5rem;
  border-right: 1.5px solid var(--accent);
  border-bottom: 1.5px solid var(--accent);
  transform: rotate(-45deg);
  transition: transform .25s ease;
  flex: none;
}

.benefits.is-collapsible + .benefits__toggle { display: inline-flex; }
.benefits.is-open + .benefits__toggle::before { transform: rotate(45deg); }


/* --- výčet obsahu ---------------------------------------------------------
   Jedenáct položek je rozdělených do tří významových skupin (Představení
   svatby / Praktické informace / Informace pro hosty — viz HTML), aby se
   nečetly jako jeden dlouhý sled. Na desktopu (≥901px) stojí skupiny vedle
   sebe a zůstávají trvale rozbalené (data-wide-open, stejný skript jako
   "Co si připravit"), včetně úvodní věty sekce (.co-obsahuje__intro-desktop).
   Na mobilu (≤900px, viz media query níž) tuhle podobu nahrazují tři
   souvislé odstavce (.features-mobile) — skupiny i úvodní věta jsou tam
   skryté, ne přestavěné, aby zůstal desktop beze změny. */
.co-obsahuje__intro-desktop { display: block; }
.features-mobile { display: none; }
.features-mobile p { max-width: 58ch; }

.features-groups {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(2rem, 4vw, 3rem);
}

/* Záhlaví skupiny: název + stručný přehled (viditelný i zavřený, aby šel
   celý rozsah nabídky poznat bez rozbalování) a šipka vpravo, svisle
   vystředěná k oběma řádkům. Stejný tvar a otáčení jako u FAQ/"Co si
   připravit" — jen umístění (top:50%) počítá i se dvěma řádky textu. */
.features-group > summary {
  position: relative;
  list-style: none;
  cursor: pointer;
  padding: .2rem 2rem .2rem 0;
}
.features-group > summary::-webkit-details-marker { display: none; }
.features-group > summary::after {
  content: "";
  position: absolute;
  right: .2rem;
  top: 50%;
  width: .62rem;
  height: .62rem;
  border-right: 1.5px solid var(--accent);
  border-bottom: 1.5px solid var(--accent);
  transform: translateY(-50%) rotate(45deg);
  transform-origin: center;
  transition: transform .25s ease;
}
.features-group[open] > summary::after { transform: translateY(-50%) rotate(-135deg); }
.features-groups.is-animated .features-group[open] > summary::after { transform: translateY(-50%) rotate(45deg); }
.features-groups.is-animated .features-group.is-expanded > summary::after { transform: translateY(-50%) rotate(-135deg); }

.features-group__title {
  display: block;
  font-size: 1rem;
  font-weight: 600;
  color: var(--ink);
}

/* Přehled je BĚŽNÉ písmo (ne tučné), souvislý krátký text s přirozeným
   zalamováním — žádné rozdělování po slovech na samostatné řádky. */
.features-group__summary {
  display: block;
  margin-top: .3rem;
  color: var(--ink-soft);
  font-size: .92rem;
  line-height: 1.45;
  font-weight: 400;
}

/* Plynulé rozbalení plného seznamu — stejná grid-template-rows animace,
   časování i křivka jako FAQ (.faq.is-animated výš), na jiné dvojici
   značek. .is-animated přidává JS (viz <script>); bez něj zůstává obsah
   plně funkční nativním otevřením <details>, jen bez animace. */
.features-groups.is-animated .features-group__body {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .24s ease;
}
.features-groups.is-animated .features-group__inner { overflow: hidden; }

.features-groups.is-animated .features-group.is-expanded .features-group__body {
  grid-template-rows: 1fr;
  opacity: 1;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .3s ease .08s;
}

.features-group__inner { padding-top: 1rem; }

.features {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(11rem, 100%), 1fr));
  gap: 14px 2rem;
}

/* Informace bez akce (Dress code, Dary, Program…). Klidný informační
   seznam — žádná svislá linka ani jiný náznak kliknutí, na najetí se nic
   nemění. Uvnitř skupiny mohou stát dva sloupce, pokud se název
   i vysvětlení pohodlně vejdou; při užším prostoru nebo zvětšeném písmu
   mřížka sama spadne na jeden sloupec, protože minimální šířka sloupce je
   v rem a roste s textem. */
.features li {
  display: flex;
  flex-direction: column;
  gap: 7px;
  color: var(--ink-soft);
}
.features li strong {
  color: var(--ink);
  font-weight: 600;
}
.features li span {
  font-size: .92rem;
  line-height: 1.45;
}

/* --- postup ------------------------------------------------------------- */

.steps {
  list-style: none;
  counter-reset: krok;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(15rem, 100%), 1fr));
  gap: 2.2rem;
}

/* Číslo stojí v úzkém levém sloupci VEDLE nadpisu, ne nad ním — krok tím
   zabere o řádek méně a čtyři kroky se na mobilu vejdou bez posouvání. */
.steps li {
  counter-increment: krok;
  display: grid;
  grid-template-columns: 2.1rem 1fr;
  column-gap: .5rem;
  align-items: baseline;
}

.steps li::before {
  content: counter(krok);
  grid-row: 1 / span 2;
  font-family: var(--serif);
  font-size: 1.6rem;
  line-height: 1;
  color: var(--accent);
}

.steps h3 { margin-bottom: .25rem; }
.steps p { color: var(--ink-soft); font-size: .98rem; margin: 0; }

/* --- doplňující bloky ke spolupráci (podklady, cena) ---------------------
   Dřív to byly samostatné sekce s vlastní barevnou plochou a vlastním h2,
   takže měly stejnou váhu jako hlavní obsah. Teď jsou to podřízené bloky
   uvnitř sekce "Jak to probíhá": menší nadpis (h3) a jediná vodorovná
   linka, která odděluje hlavní kroky od podpůrných informací. */

/* minmax(min(X, 100%), 1fr) místo minmax(X, 1fr): pevné minimum v rem
   roste se zvětšeným písmem a při 200 % (17rem = 544 px) přetékalo mřížku
   ven z kontejneru širokého 294 px. S min(…, 100 %) se sloupec smí
   smrsknout na šířku plochy a mřížka místo toho spadne na jeden sloupec. */
.aside-grid {
  margin-top: clamp(2.75rem, 5vw, 4rem);
  padding-top: clamp(2rem, 4vw, 3rem);
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(17rem, 100%), 1fr));
  gap: clamp(2rem, 5vw, 4rem);
}

/* Rozbalovací blok (Co si připravit). Nativní <details> hlásí otevřený
   stav sám a funguje dotykem i klávesnicí; skript ho na širokém okně
   otevře natrvalo. Značka se otáčí, popisek se nemění. */
.disclosure > summary {
  list-style: none;
  cursor: pointer;
  font-family: var(--serif);
  font-size: 1.2rem;
  color: var(--ink);
  padding: .2rem 0;
  display: flex;
  align-items: center;
  gap: .55rem;
}
.disclosure > summary::-webkit-details-marker { display: none; }
.disclosure > summary::before {
  content: "";
  width: .5rem;
  height: .5rem;
  border-right: 1.5px solid var(--accent);
  border-bottom: 1.5px solid var(--accent);
  transform: rotate(-45deg);
  transition: transform .25s ease;
  flex: none;
}
.disclosure[open] > summary::before { transform: rotate(45deg); }
.disclosure__inner { padding-top: .5rem; }

.aside h3 { margin-bottom: .55rem; }
.aside p { color: var(--ink-soft); font-size: .98rem; }

/* --- časté otázky ------------------------------------------------------- */
/* Desktop: nadpis v levém sloupci, otázky v pravém. Mobil: pod sebou
   (viz media query níž). */

.faq-layout {
  display: grid;
  grid-template-columns: minmax(0, 20rem) minmax(0, 1fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
}

.faq-layout__head h2 { margin-bottom: 0; }

.faq details {
  border-bottom: 1px solid var(--line);
}
.faq details:first-of-type {
  border-top: 1px solid var(--line);
}

.faq summary {
  position: relative;
  list-style: none;
  cursor: pointer;
  padding: 1.1rem 2.5rem 1.1rem 0;
  font-family: var(--serif);
  font-size: 1.08rem;
  transition: color .2s ease;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary:hover { color: var(--accent-ink); }

.faq summary::after {
  content: "";
  position: absolute;
  right: .4rem;
  top: 1.65rem;
  width: .62rem;
  height: .62rem;
  border-right: 1.5px solid var(--accent);
  border-bottom: 1.5px solid var(--accent);
  transform: rotate(45deg);
  transform-origin: center;
  transition: transform .25s ease;
}
.faq details[open] summary::after { transform: rotate(-135deg); }

.faq details p {
  margin: 0;
  padding: 0 2.5rem 1.4rem 0;
  color: var(--ink-soft);
  max-width: 60ch;
}

/* --- plynulé rozbalování odpovědí (FAQ i "Co si připravit") -------------
   Výšku "auto" animovat nejde, proto odpověď leží v mřížkovém obalu a
   animuje se grid-template-rows z 0fr na 1fr — to plynulá hodnota je.

   Pravidla jsou schválně až pod .is-animated, což je třída, kterou přidá JS
   (viz <script> v index.html). Bez skriptu zůstává odpověď složená na
   nulovou výšku i po otevření; takhle zůstává <details> i bez JS plně
   funkční, jen bez animace.

   Otevřený stav řídí třída .is-expanded, ne atribut [open]: při zavírání
   musí obsah nejdřív doanimovat a teprve pak se [open] odebere, jinak by
   ho prohlížeč skryl okamžitě. Šipka se proto řídí toutéž třídou, aby se
   otáčela zároveň s obsahem, ne o 400 ms dřív.

   FAQ (.faq.is-animated details … .faq__body) a blok "Co si připravit"
   (.disclosure.is-animated … .disclosure__body) mají STEJNÉ časování,
   křivku i pravidlo pro otáčení šipky — jde o jednu sdílenou animaci na
   dvou různých značkách, ne o dvě oddělená řešení. */
.faq.is-animated .faq__body,
.disclosure.is-animated .disclosure__body {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .24s ease;
}
/* Ořezávat musí až vnitřní obal, ne odstavec sám: overflow:hidden sice
   ořízne text, ale padding odstavce zůstane stát, takže by složený stav
   měl pořád ~22px a na konci zavírání by o ně obsah skočil. Takhle se
   ořezává i padding a odpověď se složí přesně na nulu. */
.faq.is-animated .faq__inner,
.disclosure.is-animated .disclosure__inner { overflow: hidden; }

.faq.is-animated details.is-expanded .faq__body,
.disclosure.is-animated.is-expanded .disclosure__body {
  grid-template-rows: 1fr;
  opacity: 1;
  transition:
    grid-template-rows .42s cubic-bezier(.32, .72, .3, 1),
    opacity .3s ease .08s;
}

.faq.is-animated details[open] summary::after { transform: rotate(45deg); }
.faq.is-animated details.is-expanded summary::after { transform: rotate(-135deg); }

.disclosure.is-animated[open] > summary::before { transform: rotate(-45deg); }
.disclosure.is-animated.is-expanded > summary::before { transform: rotate(45deg); }

@media (prefers-reduced-motion: reduce) {
  /* žádná změna výšky — odpověď se prostě objeví */
  .faq.is-animated .faq__body,
  .faq.is-animated details.is-expanded .faq__body,
  .disclosure.is-animated .disclosure__body,
  .disclosure.is-animated.is-expanded .disclosure__body,
  .features-groups.is-animated .features-group__body,
  .features-groups.is-animated .features-group.is-expanded .features-group__body {
    grid-template-rows: 1fr;
    opacity: 1;
    transition: none;
  }

  /* .benefits__detail NENÍ uvnitř <details> — na rozdíl od FAQ/.disclosure
     tu viditelnost otevřeného/zavřeného stavu drží výhradně grid-template-
     -rows (0fr/1fr), ne nativní [open]. Vynutit tu natrvalo 1fr by proto
     zrušilo sbalování úplně; zůstává jen okamžitý přechod beze změny
     výšky mezi oběma stavy. */
  .benefits.is-collapsible .benefits__detail,
  .benefits.is-collapsible.is-open .benefits__detail {
    transition: none;
  }
}

/* --- závěr: představení autora + kontakt --------------------------------
   Dřív dvě samostatné sekce pod sebou. Teď jeden blok na jediné barevně
   odlišené ploše stránky: vlevo stručné představení (podřízené, h3),
   vpravo hlavní výzva ke kontaktu (h2). */

.closing {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
  gap: clamp(2.5rem, 6vw, 5rem);
  align-items: center;
}

.closing__about {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: clamp(1.2rem, 3vw, 1.8rem);
  align-items: start;
}
.closing__about-text h3 {
  font-size: 1.35rem;
  margin-bottom: .5rem;
}
.closing__about-text p:not(.eyebrow) {
  color: var(--ink-soft);
  font-size: .98rem;
}

/* Medailon sdílí PRINCIP dvou vrstev s tlačítky (viz komentář u .wc-surface
   výš): spolehlivá plná výplň na ::before, nad ní stejná výplň s malovaným,
   lehce nepravidelným okrajem přes filtr #wc-edge na ::after. Kruhový tvar
   drží border-radius: 50 %, který obě pseudovrstvy dědí. Iniciály leží nad
   oběma vrstvami, takže zůstávají ostré a čitelné; medailon je čistě
   dekorativní (aria-hidden), takže nemá žádný interaktivní stav. */
.monogram {
  width: 5.5rem;
  height: 5.5rem;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: var(--accent-ink);
  font-family: var(--serif);
  font-size: 1.75rem;
  letter-spacing: .08em;
}
.monogram::before,
.monogram::after {
  background-color: var(--accent-bg);
}
.monogram::after {
  box-shadow: inset 0 0 0 1px var(--line);
}

.closing__contact { max-width: 46ch; }

.contact__action {
  display: flex;
  flex-wrap: wrap;
  gap: .9rem 1.4rem;
  align-items: center;
  margin-block: 1.8rem 1.1rem;
}

/* "Zobrazit telefon" se po odhalení mění na skutečné číslo (viz skript) —
   min-width drží šířku pevnou, ať odhalení nezpůsobí viditelný poskok
   okolního obsahu. */
.contact__phone {
  display: inline-block;
  min-width: 8.5rem;
  font: inherit;
  font-size: .97rem;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
}

.contact__copy {
  font-size: .92rem;
  color: var(--ink-soft);
  word-break: break-word;
}

/* --- responzivita ------------------------------------------------------- */

@media (max-width: 900px) {
  /* Ukázka, FAQ i závěr přecházejí do jednoho sloupce. Pořadí v DOM už
     odpovídá čtení shora dolů: text → náhled, nadpis → otázky,
     představení → kontakt. */
  .showcase {
    grid-template-columns: 1fr;
    /* Pořadí na mobilu: nadpis → věta → zařízení → volby → přínosy.
       K ukázce se tak návštěvník dostane dřív než k vysvětlování.
       Rozestup mezi řádky (32px) platí i mezi dokončenou kompozicí
       ukázky (zařízení + volby prohlížení) a přínosy — .showcase__stage
       má vlastní spodní odsazení pro přesah telefonu (viz výš), takže
       32px navazuje až za jeho skutečným viditelným okrajem. */
    grid-template-areas: "head" "devices" "zoom" "benefits";
    gap: 32px;
  }
  .showcase__head,
  .showcase__benefits { max-width: none; }

  .faq-layout,
  .closing {
    grid-template-columns: 1fr;
  }

  /* "Co na webu bude" na mobilu: tři souvislé odstavce (.features-mobile)
     nahrazují úvodní větu i tři rozbalovací skupiny desktopu — ty se tu jen
     schovávají, jejich obsah, JS i styl zůstávají beze změny pro ≥901px. */
  .co-obsahuje__intro-desktop { display: none; }
  .features-groups { display: none; }
  .features-mobile { display: block; }

  /* Přínosy u ukázky: mobilní odstavec místo čtyř samostatných položek
     a jejich ovládání — seznam i tlačítko zůstávají v DOM pro desktop
     (≥901px), tady se jen schovávají. Druhý selektor musí mít stejnou
     specificitu jako `.benefits.is-collapsible + .benefits__toggle` výš
     (JS na tomhle zlomu .is-collapsible přidává), jinak by tlačítko i
     přes display:none zůstalo vidět. */
  .benefits-mobile { display: block; }
  .showcase__benefits .benefits,
  .showcase__benefits .benefits.is-collapsible + .benefits__toggle { display: none; }

  /* Čtyři kroky pod sebou, číslo vedle nadpisu. */
  .steps {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .showcase__text,
  .closing__contact { max-width: none; }

  .nav { display: none; }
}

@media (max-width: 560px) {
  body { font-size: 1rem; }
  .hero__actions .btn { width: 100%; text-align: center; }

  /* ------------------------------------------------------------------
     Mobilní rytmus (360–560px) — jasná hierarchie rozestupů místo
     jednoho dlouhého sledu: název→vysvětlení (6–8px), položky uvnitř
     skupiny (12–16px), samostatné obsahové skupiny (28–32px) a hlavní
     sekce (~56–64px CELKOVÉHO odstupu). Sekce nemají vlastní margin,
     jen padding-block na obou stranách (viz .section výš) — mezi dvěma
     sekcemi se tak sčítá padding OBOU, proto --section-y cílí na
     POLOVINU výsledného odstupu (28–32px každá strana = 56–64px mezi
     sekcemi), ne na celou hodnotu. Čitelnost drží současná velikost
     písma; délku stránky řeší tahle kapitola prostorem, ne textem. */

  :root {
    --section-y: clamp(1.75rem, 7vw, 2rem); /* 28–32px na stranu sekce */
  }

  .container { width: min(100% - 3rem, var(--container)); } /* ~24px/stranu */

  p { margin-bottom: 1.35rem; }               /* ~20–24px mezi odstavci */
  h1, h2, h3 { margin-bottom: .75em; }        /* nadpis → obsah, víc dechu */
  .section__head { margin-bottom: 2rem; }     /* nadpis sekce → první obsah */

  /* --- sekce s ukázkou — telefon se v sestavě zvětší, aby jeho displej
     zůstal na malé šířce čitelný. Dřívější dodatečný spodní odstup
     (.showcase__devices) je pryč — .showcase__stage už sám rezervuje
     místo pro přesah telefonu (viz výš), druhá vrstva paddingu za
     popiskem jen zbytečně natahovala mezeru před tlačítky a přínosy. --- */
  .wcdev--phone { width: 27%; right: -1%; }

  /* --- seznam funkcí — pohodlné skenování palcem --- */
  .features li { line-height: 1.6; }

  /* --- čtyři kroky — vysvětlení blízko názvu (6–8px), kroky odděluje
     24px (viz i .steps v @media max-width:900px výš) --- */
  .steps { gap: 24px; }
  .steps h3 { margin-bottom: 7px; }
  .steps p { line-height: 1.6; }

  /* --- kroky → cena → "Co si připravit" — přechod mezi kroky a doplňujícími
     bloky je taky samostatná obsahová skupina (28–32px), ne samostatná
     sekce navíc. */
  .aside-grid {
    margin-top: 16px;
    padding-top: 16px;
    gap: 30px;
  }

  /* --- FAQ — pohodlnější dotyková plocha, šipka vystředěná i u
     víceřádkových otázek --- */
  .faq summary {
    padding-block: 1.3rem;
    padding-right: 2.2rem;
    line-height: 1.4;
  }
  .faq summary::after {
    top: 50%;
    right: .2rem;
    transform: translateY(-50%) rotate(45deg);
  }
  .faq details[open] summary::after { transform: translateY(-50%) rotate(-135deg); }
  /* se zapnutou animací se šipka řídí .is-expanded (viz komentář výš),
     jinak by se na mobilu otočila dřív než se odpověď rozbalí */
  .faq.is-animated details[open] summary::after { transform: translateY(-50%) rotate(45deg); }
  .faq.is-animated details.is-expanded summary::after { transform: translateY(-50%) rotate(-135deg); }
  .faq details p { padding-bottom: 1.6rem; }

  /* --- závěr — monogram nad textem, ať zůstane řádek čitelný --- */
  .closing { gap: 2.6rem; }
  .closing__about {
    grid-template-columns: 1fr;
    gap: 1.2rem;
  }
  .contact__action { margin-block: 2rem 1.2rem; }
}

/* --- animace ------------------------------------------------------------ */

@keyframes vynoreni {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: none; }
}

.hero__text > * {
  animation: vynoreni .7s ease-out both;
}
.hero__text > *:nth-child(2) { animation-delay: .07s; }
.hero__text > *:nth-child(3) { animation-delay: .14s; }
.hero__text > *:nth-child(4) { animation-delay: .21s; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-delay: 0ms !important;
    transition-duration: .001ms !important;
  }
}
