/* ==========================================================================
   SEROPHITO — PREMIUM BIO // FULL SITE
   Палитра строго Ч/Б. Заголовки: Days One (общий) + Fraunces (только сектор 3).
   Шрифты подключены через <link> в <head> (НЕ @import здесь) — так браузер
   качает их параллельно с этим CSS и имя сразу рисуется настоящим Days One.
   ========================================================================== */

:root {
    --black-absolute: #000000;
    --text-main: #ffffff;
    --text-muted: #a1a1a1;
    --text-dim: #6b6b6b;

    --font-display: 'Fraunces', serif;       /* ТОЛЬКО заголовок сектора 3 (ради &) */
    --font-heading: 'Days One', sans-serif;  /* все остальные заголовки */
    --font-main: 'Inter', sans-serif;
    --font-premium: 'Outfit', sans-serif;
    --font-mono: 'JetBrains Mono', monospace;

    --transition-hover: 1.4s cubic-bezier(0.16, 1, 0.3, 1);
    --transition-btn-liquid: 0.8s cubic-bezier(0.16, 1, 0.3, 1);
    --ease-liquid: cubic-bezier(0.16, 1, 0.3, 1);
    --transition-slow: 1.4s var(--ease-liquid);
    --transition-medium: 0.9s var(--ease-liquid);
    --transition-fast: 0.4s var(--ease-liquid);
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    user-select: none;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

html { scroll-behavior: smooth; }

body {
    background-color: var(--black-absolute);
    color: var(--text-main);
    font-family: var(--font-premium);
    min-height: 100vh;
    overflow-x: hidden;
    position: relative;
}

::-webkit-scrollbar { width: 0; display: none; }

/* ==========================================================================
   ИНТРО-ЗАГРУЗКА — ЕДИНАЯ анимация имени на его настоящем месте
   ==========================================================================
   Принцип: НЕТ отдельного прелоадер-текста и НЕТ кроссфейда двух надписей
   (именно из-за этого имя «прыгало», когда курсор был не по центру). На старте
   стоит body.intro: фон — чёрная пустота, всё кроме самого hero-«serophito»
   скрыто. Имя «прорисовывается» световой развёрткой (clip-path) — без тяжёлого
   блюра, дёшево для GPU. На 4-й секунде script.js снимает .intro → фон, шапка
   и остальной hero ПЛАВНО проявляются. Текст ни разу не двигается и не гаснет —
   он один, настоящий и стоит ровно на своём финальном месте. */

/* во время интро держим экран на hero и блокируем прокрутку (старт всегда тут) */
body.intro { overflow: hidden; }

/* фон-космос и блики — скрыты до конца интро, плавно возвращаются при снятии .intro */
#cosmos-bg,
.ambient-glow { transition: opacity 1.3s var(--ease-liquid); }
body.intro #cosmos-bg,
body.intro .ambient-glow { opacity: 0; }

/* ШАПКА — выезжает сверху в момент снятия .intro (≈4-я секунда) */
.site-nav {
    transition: transform 1.0s var(--ease-liquid), opacity 1.0s var(--ease-liquid),
                background var(--transition-fast);
}
body.intro .site-nav {
    transform: translateY(-110%);
    opacity: 0;
    pointer-events: none;
}

/* подзаголовок / подсказка / скролл-индикатор — мягкий каскад после снятия .intro */
.hero-sub,
.hero-section .scroll-indicator-wrapper {
    transition: opacity 1.1s var(--ease-liquid), transform 1.1s var(--ease-liquid);
}
body.intro .hero-sub,
body.intro .hero-section .scroll-indicator-wrapper {
    opacity: 0;
    transform: translateY(8px);
}
.hero-sub { transition-delay: 0.10s; }
.hero-section .scroll-indicator-wrapper { transition-delay: 0.34s; }
/* enter-hint имеет собственную анимацию «дыхания» (перебивает opacity), поэтому
   на время интро её гасим вместе с самой анимацией */
.enter-hint { transition: opacity 1.1s var(--ease-liquid), transform 1.1s var(--ease-liquid); transition-delay: 0.22s; }
body.intro .enter-hint { animation: none; opacity: 0; transform: translateY(8px); }

/* ИМЯ HERO — ПОКАДРОВАЯ СБОРКА ПО БУКВАМ (обводка → заливка → зарядка).
   ----------------------------------------------------------------------
   script.js на старте бьёт «serophito» на буквы <span class="hl"> и вешает
   на #heroEnter класс .lettered (в reduced-motion НЕ бьёт — текст остаётся
   цельным и видимым). Каждая буква:
     1) контур (::before, -webkit-text-stroke) проявляется «вычерчиванием»;
     2) сама буква заливается вертикальным градиентом и встаёт на место;
   буквы идут каскадом (--i), после сборки имя один раз «заряжается» свечением.
   Один настоящий элемент на своём месте → никакого кроссфейда и «прыжка». */
body.intro #heroEnter { pointer-events: none; }   /* во время интро не ловим «вход» */

/* когда имя разбито на буквы — гасим собственную заливку родителя, чтобы он
   не «подсвечивал» глифы до их анимации; всё рисуют сами буквы */
body.intro #heroEnter.lettered {
    background: none;
    will-change: filter;
    animation: heroGlow 0.95s var(--ease-liquid) 0.95s both;
}

.hl { display: inline-block; position: relative; }

/* ЗАЛИВКА буквы — каскадом всплывает на место (без обводки/контура) */
body.intro #heroEnter.lettered .hl {
    background: linear-gradient(180deg, #ffffff 0%, #ffffff 50%, #8a8a8a 140%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    opacity: 0;
    transform: translateY(0.5em) scale(0.92);
    animation: hlFill 0.5s var(--ease-liquid) forwards;
    animation-delay: calc(var(--i) * 0.055s);
    will-change: transform, opacity;
}
@keyframes hlFill {
    0%   { opacity: 0; transform: translateY(0.5em) scale(0.92); }
    55%  { opacity: 1; }
    100% { opacity: 1; transform: translateY(0) scale(1); }
}
/* после сборки — имя один раз «заряжается» свечением и оседает */
@keyframes heroGlow {
    0%   { filter: drop-shadow(0 0 0   rgba(255, 255, 255, 0)); }
    45%  { filter: drop-shadow(0 0 24px rgba(255, 255, 255, 0.34)); }
    100% { filter: drop-shadow(0 0 6px  rgba(255, 255, 255, 0.08)); }
}

@media (prefers-reduced-motion: reduce) {
    body.intro { overflow: auto; }
    body.intro #cosmos-bg,
    body.intro .ambient-glow,
    body.intro .site-nav,
    body.intro .hero-sub,
    body.intro .enter-hint,
    body.intro .hero-section .scroll-indicator-wrapper { opacity: 1; transform: none; }
    body.intro #heroEnter { animation: none; }
}

/* ════════════════════════════════════════════════════════════════════
   ПРЕЛОАДЕР — хоровод частиц + реальный процент загрузки
   Чёрный экран поверх всего, по центру крутится колеблющийся хоровод
   частиц (canvas) и тикает %. По завершении — fade, мир уже проявлен.
   ════════════════════════════════════════════════════════════════════ */
.preloader {
    position: fixed;
    inset: 0;
    z-index: 100000;
    background: #000;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: opacity 1.1s var(--ease-liquid);
}
.preloader.fade {
    opacity: 0;
    pointer-events: none;
}
#preloader-canvas {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    display: block;
}
/* reduced-motion: без анимации частиц — мир проявится сразу по загрузке */
@media (prefers-reduced-motion: reduce) {
    #preloader-canvas { display: none; }
    .preloader { transition: opacity 0.4s linear; }
}

/* ==========================================================================
   КОСМИЧЕСКИЙ ФОН (canvas) — за всем сайтом, не перехватывает клики
   ========================================================================== */
#cosmos-bg {
    position: fixed;
    inset: 0;
    width: 100%;
    height: 100%;
    z-index: 0;
    pointer-events: none;
    display: block;
}

/* ==========================================================================
   ФОНОВЫЕ БЛИКИ (только Ч/Б)
   ========================================================================== */
/* Раньше: filter: blur(140px) на 450px — огромное ядро размытия, дорогое для GPU
   (перерисовка при скролле/анимации). Радиальный градиент сам по себе мягкий, поэтому
   просто увеличиваем пятно и убираем фильтр — выглядит так же, но почти бесплатно.
   margin центрирует пятно там же, где был центр прежнего 450px-блока. */
.ambient-glow {
    position: fixed;
    pointer-events: none;
    z-index: 0;
    opacity: 0.12;
    border-radius: 50%;
}
.glow-1 {
    top: 25%; left: 15%; width: 740px; height: 740px; margin: -145px 0 0 -145px;
    background: radial-gradient(circle, rgba(255,255,255,0.09) 0%, rgba(255,255,255,0) 70%);
}
.glow-2 {
    bottom: 20%; right: 12%; width: 740px; height: 740px; margin: 0 -145px -145px 0;
    background: radial-gradient(circle, rgba(255,255,255,0.055) 0%, rgba(255,255,255,0) 70%);
}

/* ==========================================================================
   ШАПКА: ПОЛНОШИРИННЫЙ СТЕКЛЯННЫЙ БАР С ЛИНИЕЙ
   ========================================================================== */
.site-nav {
    position: fixed;
    top: 0; left: 0;
    width: 100%;
    z-index: 50;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    padding: 12px clamp(16px, 4vw, 46px);
    background: linear-gradient(180deg, rgba(18,18,22,0.72) 0%, rgba(10,10,12,0.50) 100%);
    backdrop-filter: blur(20px) saturate(1.2);
    -webkit-backdrop-filter: blur(20px) saturate(1.2);
    border-bottom: 1px solid rgba(255,255,255,0.10);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.05), 0 6px 24px rgba(0,0,0,0.25);
}

.nav-zone { display: flex; align-items: center; gap: 16px; }
.nav-left { justify-content: flex-start; }
.nav-right { justify-content: flex-end; }

/* Логотип-кнопка: открывает панель прогресса пасхалок (см. easter.js) */
.nav-logo-btn {
    display: inline-flex;
    align-items: center;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.nav-logo-btn:focus-visible { outline: 1px solid rgba(255,255,255,0.3); outline-offset: 4px; border-radius: 6px; }

/* Логотип в самом левом углу шапки — крупнее, с разделителем и мягким свечением */
.nav-logo {
    height: 42px;
    width: auto;
    display: block;
    flex-shrink: 0;
    /* отступ + тонкий разделитель, чтобы логотип «сидел», а не липнул к свитчу */
    padding-right: 16px;
    border-right: 1px solid rgba(255,255,255,0.10);
    -webkit-user-drag: none;
    user-select: none;
    opacity: 0.95;
    filter: drop-shadow(0 1px 6px rgba(255,255,255,0.10));
    transition: opacity var(--transition-fast), transform var(--transition-fast), filter var(--transition-fast);
}
.nav-logo:hover {
    opacity: 1;
    transform: scale(1.05);
    filter: drop-shadow(0 1px 10px rgba(255,255,255,0.22));
}

.nav-links {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
}

.nav-link {
    position: relative;
    border: none;
    background: transparent;
    cursor: pointer;
    font-family: var(--font-premium);
    font-size: 0.98rem;
    font-weight: 500;
    letter-spacing: 0.3px;
    color: var(--text-muted);
    padding: 6px 16px;
    white-space: nowrap;
    /* padding тоже в transition — иначе расступание соседей было резким скачком */
    transition: color var(--transition-medium),
                transform var(--transition-medium),
                letter-spacing var(--transition-medium),
                padding var(--transition-medium);
}
.nav-link:hover { color: var(--text-main); }
/* активный пункт: белеет и плавно увеличивается, соседи плавно расступаются */
.nav-link.active {
    color: var(--text-main);
    transform: scale(1.18);
    letter-spacing: 0.5px;
    font-weight: 600;
    padding: 6px 22px;
}

/* ── ПЕРЕКЛЮЧАТЕЛЬ ЯЗЫКА (свитч RU/EN с бегунком) ── */
.lang-switch {
    position: relative;
    display: inline-flex;
    align-items: center;
    width: 78px;
    height: 32px;
    padding: 3px;
    border-radius: 50px;
    border: 1px solid rgba(255,255,255,0.12);
    background: rgba(255,255,255,0.04);
    cursor: pointer;
    transition: border-color var(--transition-fast), background var(--transition-fast);
}
.lang-switch:hover { border-color: rgba(255,255,255,0.22); }
.ls-opt {
    position: relative;
    z-index: 2;
    flex: 1;
    text-align: center;
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 1px;
    color: var(--text-dim);
    transition: color var(--transition-fast);
}
.ls-knob {
    position: absolute;
    z-index: 1;
    top: 3px; left: 3px;
    width: calc(50% - 3px);
    height: calc(100% - 6px);
    border-radius: 50px;
    background: rgba(255,255,255,0.13);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.18);
    transition: transform var(--transition-medium);
}
.lang-switch.lang-ru .ls-knob { transform: translateX(100%); }
.lang-switch.lang-en .opt-en,
.lang-switch.lang-ru .opt-ru { color: var(--text-main); }

