/* Peckomat — vizuální systém podle ROZHODNUTI §2.1.
   Jedna značka, dvě plochy: katalog i Peckomat Data sdílejí tokeny.

   Od 12. 9. 2026 je VÝCHOZÍ SVĚTLÝ motiv (zadání „Katalog po edicích"):
   světlé tokeny stojí v :root, tmavé jen pod prefers-color-scheme: dark
   a pod [data-theme="dark"]. Přepínač v hlavičce nastaví data-theme.
   Každá textová barva je ověřená na 4,5:1 proti všem třem podkladům svého
   motivu — časové razítko je povinný údaj a --text-slaby už jednou spadl.

   Podklad pod obrázkem a pod logem edice je čistě bílý #FFFFFF v OBOU
   motivech: obrázky z kitu mají průhledné pozadí a jiný odstín pod nimi
   by se tvářil jako úprava fotky, kterou licence nepovoluje.

   Rádiusy jsou jen dva (zadání 23, fáze B zadání 24): --r-akce (kulaté) nese
   ovládací prvek a stav — tlačítko, pole, výběr, tečka dostupnosti, aktivní
   položka; --r-data (hranaté) nese údaj — karta, dlaždice, tabulka, náhled,
   i když je celá odkazem. Značka automatu (.mark) má geometrii ze zadání 23. */

:root{
  color-scheme: light;
  --pismo-ui: "Archivo", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --pismo-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --pismo-edice: "Bricolage Grotesque", var(--pismo-ui);
  --podklad: #FFFFFF;
  --plocha: #FFFFFF;
  --podklad-2: #F4EDEC;
  --ram: #E2D5D4;
  --ram-jemny: #EDE3E2;
  --ram-silny: #CDBDB9;
  --text: #1A1416;
  --text-tlumeny: #6E5C5E;
  --text-slaby: #776869;    /* 4,6:1 */
  --znacka: #8C2F39;
  --akcent: #8C2F39;
  --akcent-tmavsi: #6E242C;
  --akcent-podklad: rgba(140,47,57,.08);
  --skladem: #2F6B4F;
  --predobjednavka: #8A5A12;
  --vyprodano: #776869;
  --cara:#B9A9A8;
  --mrizka:#EFE7E6;
  --vnitrek:#E7DCDB;
  --lista:#CFBFBE;
  --stin-baleni:rgba(110,92,94,.35);
  /* Barvy her podle jejich log (Karel 19. 9. 2026, zadání 63, §6.92). Do té doby to byla
     paleta odvozená od webu, ne od značek. SWU žlutá se NIKDY nepoužívá jako barva textu —
     na bílé má kontrast 2,6:1; nese plochy a linky, text na ní je tmavý. */
  --g-lorcana: #5B3A8E;
  --g-one_piece: #C8102E;
  --g-swu: #C99700;
  --g-riftbound: #E07A12;
  /* Skříň automatu (zadání 63). Světlý motiv. */
  --skrin:#EFE4E2; --skrin-svetla:#F8F1EF; --skrin-stin:#D6C6C3;
  --ram-skla:#231B1E; --interier:#FAF6F5; --kov:#B9ADAC; --kov-svetly:#DCD3D2; --cenovka:#FFFFFF;
  --displej:#0E1511; --displej-text:#7FE0A8; --sokl:#2A2124;
  --dlazdice: #FFFFFF;
  --foto-jas: 1;
  --stin: 0 1px 2px rgba(26,20,22,.05), 0 10px 30px -22px rgba(26,20,22,.4);
  /* Jazyk automatu (zadání 23, fáze A zadání 24, 13. 9. 2026). Jen přibývají, nic nepřepisují.
     Pravidlo rádiusu: co je kulaté, to něco udělá; co je hranaté, to jen něco říká. */
  --r-data: 5px;
  --r-akce: 999px;
  /* Poměr okna se zbožím. Od zadání 59 je obrázek zhruba na polovinu výšky dlaždice
     (bylo 1 / 1.4): pod oknem stojí čtyři řádky textu — co to je, z které edice, za kolik
     a jestli to jde koupit — a při vysokém okně by se text zmáčkl na nečitelný proužek. */
  --slot-pomer: 1 / 0.62;
  --sklo: rgba(26,20,22,.04);
  --kontrolka-off: #C9BFBE;
  --t-pad: 360ms;
  --e-pad: cubic-bezier(0.3, 0, 0.8, 0.15);
  --e-dosed: cubic-bezier(0.05, 0.7, 0.1, 1);
  --sklad-podklad: rgba(47,107,79,.10);
  --predobj-podklad: rgba(138,90,18,.12);
  --sedy-podklad: rgba(119,104,105,.12);
}

@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme: dark;
    --podklad: #141013;
    --plocha: #1C171A;
    --podklad-2: #241D20;
    --ram: #352B2E;
    --ram-jemny: #2A2225;
    --ram-silny: #4A3A3C;
    --text: #F3ECEB;          /* 14,2:1 */
    --text-tlumeny: #B3A2A4;  /*  6,8:1 */
    --text-slaby: #968788;    /*  4,8:1 — nese časové razítko a zdroj fotky */
    --znacka: #C9505F;        /* jen velké písmo: logo, hry v titulku (3,8:1 ≥ 3:1) */
    --akcent: #E4818B;
    --akcent-tmavsi: #F0A6AD; /* hover na tmavém podkladu zesvětluje */
    --akcent-podklad: rgba(228,129,139,.12);
    --skladem: #5FBE8F;
    --predobjednavka: #DFA94E;
    --vyprodano: #968788;     /* podklad navrhoval #7C6E70 = 3,8:1, pro text málo */
    --cara:#6B5A5C;
    --mrizka:#2A2225;
    --vnitrek:#0C090B;
    --lista:#453639;
    --stin-baleni:rgba(0,0,0,.56);
    --g-lorcana: #A68BD8;
    --g-one_piece: #F0515E;
    --g-swu: #FFE81F;
    --g-riftbound: #F59A3C;
    --skrin:#2B2327; --skrin-svetla:#362C31; --skrin-stin:#1B1518; --ram-skla:#080607;
    --interier:#16111A; --kov:#6D6266; --kov-svetly:#8C8084; --cenovka:#221B1F; --sokl:#0D0A0C;
    --dlazdice: #FFFFFF;
    --foto-jas: .94;          /* na tmavém, ať bílá dlaždice nebodá */
    --stin: 0 1px 2px rgba(0,0,0,.4), 0 14px 36px -24px rgba(0,0,0,.9);
    --sklo: rgba(243,236,235,.05);
    --kontrolka-off: #4A3A3C;
    --sklad-podklad: rgba(95,190,143,.14);
    --predobj-podklad: rgba(223,169,78,.14);
    --sedy-podklad: rgba(150,135,136,.16);
  }
}

:root[data-theme="dark"]{
  color-scheme: dark;
  --podklad: #141013;
  --plocha: #1C171A;
  --podklad-2: #241D20;
  --ram: #352B2E;
  --ram-jemny: #2A2225;
  --ram-silny: #4A3A3C;
  --text: #F3ECEB;          /* 14,2:1 */
  --text-tlumeny: #B3A2A4;  /*  6,8:1 */
  --text-slaby: #968788;    /*  4,8:1 — nese časové razítko a zdroj fotky */
  --znacka: #C9505F;        /* jen velké písmo: logo, hry v titulku (3,8:1 ≥ 3:1) */
  --akcent: #E4818B;
  --akcent-tmavsi: #F0A6AD; /* hover na tmavém podkladu zesvětluje */
  --akcent-podklad: rgba(228,129,139,.12);
  --skladem: #5FBE8F;
  --predobjednavka: #DFA94E;
  --vyprodano: #968788;     /* podklad navrhoval #7C6E70 = 3,8:1, pro text málo */
  --cara:#6B5A5C;
  --mrizka:#2A2225;
  --vnitrek:#0C090B;
  --lista:#453639;
  --stin-baleni:rgba(0,0,0,.56);
  --g-lorcana: #A68BD8;
  --g-one_piece: #F0515E;
  --g-swu: #FFE81F;
  --g-riftbound: #F59A3C;
  --skrin:#2B2327; --skrin-svetla:#362C31; --skrin-stin:#1B1518; --ram-skla:#080607;
  --interier:#16111A; --kov:#6D6266; --kov-svetly:#8C8084; --cenovka:#221B1F; --sokl:#0D0A0C;
  --displej:#0E1511; --displej-text:#7FE0A8;
  --dlazdice: #FFFFFF;
  --foto-jas: .94;          /* na tmavém, ať bílá dlaždice nebodá */
  --stin: 0 1px 2px rgba(0,0,0,.4), 0 14px 36px -24px rgba(0,0,0,.9);
  --sklo: rgba(243,236,235,.05);
  --kontrolka-off: #4A3A3C;
  --sklad-podklad: rgba(95,190,143,.14);
  --predobj-podklad: rgba(223,169,78,.14);
  --sedy-podklad: rgba(150,135,136,.16);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--podklad); color:var(--text);
  font-family:var(--pismo-ui); font-size:15px; line-height:1.5;
  font-synthesis-weight:none; -webkit-font-smoothing:antialiased;
}
a{color:var(--akcent); text-decoration-thickness:1px; text-underline-offset:3px}
a:hover{color:var(--akcent-tmavsi)}
:focus-visible{outline:2px solid var(--akcent); outline-offset:2px; border-radius:var(--r-data)}
.jen-pro-ctecky{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
h1,h2,h3{text-wrap:balance}

.obal{max-width:1100px; margin:0 auto; padding:0 20px}
.uzky{max-width:760px}
.mono{font-family:var(--pismo-mono); font-variant-numeric:tabular-nums}
.tlumene{color:var(--text-tlumeny)}

/* ── hlavička ─────────────────────────────────────────────── */
.hlavicka{border-bottom:1px solid var(--ram-jemny); background:var(--podklad); position:sticky; top:0; z-index:20}
.hlavicka .obal{display:flex; align-items:center; gap:20px; height:58px}
/* Kurzíva u *Disney Lorcana* je licenční podmínka Ravensburgeru, ne
   typografické rozhodnutí — nerušit. Třída se NESMÍ jmenovat `znacka`,
   ta je obsazená značkou typu balení a má `display:block`. */
.znacka-vyrobce{font-style:italic}
.nezalom{white-space:nowrap}
/* Položky vyplní výšku hlavičky a obsah drží na společném středu. Všechny hry
   jsou text, i aktivní (zadání 21, bod 3) — značka hry jako obrázek vysoký
   18 px byla vedle písma nečitelná. Aktivní stav je proužek u dolní hrany. */
.hl-nav{display:flex; gap:20px; margin-left:auto; align-items:center; align-self:stretch; font-size:13.5px}
.hl-nav a{position:relative; display:inline-flex; align-items:center; align-self:stretch;
  color:var(--text-tlumeny); text-decoration:none}
.hl-nav a:hover,.hl-nav a[aria-current]{color:var(--text)}
.hl-nav a[aria-current]::after{content:""; position:absolute; left:0; right:0; bottom:-1px; height:2px;
  border-radius:var(--r-akce); background:var(--akcent)}
.zed-pripojujeme{font-size:12.5px; margin:14px 0 0}
.prepinac{width:31px; height:31px; border-radius:var(--r-akce); border:1px solid var(--ram);
  background:var(--plocha); color:var(--text-tlumeny); font-size:12px; cursor:pointer;
  display:grid; place-items:center; padding:0}
.prepinac:hover{border-color:var(--ram-silny); color:var(--text)}

/* ===== navrh/automat.css, oddíl 7: vloženo doslova ===== */
/* ---------- 7. ZNAČKA ---------- */
/* Jedna proměnná --m řídí celou velikost. Nic jiného se nenastavuje. */
.mark{
  --m:48px; display:inline-flex; flex-direction:column; gap:calc(var(--m)*.06);
  width:calc(var(--m)*.82); padding:calc(var(--m)*.07);
  border-radius:calc(var(--m)*.15); background:var(--podklad-2);
  border:1px solid var(--ram); vertical-align:bottom;
}
.m-okno{
  display:grid; grid-template-columns:repeat(3,1fr); gap:calc(var(--m)*.045);
  padding:calc(var(--m)*.055); border-radius:calc(var(--m)*.09); background:var(--plocha);
}
.m-okno i{
  display:block; aspect-ratio:1/1.35; border-radius:calc(var(--m)*.035);
  background:var(--ram-jemny);
}
.m-okno i.f{ background:var(--text-tlumeny) }
.m-okno i.f.lor{ background:var(--g-lorcana) }
.m-okno i.f.op{ background:var(--g-one_piece) }
.m-okno i.f.swu{ background:var(--g-swu) }
.m-okno i.f.rb{ background:var(--g-riftbound) }
.m-slot{ height:calc(var(--m)*.11); border-radius:calc(var(--m)*.05);
         background:var(--text); opacity:.8 }

/* načítání = stroj se plní, ne točící se kolečko */
.mark.nacita .m-okno i{ animation:plni 1.8s ease-in-out infinite }
.mark.nacita .m-okno i:nth-child(2){ animation-delay:.15s }
.mark.nacita .m-okno i:nth-child(3){ animation-delay:.30s }
.mark.nacita .m-okno i:nth-child(4){ animation-delay:.45s }
.mark.nacita .m-okno i:nth-child(5){ animation-delay:.60s }
.mark.nacita .m-okno i:nth-child(6){ animation-delay:.75s }
@keyframes plni{
  0%,70%,100%{ background:var(--ram-jemny) }
  25%,45%    { background:var(--znacka) }
}
@media (prefers-reduced-motion: reduce){
  .mark.nacita .m-okno i{ animation:none }
}

/* ===== navrh/logotyp.css: vloženo doslova (fáze B, ROZHODNUTI §6.59 a §6.60, zadání 26) ===== */
/* ============================================================
   PECKOMAT — LOGOTYP
   Varianta B, vybráno Karlem 13. 9. 2026 (revize téhož večera).

   V HLAVIČCE JE JEN JMÉNO. PIKTOGRAM AUTOMATU TAM NENÍ.
   Důvod: piktogram i okno místo „o" říkají totéž a vedle sebe
   je to jeden nápad dvakrát. Pravidlo pro celý web zní:
   V JEDNOM MÍSTĚ VŽDY JEN JEDEN NOSITEL NÁPADU.

   Piktogram (.mark z automat.css) proto žije tam, kde se slovo
   nevejde: favicon, ikona aplikace, sdílecí obrázek, měřák
   pokrytí u her. Nikdy ne vedle jména.

   PRAVIDLO STEJNÉ JAKO U automat.css: kopíruje se, nepřepisuje.
   Názvy tříd zůstávají. Žádný obrázek — logotyp je text a CSS,
   takže je ostrý v každé velikosti a funguje v obou motivech
   bez druhé verze souboru.
   ============================================================ */

/* ---------- logotyp ---------- */
.logotyp{
  font-family:var(--pismo-edice);   /* Bricolage Grotesque */
  font-weight:800;
  letter-spacing:-.035em;
  line-height:1;
  white-space:nowrap;
  font-size:24px;                    /* desktop */
  display:inline-flex;
  align-items:baseline;
  text-decoration:none;
  color:var(--text);
}

/* okno místo písmene „o" — jediné „o" ve jméně, a celá značka */
.logotyp .okno-o{
  display:inline-block;
  width:.62em; height:.72em;
  border-radius:.1em;
  background:var(--plocha);
  border:.1em solid currentColor;
  position:relative;
  transform:translateY(.04em);
  margin:0 .04em;
}
.logotyp .okno-o::after{
  content:"";
  position:absolute; inset:.11em;
  border-radius:.04em;
  background:var(--znacka);          /* zboží za sklem */
}

/* náhradní plné „o" — zapíná se až v nejmenších šířkách, viz níž */
.logotyp .plne-o{ display:none }

/* kontrolka stavu služby — jediná věc v hlavičce, která nese
   informaci a ne ozdobu. Pravidla níž, NIKDY natvrdo zelená. */
.logotyp .kontrolka{
  display:inline-block;
  width:.19em; height:.19em;
  border-radius:var(--r-akce);
  margin-left:.16em;
  vertical-align:.5em;
  background:var(--kontrolka-off);
  box-shadow:0 0 0 .07em transparent;
}
.logotyp .kontrolka[data-stav="bezi"]{
  background:var(--skladem);
  box-shadow:0 0 0 .07em var(--sklad-podklad);
}
.logotyp .kontrolka[data-stav="zpozdeno"]{
  background:var(--predobjednavka);
  box-shadow:0 0 0 .07em var(--predobj-podklad);
}

/* ---------- mobil ---------- */
/* Jméno zůstává vždycky. Není co odebírat — piktogram tu není. */
@media (max-width: 640px){
  .logotyp{ font-size:19px }
  .logotyp .kontrolka{ display:none }
}

/* Pod 340 px se okno v písmenu slije do skvrny.
   Tam nastupuje plné jméno — je to výměna jednoho písmene,
   ne jiná značka. */
@media (max-width: 340px){
  .logotyp{ font-size:17px; letter-spacing:-.045em }
  .logotyp .okno-o{ display:none }
  .logotyp .plne-o{ display:inline }
}

/* ============================================================
   HTML — takhle přesně, ne jinak

   <a class="logotyp" href="/" aria-label="Peckomat">Peck<span class="okno-o"></span><span
      class="plne-o">o</span>mat<span class="kontrolka" data-stav="bezi"
      data-sestaveno="2026-09-13T22:05:24+00:00" title="sběr běží"></span></a>

   V hlavičce NIC dalšího. Žádný <span class="mark">.

   aria-label je povinný: okno místo „o" je prázdný <span> a plné „o"
   má display:none, čtečka by bez něj přečetla „Peckmat". data-sestaveno
   nese čas sestavení pro pravidlo 4 (stránka pozná, že zastarala),
   title říká slovy, co kontrolka hlásí. Doplněno 14. 9. 2026 (zadání 27).
   ============================================================ */

/* ============================================================
   PRAVIDLA, KTERÁ NEJSOU V CSS A MUSÍ PLATIT

   1. V HLAVIČCE NENÍ PIKTOGRAM. V jednom místě vždy jen jeden
      nositel nápadu. Piktogram patří tam, kde se slovo nevejde:
      favicon, ikona aplikace, sdílecí obrázek, měřák pokrytí.

   2. NEJMENŠÍ VELIKOST JMÉNA JE 14 px. Pod ní se přepíná na plné
      jméno bez okna, nezmenšuje se dál.

   3. VOLNÝ PROSTOR kolem jména = výška velkého písmene. Nic do něj
      nevstupuje.

   4. KONTROLKA SE NIKDY NEMALUJE ZELENĚ NATVRDO.
      Atribut data-stav dosazuje SESTAVENÍ podle hlídače výpadku:
        - poslední běh v pořádku -> data-stav="bezi"
        - hlídač něco hlásí      -> data-stav="zpozdeno"
      A protože je web statický, může zastarat i sám: do stránky se
      uloží čas sestavení a drobný skript při načtení porovná
      s hodinami prohlížeče — stránka starší než 8 hodin (dva
      zmeškané běhy při čtyřech denně) přepne kontrolku na
      "zpozdeno" sama.
      ZELENÁ KONTROLKA NAD SPADLÝM SBĚREM JE HORŠÍ NEŽ ŽÁDNÁ.
      Dokud tohle napojení není hotové, kontrolka se NENASAZUJE.

   5. JMÉNO SE NEPÍŠE VERZÁLKAMI. „PECKOMAT" je jiná značka.

   6. Dva tvary jsou maximum. Žádné nožičky, žádné sklo s odleskem,
      žádné oči v okně.
   ============================================================ */
/* ===== konec navrh/logotyp.css ===== */

/* ===== navrh/hlavni-strana.css: vloženo doslova (zadání 30) ===== */
/* ============================================================
   PECKOMAT — JAZYK AUTOMATU, DRUHÁ ČÁST
   Prvky hlavní strany a doplnění katalogu.
   Navazuje na navrh/automat.css a používá jeho tokeny i třídy.

   PRAVIDLO STEJNÉ: tenhle soubor se KOPÍRUJE, nepřepisuje.
   Názvy tříd zůstávají. Žádná hodnota se nemění, aby
   „sedla do našich stylů". Když je opravdu potřeba něco
   změnit, změní se to TADY a napíše do reportu i s důvodem.

   Živá ukázka: navrh/hlavni-strana.html
   ============================================================ */


/* ============================================================
   1. BĚŽÍCÍ PÁS OBCHODŮ
   Nahrazuje seznam 39 jmen v patičce.
   Jediná animace na hlavní straně.
   ============================================================ */

.pas-titulek{
  text-align:center;
  font-family:var(--pismo-mono);
  font-size:11px; letter-spacing:.1em; text-transform:uppercase;
  color:var(--text-slaby);
  margin:0 0 2px;
}

.pas{
  position:relative;
  overflow:hidden;
  padding:16px 0;
  /* okraje se rozplývají, aby jména neusekával ostrý řez */
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent);
}

