/** Shopify CDN: Minification failed

Line 21:0 Unexpected "0"
Line 21:45 Unterminated string token

**/
/* KLOKI base — tokeny + kl-* komponenty. Zploštěné ze styles.css (Shopify assety jsou plochá složka, @import s cestami tam nefunguje). */

/* ===== tokens/fonts.css ===== */
/* KLOKI — webfonts

   Poppins is the ONLY typeface: kloki.cz and the brand book alike, headings and body,
   no pairing. The brand book states it outright — "Poppins / Google Typeface" (Brand
   page 2.1). Loaded cuts on the live site: 400, 400i, 600, 700, 700i, 800.

   Weights 300 / 500 / 900 / 950 appear in the site's CSS but are FICTION — those cuts
   are not loaded, so the browser renders the nearest one. 800 is therefore the canonical
   heading weight: simultaneously the heaviest available and the truthful one.
   Writing a real 900 means also loading poppins_n9 — that is a design change, not a tidy-up.
*/
0,600;0,700;0,800;1,400;1,700&display=swap');

:root {
  --font-family: Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-family-heading: var(--font-family);
}

/* ===== tokens/web/colors.css ===== */
/* KLOKI web (kloki.cz) — color primitives + semantic roles
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     1 · BARVY — PRIMITIVA (paleta značky)
     Každá hodnota je doložená renderem na kloki.cz nebo :root v assets/bts.css.
     ======================================================================== */

  /* --- 1.1 Modrá rodina ------------------------------------------------- */
  --kloki-blue-900: #062B78;   /* navy; bts.css --bts-navy; 58× text na BTS   */
  --kloki-blue-700: #1A4886;   /* brand modrá; bts.css --bts-blue; dominantní */
  --kloki-blue-600: #22599F;   /* jen střední stop gradientu promo lišty      */
  --kloki-blue-400: #33A3FF;   /* akční/dekorativní; patička, ikony, badge    */

  /* RGB trojice pro alfa kompozice (rgba(var(--x), .1)) */
  --kloki-blue-900-rgb: 6, 43, 120; /* @kind color */
  --kloki-blue-700-rgb: 26, 72, 134; /* @kind color */
  --kloki-blue-400-rgb: 51, 163, 255; /* @kind color */

  /* --- 1.2 Magenta / růžová --------------------------------------------- */
  --kloki-magenta-600: #DB077A;   /* PLOCHA CTA; --color-button v 19 schématech */
  --kloki-magenta-500: #DB047A;   /* TEXT a linka; bts.css --bts-pink           */
  --kloki-magenta-800: #B8036A;   /* hover plochy; bts.css --bts-pink-dark      */
  --kloki-magenta-vivid: #E6007E; /* POUZE stop gradientu (sloupec KLOKI)       */
  --kloki-pink-300: #FF8AC2;      /* POUZE stop gradientu (hlavička sloupce)    */
  --kloki-purple-700: #5B1480;    /* POUZE stop gradientu (95° KLOKI sloupec)   */
  --kloki-magenta-600-rgb: 219, 7, 122; /* @kind color */
  --kloki-magenta-500-rgb: 219, 4, 122; /* @kind color */
  --kloki-magenta-vivid-rgb: 230, 0, 126; /* @kind color */

  /* --- 1.3 Žlutá / okrová ------------------------------------------------ */
  --kloki-yellow-400: #FFD43B;  /* kanonická žlutá; bts.css --bts-yellow, 16× */
  --kloki-yellow-300: #FFE566;  /* světlý stop gradientu promo lišty          */
  --kloki-yellow-500: #F5C400;  /* tmavý stop gradientu promo lišty           */
  --kloki-yellow-100: #FFF4CC;  /* měkký žlutý povrch: benefit pilulka, focus */
  --kloki-amber-500:  #E8A820;  /* sémantická amber „částečně / neutrální"    */
  --kloki-star-500:   #F5B301;  /* hvězdičky — JEDNA hodnota; POZOR: pouze
                                   bts.css:818, v renderu nezachyceno (viz
                                   NEOVĚŘENO dole)                            */
  --kloki-yellow-400-rgb: 255, 212, 59; /* @kind color */

  /* --- 1.4 Teplé a růžové povrchy ---------------------------------------- */
  --kloki-cream-100: #FFF8E8;   /* bts.css --bts-cream; sekce, karty, chipy   */
  --kloki-cream-200: #F4F1EA;   /* teplejší beige; chip, plocha za videem     */
  --kloki-rose-100:  #FFE9F3;   /* bts.css --bts-rose; karta „Co získá dítě"  */

  /* --- 1.5 Studené povrchy ----------------------------------------------- */
  --kloki-sky-200: #D8F1FF;     /* bts.css --bts-sky-strong; horní stop hero  */
  --kloki-sky-100: #EAF7FF;     /* bts.css --bts-sky; plocha sekce Funkce     */
  --kloki-sky-050: #F7FAFF;     /* téměř bílý modrý tint; .bts-plan__price    */

  /* --- 1.6 Sémantické stavy ---------------------------------------------- */
  --kloki-red-500:   #DC2A2E;   /* riziko / „Ne"; bts.css --bts-red           */
  --kloki-green-600: #129A5B;   /* potvrzení / úspora; bts.css --bts-green    */
  --kloki-green-checkout: #35B695; /* Shopify pokladna (settings_data.json)   */
  --kloki-red-500-rgb: 220, 42, 46; /* @kind color */
  --kloki-green-checkout-rgb: 53, 182, 149; /* @kind color */

  /* --- 1.7 Inkoust a neutrály -------------------------------------------- */
  --kloki-white:   #FFFFFF;
  --kloki-ink-900: #1D1D1D;     /* KANONICKÝ inkoust; bts.css --bts-ink       */
  --kloki-ink-900-rgb: 29, 29, 29; /* @kind color */
  --kloki-line-cool: #E4ECF5;   /* studená linka; bts.css --bts-line          */
  --kloki-line-warm: #ECE9E3;   /* teplá linka; rámeček karet zdi referencí   */

  /* Šedá pro drobný verzálkový overline. Jediná ponechaná šedá na webu —
     naměřeno 38× ve zdi referencí. Na bílé má 4,23:1, proto SMÍ nést jen
     verzálkové popisky ≥11 px/800, nikdy běžný text. */
  --kloki-grey-500: #7B7B7B;


  /* ========================================================================
     2 · BARVY — SÉMANTICKÉ ROLE
     Tohle používej v komponentách.
     ======================================================================== */

  /* --- 2.1 Brand --------------------------------------------------------- */
  --color-brand:         var(--kloki-blue-700);
  --color-brand-deep:    var(--kloki-blue-900);
  --color-brand-accent:  var(--kloki-magenta-500);
  --color-brand-highlight: var(--kloki-yellow-400);

  /* --- 2.2 Akce / CTA ---------------------------------------------------- */
  --color-cta:            var(--kloki-magenta-600);  /* pozadí primárního CTA */
  --color-cta-hover:      var(--kloki-magenta-800);
  --color-cta-text:       var(--kloki-white);        /* 4,86:1 → AA           */
  --color-cta-ring:       var(--kloki-magenta-500);  /* rámeček „featured"    */

  /* Sekundární CTA = ghost na brand modré (2px rámeček, průsvitná výplň). */
  --color-cta-secondary-bg:     rgba(255, 255, 255, .7);
  --color-cta-secondary-text:   var(--kloki-blue-700);
  --color-cta-secondary-border: var(--kloki-blue-700);

  /* Tmavé CTA — jediná modrá plocha, která unese bílý text (9,07:1). */
  --color-cta-dark:       var(--kloki-blue-700);
  --color-cta-dark-hover: var(--kloki-blue-900);

  /* Dekorativní modrá. NEPOUŽÍVAT jako plochu pod bílý text (2,68:1). */
  --color-accent-blue:    var(--kloki-blue-400);
  --color-on-accent-blue: var(--kloki-blue-900);     /* povinný tmavý popisek */

  /* --- 2.3 Sémantické stavy ---------------------------------------------- */
  --color-positive:        var(--kloki-green-600);   /* „Ano", ušetříte       */
  --color-positive-strong: var(--kloki-green-600);
  --color-negative:        var(--kloki-red-500);     /* hrozba, „Ne", škrtnutá cena */
  --color-warning:         var(--kloki-amber-500);   /* „částečně"            */
  --color-rating:          var(--kloki-star-500);    /* hvězdičky             */
  --color-checkout:        var(--kloki-green-checkout);

  /* --- 2.4 Povrchy ------------------------------------------------------- */
  --color-surface:            var(--kloki-white);      /* výchozí plátno      */
  --color-surface-sky:        var(--kloki-sky-100);    /* modrá sekce/karta   */
  --color-surface-sky-strong: var(--kloki-sky-200);    /* sytější modrá       */
  --color-surface-sky-faint:  var(--kloki-sky-050);    /* téměř bílá modrá    */
  --color-surface-cream:      var(--kloki-cream-100);  /* teplá sekce/karta   */
  --color-surface-cream-warm: var(--kloki-cream-200);  /* chip, plocha média  */
  --color-surface-rose:       var(--kloki-rose-100);   /* růžová karta        */
  --color-surface-yellow:     var(--kloki-yellow-100); /* benefit pilulka     */
  --color-surface-dark:       var(--kloki-blue-900);   /* tmavý předěl        */
  --color-surface-brand:      var(--kloki-blue-700);   /* lišta, tmavá sekce  */

  /* --- 2.5 Text ---------------------------------------------------------- */
  --color-heading:        var(--kloki-blue-700);  /* H1, H2                   */
  --color-heading-sub:    var(--kloki-blue-900);  /* H3 a nižší, FAQ, ceny    */
  --color-text-strong:    var(--kloki-ink-900);                        /* 16,86:1 */
  --color-text:           rgba(var(--kloki-ink-900-rgb), .8);          /*  8,86:1 */
  --color-text-muted:     rgba(var(--kloki-ink-900-rgb), .75);         /*  7,34:1 */
  --color-text-soft:      rgba(var(--kloki-ink-900-rgb), .65);         /*  5,25:1 — DNO škály */
  --color-text-faint:     rgba(var(--kloki-ink-900-rgb), .45);         /*  2,85:1 — jen dekorativní metadata (datum), NIKDY informace */
  --color-text-accent:    var(--kloki-magenta-500);  /* zvýrazněné slovo      */
  --color-text-overline:  var(--kloki-grey-500);     /* drobný verzálkový popisek */

  /* Text na tmavém. `--color-on-dark-muted` platí JEN na #062B78 / #1A4886
     (7,85:1). Na #33A3FF má 2,12:1 a je to nejrozšířenější vada webu
     (odkazy v patičce). */
  --color-on-dark:        var(--kloki-white);
  --color-on-dark-muted:  rgba(255, 255, 255, .75);
  --color-on-yellow:      var(--kloki-blue-900);  /* 9,07:1; NIKDY bílá (1,4:1) */

  /* --- 2.6 Rámečky a linky ----------------------------------------------- */
  --color-border:        var(--kloki-line-cool);
  --color-border-warm:   var(--kloki-line-warm);
  --color-border-hair:   rgba(var(--kloki-blue-900-rgb), .1);   /* 1px ring   */
  --color-border-faint:  rgba(var(--kloki-blue-700-rgb), .05);  /* sotva vidět */
  --color-border-strong: var(--kloki-ink-900);   /* 2px „memphis" rámeček     */
  --color-focus-ring:    var(--kloki-blue-700);  /* outline 3px, offset 3px   */
  --color-focus-halo:    var(--kloki-yellow-100);/* box-shadow 0 0 0 4px      */

  /* --- 2.7 Overlaye a průsvitné vrstvy ----------------------------------- */
  --overlay-modal:  rgba(2, 6, 18, .75);          /* bts.css:1783 + blur(5px) */
  --overlay-glass:  rgba(255, 255, 255, .92);     /* sticky hlavička desktop  */
  --overlay-glass-mobile: rgba(255, 255, 255, .96);
  --overlay-media:  linear-gradient(to top, rgba(0, 0, 0, .62) 0%,
                                            rgba(0, 0, 0, .28) 35%,
                                            transparent 100%); /* @kind color */ /* text nad videem */
  --overlay-control: rgba(17, 17, 17, .6);        /* tlačítko zvuku nad videem */
  --overlay-play:    rgba(255, 255, 255, .94);    /* plovoucí play tlačítko   */

  /* --- 2.8 Kanonické gradienty ------------------------------------------- */
  --gradient-hero:       linear-gradient(var(--kloki-sky-200), var(--kloki-sky-100) 55%, var(--kloki-white));
  --gradient-promo-warm: linear-gradient(90deg, var(--kloki-yellow-400), var(--kloki-yellow-300) 50%, var(--kloki-yellow-500));
  /* Poslední stop je ZÁMĚRNĚ magenta-600 (primitivum plochy), ne magenta-500 (text), ačkoli
     bts.css:172 má rgba(219,4,122,.8). Stop gradientu je plocha. Viz 03-color.md §451. NEVRACET. */
  --gradient-promo-cool: linear-gradient(90deg, var(--kloki-blue-700), var(--kloki-blue-600) 55%, rgba(var(--kloki-magenta-600-rgb), .8));
  --gradient-brand:      linear-gradient(135deg, var(--kloki-magenta-500), var(--kloki-blue-700));
  --gradient-winner:     linear-gradient(135deg, var(--kloki-magenta-vivid), var(--kloki-blue-900));
  --gradient-winner-head:linear-gradient(135deg, var(--kloki-yellow-400), var(--kloki-pink-300), var(--kloki-magenta-vivid) 80%);
  --gradient-badge:      linear-gradient(90deg, var(--kloki-magenta-500), var(--kloki-blue-900));
  /* Pastelové karty: čtyři rotující dvojice, 160°. „Mint" na webu neexistuje —
     dojem levandule vzniká přechodem růžová→modrá, není to samostatná barva. */
  --gradient-card-1: linear-gradient(160deg, var(--kloki-sky-100),  var(--kloki-cream-100));
  --gradient-card-2: linear-gradient(160deg, var(--kloki-cream-100), var(--kloki-rose-100));
  --gradient-card-3: linear-gradient(160deg, var(--kloki-rose-100),  var(--kloki-sky-100));
  --gradient-card-4: linear-gradient(160deg, var(--kloki-sky-200),   var(--kloki-cream-100));
}

/* ===== tokens/web/typography.css ===== */
/* KLOKI web (kloki.cz) — typography scale, weights, leading, tracking, measure
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     3 · TYPOGRAFIE
     Vše v px / em. Vzpomeň si na past A (1 rem = 10 px).
     ======================================================================== */

  /* --- 3.1 Font stack ----------------------------------------------------- */
  --font-family: Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-family-heading: var(--font-family);   /* jediný font na celém webu   */

  /* --- 3.2 Váhy — POUZE tyto čtyři (viz rozhodnutí R3) -------------------- */
  --font-weight-regular:  400; /* @kind other */   /* načteno vždy                             */
  --font-weight-medium:   600; /* @kind other */   /* jen tam, kde je dotažený poppins_n6      */
  --font-weight-semibold: 700; /* @kind other */   /* načteno vždy                             */
  --font-weight-bold:     800; /* @kind other */   /* KANONICKÁ váha nadpisů a CTA             */

  /* --- 3.3 Velikostní škála (clamp, plynule 390 → 1024 px) ---------------- */
  --font-size-display:     clamp(40px, calc(25.24px + 3.79vw), 64px); /* h1  40→64  */
  --font-size-h2:          clamp(30px, calc(18.93px + 2.84vw), 48px); /* sekční 30→48 */
  --font-size-h3:          24px;                                /* nadpis karty */
  --font-size-h4:          clamp(18px, calc(15.94px + 0.53vw), 20px); /* podnadpis  */
  --font-size-lead:        clamp(16px, calc(13.94px + 0.53vw), 18px); /* perex      */
  --font-size-body:        15px;
  --font-size-body-sm:     14px;
  --font-size-caption:     13px;
  --font-size-micro:       11.5px;
  --font-size-eyebrow:     12px;
  --font-size-overline:    11px;
  --font-size-badge:       11px;
  --font-size-chip:        13px;
  --font-size-sticker:     12px;
  --font-size-quote:       16px;
  --font-size-button:      18px;
  --font-size-button-sm:   14px;
  --font-size-price:       clamp(32px, calc(23.75px + 2.12vw), 40px); /* finální cena */
  --font-size-price-plan:  clamp(30px, calc(23.81px + 1.59vw), 36px); /* cena tarifu  */
  --font-size-price-strike:17px;
  --font-size-price-mid:   15px;

  /* Původní SKOKOVÉ hodnoty z bts.css — použij místo clampu, když chceš
     1:1 věrnost BTS. Jediný znatelný rozdíl je h2 na tabletu: clamp dá
     40,7 px, BTS skok 36 px. Obojí je legitimní, clamp je hladší. */
  --font-size-display-sm: 40px;  --font-size-display-md: 56px;  --font-size-display-lg: 64px;
  --font-size-h2-sm:      30px;  --font-size-h2-md:      36px;  --font-size-h2-lg:      48px;
  --font-size-lead-sm:    16px;  --font-size-lead-lg:    18px;
  --font-size-price-sm:   32px;  --font-size-price-lg:   40px;

  /* --- 3.4 Line-heighty (bez jednotky) ------------------------------------ */
  --leading-display:  1.12; /* @kind other */   /* ≥ 40 px                                     */
  --leading-heading:  1.25; /* @kind other */   /* 24–36 px                                    */
  --leading-sub:      1.4; /* @kind other */    /* 18–20 px                                    */
  --leading-compact:  1.5; /* @kind other */    /* badge, chip, drobný text, výchozí kontejner */
  --leading-button:   1.55; /* @kind other */
  --leading-body:     1.625; /* @kind other */  /* perex a běžný text — KANONICKÝ              */
  --leading-price:    1; /* @kind other */      /* velké číslo ceny                            */
  --leading-sticker:  1.34; /* @kind other */
  /* DĚDICTVÍ, nepřebírat: theme body 1.8, theme nadpisy 1.2609, LP 0.95–1.10. */

  /* --- 3.5 Letter-spacing (viz rozhodnutí R4) ----------------------------- */
  --tracking-normal:   normal; /* @kind other */    /* h2, h3, body, tlačítka — VÝCHOZÍ         */
  --tracking-display: -0.025em; /* @kind other */   /* jen h1 ≥ 40 px                           */
  --tracking-eyebrow:  0.06em; /* @kind other */    /* VERZÁLKOVÝ barevný štítek nad nadpisem   */
  --tracking-overline: 0.14em; /* @kind other */    /* VERZÁLKOVÝ drobný šedý popisek           */
  --tracking-badge:    0.08em; /* @kind other */    /* pilulka na kartě, kupónový kód           */
  --tracking-micro:    0.05em; /* @kind other */    /* mikro popisek nad cenou                  */
  /* DĚDICTVÍ, přebít na normal: theme nadpisy +0.69px, theme body +0.6px. */

  /* --- 3.6 Měřítko textu (max-width) — patří k typografii, ne k mřížce ---- */
  --measure-heading: 1100px; /* @kind other */  /* nadpisový blok, aby h2 48px měl ~45 znaků   */
  --measure-lead:     720px; /* @kind other */  /* perex pod sekčním nadpisem (18 px, ~70 zn.) */
  --measure-hero:     620px; /* @kind other */  /* perex v hero (užší, nekoliduje s vizuálem)  */
  --measure-faq:      820px; /* @kind other */  /* akordeon; horní hranice čitelnosti ~78 zn.  */
  --measure-card:     520px; /* @kind other */  /* text vedle obrázku v kartě                  */
  --measure-callout:  900px; /* @kind other */  /* zvýrazněný odstavec                         */
}

