/* ============================================================
   AI tvorba kurzů — sdílený základ nad tokens.css
   Pořadí stylů: tokens.css → app.css → styl stránky.
   Alias vrstva mapuje názvy proměnných používané stránkovými
   styly (převzatými z mockupů) na závazné tokeny; barvy se
   nikde jinde nedefinují natvrdo.
   ============================================================ */

/* Ikonfont (BRIEF: emoji ikony nahradit ikonfontem s aria-label) —
   subset Material Symbols jen s používanými ikonami; helper ikona().
   Font se hostuje LOKÁLNĚ (fonts.css) — na Google se neposílá nic (GDPR).
   Tento seznam je zdroj pravdy o obsahu subsetu: hlídá ho VzhledTest a podle
   něj se generuje public/assets/fonts/material-symbols-subset.woff2. Přidáváš
   ikonu? Doplň ji sem A stáhni soubor znovu — jinak se vykreslí holý text.
   icon_names=account_circle,celebration,check,close,content_copy,contrast,dashboard,delete,domain,download,edit,edit_note,feedback,flag,group,history,local_offer,lock,menu,menu_book,monitoring,more_vert,push_pin,receipt_long,search,sell,star,thumb_down,thumb_up,visibility */

:root{
  /* --- Aliasy na tokeny --- */
  --primary:var(--brand-primary);
  --primary-dark:var(--brand-primary-dark);
  --primary-soft:var(--brand-primary-soft);
  --accent:var(--brand-accent);
  --accent-dark:var(--brand-accent-dark);
  --accent-ink:var(--brand-accent-ink);
  --accent-hover:var(--brand-accent-hover);
  --muted:var(--ink-muted);
  --display:var(--font-display);
  --body:var(--font-body);
  --mono:var(--font-mono);

  /* --- Odvozené odstíny z mockupů (mimo základní paletu tokenů) --- */
  --primary-mid:#818CF8;   /* světlejší indigo — hover rámečků, sekundární akcenty */
  --ok-soft:#E6F6EE;       /* podklad zelených pilulek */
  --warn-soft:#FEF3C7;     /* podklad jantarových pilulek */
  --err:#B91C1C;           /* text chybových stavů */
  --err-soft:#FDECEA;      /* podklad chybových stavů */
  --err-line:#F5C6CB;      /* rámečky chybových/danger prvků (mockup ucet) */

  /* --- Layout (jeden zdroj pravdy pro horní lištu a šířku obsahu) --- */
  --topbar-h:72px;         /* výška horní lišty na všech stránkách (čtečka je výjimka: 52px) */
  --page-w:1180px;         /* šířka horní lišty a širokého obsahu — dle knihovny promptů */
}

*{box-sizing:border-box;margin:0;padding:0}

/* Co JS schová atributem `hidden`, musí opravdu zmizet.
   UA styl má `[hidden]{display:none}` se specificitou 0-1-0 — stejnou jako jakékoli
   `.trida{display:…}`, které se navíc načítá později, takže `hidden` tiše přebije
   a prvek zůstane vidět, ačkoli `element.hidden === true`.
   Do té doby se to látalo po jednotlivých třídách (`.fbpop[hidden]`, `.field-err[hidden]`,
   `.sp-overlay[hidden]`…), což je hra na honěnou — past sklapla pokaždé, když někdo přidal
   `display` k další skrývané třídě. Naposledy na /ucet/vraceni, kde se pak ukazovalo pole
   pro číslo účtu i bez zvolení převodu.
   `!important` je tu nutné: bez něj má pravidlo tutéž specificitu jako ta třída a prohraje
   pořadím. Hlídá VzhledTest::testPrvkySkryvaneAtributemHiddenSeOpravduSkryji. */
[hidden]{display:none !important}

/* Ikony z ikonfontu — ligatura (název ikony) uvnitř spanu, viz helper ikona() */
.ikona{font-family:"Material Symbols Outlined";font-weight:normal;font-style:normal;font-size:1.25em;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;vertical-align:-0.22em}

