/* ============================================================
   KOMPATIBILITA OBSAHU Z DB — podmnožina Bootstrapu, jen uvnitř
   .gb-content, postavená na tokenech v2.

   PROČ: v DB leží 165 334 produktových popisů (VI_PRO_TEXTS,
   PTX_TYP = 0, všechny jazyky) a 1 209 článků (IS_MAR_ACT_TEXT,
   TEXT_TYPE_ID = 3) psaných v Bootstrapu. Změřeno 27. 8. 2026 na
   vzorku PTX_ID % 37 = 0 (n = 4 467), metodika v design/DESIGN_V2.md:
     37 %  row + col-*        → bez gridu se sloupce slijí pod sebe
     39 %  class="table…"     → bez stylu bezrámečková změť
     23 %  <table border="1"> → legacy spec tabulky
     34 %  <i class="bi bi-*">→ ikony z CDN, které v2 nelinkuje
     31 %  border-start/-4    → barevné boční linky u boxů
     4,2 % alert-*, 3,5 % card, 1,0 % badge, 0,7 % iframe
   Přepsat ten obsah nelze a načítat kvůli němu celý Bootstrap
   (227 kB) taky ne. Tohle je ~20 kB a pokrývá jen to, co se
   v datech reálně vyskytuje.

   ⚠️ Rozsah je záměrně uzavřený: NEPŘIDÁVAT sem třídy „pro
   jistotu". Nový obsah se píše třídami gb-* z content kitu
   (viz gb.css). Tenhle soubor je most pro starý obsah a po
   případné migraci dat zmizí.
   ============================================================ */

/* ── Mřížka ───────────────────────────────────────────────── */
/* ⚠️ Bootstrap dává `.row` záporný postranní margin, který mu vyruší
   padding rodičovského `.container`/`.col`. `.gb-content` žádný padding
   nemá, takže ten margin neměl co vyrušit a každý `.row` vyčníval 10 px
   ven z obsahového bloku na obou stranách — nejvíc vidět u řádků
   s vlastním pozadím (`row bg-white rounded`), kde bílá karta trčí
   širší než text kolem ní. Gutter dělá jen padding sloupců, vnější
   hrany řádku sedí přesně na šířku obsahu. */
.gb-content .row {
  display: flex; flex-wrap: wrap;
  margin-inline: 0;
  row-gap: var(--gb-sp-md);
}
.gb-content .row > * { padding-inline: var(--gb-sp-sm); width: 100%; }
/* `g-0` = žádná mezera mezi sloupci (2,6 % popisů — obrázek má sedět
   na hraně karty). */
.gb-content .row.g-0 > * { padding-inline: 0; }
.gb-content .col { flex: 1 0 0%; }
.gb-content .col-auto { width: auto; }
.gb-content .col-12 { width: 100%; }
.gb-content .col-11 { width: 91.6667%; }
.gb-content .col-10 { width: 83.3333%; }
.gb-content .col-9  { width: 75%; }
.gb-content .col-8  { width: 66.6667%; }
.gb-content .col-7  { width: 58.3333%; }
.gb-content .col-6  { width: 50%; }
.gb-content .col-5  { width: 41.6667%; }
.gb-content .col-4  { width: 33.3333%; }
.gb-content .col-3  { width: 25%; }
.gb-content .col-2  { width: 16.6667%; }
.gb-content .col-1  { width: 8.3333%; }
/* col-sm-* používá 7 starších článků z doby Bootstrapu 3 — změřeno nad
   IS_MAR_ACT_TEXT: 4× col-sm-6, 3× col-sm-4, 1× col-sm-8. Bez nich se ty
   články na desktopu slévají do jednoho sloupce. V produktových popisech
   se col-sm-* nevyskytuje ani jednou. */
@media (min-width: 576px) {
  .gb-content .col-sm-8 { width: 66.6667%; }
  .gb-content .col-sm-6 { width: 50%; }
  .gb-content .col-sm-4 { width: 33.3333%; }
}
@media (min-width: 768px) {
  .gb-content .col-md-12 { width: 100%; }
  .gb-content .col-md-9 { width: 75%; }
  .gb-content .col-md-8 { width: 66.6667%; }
  .gb-content .col-md-6 { width: 50%; }
  .gb-content .col-md-4 { width: 33.3333%; }
  .gb-content .col-md-3 { width: 25%; }
}
@media (min-width: 992px) {
  .gb-content .col-lg-12 { width: 100%; }
  .gb-content .col-lg-8 { width: 66.6667%; }
  .gb-content .col-lg-6 { width: 50%; }
  .gb-content .col-lg-4 { width: 33.3333%; }
  .gb-content .col-lg-3 { width: 25%; }
}
.gb-content .g-2 { row-gap: var(--gb-sp-sm); }
.gb-content .g-3 { row-gap: var(--gb-sp-md); }
.gb-content .g-4 { row-gap: var(--gb-sp-lg); }
.gb-content .g-5 { row-gap: var(--gb-sp-2xl); }

