/* =========================================================================
   hp-01 — design systém webu Servis HP (www.servis-hp.eu)
   Nezávislý servis notebooků, počítačů, monitorů a tiskáren HP.
   Vizuální jazyk: „Pruh“. Web pokrývá čtyři druhy zařízení, takže potřebuje
   silnou orientační kostru — každá sekce se hlásí vodorovným jantarovým
   pruhem. Uhlová čerň a grafit na text a tmavé plochy, pískový podklad,
   jantarová (odstín 38–40°) jako jediný akcent. Žádné měkké stíny: místo
   nich plné barevné odsazení a 2px hrany. Zaoblení jen 3 px, aby plochy
   působily dílensky, ne aplikačně. Mechanika (přístupnost, zaměření,
   chování v úzkém okně, CLS) se drží kontraktu.
   POZOR (past 11.8): tokeny se definují právě jednou, v @layer tokens.
   Dokumentace i favikona čtou poslední výskyt tokenu, takže přepis téhož
   tokenu v pozdější vrstvě by do styleguide poslal jinou barvu, než
   jakou návštěvník vidí.
   ========================================================================= */

@layer tokens, base, layout, components, utils, fix;

@layer tokens {
  :root {
    /* --- barvy: uhel, grafit, písek, jantar -------------------------------
       Všechny poměry níž jsou spočítané podle WCAG (relativní jas
       0,2126R + 0,7152G + 0,0722B na linearizovaných složkách), ne odhadnuté.
       Běžný text drží nejméně 7:1 (AAA), text na ploše tlačítka nejméně
       4,5:1 podle sekce 2.3 kontraktu. -------------------------------- */
    --ink:      #17130D;   /* uhlová čerň; 16,72:1 na --bg, 15,30:1 na --surface,
                              13,59:1 na --surface-2 — AAA na všech světlých plochách */
    --ink-2:    #2B241A;   /* grafit; 13,86:1 na --bg, 11,26:1 na --surface-2 */
    --muted:    #4E4436;   /* doplňkový text; 8,62:1 na --bg, 7,88:1 na --surface,
                              7,00:1 na --surface-2 — nejhorší případ přesně na AAA */
    --line:     #D9CFBA;   /* běžná linka na písku */
    --line-2:   #B6A88B;   /* silnější linka a rámečky vstupů */
    --bg:       #F8F3E9;   /* světle pískový podklad stránky */
    --surface:  #F0E9DA;   /* první odstín plochy (zebra v tabulce, .aside__box) */
    --surface-2:#E6DCC7;   /* druhý odstín (hlavičky tabulek, .section--surface) */
    /* Jantar: dvě hodnoty, protože jedna to neumí obojí.
       --accent je tmavý jantar (odstín 38°) a nese BÍLÝ text v poměru
       8,56:1 — tím splňuje požadavek kontraktu „musí unést bílý text“
       a zároveň z něj vzniká favikona.
       Plný, svítivý jantar --amber bílý text neunese (byly by to 2,0:1),
       proto na něm stojí jen plochy s TMAVÝM textem --on-amber (8,40:1).
       Rozhodnutí: hlavní tlačítko = jantarová plocha + tmavý text. Viz .btn--pri. */
    --accent:   #6B4400;   /* tmavý jantar; bílý text 8,56:1 — hrany, ikony, favikona */
    --accent-d: #4E3100;   /* hover tmavého jantaru; bílý text 11,91:1 */
    --accent-l: #F2BE55;   /* světlý jantar na tmavé plochy;
                              8,08:1 na --hero-3, 7,29:1 na --dark-3, 9,35:1 na --dark-2 */
    --amber:    #E9A31C;   /* signální jantar: pruhy, hrany, plocha hlavního tlačítka */
    --amber-d:  #C9880C;   /* hover jantarové plochy; tmavý text 6,06:1 */
    --on-amber: #1A150E;   /* text NA jantarové ploše; 8,40:1 na --amber, 6,06:1 na --amber-d */
    --link:     #5C3B00;   /* odkaz v textu; 9,13:1 na --bg, 8,35:1 na --surface,
                              7,41:1 na --surface-2 — AAA i na nejtmavší ploše */

    /* --- stavy formuláře ---------------------------------------------- */
    --ok:       #1F5A33;   /* 7,13:1 na --ok-bg, 7,39:1 na --bg */
    --ok-bg:    #E9F2E6;
    --ok-line:  #A9C9A8;
    --err:      #8E2216;   /* 7,81:1 na --err-bg, 7,94:1 na --bg */
    --err-bg:   #FBEFEC;
    --warn-bg:  #FBF0D8;   /* --ink 16,34:1, --muted 8,42:1 */
    --warn-line:#E0BE6A;

    /* --- tmavý pás ------------------------------------------------------
       Pás je jednolitý (žádný přechod), ale všechny tři zarážky musí podle
       sekce 3 kontraktu existovat. --hero-3 je nejsvětlejší, proti ní se
       měří text na tmavém (past 11.6). ------------------------------- */
    --hero-1:   #1A1813;   /* horní zarážka = skutečná barva pásu */
    --hero-2:   #262117;   /* střední */
    --hero-3:   #322C22;   /* dolní, nejsvětlejší — referenční pro kontrast */
    --on-dark:  #E7DFD0;   /* text na tmavém; 13,40:1 na --hero-1, 10,44:1 na --hero-3 */
    --dark-tx:  #D8CFBE;   /* sekundární text na tmavém; 8,95:1 na --hero-3,
                              8,07:1 na --dark-3 — nejhorší případ, pořád AAA */
    --dark-2:   #262117;   /* plochy uvnitř tmavých pásů (.hero__card, .drawer__close) */
    --dark-3:   #3A3328;   /* oddělovače a rámečky na tmavém */
    --sel:      #F6D68A;   /* podbarvení výběru textu; --ink 13,13:1 */
    --note-bg:  #F1EDE2;   /* podklad poznámkového rámečku; --ink 15,81:1 */
    --map-fill: #E6DCC7;   /* výplň obrysu ČR */
    --map-line: #A2937A;   /* obrys ČR */

    /* --- písmo ----------------------------------------------------------
       Jen systémové rodiny: CSP má font-src 'self' a nic se nestahuje.
       Škála je záměrně vyšší než u sesterských webů — nadpis stránky má
       na telefonu 38 px a od 1280 px 60 px. Web nabízí čtyři zařízení
       a nadpis je první orientační bod. ------------------------------ */
    --font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue",
            "Noto Sans", Arial, sans-serif;
    --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
            "Liberation Mono", "DejaVu Sans Mono", monospace;
    --fs-body:  17px;
    --fs-sm:    0.9375rem;                                        /* 15 px */
    --fs-xs:    0.8125rem;                                        /* 13 px */
    --fs-h1:    clamp(2.375rem, 1.55rem + 3.4vw, 3.75rem);        /* 38 → 60 px */
    --fs-h2:    clamp(1.625rem, 1.35rem + 1.15vw, 2.125rem);      /* 26 → 34 px */
    --fs-h3:    1.1875rem;                                        /* 19 px */
    --fs-h4:    1rem;                                             /* 16 px */
    --lh:       1.62;
    --measure:  72ch;
    --wrap:     1160px;
    --wrap-narrow: 780px;

    /* --- tvarosloví -----------------------------------------------------
       Malé zaoblení, silné linky, nulové stíny. „Stín“ je plné odsazení
       v barvě — plocha vypadá jako vysazený plech, ne jako karta v mlze. */
    --r:        3px;
    --r-sm:     2px;
    --bw:       2px;                    /* základní tloušťka linky */
    --bw-2:     6px;                    /* tloušťka orientačního pruhu */
    --shadow-1: none;
    --shadow-2: none;
    --offset:   6px 6px 0 var(--amber);
    --offset-d: 6px 6px 0 var(--ink);
    --sp-1: 8px;  --sp-2: 16px; --sp-3: 24px; --sp-4: 36px;
    --sp-5: 56px; --sp-6: 84px; --sp-7: 112px;
  }
}