/* Jednotné logo (badge + wordmark) dle mockupů — obsah dodává templates/_logo.php */
.logo{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.logo b{font-family:var(--font-display);font-weight:600;font-size:19px;color:var(--ink)}
/* Jednotná patička napříč webem — jediný zdroj vzhledu (obsah dodává _paticka).
   Class .foot-page přebíjí starší per-page pravidla pro element footer specificitou. */
.foot-page{border-top:1px solid var(--line);margin-top:56px;padding:30px 24px 40px;text-align:center;font-size:12.5px;color:var(--muted);line-height:1.6}
.foot-page a{color:var(--muted)}

/* Řádek tlačítek — sdílená konvence napříč stránkami (chyba/dekujeme/ucet mají vlastní
   variantu ve stylu stránky). Tlačítka vedle sebe v řádkovém toku se na mobilu po
   zalomení slepí (řádkový box je nižší než pilulka), proto flex s gapem a wrapem. */
.btns{display:flex;flex-wrap:wrap;gap:12px;align-items:center}

/* Kanonická tlačítka. Dřív žila jen ve stylech jednotlivých stránek, takže plochy,
   které si jen půjčily `stranka.css` (vrácení peněz, smazání účtu, odstoupení),
   vykreslily `.btn` jako holý prvek prohlížeče — na stránce, kde se žádá o peníze
   nebo maže účet, to vypadá jako rozbitý web. Hlídá VzhledTest.

   Stránkové styly (landing/admin/pokladna/ucet…) se načítají POZDĚJI a smí to
   přebít — proto tu jsou hodnoty a ne !important.

   `.btn-danger` je VYPLNĚNÉ, ne jemný obrys: u smazání účtu musí být stejně výrazné
   jako nabídka alternativy, jinak by web ztěžoval výkon práva na výmaz (čl. 12 GDPR). */
/* `line-height` je tu VÝSLOVNĚ a metriky obou variant se shodují — jinak vyjde
   `<button class="btn">` nižší než `<a class="btn">`: button řádkování z `body` nedědí
   (dostane `normal`), kdežto odkaz zdědí řádkování stránky. Na potvrzení smazání účtu
   se tak dvojice lišila o 7px. Hlídá VzhledTest::testTlacitkaMajiStejnouVyskuJakoOdkazIJakoButton. */
.btn{display:inline-block;border:1px solid transparent;background:var(--primary);color:#fff;
  font-family:var(--body);font-size:14px;font-weight:600;line-height:1.5;padding:11px 22px;border-radius:var(--radius);
  cursor:pointer;text-decoration:none;transition:background .15s ease,border-color .15s ease}
.btn:hover{background:var(--primary-dark);color:#fff}
.btn-ghost{display:inline-block;border:1px solid var(--line);background:var(--bg);color:var(--ink);
  font-family:var(--body);font-size:14px;font-weight:500;line-height:1.5;padding:11px 22px;border-radius:var(--radius);
  cursor:pointer;text-decoration:none;transition:border-color .15s ease,color .15s ease}
.btn-ghost:hover{border-color:var(--primary-mid);color:var(--primary)}
.btn-danger{background:var(--err);border-color:transparent;color:#fff}
.btn-danger:hover{background:#991B1B;color:#fff}
/* Obrysová destruktivní varianta. Potřebuje vlastní pravidlo (0-2-0): `.btn-danger`
   i `.btn-ghost` mají 0-1-0, takže by vyplněná červená přebila obrys a vznikla by
   nečitelná pilulka (červený text na červené). `background` se proto přepisuje
   VÝSLOVNĚ — bez něj prosákne z `.btn-danger`.
   Používá ji /ucet pro vstup ke smazání účtu, kde má být akce nenápadná; hlasitá je
   až potvrzovací obrazovka. Hlídá VzhledTest::testObrysovaDestruktivniVariantaJeGlobalni. */
.btn-ghost.btn-danger{background:var(--bg);border-color:var(--err);color:var(--err)}
.btn-ghost.btn-danger:hover{background:var(--err-soft);border-color:var(--err);color:var(--err)}

/* Drobný doprovodný text: `.note` u prvku, `.mailnote` u formulářového pole,
   `.alt` pod akcí. Stejné hodnoty se opisovaly v pokladna.css i ucet.css — tady je
   základ, stránkové styly si přidávají jen zarovnání a odsazení. */
.note,.mailnote{font-size:13px;color:var(--muted)}
.alt{font-size:12.5px;color:var(--muted)}
.alt a{color:var(--primary)}

/* Chybová hláška formuláře. Barvy z aliasů, ať drží i v tmavém motivu. */
.errmsg{background:var(--err-soft);border:1px solid var(--err-line);color:var(--err);
  font-size:13.5px;border-radius:var(--radius);padding:11px 14px}
[data-theme="dark"] .errmsg{background:#450A0A;border-color:#7F1D1D;color:#FCA5A5}

/* Vizuálně skrytý text jen pro čtečky obrazovky (přístupné popisky). */
.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;white-space:nowrap}

/* Sdílená klávesová vrstva (vlna 10A). Přeskakovací odkaz je první ovladatelný
   prvek stránky, ale objeví se až při focusu. Programatický cíl hlavního obsahu
   (`tabindex=-1`) záměrně rámeček nedostává; všechna skutečná ovládání ano. */
.skip-link{position:fixed;z-index:10000;top:10px;left:10px;transform:translateY(-180%);
  padding:10px 14px;border:2px solid var(--primary);border-radius:8px;background:var(--bg);color:var(--primary-dark);
  font:600 14px/1.4 var(--body);text-decoration:none;box-shadow:0 4px 16px rgb(15 23 42/.2)}
.skip-link:focus-visible{transform:translateY(0)}
:where(a[href],button,input,select,textarea,summary,[tabindex]:not([tabindex="-1"])):focus-visible{
  outline:3px solid var(--primary) !important;outline-offset:3px !important
}

/* Uživatel, který v systému omezil pohyb, nedostane animované přesuny, blikání ani
   dlouhé přechody. 0.01 ms zachová dokončovací události, na kterých může stát JS. */
@media (prefers-reduced-motion: reduce){
  html:focus-within{scroll-behavior:auto !important}
  *,*::before,*::after{
    animation-duration:0.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:0.01ms !important;
    scroll-behavior:auto !important
  }
}

/* Trvale viditelný účtový chip (indikátor přihlášení) — templates/_ucet-chip.php.
   Jen ikona uživatele; kruhové tlačítko. V app.css, aby fungoval v hlavičce
   každé stránky i v liště čtečky (theme-aware var(--bg)/var(--ink)). */
.ucet-chip{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex:none;border:1px solid var(--line);border-radius:50%;background:var(--bg);color:var(--ink);text-decoration:none;transition:border-color .15s ease,background .15s ease}
.ucet-chip:hover{border-color:var(--primary-mid);background:var(--primary-soft)}
.ucet-chip .ikona{font-size:20px;color:var(--primary)}
.ucet-chip.anon .ikona{color:var(--muted)}
.ucet-chip.anon:hover .ikona{color:var(--primary)}
/* Anon chip = pilulka „◯ Přihlásit se" (viditelný text, jasné UX napříč webem);
   přihlášený stav zůstává kruhová ikona s rozbalovacím menu. */
.ucet-chip.anon{width:auto;height:36px;gap:7px;padding:0 14px;border-radius:999px}
.ucet-chip.anon .chip-txt{font-size:14px;font-weight:600;color:var(--muted);white-space:nowrap}
.ucet-chip.anon:hover .chip-txt{color:var(--primary)}
/* Geometrie sdílené lišty (templates/_nav-links.php). Rozestup 28px je ze závazných
   mockupů — mají ho VŠECHNY včetně `mockupy/prompty.html`. Knihovna promptů přesto
   jela na 22px, a protože jsou položky ukotvené vpravo u chipu, sčítal se rozdíl
   doleva: při prokliku z /novinky na /prompty odskočila „Kniha" o 30 px.
   Mobilní zúžení (gap:10px) zůstává v @media níž.
   Hlídá VzhledTest::testRozestupPolozekListyJeVeSdileneVrstve. */
.nav-links{display:flex;gap:28px;align-items:center}

/* Aktivní položka sdílené navigace (templates/_nav-links.php) — „jsem tady".
   Pravidlo bylo dřív jen v prompty.css a ucet.css, takže na /novinky (stranka.css)
   a /hledat (hledani.css) se aktivní odkaz kreslil jako obyčejný a lišta se napříč
   webem rozjížděla. Ve sdílené vrstvě platí všude, kde partial je.
   Specificita 0-2-1 přebíjí `.nav-links a{color:var(--muted)}` (0-1-1) ze stránkových
   stylů, přestože se načítají později — proto tu nemusí být !important.
   Hlídá VzhledTest::testAktivniPolozkaNavigaceSeZvyrazniNaKazdeStrance. */
.nav-links a.on{color:var(--primary);font-weight:600}

/* Přepínač motivu ve sdílené navigaci (světlý/sepia/tmavý). Geometrie i chování
   převzaty z knihovny promptů, kde tlačítko vzniklo; barvy z aliasů, takže drží
   ve všech třech motivech. Je to <button>, ne <a> — mobilní pravidlo níž ho tedy
   neschovává (motiv jde přepnout i na úzkém displeji, stejně jako ve čtečce). */
.themebtn{border:1px solid var(--line);background:var(--bg);color:var(--muted);width:38px;height:38px;border-radius:9px;cursor:pointer;display:grid;place-items:center;font-size:16px}
.themebtn:hover{border-color:var(--brand-mid);color:var(--primary)}
/* Hláška po přepnutí motivu na plochách bez vlastního JS (theme-lista.js si ji vyrábí
   sama). Tvar převzat z #toast v knihovně promptů, ať je zpětná vazba napříč webem
   stejná — vlastní třída proto, že tyhle stránky #toast v markupu nemají. */
.motiv-hlaska{position:fixed;bottom:28px;left:50%;transform:translateX(-50%) translateY(8px);background:var(--ink);color:var(--bg);font-size:13.5px;font-weight:500;padding:11px 22px;border-radius:99px;text-align:center;max-width:calc(100vw - 32px);opacity:0;transition:opacity .25s,transform .25s;pointer-events:none;z-index:120}
.motiv-hlaska.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ⋮ menu sdílené navigace (templates/_nav-links.php) — na desktopu jsou vidět plné
   odkazy, na mobilu se skryjí a navigaci nese tohle rozbalovací menu.
   Tvar tlačítka i rozbalení se drží ⋮ menu ve čtečce (.topmenu .drop v ctecka.css),
   ať se obě nabídky napříč webem chovají i vypadají stejně. */
.nav-menu{display:none;position:relative;flex:none}
/* tlačítko ⋮ = kopie .tocbtn + .topmenu .tocbtn ze čtečky (ctecka.css), ať jsou obě ⋮ shodná */
.nav-menu>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex:none;
  border:1px solid var(--line);background:var(--bg);color:var(--ink);font-family:var(--body);font-size:13px;font-weight:600;padding:7px 9px;border-radius:8px}
.nav-menu>summary::-webkit-details-marker{display:none}
.nav-menu>summary::marker{content:""}
.nav-menu>summary:hover{border-color:var(--primary-mid);color:var(--primary)}
.nav-menu-drop{position:absolute;right:0;top:calc(100% + 14px);min-width:170px;background:var(--bg);border:1px solid var(--line);
  border-radius:10px;box-shadow:0 12px 30px rgb(15 23 42/.15);padding:6px;z-index:60}
/* `.nav-links a` ze stylu stránky se načítá po app.css — položky menu proto potřebují
   vyšší specificitu, jinak přeberou písmo lišty (15px místo 13.5px jako ve čtečce) */
.nav-links .nav-menu-drop a{padding:9px 14px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:13.5px;font-weight:500;white-space:nowrap}
.nav-links .nav-menu-drop a:hover{background:var(--bg-soft);color:var(--primary)}

/* Mobil: v hlavičce je na logo + odkazy + chip + CTA málo místa (na 360px hlavička
   přetékala a chip skončil mimo obrazovku) — chip se smrskne na samotnou ikonu
   (popisek zůstává v title/aria-label), textové odkazy se skryjí a nahradí je ⋮ menu.
   Platí pro každou stránku se sdíleným partialem _nav-links.php. */
@media(max-width:600px){
  .ucet-chip.anon{width:38px;height:38px;gap:0;padding:0;border-radius:50%}
  .ucet-chip.anon .chip-txt{display:none}
  .nav-links{gap:10px}
  /* jen přímí potomci — odkazy uvnitř rozbaleného ⋮ menu jsou taky v .nav-links
     a obecné pravidlo je dřív schovávalo, takže se menu otevíralo prázdné */
  .nav-links>a:not(.btn):not(.ucet-chip){display:none}
  /* hledani.css/ucet.css schovávají na mobilu všechny odkazy v .nav-links —
     chip a položky menu zůstávají (vyšší specificita než .nav-links a) */
  .nav-links a.ucet-chip{display:inline-flex}
  .nav-menu{display:inline-flex}
  /* ucet.css schovává `.nav-links a:not(.on)` (stejná specificita, načítá se později),
     proto se položky menu ukotví ještě o třídu výš */
  .nav-links .nav-menu[open] .nav-menu-drop a{display:block}
}

/* admin: chip jako rozbalovací přepínač náhledu „Zobrazit jako" (globální) */
.ucet-chip-menu{position:relative;display:inline-flex}
.ucet-chip-menu>summary{list-style:none;cursor:pointer}
.ucet-chip-menu>summary::-webkit-details-marker{display:none}
.ucet-chip-menu>summary::marker{content:""}
/* aktivní náhled = oranžový chip: na každé stránce je vidět „prohlížíš jako zákazník" */
.ucet-chip.nahled{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--bg))}
.ucet-chip.nahled .ikona{color:var(--accent-dark)}
.ucet-chip-drop{position:absolute;right:0;top:calc(100% + 8px);min-width:184px;background:var(--bg);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px rgb(15 23 42/.15);padding:8px;z-index:60}
.ucet-chip-drop .drop-sekce{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:4px 8px 6px}
.ucet-chip-drop .chip-nahled{display:flex;flex-direction:column;gap:2px}
.ucet-chip-drop .chip-nahled button{text-align:left;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:var(--ink);font:inherit;font-size:13.5px;cursor:pointer}
.ucet-chip-drop .chip-nahled button:hover{background:var(--primary-soft);color:var(--primary-dark)}
.ucet-chip-drop .chip-nahled button.aktivni{background:var(--accent);color:var(--accent-ink);font-weight:600}
.ucet-chip-drop .drop-odkazy{border-top:1px solid var(--line);margin-top:8px;padding-top:8px;display:flex;flex-direction:column;gap:2px}
/* běžný uživatel nemá sekci „Zobrazit jako" — odkazy jsou pak první, bez horní čáry */
.ucet-chip-drop .drop-odkazy:first-child{border-top:0;margin-top:0;padding-top:0}
.ucet-chip-drop .drop-odkazy a{padding:8px 10px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:13.5px}
.ucet-chip-drop .drop-odkazy a:hover{background:var(--primary-soft);color:var(--primary-dark)}
/* odhlášení jemně oddělené a utlumené */
.ucet-chip-drop .drop-odkazy a.odhlasit{border-top:1px solid var(--line);margin-top:4px;padding-top:10px;color:var(--muted)}
.ucet-chip-drop .drop-odkazy a.odhlasit:hover{color:var(--primary-dark)}
/* odhlášení je POST (CSRF) — tlačítko vypadá jako odkaz .odhlasit (S9) */
.ucet-chip-drop .drop-odkazy form.odhlasit-form{margin:0}
.ucet-chip-drop .drop-odkazy button.odhlasit{display:block;width:100%;text-align:left;border:0;border-top:1px solid var(--line);background:transparent;font:inherit;font-size:13.5px;cursor:pointer;padding:10px 10px 8px;margin-top:4px;border-radius:8px;color:var(--muted)}
.ucet-chip-drop .drop-odkazy button.odhlasit:hover{background:var(--primary-soft);color:var(--primary-dark)}

/* Chrome/Safari malují autovyplněná / z historie napovězená pole modrým podkladem
   (#e8f0fe), který přebíjí průhledné pozadí vyhledávacích pilulek (.search). Dlouhá
   transition drží pozadí i barvu textu na hodnotách z CSS (pole má background:none →
   prosvítá pilulka), takže je řešení theme-agnostic — funguje ve světlém, sepia i
   tmavém režimu čtečky a autocomplete zůstává funkční. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active{transition:background-color 600000s 0s,color 600000s 0s;-webkit-text-fill-color:var(--ink);caret-color:var(--ink)}