/* ── Odsazení (jen stupně, které se v datech vyskytují) ───── */
.gb-content .m-0 { margin: 0; }
.gb-content .mb-0 { margin-bottom: 0; }
.gb-content .mb-1 { margin-bottom: var(--gb-sp-xs); }
.gb-content .mb-2 { margin-bottom: var(--gb-sp-sm); }
.gb-content .mb-3 { margin-bottom: var(--gb-sp-md); }
.gb-content .mb-4 { margin-bottom: var(--gb-sp-lg); }
.gb-content .mb-5 { margin-bottom: var(--gb-sp-2xl); }
.gb-content .mt-0 { margin-top: 0; }
.gb-content .mt-1 { margin-top: var(--gb-sp-xs); }
.gb-content .mt-2 { margin-top: var(--gb-sp-sm); }
.gb-content .mt-3 { margin-top: var(--gb-sp-md); }
.gb-content .mt-4 { margin-top: var(--gb-sp-lg); }
.gb-content .mt-5 { margin-top: var(--gb-sp-2xl); }
.gb-content .me-1 { margin-right: var(--gb-sp-xs); }
.gb-content .me-2 { margin-right: var(--gb-sp-sm); }
.gb-content .me-3 { margin-right: var(--gb-sp-md); }
.gb-content .ms-1 { margin-left: var(--gb-sp-xs); }
.gb-content .ms-2 { margin-left: var(--gb-sp-sm); }
.gb-content .ms-3 { margin-left: var(--gb-sp-md); }
.gb-content .ms-auto { margin-left: auto; }
.gb-content .mx-auto { margin-inline: auto; }
.gb-content .my-3 { margin-block: var(--gb-sp-md); }
.gb-content .my-4 { margin-block: var(--gb-sp-lg); }
.gb-content .p-0 { padding: 0; }
.gb-content .p-2 { padding: var(--gb-sp-sm); }
.gb-content .p-3 { padding: var(--gb-sp-md); }
.gb-content .p-4 { padding: var(--gb-sp-lg); }
.gb-content .p-5 { padding: var(--gb-sp-2xl); }
.gb-content .px-3 { padding-inline: var(--gb-sp-md); }
.gb-content .px-4 { padding-inline: var(--gb-sp-lg); }
.gb-content .py-2 { padding-block: var(--gb-sp-sm); }
.gb-content .py-3 { padding-block: var(--gb-sp-md); }
.gb-content .py-4 { padding-block: var(--gb-sp-lg); }
.gb-content .pt-3 { padding-top: var(--gb-sp-md); }
.gb-content .pb-3 { padding-bottom: var(--gb-sp-md); }

/* ── Flex a rozměry ──────────────────────────────────────── */
.gb-content .d-flex { display: flex; }
.gb-content .d-block { display: block; }
.gb-content .d-inline-block { display: inline-block; }
.gb-content .d-none { display: none; }
.gb-content .flex-wrap { flex-wrap: wrap; }
.gb-content .flex-column { flex-direction: column; }
.gb-content .align-items-center { align-items: center; }
.gb-content .align-items-start { align-items: flex-start; }
.gb-content .justify-content-center { justify-content: center; }
.gb-content .justify-content-between { justify-content: space-between; }
.gb-content .gap-2 { gap: var(--gb-sp-sm); }
.gb-content .gap-3 { gap: var(--gb-sp-md); }
.gb-content .h-100 { height: 100%; }
.gb-content .w-100 { width: 100%; }
.gb-content .img-fluid { max-width: 100%; height: auto; }
/* ⚠️ 33 článků má v HTML z editoru `<img style="width:775px;height:362px">`.
   `max-width:100%` šířku na mobilu srazí, ale inline `height` zůstane —
   obrázek se pak kreslí do rámečku s úplně jiným poměrem stran (měřeno:
   2,14:1 obrázek v rámečku 360×362 px, tj. ~190 px prázdna). Inline styl
   přebije jen `!important`; je to tady tedy záměrně a jen na tenhle jeden
   případ. Odpovídá to tvrdému pravidlu v gb.css („obrázek NIKDY nemění
   poměr stran"), které HTML z DB jinak obchází. */