/* ── ПЕРЕКЛЮЧАТЕЛЬ МУЗЫКИ (свитч on/off с бегунком) ── */
.np-name {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--text-muted);
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.5px;
    max-width: 230px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color var(--transition-fast);
}
.np-name:hover { color: var(--text-main); }

.music-switch {
    position: relative;
    flex-shrink: 0;
    width: 46px;
    height: 26px;
    padding: 0;
    border-radius: 50px;
    border: 1px solid rgba(255,255,255,0.12);
    background: rgba(255,255,255,0.04);
    cursor: pointer;
    transition: background var(--transition-fast), border-color var(--transition-fast);
}
.ms-knob {
    position: absolute;
    top: 50%; left: 3px;
    width: 18px; height: 18px;
    border-radius: 50%;
    background: var(--text-dim);
    transform: translateY(-50%);
    transition: transform var(--transition-medium), background var(--transition-fast);
}
.music-switch.is-playing { background: rgba(255,255,255,0.16); border-color: rgba(255,255,255,0.3); }
.music-switch.is-playing .ms-knob { transform: translateY(-50%) translateX(20px); background: #fff; }

/* ==========================================================================
   ОБЩАЯ ОБЁРТКА СЕКЦИЙ
   ========================================================================== */
.fullscreen-section {
    position: relative;
    min-height: 100vh;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 120px 5% 90px;
    z-index: 2;
}

/* ==========================================================================
   ЗАГОЛОВКИ СЕКТОРОВ
   ========================================================================== */
.section-head {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 12px;
    margin-bottom: 55px;
}

.section-title {
    font-family: var(--font-heading);   /* Days One */
    font-size: clamp(2.2rem, 5vw, 3.4rem);
    font-weight: 400;
    letter-spacing: -0.5px;
    line-height: 1.05;
    background: linear-gradient(180deg, #ffffff 0%, #ffffff 45%, #8f8f8f 130%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
}
.section-title::after {
    content: '';
    display: block;
    width: 46px;
    height: 2px;
    margin: 18px auto 0;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent);
    border-radius: 2px;
}

/* ==========================================================================
   REVEAL ПО СКРОЛЛУ — КАЖДЫЙ ОБЪЕКТ ОТДЕЛЬНО (стаггер задаётся в JS)
   ========================================================================== */
.reveal {
    opacity: 0;
    transform: translate3d(0, 38px, 0);
    transition: opacity 1.4s var(--ease-liquid), transform 1.4s var(--ease-liquid);
    will-change: transform, opacity;
}
.reveal.is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}
@media (prefers-reduced-motion: reduce) {
    .reveal { opacity: 1; transform: none; transition: none; }
}

/* ==========================================================================
   СЕКТОР 1: HERO
   ========================================================================== */
.hero-section { flex-direction: column; }

.hero-center-manifest {
    position: relative;
    z-index: 5;               /* всегда ВЫШЕ зоны-шара слева — клик по serophito = вход, а не звук */
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    will-change: transform;   /* лёгкий параллакс героя (см. script.js, секция 3b) */
}

.serophito-subtext {
    font-family: var(--font-heading);   /* Days One */
    font-size: clamp(3.2rem, 10vw, 6.4rem);
    font-weight: 400;
    letter-spacing: -1px;
    line-height: 0.98;
    background: linear-gradient(180deg, #ffffff 0%, #ffffff 50%, #8a8a8a 140%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
}

.hero-sub {
    margin-top: 22px;
    font-family: var(--font-premium);
    font-size: 0.95rem;
    font-weight: 400;
    letter-spacing: 1px;
    color: var(--text-muted);
}

/* SCROLL — текст + тонкая линия с бегущим светом; прячется при скролле */
.scroll-indicator-wrapper {
    position: absolute;
    bottom: 46px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 16px;
    cursor: pointer;
    transition: opacity 0.6s var(--ease-liquid), transform 0.6s var(--ease-liquid);
}
.scroll-indicator-wrapper.is-hidden {
    opacity: 0;
    transform: translateY(14px);
    pointer-events: none;
}
.scroll-text {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    letter-spacing: 4px;
    color: var(--text-dim);
    transition: color var(--transition-fast);
    animation: scrollTextBreath 2.6s ease-in-out infinite;
}
.scroll-indicator-wrapper:hover .scroll-text { color: var(--text-main); }
@keyframes scrollTextBreath {
    0%, 100% { opacity: 0.45; }
    50%      { opacity: 1; }
}

/* тонкая вертикальная линия с бегущим вниз световым штрихом */
.scroll-line {
    position: relative;
    width: 1px;
    height: 58px;
    overflow: hidden;
    background: linear-gradient(180deg,
        rgba(255,255,255,0.04) 0%,
        rgba(255,255,255,0.20) 50%,
        rgba(255,255,255,0.02) 100%);
    transition: background var(--transition-fast);
}
.scroll-indicator-wrapper:hover .scroll-line {
    background: linear-gradient(180deg,
        rgba(255,255,255,0.08) 0%,
        rgba(255,255,255,0.35) 50%,
        rgba(255,255,255,0.04) 100%);
}
.scroll-line-dot {
    position: absolute;
    top: 0; left: 50%;
    width: 1px; height: 20px;
    transform: translate(-50%, -100%);
    background: linear-gradient(180deg, transparent, #fff, transparent);
    animation: scrollLineRun 2.4s var(--ease-liquid) infinite;
}
@keyframes scrollLineRun {
    0%   { transform: translate(-50%, -100%); opacity: 0; }
    18%  { opacity: 1; }
    82%  { opacity: 1; }
    100% { transform: translate(-50%, 300%);  opacity: 0; }
}

/* ==========================================================================
   КАРТОЧКИ / СЕТИ (эталон стиля)
   ========================================================================== */
.hub-standalone-container {
    width: 100%;
    max-width: 1100px;
    position: relative;
    z-index: 1;
}
.hub-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 24px;
}

/* ── НЕНАВЯЗЧИВЫЙ ВОДЯНОЙ ЗНАК СОЦСЕТИ (только карточки «Мои сети») ──
   Иконка платформы тихо «проявлена» в пустом правом поле карточки: даёт
   мгновенное узнавание, но не спорит с заголовком. На ховере чуть ярче. */
#links .premium-glass-card.brand-tg,
#links .premium-glass-card.brand-tt { overflow: hidden; position: relative; }
/* текст всегда поверх знака */
#links .premium-glass-card.brand-tg > *,
#links .premium-glass-card.brand-tt > * { position: relative; z-index: 1; }
/* знак ЦЕЛИКОМ в пустом правом поле карточки: по центру по высоте и сдвинут
   ВГЛУБЬ от края/стрелки — заполняет пустоту, не липнет к стрелке, не обрезается */
#links .premium-glass-card.brand-tg::after,
#links .premium-glass-card.brand-tt::after {
    content: "";
    position: absolute;
    z-index: 0;
    pointer-events: none;
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    opacity: 0.07;                  /* еле заметно — «просто так», не выделяется */
    transition: opacity 0.45s var(--ease-liquid);
    width: 120px; height: 120px;
    right: 72px;                    /* вглубь от правого края (дальше от стрелки) */
    top: 50%;
    transform: translateY(-50%);
}
/* Идентичные по размеру/месту SVG-знаки (белая заливка, та же тусклая opacity),
   inline data-URI — без отдельных файлов и без «некрасивых» webp. */
#links .premium-glass-card.brand-tg::after  {
    background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M9.78 18.65l.28-4.23 7.68-6.92c.34-.31-.07-.46-.52-.19L7.74 13.3 3.64 12c-.88-.25-.89-.86.2-1.3l15.97-6.16c.73-.27 1.43.18 1.15 1.3l-2.72 12.81c-.19.91-.74 1.13-1.5.71L12.6 16.3l-1.99 1.93c-.23.23-.42.42-.83.42z'/></svg>");
}
#links .premium-glass-card.brand-tt::after  {
    background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23fff' d='M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64c.3 0 .59.05.86.13V9.4a6.84 6.84 0 0 0-1-.05A6.34 6.34 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1.04-.1z'/></svg>");
}
#links .premium-glass-card.brand-tg:hover::after,
#links .premium-glass-card.brand-tt:hover::after { opacity: 0.13; }
@media (prefers-reduced-motion: reduce) {
    #links .premium-glass-card[class*="brand-"]::after { transition: none; }
}

.premium-glass-card {
    position: relative;
    cursor: pointer;
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 24px;
    padding: 30px 35px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    min-height: 170px;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
    background: radial-gradient(circle at 80% 20%, rgba(255,255,255,0.04) 0%, transparent 55%),
               radial-gradient(circle at 30% 80%, rgba(255,255,255,0.02) 0%, transparent 60%),
               linear-gradient(135deg, rgba(16,16,20,0.93) 0%, rgba(10,10,12,0.96) 100%);
    backface-visibility: hidden;
    transition: transform var(--transition-hover), border-color var(--transition-hover), box-shadow var(--transition-hover), opacity 1.2s var(--ease-liquid);
}

.card-meta {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
}
.card-platform {
    font-family: var(--font-premium);
    font-size: 0.65rem;
    font-weight: 500;
    color: var(--text-muted);
    letter-spacing: 1.5px;
}
.card-index {
    font-family: var(--font-premium);
    font-size: 0.7rem;
    color: rgba(255,255,255,0.15);
}
.card-version {
    font-family: var(--font-mono);
    font-size: 0.65rem;
    color: rgba(255,255,255,0.35);
    letter-spacing: 1px;
}

.card-content {
    margin-top: auto;
    margin-bottom: auto;
    overflow: hidden;
}
.card-title {
    font-family: var(--font-premium);
    font-size: 1.55rem;
    font-weight: 600;
    letter-spacing: -0.3px;
    color: var(--text-main);
    transform: translate3d(0,0,0);
    transition: transform var(--transition-hover);
    will-change: transform;
}

.card-footer-zone {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
}

.card-arrow {
    width: 14px; height: 14px;
    color: rgba(255,255,255,0.3);
    display: block;
    will-change: transform;
    backface-visibility: hidden;
    transform: translate3d(0,0,0);
    transition: transform var(--transition-hover), filter var(--transition-hover);
}

/* КНОПКА-ПИЛЮЛЯ С ШИММЕРОМ */
.card-action-btn {
    position: relative;
    cursor: pointer;
    display: flex;
    justify-content: center;
    align-items: center;
    border: 1px solid rgba(255,255,255,0.14);
    background: rgba(255,255,255,0.055);
    border-radius: 50px;
    padding: 12px 22px;
    min-width: 140px;
    height: 40px;
    overflow: hidden;
    isolation: isolate;
    transition: border-color var(--transition-btn-liquid), background-color var(--transition-btn-liquid), transform var(--transition-btn-liquid);
}

/* блик крутится ВСЕГДА (видимость даёт только opacity) — поэтому при уходе
   мыши он плавно гаснет, продолжая движение, без резкого скачка позиции */