@layer base {
  *, *::before, *::after { box-sizing: border-box; }
  html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
  @media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after {
      animation-duration: .001ms !important; animation-iteration-count: 1 !important;
      transition-duration: .001ms !important; scroll-behavior: auto !important;
    }
  }
  body {
    margin: 0; background: var(--bg); color: var(--ink);
    font-family: var(--font); font-size: var(--fs-body); line-height: var(--lh);
    font-synthesis-weight: none; text-rendering: optimizeLegibility;
    overflow-wrap: break-word;
  }
  /* Nadpisy jsou tučné a sražené. Záporné prostrkání roste s velikostí,
     protože při 60 px vypadá normální mezera mezi písmeny jako díra. */
  h1, h2, h3, h4 {
    color: var(--ink); margin: 0 0 var(--sp-2); font-weight: 800;
    line-height: 1.12; text-wrap: balance;
  }
  h1 { font-size: var(--fs-h1); letter-spacing: -.03em; }
  h2 { font-size: var(--fs-h2); margin-top: var(--sp-5); letter-spacing: -.02em; line-height: 1.16; }
  h3 { font-size: var(--fs-h3); margin-top: var(--sp-4); font-weight: 800; letter-spacing: -.012em; line-height: 1.25; }
  h4 { font-size: var(--fs-h4); font-weight: 800; letter-spacing: -.008em; }
  h2:first-child, h3:first-child, h4:first-child { margin-top: 0; }
  p, ul, ol, table, dl { margin: 0 0 var(--sp-3); }
  li { margin-bottom: var(--sp-1); }
  strong, b { font-weight: 800; }
  small { font-size: var(--fs-xs); }
  img, svg { max-width: 100%; }
  hr { border: 0; border-top: var(--bw) solid var(--line); margin: var(--sp-5) 0; }
  /* Předěl mezi formulářem a vysvětlujícím textem pod ním. */
  hr.oddel { border-top-width: var(--bw-2); border-top-color: var(--amber); margin: var(--sp-5) 0 var(--sp-4); }
  /* Past 11.5: holé `a { … }` v pozdější vrstvě by přebilo barvu textu
     v tlačítkách. Barva odkazu se proto nastavuje jen v textových
     kontextech; tady zůstává čistě podtržení, které tlačítkům nevadí,
     protože .btn si text-decoration ruší samo. */
  a { text-underline-offset: .16em; text-decoration-thickness: .09em; }
  .prose a, p a, li a, td a, dd a {
    color: var(--link); text-decoration: underline;
    text-decoration-color: var(--amber); text-decoration-thickness: .12em;
  }
  .prose a:hover, p a:hover, li a:hover, td a:hover, dd a:hover {
    color: var(--ink); background: var(--sel); text-decoration-color: var(--ink);
  }
  /* Zaměření je hranaté a tlusté — patří k tvarosloví, ne jen k přístupnosti. */
  :focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; border-radius: 0; }
  .hdr :focus-visible, .drawer :focus-visible, .hero :focus-visible,
  .ftr :focus-visible, .sticky :focus-visible { outline-color: var(--accent-l); }
  ::selection { background: var(--sel); color: var(--ink); }
  [hidden] { display: none !important; }
  /* Značky, které generátor vypisuje bez třídy. */
  table { border-collapse: collapse; width: 100%; }
  label { font-weight: 700; }
  fieldset { border: 0; padding: 0; margin: 0; }
  legend { padding: 0; }
  input, select, textarea, button { font-family: inherit; }
  details { border: var(--bw) solid var(--line-2); border-radius: var(--r); background: var(--bg); }
  summary { cursor: pointer; font-weight: 800; }
}