/* ===== tokens/web/spacing.css ===== */
/* KLOKI web (kloki.cz) — spacing scale + vertical rhythm
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     4 · SPACING (viz rozhodnutí R5)
     Základ 4px mřížka + tři doložené půlkroky (2 / 10 / 56).
     Názvy jsou číselné záměrně — theme je celý v px a t-shirt velikosti
     by u 15 stupňů vedly k hádání.
     ======================================================================== */
  --space-2:   2px;   /* mikro: odsazení hvězdiček, tečka v badge            */
  --space-4:   4px;   /* ikona ↔ štítek, chip vertikálně                     */
  --space-8:   8px;   /* položky seznamu, gap chipů, tečky slideru           */
  --space-10: 10px;   /* NEJČASTĚJŠÍ gap webu (550×): checklisty, FAQ, řádky */
  --space-12: 12px;   /* gap tlačítek, buňky srovnání, sticker padding-X     */
  --space-16: 16px;   /* padding CTA-Y, gap karuselu, gutter mobil           */
  --space-20: 20px;   /* gap tarifních karet                                 */
  --space-24: 24px;   /* GAP MŘÍŽEK, padding karty (mobil), gutter desktop   */
  --space-32: 32px;   /* padding karty (desktop), padding CTA-X, heading gap */
  --space-40: 40px;   /* „tight" sekce, gap Dawn mřížky, gap 2 sloupců       */
  --space-48: 48px;   /* gap velkých 2 sloupců                               */
  --space-56: 56px;   /* gap hero splitu, margin-top pod nadpisem sekce      */
  --space-64: 64px;   /* SEKČNÍ PADDING mobil, gap perky/tarify              */
  --space-80: 80px;   /* SEKČNÍ PADDING desktop                              */
  --space-96: 96px;   /* sekční padding „důležité" sekce (≥1024)             */

  /* --- 4.1 Sémantický vertikální rytmus ---------------------------------- */
  --section-y:        var(--space-64);  /* < 640 px                          */
  --section-y-lg:     var(--space-80);  /* ≥ 640 px                          */
  --section-y-hero:   var(--space-96);  /* ≥ 1024 px, „hero" sekce           */
  --section-y-tight:  var(--space-40);  /* navazující sekce bez předělu      */
  --heading-gap:      var(--space-32);  /* nadpisový blok → obsah            */
  --heading-gap-sm:   var(--space-24);  /* totéž na mobilu                   */
  --grid-gap:         var(--space-24);  /* mřížky karet                      */
  --carousel-gap:     var(--space-16);  /* vodorovný scroll na mobilu        */
  --grid-gap-theme:   var(--space-40);  /* JEN když sáhneš na Dawn .grid     */
}

/* ===== tokens/web/radius.css ===== */
/* KLOKI web (kloki.cz) — radius scale
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     5 · RADIUSY (viz rozhodnutí R6)
     ======================================================================== */
  --radius-xs:     6px;    /* žlutý marker, mikroštítek                      */
  --radius-sm:    12px;    /* pole formuláře, kupónový box, „inherit" štítek */
  --radius-md:    16px;    /* vnitřní prvky karty, ikonová dlaždice 48×48    */
  --radius-lg:    24px;    /* média, fotky v kartě, varovná karta            */
  --radius-xl:    32px;    /* KARTA — kanonický radius                       */
  --radius-pill: 999px;    /* CTA, chip, sticker, tab, tečka, badge          */
  --radius-circle: 50%;    /* jen skutečné kruhy (avatar, ikona v kroužku)   */

  /* Sémantické aliasy */
  --radius-card:   var(--radius-xl);
  --radius-media:  var(--radius-lg);
  --radius-inner:  var(--radius-md);
  --radius-input:  var(--radius-sm);
  --radius-button: var(--radius-pill);
  /* Skládaná karta (fotka nahoře, barevné tělo dole) — vždy stejné X. */
  --radius-card-top:    32px 32px 0 0;
  --radius-card-bottom: 0 0 32px 32px;
}

/* ===== tokens/web/shadow.css ===== */
/* KLOKI web (kloki.cz) — elevation, glows, offset shadows, rings
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     6 · STÍNY A ELEVACE
     Pravidlo: stín nese odstín brandové modré, ne černou. CTA nese vlastní
     barevnou záři. Offsetové („papírové") a rozostřené stíny NEMÍCHAT
     na jednom prvku.
     ======================================================================== */
  --elevation-0: 0 0 0 1px rgba(var(--kloki-blue-700-rgb), .05);
  --elevation-1: 0 0 0 1px rgba(var(--kloki-blue-900-rgb), .1), 0 2px 16px rgba(0, 0, 0, .04);
  --elevation-2: 0 12px 32px rgba(var(--kloki-blue-700-rgb), .1);   /* výchozí karta */
  --elevation-3: 0 22px 60px rgba(var(--kloki-blue-700-rgb), .16);  /* „featured"    */
  --elevation-4: 0 8px 22px rgba(0, 0, 0, .18);                     /* nad médiem    */
  --elevation-4-sm: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -2px rgba(0, 0, 0, .1);
  --elevation-sticky: 0 -8px 24px rgba(var(--kloki-blue-700-rgb), .12); /* lišta zdola */

  /* Barevné záře pod CTA */
  --glow-cta:  0 10px 30px -8px rgba(var(--kloki-magenta-600-rgb), .55);
  --glow-blue: 0 10px 24px rgba(var(--kloki-blue-700-rgb), .28);

  /* Offsetová („nálepka na papíře") rodina — VÝHRADNĚ srovnávací tabulka
     a žluté zvýrazňovací pilulky. Neroztahovat plošně. */
  --offset-sm: 0 0 0 1px rgba(var(--kloki-blue-900-rgb), .05), 0 2px 0 0 rgba(var(--kloki-blue-900-rgb), .08);
  --offset-md: 0 0 0 2px rgba(var(--kloki-blue-900-rgb), .1),  0 4px 0 0 rgba(var(--kloki-blue-900-rgb), .12);
  --offset-lg: 0 0 0 2px var(--kloki-yellow-400), 0 8px 0 -2px rgba(var(--kloki-magenta-vivid-rgb), .35);
  --offset-verdict: 0 0 0 2px var(--kloki-white), 0 4px 0 0 rgba(var(--kloki-blue-900-rgb), .18);
  --offset-ink: 4px 4px 0 var(--kloki-ink-900);  /* + border: 2px solid #1D1D1D */

  /* Aktivní stav se dělá ringem přes box-shadow, nikdy borderem
     (border posouvá layout). */
  --ring-active: 0 0 0 2px var(--kloki-magenta-600);
  --ring-focus:  0 0 0 4px var(--kloki-yellow-100);
}

/* ===== tokens/web/layout.css ===== */
/* KLOKI web (kloki.cz) — containers + z-index layers
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     7 · KONTEJNERY
     ======================================================================== */
  --container:        1200px; /* @kind other */  /* KANONICKÁ šířka; s guttery → obsah 1152 px */
  --container-narrow: 1000px; /* @kind other */  /* „úzká" sekce                               */
  --container-theme:  1300px; /* @kind other */  /* DĚDICTVÍ Dawn .page-width — jen pro header,
                                  footer a PDP main-product. Nezavádět nově. */
  --gutter:    16px; /* @kind other */   /* < 640 px                                           */
  --gutter-lg: 24px; /* @kind other */   /* ≥ 640 px                                           */


  /* ========================================================================
     8 · Z-INDEX VRSTVY
     Škála narovnává dvě věci: kolizi na 50 (sticky ATC vs. mobilní CTA lišta)
     a díru mezi theme headerem (3/4) a BTS headerem (40).
     ======================================================================== */
  --z-base:        0; /* @kind other */     /* obsah                                           */
  --z-raised:      2; /* @kind other */     /* prvky uvnitř karty: badge, play, šipka          */
  --z-mask:        4; /* @kind other */     /* maskovací gradienty sloupců zdi referencí       */
  --z-header:     40; /* @kind other */     /* sticky hlavička stránky                         */
  --z-sticky:     50; /* @kind other */     /* sticky ATC lišta (PDP)                          */
  --z-sticky-cta: 51; /* @kind other */     /* mobilní CTA lišta LP — MUSÍ být nad ATC         */
  --z-overlay:   100; /* @kind other */     /* dropdown, tooltip                               */
  --z-modal:     900; /* @kind other */     /* spodní sheet, lightbox, dialog                  */
  --z-drawer:   1060; /* @kind other */     /* košík — rezervováno theme, nepřekračovat        */
  --z-a11y:     9999; /* @kind other */     /* skip-to-content link                            */
}

/* ===== tokens/web/motion.css ===== */
/* KLOKI web (kloki.cz) — durations, easings, transitions, lift
   Values transcribed verbatim from the attached codebase: css/kloki-tokens.css v1.0 (10. 8. 2026).
   Measured on live kloki.cz + theme source. Do not round these to a 4/8px grid. */

:root {
  /* ========================================================================
     9 · POHYB
     Výchozí volba je --duration-fast (.15s) + --ease. `.3s` jen pro věci,
     které se posouvají přes větší vzdálenost (sticky lišta, hlavička).
     Nic nad .45s kromě záměrného „slam" efektu.
     ======================================================================== */
  --duration-instant: .1s; /* @kind other */    /* mikro-feedback, active stav tabu             */
  --duration-fast:    .15s; /* @kind other */   /* KANONICKÁ: hover tlačítek, karet, ringů      */
  --duration-base:    .2s; /* @kind other */    /* tečky slideru, rotace chevronu ve FAQ        */
  --duration-slow:    .28s; /* @kind other */   /* hover karet se zvednutím                     */
  --duration-panel:   .3s; /* @kind other */    /* sticky lišty, reveal hlavičky, hover varování*/
  --duration-sheet:   .45s; /* @kind other */   /* progress bar dopravy, otevírání panelů       */

  --ease:          ease; /* @kind other */                          /* 90 % případů             */
  --ease-soft:     cubic-bezier(.22, 1, .36, 1); /* @kind other */  /* doskoky, progress bar    */
  --ease-slam:     cubic-bezier(.16, 1, .3, 1); /* @kind other */   /* jen „slam" reveal        */
  --ease-out-slow: cubic-bezier(0, 0, .3, 1); /* @kind other */     /* zděděno z base.css       */

  /* Hotové přechody */
  --transition-button: transform var(--duration-fast) var(--ease),
                       box-shadow var(--duration-fast) var(--ease),
                       background-color var(--duration-fast) var(--ease); /* @kind other */
  --transition-card:   transform var(--duration-slow) var(--ease),
                       box-shadow var(--duration-slow) var(--ease); /* @kind other */
  --transition-panel:  transform var(--duration-panel) var(--ease),
                       opacity var(--duration-panel) var(--ease); /* @kind other */

  /* Posuny při hoveru (drž je malé — web nikde nepoužívá scale na obsah) */
  --lift-button: -1px; /* @kind other */
  --lift-card:   -2px; /* @kind other */
}


/* ==========================================================================
   OMEZENÍ POHYBU
   Overridují se POUZE pohybové tokeny. Barvy, spacing a stíny zůstávají —
   uživatel s `reduce` má vidět stejnou stránku, jen bez pohybu.
   1ms místo 0s záměrně: nulová délka v některých prohlížečích ruší
   `transitionend`, na kterém visí JS logika.

   Tohle NESTAČÍ. Nekonečné animace (marquee, ticker, pulzující skeletony)
   a autoplay videí se musí vypnout v komponentě a v JS:
     var REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  :root {
    --duration-instant: 1ms; /* @kind other */
    --duration-fast:    1ms; /* @kind other */
    --duration-base:    1ms; /* @kind other */
    --duration-slow:    1ms; /* @kind other */
    --duration-panel:   1ms; /* @kind other */
    --duration-sheet:   1ms; /* @kind other */

    --ease:          linear; /* @kind other */
    --ease-soft:     linear; /* @kind other */
    --ease-slam:     linear; /* @kind other */
    --ease-out-slow: linear; /* @kind other */

    --transition-button: none; /* @kind other */
    --transition-card:   none; /* @kind other */
    --transition-panel:  none; /* @kind other */

    --lift-button: 0px; /* @kind other */
    --lift-card:   0px; /* @kind other */
  }
}

/* ===== tokens/brand/palette.css ===== */
/* KLOKI — brand palette (illustration & print layer)
   Source: "KLOKI Moon - temporary.fig" → page Brand → slides 3.1 / 3.2 / 3.3.
   This is the palette the brand book publishes, with CMYK builds for print and the
   importance ranking from slide 3.3 ("black and white are our primary colors while
   secondary are accent colors used in combination with their tertiary equivalents").

   It overlaps the web layer but is NOT the same list — the illustration/mascot colours
   (Skin, Cheeks and their dark pairs) only exist here, and Yellow Kloki is #FFD600 here
   versus the measured web token --kloki-yellow-400 #FFD43B. Both are real; use
   --brand-yellow for illustration, logo and print, --kloki-yellow-400 for the website. */

:root {
  /* --- Primary ---------------------------------------------------------- */
  --brand-yellow:        #FFD600; /* Yellow Kloki    · RGB 255,214,0                    */
  --brand-blue:          #1A4886; /* Dark Blue Kloki · RGB 26,72,134  · C97 M74 Y17 K4  */
  --brand-black:         #1D1D1D; /* Black           · RGB 29,29,29   · K100            */

  /* --- Secondary (accents) ---------------------------------------------- */
  --brand-magenta:       #DB077A; /* Magenta    · RGB 219,7,122                         */
  --brand-blue-light:    #33A3FF; /* Light Blue · RGB 51,163,255  · C69 M22 Y6 K0       */
  --brand-red:           #DC2A2E; /* Red        · RGB 220,42,46   · C5 M93 Y82 K0       */
  --brand-skin:          #F3D39D; /* Skin       · RGB 243,211,157 · C0 M14 Y62 K2       */
  --brand-cheeks:        #EAA89B; /* Cheeks     · RGB 234,168,155 · C6 M42 Y34 K0       */

  /* --- Tertiary (the shadow pair of each accent) ------------------------- */
  --brand-magenta-dark:  #A50059; /* Dark Magenta · RGB 165,0,89                        */
  --brand-blue-dark:     #0070AD; /* Dark blue    · RGB 0,112,173   · C87 M48 Y8 K0     */
  --brand-red-dark:      #A90004; /* Dark Red     · RGB 169,0,4     · C21 M100 Y100 K17 */
  --brand-skin-dark:     #BAA278; /* Dark Skin    · RGB 186,162,120 · C25 M31 Y54 K10   */
  --brand-cheeks-dark:   #B4847B; /* Dark Cheeks  · RGB 180,132,123 · C24 M48 Y42 K14   */

  /* Brand-book slide grounds — the three backgrounds the deck alternates between. */
  --brand-ground-blue:   var(--brand-blue);
  --brand-ground-yellow: var(--brand-yellow);
  --brand-ground-sky:    var(--brand-blue-light);
}

