/* bostore-listovac.css
 * AI Listovač CSS pro Bang & Olufsen produkty v bostore.cz
 * 
 * UPLOAD POSTUP (= jednou, jednorázově):
 * 1. Shoptet admin → Vzhled → Editor šablony → záložka Externí soubory
 * 2. Klik "Přidat soubor" → upload tohoto souboru (bostore-listovac.css)
 * 3. Po uploadu Shoptet vrátí URL typu:
 *    https://www.bostore.cz/user/documents/upload/ExterniSoubory/bostore-listovac.css?v=1
 * 4. Záložka Záhlaví → najdi sekci "před koncovým tagem </head>"
 *    nebo "Vlastní HTML kód" → vlož:
 *      <link rel="stylesheet" href="/user/documents/upload/ExterniSoubory/bostore-listovac.css?v=1">
 * 5. Ulož + clear cache (admin → Pokročilé → Mezipaměť → Vyprázdnit)
 *
 * Po každé úpravě CSS:
 * - re-upload soubor (= overwrite v Externích souborech)
 * - bump query param: ?v=1 → ?v=2 → ... (= cache bust pro browser)
 *
 * Bez tohoto kroku produkty Bang & Olufsen v bostore.cz mají popisy bez
 * formátování (= soundbar je v admin náhledu jiný než na frontendu, protože
 * admin renderuje s default CSS, frontend bez wrapperu = raw divs).
 */

