Модуль typography

base
body {
    font-size       : var(--body-size-base, 16px);
    font-family     : var(--body-font-family, "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
    line-height     : var(--body-line-height, 1.6);
    color           : var(--body-color, var(--gray800));
    background-color: var(--body-bg, #fff);
}

// чтобы сравнять размер шрифта body и html для нормальной работы rem 
html {
    font-size: var(--html-size-base, var(--body-size-base, 16px));
} 

h1, h2, h3, h4, h5, h6 {
    font-weight: var(--headings-font-weight, normal);
    line-height: var(--headings-line-height, 1.2);
}

h1, .h1 {
    font-size: var(--h1-font-size, 2.5rem);
    margin: var(--h1-margin, .7em 0 .5em 0);
}

h2, .h2 {
    font-size: var(--h2-font-size, 2rem);
    margin: var(--h2-margin, 1.1em 0 .5em 0);
}

h3, .h3 {
    font-size: var(--h3-font-size, 1.75rem);
    margin: var(--h3-margin, 1.1em 0 .5em 0);
}

h4, .h4 {
    font-size: var(--h4-font-size, 1.5rem);
    margin: var(--h4-margin, 1.1em 0 .5em 0);
}

h5, .h5 {
    font-size: var(--h5-font-size, 1.25rem);
    margin: var(--h5-margin, 1.1em 0 .5em 0);
}

h6, .h6 {
    font-size: var(--h6-font-size, 1rem);
    margin: var(--h6-margin, 1.1em 0 .5em 0);
}

p {
    margin: var(--paragraph-margin, 0 0 1rem 0);
}
blocks
:root {
    --blockquote-margin: 20px 0;
    --blockquote-padding: 10px 0 10px 25px;
    --blockquote-border-left: 5px solid var(--primary400);
    --blockquote-color: var(--primary500);
    --blockquote-border-radius: 8px;
    --blockquote-background: null;
    
    --blockquote-link-color: var(--primary500);
    --blockquote-link-decoration: underline;
    --blockquote-link-hover-color: var(--primary700);
    --blockquote-link-hover-decoration: none;
    
    --pre-bg-color: var(--primary50);
    --pre-text-color: var(--gray800);
    --pre-padding: 10px 15px 10px 25px;
    --pre-margin: 20px 0;
    --pre-border-top: var(--primary150);
    --pre-border-right: var(--primary150);
    --pre-border-bottom: var(--primary150);
    --pre-border-left: var(--primary150);
    --pre-line-height: 1.5;
    --pre-border-radius: 3px;
    --pre-font-size: .9rem;

    --code-background: var(--primary50);
    --code-padding: 0 5px;
    --code-border-radius: 3px;
    --code-font-size: .9em;
    --code-color: inherit;
}

blockquote {
    margin       : var(--blockquote-margin);
    padding      : var(--blockquote-padding);
    border-left  : var(--blockquote-border-left);
    color        : var(--blockquote-color);
    border-radius: var(--blockquote-border-radius);
    background   : var(--blockquote-background);
}

pre {
    padding      : var(--pre-padding);
    margin       : var(--pre-margin);
    background   : var(--pre-bg-color);
    color        : var(--pre-text-color);
    border-top   : var(--pre-border-top);
    border-right : var(--pre-border-right);
    border-bottom: var(--pre-border-bottom);
    border-left  : var(--pre-border-left);
    line-height  : var(--pre-line-height);
    border-radius: var(--pre-border-radius);
    font-size    : var(--pre-font-size);
    font-family  : var(--font-family-monospace);
    white-space  : pre-wrap;
    -moz-tab-size: 4;
    tab-size     : 4;
}

code {
    font-family  : var(--font-family-monospace);
    background   : var(--code-background);
    padding      : var(--code-padding);
    border-radius: var(--code-border-radius);
    font-size    : var(--code-font-size);
    color        : var(--code-color);
    white-space  : nowrap;
    display      : inline-block;
}

var {
    font-family: var(--font-family-monospace);
    font-style: normal;
    padding: 0px 5px;
    background-color: var(--var-background-color, var(--orange100));
    color: var(--var-text-color, var(--orange700));
    font-size: var(--var-font-size, 0.9rem);
    border-radius: var(--var-border-radius, 3px);
}

kbd {
    font-family: var(--font-family-monospace);
    font-style: normal;
    padding: var(--kbd-padding, 1px 5px);
    background-color: var(--kbd-background-color, var(--primary100));
    color: var(--kbd-text-color, var(--primary800));
    font-size: var(--kbd-font-size, 0.8em);
    border-radius: var(--kbd-border-radius, 5px);
    border: var(--kbd-border, 1px var(--primary200) solid);
}

samp {
    font-family: var(--font-family-monospace);
    font-style: normal;
    padding: var(--samp-padding, 1px 5px);
    background-color: var(--samp-background-color, var(--primary200));
    color: var(--samp-text-color, var(--primary800));
    font-size: var(--samp-font-size, 0.9rem);
    border-radius: var(--samp-border-radius, 3px);
}

mark {
    padding: var(--mark-padding, 0 4px);
    background-color: var(--mark-background-color, var(--primary150));
    color: var(--mark-text-color, var(--body-color));
    border-radius: var(--mark-border-radius, 3px);
    font-size: var(--mark-font-size, 0.95em);
}
details
details summary::before {
    content     : var(--summary-marker, "❯");
    color       : var(--summary-marker-color);
    margin-right: var(--summary-marker-margin-r, .6em);
    transition  : transform var(--summary-marker-time, 0.2s);
    display     : inline-block;
}

details[open] summary:before {
    transform: rotate(var(--summary-marker-rotate, 90deg));
}
images
img.circle {
    border-radius: 50%;
}

img.thumbnail {
    border: var(--thumbnail-border, var(--primary200) 1px solid);
    padding: var(--thumbnail-padding, 4px);
}

img.left {
    float : left;
    margin: var(--img-left-margin, 5px 20px 5px 0);
}

img.right {
    float : right;
    margin: var(--img-right-margin, 5px 0 5px 20px);
}

img.center {
    margin : 0 auto;
    display: block;
}
lines
hr {
    display   : block;
    padding   : 0;
    border    : none;
    border-top: var(--hr-border, 1px solid var(--primary300));
    margin    : var(--hr-margin, 20px 0);
}

hr.dashed {
    border-top-style: dashed;
}

hr.dotted {
    border-top-style: dotted;
}

hr.double {
    border-top-style: double;
}
print
@media print {
    body {
        color     : #000;
        background: white;
    }

    ul,
    img {
        page-break-inside: avoid;
    }

    .hide-print {
        display: none !important;
    }

    .flex {
        display: block !important;
    }

    .flex>div {
        width  : 100% !important;
        padding: 0 !important;
    }
}
root
:root {
    --font-family-monospace: Consolas, "PT Mono", "Roboto Mono", "Liberation Mono", "Segoe UI Mono", "Courier New", monospace,
}
table
table tr {
  border-bottom: var(--table-tr-border-bottom, var(--primary100) 1px solid);
}

table thead tr {
  background: var(--table-th-background, var(--primary100));
  border-bottom: var(--table-th-border-bottom, var(--primary150) 1px solid);
  border-top: var(--table-th-border-top, var(--primary150) 1px solid);
}

table th {
  text-align: left;
  padding: var(--table-th-padding, 0.6rem 0.5rem);
}

table td {
  vertical-align: top;
  padding: var(--table-td-padding, 0.5rem);
}

table.table-striped tbody tr:nth-of-type(odd) {
  background: var(--table-striped-odd-bg, var(--primary50));
}

table.table-striped tbody tr:nth-of-type(even) {
  background: var(--table-striped-even-bg, var(--primary100));
}

table.table-border-none tr {
  border: none;
}

table.table-border td:not(:last-child) {
  border-right: var(--table-td-border-right, var(--primary100) 1px solid);
}

table.table-border th:not(:last-child) {
  border-right: var(--table-th-border-right, var(--primary150) 1px solid);
}

table.table-hover tbody tr:hover {
  background: var(--table-tr-hover-bg, var(--primary150));
}