/* ===== components/web/kloki-components.css ===== */
/* ==========================================================================
   KLOKI — KNIHOVNA KOMPONENT
   Verze 1.0 · 10. 8. 2026
   Prefix tříd: .kl-

   ZÁVISLOST: tento soubor NEFUNGUJE bez kloki-tokens.css. Načti ho první:
     {{ 'kloki-tokens.css'     | asset_url | stylesheet_tag }}
     {{ 'kloki-components.css' | asset_url | stylesheet_tag }}

   ODKUD ČÍSLA POCHÁZEJÍ
   Každá hodnota je buď (a) naměřený computed styl z kloki.cz
   (home / PDP kloki-star / BTS LP × 390 / 768 / 1440), nebo (b) zdrojový kód
   theme (assets/bts.css, kloki-cart-drawer.css, sections/main-product.liquid,
   snippets/sticky-add-to-cart.liquid, snippets/cart-drawer.liquid).
   Kanonickou vrstvou je BTS — z PDP se nekopíruje nic (36 velikostí písma,
   20 letter-spacingů). Kde se knihovna od živého webu ODCHYLUJE, je u pravidla
   komentář „ODCHYLKA OD ŽIVÉHO WEBU" a důvod.

   ČTYŘI VĚCI, KTERÉ MUSÍŠ VĚDĚT, NEŽ TOHLE POUŽIJEŠ
   1) 1 rem = 10 px (theme má font-size: 62.5 %). Proto je celý soubor v px/em.
   2) base.css útočí na element selektory (body letter-spacing .6px,
      h1–h5 .69px + word-break: break-word). Obal stránky MUSÍ mít .kl-page,
      jinak ti theme přepíše tracking a rozláme česká slova.
   3) Poppins má načtené 400/700 vždy, 600 a 800 jen když si je šablona
      dotáhne (vzor theme.liquid:319–325). Váha 900 NEEXISTUJE — knihovna
      proto všude, kde BTS píše 900, používá 800 (rozhodnutí R3 v tokenech).
      Vizuálně je to shodné, protože prohlížeč 900 stejně kreslí řezem 800.
   4) Shopify GitHub sync tiše zahazuje soubory: {% schema %} name max 25
      znaků, richtext settings musí začínat <p>, locale hodnota max 1000 zn.
      Před pushem spusť @shopify/theme-check-node.

   POŘADÍ SOUBORU
     0  Doplňkové RGB trojice        1  Stránka, kontejner, sekce, mřížka
     2  Typografie                   3  Tlačítka
     4  Badge a pilulky              5  Karty (základ)
     6  Produktová karta             7  Karta balíčku
     8  Cenový blok + rohový pruh    9  Bonusový blok dárků
    10  Obsahové karty              11  Callout a razítko
    12  Statement sekce             13  Akordeon / FAQ
    14  Karusel                     15  Video karta
    16  Timeline                    17  Srovnávací tabulky
    18  Tarify a perky              19  Garance
    20  Trust prvky                 21  Promo lišta
    22  Sticky prvky                23  Header
    24  Footer                      25  Formuláře
    26  Cart drawer                 27  Utility + omezení pohybu
   ========================================================================== */


/* ==========================================================================
   1 · STRÁNKA, KONTEJNER, SEKCE, MŘÍŽKA
   ========================================================================== */

/* --- 1.1 Obranný obal proti base.css ------------------------------------
   Vzor .bts-page (bts.css:39). Bez něj: theme vnutí letter-spacing .6px
   do textu, .69px do nadpisů a word-break: break-word (rozláme „samostatnost"
   uprostřed slova). Dej .kl-page na nejvyšší obal sekce nebo šablony. */
.kl-page {
  margin: 0;                    /* ruší výchozích 8px na <body>, když je .kl-page přímo na něm */
  color: var(--color-text);
  background: var(--color-surface);
  font-family: var(--font-family);
  font-size: 16px;
  line-height: var(--leading-compact);
  letter-spacing: var(--tracking-normal);
}
.kl-page * { box-sizing: border-box; }
.kl-page :is(h1, h2, h3, h4, h5, h6) {
  font-family: inherit;
  word-break: normal;
  letter-spacing: var(--tracking-normal);
}
/* Vyvážené zalamování (převzato z BTS): nadpisy balance, odstavce pretty.
   Znatelně ubere osamocených slov na konci řádku v češtině. */
.kl-page :is(h1, h2, h3, h4, .kl-h1, .kl-h2, .kl-h3) { text-wrap: balance; }
.kl-page :is(p, li) { text-wrap: pretty; }
/* POVINNÁ OBRANA proti bleedu karuselu. `.kl-track` má margin-inline −20 px,
   ale mobilní gutter je 16 px (--gutter) → track přesahuje o 4 px za okraj
   viewportu a stránka na 390 px scrolluje do strany. Živý web to řeší stejně
   (bts.css:41–47: `body:has(.bts-hero)`, `#MainContent:has(.bts-page)`).
   Bez tohoto bloku je bleed vada, ne efekt. */
@media (max-width: 1023px) {
  body.kl-page,                    /* samostatné šablony v templates/ */
  body:has(.kl-page),              /* theme: .kl-page je na vnitřním obalu */
  #MainContent:has(.kl-page) { overflow-x: clip; }

  /* Od 29. 8. 2026 PLOŠNĚ, ne jen na stránkách s .kl-page. Hlavička hp-nav,
     modrý proužek i akční lišta jsou nově na celém webu, takže i obrana proti
     posuvu do stran musí být všude — jinak stačí jediný přetékající prvek na
     produktové stránce a celá stránka „plave".
     `clip` a ne `hidden` schválně: nevytváří scroll kontejner, takže se
     nerozbije position:sticky (hlavička, jumpnav na Moon PDP). */
  body { overflow-x: clip; }
}

/* Pandectes při otevřené liště souhlasu zamkne scroll a kompenzuje šířku
   scrollbaru: na <body> nastaví inline `padding-right`. Na telefonu ale
   žádný scrollbar není, takže tím jen ukrojí kus obsahu — naměřeno na
   preview 62 px, tedy obsah 328 px v okně širokém 390. Web pak vypadá
   posunutý doleva a po zavření lišty skočí zpátky.

   Na mobilu tu kompenzaci rušíme. `overflow:hidden`, které appka nastavuje
   zároveň, NECHÁVÁME — to je legitimní zámek scrollu pod modálem. */
@media (max-width: 1023px) {
  body[style*="padding-right"] { padding-right: 0 !important; }
}

/* --- 1.2 Kontejner -------------------------------------------------------
   1200 px + gutter 16 → obsah 1152 px (přesně jako .bts-container).
   --wide (1300 px) použij JEN když navazuješ na header/footer/PDP theme. */
.kl-container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding-left: var(--gutter);
  padding-right: var(--gutter);
}
.kl-container--narrow { max-width: var(--container-narrow); }
.kl-container--wide   { max-width: var(--container-theme); }
@media (min-width: 640px) {
  .kl-container { padding-left: var(--gutter-lg); padding-right: var(--gutter-lg); }
}

/* --- 1.3 Sekce -----------------------------------------------------------
   Rytmus 64 → 80 px (BTS py-16 sm:py-20). --hero 96 px na ≥1024. */
.kl-section { position: relative; padding-top: var(--section-y); padding-bottom: var(--section-y); }
.kl-section--tight { padding-top: var(--section-y-tight); padding-bottom: var(--section-y-tight); }
@media (min-width: 640px) {
  .kl-section { padding-top: var(--section-y-lg); padding-bottom: var(--section-y-lg); }
}
@media (min-width: 1024px) {
  .kl-section--hero { padding-top: var(--section-y-hero); padding-bottom: var(--section-y-hero); }
}
/* Tónovaná pozadí. PRAVIDLO Z BTS: bílá je výchozí (11 ze 17 sekcí),
   tónovaná sekce přichází každou 2.–3. sekci a nikdy nejsou dvě stejně
   tónované vedle sebe. Tmavá je na stránce právě JEDNA (viz §12). */
.kl-section--sky       { background: var(--color-surface-sky); }
.kl-section--cream     { background: var(--color-surface-cream); }
.kl-section--sky-faint { background: var(--color-surface-sky-faint); }
.kl-section--hero-bg   { background: var(--gradient-hero); }
/* Gradient pod nabídkou: barevný „nádech" po bílé sekci (bts-bundles). */
.kl-section--offer {
  background: linear-gradient(180deg, var(--kloki-sky-100), var(--kloki-cream-100) 55%, rgba(255, 255, 255, 0));
}

/* --- 1.4 Mřížka ----------------------------------------------------------
   Vlastní mřížka, NE Dawn .grid (ta má gap 40 px a breakpointy 750/990). */
.kl-grid { display: grid; gap: var(--grid-gap); }
@media (min-width: 768px) {
  .kl-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kl-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) {
  .kl-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .kl-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
/* Split hero: text / vizuál. BTS má 1.45fr / 0.55fr, gap 56. */
.kl-split { display: grid; gap: var(--space-32); }
@media (min-width: 1024px) {
  .kl-split { grid-template-columns: 1.45fr 0.55fr; gap: var(--space-56); align-items: center; }
  .kl-split--even { grid-template-columns: 1fr 1fr; }
}


/* ==========================================================================
   2 · TYPOGRAFIE
   Nadpisy jsou 800 (ne 900 — řez 900 na webu neexistuje, viz R3).
   Letter-spacing: display −0.025em, h2/h3/text normal (R4).
   ========================================================================== */

.kl-h1 {
  margin: 0 0 var(--space-16);
  font-size: var(--font-size-display);
  line-height: var(--leading-display);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-display);
  color: var(--color-heading);
}
.kl-h2 {
  margin: 0 0 var(--space-12);
  font-size: var(--font-size-h2);
  line-height: var(--leading-heading);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-normal);
  color: var(--color-heading);
}
.kl-h3 {
  margin: 0 0 var(--space-8);
  font-size: var(--font-size-h3);
  line-height: 1.33;
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-normal);
  color: var(--color-heading);
}
/* H3 uvnitř karty a v hlubších úrovních jde do navy (pravidlo R2:
   H1/H2 = #1A4886 identita, H3+ = #062B78 hloubka). */
.kl-h3--deep { color: var(--color-heading-sub); }
.kl-h4 {
  margin: 0 0 var(--space-8);
  font-size: var(--font-size-h4);
  line-height: var(--leading-sub);
  font-weight: var(--font-weight-bold);
  color: var(--color-heading-sub);
}
.kl-lead {
  margin: 0;
  font-size: var(--font-size-lead);
  line-height: var(--leading-body);
  color: var(--color-text-muted);
}
.kl-text {
  margin: 0;
  font-size: var(--font-size-body);
  line-height: var(--leading-body);
  color: var(--color-text);
}
.kl-text--sm { font-size: var(--font-size-body-sm); }

/* Nadpisový blok: nadpis max 1100, perex max 720, zarovnání vlevo.
   .kl-heading--center centruje obojí. Vzor .bts-heading. */
.kl-heading { max-width: var(--measure-heading); margin: 0 0 var(--heading-gap-sm); }
.kl-heading__line { display: block; }          /* každý řádek nadpisu zvlášť */
.kl-heading__lead { max-width: var(--measure-lead); margin: var(--space-10) 0 0; }
.kl-heading--center { margin-left: auto; margin-right: auto; text-align: center; }
.kl-heading--center .kl-heading__lead { margin-left: auto; margin-right: auto; }
@media (min-width: 768px) { .kl-heading { margin-bottom: var(--heading-gap); } }

/* Zvýraznění uvnitř nadpisu. KANONICKÝ VZOR CELÉHO WEBU: dvouřádkový nadpis,
   druhý řádek magenta. Na tmavém pozadí magentu nahrazuje žlutá (viz §12). */
.kl-accent   { color: var(--color-text-accent); }
.kl-accent-y { color: var(--color-brand-highlight); }

/* Žlutý marker („bez mobilu" v hero). Mírná rotace dělá dojem fixy. */
.kl-hl {
  display: inline-block;
  padding: 0 .18em;
  border-radius: var(--radius-xs);
  background: rgba(var(--kloki-yellow-400-rgb), .95);
  transform: rotate(-1.5deg) scale(1.02);
}
/* Podtržení klíčové fráze v perexu. Na mobilu modré, od 1024 px žluté. */
.kl-underline {
  font-weight: var(--font-weight-semibold);
  text-decoration: underline;
  text-decoration-color: var(--color-brand);
  text-decoration-thickness: 2px;
  text-underline-offset: 4px;
}
@media (min-width: 1024px) { .kl-underline { text-decoration-color: var(--color-brand-highlight); } }

/* Eyebrow = barevný verzálkový štítek NAD nadpisem (bez pozadí).
   Overline = drobný šedý popisek (zeď referencí, „JIŽ PŘES 18 000 RODIN"). */
.kl-eyebrow {
  display: inline-block;
  margin: 0 0 var(--space-10);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--color-text-accent);
}
.kl-overline {
  display: block;
  margin: 0 0 var(--space-10);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--tracking-overline);
  text-transform: uppercase;
  color: var(--color-text-overline);
}

/* Skryto vizuálně, čtečka to přečte („Krok 3" v timeline). */
.kl-sr {
  position: absolute; width: 1px; height: 1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}


/* ==========================================================================
   3 · TLAČÍTKA
   Tvar je VŽDY pilulka. Theme --buttons-radius: 12px zůstává jen pro pole
   formulářů a kupónové boxy (rozhodnutí R6).
   Naměřeno: 18px/800, lh 1.55, padding 16/32, gap 10 — na mobilu i desktopu
   STEJNĚ (BTS velikost tlačítka nezmenšuje).
   ========================================================================== */

.kl-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-10);
  padding: var(--space-16) var(--space-32);
  border: 0;
  border-radius: var(--radius-button);
  font-family: inherit;
  font-size: var(--font-size-button);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-button);
  letter-spacing: var(--tracking-normal);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: var(--transition-button);
}
.kl-btn:focus-visible {
  outline: 3px solid var(--color-focus-ring);
  outline-offset: 3px;
}
/* ⚠️ PRAVIDLO PRO CELOU KNIHOVNU: inline <svg> BEZ atributů width/height má
   výchozí velikost 300 × 150 px. Každý ikonový kontejner proto MUSÍ svému
   <svg> rozměr předepsat, jinak ikona kontejner přeteče. */
.kl-btn svg { flex: 0 0 auto; width: 20px; height: 20px; }
.kl-btn--sm svg { width: 16px; height: 16px; }

/* --- 3.1 Primární: magenta plocha + barevná záře ------------------------- */
.kl-btn--primary {
  background: var(--color-cta);
  color: var(--color-cta-text);
  box-shadow: var(--glow-cta);
}
.kl-btn--primary:hover {
  background: var(--color-cta-hover);
  transform: translateY(var(--lift-button));
}
.kl-btn--primary:active { transform: translateY(0); }

/* --- 3.2 Sekundární ghost: průsvitná výplň + 2px modrý rámeček ----------- */
.kl-btn--ghost {
  padding: 14px 28px;                       /* menší, aby nekonkuroval primáru */
  background: var(--color-cta-secondary-bg);
  color: var(--color-cta-secondary-text);
  border: 2px solid var(--color-cta-secondary-border);
  font-size: 16px;
  font-weight: var(--font-weight-semibold);
}
.kl-btn--ghost:hover { background: var(--color-surface); }

/* --- 3.3 Modré plné: jediné modré CTA na stránce (garance) --------------- */
.kl-btn--blue {
  background: var(--color-cta-dark);
  color: var(--color-on-dark);
  box-shadow: var(--glow-blue);
}
.kl-btn--blue:hover {
  background: var(--color-cta-dark-hover);
  transform: translateY(var(--lift-button));
}

/* --- 3.4 Žluté: kontrastní CTA na modrém panelu -------------------------- */
/* ODCHYLKA OD ŽIVÉHO WEBU: originál („KOUPIT HODINKY S APLIKACÍ",
   ss_hero_16) je #FFD600 / černý text / radius 8px / 15px/700 / ls .6px.
   Knihovna to narovnává na kanonickou žlutou #FFD43B, navy text (9,07:1;
   bílá na žluté má 1,41:1 a je zakázaná), pilulku a váhu 800. */
.kl-btn--yellow {
  background: var(--color-brand-highlight);
  color: var(--color-on-yellow);
  box-shadow: var(--elevation-4-sm);
}
.kl-btn--yellow:hover {
  filter: brightness(.96);
  transform: translateY(var(--lift-button));
}

/* --- 3.5 Velikosti a šířky ---------------------------------------------- */
.kl-btn--sm    { padding: 11px 18px; font-size: var(--font-size-button-sm); }
.kl-btn--xs    { padding: 4px 14px;  font-size: var(--font-size-caption); box-shadow: none; }
.kl-btn--block { width: 100%; }

