html,
body {
    overflow-x: hidden;
    /* L-7: clip не создаёт скролл-контейнер (в отличие от hidden),
       поэтому position: sticky в секциях-карточках лендинга работает.
       hidden выше оставлен как fallback для браузеров без поддержки clip. */
    overflow-x: clip;
}

.marquee-container,
.marquee {
    max-width: 100%;
    overflow: hidden;
}

/* 2026-07-31: замедление бегущей строки лендинга (в бандле 25s — слишком
   быстро). Бандл не пересобираем — переопределяем длительность здесь. */
#app .marquee-content {
    animation-duration: 50s;
}

/* 2026-07-31: карточки категорий (focus:ring-[#003677] в бандле) дают синее
   кольцо при клике мышью. Гасим ring только для не-клавиатурного фокуса —
   :focus-visible (Tab) сохраняет кольцо для доступности. */
#app .sticky[role="link"]:focus:not(:focus-visible) {
    --tw-ring-offset-shadow: 0 0 #0000;
    --tw-ring-shadow: 0 0 #0000;
}

/* 2026-07-31: обёртка кнопки «Смотреть все статьи» (mt-10 в бандле) — поднята ближе к карточкам */
#app [class*="mt-10"][class*="justify-between"] {
    margin-top: 16px;
}

/* 2026-07-31: в бандле нет утилиты hover:bg-[#003677] (JIT-промах) — на ховере текст
   уходил в белый на белом фоне. Явный ховер для «Смотреть все статьи». */
#app [class*="mt-10"][class*="justify-between"] a:hover,
#app [class*="mt-10"][class*="justify-between"] a:focus-visible {
    background-color: #003677;
    color: #fff;
}

body.index-shell-with-shared-header #app > .bg-gray-100 > header:first-child {
    display: none !important;
}

/* UI-аудит 2026-07-20 (L-14/L-17): the Vue landing bundle renders its own
   black footer (<footer class="bg-black …">) without the «Написать
   разработчику» link and with clipped wordmark. The unified Thymeleaf
   footer is mounted after #app, so hide the bundle one. */
body.index-shell-with-shared-header #app footer.bg-black {
    display: none !important;
}

/* WP-2 follow-up: the bundle footer is a fragment of two siblings —
   <footer class="bg-black"> plus a trailing <div class="bg-black"> band with
   the giant wordmark SVG. Hide the band too, otherwise it duplicates the
   unified footer's own wordmark. */
body.index-shell-with-shared-header #app footer.bg-black + div.bg-black {
    display: none !important;
}

body.index-shell-with-shared-header #app > .bg-gray-100.min-h-screen {
    min-height: calc(100vh - 64px);
}

/* L-5: висячий отступ в списках sticky-секций лендинга —
   перенесённые строки выравниваются по тексту, а не прилипают к маркеру. */
#app section.sticky ul.list-disc {
    list-style: none;
    padding-left: 0;
}

#app section.sticky ul.list-disc > li {
    position: relative;
    padding-left: 1.1em;
}

#app section.sticky ul.list-disc > li::before {
    content: "\2022";
    position: absolute;
    left: 0.15em;
    top: 0;
}

/* F1 (ui-audit 2026-07-23): the shared Thymeleaf header (z-index 50) must
   stay visible during the intro — the preloader drops below it on the
   landing only. The bundle header/modal inside #app stay unaffected. */
body.index-shell-with-shared-header #preloader {
    z-index: 40;
}

/* F1: intro 3s total (заказчик 2026-07-31: 2.4s hold + 0.6s fade,
   было 0.5s + 0.5s).
   The Vue bundle removes the preloader on `animationend` of `gotosite`,
   so the animation name is preserved while timing is set. */
#preloader.preloader.done {
    animation-delay: 2.4s;
    animation-duration: .6s;
}

/* 2026-07-31: повторный визит — бандл вешает preloader--skip и прячет слой
   через 280ms (красный экран мигал). Прячем сразу, без вспышки. */