.vlst-listovac { font-size: 15px !important; color: #1f2937 !important; }
.vlst-listovac h2, .vlst-listovac h3 { margin-top: 1.5em !important; }
.vlst-listovac p { margin: 0.75em 0 !important; }
.vlst-listovac ul, .vlst-listovac ol { padding-left: 1.5em !important; }

/* Defensive safety net pro raw <img> v dlouhém popisu (= AI Listovač zapomněl
   wrapper .embedded-image nebo .image-placeholder). Bez tohoto pravidla
   obrázek zachová native šířku (typicky 1500-2000 px) a přesahuje content
   container. Bug zachycen 2026-05-11 na Meze ASTRU preview. */
.vlst-listovac img {
  max-width: 100% !important;
  height: auto !important;
  display: block !important;
}

/* Když je <img> direct child layout divu (section-with-image-below /
   section-twocol-* / feature-card) bez wrapping .embedded-image,
   aplikuj layout-correct rozměry — totéž, co by aplikoval wrapper. */
.vlst-listovac .section-with-image-below > img {
  width: 100% !important;
  max-height: 480px !important;
  object-fit: cover !important;
  border-radius: 8px !important;
  margin: 16px 0 !important;
}
.vlst-listovac .section-twocol-imageleft > img,
.vlst-listovac .section-twocol-imageright > img {
  width: 100% !important;
  aspect-ratio: 4 / 3 !important;
  max-height: 320px !important;
  object-fit: cover !important;
  border-radius: 8px !important;
}
.vlst-listovac .section-twocol-imageleft > img { order: -1 !important; }
.vlst-listovac .feature-card > img {
  width: 100% !important;
  height: 280px !important;
  object-fit: contain !important;
  border-radius: 8px !important;
}

/* Cross-link odkazy v dlouhém popisu (např. „přidáte Sonos Sub Mini" odkazuje
   na detail produktu). Bez tohoto stylu Shoptet šablona vykresluje <a> jako
   obyčejný text (color: inherit; text-decoration: none) — odkazy jsou tam,
   ale vizuálně neviditelné a uživatel je nepozná jako klikatelné. Bug
   zachycen 2026-05-07 na BEAM2EU1 — Mila importoval XLSX, odkazy v live HTML
   přítomné, ale visually se neprojevily. */
.vlst-listovac a,
.vlst-listovac a:link,
.vlst-listovac a:visited {
  color: #111827 !important;
  text-decoration: underline !important;
  text-decoration-thickness: 1px !important;
  text-underline-offset: 2px !important;
  font-weight: 500 !important;
  transition: color 0.15s ease !important;
}
.vlst-listovac a:hover,
.vlst-listovac a:focus {
  color: #4b5563 !important;
  text-decoration-thickness: 2px !important;
}

/* Sekční oddělovač — tenká světle šedá linka před každou novou logickou
   sekcí v dlouhém popisu. */
.vlst-listovac > h2,
.vlst-listovac > .feature-card,
.vlst-listovac > .section-twocol-imageright,
.vlst-listovac > .section-twocol-imageleft,
.vlst-listovac > .who-fits {
  border-top: 1px solid #e5e7eb !important;
  padding-top: 32px !important;
  margin-top: 32px !important;
}
/* .outro-services má vlastní grey box (viz níže), border-top by se zdvojeně
   vykreslil mimo grey background — vynecháno. */

/* Image vložené po substituci placeholderů v _embed_images_in_long_desc.
   Pozn.: substituce vkládá <img> dovnitř <div class="image-placeholder">,
   takže ten samý wrapper má dva stavy:
     - Empty (žádný child) → zebra fallback (= došel pool, PA dohlédne v review)
     - Filled (má <img> child) → čistý container s overflow:hidden, img full-width.
   `object-fit: cover` cropuje obrázek na containerovou aspect-ratio — používá
   se pro section-with-image-below a section-twocol layouty, kde wireframe
   diktuje pevnou ratio. feature-card má tento default override (viz níž). */
/* Wrapper divs — kontainer kolem <img>. Element selector `div.` zabraňuje
   tomu, aby pravidla se aplikovala na raw `<img class="feature-card-image">`
   (AI Listovač občas generuje bez wrapping div). */
.vlst-listovac div.embedded-image,
.vlst-listovac div.image-placeholder,
.vlst-listovac div.feature-card-image {
  display: block !important;
  border-radius: 8px !important;
  overflow: hidden !important;
  /* Solid background pro non-empty (= když je <img> uvnitř ale nepokrývá
     box kvůli portrait/square aspect): bílá místo zebra. Mílovo pravidlo
     2026-05-14: pruhované pozadí kolem reálné fotky vypadá nedotaženě. */
  background: #ffffff !important;
}
.vlst-listovac div.embedded-image img,
.vlst-listovac div.image-placeholder img,
.vlst-listovac div.feature-card-image img {
  width: 100% !important;
  height: 100% !important;
  display: block !important;
  object-fit: cover !important;
}
/* Raw <img class="feature-card-image"> bez wrapping divu (= AI Listovač
   neidiomatická generace). Aplikuje fit pravidla přímo na <img>. */
.vlst-listovac img.embedded-image,
.vlst-listovac img.image-placeholder,
.vlst-listovac img.feature-card-image {
  display: block !important;
  border-radius: 8px !important;
  max-width: 100% !important;
  height: auto !important;
  background: #ffffff !important;
}
/* Empty placeholder = zebra fallback. `div.X` element selector je KRITICKÝ —
   AI Listovač občas generuje `<img class="feature-card-image">` (= raw img
   s class, ne wrapper div). `<img>` element NIKDY nemá child `<img>`, takže
   `:not(:has(img))` by na něj matchnul a zebra by se aplikovala na samotný
   reálný obrázek. Bug zachycený 2026-05-14 na live https://www.voix.cz/
   stolky--stojany--drzaky/the-pearl-stand/ — zebra prosvítala kolem stand
   fotky. Element-selector `div.` to omezuje jen na `<div>` wrappery. */
.vlst-listovac div.image-placeholder:not(:has(img)),
.vlst-listovac div.feature-card-image:not(:has(img)) {
  background: repeating-linear-gradient(45deg, #f3f4f6, #f3f4f6 10px, #e5e7eb 10px, #e5e7eb 20px) !important;
  padding: 24px !important;
  font-size: 12px !important;
  color: #6b7280 !important;
  text-align: center !important;
  font-family: SFMono-Regular, Menlo, monospace !important;
  min-height: 120px !important;
}

/* section-with-image-below: H2 + p (mimo wrapper), pak full-width obrázek 16:9.
   Mílovo pravidlo 2026-05-12: full-width VELKÁ fotka jako breakpoint v textu
   (= wireframe ukazuje široké landscape fotky, NE 720×480 centrované).
   Aspect 16:9 + max-width 100% využije celý container Shoptet šablony. */
.vlst-listovac .section-with-image-below {
  margin: 32px 0 !important;
  width: 100% !important;
}
.vlst-listovac .section-with-image-below .embedded-image,
.vlst-listovac .section-with-image-below .image-placeholder,
.vlst-listovac .section-with-image-below .embedded-video {
  aspect-ratio: 16 / 9 !important;
  max-height: 560px !important;
  width: 100% !important;
}
/* embedded-video: vnitřní <video> tag dostane full-width + 16:9, stejně jako
   <img>. Mílovo pravidlo 2026-05-12: video v intro sekci musí být stejně
   velké jako velký full-width obrázek (= 16:9, NE menší ratio jako 4:3). */
.vlst-listovac .embedded-video video {
  width: 100% !important;
  height: 100% !important;
  display: block !important;
  object-fit: cover !important;
  border-radius: 8px !important;
}

/* feature-card: tinted pozadí, 2-col grid — image vlevo (280px wide, natural
   aspect ratio) + text vpravo, vertically centered.
   Změna oproti v7: zrušen aspect-ratio 1/1 + object-fit cover (= ořezával
   panoramic obrázky na čtvercovou výseč). Teď image col má fixed width 280px
   a `<img>` má height: auto → obrázek se zobrazí v natural ratio:
     - panoramic exploded view 3:1 → 280×93 (úzký, ale celý vidět)
     - 16:9 widescreen → 280×158
     - 4:3 → 280×210
     - 1:1 čtverec → 280×280
   `align-items: center` vystřeďí krátký image vertikálně proti vyššímu textu. */
.vlst-listovac .feature-card {
  display: grid !important;
  grid-template-columns: 400px 1fr !important;
  gap: 40px !important;
  background: #f3f4f6 !important;
  border-radius: 12px !important;
  padding: 40px !important;
  margin: 28px 0 !important;
  align-items: center !important;
}
/* Image-col je fixed-size box 400×280. Uvnitř se `<img>` vejde celý
   (object-fit: contain) a vystředí se. Tím je obrázek VŽDYCKY:
     - ve stejné velikosti boxu (= konzistentní layout napříč produkty)
     - celý vidět bez cropu (panoramic 3:1, 1:1 čtverec, 16:9, 4:3 — vše OK)
     - vertikálně i horizontálně centrovaný v boxu
   Tinted background karty prosvítá v okolním prostoru (= clean look). */
.vlst-listovac .feature-card .feature-card-image,
.vlst-listovac .feature-card > .embedded-image {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  height: 280px !important;
  border-radius: 8px !important;
  overflow: hidden !important;
}
.vlst-listovac .feature-card .feature-card-image img,
.vlst-listovac .feature-card > .embedded-image img {
  max-width: 100% !important;
  max-height: 100% !important;
  width: auto !important;        /* override generic `width: 100%` */
  height: auto !important;       /* override generic `height: 100%` */
  display: block !important;
  object-fit: contain !important; /* override generic `cover` — žádný crop */
}
.vlst-listovac .feature-card-content { padding: 4px 0 !important; }
.vlst-listovac .feature-card-content h3 {
  text-transform: uppercase !important;
  font-size: 13px !important;
  letter-spacing: 0.5px !important;
  margin: 0 0 10px !important;
  color: #4b5563 !important;
}
.vlst-listovac .feature-card-content p { margin: 0 !important; }

/* section-twocol-imageright: text vlevo, obrázek vpravo (4:3) */
.vlst-listovac .section-twocol-imageright,
.vlst-listovac .section-twocol-imageleft {
  display: grid !important;
  grid-template-columns: 1fr 1fr !important;
  gap: 24px !important;
  margin: 28px 0 !important;
  align-items: center !important;
}
.vlst-listovac .section-twocol-imageright .embedded-image,
.vlst-listovac .section-twocol-imageright .image-placeholder,
.vlst-listovac .section-twocol-imageleft .embedded-image,
.vlst-listovac .section-twocol-imageleft .image-placeholder {
  aspect-ratio: 4 / 3 !important;
  max-height: 320px !important;
}
.vlst-listovac .section-twocol-imageleft .embedded-image,
.vlst-listovac .section-twocol-imageleft .image-placeholder { order: -1 !important; }
.vlst-listovac .section-twocol-content h2,
.vlst-listovac .section-twocol-content h3 { margin-top: 0 !important; }
.vlst-listovac .section-twocol-content > :first-child { margin-top: 0 !important; }
.vlst-listovac .section-twocol-content > :last-child { margin-bottom: 0 !important; }

/* who-fits: 2 sloupce sedne / nesedne pod společným nadpisem */
.vlst-listovac .who-fits {
  display: grid !important;
  grid-template-columns: 1fr 1fr !important;
  gap: 24px !important;
  margin: 32px 0 !important;
  background: #f9fafb !important;
  padding: 24px 28px !important;
  border-radius: 12px !important;
}
.vlst-listovac .who-fits > h2 {
  grid-column: 1 / -1 !important;
  margin: 0 0 4px !important;
  font-size: 22px !important;
  color: #111827 !important;
}
.vlst-listovac .fits-yes,
.vlst-listovac .fits-no { padding: 0 !important; }
.vlst-listovac .fits-yes h4,
.vlst-listovac .fits-no h4 {
  margin: 0 0 8px !important;
  font-size: 14px !important;
  font-weight: 700 !important;
}
/* Mílovo pravidlo 2026-05-13: who-fits nadpisy „Sedne vám" / „Sedne vám méně"
   nesmí být barevně. Konsistentní s ostatními nadpisy = černá #111827, tučně. */
.vlst-listovac .fits-yes h4 { color: #111827 !important; }
.vlst-listovac .fits-no h4 { color: #111827 !important; }
.vlst-listovac .fits-yes ul,
.vlst-listovac .fits-no ul { margin: 0 !important; padding-left: 18px !important; color: #1f2937 !important; }
.vlst-listovac .fits-yes li,
.vlst-listovac .fits-no li { margin: 6px 0 !important; }

/* outro-services: šedý box JEN pro "Co najdete v balení".
   Mílovo pravidlo 2026-05-11: jenom "Co je v balení" má grey background,
   protože obsahuje statický seznam příslušenství (= deklarativní/factual).
   "Vyzkoušejte na vlastní kůži" a "Doprava a akustické ladění zdroje" jsou
   SAMOSTATNÉ sekce mimo .outro-services (= žádný grey box, jen text). */
.vlst-listovac .outro-services {
  margin: 32px 0 !important;
  padding: 28px !important;
  background: #fafafa !important;
  border-radius: 12px !important;
}
.vlst-listovac .outro-services h2 {
  margin: 0 0 12px !important;
  font-size: 18px !important;
  color: #1f2937 !important;
}
.vlst-listovac .outro-services p { margin: 0 0 16px !important; }
.vlst-listovac .outro-services p:last-child { margin-bottom: 0 !important; }
.vlst-listovac .outro-services .section-with-image-below {
  margin-top: 16px !important;
}

/* Mobile fallback. */
@media (max-width: 700px) {
  .vlst-listovac .feature-card,
  .vlst-listovac .section-twocol-imageright,
  .vlst-listovac .section-twocol-imageleft,
  .vlst-listovac .who-fits {
    grid-template-columns: 1fr !important;
  }
  .vlst-listovac .section-twocol-imageleft .embedded-image,
  .vlst-listovac .section-twocol-imageleft .image-placeholder { order: 0 !important; }
}