.pas-stopa{
  display:flex; gap:34px;
  width:max-content;
  animation:jede 38s linear infinite;
}
.pas:hover .pas-stopa,
.pas:focus-within .pas-stopa{ animation-play-state:paused }

/* Posun o 50 % — v HTML je seznam obchodů DVAKRÁT za sebou,
   jinak pás na konci poskočí. */
@keyframes jede{ from{ transform:translateX(0) } to{ transform:translateX(-50%) } }

@media (prefers-reduced-motion: reduce){
  .pas-stopa{ animation:none; flex-wrap:wrap; width:auto; justify-content:center }
  .pas{ -webkit-mask-image:none; mask-image:none }
}

.obchod{
  display:flex; align-items:center; gap:9px;
  white-space:nowrap;
  font-size:15px; font-weight:500;
  color:var(--text-tlumeny); text-decoration:none;
}
.obchod:hover{ color:var(--text) }
.obchod i{ width:9px; height:9px; border-radius:3px; flex:none; display:block }

/* Tečka = TRH, ne hra. */
.obchod .cz{ background:var(--g-swu) }
.obchod .sk{ background:var(--g-riftbound) }


/* ============================================================
   2. PROUD UDÁLOSTÍ — „poslední pohyby"
   Odznak stavu vlevo, barevně. Jediné místo na webu,
   kam barevnost patří: do stavu dat, ne do pozadí bloků.
   Používá .chip z automat.css, přidává dva stavy.
   ============================================================ */

.proud{ display:flex; flex-direction:column }

.udalost{
  display:flex; align-items:center; gap:14px;
  padding:13px 2px;
  border-bottom:1px solid var(--ram-jemny);
  font-size:15px; flex-wrap:wrap;
  text-decoration:none; color:inherit;
}
.udalost:last-child{ border-bottom:0 }
.udalost:hover{ background:var(--podklad-2) }

.udalost .co{ flex:1 1 240px; min-width:0 }
.udalost .co b{ font-weight:600; display:block }
.udalost .kde{
  display:block; font-size:12.5px; color:var(--text-slaby); margin-top:1px;
}
.udalost .cena{
  font-family:var(--pismo-mono); font-weight:600;
  font-variant-numeric:tabular-nums; white-space:nowrap;
}
/* U slevy se ukazují OBĚ ceny. Samotná nová cena neřekne, že zlevnilo. */
.udalost .cena .stara{
  font-weight:400; color:var(--text-slaby); margin-right:6px;
}
.udalost .kdy{
  font-family:var(--pismo-mono); font-size:12.5px; color:var(--text-slaby);
  white-space:nowrap; min-width:76px; text-align:right;
}

/* .chip.sk a .chip.sl jsou v automat.css. Tady jen dva chybějící stavy. */
.chip.pre{ color:var(--predobjednavka); background:var(--predobj-podklad) }
.chip.pryc{ color:var(--vyprodano);     background:var(--sedy-podklad) }


/* ============================================================
   3. BARVY HER — přepínač nad katalogem
   Barva drží napříč celým webem: katalog, proud, graf, e-mail.
   ============================================================ */

.hry{ display:flex; gap:10px; flex-wrap:wrap }

.hra-chip{
  display:flex; align-items:center; gap:9px;
  padding:9px 15px 9px 12px;
  border-radius:var(--r-akce);
  background:var(--podklad-2);
  font-weight:600; font-size:14.5px;
  color:var(--text); text-decoration:none;
}
.hra-chip:hover{ background:var(--ram-jemny) }
.hra-chip.on{ box-shadow:inset 0 0 0 1.5px var(--znacka) }
.hra-chip i{ width:10px; height:10px; border-radius:3px; display:block; flex:none }
.hra-chip b{
  font-family:var(--pismo-mono); font-weight:600;
  color:var(--text-slaby); font-size:13px;
}
.hra-chip.lor i{ background:var(--g-lorcana) }
.hra-chip.op  i{ background:var(--g-one_piece) }
.hra-chip.swu i{ background:var(--g-swu) }
.hra-chip.rb  i{ background:var(--g-riftbound) }


/* ============================================================
   4. PRÁZDNÝ STAV NA DETAILU PRODUKTU
   Vyprodáno je náš nejčastější stav. Tady patří fakta,
   ne slovo „nikde skladem" a nic víc.
   Tlačítko „dej mi vědět" se NEPŘIDÁVÁ, dokud neběží hlídač.
   ============================================================ */

.prazdno{ display:flex; flex-direction:column; gap:12px }
.prazdno .nadpis{
  font-family:var(--pismo-edice); font-weight:800;
  font-size:22px; letter-spacing:-.02em;
}
.prazdno p{ margin:0; font-size:14.5px; color:var(--text-tlumeny) }
.prazdno p b{ color:var(--text); font-weight:600 }


/* ============================================================
   5. ZMĚNY PRO WEB
   Claude Code, 14. 9. 2026 (stejné pravidlo jako u automat.css:
   změna jen tady a s důvodem).

   a) Základní .chip bez předka. automat.css ho má jen jako
      .polozka .chip (uvnitř klapky) a ukázka hlavni-strana.html si ho
      vkládá sama mimo tenhle soubor; v .udalost by odznak neměl písmo
      ani odsazení. Hodnoty jsou stejné jako u .polozka .chip.
   b) Druhá kopie seznamu obchodů nese aria-hidden="true" a tabindex="-1":
      čtečka ani klávesnice nemají procházet obchody dvakrát. Při omezeném
      pohybu se pás rozpadne do zalomeného seznamu a tam by stál každý
      obchod dvakrát, proto se druhá kopie skryje.
   c) .obchod vede na web obchodu, ne na /obchody/<obchod>/ — stránky
      jednotlivých obchodů na webu nejsou.
   d) V .hra-chip stojí „Disney Lorcana" celé, ne „Lorcana": přijaté
      podmínky Ravensburgeru zkrácení nedovolují (stejně jako v hlavičce).
   ============================================================ */
.chip{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; padding:3px 8px; border-radius:var(--r-akce); flex:none;
}
@media (prefers-reduced-motion: reduce){
  .pas-stopa [aria-hidden="true"]{ display:none }
}


/* ============================================================
   POZNÁMKA

   Tokeny používané navíc proti automat.css: žádné.
   Všechno je z existujícího styl.css plus tří, které
   doplňuje automat.css (--sklad-podklad, --predobj-podklad,
   --sedy-podklad).

   Co se sem ZÁMĚRNĚ nedává:
   - klapka a pád balíčku (fáze D, až bude hlídač),
   - tlačítko „dej mi vědět" (až budou registrace),
   - „čeká na to N lidí" (až bude souhlas podle §11.1).
   ============================================================ */
/* ===== konec navrh/hlavni-strana.css ===== */
/* Rozvržení kolem komponent hlavní strany (mimo vloženou kopii). */
nav.hry{margin-top:26px}

/* ===== navrh/graf.css: vloženo doslova (zadání 31) ===== */
/* ============================================================
   PECKOMAT — JAZYK AUTOMATU, TŘETÍ ČÁST
   Graf ceny. Tři tvary: rozptyl nabídek, pás dostupnosti,
   nejlepší cena s pásmem trhu.
   Navazuje na navrh/automat.css a používá jeho tokeny.

   PRAVIDLO STEJNÉ: tenhle soubor se KOPÍRUJE, nepřepisuje.
   Názvy tříd zůstávají. Žádná hodnota se nemění, aby
   „sedla do našich stylů". Když je opravdu potřeba něco
   změnit, změní se to TADY a napíše do reportu i s důvodem.

   Dva tokeny navíc proti automat.css. Hodnoty jsou dole
   v sekci TOKENY:
     --cara    neutrální inkoust čar
     --mrizka  vodorovná mřížka a pásmo trhu

   ŽÁDNÁ PALETA PRO IDENTITU OBCHODU TU NENÍ A NEBUDE.
   Obchod se pozná jménem. Barva znamená hru, nebo stav skladu.

   Živá ukázka: navrh/graf.html
   ============================================================ */


/* ---------- SPOLEČNÉ ---------- */
.graf{ display:flex; flex-direction:column; gap:14px }
.graf-hlava{ display:flex; align-items:baseline; justify-content:space-between; gap:14px; flex-wrap:wrap }
.graf-hlava h3{
  font-family:var(--pismo-ui); font-weight:600; font-size:16px; margin:0; letter-spacing:-.01em;
}
.graf-hlava .rozsah{
  font-family:var(--pismo-mono); font-size:11.5px; letter-spacing:.05em;
  text-transform:uppercase; color:var(--text-slaby);
}
.graf-zdroj{
  margin:0; font-size:12.5px; line-height:1.6; color:var(--text-slaby);
  border-left:2px solid var(--ram); padding-left:11px; max-width:66ch;
}
.graf-zdroj b{ color:var(--text-tlumeny); font-weight:600 }

/* legenda stavů — barva tu nikdy nestojí bez slova vedle sebe */
.stavy{ display:flex; gap:16px; flex-wrap:wrap; padding:0 10px }
.stavy span{ display:flex; align-items:center; gap:7px; font-size:12.5px; color:var(--text-slaby) }
.stavy i{ width:13px; height:9px; border-radius:2px; display:block; flex:none }
.stavy i.ok    { background:var(--skladem) }
.stavy i.pryc  { background:var(--vyprodano); opacity:.42 }
.stavy i.nevede{ background:var(--mrizka) }
.stavy i.nemer {
  background:repeating-linear-gradient(135deg, var(--mrizka) 0 2px, transparent 2px 4px);
  box-shadow:inset 0 0 0 1px var(--mrizka);
}


/* ============================================================
   A. ROZPTYL NABÍDEK
   „Kde to koupím teď?"
   Jeden řádek na obchod, jedna společná osa ceny.
   Kreslí se vždycky. Nepotřebuje historii.
   ============================================================ */

.rozptyl{ display:flex; flex-direction:column }

.rozptyl-radek{
  display:grid;
  grid-template-columns: minmax(96px,auto) 1fr minmax(74px,auto);
  align-items:center; gap:14px;
  padding:9px 10px; border-radius:var(--r-data);
  text-decoration:none; color:inherit;
}
.rozptyl-radek:hover{ background:var(--podklad-2) }
.rozptyl-radek.nej{ background:var(--sklad-podklad) }

.rozptyl-radek .obchod{ font-size:14.5px; font-weight:500; white-space:nowrap }
.rozptyl-radek .drat{
  position:relative; height:2px; background:var(--mrizka); border-radius:1px;
}
.rozptyl-radek .bod{
  position:absolute; top:50%; width:11px; height:11px; border-radius:var(--r-akce);
  transform:translate(-50%,-50%);
  background:var(--text-tlumeny);
  box-shadow:0 0 0 2px var(--plocha);   /* 2px kroužek, ať se překryté body nesplynou */
}
.rozptyl-radek.nej .bod{ background:var(--skladem) }
.rozptyl-radek.pryc .bod{ background:var(--vyprodano); opacity:.55 }
.rozptyl-radek .cena{
  font-family:var(--pismo-mono); font-size:14px; font-weight:600;
  font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap;
}
.rozptyl-radek.nej .cena{ color:var(--skladem) }
.rozptyl-radek.pryc .cena{ color:var(--text-slaby); font-weight:400 }
.rozptyl-radek .stav{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--text-slaby); margin-left:8px;
}
.rozptyl-radek.nej .stav{ color:var(--skladem) }

/* osa pod rozptylem */
.rozptyl-osa{
  display:grid; grid-template-columns: minmax(96px,auto) 1fr minmax(74px,auto);
  gap:14px; padding:0 10px; margin-top:2px;
}
.rozptyl-osa .skala{
  position:relative; height:20px;
  font-family:var(--pismo-mono); font-size:11px; color:var(--text-slaby);
  font-variant-numeric:tabular-nums;
}
.rozptyl-osa .znacka-osy{ position:absolute; transform:translateX(-50%); white-space:nowrap }
.rozptyl-osa .znacka-osy::before{
  content:""; position:absolute; left:50%; top:-6px; width:1px; height:5px;
  background:var(--ram);
}

/* svislá kotva — medián, naše minimum, doporučená cena výrobce */
.kotva-cary{ position:absolute; inset:0; pointer-events:none }
.kotva-cara{
  position:absolute; top:-4px; bottom:-4px; width:1px;
  background:var(--ram);
}
.kotva-cara.tecko{ background:none; border-left:1px dashed var(--ram) }


/* ============================================================
   C. PÁS DOSTUPNOSTI
   „Kdo to drží skladem?"
   Řádek na obchod, jeden dílek = jedno čtení.
   Kreslí se vždycky. Je úplný od prvního dne.
   ============================================================ */

.dostupnost{ display:flex; flex-direction:column }

.dost-radek{
  display:grid;
  grid-template-columns: minmax(96px,auto) 1fr minmax(88px,auto);
  align-items:center; gap:14px;
  padding:8px 10px; border-radius:var(--r-data);
  text-decoration:none; color:inherit;
}
.dost-radek:hover{ background:var(--podklad-2) }
.dost-radek .obchod{ font-size:14.5px; font-weight:500; white-space:nowrap }
.dost-radek .pocet{
  font-family:var(--pismo-mono); font-size:12.5px; color:var(--text-slaby);
  font-variant-numeric:tabular-nums; text-align:right; white-space:nowrap;
}

.pruh{ display:flex; gap:2px; height:13px }
.pruh i{ display:block; flex:1; border-radius:2px }
.pruh i.ok    { background:var(--skladem) }
.pruh i.pryc  { background:var(--vyprodano); opacity:.42 }
.pruh i.nevede{ background:var(--mrizka) }
.pruh i.nemer {
  background:repeating-linear-gradient(135deg, var(--mrizka) 0 2px, transparent 2px 4px);
  box-shadow:inset 0 0 0 1px var(--mrizka);
}


/* ============================================================
   D. NEJLEPŠÍ CENA A PÁSMO TRHU
   „Kam to jde?"
   Jedna čára (nejlevnější nabídka) a za ní šedé pásmo
   mezi nejlevnější a nejdražší. Nahrazuje pětičarý graf.
   Kreslí se až od 14 dnů historie.
   ============================================================ */

.vyvoj{ width:100%; height:auto; overflow:visible; display:block }
.vyvoj .mriz{ stroke:var(--mrizka); stroke-width:1 }

/* pásmo trhu — plocha mezi nejlevnější a nejdražší nabídkou */
.vyvoj .pasmo{ fill:var(--mrizka) }

/* jediná čára v grafu */
.vyvoj .nejcara{
  fill:none; stroke:var(--skladem); stroke-width:2.5;
  stroke-linejoin:round; stroke-linecap:round;
}
.vyvoj .nejbod{ fill:var(--skladem); stroke:var(--plocha); stroke-width:2 }

/* svislice tam, kde nejlepší cenu přebírá jiný obchod */
.vyvoj .predavka{ stroke:var(--ram); stroke-width:1; stroke-dasharray:3 3 }

.vyvoj .popisek{ font-family:var(--pismo-ui); font-size:12.5px; fill:var(--text-slaby) }
.vyvoj .popisek.nej{ fill:var(--text); font-weight:600 }
.vyvoj .osa{ font-family:var(--pismo-mono); font-size:11px; fill:var(--text-slaby) }
.vyvoj .kotva{ stroke:var(--ram); stroke-width:1; stroke-dasharray:3 4 }
.vyvoj .kotva-text{ font-family:var(--pismo-mono); font-size:10.5px; fill:var(--text-slaby) }


/* ============================================================
   TOKENY NAVÍC
   Vlož do :root a do obou tmavých bloků ve styl.css
   přesně takhle, na stejná místa jako ostatní tokeny.
   ============================================================ */

/* světlý režim */
:root{
  --cara:#B9A9A8;
  --mrizka:#EFE7E6;
}
/* tmavý — systémová volba */
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --cara:#6B5A5C;
  --mrizka:#2A2225;
}}
/* tmavý — výslovné přepnutí */
:root[data-theme="dark"]{
  --cara:#6B5A5C;
  --mrizka:#2A2225;
}


/* ============================================================
   ZMĚNY PRO WEB
   Claude Code, 14. 9. 2026 (stejné pravidlo: změna jen tady a s důvodem).
   Soubor byl v 1:55 přepsaný na revizi zadání 31, změny z první
   verze se proto vracejí sem a c) platí nově i pro pás dostupnosti.

   a) .rozptyl-radek .obchod a .dost-radek .obchod dědí barvu.
      navrh/hlavni-strana.css má .obchod bez předka (běžící pás, barva
      --text-tlumeny) a jméno obchodu v grafu by zešedlo.
   b) Tokeny --cara a --mrizka jsou ve styl.css i mezi ostatními tokeny;
      sekce TOKENY níž je ve vložené kopii taky, se stejnými hodnotami.
   c) Jedna společná osa pro všechny řádky. Řádky měly vlastní mřížku se
      sloupci podle obsahu: v rozptylu měl řádek „nejlevnější" kratší drát
      (na 400 px 85 proti 98 px) a body neležely na téže škále; v pásu by
      se dílky posouvaly podle délky „10 z 10". Řádky a osa proto sdílejí
      sloupce rodiče přes subgrid; osa rozptylu leží uvnitř .rozptyl.
   d) Do 640 px stojí stav („nejlevnější", „vyprodáno") pod cenou. Sdílený
      sloupec ceny jinak sebral drátu místo a popisky osy se překrývaly.
   e) Kotva doporučené ceny (zadání 51): .rozptyl je umístěný, aby překryv
      .kotva-cary z oddílu kotvy mohl ležet v buňce mřížky přes sloupec drátů
      všech řádků nabídek. Čára je pak souvislá i na mobilu, kde jsou řádky
      vyšší. Kotva se kreslí jen u produktu s doloženým MSRP.
   ============================================================ */
.rozptyl-radek .obchod, .dost-radek .obchod{ color:inherit }
.rozptyl{ display:grid; grid-template-columns:minmax(96px,auto) 1fr minmax(74px,auto); column-gap:14px }
.rozptyl-radek, .rozptyl > .rozptyl-osa{ grid-column:1 / -1; grid-template-columns:subgrid }
.dostupnost{ display:grid; grid-template-columns:minmax(96px,auto) 1fr minmax(88px,auto); column-gap:14px }
.dost-radek{ grid-column:1 / -1; grid-template-columns:subgrid }
@media (max-width: 640px){ .rozptyl-radek .stav{ display:block; margin-left:0 } }
.rozptyl{ position:relative }


/* ============================================================
   CO SE SEM ZÁMĚRNĚ NEDÁVÁ

   - Paleta pro identitu obchodů. Obchod se pozná jménem
     na začátku řádku nebo u konce čáry. Pětibarevná duha
     propadla validátorem (odstup 12,2 u nejhorší sousední
     dvojice, hranice je 15) a odporuje našemu pravidlu,
     že barva znamená hru nebo stav skladu.
   - Legenda obchodů pod grafem. Nahrazují ji jména v řádcích
     a popisky u konců čar. Legenda STAVŮ (.stavy) zůstává —
     tam barva bez slova stát nesmí.
   - Pět souběžných čar (dřívější „vývoj ceny"). Nahrazeno
     tvarem D: jedna čára a pásmo. Nekreslit ani jako volbu.
   - Doporučená cena výrobce jako kotva — až bude potvrzená
     u všech čtyř her (zadání 22 a 27).
   ============================================================ */