.gb-content img[style*="height"] { height: auto !important; }

/* ── Text ────────────────────────────────────────────────── */
.gb-content .text-center { text-align: center; }
.gb-content .text-start { text-align: left; }
.gb-content .text-end { text-align: right; }
.gb-content .fw-bold, .gb-content .fw-semibold { font-weight: 600; }
.gb-content .fw-normal { font-weight: 400; }
.gb-content .small { font-size: var(--gb-fs-xs); }
.gb-content .lead { font-size: var(--gb-fs-lg); line-height: var(--gb-lh-lg); }
.gb-content .text-muted { color: var(--gb-ink-2); }
.gb-content .text-success { color: var(--gb-green-2); }
.gb-content .text-primary { color: var(--gb-navy); }
.gb-content .text-info { color: var(--gb-info); }
.gb-content .text-danger { color: var(--gb-err); }
.gb-content .text-secondary { color: var(--gb-ink-2); }
.gb-content .text-warning { color: var(--gb-warn); }
.gb-content .text-white { color: #fff; }
.gb-content .list-unstyled { list-style: none; padding-left: 0; }
.gb-content .text-uppercase { text-transform: uppercase; }
/* Blokové zarovnání do bloku (55 % popisů) dělá na úzkých displejích
   „řeky" mezer — čeština se nedělí. Na mobilu ho proto vypínáme. */
@media (max-width: 700px) {
  .gb-content [style*="justify"] { text-align: left !important; }
}

/* ── Rámečky, pozadí, zaoblení ───────────────────────────── */
.gb-content .border { border: 1px solid var(--gb-line-3); }
.gb-content .border-0 { border: 0; }
.gb-content .border-start { border-left: 1px solid var(--gb-line-3); }
.gb-content .border-top { border-top: 1px solid var(--gb-line-3); }
.gb-content .border-bottom { border-bottom: 1px solid var(--gb-line-3); }
.gb-content .border-1 { border-left-width: 1px; }
.gb-content .border-2 { border-left-width: 2px; }
.gb-content .border-3 { border-left-width: 3px; }
.gb-content .border-4 { border-left-width: 4px; }
.gb-content .border-5 { border-left-width: 5px; }
.gb-content .border-primary { border-color: var(--gb-navy); }
.gb-content .border-success { border-color: var(--gb-green); }
.gb-content .border-info { border-color: var(--gb-info); }
.gb-content .border-danger { border-color: var(--gb-err); }
.gb-content .border-warning { border-color: var(--gb-warn-strong); }
.gb-content .border-secondary { border-color: var(--gb-ink-2); }
.gb-content .bg-white { background: #fff; }
.gb-content .bg-light { background: var(--gb-bg-4); }
.gb-content .bg-secondary { background: var(--gb-ink-2); color: #fff; }
.gb-content .rounded, .gb-content .rounded-3 { border-radius: var(--gb-r-md); }
.gb-content .rounded-2 { border-radius: var(--gb-r-sm); }
.gb-content .rounded-circle { border-radius: 50%; }
.gb-content .shadow-sm { box-shadow: var(--gb-shadow-sm); }
.gb-content .shadow { box-shadow: 0 4px 12px rgba(0, 0, 0, .08); }

/* ── Karta, upozornění, odznak ───────────────────────────── */
.gb-content .card {
  background: #fff; border: 1px solid var(--gb-line-3);
  border-radius: var(--gb-r-md); overflow: hidden;
}
.gb-content .card-body { padding: var(--gb-sp-lg); }
.gb-content .card-title { font-size: var(--gb-fs-lg); font-weight: 600; margin-bottom: var(--gb-sp-sm); }
.gb-content .card-text { margin: 0; }
.gb-content .alert {
  padding: var(--gb-sp-md) var(--gb-sp-lg); border-radius: var(--gb-r-sm);
  background: var(--gb-info-bg); border-left: 3px solid var(--gb-info);
}
.gb-content .alert-success { background: var(--gb-green-tint); border-left-color: var(--gb-green); }
.gb-content .alert-warning { background: var(--gb-warn-bg); border-left-color: var(--gb-warn-strong); }
.gb-content .alert-danger  { background: var(--gb-promo-bg); border-left-color: var(--gb-err); }
.gb-content .alert-info    { background: var(--gb-info-bg); border-left-color: var(--gb-info); }
.gb-content .badge {
  display: inline-block; padding: 3px 10px; border-radius: var(--gb-r-sm);
  font-size: var(--gb-fs-xxs); font-weight: 600; background: var(--gb-navy-tint); color: var(--gb-navy);
}
.gb-content .badge.bg-success { background: var(--gb-green); color: #fff; }
.gb-content .badge.bg-danger { background: var(--gb-err); color: #fff; }
.gb-content .badge.bg-primary { background: var(--gb-navy); color: #fff; }
.gb-content .badge.bg-warning { background: var(--gb-warn-strong); color: var(--gb-ink); }

/* ── Tabulky ─────────────────────────────────────────────── */
/* Bootstrapové i holé legacy (<table border="1" frame="box" rules="all">)
   dostávají stejný vzhled; oba typy scrollují uvnitř sebe. */
.gb-content .table, .gb-content table[border] { width: 100%; }
.gb-content .table th, .gb-content .table td,
.gb-content table[border] th, .gb-content table[border] td {
  padding: var(--gb-sp-sm) var(--gb-sp-md);
  border: 1px solid var(--gb-line-3);
  vertical-align: middle;
}
.gb-content .table-sm th, .gb-content .table-sm td { padding: 4px var(--gb-sp-sm); }
.gb-content .table-light th, .gb-content .table thead th { background: var(--gb-bg-4); font-weight: 600; }
.gb-content .table-striped tbody tr:nth-child(odd) { background: var(--gb-bg-4); }
.gb-content .table-borderless th, .gb-content .table-borderless td { border: 0; }
.gb-content .table-responsive { overflow-x: auto; }
.gb-content .align-middle { vertical-align: middle; }
/* Legacy fixní šířky buněk (<td style="width:150px">) nesmí rozbít mobil. */
@media (max-width: 700px) {
  .gb-content table td[style*="width"], .gb-content table th[style*="width"] { width: auto !important; }
}

/* ── Vložená videa (BS4 embed-responsive i BS5 ratio) ────── */
.gb-content .embed-responsive, .gb-content .ratio { position: relative; width: 100%; }
.gb-content .embed-responsive-16by9, .gb-content .ratio-16x9 { aspect-ratio: 16 / 9; }
.gb-content .embed-responsive > *, .gb-content .ratio > * {
  position: absolute; inset: 0; width: 100%; height: 100%;
}

/* ── Ikony Bootstrap Icons (bi bi-*) ─────────────────────────
   Místo webfontu z cizí CDN kreslíme ikonu jako masku z inline
   SVG — stejná kresba, nulová externí závislost, ~1 kB.

   ⚠️ Nenamapovaná ikona se NESMÍ nakreslit vůbec. Původní verze
   spoléhala na `mask: var(--bi, none)`, jenže `mask-image: none`
   neznamená „nic nekreslit", ale „nemaskovat" — čtvereček 1em
   × 1em s `background: currentColor` se pak vykreslil celý jako
   plná barevná placka. A netýkalo se to okraje dat: census nad
   vzorkem 1/401 popisů našel **112 různých jmen ikon** a
   **129 ze 138 popisů s ikonou (93 %) obsahuje aspoň jednu mimo
   namapovanou sadu**. Domapovat se to nedá (dopsání osmi
   nejčastějších sníží číslo jen na 89 %), takže rozhoduje
   fallback: šířku bere `--bi-size`, který nastavuje jen ikona,
   kterou umíme nakreslit. Bez něj má ::before nulovou šířku
   a v textu nezůstane ani mezera.

   Kdo přidává novou ikonu, nastaví v jejím pravidle OBOJÍ:
   `--bi` (kresba) i `--bi-size: 1em`. Když zapomene, ikona se
   nenakreslí — což je ta bezpečná strana. */
.gb-content [class*="bi-"]::before {
  content: ''; display: inline-block;
  width: var(--bi-size, 0); height: 1em; vertical-align: -.125em;
  background: currentColor;
  -webkit-mask: var(--bi, none) center / contain no-repeat;
  mask: var(--bi, none) center / contain no-repeat;
}
.gb-content .bi-check2, .gb-content .bi-check, .gb-content .bi-check-lg {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/></svg>');
}
.gb-content .bi-check-circle, .gb-content .bi-check2-circle, .gb-content .bi-check-circle-fill {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/><path d="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425z"/></svg>');
}
.gb-content .bi-shield-check {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M5.338 1.59a61 61 0 0 0-2.837.856.48.48 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.7 10.7 0 0 0 2.287 2.233c.346.244.652.42.893.533q.18.085.293.118a1 1 0 0 0 .101.025 1 1 0 0 0 .1-.025q.114-.034.294-.118c.24-.113.547-.29.893-.533a10.7 10.7 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524"/><path d="M10.854 5.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 7.793l2.646-2.647a.5.5 0 0 1 .708 0"/></svg>');
}
.gb-content .bi-lightning-charge, .gb-content .bi-lightning, .gb-content .bi-lightning-charge-fill {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M11.251.068a.5.5 0 0 1 .227.58L9.677 6.5H13a.5.5 0 0 1 .364.843l-8 8.5a.5.5 0 0 1-.842-.49L6.323 9.5H3a.5.5 0 0 1-.364-.843l8-8.5a.5.5 0 0 1 .615-.09z"/></svg>');
}
.gb-content .bi-exclamation-triangle, .gb-content .bi-exclamation-triangle-fill {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M7.938 2.016a.13.13 0 0 1 .125 0 .15.15 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.15.15 0 0 1-.054.06.12.12 0 0 1-.066.017H1.146a.12.12 0 0 1-.066-.017.15.15 0 0 1-.054-.06.12.12 0 0 1 .002-.183L7.884 2.073a.15.15 0 0 1 .054-.057"/><path d="M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/></svg>');
}
.gb-content .bi-rocket-takeoff, .gb-content .bi-rocket {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 0C6 2 5 4.5 5 7v2.5L3 12l1 1 1.6-1.2c.6.5 1.5.8 2.4.8s1.8-.3 2.4-.8L12 13l1-1-2-2.5V7c0-2.5-1-5-3-7zm0 7a1.2 1.2 0 1 1 0-2.4A1.2 1.2 0 0 1 8 7z"/><path d="M5.2 12.6C4.4 13.4 4 15 4 16c1 0 2.6-.4 3.4-1.2zM10.8 12.6l-2.2 2.2C9.4 15.6 11 16 12 16c0-1-.4-2.6-1.2-3.4z"/></svg>');
}
.gb-content .bi-arrow-clockwise, .gb-content .bi-arrow-repeat {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2z"/><path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466"/></svg>');
}
.gb-content .bi-arrow-up-circle {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-7.5 3.5a.5.5 0 0 1-1 0V5.707L5.354 7.854a.5.5 0 1 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 5.707z"/></svg>');
}
.gb-content .bi-rulers {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1 0a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1h-3V6a1 1 0 0 0-1-1H9V3a1 1 0 0 0-1-1H6V1a1 1 0 0 0-1-1zm4 1v1H4V1zm3 3v1H7V4zm3 3v1h-1V7z"/></svg>');
}
.gb-content .bi-bullseye {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/><path d="M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10m0 1A6 6 0 1 0 8 2a6 6 0 0 0 0 12"/><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8"/><path d="M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0"/></svg>');
}
.gb-content .bi-info-circle {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/><path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/></svg>');
}
.gb-content .bi-star, .gb-content .bi-star-fill {
  --bi-size: 1em;
  --bi: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.283.95l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/></svg>');
}

/* Font Awesome zbytky (5,3 % popisů): ikonu nekreslíme, ale nesmí
   po sobě nechat prázdné místo ani rozbité SVG. */
.gb-content .svg-inline--fa { height: 1em; width: auto; vertical-align: -.125em; }
.gb-content i.fa, .gb-content i.fas, .gb-content i.far, .gb-content i.fab { display: none; }

/* ══════════════════════════════════════════════════════════════════════════
   DRUHÝ KONZUMENT VRSTVY: stránky, které ještě nemají v2 verzi
   ══════════════════════════════════════════════════════════════════════════
   Vrstva výš vznikla pro obsah z WYSIWYG editoru. Tenhle blok řeší druhý
   případ: stránku, která ve v2 chromu běží na v1 obsahu (`body.gb-legacy`,
   `<main class="gb-content">`). Ta si veze celý bootstrapí markup — a to
   včetně věcí, které se v editorovém obsahu nevyskytují, takže je vrstva
   dosud neuměla.

   Změřeno 1. 9. 2026 na zákaznické nabídce (`pages/offer-detail.php`,
   /nabidka/{id}) — jediná zbylá zákaznická stránka na v1 obsahu. Chybělo:

     · **responzivní sloupce** `col-md-*`, `col-lg-*`, `col-xl-*` — bez nich
       se dvousloupcové rozvržení (položky | souhrn) na desktopu slilo do
       jednoho sloupce, protože zabral jen bezpříznakový `col-12`;
     · **tlačítka** `.btn` — „Tisk", „Do košíku" i „Objednat" se kreslily
       jako holý text bez podkladu;
     · **formulářová pole** `.form-control`, `.form-select`, `.form-check-input`
       — selektory dopravy a platby byly systémové, bez rámečku a výšky.

   Hodnoty jdou z tokenů v2, ne z Bootstrapu: stránka má vypadat jako zbytek
   v2, ne jako Bootstrap. Až bude nabídka portovaná, tenhle blok může zmizet —
   proto je oddělený a ne rozpuštěný ve vrstvě výš.
   ────────────────────────────────────────────────────────────────────────── */

/* ── Responzivní sloupce ──
   Stejná mechanika jako u bezpříznakových: `flex-basis` v procentech
   dvanáctiny. Bootstrap má `flex: 0 0 auto` + `width`; tady stačí basis,
   protože `.row` z vrstvy výš je `display: flex; flex-wrap: wrap`. */
@media (min-width: 576px) {
  .gb-content .col-sm-1  { flex: 0 0 8.3333%;  max-width: 8.3333%; }
  .gb-content .col-sm-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
  .gb-content .col-sm-3  { flex: 0 0 25%;      max-width: 25%; }
  .gb-content .col-sm-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
  .gb-content .col-sm-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
  .gb-content .col-sm-6  { flex: 0 0 50%;      max-width: 50%; }
  .gb-content .col-sm-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
  .gb-content .col-sm-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
  .gb-content .col-sm-9  { flex: 0 0 75%;      max-width: 75%; }
  .gb-content .col-sm-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
  .gb-content .col-sm-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
  .gb-content .col-sm-12 { flex: 0 0 100%;     max-width: 100%; }
  .gb-content .col-sm-auto { flex: 0 0 auto; max-width: none; width: auto; }
}
@media (min-width: 768px) {
  .gb-content .col-md-1  { flex: 0 0 8.3333%;  max-width: 8.3333%; }
  .gb-content .col-md-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
  .gb-content .col-md-3  { flex: 0 0 25%;      max-width: 25%; }
  .gb-content .col-md-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
  .gb-content .col-md-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
  .gb-content .col-md-6  { flex: 0 0 50%;      max-width: 50%; }
  .gb-content .col-md-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
  .gb-content .col-md-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
  .gb-content .col-md-9  { flex: 0 0 75%;      max-width: 75%; }
  .gb-content .col-md-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
  .gb-content .col-md-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
  .gb-content .col-md-12 { flex: 0 0 100%;     max-width: 100%; }
  .gb-content .col-md-auto { flex: 0 0 auto; max-width: none; width: auto; }
}
@media (min-width: 992px) {
  .gb-content .col-lg-1  { flex: 0 0 8.3333%;  max-width: 8.3333%; }
  .gb-content .col-lg-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
  .gb-content .col-lg-3  { flex: 0 0 25%;      max-width: 25%; }
  .gb-content .col-lg-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
  .gb-content .col-lg-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
  .gb-content .col-lg-6  { flex: 0 0 50%;      max-width: 50%; }
  .gb-content .col-lg-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
  .gb-content .col-lg-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
  .gb-content .col-lg-9  { flex: 0 0 75%;      max-width: 75%; }
  .gb-content .col-lg-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
  .gb-content .col-lg-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
  .gb-content .col-lg-12 { flex: 0 0 100%;     max-width: 100%; }
  .gb-content .col-lg-auto { flex: 0 0 auto; max-width: none; width: auto; }
}
@media (min-width: 1200px) {
  .gb-content .col-xl-3  { flex: 0 0 25%;      max-width: 25%; }
  .gb-content .col-xl-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
  .gb-content .col-xl-6  { flex: 0 0 50%;      max-width: 50%; }
  .gb-content .col-xl-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
  .gb-content .col-xl-9  { flex: 0 0 75%;      max-width: 75%; }
  .gb-content .col-xl-12 { flex: 0 0 100%;     max-width: 100%; }
}

/* ── Doplňkové flex/utility, které v editorovém obsahu nejsou ── */
.gb-content .align-items-end { align-items: flex-end; }
.gb-content .align-items-baseline { align-items: baseline; }
.gb-content .align-self-center { align-self: center; }
.gb-content .align-self-baseline { align-self: baseline; }
.gb-content .align-self-end { align-self: flex-end; }
.gb-content .justify-content-end { justify-content: flex-end; }
.gb-content .justify-content-start { justify-content: flex-start; }
.gb-content .flex-grow-1 { flex-grow: 1; }
.gb-content .flex-shrink-0 { flex-shrink: 0; }
.gb-content .gap-1 { gap: var(--gb-sp-xs); }
.gb-content .gap-4 { gap: var(--gb-sp-lg); }
.gb-content .text-nowrap { white-space: nowrap; }
.gb-content .text-reset { color: inherit; }
.gb-content .position-relative { position: relative; }
.gb-content .position-sticky { position: sticky; }
@media print { .gb-content .d-print-none { display: none !important; } }

/* ── Tlačítka ──
   Vzhled z tokenů v2 (stejná výška a rádius jako `.gb-btn`), ne z Bootstrapu.
   `.btn` bez varianty je neutrální s rámečkem — v Bootstrapu je průhledné
   a na naší stránce by splynulo s textem. */
.gb-content .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 40px; padding: 0 var(--gb-sp-lg);
  border: 1px solid var(--gb-line-4); border-radius: var(--gb-r-sm);
  background: #fff; color: var(--gb-ink);
  font-family: inherit; font-size: var(--gb-fs-xs); font-weight: 600; line-height: 1.2;
  text-decoration: none; white-space: nowrap; cursor: pointer;
}
.gb-content .btn:hover { border-color: var(--gb-navy-mut); }
.gb-content .btn-sm { min-height: 34px; padding: 0 var(--gb-sp-md); font-size: var(--gb-fs-xxs); }
.gb-content .btn-lg { min-height: 46px; padding: 0 var(--gb-sp-xl); font-size: var(--gb-fs-sm); }
.gb-content .btn-primary, .gb-content .btn-success {
  background: var(--gb-green); border-color: var(--gb-green); color: #fff;
}
.gb-content .btn-primary:hover, .gb-content .btn-success:hover { background: var(--gb-green-2); border-color: var(--gb-green-2); }
.gb-content .btn-outline-success { background: #fff; border-color: var(--gb-green); color: var(--gb-green-2); }
.gb-content .btn-outline-success:hover { background: var(--gb-green-tint); }
.gb-content .btn-secondary { background: var(--gb-navy); border-color: var(--gb-navy); color: #fff; }
.gb-content .btn-secondary:hover { background: var(--gb-navy-2); }
.gb-content .btn-outline-secondary { background: #fff; border-color: var(--gb-navy-mut); color: var(--gb-navy); }
.gb-content .btn-outline-secondary:hover { background: var(--gb-bg-4); }
.gb-content .btn-danger { background: var(--gb-err); border-color: var(--gb-err); color: #fff; }
.gb-content .btn-link { border-color: transparent; background: none; color: var(--gb-navy); text-decoration: underline; }
.gb-content .btn[disabled], .gb-content .btn.disabled { opacity: .6; cursor: default; }

/* ── Formulářová pole ── */
.gb-content .form-control, .gb-content .form-select {
  width: 100%; min-height: 40px; padding: 0 var(--gb-sp-md);
  border: 1px solid var(--gb-line-4); border-radius: var(--gb-r-sm);
  background: #fff; color: var(--gb-ink);
  font-family: inherit; font-size: var(--gb-fs-input);
}
.gb-content textarea.form-control { min-height: 90px; padding-block: var(--gb-sp-sm); }
.gb-content .form-control:focus, .gb-content .form-select:focus { border-color: var(--gb-info); outline: none; }
.gb-content .form-control-sm, .gb-content .form-select-sm { min-height: 34px; font-size: var(--gb-fs-xs); }
.gb-content .form-control-lg { min-height: 46px; }
.gb-content .form-label { display: block; margin-bottom: 4px; font-size: var(--gb-fs-xs); font-weight: 600; }
.gb-content .form-text { display: block; margin-top: 4px; font-size: var(--gb-fs-xxs); color: var(--gb-ink-2); }
.gb-content .form-check { display: flex; align-items: center; gap: var(--gb-sp-sm); }
.gb-content .form-check-input { width: 18px; height: 18px; flex: none; accent-color: var(--gb-green); }
.gb-content .form-check-label { cursor: pointer; }
.gb-content .input-group { display: flex; }
.gb-content .input-group > .form-control { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.gb-content .input-group-text {
  display: inline-flex; align-items: center; padding: 0 var(--gb-sp-md);
  border: 1px solid var(--gb-line-4); border-left: 0;
  border-top-right-radius: var(--gb-r-sm); border-bottom-right-radius: var(--gb-r-sm);
  background: var(--gb-bg-4); color: var(--gb-ink-2); font-size: var(--gb-fs-xs);
}
.gb-content .invalid-feedback { display: none; color: var(--gb-err); font-size: var(--gb-fs-xxs); }
.gb-content .is-invalid ~ .invalid-feedback, .gb-content .was-validated :invalid ~ .invalid-feedback { display: block; }
.gb-content .is-invalid { border-color: var(--gb-err); }

/* ── Dlouhé nezalomitelné řetězce v redakčním obsahu ─────────────────────
   E-mail, URL nebo kód produktu nemá kde zalomit, takže v úzké buňce
   přeteče ven a překreslí souseda. Změřeno 1. 9. 2026 na `/kontakt/` při
   390 px: `veronika.d@golfprovsechny.cz` potřebuje 190 px v kartě široké
   170 (`scrollWidth` > `clientWidth`, `overflow: visible`).

   `anywhere` (ne `break-word`): jen ono zmenšuje i min-content, takže se
   nesmrskne jen text, ale i buňka, která ho drží. Cílíme na to, co je
   opravdu jeden token — odkazy, `code`, `kbd` — ne na běžný odstavec,
   kde by dělení uprostřed slova bylo horší než přetečení, které stejně
   nenastane. */
.gb-content a, .gb-content code, .gb-content kbd, .gb-content samp { overflow-wrap: anywhere; }

/* ── Celoplošné dekorace z v1 nesmí rozjet stránku do šířky ───────────────
   Redakční CSS z v1 běžně kreslí dělicí linky jako `::before` s
   `position: absolute; width: 140%; left: -20%` — mají „vytéct" přes okraj
   sloupce. Ve v1 to nevadilo, protože `.main-wrap` i `body` měly
   `position: relative; overflow-x: hidden` a přetok ustřihly. V2 takový
   obal nemá, takže se pseudoprvek pozicuje vůči initial containing blocku
   a **prodlouží kořenový scroller**: `/kontakt/` šlo při 390 px posunout
   o 75 px doprava do prázdna (`#employees::before` = 525 px na `left:-75px`,
   změřeno 1. 9. 2026; ve v1 na tomtéž obsahu 0).

   Obojí je nutné: `position` proto, aby byl `.gb-content` v řetězci
   containing blocků těch absolutních potomků (bez toho `overflow` nemá co
   stříhat), `overflow-x` pro samotné ustřižení. `clip`, ne `hidden` —
   `hidden` by z obalu udělal scroll kontejner a přebral roli scrollportu
   `position: sticky` prvkům uvnitř; `clip` scrollport nevytváří a svislý
   směr nechává `visible`, takže rozbalovací menu a tooltipy přetékají dál. */
.gb-content { position: relative; overflow-x: clip; }

/* ── Akordeon (Bootstrap 5 collapse) ──────────────────────────────────────
   FAQ na stránce Kontakt sedmi trhů EU je v DB jako akordeon Bootstrapu
   (IS_SET_TEXTS, REG_ID 5 a 7–12; v celé tabulce 7 textů s `data-bs-toggle`,
   změřeno 16. 10. 2026). Bez Bootstrapu bylo všech 13 odpovědí rozbalených
   (přes 6 000 px). Otevírá a zavírá gb.js („Akordeon v obsahu z DB"). */
.gb-content .accordion { margin-bottom: var(--gb-sp-lg); border: 1px solid var(--gb-line-4); border-radius: var(--gb-r-md); overflow: hidden; background: #fff; }
.gb-content .accordion-item + .accordion-item { border-top: 1px solid var(--gb-line-4); }
.gb-content .accordion-header { margin: 0; font-size: inherit; line-height: inherit; }
.gb-content .accordion-button {
  display: flex; align-items: center; justify-content: space-between; gap: var(--gb-sp-sm);
  width: 100%; min-height: 48px; padding: 12px var(--gb-sp-md);
  border: 0; background: none; color: var(--gb-navy); font: inherit; font-weight: 700; text-align: left; cursor: pointer;
}
.gb-content .accordion-button::after {
  content: ''; flex: none; width: 9px; height: 9px; margin: -4px 4px 0 0;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg);
}
.gb-content .accordion-button:not(.collapsed)::after { margin-top: 4px; transform: rotate(-135deg); }
.gb-content .accordion-button:hover { background: var(--gb-navy-tint); }
.gb-content .accordion-button:focus-visible { outline: 2px solid var(--gb-navy); outline-offset: -2px; }
.gb-content .accordion-body { padding: 0 var(--gb-sp-md) var(--gb-sp-md); }
.gb-content .collapse:not(.show) { display: none; }