.liquid-bg {
    position: absolute;
    inset: 0;
    z-index: 1;
    opacity: 0;
    pointer-events: none;
    background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.01) 20%, rgba(255,255,255,0.1) 50%, rgba(255,255,255,0.01) 80%, rgba(255,255,255,0) 100%);
    background-size: 200% 100%;
    background-position: 200% 0;
    animation: silkShimmer 4.5s linear infinite;
    transition: opacity 0.6s ease;
}
@keyframes silkShimmer {
    0%   { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

.action-text {
    position: relative;
    z-index: 2;
    font-family: var(--font-premium);
    font-size: 0.65rem;
    font-weight: 600;
    letter-spacing: 1px;
    color: #d6d6d6;
    transition: color 0.5s ease;
    white-space: nowrap;
}

/* ХОВЕР КАРТОЧЕК */
.premium-glass-card:hover {
    transform: translate3d(0,-4px,0);
    border-color: rgba(255,255,255,0.15);
    box-shadow: 0 15px 35px rgba(255,255,255,0.02), inset 0 1px 0 rgba(255,255,255,0.12);
}
.premium-glass-card:hover .card-title { transform: translate3d(4px,0,0); }
.premium-glass-card:hover .card-arrow {
    color: var(--text-main);
    filter: brightness(1.5);
    transform: translate3d(2px,-2px,0) rotate(45deg);
}
.card-action-btn:hover {
    border-color: rgba(255,255,255,0.3);
    background: rgba(255,255,255,0.09);
    transform: scale(0.97);
}
.card-action-btn:hover .liquid-bg { opacity: 1; }
.card-action-btn:hover .action-text { color: var(--text-main); }

/* ШИРОКАЯ КАРТОЧКА BOOSTY */
.card-wide-featured {
    grid-column: span 2;
    min-height: 130px;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    padding: 0 40px;
    gap: 40px;
    background: radial-gradient(circle at 85% 50%, rgba(255,255,255,0.035) 0%, transparent 50%),
               radial-gradient(circle at 15% 50%, rgba(255,255,255,0.015) 0%, transparent 50%),
               linear-gradient(135deg, rgba(16,16,20,0.93) 0%, rgba(10,10,12,0.96) 100%);
}
.featured-left-layout {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 10px;
    justify-content: center;
}
.featured-action-zone {
    display: flex;
    align-items: center;
    gap: 30px;
    height: 100%;
}

/* ==========================================================================
   СЕКТОР 3: WORKFLOW & TOOLS — ВЕРТИКАЛЬНЫЙ ПЕРЕКЛЮЧАТЕЛЬ
   ========================================================================== */
.wt-container {
    width: 100%;
    max-width: 1100px;
}
/* «воздух» между заголовком и переключателем */
.wt-container .section-head { margin-bottom: 44px; }

.wt-layout { display: block; }

/* Горизонтальный переключатель вкладок (капсула с бегунком) */
.tabs-nav {
    position: relative;
    display: flex;
    justify-content: center;
    gap: 4px;
    width: max-content;
    margin: 0 auto 52px;
    padding: 6px;
    border-radius: 50px;
    border: 1px solid rgba(255,255,255,0.07);
    background: linear-gradient(135deg, rgba(20,20,24,0.7) 0%, rgba(10,10,12,0.8) 100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
}
.tab-btn {
    position: relative;
    z-index: 2;
    border: none;
    background: transparent;
    cursor: pointer;
    padding: 11px 26px;
    border-radius: 50px;
    font-family: var(--font-premium);
    font-size: 0.9rem;
    font-weight: 500;
    letter-spacing: 0.5px;
    color: var(--text-muted);
    transition: color var(--transition-medium);
}
.tab-btn.active { color: var(--text-main); }
.tab-indicator {
    position: absolute;
    z-index: 1;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    border-radius: 50px;
    background: rgba(255,255,255,0.06);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.12);
    transition: transform var(--transition-medium), width var(--transition-medium);
}

/* Панели вкладок */
.tab-panels { position: relative; min-height: 320px; }
.tab-panel {
    display: none;
    opacity: 0;
    transform: translateY(18px);
}
.tab-panel.active {
    display: block;
    animation: tabIn 0.7s var(--ease-liquid) forwards;
}
@keyframes tabIn {
    to { opacity: 1; transform: translateY(0); }
}
/* УХОД старой панели: держится поверх потока (absolute) и плавно гаснет вверх,
   пока новая панель уже въезжает в поток снизу → мягкий кроссфейд без рывка. */
.tab-panel.tab-out {
    display: block;
    position: absolute;
    top: 0; left: 0; right: 0;
    pointer-events: none;
    animation: tabOut 0.36s var(--ease-liquid) forwards;
}
@keyframes tabOut {
    from { opacity: 1; transform: translateY(0); }
    to   { opacity: 0; transform: translateY(-16px); }
}
@media (prefers-reduced-motion: reduce) {
    .tab-panel.active { animation: none; opacity: 1; transform: none; }
    .tab-panel.tab-out { animation: none; display: none; }
}

.project-intro {
    text-align: center;
    max-width: 620px;
    margin: 0 auto 40px;
}
.project-name {
    font-family: var(--font-heading);   /* Days One */
    font-size: 1.9rem;
    font-weight: 400;
    letter-spacing: -0.5px;
    margin: 0 0 14px;
    color: var(--text-main);
}
.project-desc {
    font-family: var(--font-premium);
    font-size: 0.98rem;
    font-weight: 400;
    line-height: 1.65;
    color: var(--text-muted);
}

.wt-grid { display: grid; gap: 24px; }
.wt-grid-2 { grid-template-columns: repeat(2, 1fr); max-width: 760px; margin: 0 auto; }
/* «Инструменты»: 2 карточки в ряд + 3-я НА ВСЮ ШИРИНУ (панель). Ширина колонок
   та же, что в «Upload method» (760px) → карточки одинакового размера во всех вкладках,
   верстка не «пляшет» из-за разного числа элементов. */
.wt-grid-3 { grid-template-columns: repeat(2, 1fr); max-width: 760px; margin: 0 auto; }
.wt-grid-3 > .premium-glass-card:nth-child(3) {
    grid-column: 1 / -1;          /* последняя карточка = панель на всю ширину */
    min-height: 130px;
}

/* ==========================================================================
   СЕКТОР 4: КОНТАКТЫ
   ========================================================================== */
.contact-wrap { width: 100%; max-width: 1100px; }

.contact-split-layout {
    display: grid;
    grid-template-columns: 1.1fr 1fr;
    gap: 70px;
    align-items: center;
}

.contact-glass-form-panel {
    position: relative;
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 24px;
    padding: 50px;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
    background: radial-gradient(circle at 80% 20%, rgba(255,255,255,0.04) 0%, transparent 55%),
               linear-gradient(135deg, rgba(16,16,20,0.93) 0%, rgba(10,10,12,0.96) 100%);
    transition: border-color var(--transition-slow), box-shadow var(--transition-slow), opacity 1.2s var(--ease-liquid), transform 1.2s var(--ease-liquid);
}
.contact-glass-form-panel:hover {
    border-color: rgba(255,255,255,0.12);
    box-shadow: 0 15px 35px rgba(255,255,255,0.02), inset 0 1px 0 rgba(255,255,255,0.12);
}

.liquid-form { display: flex; flex-direction: column; gap: 34px; }
.form-meta-tag {
    font-family: var(--font-mono);
    font-size: 0.68rem;
    color: var(--text-muted);
    letter-spacing: 2px;
}

/* ГРУППА ПОЛЯ: поле-рамка, лейбл плавно садится на верхнюю границу */
.liquid-input-group {
    position: relative;
    width: 100%;
}
.liquid-input-group input,
.liquid-input-group textarea {
    width: 100%;
    background: rgba(255,255,255,0.015);
    border: 1px solid rgba(255,255,255,0.14);
    border-radius: 14px;
    padding: 17px 18px;
    outline: none;
    font-family: var(--font-premium);
    font-size: 1rem;
    color: var(--text-main);
    transition: border-color var(--transition-fast), background-color var(--transition-fast);
    user-select: text;
}
.liquid-input-group textarea { resize: none; min-height: 112px; line-height: 1.6; }
.liquid-input-group input:focus,
.liquid-input-group textarea:focus {
    border-color: rgba(255,255,255,0.45);
    background: rgba(255,255,255,0.035);
}

/* лейбл: тот же шрифт в обоих состояниях, без смены letter-spacing */
.liquid-input-group label {
    position: absolute;
    left: 14px;
    top: 18px;
    padding: 0 6px;
    color: var(--text-dim);
    font-family: var(--font-premium);
    font-size: 1rem;
    pointer-events: none;
    background-color: transparent;
    transform-origin: left center;
    transition: transform var(--transition-fast), color var(--transition-fast), background-color var(--transition-fast);
}
.liquid-input-group input:focus ~ label,
.liquid-input-group input:not(:placeholder-shown) ~ label,
.liquid-input-group textarea:focus ~ label,
.liquid-input-group textarea:not(:placeholder-shown) ~ label {
    transform: translateY(-27px) scale(0.82);
    color: var(--text-main);
    background-color: #0e0e11;   /* перекрывает линию рамки — лейбл «сидит» на ней */
}

/* SUBMIT — стиль card-action-btn + анимация заливки при отправке */
.liquid-submit-btn {
    position: relative;
    cursor: pointer;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 52px;
    border: 1px solid rgba(255,255,255,0.14);
    background: rgba(255,255,255,0.055);
    border-radius: 50px;
    overflow: hidden;
    isolation: isolate;
    transition: border-color var(--transition-btn-liquid), background-color var(--transition-btn-liquid), transform var(--transition-btn-liquid);
}
.liquid-submit-btn:hover {
    border-color: rgba(255,255,255,0.3);
    background: rgba(255,255,255,0.09);
    transform: scale(0.99);
}
.liquid-submit-btn:hover .liquid-bg { opacity: 1; }
.submit-text {
    position: relative;
    z-index: 2;
    font-family: var(--font-premium);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 2px;
    color: #d6d6d6;
    transition: color 0.5s ease, opacity 0.3s ease;
}
.liquid-submit-btn:hover .submit-text { color: var(--text-main); }

/* ==========================================================================
   АНИМАЦИЯ ЗАЛИВКИ (Copied / Sent) — единый Ч/Б приём
   ========================================================================== */
.fill-layer {
    position: absolute;
    inset: 0;
    z-index: 1;
    background: #ffffff;
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.5s var(--ease-liquid);
    pointer-events: none;
}

/* SUBMIT: успешная отправка */
.submit-feedback {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: var(--font-premium);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 2px;
    color: #000;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease 0.12s;
}
.liquid-submit-btn.sent { pointer-events: none; border-color: rgba(255,255,255,0.5); }
.liquid-submit-btn.sent .fill-layer { transform: scaleX(1); }
.liquid-submit-btn.sent .submit-text { opacity: 0; }
.liquid-submit-btn.sent .submit-feedback { opacity: 1; }
/* отправка идёт / ошибка доставки */
.liquid-submit-btn.busy { pointer-events: none; opacity: 0.8; }
.liquid-submit-btn.form-error { pointer-events: none; border-color: rgba(255,120,120,0.6); }

/* ПРАВАЯ КОЛОНКА — DIRECT LINE */
.contact-direct-info {
    display: flex;
    flex-direction: column;
    justify-content: center;
}
.direct-title {
    font-family: var(--font-heading);   /* Days One */
    font-size: 2.3rem;
    font-weight: 400;
    letter-spacing: -0.5px;
    background: linear-gradient(180deg, #fff 0%, #fff 50%, #8f8f8f 140%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}
.direct-nodes-list {
    margin-top: 36px;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.direct-item {
    position: relative;
    cursor: pointer;
    overflow: hidden;
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 18px;
    padding: 22px 28px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: linear-gradient(135deg, rgba(16,16,20,0.93) 0%, rgba(10,10,12,0.96) 100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
    transition: transform var(--transition-hover), border-color var(--transition-hover), box-shadow var(--transition-hover);
}
.direct-item:hover {
    transform: translate3d(0,-4px,0);
    border-color: rgba(255,255,255,0.15);
    box-shadow: 0 15px 35px rgba(255,255,255,0.02), inset 0 1px 0 rgba(255,255,255,0.12);
}
.direct-text { display: flex; flex-direction: column; gap: 6px; position: relative; z-index: 2; transition: opacity 0.25s ease; }
.direct-label {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    color: var(--text-muted);
    letter-spacing: 2px;
}
.direct-value {
    font-family: var(--font-premium);
    font-size: 1.05rem;
    font-weight: 500;
    color: var(--text-main);
    transition: transform var(--transition-hover);
}
.direct-item:hover .direct-value { transform: translateX(3px); }

.direct-action {
    position: relative;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 12px;
    transition: opacity 0.25s ease;
}
.copy-hint {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    color: var(--text-dim);
    letter-spacing: 1px;
    transition: color var(--transition-fast);
}
.direct-item:hover .copy-hint { color: var(--text-main); }

/* Кнопки Direct line — пилюля как в секторе 2.
   Карточка отзывается на свой ховер, а кнопка анимируется отдельно
   на свой (ховер/блик через глобальные правила .card-action-btn:hover).
   Клик по кнопке всплывает на всю строку → копирование/переход работают. */
.direct-action .card-action-btn {
    min-width: auto;
    height: 36px;
    padding: 9px 18px;
}

.direct-arrow {
    width: 15px; height: 15px;
    color: rgba(255,255,255,0.3);
    transition: transform var(--transition-hover), filter var(--transition-hover), color var(--transition-hover);
}
.direct-item:hover .direct-arrow {
    color: var(--text-main);
    filter: brightness(1.5);
    transform: translate3d(2px,-2px,0) rotate(45deg);
}

.direct-icon {
    width: 16px; height: 16px;
    color: rgba(255,255,255,0.4);
    transition: color var(--transition-fast);
}
.direct-item:hover .icon-copy { color: var(--text-main); }

/* состояние «скопировано»: заливка + центр «Copied» (строго Ч/Б) */
.copy-feedback {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: var(--font-mono);
    font-size: 0.82rem;
    letter-spacing: 2px;
    color: #000;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease 0.12s;
}
.direct-item.copyable.copied .fill-layer { transform: scaleX(1); }
.direct-item.copyable.copied .direct-text,
.direct-item.copyable.copied .direct-action { opacity: 0; }
.direct-item.copyable.copied .copy-feedback { opacity: 1; }
.direct-item.copyable.copied {
    border-color: rgba(255,255,255,0.5);
}

/* ==========================================================================
   ПОДВАЛ — КОМПАКТНЫЙ СТЕКЛЯННЫЙ БАР (как шапка)
   ========================================================================== */
.site-footer {
    position: relative;
    z-index: 2;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 16px;
    padding: 14px clamp(16px, 4vw, 46px);
    background: linear-gradient(0deg, rgba(18,18,22,0.72) 0%, rgba(10,10,12,0.50) 100%);
    backdrop-filter: blur(20px) saturate(1.2);
    -webkit-backdrop-filter: blur(20px) saturate(1.2);
    border-top: 1px solid rgba(255,255,255,0.10);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.05), 0 -6px 24px rgba(0,0,0,0.25);
}
.footer-zone { display: flex; align-items: center; gap: 12px; min-width: 0; }
.footer-left { justify-content: flex-start; }
.footer-center { justify-content: center; }
.footer-right { justify-content: flex-end; }
/* В подвале нужна ТОЛЬКО марка «serophito © 2026 • all rights reserved» — живой статус по
   центру и мета справа убраны (по требованию). Одна колонка → строка не обрезается. */
.site-footer { grid-template-columns: 1fr; }
.footer-center, .footer-right { display: none; }

/* марка слева — короткий «штамп» в стиле сайта */
.footer-mark {
    font-family: var(--font-mono);
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 3px;
    color: var(--text-main);
    opacity: 0.85;
}
.footer-sep {
    width: 1px;
    height: 14px;
    background: rgba(255,255,255,0.14);
    flex-shrink: 0;
}
.footer-copy {
    font-family: var(--font-mono);
    font-size: 0.64rem;
    color: var(--text-muted);
    letter-spacing: 1px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* живой статус по центру — пульсирующая точка «всё работает» */
.footer-status {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 2px;
    text-transform: uppercase;
    color: rgba(255,255,255,0.5);
}
.footer-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 0 8px 1px rgba(255,255,255,0.6);
    animation: footerPulse 2.6s ease-in-out infinite;
}
@keyframes footerPulse {
    0%, 100% { opacity: 0.35; transform: scale(0.85); }
    50%      { opacity: 1; transform: scale(1); }
}
.footer-meta {
    font-family: var(--font-mono);
    font-size: 0.64rem;
    color: rgba(255,255,255,0.35);
    letter-spacing: 2px;
    transition: color var(--transition-fast);
}
.footer-meta:hover { color: rgba(255,255,255,0.6); }

@media (max-width: 680px) {
    .site-footer { grid-template-columns: 1fr; }
    .footer-center, .footer-right { display: none; }
}

/* ==========================================================================
   CLICK-ЭФФЕКТ «ТЕХНО-ОСКОЛКИ» (Ч/Б) — разлетаются от курсора
   Разные детальки: глифы, тонкие штрихи, мини-рамки/кольца.
   ========================================================================== */
.click-debris {
    position: fixed;
    z-index: 999;
    pointer-events: none;
    top: 0; left: 0;
    transform: translate(-50%, -50%);
    opacity: 0;
    color: rgba(255,255,255,0.85);
    font-family: var(--font-mono);
    line-height: 1;
    white-space: nowrap;
    will-change: transform, opacity;
}
.click-debris.debris-glyph { font-weight: 400; letter-spacing: 0.5px; }
.click-debris.debris-line {
    width: 1px;
    background: linear-gradient(180deg, transparent, rgba(255,255,255,0.85), transparent);
}
.click-debris.debris-shape {
    border: 1px solid rgba(255,255,255,0.8);
    background: transparent;
}
/* акцентные осколки — ярче и со свечением */
.click-debris.accent { color: #fff; text-shadow: 0 0 8px rgba(255,255,255,0.6); }
.click-debris.accent.debris-line { box-shadow: 0 0 8px rgba(255,255,255,0.5); }
.click-debris.accent.debris-shape { border-color: #fff; box-shadow: 0 0 8px rgba(255,255,255,0.45); }

.click-debris.animate {
    animation: debrisBurst var(--duration, 1s) cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
@keyframes debrisBurst {
    0% {
        transform: translate(-50%, -50%) scale(var(--start-scale, 1)) rotate(0deg);
        opacity: 1;
    }
    60% { opacity: 1; }
    100% {
        transform: translate(calc(-50% + var(--tx)), calc(-50% + var(--ty))) scale(0.35) rotate(var(--tr));
        opacity: 0;
    }
}
@media (prefers-reduced-motion: reduce) {
    .click-debris { display: none !important; }
}

/* ==========================================================================
   АДАПТИВНОСТЬ
   ========================================================================== */
@media (max-width: 968px) {
    .fullscreen-section { padding: 110px 6% 80px; }

    .site-nav { grid-template-columns: auto 1fr auto; padding: 10px 14px; gap: 8px; }
    .nav-logo { height: 30px; padding-right: 10px; }
    .nav-zone { gap: 10px; }
    .nav-links { gap: 0; }
    .nav-link { font-size: 0.82rem; padding: 6px 9px; }
    .nav-link.active { transform: scale(1.14); padding: 6px 12px; }
    /* плеер в шапке — только на полноценном десктопе (>968px); на планшете/телефоне
       шапка узкая, он бы давил меню. */
    .np-name, .music-switch { display: none; }

    /* карточки ОСТАЮТСЯ по 2 на планшете/ноутбуке — на одну колонку сваливаемся
       только на телефоне (≤560px, см. ниже). Раньше схлопывалось уже здесь → «по одной». */
    .hub-grid { gap: 18px; }

    .premium-glass-card:hover { transform: none; }
    .premium-glass-card:hover .card-title { transform: none; }
    .premium-glass-card:hover .card-arrow { transform: none; }

    .contact-split-layout { grid-template-columns: 1fr; gap: 45px; }
    .contact-glass-form-panel { padding: 38px 28px; }
    .direct-title { font-size: 2rem; }

    .site-footer { gap: 12px; }
}

/* ==========================================================================
   ВХОД В HERO (кликабельный serophito) + ПЕРЕХОД ЧЕРЕЗ ЧЁРНУЮ ДЫРУ
   ========================================================================== */

/* ── Заголовок serophito = «вход» (чёрная дыра рисуется на canvas позади) ── */
#heroEnter {
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: filter var(--transition-medium), letter-spacing var(--transition-medium),
                transform var(--transition-medium);
}
#heroEnter:hover,
#heroEnter:focus-visible {
    outline: none;
    letter-spacing: 0.5px;
    transform: scale(1.015);
    filter: drop-shadow(0 0 26px rgba(255,255,255,0.35));
}

/* подсказка под заголовком — ярчеет, когда наводишь на serophito */
.enter-hint {
    margin-top: 26px;
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 3px;
    color: var(--text-muted);
    /* подпись — НЕ кликабельна: обычный курсор, клики не ловит (вход — только заголовок serophito) */
    cursor: default;
    pointer-events: none;
    transition: color var(--transition-fast), letter-spacing var(--transition-fast), opacity var(--transition-fast);
    animation: enterHintBreath 3.6s ease-in-out infinite;
}
#heroEnter:hover ~ .enter-hint,
#heroEnter:focus-visible ~ .enter-hint {
    color: var(--text-main);
    letter-spacing: 4px;
}
@keyframes enterHintBreath {
    0%, 100% { opacity: 0.6; }
    50%      { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
    .enter-hint { animation: none !important; }
}

/* ── Заголовок «inner space» = ВОЗВРАТ (зеркало serophito-портала на главной) ── */
#dimReturn {
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    transition: filter var(--transition-medium), letter-spacing var(--transition-medium),
                transform var(--transition-medium);
}
#dimReturn:hover,
#dimReturn:focus-visible {
    outline: none;
    letter-spacing: 0.5px;
    transform: scale(1.015);
    filter: drop-shadow(0 0 26px rgba(255,255,255,0.35));
}
/* подсказка под заголовком — ярчеет при наведении на «inner space» (как enter-hint) */
.dim-hint {
    display: block;
    margin-top: 26px;
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 3px;
    color: var(--text-muted);
    /* подпись — НЕ кликабельна: обычный курсор, клики не ловит (возврат — только заголовок bio.serophito.com) */
    cursor: default;
    pointer-events: none;
    transition: color var(--transition-fast), letter-spacing var(--transition-fast), opacity var(--transition-fast);
    animation: enterHintBreath 3.6s ease-in-out infinite;
}
#dimReturn:hover ~ .dim-hint,
#dimReturn:focus-visible ~ .dim-hint {
    color: var(--text-main);
    letter-spacing: 4px;
}
@media (prefers-reduced-motion: reduce) {
    .dim-hint { animation: none !important; }
}

/* МЕНЮ СЕКЦИЙ в шапке при входе во второе пространство НЕ исчезает мгновенно, а плавно
   и НЕТОРОПЛИВО гаснет и приподнимается под темп длинного перехода (зеркально на выходе). */
.nav-links {
    /* ВОЗВРАТ из 2-го пространства: разделы основного появляются ПОЗДНО (delay 2.25s),
       синхронно с возвратом основного контента — а не сразу после клика. */
    transition: opacity 0.9s var(--ease-liquid) 2.25s, transform 0.9s var(--ease-liquid) 2.25s;
}
body.in-dimension .nav-links {
    opacity: 0;
    transform: translateY(-12px);
    pointer-events: none;
    /* ВХОД: гаснут быстро на старте всасывания, без задержки */
    transition: opacity 0.7s var(--ease-liquid), transform 0.7s var(--ease-liquid);
}

/* ПЕРЕХОД ШАПКИ: в глубоком пространстве ЛОГОТИП (+разделитель), ПЕРЕКЛЮЧАТЕЛЬ ЯЗЫКА и
   правый блок (плеер/пасхалка) плавно уезжают вверх и гаснут — синхронно с основным меню.
   Остаётся ТОЛЬКО лента разделов 2-го пространства (центрируется по всей ширине, ничего не
   перекрывает → чинит русскую шапку). На возврате всё появляется обратно (поздняя задержка). */
.nav-left, .nav-right {
    transition: opacity 0.9s var(--ease-liquid) 2.25s, transform 0.9s var(--ease-liquid) 2.25s;
}
body.in-dimension .nav-left,
body.in-dimension .nav-right {
    opacity: 0;
    transform: translateY(-12px);
    pointer-events: none;
    transition: opacity 0.7s var(--ease-liquid), transform 0.7s var(--ease-liquid);
}

/* ШАПКА 2-ГО ПРОСТРАНСТВА — разделы по центру; видны только in-dimension, появляются
   РОВНО когда материализуется контент 2-го пространства (синхрон с переходом). */
.dim-nav-links {
    position: absolute;
    left: 50%;
    top: 50%;
    /* ИДЕНТИЧНО основной шапке: скрытое состояние = приподнято вверх + прозрачно
       (центрирование сохраняем через calc). На выходе шапка «уходит вверх» так же,
       как .nav-links на входе. */
    transform: translate(-50%, calc(-50% - 12px));
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 2px;
    /* НЕ даём 5 разделам (вкл. длинное «БЛАГОДАРНОСТИ») вылезти на логотип/края:
       коробка по ширине контента и СТРОГО центрирована; если шире лимита — мягкий
       горизонтальный скролл вместо наезда на логотип/края. */
    width: max-content;
    max-width: min(640px, 56vw);
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.7s var(--ease-liquid), transform 0.7s var(--ease-liquid);
}
.dim-nav-links::-webkit-scrollbar { display: none; }
.dim-nav-links .nav-link {
    flex: 0 0 auto;
    white-space: nowrap;
    font-size: 0.84rem;
    padding: 6px 11px;
}
.dim-nav-links .nav-link.active { padding: 6px 13px; }
body.in-dimension .dim-nav-links {
    opacity: 1;
    transform: translate(-50%, -50%);
    pointer-events: auto;
    /* появляется ПОЗДНО (синхронно с материализацией контента), слайдом сверху вниз */
    transition: opacity 0.9s var(--ease-liquid) 2.3s, transform 0.9s var(--ease-liquid) 2.3s;
}

/* ── Состояния тела ── */
body.warping,
body.in-dimension { overflow: hidden; }

/* ПЕРЕХОД: главный контент «засасывается» в чёрную дыру по центру —
   стягивается в точку с закруткой, гаснет и размывается. Затем (с задержкой)
   из сингулярности «большим взрывом» разворачивается #dimension.
   Базовый transition (без класса) = плавное возвращение на выходе (ease-out);
   transition внутри .in-dimension = ускоряющийся «засос» на входе (ease-in). */
.fullscreen-section,
.site-footer {
    transform-origin: 50% 47%;   /* центр дыры — контент засасывается ровно в неё */
    /* ВЫХОД: возврат main ЗЕРКАЛИТ проявление .dimension на входе. Задержка 1.85s ≈ старт
       РАЗЛЁТА частиц при выходе (T0.60 от темпа 2.8s) — main-текст появляется ровно тогда,
       когда объекты начали выбрасываться по местам, а не пока кольцо ещё крутится. */
    transition: transform 1.1s cubic-bezier(0.16, 0.84, 0.44, 1) 2.25s,
                opacity 1.0s ease 2.25s, filter 1.0s ease 2.25s;
}
body.in-dimension .fullscreen-section,
body.in-dimension .site-footer {
    transform: scale(0.03);      /* чистый «засос» к центру, без вращения */
    opacity: 0;
    filter: blur(5px);
    pointer-events: none;
    /* ускоряющийся «засос» в дыру (ease-in) — синхронно с воронкой на canvas */
    transition: transform 1.05s cubic-bezier(0.55, 0.0, 1, 0.45),
                opacity 1.0s cubic-bezier(0.55, 0.0, 1, 0.45),
                filter 1.0s ease-in;
}

/* ==========================================================================
   ВТОРОЕ ПРОСТРАНСТВО
   ========================================================================== */
/* ЗАТЕМНЕНИЕ ГЛУБИНЫ — отдельный fixed-слой, который ТОЛЬКО гаснет/проявляется и
   НИКОГДА не масштабируется. Раньше тёмный фон жил на .dimension и на выходе ужимался
   вместе с ней в «чёрный прямоугольник» — теперь он вынесен сюда. */
.dimension-veil {
    position: fixed;
    inset: 0;
    z-index: 35;                     /* выше main-контента, ниже .dimension(40) и nav(50) */
    pointer-events: none;
    opacity: 0;
    background: radial-gradient(circle at 50% 32%, rgba(0,0,0,0) 0%, rgba(0,0,0,0.55) 100%);
    transition: opacity 0.85s var(--ease-liquid);   /* плавное гашение на выходе */
}
body.in-dimension .dimension-veil {
    opacity: 1;
    transition: opacity 1.0s var(--ease-liquid) 0.6s;   /* проявляется вслед за всасыванием */
}

.dimension {
    position: fixed;
    inset: 0;
    z-index: 40;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: scale(0.72);          /* мягко наезжает из темноты, не «из точки» */
    filter: blur(6px);
    transform-origin: 50% 47%;       /* центр дыры (откуда мы вышли с той стороны) */
    background: transparent;         /* затемнение переехало в .dimension-veil (см. выше) */
    transition: opacity 1.0s var(--ease-liquid), transform 1.05s var(--ease-liquid),
                filter 1.0s var(--ease-liquid), visibility 1.0s linear;
}
body.in-dimension .dimension {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: scale(1);
    filter: blur(0);
    /* ждём СХОД в кольцо + вращение, и проявляемся РОВНО на старте разлёта частиц
       (≈1.95s от темпа входа 3.0s) — синх. с cosmos onArrive (fireAt 0.64). Пока кольцо
       крутится, текста нет: видно только вихрь объектов. */
    transition: opacity 1.0s var(--ease-liquid) 2.3s, transform 1.1s var(--ease-liquid) 2.3s,
                filter 1.0s var(--ease-liquid) 2.3s, visibility 0.1s linear 2.3s;
}

/* ВЫХОД: контент 2-го пространства ВСАСЫВАЕТСЯ в дыру (стягивается к центру 50% 47%
   и гаснет), а не пропадает мгновенно. Текст держится, пока идёт засасывание —
   ease-in ускоряется к центру, opacity гаснет чуть позже → видно «поглощение». */
body.dim-exiting .dimension {
    transform: scale(0.05);
    opacity: 0;
    filter: blur(8px);
    pointer-events: none;
    /* ЗЕРКАЛО входного всасывания main (body.in-dimension .fullscreen-section):
       ускоряющийся «засос» к центру с t=0, ~1.05s — синхронно со сходом частиц в кольцо */
    transition: transform 1.05s cubic-bezier(0.55, 0.0, 1, 0.45),
                opacity 1.0s cubic-bezier(0.55, 0.0, 1, 0.45),
                filter 1.0s ease-in,
                visibility 0s linear 1.05s;
}

/* prefers-reduced-motion: без масштабов/размытия/закрутки — простой кроссфейд */
@media (prefers-reduced-motion: reduce) {
    .dimension-veil { transition: opacity 0.3s ease; }
    .fullscreen-section,
    .site-footer { transition: opacity 0.3s ease; }
    body.dim-exiting .dimension { transform: none; filter: none; transition: opacity 0.3s ease; }
    body.in-dimension .fullscreen-section,
    body.in-dimension .site-footer { transition: opacity 0.3s ease; transform: none; filter: none; }
    .dimension { transform: none; filter: none; transition: opacity 0.3s ease, visibility 0.3s linear; }
    body.in-dimension .dimension { transform: none; filter: none; transition: opacity 0.3s ease 0s, visibility 0.1s linear 0s; }
}
.dimension-scroll {
    position: relative;   /* якорь для пасхалок-надписей (absolute), чтобы они скроллились с контентом */
    height: 100%;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 110px 5% 90px;
    -webkit-overflow-scrolling: touch;
}
.dimension-scroll::-webkit-scrollbar { width: 0; display: none; }

.dim-section {
    width: 100%;
    max-width: 1100px;
    margin: 0 auto;
    padding: 64px 0;
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* INTRO — заполняет ПЕРВЫЙ экран целиком, чтобы следующая карточка (about/витрина)
   не выглядывала снизу и не «обрезалась» при засасывании на возврате.
   Запас вычитает верхний паддинг скролла (см. .dimension-scroll). */
.dim-intro {
    text-align: center;
    min-height: calc(100vh - 120px);
    justify-content: center;
}
.dim-title {
    font-family: var(--font-heading);
    font-size: clamp(2.6rem, 7vw, 4.6rem);
    font-weight: 400;
    letter-spacing: -1px;
    line-height: 1;
    background: linear-gradient(180deg, #ffffff 0%, #ffffff 50%, #8a8a8a 140%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
}
.dim-sub {
    margin-top: 18px;
    font-family: var(--font-premium);
    font-size: 0.95rem;
    letter-spacing: 1px;
    color: var(--text-muted);
}

/* ABOUT — опущена ниже интро-сектора, чтобы карточка не «трогала» его и не попадала
   в фокус всасывания на переходе */
.dim-about { margin-top: 8vh; }
.about-panel {
    width: 100%;
    max-width: 760px;
    border: 1px solid rgba(255,255,255,0.07);
    border-radius: 24px;
    padding: 46px 50px;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
    background: radial-gradient(circle at 82% 12%, rgba(255,255,255,0.045) 0%, transparent 55%),
               linear-gradient(135deg, rgba(16,16,20,0.86) 0%, rgba(10,10,12,0.9) 100%);
}
.about-title {
    font-family: var(--font-heading);
    font-size: 2rem;
    font-weight: 400;
    letter-spacing: -0.5px;
    margin: 14px 0 20px;
    color: var(--text-main);
}
.about-body {
    font-family: var(--font-premium);
    font-size: 1.02rem;
    font-weight: 400;
    line-height: 1.8;
    color: var(--text-muted);
}

/* ВИТРИНА — ЛУЧШИЙ ЭДИТ (видео + покупка проекта на Boosty) */
.dim-showcase { margin-top: 4vh; }
.showcase-panel {
    width: 100%;
    max-width: 860px;
    border: 1px solid rgba(255,255,255,0.07);
    border-radius: 24px;
    padding: 18px 18px 24px;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
    background: radial-gradient(circle at 82% 12%, rgba(255,255,255,0.045) 0%, transparent 55%),
               linear-gradient(135deg, rgba(16,16,20,0.86) 0%, rgba(10,10,12,0.9) 100%);
}
.showcase-frame {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;       /* ЕДИНЫЙ размер у всех слайдов (не подгоняем под видео) */
    border-radius: 16px;
    overflow: hidden;
    background: #000;
    box-shadow: 0 12px 40px rgba(0,0,0,0.5);
    line-height: 0;
}
.showcase-video {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;        /* видео вписывается в единую рамку, не растягивая её */
    background: #000;
}
.showcase-info {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 28px;
    margin-top: 22px;
    padding: 0 8px;
}
.showcase-text { min-width: 0; }
.showcase-title {
    font-family: var(--font-heading);
    font-size: 1.5rem;
    font-weight: 400;
    letter-spacing: -0.5px;
    color: var(--text-main);
}
.showcase-desc {
    margin-top: 8px;
    font-family: var(--font-premium);
    font-size: 0.92rem;
    line-height: 1.55;
    color: var(--text-muted);
}
.showcase-buy { flex-shrink: 0; min-width: 170px; }
@media (max-width: 720px) {
    .showcase-info {
        flex-direction: column;
        align-items: flex-start;
        gap: 18px;
    }
    .showcase-buy { width: 100%; }
}

/* ── КАРУСЕЛЬ ВИТРИНЫ: 2 слайда (эдит / коллаб) со стрелкой ── */
.showcase-carousel {
    position: relative;
    width: 100%;
    max-width: 860px;
    margin: 0 auto;
}
.showcase-track { position: relative; touch-action: pan-y; cursor: grab; }
.showcase-track:active { cursor: grabbing; }
/* слайды: активный в потоке (задаёт высоту, у всех одинаковую), неактивные — поверх.
   Листание = мягкий fade + лёгкий сдвиг ПО НАПРАВЛЕНИЮ нажатия (вперёд = справа,
   назад = слева). БЕЗ масштабирования/блюра и «выпучивания» — карточка просто
   плавно меняется. Направление задаёт класс .to-prev на карусели (ставит script.js). */
.showcase-slide {
    max-width: none;
    opacity: 0;
    visibility: hidden;
    position: absolute;
    inset: 0;
    /* НЕактивный слайд НЕ держит постоянный сдвиг-трансформ — он просто погашен.
       Любое движение даёт ТОЛЬКО входная keyframe-анимация активного слайда, чья
       конечная точка = translateX(0). Поэтому слайд физически не может «застрять»
       сдвинутым (старый баг при свайпе назад). */
    transform: none;
    transition: opacity 0.4s var(--ease-liquid), visibility 0s linear 0.4s;
}
.showcase-slide.active {
    opacity: 1;
    visibility: visible;
    position: relative;
    inset: auto;
    transform: none;
    transition: opacity 0.4s var(--ease-liquid), visibility 0s;
    animation: scSlideInNext 0.42s var(--ease-liquid);
}
/* вперёд — приходит справа; назад (.to-prev) — слева. Конец всегда 0 → без залипания. */
@keyframes scSlideInNext { from { opacity: 0; transform: translateX(34px); } to { opacity: 1; transform: translateX(0); } }
@keyframes scSlideInPrev { from { opacity: 0; transform: translateX(-34px); } to { opacity: 1; transform: translateX(0); } }
.showcase-carousel.to-prev .showcase-slide.active { animation-name: scSlideInPrev; }
@media (prefers-reduced-motion: reduce) {
    .showcase-slide.active { animation: none; }
}

/* стрелки-переключатели УБРАНЫ: листание теперь свайпом (влево/вправо) + точки.
   Кнопки оставлены в DOM, но скрыты — JS-обработчики на них безвредны. */
.showcase-arrow { display: none !important; }
.showcase-arrow {
    position: absolute;
    top: 38%;
    transform: translateY(-50%);
    z-index: 6;
    width: 46px;
    height: 46px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.14);
    background: rgba(18, 18, 24, 0.6);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    color: var(--text-main);
    cursor: pointer;
    transition: background 0.25s var(--ease-liquid), border-color 0.25s var(--ease-liquid), transform 0.25s var(--ease-liquid);
}
.showcase-arrow svg { width: 22px; height: 22px; }
.showcase-arrow:hover {
    background: rgba(40, 40, 48, 0.82);
    border-color: rgba(255, 255, 255, 0.32);
}
.showcase-arrow:active { transform: translateY(-50%) scale(0.92); }
.showcase-prev { left: -62px; }
.showcase-next { right: -62px; }

/* точки-индикаторы */
.showcase-dots {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 18px;
}
.sc-dot {
    width: 8px;
    height: 8px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.25);
    cursor: pointer;
    transition: background 0.25s var(--ease-liquid), transform 0.25s var(--ease-liquid);
}
.sc-dot.active {
    background: var(--text-main);
    transform: scale(1.3);
}

/* ПОДСКАЗКА «свайпни» — мягко пульсирует под точками, гаснет после первого листания.
   На десктопе не нужна (там точки + перетаскивание мышью очевидны) → только на тач. */
.swipe-hint {
    display: none;
    text-align: center;
    margin-top: 12px;
    font-family: var(--font-mono);
    font-size: 0.62rem;
    letter-spacing: 3px;
    text-transform: uppercase;
    color: var(--text-dim);
    pointer-events: none;
    animation: swipeHintPulse 2.2s ease-in-out infinite;
    transition: opacity 0.4s ease;
}
.swipe-hint.hidden { opacity: 0; }
@keyframes swipeHintPulse {
    0%, 100% { opacity: 0.35; }
    50%      { opacity: 0.85; }
}
@media (hover: none) { .swipe-hint { display: block; } }
@media (prefers-reduced-motion: reduce) { .swipe-hint { animation: none; } }

/* оверлей-заглушка: видео грузится ТОЛЬКО по клику */
.video-loader {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 14px;
    border: none;
    cursor: pointer;
    background: radial-gradient(circle at 50% 45%, rgba(20, 20, 26, 0.32), rgba(0, 0, 0, 0.72));
    color: var(--text-main);
    transition: opacity 0.4s var(--ease-liquid);
}
.video-loader-icon {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid rgba(255, 255, 255, 0.3);
    background: rgba(255, 255, 255, 0.08);
    transition: transform 0.25s var(--ease-liquid), background 0.25s var(--ease-liquid);
}
.video-loader-icon svg { width: 28px; height: 28px; margin-left: 3px; }
.video-loader:hover .video-loader-icon {
    transform: scale(1.08);
    background: rgba(255, 255, 255, 0.16);
}
.video-loader-text {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    letter-spacing: 2px;
    text-transform: uppercase;
    color: var(--text-muted);
}
/* до загрузки прячем сам <video> (его пустые контролы проступали сквозь оверлей) */
.showcase-frame:not(.loaded) .showcase-video { opacity: 0; }
.showcase-frame.loaded .video-loader { opacity: 0; pointer-events: none; }
/* слайд без файла видео (коллаб ещё не задан): не приглашает к клику */
.showcase-frame.no-video .video-loader { cursor: default; }
.showcase-frame.no-video .video-loader-icon { opacity: 0.45; }

/* БЕЙДЖ FREE — угловой «стикер» в верхнем правом углу КНОПКИ. Острые углы, под наклоном
   (угол ОТЛИЧАЕТСЯ от «Подробнее» — наклон в другую сторону), белый на чёрном тексте.
   overflow:visible на кнопке + запас сверху (showcase-info видимый) → не обрезается. */
.showcase-buy { position: relative; overflow: visible; }
.free-badge {
    position: absolute;
    top: -13px;
    right: -10px;
    z-index: 6;
    padding: 3px 10px;
    border-radius: 2px;
    background: #fff;
    color: #000;
    font-family: var(--font-mono);
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 1.5px;
    line-height: 1.3;
    transform: rotate(7deg);
    box-shadow: 0 3px 12px rgba(0,0,0,0.5);
    pointer-events: none;
}

/* БОНУС «Подробнее» — угловой белый СТИКЕР (как FREE: острые углы, наклон, белый фон),
   в верхнем ЛЕВОМ углу рамки. Виден, когда пролистал все слайды. */
.more-badge {
    position: absolute;
    top: 14px;
    left: 14px;
    z-index: 5;
    display: none;
    align-items: center;
    padding: 4px 11px;
    border-radius: 2px;
    background: #fff;
    color: #000;
    font-family: var(--font-mono);
    font-size: 0.6rem;
    font-weight: 700;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    transform: rotate(-8deg);
    box-shadow: 0 3px 12px rgba(0,0,0,0.5);
    cursor: pointer;
    transition: transform 0.25s var(--ease-liquid), box-shadow 0.25s var(--ease-liquid);
}
.showcase-carousel.bonus .more-badge { display: inline-flex; animation: moreBadgeIn 0.5s var(--ease-liquid); }
.more-badge:hover { transform: rotate(-8deg) scale(1.06); box-shadow: 0 5px 16px rgba(0,0,0,0.6); }
.more-badge:active { transform: rotate(-8deg) scale(0.95); }
@keyframes moreBadgeIn {
    from { opacity: 0; transform: rotate(-8deg) translateY(-8px) scale(0.85); }
    to   { opacity: 1; transform: rotate(-8deg); }
}

/* ПАНЕЛЬ «Подробнее» — описание поверх видео (видео скрывается под ней) */
.more-panel {
    position: absolute;
    inset: 0;
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 30px 34px;
    background: linear-gradient(135deg, rgba(14,14,18,0.95) 0%, rgba(8,8,10,0.97) 100%);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.4s var(--ease-liquid), visibility 0s linear 0.4s;
}
.showcase-frame.show-more .more-panel { opacity: 1; visibility: visible; transition: opacity 0.4s var(--ease-liquid); }
.showcase-frame.show-more .video-loader { opacity: 0; pointer-events: none; }
.more-text {
    font-family: var(--font-premium);
    font-size: 1rem;
    line-height: 1.65;
    color: var(--text-main);
    text-align: center;
    max-width: 92%;
}

@media (max-width: 960px) {
    .showcase-prev { left: 6px; }
    .showcase-next { right: 6px; }
    .showcase-arrow { background: rgba(10, 10, 12, 0.72); }
}

/* CREDITS — СОЗВЕЗДИЕ */
.cr-hint {
    font-family: var(--font-mono);
    font-size: 0.64rem;
    letter-spacing: 2px;
    color: var(--text-dim);
}
.constellation {
    position: relative;
    width: min(100%, 460px);   /* квадратная рамка — сердце не растягивается вширь */
    aspect-ratio: 1 / 1;
    margin: 8px auto 0;
}
.constellation-lines {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    overflow: visible;
}
.const-star {
    position: absolute;
    transform: translate(-50%, -50%);
    width: 18px; height: 18px;
    padding: 0;
    border: none;
    background: none;
    cursor: pointer;
}
.const-star:focus-visible { outline: none; }
.const-star::before {
    content: '';
    position: absolute;
    inset: 0; margin: auto;
    width: 6px; height: 6px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 0 8px 2px rgba(255,255,255,0.45);
    transition: transform var(--transition-fast), box-shadow var(--transition-fast);
}
.const-star::after {
    content: '';
    position: absolute;
    inset: -7px;
    border-radius: 50%;
    border: 1px solid rgba(255,255,255,0.4);
    opacity: 0;
    transform: scale(0.55);
    transition: opacity var(--transition-fast), transform var(--transition-fast);
}
.const-star:hover::before,
.const-star:focus-visible::before,
.const-star.active::before { transform: scale(1.6); box-shadow: 0 0 16px 5px rgba(255,255,255,0.7); }
.const-star:hover::after,
.const-star:focus-visible::after,
.const-star.active::after { opacity: 1; transform: scale(1); }

/* ── СЕРДЦЕ-СОЗВЕЗДИЕ: линии контура ── */
.constellation-lines line {
    stroke: rgba(255,255,255,0.18);
    stroke-width: 1;
    /* плавный (1с) переход толщины и яркости в обе стороны → 60fps без рывков */
    transition: stroke 1s var(--ease-liquid), stroke-width 1s var(--ease-liquid);
}

/* НАГРАДА (когда открыты ВСЕ благодарности): линии становятся ЖИРНЕЕ и ЯРЧЕ
   на ~2 секунды, плавно, БЕЗ масштаба и без волн/капли. Затем так же плавно гаснут. */
.constellation.beat .constellation-lines line {
    stroke: rgba(255,255,255,0.95);
    stroke-width: 2.6;
}
.constellation.beat .const-star::before {
    background: #fff;
    box-shadow: 0 0 22px 7px rgba(255,255,255,0.85);
    transition: box-shadow 1s var(--ease-liquid);
}

/* ── ПАСХАЛКИ: скрытые точки + микро-эффекты по клику ──
   .egg-spot — анкер не выдаёт кликабельность (обычный курсор). Эффекты —
   position:fixed поверх всего, не влияют на лэйаут, сами удаляются из JS. */
.egg-spot { cursor: default; -webkit-user-select: none; user-select: none; }

.egg-ring,
.egg-spark,
.egg-glyph {
    position: fixed;
    z-index: 90000;
    pointer-events: none;
    will-change: transform, opacity;
}
.egg-ring {
    width: 16px; height: 16px;
    margin: -8px 0 0 -8px;
    border-radius: 50%;
    border: 1.5px solid rgba(255,255,255,0.6);
    opacity: 0;
    animation: eggRing 0.9s var(--ease-liquid) forwards;
}
@keyframes eggRing {
    0%   { opacity: 0.85; transform: scale(0.3); }
    100% { opacity: 0; transform: scale(7); border-width: 0.4px; }
}
.egg-spark {
    color: #fff;
    margin: -0.5em 0 0 -0.5em;
    text-shadow: 0 0 8px rgba(255,255,255,0.85);
    opacity: 0;
    animation: eggSpark 0.85s ease-out forwards;
}
@keyframes eggSpark {
    0%   { opacity: 0; transform: translate(0, 0) scale(0.4); }
    20%  { opacity: 1; }
    100% { opacity: 0; transform: translate(var(--ex), var(--ey)) scale(1.1); }
}
.egg-glyph {
    font-family: var(--font-mono);
    font-size: 0.8rem;
    letter-spacing: 1px;
    color: #fff;
    text-shadow: 0 0 10px rgba(255,255,255,0.7);
    transform: translate(-50%, -50%);
    opacity: 0;
    animation: eggGlyph 1.1s var(--ease-liquid) forwards;
}
@keyframes eggGlyph {
    0%   { opacity: 0; transform: translate(-50%, -30%) scale(0.8); }
    25%  { opacity: 1; }
    100% { opacity: 0; transform: translate(-50%, -160%) scale(1); }
}

/* всплывающая ФРАЗА пасхалки — «выброс в космос»: ЖИВЁТ В ПОТОКЕ СТРАНИЦЫ (position:absolute,
   easter.js крепит её к body/внутреннему скроллу → при прокрутке двигается вместе с сайтом,
   а не висит поверх экрана). Летит в сторону --tx/--ty, дрейфит и гаснет. Тёмная ОБВОДКА
   делает белый текст читаемым на любом фоне. Долгая (2.8s) — успеваешь прочитать. */
.egg-pop {
    position: absolute;
    z-index: 9000;
    pointer-events: none;
    transform: translate(-50%, -50%);
    font-family: var(--font-premium);
    font-size: 1rem;
    font-weight: 500;
    letter-spacing: 0.3px;
    color: #fff;
    /* обводка (4 угла) + мягкое тёмное гало → читается и на белом, и на чёрном */
    text-shadow:
        -1px -1px 0 rgba(0,0,0,0.92), 1px -1px 0 rgba(0,0,0,0.92),
        -1px  1px 0 rgba(0,0,0,0.92), 1px  1px 0 rgba(0,0,0,0.92),
        0 0 16px rgba(0,0,0,0.95), 0 0 26px rgba(0,0,0,0.7);
    white-space: nowrap;
    opacity: 0;
    will-change: transform, opacity;
    animation: eggThrow 1.3s cubic-bezier(0.12, 0.66, 0.2, 1) forwards;
}
/* ОДИН выброс: выстреливает в (--tx,--ty) с лёгким доворотом, быстро проявляется и гаснет */
@keyframes eggThrow {
    0%   { opacity: 0; transform: translate(-50%, -50%) translate(0, 0) rotate(0deg) scale(0.6); }
    20%  { opacity: 1; }
    100% { opacity: 0; transform: translate(-50%, -50%) translate(var(--tx, 0px), var(--ty, -120px)) rotate(var(--rot, 0deg)) scale(1); }
}
/* всплывающая КАРТИНКА для «&» (прозрачные png/webp из ampImages) — тоже выбрасывается */
.egg-img {
    position: absolute;
    z-index: 9000;
    pointer-events: none;
    width: clamp(90px, 14vw, 180px);
    height: auto;
    transform: translate(-50%, -50%);
    opacity: 0;
    will-change: transform, opacity;
    animation: eggImgThrow 1.3s cubic-bezier(0.12, 0.66, 0.2, 1) forwards;
    filter: drop-shadow(0 6px 18px rgba(0,0,0,0.55));
}
@keyframes eggImgThrow {
    0%   { opacity: 0; transform: translate(-50%, -50%) translate(0, 0) rotate(-4deg) scale(0.6); }
    20%  { opacity: 1; }
    100% { opacity: 0; transform: translate(-50%, -50%) translate(var(--tx, 0px), var(--ty, -90px)) rotate(var(--rot, 2deg)) scale(1); }
}

/* обёрнутое слово/символ в заголовке — НЕ выдаёт кликабельность (обычный курсор) */
.egg-word { cursor: default; }

/* невидимые зоны-хотспоты (курсор обычный, кликабельность скрыта) */
.nav-egg-zone {
    display: inline-block;
    width: 46px;
    height: 22px;
    flex-shrink: 0;
    cursor: default;
}
body.in-dimension .nav-egg-zone { pointer-events: none; }   /* работает только в основном пространстве */
/* «подвал» 2-го пространства — ОДНА компактная зона по центру в самом низу.
   Обычный клик → случайная фраза; каждый 11-й → слово БЯКА + secret.mp3.
   Не на всю ширину (раньше клик ловился по всей горизонтали) и без гигантской пустоты. */
.dim-footer-zone {
    width: min(62%, 440px);
    height: 15vh;
    margin: 8vh auto 6vh;
    cursor: default;
}
/* большой шар слева — зона ТОЛЬКО в левой полосе hero (на самой сфере фона).
   z-index НИЖЕ текста (.hero-center-manifest = 5), а ширина ограничена левым краем —
   поэтому центральный заголовок serophito ею не перекрывается: клик по нему = вход,
   а звук-пасхалка живёт строго в левой пустой зоне. */
.egg-sphere-zone {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: min(15vw, 190px);
    height: 60vh;
    z-index: 1;
    cursor: default;
}

/* ── ПАНЕЛЬ ПРОГРЕССА ПАСХАЛОК (клик по логотипу) ── */
.egg-panel-overlay {
    position: fixed;
    inset: 0;
    z-index: 100001;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(0,0,0,0.55);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.35s var(--ease-liquid), visibility 0s linear 0.35s;
}
.egg-panel-overlay.open { opacity: 1; visibility: visible; transition: opacity 0.35s var(--ease-liquid); }
.egg-panel {
    width: min(440px, 92vw);
    max-height: 80vh;
    overflow-y: auto;
    padding: 26px 28px;
    border-radius: 20px;
    border: 1px solid rgba(255,255,255,0.10);
    background: linear-gradient(160deg, rgba(20,20,26,0.96) 0%, rgba(10,10,12,0.97) 100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06), 0 24px 70px rgba(0,0,0,0.6);
    transform: translateY(14px) scale(0.98);
    transition: transform 0.4s var(--ease-liquid);
}
.egg-panel-overlay.open .egg-panel { transform: none; }
.egg-panel-head { display: flex; align-items: baseline; justify-content: space-between; }
.egg-panel-title {
    font-family: var(--font-heading);
    font-size: 1.5rem;
    color: var(--text-main);
}
.egg-panel-count {
    font-family: var(--font-mono);
    font-size: 0.8rem;
    letter-spacing: 1px;
    color: var(--text-main);
}
.egg-panel-sub {
    margin-top: 4px;
    font-family: var(--font-mono);
    font-size: 0.62rem;
    letter-spacing: 1.5px;
    text-transform: uppercase;
    color: var(--text-dim);
}
.egg-list { list-style: none; margin: 18px 0 0; padding: 0; }
.egg-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 11px 0;
    border-top: 1px solid rgba(255,255,255,0.06);
    font-family: var(--font-premium);
    font-size: 0.86rem;
    color: var(--text-muted);
    cursor: pointer;
}
.egg-row:hover { color: var(--text-main); }
.egg-row-mark {
    width: 16px;
    text-align: center;
    color: var(--text-dim);
    flex-shrink: 0;
    line-height: 1.5;
}
.egg-row.done { color: var(--text-main); }
.egg-row.done .egg-row-mark { color: #fff; text-shadow: 0 0 8px rgba(255,255,255,0.7); }
.egg-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.egg-row-reward { line-height: 1.5; }
/* СПОЙЛЕР «как найти» — скрыт, раскрывается по клику (или сразу для найденных) */
.egg-row-hint {
    margin-top: 0;
    max-height: 0;
    opacity: 0;
    overflow: hidden;
    font-family: var(--font-mono);
    font-size: 0.64rem;
    letter-spacing: 0.5px;
    color: var(--text-dim);
    transition: max-height 0.35s var(--ease-liquid), opacity 0.35s var(--ease-liquid), margin-top 0.35s var(--ease-liquid);
}
.egg-row.revealed .egg-row-hint { max-height: 40px; opacity: 1; margin-top: 5px; }
.egg-row-space {
    font-family: var(--font-mono);
    font-size: 0.56rem;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: var(--text-dim);
    flex-shrink: 0;
    line-height: 1.5;
}

.const-readout {
    position: absolute;
    left: 50%;
    bottom: 6px;
    transform: translateX(-50%);
    width: min(480px, 90%);
    text-align: center;
    display: flex;
    flex-direction: column;
    gap: 7px;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--transition-fast);
}
.const-readout.show { opacity: 1; }
.cr-name {
    font-family: var(--font-heading);
    font-size: 1.4rem;
    color: var(--text-main);
}
.cr-text {
    font-family: var(--font-premium);
    font-size: 0.92rem;
    line-height: 1.5;
    color: var(--text-muted);
}

/* ИНСТРУМЕНТЫ: ТАЙМКОД + AE-ПАНЕЛЬ */
.dim-tools {
    display: grid;
    grid-template-columns: minmax(240px, 300px) 1fr;
    gap: 28px;
    align-items: start;
}
.timecode-hud {
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 18px;
    padding: 26px 28px;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
    background: linear-gradient(135deg, rgba(16,16,20,0.86), rgba(10,10,12,0.9));
    font-family: var(--font-mono);
    display: flex;
    flex-direction: column;
    gap: 20px;
}
.tc-row { display: flex; flex-direction: column; gap: 5px; }
.tc-label { font-size: 0.56rem; letter-spacing: 2px; color: var(--text-dim); }
.tc-value {
    font-size: 1.75rem;
    letter-spacing: 2px;
    color: var(--text-main);
    font-variant-numeric: tabular-nums;
}
.tc-zone, .tc-date { font-size: 0.92rem; letter-spacing: 1px; color: var(--text-muted); }

.fx-panel {
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 18px;
    overflow: hidden;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
    background: linear-gradient(135deg, rgba(16,16,20,0.9), rgba(9,9,11,0.94));
}
.fx-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 13px 18px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
    background: rgba(255,255,255,0.025);
}
.fx-dots { display: flex; gap: 6px; }
.fx-dots i { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,0.16); }
.fx-title {
    font-family: var(--font-premium);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 2px;
    color: var(--text-main);
}
.fx-subtitle {
    font-family: var(--font-mono);
    font-size: 0.6rem;
    letter-spacing: 1px;
    color: var(--text-dim);
    margin-left: auto;
}
/* ── ПАНЕЛЬ ПЛАГИНОВ (реальные эффекты на весь сайт) ── */
.fx-plugins { display: flex; flex-direction: column; padding: 4px 0; }
.plugin {
    padding: 16px 22px;
    border-bottom: 1px solid rgba(255,255,255,0.05);
}
.plugin:last-child { border-bottom: none; }
.plugin-head { display: flex; align-items: center; gap: 12px; }
.plugin-name {
    font-family: var(--font-premium);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 1.5px;
    color: var(--text-main);
}
.plugin-params {
    display: flex;
    flex-direction: column;
    gap: 13px;
    margin-top: 14px;
    transition: opacity var(--transition-fast);
}
.plugin.off .plugin-params { opacity: 0.32; pointer-events: none; }