/* --- 3.6 Stavy ----------------------------------------------------------
   POZOR (ověřená past z CLAUDE.md): blokace přes preventDefault je děravá —
   formulář se po chvíli stejně odešle. Na tvrdou blokaci pokladny používej
   skutečný atribut disabled + pointer-events:none a klik chytej na OBALU.
   A šablonu vždy renderuj fail-open (funkční), JS ji smí teprve zamknout. */
.kl-btn[disabled],
.kl-btn--disabled {
  opacity: .45;
  box-shadow: none;
  transform: none;
  pointer-events: none;
  cursor: not-allowed;
}
/* Načítací stav (po kliknutí na ATC, než doběhne /cart/add.js). */
.kl-btn--loading { pointer-events: none; opacity: .7; }

/* --- 3.7 Ikonová tlačítka ----------------------------------------------- */
.kl-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px; height: 44px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--color-text-strong);
  cursor: pointer;
  transition: var(--transition-button);
}
.kl-icon-btn:focus-visible { outline: 3px solid var(--color-focus-ring); outline-offset: 2px; }
.kl-icon-btn svg { flex: 0 0 auto; width: 22px; height: 22px; }
.kl-icon-btn--play svg { width: 24px; height: 24px; }
.kl-icon-btn--mute svg { width: 18px; height: 18px; }
/* Plovoucí play nad médiem (zeď referencí: 64 px desktop, 56 px mobil). */
.kl-icon-btn--play {
  width: 56px; height: 56px;
  background: var(--overlay-play);
  color: var(--color-text-strong);
  box-shadow: var(--elevation-4);
}
@media (min-width: 768px) { .kl-icon-btn--play { width: 64px; height: 64px; } }
/* Ovládání zvuku nad videem — tmavé, aby bylo čitelné na jakémkoli záběru. */
.kl-icon-btn--mute {
  width: 40px; height: 40px;
  background: var(--overlay-control);
  color: var(--color-on-dark);
  border: 1px solid rgba(255, 255, 255, .18);
  box-shadow: 0 6px 16px rgba(0, 0, 0, .16);
}


/* ==========================================================================
   4 · BADGE A PILULKY
   Nejbohatší rodina na webu (30+ variant). Sjednocující rys: radius 999,
   uppercase u „štítkových" variant, váha 800, velikost 11–13 px.
   ========================================================================== */

.kl-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-4);
  padding: var(--space-4) var(--space-12);
  border-radius: var(--radius-pill);
  font-size: var(--font-size-badge);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  letter-spacing: var(--tracking-badge);
  text-transform: uppercase;
  white-space: nowrap;
}
.kl-badge svg { flex: 0 0 auto; width: 12px; height: 12px; }

/* --- 4.1 Slevový badge na produktové kartě („Sleva −26 %") -------------- */
/* ODCHYLKA: theme kreslí 12px/400 ls 1px, radius 20px. Váha 400 u štítku je
   proti zbytku webu — knihovna dává 800 a pilulku. */
.kl-badge--sale {
  background: var(--color-cta);
  color: var(--color-cta-text);
  text-transform: none;
  letter-spacing: var(--tracking-normal);
  font-size: var(--font-size-caption);
}

/* --- 4.2 Stickery (nálepky se stínem) ----------------------------------- */
.kl-badge--sticker {
  gap: var(--space-8);
  padding: var(--space-8) var(--space-12);
  font-size: var(--font-size-sticker);
  line-height: var(--leading-sticker);
  letter-spacing: var(--tracking-normal);
  text-transform: none;
  box-shadow: var(--elevation-4-sm);
}
.kl-badge--sticker svg { width: 14px; height: 14px; }
.kl-badge--yellow { background: var(--color-brand-highlight); color: var(--color-on-yellow); }
.kl-badge--navy   { background: var(--color-surface-dark);    color: var(--color-on-dark); }
.kl-badge--red    { background: var(--color-negative);        color: var(--color-on-dark); }
/* Rotace dělá z pilulky nálepku. Střídej −4° / +4°, nikdy víc než 4°. */
.kl-badge--tilt-l { transform: rotate(-4deg); }
.kl-badge--tilt-r { transform: rotate(4deg); }

/* --- 4.3 Tématický tag v recenzi („ČESKÁ PODPORA") ---------------------- */
.kl-badge--tag {
  background: var(--color-surface-sky);
  color: var(--color-brand);
  letter-spacing: var(--tracking-eyebrow);
}

/* --- 4.4 Feature chip (nesouvisí s CTA — jen výčet vlastností) ---------- */
.kl-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-8);
  padding: var(--space-8) 14px;
  border-radius: var(--radius-pill);
  background: var(--color-surface-cream-warm);
  color: var(--color-heading-sub);
  font-size: var(--font-size-chip);
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-compact);
  box-shadow: var(--elevation-0);
}
.kl-chip svg { flex: 0 0 14px; width: 14px; height: 14px; }
/* Barevná varianta pro „vlastnostní" pilulky na PDP (GPS, SOS, Školní režim).
   POZOR: bílá na #33A3FF má 2,68:1. Proto je popisek navy, ne bílý. */
.kl-chip--accent { background: var(--color-accent-blue); color: var(--color-on-accent-blue); }
.kl-chip--gold   { background: var(--color-brand-highlight); color: var(--color-on-yellow); }
/* Benefitní pilulka uvnitř feature karty („Ve třídě klid, po škole spojení.") */
.kl-chip--benefit {
  align-self: flex-start;
  padding: var(--space-8) var(--space-12);
  background: var(--color-surface-yellow);
  color: var(--color-heading-sub);
  font-weight: var(--font-weight-bold);
  box-shadow: none;
}

/* --- 4.5 Kupónová pilulka (dashed) -------------------------------------- */
.kl-coupon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-8);
  width: 100%;
  padding: var(--space-10) var(--space-12);
  border: 1px dashed var(--color-cta-ring);
  border-radius: var(--radius-sm);          /* kupón NENÍ pilulka — je to box */
  background: rgba(var(--kloki-magenta-500-rgb), .08);
  color: var(--color-text-accent);
  font-family: inherit;
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  text-align: center;
  cursor: pointer;
  transition: var(--transition-button);
}
.kl-coupon:hover { background: rgba(var(--kloki-magenta-500-rgb), .14); }
.kl-coupon:focus-visible { outline: 3px solid var(--color-focus-ring); outline-offset: 2px; }
/* Chladná varianta do finálního CTA bloku. */
.kl-coupon--cool { background: linear-gradient(90deg, var(--kloki-sky-100), var(--kloki-sky-050)); }
/* Kód uvnitř pilulky. Monospace je záměr — kód se opisuje. */
.kl-coupon__code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-badge);
  padding: 2px var(--space-8);
  border-radius: var(--radius-xs);
  background: var(--color-surface-yellow);
  color: var(--color-heading-sub);
}
/* Kód v tmavé promo liště (dashed bílý). Je to TLAČÍTKO (klik = kopírovat),
   ale vizuálně vychází ~26 px vysoké — živý web tím propadá WCAG 2.5.5.
   Neroztahujeme vzhled, rozšiřujeme jen zásah přes ::before (recept
   z 10-accessibility §2.2), proto position: relative. */
.kl-code {
  position: relative;
  display: inline-flex;
  align-items: center;
  padding: var(--space-4) var(--space-12);
  border: 1.5px dashed rgba(255, 255, 255, .7);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, .1);
  color: var(--color-on-dark);
  font-family: inherit;
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-badge);
  cursor: pointer;
  transition: background-color var(--duration-fast) var(--ease);
}
.kl-code::before { content: ""; position: absolute; inset: -9px; }
.kl-code:hover { background: rgba(255, 255, 255, .18); }
/* Na světlé (žluté) liště se prohodí polarita. */
.kl-promo--warm .kl-code {
  border-color: var(--color-brand);
  background: rgba(255, 255, 255, .55);
  color: var(--color-heading-sub);
}

/* --- 4.6 Danger štítky (dvouúrovňový systém) ---------------------------- */
/* Horní štítek na okraji karty: HROZBA / VAROVÁNÍ. Jediný radius 6 px
   u štítku na webu — nálepka „nalepená" na hranu karty. */
.kl-danger-label {
  position: absolute;
  top: -12px;
  left: var(--space-24);
  padding: var(--space-4) var(--space-12);
  border-radius: var(--radius-xs);
  background: var(--color-negative);
  color: var(--color-on-dark);
  font-size: var(--font-size-overline);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  letter-spacing: .1em;
  text-transform: uppercase;
}
/* Spodní tag pod čarou: VYSOKÉ RIZIKO / ŽÁDNÝ FILTR. */
.kl-danger-tag {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-8);
  margin-top: var(--space-20);
  padding-top: var(--space-20);
  border-top: 1px solid var(--color-border-hair);
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-sub);
  text-transform: uppercase;
  letter-spacing: var(--tracking-normal);
  color: var(--color-negative);
}
.kl-danger-tag::before {
  content: "";
  width: var(--space-8); height: var(--space-8);
  border-radius: var(--radius-pill);
  background: var(--color-negative);
}

/* --- 4.7 Badge nad kartou (absolutní) ----------------------------------- */
.kl-badge--over {
  position: absolute;
  top: 0; left: 50%;
  transform: translate(-50%, -50%);
  z-index: var(--z-raised);
  padding: var(--space-8) 14px;
  box-shadow: var(--elevation-4-sm);
}
.kl-badge--gradient { background: var(--gradient-badge); color: var(--color-on-dark); }
.kl-badge--solid    { background: var(--color-surface-dark); color: var(--color-on-dark); }
.kl-badge--pink     { background: var(--color-cta-ring); color: var(--color-on-dark);
                      box-shadow: 0 4px 12px rgba(var(--kloki-magenta-500-rgb), .35); }
/* Nakloněná cedulka „NEJLEPŠÍ VOLBA" nad srovnávacím sloupcem. */
.kl-badge--best {
  padding: var(--space-8) var(--space-16);
  border: 2px solid var(--color-heading-sub);
  background: var(--color-brand-highlight);
  color: var(--color-heading-sub);
  letter-spacing: .22em;
  box-shadow: 0 4px 0 0 rgba(var(--kloki-blue-900-rgb), .25);
  transform: translate(-50%, -50%) rotate(-4deg);
}

/* --- 4.8 Bílá eyebrow pilulka (garance, předplatné) --------------------- */
.kl-badge--white {
  padding: var(--space-8) var(--space-16);
  background: var(--color-surface);
  color: var(--color-brand);
  font-size: var(--font-size-eyebrow);
  letter-spacing: var(--tracking-micro);
  box-shadow: var(--elevation-0), var(--elevation-4-sm);
}
.kl-badge--white svg { width: 14px; height: 14px; color: var(--color-brand-highlight); }

/* --- 4.9 Hodnotová pilulka („Jen o 70 Kč více než hodinky") ------------- */
.kl-badge--value {
  padding: var(--space-8) var(--space-12);
  background: var(--color-surface-sky);
  color: var(--color-heading-sub);
  font-size: var(--font-size-sticker);
  letter-spacing: var(--tracking-normal);
  text-transform: none;
}
.kl-badge--value-hot { background: var(--color-brand-highlight); }


/* ==========================================================================
   5 · KARTY (ZÁKLAD)
   Dvě rodiny elevace, které se NEMÍCHAJÍ:
     A) měkký stín  --elevation-2 (výchozí karta, „vznáší se")
     B) ring         --elevation-1 (1px obrys + sotva znatelný stín)
   Originál karty NEOBTAHUJE rámečkem — drží je jen stín nebo ring.
   ========================================================================== */

.kl-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--color-surface);
  border: 0;
  border-radius: var(--radius-card);
  box-shadow: var(--elevation-2);
  overflow: hidden;
}
.kl-card--ring  { box-shadow: var(--elevation-1); }
.kl-card--flat  { box-shadow: none; }
/* „featured" = magenta prsten + větší stín. Prsten je box-shadow, NE border
   (border by posunul layout o 4 px a karta by v mřížce vyskočila). */
.kl-card--featured {
  background: linear-gradient(180deg, var(--color-surface) 70%, var(--color-surface-cream));
  box-shadow: 0 0 0 4px var(--color-cta-ring), var(--elevation-3);
  overflow: visible;                       /* aby prsten nebyl uříznutý */
}
.kl-card__media { position: relative; overflow: hidden; }
.kl-card__media img { display: block; width: 100%; height: auto; }
.kl-card__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-10);
  flex: 1;
  padding: var(--space-24);
}
@media (min-width: 640px) { .kl-card__body { padding: var(--space-32); } }
/* Karta s fotkou flush k horní hraně (fotka + barevné tělo). */
.kl-card__media--top { border-radius: var(--radius-card-top); }
/* Hover je vyhrazen KLIKACÍM kartám. Statická karta se nehýbe. */
.kl-card--link { transition: var(--transition-card); cursor: pointer; }
.kl-card--link:hover { transform: translateY(var(--lift-card)); box-shadow: var(--elevation-3); }
.kl-card--link:focus-within { box-shadow: var(--elevation-3), var(--ring-focus); }


/* ==========================================================================
   6 · PRODUKTOVÁ KARTA
   Anatomie: médium (fotka na barevném pozadí — barva je součástí BITMAPY,
   ne CSS!) → slevový badge → název → hvězdičky → cena → kódová pilulka →
   quick-add tlačítko.
   ========================================================================== */

.kl-product-card { text-align: center; }
.kl-product-card .kl-card__media { border-radius: var(--radius-card-top); background: var(--color-surface); }
.kl-product-card .kl-card__media img { aspect-ratio: 1 / 1; object-fit: cover; }
.kl-product-card .kl-badge--sale { position: absolute; top: var(--space-12); left: var(--space-12); z-index: var(--z-raised); }
.kl-product-card__body {
  display: flex; flex-direction: column; align-items: center; gap: var(--space-8);
  padding: var(--space-16) var(--space-16) var(--space-24);
}
.kl-product-card__name {
  margin: 0;
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-sub);
  letter-spacing: var(--tracking-normal);
  color: var(--color-heading);
}
/* ODCHYLKA: theme kreslí název 14,95px/700 a cenu 16px/400. Váha 400 u ceny
   je legacy — knihovna dává 800 (cena je druhé nejdůležitější číslo karty). */
.kl-product-card__prices { display: flex; align-items: baseline; justify-content: center; gap: var(--space-8); }
.kl-product-card__old {
  font-size: var(--font-size-caption);
  color: var(--color-text-muted);
  text-decoration: line-through;
}
.kl-product-card__price {
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-price);
  color: var(--color-heading);
}
/* Žlutá kódová pilulka „3 321 Kč s kódem BTS20". Na ≤480 px se láme
   na sloupec — jinak přeteče na delších jazykových tvarech (HU/DE). */
.kl-code-price {
  display: inline-flex; align-items: center; gap: var(--space-10);
  width: fit-content; max-width: 100%;
  padding-right: var(--space-8);
  border-radius: var(--radius-pill);
  background: var(--color-surface-cream);
}
.kl-code-price__value {
  padding: var(--space-8) 14px;
  border-radius: var(--radius-pill);
  background: var(--color-brand-highlight);
  color: var(--color-on-yellow);
  font-size: var(--font-size-price-mid);
  font-weight: var(--font-weight-bold);
  white-space: nowrap;
}
.kl-code-price__label {
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  color: var(--color-text-accent);
}
@media (max-width: 479px) {
  .kl-code-price { flex-direction: column; gap: var(--space-4); width: 100%; padding: 0 0 var(--space-8); border-radius: var(--radius-md); }
  .kl-code-price__value { width: 100%; }
}
.kl-product-card__cta { margin-top: var(--space-8); }


/* ==========================================================================
   7 · KARTA BALÍČKU (kanonická nabídková karta)
   Zdroj: snippets/bts-bundle-card.liquid (205 ř.), měřeno na /pages/back-to-school.
   Fotka 1:1 → tělo 28 px → badge → název → popis → položky s checky →
   cenový blok → kupón → finální cena → CTA → řádek dopravy.
   ========================================================================== */