@layer layout {
  .wrap { width: 100%; max-width: var(--wrap); margin-inline: auto; padding-inline: var(--sp-2); }
  @media (min-width: 720px) { .wrap { padding-inline: var(--sp-3); } }
  .prose { max-width: var(--measure); }
  /* Mezititulky uvnitř článku jsou o stupeň menší než nadpis sekce a mají
     vlevo svislý jantarový pruh — hlavní motiv webu. Pruh vede po celé
     výšce nadpisu, takže dvouřádkový mezititulek dostane vyšší pruh. */
  .prose h2 {
    font-size: clamp(1.4375rem, 1.25rem + .8vw, 1.75rem);
    border-left: var(--bw-2) solid var(--amber);
    padding-left: var(--sp-2);
  }
  .prose h3 {
    font-size: 1.125rem;
    border-left: var(--bw) solid var(--line-2);
    padding-left: var(--sp-2);
  }
  .prose > :where(h2, h3) { margin-left: 0; }
  .section { padding-block: var(--sp-6); }
  .section--tight { padding-block: var(--sp-4); }
  /* Pruh, kterým se sekce hlásí: tenká jantarová linka na horní hraně. */
  .section--surface {
    background: var(--surface);
    border-top: var(--bw) solid var(--amber);
  }
  .section--surface + .section--surface { border-top: 0; padding-top: 0; }
  .grid { display: grid; gap: var(--sp-3); }
  .grid--2 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
  .grid--3 { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
  .grid--4 { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
  .cols { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; }
  /* Postranní sloupec 360 px dává uvnitř ~310 px, tedy ~40 znaků na řádek.
     Užší sloupec láme každou větu do pěti řádků. */
  @media (min-width: 980px) { .cols { grid-template-columns: minmax(0,1fr) 360px; gap: var(--sp-5); } }
  /* Rozcestník nemá postranní sloupec: mřížky jdou přes celý obal,
     text si drží --measure. */
  .rozc { display: grid; gap: var(--sp-4); }
  .rozc > * { min-width: 0; }
  .rozc > .prose { max-width: var(--measure); }
  /* Objednávkový pruh na stránkách bez postranního sloupce.
     Grafitová plocha s jantarovou hranou vlevo — stejný motiv jako karty,
     jen v tmavé variantě, aby se pruh nepřehlédl. */
  .ctapas {
    display: grid; gap: var(--sp-3); align-items: center;
    background: var(--hero-1); color: var(--on-dark);
    border-left: var(--bw-2) solid var(--amber);
    border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-4);
  }
  @media (min-width: 860px) { .ctapas { grid-template-columns: minmax(0,1fr) auto; gap: var(--sp-4); } }
  .ctapas h2 { margin: 0 0 6px; font-size: var(--fs-h3); color: #fff; border: 0; padding: 0; }
  .ctapas__txt { min-width: 0; }
  .ctapas p { margin: 0; color: var(--dark-tx); font-size: var(--fs-sm); max-width: 62ch; }
  .ctapas__akce { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
  .skip {
    position: absolute; left: -9999px; top: 0; z-index: 200;
    background: var(--accent); color: #fff; padding: 12px 18px;
    font-weight: 800; text-decoration: none; border-bottom: var(--bw) solid var(--amber);
  }
  .skip:focus { left: 0; color: #fff; }
}

@layer components {

  /* ---------- hlavička ----------------------------------------------------
     Dvouřádková a světlá, nahoře uhlový pruh. Sedm českých popisků v menu
     měří přes 800 px; s logem, dvěma telefony a objednávkovým tlačítkem se
     do jednoho řádku nevejdou. Vlastní řádek pro menu ten tlak ruší. */
  .hdr {
    background: var(--bg); color: var(--ink);
    border-top: var(--bw-2) solid var(--ink);
    border-bottom: var(--bw) solid var(--line-2);
    position: relative; z-index: 60;
  }
  .hdr__top { display: flex; align-items: center; gap: var(--sp-3); min-height: 76px; min-width: 0; }
  .hdr__brand {
    display: flex; align-items: center; gap: 12px; margin-right: auto;
    text-decoration: none; min-width: 0; min-height: 44px; padding-block: 2px;
  }
  /* Značka je hranatý uhlový čtverec s jantarovou spodní hranou —
     zmenšenina celého motivu webu. */
  .hdr__mark {
    flex: 0 0 auto; width: 42px; height: 42px; border-radius: var(--r-sm);
    background: var(--ink); color: var(--accent-l);
    border-bottom: 4px solid var(--amber);
    display: grid; place-items: center;
  }
  .hdr__id { display: flex; flex-direction: column; justify-content: center; min-width: 0; }
  .hdr__name {
    font-weight: 800; font-size: 1.125rem; letter-spacing: .06em;
    text-transform: uppercase; line-height: 1.15; color: var(--ink); white-space: nowrap;
  }
  /* Placeholdery pro údaje doplňované až v prohlížeči mají rezervovanou
     výšku — bez ní se stránka po doplnění posune a CLS přestane být nula. */
  .hdr__firm {
    font-family: var(--mono); font-size: .75rem; color: var(--muted);
    min-height: 16px; line-height: 16px; white-space: nowrap;
  }
  .hdr__contact { display: none; text-align: right; }
  @media (min-width: 860px) { .hdr__contact { display: block; } }
  .hdr__tels { display: flex; gap: 20px; justify-content: flex-end; min-height: 27px; }
  .hdr__tels .tel { color: var(--link); font-size: 1.0625rem; font-weight: 800; }
  .hdr__tels .tel:hover { color: var(--ink); }
  .hdr__hours {
    font-family: var(--mono); font-size: .75rem; color: var(--muted);
    min-height: 16px; line-height: 16px;
  }
  .hdr a.hdr__cta { display: none; }
  @media (min-width: 1060px) { .hdr a.hdr__cta { display: inline-flex; min-height: 44px; } }
  .burger {
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--bg); color: var(--ink);
    border: var(--bw) solid var(--ink); border-radius: var(--r);
    padding: 10px 14px; font: inherit; font-size: .9375rem;
    font-weight: 800; cursor: pointer; min-height: 44px;
  }
  .burger:hover { background: var(--amber); color: var(--on-amber); border-color: var(--on-amber); }
  /* Druhý řádek: menu má celou šířku samo pro sebe. Aktivní položka
     nese tlustý jantarový pruh dole — tentýž motiv jako sekce. */
  .hdr__nav { display: none; }
  @media (min-width: 900px) {
    .burger { display: none; }
    .hdr__nav {
      display: flex; gap: 0; align-items: center; flex-wrap: nowrap;
      border-top: var(--bw) solid var(--line); min-width: 0;
    }
    .hdr__nav a {
      text-decoration: none; color: var(--ink-2); padding: 13px 13px;
      font-size: .9375rem; font-weight: 700; white-space: nowrap;
      border-bottom: 4px solid transparent; margin-bottom: -2px;
    }
    .hdr__nav a:hover { color: var(--ink); background: var(--surface); border-bottom-color: var(--line-2); }
    .hdr__nav a[aria-current="page"] { color: var(--ink); border-bottom-color: var(--amber); }
  }

  /* ---------- vysouvací panel ---------- */
  .drawer {
    position: fixed; inset: 0 0 0 auto; width: min(380px, 92vw); z-index: 120;
    background: var(--hero-1); color: var(--on-dark);
    border-left: var(--bw-2) solid var(--amber);
    padding: var(--sp-2) var(--sp-2) var(--sp-5);
    overflow-y: auto; transform: translateX(101%); visibility: hidden;
    transition: transform .22s ease, visibility 0s linear .22s;
  }
  .drawer.is-on { transform: translateX(0); visibility: visible; transition: transform .22s ease, visibility 0s; }
  .drawer__head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); margin-bottom: var(--sp-3); }
  .drawer__title {
    font-family: var(--mono); font-weight: 700; font-size: .8125rem;
    letter-spacing: .14em; text-transform: uppercase; color: var(--accent-l);
  }
  .drawer__close {
    background: var(--dark-2); color: var(--on-dark);
    border: var(--bw) solid var(--dark-3); border-radius: var(--r);
    min-width: 44px; min-height: 44px; font: inherit; font-size: 1.25rem; cursor: pointer; line-height: 1;
  }
  .drawer__close:hover { border-color: var(--accent-l); color: #fff; }
  .drawer nav { display: grid; gap: 2px; }
  .drawer nav a {
    display: block; padding: 13px 12px; text-decoration: none; color: var(--on-dark);
    font-weight: 700; min-height: 44px; border-left: 3px solid transparent;
  }
  .drawer nav a:hover { background: var(--dark-2); border-left-color: var(--dark-3); color: #fff; }
  .drawer nav a[aria-current="page"] { background: var(--dark-2); border-left-color: var(--amber); color: #fff; }
  .drawer__cta { display: grid; gap: var(--sp-1); margin-bottom: var(--sp-3); }
  .drawer__sep {
    border-top: var(--bw) solid var(--dark-3); margin: var(--sp-3) 0 var(--sp-2);
    padding-top: var(--sp-2); font-size: var(--fs-xs); color: var(--dark-tx);
  }
  .drawer__sep a { display: inline-flex; align-items: center; min-height: 44px; padding-inline: 2px; color: var(--accent-l); }
  .scrim {
    position: fixed; inset: 0; background: rgba(23,19,13,.62); z-index: 110;
    opacity: 0; visibility: hidden; transition: opacity .22s ease, visibility 0s linear .22s;
  }
  .scrim.is-on { opacity: 1; visibility: visible; transition: opacity .22s ease, visibility 0s; }

  /* ---------- tlačítka ----------------------------------------------------
     ROZHODNUTÍ o jantarovém tlačítku. Signální jantar --amber (#E9A31C)
     unese bílý text jen v poměru 2,0:1, takže bílý text je vyloučený.
     Místo ztmavení jantaru do měděné (to by srazilo odstín pod 30° a web
     by splynul se sesterským) stojí hlavní tlačítko na jantarové ploše
     s TMAVÝM textem --on-amber: 8,40:1, skoro dvojnásobek požadovaných
     4,5:1; v hoveru na --amber-d pořád 6,06:1. Token --accent zůstává
     tmavý jantar #6B4400, který bílý text unese (8,56:1) — z něj se
     kreslí favikona a stavy zaměření. Stín žádný: 2px uhlová hrana
     a v hoveru posun o 2 px na plné odsazení v barvě uhlu. */
  .btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 50px; padding: 13px 22px; border-radius: var(--r);
    font: inherit; font-weight: 800; font-size: .9375rem; letter-spacing: .01em;
    text-decoration: none; border: var(--bw) solid transparent; cursor: pointer;
    text-align: center; transition: background .14s ease, border-color .14s ease,
    box-shadow .14s ease, transform .08s ease;
  }
  .btn:active { transform: translate(1px, 1px); }
  .btn--pri { background: var(--amber); color: var(--on-amber); border-color: var(--on-amber); }
  .btn--pri:hover { background: var(--amber-d); color: var(--on-amber); box-shadow: 3px 3px 0 var(--ink); }
  .btn--sec { background: var(--bg); color: var(--ink); border-color: var(--ink); }
  .btn--sec:hover { background: var(--surface-2); color: var(--ink); box-shadow: 3px 3px 0 var(--amber); }
  .btn--ghost { background: transparent; color: var(--on-dark); border-color: var(--dark-3); }
  .btn--ghost:hover { background: var(--dark-2); color: #fff; border-color: var(--accent-l); }
  .btn--sm { min-height: 44px; padding: 9px 15px; font-size: var(--fs-sm); }
  .btn--block { width: 100%; }
  .btn-row { display: flex; flex-wrap: wrap; gap: var(--sp-2); }

  /* ---------- telefon (vkládá se až v prohlížeči) ---------- */
  .tel { display: inline-flex; align-items: center; gap: 7px; font-weight: 800; text-decoration: none; white-space: nowrap; }
  .tel__i { flex: 0 0 auto; }
  .tel:hover { text-decoration: underline; }
  .ftr .tel--light, .drawer .tel--light { color: #fff; }

  /* ---------- hero --------------------------------------------------------
     Jednolitý grafitový pás, pod ním silný jantarový pruh. Rozvržení je
     ZÁMĚRNĚ asymetrické: nadpis a perex drží levé dvě třetiny, karta
     s postupem stojí vpravo, posunutá dolů, a přesahuje přes spodní
     hranu pásu do světlé sekce pod ním. */
  .hero {
    background: var(--hero-1); color: var(--on-dark);
    border-bottom: 10px solid var(--amber);
    padding-block: var(--sp-6) var(--sp-5);
    position: relative;
  }
  .hero h1 { color: #fff; max-width: 17ch; }
  .hero__main { min-width: 0; }
  .hero__eyebrow {
    font-family: var(--mono); font-size: .8125rem; font-weight: 700;
    letter-spacing: .2em; text-transform: uppercase;
    color: var(--accent-l); margin: 0 0 var(--sp-2);
  }
  .hero__lead { font-size: 1.1875rem; color: var(--on-dark); max-width: 54ch; margin-bottom: var(--sp-4); }
  /* Odkaz v perexu stojí na tmavé ploše; --link by tu měl kontrast pod 2:1. */
  .hero__lead a { color: var(--accent-l); text-decoration-color: var(--accent-l); }
  .hero__lead a:hover { color: #fff; background: transparent; text-decoration-color: #fff; }
  .hero__note { margin-top: var(--sp-3); font-size: var(--fs-sm); color: var(--dark-tx); max-width: 70ch; }
  .hero .btn--sec { background: transparent; color: #fff; border-color: var(--on-dark); }
  .hero .btn--sec:hover { background: var(--dark-2); color: #fff; box-shadow: 3px 3px 0 var(--amber); }
  .hero__grid { display: grid; gap: var(--sp-4); align-items: start; position: relative; z-index: 2; }
  .hero__card {
    background: var(--dark-2);
    border: var(--bw) solid var(--dark-3);
    border-top: var(--bw-2) solid var(--amber);
    border-radius: 0 0 var(--r) var(--r);
    padding: var(--sp-3);
  }
  .hero__card h2 {
    color: var(--accent-l); font-family: var(--mono); font-size: .8125rem;
    letter-spacing: .16em; text-transform: uppercase; font-weight: 700;
    margin: 0 0 var(--sp-3); border: 0; padding: 0;
  }
  .hero__card p { margin: var(--sp-3) 0 0; font-size: var(--fs-xs); color: var(--dark-tx); }
  /* Překryv se zapíná až tam, kde je vpravo místo. Posouvá se transformem,
     ne marginem: transform nemění tok, takže pás nezmění výšku a karta se
     nedostane za pravý okraj obalu. Sousední sekci se o stejnou hodnotu
     zvedne horní odsazení, aby karta nepřekryla její text. */
  @media (min-width: 1080px) {
    .hero { padding-bottom: var(--sp-4); }
    .hero__grid { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: var(--sp-5); }
    .hero__card { transform: translateY(var(--sp-5)); box-shadow: var(--offset-d); }
    .hero + .section, .hero + .section--surface { padding-top: var(--sp-7); }
  }

  /* ---------- postup: velké jantarové číslice bez kolečka i rámečku,
     sedící na účaří nadpisu kroku — proto baseline, ne start ----------- */
  .hsteps { counter-reset: hk; list-style: none; padding: 0; margin: 0; display: grid; gap: var(--sp-3); }
  .hsteps li {
    counter-increment: hk; display: grid; grid-template-columns: 1.7em 1fr;
    gap: 0 12px; margin: 0; align-items: baseline;
  }
  .hsteps li::before {
    content: counter(hk);
    font-size: 2rem; font-weight: 800; line-height: 1;
    color: var(--accent-l); letter-spacing: -.04em;
    font-variant-numeric: tabular-nums;
  }
  /* Zalomení není kosmetika: popisek v <em> má nowrap, takže bez něj je
     nejmenší šířka hlavičky kroku součtem názvu a popisku — karta se pak
     nezúží a na 360 px se stránka posouvá do strany. */
  .hsteps__head { display: flex; flex-wrap: wrap; gap: 2px 12px; justify-content: space-between; align-items: baseline; }
  .hsteps b { color: #fff; font-size: 1rem; }
  .hsteps span { display: block; color: var(--dark-tx); font-size: var(--fs-xs); line-height: 1.5; }
  .hsteps em {
    font-family: var(--mono); font-style: normal; color: var(--accent-l);
    font-size: .6875rem; font-weight: 700; white-space: nowrap; text-align: right;
  }

  /* ---------- pás důvěry: řádek, který se přelévá, ne mřížka (v mřížce
     se šířka sloupce řídí nejdelší položkou a kratší se natahují) ------- */
  .trust {
    display: flex; flex-wrap: wrap; align-items: flex-start; gap: 10px 28px;
    list-style: none; margin: var(--sp-4) 0 0; padding: var(--sp-3) 0 0;
    border-top: var(--bw) solid var(--dark-3);
  }
  .trust li { display: flex; align-items: center; gap: 8px; color: var(--on-dark); font-size: var(--fs-sm); font-weight: 700; margin: 0; }
  .trust svg { color: var(--accent-l); flex: 0 0 auto; }
  /* .trust je samo <ul> uvnitř .hero — obecný reset seznamů ho musí vynechat,
     jinak přebije margin i padding a pás se nalepí na tlačítka. */
  .hero ul:not(.trust) { list-style: none; padding: 0; margin: 0; }

  /* ---------- drobečky ---------- */
  .crumbs {
    font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted);
    padding-block: 12px; background: var(--surface);
    border-bottom: var(--bw) solid var(--line);
  }
  .crumbs ol { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; padding: 0; margin: 0; }
  .crumbs li { margin: 0; display: flex; align-items: center; gap: 6px; }
  .crumbs li + li::before { content: "/"; color: var(--line-2); }
  .crumbs a { color: var(--muted); }
  .crumbs a:hover { color: var(--ink); }
  .crumbs [aria-current="page"] { color: var(--ink-2); font-weight: 700; }

  /* ---------- karty: tlustá levá hrana ---------- */
  .card {
    background: var(--bg); border: var(--bw) solid var(--line-2);
    border-left: var(--bw-2) solid var(--amber);
    border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-3); box-shadow: var(--shadow-1);
    display: flex; flex-direction: column; gap: 10px;
  }
  .card h3 { margin: 0; font-size: var(--fs-h3); border: 0; padding: 0; }
  .card p { margin: 0; color: var(--muted); font-size: var(--fs-sm); }
  .card__i { color: var(--accent); flex: 0 0 auto; }
  .card__tag {
    align-self: flex-start; font-family: var(--mono); font-size: .6875rem;
    font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
    color: var(--ink-2); background: var(--surface-2);
    border-bottom: var(--bw) solid var(--amber); padding: 3px 9px;
  }
  a.card { text-decoration: none; color: inherit; transition: box-shadow .14s ease, border-color .14s ease, transform .1s ease; }
  /* Místo stínu plné odsazení v barvě uhlu — plocha se „vysadí“ nad podklad. */
  a.card:hover { border-color: var(--ink); box-shadow: var(--offset-d); transform: translate(-2px, -2px); color: inherit; }
  a.card .card__more { margin-top: auto; color: var(--link); font-weight: 800; font-size: var(--fs-sm); }
  a.card:hover .card__more { text-decoration: underline; text-decoration-color: var(--amber); }

  /* ---------- kroky ---------- */
  .steps {
    counter-reset: krok; list-style: none; padding: 0; display: grid;
    gap: var(--sp-3); grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  }
  .steps li {
    counter-increment: krok; background: var(--bg);
    border: var(--bw) solid var(--line-2); border-top: var(--bw-2) solid var(--amber);
    border-radius: 0 0 var(--r) var(--r); padding: var(--sp-3); margin: 0;
  }
  .steps li::before {
    content: counter(krok) ".";
    display: block; font-size: 1.75rem; font-weight: 800; line-height: 1;
    color: var(--accent); letter-spacing: -.04em; margin-bottom: 6px;
  }
  .steps h3 { margin: 0 0 6px; font-size: var(--fs-h3); border: 0; padding: 0; }
  .steps p { margin: 0; color: var(--muted); font-size: var(--fs-sm); }
  .steps .steps__when {
    display: block; margin-top: 10px; font-family: var(--mono);
    font-size: var(--fs-xs); color: var(--ink-2); font-weight: 700;
  }

  /* ---------- štítky: hranaté, s tlustou spodní hranou ---------- */
  .chips { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 var(--sp-3); }
  .chips li { margin: 0; }
  .chips a, .chips span {
    display: inline-flex; align-items: center; min-height: 44px; padding: 8px 15px;
    background: var(--bg); border: var(--bw) solid var(--line-2);
    border-bottom: 4px solid var(--amber); border-radius: var(--r-sm);
    text-decoration: none; font-weight: 700; font-size: var(--fs-sm); color: var(--ink-2);
  }
  .chips a:hover { background: var(--amber); color: var(--on-amber); border-color: var(--on-amber); }
  .chips span { color: var(--muted); background: var(--surface-2); border-bottom-color: var(--line-2); }

  /* ---------- ceník: zebra a tlustá linka pod hlavičkou ---------- */
  .tbl { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
  .tbl caption { text-align: left; font-weight: 800; padding-bottom: 10px; color: var(--ink); }
  .tbl th, .tbl td { text-align: left; padding: 12px 14px; vertical-align: top; }
  .tbl thead th {
    background: var(--ink); color: var(--bg); font-family: var(--mono);
    font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .08em;
    font-weight: 700; border-bottom: 4px solid var(--amber);
  }
  /* Zebra místo linek: řádky se dělí plochou, ne čárou. --ink na --surface
     je 15,30:1, na --bg 16,72:1 — obě varianty hluboko nad AAA. */
  .tbl tbody tr { background: var(--bg); }
  .tbl tbody tr:nth-child(even) { background: var(--surface); }
  .tbl tbody td { border-bottom: 1px solid var(--line); }
  .tbl td:nth-child(2) { font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
  .tbl tbody tr:hover { background: var(--warn-bg); }
  .tbl__wrap { overflow-x: auto; }
  /* Ceník má první sloupec širší — názvy služeb jsou dlouhé, ceny krátké. */
  .tbl--cenik { table-layout: auto; }
  .tbl--cenik td:first-child, .tbl--cenik th:first-child { width: 48%; }
  /* Skupinový řádek: mezititulek přes celou šířku, aby se hlavička
     Služba/Cena/Poznámka neopakovala u každé skupiny zvlášť. */
  .tbl__grp th {
    background: var(--surface-2); text-align: left; font-weight: 800;
    font-size: var(--fs-sm); color: var(--ink); font-family: inherit;
    text-transform: none; letter-spacing: 0;
    border-bottom: var(--bw) solid var(--amber);
    border-top: var(--bw) solid var(--line-2);
    padding: 14px 14px 10px;
  }
  .tbl tbody tr.tbl__grp, .tbl tbody tr.tbl__grp:hover { background: var(--surface-2); }
  /* Na mobilu se tabulka skládá do karet: hlavička zmizí a popisek sloupce
     se bere z atributu data-th. */
  @media (max-width: 719px) {
    .tbl, .tbl tbody, .tbl tr, .tbl td, .tbl__grp th { display: block; width: 100%; }
    .tbl thead { position: absolute; left: -9999px; }
    .tbl tbody tr, .tbl tbody tr:nth-child(even) {
      background: var(--bg); border: var(--bw) solid var(--line-2);
      border-left: var(--bw-2) solid var(--amber);
      border-radius: 0 var(--r) var(--r) 0; margin-bottom: 12px; padding: 6px 0;
    }
    .tbl tbody td { border: 0; padding: 7px 14px; }
    .tbl td::before {
      content: attr(data-th) ": "; display: block; font-family: var(--mono);
      font-weight: 700; color: var(--muted); font-size: var(--fs-xs);
    }
    .tbl td:first-child { font-weight: 800; color: var(--ink); font-size: 1rem; }
    .tbl td:first-child::before { content: none; }
    .tbl--cenik td:first-child, .tbl--cenik th:first-child { width: auto; }
    /* Skupina je na mobilu nadpisem nad kartami, ne řádkem tabulky. */
    .tbl tbody tr.tbl__grp, .tbl tbody tr.tbl__grp:hover {
      border: 0; border-left: 0; background: none; margin: var(--sp-4) 0 10px; padding: 0;
    }
    .tbl__grp th {
      background: none; border: 0; border-left: var(--bw-2) solid var(--amber);
      padding: 2px 0 2px var(--sp-2); font-size: var(--fs-h3);
    }
  }

  /* ---------- box „zdarma“ ---------- */
  .free {
    background: var(--ok-bg); border: var(--bw) solid var(--ok-line);
    border-left: var(--bw-2) solid var(--ok); border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-3);
  }
  .free h3 { margin-top: 0; color: var(--ok); border: 0; padding: 0; }
  .free ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
  .free li { display: flex; gap: 10px; align-items: flex-start; margin: 0; }
  .free svg { color: var(--ok); flex: 0 0 auto; margin-top: 4px; }

  /* ---------- FAQ (musí fungovat i bez skriptu) ---------- */
  .faq { display: grid; gap: 10px; }
  .faq details {
    border: var(--bw) solid var(--line-2); border-left: var(--bw) solid var(--line-2);
    border-radius: var(--r); background: var(--bg);
  }
  .faq details[open] { border-left: var(--bw-2) solid var(--amber); border-radius: 0 var(--r) var(--r) 0; }
  .faq summary {
    cursor: pointer; padding: 15px var(--sp-3); font-weight: 800; list-style: none;
    display: flex; justify-content: space-between; gap: var(--sp-2);
    align-items: flex-start; min-height: 44px;
  }
  .faq summary::-webkit-details-marker { display: none; }
  .faq summary::after { content: "+"; font-size: 1.5rem; line-height: 1; color: var(--accent); flex: 0 0 auto; font-weight: 800; }
  .faq details[open] summary::after { content: "–"; }
  .faq summary:hover { background: var(--surface); }
  .faq__a { padding: 0 var(--sp-3) var(--sp-2); color: var(--ink-2); }
  .faq__a p:last-child { margin-bottom: var(--sp-2); }

  /* ---------- poznámkové boxy ---------- */
  .note {
    border: var(--bw) solid var(--line); border-left: var(--bw-2) solid var(--ink-2);
    background: var(--note-bg); padding: var(--sp-3); border-radius: 0 var(--r) var(--r) 0;
  }
  .note--warn { border-left-color: var(--amber); border-color: var(--warn-line); background: var(--warn-bg); }
  .note > :last-child { margin-bottom: 0; }
  .note h3 { margin-top: 0; font-size: var(--fs-h3); border: 0; padding: 0; }

  /* ---------- postranní sloupec ---------- */
  .aside { display: grid; gap: var(--sp-3); align-content: start; }
  @media (min-width: 980px) { .aside { position: sticky; top: var(--sp-2); } }
  .aside__box {
    background: var(--surface); border: var(--bw) solid var(--line-2);
    border-left: var(--bw-2) solid var(--line-2); border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-3);
  }
  .aside__box h2, .aside__box h3 { margin-top: 0; font-size: var(--fs-h3); border: 0; padding: 0; }
  .aside__box ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 6px; font-size: var(--fs-sm); }
  .aside__box li { margin: 0; }
  /* Objednávkový box je jediný, který má jantarovou hranu — je to jediná
     věc v sloupci, kterou má návštěvník opravdu najít. */
  .aside__box--cta {
    border-left-color: var(--amber); background: var(--bg);
    border-color: var(--ink); box-shadow: var(--offset);
  }
  /* Na úzké obrazovce se postranní sloupec skládá pod článek a možnost
     objednat končí až za vším textem — u delších stránek přes 4 000 px.
     `display: contents` rozpustí <aside> do mřížky .cols, jeho boxy se
     stanou jejími položkami a dá se jim určit pořadí. POZOR na vrstvy:
     blok musí zůstat v `components` vedle .aside — v `layout` by ho
     .aside { display: grid } z pozdější vrstvy přebilo. */
  @media (max-width: 979px) {
    .cols > .aside { display: contents; }
    .cols > .prose { order: 2; }
    .cols .aside__box { order: 3; }
    .cols .aside__box--cta { order: 1; }
  }

  /* ---------- související odkazy ---------- */
  .rel { background: var(--surface-2); border-top: var(--bw-2) solid var(--amber); }
  .rel h2 { margin-top: 0; font-size: var(--fs-h3); border: 0; padding: 0; }
  .rel ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
  .rel li { margin: 0; }
  .rel a {
    display: block; padding: 12px 14px; background: var(--bg);
    border: var(--bw) solid var(--line-2); border-radius: var(--r);
    text-decoration: none; font-weight: 700; font-size: var(--fs-sm); color: var(--ink-2);
  }
  .rel a:hover { border-color: var(--ink); background: var(--amber); color: var(--on-amber); }

  /* ---------- mapa pokrytí ---------- */
  .cz { background: var(--bg); border: var(--bw) solid var(--line-2); border-top: var(--bw-2) solid var(--amber); border-radius: 0 0 var(--r) var(--r); padding: var(--sp-2); }
  .cz svg { display: block; width: 100%; height: auto; }
  .cz__shape { fill: var(--map-fill); stroke: var(--map-line); stroke-width: 1.6; }
  .cz__dot { fill: var(--accent); }
  .cz__label { font-size: 11px; font-weight: 700; fill: var(--ink-2); font-family: var(--font); }
  .cz__city { cursor: pointer; }
  .cz__city:hover .cz__dot, .cz__city:focus-visible .cz__dot { fill: var(--ink); r: 7; }
  .cz__city:hover .cz__label, .cz__city:focus-visible .cz__label { fill: var(--link); text-decoration: underline; }
  .cz__city:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
  .cz__here .cz__dot { fill: var(--ink); }
  .cz__here .cz__label { fill: var(--ink); font-weight: 800; }

  /* ---------- formuláře ---------- */
  .form { display: grid; gap: var(--sp-3); }
  .form fieldset { border: 0; padding: 0; margin: 0; display: grid; gap: var(--sp-2); }
  .form legend { font-weight: 800; font-size: var(--fs-h3); padding: 0; margin-bottom: 6px; }
  .field { display: grid; gap: 6px; }
  .field label { font-weight: 800; font-size: var(--fs-sm); }
  .field .hint { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
  .hint { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
  .req { color: var(--err); font-weight: 800; }
  .form input[type="text"], .form input[type="tel"], .form input[type="email"],
  .form input[type="date"], .form input[type="time"], .form select, .form textarea {
    width: 100%; min-height: 50px; padding: 12px 13px; font: inherit; font-size: 1rem;
    color: var(--ink); background: var(--bg);
    border: var(--bw) solid var(--line-2); border-radius: var(--r);
  }
  .form textarea { min-height: 132px; resize: vertical; line-height: 1.55; }
  .form input:focus-visible, .form select:focus-visible, .form textarea:focus-visible { border-color: var(--ink); }
  .form [aria-invalid="true"] { border-color: var(--err); background: var(--err-bg); }
  .row2 { display: grid; gap: var(--sp-2); grid-template-columns: 1fr; }
  @media (min-width: 640px) { .row2 { grid-template-columns: 1fr 1fr; } }
  .row3 { display: grid; gap: var(--sp-2); grid-template-columns: 1fr; }
  @media (min-width: 640px) { .row3 { grid-template-columns: 2fr 1fr 1fr; } }
  .check { display: grid; grid-template-columns: 24px 1fr; gap: 12px; align-items: start; font-size: var(--fs-sm); }
  .check input { width: 22px; height: 22px; margin: 2px 0 0; accent-color: var(--accent); }
  .check label { font-weight: 400; }
  /* Vnořená skupina přepínačů (expresní oprava): legenda má velikost
     popisku pole, ne nadpisu sekce. */
  .form fieldset.field { gap: 8px; }
  .form .field > legend { font-weight: 800; font-size: var(--fs-sm); margin-bottom: 2px; }
  .form__err {
    display: none; border: var(--bw) solid var(--err);
    border-left: var(--bw-2) solid var(--err); background: var(--err-bg);
    color: var(--err); border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-2) var(--sp-3); font-size: var(--fs-sm);
  }
  .form__err.is-on { display: block; }
  .form__err h3 { color: var(--err); margin: 0 0 8px; font-size: 1rem; border: 0; padding: 0; }
  .form__err ul { margin: 0; padding-left: 20px; }
  .form__err li { margin-bottom: 4px; }
  .form__ok {
    border: var(--bw) solid var(--ok-line); border-left: var(--bw-2) solid var(--ok);
    background: var(--ok-bg); color: var(--ink); border-radius: 0 var(--r) var(--r) 0;
    padding: var(--sp-3);
  }
  .form__ok h3 { margin: 0 0 8px; color: var(--ok); border: 0; padding: 0; }
  .form__ok p { margin: 0 0 10px; }
  .form__ref {
    font-family: var(--mono); font-weight: 700; font-size: 1.0625rem; letter-spacing: .04em;
    background: var(--bg); border: var(--bw) solid var(--ok-line); border-radius: var(--r);
    padding: 10px 14px; display: inline-block;
  }
  /* Návnada na roboty: skrývá se CSS, nikdy atributem hidden — jinak si
     jí robot všimne. */
  .hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

  /* ---------- vyhledávání ---------- */
  .search { position: relative; }
  .search input {
    width: 100%; min-height: 50px; padding: 12px 13px; font: inherit;
    border: var(--bw) solid var(--line-2); border-radius: var(--r); background: var(--bg);
  }
  .search input:focus-visible { border-color: var(--ink); }
  .search__out { margin-top: 10px; display: grid; gap: 6px; }
  .search__out a {
    display: block; padding: 10px 12px; background: var(--bg);
    border: var(--bw) solid var(--line); border-left: 4px solid var(--line-2);
    text-decoration: none; font-size: var(--fs-sm); font-weight: 700; color: var(--ink-2);
  }
  .search__out a:hover { border-left-color: var(--amber); border-color: var(--line-2); background: var(--surface); }
  .search__out em { display: block; font-style: normal; font-weight: 400; color: var(--muted); font-size: var(--fs-xs); }

  /* ---------- lišta na dolním okraji (jen mobil) ---------- */
  .sticky {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 100;
    background: var(--ink); border-top: 4px solid var(--amber);
    padding: 10px var(--sp-2) calc(10px + env(safe-area-inset-bottom));
    display: none; gap: 10px;
  }
  .sticky .btn { flex: 1 1 0; min-height: 50px; padding-inline: 10px; }
  .sticky .btn--sec { background: transparent; color: #fff; border-color: var(--on-dark); }
  /* Placeholder telefonu se plní až v prohlížeči; dokud je prázdný,
     nesmí zabírat místo, jinak by lišta po doplnění poskočila. */
  .sticky__tel { flex: 1 1 0; display: flex; min-height: 50px; }
  .sticky__tel:empty { display: none; }
  .sticky__tel .btn { width: 100%; }
  @media (max-width: 1179px) { .sticky.is-on { display: flex; } body.has-sticky { padding-bottom: 82px; } }

  /* ---------- patička: uhlová, s jantarovým pruhem nahoře ---------- */
  .ftr {
    background: var(--ink); color: var(--dark-tx);
    border-top: 10px solid var(--amber);
    padding-block: var(--sp-5) var(--sp-3); margin-top: var(--sp-6);
  }
  .ftr a { color: var(--on-dark); text-decoration: none; }
  .ftr a:hover { color: #fff; text-decoration: underline; text-decoration-color: var(--amber); }
  .ftr h2 {
    color: var(--accent-l); font-family: var(--mono); font-size: .8125rem;
    letter-spacing: .14em; text-transform: uppercase; font-weight: 700;
    margin: 0 0 14px; border: 0; padding: 0;
  }
  .ftr__grid { display: grid; gap: var(--sp-4); grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
  .ftr ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 2px; font-size: var(--fs-sm); }
  .ftr ul a { display: inline-flex; align-items: center; min-height: 32px; }
  .ftr li { margin: 0; }
  .ftr__brand { font-size: 1.1875rem; font-weight: 800; color: #fff; letter-spacing: .04em; text-transform: uppercase; }
  /* Placeholdery pro údaje doplňované v prohlížeči — rezervovaná výška kvůli CLS. */
  .ftr__firm { min-height: 24px; line-height: 24px; font-weight: 800; color: #fff; }
  .ftr__addr { min-height: 48px; line-height: 24px; font-size: var(--fs-sm); }
  .ftr__tels { min-height: 60px; display: grid; gap: 6px; }
  .ftr__tels .tel { color: #fff; font-size: 1.0625rem; }
  .ftr__hours { min-height: 44px; line-height: 22px; font-size: var(--fs-sm); }
  .ftr__bottom {
    border-top: var(--bw) solid var(--dark-3); margin-top: var(--sp-4); padding-top: var(--sp-3);
    font-family: var(--mono); font-size: var(--fs-xs);
    display: flex; flex-wrap: wrap; gap: 8px 20px; justify-content: space-between;
  }

  /* ---------- drobnosti ---------- */
  .updated { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); margin-top: var(--sp-4); }
  .lede { font-size: clamp(1.0625rem, 1rem + .45vw, 1.25rem); color: var(--ink-2); }
  .anchor-nav { background: var(--surface-2); border-left: var(--bw-2) solid var(--amber); padding: var(--sp-2) var(--sp-3); }
  .anchor-nav ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: var(--fs-sm); font-weight: 700; }
  .anchor-nav li { margin: 0; }
}

@layer utils {
  .vh {
    position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .mt-0 { margin-top: 0; } .mt-1 { margin-top: 12px; }
  .mt-2 { margin-top: var(--sp-2); } .mt-3 { margin-top: var(--sp-3); } .mt-4 { margin-top: var(--sp-4); }
  .mb-0 { margin-bottom: 0; } .mb-2 { margin-bottom: var(--sp-2); }
  .mb-3 { margin-bottom: var(--sp-3); } .mb-4 { margin-bottom: var(--sp-4); }
  .p-0 { padding: 0; }
  .fs-sm { font-size: var(--fs-sm); }
  .fs-xs { font-size: var(--fs-xs); }
  .items-start { align-items: start; }
  .stack-8 { display: grid; gap: 8px; }
  .center { text-align: center; }
  .muted { color: var(--muted); }
  .nowrap { white-space: nowrap; }
  .legend-sm { font-size: 1rem; }
  /* Blok údajů o firmě se plní až v prohlížeči — rezervovaná výška kvůli CLS. */
  .minh-udaje { min-height: 220px; }
}

/* =========================================================================
   Poslední vrstva: dorovnání kolizí, které nejdou vyřešit dřív.
   Past 11.5 a 11.6 — barva textu na tmavém podkladu a v tlačítkách.
   ========================================================================= */
@layer fix {
  /* --- rozcestník: postranní sloupec drží při posunu -----------------------
     Revize rozvržení. Rozcestníky měly text v jednom sloupci a vpravo od něj
     380 px prázdna přes celou výšku textu (změřeno na pilíři při 1440 px:
     textový blok 779 × 4071 px). Text proto dostal `.cols` jako články.
     Protože zůstává vyšší než samotný sloupec, sloupec se při posunu drží
     u horního okraje — jinak by pod ním zůstalo prázdno znovu.
     Platí pro každé dvousloupcové rozvržení, ne jen pro rozcestník: na
     stránce řady měl text 5 299 px a postranní sloupec 1 100 px, takže
     zbytek cesty dolů byl vpravo prázdný.
     Jen na širokém okně: pod hranicí `.cols` se skládá pod sebe. */
  @media (min-width: 980px) {
    .cols > .aside { position: sticky; top: var(--sp-3); align-self: start; }
  }

  /* Utility .muted a .fs-xs jsou počítané na písek (--muted 8,62:1 na --bg).
     Na uhlové patičce by z --muted bylo 1,9:1, což oko nepozná a Lighthouse
     ano. --dark-tx má na --ink 11,97:1. */
  .ftr .muted, .ftr .fs-xs, .ftr__bottom,
  .ctapas .muted, .ctapas .fs-xs,
  .drawer .muted, .drawer .fs-xs,
  .hero .muted, .hero .fs-xs, .sticky .muted { color: var(--dark-tx); }
  /* Odkazy uvnitř tmavých ploch: --link (#5C3B00) by na uhlu měl 1,8:1.
     --accent-l dává na --hero-1 10,37:1 a na --dark-3 7,29:1. */
  .hero p a, .hero li a, .ctapas p a, .ctapas li a,
  .drawer p a, .drawer li a, .ftr p a, .ftr li a {
    color: var(--accent-l); text-decoration-color: var(--accent-l);
  }
  .hero p a:hover, .hero li a:hover, .ctapas p a:hover, .ctapas li a:hover,
  .drawer p a:hover, .drawer li a:hover, .ftr p a:hover, .ftr li a:hover {
    color: #fff; background: transparent; text-decoration-color: #fff;
  }
  /* Tlačítka a přeskakovací odkaz si drží svou barvu textu i tehdy, když
     stojí uvnitř .prose nebo odstavce, kde platí pravidlo pro odkazy. */
  .btn { text-decoration: none; }
  .btn--pri, .btn--pri:hover { color: var(--on-amber); background: var(--amber); }
  .btn--pri:hover { background: var(--amber-d); }
  .btn--sec, .btn--sec:hover { color: var(--ink); }
  .hero .btn--sec, .hero .btn--sec:hover, .sticky .btn--sec, .sticky .btn--sec:hover,
  .btn--ghost, .btn--ghost:hover { color: #fff; }
  a.skip, a.skip:focus, a.skip:hover { color: #fff; background: var(--accent); text-decoration: none; }
  a.card, a.card:hover { text-decoration: none; }
  .chips a:hover { color: var(--on-amber); }
  .rel a:hover { color: var(--on-amber); }
  /* Nadpisy uvnitř ploch nemají dědit jantarový pruh z .prose h2 —
     pruh patří jen mezititulkům v běžícím textu. */
  .card h2, .aside__box h2, .hero__card h2, .ctapas h2, .rel h2, .free h2,
  .note h2, .form__ok h2, .form__err h2 { border-left: 0; padding-left: 0; }
  /* Překryv karty hera nesmí za žádné šířky vytvořit vodorovné posouvání:
     karta zůstává uvnitř .wrap a transform je čistě svislý, takže se
     vodorovně nemá co přetéct. Pojistka je `clip`, ne `hidden` —
     `overflow-x: hidden` udělá z <body> rolovací kontejner a rozbije
     `position: sticky` u postranního sloupce, `clip` ne. */
  body { overflow-x: clip; }
  @media (max-width: 1079px) {
    .hero__card { transform: none; box-shadow: none; }
  }

  /* Dotykový cíl v menu musí mít 44 px na výšku. Samotné odsazení na to
     nestačí — výška vychází z řádkování a končí kolem 43 px, což
     layout-check.mjs měří v prohlížeči a hlásí. Proto explicitní min-height
     a svislé vycentrování. */
  .hdr__nav a, .drawer nav a, .crumbs a, .ftr__grid a, .rel a {
    display: inline-flex; align-items: center; min-height: 44px;
  }
  .ftr__grid li, .rel li { display: flex; }
}