/* ===== konec navrh/graf.css ===== */


/* ===== navrh/automat.css, oddíly 2, 3, 4, 6 a 8: vloženo doslova (fáze C) ===== */
/* ---------- 2. SLOT ---------- */
.regal{ display:grid; grid-template-columns:repeat(auto-fill,minmax(132px,1fr)); gap:14px; align-items:start }

.slot{
  display:flex; flex-direction:column; gap:0;
  border-radius:var(--r-data); overflow:hidden;
  border:1px solid var(--ram-jemny); background:var(--plocha);
}
.okno{
  position:relative; flex:none; aspect-ratio:var(--slot-pomer); background:var(--sklo);
  display:flex; align-items:center; justify-content:center; padding:14px; overflow:hidden;
}
.zbozi{
  width:58%; height:78%; border-radius:3px; background:var(--g-lorcana); opacity:.92;
  box-shadow:0 1px 0 rgba(0,0,0,.12) inset;
}
.zbozi.op{ background:var(--g-one_piece) }
.zbozi.swu{ background:var(--g-swu) }
.zbozi.rb{ background:var(--g-riftbound) }
.zbozi.sirsi{ width:74%; height:66% }   /* display, karton */

.stitek{
  display:flex; align-items:center; justify-content:space-between; gap:6px;
  padding:7px 9px; border-top:1px solid var(--ram-jemny); background:var(--plocha);
}
.stitek .kod{ font-family:var(--pismo-mono); font-size:10px; color:var(--text-slaby); letter-spacing:.04em }
.stitek .cena{ font-family:var(--pismo-mono); font-size:13.5px; font-weight:600; font-variant-numeric:tabular-nums }
.stitek.nej{ background:var(--sklad-podklad) }
.stitek.nej .cena{ color:var(--skladem) }

/* ---------- 3. STAVY SLOTU ---------- */
.lampa{ position:absolute; top:8px; right:8px; width:9px; height:9px;
        border-radius:var(--r-akce); background:var(--kontrolka-off) }
.lampa.sviti{ background:var(--skladem); box-shadow:0 0 0 3px var(--sklad-podklad) }
.lampa.pre{ background:var(--predobjednavka); box-shadow:0 0 0 3px var(--predobj-podklad) }

.cedule{
  position:absolute; inset:auto 0 0 0; background:#8C2F39; color:#fff; text-align:center;
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.12em; padding:4px 0;
}
/* cedule i páska leží na bílé dlaždici v obou motivech: barvy světlého motivu natvrdo, oddíl 8 f) */

.slot.pryc .zbozi{ filter:grayscale(1); opacity:.4 }
.slot.prazdny .okno{ background:repeating-linear-gradient(135deg,transparent 0 7px,var(--sklo) 7px 14px) }
.slot.prazdny .stitek .cena{ color:var(--text-slaby); font-weight:400 }
.slot.brzy .zbozi{ background:none; border:1.5px dashed var(--ram); opacity:.8 }
.slot.mimo .okno{ background:var(--sedy-podklad) }

.paska{
  position:absolute; left:-14%; right:-14%; top:50%; transform:translateY(-50%) rotate(-11deg);
  background:#8A5A12; color:#fff; font-family:var(--pismo-mono); font-size:10px;
  font-weight:700; letter-spacing:.11em; text-align:center; padding:4px 0;
}