.kl-bundle { overflow: visible; }
.kl-bundle .kl-card__media { border-radius: var(--radius-card-top); overflow: hidden; }
.kl-bundle .kl-card__media img { aspect-ratio: 1 / 1; object-fit: cover; }
.kl-bundle__body { display: flex; flex-direction: column; gap: var(--space-10); flex: 1; padding: 28px; }
.kl-bundle__name {
  margin: var(--space-4) 0 0;
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-heading);
  color: var(--color-heading);
}
.kl-bundle__sub { font-size: var(--font-size-price-mid); color: var(--color-text-muted); margin: 0; }
/* Seznam položek balíčku. Check je zelený, 16 px, zarovnaný na první řádek. */
.kl-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-8); }
.kl-list li { display: flex; gap: var(--space-8); align-items: flex-start; font-size: var(--font-size-body-sm); line-height: var(--leading-compact); color: var(--color-text); }
.kl-list svg { flex: 0 0 16px; width: 16px; height: 16px; margin-top: 2px; color: var(--color-positive); }
/* Zvýrazněná skupina „ŠKOLNÍ VÝBAVA NAVÍC" — růžový dashed box. */
.kl-list--plus {
  padding: var(--space-12);
  border: 1px dashed rgba(var(--kloki-magenta-500-rgb), .35);
  border-radius: 14px;
  background: rgba(var(--kloki-magenta-500-rgb), .05);
}
.kl-list__title {
  font-size: var(--font-size-micro);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--color-text-accent);
}
/* „Vše ze Školního balíčku" — sky box, radius 12. */
.kl-inherit {
  display: flex; align-items: center; gap: var(--space-8);
  padding: var(--space-10) var(--space-12);
  border-radius: var(--radius-sm);
  background: var(--color-surface-sky);
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-heading-sub);
}
.kl-inherit svg { flex: 0 0 16px; width: 16px; height: 16px; color: var(--color-positive); }
/* Řádek dopravy pod CTA. */
.kl-bundle__shipping {
  display: flex; align-items: center; justify-content: center; gap: var(--space-8);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-semibold);
  color: var(--color-heading-sub);
}
.kl-bundle__shipping svg { flex: 0 0 16px; width: 16px; height: 16px; color: var(--color-positive); }
/* Doporučená karta se na desktopu vystrčí nahoru o 16 px. */
@media (min-width: 1024px) { .kl-bundle.kl-card--featured { margin-top: -16px; } }


/* ==========================================================================
   8 · CENOVÝ BLOK + ROHOVÝ PRUH ÚSPORY
   ========================================================================== */

.kl-price {
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid var(--color-border);
  display: grid;
  gap: var(--space-8);
}
.kl-price__row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-8); }
.kl-price__label { font-size: var(--font-size-price-mid); color: var(--color-text-muted); }
.kl-price__strike {
  font-size: var(--font-size-price-strike);
  color: var(--color-text-muted);
  text-decoration: line-through;
}
.kl-price__mid { font-size: var(--font-size-price-mid); font-weight: var(--font-weight-semibold); color: var(--color-text-muted); }
/* Popisek nad finální cenou: „FINÁLNÍ CENA SE SLEVOVÝM KÓDEM". */
.kl-price__cap {
  font-size: var(--font-size-micro);
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--tracking-micro);
  text-transform: uppercase;
  color: var(--color-text-faint);
}
.kl-price__value {
  font-size: var(--font-size-price);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-price);
  color: var(--color-heading-sub);
}
.kl-price--featured .kl-price__value { font-size: var(--font-size-price-lg); }
.kl-price__save {
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-semibold);
  color: var(--color-positive);
}

/* --- 8.1 Rohový pruh úspory ---------------------------------------------
   ⚠️ ZÁVAZNÉ PRAVIDLO MAJITELE (CLAUDE.md, changelog 2026-08-06, 57ed2c2):
   „pruh nese JEN částku, žádný popisek; se slevovým kódem = škrtnutá cena
    − cena po kódu, bez kódu = škrtnutá cena − běžná cena."
   Pruh je JEDINÝ prvek na stránce, který připočítává kupón — ceny pod ním
   i lepící lišta ho ignorují (kód se uplatní až v pokladně). Rozdíl proti
   číslům pod pruhem je ZAMÝŠLENÝ, není to chyba. Dvouřádkovou variantu
   s popiskem majitel výslovně zamítl.
   Rodič musí mít position: relative + overflow: hidden. */
.kl-ribbon {
  position: absolute;
  top: 18px; right: -32px;
  width: 140px;
  padding: var(--space-4) 0;
  z-index: var(--z-raised);
  background: var(--color-cta-dark);        /* bílá na #1A4886 = 9,07:1 */
  color: var(--color-on-dark);
  font-size: var(--font-size-overline);
  font-weight: var(--font-weight-semibold);
  line-height: 1.8;
  letter-spacing: var(--tracking-micro);
  text-align: center;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .1);
  transform: rotate(45deg);
  pointer-events: none;
}
/* 1:1 s živým webem. Bílá na #33A3FF má 2,68:1 → propadá WCAG AA.
   Používej jen tam, kde je nutná shoda se stávající PDP. */
.kl-ribbon--legacy { background: var(--color-accent-blue); }

/* --- 8.2 Cenový box PDP (grand slam) ------------------------------------ */
.kl-offer {
  position: relative;
  overflow: hidden;
  margin-top: var(--space-12);
  padding: var(--space-16);
  border: 2px solid rgba(var(--kloki-magenta-600-rgb), .2);
  border-radius: var(--radius-sm);          /* konverzní blok drží 12 px */
  background: var(--color-surface);
  text-align: center;
}
.kl-offer__prices { display: flex; align-items: center; justify-content: center; gap: var(--space-8); }
.kl-offer__old { font-size: var(--font-size-caption); color: var(--color-text-muted); text-decoration: line-through; }
.kl-offer__new {
  font-size: 30px;
  font-weight: var(--font-weight-bold);
  color: var(--color-cta);
}
/* Když běží kupón, hlavní cena ZMODRÁ a magenta se přesune na cenu po kódu —
   aby na sebe dvě čísla nekřičela stejnou barvou. */
.kl-offer--coupon .kl-offer__new { color: var(--color-heading); }
.kl-offer__coupon-price {
  margin-left: var(--space-4);
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-bold);
  color: var(--color-cta);
}
/* Žlutá dashed pilulka „S kódem BTS10 jen 3 321 Kč". */
.kl-offer__coupon-pill {
  display: inline-flex; align-items: center; gap: var(--space-4);
  margin: var(--space-12) 0;
  padding: var(--space-8) var(--space-20);
  border: 2px dashed var(--color-brand-highlight);
  border-radius: var(--radius-pill);
  background: rgba(var(--kloki-yellow-400-rgb), .12);
  font-size: var(--font-size-eyebrow);
  color: var(--color-heading);
}


/* ==========================================================================
   9 · BONUSOVÝ BLOK DÁRKŮ („DNES V BALÍČKU")
   Svislá timeline: hlavní produkt + N bonusů, každý s miniaturou,
   přeškrtnutou cenou a slovem ZDARMA. Zdroj: grand_slam_offer v main-product.
   ========================================================================== */

.kl-bonus { position: relative; display: grid; gap: 0; }
.kl-bonus__item { position: relative; display: flex; gap: var(--space-12); }
/* Svislá spojnice mezi kolečky. Poslední položka ji nemá. */
.kl-bonus__item:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 9px; top: 20px; bottom: 0;
  width: 2px;
  background: rgba(var(--kloki-blue-400-rgb), .4);
}
.kl-bonus__dot {
  position: relative; z-index: var(--z-raised);
  flex: 0 0 20px; width: 20px; height: 20px;
  display: grid; place-items: center;
  border-radius: var(--radius-pill);
  background: var(--color-surface-sky);
  color: var(--color-heading-sub);
}
.kl-bonus__dot svg { width: 12px; height: 12px; }
.kl-bonus__item--main .kl-bonus__dot { background: var(--color-cta); color: var(--color-cta-text); }
.kl-bonus__content {
  display: flex; align-items: center; gap: var(--space-12); flex: 1;
  padding: var(--space-8) 0 var(--space-16);
}
.kl-bonus__thumb {
  flex: 0 0 36px; width: 36px; height: 36px;
  border-radius: var(--radius-xs);
  object-fit: contain;
  background: var(--color-surface-sky-faint);
}
.kl-bonus__name {
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-semibold);
  color: var(--color-heading);
  text-decoration: none;
}
.kl-bonus__prices { margin-left: auto; display: flex; align-items: baseline; gap: var(--space-8); white-space: nowrap; }
.kl-bonus__old { font-size: var(--font-size-micro); color: var(--color-text-muted); text-decoration: line-through; }
.kl-bonus__free { font-size: var(--font-size-micro); font-weight: var(--font-weight-semibold); color: var(--color-positive); }
/* Nadpis bloku. Naměřeno 16px/700 — je to podnadpis, ne sekční nadpis. */
.kl-bonus__title {
  margin: 0 0 var(--space-20);
  font-size: 16px;
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-sub);
  color: var(--color-heading);
}


/* ==========================================================================
   10 · OBSAHOVÉ KARTY
   ========================================================================== */

/* --- 10.1 Situační karta (pastelový gradient) ---------------------------
   Čtyři rotující gradienty po indexu. „Mint" na webu neexistuje — dojem
   levandule vzniká přechodem růžová→modrá. Fotka je vždy FLUSH ke spodní
   hraně (margin-top:auto), takže karty v řadě končí stejně. */
.kl-situation {
  display: flex; flex-direction: column; width: 100%;
  border-radius: var(--radius-card);
  overflow: hidden;
  box-shadow: var(--elevation-2);
}
.kl-situation--1 { background: var(--gradient-card-1); }
.kl-situation--2 { background: var(--gradient-card-2); }
.kl-situation--3 { background: var(--gradient-card-3); }
.kl-situation--4 { background: var(--gradient-card-4); }
.kl-situation__sticker { align-self: flex-start; margin: var(--space-16) var(--space-16) var(--space-12); }
.kl-situation__title {
  margin: 0 var(--space-16) var(--space-12);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-heading);
  color: var(--color-heading-sub);
}
.kl-situation__text {
  margin: 0 var(--space-16);
  font-size: 16px;
  line-height: var(--leading-compact);
  color: var(--color-text);
}
.kl-situation__media { margin-top: auto; }
.kl-situation__media img { display: block; width: 100%; height: auto; object-position: center bottom; vertical-align: bottom; }
@media (min-width: 640px) { .kl-situation__title { font-size: 30px; } }
/* Ve 4sloupcové mřížce se titulek i text zmenší — je to ZÁMĚR, ne chyba
   (naměřeno 18px/800 na desktopu proti 30px na tabletu). */
@media (min-width: 1024px) {
  .kl-grid--4 .kl-situation__title { font-size: var(--font-size-h4); }
  .kl-grid--4 .kl-situation__text  { font-size: var(--font-size-body-sm); }
}

/* --- 10.2 Danger karta (riziko) ----------------------------------------- */
.kl-danger {
  position: relative;
  padding: var(--space-24) var(--space-24) 28px;
  border: 2px solid var(--color-border-hair);
  border-radius: var(--radius-lg);
  background: var(--color-surface);
  text-align: center;
  box-shadow: 0 8px 30px rgba(0, 0, 0, .04);
  transition: border-color var(--duration-panel) var(--ease), box-shadow var(--duration-panel) var(--ease);
}
.kl-danger:hover {
  border-color: rgba(var(--kloki-red-500-rgb), .4);
  box-shadow: 0 14px 34px rgba(var(--kloki-red-500-rgb), .12);
}
/* „Kroužek" je ve skutečnosti squircle 16 px. */
.kl-danger__icon {
  width: 56px; height: 56px;
  margin: var(--space-12) auto var(--space-20);
  display: grid; place-items: center;
  border: 1px solid rgba(var(--kloki-red-500-rgb), .1);
  border-radius: var(--radius-md);
  background: rgba(var(--kloki-red-500-rgb), .1);
  color: var(--color-negative);
  transition: background-color var(--duration-panel) var(--ease), color var(--duration-panel) var(--ease);
}
.kl-danger__icon svg { width: 28px; height: 28px; }
.kl-danger:hover .kl-danger__icon { background: var(--color-negative); color: var(--color-on-dark); }
/* Titulek danger karty je JEDINÝ H3 na BTS s váhou 700 — záměrné změkčení,
   aby varování nekřičelo. Ponecháno. */
.kl-danger__title {
  margin: 0 0 var(--space-8);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-heading);
  color: var(--color-heading);
}
.kl-danger__text { margin: 0; font-size: var(--font-size-body); line-height: var(--leading-body); color: var(--color-text-soft); }
@media (min-width: 768px) { .kl-danger { padding: var(--space-32); } }

/* --- 10.3 Feature karta (funkce s ikonou a obrázkem) -------------------- */
.kl-feature {
  display: flex; flex-direction: column; height: 100%;
  padding: var(--space-24);
  border-radius: var(--radius-card);
  background: var(--color-surface);
  box-shadow: var(--elevation-1);
  transition: box-shadow var(--duration-fast) var(--ease);
}
@media (min-width: 640px) { .kl-feature { padding: var(--space-32); } }
.kl-feature.is-active { box-shadow: var(--ring-active), var(--elevation-1); }
.kl-feature__icon {
  width: 48px; height: 48px;
  display: grid; place-items: center;
  border-radius: var(--radius-md);
  background: var(--color-brand);           /* přebij per funkci, viz níže */
  color: var(--color-on-dark);
}
.kl-feature__icon svg { width: 24px; height: 24px; }
/* Akcentní barvy ikon podle funkce (naměřeno na BTS: 6 funkcí = 6 barev). */
.kl-feature__icon--brand  { background: var(--color-brand); }
.kl-feature__icon--pink   { background: var(--color-brand-accent); }
.kl-feature__icon--amber  { background: var(--color-warning); }
.kl-feature__icon--sky    { background: var(--color-accent-blue); color: var(--color-on-accent-blue); }
.kl-feature__icon--navy   { background: var(--color-brand-deep); }
.kl-feature__icon--red    { background: var(--color-negative); }
.kl-feature__title {
  margin: var(--space-16) 0 0;
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-heading);
  color: var(--color-heading-sub);
}
.kl-feature__desc { margin: var(--space-8) 0 var(--space-12); font-size: var(--font-size-body); line-height: var(--leading-body); color: var(--color-text-muted); }
.kl-feature__media { margin-top: var(--space-20); border-radius: var(--radius-md); overflow: hidden; }
.kl-feature__media img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: contain; }

/* --- 10.4 Recenzní karta ------------------------------------------------ */
.kl-review {
  display: flex; flex-direction: column; width: 100%;
  padding: var(--space-24);
  border-radius: 28px;                       /* menší karta než 32 — záměr */
  background: var(--color-surface);
  box-shadow: var(--elevation-1);
}
.kl-review__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-12); }
.kl-review__quote {
  margin: var(--space-16) 0 0;
  font-size: var(--font-size-quote);
  line-height: var(--leading-body);
  color: var(--color-heading);
}
.kl-review__meta { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-8); margin-top: auto; padding-top: var(--space-24); }
.kl-review__author { font-size: var(--font-size-body-sm); font-weight: var(--font-weight-bold); color: var(--color-heading); }
.kl-review__date { font-size: var(--font-size-caption); color: var(--color-text-faint); white-space: nowrap; }

/* --- 10.5 Citace učitele (přesahuje předchozí sekci) --------------------
   POZOR: obal MUSÍ mít background: transparent a overflow: visible, jinak
   Shopify sekce udělá vlastní stacking kontext a karta zapadne POD hero. */
.kl-quote-wrap { position: relative; z-index: 20; margin-top: -32px; background: transparent; }
@media (min-width: 640px) { .kl-quote-wrap { margin-top: -40px; } }
.kl-quote {
  display: flex; flex-direction: column; align-items: center; gap: var(--space-20);
  max-width: 760px; margin: 0 auto;
  padding: var(--space-24);
  border-radius: var(--radius-card);
  background: var(--color-surface);
  text-align: center;
  box-shadow: 0 0 0 1px rgba(var(--kloki-blue-700-rgb), .15), 0 14px 44px -12px rgba(var(--kloki-blue-700-rgb), .2);
}
@media (min-width: 640px) { .kl-quote { flex-direction: row; align-items: center; text-align: left; } }
.kl-quote__photo {
  flex: 0 0 112px; width: 112px; height: 112px;
  border-radius: var(--radius-circle);
  object-fit: cover;
  box-shadow: 0 0 0 4px var(--color-surface-yellow);   /* krémový prstenec */
}
.kl-quote__text { margin: var(--space-8) 0 0; font-size: var(--font-size-quote); font-weight: var(--font-weight-medium); line-height: var(--leading-body); color: var(--color-heading); }
.kl-quote__meta { margin-top: var(--space-8); font-size: var(--font-size-caption); color: var(--color-text-soft); }

/* --- 10.6 Perspektivní karta (fotka nahoře + barevné tělo dole) ---------
   Fotka je MIMO stínovanou plochu — stín má jen barevné tělo. */
.kl-persp { display: flex; flex-direction: column; }
.kl-persp__media { border-radius: var(--radius-card-top); overflow: hidden; }
.kl-persp__media img { display: block; width: 100%; height: auto; }
.kl-persp__body {
  padding: var(--space-24);
  border: 1px solid var(--color-border-faint);
  border-radius: var(--radius-card-bottom);
  box-shadow: 0 2px 16px rgba(0, 0, 0, .04);
}
@media (min-width: 640px) { .kl-persp__body { padding: var(--space-32); } }
.kl-persp--parent .kl-persp__body { background: var(--color-surface-sky); }   /* modrá = rodič */
.kl-persp--child  .kl-persp__body { background: var(--color-surface-rose); }  /* růžová = dítě  */
.kl-persp__title {
  display: flex; align-items: center; gap: var(--space-12);
  margin: 0 0 var(--space-20);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-heading);
  color: var(--color-heading);
}
.kl-persp__icon {
  flex: 0 0 40px; width: 40px; height: 40px;
  display: grid; place-items: center;
  border-radius: var(--radius-pill);
  background: var(--color-surface);
  color: var(--color-cta);
}
.kl-persp__icon svg { width: 22px; height: 22px; }