/* ── Кнопка СБРОСА эффектов (низ AE-панели) ── */
.fx-reset {
    display: block;
    margin: 16px 22px 4px;
    width: calc(100% - 44px);
    padding: 11px 14px;
    background: rgba(255,255,255,0.04);
    border: 1px solid rgba(255,255,255,0.12);
    border-radius: 10px;
    cursor: pointer;
    font-family: var(--font-mono);
    font-size: 0.64rem;
    font-weight: 600;
    letter-spacing: 2.5px;
    text-transform: uppercase;
    color: var(--text-muted);
    transition: color var(--transition-fast), border-color var(--transition-fast),
                background var(--transition-fast);
}
.fx-reset:hover,
.fx-reset:focus-visible {
    color: var(--text-main);
    border-color: rgba(255,255,255,0.32);
    background: rgba(255,255,255,0.08);
    outline: none;
}

.fx-row { display: flex; flex-direction: column; gap: 8px; }
.fx-name {
    font-family: var(--font-mono);
    font-size: 0.58rem;
    letter-spacing: 2px;
    color: var(--text-muted);
}
.fx-control { display: flex; align-items: center; gap: 12px; }
.fx-control input[type=range] { flex: 1; }
.fx-val {
    font-family: var(--font-mono);
    font-size: 0.62rem;
    letter-spacing: 1px;
    color: var(--text-main);
    min-width: 54px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* ползунки внутри панели */
.fx-plugins input[type=range] {
    -webkit-appearance: none; appearance: none;
    width: 100%; height: 2px; border-radius: 2px;
    background: rgba(255,255,255,0.16); outline: none; cursor: pointer;
}
.fx-plugins input[type=range]::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none;
    width: 14px; height: 14px; border-radius: 50%;
    background: #fff; box-shadow: 0 0 8px rgba(255,255,255,0.5);
    cursor: pointer; transition: transform 0.2s ease;
}
.fx-plugins input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.22); }
.fx-plugins input[type=range]::-moz-range-thumb {
    width: 14px; height: 14px; border: none; border-radius: 50%;
    background: #fff; box-shadow: 0 0 8px rgba(255,255,255,0.5); cursor: pointer;
}
.fx-plugins input[type=range]::-moz-range-track {
    height: 2px; background: rgba(255,255,255,0.16); border-radius: 2px;
}

