/* /assets/fonts.css */
/* Self-hosted Google Fonts (Unbounded, Manrope, JetBrains Mono) — latin+cyrillic.
   2026-11-11: основная кириллица и латиница берутся из *-cyrillic-core.woff2 / *-latin-core.woff2 -
   те же буквы тех же файлов без украинских, сербских и прочих букв и без латиницы с диакритикой
   (на сайте их нет, проверено по 289 страницам). Прежние файлы остались правилами на эти редкие символы.
   Generated from fonts.googleapis.com css2; replaces the external <link>. */
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}
/* cyrillic-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-ext.woff2') format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic.woff2') format('woff2');
  unicode-range: U+0400, U+0402-040F, U+0450, U+0452-045F, U+0490-0491, U+04B0-04B1;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-cyrillic-core.woff2') format('woff2');
  unicode-range: U+0301, U+0401, U+0410-044F, U+0451, U+2116;
}
/* latin-ext */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin.woff2') format('woff2');
  unicode-range: U+00C0-00D6, U+00D8-00F6, U+00F8-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+20AC, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-latin-core.woff2') format('woff2');
  unicode-range: U+0000-00BF, U+00D7, U+00F7, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215;
}

/* ==== знак рубля (U+20BD) отдельным микро-начертанием ====
   Во всех 213 файлах content/ и inc/ единственный символ из диапазона latin-ext -
   это «₽» (1087 вхождений). Из-за него браузер тянул целые latin-ext подмножества:
   Unbounded 117 648 байт, Manrope 15 240, JetBrains Mono 11 596 - ради одного глифа.
   Ниже - те же вариативные начертания, урезанные до U+20BD (fontTools subset,
   ось wght сохранена). Объявлены последними: при пересечении unicode-range
   побеждает последнее объявление, поэтому «₽» берётся отсюда, а полные latin-ext
   остаются подключёнными и подхватятся, если в текстах появится другой символ
   этого диапазона.

   ВАЖНО: вес у каждого лица задан ОДНИМ числом и повторяет ровно те веса, что
   объявлены выше у полных подмножеств. Диапазон («font-weight: 400 700») здесь
   ставить нельзя: Chrome в этом случае считает лицо с диапазоном лучшим совпадением
   для всего семейства и, не найдя в нём кириллицы, роняет весь Unbounded и
   JetBrains Mono в системный sans-serif. Проверено замером в браузере: с диапазоном
   ширина «Цена» 600 40px совпадала у Unbounded и JetBrains Mono (91.11px - один и тот
   же системный шрифт), с отдельными весами она 132.47px и 96px, как и до правки. */
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/jetbrains-mono-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/manrope-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/unbounded-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/unbounded-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/unbounded-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/unbounded-rub.woff2') format('woff2');
  unicode-range: U+20BD;
}