/* ==========================================================================
   11 · CALLOUT A RAZÍTKO (jediný „hard shadow" jazyk na webu)
   Používat ÚSPORNĚ — na celé BTS stránce se objevuje právě 2×. Je to razítko,
   ne dekorace. Offsetový stín se NIKDY nemíchá s rozostřeným.
   ========================================================================== */

.kl-callout {
  max-width: var(--measure-callout);
  margin: var(--space-40) auto 0;
  padding: var(--space-20) var(--space-24);
  border: 2px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  background: var(--color-brand-highlight);
  color: var(--color-text-strong);
  text-align: center;
  box-shadow: var(--offset-ink);
  transform: rotate(1deg);
}
.kl-callout__eyebrow {
  display: block;
  margin-bottom: var(--space-4);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  opacity: .8;
}
.kl-callout__text { margin: 0; font-size: var(--font-size-h4); font-weight: var(--font-weight-bold); line-height: 1.35; }
@media (min-width: 768px) { .kl-callout__text { font-size: 20px; } }

/* Razítková pilulka („Dát dítěti mobil není řešení") — tentýž jazyk, opačný sklon. */
.kl-stamp {
  display: inline-block;
  padding: var(--space-10) var(--space-24);
  border: 2px solid var(--color-border-strong);
  border-radius: var(--radius-pill);
  background: var(--color-brand-highlight);
  color: var(--color-text-strong);
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-sub);
  box-shadow: var(--offset-ink);
  transform: rotate(-1deg);
}
@media (min-width: 768px) { .kl-stamp { padding: var(--space-12) var(--space-32); font-size: 20px; } }


/* ==========================================================================
   12 · STATEMENT SEKCE (tmavě modrá)
   Předěl mezi „problém" a „řešení". Bez CTA, bez obrázku, bez fotky.
   Na BTS je JEDINÁ tmavá sekce stránky a leží na 31,6 % délky.
   Na tmavém pozadí nahrazuje magentu ŽLUTÁ (magenta na navy má 2,1:1).
   ========================================================================== */

.kl-statement { background: var(--color-surface-brand); color: var(--color-on-dark); text-align: center; }
.kl-statement__inner { max-width: var(--container-narrow); margin: 0 auto; }
.kl-statement .kl-h2 { color: var(--color-on-dark); font-size: var(--font-size-h2-md); }  /* 36 px i na desktopu */
.kl-statement__text {
  max-width: var(--measure-faq);
  margin: 0 auto;
  font-size: 16px;
  line-height: 1.65;
  color: rgba(255, 255, 255, .85);
}
.kl-statement__note {
  display: block;
  margin-top: var(--space-16);
  font-size: var(--font-size-eyebrow);
  color: rgba(255, 255, 255, .55);          /* dekorativní poznámka, ne informace */
}


/* ==========================================================================
   13 · AKORDEON / FAQ
   Nativní <details>/<summary>. Funguje BEZ JS (fail-open) — JS jen dozavírá
   ostatní položky. Sekce má vydávat FAQPage JSON-LD ze stejných klíčů.
   ========================================================================== */

.kl-faq { max-width: var(--measure-faq); margin: 0 auto; display: grid; gap: var(--space-10); }
.kl-acc {
  border: 0;
  border-radius: var(--radius-md);
  background: var(--color-surface);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .06);
}
.kl-acc__q {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-16);
  padding: var(--space-16) var(--space-20);
  font-size: 17px;
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  color: var(--color-heading-sub);
  cursor: pointer;
  list-style: none;
}
.kl-acc__q::-webkit-details-marker { display: none; }
.kl-acc__q::marker { content: ""; }
.kl-acc__q:focus-visible { outline: 3px solid var(--color-focus-ring); outline-offset: -3px; border-radius: var(--radius-md); }
.kl-acc__q svg {
  flex: 0 0 20px; width: 20px; height: 20px;
  transition: transform var(--duration-base) var(--ease);
}
.kl-acc[open] > .kl-acc__q svg { transform: rotate(180deg); }
.kl-acc__a {
  padding: 0 var(--space-20) var(--space-20);
  font-size: var(--font-size-body);
  line-height: 1.6;
  color: var(--color-text-muted);
}
.kl-acc__a > :first-child { margin-top: 0; }
.kl-acc__a > :last-child  { margin-bottom: 0; }


/* ==========================================================================
   14 · KARUSEL (CSS scroll-snap, bez JS knihovny)
   Doporučená mechanika pro nové stránky: nemá závislost, funguje bez
   hydratace, na ≥1024 px se přepne na mřížku a karusel zanikne.
   Swiper (48px šedé šipky) je legacy — nezavádět.
   ========================================================================== */

.kl-carousel { position: relative; }
.kl-track {
  display: flex;
  gap: var(--carousel-gap);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  /* padding + záporný margin: aby stín karty nebyl uříznutý hranou tracku */
  padding: 4px var(--space-20) var(--space-8);
  margin: 0 -20px;
}
.kl-track::-webkit-scrollbar { display: none; }
.kl-track > * { flex: 0 0 78%; scroll-snap-align: start; }
@media (min-width: 640px)  { .kl-track > * { flex-basis: 62%; } }
@media (min-width: 768px)  { .kl-track > * { flex-basis: calc((100% - var(--carousel-gap)) / 2); } }
@media (min-width: 1024px) {
  .kl-track { overflow: visible; margin: 0; padding: 4px 0 var(--space-8); }
  .kl-track--grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--grid-gap); }
  .kl-track--grid4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--grid-gap); }
  /* Když má zůstat scroll i na desktopu (recenze: 4 viditelné karty). */
  .kl-track--scroll4 { display: flex; overflow-x: auto; }
  .kl-track--scroll4 > * { flex-basis: calc((100% - 60px) / 4); }
}
/* Tečky. Aktivní se PROTÁHNE (28 px), nemění barvu pozadí okolí.
   DOTYKOVÝ CÍL: vizuál zůstává 10×10, ale cíl je 44×44 — dělá ho průhledný
   padding + background-clip: content-box (recept z 10-accessibility §2.2).
   Živý web má tečky 10×10 s gapem 8 a je to jeho NEJHORŠÍ dotykový cíl;
   knihovna ho vědomě nereplikuje. Proto gap: 0 — rozestup nese padding
   (10 + 2×17 = 44, optická mezera mezi tečkami zůstane 34 px). */
.kl-dots { display: flex; justify-content: center; gap: 0; margin-top: 18px; }
.kl-dot {
  box-sizing: content-box;
  width: 10px; height: 10px; padding: 17px; border: 0;
  border-radius: var(--radius-pill);
  background: rgba(var(--kloki-blue-700-rgb), .25);
  background-clip: content-box;
  cursor: pointer;
  transition: width var(--duration-base) var(--ease), background-color var(--duration-base) var(--ease);
}
.kl-dot[aria-current="true"] { width: 28px; background: var(--color-brand); background-clip: content-box; }
.kl-dot:focus-visible { outline: 3px solid var(--color-focus-ring); outline-offset: 3px; }
/* Šipky — JEN desktop. Na mobilu je gesto scroll, šipky by překážely. */
.kl-arrow {
  position: absolute; top: 50%;
  width: 44px; height: 44px;
  display: none; align-items: center; justify-content: center;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  background: var(--color-surface);
  color: var(--color-heading);
  box-shadow: var(--elevation-2);
  cursor: pointer;
  transform: translateY(-50%);
  z-index: var(--z-raised);
}
.kl-arrow--prev { left: -24px; }
.kl-arrow--next { right: -24px; }
.kl-arrow svg { width: 22px; height: 22px; }
.kl-arrow[disabled] { opacity: .4; pointer-events: none; }
@media (min-width: 1024px) {
  .kl-arrow { display: inline-flex; }
  .kl-dots--mobile { display: none; }
}
/* Pulzující trojice šipek dolů = signál „tady se scrolluje do strany".
   Jen pod 1024 px. */
.kl-chevrons { display: flex; justify-content: center; gap: var(--space-4); margin-top: var(--space-12); color: var(--color-brand); }
.kl-chevrons svg { width: 22px; height: 22px; animation: kl-chev .9s ease-in-out infinite; }
.kl-chevrons svg:nth-child(2) { animation-delay: .15s; }
.kl-chevrons svg:nth-child(3) { animation-delay: .3s; }
@keyframes kl-chev {
  0%, 100% { opacity: .35; transform: translateY(0); }
  50%      { opacity: 1;   transform: translateY(3px); }
}
@media (min-width: 1024px) { .kl-chevrons { display: none; } }


/* ==========================================================================
   15 · VIDEO KARTA
   preload="none" + poster je POVINNÉ. Na PDP běží 37 autoplay videí a je to
   největší výkonnostní dluh webu — nové stránky autoplay nepoužívají.
   ========================================================================== */

.kl-video {
  position: relative;
  border-radius: 28px;
  overflow: hidden;
  background: var(--color-surface);
  box-shadow: var(--elevation-1);
}
.kl-video__media { position: relative; display: block; width: 100%; background: rgba(0, 0, 0, .04); }
.kl-video__media video,
.kl-video__media img { display: block; width: 100%; height: 100%; object-fit: cover; }
.kl-video--portrait .kl-video__media { aspect-ratio: 9 / 16; }
.kl-video--landscape .kl-video__media { aspect-ratio: 16 / 9; }
/* Scrim pod textem nad videem — bez něj je bílý text nečitelný na světlém záběru. */
.kl-video__overlay {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: var(--space-16) var(--space-16) 18px;
  background: var(--overlay-media);
  color: var(--color-on-dark);
  pointer-events: none;
}
.kl-video__title { font-size: var(--font-size-h4); font-weight: var(--font-weight-semibold); line-height: var(--leading-sub); }
.kl-video__sub { font-size: var(--font-size-overline); color: var(--color-on-dark-muted); }
.kl-video__play { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: var(--z-raised); }
.kl-video__mute { position: absolute; right: var(--space-12); bottom: var(--space-12); z-index: var(--z-raised); }
.kl-video__caption {
  padding: var(--space-12) var(--space-16) var(--space-16);
  font-size: var(--font-size-price-mid);
  font-weight: var(--font-weight-bold);
  color: var(--color-heading-sub);
}
/* Spinner, dokud se video nerozjede (ověřený UX fix z commitu 6197c78). */
.kl-video__buffer {
  position: absolute; inset: 0;
  display: none; place-items: center;
  background: rgba(0, 0, 0, .12);
}
.kl-video.is-buffering .kl-video__buffer { display: grid; }
.kl-video__buffer::after {
  content: "";
  width: 32px; height: 32px;
  border: 3px solid rgba(255, 255, 255, .4);
  border-top-color: #fff;
  border-radius: var(--radius-circle);
  animation: kl-spin .8s linear infinite;
}
@keyframes kl-spin { to { transform: rotate(360deg); } }


/* ==========================================================================
   16 · TIMELINE
   Dvě různé: svislá „školní den" (5 kroků, přerušovaná čára) a vodorovná
   „doručení" (3 kroky, plná spojnice mezi kruhy).
   ========================================================================== */

/* --- 16.1 Svislá timeline (školní den 7:55 → 16:30) --------------------- */
.kl-timeline {
  position: relative;
  max-width: 640px;
  margin: 0 auto;
  padding-left: 38px;
  display: grid;
  gap: var(--space-24);   /* v datech naměřeno 26 → sjednoceno na 24 (R5) */
  list-style: none;
}
.kl-timeline::before {
  content: "";
  position: absolute;
  left: 11px; top: 6px; bottom: 6px;
  border-left: 2px dashed #C9DCF0;           /* světlý odstín brand modré */
}
.kl-step { position: relative; }
.kl-step__dot {
  position: absolute;
  left: -32px; top: 4px;
  width: 12px; height: 12px;
  border-radius: var(--radius-pill);
  background: var(--color-brand-accent);
}
.kl-step__time {
  display: block;
  margin-bottom: 2px;
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-micro);
  text-transform: uppercase;
  color: var(--color-text-accent);
}
.kl-step__title {
  margin: 0 0 var(--space-4);
  font-size: 20px;
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-sub);
  color: var(--color-heading);
}
.kl-step__text { margin: 0; font-size: var(--font-size-body); line-height: var(--leading-body); color: var(--color-text); }

/* --- 16.2 Vodorovná timeline doručení (3 kroky) ------------------------- */
.kl-delivery { display: grid; gap: var(--space-8); }
.kl-delivery__track { display: flex; align-items: center; gap: var(--space-8); }
.kl-delivery__dot {
  flex: 0 0 38px; width: 38px; height: 38px;
  display: grid; place-items: center;
  padding: 7px;
  border-radius: var(--radius-circle);
  background: var(--color-accent-blue);
  color: var(--color-surface);
}
.kl-delivery__dot svg { width: 22px; height: 22px; }
.kl-delivery__line { flex: 1 1 auto; height: 2px; background: var(--color-accent-blue); }
.kl-delivery__body { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-16); }
.kl-delivery__item { font-size: var(--font-size-eyebrow); line-height: 1.3; color: var(--color-text-muted); }
.kl-delivery__item:first-child { text-align: left; }
.kl-delivery__item:last-child  { text-align: right; }
.kl-delivery__date { display: block; font-weight: var(--font-weight-semibold); color: var(--color-text-strong); }
@media (max-width: 479px) { .kl-delivery__dot { flex-basis: 36px; width: 36px; height: 36px; } }


/* ==========================================================================
   17 · SROVNÁVACÍ TABULKY
   Na webu jsou TŘI různé vizuální jazyky. Kanonický je §17.1 (BTS).
   §17.2 (bublinová KLASIKA vs KLOKI) je specialita homepage a je legitimní
   jako emocionální varianta — má ale vlastní jazyk, nemíchat s §17.1.
   ========================================================================== */

/* --- 17.1 Kartičková tabulka (BTS) — KANONICKÁ -------------------------- */
.kl-cmp { display: none; }                    /* na mobilu ji nahradí karty */
.kl-cmp__mcards { display: grid; gap: var(--space-12); }  /* mobilní náhrada; skryje se v md níže */
@media (min-width: 768px) {
  .kl-cmp { display: grid; gap: var(--space-10); }
  .kl-cmp__row {
    display: grid;
    grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr) minmax(0, 1.06fr) minmax(0, 1fr);
    gap: var(--space-12);
  }
  .kl-cmp__mcards { display: none; }
}
/* Boční hlavičky = nakloněné cedulky se „skleněným" podkladem. */
.kl-cmp__side {
  display: grid; place-items: center;
  padding: var(--space-16) var(--space-8);
  border-radius: var(--radius-md);
  background: rgba(255, 255, 255, .8);
  color: rgba(var(--kloki-blue-900-rgb), .55);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-compact);
  letter-spacing: var(--tracking-overline);
  text-align: center;
  text-transform: uppercase;
  box-shadow: 0 8px 0 0 rgba(var(--kloki-blue-900-rgb), .08);
  backdrop-filter: blur(8px);
}
.kl-cmp__side--l { transform: rotate(-1.5deg); }
.kl-cmp__side--r { transform: rotate(1.5deg); }
/* Sloupec KLOKI: dvojitý gradient (rámeček + vnitřek) + logo v inverzi. */
.kl-cmp__head {
  position: relative;
  padding: 4px;
  border-radius: var(--radius-lg);
  background: var(--gradient-winner-head);
  box-shadow: 0 18px 40px -12px rgba(var(--kloki-magenta-vivid-rgb), .55);
  transform: translateY(-22px) rotate(1deg);
}
.kl-cmp__head-inner { display: grid; place-items: center; padding: var(--space-24) var(--space-12); border-radius: 20px; background: var(--gradient-winner); }
.kl-cmp__logo { height: 28px; filter: brightness(0) invert(1); }
/* Popisky řádků — bílé kartičky se střídavým sklonem. */
.kl-cmp__label {
  display: flex; align-items: center;
  padding: var(--space-12) var(--space-20);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: var(--color-heading-sub);
  font-size: var(--font-size-price-mid);
  font-weight: var(--font-weight-bold);
  line-height: 1.35;
  box-shadow: var(--offset-md);
}
.kl-cmp__row:nth-child(odd)  .kl-cmp__label { transform: rotate(-1deg); }
.kl-cmp__row:nth-child(even) .kl-cmp__label { transform: rotate(1deg); }
.kl-cmp__cell {
  display: flex; align-items: center; justify-content: center; gap: var(--space-8);
  padding: var(--space-12) var(--space-8);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: rgba(var(--kloki-blue-900-rgb), .75);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-medium);
  line-height: var(--leading-compact);
  box-shadow: var(--offset-sm);
}
.kl-cmp__cell--tint  { background: var(--kloki-sky-050); }
.kl-cmp__cell--kloki {
  background: var(--gradient-winner);
  color: var(--color-on-dark);
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-bold);
  box-shadow: var(--offset-lg);
}
/* Verdiktová tečka. VŽDY vedle ní textový popisek („Ano"/„Ne"/„Částečně") —
   tečka sama je aria-hidden, barva nesmí nést jediný význam. */