/* тумблер (переиспользуется) */
.fx-toggle { display: flex; align-items: center; gap: 10px; cursor: pointer; }
.fx-toggle input { display: none; }
.fx-toggle-track {
    position: relative;
    width: 38px; height: 20px;
    border-radius: 50px;
    background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.14);
    transition: background var(--transition-fast);
    flex-shrink: 0;
}
.fx-toggle-knob {
    position: absolute;
    top: 50%; left: 3px;
    width: 13px; height: 13px;
    border-radius: 50%;
    background: var(--text-dim);
    transform: translateY(-50%);
    transition: transform var(--transition-medium), background var(--transition-fast);
}
.fx-toggle input:checked + .fx-toggle-track { background: rgba(255,255,255,0.16); }
.fx-toggle input:checked + .fx-toggle-track .fx-toggle-knob {
    transform: translateY(-50%) translateX(18px);
    background: #fff;
}

/* ==========================================================================
   DEEPGLOW — глобальное свечение (управляется плагином через window.FX)
   Переменные: --dg-radius (px), --dg-glow-alpha (0..1). Без filter на предках
   position:fixed — иначе ломается nav/dimension. Яркость фона идёт через canvas.
   ========================================================================== */
:root {
    --dg-exposure: 0.5;
    --dg-radius: 14px;
    --dg-glow-alpha: 0;
}
body.fx-deepglow .serophito-subtext,
body.fx-deepglow .section-title,
body.fx-deepglow .dim-title,
body.fx-deepglow .about-title,
body.fx-deepglow .cr-name {
    text-shadow: 0 0 var(--dg-radius) rgba(255,255,255, var(--dg-glow-alpha));
}
body.fx-deepglow .premium-glass-card,
body.fx-deepglow .about-panel,
body.fx-deepglow .timecode-hud,
body.fx-deepglow .fx-panel,
body.fx-deepglow .site-nav,
body.fx-deepglow .site-footer {
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.06),
                0 0 calc(var(--dg-radius) * 1.6) rgba(255,255,255, calc(var(--dg-glow-alpha) * 0.6));
}
body.fx-deepglow .const-star::before {
    box-shadow: 0 0 calc(8px + var(--dg-radius)) rgba(255,255,255, calc(0.45 + var(--dg-glow-alpha) * 0.4));
}