/* /assets/css/pp-base.css */
/* PP-BASE — выдернуто 1:1 из инлайнового <style> в inc/layout.php (2026-08-16).
   Байты одни и те же в каждом ответе сервера, а HTML отдаётся с Cache-Control: no-cache,
   то есть 9,3 КБ качались заново на каждой странице. Файл подключён ровно на том же
   месте <head>, где стояли оба блока, и в том же порядке — каскад не меняется.
   Ниже два бывших блока подряд: базовые стили и PP-RESPONSIVE-FIX v1. */
  html { scroll-behavior: smooth; }
  body { margin:0; background:#06070e; color:#ecedf7; font-family:'Manrope',system-ui,sans-serif; -webkit-font-smoothing:antialiased; overflow-x:hidden; }
  ::selection { background:#8047dd; color:#fff; }
  @keyframes ppMarquee { from { transform:translateX(0); } to { transform:translateX(-50%); } }
  .pp-drop { position:relative; }
  .pp-drop-panel { position:absolute; top:calc(100% + 14px); left:50%; transform:translateX(-50%) translateY(8px); opacity:0; visibility:hidden; transition:opacity .2s ease, transform .2s ease; z-index:60; }
  .pp-drop::after { content:""; position:absolute; top:100%; left:0; right:0; height:20px; }
  .pp-drop:hover .pp-drop-panel { opacity:1; visibility:visible; transform:translateX(-50%) translateY(0); }
  .pp-drop-link:hover { background:rgba(128,71,221,0.14); color:#fff; }
  /* z-index выше cookie-баннера (9000): иначе баннер перекрывает кнопку отправки.
     overflow-y + flex-start — карточка выше вьюпорта на 375x667 должна прокручиваться. */
  .pp-modal { position:fixed; inset:0; z-index:9500; display:none; align-items:flex-start; justify-content:center; padding:24px 24px 40px; overflow-y:auto; -webkit-overflow-scrolling:touch; }
  .pp-modal:target { display:flex; }
  .pp-modal-back { position:absolute; inset:0; background:rgba(4,5,10,0.72); backdrop-filter:blur(8px); }
  .pp-modal-card { position:relative; margin:auto; width:100%; max-width:460px; padding:40px; border-radius:22px; border:1px solid rgba(255,255,255,0.12); background:rgba(12,14,26,0.98); box-shadow:0 30px 80px rgba(0,0,0,0.6); animation:ppModalIn .28s cubic-bezier(0.22,1,0.36,1); }
  /* Сторонний виджет aisello рисует свои узлы с z-index 99997-99999, то есть выше
     любой нашей модалки. Пока открыта форма заявки, убираем его с экрана, иначе
     на узком вьюпорте подсказка ложится прямо на кнопку отправки. */
  body:has(.pp-modal:target) #sa-launcher,
  body:has(.pp-modal:target) #sa-preview,
  body:has(#pp-mobile-menu.pp-open) #sa-launcher,
  body:has(#pp-mobile-menu.pp-open) #sa-preview,
  body:has(#pp-mobile-menu.pp-open) #pp-cw { display:none !important; }
  .pp-modal-x { position:absolute; top:16px; right:20px; font-size:28px; line-height:1; color:#8688a6; }
  .pp-modal-x:hover { color:#fff; }
  @keyframes ppModalIn { from { opacity:0; transform:translateY(16px); } to { opacity:1; transform:translateY(0); } }
  @keyframes ppPulse { 0%,100% { opacity:.55; transform:scale(1); } 50% { opacity:.9; transform:scale(1.06); } }
  /* Full-width padded wrappers: without border-box, width:100% + horizontal padding overflows narrow viewports (text clipped by overflow:hidden). */
  [style*="width:100%; max-width:1600px"] { box-sizing:border-box; }
  a { color:inherit; text-decoration:none; }
  a, button { transition:filter .2s ease, transform .2s ease, background .2s ease, border-color .2s ease, color .2s ease; }
  div[style*="border-radius:24px"], div[style*="border-radius:22px"] { transition:transform .25s ease, border-color .25s ease, box-shadow .25s ease; }
  @media (min-width:1180px){ .pp-phone{ display:inline-flex !important; } }

  #pp-progress { position:fixed; top:0; left:0; right:0; height:3px; z-index:70; transform-origin:0 50%; transform:scaleX(0); background:linear-gradient(90deg,#8047dd,#4d8dff); box-shadow:0 0 12px rgba(128,71,221,0.6); pointer-events:none; }
  @keyframes ppProgress { from { transform:scaleX(0); } to { transform:scaleX(1); } }
  @supports (animation-timeline: scroll()) { #pp-progress { animation:ppProgress linear both; animation-timeline:scroll(root); } }

  #pp-mobile-menu.pp-open { display:block !important; }
  #pp-mobile-menu.pp-open #pp-mm-back { opacity:1 !important; }
  #pp-mobile-menu.pp-open #pp-mm-panel { transform:translateX(0) !important; }
  .pp-mm-link:hover, .pp-mm-sub:hover { background:rgba(128,71,221,0.12); color:#fff; }
  .pp-mm-acc[open] .pp-mm-chev { transform:rotate(180deg); }
  .pp-mm-acc summary::-webkit-details-marker { display:none; }
  @media (max-width:1024px){ header nav { display:none !important; } .pp-header-cta { display:none !important; } #pp-burger { display:inline-flex !important; } }
  @media (max-width:900px){
    div[style*="grid-template-columns:repeat(3,1fr)"] { grid-template-columns:1fr !important; }
    div[style*="grid-template-columns:repeat(2,1fr)"] { grid-template-columns:1fr !important; }
    footer div[style*="grid-template-columns:1.6fr"] { grid-template-columns:1fr 1fr !important; }
    #pp-flow .pp-conn { display:none !important; }
    #pp-flow { gap:26px 12px !important; }
    #pp-flow .pp-node { width:108px !important; }
  }
  @media (max-width:600px){
    div[style*="grid-template-columns:repeat(4,1fr)"] { grid-template-columns:repeat(2,1fr) !important; }
    footer div[style*="grid-template-columns:1.6fr"] { grid-template-columns:1fr !important; }
    [style*="padding:0 32px"] { padding-left:20px !important; padding-right:20px !important; }
    [style*="padding:130px 32px"] { padding:74px 20px !important; }
    [style*="padding:130px 0"] { padding-top:74px !important; padding-bottom:74px !important; }
    [style*="padding:120px 0"] { padding-top:70px !important; padding-bottom:70px !important; }
    [style*="padding:120px 32px 40px"] { padding:70px 20px 30px !important; }
    [style*="padding:72px 32px 40px"] { padding:56px 20px 36px !important; }
    #pp-flow .pp-node { width:44% !important; }
    .pp-node-dot { width:78px !important; height:78px !important; }
  }

  header#pp-header { transition:background .3s ease, box-shadow .3s ease; }
  header#pp-header.pp-shrink { background:rgba(7,8,17,0.92) !important; box-shadow:0 10px 30px rgba(0,0,0,0.35); }
  header#pp-header.pp-shrink #pp-header-bar { height:60px !important; }
  #pp-header-bar { transition:height .3s ease; }
  #faq details > summary { position:relative; padding-right:36px; }
  #faq details > summary::after { content:""; position:absolute; right:4px; top:50%; width:11px; height:11px; margin-top:-8px; border-right:2px solid #8047dd; border-bottom:2px solid #8047dd; transform:rotate(45deg); transition:transform .3s ease; }
  #faq details[open] > summary::after { transform:rotate(-135deg); }

@media (max-width:1320px){ header nav, #pp-header nav { gap:26px !important; } }
@media (max-width:1140px){ header nav, #pp-header nav { gap:18px !important; font-size:15px !important; } }
div[style*="grid-template-columns"] > div{ min-width:0; }
@media (max-width:768px){
  #pp-flow .pp-conn{ display:none !important; }
  #pp-flow .pp-node{ width:120px !important; }
}
@media (max-width:560px){
  #pp-flow .pp-node{ width:44% !important; }
}


/* /pp-hero.css */
/* PivotPoint hero — stats strip pinned to the bottom of the first screen,
   copy vertically centred, with height-based compression so nothing spills
   below the fold on shorter laptop screens. Linked from each service page. */
.pp-hero-inner{ min-height:100vh; box-sizing:border-box; display:flex; flex-direction:column; padding:126px 32px 46px !important; }
.pp-hero-top{ margin-top:auto; margin-bottom:auto; }

@media (max-width:768px){ .pp-hero-inner{ padding:112px 24px 40px !important; } }
@media (max-width:560px){ .pp-hero-inner{ padding:104px 18px 34px !important; } }

/* Short laptop viewports — gated to >=768px so tall phones keep the full hero */
@media (min-width:768px) and (max-height:900px){
  .pp-hero-inner{ padding-top:104px !important; padding-bottom:38px !important; }
  .pp-hero-top h1{ font-size:clamp(30px,4.2vw,52px) !important; margin-top:18px !important; }
  .pp-hero-top > p:first-of-type{ margin-top:16px !important; font-size:16.5px !important; }
}
@media (min-width:768px) and (max-height:790px){
  .pp-hero-inner{ padding-top:94px !important; padding-bottom:32px !important; }
  .pp-hero-top h1{ font-size:clamp(26px,3.4vw,42px) !important; margin-top:14px !important; line-height:1.06 !important; }
  .pp-hero-top > p:first-of-type{ margin-top:12px !important; font-size:15px !important; line-height:1.5 !important; }
  .pp-hero-stats > div{ padding:20px 22px !important; }
  .pp-hero-stats > div > div:first-child{ font-size:30px !important; }
}
@media (min-width:768px) and (max-height:690px){
  .pp-hero-inner{ padding-top:86px !important; padding-bottom:24px !important; }
  .pp-hero-top h1{ font-size:clamp(24px,3vw,34px) !important; }
  .pp-hero-top > p:first-of-type{ display:none !important; }
  .pp-hero-stats{ grid-template-columns:repeat(4, 1fr) !important; }
  .pp-hero-stats > div{ padding:14px 16px !important; }
  .pp-hero-stats > div > div:first-child{ font-size:26px !important; }
  .pp-hero-stats > div > div:last-child{ font-size:12px !important; }
}

/* /assets/css/pp-grid-fix.css */
/* PP-MOBILE-GRID-FIX — выдернуто 1:1 из инлайнового <style> в inc/layout.php (2026-08-16).
   Подключается строго после /pp-hero.css и строго до pp-logo/hover/ux/components:
   правила держатся на !important и на порядке в исходнике, переставлять нельзя. */
/* PP-MOBILE-GRID-FIX v2 — universal, format-agnostic collapse for any grid-template-columns; appended last so !important + source order wins over earlier rules */
@media (max-width:1024px){
  div[style*="grid-template-columns"]{ grid-template-columns:repeat(2,1fr) !important; }
}
@media (max-width:768px){
  div[style*="grid-template-columns"]{ grid-template-columns:1fr !important; }
  div[style*="grid-template-columns"] > *{ min-width:0; }
  footer div[style*="grid-template-columns"]{ grid-template-columns:1fr 1fr !important; }
  div.pp-hero-stats[style*="grid-template-columns"]{ grid-template-columns:repeat(2,1fr) !important; }
}
@media (max-width:560px){
  footer div[style*="grid-template-columns"]{ grid-template-columns:1fr !important; }
}
/* Industries block stays 2-up on mobile (overrides the universal 1-col collapse; ID wins on specificity). */
@media (max-width:768px){
  #pp-otrasli-grid{ grid-template-columns:repeat(2,1fr) !important; }
}
/* Footer link columns (Направления / Компания) hidden on mobile. */
@media (max-width:768px){
  .pp-foot-hide-mobile{ display:none !important; }
}

/* Mobile headings: scale fluidly with viewport width instead of fixed px. */
@media (max-width:768px){
  h1{ font-size:clamp(1.6em,7.4vw,3em) !important; line-height:1.1 !important; }
  h2{ font-size:clamp(1.35em,5.8vw,2.4em) !important; line-height:1.14 !important; }
  h3{ font-size:clamp(1.05em,4.4vw,1.5em) !important; line-height:1.2 !important; }
}
@media (max-width:480px){
  h1{ font-size:clamp(1.4em,8vw,2.2em) !important; }
  h2{ font-size:clamp(1.2em,6.4vw,1.9em) !important; }
  h3{ font-size:clamp(1em,4.8vw,1.35em) !important; }
}


/* /assets/css/pp-logo.css */
/* Brand lockup (markup: inc/logo.php). Kept in its own file because the
   standalone 404 page renders outside inc/layout.php and needs the same rules. */
.pp-logo { display:flex; align-items:center; gap:11px; color:#ecedf7; }
.pp-logo-mark { position:relative; flex-shrink:0; width:30px; height:30px; border-radius:9px; background:linear-gradient(135deg,#8a89ff,#3f7bff); display:flex; align-items:center; justify-content:center; box-shadow:0 0 22px rgba(110,108,255,0.55); }
.pp-logo-sweep { position:absolute; inset:0; animation:ppSweep 3s linear infinite; }
.pp-logo-sweep::before { content:""; position:absolute; top:6px; left:50%; width:5px; height:5px; margin-left:-2.5px; border-radius:50%; background:#06070e; }
/* Слово PivotPoint: Unbounded 600, вырезаны только буквы P i v o t n (1,2 КБ вместо 83 КБ Unbounded
   на страницах, где Unbounded больше нигде не виден). Запасного Unbounded в списке нет намеренно:
   пока грузится основной шрифт, Chrome качает и запасной веб-шрифт. Файл в preload (base.html.twig). */
@font-face { font-family:'PP Logo'; src:url('/assets/fonts/pp-logo-unbounded-600.woff2') format('woff2'); font-weight:600; font-display:swap; unicode-range:U+0050, U+0069, U+006E, U+006F, U+0074, U+0076; }
.pp-logo-text { font-family:'PP Logo',sans-serif; font-weight:600; font-size:18px; letter-spacing:-0.01em; }
@keyframes ppSweep { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce) { .pp-logo-sweep { animation:none; } }

/* /assets/css/pp-hover.css */
/* Hover-state classes replacing the design-tool's style-hover="{{ }}" runtime attribute.
   !important is required: target elements carry an inline style="" base state
   (e.g. color:#b6b8cf), which always outranks a plain class selector. */
.pp-hv-nav:hover { color:#ffffff !important; }

.pp-hv-cta:hover { filter:brightness(1.08) !important; transform:translateY(-1px) !important; }

.pp-hv-ghost:hover { background:rgba(255,255,255,0.09) !important; border-color:rgba(255,255,255,0.32) !important; }

.pp-hv-chip:hover { border-color:rgba(125,123,255,0.5) !important; background:rgba(125,123,255,0.12) !important; color:#ffffff !important; }

.pp-hv-focus:hover, .pp-hv-focus:focus { border-color:rgba(125,123,255,0.55) !important; background:rgba(255,255,255,0.07) !important; }

.pp-hv-card:hover { border-color:rgba(125,123,255,0.4) !important; transform:translateY(-3px) !important; box-shadow:0 18px 50px rgba(77,99,255,0.16) !important; }

/* /keysy/ category filter — active button state (JS toggles this class, see pp-app.js) */
.pp-filter { cursor:pointer; }
.pp-filter-active { border-color:rgba(128,71,221,0.5) !important; background:rgba(128,71,221,0.14) !important; color:#a07bff !important; }

/* /assets/css/pp-ux.css */
/* PivotPoint UX-слой (ui-ux-pro-max) — раскатан на весь сайт из /v2/-прототипа.
   Дизайн не меняет: добавляет только поведение, доступность и микрополировку.
   Подключается из inc/layout.php на каждой странице; JS-часть — assets/js/pp-ux.js. */

/* --- Доступность: видимый фокус и touch-поведение --- */
a:focus-visible, summary:focus-visible, button:focus-visible, input:focus-visible,
textarea:focus-visible, [tabindex="0"]:focus-visible {
  outline:2px solid #8047dd !important; outline-offset:3px; border-radius:6px;
}
a, summary, button, .pp-node { touch-action:manipulation; }
section[id] { scroll-margin-top:84px; }

/* Пропустить навигацию: виден только при фокусе с клавиатуры. Ведёт на <main id="content"> */
.pp-skip {
  position:fixed; top:10px; left:10px; z-index:9600;
  transform:translateY(-160%); transition:transform .2s ease;
  padding:12px 20px; border-radius:11px;
  background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff;
  font-family:'Manrope',sans-serif; font-weight:600; font-size:14px;
}
.pp-skip:focus { transform:translateY(0); }
#content { scroll-margin-top:84px; }

/* --- Табличные цифры: счётчики не «прыгают» по ширине при анимации --- */
[data-count] { font-variant-numeric:tabular-nums; }

/* --- Press-feedback (HIG/MD: отклик 80-150мс на нажатие) --- */
.pp-hv-cta:active, .pp-hv-ghost:active { transform:scale(0.97) !important; transition-duration:.12s !important; }
.pp-hv-chip:active { transform:scale(0.95) !important; transition-duration:.12s !important; }
.pp-modal-card button:active { transform:scale(0.98); }

/* --- Touch-цели чипов >=44px на сенсорных экранах и мобильной вёрстке --- */
@media (pointer:coarse), (max-width:768px) {
  .pp-hv-chip { padding:12px 17px !important; }
}

/* --- Marquee: пауза при наведении --- */
div[style*="ppMarquee"]:hover { animation-play-state:paused !important; }

/* --- Scroll-reveal (класс вешает только JS — без JS контент виден сразу) --- */
/* Появление ускорено: 0.8-0.9 с и сдвиг на 26px читались как вязкость интерфейса. */
.pp-r { opacity:0; transform:translateY(12px); }
.pp-r.pp-in { opacity:1; transform:translateY(0); transition:opacity .28s ease-out, transform .32s cubic-bezier(0.22,1,0.36,1); transition-delay:var(--ppd,0ms); }

/* --- «Система роста» (главная): активное звено --- */
.pp-node { border-radius:20px; }
.pp-node .pp-node-dot, .pp-node .pp-node-lbl { transition:all .3s cubic-bezier(0.22,1,0.36,1); }
.pp-node.pp-node-on .pp-node-dot {
  border-color:rgba(128,71,221,0.65) !important; background:rgba(128,71,221,0.16) !important;
  color:#fff !important; box-shadow:0 0 0 6px rgba(128,71,221,0.12), 0 0 34px rgba(128,71,221,0.35);
  transform:translateY(-4px);
}
.pp-node.pp-node-on .pp-node-lbl { color:#fff !important; }
.pp-node:hover .pp-node-dot { border-color:rgba(128,71,221,0.45) !important; color:#fff !important; }
.pp-flow-dot { cursor:pointer; }
.pp-flow-dot.pp-dot-on { background:linear-gradient(120deg,#8047dd,#4d8dff) !important; box-shadow:0 0 10px rgba(128,71,221,0.7); transform:scale(1.25); }
@keyframes ppfSwap { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
.pp-swap { animation:ppfSwap .34s cubic-bezier(0.22,1,0.36,1); }

/* --- FAQ: плюс превращается в крестик, ответ плавно появляется ---
   Работает и для .pp-faq-item (главная), и для стандартных #faq details
   на 80+ сервисных страницах (шеврон там анимирует layout.php). */
.pp-faq-item[open] .pp-faq-plus { transform:rotate(45deg); }
@keyframes ppFaqIn { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }
#faq details[open] > p, .pp-faq-item[open] > p { animation:ppFaqIn .32s cubic-bezier(0.22,1,0.36,1); }
#faq details > summary { cursor:pointer; }
.pp-faq-item > summary:hover span:first-child { color:#a685ee; transition:color .2s ease; }

/* --- Курсорная подсветка карточек (в тон существующему глоу) --- */
.pp-hv-card { position:relative; }
.pp-hv-card::after {
  content:""; position:absolute; inset:0; border-radius:inherit; pointer-events:none;
  background:radial-gradient(320px circle at var(--mx,50%) var(--my,50%), rgba(128,71,221,0.10), transparent 65%);
  opacity:0; transition:opacity .3s ease;
}
.pp-hv-card:hover::after { opacity:1; }

/* --- Reduced motion: гасим декоративную анимацию, контент читаем сразу --- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; }
  .pp-r { opacity:1 !important; transform:none !important; }
  html { scroll-behavior:auto; }
}

/* /assets/css/pp-components.css */
/* pp-components.css — AUTO-GENERATED base rules + hand-written tail.
   Regenerate base rules with: php tools/build-catalog.php
   Extracts repeated inline styles from content/*.php into cacheable classes.
   Each base rule carries the byte-identical declaration of the inline string
   it replaces, so computed styles are unchanged; the tail re-homes the mobile
   fixes that used to key off inline styles in inc/layout.php. */

/* ==== generated base rules ==== */
.pp-c-line{color:#4d4f6b;}
.pp-eyebrow{font-family:'JetBrains Mono',monospace; font-size:13px; letter-spacing:0.18em; color:#8047dd; text-transform:uppercase;}
.pp-c-accent{color:#8047dd;}
.pp-row10{display:flex; gap:10px;}
.pp-faq{border-radius:18px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025); padding:22px 26px;}
.pp-faq-sum{cursor:pointer; font-weight:600; font-size:17px; color:#ecedf7; list-style:none;}
.pp-p15a{margin:14px 0 0; font-size:15px; line-height:1.62; color:#a9abc6;}
.pp-stat-sub{margin-top:10px; font-size:14px; color:#a7a9c4;}
.pp-h2{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(30px,4vw,52px); line-height:1.08; letter-spacing:-0.02em; margin:18px 0 0; max-width:16ch;}
.pp-num26{font-family:'Unbounded',sans-serif; font-weight:600; font-size:26px; color:#8047dd;}
.pp-cap125{font-size:12.5px; color:#8688a6; margin-top:4px;}
.pp-mono11{font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:0.1em; color:#8047dd;}
.pp-t18m0{font-family:'Unbounded',sans-serif; font-weight:500; font-size:18px; margin:0; letter-spacing:-0.01em;}
.pp-card{position:relative; padding:34px; border-radius:24px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.045),rgba(255,255,255,0.012)); overflow:hidden;}
.pp-num20r{position:relative; font-family:'Unbounded',sans-serif; font-weight:600; font-size:20px; color:#8047dd;}
.pp-p15b{margin:14px 0 0; font-size:15px; line-height:1.6; color:#aaace1;}
.pp-section{position:relative; max-width:1600px; margin:0 auto; padding:130px 32px; overflow:hidden;}
.pp-stat-cell{padding:30px 26px; background:rgba(9,10,20,0.72); backdrop-filter:blur(8px);}
.pp-grad46{font-family:'Unbounded',sans-serif; font-weight:600; font-size:46px; line-height:1; background:linear-gradient(120deg,#8047dd,#4d8dff); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;}
.pp-t21{font-family:'Unbounded',sans-serif; font-weight:500; font-size:21px; margin:20px 0 0; letter-spacing:-0.01em;}
.pp-p15c{margin:12px 0 0; font-size:15px; line-height:1.6; color:#a4a6c2;}
.pp-wrap92{max-width:1600px; margin:0 auto; padding:92px 32px 0;}
.pp-chip{display:inline-flex; align-items:center; gap:8px; padding:9px 15px; border-radius:999px; border:1px solid rgba(255,255,255,0.12); background:rgba(255,255,255,0.03); font-size:13px; color:#c2c4dc;}
.pp-dot6{width:6px; height:6px; border-radius:50%; background:#8047dd; box-shadow:0 0 10px #8047dd;}
.pp-pain{position:relative; padding:32px; border-radius:24px; border:1px solid rgba(255,138,150,0.16); background:linear-gradient(180deg,rgba(255,138,150,0.05),rgba(255,255,255,0.012)); overflow:hidden;}
.pp-pain-x{width:34px; height:34px; border-radius:10px; border:1px solid rgba(255,138,150,0.32); display:flex; align-items:center; justify-content:center; color:#ff8a96; font-weight:700; font-size:18px;}
.pp-t18{font-family:'Unbounded',sans-serif; font-weight:500; font-size:18px; letter-spacing:-0.01em; margin:18px 0 0;}
.pp-p145a{margin:12px 0 0; font-size:14.5px; line-height:1.6; color:#a9abc6;}
.pp-card-flat32{padding:32px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-p145b{margin:12px 0 0; font-size:14.5px; line-height:1.6; color:#a4a6c2;}
.pp-grid4{display:grid; grid-template-columns:repeat(4,1fr); gap:20px; margin-top:54px;}
.pp-section-bleed{position:relative; padding:130px 0; background:linear-gradient(180deg,#06070e,#090a16,#06070e); overflow:hidden;}
.pp-grad38{font-family:'Unbounded',sans-serif; font-weight:600; font-size:38px; line-height:1; background:linear-gradient(120deg,#8047dd,#4d8dff); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;}
.pp-container{max-width:1600px; margin:0 auto; padding:0 32px;}
.pp-t20{font-family:'Unbounded',sans-serif; font-weight:500; font-size:20px; letter-spacing:-0.01em;}
.pp-t20r{position:relative; font-family:'Unbounded',sans-serif; font-weight:500; font-size:20px; letter-spacing:-0.01em; margin:14px 0 0;}
.pp-irow10{display:flex; align-items:center; gap:10px;}
.pp-related{position:absolute; right:-120px; top:12%; width:440px; height:440px; border-radius:50%; background:radial-gradient(circle, rgba(160,123,255,0.1), transparent 70%); filter:blur(10px); pointer-events:none; will-change:transform;}
.pp-t15{display:block; padding:20px 22px; border-radius:16px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-blob-a{font-family:'Unbounded',sans-serif; font-weight:500; font-size:15px; line-height:1.3; margin-top:8px; letter-spacing:-0.01em;}
.pp-mono{font-family:'JetBrains Mono',monospace;}
.pp-pad28{padding:28px;}
.pp-p145c{margin:14px 0 0; font-size:14.5px; line-height:1.6; color:#a4a6c2;}
.pp-dot7b{width:7px; height:7px; border-radius:50%; background:#8047dd; box-shadow:0 0 10px #8047dd;}
.pp-h3clamp{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(24px,3vw,36px); line-height:1.1; letter-spacing:-0.02em; margin:22px 0 0;}
.pp-card-media{border-radius:24px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.045),rgba(255,255,255,0.01)); overflow:hidden;}
.pp-media-label{position:absolute; left:24px; bottom:18px; font-family:'JetBrains Mono',monospace; font-size:12.5px; letter-spacing:0.1em; color:#c8c9e6;}
.pp-statrow{display:flex; gap:28px; margin-top:22px; padding-top:20px; border-top:1px solid rgba(255,255,255,0.08);}
.pp-card-flat34{padding:34px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-input{width:100%; box-sizing:border-box; padding:15px 16px; border-radius:12px; border:1px solid rgba(255,255,255,0.14); background:rgba(255,255,255,0.05); color:#ecedf7; font-family:'Manrope',sans-serif; font-size:15px; outline:none;}
.pp-mono13a{font-family:'JetBrains Mono',monospace; font-size:13px; color:#8047dd; letter-spacing:0.08em;}
.pp-p165{margin:18px 0 0; font-size:16.5px; line-height:1.62; color:#c9cbe0;}
.pp-t19m0{font-family:'Unbounded',sans-serif; font-weight:500; font-size:19px; margin:0; letter-spacing:-0.01em;}
.pp-card34{padding:34px; border-radius:24px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.045),rgba(255,255,255,0.012));}
.pp-num40{font-family:'Unbounded',sans-serif; font-size:40px; line-height:0.6; color:#8047dd;}
.pp-p16{margin:14px 0 0; font-size:16px; line-height:1.62; color:#dcdcf0;}
.pp-mt24note{margin-top:24px; font-size:14px; color:#9092ad;}
.pp-c-mute{color:#8688a6;}
.pp-headrow{display:flex; align-items:flex-end; justify-content:space-between; flex-wrap:wrap; gap:24px;}
.pp-subhead{font-size:15px; color:#9092ad; max-width:34ch; line-height:1.6;}
.pp-card-hi28{padding:28px 26px; border-radius:20px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(128,71,221,0.08),rgba(255,255,255,0.012));}
.pp-grad40a{font-family:'Unbounded',sans-serif; font-weight:600; font-size:40px; line-height:1; background:linear-gradient(120deg,#a07bff,#4d8dff); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;}
.pp-pricerow{margin-top:22px; display:flex; align-items:baseline; gap:8px;}
.pp-pill{padding:9px 16px; border-radius:999px; border:1px solid rgba(255,255,255,0.12); background:rgba(255,255,255,0.03); font-size:14px; color:#c2c4dc;}
.pp-blob-card-a{position:absolute; top:-40px; right:-40px; width:150px; height:150px; border-radius:50%; background:radial-gradient(circle,rgba(125,123,255,0.18),transparent 70%);}
.pp-li{position:relative; padding-left:26px; font-size:16px; line-height:1.6; color:#c7c9de;}
.pp-li-dot{position:absolute; left:0; top:9px; width:8px; height:8px; border-radius:50%; background:#8047dd; box-shadow:0 0 10px #8047dd;}
.pp-grad{background:linear-gradient(120deg,#8047dd,#4d8dff); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;}
.pp-blob-card-b{position:absolute; top:-40px; right:-40px; width:150px; height:150px; border-radius:50%; background:radial-gradient(circle,rgba(77,141,255,0.18),transparent 70%);}
.pp-t14mute{font-size:14px; color:#8688a6;}
.pp-cap12{font-size:12px; color:#8688a6; margin-top:4px;}
.pp-mqrow{display:flex; gap:56px; align-items:center;}
.pp-t15b{font-size:15px; color:#dcdcf0;}
.pp-num22{font-family:'Unbounded',sans-serif; font-weight:600; font-size:22px; color:#a07bff;}
.pp-num34{font-family:'Unbounded',sans-serif; font-weight:600; font-size:34px; color:#ecedf7;}
.pp-c-c8{color:#c8c9e6;}
.pp-grid3{display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin-top:54px;}
.pp-t14right{font-size:14px; color:#ecedf7; font-weight:600; text-align:right;}
.pp-card38{position:relative; padding:38px; border-radius:24px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.04),rgba(255,255,255,0.012));}
.pp-p14mute{margin:10px 0 0; font-size:14px; color:#9092ad; line-height:1.5;}
.pp-hr{height:1px; background:rgba(255,255,255,0.08); margin:26px 0;}
.pp-featcol{display:flex; flex-direction:column; gap:12px; font-size:14.5px; color:#c2c4dc; line-height:1.5;}
.pp-ghost-c{display:flex; align-items:center; justify-content:center; gap:9px; margin-top:30px; padding:14px 24px; border-radius:12px; border:1px solid rgba(255,255,255,0.2); background:rgba(255,255,255,0.04); color:#ecedf7; font-weight:600; font-size:15px;}
.pp-splitrow{display:flex; justify-content:space-between; gap:16px; padding:13px 0; border-bottom:1px solid rgba(255,255,255,0.08);}
.pp-center-mute{text-align:center; font-size:16px; color:#8688a6;}
.pp-related-sm{display:block; padding:22px 24px; border-radius:18px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-t16{font-family:'Unbounded',sans-serif; font-weight:500; font-size:16px; line-height:1.3; margin-top:10px; letter-spacing:-0.01em;}
.pp-p14b{margin:10px 0 0; font-size:14px; line-height:1.6; color:#a4a6c2;}
.pp-icard{padding:26px 28px; border-radius:20px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025); display:flex; gap:14px;}
.pp-num-accent{font-family:'Unbounded',sans-serif; font-weight:600; color:#8047dd;}
.pp-p15d{font-size:15px; line-height:1.6; color:#c7c9de;}
.pp-center-t17{text-align:center; font-family:'Unbounded',sans-serif; font-weight:600; font-size:17px; color:#ecedf7;}
.pp-barcol{flex:1; display:flex; flex-direction:column; align-items:center; justify-content:flex-end; height:100%;}
.pp-mono12b{font-family:'JetBrains Mono',monospace; font-size:12px; color:#8688a6; margin-top:12px;}
.pp-c-mute13{font-size:13px; color:#8688a6;}
.pp-chips{display:flex; flex-wrap:wrap; gap:14px; margin-top:34px;}
.pp-mono12c{font-family:'JetBrains Mono',monospace; font-size:12px; letter-spacing:0.1em; color:#8047dd;}
.pp-t18mt14{font-family:'Unbounded',sans-serif; font-weight:500; font-size:18px; margin:14px 0 0; letter-spacing:-0.01em;}
.pp-card-flat-sm{padding:28px 26px; border-radius:20px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-quote{margin:0 0 16px; font-size:16px; line-height:1.72; color:#c2c4dc;}
.pp-h2-18{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(30px,4vw,52px); line-height:1.08; letter-spacing:-0.02em; margin:18px 0 0; max-width:18ch;}
.pp-p14c{margin:12px 0 0; font-size:14px; line-height:1.6; color:#a4a6c2;}
.pp-trow{display:grid; grid-template-columns:1.6fr 1fr 1fr; align-items:center; padding:18px 28px; border-bottom:1px solid rgba(255,255,255,0.06);}
.pp-cta{display:inline-flex; align-items:center; gap:9px; padding:14px 26px; border-radius:12px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff; font-weight:600; font-size:15px; box-shadow:0 12px 34px rgba(77,141,255,0.35); white-space:nowrap;}
.pp-blob-b{position:absolute; left:-140px; top:20%; width:460px; height:460px; border-radius:50%; background:radial-gradient(circle, rgba(77,141,255,0.09), transparent 70%); filter:blur(11px); pointer-events:none; will-change:transform;}
.pp-icard2{padding:28px 26px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025); display:flex; align-items:center; gap:16px;}
.pp-icon52{width:52px; height:52px; border-radius:14px; background:linear-gradient(135deg,#8047dd,#4d8dff); flex-shrink:0;}
.pp-t17{font-family:'Unbounded',sans-serif; font-weight:500; font-size:17px; letter-spacing:-0.01em;}
.pp-cap13{font-size:13px; color:#8688a6; margin-top:4px;}
.pp-h2-22{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(30px,4vw,52px); line-height:1.08; letter-spacing:-0.02em; margin:18px 0 0; max-width:22ch;}
.pp-blob-c{position:absolute; left:-150px; bottom:6%; width:500px; height:500px; border-radius:50%; background:radial-gradient(circle, rgba(77,141,255,0.1), transparent 70%); filter:blur(11px); pointer-events:none; will-change:transform;}
.pp-wrap-contact{max-width:1600px; margin:0 auto; padding:80px 32px 130px;}
.pp-cta-card{position:relative; border-radius:30px; overflow:hidden; border:1px solid rgba(255,255,255,0.1); background:linear-gradient(135deg,#11132c,#0a0b1c); padding:84px 56px;}
.pp-blob-cta-a{position:absolute; top:-120px; right:-80px; width:420px; height:420px; border-radius:50%; background:radial-gradient(circle,rgba(125,123,255,0.32),transparent 65%); animation:ppPulse 10s ease-in-out infinite;}
.pp-num34w{font-family:'Unbounded',sans-serif; font-weight:600; font-size:34px; color:#fff;}
.pp-splitrow26{display:flex; gap:26px; margin-top:20px; padding-top:18px; border-top:1px solid rgba(255,255,255,0.08);}
.pp-hero-orb-a{position:absolute; left:-12%; top:6%; width:560px; height:560px; border-radius:50%; background:radial-gradient(circle, rgba(125,123,255,0.26), rgba(125,123,255,0) 70%); filter:blur(8px); will-change:transform;}
.pp-hero-orb-b{position:absolute; right:-8%; top:-6%; width:440px; height:440px; border-radius:50%; background:radial-gradient(circle, rgba(77,141,255,0.22), rgba(77,141,255,0) 70%); filter:blur(6px); will-change:transform;}
.pp-hero-veil-r{position:absolute; inset:0; background:radial-gradient(120% 90% at 78% 18%, rgba(6,7,14,0) 0%, rgba(6,7,14,0) 55%, rgba(6,7,14,0.96) 100%);}
.pp-hero-veil-l{position:absolute; inset:0; background:linear-gradient(180deg, rgba(6,7,14,0) 0%, rgba(6,7,14,0) 22%, rgba(6,7,14,0) 55%, rgba(6,7,14,0.97) 100%);}
.pp-blob-cta-b{position:absolute; bottom:-160px; left:-60px; width:380px; height:380px; border-radius:50%; background:radial-gradient(circle,rgba(77,141,255,0.22),transparent 65%);}
.pp-hero{position:relative; min-height:100vh; display:flex; align-items:center; overflow:hidden;}
.pp-dot{width:7px; height:7px; border-radius:50%; background:#8047dd; box-shadow:0 0 12px #8047dd;}
.pp-hero-p{margin:26px 0 0; max-width:62ch; font-size:18px; line-height:1.6; color:#bcbed6;}
.pp-hero-note{margin:18px 0 0; font-family:'JetBrains Mono',monospace; font-size:13px; color:#8688a6; letter-spacing:0.02em;}
.pp-marquee{border-top:1px solid rgba(255,255,255,0.06); border-bottom:1px solid rgba(255,255,255,0.06); padding:26px 0; background:#080912; overflow:hidden; -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent); mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);}
.pp-marquee-track{display:flex; width:max-content; gap:56px; animation:ppMarquee 38s linear infinite; font-family:'JetBrains Mono',monospace; font-size:17px; color:#7d7f9c; letter-spacing:0.02em; align-items:center;}
.pp-blob-d{position:absolute; left:-160px; top:8%; width:520px; height:520px; border-radius:50%; background:radial-gradient(circle, rgba(125,123,255,0.12), transparent 70%); filter:blur(10px); pointer-events:none; will-change:transform;}
.pp-media-glow-a{position:absolute; inset:0; background:radial-gradient(120% 120% at 80% 10%, rgba(125,123,255,0.5), transparent 55%);}
.pp-media-glow-b{position:absolute; inset:0; background:radial-gradient(120% 120% at 80% 10%, rgba(77,141,255,0.5), transparent 55%);}
.pp-media-glow-c{position:absolute; inset:0; background:radial-gradient(120% 120% at 80% 10%, rgba(160,123,255,0.5), transparent 55%);}
.pp-card34-hi{padding:34px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(125,123,255,0.1),rgba(255,255,255,0.02));}
.pp-grid-af{position:relative; display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:44px; align-items:center;}
.pp-h2b{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(30px,4.2vw,52px); line-height:1.06; letter-spacing:-0.02em; margin:18px 0 0;}
.pp-hero-p2{margin:22px 0 0; font-size:17px; line-height:1.6; color:#bcbed6; max-width:52ch;}
.pp-featcol2{display:flex; flex-direction:column; gap:12px; margin-top:28px; font-size:15px; color:#c2c4dc;}
.pp-glass{padding:36px; border-radius:22px; border:1px solid rgba(255,255,255,0.12); background:rgba(9,10,20,0.6); backdrop-filter:blur(8px);}
.pp-col12mt28{display:flex; flex-direction:column; gap:12px; margin-top:22px;}
.pp-consent{display:flex; align-items:flex-start; gap:11px; margin-top:18px; font-size:12.5px; line-height:1.55; color:#8d8fab; cursor:pointer;}
.pp-checkbox{margin-top:1px; width:17px; height:17px; accent-color:#8047dd; flex-shrink:0; cursor:pointer;}
.pp-link-u{color:#a685ee; text-decoration:underline;}
.pp-form-submit{width:100%; margin-top:16px; border:none; cursor:pointer; padding:16px 24px; border-radius:12px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff; font-family:'Manrope',sans-serif; font-weight:600; font-size:16px; box-shadow:0 14px 40px rgba(77,141,255,0.4);}
/* Кадр тот же самый, что и у .pp-cosmos-bg из pp-hero-cosmos.js: /assets/hero.png и
   /assets/hero-cosmos.webp побайтово идентичны (md5 30c1af015f2a3f253c9d95e29b7500f2,
   оба внутри WebP 1672x941). Пока здесь стоял hero.png, страницы с космо-героем
   тянули один и тот же кадр дважды по двум адресам — 121 440 байт впустую.
   Ссылаемся на общий адрес: картинка та же, запрос один. */
.pp-hero-bg{position:absolute; top:-20%; left:0; right:0; height:140%; background-image:url('/assets/hero-cosmos.webp'); background-size:contain; background-position:center; background-repeat:no-repeat; background-color:#06070e; will-change:transform;}
.pp-hero-spot-a{position:absolute; left:14%; top:24%; width:14px; height:14px; border-radius:50%; background:#8047dd; box-shadow:0 0 18px #8047dd; opacity:0.8; will-change:transform;}
.pp-hero-spot-b{position:absolute; right:22%; top:38%; width:8px; height:8px; border-radius:50%; background:#4d8dff; box-shadow:0 0 14px #4d8dff; opacity:0.7; will-change:transform;}
.pp-breadcrumb{display:flex; align-items:center; gap:12px; font-family:'JetBrains Mono',monospace; font-size:13px; color:#8688a6; letter-spacing:0.02em;}
.pp-badge{display:inline-flex; align-items:center; gap:10px; margin-top:20px; padding:8px 16px; border-radius:999px; border:1px solid rgba(255,255,255,0.16); background:rgba(255,255,255,0.04); font-family:'JetBrains Mono',monospace; font-size:12.5px; letter-spacing:0.14em; color:#c8c9e6; text-transform:uppercase;}
.pp-chips2{display:flex; flex-wrap:wrap; gap:10px; margin-top:26px;}
.pp-cta-band{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:24px; margin-top:28px; padding:30px 34px; border-radius:22px; border:1px solid rgba(125,123,255,0.28); background:linear-gradient(120deg,rgba(125,123,255,0.12),rgba(77,141,255,0.06));}
.pp-cta-band-p{margin:0; font-size:17px; line-height:1.55; color:#e6e7f5; max-width:64ch;}
.pp-grid3b{display:grid; grid-template-columns:repeat(3,1fr); gap:22px; margin-top:54px;}
.pp-card36-v{padding:36px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(125,123,255,0.07),rgba(255,255,255,0.015));}
.pp-card36{padding:36px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.04),rgba(255,255,255,0.012));}
.pp-card36-b{padding:36px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(77,141,255,0.07),rgba(255,255,255,0.012));}
.pp-section-narrow{position:relative; max-width:1080px; margin:0 auto; padding:130px 32px; overflow:hidden;}
.pp-grid1{display:grid; grid-template-columns:1fr; gap:14px; margin-top:48px;}
.pp-p125mute{margin:16px 0 0; font-size:12.5px; line-height:1.55; color:#7d7f9c;}
.pp-hero-inner{position:relative; z-index:2; width:100%; max-width:1600px; margin:0 auto; padding:140px 32px 64px; will-change:transform;}
.pp-h1{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(38px,5.2vw,70px); line-height:1.05; letter-spacing:-0.02em; margin:22px 0 0; max-width:20ch; text-wrap:balance;}
.pp-cta-lg{display:inline-flex; align-items:center; gap:9px; padding:16px 30px; border-radius:13px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff; font-weight:600; font-size:16px; box-shadow:0 14px 40px rgba(77,141,255,0.4);}
.pp-ghost{display:inline-flex; align-items:center; gap:9px; padding:16px 30px; border-radius:13px; border:1px solid rgba(255,255,255,0.2); background:rgba(255,255,255,0.04); color:#ecedf7; font-weight:600; font-size:16px; backdrop-filter:blur(6px);}
.pp-hero-stats{display:grid; grid-template-columns:repeat(4,1fr); gap:1px; margin-top:64px; border:1px solid rgba(255,255,255,0.09); border-radius:20px; overflow:hidden; background:rgba(255,255,255,0.06);}
.pp-mono135{margin-top:20px; font-family:'JetBrains Mono',monospace; font-size:13.5px; color:#8688a6; line-height:1.7;}
.pp-media-a{height:150px; background:linear-gradient(135deg,#1b1f44,#0b1030); position:relative; overflow:hidden;}
.pp-media-b{height:150px; background:linear-gradient(135deg,#10223f,#08122c); position:relative; overflow:hidden;}
.pp-media-c{height:150px; background:linear-gradient(135deg,#241a3f,#0d0a26); position:relative; overflow:hidden;}
.pp-t15mb{font-family:'Unbounded',sans-serif; font-weight:600; font-size:15px; color:#ecedf7; margin-bottom:10px;}
.pp-card-flat30{padding:30px 26px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}
.pp-grid3c{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:46px;}
.pp-t14r{text-align:right; font-size:14px; color:#a4a6c2;}
.pp-t21r{position:relative; font-family:'Unbounded',sans-serif; font-weight:500; font-size:21px; letter-spacing:-0.01em; margin:14px 0 0;}
.pp-mono135b{position:relative; display:inline-flex; align-items:center; gap:7px; margin-top:20px; font-family:'JetBrains Mono',monospace; font-size:13.5px; color:#8047dd;}
.pp-grid3d{display:grid; grid-template-columns:repeat(3,1fr); gap:20px; margin-top:54px; align-items:start;}
.pp-card-pop{position:relative; padding:38px; border-radius:24px; border:1px solid rgba(125,123,255,0.4); background:linear-gradient(180deg,rgba(125,123,255,0.14),rgba(77,141,255,0.05)); box-shadow:0 24px 60px rgba(77,99,255,0.18); overflow:hidden;}
.pp-blob-pop{position:absolute; top:-50px; right:-40px; width:180px; height:180px; border-radius:50%; background:radial-gradient(circle,rgba(125,123,255,0.28),transparent 70%);}
.pp-splitrow0{position:relative; display:flex; align-items:center; justify-content:space-between;}
.pp-tag{font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:0.12em; text-transform:uppercase; padding:6px 12px; border-radius:999px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff;}
.pp-p14c0{margin:10px 0 0; font-size:14px; color:#c0c2e0; line-height:1.5;}
.pp-hr2{height:1px; background:rgba(255,255,255,0.12); margin:26px 0;}
.pp-featcol3{display:flex; flex-direction:column; gap:12px; font-size:14.5px; color:#dcdcf0; line-height:1.5;}
.pp-cta-c{display:flex; align-items:center; justify-content:center; gap:9px; margin-top:30px; padding:14px 24px; border-radius:12px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff; font-weight:600; font-size:15px; box-shadow:0 12px 34px rgba(77,141,255,0.4);}
.pp-note26{margin:26px 0 0; font-family:'JetBrains Mono',monospace; font-size:13px; color:#8688a6; line-height:1.6;}
.pp-pill2{padding:7px 13px; border-radius:999px; border:1px solid rgba(255,255,255,0.11); background:rgba(255,255,255,0.03); font-size:13px; color:#c2c4dc;}
.pp-num26mt{margin-top:12px; font-family:'Unbounded',sans-serif; font-weight:600; font-size:26px; color:#ecedf7;}
.pp-wrap56{max-width:1600px; margin:0 auto; padding:56px 32px 0;}
.pp-grid4b{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-top:28px;}
.pp-row9{display:flex; gap:9px;}
.pp-blob-e{position:absolute; right:-140px; top:0; width:480px; height:480px; border-radius:50%; background:radial-gradient(circle, rgba(125,123,255,0.1), transparent 70%); filter:blur(10px); pointer-events:none; will-change:transform;}
.pp-t20m0{font-family:'Unbounded',sans-serif; font-weight:500; font-size:20px; margin:0; letter-spacing:-0.01em;}
.pp-card-flat-28{padding:32px 28px; border-radius:22px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg,rgba(255,255,255,0.04),rgba(255,255,255,0.012));}
.pp-cta-card2{position:relative; border-radius:24px; overflow:hidden; border:1px solid rgba(255,255,255,0.1); background:linear-gradient(135deg,#14112c,#0a0b1c); padding:44px 40px;}
.pp-blob-pop2{position:absolute; top:-100px; right:-70px; width:340px; height:340px; border-radius:50%; background:radial-gradient(circle,rgba(128,71,221,0.3),transparent 65%); animation:ppPulse 10s ease-in-out infinite;}
.pp-h3clamp2{font-family:'Unbounded',sans-serif; font-weight:600; font-size:clamp(22px,3vw,30px); line-height:1.15; letter-spacing:-0.02em; margin:0;}
.pp-cta-mt26{display:inline-flex; align-items:center; gap:9px; margin-top:26px; padding:15px 28px; border-radius:12px; background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff; font-weight:600; font-size:15px; box-shadow:0 14px 40px rgba(128,71,221,0.4);}
.pp-li17{position:relative; padding-left:26px; font-size:17px; line-height:1.65; color:#c7c9de;}
.pp-li-dot10{position:absolute; left:0; top:10px; width:8px; height:8px; border-radius:50%; background:#8047dd; box-shadow:0 0 10px #8047dd;}
.pp-rel{position:relative;}
.pp-grid2-40{display:grid; grid-template-columns:1fr 1fr; gap:40px;}
.pp-p17{margin:18px 0 0; font-size:17px; line-height:1.7; color:#c7c9de;}
.pp-list{margin:18px 0 0; padding:0; list-style:none; display:flex; flex-direction:column; gap:14px;}
.pp-chips20{display:flex; flex-wrap:wrap; gap:10px; margin-top:20px;}
.pp-grid3e{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:28px;}
.pp-grid4c{display:grid; grid-template-columns:repeat(4,1fr); gap:16px;}
.pp-grid4d{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-top:46px;}
.pp-grid2b{display:grid; grid-template-columns:repeat(2,1fr); gap:16px; margin-top:46px;}
.pp-li-dot-fs{width:8px; height:8px; border-radius:50%; background:#8047dd; box-shadow:0 0 10px #8047dd; flex-shrink:0;}
.pp-card-sm16{padding:22px 20px; border-radius:16px; border:1px solid rgba(255,255,255,0.08); background:rgba(255,255,255,0.025);}

/* ==== keyframes (ported from layout.php; content no longer needs them inline) ==== */
@keyframes ppMarquee { from { transform:translateX(0); } to { transform:translateX(-50%); } }
@keyframes ppPulse { 0%,100% { opacity:.55; transform:scale(1); } 50% { opacity:.9; transform:scale(1.06); } }

/* ==== card lift transition (was layout.php div[style*="border-radius:24px/22px"]) ==== */
.pp-card,.pp-card34,.pp-card34-hi,.pp-card38,.pp-card36,.pp-card36-v,.pp-card36-b,
.pp-card-flat32,.pp-card-flat34,.pp-card-flat30,.pp-card-flat-sm,.pp-card-flat-28,
.pp-pain,.pp-card-hi28,.pp-card-media,.pp-card-pop,.pp-icard,.pp-icard2,
.pp-related,.pp-related-sm,.pp-card-sm16,.pp-cta-band,.pp-glass {
  transition:transform .25s ease, border-color .25s ease, box-shadow .25s ease;
}

/* ==== marquee hover pause (was pp-ux.css div[style*="ppMarquee"]) ==== */
.pp-marquee-track:hover { animation-play-state:paused !important; }

/* Note: the mobile hero-background swap for .pp-hero-bg is owned by inc/layout.php
   (gated by $heroTower, shared with .pp-cosmos-bg) — kept there to stay DRY. */

/* ==== responsive grids (mirror layout.php PP-MOBILE-GRID-FIX v2) ==== */
/* Ungated min-width:0 mirrors layout.php's `div[style*="grid-template-columns"] > div`
   (not media-gated) — without it a grid child's wide min-content stretches a column. */
.pp-grid > * { min-width:0; }
@media (max-width:1024px){
  .pp-grid { grid-template-columns:repeat(2,1fr) !important; }
  .pp-hero-stats { grid-template-columns:repeat(2,1fr); }
}
@media (max-width:768px){
  .pp-grid { grid-template-columns:1fr !important; }
}

/* ==== responsive section padding (mirror layout.php space-format ramp) ==== */
@media (max-width:1024px){
  .pp-section,.pp-section-narrow { padding:96px 28px; }
  .pp-section-bleed { padding-top:96px; padding-bottom:96px; }
}
@media (max-width:768px){
  .pp-container { padding-left:24px; padding-right:24px; }
  .pp-section,.pp-section-narrow { padding:82px 24px; }
  .pp-section-bleed { padding-top:82px; padding-bottom:82px; }
  .pp-cta-card,.pp-cta-card2 { padding:56px 30px; }
}
@media (max-width:560px){
  .pp-container { padding-left:18px; padding-right:18px; }
  .pp-section,.pp-section-narrow { padding:66px 18px; }
  .pp-section-bleed { padding-top:66px; padding-bottom:66px; }
  .pp-cta-card,.pp-cta-card2 { padding:42px 22px; }
  .pp-card,.pp-card34,.pp-card34-hi,.pp-card36,.pp-card36-v,.pp-card36-b,.pp-card38 { padding:24px; }
}
/* /assets/css/pp-consent.css */
/* Cookie consent banner. Matches site dark/purple theme. */
.pp-cookie{
  position:fixed; left:20px; bottom:20px; z-index:9000;
  width:min(420px, calc(100vw - 40px));
  box-sizing:border-box; padding:20px 22px;
  border-radius:18px;
  border:1px solid rgba(255,255,255,0.12);
  background:linear-gradient(180deg,#12131f,#0b0c16);
  box-shadow:0 24px 60px rgba(0,0,0,0.45);
  color:#c8cae0;
  font-family:'Manrope',sans-serif; font-size:13.5px; line-height:1.55;
  opacity:0; transform:translateY(14px);
  transition:opacity .26s ease, transform .26s ease;
}
.pp-cookie--show{ opacity:1; transform:translateY(0); }
.pp-cookie[hidden]{ display:none; }
.pp-cookie__text{ margin:0 0 16px; }
.pp-cookie__text a{ color:#a685ee; text-decoration:underline; }
.pp-cookie__actions{ display:flex; gap:10px; flex-wrap:wrap; }
.pp-cookie__btn{
  flex:1 1 auto; min-width:120px;
  border:none; cursor:pointer;
  padding:12px 18px; border-radius:11px;
  font-family:'Manrope',sans-serif; font-weight:600; font-size:14px;
}
.pp-cookie__btn--accept{
  background:linear-gradient(135deg,#8047dd,#4d8dff); color:#fff;
}
.pp-cookie__btn--reject{
  background:rgba(255,255,255,0.06); color:#c8cae0;
  border:1px solid rgba(255,255,255,0.14);
}
@media (max-width:480px){
  .pp-cookie{ left:0; right:0; bottom:0; width:auto; padding:14px 16px calc(14px + env(safe-area-inset-bottom));
    border-radius:16px 16px 0 0; border-left:none; border-right:none; border-bottom:none;
    font-size:12.5px; line-height:1.5; }
  .pp-cookie__text{ margin:0 0 12px; }
  .pp-cookie__btn{ padding:11px 14px; font-size:13.5px; min-width:0; }
}

/* Пока баннер открыт, плавающий виджет связи прячется: он живёт в том же
   нижнем левом углу и иначе полностью перекрыт баннером (проверено
   elementFromPoint и на 1440x900, и на 375x812). Прятать надёжнее, чем
   подбирать смещение: высота баннера зависит от переносов текста. */
body.pp-cookie-open #pp-cw{ opacity:0; pointer-events:none; }