.kl-verdict {
  flex: 0 0 28px; width: 28px; height: 28px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-pill);
  box-shadow: var(--offset-verdict);
}
.kl-verdict svg { width: 16px; height: 16px; }
.kl-verdict--yes     { background: var(--color-positive); color: var(--color-on-dark); }
.kl-verdict--no      { background: var(--color-negative); color: var(--color-on-dark); }
.kl-verdict--partial { background: var(--color-brand-highlight); color: var(--color-heading-sub); }
.kl-verdict__bar { width: 14px; height: 3px; border-radius: var(--radius-pill); background: var(--color-heading-sub); }
/* Mobilní varianta: jedna karta na vlastnost, tři sloupce uvnitř.
   POZOR: `display` mobilních karet se deklaruje NAHOŘE (§17.1, ř. ~1467),
   před `@media (min-width:768px){ .kl-cmp__mcards{display:none} }`. Kdyby
   `display:grid` stálo až tady, přebilo by media query (stejná specificita,
   pozdější pravidlo vyhrává) a srovnání by bylo na desktopu dvakrát. */
.kl-cmp-card {
  padding: var(--space-16);
  border-radius: var(--radius-lg);
  background: var(--color-surface);
  box-shadow: var(--elevation-1);
}
.kl-cmp-card__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-8); margin-top: var(--space-12); }
.kl-cmp-card__col {
  display: grid; gap: var(--space-4); justify-items: center;
  padding: var(--space-8) var(--space-4);
  border-radius: var(--radius-sm);
  font-size: 10px;
  font-weight: var(--font-weight-medium);
  text-align: center;
  color: var(--color-text-muted);
}
.kl-cmp-card__col--kloki { box-shadow: 0 0 0 2px var(--color-brand-highlight); color: var(--color-heading-sub); }

/* --- 17.2 Bublinová tabulka „KLASIKA vs KLOKI" (homepage) --------------- */
.kl-vs {
  max-width: var(--container);
  margin: var(--space-32) auto;
  padding: var(--space-64) 0;
  border-radius: 48px;                        /* jediný radius 48 na webu — je to „deska", ne karta */
  background: rgba(var(--kloki-blue-400-rgb), .06);
}
.kl-vs__head { display: flex; justify-content: center; gap: var(--space-32); margin-bottom: var(--space-64); }
.kl-vs__col {
  padding: var(--space-8) var(--space-24);
  border-radius: var(--radius-pill);
  background: var(--kloki-line-warm);
  color: var(--color-text-strong);
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-bold);
}
.kl-vs__col--right { background: var(--color-brand-highlight); color: var(--color-on-yellow); }
.kl-vs__row { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: var(--space-12); margin-bottom: var(--space-24); }
.kl-bubble {
  display: inline-flex; align-items: center; gap: var(--space-8);
  padding: var(--space-16) var(--space-20);
  border-radius: var(--radius-pill);
  font-size: var(--font-size-price-mid);
  font-weight: var(--font-weight-medium);
  line-height: var(--leading-compact);
}
.kl-bubble--left  { justify-self: end;   justify-content: flex-end;   text-align: right; background: var(--kloki-line-warm); color: var(--color-text-strong); }
.kl-bubble--right { justify-self: start; justify-content: flex-start; text-align: left;  background: var(--color-brand-highlight); color: var(--color-on-yellow); }
.kl-bubble img, .kl-bubble svg { width: 24px; height: 24px; flex: 0 0 24px; }
.kl-bubble--left img, .kl-bubble--left svg { order: 2; }   /* ❌ napravo od textu */
.kl-vs__icon { width: 34px; height: 34px; margin: auto; }
/* Pod 700 px se sloupce slijí a bubliny se „zubatě" střídají vlevo/vpravo. */
@media (max-width: 699px) {
  .kl-vs__row { grid-template-columns: 1fr; text-align: center; row-gap: 0; }
  .kl-bubble--left  { justify-self: start; justify-content: flex-start; text-align: left; }
  .kl-bubble--right { justify-self: end;   justify-content: flex-end;   text-align: right; margin-top: -9px; }
  .kl-vs__icon { display: none; }
}


/* ==========================================================================
   18 · TARIFY A PERKY
   ========================================================================== */

.kl-plan {
  position: relative;
  display: flex; flex-direction: column;
  padding: var(--space-24);
  border: 0;
  border-radius: var(--radius-card);
  background: var(--color-surface);
  box-shadow: var(--elevation-2);
}
.kl-plan--featured { box-shadow: 0 0 0 2px rgba(var(--kloki-magenta-500-rgb), .6), 0 24px 60px -24px rgba(var(--kloki-blue-700-rgb), .45); }
@media (min-width: 1024px) { .kl-plan--featured { transform: translateY(-12px); } }
.kl-plan__media img { display: block; width: 100%; aspect-ratio: 2 / 1; object-fit: contain; }
.kl-plan__name {
  margin: var(--space-12) 0 var(--space-4);
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-sub);
  text-align: center;
  color: var(--color-heading);
}
@media (min-width: 640px) { .kl-plan__name { font-size: var(--font-size-h3); } }
.kl-plan__tagline { max-width: 280px; margin: 0 auto var(--space-16); font-size: var(--font-size-body-sm); text-align: center; color: var(--color-text-muted); }
.kl-plan__divider { height: 1px; margin: var(--space-16) 0; background: var(--color-border); }
/* Cenový rám tarifu — tlumené modré pozadí, aby číslo „sedělo v rámečku". */
.kl-plan__price {
  margin-top: auto;
  padding: var(--space-16);
  border-radius: var(--radius-md);
  background: var(--color-surface-sky-faint);
  box-shadow: var(--elevation-0);
  text-align: center;
}
.kl-plan__amount {
  font-size: var(--font-size-price-plan);
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-price);
  color: var(--color-heading);
}
.kl-plan__price--pink .kl-plan__amount { color: var(--color-text-accent); }
.kl-plan__per { font-size: var(--font-size-body-sm); font-weight: var(--font-weight-semibold); color: var(--color-text-soft); }
.kl-plan__note { font-size: var(--font-size-eyebrow); font-style: italic; color: var(--color-text-soft); }

/* Perk = poloprůhledná bílá karta se žlutým kolečkem a checkem. */
.kl-perk {
  display: flex; gap: 14px; align-items: flex-start;
  padding: var(--space-16);
  border-radius: var(--radius-md);
  background: rgba(255, 255, 255, .7);
  box-shadow: var(--elevation-0);
}
.kl-perk__icon {
  flex: 0 0 24px; width: 24px; height: 24px;
  margin-top: 2px;
  display: grid; place-items: center;
  border-radius: var(--radius-pill);
  background: var(--color-brand-highlight);
  color: var(--color-brand);
}
.kl-perk__icon svg { width: 14px; height: 14px; stroke-width: 3.5; }
.kl-perk__title { display: block; font-size: var(--font-size-body-sm); font-weight: var(--font-weight-bold); line-height: var(--leading-sub); color: var(--color-heading); }
.kl-perk__text { display: block; font-size: var(--font-size-body-sm); line-height: var(--leading-body); color: var(--color-text-muted); white-space: pre-line; }
/* Na mobilu jdou perky AŽ ZA tarify: nejdřív číslo, pak argumenty. */
@media (max-width: 1023px) {
  .kl-subs__perks { order: 2; }
  .kl-subs__plans { order: 1; }
}


/* ==========================================================================
   19 · GARANCE (odstranění rizika hned pod cenou)
   ========================================================================== */

.kl-guarantee {
  display: grid; gap: var(--space-32); align-items: center;
  padding: 28px;
  border: 0;
  border-radius: 40px;                        /* největší radius na webu — „polštář" */
  background: linear-gradient(to bottom right, var(--kloki-sky-100), var(--kloki-cream-100));
  box-shadow: var(--elevation-2);
  text-align: center;
}
/* Base musí stát PŘED media query — jinak by `justify-content: center`
   přebilo desktopové `flex-start` (stejná specificita, pozdější vyhrává). */
.kl-guarantee__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--space-16); }
@media (min-width: 1024px) {
  .kl-guarantee { grid-template-columns: 1fr 320px; gap: var(--space-64); padding: var(--space-64); text-align: left; }
  .kl-guarantee__actions { justify-content: flex-start; }
}
.kl-guarantee__text { max-width: 540px; margin: 0 0 var(--space-24); font-size: 16px; line-height: var(--leading-body); color: var(--color-text-muted); }
@media (min-width: 640px) { .kl-guarantee__text { font-size: 18px; } }
.kl-guarantee__note { display: inline-flex; align-items: center; gap: var(--space-8); font-size: var(--font-size-body-sm); font-weight: var(--font-weight-semibold); color: var(--color-heading); }
.kl-guarantee__note svg { flex: 0 0 auto; width: 18px; height: 18px; color: var(--color-positive); }
/* Odznak: soustředné kruhy žlutá → modrá → magenta → bílý střed. aria-hidden. */
.kl-seal { position: relative; width: 260px; height: 260px; margin: 0 auto; border-radius: var(--radius-circle); background: var(--color-brand-highlight); }
.kl-seal::before,
.kl-seal::after { content: ""; position: absolute; border-radius: var(--radius-circle); }
.kl-seal::before { inset: 16px; background: var(--color-brand); }
.kl-seal::after  { inset: 32px; background: var(--color-cta-ring); }
/* z-index je POVINNÝ: ::after (magenta kruh) je v malířském pořadí za dětmi
   elementu, takže bez něj střed odznaku zmizí pod růžovou plochou. */
.kl-seal__core {
  position: absolute; inset: 48px; z-index: 2;
  display: grid; place-items: center; align-content: center; gap: 2px;
  border-radius: var(--radius-circle);
  background: var(--color-surface);
  box-shadow: var(--elevation-2);
  text-align: center;
}
.kl-seal__value {
  font-size: 42px;
  font-weight: var(--font-weight-bold);
  line-height: var(--leading-price);
  background: var(--gradient-brand);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.kl-seal__label { font-size: var(--font-size-caption); font-weight: var(--font-weight-semibold); color: var(--color-heading); }


/* ==========================================================================
   20 · TRUST PRVKY
   ========================================================================== */

/* Hvězdičky. JEDNA barva (#F5B301). Web má dvě (#FFB800 v hero) — sjednoceno. */
.kl-stars { display: inline-flex; gap: 2px; color: var(--color-rating); }
.kl-stars svg { width: 15px; height: 15px; }
.kl-rating { display: inline-flex; align-items: center; gap: var(--space-8); font-size: var(--font-size-price-mid); font-weight: var(--font-weight-semibold); color: var(--color-heading); }

/* Trust blok pod hero: oddělovací čára + hodnocení + ujištění BEZ pilulek. */
.kl-trust {
  display: flex; flex-direction: column; align-items: center; gap: var(--space-10);
  width: 100%; max-width: var(--measure-hero);
  margin: 36px 0 0;
  padding-top: var(--space-24);
  border-top: 1px solid var(--color-border-hair);
}
.kl-assurances {
  display: flex; flex-wrap: wrap; justify-content: center; gap: var(--space-8) var(--space-16);
  margin: 0; padding: 0; list-style: none;
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-muted);
}
.kl-assurances li { display: inline-flex; align-items: center; gap: var(--space-4); }
.kl-assurances svg { width: 15px; height: 15px; flex: 0 0 15px; }
@media (min-width: 1024px) {
  .kl-trust { align-items: flex-start; }
  .kl-assurances { justify-content: flex-start; }
}
/* Kompaktní trust řádek pod ATC nebo v košíku. */
.kl-trustline {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: var(--space-4) var(--space-20);
  font-size: var(--font-size-caption);
  color: var(--color-text-muted);
}
.kl-trustline > * { display: inline-flex; align-items: center; gap: var(--space-4); }
.kl-trustline svg { width: 13px; height: 13px; flex: 0 0 13px; color: var(--color-positive); }


/* ==========================================================================
   21 · PROMO LIŠTA
   Dvě legitimní varianty a rozdíl mezi nimi je KONTEXT, ne nedbalost:
     --cool (modro-magenta) = na LP, kde nad ní není nic jiného
     --warm (žlutá, navy text) = site-wide, aby kontrastovala s modrou
                                 announcement lištou theme pod ní
   Autoritativní rozhodnutí: obě zůstávají, protože nikdy neběží současně
   na jedné stránce; při zavedení třetí varianty se musí jedna zrušit.
   ========================================================================== */

.kl-promo { position: relative; z-index: var(--z-header); }
.kl-promo--cool { background: var(--gradient-promo-cool); color: var(--color-on-dark); }
.kl-promo--warm { background: var(--gradient-promo-warm); color: var(--color-heading-sub); border-bottom: 1px solid var(--color-border-hair); }
.kl-promo__inner {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: var(--space-8) var(--space-12);
  padding: 6px var(--space-12);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-compact);
  text-align: center;
}
@media (min-width: 640px)  { .kl-promo__inner { padding: var(--space-8) var(--space-20); font-size: var(--font-size-caption); } }
@media (min-width: 1024px) { .kl-promo__inner { padding: var(--space-8) var(--space-24); } }
.kl-promo__chip {
  display: inline-flex; align-items: center; gap: var(--space-4);
  padding: 2px var(--space-8);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, .16);
  font-size: var(--font-size-overline);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--tracking-badge);
  text-transform: uppercase;
}
.kl-promo--warm .kl-promo__chip { background: var(--color-brand); color: var(--color-on-dark); }
@media (min-width: 640px) { .kl-promo__chip { padding: 3px var(--space-10); font-size: var(--font-size-eyebrow); } }
/* Zpětná vazba po zkopírování kódu — text se na 2 000 ms přepne. */
.kl-code.is-copied { background: rgba(255, 255, 255, .28); }


/* ==========================================================================
   22 · STICKY PRVKY
   ⚠️ FAIL-OPEN je pravidlo, ne doporučení: GitHub → Shopify sync NENÍ
   atomický (šablona se propíše dřív než JS). Nikdy nedávej do šablony stav,
   který umí odemknout jen JS. Lišty proto startují SKRYTÉ (translateY),
   ne odemčené-a-zamknout-později.
   ========================================================================== */

/* --- 22.1 Lepící ATC lišta (PDP) ---------------------------------------- */
.kl-sticky-atc {
  position: fixed; left: 0; right: 0; bottom: 0;
  z-index: var(--z-sticky);
  background: var(--color-surface);
  border-top: 1px solid var(--color-border);
  box-shadow: var(--elevation-sticky);
  transform: translateY(100%);
  transition: transform var(--duration-panel) var(--ease);
}
.kl-sticky-atc.is-visible { transform: translateY(0); }
.kl-sticky-atc__inner {
  display: flex; align-items: center; justify-content: space-between; gap: var(--space-24);
  max-width: 1152px; margin: 0 auto;
  padding: var(--space-12) var(--space-24);
}
.kl-sticky-atc__left { display: flex; align-items: center; gap: var(--space-12); min-width: 0; }
.kl-sticky-atc__img {
  position: relative;
  flex: 0 0 56px; width: 56px; height: 56px;
  border-radius: var(--radius-xs);
  object-fit: contain;
}
.kl-sticky-atc__title {
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-heading);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.kl-sticky-atc__right { display: flex; align-items: center; gap: var(--space-16); }
.kl-sticky-atc__price { font-size: var(--font-size-h4); font-weight: var(--font-weight-bold); color: var(--color-cta); }
.kl-sticky-atc__old   { font-size: var(--font-size-eyebrow); color: var(--color-text-muted); text-decoration: line-through; }
.kl-sticky-atc__save {
  padding: 2px var(--space-8);
  border-radius: var(--radius-pill);
  background: rgba(var(--kloki-blue-400-rgb), .1);
  color: var(--color-brand);
  font-size: var(--font-size-overline);
  font-weight: var(--font-weight-semibold);
}
/* Na mobilu levá část mizí — na 390 px se název + miniatura nevejdou. */
@media (max-width: 767px) {
  .kl-sticky-atc__left { display: none; }
  .kl-sticky-atc__inner { padding: var(--space-10) var(--space-16); gap: var(--space-12); }
  .kl-sticky-atc__right { width: 100%; justify-content: space-between; }
  .kl-sticky-atc .kl-btn { padding: var(--space-10) var(--space-20); font-size: var(--font-size-button-sm); }
}
/* ⚠️ Lepící lišta kupón IGNORUJE (viz pravidlo v §8.1). Nezobrazuj v ní
   cenu po kódu — rozešla by se s rohovým pruhem. */

/* --- 22.2 Sticky CTA lišta (LP, mobil) ---------------------------------- */
.kl-sticky-cta {
  position: fixed; left: 0; right: 0; bottom: 0;
  z-index: var(--z-sticky-cta);
  padding: var(--space-10) var(--gutter) calc(var(--space-10) + env(safe-area-inset-bottom));
  background: var(--overlay-glass-mobile);
  border-top: 1px solid var(--color-border);
  box-shadow: var(--elevation-sticky);
  transform: translateY(110%);
  transition: transform var(--duration-panel) var(--ease);
}
.kl-sticky-cta.is-visible { transform: none; }
/* Desktop má CTA v odkryté hlavičce — lišta by dublovala. */
@media (min-width: 1024px) { .kl-sticky-cta { display: none; } }
/* A11y: při skrytí nastav aria-hidden="true" A tabIndex="-1" na odkazy uvnitř,
   jinak do neviditelné lišty půjde tabovat. */