/* ── Адаптив второго пространства ── */
@media (max-width: 968px) {
    .enter-hint { margin-top: 20px; }

    .dimension-scroll { padding: 96px 6% 70px; }
    .dim-section { padding: 48px 0; }
    .about-panel { padding: 34px 26px; }
    .constellation { width: min(100%, 360px); }

    .dim-tools { grid-template-columns: 1fr; }
    .plugin { padding: 14px 18px; }
}

/* ==========================================================================
   МОБИЛЬНАЯ АДАПТАЦИЯ — запрет ландшафта, гашение hover на тач, телефон
   ========================================================================== */

/* — ЗАПРЕТ ЛАНДШАФТА НА ТЕЛЕФОНЕ (как в старом сайте): показывается только на
     КОРОТКИХ экранах в горизонтали — десктоп/планшет (высота > 500px) не трогает. */
#landscape-blocker {
    display: none;
    position: fixed; inset: 0;
    z-index: 2147483647;
    flex-direction: column;
    align-items: center; justify-content: center;
    text-align: center; padding: 30px;
    background: var(--black-absolute);
    color: var(--text-main);
}
#landscape-blocker svg {
    width: 52px; height: 52px;
    opacity: 0.9; margin-bottom: 18px;
    animation: rotateDeviceHint 1.6s ease-in-out infinite alternate;
}
.blocker-title {
    font-family: var(--font-heading);
    font-size: 1.1rem; letter-spacing: 2px; margin-bottom: 10px;
}
.blocker-text {
    font-family: var(--font-mono);
    font-size: 0.76rem; line-height: 1.6;
    color: var(--text-muted); max-width: 340px;
}
@keyframes rotateDeviceHint {
    0%   { transform: rotate(-88deg); }
    100% { transform: rotate(0deg); }
}
@media (max-height: 500px) and (max-width: 950px) and (orientation: landscape) {
    #landscape-blocker { display: flex; }
}
@media (prefers-reduced-motion: reduce) {
    #landscape-blocker svg { animation: none; }
}