#preloader.preloader--skip {
    display: none !important;
}

/* F1 follow-up (2026-07-29): the wordmark rose too late (.4s delay + .4s
   rise) — the shortened overlay was already fading before «впроекте»
   appeared. Rise at .05s + .25s so the text is in place before the .5s
   fade starts. */
#preloader .p-text1 {
    animation-delay: .05s;
    animation-duration: .25s;
}

/* F1: fade the overlay out instead of sweeping it up — a moving top edge
   sliced the hero headline mid-glyph during the transition. `gotosite` is
   redefined here (later stylesheet wins) and only on the landing, which is
   the sole page loading index_overrides.css.
   t_61b8ef10: end the fade with visibility:hidden — the bundle removes the
   preloader only on `animationend` heard by a handler attached on
   window.load (4.2s fallback also starts at load), so on a hard refresh
   with cold/slow cache the transparent overlay kept intercepting clicks on
   ПОДРОБНЕЕ for seconds. With fill-mode forwards the end keyframe drops it
   from hit-testing exactly when the fade completes, independent of JS. */
@keyframes gotosite {
    0% { opacity: 1; visibility: visible; }
    100% { opacity: 0; visibility: hidden; }
}

/* ---------------------------------------------------------------------------
   Правки приветственной 2026-07-29
   --------------------------------------------------------------------------- */

/* Header: slide away on scroll down, slide back on scroll up.
   public_shell.js toggles .site-header--hidden (landing only). */
body.index-shell-with-shared-header .site-header {
    transition: transform .3s ease;
}

body.index-shell-with-shared-header .site-header.site-header--hidden {
    transform: translateY(-100%);
}

/* Inter font-face declarations moved to common.css (kanban t_8e6362ec,
   unified public header): every public page loads common.css, so Inter is
   no longer landing-only. The token --vp-font-family-sans (tokens.css)
   names Inter first and now resolves site-wide. */

/* The bundle sets `body { font-family: Helvetica }`; re-point the landing
   body to the Inter ramp. The footer needs no override here: footer.css pins
   it to --vp-font-family-sans site-wide (kanban t_969474d5). */
body.index-shell-with-shared-header {
    font-family: var(--vp-font-family-sans);
}

/* «Свежее в блоге» subtitle: +2pt on each breakpoint step (12→14, 14→16)
   and optically centered in the gap between the heading and the blog cards
   (was 16px above / 48px below, now 24px / 24px). Selector matches the
   single `h2.heading--2 + p.text-body-2` pair in the landing bundle. */
#app h2.heading--2 + p.text-body-2 {
    font-size: 14px;
    margin-top: 24px;
    margin-bottom: 0;
}

#app div.mb-12.text-center:has(> h2.heading--2) {
    margin-bottom: 24px;
}

@media (min-width: 640px) {
    #app h2.heading--2 + p.text-body-2 {
        font-size: 16px;
    }
}

/* 2026-07-31 (заказчик): прелоадер — буквы «впроекте» выезжают слева-направо.
   Цельная анимация слова (F1-правило выше) отключается, каждая буква
   поднимается из-за overflow:hidden с нарастающей задержкой.
   Ритм: 0.1s старт + 0.08s шаг → последняя буква на месте к ~1s,
   дальше hold до затухания на 2.4s. */
#preloader .p-text1 {
    animation: none;
    transform: none;
}

#preloader .pl-letter {
    display: inline-block;
    transform: translateY(120%);
    animation: showUp 0.45s cubic-bezier(.22,.61,.36,1) forwards;
}

#preloader .pl-letter:nth-child(1) { animation-delay: 0.10s; }
#preloader .pl-letter:nth-child(2) { animation-delay: 0.18s; }
#preloader .pl-letter:nth-child(3) { animation-delay: 0.26s; }
#preloader .pl-letter:nth-child(4) { animation-delay: 0.34s; }
#preloader .pl-letter:nth-child(5) { animation-delay: 0.42s; }
#preloader .pl-letter:nth-child(6) { animation-delay: 0.50s; }
#preloader .pl-letter:nth-child(7) { animation-delay: 0.58s; }
#preloader .pl-letter:nth-child(8) { animation-delay: 0.66s; }