/* ==========================================================================
   23 · HEADER (vlastní hlavička LP)
   Sticky se aplikuje na OBAL sekce, ne na header — v krátké Shopify sekci
   by sticky „drželo" jen její vlastní výšku a hlavička by odjela.
   Na LP se theme header-group potlačuje server-side, jinak jsou dvě navigace.
   ========================================================================== */

.kl-header { display: none; }
@media (min-width: 1024px) {
  .kl-header {
    display: block;
    height: 68px;
    background: var(--overlay-glass);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--color-border);
  }
  .kl-header__inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-24); height: 100%; }
  .kl-header__logo { height: 32px; width: auto; display: block; }
  .kl-header__nav { display: flex; align-items: center; gap: 18px; }
  .kl-header__link {
    font-size: var(--font-size-body-sm);
    color: var(--color-text-strong);
    text-decoration: none;
    transition: color var(--duration-fast) var(--ease);
  }
  .kl-header__link:hover { color: var(--color-text-accent); }
  /* CTA se odkryje, teprve až promo lišta odscrolluje z obrazovky
     (IntersectionObserver na #kl-promo-bar, threshold 0). */
  .kl-header__cta { opacity: 0; transform: translateY(-6px); pointer-events: none; transition: var(--transition-panel); }
  .kl-header.is-revealed .kl-header__cta { opacity: 1; transform: none; pointer-events: auto; }
}
@media (min-width: 1280px) { .kl-header__nav { gap: 28px; } .kl-header__link { font-size: var(--font-size-price-mid); } }


/* ==========================================================================
   24 · FOOTER
   ODCHYLKA OD ŽIVÉHO WEBU: patička běží na #33A3FF a odkazy jsou
   rgba(255,255,255,.75) → kontrast 2,12:1, nejrozšířenější přístupnostní
   vada webu. Kanonická patička je proto na brand modré (#1A4886), kde má
   tentýž tón odkazů 7,85:1. Legacy vzhled je pod .kl-footer--sky.
   ========================================================================== */

.kl-footer { background: var(--color-surface-brand); color: var(--color-on-dark); }
.kl-footer--sky { background: var(--color-accent-blue); }
.kl-footer__inner { display: grid; gap: var(--space-32); padding: var(--space-48) 0; }
@media (min-width: 768px)  { .kl-footer__inner { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .kl-footer__inner { grid-template-columns: repeat(4, 1fr); gap: var(--space-40); } }
.kl-footer__heading {
  margin: 0 0 var(--space-12);
  font-size: var(--font-size-h4);
  font-weight: var(--font-weight-semibold);
  color: var(--color-on-dark);
}
.kl-footer__list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-8); }
.kl-footer__link {
  font-size: var(--font-size-body-sm);
  color: var(--color-on-dark-muted);
  text-decoration: none;
}
.kl-footer__link:hover { color: var(--color-on-dark); text-decoration: underline; }
.kl-footer__bottom {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-12);
  padding: var(--space-16) 0;
  border-top: 1px solid rgba(255, 255, 255, .08);
  font-size: var(--font-size-overline);
  letter-spacing: .07em;
  color: var(--color-on-dark-muted);
}
/* Pás platebních metod pod patičkou. */
.kl-payments { padding: var(--space-20) 0; background: var(--color-accent-blue); }
.kl-payments__list { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--space-12); }
.kl-payments img { height: 24px; width: auto; display: block; }


/* ==========================================================================
   25 · FORMULÁŘOVÉ PRVKY
   Jediné místo, kde se NEPOUŽÍVÁ pilulka — pole má radius 12–14 px,
   aby bylo jasné, že se do něj píše (rozhodnutí R6).
   ========================================================================== */

.kl-field { display: grid; gap: var(--space-4); }
.kl-label { font-size: var(--font-size-caption); font-weight: var(--font-weight-semibold); color: var(--color-heading-sub); }
.kl-input,
.kl-textarea,
.kl-select {
  width: 100%;
  padding: 14px var(--space-16);
  border: 1px solid var(--color-border);
  border-radius: 14px;
  background: var(--color-surface);
  color: var(--color-text-strong);
  font-family: inherit;
  font-size: var(--font-size-body);
  line-height: var(--leading-compact);
  transition: border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease);
}
.kl-input:focus,
.kl-textarea:focus,
.kl-select:focus {
  outline: 0;
  border-color: var(--color-accent-blue);
  box-shadow: 0 0 0 3px rgba(var(--kloki-blue-400-rgb), .15);
}
.kl-input::placeholder, .kl-textarea::placeholder { color: var(--color-text-faint); }
.kl-input[aria-invalid="true"] { border-color: var(--color-negative); }
.kl-error { font-size: var(--font-size-eyebrow); color: var(--color-negative); }

/* Checkbox (souhlas s obchodními podmínkami v košíku). */
.kl-check { display: flex; align-items: flex-start; gap: var(--space-8); }
.kl-check input[type="checkbox"] {
  flex: 0 0 18px; width: 18px; height: 18px;
  margin: 1px 0 0;
  accent-color: var(--color-cta);
}
.kl-check__text { font-size: var(--font-size-eyebrow); line-height: var(--leading-sub); color: var(--color-text-soft); }
.kl-check__text a { color: var(--color-brand); text-decoration: underline; }
/* Když uživatel klikne na pokladnu bez souhlasu, checkbox „šťouchne". */
.kl-check.is-nudging { animation: kl-nudge var(--duration-sheet) var(--ease); }
@keyframes kl-nudge {
  0%, 100% { transform: translateX(0); }
  25%      { transform: translateX(-4px); }
  75%      { transform: translateX(4px); }
}

/* Výběr barvy = dlaždice s fotkou (na KLOKI to NENÍ variant picker,
   jednotlivé barvy jsou samostatné produkty a klik naviguje na jinou URL). */
.kl-swatch {
  position: relative;
  display: block; width: 85px;
  padding-bottom: 5px;
  border-radius: var(--radius-sm);
  background: var(--color-surface);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
}
.kl-swatch img { width: 85px; height: 85px; object-fit: contain; border-radius: var(--radius-xs); display: block; }
.kl-swatch__label { font-size: var(--font-size-eyebrow); font-weight: var(--font-weight-semibold); color: var(--color-heading); }
/* Rámeček je pseudo-prvek, aby výběr neposouval layout. */
.kl-swatch::after {
  content: "";
  position: absolute; inset: 0;
  border: 1.8px solid var(--color-border);
  border-radius: var(--radius-sm);
  pointer-events: none;
  transition: border-color var(--duration-fast) var(--ease);
}
.kl-swatch:hover::after { border-color: var(--color-brand-highlight); }
.kl-swatch[aria-current="true"]::after { border-color: var(--color-brand-highlight); box-shadow: 0 0 0 2px var(--color-brand-highlight); }

/* Volba jako pilulka (quick-add sheet). */
.kl-option {
  display: inline-flex; align-items: center; gap: var(--space-8);
  padding: 9px var(--space-16);
  border: 2px solid rgba(var(--kloki-blue-700-rgb), .18);
  border-radius: var(--radius-pill);
  background: var(--color-surface);
  color: var(--color-heading);
  font-family: inherit;
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-semibold);
  cursor: pointer;
  transition: var(--transition-button);
}
.kl-option[aria-pressed="true"],
.kl-option.is-selected { border-color: var(--color-cta-ring); background: rgba(var(--kloki-magenta-500-rgb), .06); }
.kl-option[disabled] { opacity: .4; text-decoration: line-through; pointer-events: none; }

/* --- 25.1 Spodní sheet (quick-add na mobilu) ---------------------------- */
.kl-sheet-overlay {
  position: fixed; inset: 0;
  z-index: var(--z-modal);
  background: var(--overlay-modal);
  backdrop-filter: blur(5px);
}
.kl-sheet {
  position: fixed; left: 0; right: 0; bottom: 0;
  z-index: var(--z-modal);
  max-width: 480px; max-height: 86vh; margin: 0 auto;
  padding: var(--space-24) var(--space-20);
  border-radius: 28px 28px 0 0;
  background: var(--color-surface);
  box-shadow: var(--elevation-3);
  overflow-y: auto;
  animation: kl-sheet-in 220ms var(--ease-soft);
}
@media (min-width: 640px) { .kl-sheet { bottom: auto; top: 50%; transform: translateY(-50%); border-radius: 28px; } }
@keyframes kl-sheet-in { from { transform: translateY(24px); opacity: 0; } to { transform: none; opacity: 1; } }
.kl-sheet__close {
  width: 36px; height: 36px;
  display: grid; place-items: center;
  border: 0; border-radius: var(--radius-pill);
  background: var(--color-surface-sky);
  color: var(--color-heading-sub);
  cursor: pointer;
}


/* ==========================================================================
   26 · CART DRAWER
   Nativní náhrada Qikify (bezpečnostní incident 2026-07-22 — skimmer
   v nastavení appky). Scrolluje JEN seznam položek, ne celý panel.
   ========================================================================== */

.kl-cart {
  position: fixed; top: 0; right: 0; bottom: 0;
  z-index: var(--z-drawer);
  display: flex; flex-direction: column;
  width: min(420px, 100vw);
  background: var(--color-surface);
  box-shadow: -8px 0 40px rgba(var(--kloki-blue-700-rgb), .18);
  transform: translateX(100%);
  transition: transform var(--duration-panel) var(--ease);
}
.kl-cart.is-open { transform: none; }
.kl-cart__overlay { position: fixed; inset: 0; z-index: calc(var(--z-drawer) - 1); background: var(--overlay-modal); }
/* Hlavička */
.kl-cart__head {
  display: flex; align-items: center; gap: var(--space-8);
  padding: 18px var(--space-20) 14px;
  border-bottom: 1px solid var(--color-border);
}
.kl-cart__title { margin: 0; font-size: var(--font-size-h4); font-weight: var(--font-weight-semibold); color: var(--color-heading); }
.kl-cart__count {
  min-width: 24px; height: 24px;
  display: inline-grid; place-items: center;
  padding: 0 var(--space-4);
  border-radius: var(--radius-pill);
  background: var(--color-cta);
  color: var(--color-cta-text);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
}
.kl-cart__close { margin-left: auto; width: 40px; height: 40px; border: 0; border-radius: var(--radius-pill); background: transparent; cursor: pointer; }
.kl-cart__close:hover { background: var(--kloki-sky-050); }
/* Pruh dopravy zdarma. Prahy: 1 000 Kč / 40 € / 16 000 Ft; 0 = pruh se skryje. */
.kl-cart__ship {
  padding: 14px var(--space-20) var(--space-16);
  border-bottom: 1px solid var(--color-border);
  background: linear-gradient(180deg, var(--color-surface), var(--kloki-sky-050));
  font-size: 13.6px;
  line-height: 1.35;
  color: var(--color-text-strong);
}
.kl-cart__ship-track { height: 8px; margin-top: var(--space-8); border-radius: var(--radius-pill); background: var(--color-border); overflow: hidden; }
.kl-cart__ship-fill {
  height: 100%;
  border-radius: var(--radius-pill);
  background: linear-gradient(90deg, var(--color-accent-blue), var(--color-cta));
  transition: width var(--duration-sheet) var(--ease-soft);
}
.kl-cart__ship.is-done .kl-cart__ship-fill { background: linear-gradient(90deg, var(--color-checkout), #2AA084); }
/* Seznam položek — jediná scrollující část. */
.kl-cart__items { flex: 1 1 auto; overflow-y: auto; overscroll-behavior: contain; padding: var(--space-12) var(--space-20); }
.kl-cart__item { display: flex; gap: var(--space-12); padding: var(--space-12) 0; border-bottom: 1px solid var(--color-border); }
.kl-cart__item img { flex: 0 0 64px; width: 64px; height: 64px; border-radius: var(--radius-sm); object-fit: contain; }
/* Upsell (max 2 položky, server-side render kvůli správné měně trhu). */
.kl-cart__upsell { padding: var(--space-16) var(--space-20) 18px; background: var(--kloki-sky-050); }
.kl-cart__upsell-title {
  margin: 0 0 var(--space-8);
  font-size: 13.1px;
  font-weight: var(--font-weight-semibold);
  letter-spacing: .02em;
  text-transform: uppercase;
  color: var(--color-text-soft);
}
.kl-cart__upsell-item {
  display: flex; align-items: center; gap: var(--space-12);
  padding: var(--space-10);
  border: 1px solid var(--color-border);
  border-radius: 14px;
  background: var(--color-surface);
}
.kl-cart__upsell-item img { flex: 0 0 48px; width: 48px; height: 48px; border-radius: var(--radius-xs); object-fit: contain; }
/* Úspora */
.kl-cart__savings {
  padding: 7px 11px;
  border-radius: 9px;
  background: rgba(var(--kloki-green-checkout-rgb), .1);
  color: #1F7A63;
  font-size: 13.1px;
  font-weight: var(--font-weight-medium);
}
/* Patička */
.kl-cart__foot {
  padding: var(--space-12) 18px calc(var(--space-12) + env(safe-area-inset-bottom));
  border-top: 1px solid var(--color-border);
  box-shadow: 0 -6px 22px rgba(var(--kloki-blue-700-rgb), .07);
  display: grid; gap: var(--space-10);
}
/* Záměrně „Mezisoučet", NE „Celkem" — doprava se dopočítá až v pokladně. */
.kl-cart__subtotal { display: flex; align-items: baseline; justify-content: space-between; }
.kl-cart__subtotal-label { font-size: 15.2px; font-weight: var(--font-weight-medium); color: var(--color-text-strong); }
.kl-cart__subtotal-value { font-size: 20.8px; font-weight: var(--font-weight-bold); color: var(--color-heading); }
/* Tlačítko do pokladny. Souhlas s OP ho BLOKUJE (rozhodnutí majitele,
   § 1751 OZ — Shopify pokladna žádný souhlas nesbírá).
   Klik chytá OBAL [data-kl-checkout-wrap], protože disabled tlačítko
   žádnou událost nevydá. */
.kl-cart__checkout {
  width: 100%; min-height: 48px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: var(--radius-pill);
  background: var(--color-cta);
  color: var(--color-cta-text);
  font-family: inherit;
  font-size: 16px;
  font-weight: var(--font-weight-semibold);
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(var(--kloki-magenta-600-rgb), .22);
  transition: var(--transition-button);
}
.kl-cart__checkout:hover { background: var(--color-cta-hover); transform: translateY(var(--lift-button)); }
.kl-cart__checkout[disabled] { opacity: .45; box-shadow: none; pointer-events: none; }
@media (max-width: 749px) { .kl-cart { width: 100vw; } }


/* ==========================================================================
   27 · UTILITY
   ========================================================================== */

.kl-center     { text-align: center; }
.kl-stack      { display: grid; gap: var(--space-16); }
.kl-stack--sm  { gap: var(--space-8); }
.kl-stack--lg  { gap: var(--space-24); }
.kl-row        { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-12); }
.kl-row--center{ justify-content: center; }
.kl-actions    { display: flex; flex-direction: column; gap: var(--space-12); }
@media (min-width: 1024px) { .kl-actions { flex-direction: row; align-items: center; } }
.kl-measure-lead { max-width: var(--measure-lead); }
.kl-measure-card { max-width: var(--measure-card); }
.kl-img { display: block; width: 100%; height: auto; }
.kl-ratio { position: relative; width: 100%; overflow: hidden; border-radius: var(--radius-media); }
.kl-ratio > img,
.kl-ratio > video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.kl-ratio--1 { aspect-ratio: 1 / 1; }
.kl-ratio--43 { aspect-ratio: 4 / 3; }
.kl-ratio--169 { aspect-ratio: 16 / 9; }
.kl-ratio--916 { aspect-ratio: 9 / 16; }
/* Skip-link — jediné místo, kde se smí sáhnout na --z-a11y. */
.kl-skip {
  position: absolute; left: -9999px;
  z-index: var(--z-a11y);
  padding: var(--space-12) var(--space-16);
  background: var(--color-cta);
  color: var(--color-cta-text);
  border-radius: 0 0 var(--radius-sm) 0;
}
.kl-skip:focus { left: 0; top: 0; }


/* ==========================================================================
   OMEZENÍ POHYBU
   Tokeny samy zkrátí přechody na 1 ms. Tohle vypíná to, co token neumí:
   nekonečné animace, plynulý scroll a autoplay-doprovod.
   JS musí navíc zastavit autoplay videí a autoscroll karuselů:
     var REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  .kl-track { scroll-behavior: auto; }
  .kl-chevrons svg,
  .kl-video__buffer::after,
  .kl-check.is-nudging,
  .kl-sheet { animation: none; }
  .kl-btn:hover,
  .kl-card--link:hover,
  .kl-cart__checkout:hover { transform: none; }
  /* Rotace jsou statické (razítko, cedulky) — ty zůstávají, nejsou to pohyb. */
}