/* — ГАШЕНИЕ HOVER НА ТАЧ-УСТРОЙСТВАХ: на телефонах :hover «залипает» после тапа
     (палец «навёл» — и состояние держится). Раньше из-за этого кнопка «Отправить»
     ВЕЧНО заливалась (liquid-bg/заливка от :hover не сбрасывались). Здесь полностью
     нейтрализуем визуал наведения: и трансформы, и фоны, и шиммер-заливку. */
@media (hover: none) {
    /* подъём/масштаб наведения */
    .nav-logo:hover,
    .premium-glass-card:hover,
    .premium-glass-card:hover .card-title,
    .premium-glass-card:hover .card-arrow,
    .card-action-btn:hover,
    .liquid-submit-btn:hover,
    .direct-item:hover,
    .direct-item:hover .direct-value,
    .direct-item:hover .direct-arrow,
    #heroEnter:hover,
    #dimReturn:hover,
    .video-loader:hover .video-loader-icon,
    .fx-plugins input[type="range"]::-webkit-slider-thumb:hover {
        transform: none;
    }
    /* фоны/границы наведения — чтобы кнопки не «оставались нажатыми» */
    .card-action-btn:hover,
    .liquid-submit-btn:hover {
        background: rgba(255,255,255,0.055);
        border-color: rgba(255,255,255,0.14);
    }
    /* «заливка»-шиммер от наведения — гасим, иначе она залипает после тапа */
    .card-action-btn:hover .liquid-bg,
    .liquid-submit-btn:hover .liquid-bg { opacity: 0; }
    .card-action-btn:hover .action-text,
    .liquid-submit-btn:hover .submit-text { color: #d6d6d6; }
    #heroEnter:hover, #dimReturn:hover { filter: none; letter-spacing: -1px; }
    .more-badge:hover { transform: rotate(-8deg); box-shadow: 0 3px 12px rgba(0,0,0,0.5); }

    /* КАРТОЧКИ: рамка/свечение/стрелка наведения тоже «залипали» после тапа — возвращаем
       всё в базовое состояние (не только transform). */
    .premium-glass-card:hover {
        border-color: rgba(255,255,255,0.06);
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
    }
    .premium-glass-card:hover .card-arrow {
        color: rgba(255,255,255,0.3);
        filter: none;
    }
    #links .premium-glass-card.brand-tg:hover::after,
    #links .premium-glass-card.brand-tt:hover::after { opacity: 0.07; }
    /* мелкие текст/бордер-ховеры в шапке и витрине — гасим залипание */
    .nav-link:hover { color: var(--text-muted); }
    .nav-link.active:hover { color: var(--text-main); }
    .lang-switch:hover { border-color: rgba(255,255,255,0.12); }
    .nav-logo:hover { opacity: 0.95; filter: drop-shadow(0 1px 6px rgba(255,255,255,0.10)); }
    .showcase-arrow:hover { background: rgba(18,18,24,0.6); border-color: rgba(255,255,255,0.14); }
}

/* — ТЕЛЕФОН: доводка шапки, подвала, кнопок и типографики на узких экранах — */
@media (max-width: 560px) {
    .fullscreen-section { padding: 84px 5% 64px; }

    /* ════════ СЕТКИ КАРТОЧЕК (жёстко по требованию) ════════
       Сектор 2 «Мои сети»  → 2 + 2 + 1 (4 карточки парами + широкая Boosty во всю ширину)
       Сектор 3 «Upload»    → 1 + 1     (две карточки в столбик)
       Сектор 3 «Software»  → 2 + 1     (две в ряд + третья во всю ширину)
       Карточки СПЕЦИАЛЬНО мельче — больше воздуха, меньше «жира». */
    .hub-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; }
    .card-wide-featured {
        grid-column: 1 / -1;        /* «1» в схеме 2+2+1 — на всю ширину */
        flex-direction: column;
        align-items: stretch;
        gap: 16px;
        padding: 20px 18px;
    }
    .featured-action-zone { width: 100%; justify-content: space-between; gap: 14px; }

    .wt-grid { gap: 12px; }
    .wt-grid-2 { grid-template-columns: 1fr; max-width: 420px; }            /* 1 + 1 */
    .wt-grid-3 { grid-template-columns: repeat(2, 1fr); max-width: 420px; } /* 2 + 1 */
    .wt-grid-3 > .premium-glass-card:nth-child(3) { grid-column: 1 / -1; min-height: 104px; }

    /* сами карточки — мельче и легче (меньше паддинг, скромнее радиус и заголовок) */
    .premium-glass-card { padding: 15px 14px; min-height: 112px; border-radius: 16px; }
    .card-platform { font-size: 0.5rem; letter-spacing: 0.8px; }
    .card-index, .card-version { font-size: 0.55rem; }
    .card-title { font-size: 1.02rem; letter-spacing: -0.2px; }
    .card-action-btn { min-width: 0; height: 32px; padding: 8px 14px; }
    .action-text { font-size: 0.56rem; letter-spacing: 0.6px; }
    /* водяной знак соцсети в мелкой карточке только мешает — гасим на телефоне */
    #links .premium-glass-card[class*="brand-"]::after { display: none; }

    /* ════════ СТИЛЬ «КАК У КАРТОЧКИ МОЙ ЛУЧШИЙ ЭДИТ» (только секторы 2 и 3, НЕ сектор 4) ════════
       текст по центру, кнопка во ВСЮ ширину, без стрелок и без [01]/версий → чисто и без поломок */
    #links .premium-glass-card,
    #projects .premium-glass-card { align-items: center; text-align: center; gap: 12px; }
    #links .card-arrow,        #projects .card-arrow,
    #links .card-index,        #projects .card-index,
    #links .card-version,      #projects .card-version { display: none; }
    #links .card-meta,         #projects .card-meta { justify-content: center; }
    #links .card-content,      #projects .card-content { width: 100%; text-align: center; }
    #links .card-footer-zone,  #projects .card-footer-zone { justify-content: center; }
    #links .card-action-btn,   #projects .card-action-btn { width: 100%; }
    /* белый заголовок мельче, серая подпись мельче — чтобы всё вмещалось без ломки */
    #links .card-title,        #projects .card-title { font-size: 0.92rem; }
    #links .card-platform,     #projects .card-platform { font-size: 0.46rem; }
    /* широкая Boosty: тоже по центру + кнопка во всю ширину */
    .card-wide-featured { align-items: center; text-align: center; }
    .featured-left-layout { align-items: center; width: 100%; }
    .featured-action-zone { justify-content: center; }

    /* ПЛЕЕР в шапке прячем на телефоне — узкая шапка, иначе ломает меню (на ПК он есть) */
    .np-name, .music-switch { display: none; }

    /* ПРЯМАЯ СВЯЗЬ: убираем серые значки (копия-файлик и стрелка) — остаются только кнопки */
    .direct-icon, .direct-arrow { display: none; }

    /* ════════ ШАПКА ════════ */
    .site-nav { padding: 8px 12px; gap: 6px; }
    .nav-logo { height: 24px; width: auto; max-width: 34px; padding-right: 8px; }
    .nav-left { gap: 8px; }
    .nav-links { gap: 0; }
    /* основное меню: мельче, чтобы ВСЕ 4 пункта помещались без обрезки «контакта» */
    .nav-link { font-size: 0.6rem; padding: 4px 5px; letter-spacing: 0; }
    .nav-link.active { transform: scale(1.04); padding: 4px 7px; }
    .lang-switch { transform: scale(0.85); transform-origin: left center; }

    /* РАЗДЕЛЫ 2-ГО ПРОСТРАНСТВА: теперь логотип/свитч/правый блок в глубоком пространстве
       полностью уезжают (см. переход шапки выше) → лента разделов центрируется по ВСЕЙ
       ширине и НИЧЕГО не перекрывает. Метки короткие (СПАСИБО вместо БЛАГОДАРНОСТИ) →
       помещаются по центру; если язык даст длиннее — мягкий свайп как запас. */
    .dim-nav-links {
        max-width: 94vw;
        gap: 1px;
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .dim-nav-links::-webkit-scrollbar { display: none; }
    .dim-nav-links .nav-link { font-size: 0.6rem; padding: 5px 6px; white-space: nowrap; flex: 0 0 auto; }
    .dim-nav-links .nav-link.active { transform: none; padding: 5px 8px; }

    /* подвал: компактнее */
    .site-footer { padding: 11px 14px; gap: 10px; }
    .footer-copy { font-size: 0.58rem; letter-spacing: 0.5px; }
    .footer-meta { font-size: 0.58rem; letter-spacing: 1px; }

    /* hero / типографика — чуть скромнее */
    .serophito-subtext { font-size: clamp(2.5rem, 12vw, 4rem); }
    .hero-sub { font-size: 0.82rem; }

    /* заголовки секций — мельче, больше воздуха */
    .section-title { font-size: clamp(1.7rem, 8vw, 2.4rem); }
    .project-name { font-size: 1.5rem; }
    .project-desc { font-size: 0.88rem; }
    .tab-btn { font-size: 0.8rem; padding: 9px 18px; }
    .tabs-nav { margin-bottom: 34px; }

    /* кнопки */
    .liquid-submit-btn { height: 50px; }
    .fx-reset { font-size: 0.66rem; }

    /* ════════ ВТОРОЕ ПРОСТРАНСТВО — больше воздуха, карточка витрины не «толстая» ════════ */
    .dim-section { padding: 40px 0; }
    .dim-title { font-size: clamp(2rem, 9vw, 3.2rem); }
    .dim-sub { font-size: 0.78rem; margin-top: 12px; }   /* подпись/пасхалки — мельче, держим 1 строку */
    .about-panel { padding: 26px 20px; }
    .about-title { font-size: 1.4rem; }
    .about-body { font-size: 0.9rem; }

    /* СЕРДЦЕ-СОЗВЕЗДИЕ: подпись под звездой должна быть В ОДНУ строку, иначе вся структура
       «подскакивает». Уменьшаем имя и текст — длинные благодарности влезают одной строкой. */
    .cr-name { font-size: 1.1rem; }
    .cr-text { font-size: 0.7rem; line-height: 1.35; }
    .cr-hint { font-size: 0.6rem; }
    /* плавающий текст пасхалок тоже бывал двухстрочным — мельче, в одну строку */
    .egg-pop { font-size: 0.8rem; }

    /* витрина «эдиты»: запас по углам (карточка дышит), мельче текст */
    .showcase-panel { padding: 14px 14px 18px; border-radius: 20px; }
    .showcase-frame { border-radius: 12px; }
    .showcase-info { margin-top: 16px; padding: 0 2px; gap: 14px; }
    .showcase-title { font-size: 1.25rem; }
    .showcase-desc { font-size: 0.85rem; }

    .direct-title { font-size: 1.6rem; }
    .contact-glass-form-panel { padding: 26px 18px; }
    .direct-item { padding: 16px 18px; }
}
