/* ============================================================
   TYPOGRAFIA — jedno pismo pre celu platformu
   Zapina sa len telom s triedou bsc-typo / bsc-typo-size /
   bsc-typo-weight. Ked si tenant v Dizajne nic nevybral,
   trieda nevznikne a tento subor nevykresli ani jedno pravidlo.
   Nacitava sa AZ ZA sablonou, aby pri zhodnej specificite
   vyhral poradim. Brxa (managed_mode = custom) ho nedostava.
   ============================================================ */

/* 1. Mostik do menoslovia sablon a e-shopovych povrchov.
   Kazdy povrch si drzi svoje meno tokenu, hodnotu mu ale
   odteraz dava jedno miesto. */
body[class].bsc-typo {
  --esh-font:          var(--bsc-font);
  --esh-font-display:  var(--bsc-display);
  --esd-font:          var(--bsc-font);
  --esd-font-display:  var(--bsc-display);
  --pd-font:           var(--bsc-font);
  --pd-font-display:   var(--bsc-display);
  --chk-font:          var(--bsc-font);
  --chk-font-display:  var(--bsc-display);
  --dk-font:           var(--bsc-font);
  --dk-font-display:   var(--bsc-display);
  --rv-body:           var(--bsc-font);
  --rv-display:        var(--bsc-display);
  --vid-body:          var(--bsc-font);
  --vid-display:       var(--bsc-display);
  --bv-body:           var(--bsc-font);
  --bv-display:        var(--bsc-display);
  --gs-body:           var(--bsc-font);
  --gs-display:        var(--bsc-display);
  --body:              var(--bsc-font);
  --heading:           var(--bsc-display);
  --fh-title-font:     var(--bsc-display);
  --pro-font-ui:       var(--bsc-font);
  --pro-font-display:  var(--bsc-display);
  --t-font:            var(--bsc-font);
  font-family: var(--bsc-font);
}

/* 2. Zametanie. Sablony maju rodiny pisma aj natvrdo v pravidlach
   (gastro 'Epilogue', video 'Inter'), tam token nepomoze. Dedenie
   ich prebije jednym pravidlom namiesto zoznamu selektorov.
   :where() ma nulovu specificitu, takze vynimky ju nezvysuju.
   !important je tu preto, ze gastro aj video maju svoje rodiny
   zapisane s !important a bez neho by tenantova volba prehrala.
   Zapina sa len s triedou bsc-typo, teda az ked si tenant dvojicu
   naozaj vybral. */
body[class].bsc-typo *:not(:where(
  code, pre, kbd, samp, var, tt,
  svg, svg *,
  i[class], [class*="icon"], [class*="mono"]
)) {
  font-family: inherit !important;
}

/* 3. Nadpisy maju vlastnu rodinu. Musia prebit zametanie, preto
   :is() s triednym argumentom — jeho specificita je o triedu vyssia. */
body[class].bsc-typo :is(
  h1, h2, h3, h4, h5, h6,
  [class*="-title"], [class*="-heading"],
  [class*="-h1"], [class*="-h2"], [class*="-h3"]
) {
  font-family: var(--bsc-display) !important;
}

/* 4. Hrubka nadpisov. Rovnaky zoznam ako rodina nadpisov, aby sa
   nestalo, ze nadpis dostane pismo a nie hrubku. */
body[class].bsc-typo-weight :is(
  h1, h2, h3, h4, h5, h6,
  [class*="-title"], [class*="-heading"],
  [class*="-h1"], [class*="-h2"], [class*="-h3"]
) {
  font-weight: var(--bsc-heading-weight) !important;
}

/* 5. Velkost zakladneho textu. Tri vrstvy, lebo sablony pisu velkosti
   troma sposobmi:
   - koren (html) posuva vsetko zapisane v rem — tak pise gastro a trade,
   - telo posuva vsetko, co velkost dedi,
   - velkosti v px sa skaluju cez --bsc-text-scale priamo vo svojich
     suboroch spolocnej vrstvy, aby pomer medzi nimi ostal.
   V rem su v sablonach LEN velkosti pisma, nie rozmery, takze posun
   korena nehybe rozlozenim. */
html.bsc-typo-size,
:root:has(body.bsc-typo-size) {
  font-size: calc(16px * var(--bsc-text-scale, 1));
}
body[class].bsc-typo-size {
  font-size: calc(16px * var(--bsc-text-scale, 1));
}