/* ---------- 4. TLAČÍTKO — ČTYŘI STAVY ---------- */
.tl{
  display:inline-flex; align-items:center; gap:8px; border:0; border-radius:var(--r-akce);
  padding:10px 18px; font-family:var(--pismo-ui); font-size:14.5px; font-weight:600;
  cursor:pointer; background:var(--podklad-2); color:var(--text);
}
.tl .zarovka{ width:8px; height:8px; border-radius:var(--r-akce); background:var(--kontrolka-off); flex:none }
.tl.sviti{ background:var(--znacka); color:#fff }
.tl.sviti .zarovka{ background:#fff }
:root[data-theme="dark"] .tl.sviti{ color:#221013 }
:root[data-theme="dark"] .tl.sviti .zarovka{ background:#221013 }
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .tl.sviti{ color:#221013 }
  :root:not([data-theme="light"]) .tl.sviti .zarovka{ background:#221013 }
}
.tl.zhasle{ background:var(--sedy-podklad); color:var(--text-slaby); cursor:not-allowed }
.tl.blika .zarovka{ background:var(--predobjednavka); animation:blik 1.1s steps(1) infinite }
@keyframes blik{ 0%,49%{ opacity:1 } 50%,100%{ opacity:.2 } }
@media (prefers-reduced-motion: reduce){
  .tl.blika .zarovka{ animation:none; opacity:.75 }
}

/* ---------- 6. KLAPKA A PÁD ---------- */
.klapka{ border:1px solid var(--ram-jemny); border-radius:var(--r-data); overflow:hidden }
.klapka .usti{ height:9px; background:var(--text); opacity:.82 }
.vydej{ padding:12px 14px; display:flex; flex-direction:column; gap:9px; background:var(--podklad-2) }
.polozka{
  display:flex; align-items:center; gap:10px; background:var(--plocha); border-radius:var(--r-data);
  padding:9px 11px; font-size:14px; border:1px solid var(--ram-jemny);
}
.polozka .chip{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; padding:3px 8px; border-radius:var(--r-akce); flex:none;
}
.chip.sk{ color:var(--skladem); background:var(--sklad-podklad) }
.chip.sl{ color:var(--znacka); background:var(--akcent-podklad) }
.polozka .n{ flex:1 1 auto; min-width:0 }
.polozka .c{ font-family:var(--pismo-mono); font-weight:600;
             font-variant-numeric:tabular-nums; white-space:nowrap }

/* VÝCHOZÍ STAV JE BEZ ANIMACE — WCAG 2.3.3.
   Pohyb se ZAPÍNÁ, nevypíná. Nepřepisovat na opačný zápis. */
@keyframes pad{
  from{ transform:translateY(-46px); opacity:0 }
  to  { transform:translateY(0);     opacity:1 }
}
@media (prefers-reduced-motion: no-preference){
  .pada{ animation:pad var(--t-pad) var(--e-pad) both }
}

/* ---------- 8. ZMĚNY PRO WEB ----------
   Claude Code, 13. 9. 2026 (zadání 23, pravidlo 2: změna jen tady, s důvodem).

   a) Oddíl 4: tmavé písmo svítícího tlačítka jen v tmavém motivu.
      Selektor :root:not([data-theme="light"]) bez media dotazu platil i ve
      světlém motivu bez ručně zvoleného motivu (tmavé písmo na višňové ploše).
   b) Obrázek z tiskového kitu výrobce: licence dovoluje jen proporcionální
      zmenšení (hlídá web.kontrola_obrazku). Proto bílá dlaždice, žádný filtr,
      průhlednost ani stín, a páska mimo provoz nejde přes obrázek.
   c) Okno je na webu odkaz na produkt: bez podtržení, jen prolnutí 160 ms
      (tabulka kde se smí hýbat co: katalog jen prolnutí 160 ms).
   d) Štítek je cenovka, ne popiska: vlevo krátký typ balení (booster, display,
      balíček, karton, trove, sada…), název produktu je v title a aria-label
      okna (zadání 29). Výpustka zůstává jen jako pojistka pro „viděno před…“.
   e) Tlačítko je na webu odkaz: bez podtržení, barva písma drží při najetí.
   f) Cedule a páska leží na bílé dlaždici v obou motivech, proto mají natvrdo
      barvy světlého motivu s bílým písmem (zadání 27, 14. 9. 2026):
      cedule #8C2F39 = 8,14 : 1, páska #8A5A12 = 5,91 : 1.
      Barvy podle motivu dávaly 4,17 (cedule v tmavém) a 3,07 (páska ve světlém).
   g) Chybějící pravidla návrhu, doplněná přímo v oddílech 2 a 8 (zadání 29, 14. 9. 2026):
      .regal align-items:start — slot končí štítkem, nenatahuje se na výšku
      nejvyššího slotu v řadě (bylo 152 px prázdna pod štítkem);
      .okno flex:none — poměr 1 : 1,4 drží i prázdné okno (bylo 297 místo 192 px);
      .slot.brzy .zbozi.obraz border:0 — přerušovaný obrys nahrazuje zboží, jen když
      ho není čím ukázat; u skutečné fotky vypadal jako nenahraný obrázek. */
.zbozi.obraz{ display:grid; place-items:center; padding:6%; background:#FFFFFF; opacity:1; box-shadow:none }
.zbozi.obraz img{ max-width:100%; max-height:100%; width:auto; height:auto; object-fit:contain }
.slot.pryc .zbozi.bez-filtru{ filter:none; opacity:1 }
.slot.brzy .zbozi.obraz{ background:#FFFFFF; opacity:1; border:0 }
.zbozi.obraz ~ .paska{ left:0; right:0; top:0; transform:none }
a.okno{ text-decoration:none; transition:background-color 160ms }
a.okno:hover{ background:var(--podklad-2) }
@media (prefers-reduced-motion: reduce){ a.okno{ transition:none } }
.stitek .kod{ min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
a.tl{ text-decoration:none }
.tl.sviti:hover{ color:#fff }
:root[data-theme="dark"] .tl.sviti:hover{ color:#221013 }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .tl.sviti:hover{ color:#221013 } }
/* ===== konec navrh/automat.css ===== */

/* Rozvržení stránky kolem komponent automatu — není součást navrh/automat.css. */
.sloty-zdroj{margin:16px 0 0; font-size:12.5px; color:var(--text-slaby)}
.edice-souhrn .mark{margin-right:10px}
.cena-blok .tl{margin-top:14px}

/* ── hlavní strana ────────────────────────────────────────── */
.hledani{position:relative; display:flex; align-items:center; gap:12px;
  border:1.5px solid var(--ram); background:var(--plocha); border-radius:var(--r-akce);
  padding:0 16px; box-shadow:var(--stin)}
.hledani:focus-within{border-color:var(--akcent)}
.hledani svg{flex:none; color:var(--text-slaby)}
.hledani input{flex:1; min-width:0; border:0; background:transparent; color:var(--text);
  font:inherit; font-size:17px; padding:15px 0; outline:none}
.hledani input::placeholder{color:var(--text-slaby)}
.hledani kbd{font-family:var(--pismo-mono); font-size:11px; color:var(--text-slaby);
  border:1px solid var(--ram); border-radius:var(--r-data); padding:2px 6px; flex:none}
@media (hover:none){ .hledani kbd{display:none} }
.vysledky{margin-top:10px; border:1px solid var(--ram); border-radius:var(--r-data);
  background:var(--plocha); box-shadow:var(--stin); overflow:hidden}
.vysledky:empty{display:none}
.vysledky a{display:flex; gap:10px; align-items:baseline; padding:10px 14px;
  text-decoration:none; color:var(--text); border-bottom:1px solid var(--ram-jemny)}
.vysledky a:last-child{border-bottom:none}
.vysledky a:hover,.vysledky a:focus-visible{background:var(--podklad-2)}
.vysledky .v-hra{font-size:12px; color:var(--text-slaby); margin-left:auto; white-space:nowrap}

.legenda{border:1px solid var(--ram-jemny); border-radius:var(--r-data); background:var(--plocha);
  padding:30px 26px 22px; display:grid; gap:18px}
.legenda-radek{display:flex; justify-content:space-around; align-items:flex-end; gap:12px}
.legenda figure{margin:0; display:grid; justify-items:center; gap:8px}
.legenda figcaption{font-family:var(--pismo-mono); font-size:11px; color:var(--text-slaby)}
.legenda p{margin:0; font-size:13px; color:var(--text-tlumeny); line-height:1.55}

/* ===== navrh/automat.css, oddíl 5: vloženo doslova (fáze B) ===== */
/* ---------- 5. DISPLEJ ---------- */
.displej{ display:flex; gap:26px; flex-wrap:wrap;
          font-family:var(--pismo-mono); font-variant-numeric:tabular-nums }
.displej div{ font-size:12px; color:var(--text-slaby); letter-spacing:.05em; text-transform:uppercase }
.displej b{ display:block; font-size:26px; color:var(--text); letter-spacing:-.02em;
            font-weight:600; text-transform:none }
.displej b.zel{ color:var(--skladem) }
.displej{margin:6px 0 4px}


.seznam{list-style:none; padding:0; margin:0}
.seznam li{padding:10px 0; border-bottom:1px solid var(--ram-jemny); display:flex;
  gap:10px; align-items:baseline; flex-wrap:wrap}
.seznam .kdy{margin-left:auto}

/* ── obecné bloky ─────────────────────────────────────────── */
section{padding:30px 0}
h1{font-size:26px; line-height:1.25; letter-spacing:-.02em; margin:0 0 6px}
h2{font-size:17px; margin:0 0 14px; letter-spacing:-.01em}
.nadpis-male{font-size:11px; letter-spacing:.12em; text-transform:uppercase;
  color:var(--text-slaby); font-weight:600; margin:0 0 14px}
h3{font-size:14px; margin:0 0 8px; color:var(--text-tlumeny); font-weight:600;
   text-transform:uppercase; letter-spacing:.06em}
.karta{background:var(--plocha); border:1px solid var(--ram); border-radius:var(--r-data)}
.mrizka{display:grid; gap:14px; grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}

/* ── produkt ──────────────────────────────────────────────── */
.produkt{display:grid; grid-template-columns:212px minmax(0,1fr); gap:44px;
  padding:44px 0 8px; align-items:start}
.lista{display:flex; flex-direction:column; gap:14px}
.lista figure{margin:0}
/* Fotka se nikdy neupravuje (§5.1, O6). Neprůhledná fotka na bílém by na
   tmavém podkladu svítila jako obdélník, proto dostane bílou dlaždici:
   bílá fotky s ní splyne a hrana zmizí. Průhledná sedí přímo na podkladu. */
.dlazdice{background:var(--dlazdice); border:1px solid var(--ram); border-radius:var(--r-data);
  padding:14px; display:grid; place-items:center;
  /* jas na celé dlaždici, ne na fotce: jinak je bílá fotky šedší než dlaždice
     a hrana, kterou dlaždice měla schovat, je vidět */
  filter:brightness(var(--foto-jas))}
/* Obrázek z tiskového kitu výrobce: podmínky dovolují JEN proporcionální
   zmenšení, takže na něj nesmí padnout žádný filtr. Je to právní podmínka,
   ne estetika — proto výjimka i tam, kde by dlaždici dostal. */
.dlazdice.bez-filtru{filter:none}
/* Obrázek od výrobce stojí VŽDY na čistě bílé #FFFFFF — i když má průhledné
   pozadí a dlaždici nedostane. Jiný odstín pod průhledným originálem se tváří
   jako jeho úprava, a podmínky dovolují jen zmenšení. Do 12. 9. 2026 tu bílá
   chyběla: průhledné obrázky z kitu stály na ploše stránky, v tmavém motivu
   na #141013. Fotky z obchodů (bez „bez-filtru") se to netýká. */
.foto-volna.bez-filtru{filter:none; background:#FFFFFF; border-radius:var(--r-data)}
.foto{max-width:100%; height:auto; display:block}
.foto-volna{display:grid; place-items:center; padding:4px 0}
.foto-zdroj{font-size:11.5px; color:var(--text-slaby); margin-top:8px}
.znacka-box{border:1px solid var(--ram-jemny); border-radius:var(--r-data); background:var(--plocha);
  padding:22px 18px 16px; display:grid; justify-items:center; gap:10px; margin:0}
.znacka-box figcaption{font-family:var(--pismo-mono); font-size:11px; color:var(--text-slaby);
  letter-spacing:.02em; text-align:center}
.znacka{display:block}
/* Silueta balení mimo slot (detail produktu, legenda na /o-projektu; zadání 39, odd. 6). Okno má
   poměr karty jako slot a silueta ho vyplní celé — jinak se ztratí společná základna. */
.okno-baleni{position:relative; display:block; width:112px; aspect-ratio:1/1.4}
.legenda .okno-baleni{width:64px}
.legenda-radek{flex-wrap:wrap}
.g-lorcana{color:var(--g-lorcana)} .g-one_piece{color:var(--g-one_piece)}
.g-swu{color:var(--g-swu)} .g-riftbound{color:var(--g-riftbound)}

.nadtitulek{font-family:var(--pismo-mono); font-size:11.5px; letter-spacing:.1em;
  text-transform:uppercase; color:var(--text-slaby); margin:0 0 12px}
.nadtitulek a{color:inherit; text-decoration:none}
.nadtitulek a:hover{color:var(--text)}
/* Název produktu písmem edic, ve skutečné velikosti: stránka, ne řádek tabulky. Serif zrušen
   (zadání 35); Bricolage máme jen v řezu 800, proto 800 výslovně. */
.titul-produktu{font-family:var(--pismo-edice); font-weight:800;
  font-size:clamp(26px,3.4vw,38px); line-height:1.14; letter-spacing:-.018em; margin:0}
.meta-produktu{margin:12px 0 0; font-family:var(--pismo-mono); font-size:12.5px;
  color:var(--text-tlumeny); display:flex; flex-wrap:wrap; gap:4px 10px}
/* oddělovač ZA položkou: při zalomení visí na konci řádku, nezačíná jím další */
.meta-produktu span:not(:last-child)::after{content:"·"; margin-left:10px; color:var(--text-slaby)}

.cena-blok{margin-top:26px; padding-top:22px; border-top:1px solid var(--ram)}
.cena-blok .cislo{font-family:var(--pismo-mono); font-size:38px; font-weight:500;
  letter-spacing:-.03em; line-height:1; font-variant-numeric:tabular-nums}
.cena-blok .cislo.nic{font-family:var(--pismo-edice); font-size:26px; letter-spacing:-.01em;
  font-weight:800}
.cena-blok .rika{margin:8px 0 0; font-size:14px; color:var(--text-tlumeny)}
.cena-blok .rika b{color:var(--text); font-weight:600}

/* Nabídky: seznam obchodů, ne tabulka — hustota zůstává, hierarchie přibude. */
.nabidky-seznam{margin:22px 0 0; padding:0; list-style:none; border-top:1px solid var(--ram-jemny)}
.nabidka{display:grid; grid-template-columns:minmax(0,1fr) 150px 150px; gap:16px;
  align-items:center; padding:14px 2px; border-bottom:1px solid var(--ram-jemny)}
.nabidka-obchod{font-weight:500; font-size:15.5px; min-width:0}
.nabidka-obchod a{color:var(--text); text-decoration:none}
.nabidka-obchod a:hover{color:var(--akcent); text-decoration:underline}
.nabidka-obchod small{display:block; font-family:var(--pismo-mono); font-size:11.5px;
  color:var(--text-slaby); font-weight:400; margin-top:3px; overflow-wrap:anywhere}
.nabidka-nej{display:inline-block; margin-left:8px; font-size:10.5px; font-weight:700;
  letter-spacing:.06em; text-transform:uppercase; color:var(--akcent); vertical-align:1px}
.nabidka-cena{font-family:var(--pismo-mono); font-size:18px; font-weight:500; text-align:right;
  white-space:nowrap; font-variant-numeric:tabular-nums}
.nabidka-cena small{display:block; font-size:11px; color:var(--text-slaby); font-weight:400; margin-top:3px}
.nabidka-cena .bez{font-family:var(--pismo-ui); font-size:13px; font-weight:400; color:var(--text-tlumeny)}
.nabidka-vpravo{text-align:right}
.kdy{font-family:var(--pismo-mono); font-size:11.5px; color:var(--text-slaby);
  margin-top:4px; white-space:nowrap}

/* dostupnost nese TVAR, ne jen barvu */
.dost{display:inline-flex; align-items:center; gap:7px; font-size:13px; white-space:nowrap}
.dost i{width:9px; height:9px; border-radius:var(--r-akce); flex:none}
.dost.skladem{color:var(--skladem)}
.dost.skladem i{background:var(--skladem)}
.dost.predobjednavka{color:var(--predobjednavka)}
.dost.predobjednavka i{background:transparent; border:2px solid var(--predobjednavka)}
.dost.vyprodano{color:var(--vyprodano)}
.dost.vyprodano i{background:transparent; border:1px solid var(--vyprodano)}

/* věty o řazení a provizi stojí U seznamu (§4 bod 5 zadání fáze 5) */
.pravidla{margin-top:24px; font-size:13px; color:var(--text-tlumeny); line-height:1.65;
  max-width:72ch; padding-bottom:36px}
.pravidla p{margin:0 0 4px}
.pravidla strong{color:var(--text); font-weight:600}

/* ── prázdný stav: nejčastější stránka webu, musí být nejlepší ── */
/* Prázdná stránka produktu. Dřív .prazdny — kolidovalo se stavem slotu .slot.prazdny
   z navrh/automat.css a natahovalo prázdná okna (zadání 29). */
.produkt-prazdny{display:grid; grid-template-columns:212px minmax(0,1fr); gap:44px;
  padding:60px 0 20px; align-items:start}
.produkt-prazdny .znacka-box{padding:30px 22px 20px}
.prazdny-veta{font-size:19px; line-height:1.55;
  color:var(--text-tlumeny); margin:18px 0 0; max-width:44ch}
.prazdny-kdy{margin:16px 0 0; font-family:var(--pismo-mono); font-size:12.5px; color:var(--text-slaby)}

/* ── tabulky na výpisech her, obchodů a stavu ─────────────── */
.nabidky{width:100%; border-collapse:collapse; font-size:14px}
.nabidky th{text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.06em;
  color:var(--text-slaby); font-weight:600; padding:0 12px 7px; white-space:nowrap}
.nabidky td{padding:9px 12px; border-top:1px solid var(--ram-jemny); vertical-align:middle}
.nabidky tr:hover td{background:var(--podklad-2)}
.nabidky .cena{font-family:var(--pismo-mono); font-variant-numeric:tabular-nums;
  font-size:14px; font-weight:500; white-space:nowrap; text-align:right}
.nabidky .cas{font-family:var(--pismo-mono); font-variant-numeric:tabular-nums;
  font-size:12px; color:var(--text-slaby); white-space:nowrap}

.patka{border-top:1px solid var(--ram-jemny); margin-top:40px; padding:26px 0 40px;
  font-size:13px; color:var(--text-tlumeny)}
.patka a{color:var(--text-tlumeny)}
.patka strong{color:var(--text)}
.patka-mrizka{display:grid; gap:20px; grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
/* Prohlášení o neoficiálnosti: samostatný řádek v plné barvě textu, ne drobné písmo mezi odkazy (zadání 03). */
.patka-neoficialni{margin-top:0; margin-bottom:22px; font-size:14px; color:var(--text); line-height:1.55}

/* Graf cen na detailu produktu (zadání 04, bod 2). */
.graf-cen{margin:26px 0 0}
.graf-cen .graf + .graf{margin-top:30px}

/* Co o obchodě víme (zadání 04, bod 3): doložitelné, ne marketingové. */
.duvera{display:block; font-size:11.5px; font-weight:400; color:var(--text-slaby); margin-top:3px}
.duvera-radky{font-size:12.5px; color:var(--text-tlumeny); line-height:1.5; min-width:220px}
/* Široká tabulka se posouvá sama, stránka do strany nikdy. */
.tabulka-posun{overflow-x:auto; -webkit-overflow-scrolling:touch}

@media (max-width:880px){
  .produkt,.produkt-prazdny{grid-template-columns:1fr; gap:26px; padding-top:28px}
  .lista{flex-direction:row; align-items:flex-start; gap:14px}
  .lista > *{flex:1 1 0; max-width:180px}
  .produkt-prazdny .znacka-box{max-width:180px}
  .nabidka{grid-template-columns:minmax(0,1fr) auto; gap:4px 12px}
  /* časové razítko zůstává vidět i na telefonu — je to povinný údaj */
  .nabidka-vpravo{grid-column:1 / -1; text-align:left; display:flex; gap:14px; align-items:baseline}
  .kdy{margin-top:0}
  .hl-nav{gap:12px; font-size:13px}
  .hl-nav a.hra{display:none}
}
@media (max-width:640px){
  h1{font-size:21px}
  .hlavicka .obal{gap:12px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important; transition:none!important}}
@media print{ .hlavicka,.prepinac,.hledani{display:none} }

/* ── katalog po edicích ─────────────────────────────────────────
   Hra → řada → edice → produkty. Na obrázky z kitu tu nepadá žádný filter,
   mix-blend-mode ani opacity: nepokrytý řádek se ztmavuje textem a podkladem,
   protože průhlednost by padla i na fotku (licence: jen zmenšení). */
.edice-hlava{padding:34px 0 8px}
.edice-hlava h1{font-size:clamp(28px,3.6vw,40px); letter-spacing:-.025em; margin:0 0 10px}
.edice-souhrn{color:var(--text-tlumeny); font-size:13px; margin:8px 0 0}
/* Pokrytí hry stojí na stránce jednou, větou pod nadpisem (zadání 21, bod 4). */
.edice-hlava .edice-souhrn{font-size:15px; margin:0; font-variant-numeric:tabular-nums}
.edice-souhrn b{color:var(--text); font-weight:600}
.edice-uvod{font-size:14px; margin:6px 0 0; max-width:66ch}
.edice-rada{padding:26px 0 6px}
.edice-rada h2{font-size:19px; letter-spacing:-.01em; margin:0}
.edice-rada-kolik{font-variant-numeric:tabular-nums; font-size:12px; color:var(--text-slaby); margin:3px 0 0}
/* Bez rámečků a bez stínů: karty odděluje mezera, ne linka. Hover je neutrální
   --podklad-2 — růžová znamená vybranou hru a nesmí znamenat zároveň „myš nad kartou".
   Celá dlaždice je odkaz a má to být vidět (zadání 21, bod 2): odsazení 10 px
   se vrací záporným okrajem, takže mřížka zůstává na stejném rastru. Žádný
   rámeček, stín ani zvednutí. Fokus z klávesnice dostane podbarvení i obrys. */
.edice-mrizka{display:grid; grid-template-columns:repeat(auto-fill,minmax(236px,1fr)); gap:34px 26px; margin-top:20px}
.edice-karta{display:flex; flex-direction:column; border-radius:var(--r-data); padding:10px; margin:-10px;
  text-decoration:none; color:var(--text); transition:background-color 160ms}
.edice-karta:hover{background:var(--podklad-2); color:var(--text)}
.edice-karta:focus-visible{background:var(--podklad-2); outline:2px solid var(--text-tlumeny); outline-offset:2px; border-radius:var(--r-data)}
/* Sbalená řada (zadání 05): souhrn nese počet edic i kolik z nich má nabídku,
   po rozbalení seznam místo mřížky. Bez rámečků; hover stejně šedý jako karta. */
.edice-rada-sbalena summary{cursor:pointer; list-style:none; display:block; border-radius:var(--r-data); padding:6px; margin:-6px}
.edice-rada-sbalena summary::-webkit-details-marker{display:none}
.edice-rada-sbalena summary h2::before{content:"▸"; display:inline-block; width:1.1em; color:var(--text-slaby); transition:transform .12s}
.edice-rada-sbalena[open] summary h2::before{transform:rotate(90deg)}
.edice-rada-sbalena summary .edice-rada-kolik{padding-left:calc(19px * 1.1)}
.edice-rada-sbalena summary:focus-visible{outline:2px solid var(--text-tlumeny); outline-offset:2px}
.edice-seznam{list-style:none; margin:14px 0 0; padding:0}
.edice-seznam a{display:grid; grid-template-columns:6.5em minmax(14em,1fr) 8.5em 13.5em minmax(0,14em); gap:4px 16px; align-items:baseline;
  padding:9px 8px; border-radius:var(--r-data); color:var(--text); text-decoration:none}
.edice-seznam-kod{font-size:11.5px; color:var(--text-slaby); letter-spacing:.06em}
.edice-seznam-jmeno{font-weight:600; font-size:14.5px}
.edice-seznam a:hover, .edice-rada-sbalena summary:hover{background:var(--podklad-2); color:var(--text)}
.edice-seznam a:focus-visible{background:var(--podklad-2); outline:2px solid var(--text-tlumeny); outline-offset:2px}
/* V řádku seznamu se cena a pokrytí zarovnávají na účaří s ostatními sloupci, ne pod sebe. */
.edice-seznam .edice-pokryti, .edice-seznam .edice-cena{margin-top:0}
.edice-seznam .edice-cena-castka{font-size:15px}
@media (max-width: 1040px){
  .edice-seznam a{grid-template-columns:5.5em minmax(0,1fr)}
  .edice-seznam a > :nth-child(n+3){grid-column:2}
}
/* Štítek edice: vlastní typografie, ne logo. Plocha je bílá v obou motivech
   (Karel, 12. 9. v noci) — barvu edice nese text a pás, ne plocha. */
.edice-stitek{display:grid; grid-template-rows:auto 1fr auto; height:138px; padding:14px 15px; background:#FFFFFF;
  border-radius:var(--r-data); overflow:hidden; text-align:left}
.edice-kod{font-family:var(--pismo-mono); font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:#6E5C5E}
.edice-jmeno{font-family:var(--pismo-edice); font-weight:800; font-synthesis:weight; font-size:22px; line-height:1.03;
  letter-spacing:-.035em; color:#1A1416; align-self:center; text-wrap:balance;
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden}
.edice-jmeno.dlouhy{font-size:17.5px; line-height:1.08}
.edice-pas{display:block; height:5px; width:44px; border-radius:var(--r-data)}
.edice-logo{background:#FFFFFF; display:grid; place-items:center}
/* Velikost loga určuje evidence z OBSAHU loga (width/height v HTML). Tady jen strop,
   ať úzká dlaždice nepřeteče. Soubor se needituje, mění se jen měřítko zobrazení. */
.edice-logo{padding:10px 14px}
.edice-logo img{max-width:100%; height:auto}
/* Tmavá dlaždice jen u loga, jehož nejtmavší desetina kresby nemá k bílé kontrast 4,5 : 1
   (zadání 13, rozhodnutí Karla 13. 9. 2026). Barva je --podklad tmavého motivu, žádná nová
   hodnota. Podklad není úprava obrázku; mřížka tím přestane být jednotná a je to vědomá cena. */
.edice-logo.edice-logo-tmava{background:#141013}
.edice-stitek-velky{height:118px; width:190px; flex:none}
/* Karta edice (zadání 21, bod 1): sběratel mřížku skenuje kvůli dvěma věcem —
   kolik to stojí a jestli to jde koupit. Proto je částka největší prvek karty
   a stav bez ceny má barvu stavu, ne tučnou černou jako částka. Strojopis
   jen tam, kde se čísla mají zarovnat: rok a částka. */
.edice-telo{display:flex; flex-direction:column; padding:11px 13px 3px; flex:1}
.edice-meta{font-size:12px; color:var(--text-slaby); letter-spacing:.01em}
.edice-pokryti{margin-top:8px; font-size:13px; color:var(--text-tlumeny); font-variant-numeric:tabular-nums}
.edice-tecka-sklad{display:inline-block; width:6px; height:6px; margin-right:6px; border-radius:var(--r-akce);
  background:var(--skladem); vertical-align:1px}
.edice-cena{margin-top:10px; color:var(--text)}
.edice-cena-pred{font-size:12px; font-weight:500; color:var(--text-tlumeny)}
/* Mezera ve strojopisu je široká jako číslice a „359  Kč" se rozpadalo na dvě slova. */
.edice-cena-castka{font-family:var(--pismo-mono); font-size:19px; font-weight:600; letter-spacing:-.01em;
  word-spacing:-.3em; font-variant-numeric:tabular-nums; white-space:nowrap}
.edice-stav{font-size:14px; font-weight:500}
.edice-stav.edice-sklad{color:var(--skladem)}
.edice-stav.edice-predobj{color:var(--predobjednavka)}
.edice-stav.edice-nic{color:var(--vyprodano)}
.edice-zpet{margin:22px 0 0; font-size:13.5px}
.edice-zpet a{color:var(--text-tlumeny); text-decoration:none}
.edice-radky{list-style:none; margin:10px 0 0; padding:0}
.edice-radek{display:grid; grid-template-columns:62px minmax(0,1fr) auto auto; gap:14px; align-items:center;
  padding:11px 14px; border-top:1px solid var(--ram-jemny)}
.edice-radek:first-child{border-top:0}
.edice-radek-jmeno{display:flex; flex-direction:column; gap:1px; font-size:14.5px; line-height:1.3}
.edice-radek-jmeno .tlumene{font-size:12px}
.edice-radek-stav{font-size:12.5px; white-space:nowrap; text-align:right}
.edice-radek-cena{font-size:14px; white-space:nowrap; text-align:right; min-width:96px}
.edice-radek.nikdo{background:var(--podklad-2)}
.edice-radek.nikdo .edice-radek-jmeno a{color:var(--text-tlumeny)}
.edice-nikdo{color:var(--vyprodano)}
.edice-radek[hidden]{display:none}
@media (max-width:640px){
  .edice-radek{grid-template-columns:48px minmax(0,1fr); row-gap:6px}
  .edice-radek-stav,.edice-radek-cena{grid-column:2; text-align:left}
  .edice-stitek-velky{width:150px; height:104px}
}

/* Skříň je vložená až na konec: její .vydej, .usti a .polozka mají přebít
   oddíl 6 z automat.css (navrh/skrin.css, změna c). */
/* ===== navrh/skrin.css: vloženo doslova (zadání 32) ===== */
/* ============================================================
   PECKOMAT — JAZYK AUTOMATU, ČTVRTÁ ČÁST
   Skříň stroje kolem regálu: tělo, sklo, police, místo,
   panel s ovladači a výdejní klapka.
   Navazuje na navrh/automat.css. Regál a slot uvnitř
   zůstávají beze změny, tenhle soubor je jen obal kolem nich.

   PRAVIDLO STEJNÉ: tenhle soubor se KOPÍRUJE, nepřepisuje.
   Názvy tříd zůstávají. Žádná hodnota se nemění, aby
   „sedla do našich stylů". Když je opravdu potřeba něco
   změnit, změní se to TADY a napíše do reportu i s důvodem.

   POZOR — jedno pravidlo ze zadání 29 se PŘESOUVÁ, neruší:
     .sklo .regal{ align-items:stretch }
     .misto{ display:flex; flex-direction:column }
     .misto > .slot{ flex:none }
   Slot se pořád neroztahuje. Roztahuje se místo kolem něj,
   aby lišta police seděla v celém řádku na stejné výšce.
   V automat.css zůstává .regal{ align-items:start } pro
   mřížky mimo skříň.

   Dva tokeny navíc, hodnoty jsou dole v sekci TOKENY:
     --vnitrek  zadní stěna stroje, TMAVŠÍ než stránka
     --lista    nosník police

   Živá ukázka: navrh/skrin.html
   ============================================================ */

/* ------------------------------------------------------------
   SKŘÍŇ — tělo stroje. Dva vnořené boxy, jako na fotkách:
   tělo (materiál) a v něm sklo (vnitřek, tmavší než stránka).
   ------------------------------------------------------------ */
.skrin{
  position:relative;
  border:1px solid var(--ram);
  border-radius:11px;
  background:var(--podklad-2);
  padding:9px;
}

.sklo{
  position:relative;
  border-radius:7px;
  background:var(--vnitrek);
  box-shadow:inset 0 0 0 1px var(--ram);
  /* 7px po stranách = přesně polovina mezery mřížky.
     Díky tomu lišta police dosáhne na obě stěny. */
  padding:15px 7px 5px;
}
/* odlesk na horní hraně skla */
.sklo::before{
  content:""; position:absolute; left:12px; right:12px; top:1px; height:1px;
  background:linear-gradient(90deg,transparent,var(--plocha) 16%,var(--plocha) 84%,transparent);
  opacity:.45; pointer-events:none; border-radius:1px;
}

/* ------------------------------------------------------------
   POLICE — jedno patro stroje. Uvnitř běží .regal beze změny.
   ------------------------------------------------------------ */
.police{ position:relative }
.police + .police{ margin-top:20px }
.police-jmeno{
  display:block; padding:0 7px 9px;
  font-family:var(--pismo-mono); font-size:10px; font-weight:600;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-slaby);
}

/* ------------------------------------------------------------
   MÍSTO — jedna pozice ve stroji.
   Každá buňka mřížky je místo. Místo BUĎ drží slot, NEBO je volné.
   Sem se přesouvá pravidlo proti roztahování ze zadání 29:
   místo se natáhne na výšku řádku, slot uvnitř si drží svoji.
   ------------------------------------------------------------ */
.sklo .regal{ column-gap:14px; row-gap:0; align-items:stretch }

.misto{
  position:relative;
  display:flex; flex-direction:column;
  padding-bottom:18px;
}
.misto > .slot{ flex:none }   /* slot se NEROZTAHUJE — jen místo kolem něj */

/* lišta police — přesah 7px do mezer, takže je souvislá od stěny ke stěně */
.misto::after{
  content:""; position:absolute; left:-7px; right:-7px; bottom:7px; height:3px;
  background:var(--lista); border-radius:1px;
  box-shadow:0 1px 0 var(--sklo);
}

/* ------------------------------------------------------------
   VOLNÉ MÍSTO — holá zadní stěna stroje.
   Nemá štítek, kontrolku ani obrys. Tím se odlišuje od slotu,
   který stojí prázdný proto, že produkt existuje a nikdo ho nevede.
   ------------------------------------------------------------ */
.misto.volne .zed{
  flex:1 1 auto;
  border-radius:var(--r-data);
  background:rgba(0,0,0,.045);
}
:root[data-theme="dark"] .misto.volne .zed{ background:rgba(255,255,255,.03) }   /* změna b) */
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .misto.volne .zed{ background:rgba(255,255,255,.03) } }

/* ------------------------------------------------------------
   PANEL — ovládání stroje.
   Na širokém displeji sloupec vpravo, jinak pruh nad sklem.
   Jedna sada značek, dvě polohy. Do panelu patří JEN ovladače,
   které opravdu něco dělají.
   ------------------------------------------------------------ */
.automat{ display:grid; grid-template-columns:1fr; gap:9px }
@media (min-width:1080px){
  .automat{ grid-template-columns:1fr 112px; align-items:start }
}

.panel{
  display:flex; flex-wrap:wrap; gap:8px;
  padding:10px; border-radius:7px;
  background:var(--podklad-2); box-shadow:inset 0 0 0 1px var(--ram);
}
@media (min-width:1080px){
  .panel{ flex-direction:column; flex-wrap:nowrap }
}

/* displej — jediné místo, kde je barva pevná v obou režimech */
.panel-displej{
  flex:1 1 160px; border-radius:4px; padding:8px 10px;
  background:#1A1416; color:#E8DEDC;
  font-family:var(--pismo-mono); font-variant-numeric:tabular-nums;
}
.panel-displej b{ display:block; font-size:17px; font-weight:600; letter-spacing:-.01em }
.panel-displej span{ display:block; font-size:9.5px; letter-spacing:.1em;
  text-transform:uppercase; opacity:.6; margin-top:2px }

/* tlačítko v panelu — používá .tl a .zarovka z automat.css */
.panel .tl{
  width:100%; justify-content:flex-start; padding:8px 11px;
  font-size:13px; background:var(--plocha);
  box-shadow:inset 0 0 0 1px var(--ram-jemny);
}
.panel .tl b{ font-family:var(--pismo-mono); font-size:11px; font-weight:600;
  color:var(--text-slaby); margin-left:auto }
.panel .tl.on{ box-shadow:inset 0 0 0 1.5px var(--znacka) }
.panel .tl .zarovka.lor{ background:var(--g-lorcana) }       /* změna a) */
.panel .tl .zarovka.op { background:var(--g-one_piece) }
.panel .tl .zarovka.swu{ background:var(--g-swu) }
.panel .tl .zarovka.rb { background:var(--g-riftbound) }
.panel-deleni{ height:1px; background:var(--ram); margin:2px 0; flex:1 0 100% }

/* ------------------------------------------------------------
   KLAPKA — výdejní otvor. Nikdy není prázdný:
   když se nic nezměnilo, je to taky odpověď.
   ------------------------------------------------------------ */
.vydejna{
  margin-top:9px; border-radius:7px; overflow:hidden;
  background:var(--vnitrek); box-shadow:inset 0 0 0 1px var(--ram);
}
.usti{ height:9px; background:var(--text); opacity:.72 }
.vydej{ padding:11px; display:flex; flex-direction:column; gap:8px }
.vydej-titulek{
  font-family:var(--pismo-mono); font-size:9.5px; font-weight:600;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-slaby);
}
.polozka{
  display:flex; align-items:center; gap:10px; background:var(--plocha);
  border-radius:var(--r-data); padding:8px 11px; font-size:13.5px;
  box-shadow:inset 0 0 0 1px var(--ram-jemny); text-decoration:none; color:inherit;
}
.polozka .chip{
  font-family:var(--pismo-mono); font-size:9.5px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; padding:3px 8px; border-radius:var(--r-akce); flex:none;
}
.chip.sk  { color:var(--skladem);   background:var(--sklad-podklad) }
.chip.pryc{ color:var(--text-slaby);background:var(--sedy-podklad) }
.polozka .n{ flex:1 1 auto; min-width:0 }
.polozka .c{ font-family:var(--pismo-mono); font-weight:600;
  font-variant-numeric:tabular-nums; white-space:nowrap; font-size:12.5px }
.vydej-nic{ font-size:13.5px; color:var(--text-slaby); padding:2px 1px }
.vydej-nic b{ color:var(--text-tlumeny); font-weight:600 }

/* ============================================================
   DOROVNÁNÍ ŘÁDKU NA PLNÝ POČET MÍST
   Drobný skript, ne CSS — počet sloupců je responzivní.
   Bez JavaScriptu zůstane stroj s neúplným posledním řádkem,
   což je pořád v pořádku. Nic se nerozbije.

   function dorovnej(regal){
     regal.querySelectorAll('.misto.volne').forEach(e => e.remove())
     const sloupce = getComputedStyle(regal)
       .gridTemplateColumns.split(' ').filter(Boolean).length
     if(!sloupce) return
     const pocet = regal.querySelectorAll('.misto').length
     const chybi = (sloupce - (pocet % sloupce)) % sloupce
     for(let i=0;i<chybi;i++){
       const m = document.createElement('div')
       m.className = 'misto volne'
       m.setAttribute('aria-hidden','true')   // výplň stroje, ne obsah
       m.innerHTML = '<i class="zed"></i>'
       regal.appendChild(m)
     }
   }
   document.querySelectorAll('.regal.dorovnat').forEach(r => {
     dorovnej(r)
     new ResizeObserver(() => dorovnej(r)).observe(r)
   })
   ============================================================ */


/* ============================================================
   TOKENY NAVÍC
   Vlož do :root a do obou tmavých bloků ve styl.css
   přesně takhle, na stejná místa jako ostatní tokeny.
   ============================================================ */

/* světlý režim */
:root{
  --vnitrek:#E7DCDB;
  --lista:#CFBFBE;
}
/* tmavý — systémová volba */
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --vnitrek:#0C090B;
  --lista:#453639;
}}
/* tmavý — výslovné přepnutí */
:root[data-theme="dark"]{
  --vnitrek:#0C090B;
  --lista:#453639;
}


/* ============================================================
   ZMĚNY PRO WEB
   Claude Code, 14. 9. 2026 (stejné pravidlo: změna jen tady a s důvodem).

   a) Kontrolky her v panelu berou barvy z tokenů --g-*, ne pevné
      hodnoty. Pevné se lišily od barev her na zbytku webu (Riftbound
      #8A6A2E proti tokenu #1F6B62, jiný odstín; One Piece a SWU
      o kousek) a neměly tmavou variantu. Barva hry drží napříč webem.
   b) Světlejší zadní stěna volného místa jen v tmavém motivu. Selektor
      :root:not([data-theme="light"]) bez media dotazu platil i ve
      světlém motivu bez ručně zvoleného motivu — stejná chyba jako
      automat.css, oddíl 8 a).
   c) .polozka, .usti, .vydej a .chip.pryc tu mají jiné hodnoty než
      automat.css (oddíl 6) a hlavni-strana.css. Na webu platí tyto:
      skříň je ve styl.css vložená až za ně, a vlastnosti, které oddíl 6
      nastavuje a tady chybí (podklad .vydej, rámeček .polozka), se
      uvnitř klapky níž ruší — bez toho měla klapka odsazení 12/14 px
      a podklad místo průhledné výdejny. .chip.pryc vychází stejně:
      --text-slaby = --vyprodano v obou motivech.
   d) Filtr v panelu skrývá celé místo: .misto[hidden] a .police[hidden]
      se musí skrýt výslovně, jinak display:flex přebije atribut hidden.
      Skript dorovnání počítá jen viditelná místa.
   e) Pod 1080 px stojí panel NAD sklem, jak říká popis panelu výš
      („jinak pruh nad sklem"). Pořadí v HTML (sklo, pak panel) ho bez
      toho dávalo pod sklo, i v ukázce skrin.html.
   f) Varianta pro hlavní stranu (.hlavni-stroj, zadání 35 a 36): panel je
      vždy pruh POD sklem, na každé šířce. Nese hledání, které potřebuje
      šířku, a zboží má být na první obrazovce. Na stránce edice platí e).
   g) Řádek klapky je jeden řádek (zadání 46), na hlavní straně i na
      stránce edice z jedné funkce. Dlouhý název se neláme, ořízne se
      třemi tečkami. Čas události stojí za cenou menším písmem
      a --text-slaby: stáří údaje je u hlídače podstatné, ale nemá mít
      váhu ceny. Rozměry karty zůstávají ze skříně (8px 11px, 13.5px);
      9px 11px, které cituje zadání, je z automat.css, oddíl 6, a ten
      skříň přebíjí (viz c).
      Pod 560 px dostane text vlastní řádek přes celou šířku a odznak,
      cena a čas jdou pod něj (Karel 15. 9. 2026). Na jednom řádku
      zbývalo textu na telefonu 49–83 px, typ ani obchod nebyly vidět.
   ============================================================ */
.misto[hidden], .police[hidden]{ display:none }
.vydejna .vydej{ background:none }
.vydejna .polozka{ border:0 }
.polozka .n{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.polozka .kdy{
  font-family:var(--pismo-mono); font-size:11px; color:var(--text-slaby);
  white-space:nowrap; flex:none;
}
@media (max-width:559.98px){
  .polozka{ flex-wrap:wrap; row-gap:6px }
  .polozka .n{ order:-1; flex:1 0 100% }
  .polozka .c{ margin-left:auto }
}
@media (max-width:1079.98px){ .automat > .panel{ order:-1 } }
.hlavni-stroj .automat{ grid-template-columns:1fr }
.hlavni-stroj .automat > .panel{ order:0; flex-direction:row; flex-wrap:wrap; align-items:center }
.hlavni-stroj .panel .hledani, .hlavni-stroj .panel .vysledky{ flex:1 0 100% }
.hlavni-stroj .panel .vysledky{ margin-top:0 }
.hlavni-stroj .panel .tl{ width:auto }


/* ============================================================
   CO SE SEM ZÁMĚRNĚ NEDÁVÁ

   - Černé tělo stroje. Na bílé stránce by tři patra zabilo.
     Nese se VZTAH z fotky (tmavý vnitřek, světlé zboží),
     ne doslovná barva.
   - Nožičky, kolečka, mincovník, čtečka karet, číselná
     klávesnice. Nekreslíme automat, půjčujeme si jeho
     gramatiku. Ovladač, který nic nedělá, je kostým.
   - Čísla pozic (01–60) na liště. V automatu je vyťukáš,
     u nás bys na ně jen koukal.
   - Druhá kontrolka stavu služby na panelu. Stav služby
     nese kontrolka v logotypu (§6.59).
   - Klapka na detailu produktu. Vydávala by změny jednoho
     produktu, což je totéž, co ukazuje graf nad ní.
   ============================================================ */
/* ===== konec navrh/skrin.css ===== */
/* ===== navrh/skrin-hlava.css: vloženo doslova (zadání 33) ===== */
/* ============================================================
   PECKOMAT — JAZYK AUTOMATU, DOPLNĚK KE SKŘÍNI
   Štítek stroje, štítek police a licenční řádek.
   Navazuje na navrh/skrin.css — nasazuje se AŽ PO NĚM.

   Samostatný soubor schválně: skrin.css se mezitím mohl
   zpracovávat a nechtěl jsem do něj sahat uprostřed běhu.
   Až bude obojí nasazené, můžeš to spojit do jednoho souboru
   a napsat to do reportu.

   PRAVIDLO STEJNÉ: tenhle soubor se KOPÍRUJE, nepřepisuje.
   Žádné tokeny navíc, všechno je z automat.css a skrin.css.

   Živá ukázka: navrh/skrin.html, sekce „logo nad policemi"
   ============================================================ */


/* ------------------------------------------------------------
   HLAVA STROJE — štítek nahoře na těle skříně.
   Jeden stroj = jedna edice, proto je logo edice TADY a jednou.
   Vkládá se dovnitř .skrin, PŘED .automat.
   ------------------------------------------------------------ */
.stroj-hlava{ display:flex; align-items:center; gap:15px; padding:5px 5px 13px }

.stroj-logo{
  width:74px; flex:none; aspect-ratio:1/1;
  display:flex; align-items:center; justify-content:center;
  /* bílý podklad v OBOU motivech — licenční podmínka, nesahat */
  background:#FFFFFF; border-radius:var(--r-data); padding:7px;
  box-shadow:inset 0 0 0 1px var(--ram-jemny);
}
.stroj-logo img{ max-width:100%; height:auto; display:block }
/* Výjimka z bílého podkladu: logo, jehož nejtmavší desetina kresby nemá k bílé kontrast 4,5 : 1,
   dostane tmavou dlaždici i na štítku stroje — totéž pravidlo a táž barva jako u štítků edic
   v rozcestníku (.edice-logo-tmava, zadání 13). Bez toho jsou SOR a LOF na stránce edice
   prakticky neviditelné (zadání 56). Ostatní loga zůstávají na bílé. */
.stroj-logo.stroj-logo-tmava{ background:#141013 }

.stroj-text{ min-width:0 }
.stroj-nadrazene{
  font-family:var(--pismo-mono); font-size:9.5px; font-weight:600;
  letter-spacing:.14em; text-transform:uppercase; color:var(--text-slaby);
}
.stroj-nazev{
  font-family:var(--pismo-edice); font-weight:800; font-size:clamp(21px,3.4vw,28px);
  letter-spacing:-.025em; line-height:1.1; margin:2px 0 4px;
}
.stroj-meta{
  font-family:var(--pismo-mono); font-size:11.5px; color:var(--text-tlumeny);
  font-variant-numeric:tabular-nums;
}

/* licenční řádek — zůstává u loga, ale POD tělem stroje.
   Uvnitř skříně by se ztratil a musí být čitelný. */
.stroj-pravni{ margin:7px 2px 0; font-size:10.5px; color:var(--text-slaby) }


/* ------------------------------------------------------------
   ŠTÍTEK POLICE — proužek na hraně regálu.
   Nese to, ČÍM SE POLICE LIŠÍ, tedy typ balení.
   NIKDY logo edice: to je na celém stroji jedno.
   Nahrazuje .police-jmeno ze skrin.css.
   ------------------------------------------------------------ */
.police-stitek{
  display:flex; align-items:baseline; gap:10px; flex-wrap:wrap;
  margin:0 7px 11px; padding:5px 10px;
  border-radius:3px; background:var(--podklad-2);
  box-shadow:inset 0 0 0 1px var(--ram);
}
.police-stitek b{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700;
  letter-spacing:.13em; text-transform:uppercase; color:var(--text-tlumeny);
}
.police-stitek span{
  font-family:var(--pismo-mono); font-size:10px; color:var(--text-slaby);
}


/* ============================================================
   CO TÍMHLE ZE STRÁNKY MIZÍ

   - <h2> nadpisy sekcí nad regálem       → .police-stitek b
   - vysvětlující odstavce pod nimi       → .police-stitek span, jeden řádek
   - řádek filtrů nad regálem             → .panel (skrin.css)
   - drobný text „4/9 s nabídkou"         → .panel-displej
   - <h1> a meta edice nad automatem      → .stroj-hlava

   Venku zůstává jen navigace zpátky (to je místnost, ne stroj)
   a licenční řádek k logu.

   CO SE SEM NEDÁVÁ: logo edice nad každou policí. Na stránce
   edice jsou všechny police táž edice, takže by tam bylo
   třikrát a nic by nerozlišovalo (§6.60 — jeden nositel nápadu
   na jedno místo). Na přehledu edic a na hlavní straně, kde je
   každá police jiná edice nebo hra, to ale platí a logo tam
   patří — až se ty stránky budou dělat.
   ============================================================ */
/* ===== konec navrh/skrin-hlava.css ===== */
/* ===== navrh/baleni.css: vloženo doslova (zadání 37) ===== */
/* ============================================================
   PECKOMAT — JAZYK AUTOMATU, PÁTÁ ČÁST
   Silueta balení. Náhrada plného obdélníku v okně slotu
   tam, kde nemáme fotku.

   PRAVIDLO STEJNÉ: tenhle soubor se KOPÍRUJE, nepřepisuje.
   Názvy tříd zůstávají, žádná hodnota se nemění.

   Vybral Karel 14. 9.: varianta 3 (plná výplň, detail vyříznutý)
   u všech pěti typů. Tvary sáčku, sady, displeje a trove
   opravil podle vlastních skic — viz poznámky u každého.

   Živá ukázka: navrh/baleni-finale.html
   ============================================================ */


/* ---------- tokeny navíc ----------
   Ve světlém motivu TEPLÁ ŠEĎ, ne černá: naše neutrály jsou
   teplé a černý stín mezi nimi trčel jako cizí prvek.
   V tmavém musí zůstat černá — cokoliv světlejšího než dlaždice
   přestane být stín a stane se z toho záře zespodu.
   Hodnoty vybral Karel na živém posuvníku, nejsou to odhady.
   Vlož do styl.css do všech tří bloků. */
:root{ --stin-baleni:rgba(110,92,94,.35) }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --stin-baleni:rgba(0,0,0,.56);
}}
:root[data-theme="dark"]{ --stin-baleni:rgba(0,0,0,.56) }


/* ---------- základ ---------- */
/* Silueta vyplňuje CELÉ okno, ne jeho odsazený vnitřek — jinak se
   vycentruje a společná základna se ztratí. V SVG k tomu patří
   preserveAspectRatio="xMidYMax meet". Obojí nebo nic. */
.baleni{ position:absolute; inset:0; width:100%; height:100%; color:var(--g-lorcana) }
.baleni.op{ color:var(--g-one_piece) }
.baleni.swu{ color:var(--g-swu) }
.baleni.rb{ color:var(--g-riftbound) }

.baleni .telo{ fill:currentColor; opacity:.92 }

/* rýhy a švy se kreslí barvou PLOCHY dlaždice — funguje ve světlém
   i tmavém motivu samo, bez jediné podmínky. Nesahat. */
.baleni .ryha      { stroke:var(--plocha); stroke-width:2.5; fill:none; stroke-linecap:round }
.baleni .ryha-tenka{ stroke:var(--plocha); stroke-width:2;   fill:none; stroke-linecap:round }
.baleni .ryha-tenka polygon{ fill:none }

/* výřez — díra skrz obal (euroslot v chlopni sady) */
.baleni .vyrez rect{ fill:var(--plocha) }


/* ---------- kontaktní stín ----------
   Leží POD předmětem na základně, není posunutý do strany.
   Vržený stín by z ploché siluety udělal plastiku.

   OBDÉLNÍKOVÝ, ne elipsa: krabice stojí na obdélníku, elipsa je
   stín kuličky a pod hranatou věcí říká „tohle se kutálí".
   Měkkost dělají tři stupně s klesající sytostí — žádný filtr,
   žádné defs, žádná id. Výšku 1,65× vybral Karel na posuvníku;
   zkoušeli jsme 0,15 a 0,20 sytosti a obojí bylo pod prahem
   viditelnosti. NESNIŽUJ to „aby to bylo decentnější". */
.baleni .stin rect{ fill:var(--stin-baleni) }
.baleni .stin .st3{ opacity:.25 }
.baleni .stin .st2{ opacity:.45 }
.baleni .stin{ transform:scaleY(1.65); transform-origin:50% 128px; transform-box:view-box }


/* ---------- stavy ----------
   Silueta se chová jako fotka, protože fotku nahrazuje.
   Nevymýšlí si vlastní stavy, dědí je ze slotu.

   Obrys je vybledlý na 32 % (Karel 14. 9.) — rozdíl mezi
   „dá se koupit" a „nedá" musí být vidět koutkem oka, bez
   čtení štítku. NÍŽ NEŽ ~25 % nejít: pak přestane být poznat,
   CO tam není, a „nikdo nevede booster" je jiná informace
   než „nikdo nevede karton".

   Stín mají jen ty stavy, které na polici opravdu stojí. */
.slot.brzy .baleni .telo,
.slot.prazdny .baleni .telo{
  fill:none; stroke:currentColor; stroke-width:3; opacity:.32;
}
.slot.brzy .baleni .ryha, .slot.brzy .baleni .ryha-tenka,
.slot.prazdny .baleni .ryha, .slot.prazdny .baleni .ryha-tenka{
  stroke:currentColor; opacity:.28;
}
.slot.brzy .baleni .vyrez rect, .slot.prazdny .baleni .vyrez rect{
  fill:none; stroke:currentColor; stroke-width:1.6; opacity:.28;
}
.slot.brzy .baleni .stin, .slot.prazdny .baleni .stin{ display:none }
.slot.pryc .baleni{ filter:grayscale(1); opacity:.42 }


/* ============================================================
   VELIKOST SE POČÍTÁ Z OBJEMU, ne z nejdelšího rozměru.

   Původně z nejdelšího rozměru — a trove (255 mm) vycházela
   skoro stejně velká jako karton (300 mm), přestože se objemem
   liší šestkrát. Velikost u nás znamená „kolik toho v krabici
   je". To je objem. Opravil Karel 14. 9.

     typ       rozměr                objem     nakresleno (j.)
     sáček     70 × 110 × 8 mm       0,06 l    38,8 × 60,9
     sada      95 × 135 × 35 mm      0,45 l    56,3 × 71,4 *
     displej   137 × 92 × 70 mm      0,88 l    75,3 × 70,8 *
     trove     255 × 180 × 60 mm     2,75 l    82,5 × 58,2
     karton    300 × 290 × 210 mm    18,3 l    96,0 × 92,8

   * U sady a displeje řídí velikost CELÁ SILUETA včetně
     nástavků (chlopeň, odklopené víko), ne jen krabice —
     jinak by sada s chlopní přerostla displej, který má
     dvojnásobný objem.

   Vzorec: (objem / objem kartonu)^(1/3), umocněno na 0,24,
   krát 96. Zploštění 0,24 je proto, aby sáček nezmizel.

   Základna je u všech y = 128 — stojí na jedné polici.
   ============================================================ */


/* ============================================================
   PĚT TVARŮ — zkopíruj DOSLOVA, i souřadnice.
   viewBox vždycky "0 0 100 140" (poměr karty 63 × 88 mm).

   Tři z pěti tvarů opravil Karel podle vlastních skic:

   SÁČEK má crimp NAHOŘE I DOLE — pás oddělený švem a v něm
   devět tenkých rýh (šířka 1), které šev NEPŘESAHUJÍ.
   Kreslil jsem to nejdřív jako zub; to je ale trhací
   perforace, ne zatavení. Nosič tvaru jsou ty dva švy;
   rýhy jsou textura, která se na telefonu smí slít.
   NEZAHUŠŤUJ je a nenatahuj přes šev.

   SADA má nad krabicí ZÁVĚSNOU CHLOPEŇ s euroslotem —
   samostatný kus lepenky vzadu, ne pás v čele krabice.
   Chlopeň mění siluetu a pozná se i ve vybledlém obrysu.
   Horní plocha je u sady POLOVIČNÍ proti ostatním krabicím
   (0,065 místo 0,13) — rozhodl Karel 14. 9.

   DISPLEJ je OTEVŘENÝ, víko odklopené dozadu, shora vidět
   dvě řady sáčků. Původně to byla zavřená krabice, ze které
   trčely sáčky — tak žádný displej nevypadá, sáčky by musely
   prorazit víko. Moje vymyšlenina.

   TROVE nemá ucho, to jsem si vymyslel taky. Je to velká
   plochá krabice; víko je tenký pruh nahoře, ne půlka
   krabice, jinak vypadá jako zvětšená krabička.

   KRABICE MAJÍ HORNÍ PLOCHU v perspektivě, SÁČEK NE —
   pytlík nemá víko, na které by se dalo koukat shora.
   Není to výjimka ani nedodělek, je to pravidlo.

   Každé SVG nese aria-hidden="true": informaci nese štítek,
   ne obrázek.
   ============================================================

   SÁČEK  (booster)
     <svg class="baleni" viewBox="0 0 100 140"
          preserveAspectRatio="xMidYMax meet" aria-hidden="true">
       <g class="stin"><rect class="st3" x="26.6" y="125.0" width="46.8" height="6" rx="3"/><rect class="st2" x="28.6" y="125.75" width="42.8" height="4.5" rx="2.2"/><rect class="" x="30.6" y="126.5" width="38.8" height="3" rx="1.5"/></g><rect class="telo" x="30.6" y="67.1" width="38.8" height="60.9" rx="2"/>
       <g class="ryha-tenka" style="stroke-width:1"><path d="M34.1 68.0 V73.7"/><path d="M34.1 121.4 V127.1"/><path d="M38.1 68.0 V73.7"/><path d="M38.1 121.4 V127.1"/><path d="M42.0 68.0 V73.7"/><path d="M42.0 121.4 V127.1"/><path d="M46.0 68.0 V73.7"/><path d="M46.0 121.4 V127.1"/><path d="M50.0 68.0 V73.7"/><path d="M50.0 121.4 V127.1"/><path d="M54.0 68.0 V73.7"/><path d="M54.0 121.4 V127.1"/><path d="M58.0 68.0 V73.7"/><path d="M58.0 121.4 V127.1"/><path d="M61.9 68.0 V73.7"/><path d="M61.9 121.4 V127.1"/><path d="M65.9 68.0 V73.7"/><path d="M65.9 121.4 V127.1"/></g>
       <path class="ryha" d="M30.6 74.6 H69.4 M30.6 120.5 H69.4"/>
     </svg>

   KRABIČKA  (balíček)
     <svg class="baleni" viewBox="0 0 100 140"
          preserveAspectRatio="xMidYMax meet" aria-hidden="true">
       <g class="stin"><rect class="st3" x="15.6" y="125.0" width="68.9" height="6" rx="3"/><rect class="st2" x="17.6" y="125.75" width="64.9" height="4.5" rx="2.2"/><rect class="" x="19.6" y="126.5" width="60.9" height="3" rx="1.5"/></g><rect class="telo" x="25.7" y="56.6" width="48.7" height="15.0" rx="2"/><polygon class="telo" points="19.6,75.5 80.5,75.5 74.4,71.6 25.7,71.6"/><rect class="telo" x="19.6" y="75.5" width="60.9" height="52.5" rx="3"/>
       <g class="vyrez"><rect x="41.7" y="63.65" width="16.6" height="2.4" rx="1.2"/><rect x="47.5" y="60.65" width="5.0" height="5.0" rx="2.4"/></g>
       <path class="ryha" d="M25.7 71.6 H74.4"/>
       <path class="ryha" d="M19.6 75.5 H80.5"/>
     </svg>

   DISPLEJ  (display)
     <svg class="baleni" viewBox="0 0 100 140"
          preserveAspectRatio="xMidYMax meet" aria-hidden="true">
       <g class="stin"><rect class="st3" x="8.4" y="125.0" width="83.3" height="6" rx="3"/><rect class="st2" x="10.4" y="125.75" width="79.3" height="4.5" rx="2.2"/><rect class="" x="12.4" y="126.5" width="75.3" height="3" rx="1.5"/></g><rect class="telo" x="19.9" y="57.2" width="60.3" height="27.6" rx="2"/><polygon class="telo" points="12.4,94.7 87.7,94.7 80.2,84.8 19.9,84.8"/><rect class="telo" x="12.4" y="94.7" width="75.3" height="33.3" rx="2"/>
       <g class="ryha-tenka"><polygon points="15.4,93.1 47.8,93.1 47.8,86.4 21.9,86.4"/><polygon points="52.2,93.1 84.7,93.1 78.2,86.4 52.2,86.4"/></g>
       <path class="ryha" d="M12.4 94.7 H87.7"/>
       <path class="ryha-tenka" d="M19.9 84.8 H80.2"/>
     </svg>

   TROVE  (trove)
     <svg class="baleni" viewBox="0 0 100 140"
          preserveAspectRatio="xMidYMax meet" aria-hidden="true">
       <g class="stin"><rect class="st3" x="4.8" y="125.0" width="90.5" height="6" rx="3"/><rect class="st2" x="6.8" y="125.75" width="86.5" height="4.5" rx="2.2"/><rect class="" x="8.8" y="126.5" width="82.5" height="3" rx="1.5"/></g><polygon class="telo" points="8.8,69.8 91.3,69.8 83.1,62.2 17.0,62.2"/><rect class="telo" x="8.8" y="69.8" width="82.5" height="58.2" rx="3"/>
       <path class="ryha-tenka" d="M8.8 77.4 H91.3"/>
       <path class="ryha" d="M8.8 69.8 H91.3"/>
     </svg>

   KARTON  (karton)
     <svg class="baleni" viewBox="0 0 100 140"
          preserveAspectRatio="xMidYMax meet" aria-hidden="true">
       <g class="stin"><rect class="st3" x="-2.0" y="125.0" width="104.0" height="6" rx="3"/><rect class="st2" x="0.0" y="125.75" width="100.0" height="4.5" rx="2.2"/><rect class="" x="2.0" y="126.5" width="96.0" height="3" rx="1.5"/></g><polygon class="telo" points="2.0,35.2 98.0,35.2 88.4,24.9 11.6,24.9"/><rect class="telo" x="2.0" y="35.2" width="96.0" height="92.8" rx="3"/>
       <path class="ryha" d="M50.0 35.2 V128.0"/>
       <path class="ryha" d="M2.0 77.0 H98.0"/>
       <path class="ryha-tenka" d="M50.0 46.2 h11 M50.0 115.0 h11"/>
       <path class="ryha" d="M2.0 35.2 H98.0"/>
       <path class="ryha" d="M50.0 35.2 L50.0 24.9"/>
     </svg>
   ============================================================ */


/* ============================================================
   MAPOVÁNÍ TYPU BALENÍ NA TVAR

     booster, sleeved booster        -> sáček
     balíček, starter, sada, deck    -> sada
     display, boostery               -> displej
     trove, gift, kolekce            -> trove
     karton, case                    -> karton

   Dej to do JEDNÉ tabulky v kódu, ne do podmínek rozesetých
   po šabloně. Co nesedí na žádný tvar, dostane SADU — ne
   prázdné okno a ne starý obdélník. Kolik takových případů
   je, chci vědět v reportu.
   ============================================================ */


/* ============================================================
   CO SE SEM ZÁMĚRNĚ NEDÁVÁ

   - Silueta karty. Sledujeme ZAPEČETĚNÉ zboží, ne jednotlivé
     karty. A karta v našem jazyku už jednu práci má: poměr
     okna 1 : 1,4 JE poměr karty. Navíc by vypadala stejně
     u ceny 199 i 18 900, tedy by nenesla nic.
   - Balení konkrétního výrobce. Tvary jsou obecné — proto je
     smíme kreslit. Žádné logo, žádný skutečný obal.
   - Obrys místo výplně u běžných slotů. Obrys u nás UŽ znamená
     „tohle nikdo nevede".
   - Silueta přes fotku. Kreslí se JEN tam, kde fotka chybí.
   - Tenčí horní plocha než 0,065. Pak se z perspektivy stane
     rušivá dvojitá linka u horní hrany a vypadá to jako chyba
     v kresbě; pak je čistší 3D zrušit úplně.
   ============================================================ */
/* ===== konec navrh/baleni.css ===== */
/* Doplněk z navrh/multipack.html (zadání 39, odd. 3): kusy multipacku odděluje obrys barvou
   dlaždice, jinak se překryté tvary slijí v jednu skvrnu. Žádný filtr, žádné defs ani id. */
.baleni .obrys{ stroke:var(--plocha); stroke-width:2.2; paint-order:stroke fill }
/* Rozvržení kolem skříně (mimo vloženou kopii). */
.edice-stroj{ margin:26px 0 0 }

/* Hlavní strana je stroj (zadání 35). Jen skládání komponent ze skrin.css a skrin-hlava.css. */
.hlavni-stroj{ margin:26px 0 0 }
.hlavni-stroj .stroj-text{ flex:1 1 auto }
.hlavni-stroj .displej{ margin:10px 0 0 }
.hlavni-cteni{ margin-top:10px; padding-top:8px; border-top:1px solid var(--ram-jemny) }
.hlavni-cteni b{ color:var(--text); font-weight:600 }
.police-stitek a{ color:inherit; text-decoration:none }
.police-stitek a:hover{ color:var(--text) }
.police-znak{ width:10px; height:10px; border-radius:3px; flex:none; align-self:center; background:var(--g-lorcana) }
.police-znak.op{ background:var(--g-one_piece) }
.police-znak.swu{ background:var(--g-swu) }
.police-znak.rb{ background:var(--g-riftbound) }
.hlavni-pata{ text-align:center; margin-top:10px }
/* Hlavička nad strojem (zadání 35, verze 14. 9.): řádek her a <h1>, pod nimi zatím nic. */
.hlavni-hlavicka .stroj-nazev{ font-size:clamp(28px,5vw,44px); margin:26px 0 0 }
/* Druhý řádek pod nadpisem (zadání 41, bod 2, navrh/co-to-vlastne-je.html, varianta 3). Počet obchodů
   z téhož zdroje jako titulek pásu obchodů; data-pocet-obchodu nese jen titulek, kontrola webu čeká jedno. */
.hlavni-hlavicka .hlavni-podnadpis{ margin:8px 0 0; max-width:60ch; font-size:15px; line-height:1.45;
  color:var(--text-tlumeny); text-wrap:pretty }
/* Police hlavní strany na jeden řádek (zadání 36): co se nevejde, schová skript panelu. */
.misto[data-za-radkem]{ display:none }
/* Klávesnice na boku automatu (zadání 38, hodnoty z navrh/klavesnice.html). Třídy jsou přejmenované
   na .klavesnice a .klavesa-…: .panel, .stitek, .kod a .pruh už web používá pro jiné věci.
   Bok má 208 px, pod 760 px jde klávesnice nad sklo do dvou sloupců (zmenšený bok by na telefonu
   sebral třetinu šířky). Jediná animace klávesy je propad o 2 px při stisku. */
.hlavni-telo{ display:grid; grid-template-columns:1fr 208px; gap:14px; align-items:start }
.hlavni-levy{ min-width:0 }
.klavesnice{ background:var(--podklad-2); border:1px solid var(--ram); border-radius:var(--r-data);
  padding:12px; display:grid; gap:9px; align-content:start }
.klavesnice-stitek{ font-family:var(--pismo-mono); font-size:10.5px; letter-spacing:.08em; color:var(--text-slaby);
  text-transform:uppercase; padding:0 2px 2px; border-bottom:1px solid var(--ram-jemny) }
.klavesa{ position:relative; display:grid; gap:3px; text-align:left; padding:11px 11px 10px 14px;
  color:var(--text); text-decoration:none; background:var(--plocha);
  border:1px solid var(--ram); border-radius:var(--r-data); border-bottom-width:3px;
  transition:transform 90ms ease, border-color 120ms ease }
.klavesa:hover{ border-color:var(--barva) }
.klavesa:active{ transform:translateY(2px); border-bottom-width:1px; margin-bottom:2px }
.klavesa:focus-visible{ outline:2px solid var(--znacka); outline-offset:2px }
.klavesa-kod{ font-family:var(--pismo-mono); font-size:10.5px; font-weight:500; color:var(--barva); letter-spacing:.06em }
.klavesa-jmeno{ font-size:14px; font-weight:600; letter-spacing:-.01em; line-height:1.2 }
.klavesa-stav{ font-size:11.5px; color:var(--text-tlumeny); font-variant-numeric:tabular-nums }
.klavesa-pruh{ position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--barva);
  border-radius:var(--r-data) 0 0 var(--r-data) }
.klavesnice-podpis{ font-size:11.5px; color:var(--text-slaby); text-align:center; margin:2px 0 0 }
@media (max-width:760px){
  .hlavni-telo{ grid-template-columns:1fr }
  .klavesnice{ order:-1; grid-template-columns:repeat(2,1fr) }
  /* Na telefonu bez nápisu „Vyber hru" a „Stiskni klávesu." (Karel 14. 9.): klávesy nad sklem jinak
     odsunou první cenu pod první obrazovku. Jméno „Vyber hru" dál nese aria-label klávesnice. */
  .klavesnice-stitek, .klavesnice-podpis{ display:none }
}
@media (prefers-reduced-motion: reduce){ .klavesa{ transition:none } }
/* Přejezd kamery (zadání 38): časování z navrh/klavesnice.html. 300 ms rozhodl Karel 14. 9. Staré odchází
   rychleji, než nové přichází — bez toho se obojí překrývá a přejezd je kalný. Zapíná ho jen
   @view-transition v hlavičce hlavní strany, stránky hry a detailu edice (sablony.PREJEZD_HEAD). */
:root{ --t-prejezd:300ms }
::view-transition-group(zoom){ animation-duration:var(--t-prejezd); animation-timing-function:cubic-bezier(.4,0,.2,1) }
::view-transition-old(zoom){ animation-duration:calc(var(--t-prejezd) * .45) }
::view-transition-new(zoom){ animation-duration:var(--t-prejezd); animation-delay:calc(var(--t-prejezd) * .25);
  animation-fill-mode:backwards }
/* Drobečky na vnitřních stránkách (zadání 38, navrh/klavesnice.html): cesta zpátky na automat. */
.drobecky{ display:flex; align-items:center; gap:9px; flex-wrap:wrap; font-size:13px; color:var(--text-slaby);
  margin:22px 0 18px; min-height:22px }
.drobecky a{ color:var(--znacka); text-decoration:none; border-bottom:1px solid transparent }
.drobecky a:hover{ border-bottom-color:currentColor }
.drobecky [aria-current]{ color:var(--text-slaby) }
/* Štítek slotu je cenovka (zadání 36): v úzkém slotu jen cena; typ balení zůstává v title
   a aria-label okna. Práh je na šířce SLOTU, ne okna — jakmile je místo, typ se vrátí sám.
   U „brzy" a „mimo provoz" nese kód datum a čas: ten zůstává a v úzkém slotu ustoupí cena
   (u nevydaného zboží je to skoro vždy „—", přesná cena je na detailu). */
.slot{ container-type:inline-size }
@container (max-width:119.98px){
  .slot:not(.brzy):not(.mimo) .stitek .kod{ display:none }
  .slot.brzy .stitek .cena, .slot.mimo .stitek .cena{ display:none }
}
/* Název edice ve slotu (zadání 41, navrh/co-to-vlastne-je.html, návrh A). Jen na hlavní straně, kde
   police míchá edice; na stránce edice by se na každém slotu opakovala táž edice ze štítku stroje.
   Třída .edice-radek z náhledu už patří řádkům katalogu edic (§6.65), proto .slot-edice.
   Jeden řádek zkrácený tečkami; plný název zůstává v title a aria-label okna. */
.slot-edice{ padding:6px 9px 5px; font-family:var(--pismo-ui); font-size:10.5px; font-weight:600; line-height:1.2;
  color:var(--text); background:var(--plocha); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
/* Na telefonu tři místa v řádku a police má jen ten jeden řádek (zadání 35, bod 5; maketa 392 px).
   „of" počítá jen viditelná místa, takže filtr „Jen skladem" řádek nerozbije; prohlížeč bez
   podpory selektoru pravidlo zahodí a ukáže všech šest míst. */
@media (max-width:499.98px){
  .hlavni-stroj .sklo .regal{ grid-template-columns:repeat(3,minmax(0,1fr)) }
  .hlavni-stroj .sklo .misto:nth-child(n+4 of .misto:not([hidden])){ display:none }
}


/* ============================================================
   VÝDEJNÍ STRÁNKA /skladem/ (zadání 50)
   Claude Code, 16. 9. 2026 (stejné pravidlo: změna jen tady a s důvodem).

   a) Klávesnice her z hlavní strany je tu tlačítkem, ne odkazem, protože
      hru vybírá filtrem. <button> nedědí písmo a nemá plnou šířku jako
      <a> v mřížce klávesnice; vzhled klávesy zůstává z oddílu klávesnice.
   b) Stisknutá klávesa zůstane stisknutá (týž posun jako :active) a nese
      barvu hry na rámečku. Volba se mačká, nezaškrtává.
   c) Klávesy tvarů jsou tlačítka panelu (.tl, stisknutá .on jako na hlavní
      straně) s obrysem balení a počtem strojopisem. Panel stojí nad regálem
      a volby se v něm zalamují. Obrys je silueta .baleni ze slotu: ta je
      absolutně umístěná, takže její obal musí být umístěný, jinak se
      roztáhne přes celou stránku; barva tlumená, ne barva hry.
   ============================================================ */
button.klavesa{ font:inherit; width:100%; cursor:pointer }
.klavesa[aria-pressed="true"]{ transform:translateY(2px); border-bottom-width:1px; margin-bottom:2px;
  border-color:var(--barva) }
.vydejni-stroj .automat > .panel{ flex-direction:row; flex-wrap:wrap; align-items:center }
.klavesy-tvaru{ display:flex; flex-wrap:wrap; gap:8px; flex:1 1 100% }
.klavesa-tvaru .tvar-obrys{ position:relative; display:inline-block; width:22px; height:22px; flex:none }
.klavesa-tvaru .tvar-obrys .baleni{ color:var(--text-tlumeny) }


/* ============================================================
   HLAVNÍ STRANA PO PŘESTAVBĚ (zadání 58, bod 3)
   Pořadí rozhodl Karel 19. 9. 2026: nadpis → hledání → co se právě
   stalo → věta z dat → stroj s policemi. Hledání bylo pod mřížkou,
   tedy pod ohybem, a první výzva stránky nesmí být tam, kam se musí
   scrollovat.

   Panel tím vystupuje ze skříně. Metafora stroje se tím nemění:
   ovládací panel nahoře, prosklená vitrína pod ním. Uvnitř skříně
   zůstává panel na stránkách edic — tam je pořadí opačné a správné.
   ============================================================ */
.hlavni-panel{ margin:14px 0 4px; border-radius:var(--r-data);
  background:var(--plocha); box-shadow:inset 0 0 0 1px var(--ram); padding:12px;
  display:flex; flex-wrap:wrap; align-items:center; gap:10px;
  /* `.panel` se od 1080 px staví do sloupce (je to bok stroje). Tenhle panel leží
     nad vitrínou na celou šířku, takže zůstává řádkem — jinak se hledání smrskne
     na třetinu a tlačítka se seřadí pod sebe. */
  flex-direction:row }
.hlavni-panel .hledani, .hlavni-panel .vysledky{ flex:1 0 100% }
.hlavni-panel .vysledky{ margin-top:0 }
.hlavni-panel .tl{ width:auto }

/* Pás „Právě teď" — tytéž řádky jako v klapce, jen bez výdejního ústí:
   mimo skříň není z čeho vydávat a ústí by bylo ozdoba bez významu. */
.prave-ted{ margin:16px 0 6px }
.prave-ted .vydej-titulek{ margin:0 0 7px }
.prave-ted .pas-udalosti{ margin-top:0 }

/* Věta z dat nahradila čtyři čísla; čísla zůstávají pod ní menší (bod 4). */
.hlavni-veta{ margin:18px 0 6px; font-size:19px; line-height:1.45; color:var(--text) }
.displej-maly{ margin:0 0 6px; gap:18px }
.displej-maly b{ font-size:17px }

/* „Stiskni klávesu." nahradila nápověda, co klávesy dělají. Na dotykovém
   displeji se žádná klávesa nemačká, tak tam není (bod 6). */
@media (max-width:759.98px){ .klavesnice-podpis{ display:none } }


/* ============================================================
   ROZPTYL JAKO SEZNAM NABÍDEK (zadání 58, bod 4)
   Do 19. 9. 2026 stály na produktu dva seznamy týchž obchodů:
   tabulka nabídek a pod ní rozptyl. Teď je to jeden — řádek nese
   jméno, doménu, odznak ověřeného skladu, bod na ose, cenu, tvar
   dostupnosti a čas čtení. Obchod je na stránce jednou.

   Proti holému rozptylu se mění jen sazba buněk: krajní sloupce
   přestávají být jednořádkové. Bod, osa i barvy zůstávají.
   ============================================================ */
.rozptyl.seznam .rozptyl-radek{
  grid-template-columns: minmax(170px,1.1fr) minmax(80px,1fr) minmax(140px,auto);
  align-items:start; padding:11px 10px;
}
.rozptyl.seznam .rozptyl-radek .obchod{
  display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 8px; white-space:normal;
}
.rozptyl.seznam .rozptyl-radek .obchod small{
  font-family:var(--pismo-mono); font-size:11px; font-weight:400; color:var(--text-slaby);
}
.rozptyl.seznam .rozptyl-radek .drat{ margin-top:9px }
.rozptyl.seznam .rozptyl-radek .cena{
  display:flex; flex-direction:column; align-items:flex-end; gap:5px; white-space:normal;
}
.rozptyl.seznam .rozptyl-radek .cena small{
  display:block; font-size:11px; font-weight:400; color:var(--text-slaby);
}
.rozptyl.seznam .rozptyl-radek .kdy{
  font-family:var(--pismo-mono); font-size:10.5px; color:var(--text-slaby); font-weight:400;
}
.rozptyl.seznam .rozptyl-radek.bez-ceny .drat{ background:none }
.rozptyl.seznam .nabidka-nej{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--skladem);
}

/* Odznak místo šedé věty u každého řádku. Je to fakt, ne pochvala:
   „ověřen" znamená, že dostupnost čteme z textu stránky (zadání 04, bod 3). */
.overeno{
  font-family:var(--pismo-mono); font-size:10px; font-weight:700; letter-spacing:.04em;
  color:var(--skladem); background:var(--sklad-podklad);
  border-radius:var(--r-data); padding:1px 6px; white-space:nowrap;
}

@media (max-width:559.98px){
  /* Na mobilu se drát mezi dvěma textovými sloupci zmáčkne na nic — má vlastní řádek. */
  .rozptyl.seznam .rozptyl-radek{ grid-template-columns:1fr auto; row-gap:8px }
  .rozptyl.seznam .rozptyl-radek .drat{ grid-column:1 / -1; grid-row:2; margin-top:0 }
  .rozptyl.seznam .rozptyl-osa{ display:none }
}

/* Dotykové cíle (zadání 58, bod 5): ovladače mají na dotykové šířce aspoň 44 px.
   Změřeno 19. 9. 2026 na 390 px: přepínač motivu měl 31 px, tlačítka panelu 30 px.
   Netýká se odkazů uvnitř vět — tam by z 44 px byly řídké odstavce. */
@media (max-width:759.98px){
  .tl, .prepinac{ min-height:44px }
  .panel .tl, .hlavni-panel .tl{ padding-top:0; padding-bottom:0 }
}


/* ============================================================
   DLAŽDICE, KTERÁ ŘEKNE CO, ZA KOLIK A JESTLI TO JDE KOUPIT
   (zadání 59, §6.90)

   Do 19. 9. 2026 nesl největší text dlaždice EDICI, takže čtyři
   dlaždice vedle sebe říkaly „Attack of the Vine!" a lišily se
   jen šedým strojopisem „booster / sada / trove / display".
   Rozlišující údaj byl nejmenší písmo na dlaždici. Teď je pořadí
   shora: typ produktu → edice → cena → stav slovy.

   Typ se nezalamuje do výpustky, ale na dva řádky: výpustka bez
   celého jména v title je přetečení (kontrola v kontrola_webu),
   a jméno produktu tam nepatří — to je v okně.
   ============================================================ */
.stitek{
  display:flex; flex-direction:column; align-items:stretch; justify-content:flex-start;
  gap:1px; padding:8px 9px 9px;
}
.slot-typ{
  font-family:var(--pismo-ui); font-size:12.5px; font-weight:700; line-height:1.18;
  color:var(--text); overflow-wrap:anywhere;
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden;
}
.slot .slot-edice{
  padding:0; background:none; font-size:10.5px; font-weight:400; color:var(--text-slaby);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.slot-cena{
  margin-top:3px; font-family:var(--pismo-mono); font-size:13.5px; font-weight:600;
  font-variant-numeric:tabular-nums; color:var(--text);
}
.slot-stav{ font-family:var(--pismo-ui); font-size:10.5px; color:var(--text-slaby) }
.slot.skladem .slot-stav{ color:var(--skladem) }
.slot.brzy .slot-stav{ color:var(--predobjednavka) }
.stitek.nej .slot-cena{ color:var(--skladem) }

/* Nejužší sloty (police na telefonu): edice ustoupí, typ a cena zůstanou — to jsou
   dvě ze tří otázek a třetí nese barva stavu. */
@container (max-width:119.98px){
  .slot .slot-edice{ display:none }
  .slot-typ{ font-size:11.5px; -webkit-line-clamp:2 }
}


/* ============================================================
   HLAVNÍ STRANA: AUTOMAT PRVNÍ (zadání 59, §6.90)

   Karel 19. 9.: „chci mít automat na prvním místě… do bočního
   panelu dát to, co je teď na prvním místě."

   Pod hledáním je proto rovnou stroj. Souhrnná věta a čtyři čísla
   jsou jeden úzký pás nad ním, ne dva bloky pod sebou, a „Právě
   teď" se přestěhovalo do bočního sloupce pod „Vyber hru".
   Běžící pás obchodů zůstává dole beze změny — Karel ho chce.
   ============================================================ */
.hlavni-pas{
  display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 18px;
  margin:12px 0 10px; padding:0 2px;
}
.hlavni-pas .hlavni-veta{ margin:0; font-size:16px; line-height:1.4; flex:1 1 320px }
.hlavni-pas .displej-maly{ margin:0; gap:14px; flex:0 1 auto }
.hlavni-pas .displej-maly b{ font-size:15px }

.hlavni-bok{ display:grid; gap:12px; align-content:start; min-width:0 }
.prave-ted{ margin:0; min-width:0 }
.prave-ted .vydej-titulek{ margin:0 0 6px }
.prave-ted .pas-udalosti{ margin-top:0 }
/* V bočním sloupci je na dvouřádkovou kartu málo místa: řádek klapky se tu sází
   kompaktně, delší jméno produktu se zkrátí výpustkou a celé zůstává v title. */
.hlavni-bok .prave-ted .polozka{ flex-wrap:wrap; row-gap:3px; padding:6px 8px; font-size:12px }
.hlavni-bok .prave-ted .polozka .n{ order:-1; flex:1 0 100%; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap }
.hlavni-bok .prave-ted .polozka .c{ margin-left:auto }
.prave-ted-vic{ display:inline-block; margin-top:7px; font-size:11.5px; color:var(--text-slaby) }

@media (max-width:760px){
  /* Boční sloupec jde POD automat (§6.90). Do zadání 59 stála klávesnice nad sklem;
     „automat první" to obrací a na telefonu to znamená stroj hned pod hledáním. */
  .hlavni-bok{ order:1 }
  .hlavni-bok .klavesnice{ order:0; grid-template-columns:repeat(2,1fr) }
}
@media (max-width:640px){
  /* Tři pohyby, ne pět: na telefonu je zbytek stránky důležitější než historie. */
  .hlavni-bok .prave-ted .polozka:nth-child(n+4){ display:none }
}


/* ============================================================
   PANEL EDICE NAD MŘÍŽKOU (zadání 59, §6.90)

   Panel stál v bočním sloupci širokém 112 px. „Od nejlevnějšího"
   je 106 px textu a přetékalo přes okraj pilulky, „Všechna balení"
   se lámalo na dva řádky. Změřeno 19. 9. 2026 kontrolou přetečení.

   Filtry proto jdou do vodorovné řady nad mřížku; pilulka nemá
   pevnou šířku a text se nezalamuje. Displej „N / M s nabídkou"
   má výšku podle obsahu, ne podle sloupce — dřív z něj byla velká
   prázdná černá plocha.
   ============================================================ */
@media (min-width:1080px){
  .automat{ grid-template-columns:1fr }
}
.panel-nahore{ flex-direction:row; flex-wrap:wrap; align-items:center }
.panel-nahore .panel-displej{ flex:0 0 auto; align-self:center }
.panel-nahore .tl{ width:auto; flex:0 0 auto; white-space:nowrap }
.panel-nahore .panel-deleni{ display:none }


/* ============================================================
   AUTOMAT — hlavní strana (zadání 63, §6.92)

   Převzato z návrhu `navrh/peckomat-automat-v2.html`, který
   Karel schválil předáním. Proti němu se změnilo jen to, co
   plyne z toho, že tohle je sdílený stylopis, ne jedna stránka:

   * `.panel` návrhu je tu `.panel-stroje` — `.panel` už patří
     filtrům na stránkách edic;
   * písmeno police bere text z `--barva-text`, protože na SWU
     žluté a Riftbound oranžové by bílá měla kontrast pod 3;
   * pozice je odkaz (bez JS vede na produkt), ne tlačítko;
   * pravidla o siluetách a `jen-pro-ctecky` se nekopírují,
     web je má.
   ============================================================ */
/* ================= AUTOMAT ================= */
.automat.automat-hlavni{position:relative;margin-inline:auto;max-width:1200px;border-radius:26px 26px 14px 14px;padding:14px 14px 0;
  background:linear-gradient(90deg,var(--skrin-stin),var(--skrin) 3%,var(--skrin-svetla) 50%,var(--skrin) 97%,var(--skrin-stin));
  box-shadow:0 1px 0 var(--skrin-svetla) inset,0 30px 50px -30px rgba(26,20,22,.55),0 0 0 1px var(--ram-silny)}
/* korunka: podsvícená cedule */
.automat-hlavni .korunka{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;justify-content:space-between;border-radius:16px 16px 8px 8px;padding:12px 16px;margin-bottom:12px;
  background:linear-gradient(180deg,#2B2226,#1A1417);color:#F6EDEB;box-shadow:inset 0 0 0 1px rgba(255,255,255,.06),inset 0 -2px 0 rgba(0,0,0,.4)}
.automat-hlavni .korunka .jmeno{display:flex;align-items:center;gap:12px}
.automat-hlavni .korunka .jmeno b{font:800 32px/1 var(--pismo-edice);letter-spacing:-.035em;color:#FFF6F3;display:inline-flex;align-items:baseline;text-shadow:0 0 16px rgba(255,220,210,.25)}
.automat-hlavni .korunka .okno-o{display:inline-block;width:.62em;height:.72em;border-radius:.1em;border:.1em solid currentColor;position:relative;transform:translateY(.04em);margin:0 .04em;background:#1A1417}
.automat-hlavni .korunka .okno-o::after{content:"";position:absolute;inset:.11em;border-radius:.04em;background:#E4818B;box-shadow:0 0 12px rgba(228,129,139,.8)}
.automat-hlavni .korunka .jmeno i{width:9px;height:9px;border-radius:50%;background:#5FBE8F;box-shadow:0 0 8px #5FBE8F}
.automat-hlavni .korunka .veta{font-size:14px;color:#D9CACC}
.automat-hlavni .korunka .veta b{color:#fff}
.automat-hlavni .korunka .cteni{font:500 12px var(--pismo-mono);color:#A8989B}
.automat-hlavni .korunka .cteni b{color:#fff}

.automat-hlavni .telo{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px;align-items:start}
@media (max-width:900px){.automat-hlavni .telo{grid-template-columns:minmax(0,1fr)}}

/* sklo */
.automat-hlavni .sklo{position:relative;border-radius:12px;padding:10px;background:var(--ram-skla);box-shadow:inset 0 2px 0 rgba(255,255,255,.08)}
.automat-hlavni .sklo-vnitrek{position:relative;border-radius:6px;background:var(--interier);padding:14px 12px 4px;overflow:hidden}
.automat-hlavni .sklo-vnitrek::before{content:"";position:absolute;left:10px;right:10px;top:0;height:6px;border-radius:0 0 6px 6px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95) 15%,rgba(255,255,255,.95) 85%,transparent);box-shadow:0 0 30px 10px rgba(255,248,240,.55);opacity:0;transition:opacity .6s}
.automat-hlavni.zapnuto .sklo-vnitrek::before{opacity:1}
/* odlesk skla jen na rámu */
.automat-hlavni .sklo::after{content:"";position:absolute;inset:0;border-radius:12px;pointer-events:none;background:linear-gradient(115deg,transparent 0 6%,rgba(255,255,255,.14) 6.3% 7.4%,transparent 7.7% 92%,rgba(255,255,255,.1) 92.3% 93%,transparent 93.3%);
  -webkit-mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);padding:10px}

.automat-hlavni .police{margin-bottom:10px}
.automat-hlavni .police-hlava{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0 0 10px;padding:10px 12px;background:var(--plocha);border-radius:8px;border-left:6px solid var(--barva);box-shadow:0 1px 0 var(--ram)}
.automat-hlavni .police-hlava .pismeno{font:700 12px/1 var(--pismo-mono);color:var(--barva-text,var(--plocha));background:var(--barva);border-radius:4px;padding:4px 6px}
.automat-hlavni .police-hlava .hra{font:800 clamp(18px,2vw,23px)/1.05 var(--pismo-edice);letter-spacing:-.02em;color:var(--text)}
.automat-hlavni .police-hlava .logo-pole{flex:none;width:190px;height:58px;display:flex;align-items:center;justify-content:flex-start}
.automat-hlavni .police-hlava .logo-hry{display:block;max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}
.automat-hlavni .police-hlava{min-height:78px}
@media (max-width:640px){.automat-hlavni .police-hlava .logo-pole{width:150px;height:46px}}
.automat-hlavni .police-hlava .logo-tmave{display:none}
.automat-hlavni .police.tmava-hlava .police-hlava{background:#141013;box-shadow:none}
.automat-hlavni .police.tmava-hlava .police-hlava .info{color:#B3A2A4}
.automat-hlavni .police.tmava-hlava .police-hlava .info b{color:#5FBE8F}
.automat-hlavni .police.tmava-hlava .police-hlava a{color:#F3ECEB}
.automat-hlavni .police.tmava-hlava .police-hlava .posuv button{background:#2A2225;border-color:#4A3A3C;color:#F3ECEB}
.automat-hlavni .police.bila-hlava .police-hlava{background:#FFFFFF;box-shadow:0 1px 0 #E2D5D4}
.automat-hlavni .police.bila-hlava .police-hlava .info{color:#6E5C5E}
.automat-hlavni .police.bila-hlava .police-hlava .info b{color:#2F6B4F}
.automat-hlavni .police.bila-hlava .police-hlava a{color:#1A1416}
.automat-hlavni .police.bila-hlava .police-hlava .posuv button{background:#FFFFFF;border-color:#CDBDB9;color:#1A1416}

.automat-hlavni .police-hlava .info{font:500 12.5px var(--pismo-ui);color:var(--text-tlumeny)}
.automat-hlavni .police-hlava .info b{color:var(--skladem);font-weight:700}
.automat-hlavni .police-hlava a{margin-left:auto;font:700 13px var(--pismo-ui);color:var(--text);text-decoration:none;border-bottom:1.5px solid var(--barva)}
.automat-hlavni .police-hlava a:hover{color:var(--text)}
.automat-hlavni .rada{display:grid;grid-auto-flow:column;grid-auto-columns:max(190px,25%);overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain}
.automat-hlavni .rada::-webkit-scrollbar{display:none}
@media (max-width:640px){.automat-hlavni .rada{grid-auto-columns:78%}}
.automat-hlavni .hrana{height:10px;margin:0 -12px;background:linear-gradient(180deg,var(--kov-svetly),var(--kov));box-shadow:0 4px 8px -3px rgba(0,0,0,.3)}
@media (max-width:640px){.automat-hlavni .police-hlava .posuv{display:none}.automat-hlavni .police-hlava a{margin-left:0}}
.automat-hlavni .police-hlava .posuv{display:flex;gap:4px;margin-left:8px}
.automat-hlavni .police-hlava .posuv button{width:28px;height:28px;border-radius:50%;border:1px solid var(--ram-silny);background:var(--plocha);cursor:pointer;font:700 14px/1 var(--pismo-ui);display:grid;place-items:center}
.automat-hlavni .police-hlava .posuv button:disabled{opacity:.35;cursor:default}

.automat-hlavni .pozice{scroll-snap-align:start;display:grid;grid-template-rows:auto 1fr;background:none;border:0;padding:0;text-align:left;cursor:pointer;position:relative;color:inherit;text-decoration:none}
/* přihrádka: bílá zadní stěna, podlaha, plexi přepážky mezi pozicemi */
.automat-hlavni .prihradka{position:relative;aspect-ratio:1/0.95;background:linear-gradient(180deg,var(--plocha) 0 84%,var(--podklad-2) 84% 100%);overflow:hidden}
.automat-hlavni .pozice+.pozice .prihradka::before{content:"";position:absolute;left:0;top:6%;bottom:0;width:4px;z-index:1;background:linear-gradient(90deg,rgba(185,173,172,.55),rgba(220,211,210,.25));border-left:1px solid rgba(160,150,150,.45)}
.automat-hlavni .prihradka::after{content:"";position:absolute;left:0;right:0;bottom:0;height:16%;background:linear-gradient(180deg,rgba(210,225,235,.10),rgba(210,225,235,.28));border-top:1px solid rgba(150,165,175,.45)}
.automat-hlavni .zbozi{position:absolute;left:9%;right:9%;top:5%;bottom:13%;transition:transform .25s cubic-bezier(.3,1.4,.5,1)}
.automat-hlavni .zbozi img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:50% 100%}
.automat-hlavni .zbozi svg.baleni{position:absolute;inset:0;width:100%;height:100%}
.automat-hlavni .zbozi::after{content:"";position:absolute;left:12%;right:12%;bottom:-3%;height:6%;border-radius:50%;background:radial-gradient(closest-side,rgba(40,30,30,.22),transparent)}
.automat-hlavni .pozice:hover .zbozi,.automat-hlavni .pozice:focus-visible .zbozi{transform:translateY(-5px) scale(1.02)}
.automat-hlavni .pozice.posun .zbozi{transform:translateY(8px) scale(1.06)}
.automat-hlavni .pozice.pryc .zbozi{visibility:hidden}
.automat-hlavni .pozice.pryc .prihradka::after{content:"prázdná přihrádka";display:grid;place-items:center;font:600 10.5px var(--pismo-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-slaby)}
/* cenovka na liště police */
.automat-hlavni .cenovka{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:1px 10px;align-content:start;background:var(--cenovka);border-top:4px solid var(--barva);padding:9px 12px 12px 10px;box-shadow:inset -1px 0 0 var(--ram)}
.automat-hlavni .cenovka .kod{grid-row:1/5;align-self:start;font:700 14px/1 var(--pismo-mono);color:#F3ECEB;background:var(--ram-skla);border-radius:4px;padding:6px 6px 5px;min-width:32px;text-align:center}
.automat-hlavni .cenovka .t{font:700 16px/1.15 var(--pismo-edice);letter-spacing:-.015em;overflow-wrap:anywhere}
.automat-hlavni .cenovka .e{font:400 12.5px/1.2 var(--pismo-ui);color:var(--text-tlumeny);overflow-wrap:anywhere}
.automat-hlavni .cenovka .c{font:800 22px/1.1 var(--pismo-edice);letter-spacing:-.02em;margin-top:5px;color:var(--skladem);font-variant-numeric:tabular-nums}
.automat-hlavni .cenovka .s{font:500 12.5px/1.25 var(--pismo-ui);color:var(--text-tlumeny);display:flex;gap:6px;align-items:center}
.automat-hlavni .lampa{flex:none;position:static;top:auto;right:auto;width:8px;height:8px;border-radius:50%;background:var(--kov);transition:background-color .2s,box-shadow .2s}
.automat-hlavni.zapnuto .lampa.sviti{background:var(--skladem);box-shadow:0 0 0 3px var(--sklad-podklad),0 0 8px var(--skladem)}
.automat-hlavni.zapnuto .lampa.pre{background:var(--predobjednavka);box-shadow:0 0 0 3px var(--predobj-podklad);animation:predobj 2.4s ease-in-out infinite}
@keyframes predobj{50%{opacity:.35}}
.automat-hlavni .pozice.pryc .cenovka .c{color:var(--text)}
.automat-hlavni .pozice.brzy .cenovka .c{color:var(--predobjednavka)}
.automat-hlavni .pozice:hover .cenovka::after,.automat-hlavni .pozice:focus-visible .cenovka::after{content:"kde koupit →";position:absolute;right:10px;bottom:8px;font:700 11.5px var(--pismo-ui);color:var(--akcent)}
.automat-hlavni .pozice.vybrano .cenovka{box-shadow:inset 0 0 0 2px var(--akcent)}
.automat-hlavni .pozice.vybrano .cenovka .kod{background:var(--akcent)}
.automat-hlavni .pozice[hidden]{display:none}
.police.sbalena .rada,.police.sbalena .hrana,.automat-hlavni .police.sbalena .rada,.automat-hlavni .police.sbalena .hrana,.automat-hlavni .police.sbalena .police-hlava{display:none}
.automat-hlavni .rozbal{display:flex;align-items:center;gap:8px;width:100%;margin:2px 0 8px;padding:10px 12px;border:1px dashed var(--ram-silny);border-radius:8px;background:transparent;cursor:pointer;font:600 13px var(--pismo-ui);color:var(--text-tlumeny)}
.automat-hlavni .rozbal:hover{color:var(--text);border-style:solid}
.automat-hlavni .rozbal b{font:700 12px var(--pismo-mono)}

/* ovládací panel */
.automat-hlavni .panel-stroje{display:grid;gap:12px;align-content:start;position:sticky;top:12px}
.automat-hlavni .displej{background:var(--displej);border-radius:8px;padding:10px 12px;min-height:84px;box-shadow:inset 0 2px 8px rgba(0,0,0,.7),0 0 0 3px var(--ram-skla);color:var(--displej-text);font-family:var(--pismo-mono);display:grid;align-content:center;gap:3px}
.automat-hlavni .displej .r1{letter-spacing:-.01em;font:600 24px/1.1 var(--pismo-mono);text-shadow:0 0 8px rgba(127,224,168,.45);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.automat-hlavni .displej .r2{font:400 12px/1.3 var(--pismo-mono);color:#5FAE84;overflow-wrap:anywhere;min-height:1.3em}
.automat-hlavni .kody summary{cursor:pointer;font:600 13px var(--pismo-ui);color:var(--text-tlumeny);padding:4px 2px;list-style:none}
.automat-hlavni .kody summary::before{content:"▸ ";}
.automat-hlavni .kody[open] summary::before{content:"▾ ";}
.automat-hlavni .kody[open] summary{margin-bottom:6px}
.automat-hlavni .klavesnice{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;background:var(--skrin-stin);padding:8px;border-radius:10px;box-shadow:inset 0 1px 3px rgba(0,0,0,.2)}
.automat-hlavni .klavesa{border:0;display:block;text-align:center;border-radius:8px;padding:9px 0 8px;background:var(--plocha);font:700 14px/1 var(--pismo-mono);cursor:pointer;box-shadow:0 2px 0 var(--ram-silny),inset 0 0 0 1px var(--ram);position:relative}
.automat-hlavni .klavesa:active,.automat-hlavni .klavesa.stisk{transform:translateY(2px);box-shadow:0 0 0 var(--ram-silny),inset 0 0 0 1px var(--ram)}
.automat-hlavni .klavesa.pismeno{border-bottom:3px solid var(--barva)}
.automat-hlavni .klavesa.pismeno.nic{border-bottom-color:var(--kov)}
.automat-hlavni .klavesa.ok{background:var(--skladem);color:var(--plocha);box-shadow:0 2px 0 rgba(0,0,0,.3)}
.automat-hlavni .klavesnice-podpis{grid-column:1/-1;margin:2px 0 0;font:500 11px/1.3 var(--pismo-ui);color:var(--text-tlumeny);text-align:center}
.automat-hlavni .prepinac-strojee{display:grid;gap:6px}
.automat-hlavni .prepinac-stroje{display:flex;align-items:center;gap:10px;background:none;border:0;padding:4px 2px;cursor:pointer;font:600 13.5px var(--pismo-ui);text-align:left}
.automat-hlavni .prepinac-stroje .kolejnice{flex:none;width:36px;height:20px;border-radius:999px;background:var(--ram-silny);position:relative;transition:background-color .2s}
.automat-hlavni .prepinac-stroje .kolejnice::after{content:"";position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:var(--plocha);box-shadow:0 1px 2px rgba(0,0,0,.3);transition:transform .25s cubic-bezier(.5,1.6,.5,1)}
.automat-hlavni .prepinac-stroje[aria-pressed="true"] .kolejnice{background:var(--skladem)}
.automat-hlavni .prepinac-stroje[aria-pressed="true"] .kolejnice::after{transform:translateX(16px)}
.automat-hlavni .ted h3{margin:0 0 6px;font:600 11.5px var(--pismo-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-tlumeny)}
.automat-hlavni .ted ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.automat-hlavni .ted li a{display:grid;grid-template-columns:auto 1fr auto;gap:2px 8px;background:var(--plocha);border:1px solid var(--ram);border-radius:var(--r-data);padding:7px 8px;text-decoration:none;font-size:12.5px}
.automat-hlavni .ted .chip{grid-row:1/3;align-self:start;font:600 9.5px/1 var(--pismo-mono);text-transform:uppercase;letter-spacing:.06em;padding:4px 5px;border-radius:3px}
.automat-hlavni .chip.sk{color:var(--skladem);background:var(--sklad-podklad)}.automat-hlavni .chip.pryc{color:var(--vyprodano);background:var(--sedy-podklad)}
.automat-hlavni .ted .n{overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.automat-hlavni .ted .c{font:600 12px var(--pismo-mono);white-space:nowrap}
.automat-hlavni .ted .k{grid-column:2/-1;grid-row:2;font:400 11px var(--pismo-mono);color:var(--text-slaby)}
.automat-hlavni .ted li{animation:vyjede .5s both}
@keyframes vyjede{from{opacity:0;transform:translateY(-8px)}}
@media (max-width:640px){.automat-hlavni .ted li:nth-child(n+4){display:none}}

/* výdejní šachta — v panelu, na mobilu spodní list */
.automat-hlavni .klapka{position:relative;border-radius:12px;background:var(--ram-skla);padding:7px;box-shadow:inset 0 2px 0 rgba(255,255,255,.06)}
.automat-hlavni .klapka-vnitrek{border-radius:6px;background:linear-gradient(180deg,#050304,#1A1417 60%);padding:10px 12px 12px;color:#F3ECEB;max-height:calc(100vh - 150px);overflow:auto;scrollbar-width:thin}
.automat-hlavni .klapka-stitek{display:flex;gap:10px;align-items:center;font:600 11px var(--pismo-mono);letter-spacing:.14em;text-transform:uppercase;color:#8E7F82}
.automat-hlavni .klapka-stitek #klapka-kod{margin-left:auto}
.automat-hlavni .klapka-zavri{width:24px;height:24px;border-radius:50%;border:0;background:#2C2327;color:#F3ECEB;cursor:pointer;font-size:12px}
.automat-hlavni .klapka-pokyn{margin-top:8px;color:#B3A2A4;font-size:13.5px}
.automat-hlavni .klapka-pokyn kbd{font:600 12px var(--pismo-mono);background:#2C2327;border-radius:4px;padding:2px 6px;color:#F3ECEB}
.automat-hlavni .vydano{display:none;margin-top:8px;gap:10px}
.automat-hlavni .vydano.ano{display:grid}
.automat-hlavni .vydano .hlava{display:grid;grid-template-columns:84px minmax(0,1fr);gap:12px;align-items:center}
.automat-hlavni .vydano .obr{position:relative;background:#fff;border-radius:6px;aspect-ratio:1/0.95;overflow:hidden}
.automat-hlavni .vydano .obr img{position:absolute;inset:6%;width:88%;height:88%;object-fit:contain}
.automat-hlavni .vydano .obr svg.baleni{position:absolute;inset:4%;width:92%;height:92%}
.automat-hlavni .vydano h4{margin:0;font:800 18px/1.15 var(--pismo-edice);letter-spacing:-.02em}
.automat-hlavni .vydano .ed{color:#B3A2A4;font-size:12.5px;margin-top:2px}
.automat-hlavni .vydej-nabidky{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.automat-hlavni .vydej-nabidky a{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1px 10px;align-items:center;background:rgba(255,255,255,.06);border-radius:6px;padding:8px 10px;color:#F3ECEB;text-decoration:none;font-size:13.5px;transition:background-color .15s}
.automat-hlavni .vydej-nabidky a:hover{background:rgba(255,255,255,.12)}
.automat-hlavni .vydej-nabidky .o{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.automat-hlavni .vydej-nabidky .p{font:800 15px var(--pismo-edice);text-align:right;white-space:nowrap}
.automat-hlavni .vydej-nabidky .k{font:400 11px var(--pismo-mono);color:#968788;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.automat-hlavni .vydej-nabidky .d{font:600 10.5px var(--pismo-mono);text-transform:uppercase;letter-spacing:.05em;color:#5FBE8F;text-align:right;white-space:nowrap}
.automat-hlavni .vydej-nabidky .d.pryc{color:#968788}.automat-hlavni .vydej-nabidky .d.pre{color:#DFA94E}
.automat-hlavni .vydej-nabidky li.nej a{box-shadow:inset 0 0 0 1px rgba(95,190,143,.65)}
.automat-hlavni .vydano .dal{margin:0;font-size:12.5px;color:#B3A2A4}
.automat-hlavni .vydano .dal a{color:#F3ECEB}
.automat-hlavni .vydej-nabidky li.ne a{opacity:.55}
.automat-hlavni .vydej-nabidky li.ne a:hover{opacity:.85}
.automat-hlavni .vydano .detail{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:2px;padding:11px 14px;border-radius:999px;background:#F3ECEB;color:#1A1416;text-decoration:none;font:800 14.5px/1.2 var(--pismo-edice);letter-spacing:-.01em;transition:transform .15s}
.automat-hlavni .vydano .detail b{font-size:18px;transition:transform .2s}
.automat-hlavni .vydano .detail:hover b{transform:translateX(4px)}
@media (max-width:900px){
  .automat-hlavni .panel-stroje{position:static}
  .automat-hlavni .klapka.otevrena{position:fixed;left:8px;right:8px;bottom:8px;z-index:40;box-shadow:0 -10px 40px rgba(0,0,0,.45);animation:vyjede-list .3s ease-out}
  .automat-hlavni .klapka.otevrena .klapka-vnitrek{max-height:68vh}
  .automat-hlavni .kody{display:none}
}
@keyframes vyjede-list{from{transform:translateY(40px);opacity:0}}
.automat-hlavni .stitek-stroje{margin-top:14px;border-radius:10px;background:var(--skrin-svetla);box-shadow:inset 0 0 0 1px var(--ram-silny);padding:12px 14px;font-size:13px;color:var(--text-tlumeny);align-self:start}
.automat-hlavni .stitek-stroje b{display:block;color:var(--text);font:700 13px var(--pismo-ui);margin-bottom:2px}
.automat-hlavni .stitek-stroje .sroub{display:flex;justify-content:space-between;margin-bottom:6px}
.automat-hlavni .stitek-stroje .sroub i{width:7px;height:7px;border-radius:50%;background:var(--kov);box-shadow:inset 0 0 0 1px rgba(0,0,0,.25)}

/* Pás obchodů a poznámky návrhu se nekopírují: pás má web vlastní
   (zadání 63: „zůstává beze změny") a poznámky patřily jen náhledu. */
/* `.nabidky` je na webu tabulka obchodů, proto tu `.vydej-nabidky` (kolize
   zmáčkla odkazy na /obchody/ na 55 px — chytila to kontrola přetečení). */
/* `.prepinac` je na webu kulaté tlačítko motivu v hlavičce (30 px), proto
   `.prepinac-stroje` — bez toho se do něj přepínače panelu nevešly. */
/* sokl */
.automat-hlavni .sokl{margin:14px -14px 0;height:34px;border-radius:0 0 14px 14px;background:var(--sokl);position:relative;display:flex;justify-content:center;align-items:center}
.automat-hlavni .sokl::before{content:"";width:min(360px,60%);height:12px;background:repeating-linear-gradient(90deg,#4A3F43 0 18px,transparent 18px 26px);border-radius:3px;opacity:.9}
.nozky{display:flex;justify-content:space-between;max-width:1200px;margin:0 auto;padding-inline:40px}
.nozky i{width:46px;height:10px;background:var(--sokl);border-radius:0 0 6px 6px}

/* Padající balení BEZ `filter` — přes fotku výrobce nesmí jít stín ani lesk (§6.58 b)
   a `drop-shadow` na obalu padá i na obrázek uvnitř. Chytila to kontrola obrázků. */
.pada{position:fixed;z-index:30;pointer-events:none}
.pada img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:50% 100%}
.pada svg.baleni{position:absolute;inset:0;width:100%;height:100%}


@media (max-width:760px){}
@media (prefers-reduced-motion:reduce){.automat-hlavni *,.automat-hlavni *::before,.automat-hlavni *::after{animation:none!important;transition:none!important}}


/* Obchod, který dlouho nedoběhl celý (zadání 64, bod 4). Není to chyba čtenáře,
   ale naše — ať je vidět bez čtení čísel. */
tr.zastaraly td{ background:var(--sedy-podklad) }
tr.zastaraly td:first-child::after{ content:" · data stárnou"; color:var(--predobjednavka);
  font-family:var(--pismo-mono); font-size:10.5px }

/* Oprava po 63 (zadání 65). Stará regálová kostka .zbozi (nahoře, kolem ř. 849)
   kreslila fialový obdélník hry pod každou siluetu v přihrádce automatu.
   V přihrádce je .zbozi jen rám: bez podkladu, bez zaoblení, bez průhlednosti. */
.automat-hlavni .prihradka .zbozi{width:auto;height:auto;border-radius:0;background:none;opacity:1;box-shadow:none}
.automat-hlavni .prihradka .zbozi.obraz{display:block;padding:0;background:none}
/* Šipky police se na mobilu měly skrýt, ale základní pravidlo .posuv stálo až za
   media query a přebilo ho — šipky pak padaly na vlastní řádek. */
@media (max-width:640px){.automat-hlavni .police-hlava .posuv{display:none}}

/* Zadání 66 (Karel 20. 9. z telefonu). Korunka: v logotypu se ukazovalo okno I písmeno o
   („Peck▢omat“). Náhradní .plne-o platí jen pod .logotyp; tady ho skryj. */
.automat-hlavni .korunka .plne-o{display:none}

/* Edice na cenovce má v HTML třídu .ed, styl byl psaný pro .e — edice se kreslila
   základním písmem 15 px (i na počítači). */
/* Lampa stavu patří do řádku stavu; stará regálová .lampa (absolutně vpravo nahoře)
   ji vytahovala přes název. */
.automat-hlavni .cenovka .ed{font:400 12.5px/1.2 var(--pismo-ui);color:var(--text-tlumeny);overflow-wrap:anywhere}

/* Mobil: automat byl moc velký — jedna pozice na 78 % šířky, police 550 px vysoko.
   Teď dvě pozice vedle sebe a kousek třetí, menší cedule, cenovka a korunka. */
@media (max-width:640px){
  .automat.automat-hlavni{padding:8px 8px 0;border-radius:18px 18px 10px 10px}
  .automat-hlavni .korunka{padding:8px 12px;gap:2px 10px;margin-bottom:8px;border-radius:12px 12px 6px 6px}
  .automat-hlavni .korunka .jmeno b{font-size:22px}
  .automat-hlavni .korunka .veta{font-size:12.5px;line-height:1.3}
  .automat-hlavni .korunka .cteni{font-size:10.5px}
  .automat-hlavni .sklo{padding:6px;border-radius:10px}
  .automat-hlavni .sklo-vnitrek{padding:8px 6px 2px}
  .automat-hlavni .police{padding:6px 0 10px;margin:0}
  .automat-hlavni .police+.police{margin-top:10px}
  .automat-hlavni .police-hlava{min-height:0;padding:6px 10px;gap:2px 10px;margin-bottom:6px;border-left-width:4px}
  .automat-hlavni .police-hlava .logo-pole{width:110px;height:34px}
  .automat-hlavni .police-hlava .info{font-size:11.5px}
  .automat-hlavni .police-hlava a{font-size:12.5px}
  .automat-hlavni .rada{grid-auto-columns:44%}
  .automat-hlavni .cenovka{gap:0 6px;padding:6px 7px 8px 6px;border-top-width:3px}
  .automat-hlavni .cenovka .kod{font-size:11px;padding:4px 4px 3px;min-width:24px}
  .automat-hlavni .cenovka .t{font-size:13px}
  .automat-hlavni .cenovka .ed{font-size:11px}
  .automat-hlavni .cenovka .c{font-size:16px;margin-top:3px}
  .automat-hlavni .cenovka .s{font-size:10.5px;gap:4px}
}

/* Zadání 67 (Karel 20. 9.): na počítači má být na první pohled vidět, že je to automat.
   Stroj vystoupí z úzkého sloupce stránky (1100 px) do šířky až 1440 px a všechno uvnitř
   se zmenší: 6 pozic na polici místo 4, nižší přihrádky, menší cenovky, těsnější police.
   Na první obrazovce (1440 × 900) jsou tak vidět korunka, dvě celé police a panel. */
@media (min-width:1000px){
  .automat.automat-hlavni{--sirka-stroje:min(1440px,calc(100vw - 64px));width:var(--sirka-stroje);max-width:none;
    margin-left:calc((100% - var(--sirka-stroje))/2);margin-right:calc((100% - var(--sirka-stroje))/2);padding:12px 12px 0}
  .automat-hlavni .korunka{padding:9px 16px;margin-bottom:10px}
  .automat-hlavni .korunka .jmeno b{font-size:27px}
  .automat-hlavni .telo{grid-template-columns:minmax(0,1fr) 280px;gap:12px}
  .automat-hlavni .sklo-vnitrek{padding:8px 10px 2px}
  .automat-hlavni .police{padding:6px 0 12px;margin:0}
  .automat-hlavni .police+.police{margin-top:6px}
  .automat-hlavni .police-hlava{min-height:0;padding:6px 12px;margin-bottom:6px}
  .automat-hlavni .police-hlava .logo-pole{width:150px;height:44px}
  .automat-hlavni .rada{grid-auto-columns:max(150px,16.666%)}
  .automat-hlavni .prihradka{aspect-ratio:1/0.82}
  .automat-hlavni .cenovka{gap:0 8px;padding:7px 9px 9px 8px;border-top-width:3px}
  .automat-hlavni .cenovka .kod{font-size:12px;padding:4px 5px 3px;min-width:26px}
  .automat-hlavni .cenovka .t{font-size:14px}
  .automat-hlavni .cenovka .ed{font-size:11.5px}
  .automat-hlavni .cenovka .c{font-size:18px;margin-top:3px}
  .automat-hlavni .cenovka .s{font-size:11.5px}
}
