/* Gess-академия — базовые стили (дизайн-токены + компоненты).
   Отдаётся статикой из public/css. Источник: docs/05-design-tokens.md + макет Claude Design. */

:root {
    --brand: #45679d;
    --brand-hover: #3a5788;
    --grad: linear-gradient(137deg, #3f6399, #6b93c7);
    --text: #313131;
    --muted: #575757;
    --bg: #eef2fb;
    --bg-light: #f2f6ff;
    --tint: #e3efff;
    --tint2: #eaf1ff;
    --soft: #e6edf8;
    --border: #e2e8f4;
    --border-hover: #d6dfee;
    --white: #fff;
    --ok: #2e7d32;
    --ok-bg: #e8f5e9;
    --err: #c62828;
    --err-bg: #ffebee;
    --r-card: 20px;
    --r-ctl: 14px;
    --shadow: 0 20px 50px -20px rgba(84, 139, 200, .2);
    --shadow-lg: 0 24px 56px -20px rgba(84, 139, 200, .35);

    /* ---------- Витрина: палитра из Figma «КУРС БМС» (docs/05-design-tokens.md) ----------
       Макет не заменяет Academy v2, а надстраивает его. Синяя семья витрины
       совпадает с историческими токенами портала не случайно: дизайнер вернул
       фирменную синеву как акцент витрины, поэтому --pub-blue равен --brand,
       а --pub-bg-soft равен --soft. Имена заведены отдельно, потому что смысл
       у них разный: одно — «синий бренда», другое — «синий витрины», и
       разойтись они однажды могут. */
    --pub-bg-soft: #e6edf8;
    --pub-blue: #45679d;
    --pub-blue-2: #6b93c7;
    --pub-blue-3: #628abe;
    --pub-verified: #3cd753;

    /* ---------- GESS v2: чёрная шапка + светлый sidebar (design/claude-design/2026-08-09-buyer-home-brand-refresh) ----------
       Общая оболочка (topbar/sidebar/drawer) и главная покупателя используют только эти токены.
       Синий выше по-прежнему обслуживает содержимое старых страниц — v2 его не трогает. */
    --v2-shell-header: #171512;
    /* Холст кабинета по макету 456-1326: тот же голубой, который страница
       материала, урок и оформление получали поодиночке, пока общий фон был
       бежевым. Теперь он общий — их собственные правила стали лишними и убраны
       (кроме страницы оформления: она на публичной оболочке, см. .pub:has(.gco)). */
    --v2-canvas: #E6EDF8;
    --v2-surface: #FFFFFF;
    /* Светлая подложка внутри карточек — синеватая, как в макете: бежевая
       осталась бы тёплым пятном на голубом холсте. */
    --v2-surface-subtle: #F2F5FB;
    --v2-text: #171512;
    --v2-text2: #6B6560;
    --v2-border: #E5E0D8;
    --v2-accent: #F37500;
    --v2-accent-hover: #D46500;
    /* Кнопка кабинета, подсветка фокуса и активный пункт меню — синие по макету
       456-1326 и 456-1332. Оранжевый остался у одного места: пилюли GessCoin в
       тёмной шапке, где он и нарисован. */
    --v2-action: #628ABE;
    --v2-action-hover: #45679D;
    --v2-focus: #45679D;
    --v2-active-bg: #E6EDF8;
    --v2-active-text: #3F6399;
    --v2-shadow: 0 12px 30px -18px rgba(23, 21, 18, .28);
    /* Тень витрины (макет 548-6955). Общая --v2-shadow тёплая и кабинетная,
       а страница материала живёт в синей витрине: там мягкая синеватая тень.
       Держим одним определением — её носят оба блока страницы. */
    --v2-shadow-pub: 0 12px 15px rgba(19, 54, 83, .08);
    --v2-sidebar-bg: #FFFFFF;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
    font-family: 'Raleway', system-ui, sans-serif;
    color: var(--text);
    background: var(--bg);
    -webkit-font-smoothing: antialiased;
}
a { color: var(--brand); text-decoration: none; }
a:hover { color: var(--brand-hover); }
input, button, textarea, select { font-family: inherit; }
input:focus, textarea:focus, select:focus { outline: none; }
::placeholder { color: var(--muted); opacity: .7; }
.lucide, [data-lucide] { width: 20px; height: 20px; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---------- Логотип ---------- */
.logo { display: inline-flex; align-items: center; gap: 10px; }
.logo__mark {
    width: 40px; height: 40px; border-radius: 12px; background: var(--grad);
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-weight: 800; font-size: 18px; flex: none;
}
.logo__text { font-weight: 700; font-size: 20px; letter-spacing: -.01em; }

/* ---------- Кнопки ---------- */
.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 10px;
    height: 54px; padding: 0 24px; border: 1px solid transparent;
    border-radius: var(--r-ctl); font-weight: 600; font-size: 18px; cursor: pointer;
    transition: background .15s, border-color .15s, opacity .15s; width: 100%;
}
.btn--primary { background: var(--brand); border-color: var(--brand); color: #fff; }
.btn--primary:hover { background: var(--brand-hover); border-color: var(--brand-hover); color: #fff; }
.btn--primary:disabled { background: var(--soft); border-color: var(--soft); color: #9aa4b8; cursor: not-allowed; }
.btn--outline { background: #fff; border-color: var(--border); color: var(--text); }
.btn--outline:hover { border-color: var(--border-hover); }
.btn--vk { background: #07f; border-color: #07f; color: #fff; }
.btn--vk:hover { background: #06e; border-color: #06e; color: #fff; }

/* ---------- Поля ---------- */
.field { display: block; margin-bottom: 16px; }
.field__label { display: block; font-weight: 600; font-size: 13px; margin-bottom: 7px; }
.field__label--row { display: flex; justify-content: space-between; align-items: baseline; }
.input {
    width: 100%; height: 50px; border-radius: var(--r-ctl); border: 1px solid var(--border);
    background: #fff; padding: 0 14px; font-size: 15px; color: var(--text);
    transition: border-color .15s;
}
.input:focus { border-color: var(--brand); }
.input--error { border-color: var(--err); }
.input-wrap { position: relative; }
.input-wrap .input { padding-right: 46px; }
.input-eye {
    position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
    background: none; border: none; padding: 8px; cursor: pointer; color: var(--muted); display: flex;
}
.field__error { margin-top: 6px; font-size: 12px; color: var(--err); }
.field__hint { margin: 0 0 20px; font-size: 12px; color: #9aa4b8; }

/* ---------- Чекбокс согласия ---------- */
.consent { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 22px; cursor: pointer; }
.consent input { position: absolute; opacity: 0; width: 0; height: 0; }
.consent__box {
    width: 22px; height: 22px; flex: none; border-radius: 6px; border: 1px solid var(--border);
    background: #fff; display: flex; align-items: center; justify-content: center;
    margin-top: 1px; transition: all .15s;
}
.consent input:checked + .consent__box { background: var(--brand); border-color: var(--brand); }
.consent input:checked + .consent__box::after {
    content: ""; width: 6px; height: 11px; border: solid #fff; border-width: 0 3px 3px 0;
    transform: rotate(45deg) translate(-1px, -1px);
}
.consent__text { font-size: 13px; line-height: 1.5; color: var(--muted); }

/* ---------- Разделитель "или" ---------- */
.divider { display: flex; align-items: center; gap: 12px; margin: 18px 0; color: #9aa4b8; font-size: 13px; }
.divider::before, .divider::after { content: ""; flex: 1; height: 1px; background: var(--border); }

/* ---------- Алерты ---------- */
.alert { display: flex; align-items: center; gap: 10px; border-radius: 12px; padding: 12px 14px; font-size: 14px; font-weight: 500; margin-bottom: 18px; }
.alert--error { background: var(--err-bg); color: var(--err); }
.alert--ok { background: var(--ok-bg); color: var(--ok); }

/* ---------- Карточки / бейджи ---------- */
.card { background: #fff; border-radius: var(--r-card); box-shadow: var(--shadow); padding: 28px; }
.badge {
    display: inline-flex; align-items: center; font-size: 12px; font-weight: 600;
    text-transform: uppercase; letter-spacing: .96px; color: var(--brand);
    background: var(--tint); padding: 4px 10px; border-radius: 999px;
}

/* ---------- Оболочка кабинета (GESS v2: чёрная шапка + светлый sidebar) ----------
   Шапка — во всю ширину viewport, включая область над sidebar (сама она не внутри
   строки sidebar+контент, а отдельный блок перед ней). Sidebar и контент начинаются
   под шапкой — .shell-body занимает всё, что ниже. */
.shell { min-height: 100vh; display: flex; flex-direction: column; background: var(--v2-canvas); }
.shell-body { display: flex; flex: 1; min-height: 0; }
.sidebar {
    width: 260px; flex: none; background: var(--v2-sidebar-bg);
    display: flex; flex-direction: column; padding: 14px 12px;
    position: sticky; top: 68px; height: calc(100vh - 68px);
}
.sidebar__logo { display: none; } /* логотип переехал в чёрную шапку — см. .topbar__logo */
/* min-height: 0 — иначе меню не сжимается и длинный список партнёра обрезается вместо собственной прокрутки */
.sidebar__nav { display: flex; flex-direction: column; gap: 4px; flex: 1; min-height: 0; overflow-y: auto; }
.sidebar__link {
    display: flex; align-items: center; gap: 11px; height: 44px; padding: 0 13px; border-radius: 11px;
    font-size: 14px; font-weight: 600; color: #313131; transition: all .15s;
}
.sidebar__link:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.sidebar__link.is-active { background: var(--v2-active-bg); color: var(--v2-active-text); font-weight: 600; }
.sidebar__link:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-sidebar-bg), 0 0 0 4px var(--v2-focus); }
/* Config-driven disabled-пункт меню (item.disabled в config/navigation.php) — рендерится
   как <span>, не <a>: hover/active/focus ссылки нарочно не наследуются. */
.sidebar__link--disabled { cursor: default; }
.sidebar__link--disabled:hover { background: none; color: var(--v2-text2); }
.sidebar__soon {
    margin-left: auto; display: inline-flex; align-items: center; justify-content: center;
    height: 20px; padding: 0 8px; border-radius: 999px; font-size: 11px; font-weight: 700;
    background: var(--v2-surface-subtle); color: var(--v2-text2);
}
.sidebar__group { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--v2-text2); padding: 14px 12px 6px; }
.sidebar__user { border-top: 1px solid var(--v2-border); padding-top: 14px; margin-top: 10px; display: flex; align-items: center; gap: 10px; }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: var(--v2-shell-header); display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 13px; flex: none; }

/* Кнопки внутри оболочки кабинета — по новому стандарту: главная синяя цветом
   действия, вторичная белая с обводкой #EBEDF0. Классы `.btn`, `.lms-btn` и
   `.lms-act` достались от прежней вёрстки и встречаются ещё на публичных
   страницах (карточка эксперта, статус заказа), поэтому красим их не глобально,
   а внутри `.shell`: витрину эта задача не трогает. */
.shell .btn--primary,
.shell .lms-btn--primary,
.shell .lms-act--primary,
.shell .btn-watch:not(.btn-watch--wait) { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.shell .btn--primary:hover,
.shell .lms-btn--primary:hover,
.shell .lms-act--primary:hover,
.shell .btn-watch:not(.btn-watch--wait):hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.shell .btn--outline,
.shell .btn--ghost,
.shell .lms-btn,
.shell .lms-act--muted { border-color: #ebedf0; }
.shell .btn--outline:hover,
.shell .btn--ghost:hover,
.shell .lms-btn:hover,
.shell .lms-act--muted:hover { border-color: var(--v2-action); }

.main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.topbar {
    width: 100%; height: 68px; flex: none; background: var(--v2-shell-header);
    display: flex; align-items: center; justify-content: space-between;
    padding: 0 20px; position: sticky; top: 0; z-index: 30;
}
.topbar__logo { height: 32px; width: auto; flex: none; display: block; object-fit: contain; }
.topbar__right { display: flex; align-items: center; gap: 12px; }
.coin-pill {
    display: inline-flex; flex: none; align-items: center; gap: 8px; height: 36px;
    padding: 0 13px 0 10px; border-radius: 999px; background: rgba(243, 117, 0, .16);
    border: 1px solid rgba(243, 117, 0, .4); color: #FFB16B; font-weight: 700; font-size: 14px;
    font-variant-numeric: tabular-nums;
}
.topbar .avatar { background: #fff; color: var(--v2-shell-header); }
.topbar__user { display: flex; align-items: center; gap: 9px; background: none; border: none; cursor: pointer; padding: 3px; color: inherit; text-decoration: none; border-radius: 10px; }
.topbar__user:hover { background: rgba(255, 255, 255, .08); }
.topbar__user-info { display: flex; flex-direction: column; }
.topbar__user-name { display: block; font-size: 13px; font-weight: 600; color: #fff; text-align: left; }
.topbar__user-sub { display: block; font-size: 11px; color: rgba(255, 255, 255, .66); text-align: left; }
.content { flex: 1; padding: 28px; }
/* Подвал в кабинете стоит под оболочкой во всю ширину — как на витрине, а не
   колонкой внутри содержимого: иначе тёмный блок обрывался бы по границе
   бокового меню. Прижимать его к низу не нужно, .shell и так тянется на
   высоту экрана. */
.shell > .pub-foot { flex: none; }

.body--fixed { height: 100vh; height: 100dvh; overflow: hidden; }
.body--fixed .shell { height: 100%; min-height: 0; }
.body--fixed .shell-body { min-height: 0; }
/* Двойной класс — чтобы мобильное правило .content { padding: 20px 16px } не перебивало */
.content.content--tight { display: flex; flex-direction: column; min-height: 0; overflow: hidden;
    padding-top: 10px; padding-bottom: 10px; }

.burger {
    display: none; width: 42px; height: 42px; flex: none; align-items: center; justify-content: center;
    border: 1px solid rgba(255, 255, 255, .18); border-radius: 11px; background: rgba(255, 255, 255, .06);
    cursor: pointer; color: #fff; padding: 0;
}
.burger .icon-close { display: none; }
.shell.nav-open .burger .icon-menu { display: none; }
.shell.nav-open .burger .icon-close { display: flex; }

/* ---------- Адаптив ---------- */
/* Подложка мобильного меню. По умолчанию её нет: на широком экране сайдбар
   постоянный, перекрывать контент нечем. */
.nav-backdrop { display: none; }
/* Пока drawer открыт, фон не прокручивается: иначе список под панелью уезжает
   под пальцем и человек теряет место, к которому вернётся после закрытия. */
body.nav-locked { overflow: hidden; }

/* Планшет: sidebar остаётся постоянным, но сжимается до иконочной полосы —
   подпись пункта меню скрыта визуально (не из accessibility-дерева: у ссылки
   есть title, а текст просто становится нулевой ширины, а не display:none). */
@media (min-width: 768px) and (max-width: 1023px) {
    .sidebar { width: 72px; padding: 14px 10px; }
    .sidebar__link { justify-content: center; padding: 0; }
    .sidebar__link-text { width: 0; overflow: hidden; white-space: nowrap; }
    .sidebar__group { text-align: center; }
    .sidebar__user > div:not(.avatar) { display: none; }
}

@media (max-width: 767px) {
    /* top: 68px — панель начинается под шапкой, а не поверх неё (шапка остаётся
       видна и кликабельна, пока drawer открыт). Высота — calc(100vh - 68px) из
       базового правила .sidebar, для position:fixed даёт тот же результат, что и
       top+bottom. */
    .sidebar { position: fixed; left: 0; top: 68px; z-index: 40; transform: translateX(-100%); transition: transform .2s; box-shadow: 12px 0 40px -18px rgba(23, 21, 18, .4); }
    .shell.nav-open .sidebar { transform: translateX(0); width: 264px; }
    /* Между контентом и панелью: тап справа попадает сюда, а не в страницу,
       и не активирует ссылку под пальцем. Тоже начинается под шапкой. */
    .shell.nav-open .nav-backdrop { display: block; position: fixed; top: 68px; left: 0; right: 0; bottom: 0; z-index: 35;
        background: rgba(23, 21, 18, .5); }
    .burger { display: flex; }
    .topbar__logo { height: auto; max-width: 145px; width: auto; }
    .topbar__user-info { display: none; }
    .content { padding: 20px 16px; }
}

/* ---------- Фикс: ровные цифры (lining + tabular) ---------- */
/* Raleway по умолчанию даёт старостильные цифры (3,4,5 свисают, 6/8 выше) —
   в полях ввода это выглядит как «прыгающие» цифры. Приводим к ровным. */
body { font-variant-numeric: lining-nums; font-feature-settings: "lnum" 1; }
input, button, textarea, select {
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1;
}

/* ---------- Медиатека ---------- */
.media-upload { display: grid; gap: 8px; max-width: 520px; margin-bottom: 24px; }
.media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 16px; }
.media-card { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 12px; display: flex; flex-direction: column; gap: 6px; }
.media-card__thumb { width: 100%; height: 120px; object-fit: cover; border-radius: 10px; background: var(--bg-light); }
.media-card__icon { width: 100%; height: 120px; display: flex; align-items: center; justify-content: center; font-weight: 700; color: var(--muted); background: var(--bg-light); border-radius: 10px; }
.media-card__name { font-size: 13px; font-weight: 600; word-break: break-word; }
.media-card__meta { font-size: 12px; color: var(--muted); }
.media-card__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.media-pagination { margin-top: 20px; }
.btn-link { background: none; border: none; padding: 0; color: var(--brand); cursor: pointer; font-size: 12px; }
.btn-link:hover { color: var(--brand-hover); }
.btn-link--danger { color: var(--err); }
.flash--ok { background: var(--ok-bg); color: var(--ok); padding: 10px 14px; border-radius: 10px; margin-bottom: 16px; }
.flash--err { background: var(--err-bg); color: var(--err); padding: 10px 14px; border-radius: 10px; margin-bottom: 16px; }
.pager { display: flex; align-items: center; gap: 12px; }
.pager__btn { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-ctl); padding: 8px 14px; font-size: 13px; color: var(--brand); cursor: pointer; }
.pager__btn:hover { border-color: var(--brand); }
.pager__btn--disabled { color: var(--muted); opacity: .5; cursor: default; }
.pager__info { font-size: 13px; color: var(--muted); }

/* ---------- Рескин медиатеки ---------- */
[x-cloak]{display:none!important;}
.btn--auto{width:auto;height:48px;padding:0 20px;font-size:15px;}
.btn--ghost{background:var(--white);border-color:var(--border);color:var(--text);}
.btn--ghost:hover{background:var(--bg-light);}
.section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px;}
.section-head__title{margin:0 0 4px;font-weight:700;font-size:26px;letter-spacing:-.01em;}
.section-head__sub{margin:0;font-size:14px;color:var(--muted);}
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px;}
.media-card{background:var(--white);border:1px solid var(--border);border-radius:18px;padding:12px;display:flex;flex-direction:column;gap:10px;}
.media-card__cover{height:120px;border-radius:12px;background:var(--bg-light);display:flex;align-items:center;justify-content:center;border:none;padding:0;width:100%;overflow:hidden;cursor:pointer;}
.media-card__img{width:100%;height:100%;object-fit:cover;}
.media-card__ext{font-weight:700;font-size:18px;color:#9aa4b8;}
.media-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;}
.media-card__meta{min-width:0;}
.media-card__name{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text);}
.media-card__size{font-size:12px;color:#9aa4b8;margin-top:2px;}
.media-card__actions{display:flex;gap:6px;border-top:1px solid #f0f3fa;padding-top:10px;}
.badge{font-size:11px;font-weight:600;padding:4px 10px;border-radius:999px;white-space:nowrap;}
.badge--pub{color:var(--brand);background:var(--tint);}
.badge--priv{color:var(--muted);background:#eef2fb;}
.icon-btn{flex:1;height:38px;border:1px solid var(--border);border-radius:10px;background:var(--white);color:var(--brand);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s;}
.icon-btn:hover{background:var(--bg-light);}
.icon-btn--danger{color:var(--err);}
.icon-btn--danger:hover{background:var(--err-bg);}
.empty-state{background:var(--white);border:1px dashed var(--border-hover);border-radius:20px;padding:52px 32px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px;}
.empty-state__icon{width:60px;height:60px;border-radius:17px;background:var(--tint);color:var(--brand);display:flex;align-items:center;justify-content:center;}
.empty-state__icon svg{width:26px;height:26px;}
.empty-state__title{margin:0;font-weight:700;font-size:22px;}
.empty-state__text{margin:0;max-width:400px;font-size:14px;color:var(--muted);line-height:1.6;}
.modal-overlay{position:fixed;inset:0;z-index:100;background:rgba(30,44,73,.42);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto;}
.modal{width:100%;max-width:560px;background:var(--white);border-radius:20px;box-shadow:0 30px 70px -20px rgba(30,44,73,.5);overflow:hidden;}
.modal--wide{max-width:640px;}
.modal__head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:20px 24px;border-bottom:1px solid var(--border);}
.modal__title{margin:0;font-weight:700;font-size:20px;}
.modal__sub{font-size:12px;color:#9aa4b8;margin-top:2px;}
.modal__close{width:36px;height:36px;flex:none;border:none;border-radius:10px;background:var(--bg-light);color:var(--muted);cursor:pointer;font-size:20px;line-height:1;}
.modal__body{padding:22px 24px;}
.modal__body--center{text-align:center;}
.modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid var(--border);background:#f9fbff;}
.dropzone{display:flex;flex-direction:column;align-items:center;gap:10px;width:100%;border:2px dashed var(--border-hover);border-radius:14px;background:#f9fbff;padding:28px 20px;cursor:pointer;text-align:center;transition:border-color .15s,background .15s;}
.dropzone--over{border-color:var(--brand);background:var(--tint2);}
.dropzone__icon{color:var(--brand);}
.dropzone__icon svg,svg.dropzone__icon{width:30px;height:30px;}
.dropzone__title{font-weight:600;font-size:15px;color:var(--text);}
.dropzone__hint{font-size:13px;color:#9aa4b8;}
.dropzone__input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;}
.vis-toggle{display:flex;align-items:center;gap:10px;margin-top:16px;flex-wrap:wrap;}
.vis-toggle__label{font-weight:600;font-size:13px;color:var(--text);}
.chip{height:34px;padding:0 14px;border:1px solid var(--border);border-radius:999px;background:var(--white);color:var(--muted);cursor:pointer;font-weight:600;font-size:13px;}
.chip--on{background:var(--brand);color:#fff;border-color:var(--brand);}
.up-error{display:block;background:var(--err-bg);color:var(--err);border-radius:12px;padding:12px 14px;font-size:14px;font-weight:500;margin-top:16px;}
.up-progress{margin-top:16px;display:flex;align-items:center;gap:10px;}
.up-progress__bar{flex:1;height:8px;border-radius:999px;background:var(--soft);overflow:hidden;}
.up-progress__fill{height:100%;background:var(--brand);border-radius:999px;transition:width .2s;}
.up-progress__pct{font-size:13px;font-weight:700;color:var(--brand);min-width:40px;text-align:right;}
.preview-img{max-width:100%;max-height:60vh;border-radius:12px;display:block;margin:0 auto;}
.preview-file{display:inline-flex;flex-direction:column;align-items:center;gap:10px;color:var(--brand);padding:32px;text-decoration:none;}
.preview-file__icon{width:40px;height:40px;}

/* Строки выбранных файлов в поп-апе загрузки */
.up-files{display:flex;flex-direction:column;gap:10px;margin-top:16px;}
.up-file{border:1px solid var(--border);border-radius:12px;padding:12px 14px;}
.up-file--error{border-color:var(--err);}
.up-file__head{display:flex;align-items:center;gap:12px;}
.up-file__icon{color:var(--brand);flex:none;}
.up-file__meta{flex:1;min-width:0;}
.up-file__name{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.up-file__size{font-size:12px;color:#9aa4b8;}
.up-file__pct{font-size:13px;font-weight:700;color:var(--brand);flex:none;}
.up-file__x{width:28px;height:28px;flex:none;border:none;border-radius:8px;background:var(--bg-light);color:var(--muted);cursor:pointer;font-size:18px;line-height:1;}
.up-file__bar{height:8px;border-radius:999px;background:var(--soft);overflow:hidden;margin-top:8px;}
.up-file__fill{height:100%;background:var(--brand);border-radius:999px;transition:width .2s;}
.up-file__err{margin-top:8px;color:var(--err);font-size:13px;font-weight:500;}

/* Панель медиатеки: поиск + вид + таблица */
.media-bar{display:flex;align-items:center;gap:12px;margin-bottom:18px;flex-wrap:wrap;}
.search{position:relative;flex:1;min-width:220px;max-width:420px;}
.search__icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#9aa4b8;width:18px;height:18px;}
.search__input{width:100%;height:44px;border:1px solid var(--border);border-radius:14px;background:var(--white);padding:0 14px 0 42px;font-size:14px;color:var(--text);}
.search__input:focus{border-color:var(--brand);}
.view-toggle{display:flex;gap:4px;background:var(--white);border:1px solid var(--border);border-radius:12px;padding:4px;}
.view-toggle__btn{width:38px;height:36px;border:none;border-radius:9px;background:transparent;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;}
.view-toggle__btn--on{background:var(--brand);color:#fff;}
.media-card__fileicon{color:var(--brand);width:40px;height:40px;}
.media-list{display:flex;flex-direction:column;gap:8px;}
.file-row{display:flex;align-items:center;gap:14px;background:var(--white);border:1px solid var(--border);border-radius:14px;padding:10px 14px;}
.file-row__cover{width:44px;height:44px;flex:none;border:none;border-radius:10px;background:var(--bg-light);color:var(--brand);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;padding:0;}
.file-row__img{width:100%;height:100%;object-fit:cover;}
.file-row__name{flex:1;min-width:0;text-align:left;background:none;border:none;padding:0;cursor:pointer;font-weight:600;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.file-row__size{flex:none;font-size:13px;color:#9aa4b8;min-width:64px;text-align:right;}
.file-row__actions{display:flex;gap:6px;flex:none;}
.file-row__actions .icon-btn{flex:none;width:38px;}
.muted-note{color:var(--muted);font-size:14px;}

/* Тост-уведомление */
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:200;display:flex;align-items:center;gap:8px;background:#313131;color:#fff;padding:12px 18px;border-radius:12px;box-shadow:0 12px 30px -8px rgba(0,0,0,.4);font-size:14px;font-weight:500;}
.toast svg{width:18px;height:18px;color:#7ee08a;}

/* ---------- Раздел «Видео» ---------- */
.video-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;}
.video-card{background:var(--white);border:1px solid var(--border);border-radius:18px;overflow:hidden;display:flex;flex-direction:column;}
.video-card__poster{position:relative;aspect-ratio:16/9;border:none;padding:0;width:100%;cursor:pointer;background:linear-gradient(137deg,#28374f,#3f6399);display:flex;align-items:center;justify-content:center;}
.video-card__poster[disabled]{cursor:default;opacity:.9;}
.video-card__play{width:56px;height:56px;border-radius:50%;background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;color:var(--brand);}
.video-card__play svg{width:24px;height:24px;}
.video-card__dur{position:absolute;bottom:10px;right:10px;font-size:12px;font-weight:600;color:#fff;background:rgba(0,0,0,.5);padding:3px 8px;border-radius:6px;}
.video-card__body{padding:14px;display:flex;flex-direction:column;gap:10px;flex:1;}
.video-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;}
.video-card__meta{min-width:0;}
.video-card__name{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.video-card__size{font-size:12px;color:#9aa4b8;margin-top:2px;}
.video-card__actions{display:flex;gap:6px;margin-top:auto;align-items:center;}
.badge--ok{color:var(--ok);background:var(--ok-bg);}
.badge--wait{color:#8a6d3b;background:#fdf3e2;}
.btn-watch{flex:1;height:40px;border:none;border-radius:11px;background:var(--brand);color:#fff;font-weight:600;font-size:13px;cursor:pointer;}
.btn-watch--wait{background:#f7faff;color:#9aa4b8;border:1px solid var(--border);display:flex;align-items:center;justify-content:center;}
.video-card__actions .icon-btn{flex:none;width:40px;height:40px;border-radius:11px;}
.player-overlay{position:fixed;inset:0;z-index:100;background:rgba(15,22,38,.82);display:flex;align-items:center;justify-content:center;padding:24px;}
.player{width:100%;max-width:900px;}
.player__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;}
.player__name{color:#fff;font-weight:600;font-size:15px;}
.player__close{width:40px;height:40px;border:none;border-radius:12px;background:rgba(255,255,255,.16);color:#fff;cursor:pointer;font-size:22px;line-height:1;}
.player__video{width:100%;aspect-ratio:16/9;border-radius:16px;background:#000;display:block;}

/* Таблица видео */
.video-table-wrap{overflow-x:auto;}
.video-table{background:var(--white);border:1px solid var(--border);border-radius:16px;overflow:hidden;min-width:640px;}
.video-table__head,.video-table__row{display:grid;grid-template-columns:2fr 1fr 0.8fr 1.4fr 1fr auto;gap:12px;padding:12px 16px;align-items:center;}
.video-table__head{border-bottom:1px solid var(--border);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:#9aa4b8;}
.video-table__row{border-bottom:1px solid #f0f3fa;}
.video-table__row:last-child{border-bottom:none;}
.video-table__name{display:flex;align-items:center;gap:10px;min-width:0;text-align:left;background:none;border:none;padding:0;cursor:pointer;}
.video-table__name>span{font-weight:600;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.video-table__name svg{flex:none;color:var(--brand);}
.video-table__cell{font-size:13px;color:var(--muted);}
.video-table__actions{display:flex;gap:6px;justify-content:flex-end;}
.video-table__actions .icon-btn{flex:none;width:36px;height:36px;border-radius:10px;}
.btn-watch--sm{flex:none;width:auto;height:36px;padding:0 14px;}

/* Таблица медиатеки */
.media-table-wrap{overflow-x:auto;}
.media-table{background:var(--white);border:1px solid var(--border);border-radius:16px;overflow:hidden;min-width:680px;}
.media-table__head,.media-table__row{display:grid;grid-template-columns:2fr 1fr 1.4fr 1fr auto;gap:12px;padding:12px 16px;align-items:center;}
.media-table__head{border-bottom:1px solid var(--border);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:#9aa4b8;}
.media-table__row{border-bottom:1px solid #f0f3fa;}
.media-table__row:last-child{border-bottom:none;}
.media-table__name{display:flex;align-items:center;gap:10px;min-width:0;text-align:left;background:none;border:none;padding:0;cursor:pointer;}
.media-table__name>span{font-weight:600;font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.media-table__name svg{flex:none;color:var(--brand);}
.media-table__cell{font-size:13px;color:var(--muted);}
.media-table__actions{display:flex;gap:6px;justify-content:flex-end;}
.media-table__actions .icon-btn{flex:none;width:36px;height:36px;border-radius:10px;}

/* Обложка видео (постер-изображение) */
.video-card__poster--img{background-size:cover;background-position:center;}

.badge--err{color:var(--err);background:var(--err-bg);}

/* ---------- Виджет «Хранилище» (Обзор/метрики) ---------- */
.storage-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:20px;align-items:start;}
@media (max-width:900px){.storage-grid{grid-template-columns:1fr;}}
.storage-card{background:var(--white);border:1px solid var(--border);border-radius:20px;padding:24px;box-shadow:0 20px 50px -20px rgba(84,139,200,.2);}
.storage-card__head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px;flex-wrap:wrap;}
.storage-card__title{display:flex;align-items:center;gap:12px;}
.storage-card__icon{width:46px;height:46px;border-radius:13px;background:var(--tint);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none;}
.storage-card__name{font-weight:700;font-size:18px;}
.storage-card__sub{font-size:13px;color:#9aa4b8;}
.storage-figure{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px;}
.storage-figure__used{font-size:34px;font-weight:800;letter-spacing:-.02em;color:var(--text);}
.storage-figure__total{font-size:16px;color:#9aa4b8;font-weight:600;}
.storage-figure__pct{margin-left:auto;font-size:22px;font-weight:800;}
.storage-bar{height:14px;border-radius:999px;background:var(--bg);overflow:hidden;margin:10px 0 8px;}
.storage-bar__fill{height:100%;border-radius:999px;transition:width .3s;}
.storage-free{font-size:14px;color:var(--muted);font-weight:500;}
.storage-note{display:flex;align-items:center;gap:10px;border-radius:12px;padding:12px 14px;font-size:14px;font-weight:500;margin-top:16px;}
.storage-note svg{flex:none;}
.storage-note--warn{background:var(--err-bg);color:var(--err);}
.storage-note--empty{background:#f7faff;border:1px solid var(--border);color:#9aa4b8;font-weight:400;}
.storage-breakdown{margin-top:22px;padding-top:18px;border-top:1px solid #f0f3fa;}
.storage-breakdown__label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:#9aa4b8;margin-bottom:10px;}
.storage-seg{display:flex;height:12px;border-radius:999px;overflow:hidden;background:var(--bg);gap:2px;}
.storage-seg__media{background:#45679d;}
.storage-seg__video{background:#6b93c7;}
.storage-legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px;font-size:13px;color:var(--muted);}
.storage-legend span{display:inline-flex;align-items:center;gap:6px;}
.dot{width:10px;height:10px;border-radius:3px;display:inline-block;}
.dot--media{background:#45679d;}
.dot--video{background:#6b93c7;}
.dot--free{background:var(--bg);border:1px solid var(--border-hover);}
.storage-side{display:flex;flex-direction:column;gap:16px;}
.stat-card{background:var(--white);border:1px solid var(--border);border-radius:20px;padding:20px;display:flex;align-items:center;gap:14px;}
.stat-card__icon{width:46px;height:46px;border-radius:13px;background:var(--tint);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none;}
.stat-card__body{flex:1;min-width:0;}
.stat-card__label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.6px;color:#9aa4b8;}
.stat-card__value{font-size:22px;font-weight:700;margin-top:2px;}
.stat-card__sub{font-size:13px;color:var(--muted);}
.storage-hint{background:#f7faff;border:1px solid var(--border);border-radius:16px;padding:16px;display:flex;align-items:flex-start;gap:12px;font-size:13px;color:#9aa4b8;line-height:1.5;}
.storage-hint svg{flex:none;color:#9aabc4;margin-top:1px;}
.storage-card.is-ok .storage-figure__pct{color:var(--brand);}
.storage-card.is-ok .storage-bar__fill{background:var(--brand);}
.storage-card.is-ok .storage-badge{color:var(--ok);background:var(--ok-bg);}
.storage-card.is-warning .storage-figure__pct{color:#c99a3a;}
.storage-card.is-warning .storage-bar__fill{background:#d9a441;}
.storage-card.is-warning .storage-badge{color:#8a6d3b;background:#fdf3e2;}
.storage-card.is-critical .storage-figure__pct{color:var(--err);}
.storage-card.is-critical .storage-bar__fill{background:var(--err);}
.storage-card.is-critical .storage-badge{color:var(--err);background:var(--err-bg);}

/* ============================================================
   LMS-ядро (Этап 1) — курсы, каталог, урок, редактор, модерация
   ============================================================ */
.lms-toolbar { margin-bottom: 20px; display: flex; gap: 12px; align-items: center; }
/* Старая простая строка поиска — только там, где .lms-search стоит прямо на input. */
input.lms-search { flex: 1; max-width: 360px; padding: 10px 14px; border: 1px solid var(--border); border-radius: var(--r-ctl); font: inherit; background: var(--white); font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
input.lms-search:focus { outline: none; border-color: var(--brand); }
.lms-empty { color: var(--muted); padding: 24px 0; }
.lms-empty a { color: var(--brand); }

.lms-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; }
.lms-card { display: block; background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); overflow: hidden; text-decoration: none; color: inherit; transition: box-shadow .2s, transform .2s; }
.lms-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); }
.lms-card__cover { height: 132px; display: flex; align-items: center; justify-content: center; background: var(--tint2); font-size: 40px; }
.lms-card__body { padding: 16px; }
.lms-card__title { font: 700 16px 'Raleway', sans-serif; margin: 0 0 6px; color: var(--text); }
.lms-card__desc { margin: 0 0 10px; font-size: 13px; color: var(--muted); line-height: 1.4; }
.lms-card__meta { font-size: 13px; color: var(--brand); font-weight: 600; }

.lms-btn { display: inline-flex; align-items: center; gap: 6px; padding: 10px 18px; border-radius: var(--r-ctl); border: 1px solid var(--border); background: var(--white); font: 600 14px 'Raleway', sans-serif; color: var(--text); cursor: pointer; text-decoration: none; transition: background .15s, border-color .15s; }
.lms-btn:hover { border-color: var(--border-hover); }
.lms-btn--primary { background: var(--brand); color: var(--white); border-color: var(--brand); }
.lms-btn--primary:hover { background: var(--brand-hover); border-color: var(--brand-hover); }
.lms-btn--danger { color: var(--err); border-color: #f0c9c9; }
.lms-btn--danger:hover { background: var(--err-bg); }
.lms-btn:disabled { opacity: .5; cursor: not-allowed; }

.lms-link { background: none; border: 0; padding: 0 8px 0 0; color: var(--brand); font: inherit; cursor: pointer; text-decoration: none; }
.lms-link:hover { text-decoration: underline; }
.lms-link--danger { color: var(--err); }

.lms-progress { margin-top: 12px; }
.lms-progress__label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 6px; }
.lms-progress__bar { height: 8px; background: var(--soft); border-radius: 999px; overflow: hidden; }
.lms-progress__bar span { display: block; height: 100%; background: var(--brand); border-radius: 999px; }

.lms-badge { display: inline-block; padding: 3px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.lms-badge--published { background: var(--ok-bg); color: var(--ok); }
.lms-badge--pending { background: #fdf3e2; color: #8a6d3b; }
.lms-badge--rejected { background: var(--err-bg); color: var(--err); }
.lms-badge--draft { background: var(--tint2); color: var(--brand); }
.lms-badge--done { background: var(--ok-bg); color: var(--ok); }

.lms-course__head { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 24px; margin-bottom: 20px; }
.lms-course__title { margin: 0 0 8px; font: 800 22px 'Raleway', sans-serif; }
.lms-course__desc { margin: 0 0 12px; color: var(--muted); }
.lms-section { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 18px 22px; margin-bottom: 14px; }
.lms-section__title { margin: 0 0 10px; font: 700 16px 'Raleway', sans-serif; }
.lms-lessons { list-style: none; margin: 0; padding: 0; }
.lms-lesson { padding: 8px 0; border-top: 1px solid var(--border); }
.lms-lesson:first-child { border-top: 0; }
.lms-lesson a { color: var(--text); text-decoration: none; }
.lms-lesson a:hover { color: var(--brand); }
.lms-lesson__status { display: inline-block; width: 20px; color: var(--brand); }
.lms-lesson__locked { color: #98a2b3; }
.lms-lesson__locked small { display: block; margin-left: 22px; font-size: 12px; }

.lms-lesson-page { max-width: 860px; }
.lms-breadcrumb { margin-bottom: 12px; }
.lms-breadcrumb a { color: var(--brand); text-decoration: none; }
.lms-lesson-page__title { margin: 0 0 16px; font: 800 22px 'Raleway', sans-serif; }
.lms-lesson-page__content { margin: 16px 0; line-height: 1.6; color: var(--text); }
.lms-lesson-page__actions { margin: 20px 0; }
.lms-lesson-nav { display: flex; justify-content: space-between; gap: 12px; margin-top: 24px; }
.lms-video { border-radius: var(--r-ctl); overflow: hidden; background: #000; }
.lms-video iframe { width: 100%; aspect-ratio: 16 / 9; border: 0; display: block; }

.lms-table { width: 100%; border-collapse: collapse; background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); overflow: hidden; }
.lms-table th, .lms-table td { text-align: left; padding: 12px 16px; border-bottom: 1px solid var(--border); font-size: 14px; }
.lms-table th { background: var(--bg-light); font-weight: 700; color: var(--muted); }
.lms-table tr:last-child td { border-bottom: 0; }

.lms-editor__fields { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 22px; margin-bottom: 20px; display: grid; gap: 14px; max-width: 640px; }
.lms-editor__fields label { display: grid; gap: 6px; font-weight: 600; font-size: 14px; }
.lms-editor__fields input, .lms-editor__fields textarea, .lms-editor__fields select { padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-ctl); font: inherit; background: var(--white); font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.lms-editor__section { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 16px 20px; margin-bottom: 12px; }
.lms-editor__section ul { list-style: none; margin: 8px 0; padding: 0; }
.lms-editor__section li { padding: 6px 0; }
.lms-editor__submit { margin-top: 16px; }
.lms-error { color: var(--err); font-size: 13px; }

.lms-flash { padding: 10px 14px; border-radius: var(--r-ctl); margin-bottom: 16px; background: var(--ok-bg); color: var(--ok); }
.lms-flash--error { background: var(--err-bg); color: var(--err); }
/* Недоступное действие: выглядит как кнопка, но не кликается. Прячем такие
   действия совсем нельзя — человек должен видеть, что удаление существует, и
   понимать, почему сейчас закрыто (подсказка в title). */
.lms-act.is-disabled { opacity: .55; cursor: not-allowed; }

/* Меню редких действий материала в админке (задача 2026-08-24-09).

   Кнопка стоит последней в ряду, список раскрывается под ней и прижат к правому
   краю: ряд действий сам прижат вправо, и меню, растущее влево, не уезжает за
   край даже на узком экране. */
.lms-act__menu { position: relative; }
.lms-act__menu-btn { width: 100%; }
.lms-act__menu-pop { position: absolute; right: 0; top: calc(100% + 6px); z-index: 40;
    min-width: 232px; max-width: calc(100vw - 32px); padding: 6px; border-radius: 14px;
    background: #fff; border: 1px solid #ebedf0; box-shadow: 0 24px 60px -20px rgba(84,139,200,.45);
    display: flex; flex-direction: column; gap: 2px; }
.lms-act__menu-item { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 40px;
    padding: 0 12px; border: 0; border-radius: 10px; background: none; text-align: left;
    font: 600 14px 'Raleway', sans-serif; color: var(--v2-text); text-decoration: none; cursor: pointer;
    white-space: nowrap; }
.lms-act__menu-item i { width: 17px; height: 17px; flex: none; }
.lms-act__menu-item:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.lms-act__menu-item:focus-visible { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--v2-focus); }
.lms-act__menu-item--danger { color: #b3261e; }
.lms-act__menu-item--danger:hover { background: #fdecea; color: #b3261e; }
/* «Удаление недоступно» — пояснение, а не действие: автор должен видеть, почему
   удалить нельзя. Подсказка остаётся при наведении. */
.lms-act__menu-item.is-disabled { opacity: .55; cursor: not-allowed; color: var(--v2-text2); }
.lms-act__menu-item.is-disabled:hover { background: none; }
.lms-notice { padding: 10px 14px; border-radius: var(--r-ctl); margin-bottom: 16px; background: #fdf3e2; color: #8a6d3b; }

/* Ряд вкладок переносится на следующую строку, как соседний ряд фильтров
   (`.lms-chips`). Без переноса на узком экране флекс сжимал вкладки: текст в
   них переходил на две строки (высота ряда 66 px вместо 38), а последние
   вкладки уезжали за край и не открывались вовсе. */
.lms-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
/* Подпись вкладки не переносится: перенос — забота ряда, а не текста, иначе
   вкладка становится вдвое выше. Свойство стоит здесь, в описании самой
   коробки, а не в дополняющем правиле ниже по файлу. */
.lms-tab { padding: 8px 16px; border: 1px solid var(--border); border-radius: 999px; background: var(--white); font: 600 14px 'Raleway', sans-serif; cursor: pointer; white-space: nowrap; }
.lms-tab--active { background: var(--brand); color: var(--white); border-color: var(--brand); }

.lms-modal { position: fixed; inset: 0; background: rgba(16, 24, 40, .45); display: flex; align-items: center; justify-content: center; z-index: 60; padding: 20px; }
.lms-modal__box { background: var(--white); border-radius: var(--r-card); padding: 24px; max-width: 640px; width: 100%; max-height: 85vh; overflow: auto; box-shadow: var(--shadow-lg); }
.lms-review__section { padding: 12px 0; border-top: 1px solid var(--border); }
.lms-review__lesson { display: flex; gap: 10px; align-items: center; margin: 8px 0; }
.lms-review__lesson span { flex: 0 0 140px; font-size: 14px; }
.lms-review__lesson input { flex: 1; padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--r-ctl); font: inherit; font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.lms-review__actions { margin-top: 18px; display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
.lms-review__reject { display: grid; gap: 6px; }
.lms-review__reject textarea { padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--r-ctl); font: inherit; min-width: 240px; }

/* --- Сайдбар: партнёрский блок в скруглённой панели (как в макете) --- */
/* Раздел «Партнёр»: обычные пункты sidebar после разделителя — см. .sidebar__divider ниже. */
.sidebar__divider { height: 1px; background: var(--v2-border); margin: 10px 4px 6px; }

/* --- Обложка курса в карточке каталога --- */
.lms-card__cover { overflow: hidden; }
.lms-card__cover img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* --- Экран выбора типа «Разместить материал» --- */
.lms-chooser__hint { color: var(--muted); margin: 0 0 20px; }
.lms-chooser__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; max-width: 820px; }
.lms-chooser__card { position: relative; text-align: left; background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 22px; cursor: pointer; font: inherit; color: inherit; transition: box-shadow .2s, transform .2s, border-color .2s; }
.lms-chooser__card:not(.is-soon):hover { box-shadow: var(--shadow); transform: translateY(-2px); border-color: var(--brand); }
.lms-chooser__card h3 { margin: 12px 0 4px; font: 700 17px 'Raleway', sans-serif; }
.lms-chooser__card p { margin: 0; font-size: 13px; color: var(--muted); }
.lms-chooser__icon { width: 48px; height: 48px; border-radius: 14px; background: var(--tint2); display: flex; align-items: center; justify-content: center; font-size: 24px; }
.lms-chooser__card.is-soon { opacity: .6; cursor: default; }
.lms-chooser__soon { position: absolute; top: 16px; right: 16px; font-size: 11px; font-weight: 600; padding: 3px 10px; border-radius: 999px; background: var(--soft); color: var(--muted); }

/* --- Редактор курса: карточки, обложка, цена, инлайн-правка --- */
.lms-editor__card { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 22px; margin-bottom: 20px; }
.lms-editor__card-title { margin: 0 0 16px; font: 700 17px 'Raleway', sans-serif; }
.lms-editor__card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.lms-editor__card-head .lms-editor__card-title { margin: 0; }
.lms-editor__label { display: block; font-weight: 600; font-size: 14px; margin-bottom: 6px; }
.lms-editor__cover { margin: 4px 0; }
.lms-editor__cover-preview { display: block; max-width: 240px; border-radius: var(--r-ctl); margin: 6px 0; }
.lms-editor__hint { font-size: 12px; color: var(--muted); margin: 4px 0; }
.lms-editor__prices { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.lms-editor__section { border: 1px solid var(--border); border-radius: var(--r-ctl); padding: 14px 16px; margin-bottom: 12px; background: var(--bg-light); }
.lms-editor__section-head { display: flex; gap: 10px; align-items: center; margin-bottom: 10px; }
.lms-editor__section-title { flex: 1; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; font: 600 15px 'Raleway', sans-serif; background: var(--white); }
.lms-editor__lesson { background: var(--white); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; }
.lms-editor__lesson-head { display: flex; gap: 10px; align-items: center; margin-bottom: 6px; }
.lms-editor__lesson-title { flex: 1; padding: 6px 10px; border: 1px solid var(--border); border-radius: 8px; font: inherit; }
.lms-editor__lesson-content { width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; font: inherit; resize: vertical; }

@media (max-width: 640px) {
    .lms-editor__prices { grid-template-columns: 1fr; }
}

/* ============================================================
   Редактор курса — доводка под макет (заголовок над блоком,
   размеры полей, дроп-зона обложки)
   ============================================================ */
.lms-editor__block { margin-bottom: 26px; }
.lms-editor__heading { margin: 0 0 14px; font: 800 20px 'Raleway', sans-serif; color: var(--text); }
.lms-editor__heading-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
.lms-editor__heading-row .lms-editor__heading { margin: 0; }

/* Карточка-контейнер полей (единственный белый блок, без вложенности) */
.lms-editor__card { background: var(--white); border: 1px solid var(--border); border-radius: var(--r-card); padding: 26px; margin-bottom: 0; box-shadow: 0 1px 2px rgba(84, 139, 200, .06); }

/* Поля формы */
.lms-field { margin-bottom: 18px; }
.lms-field:last-child { margin-bottom: 0; }
.lms-field__label { display: block; font: 600 13.5px 'Raleway', sans-serif; color: var(--muted); margin-bottom: 8px; }
.lms-field__control { width: 100%; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--r-ctl); font: 400 15px 'Raleway', sans-serif; color: var(--text); background: var(--white); transition: border-color .15s, box-shadow .15s; font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.lms-field__control:focus { outline: none; border-color: var(--brand); box-shadow: 0 0 0 3px var(--tint2); }
.lms-field__control:disabled { background: var(--bg-light); color: var(--muted); }
textarea.lms-field__control { resize: vertical; min-height: 96px; line-height: 1.5; }
select.lms-field__control { cursor: pointer; }
.lms-field__row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 18px; }
.lms-field__row .lms-field { margin-bottom: 0; }
.lms-field__actions { margin-top: 20px; }

/* Дроп-зона обложки */
.lms-dropzone { position: relative; border: 1.5px dashed var(--border-hover); border-radius: var(--r-ctl); background: var(--bg-light); min-height: 104px; display: flex; align-items: center; justify-content: center; text-align: center; transition: border-color .2s, background .2s; }
.lms-dropzone:hover { border-color: var(--brand); background: var(--tint2); }
.lms-dropzone__input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.lms-dropzone__input:disabled { cursor: default; }
.lms-dropzone__body { pointer-events: none; padding: 20px; display: flex; flex-direction: column; align-items: center; gap: 4px; }
.lms-dropzone__icon { font-size: 26px; margin-bottom: 2px; }
.lms-dropzone__text { font-size: 14px; font-weight: 600; color: var(--muted); }
.lms-dropzone__hint { font-size: 12px; color: var(--muted); opacity: .85; }

/* Разделы и уроки внутри карточки */
.lms-editor__card > .lms-editor__section:first-child { margin-top: 0; }
.lms-editor__section { border: 1px solid var(--border); border-radius: var(--r-ctl); padding: 16px 18px; margin-bottom: 14px; background: var(--bg-light); }
.lms-editor__section:last-child { margin-bottom: 0; }
.lms-editor__section-head { display: flex; gap: 10px; align-items: center; margin-bottom: 12px; }
.lms-editor__section-title { flex: 1; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; font: 700 15px 'Raleway', sans-serif; background: var(--white); }
.lms-editor__section-title:focus { outline: none; border-color: var(--brand); }
.lms-editor__lesson { background: var(--white); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; }
.lms-editor__lesson-head { display: flex; gap: 10px; align-items: center; margin-bottom: 8px; }
.lms-editor__lesson-title { flex: 1; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; font: 600 14px 'Raleway', sans-serif; }
.lms-editor__lesson-title:focus, .lms-editor__lesson-content:focus { outline: none; border-color: var(--brand); }
.lms-editor__lesson-content { width: 100%; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; font: 400 14px 'Raleway', sans-serif; resize: vertical; line-height: 1.5; }

.lms-btn--ghost { background: var(--bg-light); border-style: dashed; color: var(--brand); }
.lms-btn--ghost:hover { background: var(--tint2); border-color: var(--brand); }
.lms-editor__submit { margin-top: 4px; }

@media (max-width: 640px) {
    .lms-field__row { grid-template-columns: 1fr; gap: 0; }
    .lms-field__row .lms-field { margin-bottom: 18px; }
}

/* Редактор курса — на десктопе достаточно ~50% ширины */
.lms-editor { max-width: 640px; }
/* На всякий случай прячем спиннеры у числовых полей (поля цены — текстовые) */
.lms-field__control[type="number"]::-webkit-outer-spin-button,
.lms-field__control[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.lms-field__control[type="number"] { -moz-appearance: textfield; appearance: textfield; }

/* --- Урок: переключатель типа (Видео/Текст/Файл) + «скоро» дроп-зоны --- */
[x-cloak] { display: none !important; }
/* Логотип в шапке кабинета — ссылка на главную. Своей рамки и подчёркивания у
   неё нет: выглядит она ровно как прежняя картинка. */
.topbar__logo-link { display: inline-flex; align-items: center; text-decoration: none; }
.lms-editor__lesson-head { flex-wrap: wrap; }
.lms-dropzone--soon { background: var(--bg-light); border-color: var(--border); opacity: .8; cursor: default; }
.lms-dropzone--soon:hover { background: var(--bg-light); border-color: var(--border); }
.lms-dropzone--soon .lms-dropzone__text { font-weight: 500; }

/* num-figures-override: шорткат font: в этих полях сбрасывает font-variant-numeric
   обратно в normal и перебивает глобальное правило input{}. Возвращаем ровные цифры. */
.lms-field__control,
.lms-editor__section-title,
.lms-editor__lesson-title,
.lms-editor__lesson-content {
    font-variant-numeric: lining-nums tabular-nums;
    -webkit-font-feature-settings: "lnum" 1, "tnum" 1;
    font-feature-settings: "lnum" 1, "tnum" 1;
}

/* ============================================================
   mockup-exact: значения сняты из макета Фундамент.dc.html
   (партнёрское авторство: сайдбар, выбор типа, редактор)
   ============================================================ */

/* --- Сайдбар: подпись «Партнёр» над панелью + сама панель --- */
/* Старые правила .sidebar__partner-label/.sidebar__partner (синяя капсула v1) заменены
   разделителем + обычными .sidebar__link — см. .sidebar__divider выше и sidebar.blade.php. */

/* --- Выбор типа материала --- */
.lms-chooser__hint { font-size: 14px; color: #575757; margin: 0 0 20px; }
.lms-chooser__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; max-width: 900px; }
.lms-chooser__card { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; text-align: left; background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 22px; }
.lms-chooser__card:not(.is-soon):hover { border-color: #45679d; box-shadow: 0 12px 30px -16px rgba(84, 139, 200, .4); transform: none; }
.lms-chooser__icon { width: 52px; height: 52px; border-radius: 14px; background: #e3efff; color: #45679d; font-size: 26px; margin: 0; }
.lms-chooser__card h3 { margin: 0; font-weight: 700; font-size: 18px; }
.lms-chooser__card p { margin: 0; font-size: 13px; color: #575757; line-height: 1.5; }

/* --- Шапка шага 2 --- */
.lms-back { display: inline-flex; align-items: center; gap: 8px; color: #45679d; font-weight: 600; font-size: 14px; text-decoration: none; margin-bottom: 12px; }
.lms-stephead { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.lms-stephead__icon { width: 46px; height: 46px; border-radius: 13px; background: #e3efff; color: #45679d; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.lms-stephead__eyebrow { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .96px; color: #9aa4b8; }
.lms-stephead__title { margin: 2px 0 0; font-weight: 700; font-size: 24px; }

/* --- Карточка настроек: без рамки, с мягкой тенью --- */
.lms-editor__card { background: #fff; border: 0; border-radius: 20px; box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); padding: 24px; display: flex; flex-direction: column; gap: 16px; margin-bottom: 18px; }
.lms-editor__card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 0; }
.lms-editor__card-title { margin: 0; font-weight: 700; font-size: 18px; }

/* --- Поля --- */
.lms-field { margin-bottom: 0; }
.lms-field__label { display: block; font-weight: 600; font-size: 13px; color: #313131; margin-bottom: 7px; }
.lms-field__control { width: 100%; height: 50px; border-radius: 14px; border: 1px solid #e2e8f4; background: #fff; padding: 0 14px; font-size: 15px; color: #313131; transition: border-color .15s; box-shadow: none; font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.lms-field__control:focus { outline: none; border-color: #45679d; box-shadow: none; }
textarea.lms-field__control { height: auto; min-height: 88px; padding: 12px 14px; line-height: 1.5; resize: vertical; }
select.lms-field__control { padding: 0 10px 0 14px; }
.lms-field__actions { margin-top: 0; }

/* --- Дроп-зоны --- */
.lms-dropzone { position: relative; border: 1.5px dashed #cdd8ec; border-radius: 14px; background: #f7faff; padding: 24px; text-align: center; color: #9aa4b8; font-size: 13px; min-height: 0; display: block; }
.lms-dropzone:hover { border-color: #45679d; background: #f7faff; }
.lms-dropzone--sm { border-radius: 10px; padding: 18px; }
.lms-dropzone--soon { opacity: 1; }
.lms-dropzone--soon:hover { border-color: #cdd8ec; }
.lms-dropzone__body { pointer-events: none; padding: 0; display: flex; flex-direction: column; align-items: center; gap: 8px; }
.lms-dropzone__body span { font-weight: 500; color: #9aa4b8; font-size: 13px; }
.lms-dropzone__preview { display: block; width: 100%; max-width: 240px; aspect-ratio: 1200 / 630; border-radius: 10px; object-fit: cover; object-position: center; margin: 0; }

/* --- Цена: два тумблера --- */
.lms-price { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.lms-price__col { display: flex; flex-direction: column; gap: 10px; }
.lms-price__tog { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 12px 14px; border-radius: 14px; font-size: 14px; font-weight: 600; border: 1px solid #e2e8f4; background: #fff; color: #575757; transition: all .15s; }
.lms-price__tog.is-on { border-color: #45679d; background: #eef4ff; color: #3a5788; }
.lms-price__sym { font-size: 16px; }

/* --- Разделы и уроки --- */
.lms-btn--outline { height: 40px; padding: 0 14px; border: 1px solid #45679d; border-radius: 12px; background: #fff; color: #45679d; font-weight: 600; font-size: 14px; }
.lms-btn--outline:hover { background: #eef4ff; border-color: #45679d; }
.lms-editor__section { border: 1px solid #e2e8f4; border-radius: 16px; padding: 16px; background: #f7faff; margin-bottom: 12px; }
.lms-editor__section-head { display: flex; gap: 10px; align-items: center; margin-bottom: 12px; }
.lms-editor__section-title { width: 100%; height: 44px; border-radius: 12px; border: 1px solid #e2e8f4; background: #fff; padding: 0 14px; font-size: 15px; font-weight: 600; color: #313131; margin-bottom: 0; }
.lms-editor__lesson { background: #fff; border: 1px solid #e2e8f4; border-radius: 12px; padding: 12px; display: flex; flex-direction: column; gap: 10px; margin-bottom: 10px; }
.lms-editor__lesson-head { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 0; }
.lms-editor__lesson-title { flex: 1; min-width: 180px; height: 42px; border-radius: 10px; border: 1px solid #e2e8f4; background: #fff; padding: 0 12px; font-size: 14px; font-weight: 400; color: #313131; }
.lms-editor__lesson-content { width: 100%; min-height: 56px; border-radius: 10px; border: 1px solid #e2e8f4; background: #fff; padding: 10px 12px; font-size: 13px; color: #313131; resize: vertical; line-height: 1.5; }
.lms-editor__note { font-size: 12px; color: #9aa4b8; line-height: 1.5; margin: 6px 0 0; }

/* Сегменты типа урока — пилюли из макета */

/* «+ Добавить урок» — текстовая ссылка */
.lms-addlink { align-self: flex-start; display: inline-flex; align-items: center; gap: 6px; background: none; border: 0; padding: 4px 0; cursor: pointer; color: #45679d; font-weight: 600; font-size: 14px; }
.lms-addlink:hover { text-decoration: underline; }

@media (max-width: 640px) {
    .lms-price { grid-template-columns: 1fr; }
}

/* «Запомнить меня» на форме входа — компактнее, чем блок согласий при регистрации */
.consent--inline { align-items: center; margin-bottom: 16px; }
.consent--inline .consent__text { font-size: 13.5px; color: var(--text); }

/* ============================================================
   «Мои материалы» — карточки по макету (вместо таблицы)
   ============================================================ */
.lms-mat { max-width: 1000px; }
.lms-mat__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; }
.lms-mat__title { margin: 0 0 4px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; color: #313131; }
.lms-mat__lead { margin: 0; font-size: 14px; color: #575757; }

/* Фильтры-чипсы */
.lms-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.lms-chip { padding: 7px 14px; border-radius: 999px; border: 1px solid #e2e8f4; background: #fff; color: #575757; font: 600 13px 'Raleway', sans-serif; cursor: pointer; transition: all .15s; }
.lms-chip:hover { border-color: #45679d; color: #45679d; }
.lms-chip.is-active { background: #45679d; border-color: #45679d; color: #fff; }
.lms-chip.is-soon { opacity: .5; cursor: default; }
.lms-chip.is-soon:hover { border-color: #e2e8f4; color: #575757; }

/* Карточка материала */
.lms-mat__card {
    display: grid;
    grid-template-columns: 72px 1fr auto auto;
    align-items: center;
    gap: 18px;
    background: #fff;
    border: 1px solid #e2e8f4;
    border-radius: 18px;
    padding: 16px 20px;
    margin-bottom: 14px;
}
.lms-mat__icon { width: 72px; height: 72px; border-radius: 14px; background: #e3efff; color: #45679d; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.lms-mat__icon img { width: 100%; height: 100%; object-fit: cover; }
.lms-mat__icon i { width: 30px; height: 30px; }

.lms-mat__badges { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }
.lms-badge--type { background: #e3efff; color: #45679d; }
.lms-mat__name { margin: 0 0 6px; font: 700 17px 'Raleway', sans-serif; color: #313131; }
.lms-mat__price { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.lms-mat__rub { font: 700 15px 'Raleway', sans-serif; color: #313131; font-variant-numeric: lining-nums tabular-nums; }
.lms-gc { display: inline-block; padding: 3px 10px; border-radius: 999px; background: #fdf3e2; color: #8a6d3b; font-size: 12px; font-weight: 600; font-variant-numeric: lining-nums tabular-nums; }
.lms-mat__free { font-size: 13px; color: #9aa4b8; }
.lms-mat__reject { margin: 8px 0 0; font-size: 13px; color: #c62828; }

/* Продажи / доход */
.lms-mat__stats { display: flex; gap: 26px; text-align: right; }
.lms-mat__stat-label { display: block; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .96px; color: #9aa4b8; margin-bottom: 4px; }
.lms-mat__stat-value { display: block; font: 700 17px 'Raleway', sans-serif; color: #313131; font-variant-numeric: lining-nums tabular-nums; }

/* Действия */
.lms-mat__actions { display: flex; gap: 8px; }
.lms-iconbtn { width: 38px; height: 38px; border-radius: 10px; border: 1px solid #e2e8f4; background: #fff; color: #45679d; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all .15s; text-decoration: none; }
.lms-iconbtn:hover { border-color: #45679d; background: #eef4ff; }
.lms-iconbtn i { width: 18px; height: 18px; }
.lms-iconbtn.is-disabled { opacity: .4; cursor: default; color: #9aa4b8; }
.lms-iconbtn.is-disabled:hover { border-color: #e2e8f4; background: #fff; }

/* Пусто */
.lms-mat__empty { background: #fff; border: 1px dashed #cdd8ec; border-radius: 18px; padding: 40px 24px; text-align: center; color: #575757; }
.lms-mat__empty p { margin: 0 0 16px; }
.lms-mat__note { margin-top: 14px; font-size: 12px; color: #9aa4b8; }

@media (max-width: 860px) {
    .lms-mat__card { grid-template-columns: 56px 1fr; }
    .lms-mat__icon { width: 56px; height: 56px; }
    .lms-mat__stats, .lms-mat__actions { grid-column: 2 / -1; justify-content: flex-start; text-align: left; }
}

/* Видео к уроку (Этап 2) */
.lms-hidden-file { display: none; }
.lms-dropzone.is-drag { border-color: #45679d; background: #eef4ff; }
.lms-vid { display: flex; align-items: center; gap: 14px; background: #f7faff; border: 1px solid #e2e8f4; border-radius: 12px; padding: 12px; flex-wrap: wrap; }
.lms-vid--proc { color: #8a6d3b; background: #fdf3e2; border-color: #f0e0c0; font-weight: 600; }
.lms-vid__poster { width: 96px; height: 54px; object-fit: cover; border-radius: 8px; }
.lms-vid__meta { flex: 1; min-width: 160px; }
.lms-vid__name { font-weight: 600; color: #313131; }
.lms-vid__sub { font-size: 12px; color: #9aa4b8; }
.lms-vid__actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lms-vid__prog { height: 6px; background: #e6edf8; border-radius: 999px; overflow: hidden; margin-top: 8px; width: 100%; }
.lms-vid__prog span { display: block; height: 100%; background: #45679d; }
.lms-spin { display: inline-block; width: 14px; height: 14px; border: 2px solid #d9c39a; border-top-color: #8a6d3b; border-radius: 50%; animation: lms-spin .8s linear infinite; margin-right: 8px; vertical-align: middle; }
@keyframes lms-spin { to { transform: rotate(360deg); } }

/* Исходник видео в панели модерации */
.lms-review__video { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 6px; font-size: 13px; }
.lms-review__vname { color: #575757; }
.lms-review__vname em { color: #8a6d3b; font-style: normal; }

/* Бейдж отвязанного видео */
.badge--orphan { background: #eef1f6; color: #6f7c93; }

/* ── Админ · Материалы / курсы — единый вид карточек + фильтры ── */
.lms-mat--admin { max-width: 1040px; }
.lms-tab { display: inline-flex; align-items: center; gap: 8px; }
.lms-tab__count { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px; padding: 0 7px; border-radius: 999px; background: #fdf3e2; color: #8a6d3b; font-size: 12px; font-weight: 700; font-variant-numeric: lining-nums tabular-nums; }
.lms-tab__count.is-on { background: rgba(255,255,255,.25); color: #fff; }

.lms-mat__filters { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 18px; }
.lms-mat__filters .lms-chips { margin-bottom: 0; }
.lms-search { position: relative; flex: 1; min-width: 200px; max-width: 320px; }
.lms-search i,
.lms-search svg { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: #9aa4b8; }
.lms-search input { width: 100%; height: 42px; padding: 0 14px 0 40px; border: 1px solid #e2e8f4; border-radius: 12px; background: #fff; font: 500 14px 'Raleway', sans-serif; color: #313131; font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.lms-search input:focus { outline: none; border-color: #45679d; }

/* Карточка админа: обложка-баннер, автор, состав, готовность видео, вертикальные действия */
.lms-mat__card--admin { grid-template-columns: 110px 1fr auto; align-items: flex-start; gap: 16px; padding: 16px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.lms-mat__card--admin .lms-mat__icon { width: 110px; height: 78px; border-radius: 12px; }
.lms-mat__card--admin .lms-mat__body { display: flex; flex-direction: column; gap: 8px; min-width: 240px; }
.lms-mat__card--admin .lms-mat__badges,
.lms-mat__card--admin .lms-mat__name { margin: 0; }

.lms-mat__author { display: flex; align-items: center; gap: 8px; }
.lms-mat__avatar { width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(137deg,#3f6399,#6b93c7); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; flex: none; }
.lms-mat__author-name { font-size: 13px; font-weight: 500; color: #313131; }
.lms-mat__author-cap { font-size: 12px; color: #9aa4b8; }

.lms-mat__meta { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; font-size: 13px; color: #575757; }
.lms-mat__vready { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }
.lms-mat__vready i { width: 15px; height: 15px; }
.lms-mat__vready.is-ok { color: #1e7d34; }
.lms-mat__vready.is-warn { color: #8a6d3b; }
.lms-mat__vready.is-muted { color: #9aa4b8; }

.lms-mat__reject-box { display: flex; align-items: flex-start; gap: 8px; margin: 2px 0 0; background: #fce8e6; color: #b42318; border-radius: 10px; padding: 10px 12px; font-size: 13px; line-height: 1.45; }
.lms-mat__reject-box strong { font-weight: 700; flex: none; }

.lms-mat__actions--admin { flex-direction: column; align-items: stretch; gap: 8px; min-width: 150px; }
.lms-act { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 44px; padding: 0 18px; border-radius: 12px; font: 600 14px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; border: 1px solid transparent; transition: all .15s; }
.lms-act i { width: 17px; height: 17px; }
.lms-act--primary { background: #45679d; color: #fff; border-color: #45679d; }
.lms-act--primary:hover { background: #3a5788; border-color: #3a5788; }
.lms-act--ghost { background: #fff; color: #45679d; border-color: #e2e8f4; }
.lms-act--ghost:hover { background: #f2f6ff; }
.lms-act--muted { background: #fff; color: #575757; border-color: #e2e8f4; }
.lms-act--muted:hover { background: #f2f6ff; }

/* Включённое состояние: материал показывается гостям */
.lms-act--ok { background: #e6f4ea; color: #1e7d34; border-color: #bfe3ca; }
.lms-act--ok:hover { background: #d8eede; color: #1e7d34; border-color: #a9d9b8; }

.lms-mat__empty-icon { width: 56px; height: 56px; margin: 0 auto 12px; border-radius: 16px; background: #e3efff; color: #45679d; display: flex; align-items: center; justify-content: center; }
.lms-mat__empty-icon i { width: 26px; height: 26px; }

@media (max-width: 720px) {
    .lms-mat__card--admin { grid-template-columns: 88px 1fr; }
    .lms-mat__card--admin .lms-mat__icon { width: 88px; height: 62px; }
    .lms-mat__actions--admin { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; min-width: 0; }
    .lms-act { flex: 1; min-width: 130px; }
}

/* ── Пагинация (единый пейджер) ── */
.lms-pager { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 24px; flex-wrap: wrap; }
.lms-pager__btn { min-width: 40px; height: 40px; padding: 0 12px; border-radius: 12px; font: 600 14px 'Raleway', sans-serif; font-variant-numeric: lining-nums tabular-nums; display: inline-flex; align-items: center; justify-content: center; background: #fff; color: #575757; border: 1px solid #e2e8f4; cursor: pointer; transition: all .15s; }
.lms-pager__btn:hover { border-color: #45679d; color: #45679d; }
.lms-pager__btn i { width: 18px; height: 18px; }
.lms-pager__btn.is-active { background: #45679d; color: #fff; border-color: #45679d; cursor: default; }
.lms-pager__btn.is-disabled { color: #c2cadb; border-color: #eef2fb; cursor: not-allowed; }
.lms-pager__btn.is-disabled:hover { color: #c2cadb; border-color: #eef2fb; }
.lms-pager__gap { min-width: 28px; text-align: center; color: #9aa4b8; font-weight: 600; }
/* Ссылки в пагинации публичных страниц: выглядят так же, как кнопки списков
   кабинета, — пагинация не должна отличаться в двух местах портала. */
a.lms-pager__btn { text-decoration: none; }

/* ── Бейдж очереди модерации в сайдбаре ── */
.sidebar__badge { margin-left: auto; display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; font-size: 11px; font-weight: 700; font-variant-numeric: lining-nums tabular-nums; background: #fdf3e2; color: #8a6d3b; }
.sidebar__link.is-active .sidebar__badge { background: rgba(23, 21, 18, .12); color: var(--v2-active-text); }

/* ── Режим модерации (страница-редактор) ── */
.lms-mod { max-width: 860px; padding-bottom: 88px; }
.lms-mod__back { display: inline-flex; align-items: center; gap: 8px; background: none; border: none; padding: 0; cursor: pointer; color: #45679d; font: 600 14px 'Raleway', sans-serif; margin-bottom: 14px; }
.lms-mod__back:hover { color: #3a5788; }
.lms-mod__banner { display: flex; align-items: flex-start; gap: 12px; background: #fdf3e2; border: 1px solid #f0dcb4; color: #8a6d3b; border-radius: 14px; padding: 14px 16px; margin-bottom: 20px; font-size: 14px; line-height: 1.5; font-weight: 500; }
.lms-mod__banner i { width: 20px; height: 20px; flex: none; margin-top: 1px; }
.lms-mod__banner strong { font-weight: 700; }

.lms-mod__card { background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 22px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); margin-bottom: 16px; }
.lms-mod__cover { width: 100%; border-radius: 14px; margin-bottom: 18px; display: flex; align-items: center; justify-content: center; overflow: hidden; background: linear-gradient(137deg,#3f6399,#6b93c7); color: rgba(255,255,255,.9); }
.lms-mod__cover img { width: 100%; height: 100%; object-fit: cover; }
.lms-mod__cover i { width: 30px; height: 30px; }
.lms-mod__author { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; }
.lms-mod__author-name { font-size: 14px; font-weight: 600; color: #313131; }
.lms-mod__author-cap { font-size: 12px; color: #9aa4b8; }

.lms-mod__ro-field { display: block; margin-bottom: 14px; }
.lms-mod__ro-label { display: flex; align-items: center; gap: 6px; font-weight: 600; font-size: 13px; margin-bottom: 7px; color: #575757; }
.lms-mod__ro-label i { width: 14px; height: 14px; color: #9aa4b8; }
.lms-mod__ro-input { width: 100%; height: 48px; border-radius: 12px; border: 1px solid #eef2fb; background: #f7faff; padding: 0 14px; font-size: 15px; color: #9aa4b8; cursor: not-allowed; }
.lms-mod__ro-area { width: 100%; min-height: 76px; border-radius: 12px; border: 1px solid #eef2fb; background: #f7faff; padding: 12px 14px; font-size: 14px; color: #9aa4b8; cursor: not-allowed; line-height: 1.5; resize: none; }
.lms-mod__price-row { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }
.lms-mod__ro-field--grow { flex: 1; min-width: 160px; margin-bottom: 0; }
.lms-mod__gc { align-self: flex-end; margin-bottom: 2px; }

.lms-mod__lessons-title { margin: 0 0 4px; font: 700 18px 'Raleway', sans-serif; }
.lms-mod__lessons-hint { margin: 0 0 16px; font-size: 13px; color: #9aa4b8; }
.lms-mod__lessons { display: flex; flex-direction: column; gap: 12px; }
.lms-mod__lesson { border: 1px solid #e2e8f4; border-radius: 14px; padding: 14px; background: #f7faff; }
.lms-mod__lesson-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lms-mod__lesson-title { font-weight: 600; font-size: 14px; }
.lms-mod__video { margin-top: 12px; display: flex; flex-direction: column; gap: 10px; }
.lms-mod__src { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid #e2e8f4; border-radius: 12px; padding: 10px 12px; flex-wrap: wrap; }
.lms-mod__src > i { flex: none; color: #45679d; width: 16px; height: 16px; }
.lms-mod__src-info { flex: 1; min-width: 0; }
.lms-mod__src-name { font-weight: 600; font-size: 13px; font-family: ui-monospace, monospace; word-break: break-all; }
.lms-mod__src-size { font-size: 12px; color: #9aa4b8; }
.lms-mod__src-btn { height: 38px; padding: 0 14px; border: 1px solid #e2e8f4; border-radius: 10px; background: #fff; color: #45679d; font: 600 13px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; }
.lms-mod__src-btn:hover { background: #f2f6ff; }
.lms-mod__src-btn--muted { color: #575757; }
.lms-mod__src-btn i { width: 16px; height: 16px; }
.lms-mod__src-note { font-size: 13px; color: #9aa4b8; font-style: italic; }
.lms-mod__embed-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 6px; }
.lms-mod__embed-label { font-weight: 600; font-size: 13px; color: #313131; }
.lms-mod__embed-help { display: inline-flex; min-height: 44px; align-items: center; gap: 5px; font-size: 12px; font-weight: 600; color: var(--v2-text); text-decoration: none; }
.lms-mod__embed-help:hover { color: var(--v2-text); text-decoration: underline; text-decoration-color: var(--v2-accent); text-decoration-thickness: 2px; }
.lms-mod__embed-help:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.lms-mod__embed-help i { width: 14px; height: 14px; }
.lms-mod__embed { width: 100%; min-height: 60px; border-radius: 12px; border: 1px solid #e2e8f4; background: #fff; padding: 10px 12px; font-size: 13px; color: #313131; resize: vertical; font-family: ui-monospace, monospace; }
.lms-mod__embed:focus { outline: none; border-color: #45679d; }
.lms-mod__delsrc { margin-top: 8px; display: inline-flex; align-items: center; gap: 6px; background: none; border: none; padding: 0; cursor: pointer; color: #b42318; font: 600 13px 'Raleway', sans-serif; }
.lms-mod__delsrc i { width: 16px; height: 16px; }
.lms-mod__ro-note { margin-top: 10px; font-size: 13px; color: #9aa4b8; }

/* Закреплённая панель действий */
.lms-mod__bar { position: sticky; bottom: 0; left: 0; right: 0; margin: 0 -28px -28px; padding: 16px 28px; background: rgba(255,255,255,.92); backdrop-filter: blur(8px); border-top: 1px solid #e2e8f4; z-index: 10; }
/* Admin Moderation Mobile Bar Fix */
/* Breakout margin панели модерации (-28px) рассчитан под десктопный padding
   .content (28px, строка 185). На мобильном breakpoint padding .content
   уменьшается до 20px 16px (строка 235) — margin панели должен совпадать
   с 16px, иначе панель на 12px шире экрана с каждой стороны (28-16=12). */
@media (max-width: 767px) {
    .lms-mod__bar { margin: 0 -16px -16px; padding: 16px; }
}
/* End Admin Moderation Mobile Bar Fix */
.lms-mod__bar-reject { max-width: 860px; margin: 0 auto 12px; }
.lms-mod__bar-reject textarea { width: 100%; min-height: 64px; border-radius: 12px; border: 1px solid #f0c9c4; background: #fff; padding: 10px 12px; font-size: 14px; color: #313131; resize: vertical; line-height: 1.5; }
.lms-mod__bar-reject textarea:focus { outline: none; border-color: #b42318; }
.lms-mod__bar-actions { max-width: 860px; margin: 0 auto; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.lms-mod__approve { height: 50px; padding: 0 24px; border: none; border-radius: 14px; background: #1e7d34; color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; }
.lms-mod__approve:hover { background: #1a6a2c; }
.lms-mod__reject { height: 50px; padding: 0 22px; border: 1px solid #f0c9c4; border-radius: 14px; background: #fff; color: #b42318; font: 600 15px 'Raleway', sans-serif; cursor: pointer; }
.lms-mod__reject:hover { background: #fdecea; }
.lms-mod__reject-confirm { height: 50px; padding: 0 22px; border: none; border-radius: 14px; background: #b42318; color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; }
.lms-mod__cancel { height: 50px; padding: 0 20px; border: 1px solid #e2e8f4; border-radius: 14px; background: #fff; color: #575757; font: 600 15px 'Raleway', sans-serif; cursor: pointer; }

/* ── Поле Vimeo-embed в редакторе урока ── */
.lms-embed { margin-top: 12px; }
.lms-embed__label { display: block; font-weight: 600; font-size: 13px; margin-bottom: 6px; color: #313131; }
.lms-embed__by { font-weight: 500; color: #9aa4b8; }
.lms-embed__input { width: 100%; min-height: 60px; border-radius: 12px; border: 1px solid #e2e8f4; background: #fff; padding: 10px 12px; font-size: 13px; color: #313131; resize: vertical; font-family: ui-monospace, monospace; }
.lms-embed__input:focus { outline: none; border-color: #45679d; }
.lms-embed__input[readonly] { background: #f7faff; color: #575757; cursor: default; }

/* ── Каталог курсов (карточки по макету) ── */
.lms-cat__lead { margin: 0 0 16px; font-size: 14px; color: #575757; }
.author-academy { font-weight: 600; color: #45679d; }

/* ---------- Каталог: поиск и переключатель одной строкой (макет 03.08) ---------- */
.cat-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    flex-wrap: wrap; margin-bottom: 20px; }
input.cat-search { flex: 1 1 260px; min-width: 220px; max-width: 380px; height: 48px;
    padding: 0 16px; border: 1px solid #e2e8f4; border-radius: 13px; background: #fff;
    font: 500 14px 'Raleway', sans-serif; color: #313131; }
input.cat-search:focus { outline: none; border-color: #45679d; }
.cat-tabs { display: flex; align-items: center; gap: 4px; height: 48px; padding: 4px;
    background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; flex: 0 1 auto;
    max-width: 100%; overflow-x: auto; }
.cat-tab { height: 38px; padding: 0 16px; border: none; border-radius: 11px; background: none;
    color: #575757; font: 600 14px 'Raleway', sans-serif; white-space: nowrap; cursor: pointer;
    transition: all .15s; }
.cat-tab:hover { background: #f2f6ff; color: #45679d; }
.cat-tab.is-on { background: #45679d; color: #fff; }

/* Пустое состояние каталога — объясняет причину и даёт выход */
.cat-empty { display: flex; flex-direction: column; align-items: center; gap: 12px;
    padding: 44px 32px; text-align: center; background: #fff; border: 1px dashed #d6dfee;
    border-radius: 20px; }
.cat-empty__icon { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px;
    border-radius: 15px; background: #e3efff; color: #45679d; }
.cat-empty__icon svg, .cat-empty__icon i { width: 26px; height: 26px; }
.cat-empty h4 { margin: 0; font: 700 19px 'Raleway', sans-serif; }
.cat-empty p { margin: 0; max-width: 520px; font-size: 14px; line-height: 1.6; color: #575757; }
/* Класс носят и <button>, и <a>: у ссылки без flex текст прижимается к верху.
   Вид — вторичной кнопки кабинета: белая, светлая обводка, тёмный текст; та же,
   что «Подробнее» у карточки на витрине (просьба заказчика 22.08.2026). */
.cat-empty__btn { display: inline-flex; align-items: center; justify-content: center;
    height: 44px; padding: 0 20px; border: 1px solid #ebedf0; border-radius: 12px;
    background: #fff; color: var(--v2-text); font: 600 14px 'Raleway', sans-serif;
    text-decoration: none; cursor: pointer; transition: background .15s, border-color .15s; }
.cat-empty__btn:hover { background: #f2f5fb; border-color: var(--v2-action); color: var(--v2-text); }

@media (max-width: 720px) {
    /* Переключатель уходит под поиск: сжимать его — значит рвать подписи */
    .cat-toolbar { flex-direction: column; align-items: stretch; }
    input.cat-search { max-width: none; }
}

/* Страница курса: на десктопе ширина 60% — правый край баннера и содержимого совпадают.
   Общее для всех веток course-show.blade.php (автор/оффер/учебный вид). */
@media (min-width: 1024px) {
    .lms-course { width: 60%; }
}

/* ── Мои курсы (ученик) — карточки с прогрессом ── */
/* My Courses v2 */
.myc-v2 { color: var(--v2-text); }
.myc-v2__head { margin-bottom: 18px; }
.myc-v2__head h2 { margin: 0 0 4px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; color: var(--v2-text); }
.myc-v2__head p { margin: 0; font-size: 14px; color: var(--v2-text2); }

.myc-v2__tabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
.myc-v2__tab { min-height: 44px; padding: 0 16px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; cursor: pointer;
    transition: border-color .15s, background .15s, color .15s; }
.myc-v2__tab:hover:not(.is-active) { border-color: var(--v2-accent); }
.myc-v2__tab.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.myc-v2__tab:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }
.myc-v2__tab-empty { color: var(--v2-text2); padding: 24px 0; }

.myc-v2__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; }
.myc-card { background: var(--v2-surface); border-radius: 18px; overflow: hidden;
    box-shadow: var(--v2-shadow); display: flex; flex-direction: column; }
.myc-card__cover { position: relative; display: flex; align-items: center; justify-content: center;
    overflow: hidden; background: var(--v2-shell-header); }
.myc-card__cover img { width: 100%; height: 100%; object-fit: cover; }
.myc-card__status { position: absolute; top: 10px; left: 10px; display: inline-flex; align-items: center;
    font-size: 12px; font-weight: 600; padding: 4px 10px; border-radius: 999px; }
.myc-card__status--done { background: #e6f4ea; color: #1e7d34; }
.myc-card__status--progress { background: #fdf3e2; color: #8a6d3b; }
.myc-card__status--new { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.myc-card__remove { position: absolute; top: 10px; right: 10px; display: inline-flex; align-items: center;
    justify-content: center; min-width: 44px; min-height: 44px; border-radius: 50%; cursor: pointer;
    transition: all .15s; backdrop-filter: blur(6px); box-shadow: 0 2px 10px rgba(23,21,18,.28);
    background: rgba(255,255,255,.92); border: 1px solid rgba(255,255,255,.75); color: #b42318; z-index: 2; }
.myc-card__remove i { width: 18px; height: 18px; }
.myc-card__remove:hover { transform: scale(1.06); background: rgba(252,232,230,.96); }
.myc-card__remove:focus-visible { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--v2-focus); }
.myc-card__remove-label { display: none; }

.myc-card__body { padding: 16px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.myc-card__title { margin: 0; font: 700 16px 'Raleway', sans-serif; line-height: 1.3; color: var(--v2-text); }
.myc-card__meta { font-size: 13px; color: var(--v2-text2); }
/* Автор рендерится общим partials/author (shared с каталогом, Библиотекой
   знаний и т.д. — их .author-link/.author-academy не трогаем). Здесь
   только card-scoped переопределение цвета на вторичный v2-текст. */
.myc-card .author-link, .myc-card .author-academy { color: var(--v2-text2); }
.myc-card .author-link:hover { color: var(--v2-text2); text-decoration: underline; }
.myc-card__lessons { font-variant-numeric: lining-nums tabular-nums; }
.myc-card__progress-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.myc-card__progress-label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .6px; color: var(--v2-text2); }
.myc-card__progress-pct { font-size: 14px; font-weight: 700; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.myc-card__progress-bar { height: 8px; border-radius: 999px; background: var(--v2-surface-subtle); overflow: hidden; }
.myc-card__progress-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--v2-action); transition: width .4s; }
.myc-card__progress-bar.is-done > span { background: #1e7d34; }
.myc-card__action { margin-top: auto; min-height: 44px; border: none; border-radius: 12px; background: var(--v2-action);
    color: #fff; font: 600 14px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; display: flex;
    align-items: center; justify-content: center; transition: background .15s; }
.myc-card__action:hover { background: var(--v2-action-hover); color: #fff; }
.myc-card__action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.myc-v2__empty { background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 20px;
    padding: 52px 32px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 14px; }
.myc-v2__empty-icon { width: 60px; height: 60px; border-radius: 17px; background: var(--v2-surface-subtle);
    color: var(--v2-text2); display: flex; align-items: center; justify-content: center; }
.myc-v2__empty-icon i { width: 26px; height: 26px; }
.myc-v2__empty h3 { margin: 0; font: 700 22px 'Raleway', sans-serif; color: var(--v2-text); }
.myc-v2__empty p { margin: 0; max-width: 420px; font-size: 14px; color: var(--v2-text2); line-height: 1.6; }
.myc-v2__empty-action { min-height: 44px; padding: 0 26px; border: none; border-radius: 14px; background: var(--v2-action);
    color: #fff; font: 600 16px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; display: inline-flex;
    align-items: center; justify-content: center; margin-top: 6px; transition: background .15s; }
.myc-v2__empty-action:hover { background: var(--v2-action-hover); color: #fff; }
.myc-v2__empty-action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

@media (max-width: 767px) {
    .myc-v2__grid { grid-template-columns: minmax(0, 1fr); }
    .myc-card__action, .myc-v2__empty-action { width: 100%; }
}
/* End My Courses v2 */

/* ── Учебный вид курса (записанный ученик) ── */
.lc-nums { font-variant-numeric: lining-nums tabular-nums; }

/* ── Подсказка: embed-код вставлен в текст урока ── */
.lms-embed-hint { display: flex; align-items: flex-start; gap: 10px; margin-top: 10px; padding: 12px 14px; border: 1px solid #f0dcb4; border-radius: 12px; background: #fdf3e2; color: #8a6d3b; }
.lms-embed-hint > i { width: 18px; height: 18px; flex: none; margin-top: 1px; }
.lms-embed-hint__body { display: flex; flex-direction: column; gap: 4px; font-size: 13px; line-height: 1.5; }
.lms-embed-hint__btn { align-self: flex-start; margin-top: 6px; height: 36px; padding: 0 14px; border: 1px solid #45679d; border-radius: 10px; background: #fff; color: #45679d; font: 600 13px 'Raleway', sans-serif; cursor: pointer; transition: all .15s; }
.lms-embed-hint__btn:hover { background: #45679d; color: #fff; }
.lms-embed-hint__note { color: #8a6d3b; opacity: .85; }

/* ── Просмотр урока ── */
/* Функциональные !important ниже держат Vimeo-обёртку в вертикальном
   плеере (сторонний inline-стиль с padding-top иначе не убрать) — не
   оформление, не трогаем при переносе цветов/размеров в Lesson v2. */
/* Vimeo кладёт iframe в обёртку с padding-top — внутри вертикальной сцены она мешает */
.lk-stage.is-vertical .lk-frame > div { position: static !important; padding: 0 !important; height: 100%; }
.lk-stage.is-vertical .lk-frame iframe { position: static !important; }

/* ── Дублирующая кнопка «Сохранить» под разделами + статус ── */
.sec-save { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 18px; }
.sec-save__btn { display: inline-flex; align-items: center; gap: 9px; height: 48px; padding: 0 22px; border: none; border-radius: 14px; background: #45679d; color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; transition: background .15s; }
.sec-save__btn:hover { background: #3a5788; }
.sec-save__btn:disabled { opacity: .75; pointer-events: none; cursor: default; }
.sec-save__spin { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.45); border-top-color: #fff; border-radius: 50%; animation: spin .7s linear infinite; }
.sec-save__ok { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: #1e7d34; background: #e6f4ea; border: 1px solid #cfe6d6; padding: 9px 14px; border-radius: 12px; }
.sec-save__err { display: inline-flex; align-items: flex-start; gap: 8px; font-size: 14px; font-weight: 500; color: #b42318; background: #fce8e6; border: 1px solid #f0c9c4; padding: 9px 14px; border-radius: 12px; line-height: 1.45; }
.sec-save__ok i, .sec-save__err i { width: 18px; height: 18px; flex: none; }

/* ── Просмотр материала автором (витрина глазами ученика) ── */
.pv-back { display: inline-flex; align-items: center; gap: 6px; background: none; border: none; padding: 0; cursor: pointer; color: #45679d; font: 600 14px 'Raleway', sans-serif; margin-bottom: 14px; text-decoration: none; }
.pv-back:hover { color: #3a5788; }

.pv-banner { display: flex; align-items: center; gap: 12px; background: #eaf1ff; border: 1px solid #c9dbf5; color: #3a5788; border-radius: 14px; padding: 14px 16px; margin-bottom: 20px; font-size: 14px; line-height: 1.5; font-weight: 500; }
.pv-banner i { width: 20px; height: 20px; flex: none; }
.pv-banner strong { font-weight: 700; }

.pv-grid { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 22px; align-items: start; max-width: 900px; }

.pv-cover { border-radius: 16px; margin-bottom: 18px; overflow: hidden; display: flex; align-items: center; justify-content: center; background: linear-gradient(137deg, #3f6399, #6b93c7); color: rgba(255,255,255,.9); }
.pv-cover img { width: 100%; height: 100%; object-fit: cover; }
.pv-cover i { width: 34px; height: 34px; }
.pv-type { display: inline-flex; align-items: center; font-size: 12px; font-weight: 600; color: #45679d; background: #e3efff; padding: 4px 10px; border-radius: 999px; margin-bottom: 10px; }
.pv-title { margin: 0 0 14px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; line-height: 1.25; color: #313131; }
.pv-desc { margin: 0 0 22px; font-size: 16px; line-height: 1.7; color: #313131; }

.pv-prog-title { margin: 0 0 6px; font: 700 18px 'Raleway', sans-serif; }
.pv-prog-hint { margin: 0 0 12px; font-size: 13px; color: #9aa4b8; }
.pv-lessons { display: flex; flex-direction: column; gap: 8px; }
.pv-row { display: flex; align-items: center; gap: 14px; width: 100%; text-align: left; padding: 14px 16px; border: 1px solid #e2e8f4; border-radius: 14px; background: #fff; cursor: pointer; transition: all .15s; }
.pv-row:hover { border-color: #c9dbf5; }
.pv-row.is-open { border-color: #45679d; }
.pv-num { width: 26px; height: 26px; flex: none; border-radius: 8px; background: #e3efff; color: #45679d; display: flex; align-items: center; justify-content: center; font: 700 12px 'Raleway', sans-serif; font-variant-numeric: lining-nums tabular-nums; }
.pv-row__body { flex: 1; min-width: 0; }
.pv-row__title { display: block; font-weight: 600; font-size: 15px; color: #313131; }
.pv-row__meta { display: block; font-size: 12px; color: #9aa4b8; margin-top: 2px; }
.pv-row__toggle { font-size: 12px; font-weight: 600; color: #45679d; flex: none; }

.pv-preview { margin-top: 8px; border: 1px solid #e2e8f4; border-radius: 14px; padding: 14px; background: #f7faff; }
.pv-preview__label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .6px; color: #9aa4b8; margin-bottom: 10px; }
.pv-preview__video { border-radius: 12px; overflow: hidden; }
.pv-preview__video.is-vertical { background: #1b2536; display: flex; justify-content: center; padding: 10px 0; }
.pv-preview__video.is-vertical .pv-preview__frame { width: auto; aspect-ratio: 9 / 16; height: min(56vh, 460px); }
.pv-preview__frame iframe { display: block; width: 100%; height: 100%; border: 0; border-radius: 10px; }
.pv-preview__video.is-vertical .pv-preview__frame > div { position: static !important; padding: 0 !important; height: 100%; }
.pv-preview__video.is-vertical .pv-preview__frame iframe { position: static !important; }
.pv-preview__text { margin-top: 10px; font-size: 14px; line-height: 1.65; color: #575757; }
.pv-preview__note { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 14px; color: #575757; }
.pv-preview__note i { width: 18px; height: 18px; flex: none; color: #45679d; }

.pv-card { align-self: start; background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 20px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); display: flex; flex-direction: column; gap: 14px; }
.pv-card__label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .6px; color: #9aa4b8; }
.pv-card .lms-badge { align-self: flex-start; }
.pv-card__price-label { font-size: 12px; color: #9aa4b8; margin-bottom: 4px; }
/* Зазор 6 — тот же, что на витрине, в каталоге и в карточке покупки. Панель
   автора — 297.7 px (колонка .pv-grid), строке нужно 294.7: при зазоре 8 не
   хватало ровно одного пикселя, и плашки уезжали вниз. Одно число на все
   витрины, а не четыре подогнанных по месту. */
.pv-card__price { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.pv-card__rub { font: 800 24px 'Raleway', sans-serif; font-variant-numeric: lining-nums tabular-nums; color: #313131; }
.pv-card__date { padding-top: 12px; border-top: 1px solid #f0f3fa; font-size: 13px; color: #575757; }
.pv-card__reject { background: #fce8e6; border-radius: 12px; padding: 12px 14px; font-size: 13px; line-height: 1.5; color: #313131; }
.pv-card__reject-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .6px; color: #b42318; margin-bottom: 4px; }
.pv-card__edit { display: flex; align-items: center; justify-content: center; gap: 8px; height: 48px; border: none; border-radius: 12px; background: #45679d; color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; transition: background .15s; }
.pv-card__edit:hover { background: #3a5788; color: #fff; }
.pv-card__edit i { width: 18px; height: 18px; }
.pv-card__back { display: flex; align-items: center; justify-content: center; height: 46px; border: 1px solid #e2e8f4; border-radius: 12px; background: #fff; color: #575757; font: 600 14px 'Raleway', sans-serif; text-decoration: none; transition: background .15s; }
.pv-card__back:hover { background: #f2f6ff; color: #575757; }

@media (max-width: 900px) {
    .pv-grid { grid-template-columns: 1fr; }
}

/* ── Аккордеон разделов: редактор курса ── */
.lms-sec-toggle { display: flex; align-items: center; gap: 10px; width: 100%; background: none; border: none; padding: 4px 0 8px; cursor: pointer; text-align: left; }
.lms-sec-toggle__chev { width: 18px; height: 18px; flex: none; color: #45679d; transition: transform .15s; }
.lms-sec-toggle__chev.is-collapsed { transform: rotate(-90deg); }
.lms-sec-toggle__name { flex: 1; min-width: 0; font: 700 16px 'Raleway', sans-serif; color: #313131; }
.lms-sec-toggle__count { margin-left: auto; font-size: 12px; font-weight: 600; color: #9aa4b8; background: #f2f6ff; border: 1px solid #e2e8f4; padding: 3px 10px; border-radius: 999px; font-variant-numeric: lining-nums tabular-nums; }

/* ── Бесплатный материал ── */
.lms-free-chip { display: inline-flex; align-items: center; font-weight: 600; font-size: 13px; color: #1e7d34; background: #e6f4ea; padding: 4px 12px; border-radius: 999px; }
.lms-free-chip--lg { font-size: 16px; padding: 6px 16px; }

/* Чекбокс «Бесплатно» в редакторе */
.lms-free { display: flex; align-items: flex-start; gap: 12px; width: 100%; text-align: left; background: none; border: none; padding: 0; margin-top: 12px; cursor: pointer; }
.lms-free:disabled { cursor: default; opacity: .6; }
.lms-free__box { width: 22px; height: 22px; flex: none; border: 2px solid #cdd8ec; border-radius: 6px; background: #fff; display: flex; align-items: center; justify-content: center; color: #fff; transition: all .15s; }
.lms-free__box.is-on { background: #45679d; border-color: #45679d; }
.lms-free__box i { width: 14px; height: 14px; }
.lms-free__text { flex: 1; }
.lms-free__title { display: block; font-weight: 600; font-size: 14px; color: #313131; }
.lms-free__sub { display: block; font-size: 12px; color: #575757; margin-top: 2px; }


/* ── Блок «Пригласить соавтора» (админ) ── */
.co-card__head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.co-card__icon { width: 42px; height: 42px; flex: none; border-radius: 12px; background: #eaf1ff; color: #45679d; display: flex; align-items: center; justify-content: center; }
.co-card__icon i { width: 20px; height: 20px; }
.co-card__title { margin: 0; font: 700 18px 'Raleway', sans-serif; }
.co-card__sub { margin: 2px 0 0; font-size: 13px; color: #9aa4b8; }

.co-avatar { width: 32px; height: 32px; flex: none; border-radius: 50%; background: linear-gradient(137deg,#3f6399,#6b93c7); color: #fff; display: flex; align-items: center; justify-content: center; font: 700 12px 'Raleway', sans-serif; }

.co-search { position: relative; margin-bottom: 12px; }
.co-search i,
.co-search svg { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: #9aa4b8; }
.co-search__input { width: 100%; height: 48px; padding: 0 14px 0 42px; border: 1px solid #e2e8f4; border-radius: 12px; background: #fff; font: 500 15px 'Raleway', sans-serif; color: #313131; font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.co-search__input:focus { outline: none; border-color: #45679d; }

.co-list { border: 1px solid #e2e8f4; border-radius: 14px; overflow: hidden; margin-bottom: 12px; }
.co-list__row { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 10px 12px; background: #fff; border: none; border-bottom: 1px solid #f0f3fa; cursor: pointer; transition: background .15s; }
.co-list__row:last-child { border-bottom: none; }
.co-list__row:hover { background: #f7faff; }
.co-list__body { flex: 1; min-width: 0; }
.co-list__name { display: block; font-weight: 600; font-size: 14px; color: #313131; }
.co-list__mail { display: block; font-size: 12px; color: #9aa4b8; }
.co-list__more { padding: 9px 12px; font-size: 12px; color: #9aa4b8; background: #f7faff; }
.co-empty { margin: 0 0 12px; font-size: 13px; color: #9aa4b8; }

.co-picked { display: flex; align-items: center; gap: 12px; border: 1px solid #e2e8f4; border-radius: 12px; padding: 12px 14px; background: #f7faff; margin-bottom: 14px; }
.co-picked__label { display: block; font-size: 11px; color: #9aa4b8; text-transform: uppercase; letter-spacing: .6px; font-weight: 600; }
.co-picked__name { display: block; font-weight: 600; font-size: 14px; color: #313131; }
.co-send { display: inline-flex; align-items: center; gap: 8px; height: 48px; padding: 0 22px; border: none; border-radius: 12px; background: #45679d; color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; transition: background .15s; }
.co-send:hover { background: #3a5788; }

.co-state { display: flex; align-items: center; gap: 12px; border-radius: 14px; padding: 14px 16px; flex-wrap: wrap; }
.co-state > i { width: 20px; height: 20px; flex: none; }
.co-state__body { flex: 1; min-width: 180px; }
.co-state__title { font-weight: 600; font-size: 14px; }
.co-state__sub { font-size: 13px; color: #575757; margin-top: 2px; }
.co-state__btn { height: 44px; padding: 0 16px; border-radius: 11px; background: #fff; font: 600 13px 'Raleway', sans-serif; cursor: pointer; }
.co-state--wait { background: #fdf3e2; border: 1px solid #f0dcb4; color: #8a6d3b; }
.co-state--wait .co-state__title { color: #8a6d3b; }
.co-state--wait .co-state__btn { border: 1px solid #e2e8f4; color: #575757; }
.co-state--ok { background: #e6f4ea; border: 1px solid #cfe6d6; }
.co-state--ok .co-state__title { color: #1e7d34; }
.co-state--ok .co-state__btn { border: 1px solid #cfe6d6; color: #575757; }
.co-state--no { background: #fce8e6; border: 1px solid #f0c9c4; color: #b42318; margin-bottom: 14px; }
.co-state--no .co-state__title { color: #b42318; }

.lms-notice--info { background: #eaf1ff; border: 1px solid #c9dbf5; color: #3a5788; }

/* ── Входящее приглашение в соавторы (партнёр) ── */
.co-invite { display: flex; align-items: center; gap: 16px; background: #fdf3e2; border: 1px solid #f0dcb4; border-radius: 18px; padding: 16px 18px; margin-bottom: 16px; flex-wrap: wrap; }
.co-invite__icon { width: 52px; height: 52px; flex: none; border-radius: 14px; background: #fff; color: #9a6d3b; display: flex; align-items: center; justify-content: center; }
.co-invite__icon i { width: 24px; height: 24px; }
.co-invite__body { flex: 1; min-width: 200px; }
.co-invite__title { font-weight: 700; font-size: 18px; color: #9a6d3b; }
.co-invite__sub { font-size: 13px; color: #575757; margin-top: 2px; }
.co-invite__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.co-invite__accept { height: 42px; padding: 0 20px; border: none; border-radius: 12px; background: #45679d; color: #fff; font: 600 14px 'Raleway', sans-serif; cursor: pointer; }
.co-invite__accept:hover { background: #3a5788; }
.co-invite__decline { height: 42px; padding: 0 18px; border: 1px solid #f0dcb4; border-radius: 12px; background: #fff; color: #575757; font: 600 14px 'Raleway', sans-serif; cursor: pointer; }
.co-invite__decline:hover { background: #fffaf1; }

.lms-mat__joint { font-size: 12px; color: #9aa4b8; margin-top: 2px; }
.lms-mat__coauthor { display: inline-flex; align-items: center; gap: 6px; margin-left: 2px; padding-left: 10px; border-left: 1px solid #e2e8f4; }
.lms-mat__avatar--sm { width: 24px; height: 24px; font-size: 10px; background: linear-gradient(137deg,#4a5c86,#7f9bc4); }

/* ── Выбор типа материала (партнёр «Разместить», админ «Добавить») ── */
.lms-chooser__head { margin-bottom: 22px; }
.lms-chooser__title { margin: 0 0 4px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; color: #313131; }
.lms-chooser__lead { margin: 0; font-size: 14px; color: #575757; }

.lms-chooser__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; max-width: 900px; }
.lms-chooser__card { position: relative; text-align: left; background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 22px; cursor: pointer; display: flex; flex-direction: column; gap: 12px; transition: all .15s; }
.lms-chooser__card:not(.is-soon):hover { border-color: #45679d; box-shadow: 0 12px 30px -16px rgba(84,139,200,.45); }
.lms-chooser__card.is-soon { cursor: default; opacity: .65; }
.lms-chooser__icon { width: 52px; height: 52px; border-radius: 14px; background: #e3efff; color: #45679d; display: flex; align-items: center; justify-content: center; }
.lms-chooser__icon i { width: 28px; height: 28px; }
.lms-chooser__name { font: 700 18px 'Raleway', sans-serif; color: #313131; }
.lms-chooser__desc { font-size: 13px; color: #575757; line-height: 1.5; }
.lms-chooser__soon { position: absolute; top: 14px; right: 14px; font-size: 11px; font-weight: 600; color: #8a6d3b; background: #fdf3e2; padding: 3px 10px; border-radius: 999px; }

.lms-act--danger { background: #fff; color: #b42318; border-color: #f0c9c4; }
.lms-act--danger:hover { background: #fdecea; }

/* ── Библиотека знаний (витрина бесплатных материалов) ── */
.lib__head { margin-bottom: 22px; }
.lib__title { margin: 0 0 6px 0; font-size: 26px; font-weight: 700; color: #313131; letter-spacing: -0.3px; }
.lib__lead { margin: 0; font-size: 14px; color: #575757; }
.lib__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
@media (max-width: 1100px) { .lib__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 700px) { .lib__grid { grid-template-columns: 1fr; } }
.lib__card { display: flex; flex-direction: column; gap: 14px; background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 20px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.lib__card-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.lib__icon { width: 44px; height: 44px; flex: none; border-radius: 12px; background: #eaf1ff; color: #45679d; display: flex; align-items: center; justify-content: center; }
.lib__icon i { width: 22px; height: 22px; }
.lib__name { margin: 0; font-size: 16px; font-weight: 600; line-height: 1.35; color: #313131; flex: 1; }
.lib__card-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.lib__type { font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: #9aa4b8; }
.lib__open { display: inline-flex; align-items: center; height: 38px; padding: 0 20px; border: 1px solid #45679d; border-radius: 12px; background: #fff; color: #45679d; font-size: 14px; font-weight: 600; text-decoration: none; }
.lib__open:hover { background: #45679d; color: #fff; }
.lib__empty { text-align: center; padding: 48px 20px; color: #575757; }
.lib__empty-icon { width: 56px; height: 56px; margin: 0 auto 14px auto; border-radius: 16px; background: #eaf1ff; color: #45679d; display: flex; align-items: center; justify-content: center; }
.lib__empty a { color: #45679d; font-weight: 600; }

/* Блоки урока в редакторе: видео и конспект видны всегда (пилюли типа убраны). */
.lms-lblock { margin-top: 12px; }
.lms-lblock__label { display: block; font-weight: 600; font-size: 12px; color: #575757; margin-bottom: 6px; }
.lms-lblock__label em { font-style: normal; font-weight: 500; color: #9aa4b8; }

/* Модалка тестовой оплаты (каркас .lms-modal уже есть выше). */
.lms-modal__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.lms-modal__title { margin: 0; font-size: 20px; font-weight: 700; color: #313131; }
.lms-modal__close { border: none; background: none; font-size: 26px; line-height: 1; color: #9aa4b8; cursor: pointer; padding: 0 4px; }
.lms-modal__close:hover { color: #575757; }
.lms-modal__lead { margin: 0 0 16px; font-size: 14px; color: #575757; line-height: 1.5; }
.lms-modal__picked { display: flex; align-items: center; gap: 10px; margin-top: 10px; padding: 12px 14px; border: 1px solid #c9dbf5; border-radius: 12px; background: #f7faff; font-size: 14px; color: #313131; }
.lms-modal__actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }
.lms-modal__actions .lms-act[disabled] { opacity: .5; cursor: not-allowed; }

/* ── Оплаты и транзакции ── */
/* Ровно три колонки, а не авто-подбор.

   Числа в итогах двух разных семейств: договорные (прейскурант, монеты,
   комиссия) и кассовые (карта, выплаты, остаток). Смешанные в одну ленту, они и
   породили вопрос «почему комиссия не равна остатку» — поэтому каждое семейство
   занимает свою строку, а строка обязана быть строкой при любой ширине.
   `auto-fit` этого не даёт: на широком экране он выкладывал шесть колонок в один
   ряд, на ноутбуке четыре — и один и тот же экран выглядел у двух людей
   по-разному. */
.ord-totals { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 18px; }

/* На узком экране — одна колонка. Двух колонок нет намеренно: тройка разбилась
   бы пополам и семейства снова перемешались. Порядок плиток при этом сохраняет
   группировку: сначала три договорных, затем три кассовых. */
@media (max-width: 767px) {
    .ord-totals { grid-template-columns: 1fr; }
}
.ord-total { background: #fff; border: 1px solid #e2e8f4; border-radius: 16px; padding: 16px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.ord-total__label { font-size: 12px; color: #9aa4b8; margin-bottom: 5px; }
.ord-total__value { font-weight: 800; font-size: 22px; font-variant-numeric: tabular-nums; color: #313131; }
.ord-total__value--brand { color: #45679d; }
.ord-total__value--ok { color: #1e7d34; }

/* Пояснение к итогам: стоит под числами и читается как подпись, а не как
   предупреждение об ошибке — расчёт верен, объясняется только несходимость. */
.ord-totals__note { margin: -8px 0 18px; font-size: 13px; line-height: 1.55; color: var(--v2-text2); max-width: 900px; }

.ord-filters { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.ord-filters .lms-search { flex: 1; min-width: 220px; }
/* У .lms-chips свой margin-bottom: при align-items:center он смещает кнопки вверх. */
.ord-filters .lms-chips { margin-bottom: 0; }
.ord-testtoggle { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; background: none; border: none; cursor: pointer; color: #45679d; font-size: 13px; font-weight: 600; }
.ord-testtoggle i { width: 15px; height: 15px; }

.ord-row { display: flex; align-items: center; gap: 14px; background: #fff; border: 1px solid #e2e8f4; border-radius: 16px; padding: 14px 16px; margin-bottom: 10px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); flex-wrap: wrap; }
.ord-row__avatar { width: 34px; height: 34px; flex: none; border-radius: 50%; background: linear-gradient(137deg,#3f6399,#6b93c7); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.ord-row__body { flex: 1; min-width: 180px; }
.ord-row__top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ord-row__no { font-weight: 700; font-size: 14px; font-variant-numeric: tabular-nums; color: #313131; }
.ord-row__item { font-size: 13px; color: #313131; margin-top: 2px; }
.ord-row__meta { font-size: 12px; color: #9aa4b8; margin-top: 2px; }
.ord-row__money { flex: none; text-align: right; min-width: 120px; }
.ord-row__sum { font-weight: 700; font-size: 16px; font-variant-numeric: tabular-nums; color: #313131; }
.ord-row__coins { font-size: 12px; color: #8a6d3b; font-variant-numeric: tabular-nums; }
.ord-row__seller { font-size: 12px; color: #9aa4b8; margin-top: 2px; }

.ord-badge { display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 999px; font-size: 11px; font-weight: 700; }
.ord-badge--test { background: #fdf3e2; color: #8a6d3b; }

.ord-status { flex: none; display: inline-flex; align-items: center; padding: 5px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.ord-status--paid { background: #e6f4ea; color: #1e7d34; }
.ord-status--new, .ord-status--pending { background: #eaf1ff; color: #45679d; }
.ord-status--failed, .ord-status--canceled { background: #fdeceb; color: #c0392b; }
.ord-status--refunded { background: #eef1f5; color: #575757; }

.ord-empty { background: #fff; border: 1px dashed #d6dfee; border-radius: 16px; padding: 32px; text-align: center; color: #575757; font-size: 14px; }

/* Карточка заказа */
.ord-row { width: 100%; text-align: left; cursor: pointer; font-family: inherit; }
.ord-row:hover { border-color: #c9dbf5; }
/* Карточка заказа не растягивается на всю ширину: длинная строка нечитаема. */
.ord-card { max-width: 760px; background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; padding: 22px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.ord-card__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin-bottom: 18px; }
.ord-card__no { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 26px; letter-spacing: -.01em; font-variant-numeric: tabular-nums; color: #313131; }
.ord-card__title { font-size: 20px; font-weight: 700; color: #313131; margin-top: 4px; }
.ord-card__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px 24px; margin-bottom: 4px; }
@media (max-width: 760px) { .ord-card__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 480px) { .ord-card__grid { grid-template-columns: 1fr; } }
.ord-card__cell { display: flex; flex-direction: column; gap: 2px; }
.ord-card__label { font-size: 12px; font-weight: 500; color: #9aa4b8; }
.ord-card__value { font-size: 15px; font-weight: 600; color: #313131; }
.ord-card__sub { font-size: 12px; color: #9aa4b8; }
.ord-card__money { border: 1px solid #e2e8f4; border-radius: 14px; padding: 14px 16px; margin-bottom: 14px; background: #f7faff; }
.ord-card__row { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: #575757; padding: 4px 0; font-variant-numeric: tabular-nums; }
.ord-card__row b { color: #313131; }
.ord-card__row--coins b { color: #8a6d3b; }
.ord-card__row--total { border-top: 1px solid #e2e8f4; margin-top: 6px; padding-top: 10px; font-size: 15px; }
.ord-card__fail { border: 1px solid #f5c6c2; background: #fdeceb; color: #c0392b; border-radius: 12px; padding: 12px 14px; font-size: 13px; margin-bottom: 14px; }
.ord-card--events { margin-top: 16px; }
.ord-events__title { margin: 0 0 16px; font-size: 18px; font-weight: 700; color: #313131; }
.ord-events { display: flex; flex-direction: column; gap: 16px; }
.ord-event { display: flex; align-items: flex-start; gap: 12px; }
.ord-event__dot { width: 10px; height: 10px; flex: none; border-radius: 50%; margin-top: 5px; background: #45679d; }
.ord-event__dot--green { background: #1e7d34; }
.ord-event__dot--red { background: #c0392b; }
.ord-event__dot--grey { background: #9aa4b8; }
.ord-event__body { display: flex; flex-direction: column; gap: 2px; }
.ord-event__title { font-weight: 600; font-size: 14px; color: #313131; }
.ord-event__sub { font-size: 13px; color: #575757; }
.ord-event__time { font-size: 12px; color: #9aa4b8; font-variant-numeric: tabular-nums; }
.ord-card__actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }

/* Условия сделки в редакторе материала (видны только админу). */
.lms-terms { border: 1px solid #e2e8f4; border-radius: 14px; padding: 16px; background: #f7faff; margin-bottom: 18px; }
.lms-terms__title { font-weight: 600; font-size: 13px; color: #313131; margin-bottom: 12px; }
.lms-terms__row { display: flex; gap: 14px; flex-wrap: wrap; }
.lms-terms__field { flex: 1; min-width: 180px; margin-bottom: 0; }
.lms-terms__note { margin: 10px 0 0; font-size: 12px; color: #9aa4b8; }

/* Оплата монетами в карточке покупки */
.coins-box { background: #fdf3e2; border: 1px solid #f0dcb4; border-radius: 12px; padding: 12px; }
.coins-box__head { display: flex; align-items: flex-start; gap: 10px; width: 100%; text-align: left; background: none; border: none; padding: 0; cursor: pointer; }
.coins-box__check { width: 20px; height: 20px; flex: none; border-radius: 6px; border: 1.5px solid #d9c49a; background: #fff; display: flex; align-items: center; justify-content: center; color: #fff; }
.coins-box__check.is-on { background: #9a6d3b; border-color: #9a6d3b; }
.coins-box__check i { width: 13px; height: 13px; }
.coins-box__title { display: block; font-weight: 600; font-size: 14px; color: #8a6d3b; }
.coins-box__sub { display: block; font-size: 12px; color: #575757; margin-top: 2px; }
.coins-box__amount { margin-top: 10px; padding-top: 10px; border-top: 1px solid #f0dcb4; }
.coins-box__control { display: flex; align-items: center; gap: 10px; }
.coins-box__range { flex: 1; accent-color: #9a6d3b; }
.coins-box__unit { font-size: 13px; font-weight: 600; color: #8a6d3b; }
.coins-box__label { display: block; font-size: 12px; font-weight: 600; color: #575757; margin-bottom: 6px; }
.coins-box__input { width: 96px; height: 40px; border-radius: 10px; border: 1px solid #f0dcb4; background: #fff; padding: 0 12px; font-size: 14px; color: #313131; }
.coins-box__row { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; font-size: 13px; color: #575757; }
.coins-box__row b { color: #8a6d3b; font-variant-numeric: tabular-nums; }
.coins-box__note { margin: 8px 0 0; font-size: 11px; line-height: 1.5; color: #9aa4b8; }

/* Урок в курсе один — номер не нужен, ставим маркер. */
.pv-num--dot { font-size: 0; }
.pv-num--dot::before { content: ""; display: block; width: 6px; height: 6px; border-radius: 50%; background: #45679d; }

/* Баланс в шапке кликабелен — ведёт в раздел GessCoin. */
.coin-pill { text-decoration: none; }
.coin-pill:hover { filter: brightness(.97); }

/* Кнопка-действие на обложке карточки: читается и на светлой, и на тёмной. */
.cover-act { position: absolute; top: 10px; right: 10px; display: inline-flex; align-items: center; gap: 6px; height: 36px; width: 36px; justify-content: center; border-radius: 50%; cursor: pointer; transition: all .15s; font: 600 12px 'Raleway', sans-serif; backdrop-filter: blur(6px); box-shadow: 0 2px 10px rgba(20,32,54,.28); background: rgba(255,255,255,.92); border: 1px solid rgba(255,255,255,.75); color: #45679d; z-index: 2; }
.cover-act i { width: 18px; height: 18px; }
.cover-act:hover { transform: scale(1.08); box-shadow: 0 4px 16px rgba(20,32,54,.34); }
.cover-act--added { background: rgba(230,244,234,.94); border-color: rgba(30,125,52,.35); color: #1e7d34; }
.cover-act--remove { border-color: rgba(180,35,24,.28); color: #b42318; }
.cover-act--remove:hover { background: rgba(252,232,230,.96); }
.cover-act__label { display: none; }

/* На тач-экранах подсказки при наведении нет — показываем подпись. */
@media (max-width: 700px) {
    .cover-act { width: auto; padding: 0 12px; border-radius: 999px; }
    .cover-act__label { display: inline; }
}

/* Тост о добавлении/удалении */
.toast { position: fixed; left: 50%; bottom: 28px; transform: translateX(-50%); z-index: 80; background: #313131; color: #fff; padding: 12px 20px; border-radius: 12px; font-size: 14px; font-weight: 500; box-shadow: 0 12px 30px -10px rgba(20,32,54,.5); }

/* История покупок */
.pur-card { background: #fff; border: 1px solid #e2e8f4; border-radius: 18px; padding: 18px 20px; margin-bottom: 12px; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.pur-card__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.pur-card__no { font-size: 13px; font-weight: 700; color: #9aa4b8; font-variant-numeric: tabular-nums; }
.pur-card__title { font-size: 17px; font-weight: 700; color: #313131; margin-top: 2px; }
.pur-card__meta { font-size: 13px; color: #9aa4b8; margin-top: 4px; }
.pur-card__right { text-align: right; }
.pur-card__sum { font-size: 18px; font-weight: 800; color: #313131; font-variant-numeric: tabular-nums; margin-bottom: 6px; }
.pur-card .lms-act { margin-top: 14px; }
.pur-note { display: flex; flex-direction: column; gap: 3px; margin-top: 14px; padding: 12px 14px; border-radius: 12px; font-size: 13px; line-height: 1.5; }
.pur-note b { font-weight: 600; }
.pur-note--wait { background: #fdf3e2; border: 1px solid #f0dcb4; color: #8a6d3b; }
.pur-note--wait span { color: #575757; }
.pur-note--ok { background: #e6f4ea; border: 1px solid rgba(30,125,52,.25); color: #1e7d34; }
.pur-note--ok span { color: #575757; }
.pur-note--no { background: #fdeceb; border: 1px solid #f5c6c2; color: #c0392b; }
.pur-note--no span { color: #575757; }
.lms-field__control.is-error { border-color: #c0392b; }

/* Заявка на возврат в карточке заказа */
.ord-card--request { margin-top: 16px; border-color: #f0dcb4; background: #fffdf8; }
.ord-req__head { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.ord-req__icon { width: 40px; height: 40px; flex: none; border-radius: 12px; background: #fdf3e2; color: #9a6d3b; display: flex; align-items: center; justify-content: center; }
.ord-req__icon i { width: 20px; height: 20px; }
.ord-req__title { font-size: 17px; font-weight: 700; color: #8a6d3b; }
.ord-req__meta { font-size: 13px; color: #9aa4b8; margin-top: 2px; }
.ord-req__reason { background: #fff; border: 1px solid #f0dcb4; border-radius: 12px; padding: 12px 14px; font-size: 14px; color: #575757; line-height: 1.5; margin-bottom: 14px; }
.ord-req__done { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #575757; line-height: 1.5; }
.ord-req__done b { color: #313131; }

/* Страницы-списки не растягиваются на всю ширину монитора: длинная строка нечитаема. */
.pur { max-width: 1000px; }
.ord { max-width: max(1000px, 90%); }

/* Страница заказа («Спасибо») */
.thx { max-width: 640px; }
.thx-card { background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; padding: 32px; text-align: center; box-shadow: 0 20px 50px -20px rgba(84,139,200,.2); }
.thx-icon { width: 64px; height: 64px; margin: 0 auto 18px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: #eaf1ff; color: #45679d; }
.thx-icon i { width: 30px; height: 30px; }
.thx-card--paid .thx-icon { background: #e6f4ea; color: #1e7d34; }
.thx-card--failed .thx-icon, .thx-card--canceled .thx-icon { background: #fdeceb; color: #c0392b; }
.thx-title { margin: 0 0 8px; font-size: 24px; font-weight: 700; color: #313131; }
.thx-lead { margin: 0 0 22px; font-size: 15px; color: #575757; line-height: 1.6; }
.thx-order { border: 1px solid #e2e8f4; border-radius: 14px; padding: 14px 16px; background: #f7faff; text-align: left; margin-bottom: 22px; }
.thx-order__row { display: flex; justify-content: space-between; gap: 12px; padding: 5px 0; font-size: 14px; color: #575757; }
.thx-order__row b { color: #313131; font-variant-numeric: tabular-nums; }
.thx-order__row--total { border-top: 1px solid #e2e8f4; margin-top: 6px; padding-top: 10px; font-size: 15px; }
.thx-actions { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; }
.thx-sim { margin-top: 24px; padding-top: 18px; border-top: 1px dashed #d6dfee; }
.thx-sim__label { display: block; font-size: 12px; color: #9aa4b8; margin-bottom: 10px; }
.thx-sim__btns { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
.ord-card__link { font-size: 14px; font-weight: 600; color: #45679d; text-decoration: none; }
.ord-card__link:hover { text-decoration: underline; }

/* ── GessCoin: баланс ученика и реестр админа (макет 30.07) ───────────────── */
.gc, .gc-adm { max-width: 1000px; }

.gc-hero { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; padding: 26px 28px; margin-bottom: 18px;
    border-radius: 20px; background: linear-gradient(137deg, #3f6399, #6b93c7);
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .45); }
.gc-hero__icon { width: 58px; height: 58px; flex: none; border-radius: 17px; background: rgba(255, 255, 255, .18);
    color: #fff; display: flex; align-items: center; justify-content: center; }
.gc-hero__icon svg, .gc-hero__icon i { width: 26px; height: 26px; }
.gc-hero__body { flex: 1; min-width: 200px; }
.gc-hero__cap { font-size: 13px; font-weight: 600; color: rgba(255, 255, 255, .82); margin-bottom: 2px; }
.gc-hero__sum { display: flex; align-items: baseline; gap: 8px; }
.gc-hero__sum b { font-size: 42px; font-weight: 800; color: #fff; letter-spacing: -.02em; line-height: 1;
    font-variant-numeric: tabular-nums; }
.gc-hero__sum span { font-size: 18px; font-weight: 700; color: rgba(255, 255, 255, .9); }
.gc-hero__rate { font-size: 13px; color: rgba(255, 255, 255, .82); margin-top: 8px; line-height: 1.5; }

.gc-list { background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; overflow: hidden;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.gc-list__head { padding: 18px 22px; border-bottom: 1px solid #f0f3fa; }
.gc-list__head h4 { margin: 0; font-weight: 700; font-size: 17px; }

.gc-row { display: flex; align-items: center; gap: 14px; padding: 14px 22px; border-bottom: 1px solid #f7f9fd; }
.gc-row:last-child { border-bottom: none; }
.gc-row__icon { width: 36px; height: 36px; flex: none; border-radius: 11px; display: flex; align-items: center;
    justify-content: center; }
.gc-row__icon svg, .gc-row__icon i { width: 17px; height: 17px; }
.gc-row__icon--plus { background: #e6f4ea; color: #1e7d34; }
.gc-row__icon--minus { background: #f2f6ff; color: #575757; }
.gc-row__body { flex: 1; min-width: 0; }
.gc-row__kind { font-size: 15px; font-weight: 600; }
.gc-row__meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 2px; font-size: 12px;
    color: #9aa4b8; }
.gc-row__meta a { font-weight: 600; color: #45679d; text-decoration: none; font-variant-numeric: tabular-nums; }
.gc-row__meta a:hover { text-decoration: underline; }
.gc-row__sum { font-weight: 700; font-size: 15px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.gc-row__sum--plus { color: #1e7d34; }
.gc-row__sum--minus { color: #9aa4b8; }

.gc-empty { background: #fff; border: 1px dashed #d6dfee; border-radius: 20px; padding: 40px 32px; text-align: center;
    display: flex; flex-direction: column; align-items: center; gap: 12px; }
.gc-empty__icon { width: 52px; height: 52px; border-radius: 15px; background: #fdf3e2; color: #8a6d3b;
    display: flex; align-items: center; justify-content: center; }
.gc-empty h4 { margin: 0; font-weight: 700; font-size: 19px; }
.gc-empty p { margin: 0; max-width: 460px; font-size: 14px; color: #575757; line-height: 1.6; }

/* Реестр админа */
.gc-adm__search { display: block; max-width: 380px; margin-bottom: 16px; }
.gc-tab { background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; overflow: hidden;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.gc-tab__head, .gc-tab__row { display: grid; grid-template-columns: 1.3fr .9fr 1fr .8fr 1.4fr; gap: 12px;
    padding: 13px 22px; align-items: center; }
.gc-tab__head { background: #f7faff; border-bottom: 1px solid #e2e8f4; font-size: 11px; font-weight: 700;
    color: #9aa4b8; text-transform: uppercase; letter-spacing: .04em; }
.gc-tab__row { border-bottom: 1px solid #f7f9fd; font-size: 13px; }
.gc-tab__row:last-child { border-bottom: none; }
.gc-tab__num { text-align: right; font-variant-numeric: tabular-nums; }
.gc-tab__user { display: flex; align-items: center; gap: 9px; min-width: 0; }
.gc-tab__name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gc-tab__date { color: #9aa4b8; font-variant-numeric: tabular-nums; }
.gc-tab__kind { font-weight: 600; }
.gc-tab__note { min-width: 0; color: #575757; }
.gc-tab__note div { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gc-tab__note a { font-size: 12px; font-weight: 600; color: #45679d; text-decoration: none;
    font-variant-numeric: tabular-nums; }
.gc-tab__empty { padding: 40px; text-align: center; font-size: 14px; color: #9aa4b8; }
.gc-ava { width: 28px; height: 28px; flex: none; border-radius: 9px; background: #e3efff; color: #45679d;
    display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }

/* Модалка начисления */
.gc-field { display: block; margin-bottom: 14px; }
.gc-field > span { display: block; font-weight: 600; font-size: 13px; margin-bottom: 7px; }
.gc-field input, .gc-field select, .gc-field textarea { width: 100%; border: 1px solid #e2e8f4; border-radius: 12px;
    padding: 11px 13px; font: inherit; font-size: 14px; color: #313131; background: #fff; outline: none;
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.gc-field input:focus, .gc-field select:focus, .gc-field textarea:focus { border-color: #45679d; }
.gc-field textarea { resize: vertical; }
.gc-field em { display: block; margin-top: 6px; font-size: 13px; font-style: normal; color: #c62828; }
.gc-dir { display: flex; gap: 8px; margin-bottom: 14px; }
.gc-dir__btn { flex: 1; height: 42px; border: 1px solid #e2e8f4; border-radius: 12px; background: #fff;
    font: inherit; font-size: 14px; font-weight: 600; color: #575757; cursor: pointer; }
.gc-dir__btn.is-on { background: #45679d; border-color: #45679d; color: #fff; }

/* Состав материала на витрине: карточки модулей (макет 20.08.2026) */
.course-detail__chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 14px; }
.course-modules { display: flex; flex-direction: column; gap: 10px; margin-bottom: 8px; }
/* Подложка модуля из макета. Общий «--v2-surface-subtle» здесь не подходит: он
   бежевый, кабинетный, а карточка материала живёт в синей витрине. */
.course-module { display: flex; align-items: flex-end; gap: 12px; padding: 14px 16px;
    border-radius: 16px; background: #f2f5fb; }
.course-module__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.course-module__num { font-size: 12px; color: var(--v2-text2); }
.course-module__title { font-weight: 600; font-size: 15px; color: var(--v2-text); line-height: 1.3; }
/* Пилюля времени прижата к правому краю карточки и стоит на строке названия,
   как в макете, а не по центру карточки (правка приёмки 21.08.2026).
   За строку отвечает `align-items: flex-end` у карточки: пилюля ложится низом
   на низ названия. Сдвиг вниз на 2.25px — половина разницы высот (пилюля 24,
   строка названия 15 × 1.3 = 19.5): так совпадают их середины. Высоту карточки
   это не меняет — слева содержимое всегда выше, поэтому ряд, где время есть у
   двух модулей из двенадцати, не разъезжается. */
.course-module__time { margin-left: auto; margin-bottom: -2.25px; display: inline-flex;
    align-items: center; gap: 5px;
    padding: 5px 10px; border-radius: 999px; background: var(--v2-surface); color: #868fa6;
    font-size: 12px; white-space: nowrap; }
.course-module__time i, .course-module__time svg { width: 13px; height: 13px; }

/* Поле хронометража в редакторе — рядом с отметкой показа на витрине.
   Ширина задана через родителя намеренно: общее правило `.lms-sec-drip__input`
   (74px) объявлено ниже по файлу и при равной силе побеждало бы по порядку —
   поле выходило узким, как у срока открытия. Пятый случай силы селектора за
   неделю, поэтому причина записана здесь же. */
.lms-sec-time { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 13px;
    color: var(--v2-text); }
.lms-sec-time__label { color: var(--v2-text); }
.lms-sec-time .lms-sec-time__input { width: 110px; }

/* Хронометраж урока — то же поле в шапке урока, рядом с названием.
   Ширина задана через родителя по той же причине, что у модуля: общее правило
   `.lms-sec-drip__input` объявлено ниже по файлу и при равной силе побеждало бы
   по порядку. Заголовок поля не переносится, а на узком экране вся шапка урока
   и так укладывается в столбик — `flex-wrap` у неё уже есть. */
.lms-lesson-time { display: flex; align-items: center; gap: 8px; flex: none; font-size: 13px;
    color: var(--v2-text2); white-space: nowrap; }
.lms-lesson-time .lms-lesson-time__input { width: 110px; height: 42px; border-radius: 10px;
    border: 1px solid #e2e8f4; background: #fff; padding: 0 12px; font-size: 14px;
    color: var(--v2-text); white-space: normal; }
.lms-lesson-time .lms-lesson-time__input:focus { outline: none; border-color: var(--v2-focus); }

/* Отметка «показывать раздел на витрине» в редакторе разделов */
.lms-sec-guest { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 13px;
    color: var(--v2-text); cursor: pointer; }
.lms-sec-guest input { width: 16px; height: 16px; accent-color: #45679d; }
.lms-sec-guest__hint { color: var(--v2-text2); }

/* Комбо: состав вместо программы. Уроков здесь нет намеренно — доступ
   открывается к связанному курсу, и его состав живёт на его странице.

   Карточки те же, что на витрине (.pub-card), поэтому своих правил здесь
   минимум: сетка, вписанное фото товара и кнопка с внешней ссылкой. */
.combo-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));
    gap: 16px; margin-bottom: 8px; }
.combo-card { border: 1px solid var(--v2-border); }
/* Фото товара той же высоты, что обложка курса: карточки стоят рядом, и разная
   высота картинок читалась бы как сбой вёрстки (правка заказчика 20.08.2026).
   Само фото вписывается целиком, а не кадрируется: прибор снят вертикально, и
   обрезка под горизонтальную обложку отрезала бы у него верх и низ.

   Селектор двойной не для красоты: «.pub-card__cover» объявлен ниже по файлу и
   ставит «center/cover». При равной силе побеждает тот, кто ниже, и одиночный
   «.combo-card__photo» проигрывал ему — фото обрезалось. Третий случай за три
   дня, когда правило рядом с чужим надо проверять на силу, а не только
   писать. */
.pub-card__cover.combo-card__photo { aspect-ratio: 1200 / 630; padding: 14px;
    background-size: contain; background-repeat: no-repeat;
    background-position: center; background-color: #fff; }
.combo-card--product .pub-card__price { margin-top: auto; }
/* Кнопка товара живёт по правилам карточки витрины: белая в покое, синяя с
   белым текстом при наведении. Своего цвета ей не нужно — рядом стоит карточка
   курса, и две разные кнопки читались бы как два разных действия. */
.combo-card__btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; }
.combo-card__btn i, .combo-card__btn svg { width: 15px; height: 15px; }
.combo-card--plain { display: flex; flex-direction: column; gap: 8px; padding: 20px;
    border-radius: 20px; background: var(--v2-surface); }
.combo-card__icon { width: 44px; height: 44px; display: flex; align-items: center;
    justify-content: center; border-radius: 14px; background: #f2f6ff; color: #45679d; }
.combo-card__sub { font-size: 13px; color: var(--v2-text2); line-height: 1.5; }
.buy-card__phone { margin-bottom: 0; }

/* Прибор в списке заказов: три состояния и одно тревожное */
.ord-badge--device { background: #fdf3e2; color: #8a6d3b; }
.ord-badge--shipped { background: #e6f4ea; color: #1e7d34; }
.ord-badge--alarm { background: #fdecea; color: #b42318; }
.ord-card__cell--device { grid-column: span 2; }
.ord-card__sub--alarm { color: #b42318; font-weight: 600; }
/* Телефон покупателя в карточке заказа: номер — ссылка для звонка, подпись об
   источнике тусклее его и стоит отдельной строкой, чтобы не читаться как
   продолжение номера. */
.ord-card__tel { color: #45679d; text-decoration: none; }
.ord-card__tel:hover { text-decoration: underline; }
.ord-card__sub--hint { color: #b6bdcc; }
/* Почта и телефон — со значком перед строкой. Значок размером со строку и не
   сжимается: длинный адрес не должен его плющить. */
.ord-card__contact { display: inline-flex; align-items: center; gap: 6px; }
.ord-card__contact i, .ord-card__contact svg { width: 13px; height: 13px; flex: none; }
/* В ячейке покупателя четыре строки подряд — имя, почта, телефон и подпись
   об источнике. При общем отступе ячейки в 2px они слипались в сплошной блок,
   поэтому здесь свой шаг: он касается только этой ячейки, у остальных строка
   под значением одна и разводить там нечего. */
.ord-card__cell--buyer { gap: 6px; }
.ord-card__ship { margin-top: 10px; }

/* Блок промокода в оформлении (макет 548:6643 и 548:7149).

   Место под развёрнутый блок заранее НЕ резервируется. Сначала было наоборот —
   постановка требовала, чтобы раскрытие не двигало кнопку «Купить», — но в
   свёрнутом виде под ссылкой оставалась пустота, и заказчик 20.08.2026 решил
   в пользу макета: блок компактный, при раскрытии карточка растёт вниз.
   Если решение когда-нибудь пересмотрят, вернуть min-height по высоте
   развёрнутого состояния (104px) — но тогда пустота вернётся тоже. */
.promo-box { display: flex; flex-direction: column; gap: 10px; margin: 14px 0 4px; }
.promo-box__link { align-self: flex-start; padding: 0; border: none; background: none; cursor: pointer;
    font: 600 14px 'Raleway', sans-serif; color: #575757; text-decoration: underline;
    text-underline-offset: 3px; }
.promo-box__link:hover { color: #45679d; }
.promo-box__input { width: 100%; height: 48px; padding: 0 16px; border: 1px solid #e2e8f4;
    border-radius: 14px; background: #fff; font: 400 15px 'Raleway', sans-serif; color: #313131; outline: none; }
.promo-box__input::placeholder { color: #9aa4b8; }
.promo-box__input:focus { border-color: #45679d; box-shadow: 0 0 0 1px #45679d; }
.promo-box__apply { width: 100%; height: 46px; border: 1px solid #e2e8f4; border-radius: 14px;
    background: #fff; cursor: pointer; font: 600 15px 'Raleway', sans-serif; color: #313131; }
.promo-box__apply:hover { background: #f2f6ff; border-color: #c9dbf5; color: #45679d; }
.promo-box__applied { display: flex; align-items: center; gap: 10px; padding: 12px 12px 12px 16px;
    border: 1px solid #bfe3ca; border-radius: 14px; background: #f3faf5; }
.promo-box__code { font: 700 15px 'Raleway', sans-serif; color: #1e7d34; letter-spacing: .02em; }
.promo-box__off { margin-left: auto; font: 600 15px 'Raleway', sans-serif; color: #1e7d34;
    font-variant-numeric: lining-nums tabular-nums; }
.promo-box__remove { width: 28px; height: 28px; flex: none; border: none; border-radius: 9px;
    background: #fff; color: #575757; font-size: 20px; line-height: 1; cursor: pointer; }
.promo-box__remove:hover { background: #fdecea; color: #b42318; }
.promo-box__err { margin: 0; font-size: 13px; line-height: 1.45; color: #c62828; }
.buy-card__due--promo b { color: #1e7d34; }

/* В сводке гостевого заказа блок уже: колонка узкая, а поле во всю ширину
   растянуло бы карточку. */
.promo-box--order { max-width: 320px; }
.gco-order__was { margin: 0 0 2px; font-size: 14px; color: #9aa4b8;
    font-variant-numeric: lining-nums tabular-nums; }
.gco-order__off { color: #1e7d34; font-weight: 600; }

/* Промокоды: та же таблица реестра, свои колонки */
.gc-tab--promo .gc-tab__head, .gc-tab--promo .gc-tab__row {
    grid-template-columns: 1fr .55fr .75fr 1.4fr .75fr .6fr .6fr auto;
}
.pc-code { font-weight: 700; letter-spacing: .02em; }
.pc-sum { font-weight: 600; font-variant-numeric: lining-nums tabular-nums; }
.pc-limits { display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; }
/* Подпись переносится, а не выезжает на соседнюю колонку: «Один раз на
   человека» шире своей ячейки, и с nowrap плашка налезала на «Состояние». */
.pc-limit { padding: 3px 9px 4px; border-radius: 999px; background: #f2f6ff; color: #45679d;
    font-size: 12px; font-weight: 600; line-height: 1.35;
    font-variant-numeric: lining-nums tabular-nums; }
.pc-limit--none { background: #f7f9fd; color: #9aa4b8; font-weight: 500; }
.pc-state { font-weight: 600; }
.pc-state--on { color: #1e7d34; }
.pc-state--off { color: #9aa4b8; }
.pc-acts, .pc-acts-head { display: flex; gap: 4px; justify-content: flex-end; }
/* Ширина колонки действий задана кнопками: заголовок ставится по их правому
   краю, иначе подпись висела бы над пустотой. */
.pc-acts-head { min-width: 108px; }
.pc-act { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid #e2e8f4; border-radius: 10px; background: #fff; color: #575757; cursor: pointer; }
.pc-act:hover { background: #f2f6ff; color: #45679d; border-color: #c9dbf5; }
.pc-act i { width: 16px; height: 16px; }
.pc-act--danger:hover { background: #fdecea; color: #b42318; border-color: #f0c9c4; }
.pc-check { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; font-size: 14px; cursor: pointer; }
.pc-check input { width: 17px; height: 17px; accent-color: #45679d; }

/* Подсказка под полем: тем же тегом, что и ошибка, но не тревожным цветом */
/* Оба селектора нужны: подсказка внутри поля соседствует с правилом ошибки
   «.gc-field em», и одного «.gc-field__hint» ей не хватает по силе — подсказка
   покраснела бы. Снаружи поля работает второй селектор. */
.gc-field .gc-field__hint, .gc-field__hint { display: block; margin-top: 6px; color: #9aa4b8;
    font-size: 12px; font-style: normal; line-height: 1.5; }

@media (max-width: 900px) {
    .gc-tab--promo .gc-tab__row { grid-template-columns: 1fr auto; }
    .gc-tab--promo .pc-limits { grid-column: 1 / -1; }
}

/* Кэшбек в заказе */
.ord-card__value--off { color: #9aa4b8; text-decoration: line-through; }
.ord-card__value--muted { color: #9aa4b8; }
.pur-card__cash { margin-top: 6px; font-size: 13px; font-weight: 600; color: #1e7d34; }
.pur-card__cash--off { color: #9aa4b8; text-decoration: line-through; }

@media (max-width: 900px) {
    .gc-tab__head { display: none; }
    .gc-tab__row { grid-template-columns: 1fr auto; gap: 6px 12px; }
    .gc-tab__note { grid-column: 1 / -1; }
    .gc-tab__date, .gc-tab__kind { font-size: 12px; color: #9aa4b8; }
}

/* Проценты сделки в редакторе — сеткой сразу под ценой (макет 30.07) */
.lms-terms__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px;
    margin-top: 12px; }
.lms-terms__cell { margin-bottom: 0; }

/* ── Начисление GessCoin за действия (настройки портала, макет 30.07) ────────── */
.earn__icon { width: 42px; height: 42px; flex: none; border-radius: 12px; background: #fdf3e2;
    color: #8a6d3b; display: flex; align-items: center; justify-content: center; }
.earn__icon svg, .earn__icon i { width: 20px; height: 20px; }
.earn__body { flex: 1; min-width: 0; }
.earn__title { font-weight: 600; font-size: 15px; margin-bottom: 3px; }
.earn__lead { font-size: 13px; color: #9aa4b8; margin-bottom: 14px; }
.earn__list { display: flex; flex-direction: column; gap: 10px; }

.earn__row { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 14px 16px;
    border: 1px solid #e2e8f4; border-radius: 14px; background: #f7faff; }
.earn__text { flex: 1; min-width: 220px; }
.earn__name { font-weight: 600; font-size: 14px; margin-bottom: 3px; }
.earn__hint { font-size: 12px; color: #9aa4b8; line-height: 1.5; }
.earn__field { display: flex; align-items: center; gap: 8px; flex: none; }
.earn__field input { width: 96px; height: 44px; padding: 0 12px; border: 1px solid #e2e8f4;
    border-radius: 11px; background: #fff; font: 600 15px 'Raleway', sans-serif; color: #313131;
    text-align: right; outline: none;
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.earn__field input:focus { border-color: #45679d; }
.earn__field span { font-size: 13px; font-weight: 600; color: #575757; }
.earn__error { flex-basis: 100%; }


/* Настройки портала — та же ширина, что у остальных разделов */
.set-page { max-width: 1000px; }

/* ── Настройки платежей: строки с иконками, как в макете 30.07 ───────────────── */
.set-card__lead { margin: 0 0 20px; font-size: 14px; color: #575757; }
.set-card { display: flex; flex-direction: column; gap: 20px; padding: 24px; background: #fff;
    border: 1px solid #e2e8f4; border-radius: 20px; box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }

.set-row { display: flex; align-items: flex-start; gap: 14px; }
.set-row--split { padding-top: 20px; border-top: 1px solid #f0f3fa; }
.set-row__icon { width: 42px; height: 42px; flex: none; border-radius: 12px; display: flex;
    align-items: center; justify-content: center; }
.set-row__icon svg, .set-row__icon i { width: 20px; height: 20px; }
.set-row__icon--brand { background: #eaf1ff; color: #45679d; }
.set-row__icon--amber { background: #fdf3e2; color: #8a6d3b; }
.set-row__icon--green { background: #e6f4ea; color: #1e7d34; }
.set-row__field { display: block; flex: 1; min-width: 0; }
.set-row__label { display: block; font-weight: 600; font-size: 15px; margin-bottom: 3px; }
.set-row__hint { display: block; font-size: 13px; color: #9aa4b8; margin-bottom: 9px; }
.set-row__hint--wide { margin-bottom: 14px; }
.set-row__field > input, .set-sub input, .set-sub select { width: 100%; height: 50px; padding: 0 14px; border: 1px solid #e2e8f4;
    border-radius: 14px; background: #fff; font: 400 15px 'Raleway', sans-serif; color: #313131;
    outline: none; transition: border-color .15s;
    font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.set-row__field > input:focus, .set-sub input:focus, .set-sub select:focus { border-color: #45679d; }
/* Подполя внутри блока настроек: у каждого поля свой заголовок */
.set-sub { display: block; margin-top: 12px; }
.set-sub__label { display: block; margin-bottom: 4px; font-size: 13px; font-weight: 600; color: #313131; }
.set-sub select { appearance: none; -webkit-appearance: none; padding-right: 40px; cursor: pointer;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%239aa4b8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right 15px center; background-size: 12px 8px; }
.set-sub select:hover { border-color: #cfd9ec; }
.set-sub__status { display: block; margin-top: 8px; font-size: 13px; color: #575757; }


/* Не flex: во флекс-контейнере текст вокруг <b> становится отдельными элементами,
   и gap разрывает фразу пробелами перед словом и перед точкой. */
.set-note { padding: 13px 14px; background: #f7faff; border: 1px solid #e2e8f4; border-radius: 12px;
    font-size: 13px; line-height: 1.5; color: #575757; }
.set-note b { color: #313131; }

/* Кнопки сохранения на странице настроек: цвет действия кабинета вместо
   прежней своей синевы, и отступ от карточки раздела — кнопка стоит под ней и
   прижималась вплотную. */
.set-save { align-self: flex-start; height: 50px; padding: 0 24px; border: none; border-radius: 14px;
    background: var(--v2-action); color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer;
    transition: background .15s; }
.set-save:hover { background: var(--v2-action-hover); }
.set-page .set-save, .set-page .lms-act--primary { margin-top: 14px; }

/* ── Консультации: услуги эксперта и календарь слотов (макет 30.07) ──────────── */
.svc { max-width: 1000px; }
.svc-back { display: inline-flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 14px;
    font-weight: 600; color: #45679d; text-decoration: none; }
.svc-back:hover { text-decoration: underline; }

.svc-card { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; margin-bottom: 12px;
    padding: 18px 20px; background: #fff; border: 1px solid #e2e8f4; border-radius: 18px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.svc-card__body { flex: 1; min-width: 240px; }
.svc-card__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 5px; }
.svc-card__title { font-weight: 700; font-size: 17px; }
.svc-card__desc { margin: 0 0 8px; font-size: 13px; color: #575757; line-height: 1.6; }
.svc-card__meta { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; font-size: 13px; color: #9aa4b8; }
.svc-card__meta b { color: #313131; }
.svc-card__price { font-weight: 700; font-size: 16px; color: #313131;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }

.svc-badge { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px;
    font-size: 12px; font-weight: 600; }
.svc-badge--on, .svc-badge--free { background: #e6f4ea; color: #1e7d34; }
.svc-badge--off { background: #f2f6ff; color: #575757; }
.svc-badge--busy { background: #fdf3e2; color: #8a6d3b; }

.svc-empty { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 44px 32px;
    text-align: center; background: #fff; border: 1px dashed #d6dfee; border-radius: 20px; }
.svc-empty__icon { width: 54px; height: 54px; border-radius: 15px; background: #e3efff; color: #45679d;
    display: flex; align-items: center; justify-content: center; }
.svc-empty h4 { margin: 0; font-weight: 700; font-size: 19px; }
.svc-empty p { margin: 0; max-width: 440px; font-size: 14px; color: #575757; line-height: 1.6; }

.svc-form, .svc-slots { padding: 24px; background: #fff; border: 1px solid #e2e8f4; border-radius: 20px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); margin-bottom: 16px; }
.svc-form__title { margin: 0 0 16px; font-weight: 700; font-size: 20px; }
.svc-form__area { min-height: 90px; resize: vertical; }
.svc-form__price { max-width: 260px; }
.svc-form__save { margin-top: 4px; }

.svc-dur { display: flex; gap: 8px; flex-wrap: wrap; }
.svc-dur__btn { height: 42px; padding: 0 16px; border: 1px solid #e2e8f4; border-radius: 12px; background: #fff;
    font: 600 14px 'Raleway', sans-serif; color: #575757; cursor: pointer; transition: all .15s;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.svc-dur__btn.is-on { background: #45679d; border-color: #45679d; color: #fff; }

.svc-terms { padding-top: 16px; border-top: 1px solid #f0f3fa; }
.svc-terms__title { font-weight: 600; font-size: 14px; margin-bottom: 3px; }
.svc-terms__lead { font-size: 12px; color: #9aa4b8; margin-bottom: 10px; }

.svc-slots__title { margin: 0 0 4px; font-weight: 700; font-size: 18px; }
.svc-slots__lead { margin: 0 0 16px; font-size: 13px; color: #575757; }
.svc-slots__add { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; padding: 14px;
    margin-bottom: 16px; background: #f7faff; border: 1px solid #e2e8f4; border-radius: 14px; }
.svc-slots__add .lms-field { flex: 1; min-width: 150px; margin-bottom: 0; }
/* Кнопка ровно в высоту полей: иначе при выравнивании по нижнему краю она «проваливается». */
.svc-slots__add .lms-act { height: 50px; border-radius: 14px; }
.svc-slots__empty { padding: 28px; text-align: center; font-size: 14px; color: #9aa4b8;
    border: 1px dashed #d6dfee; border-radius: 14px; }
.svc-slots__list { display: flex; flex-direction: column; gap: 8px; }
/* Инфо-блок: заметная подсказка о следующем шаге */
.svc-info { display: flex; align-items: center; gap: 12px; padding: 18px 20px; background: #eaf1ff;
    border: 1px solid #45679d; border-radius: 16px; color: #45679d; font-size: 15px; font-weight: 600;
    line-height: 1.5; }
.svc-info__icon { display: flex; flex: none; }
.svc-info__icon svg, .svc-info__icon i { width: 20px; height: 20px; }

.svc-slot { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 12px 14px;
    border: 1px solid #e2e8f4; border-radius: 12px; }
.svc-slot__icon { display: flex; flex: none; color: #45679d; }
.svc-slot__icon svg, .svc-slot__icon i { width: 18px; height: 18px; }
.svc-slot__date { font-weight: 600; font-size: 14px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.svc-slot__time { font-size: 14px; color: #575757;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.svc-slot__del { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; height: 38px;
    padding: 0 14px; border: 1px solid #e2e8f4; border-radius: 10px; background: #fff; color: #b42318;
    font: 600 13px 'Raleway', sans-serif; cursor: pointer; }
.svc-slot__del:hover { background: #fff5f4; border-color: #f0c9c4; }
.svc-slot__del svg, .svc-slot__del i { width: 15px; height: 15px; }
.svc-slot__note { margin-left: auto; font-size: 12px; color: #9aa4b8; }

@media (max-width: 700px) {
    .svc-slot__del, .svc-slot__note { margin-left: 0; }
}

/* ── Консультации: входящие заявки у эксперта (макет 30.07) ──────────────────── */
/* Экран входящих — таблица, ей нужна ширина: 90 % рабочей зоны, но не уже 1000 px,
   иначе на среднем мониторе колонки начнут жаться сильнее, чем было. */
.inb { max-width: max(1000px, 90%); }
.inb-card { padding: 20px; margin-bottom: 14px; background: #fff; border: 1px solid #e2e8f4;
    border-radius: 18px; box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.inb-card__head { display: flex; align-items: flex-start; gap: 14px; flex-wrap: wrap; margin-bottom: 14px; }
.inb-ava { width: 42px; height: 42px; flex: none; border-radius: 50%; color: #fff; font-size: 14px;
    font-weight: 700; display: flex; align-items: center; justify-content: center;
    background: linear-gradient(137deg, #3f6399, #6b93c7); }
.inb-card__who { flex: 1; min-width: 200px; }
.inb-card__name { font-weight: 700; font-size: 17px; }
.inb-card__svc { font-size: 13px; color: #575757; margin-top: 2px; }
.inb-card__right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.inb-card__price { font-weight: 700; font-size: 16px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.inb-card__q { padding: 14px; margin-bottom: 14px; background: #f7faff; border: 1px solid #e2e8f4;
    border-radius: 14px; font-size: 14px; color: #313131; line-height: 1.6; }

.inb-status { display: inline-flex; align-items: center; padding: 4px 11px; border-radius: 999px;
    font-size: 12px; font-weight: 600; }
.inb-status--new { background: #fdf3e2; color: #8a6d3b; }
.inb-status--confirmed { background: #e3efff; color: #45679d; }
.inb-status--paid { background: #e6f4ea; color: #1e7d34; }
.inb-status--declined { background: #fce8e6; color: #8a2b22; }
.inb-status--canceled, .inb-status--refunded { background: #f2f6ff; color: #575757; }

.inb-slots { margin-bottom: 14px; }
.inb-slots__title { font-size: 13px; font-weight: 600; margin-bottom: 8px; }
.inb-slots__list { display: flex; gap: 8px; flex-wrap: wrap; }
.inb-slots__hint { font-size: 12px; color: #9aa4b8; margin-top: 8px; }
.inb-slot { padding: 9px 14px; border: 1px solid #e2e8f4; border-radius: 999px; background: #fff;
    font: 600 13px 'Raleway', sans-serif; color: #575757; cursor: pointer; transition: all .15s;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.inb-slot:hover { border-color: #45679d; color: #45679d; }
.inb-slot.is-on { background: #45679d; border-color: #45679d; color: #fff; }
.inb-slot.is-busy { background: #f2f6ff; color: #9aa4b8; cursor: not-allowed; }
.inb-slot.is-busy:hover { border-color: #e2e8f4; color: #9aa4b8; }

/* ---------- Входящие заявки: заголовки секций и таблица (макет 01.08) ---------- */
.inb-sec { display: flex; align-items: center; gap: 10px; margin: 0 0 12px; }
.inb-sec h4 { margin: 0; font-size: 15px; font-weight: 700; letter-spacing: .05em;
    text-transform: uppercase; color: #9aa4b8; }
.inb-sec--new { margin-top: 4px; }
.inb-sec--new h4 { color: #8a6d3b; }
.inb-sec__count { display: inline-flex; align-items: center; height: 22px; padding: 0 9px;
    border-radius: 999px; background: #fdf3e2; color: #8a6d3b; font-size: 12px; font-weight: 700;
    font-variant-numeric: lining-nums tabular-nums; }
.inb-card + .inb-sec { margin-top: 28px; }

.inb-table-wrap { background: #fff; border: 1px solid #e2e8f4; border-radius: 20px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); overflow-x: auto; }
.inb-table { min-width: 920px; }
.inb-table__head, .inb-row { display: grid; gap: 14px;
    grid-template-columns: 190px 90px minmax(150px, 1fr) minmax(180px, 1.4fr) 150px 200px; }
.inb-table__head { padding: 13px 20px; background: #f7faff; border-bottom: 1px solid #e2e8f4;
    font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
    color: #9aa4b8; white-space: nowrap; }
.inb-cell--num { text-align: right; }
.inb-row { align-items: center; min-height: 62px; padding: 11px 20px;
    border-bottom: 1px solid #f0f3fa; transition: background .12s; }
.inb-row:last-child { border-bottom: none; }
.inb-row:hover { background: #f7faff; }
.inb-row__win { font-size: 13px; font-weight: 600; white-space: nowrap; color: #313131;
    font-variant-numeric: lining-nums tabular-nums; }
.inb-row__win--none { color: #c2cadb; }
.inb-row__price { font-size: 13px; font-weight: 700; text-align: right; white-space: nowrap;
    font-variant-numeric: lining-nums tabular-nums; }
.inb-row__student { display: flex; align-items: center; gap: 9px; min-width: 0; }
.inb-row__student b { font-size: 13px; font-weight: 600; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; }
.inb-ava--sm { width: 28px; height: 28px; font-size: 11px; }
.inb-row__q { font-size: 13px; color: #575757; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.inb-row__act { display: flex; justify-content: flex-end; }
/* Кнопки действия одинаковой ширины: разнобой в колонке читается как небрежность */
.inb-row__act .inb-btn { width: 100%; white-space: nowrap; }
.inb-btn--sm { height: 38px; padding: 0 16px; border-radius: 11px; font-size: 13px; }
.inb-btn--sm svg, .inb-btn--sm i { width: 15px; height: 15px; }

/* На узком экране таблица разваливается на карточки: горизонтальная прокрутка
   в списке, который читают каждый день, — плохая замена. */
@media (max-width: 900px) {
    .inb-table-wrap { background: none; border: none; box-shadow: none; overflow: visible; }
    .inb-table { min-width: 0; display: flex; flex-direction: column; gap: 12px; }
    .inb-table__head { display: none; }
    .inb-row { grid-template-columns: 1fr auto; gap: 8px 10px; min-height: 0; padding: 15px;
        background: #fff; border: 1px solid #e2e8f4; border-radius: 16px;
        box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
    .inb-row:hover { background: #fff; }
    .inb-row__win { order: 1; }
    .inb-row__status { order: 2; justify-self: end; }
    .inb-row__student { order: 3; }
    .inb-row__price { order: 4; }
    .inb-row__q { order: 5; grid-column: 1 / -1; white-space: normal; line-height: 1.5; }
    .inb-row__act { order: 6; grid-column: 1 / -1; justify-content: flex-start; }
    .inb-row__act .inb-btn { width: auto; }
    .inb-row__act:empty { display: none; }
}

.inb-actions { display: flex; gap: 10px; flex-wrap: wrap; }
/* Подвал карточки: окно слева, кнопка справа; на узком экране переносится */
.inb-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.inb-foot > .inb-btn, .inb-foot__acts { margin-left: auto; }
.inb-foot__acts { display: flex; gap: 10px; flex-wrap: wrap; }
.inb-foot .inb-window { margin-bottom: 0; }
/* Класс используют и <button>, и <a> — у ссылки текст без flex прижимается к верху. */
.inb-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 46px; padding: 0 20px;
    border: 1px solid transparent; border-radius: 12px; font: 600 14px 'Raleway', sans-serif;
    text-decoration: none; cursor: pointer; transition: all .15s; }
.inb-btn svg, .inb-btn i { width: 17px; height: 17px; }
.inb-btn--primary { background: #45679d; color: #fff; }
.inb-btn--primary:hover { background: #3a5788; color: #fff; }
.inb-btn--danger { background: #b42318; color: #fff; }
.inb-btn--danger:hover { background: #98190f; color: #fff; }
.inb-btn--outline-danger { background: #fff; border-color: #f0c9c4; color: #b42318; }
.inb-btn--outline-danger:hover { background: #fff5f4; color: #b42318; }
.inb-btn--ghost { background: #fff; border-color: #e2e8f4; color: #575757; }
.inb-btn--ghost:hover { background: #f2f6ff; color: #575757; }

.inb-decline { margin-bottom: 12px; }
.inb-decline textarea { width: 100%; min-height: 84px; padding: 12px 14px; border: 1px solid #e2e8f4;
    border-radius: 12px; background: #fff; font: 400 14px 'Raleway', sans-serif; color: #313131;
    resize: vertical; outline: none; margin-bottom: 10px; }
.inb-decline textarea:focus { border-color: #45679d; }

.inb-window { display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border-radius: 12px;
    background: #e3efff; color: #45679d; font-size: 14px; font-weight: 600;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.inb-window svg, .inb-window i { width: 17px; height: 17px; }
/* Консультация уже прошла — сообщение спокойное, а не активное синее */
.inb-window--done { background: #f2f6ff; color: #575757; }
.inb-window--done svg, .inb-window--done i { color: #9aa4b8; }
.inb-reason { margin-top: 12px; padding: 13px 15px; background: #fce8e6; border: 1px solid #f0c9c4;
    border-radius: 14px; font-size: 13px; color: #8a2b22; line-height: 1.6; }

/* ── Консультации: каталог экспертов и страница эксперта (макет 30.07) ───────── */
.exp, .exp-page { max-width: 1000px; }
.exp__search { display: block; max-width: 380px; margin-bottom: 16px; }

.exp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 16px; }
.exp-card { position: relative; display: flex; flex-direction: column; gap: 14px; padding: 20px; background: #fff;
    border: 1px solid #e2e8f4; border-radius: 18px; box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.exp-card__name { font-weight: 700; font-size: 18px; letter-spacing: -.01em; }
.exp-card__spec { margin-top: 3px; font-size: 13px; color: #9aa4b8; font-style: italic; }
/* Описание — ровно три строки с многоточием: карточки в ряду остаются одной высоты. */
.exp-card__bio { margin: 0; font-size: 14px; color: #575757; line-height: 1.55; overflow: hidden;
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
.exp-card__cta { margin-top: auto; display: inline-flex; align-items: center; justify-content: center; height: 46px;
    border: 1px solid #45679d; border-radius: 12px; background: #fff; color: #45679d; font-weight: 600;
    font-size: 14px; text-decoration: none; transition: background .15s; }
.exp-card__cta:hover { background: #f2f6ff; }

/* Фото или круг с инициалом: 72px в карточке, 84px в профиле (макет 30.07) */
.exp-ava { width: 72px; height: 72px; flex: none; border-radius: 50%; display: flex; align-items: center;
    justify-content: center; color: #fff; font-weight: 700; font-size: 26px;
    background: linear-gradient(137deg, #3f6399, #6b93c7); }
.exp-ava--lg { width: 84px; height: 84px; font-size: 30px; }

/* Метка «эксперт» в правом верхнем углу карточки и профиля */
.exp-tag { position: absolute; top: 14px; right: 14px; display: inline-flex; align-items: center; padding: 5px 11px;
    border-radius: 999px; background: #28374f; color: #fff; font-size: 11px; font-weight: 700; letter-spacing: .04em; }

.exp-profile { position: relative; padding: 26px; background: #fff; border: 1px solid #e2e8f4; border-radius: 20px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.exp-profile__head { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-bottom: 18px; }
.exp-profile__name { margin: 0 0 4px; font-weight: 700; font-size: 26px; letter-spacing: -.01em; }
/* Уведомления о новых сообщениях — правый нижний угол, поверх всего */
.chat-toasts { position: fixed; right: 20px; bottom: 20px; z-index: 60;
    display: flex; flex-direction: column; gap: 10px; max-width: 340px; }
.chat-toast { position: relative; display: flex; background: #fff; border: 1px solid #e2e8f4;
    border-left: 3px solid #45679d; border-radius: 14px;
    box-shadow: 0 18px 40px -14px rgba(20, 32, 54, .35); }
.chat-toast__body { display: flex; flex-direction: column; gap: 4px; padding: 14px 34px 14px 15px;
    text-decoration: none; }
.chat-toast__head { display: flex; align-items: center; gap: 8px; font-size: 14px; color: #313131; }
.chat-toast__head svg, .chat-toast__head i { width: 16px; height: 16px; flex: none; color: #45679d; }
.chat-toast__svc { font-size: 12px; color: #9aa4b8; }
.chat-toast__go { font-size: 13px; font-weight: 600; color: #45679d; }
.chat-toast__x { position: absolute; top: 8px; right: 10px; border: none; background: none;
    color: #9aa4b8; font-size: 18px; line-height: 1; cursor: pointer; }
.chat-toast__x:hover { color: #575757; }

@media (max-width: 600px) {
    .chat-toasts { left: 12px; right: 12px; bottom: 12px; max-width: none; }
}

/* Пилюля «Идёт консультация» — зелёная, тот же тон, что у кнопки «Открыть чат» */
.live-pill { display: flex; flex: none; align-items: center; gap: 8px; white-space: nowrap;
    height: 34px; padding: 0 14px 0 10px; border: 1px solid rgba(30, 125, 52, .25); border-radius: 999px;
    background: #e6f4ea; color: #1e7d34; font-size: 14px; font-weight: 600; transition: all .15s; }
.live-pill:hover { color: #1e7d34; filter: brightness(.97); box-shadow: 0 4px 14px -4px rgba(30, 125, 52, .45); }
/* Тень при наведении — в цвет самой пилюли, иначе зелёный ореол у красной кнопки */
.live-pill--soon:hover { box-shadow: 0 4px 14px -4px rgba(180, 130, 40, .45); }
.live-pill svg, .live-pill i { width: 17px; height: 17px; }
/* Последние 10 минут окна — тёплая рамка, текст остаётся зелёным */
.live-pill--soon { border-color: #e5cb96; background: #fdf3e2; }
/* Окно закончилось, но переписка ещё живёт — те же тона, что у плашки в чате */
.live-pill--over { border-color: #f0c9c4; background: #fdecea; color: #b42318; }
.live-pill--over:hover { color: #b42318; box-shadow: 0 4px 14px -4px rgba(180, 35, 24, .45); }
.live-pill--over .live-pill__dot { background: #b42318; box-shadow: 0 0 0 3px rgba(180, 35, 24, .18); }
.live-pill__dot { display: none; width: 8px; height: 8px; flex: none; border-radius: 50%;
    background: #1e7d34; box-shadow: 0 0 0 3px rgba(30, 125, 52, .18); }

@media (max-width: 900px) {
    /* В тесноте оставляем иконку с точкой: подпись съела бы всю шапку */
    .live-pill { padding: 0 10px; }
    .live-pill__text { display: none; }
    .live-pill__dot { display: block; }
}


.exp-profile__spec { font-size: 15px; color: #9aa4b8; font-style: italic; }
.exp-profile__edit { display: inline-flex; align-items: center; gap: 6px; margin-top: 8px;
    font-size: 13px; font-weight: 600; color: #45679d; }
.exp-profile__edit:hover { text-decoration: underline; }
.exp-profile__edit svg, .exp-profile__edit i { width: 14px; height: 14px; }
.exp-profile__sub { margin: 22px 0 12px; font-weight: 700; font-size: 17px; }
.exp-profile__lead { margin: 0 0 12px; font-size: 13px; color: #575757; }

.exp-products { display: flex; flex-direction: column; gap: 10px; }
.exp-product { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px solid #e2e8f4;
    border-radius: 12px; text-decoration: none; color: inherit; transition: border-color .15s; }
.exp-product:hover { border-color: #45679d; }
.exp-product__kind { padding: 4px 10px; border-radius: 999px; background: #e3efff; color: #45679d;
    font-size: 12px; font-weight: 600; }
.exp-product__title { flex: 1; font-weight: 500; font-size: 14px; }
.exp-product__price { font-weight: 700; font-size: 14px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }

.exp-svc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.exp-svc { display: flex; flex-direction: column; gap: 9px; padding: 16px; background: #f7faff;
    border: 1px solid #e2e8f4; border-radius: 16px; }
.exp-svc__title { font-weight: 700; font-size: 15px; }
.exp-svc__desc { flex: 1; font-size: 13px; color: #575757; line-height: 1.6; }
.exp-svc__row { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.exp-svc__dur { padding: 4px 10px; border-radius: 999px; background: #e3efff; color: #45679d;
    font-size: 12px; font-weight: 600; }
.exp-svc__price { font-weight: 700; font-size: 17px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.exp-svc__slots, .exp-svc__note { font-size: 12px; color: #9aa4b8; }
.exp-svc__cta { justify-content: center; }
.exp-svc__empty { padding: 24px; text-align: center; font-size: 14px; color: #9aa4b8;
    border: 1px dashed #d6dfee; border-radius: 14px; }

.exp-modal__svc { font-size: 13px; color: #575757; margin-top: 3px; }
.exp-modal__area { min-height: 96px; resize: vertical; }
.exp-modal__slots { display: flex; flex-direction: column; gap: 8px; }
.exp-slot { display: flex; align-items: center; gap: 10px; padding: 11px 13px; border: 1px solid #e2e8f4;
    border-radius: 12px; cursor: pointer; font-size: 14px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.exp-slot:hover { border-color: #45679d; }
.exp-slot input { width: 18px; height: 18px; accent-color: #45679d; }

.exp-sent { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 26px;
    text-align: center; }
.exp-sent__icon { width: 54px; height: 54px; border-radius: 16px; background: #e6f4ea; color: #1e7d34;
    display: flex; align-items: center; justify-content: center; }
.exp-sent__icon svg, .exp-sent__icon i { width: 26px; height: 26px; }
.exp-sent h4 { margin: 0; font-weight: 700; font-size: 20px; }
.exp-sent p { margin: 0; font-size: 14px; color: #575757; line-height: 1.6; }

/* ── «Мои консультации» у ученика (макет 30.07) ─────────────────────────────── */
.mcs { max-width: 1000px; }
.mcs-card { padding: 20px; margin-bottom: 14px; background: #fff; border: 1px solid #e2e8f4;
    border-radius: 18px; box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); }
.mcs-card__head { display: flex; align-items: flex-start; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; }
.mcs-card__who { flex: 1; min-width: 200px; }
.mcs-card__title { font-weight: 700; font-size: 17px; }
.mcs-card__expert { font-size: 13px; color: #575757; margin-top: 2px; }
.mcs-card__right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.mcs-card__price { font-weight: 700; font-size: 16px;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.mcs-card__q { padding: 13px 14px; margin-bottom: 12px; background: #f7faff; border: 1px solid #e2e8f4;
    border-radius: 14px; font-size: 14px; color: #313131; line-height: 1.6; }
.mcs-note { margin-bottom: 12px; font-size: 13px; color: #575757; line-height: 1.6; }
.mcs-note b { color: #313131; }
.mcs-note--pay { padding: 12px 14px; background: #e3efff; border-radius: 12px; color: #45679d; font-weight: 500; }
.mcs-card .inb-window { margin-bottom: 0; }
.inb-btn--go { background: #1e7d34; color: #fff; }
/* Глобальное a:hover перекрашивает текст у кнопок-ссылок — держим свой цвет */
.inb-btn--go:hover { background: #17632a; color: #fff; }

/* Подпись-пояснение под полем — 12px серым, как в макете */
.lms-field__hint { display: block; margin-top: 5px; font-size: 12px; color: #9aa4b8; line-height: 1.5; }

/* Форма услуги: воздух над заголовками полей и равные отступы у чекбокса */
.svc-form .lms-field { margin-top: 10px; margin-bottom: 0; }
.svc-form .lms-free { margin: 16px 0; }
.svc-form .svc-custom { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px;
    margin-top: 10px; }
.svc-form .svc-custom .lms-field { margin-top: 0; }

/* .lms-field — это <label>: у строчных элементов вертикальные отступы и max-width
   не работают. Делаем блочным — иначе margin-top в формах молча игнорируется. */
.lms-field { display: block; }

/* Подпись у «Сохранить»: поля тронуты, но не записаны (слоты сохраняются отдельно) */
.svc-form__foot { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 4px; }
.svc-dirty { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 999px;
    background: #fdf3e2; color: #8a6d3b; font-size: 13px; font-weight: 600; }
.svc-dirty svg, .svc-dirty i { width: 16px; height: 16px; }


/* Фото эксперта в каталоге и в профиле */
.exp-photo { width: 72px; height: 72px; flex: none; border-radius: 50%; object-fit: cover;
    border: 1px solid #e2e8f4; }
.exp-photo--lg { width: 84px; height: 84px; }
.exp-card__bio { margin: 0; font-size: 13px; color: #575757; line-height: 1.55; }
.exp-profile__bio { margin: 0 0 22px; max-width: 720px; font-size: 15px; color: #313131;
    line-height: 1.65; }


/* ── Пилюля новых заявок на консультации в шапке (макет 30.07) ──────────────── */
/* Высота и поведение — как у зелёной пилюли: в тесноте обе не сжимаются
   и не переносят подпись (правка дизайнера 01.08) */
.req-pill { display: flex; flex: none; align-items: center; gap: 8px; white-space: nowrap;
    height: 34px; padding: 0 12px 0 10px; border-radius: 999px;
    background: #fdf3e2; border: 1px solid #f0dcb4; color: #8a6d3b; font-weight: 600; font-size: 14px;
    text-decoration: none; transition: all .15s; }
.req-pill:hover { background: #f7e9cd; border-color: #e3c98f; }

/* Возвраты — деньги: отличаем от заявок на консультации цветом, чтобы две
   пилюли рядом не сливались в одну «что-то новое». */
.req-pill--money { background: #fdeaea; border-color: #f2c6c6; color: #8a3b3b; }
.req-pill--money:hover { background: #fbdcdc; border-color: #e9b0b0; color: #8a3b3b; }
.req-pill--money .req-pill__count { background: #c94f4f; }
.req-pill i, .req-pill svg { width: 18px; height: 18px; flex: none; }
.req-pill__count { display: inline-flex; align-items: center; justify-content: center; min-width: 20px;
    height: 20px; padding: 0 6px; border-radius: 999px; background: #8a6d3b; color: #fff; font-size: 11px;
    font-weight: 700; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }

/* На узких экранах остаётся иконка с числом */
@media (max-width: 700px) {
    .req-pill__text { display: none; }
}

/* Имя автора-эксперта ссылкой на его карточку */
.author-link { color: #45679d; font-weight: 600; text-decoration: none; }
.author-link:hover { text-decoration: underline; }

/* ── Карточка оплаты консультации ───────────────────────────────────────────── */
.pay-card { padding: 16px 18px; margin-bottom: 12px; background: #f7faff; border: 1px solid #e2e8f4;
    border-radius: 16px; }
.pay-card__row { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    font-size: 14px; color: #575757; padding: 6px 0; }
.pay-card__row b { font-size: 17px; color: #313131; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.pay-card__row--total { padding-top: 12px; margin-top: 6px; border-top: 1px solid #e2e8f4; color: #313131;
    font-weight: 600; }
.pay-card__row--total b { font-size: 20px; }
.pay-card__toggle { display: flex; align-items: center; gap: 11px; width: 100%; padding: 10px 0; background: none;
    border: none; text-align: left; font: 600 14px 'Raleway', sans-serif; color: #313131; cursor: pointer; }
.pay-card__toggle em { font-style: normal; font-weight: 500; color: #9aa4b8; }
.pay-card__coins { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 10px 0; font-size: 14px; color: #575757; }
.pay-card__coins input { width: 120px; height: 44px; padding: 0 12px; border: 1px solid #e2e8f4;
    border-radius: 12px; background: #fff; font: 600 15px 'Raleway', sans-serif; color: #313131;
    text-align: right; outline: none; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.pay-card__hint { padding: 6px 0; font-size: 13px; color: #9aa4b8; }

/* Заявка с прошедшим окном: спокойное серое предупреждение, а не ошибка */
.mcs-note--expired { padding: 12px 14px; background: #f2f6ff; border-radius: 12px; color: #575757; }
.inb-status--expired { background: #f2f6ff; color: #575757; }

/* ── Чат консультации (макет 31.07) ─────────────────────────────────────────── */
.cht { display: flex; flex-direction: column; flex: 1; min-height: 0; max-width: 1000px; }
/* Ссылка «назад» стоит на одинаковом расстоянии от верха страницы и от блока чата */
.cht .svc-back { margin-bottom: 10px; }
.cht-shell { display: flex; flex-direction: column; flex: 1; min-height: 0;
    background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; overflow: hidden;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); transition: border-color .2s, box-shadow .2s; }
/* Подсветка рамки растёт вместе с приближением конца окна */
.cht-shell--warning { border-color: #f0dcb4; box-shadow: 0 0 0 3px #fdf3e2; }
.cht-shell--ending { border-color: #e3c98f; box-shadow: 0 0 0 4px #fbead0; }
.cht-shell--overtime { border-color: #f0c9c4; box-shadow: 0 0 0 4px #fdecea; }
.cht-shell--closed { border-color: #d6dfee; }

.cht-head { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 16px 20px;
    border-bottom: 1px solid #e2e8f4; }
.cht-ava { width: 44px; height: 44px; font-size: 15px; }
.cht-head__who { flex: 1; min-width: 180px; }
.cht-head__name { margin: 0; font-size: 17px; font-weight: 700; }
.cht-head__name em { font-size: 12px; font-weight: 500; color: #9aa4b8; font-style: italic; }
.cht-head__svc { font-size: 13px; color: #575757; margin-top: 2px; }
.cht-head__meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
.cht-window { padding: 4px 11px; border-radius: 999px; background: #e3efff; color: #45679d; font-size: 12px;
    font-weight: 600; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.cht-timer { display: inline-flex; align-items: center; gap: 6px; padding: 4px 11px; border-radius: 999px;
    background: #f2f6ff; color: #575757; font-size: 12px; font-weight: 600; }
.cht-timer svg, .cht-timer i { width: 14px; height: 14px; }
.cht-timer--warning { background: #fdf3e2; color: #8a6d3b; }
.cht-timer--ending { background: #fbead0; color: #8a6d3b; }
.cht-timer--overtime { background: #fdecea; color: #b42318; }
.cht-finish { flex: none; height: 44px; padding: 0 18px; border: 1px solid #f0c9c4; border-radius: 12px;
    background: #fff; color: #b42318; font: 600 14px 'Raleway', sans-serif; cursor: pointer; }
.cht-finish:hover { background: #fdecea; }

.cht-feed { display: flex; flex-direction: column; flex: 1; gap: 14px; padding: 22px 20px;
    min-height: 120px; overflow-y: auto; }
.cht-head__link { color: inherit; }
.cht-head__link:hover { color: #45679d; text-decoration: underline; }
.cht-row { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.cht-row--own { align-items: flex-end; }
.cht-row { scroll-margin: 20px; }
/* Подсветка исходного сообщения после перехода по цитате */
.cht-row--flash .cht-bubble, .cht-row--flash .cht-deleted { box-shadow: 0 0 0 3px rgba(229, 184, 105, .55); }

.cht-line { display: flex; align-items: flex-start; gap: 8px; max-width: min(82%, 600px); }
.cht-row--own .cht-line { flex-direction: row-reverse; }

/* Панель действий: появляется по наведению и по фокусу с клавиатуры */
.cht-acts { display: flex; align-items: center; gap: 2px; flex: none; margin-top: 4px; padding: 3px;
    background: #fff; border: 1px solid #e2e8f4; border-radius: 11px;
    box-shadow: 0 6px 18px -6px rgba(20, 32, 54, .28);
    opacity: 0; visibility: hidden; transition: opacity .15s; }
.cht-row:hover .cht-acts, .cht-acts:focus-within { opacity: 1; visibility: visible; }
.cht-act { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px;
    border: none; border-radius: 8px; background: none; color: #575757; cursor: pointer; transition: background .15s; }
.cht-act:hover { background: #f2f6ff; }
.cht-act svg, .cht-act i { width: 16px; height: 16px; }
.cht-act--danger { color: #b42318; }
.cht-act--danger:hover { background: #fdecea; }

/* Удалённое сообщение: место в ленте остаётся */
.cht-deleted { display: inline-flex; align-items: center; gap: 8px; padding: 10px 15px; border-radius: 16px;
    background: #f2f6ff; border: 1px dashed #d6dfee; color: #9aa4b8; font-size: 13px; font-style: italic; }
.cht-deleted svg, .cht-deleted i { width: 15px; height: 15px; }

/* Цитата внутри облачка */
.cht-quote { display: block; width: 100%; text-align: left; margin-bottom: 8px; padding: 7px 11px;
    border: none; border-left: 3px solid #45679d; border-radius: 0 9px 9px 0; background: #e9f0fb; cursor: pointer; }
.cht-quote__name { display: block; margin-bottom: 2px; font-size: 12px; font-weight: 700; color: #45679d; }
.cht-quote__text { display: block; font-size: 12px; line-height: 1.45; color: #575757;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cht-quote__gone { display: block; font-size: 12px; font-style: italic; color: #9aa4b8; }
.cht-bubble--own .cht-quote { border-left-color: rgba(255, 255, 255, .7); background: rgba(255, 255, 255, .14); }
.cht-bubble--own .cht-quote__name { color: #fff; }
.cht-bubble--own .cht-quote__text { color: rgba(255, 255, 255, .85); }
.cht-bubble--own .cht-quote__gone { color: rgba(255, 255, 255, .7); }

/* Правка прямо в облачке */
.cht-bubble--editing { box-shadow: 0 0 0 3px rgba(229, 184, 105, .55); }
.cht-row--editing .cht-line { width: min(82%, 600px); }
.cht-row--editing .cht-bubble { flex: 1; min-width: 0; }
.cht-edit { display: flex; flex-direction: column; gap: 9px; min-width: 0; }
.cht-edit textarea { width: 100%; min-height: 66px; padding: 9px 11px; border: 1px solid #e2e8f4;
    border-radius: 11px; background: #fff; color: #313131; font: 400 14px 'Raleway', sans-serif;
    line-height: 1.55; resize: vertical; outline: none; }
.cht-bubble--own .cht-edit textarea { border-color: rgba(255, 255, 255, .45);
    background: rgba(255, 255, 255, .14); color: #fff; }
.cht-edit__row { display: flex; gap: 8px; flex-wrap: wrap; }
.cht-edit__save, .cht-edit__cancel { height: 36px; padding: 0 14px; border-radius: 10px;
    font: 600 13px 'Raleway', sans-serif; cursor: pointer; }
.cht-edit__save { border: none; background: #45679d; color: #fff; }
.cht-edit__cancel { background: #fff; border: 1px solid #e2e8f4; color: #575757; }
.cht-bubble--own .cht-edit__save { background: #fff; color: #45679d; }
.cht-bubble--own .cht-edit__cancel { background: rgba(255, 255, 255, .16);
    border-color: rgba(255, 255, 255, .4); color: #fff; }

/* Строка «Отвечаете:» над полем ввода */
.cht-replybar { display: flex; align-items: center; gap: 11px; padding: 11px 20px;
    background: #f7faff; border-top: 1px solid #e2e8f4; }
.cht-replybar > svg, .cht-replybar > i { flex: none; width: 17px; height: 17px; color: #45679d; }
.cht-replybar__body { flex: 1; min-width: 0; padding-left: 11px; border-left: 3px solid #45679d; }
.cht-replybar__name { font-size: 12px; font-weight: 700; color: #45679d; }
.cht-replybar__text { font-size: 12px; color: #575757; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cht-replybar__x { display: flex; align-items: center; justify-content: center; flex: none; width: 30px; height: 30px;
    border: 1px solid #e2e8f4; border-radius: 9px; background: #fff; color: #575757; cursor: pointer; }
.cht-replybar__x:hover { background: #f2f6ff; }
.cht-replybar__x svg, .cht-replybar__x i { width: 15px; height: 15px; }
.cht-bubble { max-width: 76%; padding: 12px 15px; border-radius: 16px 16px 16px 4px; background: #f7faff;
    border: 1px solid #e2e8f4; font-size: 14px; line-height: 1.55; color: #313131; }
.cht-bubble--own { border-radius: 16px 16px 4px 16px; background: #45679d; border-color: #45679d; color: #fff; }
.cht-text { overflow-wrap: anywhere; }
.cht-text a { color: #45679d; text-decoration: underline; }
.cht-bubble--own .cht-text a { color: #fff; }
.cht-time { display: flex; align-items: center; gap: 7px; white-space: nowrap;
    font-size: 11px; color: #9aa4b8; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.cht-time em { font-style: italic; }
.cht-tick { width: 14px; height: 14px; color: #9aa4b8; }
.cht-tick--read { color: #45679d; }

/* «Печатает…» — тихая строка над полем ввода */
.cht-typing { display: flex; align-items: center; gap: 9px; padding: 8px 20px;
    border-top: 1px solid #e2e8f4; background: #f7faff; font-size: 12px; color: #45679d; }
.cht-typing__dots { display: inline-flex; gap: 3px; }
.cht-typing__dots i { width: 5px; height: 5px; border-radius: 50%; background: #45679d;
    animation: chtDots 1.1s infinite ease-in-out; }
.cht-typing__dots i:nth-child(2) { animation-delay: .15s; }
.cht-typing__dots i:nth-child(3) { animation-delay: .3s; }
@keyframes chtDots { 0%, 60%, 100% { opacity: .25; } 30% { opacity: 1; } }
.cht-empty { padding: 28px; text-align: center; font-size: 14px; color: #9aa4b8; }

.cht-atts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.cht-att { display: inline-flex; align-items: center; gap: 9px; max-width: 240px; padding: 9px 12px;
    border-radius: 12px; background: rgba(255, 255, 255, .16); border: 1px solid rgba(255, 255, 255, .3);
    color: inherit; text-decoration: none; }
.cht-bubble:not(.cht-bubble--own) .cht-att { background: #fff; border-color: #e2e8f4; }
.cht-att svg, .cht-att i { width: 18px; height: 18px; flex: none; }
.cht-att b { display: block; font-size: 13px; font-weight: 600; overflow: hidden; text-overflow: ellipsis;
    white-space: nowrap; }
.cht-att em { font-size: 11px; font-style: normal; opacity: .75; }

.cht-notice { align-self: center; max-width: 560px; padding: 10px 16px; border-radius: 12px; text-align: center;
    font-size: 13px; font-weight: 600; line-height: 1.5; }
.cht-notice--soft { background: #fdf3e2; color: #8a6d3b; }
.cht-notice--mid { background: #fbead0; color: #8a6d3b; }
.cht-notice--hot { background: #fdecea; color: #b42318; font-weight: 500; }
.cht-notice--done { background: #f2f6ff; color: #575757; }

.cht-compose { border-top: 1px solid #e2e8f4; }
.cht-input { display: flex; align-items: flex-end; gap: 10px; padding: 14px 20px 0; }
/* textarea — строчный элемент: без display:block под ним остаётся зазор строки,
   из-за которого поле «всплывает» над скрепкой и кнопкой. */
.cht-input textarea { display: block; flex: 1; min-width: 0; min-height: 46px; max-height: 120px; padding: 12px 14px;
    border: 1px solid #e2e8f4; border-radius: 12px; background: #fff; font: 400 14px 'Raleway', sans-serif;
    line-height: 1.5; color: #313131; resize: vertical; outline: none; }
.cht-input textarea:focus { border-color: #45679d; }
.cht-clip { display: flex; align-items: center; justify-content: center; flex: none; width: 46px; height: 46px;
    border: 1px solid #e2e8f4; border-radius: 12px; background: #fff; color: #45679d; cursor: pointer; }
.cht-clip:hover { background: #f2f6ff; }
.cht-clip input { display: none; }

.cht-emoji { position: relative; flex: none; }
.cht-emoji__pop { position: absolute; left: 0; bottom: 54px; z-index: 30; width: 296px; max-height: 260px;
    overflow-y: auto; padding: 10px 12px 12px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px;
    box-shadow: 0 14px 34px rgba(49, 49, 49, .16); }
.cht-emoji__title { margin: 10px 0 6px; font-size: 11px; font-weight: 600; letter-spacing: .04em;
    text-transform: uppercase; color: #9aa4b8; }
.cht-emoji__title:first-child { margin-top: 0; }
.cht-emoji__grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 2px; }
.cht-emoji__grid button { height: 32px; padding: 0; border: none; border-radius: 8px; background: none;
    font-size: 20px; line-height: 1; cursor: pointer; }
.cht-emoji__grid button:hover { background: #f2f6ff; }
.cht-under { padding: 10px 20px 10px 76px; }
.cht-hint { margin: 0; font-size: 12px; line-height: 1.4; color: #9aa4b8; }
.cht-hint b { font-weight: 600; color: #575757; }
.cht-hint__slow { color: #c08a2e; }
.cht-picked { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; font-size: 12px; color: #45679d; }
.cht-picked span { padding: 4px 10px; border-radius: 999px; background: #e3efff; }
.cht-send { flex: none; display: inline-flex; align-items: center; gap: 8px; height: 46px; padding: 0 20px;
    border: none; border-radius: 12px; background: #45679d; color: #fff; font: 600 14px 'Raleway', sans-serif;
    cursor: pointer; }
.cht-send:hover { background: #3a5788; }
.cht-send svg, .cht-send i { width: 17px; height: 17px; }

.cht-archive { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 20px;
    background: #f2f6ff; border-top: 1px solid #e2e8f4; color: #575757; font-size: 14px; font-weight: 600; }
.cht-archive svg, .cht-archive i { width: 18px; height: 18px; color: #9aa4b8; }

@media (max-width: 700px) {
    .cht-line { max-width: 90%; }
    /* На телефоне наведения нет — действия видны всегда */
    .cht-acts { opacity: 1; visibility: visible; }
    .cht-finish { width: 100%; }
    .cht-under { padding-left: 20px; }
}

/* Чат оплачен, но окно ещё впереди — это ожидание, а не запрет */
.cht-archive--soon { background: #e3efff; color: #45679d; }
.cht-archive--soon svg, .cht-archive--soon i { color: #45679d; }

/* Кнопка ожидания: место занято, но нажимать нечего */
.inb-btn--wait { gap: 8px; background: #f2f6ff; border-color: #e2e8f4; color: #9aa4b8; cursor: default; }
.inb-btn--wait svg, .inb-btn--wait i { width: 16px; height: 16px; }

/* ---------- Продажи и доход у партнёра (макет 03.08) ---------- */
.sal { max-width: max(1000px, 90%); }
.sal-period { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }
.sal-dates { display: flex; align-items: center; gap: 10px; font-size: 13px; color: #575757; }
.sal-dates label { display: flex; align-items: center; gap: 6px; }
.sal-dates input { height: 48px; padding: 0 12px; border: 1px solid #e2e8f4; border-radius: 13px;
    background: #fff; font: 500 14px 'Raleway', sans-serif; color: #313131; }
.sal-dates input:focus { outline: none; border-color: #45679d; }

.sal-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 14px; margin-bottom: 20px; }
.sal-kpi { display: flex; flex-direction: column; gap: 3px; padding: 18px; border-radius: 18px;
    background: #fff; border: 1px solid #e2e8f4; }
.sal-kpi--accent { background: linear-gradient(137deg, #3f6399, #6b93c7); border-color: transparent;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .4); }
.sal-kpi__label { font-size: 12px; font-weight: 600; letter-spacing: .8px; text-transform: uppercase;
    color: #9aa4b8; }
.sal-kpi__value { font-size: 24px; font-weight: 700; letter-spacing: -.01em; color: #313131;
    font-variant-numeric: lining-nums tabular-nums; font-feature-settings: "lnum" 1, "tnum" 1; }
.sal-kpi__sub { font-size: 12px; color: #575757; }

/* Вопросик у названия показателя: подсказка живёт в data-tip, без скриптов */
.sal-hint { position: relative; display: inline-flex; align-items: center; justify-content: center;
    width: 15px; height: 15px; margin-left: 6px; border: 1px solid currentColor; border-radius: 50%;
    font-size: 10px; font-weight: 700; line-height: 1; opacity: .75; cursor: help; }
.sal-hint:hover { opacity: 1; }
.sal-hint::after { content: attr(data-tip); position: absolute; bottom: calc(100% + 9px); left: 50%;
    transform: translateX(-50%); z-index: 20; width: 240px; padding: 10px 12px; border-radius: 12px;
    background: #313131; color: #fff; box-shadow: 0 14px 30px -12px rgba(20, 32, 54, .5);
    font: 500 12px/1.5 'Raleway', sans-serif; letter-spacing: 0; text-transform: none;
    text-align: left; opacity: 0; visibility: hidden; transition: opacity .15s; }
.sal-hint:hover::after, .sal-hint:focus::after { opacity: 1; visibility: visible; }
/* У крайней плитки подсказка уходила бы за край экрана */
.sal-kpi:last-child .sal-hint::after { left: auto; right: -6px; transform: none; }
.sal-kpi--accent .sal-kpi__label, .sal-kpi--accent .sal-kpi__sub { color: rgba(255, 255, 255, .85); }
.sal-kpi--accent .sal-kpi__value { color: #fff; }

.sal-chart { padding: 22px; margin-bottom: 20px; background: #fff; border: 1px solid #e2e8f4;
    border-radius: 20px; }
.sal-chart__title { margin-bottom: 18px; font-size: 16px; font-weight: 600; }
.sal-chart__bars { display: flex; align-items: flex-end; gap: 14px; height: 200px; padding: 0 4px; }
.sal-chart__col { flex: 1; height: 100%; display: flex; flex-direction: column; align-items: center;
    justify-content: flex-end; gap: 8px; }
.sal-chart__col span { font-size: 11px; font-weight: 600; color: #9aa4b8; }
.sal-chart__bar { width: 56%; border-radius: 8px 8px 0 0;
    background: linear-gradient(180deg, #6b93c7, #45679d); }

.sal-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; }
.sal-box { padding: 22px; background: #fff; border: 1px solid #e2e8f4; border-radius: 20px; }
.sal-box__title { margin-bottom: 14px; font-size: 16px; font-weight: 600; }
.sal-items__head, .sal-item { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 8px;
    align-items: center; }
.sal-items__head { padding: 8px 0; border-bottom: 1px solid #e2e8f4; font-size: 11px; font-weight: 600;
    letter-spacing: .6px; text-transform: uppercase; color: #9aa4b8; }
.sal-items__head span:not(:first-child), .sal-item__num, .sal-item__sum { text-align: right; }
.sal-item { padding: 11px 0; border-bottom: 1px solid #f0f3fa; font-size: 14px; }
.sal-item__name { font-weight: 500; }
.sal-item__num { color: #575757; }
.sal-item__sum { font-weight: 700; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }

.sal-test { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; font-size: 13px;
    color: #575757; cursor: pointer; }
.sal-note { margin: 0; padding: 8px 0; font-size: 13px; line-height: 1.6; color: #9aa4b8; }
.sal-link { padding: 0; border: none; background: none; color: #45679d; font: 600 13px 'Raleway', sans-serif;
    cursor: pointer; }
.sal-link:hover { text-decoration: underline; }
.sal-txn { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 11px 0; border-bottom: 1px solid #f0f3fa; }
.sal-txn__who { min-width: 0; display: flex; flex-direction: column; }
.sal-txn__who b { font-size: 14px; font-weight: 600; }
.sal-txn__who span { font-size: 12px; color: #575757; overflow: hidden; text-overflow: ellipsis;
    white-space: nowrap; }
.sal-txn__right { flex: none; display: flex; flex-direction: column; align-items: flex-end; gap: 2px; }
.sal-txn__right b { font-size: 14px; font-weight: 600; font-variant-numeric: lining-nums tabular-nums;
    font-feature-settings: "lnum" 1, "tnum" 1; }
.sal-txn__right span { font-size: 11px; color: #9aa4b8; }
.sal-tag { padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 700; font-style: normal; }
.sal-tag--test { background: #fff4e0; color: #9a6b00; }
.sal-tag--refund { background: #fce8e6; color: #b42318; }

@media (max-width: 720px) {
    .sal-period { flex-direction: column; align-items: stretch; }
    .sal-dates input { width: 100%; }
}

/* ── «Оплаты и транзакции»: табличный вид (по образцу таблицы входящих) ────── */
.ord-table-wrap { background: #fff; border: 1px solid #e2e8f4; border-radius: 20px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); overflow-x: auto; }
.ord-table { min-width: 940px; }
/* У оплат колонок восемь, и в 940 px они впритык не помещаются. Правило стоит
   ПОСЛЕ базового: вес у них одинаковый, решает порядок. Журналов это не
   касается — у них своя ширина и своих колонок шесть. */
.ord-table--orders { min-width: 960px; }
/* Журналы «Доступы» и «События магазина»: шесть колонок, вид общий с заказами.
   Ширины разные — у доступов длинные названия материалов, у событий короткие
   коды результатов.

   Только для широкого экрана, и это не украшение. Раньше правила стояли снаружи
   медиазапросов и побеждали разбор таблицы на карточки: у
   `.ord-table--events .ord-trow` два класса, у `.ord-trow` внутри
   `@media (max-width: 900px)` — один, а вес решает раньше порядка. Шесть колонок
   оставались в полосе 358 px, ширина ячейки падала до 44 px, и значения
   печатались поверх соседних: почта уходила под «Строки», и оба текста
   становились нечитаемы. */
@media (min-width: 901px) {
    .ord-table--grants .ord-table__head, .ord-table--grants .ord-trow {
        grid-template-columns: 1.6fr 1.8fr 1fr 1.2fr 1.1fr 1.3fr; }
    .ord-table--events .ord-table__head, .ord-table--events .ord-trow {
        grid-template-columns: 1.1fr 1fr 1.1fr 1.6fr 1.4fr 0.7fr; }
}
/* Тело события и наш ответ. Показываются с отступами, поэтому переносы даёт
   само форматирование, а не браузер: `pre-wrap` рвал бы длинный ключ посреди
   слова и путал бы разбор. Если строка всё равно длиннее блока — прокрутка
   внутри блока; страница вправо не едет, за это отвечает `overflow: auto`. */
.ord-pre { margin: 0; font-size: 12px; line-height: 1.5; color: #575757; white-space: pre;
    background: #f7faff; border: 1px solid #e2e8f4; border-radius: 12px;
    padding: 10px 12px; max-height: 320px; overflow: auto; }
/* Свёрнутый блок. По умолчанию закрыт: в обычном разборе смотрят результат по
   строкам, а тело сверяют редко — и тогда открывают руками. */
.ord-fold > summary { cursor: pointer; }
.ord-fold > .ord-pre { margin-top: 4px; }
/* Восемь колонок: дата, заказ, транзакция, сумма, промокод, статус, клиент,
   способ оплаты.

   Ширины подобраны по замерам самих текстов, а не на глаз: дата 108, транзакция
   79, промокод 69 по шапке, способ оплаты 106. Статусу оставлено 116 — самая
   длинная подпись «Ожидает оплаты», её в видимых строках не было. */
.ord-table__head, .ord-trow { display: grid; gap: 12px; align-items: center;
    grid-template-columns: 112px minmax(140px, 1.3fr) 84px 100px 76px 116px minmax(130px, 1fr) 110px; }
.ord-table__head { padding: 13px 20px; background: #f7faff; border-bottom: 1px solid #e2e8f4;
    font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
    color: #9aa4b8; white-space: nowrap; }
.ord-trow { width: 100%; min-height: 64px; padding: 11px 20px; text-align: left;
    background: none; border: none; border-bottom: 1px solid #f0f3fa; cursor: pointer;
    font: inherit; color: inherit; transition: background .12s; }
.ord-trow:last-child { border-bottom: none; }
.ord-trow:hover { background: #f7faff; }

/* `min-width: 0` разрешает колонке быть уже своего содержимого — без переноса
   длинное значение печаталось бы поверх соседней колонки. Адрес почты и номер
   заказа магазина (до 190 знаков) — цельные слова, обычный перенос их не берёт,
   поэтому `anywhere`. */
.ord-cell { min-width: 0; font-size: 13px; color: #313131; overflow-wrap: anywhere;
    font-variant-numeric: lining-nums tabular-nums; }
.ord-cell--date { color: #575757; white-space: nowrap; }
.ord-cell--no { font-weight: 700; }
.ord-cell--txn { color: #575757; white-space: nowrap; }
.ord-cell--empty { color: #c2cadb; }
.ord-cell--sum { font-weight: 700; text-align: right; white-space: nowrap; }
.ord-cell--method { color: #575757; }
.ord-cell__sub { display: block; margin-top: 2px; font-size: 12px; font-weight: 500; color: #9aa4b8;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Сигнальные результаты в строке журнала. Правило стоит ПОСЛЕ базового:
   вес у них одинаковый, и побеждает то, что ниже. */
.ord-cell__sub--alarm { color: #b42318; font-weight: 600; }
.ord-cell--client { display: flex; align-items: center; gap: 9px; }
.ord-cell__avatar { width: 28px; height: 28px; flex: none; border-radius: 50%; background: #e3efff;
    color: #45679d; display: flex; align-items: center; justify-content: center;
    font-size: 12px; font-weight: 700; }
.ord-cell__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Фильтры и поиск «Доступов» — одной строкой. `.input` задаёт ширину 100%, и три
   поля вставали друг под друга на всю ширину экрана. Селектор двойной нарочно:
   ширину надо перебить весом, а не порядком в файле — на порядке здесь уже
   обжигались (задача 2026-08-27-02, серый сигнал вместо красного). */
.ord-filters .input.ord-filters__select { width: auto; flex: 0 0 auto; min-width: 190px; }
.ord-filters .input.ord-filters__search { width: auto; flex: 1 1 260px; min-width: 220px; }
@media (max-width: 600px) {
    .ord-filters .input.ord-filters__select,
    .ord-filters .input.ord-filters__search { width: 100%; flex: 1 1 100%; }
}

/* Раскрытая форма выдачи стоит прямо над строкой фильтров и без интервала
   читается с ней как один блок. Соседний селектор нарочно: когда форма закрыта,
   фильтры идут за заголовком страницы, и лишний отступ там не нужен. */
.ord-card + .ord-filters { margin-top: 22px; }

/* Карточки журналов: пары «метка — значение» шли сплошным блоком и читались
   одним абзацем. Ячейки здесь лежат прямо в карточке — в заказах они внутри
   `.ord-card__grid`, и там их разводит его собственный `gap`, поэтому правило
   берёт только прямых детей карточки и чужой вёрстки не касается. */
.ord-card > .ord-card__cell { gap: 5px; }
.ord-card > .ord-card__cell + .ord-card__cell { margin-top: 16px; }
.ord-card > .ord-card__cell > .ord-card__label { font-size: 11px; font-weight: 600;
    letter-spacing: .04em; text-transform: uppercase; }

/* На узком экране таблица распадается на карточки: горизонтальная прокрутка
   на телефоне хуже, чем два столбца. */
@media (max-width: 900px) {
    .ord-table-wrap { background: none; border: none; box-shadow: none; overflow: visible; }
    .ord-table { min-width: 0; display: flex; flex-direction: column; gap: 12px; }
    .ord-table__head { display: none; }
    .ord-trow { grid-template-columns: 1fr auto; gap: 8px 10px; min-height: 0; padding: 15px;
        background: #fff; border: 1px solid #e2e8f4; border-radius: 16px; }
    .ord-trow:hover { background: #fff; }
    .ord-cell--sum { text-align: right; }
    /* Дате здесь разрешено переноситься. Соседняя ячейка «Заказ» занимает
       колонку по содержимому — номер, метки и название, — и первой колонке
       остаётся меньше, чем нужно дате. Запрет переноса не давал ей сжаться, и
       дата печаталась поверх номера. На широком экране запрет остаётся: там
       места хватает, а разорванная пополам дата читается хуже. */
    .ord-cell--date { white-space: normal; }
}

/* Ровные цифры в заголовках. Стоит в конце файла намеренно: сокращённая запись
   font: ... в правилах выше сбрасывает font-variant-numeric, и вернуть его можно
   только правилом, идущим после них. */
h1, h2, h3, h4, h5, h6,
.library-card__title, .lms-card__title, .co-card__title, .lms-mat__title {
    font-variant-numeric: lining-nums;
    font-feature-settings: "lnum" 1;
}

/* Карточка покупки открывается кликом по строке истории. */
.pur-card { cursor: pointer; transition: box-shadow .15s, border-color .15s; }
.pur-card:hover { border-color: #cfd9ec; box-shadow: 0 18px 40px -22px rgba(84, 139, 200, .45); }

/* ── Публичная часть: то, что видит гость и проверка банка-эквайера ────────── */
/* Фон витрины белый (макет 19.08.2026): светло-синим красится только полоса
   под тремя лентами. Кабинет живёт на своём холсте --v2-canvas и не тронут. */
.pub { min-height: 100vh; display: flex; flex-direction: column; background: #fff; }

/* Публичная шапка v2: полноширинная почти чёрная полоса, контент внутри — общей
   ширины публичных страниц. Липкая — поэтому у #learning/#experts есть
   scroll-margin-top, чтобы якорь не прятался под шапкой. */
.pub-head { position: sticky; top: 0; z-index: 20; width: 100%; background: var(--v2-shell-header);
    display: flex; align-items: center; justify-content: space-between; gap: 16px;
    padding: 14px max(16px, calc((100% - 1100px) / 2)); }
.pub-logo { display: inline-flex; align-items: center; text-decoration: none; }
.pub-logo__badge { display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 10px; background: #171512; }
.pub-logo__img { display: block; height: 22px; width: auto; }
@media (max-width: 767px) {
    /* 130px, а не предельные 145px из спеки: на 390px рядом ещё «Войти» +
       «Регистрация» — со 145px шапка не помещается по факту (см. грабли в
       result.md), 130px даёт ~30px запаса без визуальной потери логотипа. */
    .pub-logo__img { height: auto; max-width: 130px; width: auto; }
}
.pub-head__nav { display: flex; align-items: center; gap: 22px; font-size: 15px; font-weight: 600; }
.pub-head__nav a { color: #fff; opacity: .82; text-decoration: none; }
.pub-head__nav a:hover { opacity: 1; color: #fff; }
/* Текущий пункт — не ссылка: span без href, hover, focus и курсора ссылки.
   rgba(255,255,255,.66) — тот же приглушённый белый, что уже стоит у
   .topbar__user-sub на таком же тёмном фоне шапки; даёт ~8.3:1 к #171512 —
   с запасом выше WCAG AA (4.5:1). */
.pub-head__nav-current { color: rgba(255, 255, 255, .66); cursor: default; }
.pub-head__auth { display: flex; align-items: center; gap: 16px; }
.pub-head__login { display: inline-flex; align-items: center; height: 44px; padding: 0 4px; color: #fff;
    font-weight: 600; font-size: 15px; text-decoration: none; }
.pub-head__login:hover { color: #fff; opacity: .82; }
.pub-head__reg { display: inline-flex; align-items: center; height: 44px; padding: 0 20px; border-radius: 12px;
    background: var(--v2-accent); color: #fff; font-weight: 700; font-size: 15px; text-decoration: none;
    transition: background .15s; }
.pub-head__reg:hover { background: var(--v2-accent-hover); color: #fff; }
/* Текущее auth-действие (Войти на /login, Регистрация на /register) — тот же
   приглушённый неинтерактивный вид, что у .pub-head__nav-current: заменяет и
   обычную ссылку, и акцентную кнопку, потому что это уже не призыв к действию. */
.pub-head__auth-current { display: inline-flex; align-items: center; height: 44px; padding: 0 4px;
    color: rgba(255, 255, 255, .66); font-weight: 600; font-size: 15px; cursor: default; }
@media (max-width: 767px) {
    /* Пути к курсам/экспертам — через карточки hero, отдельный burger не нужен. */
    .pub-head__nav { display: none; }
    /* На 390px логотип + «Войти» + «Регистрация» иначе не помещаются в шапку:
       узкий паддинг шапки, чуть плотнее auth-блок и компактнее кнопка. */
    .pub-head { padding: 14px 12px; }
    .pub-head__auth { gap: 10px; }
    .pub-head__reg { padding: 0 14px; }
}
.pub-main { flex: 1; max-width: 1100px; width: 100%; margin: 0 auto; padding: 32px 16px 56px; }

/* «← Главная» — замена пункта nav «Главная», скрытого на 390px вместе со всей .pub-head__nav. */
.pub-back-home { display: none; }
@media (max-width: 767px) {
    /* height (не min-height) — фактическая кликабельная зона ровно 44px, без
       случайного увеличения от переноса текста при локализации. */
    .pub-back-home { display: inline-flex; align-items: center; height: 44px; margin-bottom: 6px;
        font-size: 14px; font-weight: 600; color: var(--v2-text2); text-decoration: none; }
    .pub-back-home:hover { color: var(--v2-text); }
}

.pub-hero { margin-bottom: 28px; }
.pub-hero__kicker { margin: 0 0 8px; font-size: 12px; font-weight: 700; text-transform: uppercase;
    letter-spacing: .08em; color: var(--v2-text2); }
.pub-hero h1 { margin: 0 0 12px; font-weight: 800; font-size: 40px; line-height: 1.15; letter-spacing: -.02em;
    color: var(--v2-text); }
.pub-hero__lead { margin: 0; font-size: 17px; line-height: 1.55; color: var(--v2-text2); max-width: 640px; }

/* Два равноправных пути: одинаковая площадь и структура у обеих карточек. */
/* auto-fit, а не жёсткие две колонки: когда раздел консультаций выключен,
   путь остаётся один и не должен оставлять рядом пустую половину строки. */
.pub-paths { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px; margin: 28px 0; }
.pub-path { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; background: var(--v2-surface);
    border: 1px solid var(--v2-border); border-radius: 20px; padding: 26px; }
.pub-path__icon { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px;
    border-radius: 12px; background: var(--v2-surface-subtle); color: var(--v2-text); flex: none; }
.pub-path__eyebrow { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
    color: var(--v2-text2); }
.pub-path h2 { margin: 0; font-size: 22px; font-weight: 700; letter-spacing: -.01em; color: var(--v2-text); }
.pub-path__desc { margin: 0; font-size: 15px; line-height: 1.5; color: var(--v2-text2); }
.pub-path__btn { margin-top: auto; display: inline-flex; align-items: center; justify-content: center; height: 46px;
    padding: 0 22px; border-radius: 12px; background: var(--v2-action); color: #fff; font-weight: 700;
    font-size: 15px; text-decoration: none; transition: background .15s; }
.pub-path__btn:hover { background: var(--v2-action-hover); color: #fff; }

.pub-checks { display: flex; flex-wrap: wrap; gap: 14px 32px; margin: 0 0 44px; padding: 0; list-style: none; }
.pub-check { display: flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 600; color: var(--v2-text); }
.pub-check i, .pub-check svg { width: 18px; height: 18px; flex: none; color: var(--v2-accent); }

.pub-sec { margin-bottom: 24px; scroll-margin-top: 96px; }
.pub-sec__head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 18px; }
.pub-sec__head h2 { margin: 0; font-weight: 700; font-size: 24px; letter-spacing: -.01em; color: var(--v2-text); }
.pub-sec__all { font-size: 15px; font-weight: 600; white-space: nowrap; color: var(--pub-blue-3);
    text-decoration: underline; text-underline-offset: 2px; }
.pub-sec__all:hover { color: var(--pub-blue); }
.pub-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (min-width: 768px) and (max-width: 1023px) {
    .pub-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 767px) {
    .pub-grid { grid-template-columns: 1fr; }
    .pub-paths { grid-template-columns: 1fr; }
}

.pub-card { display: flex; flex-direction: column; background: var(--v2-surface); border: 1px solid transparent;
    border-radius: 20px; box-shadow: var(--v2-shadow); overflow: hidden; text-decoration: none; color: var(--v2-text);
    transition: transform .15s, box-shadow .15s; }
/* Наведение по макету: синяя рамка в два пикселя. Толщину компенсируем
   отрицательным полем, иначе карточка «дёргалась» бы на один пиксель. */
.pub-card:hover {
    transform: translateY(-2px);
    color: var(--v2-text);
    border: 2px solid var(--pub-blue-2);
    margin: -1px;
}
.pub-card__cover { display: flex; align-items: flex-end; padding: 14px;
    background: var(--v2-shell-header) center/cover no-repeat; }
.pub-card__cover-cap { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: .96px;
    color: #fff; opacity: .9; }
.pub-card__body { display: flex; flex-direction: column; gap: 8px; flex: 1; padding: 16px; }
.pub-card__title { font-weight: 700; font-size: 16px; line-height: 1.3; }
.pub-card__meta { font-size: 13px; color: var(--v2-text2); }

/* Бейджи автора и времени — макет: светло-синяя полупрозрачная пилюля со
   значком и серо-синей подписью. */
.pub-card__chips { display: flex; flex-wrap: wrap; gap: 6px; }
.pub-card__chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    max-width: 100%;
    padding: 5px 10px;
    border-radius: 100px;
    background: rgba(230, 237, 248, .5);
    color: #868fa6;
    font-size: 12px;
    line-height: 1.1;
    letter-spacing: -.02em;
}
.pub-card__chip i, .pub-card__chip svg { width: 13px; height: 13px; flex: none; }

.pub-card__price {
    /* 20 px от бейджей до цены, как в макете: 8 даёт общий отступ колонки. */
    margin-top: 12px;
    display: flex;
    align-items: center;
    /* Зазор 6, а не 8: строка карточки витрины — 310 px, и «цена — прежняя
       цена — процент — срок» при зазоре 8 не помещается на шестизначной паре
       (замер 24.08.2026: надо 312, есть 310). Вместе с короткой подписью
       «до 01.09.26» строка держится одной даже на 149 000 из 199 000. */
    gap: 6px;
    flex-wrap: wrap;
    font-variant-numeric: lining-nums tabular-nums;
}
.pub-card__price-now { font-weight: 700; font-size: 22px; letter-spacing: -.03em; color: var(--v2-text); }

/* Прежняя цена: бледная и перечёркнутая наискосок красным. Линия рисуется
   псевдоэлементом — у line-through нет ни наклона, ни своего цвета в старых
   движках.

   Одно определение на витрину и на карточку покупки: в макете это одна и та же
   пара «зачёркнутая цена + процент», и разойтись они не должны. У карточки
   покупки разметка использует тег <s>, поэтому браузерное подчёркивание здесь
   снимается — его заменяет наша линия. */
.pub-card__price-old,
.buy-card__rub-old {
    position: relative;
    font-weight: 700;
    font-size: 16px;
    letter-spacing: -.02em;
    color: #9ba2b4;
    text-decoration: none;
    font-variant-numeric: lining-nums tabular-nums;
}
.pub-card__price-old::after,
.buy-card__rub-old::after {
    content: '';
    position: absolute;
    left: -3px;
    right: -3px;
    top: 50%;
    height: 1.5px;
    background: #e2453c;
    transform: rotate(-9deg);
}

/* Бейдж процента скидки и плашка срока цены — одно правило на все витрины.

   Высота не задаётся числом: она складывается из кегля и вертикальных
   отступов. Пока обе плашки берут их отсюда, они стоят в строке ровно и
   останутся ровными, если однажды поменяется шрифт.

   Классы `.pv-card__discount` и `.cc-card__discount` были в разметке, но своего
   правила не имели вовсе — бейдж процента на странице материала и в каталоге
   кабинета рисовался голым текстом. Добавлены сюда же: плашка срока рядом с
   неоформленным процентом выглядела бы поломкой. */
.pub-card__discount,
.buy-card__discount,
.pv-card__discount,
.cc-card__discount,
.pub-card__until,
.buy-card__until,
.pv-card__until,
.cc-card__until,
.gco-order__until {
    display: inline-flex;
    align-items: center;
    /* Плашка мельче цены намеренно: цена — главное число на экране, плашка при
       ней — подпись. Кегль 11 и отступы 3x5 отдают строке 11.2 px, и этого
       хватает там, где не хватало: карточка покупки 300 px (надо было 307.6),
       карточка внутреннего каталога на пяти в ряду 270 px (надо было 271.5).
       Замер 25.08.2026 на боевом сочетании 102 200 -> 67 200 со сроком. */
    padding: 3px 5px;
    border-radius: 5px;
    background: #9ba2b4;
    color: #fff;
    font-weight: 500;
    font-size: 11px;
    letter-spacing: -.04em;
    white-space: nowrap;
}

/* Процент и срок — пара: строка цены переносится, и без обёртки процент
   оставался бы наверху, а срок уезжал вниз. Замер на карточке витрины 344 px
   показал ровно это. Обёртка одна на все витрины: разъехавшиеся правила дали бы
   разное поведение на разных экранах. */
.price-badges { display: inline-flex; align-items: center; gap: 6px; flex: none; }

/* Отличается только фон — зелёный из макета заказчика. */
.pub-card__until,
.buy-card__until,
.pv-card__until,
.cc-card__until,
.gco-order__until {
    background: #59DA73;
}
.pub-card__btn { margin-top: auto; display: flex; align-items: center; justify-content: center; height: 44px;
    border: 1px solid var(--v2-border); border-radius: 12px; color: var(--v2-text); font-weight: 600; font-size: 14px; }
.pub-card:hover .pub-card__btn { background: var(--pub-blue-2); border-color: var(--pub-blue-2); color: #fff; }

/* «Ожидается» — не действие, а состояние: подложка светло-синяя, текст тёмный,
   наведение её не красит. */
.pub-card__btn--disabled { background: var(--pub-bg-soft); border-color: var(--pub-bg-soft); color: var(--v2-text); }
.pub-card:hover .pub-card__btn--disabled { background: var(--pub-bg-soft); border-color: var(--pub-bg-soft); color: var(--v2-text); }

/* Полоса под тремя лентами. Ширину даёт тень, обрезанная по вертикали: приём не
   создаёт горизонтальной прокрутки, в отличие от 100vw. */
.pub-band {
    background: var(--pub-bg-soft);
    box-shadow: 0 0 0 100vmax var(--pub-bg-soft);
    clip-path: inset(0 -100vmax);
    margin: 8px 0 36px;
    /* 50 px от края полосы до заголовка и столько же под последней лентой:
       иначе нижний отступ последней секции схлопывается наружу и карточки
       прилипают к краю. */
    padding: 50px 0;
}
.pub-band .pub-sec:last-child { margin-bottom: 0; }

/* Столько же между лентами: от карточек предыдущей до заголовка следующей. */
.pub-band .pub-sec { margin-bottom: 50px; }
.pub-band:empty { display: none; }



/* Подвал: продавец, документы и платёжные знаки — их проверяет эквайер */
/* Футер по макету (узел 401:2342): тёмный фон и белый текст. Тот же тёмный,
   что у шапки портала, — они и в макете одного цвета.

   Футер общий для всех публичных страниц, поэтому меняется и на каталоге, и на
   странице материала, и в оформлении покупки. Это осознанно: разный футер на
   соседних страницах выглядел бы поломкой. */
.pub-foot { background: var(--v2-shell-header); border-top: none; color: #fff; }
.pub-foot__inner { max-width: 1100px; margin: 0 auto; padding: 36px 16px 40px; display: flex; flex-direction: column; gap: 22px; }
.pub-foot__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 26px; }
.pub-foot__cap { font-size: 12px; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: .06em; margin-bottom: 9px; }
.pub-foot__name { font-size: 14px; font-weight: 600; line-height: 1.5; color: #fff; }
.pub-foot__line { font-size: 14px; color: #fff; line-height: 1.6; font-variant-numeric: lining-nums tabular-nums; }
/* Просьба отдела маркетинга 20.08.2026: строки «Документов» стоят свободнее на
   два пикселя. Меняется только этот блок — соседние колонки и общий ритм
   подвала прежние. */
.pub-foot__links { display: flex; flex-direction: column; gap: 9px; align-items: flex-start; font-size: 14px; }
.pub-foot__links a { color: #fff; text-decoration: underline; text-underline-offset: 2px; }
.pub-foot__links a:hover { color: var(--pub-blue-2); }
.pub-foot__pay { margin: 0 0 12px; font-size: 14px; color: #fff; line-height: 1.6; }
.pub-foot__marks { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pub-mark { display: inline-flex; align-items: center; justify-content: center; height: 32px; min-width: 60px;
    padding: 0 12px; border: 1px solid var(--v2-border); border-radius: 8px; background: var(--v2-surface); color: var(--v2-text2);
    font-weight: 700; font-size: 12px; }
.pub-mark--visa { color: #1a1f71; font-weight: 800; font-size: 14px; letter-spacing: .06em; font-style: italic; }
.pub-mark--mir { color: #0f754c; font-weight: 800; font-size: 14px; letter-spacing: .04em; }
.pub-foot__bottom { border-top: 1px solid #e5e0d8; padding-top: 18px; font-size: 13px; color: #fff;
    font-variant-numeric: lining-nums tabular-nums; }

/* Правовые страницы: длинный текст, читаемая колонка */
.pub-doc { max-width: 760px; background: #fff; border: 1px solid #e2e8f4; border-radius: 20px;
    box-shadow: 0 20px 50px -20px rgba(84, 139, 200, .2); padding: 34px 34px 40px; }
.pub-doc h1 { margin: 0 0 8px; font-size: 30px; font-weight: 700; letter-spacing: -.02em; }
.pub-doc__lead { margin: 0 0 26px; font-size: 15px; color: #575757; }
.pub-doc h2 { margin: 26px 0 10px; font-size: 18px; font-weight: 700; }
.pub-doc p { margin: 0 0 10px; font-size: 15px; line-height: 1.65; color: #313131; }
.pub-doc__note { margin-top: 24px; padding: 14px 16px; background: #f7faff; border: 1px solid #e2e8f4;
    border-radius: 12px; font-size: 14px; color: #575757; }

@media (max-width: 720px) {
    .pub-hero h1 { font-size: 28px; }
    .pub-doc { padding: 24px 18px 30px; }
}

/* Public Course Catalog v2 */
.pub-catalog-v2__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px;
    flex-wrap: wrap; margin-bottom: 22px; }
.pub-catalog-v2__title { margin: 0 0 6px; font-size: 30px; font-weight: 700; letter-spacing: -.02em; color: var(--v2-text); }
.pub-catalog-v2__lead { margin: 0; font-size: 15px; color: var(--v2-text2); }
.pub-catalog-v2__search { display: flex; gap: 8px; }
.pub-catalog-v2__search input { height: 44px; width: 260px; max-width: 100%; padding: 0 14px; border: 1px solid var(--v2-border);
    border-radius: 12px; background: var(--v2-surface); font: 400 15px 'Raleway', sans-serif; color: var(--v2-text); outline: none; }
.pub-catalog-v2__search input:focus-visible { outline: none; border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212, 101, 0, .18); }
.pub-catalog-v2__search button { height: 44px; padding: 0 18px; border: none; border-radius: 12px; background: var(--v2-action);
    color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer; transition: background .15s; }
.pub-catalog-v2__search button:hover { background: var(--v2-action-hover); color: #fff; }
.pub-catalog-v2__search button:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.pub-catalog-v2__empty { background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 20px; padding: 40px 24px;
    text-align: center; color: var(--v2-text2); display: flex; flex-direction: column; align-items: center; gap: 14px; }
.pub-catalog-v2__empty p { margin: 0; font-size: 15px; }
.pub-catalog-v2__empty-action { display: inline-flex; align-items: center; justify-content: center; min-height: 44px;
    padding: 0 22px; border: none; border-radius: 12px; background: var(--v2-action); color: #fff;
    font: 600 15px 'Raleway', sans-serif; text-decoration: none; transition: background .15s; }
.pub-catalog-v2__empty-action:hover { background: var(--v2-action-hover); color: #fff; }
.pub-catalog-v2__empty-action:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.pub-catalog-v2__pager { margin-top: 26px; }
@media (max-width: 767px) {
    .pub-catalog-v2__head { align-items: stretch; }
    .pub-catalog-v2__search { flex-direction: column; width: 100%; }
    .pub-catalog-v2__search input { width: 100%; }
}
/* End Public Course Catalog v2 */

/* Обложка-заглушка, когда картинки у курса нет */
.pub-card__cover { background-color: var(--v2-shell-header); }

/* Страница курса в публичном макете: в кабинете она занимает 60 % ширины,
   потому что рядом сайдбар. Здесь сайдбара нет, и те же 60 % сжимают
   карточку покупки до нечитаемой колонки. */
@media (min-width: 1024px) {
    .pub .lms-course { width: 100%; }
}
.pub .course-detail__grid { grid-template-columns: minmax(0, 1fr) 340px; gap: 28px; }
@media (max-width: 860px) {
    .pub .course-detail__grid { grid-template-columns: 1fr; }
}
/* Видимый фокус для интерактивных элементов публичной оболочки v2. */
.pub a:focus-visible, .pub button:focus-visible, .pub input:focus-visible {
    outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus);
}

/* Честные пустые состояния: не демо-карточка, а спокойная пояснительная плашка. */
.pub-empty { background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 16px;
    padding: 24px; color: var(--v2-text2); font-size: 15px; }
.pub-empty strong { display: block; margin-bottom: 4px; font-size: 16px; font-weight: 700; color: var(--v2-text); }
.pub-empty p { margin: 0; }
.pub-empty a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.pub-empty a:hover { color: var(--v2-accent); }

/* Тёмный блок «Начните с бесплатных материалов» под превью курсов. */
.pub-cta-dark { margin-top: 16px; background: var(--v2-shell-header); border-radius: 20px; padding: 26px 28px;
    color: #fff; }
.pub-cta-dark h3 { margin: 0 0 6px; font-size: 18px; font-weight: 700; }
.pub-cta-dark p { margin: 0 0 16px; font-size: 15px; line-height: 1.5; color: rgba(255, 255, 255, .78); max-width: 520px; }
.pub-cta-dark .pub-path__btn { background: var(--v2-accent); }
.pub-cta-dark .pub-path__btn:hover { background: var(--v2-accent-hover); }

/* Финальный общий CTA после обоих превью. */
.pub-cta-final { margin-top: 36px; background: var(--v2-surface); border: 1px solid var(--v2-border);
    border-radius: 20px; padding: 36px 24px; text-align: center; }
.pub-cta-final h2 { margin: 0 0 20px; font-size: 22px; font-weight: 700; color: var(--v2-text); }
.pub-cta-final .pub-path__btn { display: inline-flex; }
.pub-cta-final__login { display: block; margin-top: 14px; font-size: 14px; color: var(--v2-text2); }
.pub-cta-final__login a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.pub-cta-final__login a:hover { color: var(--v2-accent); }

/* ── Публичный каталог экспертов (гость) ─────────────────────────────────── */
.pub-exp__title { margin: 0 0 8px; font-size: 32px; font-weight: 800; letter-spacing: -.02em; color: var(--v2-text); }
.pub-exp__lead { margin: 0 0 22px; font-size: 15px; color: var(--v2-text2); max-width: 620px; }
.pub-exp__search { display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 16px; margin-bottom: 26px;
    max-width: 420px; background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 12px; }
.pub-exp__search i { width: 18px; height: 18px; flex: none; color: var(--v2-text2); }
.pub-exp__search input { flex: 1; border: none; outline: none; background: transparent; font: 400 15px 'Raleway', sans-serif;
    color: var(--v2-text); }
.pub-exp__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (min-width: 768px) and (max-width: 1023px) {
    .pub-exp__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 767px) {
    .pub-exp__grid { grid-template-columns: 1fr; }
}

.pub-exp-card { display: flex; flex-direction: column; gap: 10px; background: var(--v2-surface);
    border: 1px solid var(--v2-border); border-radius: 18px; padding: 20px; }
.pub-exp-card__photo, .pub-exp-card__ava { width: 56px; height: 56px; border-radius: 50%; flex: none;
    object-fit: cover; }
.pub-exp-card__ava { display: flex; align-items: center; justify-content: center; background: var(--v2-surface-subtle);
    color: var(--v2-text); font-weight: 700; font-size: 20px; }
.pub-exp-card__name { font-weight: 700; font-size: 17px; letter-spacing: -.01em; color: var(--v2-text); }
.pub-exp-card__spec { font-size: 13px; font-style: italic; color: var(--v2-text2); margin-top: -6px; }
.pub-exp-card__bio { margin: 0; font-size: 14px; line-height: 1.5; color: var(--v2-text2); }
.pub-exp-card__foot { margin-top: auto; padding-top: 8px; display: flex; align-items: center; justify-content: space-between;
    gap: 12px; }
.pub-exp-card__price { font-weight: 700; font-size: 15px; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.pub-exp-card__link { font-size: 14px; font-weight: 600; color: var(--v2-accent-hover); text-decoration: underline;
    text-underline-offset: 2px; white-space: nowrap; }
.pub-exp-card__link:hover { color: var(--v2-accent); }

/* ── Публичный профиль эксперта (гость) ──────────────────────────────────── */
.pub-exp-back { display: inline-flex; align-items: center; height: 32px; margin-bottom: 18px; font-size: 14px;
    font-weight: 600; color: var(--v2-text2); text-decoration: none; }
.pub-exp-back:hover { color: var(--v2-text); }
.pub-exp-profile__photo, .pub-exp-profile__ava { width: 84px; height: 84px; border-radius: 50%; object-fit: cover;
    margin-bottom: 14px; }
.pub-exp-profile__ava { display: flex; align-items: center; justify-content: center; background: var(--v2-surface-subtle);
    color: var(--v2-text); font-weight: 700; font-size: 28px; }
.pub-exp-profile__name { margin: 0 0 4px; font-size: 26px; font-weight: 800; letter-spacing: -.01em; color: var(--v2-text); }
.pub-exp-profile__spec { font-size: 14px; font-style: italic; color: var(--v2-text2); margin-bottom: 14px; }
.pub-exp-profile__bio { margin: 0 0 8px; font-size: 15px; line-height: 1.6; color: var(--v2-text); max-width: 640px; }
.pub-exp-sub { margin: 32px 0 14px; font-size: 19px; font-weight: 700; color: var(--v2-text); }

.pub-svc-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
@media (max-width: 767px) {
    .pub-svc-grid { grid-template-columns: 1fr; }
}
.pub-svc { display: flex; flex-direction: column; gap: 10px; background: var(--v2-surface); border: 1px solid var(--v2-border);
    border-radius: 16px; padding: 20px; }
.pub-svc__title { font-weight: 700; font-size: 16px; color: var(--v2-text); }
.pub-svc__desc { margin: 0; font-size: 14px; line-height: 1.5; color: var(--v2-text2); }
.pub-svc__row { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 14px; font-weight: 600; color: var(--v2-text2); }
.pub-svc__cta { margin-top: 6px; display: flex; align-items: center; justify-content: center; height: 46px;
    border: none; border-radius: 12px; background: var(--v2-action); color: #fff; font-weight: 700; font-size: 15px;
    cursor: pointer; transition: background .15s; }
.pub-svc__cta:hover { background: var(--v2-action-hover); }
.pub-svc__note { margin-top: 6px; font-size: 14px; color: var(--v2-text2); }

/* Auth-gate: нативный <dialog>, без Livewire — только два адреса auth-only гейта. */
.pub-gate { width: min(420px, calc(100% - 40px)); border: none; border-radius: 20px; padding: 28px;
    box-shadow: var(--v2-shadow); }
.pub-gate::backdrop { background: rgba(23, 21, 18, .55); }
.pub-gate h2 { margin: 0 0 8px; font-size: 20px; font-weight: 700; color: var(--v2-text); }
.pub-gate__lead { margin: 0 0 20px; font-size: 14px; line-height: 1.5; color: var(--v2-text2); }
.pub-gate__btn { display: flex; align-items: center; justify-content: center; height: 48px; border-radius: 12px;
    font-weight: 700; font-size: 15px; text-decoration: none; margin-bottom: 10px; }
.pub-gate__btn--primary { background: var(--v2-action); color: #fff; }
.pub-gate__btn--primary:hover { background: var(--v2-action-hover); color: #fff; }
.pub-gate__btn--outline { background: var(--v2-surface); border: 1px solid var(--v2-border); color: var(--v2-text); }
.pub-gate__btn--outline:hover { background: var(--v2-surface-subtle); }
.pub-gate__cancel { display: block; width: 100%; margin-top: 4px; padding: 8px; border: none; background: none;
    color: var(--v2-text2); font-size: 14px; font-weight: 600; text-align: center; cursor: pointer; }
.pub-gate__cancel:hover { color: var(--v2-text); }

/* ── Согласие на cookie (v2: нейтральные токены, синий — только у VK) ───────── */
.cookie-bar { position: fixed; left: 50%; bottom: 18px; z-index: 9999; width: min(920px, calc(100% - 32px));
    transform: translate(-50%, 16px); opacity: 0; visibility: hidden; transition: opacity .2s, transform .2s; }
.cookie-bar.is-on { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
.cookie-bar__inner { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; justify-content: space-between;
    padding: 16px 20px; background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 18px;
    box-shadow: var(--v2-shadow); }
.cookie-bar__text { margin: 0; flex: 1; min-width: 260px; font-size: 14px; line-height: 1.55; color: var(--v2-text2); }
.cookie-bar__text a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.cookie-bar__text a:hover { color: var(--v2-accent); }
.cookie-bar__acts { display: flex; gap: 10px; flex: none; }
.cookie-bar__btn { height: 44px; padding: 0 18px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; cursor: pointer;
    white-space: nowrap; transition: background .15s, border-color .15s, color .15s; }
.cookie-bar__btn:hover { background: var(--v2-surface-subtle); }
.cookie-bar__btn--yes { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.cookie-bar__btn--yes:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.cookie-bar__text a:focus-visible, .cookie-bar__btn:focus-visible {
    outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

@media (max-width: 620px) {
    .cookie-bar { bottom: 10px; }
    .cookie-bar__acts { width: 100%; }
    .cookie-bar__btn { flex: 1; }
}

/* Блок опции консультации в редакторе курса */
.lms-addon-block { margin-top: 18px; padding-top: 18px; border-top: 1px solid #f0f3fa; }
.lms-addon { margin-top: 14px; padding: 16px; background: #f7faff; border: 1px solid #e2e8f4; border-radius: 14px; }
.lms-addon .lms-field { margin-bottom: 12px; }
.lms-addon__hint { margin: 4px 0 0; font-size: 13px; line-height: 1.5; color: #575757; }

/* Выбор окна по оплаченной консультации из комплекта с курсом */
.mcs-pick { margin-top: 12px; padding: 14px 16px; background: #f7faff; border: 1px solid #e2e8f4; border-radius: 14px; }
.mcs-pick__head { margin-bottom: 10px; }
.mcs-pick__head b { display: block; font-size: 15px; color: #313131; }
.mcs-pick__head span { display: block; margin-top: 3px; font-size: 13px; color: #575757; }
.mcs-pick__slot { margin: 0 8px 8px 0; height: 38px; padding: 0 14px; border: 1px solid #cfd9ec; border-radius: 10px;
    background: #fff; font: 600 13px 'Raleway', sans-serif; color: #45679d; cursor: pointer; transition: background .15s; }
.mcs-pick__slot:hover { background: #e3efff; }
.mcs-pick__empty { margin: 0; font-size: 13px; color: #9aa4b8; }
/* Кнопка запроса времени не должна липнуть к пояснению под ней. */
.mcs-pick .inb-actions { margin-bottom: 12px; }
.mcs-pick .inb-actions:last-child { margin-bottom: 0; }

/* Кнопка сохранения блока консультации: без отступа липнет к полям выше */
.lms-addon-block > .lms-act { margin-top: 14px; }

/* Подтверждение сохранения — рядом с кнопкой блока консультации */
.lms-addon-save { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 14px; }
.lms-addon-block > .lms-addon-save { margin-top: 14px; }
.lms-saved { display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 14px;
    border-radius: 999px; background: #e6f4ea; color: #1e7d34; font: 600 13px 'Raleway', sans-serif; }
.lms-saved svg, .lms-saved i { width: 15px; height: 15px; }

/* Срок открытия раздела в редакторе курса */
.lms-sec-drip { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 12px;
    font-size: 13px; color: #575757; }
.lms-sec-drip__input { width: 74px; height: 34px; padding: 0 10px; border: 1px solid #e2e8f4;
    border-radius: 10px; background: #fff; font: 600 14px 'Raleway', sans-serif; color: #313131;
    font-variant-numeric: lining-nums tabular-nums; }
.lms-sec-drip__input:focus { border-color: #45679d; outline: none; }
.lms-sec-drip__hint { color: #9aa4b8; }
.lms-field__actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.lms-saved--bad { background: #fdeaea; color: #8a3b3b; }

/* Свёрнутое поле embed у автора */
.lms-embed--fold { border: 1px solid #e2e8f4; border-radius: 12px; padding: 10px 12px; background: #fff; }
.lms-embed__summary { display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; line-height: 1; }
/* у метки вне свёртки есть нижний отступ — в строке он поднимал её над стрелкой */
.lms-embed__summary .lms-embed__label { display: inline-flex; align-items: center; margin: 0; }
.lms-embed__summary .lms-embed__by { display: inline-flex; align-items: center; }
.lms-embed__summary::-webkit-details-marker { display: none; }
.lms-embed__summary::before { content: '▸'; display: inline-flex; align-items: center; justify-content: center;
    width: 12px; height: 16px; color: #9aa4b8; font-size: 12px; line-height: 1; transition: transform .15s; }
.lms-embed--fold[open] .lms-embed__summary::before { transform: rotate(90deg); }
.lms-embed--fold[open] .lms-embed__input { margin-top: 10px; }

/* Вопросик с подсказкой — как у показателей в «Продажах и доходе» */
.lms-hint { position: relative; display: inline-flex; align-items: center; justify-content: center;
    width: 16px; height: 16px; border: 1px solid currentColor; border-radius: 50%; color: #9aa4b8;
    font-size: 10px; font-weight: 700; line-height: 1; cursor: help; }
.lms-hint::after { content: attr(data-tip); position: absolute; bottom: calc(100% + 9px); left: 50%;
    transform: translateX(-50%); z-index: 20; width: 260px; padding: 10px 12px; border-radius: 12px;
    background: #313131; color: #fff; box-shadow: 0 14px 30px -12px rgba(20, 32, 54, .5);
    font: 500 12px/1.5 'Raleway', sans-serif; text-align: left; opacity: 0; visibility: hidden;
    transition: opacity .15s; }
.lms-hint:hover::after, .lms-hint:focus::after { opacity: 1; visibility: visible; }

/* ── Согласование времени консультации ── */
.mcs-offer { margin-top: 12px; padding: 12px 14px; border-radius: 12px; background: #f7faff; border: 1px solid #e2e8f4; }
.mcs-offer--expert { background: #fff8ec; border-color: #f0dcbb; }
.mcs-offer__title { font-weight: 600; font-size: 14px; color: #313131; }
/* Строка ожидания стоит между заголовком и кнопкой — дышит с обеих сторон. */
.mcs-offer__note { margin: 10px 0 12px; font-size: 13px; color: #575757; }
.mcs-offer .inb-actions { margin-top: 0; }

.mcs-modal { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center;
    padding: 20px; background: rgba(20, 32, 54, .45); }
.mcs-modal__box { width: 100%; max-width: 460px; max-height: 90vh; overflow-y: auto; padding: 20px;
    border-radius: 16px; background: #fff; box-shadow: 0 30px 60px -20px rgba(20, 32, 54, .5); }
.mcs-modal__head { display: flex; align-items: center; justify-content: space-between; font-size: 16px; }
.mcs-modal__close { border: 0; background: none; font-size: 24px; line-height: 1; color: #9aa4b8; cursor: pointer; }
.mcs-modal__lead { margin: 8px 0 14px; font-size: 13px; color: #575757; }
.mcs-modal__row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.mcs-modal__drop { flex: 0 0 auto; width: 32px; height: 32px; border: 1px solid #e2e8f4; border-radius: 10px;
    background: #fff; color: #9aa4b8; font-size: 18px; line-height: 1; cursor: pointer; }
.mcs-modal__add { margin: 4px 0 14px; border: 0; background: none; padding: 0; color: #45679d;
    font-size: 13px; font-weight: 600; cursor: pointer; }

/* Task 6: карточка эксперта — оплаченная заявка ждёт согласования времени */
.inb-paid { margin-top: 12px; padding: 12px 14px; border-radius: 12px; background: #f2f8f2; border: 1px solid #d7e8d7; }
.inb-paid__mark { display: inline-block; margin-bottom: 6px; font-size: 12px; font-weight: 600; color: #3f7d46; }
.inb-paid__title { margin: 12px 0 10px; font-size: 14px; font-weight: 600; color: #313131; }
.inb-paid__note { margin: -4px 0 12px; font-size: 13px; color: #575757; }
/* Обе кнопки блока — подтверждение и встречное предложение — одной ширины:
   разная длина подписи не должна выглядеть как разная важность. */
.inb-paid .inb-actions { margin-bottom: 12px; }
.inb-paid .inb-actions:last-child { margin-bottom: 0; }
.inb-paid .inb-actions .inb-btn { min-width: 232px; }
.inb-counter { margin-top: 10px; display: grid; gap: 8px; }
.inb-counter__row { display: flex; gap: 8px; }

/* ── Раздел «Пользователи» ── */
.ausr-search { display: flex; align-items: center; gap: 10px; margin: 16px 0 12px; padding: 0 16px;
    height: 52px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; }
.ausr-search i { width: 18px; height: 18px; color: #9aa4b8; }
.ausr-search input { flex: 1; border: 0; outline: none; background: none; font-size: 14px; color: #313131; }

.ausr-filters { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.ausr-filters__label { margin-right: 4px; font-size: 13px; color: #9aa4b8; }
.ausr-chip { height: 34px; padding: 0 14px; border: 1px solid #e2e8f4; border-radius: 999px; background: #fff;
    font-size: 13px; font-weight: 600; color: #575757; cursor: pointer; }
.ausr-chip:hover { background: #f2f6ff; }
.ausr-chip.is-on { background: #45679d; border-color: #45679d; color: #fff; }

.ausr-table { margin-top: 14px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; overflow: hidden; }
.ausr-row { display: grid; grid-template-columns: 2.2fr 1fr 1fr 1.2fr 1fr 1.2fr; align-items: center;
    gap: 12px; padding: 14px 18px; border-bottom: 1px solid #eef2fa; color: inherit; text-decoration: none; }
.ausr-row:last-child { border-bottom: 0; }
.ausr-row:hover { background: #f7faff; }
.ausr-row--head { background: #f7faff; font-size: 11px; font-weight: 700; letter-spacing: .04em;
    text-transform: uppercase; color: #9aa4b8; }
.ausr-row--head:hover { background: #f7faff; }
.ausr-who { display: flex; align-items: center; gap: 12px; }
.ausr-who b { display: block; font-size: 14px; font-weight: 600; }
.ausr-who em { font-style: normal; font-size: 12px; color: #9aa4b8; }
.ausr-ava { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px;
    border-radius: 50%; background: #e3efff; color: #45679d; font-weight: 700; }
/* Тот же круг, но с лицом. Размеры и скругление уже заданы выше — снимку
   остаётся заполнить круг без искажения пропорций: кадр обрезается, а не
   сжимается. Подложка под картинкой не видна, цвет её не касается. */
img.ausr-ava { object-fit: cover; }
.ausr-role { display: inline-block; padding: 4px 10px; border-radius: 999px; background: #fff4e2;
    font-size: 12px; font-weight: 600; color: #9a6b2a; }
.ausr-coins { font-weight: 700; color: #45679d; }
.ausr-status { display: inline-block; padding: 4px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.ausr-status--active { background: #e8f6ec; color: #3f7d46; }
.ausr-status--blocked { background: #fdeaea; color: #a33; }
.ausr-status--unverified { background: #fff4e2; color: #9a6b2a; }
.ausr-empty { margin-top: 16px; padding: 28px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px;
    text-align: center; color: #575757; }
.ausr-empty p { margin: 0 0 12px; }

@media (max-width: 900px) {
    .ausr-row { grid-template-columns: 1fr 1fr; }
    .ausr-row--head { display: none; }
}


/* Карточка пользователя. */
.ausr-back { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 14px;
    font-size: 13px; font-weight: 600; color: #45679d; text-decoration: none; }
.ausr-grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 18px; align-items: start; }
.ausr-main, .ausr-side { display: grid; gap: 14px; }
.ausr-person { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; padding: 18px;
    background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; }
.ausr-person__who { flex: 1; }
.ausr-person__who b { display: block; font-size: 18px; }
.ausr-person__who em { font-style: normal; font-size: 13px; color: #9aa4b8; }
.ausr-ava--lg { width: 54px; height: 54px; font-size: 20px; }
.ausr-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px;
    padding: 18px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; }
.ausr-facts span { display: block; font-size: 12px; color: #9aa4b8; }
.ausr-facts b { font-size: 14px; }
.ausr-block { padding: 18px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; }
.ausr-block h3 { margin: 0 0 12px; font-size: 15px; }
.ausr-line { display: flex; align-items: center; justify-content: space-between; gap: 12px;
    padding: 10px 0; border-bottom: 1px solid #eef2fa; font-size: 13px; }
.ausr-line:last-child { border-bottom: 0; }
.ausr-line em { display: block; font-style: normal; font-size: 12px; color: #9aa4b8; }
.ausr-line__right { display: flex; align-items: center; gap: 10px; }
.ausr-none { margin: 0; font-size: 13px; color: #9aa4b8; }
.ausr-plus { color: #3f7d46; }
.ausr-minus { color: #a33; }

@media (max-width: 1100px) {
    .ausr-grid { grid-template-columns: 1fr; }
}
.ausr-act { display: grid; gap: 10px; padding: 18px; background: #fff; border: 1px solid #e2e8f4; border-radius: 14px; }
.ausr-act h3 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 15px; }
.ausr-act h3 i { width: 18px; height: 18px; color: #45679d; }
.ausr-seg { display: flex; gap: 6px; flex-wrap: wrap; }
.ausr-seg__btn { height: 34px; padding: 0 12px; border: 1px solid #e2e8f4; border-radius: 10px; background: #fff;
    font-size: 13px; font-weight: 600; color: #575757; cursor: pointer; }
.ausr-seg__btn.is-on { background: #45679d; border-color: #45679d; color: #fff; }
.ausr-hint { margin: 0; font-size: 12px; color: #9aa4b8; }
.ausr-danger { background: #fff; border-color: #f0c9c9; color: #a33; }
.ausr-danger:hover { background: #fdeaea; color: #a33; }

/* Статусы заказа в карточке пользователя: pending и failed без этих правил
   выходят бейджем без фона — цвета в тон соседним .ausr-status--*. */
.inb-status--pending { background: #fff4e2; color: #9a6b2a; }
.inb-status--failed { background: #fdeaea; color: #a33; }

/* Предупреждение о последствиях смены роли в карточке пользователя — видно
   до нажатия кнопки «Сменить роль» (задача 2 итогового ревью раздела). */
.ausr-warn { display: grid; gap: 6px; padding: 12px 14px; background: #fdf3e2; border: 1px solid #f0dcb4; border-radius: 10px; }
.ausr-warn p { margin: 0; font-size: 12px; color: #8a6d3b; line-height: 1.5; }

/* ── Вкладки, период и пагинация в карточке пользователя (покупки,
   консультации, движения GessCoin в одном блоке вместо трёх списков) ── */
.ausr-tabs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-bottom: 14px;
    padding-bottom: 12px; border-bottom: 1px solid #f0f3fa; overflow-x: auto; }
.ausr-tab { height: 36px; padding: 0 14px; border: 0; border-radius: 10px; background: none;
    font-size: 14px; font-weight: 600; color: #575757; cursor: pointer; white-space: nowrap; }
.ausr-tab:hover { background: #f2f6ff; }
.ausr-tab.is-on { background: #45679d; color: #fff; }
.ausr-tab__count { margin-left: 4px; font-size: 12px; opacity: .75; font-variant-numeric: tabular-nums; }
.ausr-tools { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
    gap: 12px; margin-bottom: 14px; }
.ausr-tools__group { display: flex; flex-wrap: wrap; gap: 6px; }
.ausr-tools__size { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #9aa4b8; flex: none; }
.ausr-tools__size .lms-field__control { width: auto; height: 38px; padding: 0 10px; border-radius: 11px; }
.ausr-range { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 14px; }
.ausr-range label { display: flex; flex-direction: column; gap: 6px; font-size: 12px; font-weight: 600; color: #9aa4b8; }
.ausr-range .lms-field__control { width: auto; height: 38px; }
.ausr-tab-empty { display: flex; justify-content: center; padding-top: 14px; }

@media (max-width: 600px) {
    .ausr-tools { flex-direction: column; align-items: stretch; }
    .ausr-tools__size { justify-content: space-between; }
    .ausr-range { flex-direction: column; }
}

/* ---------- Главная покупателя v2 (buyer-home) ----------
   Page-scoped: классы с префиксом bh- используются только на этой странице
   и не пересекаются с общими .card/.btn--primary остального портала. */
.bh { max-width: 1000px; display: flex; flex-direction: column; gap: 18px; }
.bh__hi { margin: 0 0 4px; font-weight: 800; font-size: 28px; letter-spacing: -.02em; color: var(--v2-text); }
.bh__hi-sub { margin: 0; font-size: 15px; color: var(--v2-text2); }

.bh__hero { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
.bh__hero > .bh__primary { grid-column: span 2; min-width: 0; }
.bh__aside { display: grid; grid-template-columns: 1fr; gap: 14px; align-items: start; }
@media (max-width: 1023px) {
    /* Одна колонка: растяжка на две дорисовала бы вторую и сломала ряд. */
    .bh__hero { grid-template-columns: 1fr; }
    .bh__hero > .bh__primary { grid-column: auto; }
}
@media (min-width: 768px) and (max-width: 1023px) { .bh__aside { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); } }

.bh-card { background: var(--v2-surface); border-radius: 18px; box-shadow: var(--v2-shadow); }
.bh-eyebrow { display: flex; align-items: center; gap: 9px; font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--v2-text2); margin-bottom: 5px; }
.bh-eyebrow--accent { color: #8A4700; margin-bottom: 0; }
.bh-eyebrow [data-lucide] { width: 18px; height: 18px; }

/* Текущий курс */
.bh-course { padding: 20px; }
.bh-course__row { display: flex; gap: 20px; flex-wrap: wrap; }
.bh-course__cover {
    /* Высоту задаёт сама обложка, а не коробка: при фиксированной пропорции
       картинка другого формата вписывалась с тёмными полями сверху и снизу.
       align-self — чтобы строка не растягивала коробку на свою высоту. */
    flex: 1 1 240px; align-self: flex-start; min-width: 0; max-width: 300px; border-radius: 12px;
    background: linear-gradient(140deg, #26231F, #4A443C); display: flex; align-items: center; justify-content: center;
    color: rgba(255, 255, 255, .9); overflow: hidden;
}
/* Пропорция нужна только там, где обложки нет вовсе: иначе подложке со значком
   неоткуда взять высоту. С обложкой высоту задаёт сама картинка — поэтому полей
   сверху и снизу не бывает ни при какой её пропорции. */
.bh-course__cover:not(:has(img)) { aspect-ratio: 16/9; }
/* Обложка показывается целиком и без полей: ширину задаёт коробка, высоту —
   сама картинка. Пропорции у обложек разные, и коробка под одну резала бы
   другую или добавляла бы поля. */
.bh-course__cover img { width: 100%; height: auto; display: block; }
.bh-course__body { flex: 3 1 220px; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.bh-course__title { font-size: 22px; font-weight: 700; letter-spacing: -.01em; line-height: 1.25; color: var(--v2-text); }
.bh-course .course-detail__chips { margin: 6px 0 0; }
.bh-course__progress-row { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.bh-course__pct { font-size: 14px; font-weight: 600; color: var(--v2-text); }
.bh-course__next { font-size: 13px; color: var(--v2-text2); }
.bh-progress { height: 8px; border-radius: 99px; background: var(--v2-surface-subtle); overflow: hidden; }
.bh-progress__bar { height: 100%; background: var(--v2-action); transition: width .3s; }
.bh-course__actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 2px; }

/* Кнопки и ссылки */
.bh-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 9px; min-height: 48px;
    padding: 0 22px; border-radius: 12px; font-weight: 600; font-size: 15px; cursor: pointer;
    text-decoration: none; border: none; transition: background .15s, border-color .15s;
}
.bh-btn [data-lucide] { width: 18px; height: 18px; }
.bh-btn--black { background: var(--v2-action); color: #fff; }
.bh-btn--black:hover { background: var(--v2-action-hover); color: #fff; }
.bh-btn--ghost { background: var(--v2-surface); border: 1px solid var(--v2-border); color: var(--v2-text); }
.bh-btn--ghost:hover { border-color: var(--v2-text); }
.bh-btn--vk { background: #07f; color: #fff; width: auto; }
.bh-btn--vk:hover { background: #06e; color: #fff; }
.bh-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--v2-focus); }
/* Подчёркивание ссылок дашборда — цветом действия кабинета (в макете 456-1326
   они синие). Общий --v2-accent для этого не годится: тем же токеном покрашена
   витрина — кнопка призыва, галочки списков и ссылки входа, а витрину эта
   задача не трогает. */
.bh-link { font-size: 14px; font-weight: 600; color: var(--v2-text); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--v2-action); }
.bh-link:hover { color: var(--v2-text); text-decoration-thickness: 2px; }
.bh-link:focus-visible { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--v2-focus); border-radius: 4px; }
.bh-link--top { margin-top: 8px; }
.bh-link--auto { margin-top: auto; }

/* Пустые состояния курса: «всё пройдено» / «обучение не начато» */
.bh-empty { padding: 26px; display: flex; align-items: flex-start; gap: 18px; flex-wrap: wrap; }
.bh-empty__icon { width: 56px; height: 56px; flex: none; border-radius: 15px; display: flex; align-items: center; justify-content: center; }
.bh-empty__icon [data-lucide] { width: 26px; height: 26px; }
.bh-empty__icon--done { background: var(--v2-active-bg); color: #8A4700; }
.bh-empty__icon--nofree { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.bh-empty__body { flex: 1; min-width: 240px; }
.bh-empty__title { font-size: 20px; font-weight: 700; letter-spacing: -.01em; color: var(--v2-text); }
.bh-empty__text { margin: 6px 0 14px; font-size: 14px; color: var(--v2-text2); line-height: 1.6; max-width: 480px; }
.bh-empty__actions { display: flex; gap: 10px; flex-wrap: wrap; }

/* «Начните обучение» — бесплатные материалы вместо купленного курса */
.bh-course--empty .bh-empty__title { font-size: 20px; }
.bh-free-list { display: flex; flex-direction: column; gap: 10px; margin: 12px 0 16px; }
.bh-free-row {
    display: flex; align-items: center; gap: 12px; border-radius: 12px;
    padding: 12px 14px; background: var(--v2-sidebar-bg); text-decoration: none; color: inherit; min-height: 48px;
}
.bh-free-row__icon { width: 38px; height: 38px; flex: none; border-radius: 11px; background: var(--v2-surface-subtle); color: var(--v2-text2); display: flex; align-items: center; justify-content: center; }
.bh-free-row__text { flex: 1; min-width: 0; }
.bh-free-row__title { display: block; font-size: 15px; font-weight: 600; color: var(--v2-text); }
.bh-free-row__meta { display: block; font-size: 13px; color: var(--v2-text2); }
.bh-badge-free { display: inline-flex; flex: none; align-items: center; font-size: 12px; font-weight: 700; padding: 5px 12px; border-radius: 99px; color: var(--v2-text); background: #fff; border: 1px solid var(--v2-text); white-space: nowrap; }

/* Консультация */
.bh-consult { padding: 18px; display: flex; flex-direction: column; gap: 10px; }
.bh-consult--has { border-left: 3px solid var(--v2-accent); }
.bh-consult__when { font-size: 19px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--v2-text); }
.bh-consult__expert { font-size: 14px; color: var(--v2-text2); margin-top: 2px; }
.bh-consult__title { font-size: 18px; font-weight: 700; color: var(--v2-text); }
.bh-consult__text { font-size: 14px; color: var(--v2-text2); margin-top: 3px; line-height: 1.55; }
.bh-pill { display: inline-flex; align-items: center; gap: 7px; align-self: flex-start; font-size: 12px; font-weight: 700; padding: 5px 12px; border-radius: 99px; }
.bh-pill [data-lucide] { width: 13px; height: 13px; }
.bh-pill--ok { color: #1E7D34; background: #E7F3EA; border: 1px solid #C6E3CE; }
.bh-pill--muted { color: var(--v2-text2); background: var(--v2-surface-subtle); }

/* GessCoin */
.bh-coin { padding: 18px; display: flex; flex-direction: column; gap: 10px; }
.bh-coin__balance { font-size: 26px; font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; color: var(--v2-text); }
.bh-coin__move { font-size: 14px; color: #1E7D34; font-weight: 600; margin-top: 3px; font-variant-numeric: tabular-nums; }
.bh-coin__hint { font-size: 13px; color: var(--v2-text2); margin-top: 5px; line-height: 1.55; }

/* Быстрые переходы */
.bh-quick { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.bh-quick__item {
    border: 2px solid transparent;
    background: var(--v2-surface); border-radius: 18px; box-shadow: var(--v2-shadow);
    padding: 16px; min-height: 48px; display: flex; align-items: center; gap: 12px; text-decoration: none; color: inherit;
}
/* Наведение на быструю плитку — синяя обводка (просьба заказчика 22.08.2026).
   В покое та же рамка стоит прозрачной: иначе плитка подпрыгивала бы на два
   пикселя, когда рамка появляется. */
.bh-quick__item:hover { border-color: #6B93C7; }
.bh-quick__item:focus-visible { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--v2-focus); }
.bh-quick__icon { width: 40px; height: 40px; flex: none; border-radius: 11px; background: var(--v2-surface-subtle); color: var(--v2-text); display: flex; align-items: center; justify-content: center; }
.bh-quick__text { min-width: 0; }
.bh-quick__title { display: block; font-size: 15px; font-weight: 700; color: var(--v2-text); }
.bh-quick__desc { display: block; font-size: 12px; color: var(--v2-text2); margin-top: 1px; }

/* Рекомендации */
.bh-section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.bh-section-title { margin: 0; font-weight: 700; font-size: 18px; letter-spacing: -.01em; color: var(--v2-text); }
.bh-recs { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.bh-rec { overflow: hidden; display: flex; flex-direction: column; }
.bh-rec__cover { aspect-ratio: 16/9; background: linear-gradient(140deg, #26231F, #4A443C); display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, .85); }
.bh-rec__cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bh-rec__body { padding: 14px; display: flex; flex-direction: column; gap: 4px; flex: 1; }
.bh-rec__title { font-size: 15px; font-weight: 700; line-height: 1.3; color: var(--v2-text); }
.bh-rec__author { font-size: 13px; color: var(--v2-text2); }
.bh-rec__meta { font-size: 13px; color: var(--v2-text2); font-variant-numeric: tabular-nums; }
.bh-recs-empty { padding: 18px; display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.bh-recs-empty__text { flex: 1; min-width: 180px; font-size: 14px; color: var(--v2-text2); line-height: 1.55; }

/* Баннер рассылки VK — та же условная логика, что и раньше, только в токенах v2 */
.bh-newsletter {
    position: relative; background: var(--v2-surface); border-radius: 18px;
    box-shadow: var(--v2-shadow); padding: 20px; margin-bottom: 20px; display: flex; align-items: center;
    justify-content: space-between; gap: 16px; flex-wrap: wrap;
}
.bh-newsletter__title { font-weight: 600; color: var(--v2-text); }
.bh-newsletter__text { color: var(--v2-text2); font-size: 14px; }
.bh-newsletter__close { position: absolute; top: 10px; right: 12px; }
.bh-newsletter__close button { background: none; border: none; cursor: pointer; color: var(--v2-text2); font-size: 20px; line-height: 1; }

/* Мобильный: CTA и обложка курса — во всю ширину карточки; ссылки получают зону 44×44. */
@media (max-width: 767px) {
    .bh-btn { width: 100%; }
    .bh-course__cover { flex: 1 1 100%; width: 100%; max-width: none; }
    .bh-empty__actions { flex-direction: column; align-items: stretch; }
    .bh-empty__actions .bh-btn { width: 100%; }
    .bh-free-row { flex-wrap: wrap; }
    .bh-free-row__text { flex: 1 1 100%; order: 2; }
    .bh-badge-free { order: 3; margin-left: auto; }
    .bh-link, .bh-link--top, .bh-link--auto { display: inline-flex; align-items: center; min-height: 44px; min-width: 44px; }
    .bh-recs-empty .bh-btn { width: auto; }
}

/* На планшете (tablet-primary-768.png) быстрые переходы и рекомендации идут в три
   колонки — отдельно от пары «Консультация + GessCoin» (.bh__aside — две колонки).
   Правило намеренно объявлено ПОСЛЕ базовых .bh-quick/.bh-recs (repeat(auto-fit,
   minmax(200px,1fr))) выше по файлу: при равной специфичности класса медиа-условие
   само по себе не поднимает приоритет — более раннее по тексту правило внутри
   @media проигрывает более позднему безусловному с тем же селектором. */
@media (min-width: 768px) and (max-width: 1023px) {
    .bh-quick, .bh-recs { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ── Auth v2: вход/регистрация/пароль/подтверждение внутри общей Public Shell ──
   Новые .auth-v2__* классы не переиспользуют .field/.input/.btn/.consent —
   те общие для всего личного кабинета (партнёрские формы, профиль, админка) и
   несут старую синюю палитру (--brand). Auth v2 самодостаточен на v2-токенах,
   чтобы не трогать вид кабинета и не тянуть синий за собой. */
.auth-v2__main { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 14px; padding: 48px 16px 56px; }
.auth-v2__card { width: 100%; max-width: 520px; background: var(--v2-surface); border: 1px solid var(--v2-border);
    border-radius: 20px; box-shadow: var(--v2-shadow); padding: 36px 32px; }
@media (max-width: 480px) {
    .auth-v2__card { padding: 28px 20px; }
}
.auth-v2__title { margin: 0 0 6px; font-weight: 800; font-size: 26px; line-height: 1.2; letter-spacing: -.01em;
    color: var(--v2-text); }
.auth-v2__lead { margin: 0 0 22px; font-size: 14px; line-height: 1.5; color: var(--v2-text2); }

.auth-v2__alert { display: flex; align-items: flex-start; gap: 10px; border-radius: 12px; padding: 12px 14px;
    font-size: 14px; font-weight: 500; line-height: 1.4; margin-bottom: 20px; }
.auth-v2__alert--error { background: #FBE7E7; color: #C62828; }
.auth-v2__alert--ok { background: #E3F2E3; color: #2E7D32; }
.auth-v2__alert--info { background: var(--v2-surface-subtle); color: var(--v2-text); }

.auth-v2__field { display: block; margin-bottom: 18px; }
.auth-v2__label { display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
    font-weight: 600; font-size: 13px; margin-bottom: 7px; color: var(--v2-text); }
.auth-v2__label a { font-weight: 600; color: var(--v2-accent-hover); text-decoration: underline;
    text-underline-offset: 2px; }
.auth-v2__label a:hover { color: var(--v2-accent); }
.auth-v2__input { display: block; width: 100%; height: 46px; padding: 0 14px; border: 1px solid var(--v2-border);
    border-radius: 12px; background: var(--v2-surface); font: 400 16px 'Raleway', sans-serif; color: var(--v2-text);
    outline: none; transition: border-color .15s; }
.auth-v2__input::placeholder { color: var(--v2-text2); }
.auth-v2__input--error { border-color: #C62828; }
.auth-v2__error { display: block; margin-top: 6px; font-size: 13px; color: #C62828; }

.auth-v2__password { position: relative; }
.auth-v2__password .auth-v2__input { padding-right: 50px; }
.auth-v2__toggle { position: absolute; top: 0; right: 0; width: 44px; height: 44px; display: flex;
    align-items: center; justify-content: center; background: none; border: none; padding: 0; cursor: pointer;
    color: var(--v2-text2); }
.auth-v2__toggle:hover { color: var(--v2-text); }

/* Общий чекбокс: и remember-me на login, и обязательное согласие на register. */
.auth-v2__check { display: flex; align-items: flex-start; gap: 12px; min-height: 44px; margin-bottom: 20px;
    cursor: pointer; }
.auth-v2__check input { position: absolute; opacity: 0; width: 0; height: 0; }
.auth-v2__check-box { width: 20px; height: 20px; flex: none; margin-top: 12px; border: 1.5px solid var(--v2-border);
    border-radius: 6px; background: var(--v2-surface); position: relative; transition: background .15s, border-color .15s; }
.auth-v2__check input:checked + .auth-v2__check-box { background: var(--v2-action); border-color: var(--v2-action); }
.auth-v2__check input:checked + .auth-v2__check-box::after { content: ""; position: absolute; left: 6px; top: 3px;
    width: 5px; height: 10px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }
.auth-v2__check-text { font-size: 13px; line-height: 1.5; color: var(--v2-text2); padding: 11px 0; }
.auth-v2__check-text a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.auth-v2__check-text a:hover { color: var(--v2-accent); }

.auth-v2__submit { display: flex; align-items: center; justify-content: center; width: 100%; height: 48px;
    border: none; border-radius: 12px; background: var(--v2-action); color: #fff; font-weight: 700; font-size: 15px;
    cursor: pointer; transition: background .15s; }
.auth-v2__submit:hover { background: var(--v2-action-hover); }
.auth-v2__submit:disabled { background: var(--v2-surface-subtle); color: var(--v2-text2); cursor: not-allowed; }

.auth-v2__divider { display: flex; align-items: center; gap: 12px; margin: 20px 0; font-size: 13px;
    color: var(--v2-text2); }
.auth-v2__divider::before, .auth-v2__divider::after { content: ""; flex: 1; height: 1px; background: var(--v2-border); }

/* VK — единственное разрешённое синее пятно вне тумблера cookie-баннера,
   тот же #07f/#06e, что был у старой .btn--vk — цвет провайдера, не темы. */
.auth-v2__provider { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%;
    height: 48px; border-radius: 12px; border: none; background: #07f; color: #fff; font-weight: 600; font-size: 15px;
    text-decoration: none; transition: background .15s; }
.auth-v2__provider:hover { background: #06e; color: #fff; }

.auth-v2__foot { margin: 20px 0 0; text-align: center; font-size: 14px; color: var(--v2-text2); }
.auth-v2__foot a { font-weight: 600; color: var(--v2-accent-hover); text-decoration: underline;
    text-underline-offset: 2px; }
.auth-v2__foot a:hover { color: var(--v2-accent); }

.auth-v2__back { display: inline-flex; align-items: center; height: 44px; font-size: 14px; font-weight: 600;
    color: var(--v2-text2); text-decoration: none; }
.auth-v2__back:hover { color: var(--v2-text); }

/* Course Catalog v2 */
/* Page-specific: .lms-mat__head/.lms-mat__title/.lms-cat__lead делят разметку
   и CSS с «Библиотекой знаний» (см. Knowledge Library v2 ниже) и продажами
   партнёра (подтверждено grep) — их правила не трогаем, здесь только новые
   классы для этой страницы. .lms-catalog/.cat-card*/.cat-grid/.cover-act*/
   .lib__empty*/.lms-pagination больше не общие — переведены на
   .library-v2*/.library-card* в задаче 2026-08-11-02. */
.ccv2 { color: var(--v2-text); }

.ccv2__controls { display: flex; align-items: center; justify-content: space-between; gap: 16px;
    flex-wrap: wrap; margin-bottom: 18px; }
.ccv2__search { min-height: 44px; width: 100%; max-width: 320px; padding: 0 16px; border: 1px solid var(--v2-border);
    border-radius: 12px; background: var(--v2-surface); color: var(--v2-text); font: 500 14px 'Raleway', sans-serif;
    outline: none; transition: border-color .15s; }
.ccv2__search::placeholder { color: var(--v2-text2); }
.ccv2__search:focus-visible { outline: none; border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212, 101, 0, .18); }

.ccv2__tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.ccv2__tab { min-height: 44px; padding: 0 16px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; cursor: pointer;
    transition: border-color .15s, background .15s, color .15s; }
.ccv2__tab:hover:not(.is-active) { border-color: var(--v2-accent); }
.ccv2__tab.is-active { border-color: var(--v2-action); background: var(--v2-action); color: #fff; }
.ccv2__tab:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.ccv2__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; }
.ccv2__pagination { margin-top: 24px; }

.cc-card { background: var(--v2-surface); border-radius: 18px; overflow: hidden;
    box-shadow: var(--v2-shadow); display: flex; flex-direction: column; }
.cc-card__cover { position: relative; display: flex; align-items: center; justify-content: center;
    overflow: hidden; }
.cc-card__cover-empty { background: var(--v2-shell-header); color: #fff; }
.cc-card__cover img { width: 100%; height: 100%; object-fit: cover; }
.cc-card__status { position: absolute; top: 10px; left: 10px; display: inline-flex; align-items: center; gap: 6px;
    padding: 5px 10px; border-radius: 999px; background: #e6f4ea; color: #1e7d34; font-size: 12px; font-weight: 600; }
.cc-card__status i { width: 13px; height: 13px; }

.cc-card__body { padding: 16px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.cc-card__title { margin: 0; font: 700 16px 'Raleway', sans-serif; line-height: 1.3; color: var(--v2-text); }
.cc-card__meta { font-size: 13px; color: var(--v2-text2); }
/* Автор рендерится общим partials/author (shared с Библиотекой знаний,
   страницей курса и т.д. — их .author-link/.author-academy не трогаем).
   Здесь только card-scoped переопределение цвета на вторичный v2-текст. */
.cc-card .author-link, .cc-card .author-academy { color: var(--v2-text2); }
.cc-card .author-link:hover { color: var(--v2-text2); text-decoration: underline; }
/* Зазор 6 — тот же, что на витрине и в карточке покупки: строка цены везде
   держит плашки на своей строке одним числом, а не тремя разными. */
.cc-card__price { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 2px; }
.cc-card__rub { font: 700 16px 'Raleway', sans-serif; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.cc-card__free { font-size: 13px; color: var(--v2-text2); }
.cc-card__open { font: 700 14px 'Raleway', sans-serif; color: #1e7d34; }

.cc-card__action { margin-top: auto; display: flex; min-height: 44px; align-items: center; justify-content: center;
    border-radius: 12px; font: 600 14px 'Raleway', sans-serif; cursor: pointer; text-decoration: none;
    transition: background .15s, border-color .15s, color .15s; }
.cc-card__action--secondary { border: 1px solid var(--v2-border); background: var(--v2-surface); color: var(--v2-text); }
/* Наведение — как на витрине: заливка и белый текст. Цвет текста задан явно,
   потому что глобальное a:hover (a { color: var(--brand) }) перекрашивает
   ссылки-кнопки; тот же приём, что у .inb-btn--go. */
.cc-card__action--secondary:hover,
.library-card__action:hover { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.cc-card__action--primary { border: 1px solid var(--v2-action); background: var(--v2-action); color: #fff; }
.cc-card__action--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.cc-card__action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.ccv2__empty { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center;
    padding: 48px 24px; background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 20px; }
.ccv2__empty-icon { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px;
    border-radius: 15px; background: var(--v2-surface-subtle); color: var(--v2-text2); }
.ccv2__empty-icon i { width: 26px; height: 26px; }
.ccv2__empty h4 { margin: 0; font: 700 19px 'Raleway', sans-serif; color: var(--v2-text); }
.ccv2__empty p { margin: 0; max-width: 520px; font-size: 14px; line-height: 1.6; color: var(--v2-text2); }
.ccv2__empty-action { display: inline-flex; min-height: 44px; align-items: center; justify-content: center;
    padding: 0 20px; border: none; border-radius: 12px; background: var(--v2-action); color: #fff;
    font: 600 14px 'Raleway', sans-serif; cursor: pointer; transition: background .15s; }
.ccv2__empty-action:hover { background: var(--v2-action-hover); color: #fff; }
.ccv2__empty-action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

@media (max-width: 767px) {
    .ccv2__controls { align-items: stretch; flex-direction: column; }
    .ccv2__search { max-width: none; }
    .ccv2__grid { grid-template-columns: minmax(0, 1fr); }
    .cc-card__action, .ccv2__empty-action { width: 100%; }
}
/* End Course Catalog v2 */

/* Knowledge Library v2 */
.library-v2 { color: var(--v2-text); }
.library-v2__empty { text-align: center; padding: 48px 20px; color: var(--v2-text2); background: var(--v2-surface);
    border: 1px dashed var(--v2-border); border-radius: 20px; }
.library-v2__empty-icon { width: 56px; height: 56px; margin: 0 auto 14px auto; border-radius: 16px;
    background: var(--v2-surface-subtle); color: var(--v2-text2); display: flex; align-items: center; justify-content: center; }
.library-v2__empty a { color: var(--v2-accent-hover); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
.library-v2__empty a:hover { color: var(--v2-accent); }

.library-v2__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; }
.library-card { background: var(--v2-surface); border-radius: 18px; overflow: hidden;
    box-shadow: var(--v2-shadow); display: flex; flex-direction: column; }
.library-card__cover { position: relative; display: flex; align-items: center; justify-content: center;
    overflow: hidden; background: var(--v2-shell-header); }
.library-card__cover img { width: 100%; height: 100%; object-fit: cover; }
.library-card__body { padding: 16px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.library-card__title { margin: 0; font: 700 16px 'Raleway', sans-serif; line-height: 1.3; color: var(--v2-text); }
.library-card__meta { font-size: 13px; color: var(--v2-text2); }
/* Автор рендерится общим partials/author (shared с каталогом и «Моими
   курсами» — их .author-link/.author-academy не трогаем). Здесь только
   card-scoped переопределение цвета на вторичный v2-текст. */
.library-card .author-link, .library-card .author-academy { color: var(--v2-text2); }
.library-card .author-link:hover { color: var(--v2-text2); text-decoration: underline; }
.library-card__price { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
.library-card__action { margin-top: auto; min-height: 44px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; cursor: pointer;
    text-decoration: none; display: flex; align-items: center; justify-content: center; transition: all .15s; }

.library-card__action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.library-card__toggle { position: absolute; top: 10px; right: 10px; display: inline-flex; align-items: center; gap: 6px;
    height: 36px; width: 36px; justify-content: center; border-radius: 50%; cursor: pointer; transition: all .15s;
    font: 600 12px 'Raleway', sans-serif; backdrop-filter: blur(6px); box-shadow: 0 2px 10px rgba(23,21,18,.28);
    background: rgba(255,255,255,.92); border: 1px solid rgba(255,255,255,.75); color: var(--v2-text); z-index: 2; }
.library-card__toggle i { width: 18px; height: 18px; }
.library-card__toggle:hover { transform: scale(1.08); box-shadow: 0 4px 16px rgba(23,21,18,.34); }
.library-card__toggle--added { background: rgba(230,244,234,.94); border-color: rgba(30,125,52,.35); color: #1e7d34; }
.library-card__toggle:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.library-card__toggle-label { display: none; }
.library-v2__pager { margin-top: 24px; }

@media (max-width: 700px) {
    .library-card__toggle { width: auto; padding: 0 12px; border-radius: 999px; }
    .library-card__toggle-label { display: inline; }
}
@media (max-width: 767px) {
    .library-v2__grid { grid-template-columns: minmax(0, 1fr); }
    .library-card__action { width: 100%; }
}
/* End Knowledge Library v2 */

/* Public Course v2 */
.public-course-v2 { color: var(--v2-text); }
/* Гость и авторизованный пользователь без доступа рендерятся одним Blade-
   блоком в course-show.blade.php (ветка «не записан», не входит в задачу
   учебный вид) — единственное отличие в разметке: корневой класс
   (.public-course-v2 у гостя, .course-offer-v2 у авторизованного) и CTA
   снизу карточки покупки («Войти, чтобы купить» против «Купить»/«Начать
   бесплатно»). Содержательная стилизация — в секции Course Offer v2 ниже:
   она применяется к тем же .course-detail__*/.buy-card*/.coins-box*
   классам независимо от того, какой из двух корней их сейчас оборачивает. */
/* End Public Course v2 */

/* Course Offer v2 */
.course-offer-v2 { color: var(--v2-text); }

.course-detail__back { display: inline-flex; align-items: center; gap: 8px; background: none; border: none;
    padding: 0; cursor: pointer; color: var(--v2-text2); font: 600 14px 'Raleway', sans-serif; margin-bottom: 14px;
    text-decoration: none; }
.course-detail__back:hover { color: var(--v2-text); }
.course-detail__back:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; border-radius: 6px; }
.course-detail__cover { border-radius: 18px; display: flex; align-items: center; justify-content: center;
    overflow: hidden; background: var(--v2-shell-header); }
.course-detail__cover img { width: 100%; height: 100%; object-fit: cover; }

/* Карточки на голубом холсте кабинета отделяются белой рамкой: обложки бывают
   светлыми и сливаются с фоном. Правило одно на пять мест — библиотека,
   каталог, «Мои курсы», «Для вас» и обложка материала; пять копий разошлись бы
   на первой же правке. Стоит ПОСЛЕ всех определений: специфичность равная,
   решает порядок. */
.library-card, .cc-card, .myc-card, .bh-rec, .course-detail__cover { border: 2px solid #fff; }
.course-detail__grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 24px; margin-top: 20px; }
/* Белый блок под описанием и программой (макет 548-6955). Рамки нет: её роль
   играет тень, и та же тень у карточки покупки — в макете оба блока
   выглядят одинаково. */
.course-detail__panel { background: var(--v2-surface); border-radius: 18px; padding: 28px 24px;
    box-shadow: var(--v2-shadow-pub); min-width: 0; }
.course-detail__title { margin: 0 0 6px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; color: var(--v2-text); }
.course-detail__meta { margin: 0 0 18px; font-size: 14px; color: var(--v2-text2); }
.course-detail__meta .author-link, .course-detail__meta .author-academy { color: var(--v2-text2); }
.course-detail__meta .author-link:hover { color: var(--v2-text2); text-decoration: underline; }
.course-detail__desc { margin: 0 0 20px; font-size: 15px; color: var(--v2-text); line-height: 1.6; }
.course-detail__prog-title { margin: 0 0 10px; font: 700 17px 'Raleway', sans-serif; color: var(--v2-text); }
.course-detail__prog { display: flex; flex-direction: column; gap: 8px; }
.course-detail__prog-item { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--v2-text); }
.course-detail__prog-num { width: 24px; height: 24px; flex: none; border-radius: 7px; background: var(--v2-surface-subtle);
    color: var(--v2-text2); display: flex; align-items: center; justify-content: center; font: 700 12px 'Raleway', sans-serif;
    font-variant-numeric: lining-nums tabular-nums; }
.course-detail__prog-num--dot { font-size: 0; }
.course-detail__prog-num--dot::before { content: ""; display: block; width: 6px; height: 6px; border-radius: 50%;
    background: var(--v2-text2); }

/* Просьба заказчика 20.08.2026: у карточки покупки была еле заметная рамка, у
   левого блока её нет, и в макете нет у обоих. Убрана; заодно тень взята та
   же, что у левого блока, — иначе «одинаково» кончалось бы на рамке. */
.buy-card { align-self: start; background: var(--v2-surface); border-radius: 18px;
    padding: 20px; box-shadow: var(--v2-shadow-pub); display: flex; flex-direction: column; gap: 14px; }
/* Зазор 6, как на витрине: карточка покупки — 300 px, и при зазоре 8 строка
   «цена — прежняя цена — процент — срок» не помещается (замер 25.08.2026:
   надо 302, есть 300), а плашки уезжают на свою строку. */
.buy-card__price { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.buy-card__rub { font: 800 24px 'Raleway', sans-serif; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.buy-card__addon { position: relative; display: flex; align-items: flex-start; gap: 10px; background: var(--v2-surface-subtle);
    border: 1px solid var(--v2-border); border-radius: 12px; padding: 12px; opacity: .65; }
.buy-card__addon-check { width: 22px; height: 22px; flex: none; border: 2px solid var(--v2-border); border-radius: 6px;
    background: var(--v2-surface); }
.buy-card__addon-title { display: block; font-weight: 600; font-size: 14px; color: var(--v2-text); }
.buy-card__addon-sub { display: block; font-size: 12px; color: var(--v2-text2); margin-top: 2px; }
.buy-card__soon { position: absolute; top: 10px; right: 10px; font-size: 11px; font-weight: 700; color: #8a6d3b;
    background: #fdf3e2; padding: 2px 8px; border-radius: 999px; }
.buy-card__total { display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-top: 4px;
    border-top: 1px solid var(--v2-border); }
.buy-card__total-label { color: var(--v2-text2); }
.buy-card__total-val { font: 800 20px 'Raleway', sans-serif; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.buy-card__due { display: flex; align-items: center; justify-content: space-between; font-size: 14px; color: var(--v2-text2); }
.buy-card__due b { font-weight: 800; font-size: 22px; color: var(--v2-text); font-variant-numeric: tabular-nums; }

/* Синяя, как в макете (решение заказчика 20.08.2026), а не чёрная кнопка
   действия кабинета: карточка покупки живёт на витрине, и цвет у неё тот же,
   что у синих кнопок гостевой главной. Красится токеном витрины, а не
   значением: --pub-blue-3 и есть #628abe. Общий --v2-action не трогаем — на
   нём держатся кнопки всего кабинета. */
.buy-card__buy { display: flex; align-items: center; justify-content: center; min-height: 54px; border: none;
    border-radius: 14px; background: var(--pub-blue-3); color: #fff; font: 600 17px 'Raleway', sans-serif;
    text-decoration: none; cursor: pointer; }
.buy-card__buy:hover { background: var(--pub-blue); color: #fff; }
.buy-card__buy:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.buy-card__buy:disabled { background: var(--v2-border); color: var(--v2-text2); cursor: not-allowed; }
/* Гостю на бесплатном материале показываются два пути; второй — вторичный,
   чтобы пара кнопок не читалась как одно действие (задача 2026-08-15-01).
   Правило обязано стоять ПОСЛЕ .buy-card__buy: специфичность равная, и решает
   порядок — раньше по файлу оно молча проигрывало. */
.buy-card__buy--secondary { margin-top: 8px; background: var(--v2-surface); color: var(--v2-text); }
.buy-card__buy--secondary:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.buy-card__note { margin: 0; font-size: 12px; color: var(--v2-text2); text-align: center; }

/* Рабочая опция консультации в карточке покупки */
.buy-card__addon--on { opacity: 1; cursor: pointer; transition: border-color .15s, background .15s; }
.buy-card__addon--on:hover { border-color: var(--v2-accent); background: var(--v2-surface-subtle); }
.buy-card__addon-input { position: absolute; opacity: 0; width: 0; height: 0; }
.buy-card__addon-input:checked + .buy-card__addon-check { background: var(--v2-action); border-color: var(--v2-action); }
.buy-card__addon-input:checked + .buy-card__addon-check::after { content: ''; display: block; width: 6px; height: 11px;
    margin: 2px auto 0; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }
.buy-card__addon-input:focus-visible + .buy-card__addon-check { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.buy-card__addon-title b { display: block; margin-top: 2px; font-weight: 700; color: var(--v2-text);
    font-variant-numeric: lining-nums tabular-nums; }

@media (max-width: 720px) {
    .course-detail__grid { grid-template-columns: 1fr; }
    .course-detail__panel { padding: 20px 16px; border-radius: 16px; }
}
/* End Course Offer v2 */

/* Learning Course v2 */
.lms-course:has(> .learning-course-v2) { width: 100%; }
.learning-course-v2 { width: 100%; max-width: 960px; margin-inline: auto; color: var(--v2-text); }
.learning-course-v2 .lc-crumbs { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 13px; flex-wrap: wrap; }
.learning-course-v2 .lc-crumbs a { color: var(--v2-text2); font-weight: 600; text-decoration: none; }
.learning-course-v2 .lc-crumbs a:hover { color: var(--v2-text); text-decoration: underline; }
.learning-course-v2 .lc-crumbs a:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.learning-course-v2 .lc-crumbs__sep { color: var(--v2-border); }
.learning-course-v2 .lc-crumbs__cur { color: var(--v2-text2); font-weight: 500; }

.learning-course-v2 .lc-head { background: var(--v2-surface); border-radius: 18px;
    padding: 20px; box-shadow: var(--v2-shadow); margin-bottom: 20px; }
.learning-course-v2 .lc-cover { border-radius: 14px; margin-bottom: 18px; overflow: hidden; display: flex;
    align-items: center; justify-content: center; background: var(--v2-shell-header); }
.learning-course-v2 .lc-cover img { width: 100%; height: 100%; object-fit: cover; }
.learning-course-v2 .lc-title { margin: 0 0 6px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; color: var(--v2-text); }
.learning-course-v2 .lc-meta { margin: 0 0 18px; font-size: 14px; color: var(--v2-text2); }
/* Собственного фона у страницы материала и у экрана урока больше нет: с
   22.08.2026 холст кабинета сам стал #E6EDF8 (макет 456-1326), и прежние
   правила `.shell:has(.learning-course-v2)` и `.shell:has(.lesson-v2)` только
   повторяли бы общее. У страницы оформления правило осталось — она живёт на
   публичной оболочке, где фон белый (см. `.pub:has(.gco)`). */
.learning-course-v2 .course-detail__chips { margin-bottom: 14px; }
.learning-course-v2 .lc-desc { margin: 0 0 18px; font-size: 14px; line-height: 1.4; color: var(--v2-text2); }
/* Автор рендерится общим partials/author (shared с каталогом и «Моими
   курсами» — их .author-link/.author-academy не трогаем). Здесь только
   card-scoped переопределение цвета на вторичный v2-текст. */
.learning-course-v2 .lc-meta .author-link, .learning-course-v2 .lc-meta .author-academy { color: var(--v2-text2); }
.learning-course-v2 .lc-meta .author-link:hover { color: var(--v2-text2); text-decoration: underline; }

.learning-course-v2 .lc-prog-head { display: flex; align-items: center; justify-content: space-between; gap: 8px;
    margin-bottom: 7px; flex-wrap: wrap; }
.learning-course-v2 .lc-prog-label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .6px; color: var(--v2-text2); }
.learning-course-v2 .lc-prog-val { font-size: 13px; color: var(--v2-text2); }
.learning-course-v2 .lc-prog-val b { color: var(--v2-text); }
/* Полоса и кнопка синие, как в макете: цвет берётся токеном витрины
   (--pub-blue-3), а общий --v2-action остаётся чёрным — на нём держатся
   кнопки всех остальных экранов кабинета. */
.learning-course-v2 .lc-bar { height: 10px; border-radius: 999px; background: #f2f5fb; overflow: hidden; margin-bottom: 18px; }
.learning-course-v2 .lc-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--pub-blue-3); transition: width .4s; }

.learning-course-v2 .lc-continue { display: inline-flex; align-items: center; gap: 9px; height: 50px; padding: 0 24px;
    border: none; border-radius: 14px; background: var(--pub-blue-3); color: #fff; font: 600 15px 'Raleway', sans-serif;
    cursor: pointer; text-decoration: none; transition: background .15s; }
.learning-course-v2 .lc-continue:hover { background: var(--pub-blue); color: #fff; }
.learning-course-v2 .lc-continue:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.learning-course-v2 .lc-continue i { width: 18px; height: 18px; }
.learning-course-v2 .lc-nonext { display: inline-flex; align-items: center; gap: 9px; font-size: 14px; font-weight: 600;
    color: #1e7d34; background: #e6f4ea; padding: 12px 18px; border-radius: 14px; }
.learning-course-v2 .lc-nonext i { width: 18px; height: 18px; }

.learning-course-v2 .lc-sections { display: flex; flex-direction: column; gap: 18px; }
/* Рамки у карточки модуля в макете нет — её роль играет тень витрины, тем же
   токеном, что на странице материала и в оформлении покупки. */
.learning-course-v2 .lc-section { background: var(--v2-surface); border: none; border-radius: 18px;
    padding: 20px; box-shadow: var(--v2-shadow-pub); }
/* Название модуля стоит на одной вертикали с названиями уроков, как в макете.
   У строки урока до текста набегает 16 (её отступ) + 30 (значок) + 14 (зазор)
   = 60px; у шапки те же 60 дают стрелка 18px и зазор 42px. Числа взяты из
   соседних правил этого же блока — меняются вместе с ними. */
.learning-course-v2 .lc-section__head { display: flex; align-items: center; justify-content: space-between; gap: 42px;
    flex-wrap: wrap; background: none; border: none; padding: 0; width: 100%; cursor: pointer; text-align: left; }
.learning-course-v2 .lc-section__head:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.learning-course-v2 .lc-section__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; text-align: left; margin-right: auto; }
.learning-course-v2 .lc-section__label { font-size: 12px; color: var(--v2-text2); }
.learning-course-v2 .lc-section__head h3 { margin: 0; font: 600 17px 'Raleway', sans-serif; color: #313131; }
/* Счётчик и хронометраж — столбиком справа, как в макете. Хронометраж может
   отсутствовать: тогда столбик состоит из одного счётчика и ничего не смещает. */
.learning-course-v2 .lc-section__pills { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex: none; }
.learning-course-v2 .lc-section__time { display: inline-flex; align-items: center; gap: 5px; padding: 5px 10px;
    border-radius: 999px; background: #f3f6fc; color: #868fa6; font-size: 12px; white-space: nowrap; }
.learning-course-v2 .lc-section__time i, .learning-course-v2 .lc-section__time svg { width: 13px; height: 13px; }
.learning-course-v2 .lc-section__chev { width: 18px; height: 18px; flex: none; color: var(--v2-text2); transition: transform .15s; }
.learning-course-v2 .lc-section__chev.is-collapsed { transform: rotate(-90deg); }
/* Счётчик уроков — пилюля из макета: без рамки, на светло-синей подложке.
   Прежняя бежевая с оранжевым текстом осталась из кабинета и на синей странице
   читалась чужой. Пройденный модуль сохраняет зелёный: это не украшение, а
   единственный признак, что модуль закончен. */
.learning-course-v2 .lc-section__count { font-size: 12px; font-weight: 500; color: #868fa6;
    background: #f2f5fb; border: none; padding: 5px 11px; border-radius: 100px; }
.learning-course-v2 .lc-section__count.is-done { color: #1e7d34; background: #e6f4ea; }

.learning-course-v2 .lc-lessons { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; }
/* Урок в раскрытом модуле по макету: светло-синяя подложка и никакой рамки.
   Оранжевая обводка у открытого урока досталась от кабинета — на синей
   странице она читалась как ошибка. Наведение и фокус тоже синие: рыжий контур
   рядом с синим выглядел бы чужим (та же причина, что на оформлении покупки). */
.learning-course-v2 .lc-lesson { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border: none;
    border-radius: 12px; background: #f2f5fb; color: var(--v2-text); text-align: left; width: 100%; text-decoration: none; transition: background .15s; }
.learning-course-v2 .lc-lesson:not(.is-locked):hover { background: #e9eff9; }
.learning-course-v2 .lc-lesson:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.learning-course-v2 .lc-lesson.is-locked { background: #eef1f6; cursor: not-allowed; }
.learning-course-v2 .lc-mark { width: 30px; height: 30px; flex: none; border-radius: 9px; display: flex; align-items: center;
    justify-content: center; font-size: 13px; font-weight: 700; }
.learning-course-v2 .lc-mark--done { color: #1e7d34; background: #e6f4ea; }
.learning-course-v2 .lc-mark--open { color: #171512; background: #fff; }
.learning-course-v2 .lc-mark--locked { color: var(--v2-text2); background: #fff; }
.learning-course-v2 .lc-lesson__body { flex: 1; min-width: 0; }
.learning-course-v2 .lc-lesson__title { display: block; font-weight: 600; font-size: 15px; color: var(--v2-text); }
.learning-course-v2 .lc-lesson.is-locked .lc-lesson__title { color: var(--v2-text2); }
.learning-course-v2 .lc-lesson__meta { display: block; font-size: 12px; color: var(--v2-text2); margin-top: 2px; }
.learning-course-v2 .lc-lesson__hint { font-size: 12px; color: var(--v2-text2); text-align: right; max-width: 180px; }

@media (max-width: 767px) {
    .learning-course-v2 .lc-lesson,
    .learning-course-v2 .lc-lesson.is-locked { min-height: 44px; }
}
/* End Learning Course v2 */

/* Lesson v2 */
.lesson-v2 { width: min(100%, 960px); margin-inline: auto; color: var(--v2-text); }
.lesson-v2 .lc-crumbs { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; font-size: 13px; flex-wrap: wrap; }
.lesson-v2 .lc-crumbs a { color: var(--v2-text2); font-weight: 600; text-decoration: none; }
.lesson-v2 .lc-crumbs a:hover { color: var(--v2-text); text-decoration: underline; }
.lesson-v2 .lc-crumbs a:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.lesson-v2 .lc-crumbs__sep { color: var(--v2-border); }
.lesson-v2 .lc-crumbs__cur { color: var(--v2-text2); font-weight: 500; }

.lesson-v2 .lk-bar { height: 4px; border-radius: 999px; background: #f2f5fb; overflow: hidden; margin-bottom: 18px; }
.lesson-v2 .lk-bar > span { display: block; height: 100%; border-radius: 999px; background: var(--pub-blue-3); transition: width .45s ease; }
.lesson-v2 .lk-bar > span.is-done { background: #1e7d34; }

.lesson-v2 .lk-head { margin-bottom: 18px; }
.lesson-v2 .lk-head__meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
.lesson-v2 .lk-pos { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .6px; color: var(--v2-text2);
    font-variant-numeric: lining-nums tabular-nums; }
.lesson-v2 .lk-dot { font-size: 12px; color: var(--v2-border); }
.lesson-v2 .lk-section { font-size: 12px; font-weight: 500; color: var(--v2-text2); }
.lesson-v2 .lk-done-badge { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 600;
    padding: 4px 10px; border-radius: 999px; color: #1e7d34; background: #e6f4ea; }
.lesson-v2 .lk-title { margin: 0 0 6px; font: 700 26px 'Raleway', sans-serif; letter-spacing: -.01em; line-height: 1.25; color: var(--v2-text); }
.lesson-v2 .lk-head__sub { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lesson-v2 .lk-meta { font-size: 14px; font-variant-numeric: lining-nums tabular-nums; color: var(--v2-text2); }

.lesson-v2 .lk-stage { margin-bottom: 20px; border-radius: 16px; overflow: hidden; }
.lesson-v2 .lk-stage .lk-frame { width: 100%; }
.lesson-v2 .lk-stage.is-vertical { background: var(--v2-shell-header); display: flex; justify-content: center; padding: 12px 0; }
.lesson-v2 .lk-stage.is-vertical .lk-frame { width: auto; max-width: 100%; aspect-ratio: 9 / 16; height: min(72vh, 620px); }
.lesson-v2 .lk-stage .lk-frame iframe { display: block; width: 100%; height: 100%; border: 0; border-radius: 12px; }

/* Рамки у белых блоков нет — их держит тень витрины, тем же токеном, что на
   странице материала и в оформлении покупки. Бежевая рамка кабинета на голубой
   странице читалась чужой. */
.lesson-v2 .lk-text { background: var(--v2-surface); border: none; border-radius: 18px;
    padding: 26px; box-shadow: var(--v2-shadow-pub); margin-bottom: 20px; }
.lesson-v2 .lk-text__body { font-size: 16px; line-height: 1.7; color: var(--v2-text); }
.lesson-v2 .lk-text__body p { margin: 0 0 14px; }
.lesson-v2 .lk-text__body p:last-child { margin-bottom: 0; }
.lesson-v2 .lk-text__body ul, .lesson-v2 .lk-text__body ol { margin: 0 0 14px; padding-left: 24px; }
.lesson-v2 .lk-text__body ul:last-child, .lesson-v2 .lk-text__body ol:last-child { margin-bottom: 0; }
.lesson-v2 .lk-text__body strong { font-weight: 700; }
.lesson-v2 .lk-text__body em { font-style: italic; }
.lesson-v2 .lk-text__body a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.lesson-v2 .lk-text__body a:hover { color: var(--v2-accent); }
.lesson-v2 .lk-text__body a:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; border-radius: 2px; }

.lesson-v2 .lk-actions { background: var(--v2-surface); border: none; border-radius: 18px;
    padding: 20px; box-shadow: var(--v2-shadow-pub); display: flex; align-items: center; justify-content: space-between;
    gap: 16px; flex-wrap: wrap; }
.lesson-v2 .lk-mark { display: inline-flex; align-items: center; gap: 9px; height: 50px; padding: 0 24px; border: none;
    border-radius: 14px; background: var(--pub-blue-3); color: #fff; font: 600 15px 'Raleway', sans-serif; cursor: pointer;
    transition: background .15s; }
.lesson-v2 .lk-mark:hover { background: var(--pub-blue); }
.lesson-v2 .lk-mark:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.lesson-v2 .lk-mark:disabled { opacity: .7; cursor: not-allowed; }
.lesson-v2 .lk-mark i { width: 18px; height: 18px; }
/* Пока кнопка не появилась, на её месте стоит объяснение — не пустота и не
   заблокированная кнопка без причины. Высота та же, чтобы блок не прыгал. */
.lesson-v2 .lk-mark-gate { display: flex; align-items: center; min-height: 50px; }
.lesson-v2 .lk-mark-wait { font-size: 14px; line-height: 1.45; color: var(--v2-text2); }
.lesson-v2 .lk-mark-note { display: block; margin-top: 10px; font-size: 13px; line-height: 1.45;
    color: var(--v2-text2); }
.lesson-v2 .lk-done-plate { display: inline-flex; align-items: center; gap: 9px; height: 50px; padding: 0 22px;
    border-radius: 14px; font: 600 15px 'Raleway', sans-serif; border: 1px solid #cfe6d6; background: #e6f4ea; color: #1e7d34; }
.lesson-v2 .lk-done-plate i { width: 18px; height: 18px; }

.lesson-v2 .lk-nav { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-left: auto; }
.lesson-v2 .lk-nav__hint { font-size: 12px; color: var(--v2-text2); }
.lesson-v2 .lk-nav__btn { display: inline-flex; align-items: center; gap: 8px; height: 46px; padding: 0 18px;
    border-radius: 12px; font: 600 14px 'Raleway', sans-serif; text-decoration: none; transition: all .15s;
    border: 1px solid #ebedf0; background: var(--v2-surface); color: var(--v2-text); }
.lesson-v2 .lk-nav__btn:hover { border-color: var(--pub-blue-2); background: #f2f5fb; color: var(--v2-text); }
.lesson-v2 .lk-nav__btn:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.lesson-v2 .lk-nav__btn.is-off { border-color: #f2f5fb; background: #f2f5fb; color: #868fa6; cursor: not-allowed; }
.lesson-v2 .lk-nav__btn.is-off:hover { border-color: #f2f5fb; background: #f2f5fb; color: #868fa6; }
.lesson-v2 .lk-nav__btn i { width: 16px; height: 16px; flex: none; }

.lesson-v2 img, .lesson-v2 table, .lesson-v2 iframe { max-width: 100%; }

@media (max-width: 767px) {
    .lesson-v2 .lk-stage.is-vertical .lk-frame { height: min(64vh, 520px); }
    .lesson-v2 .lk-nav { margin-left: 0; flex-direction: column; align-items: stretch; }
    .lesson-v2 .lk-nav__btn,
    .lesson-v2 .lk-mark,
    .lesson-v2 .lk-done-plate { width: 100%; justify-content: center; min-height: 44px; }
    .lesson-v2 .lk-actions { flex-direction: column; align-items: stretch; }
}
/* End Lesson v2 */

/* Products Catalog v2 */
.products-v2 { color: var(--v2-text); }
.pcv2-head { margin-bottom: 20px; }
.pcv2-title { margin: 0 0 6px; font: 800 26px 'Raleway', sans-serif; color: var(--v2-text); }
.pcv2-lead { margin: 0; color: var(--v2-text2); font-size: 14px; max-width: 640px; }

/* Правка приёмки 2: тот же устойчивый auto-fill/minmax паттерн И то же
   значение минимума колонки (260px), что и у внутреннего каталога курсов
   (.ccv2__grid) — вместо конкурирующей лестницы фиксированных брейкпоинтов.
   Сетка растягивается на всю доступную ширину содержимого (после sidebar),
   без искусственного max-width — так же, как у каталога: 5 колонок в ряд
   на широком desktop (~1920px), 4 на 1440px и т. д. Отдельный кэп ширины
   ломал бы «как в каталоге» и оставлял пустое поле справа от сетки. */
.pcv2-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; }

.pcv2-card { display: flex; flex-direction: column; background: var(--v2-surface); 
    border-radius: 18px; overflow: hidden; box-shadow: var(--v2-shadow); }
.pcv2-card__cover { height: 200px; background: var(--v2-surface-subtle); display: flex; align-items: center; justify-content: center; }
.pcv2-card__cover img { width: 100%; height: 100%; object-fit: contain; }
/* Правка приёмки: медиаблок карточки витрины — строгий квадрат 1:1, заполнение
   через cover без искажения пропорций. Модификатор отдельным классом — общая
   .pcv2-card переиспользуется в предпросмотре admin-формы (без --square). */
.pcv2-card__cover--square { height: auto; aspect-ratio: 1 / 1; }
.pcv2-card__cover--square img { width: 100%; height: 100%; object-fit: cover; object-position: center; }
.pcv2-card__fallback { display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--v2-text2); }
.pcv2-card__fallback svg, .pcv2-card__fallback i { width: 32px; height: 32px; }
.pcv2-card__fallback span { font-size: 12px; }
.pcv2-card__body { display: flex; flex-direction: column; gap: 10px; flex: 1; padding: 16px; }
.pcv2-card__title { margin: 0; font: 700 16px 'Raleway', sans-serif; line-height: 1.3; color: var(--v2-text); }
.pcv2-card__price { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-top: auto; }
.pcv2-card__price-old { color: var(--v2-text2); text-decoration: line-through; font-size: 14px; }
.pcv2-card__price-current { font: 700 18px 'Raleway', sans-serif; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; }
.pcv2-card__btn { display: flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 44px; border-radius: 12px; background: var(--v2-action); color: #fff; font-weight: 700;
    text-decoration: none; transition: background .15s; }
.pcv2-card__btn:hover { background: var(--v2-action-hover); color: #fff; }
.pcv2-card__btn:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.pcv2-card__btn svg, .pcv2-card__btn i { width: 16px; height: 16px; }

.pcv2-empty { text-align: center; padding: 48px 20px; color: var(--v2-text2); background: var(--v2-surface);
    border: 1px dashed var(--v2-border); border-radius: 18px; }
.pcv2-empty__icon { width: 56px; height: 56px; margin: 0 auto 14px auto; border-radius: 16px;
    background: var(--v2-surface-subtle); display: flex; align-items: center; justify-content: center; color: var(--v2-text2); }
.pcv2-empty p { margin: 0; font-weight: 700; color: var(--v2-text); }

.pcv2-pager { margin-top: 24px; }
/* End Products Catalog v2 */

/* Products Admin v2 */
.padm { color: var(--v2-text); }
.padm-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; }
.padm-title { margin: 0 0 4px; font: 800 24px 'Raleway', sans-serif; color: var(--v2-text); }
.padm-sub { margin: 0; font-size: 14px; color: var(--v2-text2); }

.padm-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px;
    padding: 0 18px; border-radius: 12px; font-weight: 700; text-decoration: none; border: 1px solid transparent;
    transition: background .15s, border-color .15s; cursor: pointer; }
.padm-btn svg, .padm-btn i { width: 16px; height: 16px; }
.padm-btn--primary { background: var(--v2-action); color: #fff; }
.padm-btn--primary:hover { background: var(--v2-action-hover); color: #fff; }
.padm-btn--primary:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.padm-btn--ghost { background: var(--v2-surface); border-color: var(--v2-border); color: var(--v2-text); }
.padm-btn--ghost:hover { border-color: var(--v2-accent); }
.padm-btn--ghost:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.padm-btn:disabled { opacity: .6; cursor: not-allowed; }

.padm-sync { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 18px; }
.padm-sync__status { margin: 0; font-size: 13px; color: var(--v2-text2); }

.padm-search { position: relative; max-width: 420px; margin-bottom: 14px; }
.padm-search__icon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; color: var(--v2-text2); }
.padm-search input { width: 100%; min-height: 44px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); padding: 0 14px 0 40px; font-size: 14px; color: var(--v2-text); }
.padm-search input:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 1px; }

.padm-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.padm-tab { min-height: 44px; padding: 0 16px; border-radius: 999px; border: 1px solid var(--v2-border);
    background: var(--v2-surface); color: var(--v2-text2); font-weight: 600; font-size: 13px; cursor: pointer; }
.padm-tab.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.padm-tab:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }

.padm-empty { padding: 40px 20px; text-align: center; color: var(--v2-text2); background: var(--v2-surface);
    border: 1px dashed var(--v2-border); border-radius: 18px; }

.padm-table-wrap { overflow-x: auto; background: var(--v2-surface); border-radius: 18px; }
.padm-table { width: 100%; border-collapse: collapse; min-width: 760px; }
.padm-table th { text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .5px;
    color: var(--v2-text2); padding: 14px 16px; border-bottom: 1px solid var(--v2-border); white-space: nowrap; }
.padm-table td { padding: 12px 16px; border-bottom: 1px solid var(--v2-border); vertical-align: middle; }
.padm-table tbody tr:last-child td { border-bottom: none; }
.padm-table__actions-head, .padm-table__actions { position: sticky; right: 0; background: var(--v2-surface); }

.padm-thumb { width: 48px; height: 48px; border-radius: 10px; background: var(--v2-surface-subtle);
    display: flex; align-items: center; justify-content: center; overflow: hidden; color: var(--v2-text2); }
.padm-thumb img { width: 100%; height: 100%; object-fit: contain; }

.padm-source { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border-radius: 999px;
    background: var(--v2-surface-subtle); color: var(--v2-text2); font-size: 12px; font-weight: 600; }

.padm-price-old { color: var(--v2-text2); text-decoration: line-through; font-size: 13px; margin-right: 6px; }
.padm-price-current { font-weight: 700; font-variant-numeric: lining-nums tabular-nums; }

.padm-badge { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 10px; border-radius: 999px;
    font-size: 12px; font-weight: 700; }
.padm-badge svg, .padm-badge i { width: 14px; height: 14px; }
.padm-badge--published { background: #e6f4ea; color: #1e7d34; }
.padm-badge--hidden { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.padm-badge--archived { background: #f3e8e8; color: #8a4747; }
.padm-badge--attention { background: #fdf0dd; color: #8a5a1e; }

.padm-actions { display: flex; align-items: center; gap: 6px; }
.padm-action { width: 36px; height: 36px; border-radius: 10px; border: 1px solid var(--v2-border);
    background: var(--v2-surface); color: var(--v2-text); display: flex; align-items: center; justify-content: center; cursor: pointer; }
.padm-action svg, .padm-action i { width: 16px; height: 16px; }
.padm-action:hover { border-color: var(--v2-accent); }
.padm-action:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; }
.padm-action--danger:hover { border-color: #b45252; color: #b45252; }

.padm-cards { display: none; }
.padm-pager { margin-top: 20px; }

@media (max-width: 767px) {
    .padm-table-wrap { display: none; }
    .padm-cards { display: flex; flex-direction: column; gap: 14px; }
    .padm-card { background: var(--v2-surface); border-radius: 16px; padding: 14px; }
    .padm-card__head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
    .padm-card__title { font-weight: 700; }
    .padm-card__row { display: flex; align-items: center; justify-content: space-between; gap: 8px;
        font-size: 13px; color: var(--v2-text2); padding: 6px 0; border-top: 1px solid var(--v2-border); }
    .padm-card__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
    .padm-card__actions .padm-btn { flex: 1; min-width: 44px; }
}

.padm-btn--danger { border-color: #e0c4c4; color: #8a4747; }
.padm-btn--danger:hover { border-color: #b45252; background: #f8efef; }
/* End Products Admin v2 */

/* Product Form v2 */
.pform { color: var(--v2-text); max-width: 1100px; }
.pform-back { display: inline-flex; align-items: center; gap: 4px; color: var(--v2-text2); text-decoration: none;
    font-size: 14px; margin-bottom: 14px; }
.pform-back:hover { color: var(--v2-text); }
.pform-back svg, .pform-back i { width: 16px; height: 16px; }
.pform-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.pform-title { margin: 0; font: 800 26px 'Raleway', sans-serif; color: var(--v2-text); }
.pform-lead { margin: 8px 0 24px; color: var(--v2-text2); font-size: 14px; max-width: 640px; }

.pform-layout { display: grid; grid-template-columns: 1fr; gap: 24px; }
@media (min-width: 1024px) { .pform-layout { grid-template-columns: 2fr 1fr; align-items: start; } }

.pform-main { display: flex; flex-direction: column; gap: 20px; }
.pform-card { background: var(--v2-surface); border-radius: 18px; padding: 20px; }
.pform-card__title { margin: 0 0 16px; font: 700 18px 'Raleway', sans-serif; color: var(--v2-text); }

.pform-row { display: grid; grid-template-columns: 1fr; gap: 16px; }
@media (min-width: 640px) { .pform-row { grid-template-columns: 1fr 1fr; } }

.pform-readonly { display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
    margin: 0 0 12px; padding: 0 0 12px; border-bottom: 1px solid var(--v2-border); font-size: 13px; }
.pform-readonly:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; }
.pform-readonly > span:first-child { color: var(--v2-text2); }
.pform-readonly > span:last-child { color: var(--v2-text); font-weight: 600; text-align: right; }
.pform-readonly a { color: var(--v2-action); }
.pform-reset-btn { font-size: 13px; margin: -8px 0 16px; }

.pform-field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.pform-field:last-child { margin-bottom: 0; }
.pform-label { font-size: 13px; font-weight: 600; color: var(--v2-text); }
.pform-required { color: #b45252; }
.pform-input { min-height: 44px; border: 1px solid var(--v2-border); border-radius: 12px; background: var(--v2-surface);
    padding: 0 14px; font-size: 14px; color: var(--v2-text); width: 100%; }
.pform-input:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 1px; }
.pform-input--narrow { max-width: 160px; }
.pform-file { min-height: 44px; width: 100%; }
.pform-error { color: #b45252; font-size: 12px; }
.pform-hint { color: var(--v2-text2); font-size: 12px; margin: 4px 0 0; }

.pform-toggle { display: inline-flex; align-self: flex-start; border: 1px solid var(--v2-border); border-radius: 12px; overflow: hidden; }
.pform-toggle__btn { min-height: 44px; padding: 0 18px; background: var(--v2-surface); color: var(--v2-text2);
    font-weight: 600; border: none; cursor: pointer; }
.pform-toggle__btn.is-active { background: var(--v2-action); color: #fff; }
.pform-toggle__btn:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: -2px; }

.pform-check { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; }
.pform-check input { width: 20px; height: 20px; margin-top: 2px; accent-color: var(--v2-action); }
.pform-check__title { display: block; font-weight: 600; color: var(--v2-text); }

.pform-actions { display: flex; gap: 12px; flex-wrap: wrap; }
.pform-danger { margin-top: 4px; }

.pform-preview__label { margin: 0 0 12px; font-size: 12px; font-weight: 700; text-transform: uppercase;
    letter-spacing: .5px; color: var(--v2-text2); }

@media (max-width: 767px) {
    .pform-actions { flex-direction: column; align-items: stretch; }
    .pform-actions .padm-btn { width: 100%; }
}
/* End Product Form v2 */

/* Coin Balance v2 */
.coin-balance-v2 { color: var(--v2-text); }
.cbv2-hero { display: flex; align-items: center; gap: 16px; background: var(--v2-surface); 
    border-radius: 18px; padding: 22px 24px; box-shadow: var(--v2-shadow); margin-bottom: 24px; }
.cbv2-hero__icon { width: 52px; height: 52px; flex: none; border-radius: 14px; background: var(--v2-surface-subtle);
    color: var(--v2-action); display: flex; align-items: center; justify-content: center; }
.cbv2-hero__icon i { width: 26px; height: 26px; }
.cbv2-hero__cap { font-size: 13px; font-weight: 600; color: var(--v2-text2); }
.cbv2-hero__sum { display: flex; align-items: baseline; gap: 6px; font: 800 34px 'Raleway', sans-serif; color: var(--v2-text);
    font-variant-numeric: lining-nums tabular-nums; margin-top: 2px; }
.cbv2-hero__sum span { font-size: 16px; font-weight: 600; color: var(--v2-text2); }
.cbv2-hero__rate { font-size: 13px; color: var(--v2-text2); margin-top: 6px; }
.cbv2-hero__rules { display: inline-block; margin-top: 8px; font-size: 13px; color: var(--v2-action); text-decoration: underline; }

/* Правила GessCoin. Страница только читается, поэтому и стилей ей нужно немного:
   существующие токены портала, никаких новых. */
/* Отступ между разделами; у первого его нет — иначе он сложился бы с
   собственным отступом карточки и заголовок «уехал» бы от её верха. */
.coin-rules__block { margin-top: 24px; }
.coin-rules__card > .coin-rules__block:first-child { margin-top: 0; }
.coin-rules__title { font-size: 16px; font-weight: 600; margin: 0 0 8px; }
.coin-rules__block p { margin: 0 0 8px; line-height: 1.6; color: var(--v2-text); }
.coin-rules__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.coin-rules__item { display: flex; gap: 12px; align-items: flex-start; }
.coin-rules__amount { flex: 0 0 auto; min-width: 74px; font-weight: 600; }
.coin-rules__text { display: block; }
.coin-rules__hint { display: block; font-size: 13px; color: var(--v2-text2); line-height: 1.5; }
.coin-rules__note { margin-top: 12px; font-size: 13px; color: var(--v2-text2); line-height: 1.5; }
.coin-rules__example { padding: 12px 14px; border-radius: 10px; background: var(--v2-surface-subtle); line-height: 1.6; }
.coin-rules__plain { margin: 0 0 8px; padding-left: 20px; line-height: 1.6; }
.coin-rules__link { color: var(--v2-action); text-decoration: underline; }
.coins-box__rules { color: var(--v2-action); text-decoration: underline; }

@media (max-width: 767px) {
    .coin-rules__item { flex-direction: column; gap: 2px; }
    .coin-rules__amount { min-width: 0; }
}

.cbv2-list { background: var(--v2-surface); border-radius: 18px; padding: 8px 20px; }
.cbv2-list__head { padding: 12px 0; border-bottom: 1px solid var(--v2-border); }
.cbv2-list__head h4 { margin: 0; font-size: 16px; font-weight: 700; color: var(--v2-text); }
.cbv2-row { display: flex; align-items: center; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--v2-border); }
.cbv2-row:last-child { border-bottom: none; }
.cbv2-row__icon { width: 38px; height: 38px; flex: none; border-radius: 10px; display: flex; align-items: center; justify-content: center; }
.cbv2-row__icon--plus { background: #e6f4ea; color: #1e7d34; }
.cbv2-row__icon--minus { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.cbv2-row__icon i { width: 17px; height: 17px; }
.cbv2-row__body { flex: 1; min-width: 0; }
.cbv2-row__kind { font-weight: 600; font-size: 14px; color: var(--v2-text); }
.cbv2-row__meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; color: var(--v2-text2); margin-top: 2px; }
.cbv2-row__meta a { color: var(--v2-text); text-decoration: underline; text-underline-offset: 2px; }
.cbv2-row__meta a:hover { color: var(--v2-accent-hover); }
.cbv2-row__meta a:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); border-radius: 4px; }
.cbv2-row__note { color: var(--v2-text2); }
.cbv2-row__sum { flex: none; font-weight: 700; font-size: 15px; font-variant-numeric: lining-nums tabular-nums; }
.cbv2-row__sum--plus { color: #1e7d34; }
.cbv2-row__sum--minus { color: var(--v2-text); }

.cbv2-empty { text-align: center; padding: 48px 24px; background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 18px; }
.cbv2-empty__icon { width: 56px; height: 56px; margin: 0 auto 14px; border-radius: 16px; background: var(--v2-surface-subtle);
    color: var(--v2-text2); display: flex; align-items: center; justify-content: center; }
.cbv2-empty__icon i { width: 26px; height: 26px; }
.cbv2-empty h4 { margin: 0 0 6px; font-size: 17px; font-weight: 700; color: var(--v2-text); }
.cbv2-empty p { margin: 0 auto; max-width: 420px; font-size: 14px; color: var(--v2-text2); line-height: 1.6; }

@media (max-width: 480px) {
    .cbv2-hero { flex-direction: column; align-items: flex-start; }
}
/* End Coin Balance v2 */

/* Purchases v2 */
.purchases-v2 { color: var(--v2-text); max-width: 1000px; }

.purv2-back { display: inline-flex; align-items: center; gap: 8px; background: none; border: none; padding: 0;
    cursor: pointer; color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; margin-bottom: 14px; min-height: 44px; }
.purv2-back:hover { color: var(--v2-accent-hover); }
.purv2-back:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); border-radius: 6px; }

.purv2-card { background: var(--v2-surface); border-radius: 18px; padding: 18px 20px;
    margin-bottom: 12px; box-shadow: var(--v2-shadow); cursor: pointer; }
.purv2-card__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.purv2-card__no { font-size: 13px; font-weight: 700; color: var(--v2-text2); font-variant-numeric: lining-nums tabular-nums; }
.purv2-card__title { font-size: 17px; font-weight: 700; color: var(--v2-text); margin-top: 2px; }
.purv2-card__meta { font-size: 13px; color: var(--v2-text2); margin-top: 4px; }
.purv2-card__cash { font-size: 12px; color: #1e7d34; margin-top: 6px; font-weight: 600; }
.purv2-card__cash--off { color: var(--v2-text2); }
.purv2-card__right { text-align: right; }
.purv2-card__sum { font-size: 18px; font-weight: 800; color: var(--v2-text); font-variant-numeric: lining-nums tabular-nums; margin-bottom: 6px; }
.purv2-card .purv2-btn { margin-top: 14px; }

.purv2-status { flex: none; display: inline-flex; align-items: center; padding: 5px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.purv2-status--paid { background: #e6f4ea; color: #1e7d34; }
.purv2-status--new, .purv2-status--pending { background: var(--v2-active-bg); color: var(--v2-active-text); }
.purv2-status--failed, .purv2-status--canceled { background: #fdeceb; color: #c0392b; }
.purv2-status--refunded { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.purv2-note { display: flex; flex-direction: column; gap: 3px; margin-top: 14px; padding: 12px 14px; border-radius: 12px; font-size: 13px; line-height: 1.5; }
.purv2-note b { font-weight: 600; }
.purv2-note--wait { background: var(--v2-active-bg); border: 1px solid #f0dcb4; color: var(--v2-active-text); }
.purv2-note--wait span { color: var(--v2-text2); }
.purv2-note--ok { background: #e6f4ea; border: 1px solid rgba(30,125,52,.25); color: #1e7d34; }
.purv2-note--ok span { color: var(--v2-text2); }
.purv2-note--no { background: #fdeceb; border: 1px solid #f5c6c2; color: #c0392b; }
.purv2-note--no span { color: var(--v2-text2); }

.purv2-empty { background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 16px; padding: 32px;
    text-align: center; color: var(--v2-text2); font-size: 14px; }
.purv2-empty a { color: var(--v2-text); text-decoration: underline; }
.purv2-empty a:hover { color: var(--v2-accent-hover); }

.purv2-detail { max-width: 760px; background: var(--v2-surface); border-radius: 20px;
    padding: 22px; box-shadow: var(--v2-shadow); }
.purv2-detail__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin-bottom: 18px; }
.purv2-detail__no { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 26px; letter-spacing: -.01em;
    font-variant-numeric: lining-nums tabular-nums; color: var(--v2-text); }
.purv2-detail__title { font-size: 20px; font-weight: 700; color: var(--v2-text); margin-top: 4px; }
.purv2-detail__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px 24px; margin-bottom: 4px; }
@media (max-width: 760px) { .purv2-detail__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 480px) { .purv2-detail__grid { grid-template-columns: 1fr; } }
.purv2-detail__cell { display: flex; flex-direction: column; gap: 2px; }
.purv2-detail__label { font-size: 12px; font-weight: 500; color: var(--v2-text2); }
.purv2-detail__value { font-size: 15px; font-weight: 600; color: var(--v2-text); }
.purv2-detail__sub { font-size: 12px; color: var(--v2-text2); }
.purv2-detail__money { border-radius: 14px; padding: 14px 16px; margin-bottom: 14px; background: var(--v2-surface-subtle); }
.purv2-detail__row { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: var(--v2-text2); padding: 4px 0; font-variant-numeric: lining-nums tabular-nums; }
.purv2-detail__row b { color: var(--v2-text); }

.purv2-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 0 18px;
    border-radius: 12px; font: 600 14px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; border: 1px solid transparent;
    transition: all .15s; }
.purv2-btn--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.purv2-btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.purv2-btn--muted { background: var(--v2-surface); color: var(--v2-text); border-color: var(--v2-border); }
.purv2-btn--muted:hover { border-color: var(--v2-accent); }
.purv2-btn--ghost { background: var(--v2-surface); color: var(--v2-text); border-color: var(--v2-border); }
.purv2-btn--ghost:hover { border-color: var(--v2-accent); }
.purv2-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.purchases-v2 .lms-field__control:focus { border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212,101,0,.15); }
.purchases-v2 .purv2-modal .lms-modal__actions { margin-top: 20px; }

@media (max-width: 480px) {
    .purv2-btn { width: 100%; }
    .purv2-card__right { text-align: left; margin-top: 8px; }
}
/* End Purchases v2 */

/* Order Page v2 */
.order-page-v2 { max-width: 640px; color: var(--v2-text); }
.opv2-card { background: var(--v2-surface); border-radius: 20px; padding: 32px;
    text-align: center; box-shadow: var(--v2-shadow); }
.opv2-icon { width: 64px; height: 64px; margin: 0 auto 18px; border-radius: 50%; display: flex; align-items: center;
    justify-content: center; background: var(--v2-active-bg); color: var(--v2-active-text); }
.opv2-icon i { width: 30px; height: 30px; }
.opv2-icon--paid { background: #e6f4ea; color: #1e7d34; }
.opv2-icon--failed, .opv2-icon--canceled { background: #fdeceb; color: #c0392b; }
.opv2-title { margin: 0 0 8px; font-size: 24px; font-weight: 700; color: var(--v2-text); }
.opv2-lead { margin: 0 0 22px; font-size: 15px; color: var(--v2-text2); line-height: 1.6; }

.opv2-summary { border-radius: 14px; padding: 14px 16px; background: var(--v2-surface-subtle);
    text-align: left; margin-bottom: 22px; }
.opv2-summary__row { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; color: var(--v2-text2);
    padding: 6px 0; font-variant-numeric: lining-nums tabular-nums; }
.opv2-summary__row b { color: var(--v2-text); font-weight: 600; word-break: break-word; text-align: right; }
.opv2-summary__row--total { border-top: 1px solid var(--v2-border); margin-top: 4px; padding-top: 12px; font-size: 15px; }

.opv2-actions { display: flex; flex-direction: column; gap: 10px; }
.opv2-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 0 20px;
    border-radius: 12px; font: 600 15px 'Raleway', sans-serif; cursor: pointer; text-decoration: none; border: 1px solid transparent;
    transition: all .15s; width: 100%; }
.opv2-btn i { width: 18px; height: 18px; }
.opv2-btn--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.opv2-btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.opv2-btn--muted { background: var(--v2-surface); color: var(--v2-text); border-color: var(--v2-border); }
.opv2-btn--muted:hover { border-color: var(--v2-accent); }
.opv2-btn--ghost { background: none; color: var(--v2-text2); border-color: transparent; }
.opv2-btn--ghost:hover { color: var(--v2-text); text-decoration: underline; }
.opv2-btn--danger { background: #fff; color: #c0392b; border-color: #f5c6c2; }
.opv2-btn--danger:hover { background: #fdeceb; }
.opv2-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.opv2-sim { margin-top: 20px; padding-top: 20px; border-top: 1px dashed var(--v2-border); }
.opv2-sim__label { display: block; font-size: 12px; color: var(--v2-text2); margin-bottom: 10px; }
.opv2-sim__btns { display: flex; gap: 10px; flex-wrap: wrap; }
.opv2-sim__btns .opv2-btn { width: auto; flex: 1; min-width: 140px; }

@media (min-width: 481px) {
    .opv2-actions { flex-direction: row; flex-wrap: wrap; }
    .opv2-btn { width: auto; flex: 1; min-width: 160px; }
    .opv2-btn--ghost { flex: none; min-width: 0; width: 100%; }
}
/* End Order Page v2 */

/* Profile v2 */
.profile-v2 { color: var(--v2-text); }
.profv2-grid { display: grid; gap: 20px; align-items: start; max-width: 640px; }
.profv2-grid--expert { max-width: 1000px; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); }
.profv2-col { min-width: 0; display: flex; flex-direction: column; gap: 20px; }

.profile-v2 .card.profv2-card { box-shadow: var(--v2-shadow); }
.profv2-card__title { margin: 0 0 16px; font-size: 19px; color: var(--v2-text); }
.profv2-card__subtitle { margin: 0 0 16px; font-size: 19px; color: var(--v2-text); }
.profv2-btn-auto { width: auto; }

.profile-v2 .input:focus { border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212,101,0,.15); }
.profile-v2 .alert--ok { background: #e6f4ea; color: #1e7d34; }

.profv2-field__hint { margin: 0 0 20px; font-size: 12px; color: var(--v2-text2); }

.profv2-photo { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; }
.profv2-photo__img { width: 84px; height: 84px; flex: none; border-radius: 50%; object-fit: cover; border: 2px solid var(--v2-border); }
.profv2-photo__wrap { position: relative; flex: none; }
.profv2-photo__img--new { border-color: var(--v2-accent); }
.profv2-photo__mark { position: absolute; bottom: -4px; left: 50%; transform: translateX(-50%); padding: 3px 10px;
    border-radius: 999px; background: var(--v2-accent); color: #fff; font-size: 11px; font-weight: 700; white-space: nowrap; }
.profv2-photo__stub { width: 84px; height: 84px; font-size: 28px; flex: none; }
.profv2-photo__side { flex: 1; min-width: 220px; }
.profv2-photo__pick { display: inline-flex; align-items: center; height: 40px; padding: 0 16px; border-radius: 12px;
    border: 1px solid var(--v2-border); background: var(--v2-surface); color: var(--v2-text); font-size: 14px; font-weight: 600;
    cursor: pointer; min-height: 44px; }
.profv2-photo__pick:hover { border-color: var(--v2-accent); background: var(--v2-surface-subtle); }
.profv2-photo__pick input { display: none; }
.profv2-photo__hint { margin-top: 8px; font-size: 12px; color: var(--v2-text2); line-height: 1.5; }
.profv2-photo__note { font-size: 13px; color: var(--v2-text2); }
.profv2-photo__acts { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 12px; }

.profv2-expert { padding-top: 18px; margin-top: 4px; border-top: 1px solid var(--v2-border); }
.profv2-expert__title { margin: 0 0 3px; font-weight: 700; font-size: 16px; color: var(--v2-text); }
.profv2-expert__lead { margin: 0 0 14px; font-size: 13px; color: var(--v2-text2); }
.profv2-expert__area { min-height: 110px; resize: vertical; }

.profv2-preview { min-width: 0; max-width: 400px; position: sticky; top: 20px; }
.profv2-preview__title { margin: 0 0 10px; font-size: 14px; font-weight: 700; letter-spacing: .06em;
    text-transform: uppercase; color: var(--v2-text2); }
.profv2-prev-card { display: flex; flex-direction: column; gap: 14px; padding: 20px; background: var(--v2-surface);
    border-radius: 20px; box-shadow: var(--v2-shadow); }
.profv2-prev-card__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.profv2-prev-card__photo, .profv2-prev-card__ava { width: 68px; height: 68px; flex: none; border-radius: 50%; }
.profv2-prev-card__photo { object-fit: cover; }
.profv2-prev-card__ava { display: flex; align-items: center; justify-content: center;
    background: var(--v2-shell-header); color: #fff; font-size: 23px; font-weight: 700; }
.profv2-prev-card__tag { display: inline-flex; align-items: center; gap: 5px; flex: none; padding: 4px 10px;
    border-radius: 999px; background: var(--v2-shell-header); color: #fff; font-size: 11px; font-weight: 700; }
.profv2-prev-card__tag svg, .profv2-prev-card__tag i { width: 13px; height: 13px; }
.profv2-prev-card__name { margin-bottom: 3px; font-size: 17px; font-weight: 700; color: var(--v2-text); }
.profv2-prev-card__spec { font-size: 13px; font-style: italic; line-height: 1.45; color: var(--v2-text2); }
.profv2-prev-card__spec--empty, .profv2-prev-card__bio--empty { color: #b7b1a8; font-style: italic; }
.profv2-prev-card__bio { margin: 0; font-size: 14px; line-height: 1.55; color: var(--v2-text2); }
.profv2-prev-card__open { display: flex; align-items: center; justify-content: center; height: 44px;
    border: 1px solid var(--v2-border); border-radius: 12px; background: var(--v2-surface); color: var(--v2-text);
    font-size: 14px; font-weight: 600; text-decoration: none; }
.profv2-prev-card__open:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); }
.profv2-prev-card__open:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.profile-v2 .btn--primary { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.profile-v2 .btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.profile-v2 .btn--primary:disabled { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }

@media (max-width: 900px) {
    .profv2-preview { position: static; max-width: none; }
}
/* End Profile v2 */

/* Partner Apply v2 */
.partner-apply-v2 { max-width: 680px; color: var(--v2-text); }

.pav2-hero { background: var(--v2-shell-header); color: #fff; border-radius: var(--r-card); padding: 28px; margin-bottom: 20px; }
.pav2-hero__eyebrow { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .96px; opacity: .85; }
.pav2-hero__title { margin: 8px 0 12px; font-size: 24px; color: #fff; }
.pav2-hero__lead { margin: 0; opacity: .92; line-height: 1.6; }

.partner-apply-v2 .card.pav2-card { box-shadow: var(--v2-shadow); }
.pav2-card--spaced { margin-bottom: 20px; }
.pav2-card__title { margin: 14px 0 8px; font-size: 20px; color: var(--v2-text); }
.pav2-card__subtitle { margin: 0 0 16px; font-size: 19px; color: var(--v2-text); }
.pav2-card__text { margin: 0; color: var(--v2-text2); }
.pav2-card__sub { margin: 10px 0 0; font-size: 13px; color: var(--v2-text2); }
.pav2-card__sub--dark { font-size: 14px; color: var(--v2-text); }

.pav2-badge { display: inline-flex; align-items: center; padding: 4px 12px; border-radius: 999px; font-size: 12px; font-weight: 700; }
.pav2-badge--pending { background: var(--v2-active-bg); color: var(--v2-active-text); }
.pav2-badge--rejected { background: #fdeceb; color: #c0392b; }

.partner-apply-v2 .input:focus { border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212,101,0,.15); }
.pav2-textarea { height: auto; padding: 12px 14px; min-height: 100px; }
.pav2-file { height: auto; padding: 10px 14px; }
.pav2-uploading { font-size: 12px; color: var(--v2-text2); margin-top: 6px; }
.pav2-submit { width: auto; }

.partner-apply-v2 .btn--primary { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.partner-apply-v2 .btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.partner-apply-v2 .btn--primary:disabled { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }

@media (max-width: 480px) {
    .pav2-submit { width: 100%; }
}
/* End Partner Apply v2 */

/* Partner Course Author v2 */
.partner-course-author-v2 { color: var(--v2-text); }

.partner-course-author-v2 .pv-back { color: var(--v2-text); min-height: 44px; padding: 6px 0; box-sizing: border-box; display: inline-flex; align-items: center; }
.partner-course-author-v2 .pv-back:hover { color: var(--v2-accent-hover); }

.partner-course-author-v2 .pv-banner { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-course-author-v2 .pv-cover { background: var(--v2-shell-header); color: rgba(255,255,255,.85); }

.partner-course-author-v2 .pv-type { color: var(--v2-text2); background: var(--v2-surface-subtle); }
.partner-course-author-v2 .pv-title { color: var(--v2-text); }
.partner-course-author-v2 .pv-desc { color: var(--v2-text); }

.partner-course-author-v2 .pv-row { border: 1px solid var(--v2-border); background: var(--v2-surface); }
.partner-course-author-v2 .pv-row:hover { border-color: var(--v2-accent); }
.partner-course-author-v2 .pv-row.is-open { border-color: var(--v2-action); }
.partner-course-author-v2 .pv-num { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-course-author-v2 .pv-row.is-open .pv-num { background: var(--v2-active-bg); color: var(--v2-active-text); }
.partner-course-author-v2 .pv-row__title { color: var(--v2-text); }
.partner-course-author-v2 .pv-row__toggle { color: var(--v2-text2); }
.partner-course-author-v2 .pv-row:hover .pv-row__toggle,
.partner-course-author-v2 .pv-row.is-open .pv-row__toggle { color: var(--v2-accent-hover); }
.partner-course-author-v2 .pv-num--dot::before { background: var(--v2-accent); }

.partner-course-author-v2 .pv-preview { background: var(--v2-surface-subtle); }
.partner-course-author-v2 .pv-preview__note i { color: var(--v2-text2); }
.partner-course-author-v2 .pv-preview__text { color: var(--v2-text); }
.partner-course-author-v2 .pv-preview__text p { margin: 0 0 10px; }
.partner-course-author-v2 .pv-preview__text p:last-child { margin-bottom: 0; }
.partner-course-author-v2 .pv-preview__text ul, .partner-course-author-v2 .pv-preview__text ol { margin: 0 0 10px; padding-left: 22px; }
.partner-course-author-v2 .pv-preview__text strong { font-weight: 700; }
.partner-course-author-v2 .pv-preview__text em { font-style: italic; }
.partner-course-author-v2 .pv-preview__text a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.partner-course-author-v2 .pv-preview__text a:hover { color: var(--v2-accent); }

.partner-course-author-v2 .pv-card { background: var(--v2-surface); box-shadow: var(--v2-shadow); }
.partner-course-author-v2 .pv-card__rub { color: var(--v2-text); }
.partner-course-author-v2 .pv-card__date { border-top: 1px solid var(--v2-border); }
.partner-course-author-v2 .pv-card__reject { background: #fdeceb; }
.partner-course-author-v2 .pv-card__reject-label { color: #c0392b; }
.partner-course-author-v2 .pv-card__edit { background: var(--v2-action); color: #fff; }
.partner-course-author-v2 .pv-card__edit:hover { background: var(--v2-action-hover); color: #fff; }
.partner-course-author-v2 .pv-card__edit:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.partner-course-author-v2 .pv-card__back { background: var(--v2-surface); border: 1px solid var(--v2-border); color: var(--v2-text); }
.partner-course-author-v2 .pv-card__back:hover { background: var(--v2-surface-subtle); }
.partner-course-author-v2 .pv-card__back:focus-visible,
.partner-course-author-v2 .pv-back:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); border-radius: 6px; }

.partner-course-author-v2 .lms-badge--draft { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-course-author-v2 .pv-card__label,
.partner-course-author-v2 .pv-card__price-label,
.partner-course-author-v2 .pv-preview__label,
.partner-course-author-v2 .pv-prog-hint,
.partner-course-author-v2 .pv-row__meta { color: var(--v2-text2); }
.partner-course-author-v2 .pv-preview__note i { color: var(--v2-text2); }
/* End Partner Course Author v2 */

/* Partner Materials v2 */
.partner-materials-v2 { color: var(--v2-text); }

.partner-materials-v2 .lms-btn--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.partner-materials-v2 .lms-btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.partner-materials-v2 .lms-btn { min-height: 44px; }

.partner-materials-v2 .co-invite { background: var(--v2-active-bg); border: 1px solid #f0dcb4; }
.partner-materials-v2 .co-invite__icon { background: var(--v2-surface); color: var(--v2-active-text); }
.partner-materials-v2 .co-invite__title { color: var(--v2-active-text); }
.partner-materials-v2 .co-invite__accept { background: var(--v2-action); color: #fff; }
.partner-materials-v2 .co-invite__accept:hover { background: var(--v2-action-hover); }
.partner-materials-v2 .co-invite__decline { background: var(--v2-surface); color: var(--v2-text2); border-color: #f0dcb4; }

.partner-materials-v2 .lms-chip { min-height: 44px; box-sizing: border-box; display: inline-flex; align-items: center; }
.partner-materials-v2 .lms-chip:hover { border-color: var(--v2-accent); color: var(--v2-accent-hover); }
.partner-materials-v2 .lms-chip.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.partner-materials-v2 .lms-chip.is-soon:hover { border-color: var(--v2-border); color: var(--v2-text2); }

.partner-materials-v2 .lms-mat__card { background: var(--v2-surface); }
.partner-materials-v2 .lms-mat__icon { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-materials-v2 .lms-badge--type { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-materials-v2 .lms-badge--draft { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-materials-v2 .lms-mat__name { color: var(--v2-text); }
.partner-materials-v2 .lms-mat__rub { color: var(--v2-text); }
.partner-materials-v2 .lms-mat__stat-value { color: var(--v2-text); }

.partner-materials-v2 .lms-iconbtn { border: 1px solid var(--v2-border); background: var(--v2-surface); color: var(--v2-text); width: 44px; height: 44px; }
.partner-materials-v2 .lms-iconbtn:hover { border-color: var(--v2-accent); background: var(--v2-surface-subtle); }
.partner-materials-v2 .lms-iconbtn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-materials-v2 .lms-mat__empty { background: var(--v2-surface); border: 1px dashed var(--v2-border); }
.partner-materials-v2 .co-invite__accept { background: var(--v2-action); color: #fff; }
.partner-materials-v2 .co-invite__accept:hover { background: var(--v2-action-hover); }
.partner-materials-v2 .lms-chip { border-color: var(--v2-border); }
.partner-materials-v2 .lms-iconbtn.is-disabled { color: var(--v2-text2); }
.partner-materials-v2 .lms-iconbtn.is-disabled:hover { border-color: var(--v2-border); background: var(--v2-surface); }
.partner-materials-v2 .lms-mat__empty { border-color: var(--v2-border); }
.partner-materials-v2 .lms-mat__free,
.partner-materials-v2 .lms-mat__joint,
.partner-materials-v2 .lms-mat__note,
.partner-materials-v2 .lms-mat__stat-label { color: var(--v2-text2); }
/* End Partner Materials v2 */

/* Partner Publish v2 */
.partner-publish-v2 { color: var(--v2-text); }
.partner-publish-v2 .lms-chooser__title { color: var(--v2-text); }
.partner-publish-v2 .lms-chooser__lead { color: var(--v2-text2); }
.partner-publish-v2 .lms-chooser__card { background: var(--v2-surface); }
.partner-publish-v2 .lms-chooser__card:not(.is-soon):hover { border-color: var(--v2-accent); box-shadow: var(--v2-shadow); }
.partner-publish-v2 .lms-chooser__card:not(.is-soon):focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }
.partner-publish-v2 .lms-chooser__icon { background: var(--v2-surface-subtle); color: var(--v2-accent); }
.partner-publish-v2 .lms-chooser__name { color: var(--v2-text); }
.partner-publish-v2 .lms-chooser__desc { color: var(--v2-text2); }

@media (max-width: 480px) {
    .partner-publish-v2 .lms-chooser__grid { grid-template-columns: 1fr; }
}
.partner-publish-v2 .lms-chooser__soon { background: var(--v2-active-bg); color: var(--v2-active-text); }
/* End Partner Publish v2 */

/* Partner Course Editor v2 */
.partner-course-editor-v2 { color: var(--v2-text); }

.partner-course-editor-v2 .lms-back { color: var(--v2-text); min-height: 44px; padding: 6px 0; box-sizing: border-box; }
.partner-course-editor-v2 .lms-back:hover { color: var(--v2-accent-hover); }

.partner-course-editor-v2 .lms-stephead__icon { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-course-editor-v2 .lms-stephead__title { color: var(--v2-text); }

.partner-course-editor-v2 .lms-editor__card { background: var(--v2-surface); box-shadow: var(--v2-shadow); }
.partner-course-editor-v2 .lms-editor__card-title { color: var(--v2-text); }

.partner-course-editor-v2 .lms-field__control:focus,
.partner-course-editor-v2 input.lms-field__control:focus,
.partner-course-editor-v2 select.lms-field__control:focus,
.partner-course-editor-v2 textarea.lms-field__control:focus { border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212,101,0,.15); }

.partner-course-editor-v2 .lms-dropzone { border-color: var(--v2-border); background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-course-editor-v2 .lms-dropzone:hover { border-color: var(--v2-accent); background: var(--v2-surface-subtle); }
.partner-course-editor-v2 .lms-dropzone.is-drag { border-color: var(--v2-accent); background: var(--v2-active-bg); }

.partner-course-editor-v2 .lms-terms { background: var(--v2-surface-subtle); }

.partner-course-editor-v2 .lms-free__box.is-on { background: var(--v2-action); border-color: var(--v2-action); }

.partner-course-editor-v2 .lms-addon { background: var(--v2-surface-subtle); }

.partner-course-editor-v2 .lms-btn--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.partner-course-editor-v2 .lms-btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.partner-course-editor-v2 .lms-btn--outline { border-color: var(--v2-border); background: var(--v2-surface); color: var(--v2-text); }
.partner-course-editor-v2 .lms-btn--outline:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); }
.partner-course-editor-v2 .lms-btn { min-height: 44px; }
.partner-course-editor-v2 .lms-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-course-editor-v2 .co-card__icon { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-course-editor-v2 .co-avatar { background: var(--v2-shell-header); }
.partner-course-editor-v2 .co-search__input:focus { border-color: var(--v2-focus); }
.partner-course-editor-v2 .co-list { border-color: var(--v2-border); }
.partner-course-editor-v2 .co-picked { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-course-editor-v2 .co-send { background: var(--v2-action); color: #fff; }
.partner-course-editor-v2 .co-send:hover { background: var(--v2-action-hover); }
.partner-course-editor-v2 .co-state--wait { background: var(--v2-active-bg); }
.partner-course-editor-v2 .co-state--wait .co-state__title { color: var(--v2-active-text); }

.partner-course-editor-v2 .lms-editor__section { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-editor__section-title { background: var(--v2-surface); border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-editor__section-title:focus { border-color: var(--v2-focus); outline: none; }
.partner-course-editor-v2 .lms-editor__lesson { background: var(--v2-surface); border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-editor__lesson-title:focus { border-color: var(--v2-focus); outline: none; }
.partner-course-editor-v2 .lms-sec-toggle { min-height: 44px; }
.partner-course-editor-v2 .lms-sec-toggle__chev { color: var(--v2-text2); }
.partner-course-editor-v2 .lms-sec-toggle__count { color: var(--v2-text2); background: var(--v2-surface); border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-sec-drip__input:focus { border-color: var(--v2-focus); outline: none; }
.partner-course-editor-v2 .lms-link { color: var(--v2-text2); }
.partner-course-editor-v2 .lms-link:hover { color: var(--v2-text); }
.partner-course-editor-v2 .lms-addlink { color: var(--v2-accent-hover); min-height: 44px; padding: 6px 0; box-sizing: border-box; }

.partner-course-editor-v2 .lms-vid { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-vid__prog span { background: var(--v2-accent); }
.partner-course-editor-v2 .lms-embed__input { border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-embed__input:focus { border-color: var(--v2-focus); }
.partner-course-editor-v2 .lms-embed__input[readonly] { background: var(--v2-surface-subtle); }
.partner-course-editor-v2 .lms-embed--fold { border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-embed-hint__btn { border-color: var(--v2-accent); color: var(--v2-accent-hover); }
.partner-course-editor-v2 .lms-embed-hint__btn:hover { background: var(--v2-accent); color: #fff; }

.partner-course-editor-v2 .sec-save__btn { background: var(--v2-action); color: #fff; }
.partner-course-editor-v2 .sec-save__btn:hover { background: var(--v2-action-hover); }
.partner-course-editor-v2 .sec-save__btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.partner-course-editor-v2 .lms-empty a { color: var(--v2-text); text-decoration: underline; }
.partner-course-editor-v2 .lms-empty a:hover { color: var(--v2-accent-hover); }

@media (max-width: 480px) {
    .partner-course-editor-v2 .lms-editor__card-head { flex-direction: column; align-items: stretch; }
    .partner-course-editor-v2 .lms-btn { width: 100%; justify-content: center; }
}
.partner-course-editor-v2 .lms-act--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.partner-course-editor-v2 .lms-act--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.partner-course-editor-v2 .lms-act:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-course-editor-v2 .lms-field__control { border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-field__control:disabled { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-course-editor-v2 .lms-dropzone__body span { color: var(--v2-text2); }

.partner-course-editor-v2 .lms-free__box { border-color: var(--v2-border); }

.partner-course-editor-v2 .co-search__input { border-color: var(--v2-border); }
.partner-course-editor-v2 .co-search svg { color: var(--v2-text2); }
.partner-course-editor-v2 .co-card__sub,
.partner-course-editor-v2 .co-empty,
.partner-course-editor-v2 .co-list__mail,
.partner-course-editor-v2 .co-list__more,
.partner-course-editor-v2 .co-picked__label { color: var(--v2-text2); }
.partner-course-editor-v2 .co-list__more,
.partner-course-editor-v2 .co-list__row:hover { background: var(--v2-surface-subtle); }
.partner-course-editor-v2 .co-state--wait .co-state__btn { border-color: var(--v2-border); }

.partner-course-editor-v2 .lms-editor__lesson-title { border-color: var(--v2-border); }

.partner-course-editor-v2 .lms-embed__by,
.partner-course-editor-v2 .lms-editor__note,
.partner-course-editor-v2 .lms-lblock__label em,
.partner-course-editor-v2 .lms-sec-drip__hint,
.partner-course-editor-v2 .lms-stephead__eyebrow,
.partner-course-editor-v2 .lms-vid__sub { color: var(--v2-text2); }

.partner-course-editor-v2 .lms-sec-drip__input { border-color: var(--v2-border); }
.partner-course-editor-v2 .lms-vid__prog { background: var(--v2-surface-subtle); }

.partner-course-editor-v2 .pcev2-embed-head {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 6px;
}
.partner-course-editor-v2 .pcev2-embed-head .lms-embed__label {
    margin-bottom: 0;
}

.partner-course-editor-v2 .pcev2-vimeo-help {
    display: inline-flex;
    min-height: 44px;
    align-items: center;
    font-size: 13px;
    color: var(--v2-text);
    text-decoration: underline;
    text-decoration-color: var(--v2-text);
}
.partner-course-editor-v2 .pcev2-vimeo-help:hover {
    color: var(--v2-text);
    text-decoration: underline;
    text-decoration-color: var(--v2-accent);
    text-decoration-thickness: 2px;
}
.partner-course-editor-v2 .pcev2-vimeo-help:focus-visible {
    outline: 3px solid var(--v2-focus);
    outline-offset: 2px;
}
/* End Partner Course Editor v2 */

/* Lesson Description Editor v2 (задача 2026-08-13-05) -- Trix, локально
   вендоренный (public/vendor/trix), без CDN. Кастомный <trix-toolbar> уже
   содержит только 7 разрешённых действий -- CSS ничего не прячет, только
   оформляет рамку/фон/состояния вокруг штатных иконок trix.css (сам рисунок
   иконок не переопределяем, только цвет/размер/фокус по токенам v2). */
/* <trix-toolbar> сам НЕ должен быть flex-контейнером: его прямые дети —
   .trix-button-row И .trix-dialogs (диалог ссылки) -- flex здесь превращал
   их в flex-сиблингов в одну строку, из-за чего диалог «Ссылка» сжимался в
   узкую полосу и вылезал за пределы карточки (правка приёмки 13.08.2026).
   Перенос кнопок делает сам .trix-button-row (flex-wrap ниже). */
.partner-course-editor-v2 .lde-toolbar { margin-bottom: 8px; }
.partner-course-editor-v2 .lde-toolbar .trix-button-row { display: flex; flex-wrap: wrap; gap: 6px; width: 100%; }
.partner-course-editor-v2 .lde-toolbar .trix-button-group { display: flex; flex-wrap: wrap; gap: 4px; padding: 0; border: none; margin: 0; }
/* Компактная кнопка 32px с иконкой ~16px: увеличенный до 44px бокс (первая
   попытка правки приёмки) визуально читался как «огромные иконки» даже после
   уменьшения самого рисунка -- доминировала рамка, а не глиф. На указателе
   без точного позиционирования (тач) зона нажатия возвращается к 44px ниже. */
/* Только кнопки-иконки: диалог ссылки лежит внутри того же <trix-toolbar>, и
   общий селектор .trix-button сжимал его текстовые кнопки до 32px, обрезая
   подписи «Ссылка»/«Убрать ссылку» (правка приёмки 14.08.2026). */
.partner-course-editor-v2 .lde-toolbar .trix-button--icon {
    width: 32px; height: 32px; max-width: none; padding: 0;
    border: 1px solid var(--v2-border); border-radius: 8px;
    background: var(--v2-surface); color: var(--v2-text);
    cursor: pointer; transition: border-color .15s, background .15s;
}
/* Иконка Trix заливает весь бокс кнопки через background-size:contain и растёт
   вместе с ним -- задаём размер рисунка отдельно от размера зоны нажатия.
   width/max-width выше перебивают собственные 2.6em/calc(0.8em+4vw) из trix.css,
   иначе кнопка остаётся широким прямоугольником. */
.partner-course-editor-v2 .lde-toolbar .trix-button--icon::before { background-size: 60%; }
@media (pointer: coarse) {
    .partner-course-editor-v2 .lde-toolbar .trix-button--icon { width: 44px; height: 44px; }
}
.partner-course-editor-v2 .lde-toolbar .trix-button:hover { border-color: var(--v2-accent); }
.partner-course-editor-v2 .lde-toolbar .trix-button:focus-visible {
    outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}
.partner-course-editor-v2 .lde-toolbar .trix-button.trix-active { background: var(--v2-active-bg); border-color: var(--v2-active-text); }

.partner-course-editor-v2 .trix-dialog--link { background: var(--v2-surface); border-radius: 12px; box-shadow: var(--v2-shadow); padding: 10px; }
/* Строка диалога переносится: у <input> как flex-элемента работает
   автоматический минимальный размер (min-width:auto ~= ширина 20 символов),
   а группа кнопок в trix.css стоит flex:0 0 content -- ни то, ни другое не
   сжималось, и на узкой карточке кнопки «Ссылка»/«Убрать ссылку» уезжали за
   правый край (правка приёмки 14.08.2026). min-width:0 разрешает полю
   сжиматься, flex-basis 220px переносит кнопки на вторую строку, когда места
   на одну уже не хватает. */
.partner-course-editor-v2 .trix-dialog__link-fields { flex-wrap: wrap; align-items: center; gap: 8px; }
.partner-course-editor-v2 .trix-input--dialog {
    flex: 1 1 220px; min-width: 0; width: auto; margin: 0;
    min-height: 44px; padding: 0 12px; border: 1px solid var(--v2-border); border-radius: 8px;
    font: 400 14px 'Raleway', sans-serif; color: var(--v2-text); box-sizing: border-box;
}
.partner-course-editor-v2 .trix-input--dialog:focus { outline: none; border-color: var(--v2-focus); }
.partner-course-editor-v2 .trix-dialog__link-fields .trix-button-group {
    display: flex; flex-wrap: wrap; gap: 8px; margin: 0; flex: 0 0 auto;
}
.partner-course-editor-v2 .trix-button--dialog {
    width: auto; height: auto; max-width: none; white-space: nowrap;
    min-height: 44px; padding: 0 14px; border: 1px solid var(--v2-border); border-radius: 8px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 13px 'Raleway', sans-serif; cursor: pointer;
}
.partner-course-editor-v2 .trix-button--dialog:hover { border-color: var(--v2-accent); }

.partner-course-editor-v2 .lde-input {
    display: block; width: 100%; min-height: 96px; padding: 10px 12px; border: 1px solid var(--v2-border);
    border-radius: 10px; background: var(--v2-surface); color: var(--v2-text); font: 400 14px 'Raleway', sans-serif;
    line-height: 1.6; box-sizing: border-box;
}
.partner-course-editor-v2 .lde-input:focus { outline: none; border-color: var(--v2-focus); }
.partner-course-editor-v2 .lde-input[contenteditable=false] { background: var(--v2-surface-subtle); color: var(--v2-text2); cursor: not-allowed; }
.partner-course-editor-v2 .lde-input p { margin: 0 0 10px; }
.partner-course-editor-v2 .lde-input p:last-child { margin-bottom: 0; }
.partner-course-editor-v2 .lde-input ul, .partner-course-editor-v2 .lde-input ol { margin: 0 0 10px; padding-left: 22px; }
.partner-course-editor-v2 .lde-input strong { font-weight: 700; }
.partner-course-editor-v2 .lde-input em { font-style: italic; }
.partner-course-editor-v2 .lde-input a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.partner-course-editor-v2 .lde-input a:hover { color: var(--v2-accent); }

.lms-lblock:has(.lde-input[contenteditable=false]) .lde-toolbar { opacity: .5; pointer-events: none; }
/* End Lesson Description Editor v2 */

/* Partner Services v2 */
.partner-services-v2 .lms-act--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.partner-services-v2 .lms-act--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.partner-services-v2 .lms-act--ghost { color: var(--v2-text); border-color: var(--v2-border); }
.partner-services-v2 .lms-act--ghost:hover { background: var(--v2-surface-subtle); }
.partner-services-v2 .lms-act:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-services-v2 .svc-card { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }
.partner-services-v2 .svc-card__meta { color: var(--v2-text2); }
.partner-services-v2 .svc-badge--off { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-services-v2 .svc-empty { border-color: var(--v2-border); }
.partner-services-v2 .svc-empty__icon { background: var(--v2-surface-subtle); color: var(--v2-text); }
/* End Partner Services v2 */

/* Partner Service Editor v2 */
.partner-service-editor-v2 .svc-back { color: var(--v2-text); }
.partner-service-editor-v2 .svc-back:hover { color: var(--v2-accent); }

.partner-service-editor-v2 .svc-form,
.partner-service-editor-v2 .svc-slots { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }

.partner-service-editor-v2 .lms-field__control { border-color: var(--v2-border); }
.partner-service-editor-v2 .lms-field__control:focus { border-color: var(--v2-focus); box-shadow: 0 0 0 3px var(--v2-active-bg); }

.partner-service-editor-v2 .lms-free__box { border-color: var(--v2-border); }
.partner-service-editor-v2 .lms-free__box.is-on { background: var(--v2-action); border-color: var(--v2-action); }

.partner-service-editor-v2 .svc-terms { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-service-editor-v2 .svc-terms__lead { color: var(--v2-text2); }

.partner-service-editor-v2 .lms-act--primary { background: var(--v2-action); color: #fff; border-color: var(--v2-action); }
.partner-service-editor-v2 .lms-act--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.partner-service-editor-v2 .lms-act:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-service-editor-v2 .svc-slots__add { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-service-editor-v2 .svc-slots__empty { border-color: var(--v2-border); color: var(--v2-text2); }

.partner-service-editor-v2 .svc-info { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text); }

.partner-service-editor-v2 .svc-slot { border-color: var(--v2-border); }
.partner-service-editor-v2 .svc-slot__icon { color: var(--v2-text2); }
.partner-service-editor-v2 .svc-slot__note { color: var(--v2-text2); }
.partner-service-editor-v2 .svc-slot__del { border-color: var(--v2-border); }
.partner-service-editor-v2 .lms-field__hint { color: var(--v2-text2); }
/* End Partner Service Editor v2 */

/* Partner Incoming v2 */
.partner-incoming-v2 .svc-empty { border-color: var(--v2-border); }
.partner-incoming-v2 .svc-empty__icon { background: var(--v2-surface-subtle); color: var(--v2-text); }

.partner-incoming-v2 .inb-card { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }
.partner-incoming-v2 .inb-ava { background: var(--v2-action); }
.partner-incoming-v2 .inb-card__q { background: var(--v2-surface-subtle); border-color: var(--v2-border); }

.partner-incoming-v2 .inb-status--confirmed { background: var(--v2-active-bg); color: var(--v2-active-text); }
.partner-incoming-v2 .inb-status--canceled,
.partner-incoming-v2 .inb-status--refunded { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-incoming-v2 .inb-slots__hint { color: var(--v2-text2); }
.partner-incoming-v2 .inb-slot { border-color: var(--v2-border); color: var(--v2-text2); }
.partner-incoming-v2 .inb-slot:hover { border-color: var(--v2-accent); color: var(--v2-text); }
.partner-incoming-v2 .inb-slot.is-on { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.partner-incoming-v2 .inb-slot.is-busy { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-incoming-v2 .inb-slot.is-busy:hover { border-color: var(--v2-border); color: var(--v2-text2); }

.partner-incoming-v2 .inb-sec h4 { color: var(--v2-text2); }

.partner-incoming-v2 .inb-table-wrap { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }
.partner-incoming-v2 .inb-table__head { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }
.partner-incoming-v2 .inb-row { border-color: var(--v2-border); }
.partner-incoming-v2 .inb-row:hover { background: var(--v2-surface-subtle); }
.partner-incoming-v2 .inb-row__win--none { color: var(--v2-text2); }

/* Тень строки — только в мобильной карточной раскладке (легаси-брейкпоинт
   самой .inb-row); на десктопе тень несёт общий .inb-table-wrap, иначе
   таблица выглядит стопкой наложенных карточек. */
@media (max-width: 900px) {
    .partner-incoming-v2 .inb-row { box-shadow: var(--v2-shadow); }
}

.partner-incoming-v2 .inb-btn--primary { background: var(--v2-action); color: #fff; }
.partner-incoming-v2 .inb-btn--primary:hover { background: var(--v2-action-hover); color: #fff; }
.partner-incoming-v2 .inb-btn--ghost { border-color: var(--v2-border); color: var(--v2-text); }
.partner-incoming-v2 .inb-btn--ghost:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.partner-incoming-v2 .inb-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.partner-incoming-v2 .inb-decline textarea { border-color: var(--v2-border); }
.partner-incoming-v2 .inb-decline textarea:focus { border-color: var(--v2-focus); }
.partner-incoming-v2 .lms-field__control { border-color: var(--v2-border); }
.partner-incoming-v2 .lms-field__control:focus { border-color: var(--v2-focus); }

.partner-incoming-v2 .inb-window { background: var(--v2-active-bg); color: var(--v2-active-text); }
.partner-incoming-v2 .inb-window--done { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-incoming-v2 .inb-window--done i,
.partner-incoming-v2 .inb-window--done svg { color: var(--v2-text2); }

.partner-incoming-v2 .lms-pager__btn { border-color: var(--v2-border); color: var(--v2-text); }
.partner-incoming-v2 .lms-pager__btn:hover { border-color: var(--v2-accent); color: var(--v2-text); }
.partner-incoming-v2 .lms-pager__btn.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.partner-incoming-v2 .lms-pager__btn.is-disabled { color: var(--v2-text2); border-color: var(--v2-border); }
.partner-incoming-v2 .lms-pager__btn.is-disabled:hover { color: var(--v2-text2); border-color: var(--v2-border); }
.partner-incoming-v2 .lms-pager__gap { color: var(--v2-text2); }
/* End Partner Incoming v2 */

/* Partner Chat v2 */
.partner-chat-v2 .svc-back { color: var(--v2-text); }
.partner-chat-v2 .svc-back:hover { color: var(--v2-accent); }
.partner-chat-v2 .exp-ava { background: linear-gradient(137deg, var(--v2-action), var(--v2-action-hover)); }

.partner-chat-v2 .cht-shell { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }
.partner-chat-v2 .cht-shell--closed { border-color: var(--v2-border); }
.partner-chat-v2 .cht-head { border-bottom-color: var(--v2-border); }
.partner-chat-v2 .cht-head__name em { color: var(--v2-text2); }
.partner-chat-v2 .cht-window { background: var(--v2-active-bg); color: var(--v2-active-text); }
.partner-chat-v2 .cht-timer { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-chat-v2 .cht-head__link:hover { color: var(--v2-accent); }
.partner-chat-v2 .cht-acts { border-color: var(--v2-border); box-shadow: var(--v2-shadow); }
.partner-chat-v2 .cht-act:hover { background: var(--v2-surface-subtle); }
.partner-chat-v2 .cht-deleted { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }

.partner-chat-v2 .cht-quote { border-left-color: var(--v2-accent); background: var(--v2-surface-subtle); }
.partner-chat-v2 .cht-quote__name { color: var(--v2-text); }
.partner-chat-v2 .cht-quote__gone { color: var(--v2-text2); }

.partner-chat-v2 .cht-edit textarea { border-color: var(--v2-border); }
.partner-chat-v2 .cht-edit__save { background: var(--v2-action); }
.partner-chat-v2 .cht-edit__cancel { border-color: var(--v2-border); }
.partner-chat-v2 .cht-bubble--own .cht-edit__save { color: var(--v2-action); }

.partner-chat-v2 .cht-replybar { background: var(--v2-surface-subtle); border-top-color: var(--v2-border); }
.partner-chat-v2 .cht-replybar > i,
.partner-chat-v2 .cht-replybar > svg { color: var(--v2-text2); }
.partner-chat-v2 .cht-replybar__body { border-left-color: var(--v2-accent); }
.partner-chat-v2 .cht-replybar__name { color: var(--v2-text); }
.partner-chat-v2 .cht-replybar__x { border-color: var(--v2-border); }
.partner-chat-v2 .cht-replybar__x:hover { background: var(--v2-surface-subtle); }

.partner-chat-v2 .cht-bubble { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-chat-v2 .cht-bubble--own { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.partner-chat-v2 .cht-text a { color: var(--v2-text); text-decoration-color: var(--v2-accent); }
.partner-chat-v2 .cht-time { color: var(--v2-text2); }
.partner-chat-v2 .cht-tick { color: var(--v2-text2); }
.partner-chat-v2 .cht-tick--read { color: var(--v2-accent); }
.partner-chat-v2 .cht-typing { border-top-color: var(--v2-border); background: var(--v2-surface-subtle); color: var(--v2-text2); }
.partner-chat-v2 .cht-typing__dots i { background: var(--v2-text2); }
.partner-chat-v2 .cht-empty { color: var(--v2-text2); }
.partner-chat-v2 .cht-bubble:not(.cht-bubble--own) .cht-att { border-color: var(--v2-border); }
.partner-chat-v2 .cht-notice--done { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.partner-chat-v2 .cht-compose { border-top-color: var(--v2-border); }
.partner-chat-v2 .cht-input textarea { border-color: var(--v2-border); }
.partner-chat-v2 .cht-input textarea:focus { border-color: var(--v2-focus); }
.partner-chat-v2 .cht-clip { border-color: var(--v2-border); color: var(--v2-text2); }
.partner-chat-v2 .cht-clip:hover { background: var(--v2-surface-subtle); }
.partner-chat-v2 .cht-emoji__pop { border-color: var(--v2-border); }
.partner-chat-v2 .cht-emoji__title { color: var(--v2-text2); }
.partner-chat-v2 .cht-emoji__grid button:hover { background: var(--v2-surface-subtle); }
.partner-chat-v2 .cht-hint { color: var(--v2-text2); }

.partner-chat-v2 .cht-picked { color: var(--v2-text2); }
.partner-chat-v2 .cht-picked span { background: var(--v2-surface-subtle); }

.partner-chat-v2 .cht-send { background: var(--v2-action); }
.partner-chat-v2 .cht-send:hover { background: var(--v2-action-hover); }

.partner-chat-v2 .cht-archive { background: var(--v2-surface-subtle); border-color: var(--v2-border); }
.partner-chat-v2 .cht-archive i,
.partner-chat-v2 .cht-archive svg { color: var(--v2-text2); }
.partner-chat-v2 .cht-archive--soon { background: var(--v2-active-bg); color: var(--v2-active-text); }
.partner-chat-v2 .cht-archive--soon i,
.partner-chat-v2 .cht-archive--soon svg { color: var(--v2-active-text); }

.partner-chat-v2 .lms-act--ghost { color: var(--v2-text); border-color: var(--v2-border); }
.partner-chat-v2 .lms-act--ghost:hover { background: var(--v2-surface-subtle); }
.partner-chat-v2 .lms-modal { background: rgba(23, 21, 18, .45); }
.partner-chat-v2 .lms-modal__close { color: var(--v2-text2); }
/* End Partner Chat v2 */

/* Partner Sales v2 */
.partner-sales-v2 input.cat-search:focus { border-color: var(--v2-focus); }
.partner-sales-v2 .cat-tabs { border-color: var(--v2-border); }
.partner-sales-v2 .cat-tab:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.partner-sales-v2 .cat-tab.is-on { background: var(--v2-action); color: #fff; }

.partner-sales-v2 .cat-empty__icon { background: var(--v2-surface-subtle); color: var(--v2-text); }

.partner-sales-v2 .sal-dates input { border-color: var(--v2-border); }
.partner-sales-v2 .sal-dates input:focus { border-color: var(--v2-focus); }

.partner-sales-v2 .sal-kpi { border-color: var(--v2-border); }
.partner-sales-v2 .sal-kpi__label { color: var(--v2-text2); }
.partner-sales-v2 .sal-hint { color: var(--v2-text2); padding-top: 1px; }
.partner-sales-v2 .sal-kpi--accent {
    background: linear-gradient(137deg, var(--v2-action), var(--v2-action-hover));
    border-color: transparent;
    box-shadow: 0 20px 50px -20px rgba(23, 21, 18, .4);
}
/* Специфичность выше .partner-sales-v2 .sal-kpi__label — иначе кассад того
   правила (тот же вес, но раньше в файле) молча выигрывает и подпись «Ваш
   доход» становится нечитаемо тусклой на тёмной плитке. */
.partner-sales-v2 .sal-kpi--accent .sal-kpi__label,
.partner-sales-v2 .sal-kpi--accent .sal-kpi__sub { color: rgba(255, 255, 255, .85); }

.partner-sales-v2 .sal-chart { border-color: var(--v2-border); }
.partner-sales-v2 .sal-chart__col span { color: var(--v2-text2); }
.partner-sales-v2 .sal-chart__bar { background: linear-gradient(180deg, var(--v2-accent), var(--v2-accent-hover)); }

.partner-sales-v2 .sal-box { border-color: var(--v2-border); }
.partner-sales-v2 .sal-items__head { border-bottom-color: var(--v2-border); color: var(--v2-text2); }
.partner-sales-v2 .sal-note { color: var(--v2-text2); }

.partner-sales-v2 .sal-link { color: var(--v2-accent); }
.partner-sales-v2 .sal-txn__right span { color: var(--v2-text2); }
/* End Partner Sales v2 */

/* Partner Payouts Coming Soon v2 */
.partner-payouts-soon-v2 { display: flex; justify-content: center; padding: 40px 20px; }
.partner-payouts-soon-v2__card {
    width: 100%; max-width: 480px; background: var(--v2-surface); 
    border-radius: 18px; box-shadow: var(--v2-shadow); padding: 32px 28px; text-align: center;
}
.partner-payouts-soon-v2__badge {
    display: inline-flex; align-items: center; justify-content: center; height: 24px; padding: 0 12px;
    margin-bottom: 14px; border-radius: 999px; background: var(--v2-surface-subtle); color: var(--v2-text2);
    font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
}
.partner-payouts-soon-v2__card h2 { margin: 0 0 8px; font-size: 22px; font-weight: 700; color: var(--v2-text); }
.partner-payouts-soon-v2__card p { margin: 0 0 8px; font-size: 14px; line-height: 1.6; color: var(--v2-text2); }
.partner-payouts-soon-v2__action {
    display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 0 22px;
    margin-top: 16px; border-radius: 12px; background: var(--v2-action); color: #fff; font-size: 14px;
    font-weight: 600; text-decoration: none; transition: background .15s;
}
.partner-payouts-soon-v2__action:hover { background: var(--v2-action-hover); }
.partner-payouts-soon-v2__action:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

@media (max-width: 480px) {
    .partner-payouts-soon-v2__action { width: 100%; }
}
/* End Partner Payouts Coming Soon v2 */

/* Admin Catalog Preview v2 */
.acp-catalog { color: var(--v2-text); }

.acp-controls { display: flex; flex-direction: column; gap: 14px; margin-bottom: 18px; }
.acp-search { min-height: 44px; width: 100%; max-width: 320px; padding: 0 16px; border: 1px solid var(--v2-border);
    border-radius: 12px; background: var(--v2-surface); color: var(--v2-text); font: 500 14px 'Raleway', sans-serif;
    outline: none; transition: border-color .15s; }
.acp-search::placeholder { color: var(--v2-text2); }
.acp-search:focus-visible { outline: none; border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212, 101, 0, .18); }

.acp-tabs, .acp-filters { display: flex; flex-wrap: wrap; gap: 8px; }
.acp-tab { min-height: 44px; padding: 0 16px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface); color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; cursor: pointer;
    transition: border-color .15s, background .15s, color .15s; }
.acp-tab:hover:not(.is-active) { border-color: var(--v2-accent); }
.acp-tab.is-active { border-color: var(--v2-action); background: var(--v2-action); color: #fff; }
.acp-tab:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.acp-status-filter { min-height: 44px; padding: 0 14px; border: 1px solid var(--v2-border); border-radius: 999px;
    background: var(--v2-surface); color: var(--v2-text2); font: 600 13px 'Raleway', sans-serif; cursor: pointer;
    transition: border-color .15s, background .15s, color .15s; }
.acp-status-filter:hover:not(.is-active) { border-color: var(--v2-accent); }
.acp-status-filter.is-active { border-color: var(--v2-action); background: var(--v2-action); color: #fff; }
.acp-status-filter:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.acp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px; }
.acp-pagination { margin-top: 24px; }

.acp-empty { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center;
    padding: 48px 24px; background: var(--v2-surface); border: 1px dashed var(--v2-border); border-radius: 20px; }
.acp-empty-icon { display: flex; align-items: center; justify-content: center; width: 52px; height: 52px;
    border-radius: 15px; background: var(--v2-surface-subtle); color: var(--v2-text2); }
.acp-empty-icon i { width: 26px; height: 26px; }
.acp-empty p { margin: 0; max-width: 520px; font-size: 14px; line-height: 1.6; color: var(--v2-text2); }

/* Бейдж статуса поверх обложки карточки (переиспользует .cc-card__cover/.library-card__cover — обе уже position:relative) */
.acp-status-badge { position: absolute; top: 10px; left: 10px; z-index: 2; display: inline-flex; align-items: center;
    height: 26px; padding: 0 10px; border-radius: 999px; font-size: 12px; font-weight: 700; }
.acp-status-badge--draft { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.acp-status-badge--pending { background: #fdf0dd; color: #8a5a1e; }
.acp-status-badge--published { background: #e6f4ea; color: #1e7d34; }
.acp-status-badge--rejected { background: #f3e8e8; color: #8a4747; }

/* Панель административного предпросмотра страницы курса (course-preview.blade.php) */
.acp-preview { color: var(--v2-text); }
.acp-preview .lms-badge--draft { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.acp-preview__panel { background: var(--v2-surface); border-radius: 18px;
    box-shadow: var(--v2-shadow); padding: 16px 18px; margin-bottom: 20px; display: flex; align-items: center;
    justify-content: space-between; gap: 16px; flex-wrap: nowrap; box-sizing: border-box; }
/* Тот же width: 60%, что .lms-course на >=1024px (app.css, комментарий
   «Страница курса: на десктопе ширина 60%») -- иначе панель шире основного
   блока course-show ниже (найдено живым DOM-замером при сдаче Task 7). */
@media (min-width: 1024px) {
    .acp-preview__panel { width: 60%; }
}
/* Панель предпросмотра УРОКА (lesson-preview.blade.php) обёрнута в
   .acp-preview--lesson: под ней рендерится .lesson-v2, у которого своя,
   отличная от .lms-course, ширина -- width: min(100%, 960px) с
   margin-inline: auto (центрируется, а не 60% слева). Без этого override
   верхний блок был левее центрированного видео/контента ниже (правка
   приёмки, живой скриншот заказчика). */
.acp-preview--lesson .acp-preview__panel { width: min(100%, 960px); margin-inline: auto; }
/* Действия (возврат/редактировать/...) -- слева, бейджи статуса -- справа
   (правка приёмки: изначально было наоборот). order переставляет визуальный
   порядок, не трогая DOM-порядок meta-раньше-actions, на который опирается
   структурный тест панели. */
.acp-preview__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; flex-shrink: 0; order: 2; }
.acp-preview__badge { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px;
    border-radius: 999px; background: var(--v2-active-bg); color: var(--v2-active-text); font: 700 13px 'Raleway', sans-serif; }
.acp-preview__badge i { width: 15px; height: 15px; }

.acp-preview__actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-start; order: 1; }
.acp-preview__back, .acp-preview__action { display: inline-flex; align-items: center; gap: 8px; min-height: 44px;
    padding: 0 16px; border: 1px solid var(--v2-border); border-radius: 12px; background: var(--v2-surface);
    color: var(--v2-text); font: 600 14px 'Raleway', sans-serif; text-decoration: none; cursor: pointer;
    transition: border-color .15s, color .15s; }
.acp-preview__back:hover, .acp-preview__action:hover { border-color: var(--v2-accent); color: var(--v2-text); }
.acp-preview__back:focus-visible, .acp-preview__action:focus-visible { outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.acp-preview__action i { width: 16px; height: 16px; }

/* Название урока в программе курса — ссылка на предпросмотр урока (Task 6).
   Глобальное a { color: var(--brand) } красит текст в легаси-синий — держим
   свой цвет явно, тот же приём, что у .cc-card__action--secondary. */
.admin-course-preview-content .course-detail__prog-link { color: var(--v2-text); text-decoration: underline;
    text-underline-offset: 2px; text-decoration-color: var(--v2-border); }
.admin-course-preview-content .course-detail__prog-link:hover { color: var(--v2-accent-hover);
    text-decoration-color: var(--v2-accent-hover); }
.admin-course-preview-content .course-detail__prog-link:focus-visible { outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); border-radius: 3px; }

@media (max-width: 767px) {
    .acp-grid { grid-template-columns: minmax(0, 1fr); }
    .acp-search { max-width: none; }
    .acp-preview__panel { flex-direction: column; align-items: stretch; }
    /* На мобильном порядок не переставляем -- бейджи статуса сверху,
       действия под ними, как было до правки левой/правой стороны. */
    .acp-preview__head { order: 0; }
    .acp-preview__actions { order: 0; flex-direction: column; align-items: stretch; justify-content: flex-start; }
    .acp-preview__back, .acp-preview__action { width: 100%; justify-content: center; }
}
/* End Admin Catalog Preview v2 */

/* Course Cover Media v2 — единая пропорция 1200:630 для всех обложек курса
   (задача 2026-08-13-04). Добавляется вторым классом рядом с page-specific
   классом медиаблока: page-specific класс отвечает за границы/тень/фон-
   заглушку и центровку fallback-иконки, этот примитив — только за пропорцию
   и обрезку картинки. Источник не обязан иметь физический размер 1200×630 —
   object-fit: cover аккуратно обрезает любые другие пропорции по центру. */
.course-cover-media { aspect-ratio: 1200 / 630; overflow: hidden; }
.course-cover-media > img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; }
/* End Course Cover Media v2 */

/* Experts Pages v2 */
/* Каталог и профиль эксперта, обе ветки (гость и авторизованный) — задача
   2026-08-14-01. Блок изолирован собственными корнями:
   .experts-catalog-v2 / .experts-catalog-public-v2 (списки) и
   .expert-profile-v2 / .expert-profile-public-v2 (профили). Гостевая главная
   сюда не входит: она осталась на .pub-exp-card и этой задачей не менялась. */

/* ── Сетка каталога: 4/3/2/1 по доступной ширине, без искусственного max-width,
      поэтому справа не остаётся пустой зоны. ───────────────────────────────── */
.experts-catalog-v2 .experts-grid-v2,
.experts-catalog-public-v2 .experts-grid-v2 {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 16px;
    align-items: stretch;
    width: 100%;
    margin: 0;
}

/* ── Карточка эксперта ─────────────────────────────────────────────────────── */
.experts-grid-v2 .expert-card-v2 {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 6px;
    height: 100%;
    box-sizing: border-box;
    padding: 20px;
    background: var(--v2-surface);
    border-radius: 18px;
    box-shadow: var(--v2-shadow);
    color: var(--v2-text);
    transition: border-color .15s, transform .15s;
}
.experts-grid-v2 .expert-card-v2:hover { border-color: var(--v2-accent); }

.experts-grid-v2 .expert-card-v2__badge {
    position: absolute;
    top: 16px;
    right: 16px;
    /* Макет: подпись стоит в пилюле с заметным воздухом сверху и снизу.
       Отступ общий для обоих состояний — отмеченный и обычный бейджи должны
       быть одной высоты. Значение выверено заказчиком на стенде 19.08.2026. */
    padding: 7px 9px 6px 7px;
    border-radius: 999px;
    background: var(--v2-surface-subtle);
    color: var(--v2-text2);
    font: 600 11px 'Raleway', sans-serif;
    text-transform: uppercase;
    letter-spacing: .5px;
}

.experts-grid-v2 .expert-card-v2__photo,
.experts-grid-v2 .expert-card-v2__ava {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    object-fit: cover;
    flex: none;
    margin-bottom: 6px;
}
.experts-grid-v2 .expert-card-v2__ava {
    display: grid;
    place-items: center;
    background: var(--v2-surface-subtle);
    color: var(--v2-text2);
    font: 700 26px 'Raleway', sans-serif;
}

.experts-grid-v2 .expert-card-v2__name {
    margin: 0;
    /* Место под бейдж справа, чтобы длинное имя под него не заезжало. */
    padding-right: 86px;
    font: 700 17px 'Raleway', sans-serif;
    line-height: 1.3;
    color: var(--v2-text);
    overflow-wrap: anywhere;
}
.experts-grid-v2 .expert-card-v2__spec {
    margin: 0;
    font: 500 14px 'Raleway', sans-serif;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.experts-grid-v2 .expert-card-v2__city {
    display: flex;
    align-items: center;
    gap: 5px;
    margin: 0;
    font: 400 13px 'Raleway', sans-serif;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.experts-grid-v2 .expert-card-v2__city i,
.experts-grid-v2 .expert-card-v2__city svg { width: 14px; height: 14px; flex: none; }

.experts-grid-v2 .expert-card-v2__bio {
    margin: 6px 0 0;
    font: 400 14px 'Raleway', sans-serif;
    line-height: 1.55;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
    /* Пять строк: приём тот же, что у описания курса в каталоге. */
    display: -webkit-box;
    -webkit-line-clamp: 5;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Раскрытая карточка показывает описание целиком. Класс висит на карточке, а не
   на абзаце: по нему же меняется вид переключателя. */
.experts-grid-v2 .expert-card-v2.is-expanded .expert-card-v2__bio {
    -webkit-line-clamp: unset;
    display: block;
    overflow: visible;
}

/* Переключатель выглядит текстовой строкой, но остаётся кнопкой: он меняет
   состояние на месте, а не открывает страницу. Зона нажатия — 44 px по высоте,
   набрана отступами, чтобы визуально это была та же строка. */
.experts-grid-v2 .expert-card-v2__bio-toggle {
    align-self: flex-start;
    min-height: 44px;
    /* Отступ сверху и снизу даёт только row-gap карточки (6px): своего margin
       у переключателя нет, иначе сверху получалось бы больше, чем снизу до
       кнопки. Воздух вокруг надписи набран padding'ом внутри зоны нажатия. */
    margin: 0;
    padding: 10px 0;
    border: 0;
    background: none;
    color: var(--v2-action);
    font: 600 14px 'Raleway', sans-serif;
    line-height: 1.55;
    cursor: pointer;
}
.experts-grid-v2 .expert-card-v2__bio-toggle:hover { color: var(--v2-action-hover); }
.experts-grid-v2 .expert-card-v2__bio-toggle:focus-visible {
    outline: 2px solid var(--v2-focus);
    outline-offset: 2px;
    border-radius: 8px;
}

/* margin-top:auto прижимает CTA к низу — карточки ряда растянуты на равную
   высоту (align-items:stretch), кнопки выровнены по одной линии. */
.experts-grid-v2 .expert-card-v2__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-top: auto;
    padding-top: 14px;
    padding-bottom: 14px;
    min-height: 44px;
    box-sizing: border-box;
    border-radius: 12px;
    background: var(--v2-action);
    color: #fff;
    font: 600 14px 'Raleway', sans-serif;
    text-decoration: none;
    transition: background .15s;
}
.experts-grid-v2 .expert-card-v2__cta:hover { background: var(--v2-action-hover); color: #fff; }
.experts-grid-v2 .expert-card-v2__cta:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

/* ── Описания начинаются на одной линии (правка приёмки 18.08.2026) ─────────
   Шапка карточки бывает разной высоты: имя переносится на две строки,
   специализация длиннее у одних и короче у других, город указан не у всех. От
   этого описания соседних карточек начинались с разного уровня.

   Выравнивание строит сетка, а не скрипт. Карточка занимает две строки
   родительской сетки и повторяет их у себя через subgrid: первая строка —
   шапка, вторая — тело. Высоту первой задаёт самая высокая шапка ряда, поэтому
   тела начинаются на общей линии, и ничего не приходится обрезать.

   Измерять высоты в JS здесь нельзя: в каталогах живой поиск перерисовывает
   сетку после каждого ввода, и пересчёт превратился бы в прыгающий макет. */
.experts-grid-v2 .expert-card-v2__body {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
    /* Без subgrid тело — обычный флекс-элемент и занимает остаток карточки:
       кнопка остаётся прижатой к низу и там. */
    flex: 1 1 auto;
}

@supports (grid-template-rows: subgrid) {
    .experts-grid-v2 .expert-card-v2 {
        display: grid;
        grid-template-rows: subgrid;
        grid-row: span 2;
        /* Отступ шапки от тела остаётся карточкиным, а не сеточным: у сетки
           между карточками 16-18 px, внутри карточки столько не нужно. */
        row-gap: 6px;
        height: auto;
    }
    .experts-grid-v2 .expert-card-v2__ident { grid-row: 1; }
    .experts-grid-v2 .expert-card-v2__body { grid-row: 2; }
}

/* Поиск и пустое состояние — оба каталога на v2-токенах. */
.experts-catalog-v2 .exp__search,
.experts-catalog-public-v2 .pub-exp__search {
    display: flex;
    align-items: center;
    gap: 10px;
    box-sizing: border-box;
    width: 100%;
    max-width: 420px;
    min-height: 44px;
    margin: 0 0 18px;
    padding: 0 14px;
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    border-radius: 12px;
}
.experts-catalog-v2 .exp__search:focus-within,
.experts-catalog-public-v2 .pub-exp__search:focus-within { border-color: var(--v2-focus); }
.experts-catalog-v2 .exp__search i,
.experts-catalog-v2 .exp__search svg,
.experts-catalog-public-v2 .pub-exp__search i,
.experts-catalog-public-v2 .pub-exp__search svg { width: 18px; height: 18px; flex: none; color: var(--v2-text2); }
.experts-catalog-v2 .exp__search input,
.experts-catalog-public-v2 .pub-exp__search input {
    flex: 1;
    min-width: 0;
    min-height: 42px;
    border: none;
    outline: none;
    background: transparent;
    font: 400 14px 'Raleway', sans-serif;
    color: var(--v2-text);
}
.experts-catalog-v2 .exp__search input::placeholder,
.experts-catalog-public-v2 .pub-exp__search input::placeholder { color: var(--v2-text2); }

.experts-catalog-public-v2 .pub-exp__title {
    margin: 0 0 6px;
    font: 700 26px 'Raleway', sans-serif;
    color: var(--v2-text);
}
.experts-catalog-public-v2 .pub-exp__lead {
    margin: 0 0 18px;
    font: 400 15px 'Raleway', sans-serif;
    color: var(--v2-text2);
}
.experts-catalog-public-v2 .pub-empty {
    padding: 28px;
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    border-radius: 18px;
    color: var(--v2-text2);
    text-align: center;
}

/* На одноколоночной раскладке CTA занимает всю ширину карточки. */
@media (max-width: 560px) {
    .experts-grid-v2 .expert-card-v2__cta { width: 100%; }
}

/* ── Профиль эксперта: обе ветки на одних примитивах ───────────────────────── */
.expert-profile-v2__head,
.expert-profile-public-v2__head,
.expert-profile-v2__section,
.expert-profile-public-v2__section {
    position: relative;
    box-sizing: border-box;
    padding: 24px;
    margin-bottom: 16px;
    background: var(--v2-surface);
    border-radius: 18px;
    box-shadow: var(--v2-shadow);
}

.expert-profile-v2__badge,
.expert-profile-public-v2__badge {
    position: absolute;
    top: 20px;
    right: 20px;
    /* Тот же воздух, что и в карточке каталога: бейдж один на три экрана. */
    padding: 7px 9px 6px 7px;
    border-radius: 999px;
    background: var(--v2-surface-subtle);
    color: var(--v2-text2);
    font: 600 11px 'Raleway', sans-serif;
    text-transform: uppercase;
    letter-spacing: .5px;
}

/* Отметка «проверенный эксперт» (задача 2026-08-18-02). Одно правило на все
   три места, где живёт бейдж: карточка каталога и оба профиля.

   Цвета с 18.08.2026 — из макета Figma: токен --pub-verified. Прежняя
   семантическая пара «успех» (#1e7d34 на #e6f4ea) осталась за служебными
   состояниями портала — «оплачено», «пройдено», «бесплатно» — и к отметке
   эксперта больше отношения не имеет.

   Селектор карточки идёт с корнем .experts-grid-v2: базовое правило бейджа
   написано под этим корнем, и без него нейтральный фон перебил бы зелёный. */
.experts-grid-v2 .expert-card-v2__badge--verified,
.expert-profile-v2__badge--verified,
.expert-profile-public-v2__badge--verified {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    /* Макет 18.08.2026: сплошная зелёная пилюля с белой подписью и белой
       галочкой — вместо прежней бледной подложки с тёмно-зелёным текстом.
       Меняется только этот бейдж: #1e7d34 остаётся служебным «успехом» портала
       (оплачено, пройдено, бесплатно) и к отметке эксперта отношения не имеет. */
    background: var(--pub-verified);
    color: #fff;
}
.experts-grid-v2 .expert-card-v2__badge--verified i,
.experts-grid-v2 .expert-card-v2__badge--verified svg,
.expert-profile-v2__badge--verified i,
.expert-profile-v2__badge--verified svg,
.expert-profile-public-v2__badge--verified i,
.expert-profile-public-v2__badge--verified svg {
    /* Макет: галочка сидит в белом круге. Круг рисуется здесь, а не отдельной
       картинкой, — значок остаётся обычным Lucide и красится вместе с темой. */
    width: 14px;
    height: 14px;
    flex: none;
    padding: 2.5px;
    box-sizing: border-box;
    border-radius: 50%;
    background: #fff;
    color: var(--pub-verified);
    stroke-width: 3.4;
    /* Геометрически центры значка и строки уже совпадают, но подпись набрана
       прописными: её видимые буквы стоят в верхней части строки, а нижняя часть
       занята пустым местом под выносные элементы. Из-за этого значок казался
       опущенным. Поднимаем его на пиксель — выравнивание по видимому тексту,
       а не по коробке строки. */
    margin-top: -1px;
}

.expert-profile-v2__ident,
.expert-profile-public-v2__ident {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding-right: 96px;
}
.expert-profile-v2__ident-text,
.expert-profile-public-v2__ident-text { min-width: 0; }

/* Увеличенное фото профиля — крупнее карточки каталога. */
.expert-profile-v2__photo,
.expert-profile-v2__ava,
.expert-profile-public-v2__photo,
.expert-profile-public-v2__ava {
    width: 104px;
    height: 104px;
    border-radius: 50%;
    object-fit: cover;
    flex: none;
}
.expert-profile-v2__ava,
.expert-profile-public-v2__ava {
    display: grid;
    place-items: center;
    background: var(--v2-surface-subtle);
    color: var(--v2-text2);
    font: 700 38px 'Raleway', sans-serif;
}

.expert-profile-v2__name,
.expert-profile-public-v2__name {
    margin: 0 0 4px;
    font: 700 26px 'Raleway', sans-serif;
    line-height: 1.2;
    color: var(--v2-text);
    overflow-wrap: anywhere;
}
.expert-profile-v2__spec,
.expert-profile-public-v2__spec {
    font: 500 15px 'Raleway', sans-serif;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.expert-profile-v2__bio,
.expert-profile-public-v2__bio {
    margin: 16px 0 0;
    font: 400 15px 'Raleway', sans-serif;
    line-height: 1.6;
    color: var(--v2-text);
    overflow-wrap: anywhere;
}

.expert-profile-v2__edit {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-height: 44px;
    margin-top: 6px;
    color: var(--v2-accent-hover);
    font: 600 14px 'Raleway', sans-serif;
    text-decoration: none;
}
.expert-profile-v2__edit:hover { color: var(--v2-accent); text-decoration: underline; }
.expert-profile-v2__edit:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
    border-radius: 8px;
}
.expert-profile-v2__edit i,
.expert-profile-v2__edit svg { width: 16px; height: 16px; }

.expert-profile-v2__notice { margin-bottom: 16px; }

.expert-profile-v2__sub,
.expert-profile-public-v2__sub {
    margin: 0 0 4px;
    font: 700 18px 'Raleway', sans-serif;
    color: var(--v2-text);
}
.expert-profile-v2__lead {
    margin: 0 0 16px;
    font: 400 14px 'Raleway', sans-serif;
    color: var(--v2-text2);
}
.expert-profile-v2__empty {
    padding: 20px;
    background: var(--v2-surface-subtle);
    border-radius: 12px;
    color: var(--v2-text2);
    font: 400 14px 'Raleway', sans-serif;
}

/* Материалы — та же витринная карточка курса, что в каталоге и библиотеке. */
.expert-profile-v2__courses,
.expert-profile-public-v2__courses {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 16px;
    margin-top: 14px;
}

/* ── Карточка услуги, общая для обеих веток профиля ────────────────────────── */
.expert-profile-v2__services,
.expert-profile-public-v2__services {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 16px;
    margin-top: 14px;
}
.expert-svc-v2 {
    display: flex;
    flex-direction: column;
    gap: 8px;
    height: 100%;
    box-sizing: border-box;
    padding: 18px;
    background: var(--v2-surface);
    border-radius: 14px;
}
.expert-svc-v2__title {
    margin: 0;
    font: 700 16px 'Raleway', sans-serif;
    color: var(--v2-text);
    overflow-wrap: anywhere;
}
.expert-svc-v2__desc {
    margin: 0;
    font: 400 14px 'Raleway', sans-serif;
    line-height: 1.55;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.expert-svc-v2__row {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}
.expert-svc-v2__dur { font: 400 13px 'Raleway', sans-serif; color: var(--v2-text2); }
.expert-svc-v2__price { font: 700 16px 'Raleway', sans-serif; color: var(--v2-text); }
.expert-svc-v2__slots,
.expert-svc-v2__note { font: 400 13px 'Raleway', sans-serif; color: var(--v2-text2); }

.expert-svc-v2__cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-top: auto;
    padding: 12px 18px;
    min-height: 44px;
    box-sizing: border-box;
    border: none;
    border-radius: 12px;
    background: var(--v2-action);
    color: #fff;
    font: 600 14px 'Raleway', sans-serif;
    cursor: pointer;
    transition: background .15s;
}
.expert-svc-v2__cta:hover { background: var(--v2-action-hover); color: #fff; }
.expert-svc-v2__cta:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

@media (max-width: 560px) {
    .expert-profile-v2__head,
    .expert-profile-public-v2__head,
    .expert-profile-v2__section,
    .expert-profile-public-v2__section { padding: 18px; }
    /* Бейдж уходит в поток, чтобы не наезжать на имя на узком экране. */
    .expert-profile-v2__badge,
    .expert-profile-public-v2__badge { position: static; display: inline-block; margin-bottom: 12px; }
    .expert-profile-v2__ident,
    .expert-profile-public-v2__ident { padding-right: 0; }
    .expert-svc-v2__cta { width: 100%; }
}

/* Ссылка возврата. .svc-back — общий класс с партнёрскими экранами услуг, его
   базовое правило осталось на legacy-blue (см. историческую палитру в
   docs/05-design-tokens.md), поэтому переопределяем только под своим корнем,
   не трогая соседние страницы. Обе ветки доводим до зоны нажатия 44px. */
.expert-profile-v2 .svc-back,
.expert-profile-public-v2 .pub-exp-back {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-height: 44px;
    height: auto;
    color: var(--v2-text2);
    text-decoration: none;
}
.expert-profile-v2 .svc-back:hover,
.expert-profile-public-v2 .pub-exp-back:hover { color: var(--v2-text); text-decoration: underline; }
.expert-profile-v2 .svc-back:focus-visible,
.expert-profile-public-v2 .pub-exp-back:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus);
    border-radius: 8px;
}

/* Строка «Консультации от N ₽» — минимальная цена активной платной услуги.
   Значение приходит готовым из ExpertsCatalog одним агрегатным запросом на
   весь список (правка приёмки 14.08.2026). Стоит над CTA, поэтому не мешает
   выравниванию кнопок по нижнему краю. */
.experts-grid-v2 .expert-card-v2__price {
    margin: 8px 0 0;
    font: 700 15px 'Raleway', sans-serif;
    color: var(--v2-text);
}
/* End Experts Pages v2 */

/* Admin Overview v2 */
/* Экран «Обзор / метрики». Все правила живут только под корнем
   .admin-overview-v2 — базовые .section-head/.storage-* выше продолжают
   обслуживать не переведённые разделы без изменений. Селекторы намеренно
   повторяют специфичность исходных (.storage-card.is-ok .storage-badge и т. п.):
   без этого старое правило перебивало бы новое.

   Уровни заполнения остаются семантическими и подписаны текстом, а не только
   цветом: норма — нейтральная, предупреждение — янтарное, критично — красное. */
.admin-overview-v2 .section-head { margin-bottom: 22px; }
.admin-overview-v2 .section-head__title { color: var(--v2-text); }
.admin-overview-v2 .section-head__sub { color: var(--v2-text2); line-height: 1.5; }

.admin-overview-v2 .storage-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }

.admin-overview-v2 .storage-card {
    min-width: 0;
    padding: 22px;
    background: var(--v2-surface);
    border-radius: 18px;
    box-shadow: var(--v2-shadow);
}
.admin-overview-v2 .storage-card__title { min-width: 0; }
.admin-overview-v2 .storage-card__icon {
    border-radius: 12px;
    background: var(--v2-surface-subtle);
    color: var(--v2-text);
}
.admin-overview-v2 .storage-card__name { color: var(--v2-text); }
.admin-overview-v2 .storage-card__sub { color: var(--v2-text2); overflow-wrap: anywhere; }

.admin-overview-v2 .storage-figure__used { color: var(--v2-text); }
.admin-overview-v2 .storage-figure__total { color: var(--v2-text2); }
.admin-overview-v2 .storage-bar { background: var(--v2-surface-subtle); }
.admin-overview-v2 .storage-free { color: var(--v2-text2); }

.admin-overview-v2 .storage-card.is-ok .storage-figure__pct { color: var(--v2-text); }
.admin-overview-v2 .storage-card.is-ok .storage-bar__fill { background: var(--v2-action); }
.admin-overview-v2 .storage-card.is-ok .storage-badge { color: var(--ok); background: var(--ok-bg); }
.admin-overview-v2 .storage-card.is-warning .storage-figure__pct { color: var(--v2-active-text); }
.admin-overview-v2 .storage-card.is-warning .storage-bar__fill { background: var(--v2-active-text); }
.admin-overview-v2 .storage-card.is-warning .storage-badge { color: var(--v2-active-text); background: var(--v2-active-bg); }
.admin-overview-v2 .storage-card.is-critical .storage-figure__pct { color: var(--err); }
.admin-overview-v2 .storage-card.is-critical .storage-bar__fill { background: var(--err); }
.admin-overview-v2 .storage-card.is-critical .storage-badge { color: var(--err); background: var(--err-bg); }

.admin-overview-v2 .storage-note { border-radius: 12px; }
.admin-overview-v2 .storage-note--warn { background: var(--err-bg); color: var(--err); }
.admin-overview-v2 .storage-note--empty {
    background: var(--v2-surface-subtle);
    border-color: var(--v2-border);
    color: var(--v2-text2);
}

.admin-overview-v2 .storage-breakdown { border-top-color: var(--v2-border); }
.admin-overview-v2 .storage-breakdown__label { color: var(--v2-text2); }
.admin-overview-v2 .storage-seg { background: var(--v2-surface-subtle); }
.admin-overview-v2 .storage-seg__media { background: var(--v2-action); }
.admin-overview-v2 .storage-legend { color: var(--v2-text2); }
.admin-overview-v2 .dot--media { background: var(--v2-action); }
.admin-overview-v2 .dot--free { background: var(--v2-surface-subtle); border-color: var(--v2-border); }

.admin-overview-v2 .storage-hint {
    margin-top: 18px;
    border-radius: 16px;
    background: var(--v2-surface-subtle);
    border-color: var(--v2-border);
    color: var(--v2-text2);
}
.admin-overview-v2 .storage-hint svg { color: var(--v2-text2); }

@media (max-width: 900px) {
    .admin-overview-v2 .storage-grid { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 560px) {
    .admin-overview-v2 .storage-card { padding: 18px; }
    .admin-overview-v2 .storage-card__head { align-items: flex-start; }
    .admin-overview-v2 .storage-figure__used { font-size: 28px; }
    .admin-overview-v2 .storage-figure__pct { font-size: 20px; }
    .admin-overview-v2 .storage-hint { padding: 14px; }
}
/* End Admin Overview v2 */

/* Admin Users v2 */
/* Список пользователей. Все правила — только под корнем .admin-users-v2:
   классы .ausr-* физически общие с карточкой пользователя, поэтому базовые
   объявления выше не трогаем.

   Ниже 900px реестр превращается в карточки: шапка колонок скрывается, а
   подписи полей приходят из data-label разметки. Строка остаётся той же
   ссылкой на карточку человека — меняется только раскладка. */
.admin-users-v2 .lms-mat__title { color: var(--v2-text); }
.admin-users-v2 .lms-mat__lead { color: var(--v2-text2); }

.admin-users-v2 .ausr-search {
    max-width: 560px;
    height: 52px;
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    border-radius: 14px;
}
.admin-users-v2 .ausr-search:focus-within { border-color: var(--v2-focus); box-shadow: 0 0 0 3px rgba(212, 101, 0, .18); }
.admin-users-v2 .ausr-search i { color: var(--v2-text2); }
.admin-users-v2 .ausr-search input { min-width: 0; color: var(--v2-text); }
.admin-users-v2 .ausr-search input::placeholder { color: var(--v2-text2); opacity: 1; }

.admin-users-v2 .ausr-filters { gap: 8px; }
.admin-users-v2 .ausr-filters__label { color: var(--v2-text2); }
.admin-users-v2 .ausr-chip {
    min-height: 44px;
    padding: 0 16px;
    background: var(--v2-surface);
    color: var(--v2-text2);
}
.admin-users-v2 .ausr-chip:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); color: var(--v2-text); }
.admin-users-v2 .ausr-chip:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }
.admin-users-v2 .ausr-chip.is-on { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-users-v2 .ausr-chip.is-on:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }

.admin-users-v2 .ausr-table {
    background: var(--v2-surface);
    border-radius: 18px;
}
.admin-users-v2 .ausr-row { border-bottom-color: var(--v2-border); }
.admin-users-v2 .ausr-row:hover { background: var(--v2-surface-subtle); }
.admin-users-v2 .ausr-row:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: -3px; }
.admin-users-v2 .ausr-row--head,
.admin-users-v2 .ausr-row--head:hover { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.admin-users-v2 .ausr-row > span { min-width: 0; overflow-wrap: anywhere; }

.admin-users-v2 .ausr-who { min-width: 0; }
.admin-users-v2 .ausr-who b { color: var(--v2-text); }
.admin-users-v2 .ausr-who em { color: var(--v2-text2); }
.admin-users-v2 .ausr-ava { flex: none; background: var(--v2-surface-subtle); color: var(--v2-text); }
.admin-users-v2 .ausr-role { background: var(--v2-surface-subtle); color: var(--v2-text2); }
.admin-users-v2 .ausr-coins { color: var(--v2-text); }

.admin-users-v2 .ausr-status--active { background: #e6f4ea; color: #1e7d34; }
.admin-users-v2 .ausr-status--blocked { background: #fdeceb; color: #c0392b; }
.admin-users-v2 .ausr-status--unverified { background: var(--v2-active-bg); color: var(--v2-active-text); }

.admin-users-v2 .ausr-empty {
    padding: 32px 24px;
    background: var(--v2-surface);
    border-radius: 18px;
    color: var(--v2-text2);
}
.admin-users-v2 .ausr-empty .inb-btn--ghost {
    min-height: 44px;
    background: var(--v2-surface);
    border-color: var(--v2-border);
    color: var(--v2-text);
}
.admin-users-v2 .ausr-empty .inb-btn--ghost:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); color: var(--v2-text); }
.admin-users-v2 .inb-btn:focus-visible,
.admin-users-v2 .lms-pager__btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }

.admin-users-v2 .lms-pager__btn {
    min-width: 44px;
    height: 44px;
    background: var(--v2-surface);
    border-color: var(--v2-border);
    color: var(--v2-text2);
}
.admin-users-v2 .lms-pager__btn:hover { border-color: var(--v2-accent); color: var(--v2-text); }
.admin-users-v2 .lms-pager__btn.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-users-v2 .lms-pager__btn.is-disabled,
.admin-users-v2 .lms-pager__btn.is-disabled:hover { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }
.admin-users-v2 .lms-pager__gap { color: var(--v2-text2); }

@media (max-width: 900px) {
    .admin-users-v2 .ausr-table { background: none; border: 0; border-radius: 0; overflow: visible; }
    .admin-users-v2 .ausr-row {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
        gap: 10px;
        margin-bottom: 12px;
        padding: 16px;
        background: var(--v2-surface);
        border: 1px solid var(--v2-border);
        border-radius: 18px;
    }
    .admin-users-v2 .ausr-row:last-child { margin-bottom: 0; }
    .admin-users-v2 .ausr-cell {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 12px;
        font-size: 14px;
        color: var(--v2-text);
    }
    .admin-users-v2 .ausr-cell::before {
        content: attr(data-label);
        flex: none;
        font-size: 12px;
        font-weight: 600;
        color: var(--v2-text2);
    }
    .admin-users-v2 .ausr-row--head { display: none; }
}

@media (max-width: 560px) {
    .admin-users-v2 .ausr-search { max-width: none; }
    .admin-users-v2 .ausr-filters { align-items: flex-start; }
    .admin-users-v2 .ausr-row { padding: 14px; }
    .admin-users-v2 .ausr-cell { align-items: flex-start; }
    .admin-users-v2 .ausr-empty .inb-btn--ghost { width: 100%; }
}
/* End Admin Users v2 */

/* Admin User Card v2 */
/* Карточка пользователя. Экран собран из общих примитивов (.inb-btn, .inb-status,
   .lms-field__control, .lms-pager, .ord-badge) — они обслуживают ещё не
   переведённые разделы, поэтому переопределяются строго под корнем
   .admin-user-card-v2 и только по цвету и размеру зоны нажатия.

   Смысловые цвета сохранены: успех зелёный, ожидание янтарное, ошибка и
   блокировка красные. Тёмный — только у активного состояния и основного
   действия. */
.admin-user-card-v2 .ausr-back { min-height: 44px; align-items: center; color: var(--v2-text2); }
.admin-user-card-v2 .ausr-back:hover { color: var(--v2-text); }
.admin-user-card-v2 .ausr-back:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; border-radius: 8px; }
.admin-user-card-v2 .lms-mat__title { color: var(--v2-text); overflow-wrap: anywhere; }

.admin-user-card-v2 .ausr-grid { gap: 18px; }
.admin-user-card-v2 .ausr-main,
.admin-user-card-v2 .ausr-side { min-width: 0; }

.admin-user-card-v2 .ausr-person,
.admin-user-card-v2 .ausr-facts,
.admin-user-card-v2 .ausr-block,
.admin-user-card-v2 .ausr-act {
    background: var(--v2-surface);
    border-radius: 18px;
    box-shadow: var(--v2-shadow);
}
.admin-user-card-v2 .ausr-person__who { min-width: 0; }
.admin-user-card-v2 .ausr-person__who b { color: var(--v2-text); overflow-wrap: anywhere; }
.admin-user-card-v2 .ausr-person__who em { color: var(--v2-text2); overflow-wrap: anywhere; }
.admin-user-card-v2 .ausr-ava { flex: none; background: var(--v2-surface-subtle); color: var(--v2-text); }
.admin-user-card-v2 .ausr-role { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.admin-user-card-v2 .ausr-status--active { background: #e6f4ea; color: #1e7d34; }
.admin-user-card-v2 .ausr-status--blocked { background: #fdeceb; color: #c0392b; }
.admin-user-card-v2 .ausr-status--unverified { background: var(--v2-active-bg); color: var(--v2-active-text); }

.admin-user-card-v2 .ausr-facts span { color: var(--v2-text2); }
.admin-user-card-v2 .ausr-facts b { color: var(--v2-text); overflow-wrap: anywhere; }
.admin-user-card-v2 .ausr-coins { color: var(--v2-text); }

.admin-user-card-v2 .ausr-tabs { border-bottom-color: var(--v2-border); }
.admin-user-card-v2 .ausr-tab { min-height: 44px; padding: 0 16px; color: var(--v2-text2); }
.admin-user-card-v2 .ausr-tab:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }
.admin-user-card-v2 .ausr-tab.is-on { background: var(--v2-action); color: #fff; }
.admin-user-card-v2 .ausr-tab:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.admin-user-card-v2 .ausr-chip {
    min-height: 44px;
    padding: 0 16px;
    background: var(--v2-surface);
    color: var(--v2-text2);
}
.admin-user-card-v2 .ausr-chip:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); color: var(--v2-text); }
.admin-user-card-v2 .ausr-chip.is-on { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-user-card-v2 .ausr-chip:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.admin-user-card-v2 .ausr-tools__size { color: var(--v2-text2); }
.admin-user-card-v2 .ausr-range label { color: var(--v2-text2); }
.admin-user-card-v2 .lms-field__control {
    min-height: 44px;
    background: var(--v2-surface);
    border-color: var(--v2-border);
    color: var(--v2-text);
}
.admin-user-card-v2 .lms-field__control:focus,
.admin-user-card-v2 .lms-field__control:focus-visible {
    border-color: var(--v2-focus);
    box-shadow: 0 0 0 3px rgba(212, 101, 0, .18);
}
.admin-user-card-v2 .lms-field__control::placeholder { color: var(--v2-text2); opacity: 1; }
.admin-user-card-v2 .lms-field__label { color: var(--v2-text2); }
.admin-user-card-v2 .ausr-tools__size .lms-field__control,
.admin-user-card-v2 .ausr-range .lms-field__control { height: 44px; }

.admin-user-card-v2 .ausr-line { border-bottom-color: var(--v2-border); }
.admin-user-card-v2 .ausr-line > span { min-width: 0; }
.admin-user-card-v2 .ausr-line b { color: var(--v2-text); overflow-wrap: anywhere; }
.admin-user-card-v2 .ausr-line em { color: var(--v2-text2); overflow-wrap: anywhere; }
.admin-user-card-v2 .ausr-line__right { flex-wrap: wrap; justify-content: flex-end; }
.admin-user-card-v2 .ausr-none { color: var(--v2-text2); }
.admin-user-card-v2 .ausr-line b.ausr-plus { color: #1e7d34; }
.admin-user-card-v2 .ausr-line b.ausr-minus { color: #c0392b; }

.admin-user-card-v2 .ord-badge--test { background: var(--v2-active-bg); color: var(--v2-active-text); }
.admin-user-card-v2 .inb-status--paid { background: #e6f4ea; color: #1e7d34; }
.admin-user-card-v2 .inb-status--pending,
.admin-user-card-v2 .inb-status--new { background: var(--v2-active-bg); color: var(--v2-active-text); }
.admin-user-card-v2 .inb-status--failed,
.admin-user-card-v2 .inb-status--declined { background: #fdeceb; color: #c0392b; }
.admin-user-card-v2 .inb-status--confirmed,
.admin-user-card-v2 .inb-status--canceled,
.admin-user-card-v2 .inb-status--refunded,
.admin-user-card-v2 .inb-status--expired { background: var(--v2-surface-subtle); color: var(--v2-text2); }

.admin-user-card-v2 .lms-pager__btn {
    min-width: 44px;
    height: 44px;
    background: var(--v2-surface);
    border-color: var(--v2-border);
    color: var(--v2-text2);
}
.admin-user-card-v2 .lms-pager__btn:hover { border-color: var(--v2-accent); color: var(--v2-text); }
.admin-user-card-v2 .lms-pager__btn.is-active { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-user-card-v2 .lms-pager__btn.is-disabled,
.admin-user-card-v2 .lms-pager__btn.is-disabled:hover { background: var(--v2-surface-subtle); border-color: var(--v2-border); color: var(--v2-text2); }
.admin-user-card-v2 .lms-pager__gap { color: var(--v2-text2); }

.admin-user-card-v2 .ausr-act h3 { color: var(--v2-text); }
.admin-user-card-v2 .ausr-act h3 i { color: var(--v2-text2); }
.admin-user-card-v2 .ausr-seg__btn {
    min-height: 44px;
    padding: 0 14px;
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    border-radius: 12px;
    color: var(--v2-text2);
}
.admin-user-card-v2 .ausr-seg__btn:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); color: var(--v2-text); }
.admin-user-card-v2 .ausr-seg__btn.is-on { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-user-card-v2 .ausr-seg__btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.admin-user-card-v2 .ausr-warn { background: var(--v2-active-bg); border-color: var(--v2-active-bg); border-radius: 12px; }
.admin-user-card-v2 .ausr-warn p { color: var(--v2-active-text); }
.admin-user-card-v2 .ausr-hint { color: var(--v2-text2); }
.admin-user-card-v2 .lms-error { color: #c0392b; }

.admin-user-card-v2 .inb-btn { min-height: 44px; border-radius: 12px; }
.admin-user-card-v2 .inb-btn--primary { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-user-card-v2 .inb-btn--primary:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); color: #fff; }
.admin-user-card-v2 .inb-btn--primary:disabled,
.admin-user-card-v2 .inb-btn--primary[disabled] {
    background: var(--v2-surface-subtle);
    border-color: var(--v2-border);
    color: var(--v2-text2);
    cursor: not-allowed;
}
.admin-user-card-v2 .inb-btn--ghost { background: var(--v2-surface); border-color: var(--v2-border); color: var(--v2-text); }
.admin-user-card-v2 .inb-btn--ghost:hover { background: var(--v2-surface-subtle); border-color: var(--v2-accent); color: var(--v2-text); }
.admin-user-card-v2 .ausr-danger { background: var(--v2-surface); border-color: #f0c9c9; color: #c0392b; }
.admin-user-card-v2 .ausr-danger:hover { background: #fdeceb; border-color: #c0392b; color: #c0392b; }
.admin-user-card-v2 .inb-btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }

.admin-user-card-v2 .ausr-tab-empty .inb-btn--ghost { min-height: 44px; }

@media (max-width: 1100px) {
    .admin-user-card-v2 .ausr-grid { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 600px) {
    .admin-user-card-v2 .ausr-person,
    .admin-user-card-v2 .ausr-facts,
    .admin-user-card-v2 .ausr-block,
    .admin-user-card-v2 .ausr-act { padding: 16px; }
    .admin-user-card-v2 .ausr-tools__group { width: 100%; }
    .admin-user-card-v2 .ausr-range label { width: 100%; }
    .admin-user-card-v2 .ausr-range .lms-field__control { width: 100%; }
    .admin-user-card-v2 .ausr-line { flex-wrap: wrap; align-items: flex-start; }
    .admin-user-card-v2 .ausr-line__right { justify-content: flex-start; }
    .admin-user-card-v2 .ausr-act .inb-btn { width: 100%; }
}
/* End Admin User Card v2 */

/* Admin Partner Applications v2 */
/* «Партнёры и заявки». Классы только собственные — прежний .app-row был общим
   служебным именем, поэтому здесь он не используется вовсе и его базовое
   правило остаётся нетронутым для других мест.

   Статус выводится как есть, без перевода значений: так требует контракт
   экрана. Одобрение — тёмный primary, отклонение — семантический danger. */
.admin-partner-applications-v2 .lms-mat__title { color: var(--v2-text); }
.admin-partner-applications-v2__list { display: grid; gap: 12px; margin-top: 18px; }

.admin-partner-applications-v2__item {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 1.4fr) auto auto;
    align-items: center;
    gap: 16px;
    padding: 18px 20px;
    background: var(--v2-surface);
    border-radius: 18px;
    box-shadow: var(--v2-shadow);
}
.admin-partner-applications-v2__person { min-width: 0; }
.admin-partner-applications-v2__person b {
    display: block;
    font: 600 15px 'Raleway', sans-serif;
    color: var(--v2-text);
    overflow-wrap: anywhere;
}
.admin-partner-applications-v2__person em {
    display: block;
    font: 400 13px 'Raleway', sans-serif;
    font-style: normal;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.admin-partner-applications-v2__specialization {
    min-width: 0;
    font-size: 14px;
    color: var(--v2-text2);
    overflow-wrap: anywhere;
}
.admin-partner-applications-v2__status {
    justify-self: start;
    padding: 5px 12px;
    border-radius: 999px;
    background: var(--v2-surface-subtle);
    font: 600 12px 'Raleway', sans-serif;
    color: var(--v2-text2);
    white-space: nowrap;
}
.admin-partner-applications-v2__actions { display: flex; flex-wrap: wrap; gap: 10px; }

.admin-partner-applications-v2__approve,
.admin-partner-applications-v2__reject {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 0 18px;
    border-radius: 12px;
    border: 1px solid transparent;
    font: 600 14px 'Raleway', sans-serif;
    cursor: pointer;
    transition: background .15s, border-color .15s, color .15s;
}
.admin-partner-applications-v2__approve { background: var(--v2-action); border-color: var(--v2-action); color: #fff; }
.admin-partner-applications-v2__approve:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.admin-partner-applications-v2__reject { background: var(--v2-surface); border-color: #f0c9c9; color: #c0392b; }
.admin-partner-applications-v2__reject:hover { background: #fdeceb; border-color: #c0392b; }
.admin-partner-applications-v2__approve:focus-visible,
.admin-partner-applications-v2__reject:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

.admin-partner-applications-v2__empty {
    padding: 32px 24px;
    background: var(--v2-surface);
    border-radius: 18px;
    text-align: center;
    font-size: 14px;
    color: var(--v2-text2);
}

@media (max-width: 900px) {
    .admin-partner-applications-v2__item {
        grid-template-columns: minmax(0, 1fr);
        gap: 12px;
        padding: 16px;
    }
}

@media (max-width: 412px) {
    .admin-partner-applications-v2__actions { flex-direction: column; align-items: stretch; }
    .admin-partner-applications-v2__approve,
    .admin-partner-applications-v2__reject { width: 100%; }
}
/* End Admin Partner Applications v2 */

/* Admin Home Page v2 */
.admin-home-v2 { display: flex; flex-direction: column; gap: 18px; }

.admin-home-v2 .ahp-openrow { margin: 0; }

.admin-home-v2 .ahp-open {
    display: inline-flex; align-items: center; gap: 10px;
    min-height: 44px; padding: 10px 18px;
    background: var(--v2-surface); border-radius: 12px;
    font-size: 15px; font-weight: 600; color: var(--v2-text); text-decoration: none;
}
.admin-home-v2 .ahp-open:hover { border-color: var(--v2-accent); color: var(--v2-active-text); }
.admin-home-v2 .ahp-open:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus); }
.admin-home-v2 .ahp-open i { width: 18px; height: 18px; }

/* Плавающее уведомление: правый верхний угол, ниже чёрной шапки (68px). */
.admin-home-v2 .ahp-toasts {
    position: fixed; top: calc(68px + 16px); right: 20px; z-index: 90;
    display: flex; flex-direction: column; gap: 10px;
    width: min(420px, calc(100vw - 40px)); pointer-events: none;
}

.admin-home-v2 .ahp-toast {
    display: flex; align-items: flex-start; gap: 10px; pointer-events: auto;
    padding: 14px 14px 14px 16px; border-radius: 14px;
    background: var(--v2-surface); 
    box-shadow: var(--v2-shadow); font-size: 14px; line-height: 1.5;
}
.admin-home-v2 .ahp-toast--error { border-color: #FDA29B; background: #FEF3F2; color: #B42318; }
.admin-home-v2 .ahp-toast--ok { border-color: var(--v2-border); color: var(--v2-text); }
.admin-home-v2 .ahp-toast__icon { width: 20px; height: 20px; flex: none; margin-top: 1px; }
.admin-home-v2 .ahp-toast--ok .ahp-toast__icon { color: var(--v2-active-text); }
.admin-home-v2 .ahp-toast__text { margin: 0; flex: 1; min-width: 0; font-weight: 600; }

.admin-home-v2 .ahp-toast__close {
    flex: none; width: 44px; height: 44px; margin: -12px -8px -12px 0;
    display: flex; align-items: center; justify-content: center;
    background: none; border: none; cursor: pointer; color: inherit; border-radius: 10px;
}
.admin-home-v2 .ahp-toast__close i { width: 16px; height: 16px; }
.admin-home-v2 .ahp-toast__close:focus-visible {
    outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

/* Ошибка конкретного поля остаётся рядом с полем. */
.admin-home-v2 .ahp-error { margin: 0; font-size: 13px; font-weight: 600; color: #B42318; }
.admin-home-v2 .ahp-input--invalid { border-color: #FDA29B; }
.admin-home-v2 .ahp-input--invalid:focus-visible { border-color: #B42318; box-shadow: 0 0 0 3px #FEE4E2; }

.admin-home-v2 .ahp-section {
    background: var(--v2-surface); 
    border-radius: 18px; padding: 22px; display: flex; flex-direction: column; gap: 14px;
}

.admin-home-v2 .ahp-h2 { margin: 0; font-size: 19px; font-weight: 700; color: var(--v2-text); }
.admin-home-v2 .ahp-hint { margin: 0; font-size: 14px; line-height: 1.55; color: var(--v2-text2); }

.admin-home-v2 .ahp-headrow {
    display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
}

.admin-home-v2 .ahp-summary {
    padding: 6px 12px; border-radius: 999px;
    background: var(--v2-surface-subtle); color: var(--v2-text2);
    font-size: 13px; font-weight: 700;
}

.admin-home-v2 .ahp-pill {
    padding: 5px 10px; border-radius: 999px;
    background: var(--v2-surface-subtle); color: var(--v2-text2);
    font-size: 12px; font-weight: 700; white-space: nowrap;
}
.admin-home-v2 .ahp-pill--taken { background: var(--v2-active-bg); color: var(--v2-active-text); flex: none; }

.admin-home-v2 .ahp-warn {
    display: flex; align-items: flex-start; gap: 10px; margin: 0;
    padding: 12px 14px; border-radius: 12px;
    background: var(--v2-active-bg); color: var(--v2-active-text);
    font-size: 14px; line-height: 1.55;
}
.admin-home-v2 .ahp-warn i { width: 18px; height: 18px; flex: none; margin-top: 2px; }

.admin-home-v2 .ahp-warnpill {
    display: inline-flex; align-items: center; gap: 6px; align-self: flex-start;
    padding: 6px 10px; border-radius: 999px;
    background: var(--v2-active-bg); color: var(--v2-active-text);
    font-size: 12px; font-weight: 700;
}
.admin-home-v2 .ahp-warnpill i { width: 14px; height: 14px; }

/* Баннер */
.admin-home-v2 .ahp-banner-grid {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px;
    /* Без этого grid растягивает обе карточки по самой высокой: mobile-preview
       5:4 тянул за собой пустую карточку desktop. */
    align-items: start;
}

.admin-home-v2 .ahp-upload {
    border: 1px dashed var(--v2-border); border-radius: 14px; padding: 14px;
    background: var(--v2-surface-subtle);
    display: flex; flex-direction: column; gap: 12px; min-width: 0;
}
.admin-home-v2 .ahp-upload__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.admin-home-v2 .ahp-upload__head b { font-size: 14px; font-weight: 700; }

.admin-home-v2 .ahp-upload__img {
    width: 100%; border-radius: 10px; object-fit: cover; display: block;
}
.admin-home-v2 .ahp-upload__img--desktop { aspect-ratio: 3 / 1; }
.admin-home-v2 .ahp-upload__img--mobile { aspect-ratio: 5 / 4; max-width: 260px; }

.admin-home-v2 .ahp-upload__empty {
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
    border-radius: 10px; background: var(--v2-surface);
    color: var(--v2-text2); font-size: 13px;
}
/* Пустая рамка держит ту же геометрию, что и preview: загрузка файла не
   перекраивает секцию. */
.admin-home-v2 .ahp-upload__empty--desktop { aspect-ratio: 3 / 1; }
.admin-home-v2 .ahp-upload__empty--mobile { aspect-ratio: 5 / 4; max-width: 260px; }

/* Кнопки */
.admin-home-v2 .ahp-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 44px; padding: 10px 16px; cursor: pointer;
    background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 12px;
    font-size: 14px; font-weight: 600; color: var(--v2-text);
}
.admin-home-v2 .ahp-btn:hover { border-color: var(--v2-accent); }
.admin-home-v2 .ahp-btn:focus-visible,
.admin-home-v2 .ahp-btn--file:focus-within {
    outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}
.admin-home-v2 .ahp-btn i { width: 16px; height: 16px; }
.admin-home-v2 .ahp-btn--danger { color: #B42318; }
.admin-home-v2 .ahp-btn--danger:hover { border-color: #FDA29B; }
.admin-home-v2 .ahp-btn--file { position: relative; overflow: hidden; }
.admin-home-v2 .ahp-btn--file input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }

.admin-home-v2 .ahp-icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 44px; height: 44px; cursor: pointer;
    background: var(--v2-surface); border-radius: 11px;
    color: var(--v2-text);
}
.admin-home-v2 .ahp-icon:hover { border-color: var(--v2-accent); }
.admin-home-v2 .ahp-icon:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.admin-home-v2 .ahp-icon:disabled { opacity: .4; cursor: not-allowed; }
.admin-home-v2 .ahp-icon i { width: 16px; height: 16px; }

.admin-home-v2 .ahp-check {
    display: inline-flex; align-items: center; gap: 8px; min-height: 44px;
    font-size: 13px; color: var(--v2-text2); cursor: pointer;
}

/* Поля */
.admin-home-v2 .ahp-field { display: flex; flex-direction: column; gap: 6px; }
.admin-home-v2 .ahp-label { font-size: 14px; font-weight: 600; color: var(--v2-text); }
.admin-home-v2 .ahp-req { color: #B42318; }
.admin-home-v2 .ahp-input {
    width: 100%; min-height: 46px; padding: 11px 14px; box-sizing: border-box;
    background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 12px;
    font-size: 15px; color: var(--v2-text);
}
.admin-home-v2 .ahp-input:focus-visible { outline: none; border-color: var(--v2-accent); box-shadow: 0 0 0 3px var(--v2-active-bg); }

/* Позиции */
.admin-home-v2 .ahp-slots {
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px;
}

.admin-home-v2 .ahp-slot {
    background: var(--v2-surface); border-radius: 14px;
    padding: 14px; min-width: 0; display: flex; flex-direction: column; gap: 12px;
}
.admin-home-v2 .ahp-slot--empty { border-style: dashed; }
.admin-home-v2 .ahp-slot--warn { border-color: #F3D4B0; }

.admin-home-v2 .ahp-slot__head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.admin-home-v2 .ahp-slot__tools { display: flex; align-items: center; gap: 4px; }
.admin-home-v2 .ahp-grip { display: inline-flex; color: var(--v2-text2); cursor: grab; padding: 0 2px; }
.admin-home-v2 .ahp-grip i { width: 16px; height: 16px; }

.admin-home-v2 .ahp-slot__body { display: flex; align-items: flex-start; gap: 11px; min-width: 0; }
.admin-home-v2 .ahp-slot__meta { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.admin-home-v2 .ahp-slot__meta b { font-size: 14px; font-weight: 700; line-height: 1.35; }
.admin-home-v2 .ahp-slot__sub { font-size: 13px; color: var(--v2-text2); }
.admin-home-v2 .ahp-slot__price { font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums; }

.admin-home-v2 .ahp-slot__empty { display: flex; flex-direction: column; align-items: flex-start; gap: 9px; padding: 6px 0; }
.admin-home-v2 .ahp-slot__empty span { font-size: 14px; color: var(--v2-text2); }
.admin-home-v2 .ahp-slot__actions { display: flex; gap: 8px; flex-wrap: wrap; }

.admin-home-v2 .ahp-thumb {
    width: 64px; height: 48px; flex: none; border-radius: 10px; overflow: hidden;
    background: var(--v2-surface-subtle);
    display: flex; align-items: center; justify-content: center;
    color: var(--v2-text2); font-size: 13px; font-weight: 700;
}
.admin-home-v2 .ahp-thumb img { width: 100%; height: 100%; object-fit: cover; }
.admin-home-v2 .ahp-thumb i { width: 18px; height: 18px; }

/* Сохранение */
.admin-home-v2 .ahp-saverow { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }

.admin-home-v2 .ahp-save {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 46px; padding: 12px 22px; cursor: pointer;
    background: var(--v2-action); border: 1px solid var(--v2-action); border-radius: 12px;
    color: #fff; font-size: 15px; font-weight: 700;
}
.admin-home-v2 .ahp-save:hover { background: var(--v2-action-hover); border-color: var(--v2-action-hover); }
.admin-home-v2 .ahp-save:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.admin-home-v2 .ahp-save i { width: 18px; height: 18px; }

.admin-home-v2 .ahp-dirty { margin: 0; font-size: 13px; font-weight: 600; color: var(--v2-active-text); }

/* Закреплённая панель — только на узких экранах, где кнопка уходит за экран. */
.admin-home-v2 .ahp-sticky { display: none; }

/* Диалог ухода с несохранёнными изменениями */
.admin-home-v2 .ahp-leave {
    width: min(420px, 100%); background: var(--v2-surface); border-radius: 18px; padding: 24px;
    box-shadow: var(--v2-shadow); display: flex; flex-direction: column; gap: 14px;
}
.admin-home-v2 .ahp-leave__icon {
    width: 48px; height: 48px; border-radius: 13px;
    background: var(--v2-active-bg); color: var(--v2-active-text);
    display: flex; align-items: center; justify-content: center;
}
.admin-home-v2 .ahp-leave__icon i { width: 22px; height: 22px; }
.admin-home-v2 .ahp-leave__title { margin: 0; font-size: 19px; font-weight: 700; }
.admin-home-v2 .ahp-leave__text { margin: 0; font-size: 15px; line-height: 1.6; color: var(--v2-text2); }
.admin-home-v2 .ahp-leave__actions { display: flex; flex-direction: column; gap: 9px; }
.admin-home-v2 .ahp-leave__actions .ahp-save,
.admin-home-v2 .ahp-leave__actions .ahp-btn { width: 100%; }
.admin-home-v2 .ahp-leave__discard {
    min-height: 44px; border: none; background: none; cursor: pointer;
    color: #B42318; font-size: 15px; font-weight: 600;
}
.admin-home-v2 .ahp-leave__discard:focus-visible {
    outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); border-radius: 10px;
}
.admin-home-v2 .ahp-leave__note { margin: 0; font-size: 12px; line-height: 1.5; color: var(--v2-text2); }

/* Модальное окно */
.admin-home-v2 .ahp-overlay {
    position: fixed; inset: 0; z-index: 60; padding: 20px;
    background: rgba(23, 21, 18, .55);
    display: flex; align-items: center; justify-content: center;
}

.admin-home-v2 .ahp-modal {
    width: min(560px, 100%); max-height: 84vh; overflow-y: auto;
    background: var(--v2-surface); border-radius: 18px; padding: 22px;
    box-shadow: var(--v2-shadow);
    display: flex; flex-direction: column; gap: 14px;
}
.admin-home-v2 .ahp-modal__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.admin-home-v2 .ahp-modal__title { margin: 0 0 4px; font-size: 19px; font-weight: 700; }

.admin-home-v2 .ahp-rows { display: flex; flex-direction: column; gap: 8px; }

.admin-home-v2 .ahp-row {
    display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
    min-height: 44px; padding: 12px; cursor: pointer;
    background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 12px;
}
.admin-home-v2 .ahp-row:hover { border-color: var(--v2-accent); }
.admin-home-v2 .ahp-row:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.admin-home-v2 .ahp-row:disabled { cursor: not-allowed; background: var(--v2-surface-subtle); color: var(--v2-text2); }
.admin-home-v2 .ahp-row__meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.admin-home-v2 .ahp-row__meta b { font-size: 15px; font-weight: 700; line-height: 1.35; }

.admin-home-v2 .ahp-empty { margin: 0; padding: 24px 0; text-align: center; font-size: 14px; color: var(--v2-text2); }

@media (max-width: 900px) {
    .admin-home-v2 .ahp-banner-grid,
    .admin-home-v2 .ahp-slots { grid-template-columns: minmax(0, 1fr); }
    .admin-home-v2 .ahp-section { padding: 18px; }
}

@media (max-width: 767px) {
    /* Уведомление занимает доступную ширину с безопасными отступами. */
    .admin-home-v2 .ahp-toasts {
        top: calc(68px + 12px + env(safe-area-inset-top, 0px));
        right: calc(12px + env(safe-area-inset-right, 0px));
        left: calc(12px + env(safe-area-inset-left, 0px));
        width: auto;
    }

    /* Одна кнопка сохранения остаётся видимой без прокрутки всей страницы. */
    .admin-home-v2 .ahp-saverow .ahp-save,
    .admin-home-v2 > .ahp-dirty { display: none; }

    .admin-home-v2 .ahp-sticky {
        position: sticky; bottom: 0; z-index: 20;
        display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
        margin: 0 -16px -16px; padding: 12px 16px;
        background: var(--v2-surface); border-top: 1px solid var(--v2-border);
    }
    .admin-home-v2 .ahp-sticky .ahp-save { flex: 1; }
    .admin-home-v2 .ahp-sticky__note { margin: 0; flex-basis: 100%; font-size: 13px; font-weight: 600; color: var(--v2-active-text); }
}
/* End Admin Home Page v2 */

/* Managed Public Home */
/* Управляемая гостевая главная (задача 2026-08-14-08). Рамка баннера держит
   принятую пропорцию — desktop 3:1, mobile 5:4, — а изображение заполняет её
   cover по центру. Загрузить разрешено картинку любых пропорций, и обрезать её
   должна рамка, а не вёрстка страницы. */
/* ───────── Гостевая главная: синий герой-баннер (макет Figma «КУРС БМС», узел 401:2141) ─────────

   Полоса во всю ширину экрана, прижатая к чёрной шапке, — как в макете.
   Рисуется секцией `public-bleed` до общего контейнера, а не приёмами с 100vw:
   те дают горизонтальную прокрутку, когда на странице есть полоса прокрутки.

   Содержимое выровнено по тому же контейнеру 1100, что и остальная витрина.
   Содержательная колонка макета шириной 1068 совпадает с внутренней шириной
   контейнера, поэтому размеры содержимого перенесены один к одному.

   Орнамент — растр, отрисованный из векторной маски макета: сама маска весит
   800 КБ и на витрине неуместна. */
.pub-hero-banner {
    position: relative;
    overflow: hidden;
    background: linear-gradient(123deg, #3f6399 4%, var(--pub-blue-2) 101%);
    color: #fff;
}

/* Орнамент тает в синий постепенно: у резкой границы виден шов, которого в
   макете нет. Длинная растяжка маски и есть этот переход. */
.pub-hero-banner::after {
    content: '';
    position: absolute;
    inset: 0;
    /* Масштаб взят из макета: там узор 431 px высотой на полосе 325 px, то есть
       выступает за неё сверху и снизу и укладывается в шесть символов по
       вертикали, а не в восемь. 133 % = 431 / 325. */
    background: url('../images/hero-ornament.png') right center / auto 133% repeat-x;
    opacity: .22;
    /* Переход начинается там же, где в макете, — около середины бейджа
       «Консультации», а не на подписи. Отсчёт идёт от всей ширины полосы,
       поэтому точка не «плавает» вместе с шириной блока. */
    -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, .22) 66%, rgba(0, 0, 0, .6) 82%, #000 100%);
    mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 52%, rgba(0, 0, 0, .22) 66%, rgba(0, 0, 0, .6) 82%, #000 100%);
    pointer-events: none;
}

.pub-hero-banner__inner {
    position: relative;
    z-index: 1;
    max-width: 1100px;
    margin: 0 auto;
    padding: 48px 16px 42px;
}

/* Логотип — тот же файл, что в шапке портала: в макете это он же, только крупнее. */
.pub-hero-banner__logo { display: block; width: 52%; max-width: 558px; height: auto; }

/* Подпись и бейджи в одну строку — так в макете; бейджи прижаты к правому краю
   содержательной колонки. */
.pub-hero-banner__row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    margin-top: 28px;
}

.pub-hero-banner__lead {
    margin: 0;
    font-size: 22px;
    line-height: 1.18;
    font-weight: 400;
}

.pub-hero-banner__tags { display: flex; flex-wrap: wrap; gap: 8px; }

.pub-hero-banner__tag {
    display: inline-flex;
    align-items: center;
    height: 34px;
    padding: 0 16px;
    border: 1px solid #fff;
    border-radius: 999px;
    font-size: 17px;
    line-height: 1;
    text-transform: uppercase;
    white-space: nowrap;
}

/* Три оттенка из макета: первая пилюля вывернута, остальные — синие. */
.pub-hero-banner__tag--light { background: #fff; color: #5a81b6; }
.pub-hero-banner__tag--blue { background: #5d84b8; }
.pub-hero-banner__tag--blue-2 { background: var(--pub-blue-3); }

@media (max-width: 900px) {
    .pub-hero-banner__inner { padding: 40px 16px 34px; }
    .pub-hero-banner__logo { width: 72%; }
    .pub-hero-banner__lead { font-size: 19px; }
    /* Строка распадается на две — вариант макета для узкого экрана (453:768). */
    .pub-hero-banner__row { flex-direction: column; align-items: flex-start; gap: 18px; margin-top: 24px; }
}

@media (max-width: 640px) {
    .pub-hero-banner__inner { padding: 28px 16px 24px; }
    /* На узком экране орнамент занимал бы половину блока и мешал подписи. */
    .pub-hero-banner::after {
        opacity: .16;
        -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, .5) 72%, #000 100%);
        mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, .5) 72%, #000 100%);
    }
    .pub-hero-banner__logo { width: 100%; }
    .pub-hero-banner__lead { font-size: 15px; }
    .pub-hero-banner__row { gap: 14px; margin-top: 18px; }
    .pub-hero-banner__tags { gap: 6px; }
    .pub-hero-banner__tag { height: 28px; padding: 0 12px; font-size: 13px; }
}

/* ───────── Гостевая главная: «Что такое GESS Академия» (макет Figma, узел 468:5502) ─────────

   Пришёл на место прежнего вступления — заголовка «Обучение и помощь экспертов»,
   двух карточек путей и строки галочек. Размеры перенесены из макета: колонка
   там 1068 px и совпадает с внутренней шириной контейнера, поэтому шрифты и
   отступы берутся один к одному, а сетка карточек становится резиновой. */
/* Отступы выверены заказчиком на стенде 19.08.2026: 35 px от баннера до
   плашки. Соседние margin схлопываются, поэтому 35 — это и есть итоговый
   просвет, а не прибавка к отступу баннера. */
.pub-about { margin: 35px 0 40px; }

.pub-about__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    /* 30 px от плашки до заголовка: у заголовка верхнего отступа нет, поэтому
       просвет задаётся здесь целиком. Оба значения выверены заказчиком. */
    margin: 0 0 30px;
    padding: 10px 14px 9px 14px;
    border-radius: 999px;
    background: var(--pub-bg-soft);
    color: var(--v2-text);
    font: 600 12px 'Raleway', sans-serif;
    text-transform: uppercase;
    letter-spacing: .04em;
}

.pub-about__dot { width: 14px; height: 14px; border-radius: 50%; background: var(--pub-blue); flex: none; }

.pub-about__title {
    margin: 0 0 14px;
    font-weight: 700;
    font-size: 46px;
    line-height: 1.05;
    letter-spacing: -.025em;
    color: var(--v2-text);
}

.pub-about__lead {
    margin: 0 0 32px;
    max-width: 940px;
    font-size: 17px;
    line-height: 1.55;
    color: var(--v2-text2);
}

/* auto-fit: карточек четыре, но сетка не должна ломаться, если однажды их
   станет меньше — пустых колонок не остаётся.

   Минимальная ширина карточки плавающая, а не постоянная. На широком экране
   карточка не должна быть уже 220px — иначе заголовок ломается на три строки.
   На узком те же 220px не дают встать двум карточкам в ряд, а заказчик просит
   именно два, пока карточки не начнут слипаться (правка 19.08.2026).

   40vw — та доля ширины экрана, при которой два столбца помещаются, а три уже
   нет; 150px — ширина, ниже которой карточка слипается, и на ней подбор
   останавливается. Порог перехода «два в ряд → один» сетка находит сама, около
   344px, поэтому здесь нет точки перелома, которую пришлось бы двигать вслед за
   длиной заголовка. */
.pub-about__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(clamp(150px, 40vw, 220px), 1fr));
    gap: 16px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.pub-about__card {
    display: flex;
    flex-direction: column;
    padding: 24px 22px 26px;
    border-radius: 25px;
    background: var(--pub-bg-soft);
}

.pub-about__num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    margin-bottom: 22px;
    border-radius: 50%;
    background: #fff;
    color: var(--pub-blue);
    font: 700 16px 'Raleway', sans-serif;
    letter-spacing: -.02em;
    font-variant-numeric: lining-nums proportional-nums;
}

.pub-about__card-title {
    margin: 0 0 8px;
    font-weight: 700;
    font-size: 18px;
    line-height: 1.1;
    letter-spacing: -.019em;
    color: var(--v2-text);
}

.pub-about__card-text { margin: 0; font-size: 14px; line-height: 1.25; color: var(--v2-text2); }

@media (max-width: 900px) {
    .pub-about__title { font-size: 34px; }
    .pub-about__lead { margin-bottom: 26px; font-size: 16px; }
}

@media (max-width: 640px) {
    .pub-about { margin-bottom: 32px; }
    .pub-about__title { font-size: 26px; }
    .pub-about__lead { font-size: 15px; }
    .pub-about__grid { gap: 12px; }
    .pub-about__card { padding: 20px 18px 22px; border-radius: 20px; }
    .pub-about__num { width: 44px; height: 44px; margin-bottom: 16px; }
}

.pub-banner { display: block; width: 100%; aspect-ratio: 3 / 1; margin-bottom: 28px;
    border-radius: 20px; overflow: hidden; background: var(--v2-surface-subtle); }
.pub-banner picture { display: block; width: 100%; height: 100%; }
.pub-banner__img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; }

@media (max-width: 767px) {
    .pub-banner { aspect-ratio: 5 / 4; margin-bottom: 22px; border-radius: 16px; }
}

/* Карточки экспертов на главной — общий expert-card-v2 каталога. Его стили
   привязаны к .experts-grid-v2, поэтому контейнер несёт тот же класс, а здесь
   задана только сетка в ритме остальных блоков главной. */
.pub-exp-grid.experts-grid-v2 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px;
    align-items: stretch; }
@media (min-width: 768px) and (max-width: 1023px) {
    .pub-exp-grid.experts-grid-v2 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 767px) {
    .pub-exp-grid.experts-grid-v2 { grid-template-columns: 1fr; }
}

/* «Бесплатно» в подборке материалов — не цена, а признак: плашка, как в
   библиотеке знаний, а не крупная сумма в строке цены. */
/* Зелёной плашки «Бесплатно» в макете нет: у карточки библиотеки цены не
   показывают вовсе. Правило оставлено выключенным, а не удалено, — карточка
   общая, и в других местах подпись цены ещё может понадобиться. */
.pub-sec--free .pub-card__price { display: none; }

/* От бейджей до кнопки в карточке библиотеки — примерно 35 px: 8 даёт общий
   отступ колонки, остальное здесь. */
.pub-sec--free .pub-card__chips { margin-bottom: 27px; }

/* Блок экспертов на главной: кнопка и наведение — как у карточек материалов.
   Селектор идёт от .pub-exp-grid, а не от .experts-grid-v2: та же карточка
   живёт на /experts и в обоих профилях, а задача меняет только гостевую
   главную. Правила стоят ниже исходных, поэтому перебивают их без !important. */
.pub-exp-grid .expert-card-v2__cta {
    background: transparent;
    border: 1px solid var(--v2-border);
    color: var(--v2-text);
}
.pub-exp-grid .expert-card-v2__cta:hover {
    background: var(--pub-blue-2);
    border-color: var(--pub-blue-2);
    color: #fff;
}
/* Синяя рамка в два пикселя; толщину компенсируем полем, иначе карточка
   сдвигалась бы на пиксель при наведении. */
/* Без наведения обводки нет. Прозрачная рамка вместо снятой: при наведении
   она становится синей и в два пикселя, и карточка не должна от этого
   сдвигаться. */
.pub-exp-grid .expert-card-v2 { border-color: transparent; }

/* ───────── Блок «Заказать консультацию» (макет Figma, узел 468:4463) ─────────

   Синяя полоса во всю ширину — тем же приёмом, что и полоса лент: тень,
   обрезанная по вертикали. Горизонтальной прокрутки он не создаёт.

   Отправка формы пока не подключена: куда уходит заявка — решение заказчика. */
.pub-lead {
    /* Заливка та же, что у героя: полоса рисуется после контейнера и тянется во
       всю ширину сама — приём с тенью здесь не нужен, он умеет только сплошной
       цвет и обрывал бы градиент по краям. */
    background: linear-gradient(105deg, #3f6399 4%, var(--pub-blue-2) 101%);
    padding: 64px 0;
    color: #fff;
}

/* Левая граница карточки — ровно по середине блока: колонки равные. */
.pub-lead__inner {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 48px;
    align-items: center;
    max-width: 1100px;
    margin: 0 auto;
    padding: 0 16px;
}

.pub-lead__title { margin: 0 0 14px; font-weight: 700; font-size: 46px; line-height: 1; letter-spacing: -.02em; }
.pub-lead__sub { margin: 0 0 80px; max-width: 460px; font-size: 18px; line-height: 1.55; }

.pub-lead__steps { display: grid; gap: 20px; margin: 0; padding: 0; list-style: none; }
.pub-lead__step { display: flex; align-items: flex-start; gap: 18px; font-size: 16px; line-height: 1.38; }
.pub-lead__num {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 43px;
    height: 42px;
    border-radius: 26px;
    background: #fff;
    color: var(--pub-blue);
    font: 700 16px 'Raleway', sans-serif;
    letter-spacing: -.02em;
    /* Без этого цифры в кружках «прыгают»: у Raleway по умолчанию знаки не
       табличные, и 01 с 02 занимают разную ширину. */
    font-variant-numeric: lining-nums tabular-nums;
}

.pub-lead__card {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 28px 32px 32px;
    border-radius: 20px;
    background: #fff;
    color: var(--v2-text);
}
.pub-lead__card-title { margin: 0 0 2px; font-weight: 700; font-size: 18px; letter-spacing: -.019em; }

.pub-lead__field { display: flex; flex-direction: column; gap: 6px; }
.pub-lead__label { font-weight: 600; font-size: 13px; color: var(--v2-text); }
.pub-lead__input {
    height: 48px;
    padding: 0 18px;
    box-sizing: border-box;
    border: 1px solid var(--border-hover);
    border-radius: 10px;
    background: #fff;
    color: var(--v2-text);
    font: 400 15px 'Raleway', sans-serif;
    /* Цифры в телефоне не должны «прыгать» при наборе: у Raleway по умолчанию
       знаки не табличные, и ширина строки меняется от цифры к цифре. */
    font-variant-numeric: lining-nums tabular-nums;
}
.pub-lead__input::placeholder { color: #757575; }
/* В фокусе рамка синяя и заметная — тем же цветом, что у выбранной пилюли
   способа связи. :focus, а не :focus-visible: щелчок мышью по полю ввода тоже
   должен показывать, где стоит курсор.

   Селектор идёт от .pub: общее правило видимого фокуса публичной оболочки
   рисует оранжевое кольцо и написано как «.pub input:focus-visible» — при
   меньшей силе наше правило проигрывало бы ему, и обводка оставалась оранжевой.
   Кольцо не убрано, а перекрашено: клавиатурный фокус должен быть виден. */
.pub .pub-lead__input:focus,
.pub .pub-lead__input:focus-visible {
    outline: none;
    border-color: var(--pub-blue);
    box-shadow: 0 0 0 1px var(--pub-blue);
}
.pub-lead__select { appearance: none; padding-right: 40px;
    background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23575757' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 16px center no-repeat; }

.pub-lead__row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.pub-lead__ways { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.pub-lead__way { position: relative; }
.pub-lead__way input { position: absolute; opacity: 0; pointer-events: none; }
.pub-lead__way span {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 35px;
    border: 1px solid var(--border-hover);
    border-radius: 999px;
    font: 600 13px 'Raleway', sans-serif;
    cursor: pointer;
}
.pub-lead__way input:checked + span { background: var(--tint2); border-color: var(--pub-blue); color: var(--pub-blue); }
.pub-lead__way input:focus-visible + span { outline: 2px solid var(--v2-focus); outline-offset: 2px; }

.pub-lead__check { display: flex; align-items: flex-start; gap: 10px; font-size: 12px; line-height: 1.5; color: var(--v2-text2); }
.pub-lead__check input { margin: 1px 0 0; width: 16px; height: 16px; flex: none; }

.pub-lead__submit {
    height: 54px;
    margin-top: 6px;
    border: none;
    border-radius: 15px;
    background: var(--pub-blue-2);
    color: #fff;
    font: 700 15px 'Raleway', sans-serif;
    cursor: pointer;
    transition: background .15s;
}
.pub-lead__submit:hover { background: var(--pub-blue); }

.pub-lead__err { font-size: 12px; line-height: 1.4; color: var(--err); }
.pub-lead__err--block { margin: 0; }

/* Между полосой лент и формой белого просвета быть не должно: полоса лент
   заканчивается своим нижним отступом, а контейнер на такой странице не даёт
   собственного отступа снизу. */
.pub-main--flush { padding-bottom: 0; }
.pub-main--flush .pub-band { margin-bottom: 0; }

.pub-lead__policy { color: var(--pub-blue); text-decoration: underline; text-underline-offset: 2px; }

.pub-lead__done {
    margin: 0;
    padding: 8px 16px;
    border-radius: 10px;
    background: #eaf6ec;
    color: #2e7d32;
    font: 500 13px 'Raleway', sans-serif;
}

@media (max-width: 1023px) {
    .pub-lead__inner { grid-template-columns: 1fr; gap: 32px; }
    .pub-lead__title { font-size: 34px; }
    .pub-lead__sub { max-width: none; margin-bottom: 26px; font-size: 16px; }
}

@media (max-width: 640px) {
    .pub-lead { padding: 40px 0; }
    .pub-lead__title { font-size: 26px; }
    .pub-lead__card { padding: 22px 20px 24px; }
    .pub-lead__row, .pub-lead__ways { grid-template-columns: 1fr; }
}

/* Полоса регистрации из макета (узел 401:2337). */
.pub-join {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    margin-bottom: 50px;
    padding: 26px 28px;
    border-radius: 20px;
    background: var(--pub-blue-3);
    color: #fff;
}
.pub-join__title { margin: 0; font-weight: 700; font-size: 22px; line-height: 1.2; }
.pub-join__note { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 10px 0 0; font-size: 14px; }
.pub-join__coins {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 9px;
    border-radius: 999px;
    background: #fff;
    color: #f37500;
    font-weight: 700;
    font-size: 13px;
    letter-spacing: -.04em;
}
.pub-join__coins i, .pub-join__coins svg { width: 14px; height: 14px; flex: none; }
.pub-join__btn {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 190px;
    min-height: 46px;
    padding: 0 20px;
    border-radius: 12px;
    background: #fff;
    color: var(--pub-blue-3);
    font: 700 15px 'Raleway', sans-serif;
    text-decoration: none;
    transition: background .15s;
}
.pub-join__btn:hover { background: var(--pub-bg-soft); }

@media (max-width: 767px) {
    .pub-join { flex-direction: column; align-items: flex-start; padding: 22px 20px; }
    .pub-join__title { font-size: 18px; }
    .pub-join__btn { width: 100%; }
}

.pub-exp-grid .expert-card-v2:hover {
    border: 2px solid var(--pub-blue-2);
    margin: -1px;
}

/* «Все курсы» и «Все эксперты» — это тач-цели, а не просто текст в заголовке:
   18 px высоты по строке шрифта мало для пальца, добираем до 44. */
.pub-sec__head .pub-sec__all { display: inline-flex; align-items: center; min-height: 44px; }

/* Финальный CTA принятой ревизии: на десктопе одна компактная строка. */
@media (min-width: 768px) {
    .pub-cta-final { display: flex; align-items: center; justify-content: space-between;
        gap: 24px; padding: 28px 32px; text-align: left; }
    .pub-cta-final h2 { margin: 0 0 0; }
}
/* End Managed Public Home */

/* Admin User Creation v2 */
/* Ручное создание пользователя (задача 2026-08-15-02): кнопка в шапке списка,
   отдельная форма, панель состояния приглашения в карточке и экран принятия
   документов при первом входе. Только v2-токены. */

/* Общие .inb-btn ещё на legacy-палитре (синий бренд-цвет). Новые поверхности
   быть на v2-токенах, поэтому цвет задаём здесь, не трогая общий компонент и
   не перекрашивая остальную админку. Primary по docs/05-design-tokens.md —
   фон --v2-action, текст белый, hover --v2-action-hover. */
.ausr-add,
.ausr-create__submit {
    background: var(--v2-action);
    border-color: var(--v2-action);
    color: #fff;
}
.ausr-add:hover,
.ausr-create__submit:hover {
    background: var(--v2-action-hover);
    border-color: var(--v2-action-hover);
}
.ausr-add:focus-visible,
.ausr-create__submit:focus-visible,
.ausr-invite .inb-btn:focus-visible {
    outline: none;
    box-shadow: 0 0 0 2px var(--v2-canvas), 0 0 0 4px var(--v2-focus);
}

/* Вторичная кнопка повторной отправки: белая с рамкой, акцент — на hover. */
.ausr-invite .inb-btn--ghost {
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    color: var(--v2-text);
}
.ausr-invite .inb-btn--ghost:hover { border-color: var(--v2-accent); }

/* Ссылка возврата — ровно как на карточке пользователя: приглушённая, а не
   синяя и не акцентная, с полноценной зоной нажатия и видимым фокусом. */
.ausr-create .ausr-back { min-height: 44px; align-items: center; color: var(--v2-text2); }
.ausr-create .ausr-back:hover { color: var(--v2-text); }
.ausr-create .ausr-back:focus-visible { outline: 3px solid var(--v2-focus); outline-offset: 2px; border-radius: 8px; }

/* Шапка списка уже flex со space-between — кнопке остаётся не ужиматься. */
.ausr-add { flex: none; min-height: 44px; white-space: nowrap; }
@media (max-width: 520px) {
    .ausr-add { width: 100%; }
}

/* ── Форма создания ─────────────────────────────────────────────────────── */
.ausr-create { max-width: 560px; }
.ausr-create__form { display: flex; flex-direction: column; gap: 18px; margin-top: 22px; }
.ausr-create__field { display: flex; flex-direction: column; gap: 6px; }
.ausr-create__field span { font-size: 14px; font-weight: 600; color: var(--v2-text); }
.ausr-create__field input {
    height: 48px; padding: 0 14px; font-size: 15px; color: var(--v2-text);
    background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 12px;
}
.ausr-create__field input:focus-visible {
    outline: none; border-color: var(--v2-focus);
    box-shadow: 0 0 0 3px rgba(212, 101, 0, .18);
}
.ausr-create__submit { align-self: flex-start; min-height: 48px; }

/* Сводка ошибок над формой: её читают и глазами, и программой чтения экрана. */
.ausr-create__errors {
    margin-top: 18px; padding: 16px 18px; border-radius: 14px;
    background: #fdecec; border: 1px solid #f3c2c2; color: #8a1f1f;
}
.ausr-create__errors b { display: block; margin-bottom: 6px; }
.ausr-create__errors ul { margin: 0; padding-left: 18px; font-size: 14px; }
.ausr-create__existing {
    display: inline-flex; align-items: center; min-height: 44px; margin-top: 8px;
    font-weight: 600; color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px;
}

/* ── Панель приглашения в карточке ──────────────────────────────────────── */
.ausr-invite__state {
    display: inline-flex; align-items: center; min-height: 28px; margin: 0 0 8px;
    padding: 4px 12px; border-radius: 999px; font-size: 13px; font-weight: 600;
}
.ausr-invite__state--sent { color: #1e7d34; background: #e6f4ea; }
.ausr-invite__state--not_sent { color: #8a1f1f; background: #fdecec; }
.ausr-invite__state--completed { color: var(--v2-text2); background: var(--v2-surface-subtle); }
.ausr-invite__error { margin: 0 0 10px; font-size: 13px; color: #8a1f1f; }
.ausr-invite .inb-btn { min-height: 44px; }

/* ── Экран принятия документов ──────────────────────────────────────────── */
.aterms { max-width: 560px; margin: 0 auto; padding: 8px 0 24px; }
.aterms__title { margin: 0 0 10px; font: 800 30px 'Raleway', sans-serif; letter-spacing: -.02em; color: var(--v2-text); }
.aterms__lead { margin: 0 0 24px; font-size: 15px; line-height: 1.6; color: var(--v2-text2); }
.aterms__form { display: flex; flex-direction: column; gap: 14px; }
.aterms__check {
    display: flex; align-items: flex-start; gap: 12px; min-height: 44px; padding: 14px 16px;
    background: var(--v2-surface); border: 1px solid var(--v2-border); border-radius: 14px;
    font-size: 15px; line-height: 1.5; color: var(--v2-text); cursor: pointer;
}
.aterms__check input { width: 22px; height: 22px; margin: 1px 0 0; flex: none; accent-color: var(--v2-accent); }
.aterms__check a { color: var(--v2-accent-hover); text-decoration: underline; text-underline-offset: 2px; }
.aterms__btn {
    display: inline-flex; align-items: center; justify-content: center; align-self: flex-start;
    min-height: 48px; padding: 0 28px; border: 0; border-radius: 14px; cursor: pointer;
    background: var(--v2-action); color: #fff; font: 600 16px 'Raleway', sans-serif;
}
.aterms__btn:disabled { opacity: .5; cursor: default; }
.aterms__errors {
    margin-bottom: 18px; padding: 14px 16px; border-radius: 14px;
    background: #fdecec; border: 1px solid #f3c2c2; color: #8a1f1f;
}
.aterms__errors ul { margin: 0; padding-left: 18px; font-size: 14px; }

@media (max-width: 520px) {
    .aterms__title { font-size: 26px; }
    .aterms__btn { width: 100%; }
}
/* End Admin User Creation v2 */

/* Public Expert Flag v2 */
/* Публикация партнёра в каталоге экспертов (задача 2026-08-15-03). Управление —
   настоящий switch со своим примитивом: общий .inb-btn ещё на legacy-палитре, да
   и кнопка не умеет сообщать включённое состояние. */
.ausr-pubexp__state {
    display: inline-flex; align-items: center; min-height: 28px; margin: 0 0 8px;
    padding: 4px 12px; border-radius: 999px; font-size: 13px; font-weight: 600;
}
.ausr-pubexp__state--on { color: #1e7d34; background: #e6f4ea; }
.ausr-pubexp__state--off { color: var(--v2-text2); background: var(--v2-surface-subtle); }

.ausr-switch {
    display: inline-flex; align-items: center; gap: 12px;
    min-height: 44px; padding: 6px 4px;
    background: none; border: 0; cursor: pointer;
    font: inherit; color: var(--v2-text); text-align: left;
}
.ausr-switch__track {
    position: relative; flex: 0 0 auto; width: 44px; height: 26px;
    border-radius: 999px; background: var(--v2-surface-subtle);
    border: 1px solid var(--v2-border); transition: background .15s, border-color .15s;
}
.ausr-switch__thumb {
    position: absolute; top: 2px; left: 2px; width: 20px; height: 20px;
    border-radius: 50%; background: var(--v2-surface);
    box-shadow: 0 1px 2px rgba(23, 21, 18, .25); transition: transform .15s;
}
.ausr-switch.is-on .ausr-switch__track { background: var(--v2-action); border-color: var(--v2-action); }
.ausr-switch.is-on .ausr-switch__thumb { transform: translateX(18px); }
.ausr-switch:hover .ausr-switch__track { border-color: var(--v2-accent); }
.ausr-switch:focus-visible { outline: none; }
.ausr-switch:focus-visible .ausr-switch__track {
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}

.ausr-expert-badge {
    display: inline-flex; align-items: center; margin-left: 8px;
    padding: 2px 8px; border-radius: 999px;
    background: #e6f4ea; color: #1e7d34;
    font-size: 12px; font-weight: 600; white-space: nowrap;
}
/* End Public Expert Flag v2 */

/* Expert Card Layout v2 */
/* Ряд «аватар + личность» в карточке эксперта и город отдельной строкой в
   профиле (задача 2026-08-15-04). Раньше карточка складывала всё в колонку,
   и имя уезжало под фото — в макете каталога оно справа от него. */
.expert-card-v2__ident {
    display: flex;
    align-items: center;
    gap: 14px;
    /* Бейдж «Эксперт» висит абсолютом в правом верхнем углу. Пока имя стояло
       под аватаром, ему хватало резерва padding-right; в ряду этот резерв
       съедал треть колонки и ломал имя на две строки. Опускаем ряд под бейдж
       и резерв снимаем — имя получает всю ширину. */
    margin-top: 22px;
    margin-bottom: 14px;
}
.expert-card-v2__ident .expert-card-v2__name { padding-right: 0; }
.expert-card-v2__ident-text { min-width: 0; }
.expert-card-v2__ident .expert-card-v2__photo,
.expert-card-v2__ident .expert-card-v2__ava { flex: 0 0 auto; margin: 0; }
.expert-card-v2__ident .expert-card-v2__name,
.expert-card-v2__ident .expert-card-v2__spec,
.expert-card-v2__ident .expert-card-v2__city { margin: 0; }
.expert-card-v2__ident .expert-card-v2__spec,
.expert-card-v2__ident .expert-card-v2__city { margin-top: 2px; }

.expert-profile-public-v2__city,
.expert-profile-v2__city {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 4px;
    color: var(--v2-text2);
    font-size: 15px;
}
.expert-profile-public-v2__city i,
.expert-profile-v2__city i { width: 16px; height: 16px; }
/* End Expert Card Layout v2 */

/* Gessmarket Product Link v2 */
/* Административное поле связи материала с товаром основного сайта
   (задача 2026-08-16-01). Поле короткое — ID, а не строка адреса, поэтому
   ограничиваем ширину, а не растягиваем на карточку. */
.gm-link__row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
}
.gm-link__input {
    min-height: 44px;
    max-width: 220px;
    background: var(--v2-surface);
    border: 1px solid var(--v2-border);
    border-radius: 10px;
    padding: 0 12px;
    color: var(--v2-text);
    font: inherit;
}
.gm-link__input:focus-visible {
    outline: none;
    border-color: var(--v2-accent);
    box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus);
}
.gm-link__hint { color: var(--v2-text2); font-size: 13px; }
/* Отметка о несохранённом изменении — сигнальным цветом: подпись говорит про
   сохранённую связь, а в поле уже другое значение. */
.gm-link__hint--unsaved { color: #b42318; font-weight: 600; }
.gm-link__error { margin: 8px 0 0; color: #b3261e; font-size: 14px; }
/* End Gessmarket Product Link v2 */

/* Guest Checkout v2 */
/* Экраны гостевой покупки (задачи 2026-08-16-02 и 2026-08-17-01).

   Отдельный блок с корнем .gco / .gco-status: формой пользуется неавторизованный
   человек, и она не должна зависеть от стилей кабинета.

   Ширину задаёт общий контейнер публичной оболочки (.pub-main), а не собственный
   узкий блок: в макете карточка прижата к левому краю, а подвал выровнен по
   контейнеру — на живой странице это выглядело бы разъездом. */
/* Колонка оформления уже основного контента и стоит по центру: строка формы
   во всю ширину контейнера читается тяжело, а карточка заказа выглядит пустой. */
/* Голубой фон страницы оформления (макет 574-719). Красим не всю витрину, а
   только эту страницу: на остальных фон белый, и менять его никто не просил.
   Признак — сама страница внутри оболочки, отдельного флага в макете заводить
   незачем: одна страница, одно правило. Шапка и подвал сохраняют свой тёмный
   фон, они закрашены собственными правилами. */
.pub:has(.gco) { background: #e6edf8; }

.gco { max-width: 750px; margin: 0 auto; padding-bottom: 8px; }
.gco__title { margin: 0 0 8px; font-size: 32px; line-height: 1.2; color: var(--v2-text); }
.gco__lead { margin: 0 0 24px; max-width: 62ch; color: var(--v2-text2); }

/* Сводка заказа: обложка слева, состав справа; на мобильном — друг под другом. */
/* Карточки страницы оформления — как на странице материала: белое поле,
   скругление 18, тень витрины и никакой рамки. Рамки в макете нет ни у одной
   из двух карточек, её роль играет тень. */
.gco-order {
    display: grid;
    grid-template-columns: minmax(0, 320px) 1fr;
    gap: 0;
    margin-bottom: 20px;
    border-radius: 18px;
    background: var(--v2-surface);
    box-shadow: var(--v2-shadow-pub);
    overflow: hidden;
}
/* Обложка тянется на всю высоту карточки. Соотношение 1200×630 задаёт
   .course-cover-media, но в две колонки оно оставляло полосу в несколько
   пикселей: коробка держала свою высоту, а строка была выше. Кадрирование при
   этом не страдает — object-fit: cover остаётся. */
.gco-order__cover { background: var(--v2-surface-subtle); aspect-ratio: auto; height: 100%; }
/* Кадрируем от левого края, а не по центру: обложка 1200×630 в узкой колонке
   обрезается с обеих сторон, и название материала, которое художник ставит
   слева, срезается первым. Общий «.course-cover-media > img» держит center —
   поэтому селектор здесь сильнее на один класс. */
.gco-order__cover.course-cover-media > img { object-position: left center; }
.gco-order__body { padding: 24px; }
.gco-order__eyebrow {
    margin: 0 0 8px;
    font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase;
    color: var(--v2-text2);
}
.gco-order__title { margin: 0 0 8px; font-size: 24px; line-height: 1.25; color: var(--v2-text); }
.gco-order__meta { margin: 0 0 16px; color: var(--v2-text2); font-size: 15px; }
.gco-order__chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 14px; }
.gco-order__price { margin: 0; font-size: 26px; font-weight: 700; color: var(--v2-text);
    display: flex; align-items: baseline; flex-wrap: wrap; gap: 10px; }
/* Пара цен как на витрине: старая бледнее и перечёркнута красным. */
.gco-order__old { font-size: 17px; font-weight: 500; color: #9aa4b8; text-decoration: none; position: relative; }
.gco-order__old::after { content: ""; position: absolute; left: -2px; right: -2px; top: 50%;
    height: 1px; background: #e05353; }

/* Способы оплаты: витрина, а не выбор. Плитки одного размера, картинка внутри
   вписывается целиком — логотипы разной формы, и обрезать их нельзя. */
.gco__subhead { margin: 4px 0 10px; font-size: 14px; font-weight: 600; color: var(--v2-text); }
.gco-pay { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 10px; }
.gco-pay__item { height: 63px; border-radius: 9px; background: #f2f5fb;
    display: flex; align-items: center; justify-content: center; padding: 10px 12px; }
.gco-pay__item img { max-width: 100%; max-height: 100%; object-fit: contain; }

/* Форма одной колонкой. */
.gco__form {
    display: flex; flex-direction: column; gap: 16px;
    padding: 24px;
    border-radius: 18px;
    background: var(--v2-surface);
    box-shadow: var(--v2-shadow-pub);
}
.gco__field { display: flex; flex-direction: column; gap: 6px; }
.gco__label { color: var(--v2-text); font-size: 14px; font-weight: 600; }
.gco__input {
    min-height: 48px;
    padding: 0 14px;
    border: 1px solid var(--v2-border);
    border-radius: 12px;
    background: var(--v2-surface);
    color: var(--v2-text);
    font: inherit;
}
.gco__input::placeholder { color: var(--v2-text2); }
/* Фокус — синий, как вся витрина (правка приёмки 20.08.2026). Оранжевый
   --v2-focus остаётся кабинетным: страница оформления живёт на витрине, и
   рыжая обводка на ней выглядела чужой. Контур виден и без цвета — рамка
   утолщается сама по себе, поэтому доступность не пострадала. */
/* Селектор усилен «.pub» намеренно: у страницы витрины есть общее правило
   «.pub input:focus-visible» с оранжевым свечением, и при равной силе оно
   побеждало по порядку в файле. Четвёртый случай силы селектора за три дня —
   поэтому причина записана здесь, а не в памяти. */
.pub .gco__input:focus-visible {
    outline: none;
    border: 1px solid var(--pub-blue);
    box-shadow: 0 0 0 3px rgba(69, 103, 157, .18);
}
/* Ошибку видно и по рамке, и по подложке — не только цветом текста. */
.gco__input.is-invalid { border-color: var(--err); background: #FFF7F6; }

.gco__divider { height: 1px; margin: 4px 0; background: var(--v2-border); }

/* Согласие кликабельно целиком: строчная ссылка внутри — исключение из правила
   44 px, согласованное отдельно. */
/* Подпись стоит по центру галочки, а не по её верхнему краю: строка короткая,
   и при выравнивании по верху текст визуально уезжал вверх. Длинная подпись,
   которая переносится на две строки, всё равно останется центрированной
   относительно галочки — это и нужно. */
.gco__consent {
    display: flex; align-items: center; gap: 12px;
    min-height: 44px; padding: 4px 0;
    color: var(--v2-text); cursor: pointer;
}
/* Названия документов выделены акцентом и весом: человек должен видеть,
   что именно он принимает, и что это ссылка. */
/* Ссылки на оферту и политику — синие, как в макете. Оранжевый акцент
   кабинета здесь чужой. */
.gco__consent a { color: var(--pub-blue); font-weight: 600; text-underline-offset: 3px; }
.gco__consent a:hover { color: var(--pub-blue-3); }
.gco__check {
    width: 20px; height: 20px; flex: 0 0 auto;
    accent-color: var(--pub-blue); cursor: pointer;
}
/* Фокус галочки — той же синевой, что и поля: рыжий контур рядом с синим
   читался бы как ошибка. */
.pub .gco__check:focus-visible { outline: 2px solid var(--pub-blue); outline-offset: 2px; }

.gco__error { color: var(--err); font-size: 14px; }
.gco__error--consent { margin-left: 32px; }

/* Превышение попыток и недоступный шлюз: сообщение над кнопкой, как в макете. */
.gco__notice {
    display: flex; align-items: flex-start; gap: 10px;
    margin: 0; padding: 12px 14px;
    border-radius: 12px;
    background: var(--v2-active-bg);
    color: var(--v2-active-text);
    font-size: 15px;
}
.gco__notice i { flex: 0 0 auto; width: 18px; height: 18px; margin-top: 2px; }
.gco__notice--error { background: var(--err-bg); color: var(--err); }

.gco__submit {
    display: inline-flex; align-items: center; justify-content: center;
    min-height: 52px;
    border: 0;
    border-radius: 12px;
    /* Синяя, как в макете и как кнопка покупки на странице материала: тот же
       токен витрины --pub-blue-3 (#628abe), а не чёрное действие кабинета. */
    background: var(--pub-blue-3);
    color: #fff;
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}
.gco__submit:hover { background: var(--pub-blue); }
.gco__submit:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(69, 103, 157, .35); }
.gco__submit:disabled { opacity: .7; cursor: progress; }
.gco__note { margin: 0; color: var(--v2-text2); font-size: 14px; line-height: 1.5; }

/* ── Экраны состояния платежа ──────────────────────────────────────────── */

.gco-status {
    max-width: 560px;
    margin: 24px auto;
    padding: 40px 32px;
    border: 1px solid var(--v2-border);
    border-radius: 20px;
    background: var(--v2-surface);
    box-shadow: var(--v2-shadow);
    text-align: center;
}
.gco-status__icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 64px; height: 64px; margin-bottom: 20px;
    border-radius: 18px;
}
.gco-status__icon i { width: 28px; height: 28px; }
.gco-status__order { margin: 0 0 8px; color: var(--v2-text2); font-size: 13px; letter-spacing: .04em; }
.gco-status__title { margin: 0 0 12px; font-size: 28px; line-height: 1.2; }
.gco-status__text { margin: 0 auto 24px; max-width: 46ch; color: var(--v2-text2); line-height: 1.55; }

/* Смысловые цвета состояний: ожидание охристое, успех зелёный, отказ красный. */
.gco-status--pending .gco-status__icon { background: var(--v2-active-bg); color: var(--v2-active-text); }
.gco-status--pending .gco-status__title { color: var(--v2-active-text); }
.gco-status--success .gco-status__icon { background: var(--ok-bg); color: var(--ok); }
.gco-status--success .gco-status__title { color: var(--ok); }
.gco-status--failed .gco-status__icon { background: var(--err-bg); color: var(--err); }
.gco-status--failed .gco-status__title { color: var(--err); }

.gco-status__pill {
    display: inline-flex; align-items: center; gap: 8px;
    margin: 0 0 20px; padding: 8px 16px;
    border-radius: 999px;
    background: var(--v2-active-bg);
    color: var(--v2-active-text);
    font-size: 14px; font-weight: 600;
}
.gco-status__pill i { width: 16px; height: 16px; }

/* Действия колонкой: основное сверху, вторичное под ним. */
.gco-status__actions { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.gco-status__cta {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 52px; padding: 0 28px;
    border: 1px solid transparent;
    border-radius: 12px;
    background: var(--v2-action);
    color: #fff;
    text-decoration: none;
    font-weight: 600;
    cursor: pointer;
}
.gco-status__cta:hover { background: var(--v2-action-hover); color: #fff; }
.gco-status__cta:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--v2-surface), 0 0 0 4px var(--v2-focus); }
.gco-status__cta i { width: 18px; height: 18px; }
/* Вторичное действие: правило обязано стоять ПОСЛЕ базового — специфичность
   равная, и решает порядок. */
.gco-status__cta--secondary {
    background: var(--v2-surface);
    color: var(--v2-text);
    border-color: var(--v2-border);
}
.gco-status__cta--secondary:hover { background: var(--v2-surface-subtle); color: var(--v2-text); }

.gco-status__hint { margin: 20px 0 0; color: var(--v2-text2); font-size: 14px; }
.gco-status__hint a { color: var(--v2-text2); }

@media (max-width: 720px) {
    .gco__title { font-size: 26px; }
    .gco-order { grid-template-columns: 1fr; }
    /* Одной колонкой обложка снова живёт по портальному соотношению. */
    .gco-order__cover { aspect-ratio: 1200 / 630; height: auto; }
    .gco-order__body { padding: 20px; }
    .gco-order__title { font-size: 21px; }
    .gco-order__price { font-size: 23px; }
    .gco__form { padding: 20px 16px; }
    .gco-status { margin: 12px auto; padding: 32px 20px; }
    .gco-status__title { font-size: 24px; }
    /* Кнопки на всю ширину: на узком экране целиться в короткую кнопку неудобно. */
    .gco-status__cta { width: 100%; }
}
/* End Guest Checkout v2 */

/* Предупреждение в редакторе: условия заданы так, что выплата будет подрезана. */
.lms-reward { margin-top: 18px; }
.lms-warn { margin: 8px 0 0; padding: 10px 12px; border-radius: 10px;
    background: #FFF4E5; color: #8A5300; font-size: 13px; line-height: 1.45; }

/* Презентация модуля в редакторе. Блок административный и служебный: он
   показывает, что лежит в хранилище, а не как это выглядит покупателю —
   выдачи страниц пока нет вовсе. */
.lms-pres { margin: 14px 0 6px; padding: 14px; border: 1px solid var(--v2-border); border-radius: 12px;
    background: var(--v2-surface-subtle); }
.lms-pres__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lms-pres__title { font-weight: 600; font-size: 14px; color: var(--v2-text); }
.lms-pres__count { font-size: 13px; color: var(--v2-text2); }
/* Переключатель берёт поведение и стрелку у заголовка модуля, но не его
   отступы: здесь он стоит внутри блока, а не над ним, и ширину делит с
   кнопкой «удалить презентацию». */
.lms-pres__toggle { width: auto; flex: 1 1 auto; min-width: 0; gap: 8px; padding: 0; }
.lms-pres__toggle .lms-sec-toggle__chev { width: 16px; height: 16px; }
.lms-pres__toggle .lms-pres__count { margin-left: 0; }
.lms-pres__note, .lms-pres__hint { margin: 8px 0 0; font-size: 13px; color: var(--v2-text2); }
.lms-pres__error { margin: 8px 0 0; font-size: 13px; color: #b3261e; }
/* Выбор папки: список и одна кнопка. На узком экране они встают в столбик —
   в строку 63-символьное «Большой курс по БМС / Модуль 1» и кнопка не влезают,
   а обрезать имя папки нельзя: по нему и выбирают. */
.lms-pres__pick { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 10px; }
.lms-pres__select { flex: 1 1 260px; min-width: 0; max-width: 420px; height: 38px; padding: 0 10px;
    border: 1px solid var(--v2-border); border-radius: 10px; background: var(--v2-surface);
    color: var(--v2-text); font: 400 13px 'Raleway', sans-serif; }
.lms-pres__select:disabled { opacity: .6; }
.lms-pres__import { flex: none; font-size: 13px; }
.lms-pres__import:disabled { opacity: .5; cursor: not-allowed; }
.lms-pres__pages { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px;
    max-height: 320px; overflow-y: auto; }
/* Шестьдесят три строки: список прокручивается внутри себя, иначе редактор
   модуля растягивается на три экрана и уроки уезжают из виду. */
.lms-pres__page { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: 8px;
    background: var(--v2-surface); font-size: 13px; cursor: grab; }
.lms-pres__num { min-width: 26px; color: var(--v2-text2); font-variant-numeric: lining-nums tabular-nums; }
.lms-pres__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lms-pres__size { color: var(--v2-text2); white-space: nowrap; }
.lms-pres__grip { display: inline-flex; color: var(--v2-text2); }
.lms-pres__grip i, .lms-pres__grip svg { width: 14px; height: 14px; }

/* ── Презентация модуля: ссылка и окно просмотра ────────────────────────── */

/* Ссылка, а не кнопка: рядом стоит список уроков, и вторая кнопка спорила бы
   с ними за внимание.

   `align-self` и `text-align` — не украшение: `.lc-lessons` это флекс-колонка,
   и кнопка без них растягивалась на всю ширину, а её текст вставал по центру.
   Слева — как в макете 548-8053.

   Отступ 60 px ставит текст ссылки на ту же вертикаль, что название модуля и
   названия уроков: у шапки это стрелка 18 + зазор 42, у строки урока — отступ
   16 + значок 30 + зазор 14. Числа взяты из соседних правил, меняются вместе
   с ними. */
/* Отступы: −10 сверху и +10 снизу. Минус поднимает ссылку ближе к названию
   модуля (заказчик 25.08.2026), плюс возвращает первому уроку его прежнее
   место — иначе за ссылкой подтянулся бы весь список. */
.lc-pres-link { display: inline-block; align-self: flex-start; text-align: left;
    margin: -10px 0 20px; padding: 0 0 0 60px; border: 0; background: none;
    font: 600 14px 'Raleway', sans-serif; color: var(--v2-action); text-decoration: underline;
    text-underline-offset: 3px; cursor: pointer; }
.lc-pres-link:hover { color: var(--v2-action-hover); }

.pres-viewer { position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center; }
.pres-viewer__backdrop { position: absolute; inset: 0; background: rgba(16, 24, 40, .78); }
/* Фон светло-серый, а не белый: слайды белые, и на белом окне непонятно, где
   кончается страница и начинается портал. Серый даёт слайду края. */
.pres-viewer__box { position: relative; display: flex; flex-direction: column; gap: 12px;
    width: min(1100px, 96vw); max-height: 94vh; padding: 16px; border-radius: 16px;
    background: var(--v2-canvas); box-shadow: 0 30px 80px -20px rgba(16, 24, 40, .55); }
.pres-viewer__head { display: flex; align-items: center; gap: 12px; }
.pres-viewer__title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    font: 700 16px 'Raleway', sans-serif; color: var(--v2-text); }
.pres-viewer__x { border: 0; background: none; font-size: 28px; line-height: 1; color: var(--v2-text2); cursor: pointer; }

/* Стрелки стоят поверх краёв слайда, а не строкой под ним: снизу они съедали
   высоту, а слайд вертикальный (640×1080) и высоту любит. Решение заказчика
   25.08.2026 — оно отменяет прежнее, где стрелки уводились вниз ради целых
   углов слайда. Цена уменьшена полупрозрачной подложкой у кнопок. */
.pres-viewer__stage { display: flex; align-items: center; justify-content: center; min-height: 0; }
/* Рамка обнимает страницу вплотную: у изображения с `contain` коробка больше
   самой картинки, и кнопки, привязанные к коробке, висели бы в пустоте, а
   скругление рисовалось бы по прозрачным углам. */
.pres-viewer__frame { position: relative; display: inline-flex; max-width: 100%; max-height: 100%; }
/* Страница видна целиком: и высокий кадр 640×1080, и широкий влезают без
   прокрутки — иначе на телефоне слайд пришлось бы листать пальцем по вертикали.

   Запреты выделения и вызова меню стоят **только на изображении**: на остальной
   странице правый клик обязан работать, иначе портал начинает мешать человеку
   жить. Это останавливает случайное сохранение и не останавливает намеренное —
   остаются инструменты разработчика, вкладка «Сеть» и снимок экрана. Стена
   тонкая, и это записано осознанно. */
/* Размер по содержимому, а не «во всю сцену»: тогда коробка совпадает с
   картинкой, и скругление 10 px ложится на её настоящие углы. */
.pres-viewer__page { display: block; width: auto; height: auto; max-width: 100%; max-height: 74vh;
    object-fit: contain; border-radius: 10px;
    user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
    -webkit-user-drag: none; touch-action: pan-y; }
/* 44 px — правило портала для касаний, и оно одно на все ширины: 768 — это
   планшет, там палец такой же, как на телефоне. */
/* Вид по образцу заказчика: белая кнопка со скруглением и мягкой тенью, без
   видимой рамки в покое; рамка проявляется при наведении и нажатии. Надписи
   нет — только значок: рядом такая же кнопка с другой стороны, и подпись
   «Следующий» на слайде была бы лишним словом.

   44 px остаются: правило портала для касаний видом не отменяется. */
.pres-viewer__arrow { position: absolute; top: 50%; transform: translateY(-50%); z-index: 1;
    /* Рамка видна и в покое — светло-серая, по образцу заказчика; при наведении
       и нажатии она темнеет. */
    flex: none; width: 44px; height: 44px; border: 1px solid #ebedf0; border-radius: 12px;
    background: #fff; box-shadow: 0 2px 10px rgba(16, 24, 40, .14); color: var(--v2-text);
    cursor: pointer; display: flex; align-items: center; justify-content: center;
    transition: border-color .15s, box-shadow .15s; }
.pres-viewer__arrow:hover:not(:disabled) { border-color: #c9d4e8; box-shadow: 0 3px 12px rgba(16, 24, 40, .18); }
.pres-viewer__arrow:active:not(:disabled) { border-color: #9fb3d4; box-shadow: 0 1px 6px rgba(16, 24, 40, .16); }
.pres-viewer__arrow:focus-visible { outline: 3px solid var(--pub-blue-2); outline-offset: 2px; }
.pres-viewer__arrow i, .pres-viewer__arrow svg { width: 18px; height: 18px; }
/* На широком экране кнопки сидят верхом на краю слайда — половина на нём,
   половина на сером поле (заказчик 25.08.2026). Сдвиг ровно в половину кнопки:
   44 / 2 = 22. На телефоне так нельзя — там слайд во всю ширину, и кнопка
   уехала бы за экран, поэтому ниже они возвращаются внутрь. */
.pres-viewer__arrow--prev { left: -22px; }
.pres-viewer__arrow--next { right: -22px; }
.pres-viewer__arrow:disabled { opacity: .35; cursor: default; }

.pres-viewer__bar { display: flex; align-items: center; gap: 12px; }
.pres-viewer__counter { flex: none; font: 600 14px 'Raleway', sans-serif; color: var(--v2-text2);
    font-variant-numeric: lining-nums tabular-nums; min-width: 76px; }
/* Ползунок акцентного цвета (заказчик 25.08.2026): `accent-color` красит и
   заполненную часть дорожки, и бегунок — одним свойством вместо двух наборов
   вендорных правил. */
.pres-viewer__range { flex: 1; min-width: 0; accent-color: #628ABE; }
/* Узкое поле на 45 px: в нём стоит номер, а не текст, и значение выровнено по
   центру — так две-три цифры не жмутся к краю (заказчик 25.08.2026). Стрелки
   счётчика браузер прячет: они здесь только мешают. */
.pres-viewer__jump { flex: none; width: 45px; height: 34px; padding: 0 4px; border: 1px solid var(--v2-border);
    border-radius: 8px; background: var(--v2-surface); color: var(--v2-text); font: 400 14px 'Raleway', sans-serif;
    text-align: center; -moz-appearance: textfield; }
.pres-viewer__jump::-webkit-outer-spin-button,
.pres-viewer__jump::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

@media (max-width: 767px) {
    /* Окно занимает экран целиком: пустоты сверху и снизу — это отнятая у
       слайда высота, а он вертикальный. Заголовок и нижняя панель держат свою
       высоту, всё остальное достаётся изображению. */
    .pres-viewer__box { width: 100vw; height: 100dvh; max-height: 100dvh; border-radius: 0;
        padding: 10px 10px 12px; gap: 8px; }
    .pres-viewer__stage { flex: 1; min-height: 0; }
    .pres-viewer__page { max-height: 100%; }

    /* Кнопки уходят к нижнему краю самого слайда: по середине они закрывали
       содержимое страницы, а внизу под ними обычно поля и бейджи (заказчик
       25.08.2026). Сцена их не удерживает — держит рамка. */
    .pres-viewer__arrow { top: auto; bottom: 10px; transform: none; }
    /* Внутрь слайда: за его краем на телефоне уже край экрана. */
    .pres-viewer__arrow--prev { left: 6px; }
    .pres-viewer__arrow--next { right: 6px; }

    /* Стрелки на телефоне ВИДНЫ. Прежде их прятали, и листать было нечем:
       оставались ползунок и поле номера, а о смахивании никто не догадывается.
       Место — по середине высоты, у краёв: строкой под слайдом они съедали ту
       самую высоту, ради которой всё и затевалось. */
    .pres-viewer__arrow { display: flex; font-size: 24px; }
}

/* Модуль в учебном виде на телефоне: счётчик и хронометраж встают строкой под
   названием и прижимаются к его левому краю. Столбиком (как на широком экране)
   они уезжали под названием далеко вниз и разрывали шапку модуля пополам —
   дефект, замеченный заказчиком 25.08.2026 на телефоне.

   Отступ слева тот же, что у названия: стрелка 18 + зазор шапки. Зазор на узком
   экране меньше, поэтому число берётся из переменной, а не пишется дважды. */
@media (max-width: 767px) {
    .learning-course-v2 .lc-section__head { gap: 14px; }
    /* −5 сверху и +5 снизу: строка пилюль встаёт вплотную под названием, а до
       ссылки остаётся воздух (заказчик 25.08.2026, по скриншоту). */
    .learning-course-v2 .lc-section__pills { flex-direction: row; align-items: center; gap: 8px;
        margin: -5px 0 5px 32px; }
    /* Отступ ссылки считается от той же вертикали, что и название: на узком
       экране зазор шапки меньше, значит и он меньше. Одно число на два места
       здесь не годится — оно разное по построению. */
    .learning-course-v2 .lc-pres-link { padding-left: 32px; }
}

/* Получение прибора в гостевом оформлении. Своих полей блок не изобретает —
   берёт `.gco__field` и `.gco__input` формы; отдельного вида требует только
   плашка самовывоза и многострочный комментарий. */
.gco-ship__pickup { display: flex; flex-direction: column; gap: 2px; margin: 0 0 14px;
    padding: 12px 14px; border-radius: 12px; background: #eef4ff; border: 1px solid #dbe6fb; }
.gco-ship__pickup-title { font-weight: 600; font-size: 14px; color: var(--v2-text); }
.gco-ship__pickup-addr { font-size: 13px; color: var(--v2-text2); }
.gco__textarea { min-height: 68px; padding-top: 10px; resize: vertical; }

/* Доставка в панели покупки. Панель узкая (около 300 px), поэтому поля идут
   столбиком во всю её ширину, а список страниц не заводит своих отступов —
   берёт `.gc-field` формы. */
.buy-card__ship { display: flex; flex-direction: column; gap: 10px; padding-top: 4px; }
.buy-card__ship-title { font: 600 14px 'Raleway', sans-serif; color: var(--v2-text); }
.buy-card__ship select, .buy-card__ship input, .buy-card__ship textarea { width: 100%; }
.buy-card__ship textarea { min-height: 60px; resize: vertical; }
/* Адрес склада — строкой, а не плашкой: в узкой колонке плашка съедает высоту,
   а кнопка «Купить» не должна уезжать из виду. */
.buy-card__ship-pickup { margin: 0; font-size: 13px; color: var(--v2-text2); }

/* Исход отправки в CRM в карточке заказа: своих цветов не заводит, берёт те же
   классы ячейки, что прибор и доставка. */
.ord-card__crm-resend { margin-top: 8px; font-size: 13px; }