/* 2026-07-31 (заказчик): таблетка «ПЛАТФОРМА» падает одновременно с
   физическими чипами — те стартуют на animationend прелоадера (3.0s).
   Отодвигаем CSS-падение таблетки на те же 3.0s; до старта она скрыта
   инлайн-стилем opacity:0 из бандла (fill-mode backwards нет — применяется
   инлайн). На повторном визите (прелоадер скипнут, на <html> маркер
   data-preloader-skip из index.html) задержка не нужна. */
html:not([data-preloader-skip]) #app .falling-animation {
    animation-delay: 3s;
}

/* 2026-07-31 (заказчик): падение таблетки мягче — плавный ease-out вместо
   отскока бандла (cubic-bezier(.48,-1.08,1,1)), длительность 0.9s. */
#app .falling-animation {
    animation-timing-function: cubic-bezier(.22,.61,.36,1);
    animation-duration: .9s;
}


/* 2026-08-17 (заказчик): hero-блок главной уменьшен на 15% —
   zoom 0.85 на корневой <main> героя (бандл: main.bg-white.text-center). */
#app > main.bg-white.text-center {
    zoom: 0.85;
}

/* 2026-08-17 (заказчик): новые блоки главной «КАК ЭТО РАБОТАЕТ» и
   «КОМУ ПОЛЕЗНА ПЛАТФОРМА» — заменили ProcessSection. Классы свои,
   чтобы не зависеть от скомпилированного набора Tailwind бандла. */
#app .landing-hiw { background: #f2f2f2; padding: 56px 16px 8px; }
#app .landing-aud { background: #f2f2f2; padding: 48px 16px 24px; }
#app .landing-hiw__inner,
#app .landing-aud__inner { max-width: 1152px; margin: 0 auto; text-align: center; }
#app .landing-hiw__title {
    font-family: 'Bounded', 'HelveticaCenter', Helvetica, sans-serif;
    font-weight: 700; font-size: 28px; line-height: 1.2;
    letter-spacing: 0.01em; margin: 0 0 32px;
}
#app .landing-hiw__grid {
    display: flex; align-items: stretch; justify-content: center;
    gap: 24px;
}
#app .landing-hiw__card {
    background: #ffffff; border-radius: 16px;
    padding: 28px 24px; flex: 1 1 0; max-width: 340px; text-align: left;
}
/* 2026-08-17 (заказчик): в блоке «КОМУ ПОЛЕЗНА ПЛАТФОРМА» заголовки и
   текст карточек отцентрованы. */
#app .landing-aud__card { text-align: center; }
#app .landing-hiw__num {
    width: 36px; height: 36px; border-radius: 50%;
    background: #ff5757; color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: 17px; margin-bottom: 16px;
}
#app .landing-hiw__card-title {
    font-weight: 700; font-size: 17px; line-height: 1.3; margin-bottom: 10px;
}
#app .landing-hiw__card-text {
    font-size: 14px; line-height: 1.45; color: #555;
}
#app .landing-hiw__arrow {
    align-self: center; color: #ff5757; font-size: 20px; flex: 0 0 auto;
}
#app .landing-aud__grid {
    display: flex; align-items: stretch; justify-content: center; gap: 24px;
}
#app .landing-aud__card { max-width: 360px; }
@media (max-width: 899px) {
    #app .landing-hiw__grid,
    #app .landing-aud__grid { flex-direction: column; align-items: center; }
    #app .landing-hiw__card { max-width: 480px; width: 100%; }
    #app .landing-hiw__arrow { transform: rotate(90deg); }
    #app .landing-hiw__title { font-size: 22px; }
}

/* 2026-08-17: kill scroll-anchoring jumps when the "Смотреть ещё" expander inserts cards (landing) */
html, body, #app, #app * { overflow-anchor: none; }
