/* =====================================================================
   sims-market · Компоненты «Мятный зефир» (ядро: база, каркас, карточки, модалки, подвал)
   Источник: docs/redesign/ds/components.css. Страничные разделы — в отдельных файлах v2/css/<страница>.*.css
   Брейкпоинты: телефон < 768 · планшет 768–1023 · ПК ≥ 1024 · широкий ≥ 1280
   Префиксы: без префикса — компонент; .is-* — состояние; .u-* — утилиты.
   ===================================================================== */

/* ---------- База ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-padding-top: calc(var(--header-h) + 16px); }
body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--font); font-size: var(--fs-body); line-height: var(--lh-body); -webkit-font-smoothing: antialiased; }
[hidden] { display: none !important; }
img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; color: inherit; }
button { cursor: pointer; }
h1, h2, h3, h4, p { margin: 0; }
:focus { outline: none; }
:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: var(--r-xs); }
::selection { background: var(--primary-soft); color: var(--text); }
.i { width: 20px; height: 20px; flex: none; }
.i-sm { width: 16px; height: 16px; } .i-lg { width: 24px; height: 24px; }
.u-vh { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.u-muted { color: var(--text-2); }
.u-link { color: var(--primary); font-weight: var(--fw-bold); }
.u-link:hover { text-decoration: underline; text-underline-offset: 3px; }
.h-display { font-size: var(--fs-display); line-height: var(--lh-display); font-weight: var(--fw-black); letter-spacing: -.015em; }
.h1 { font-size: var(--fs-h1); line-height: var(--lh-h1); font-weight: var(--fw-heavy); letter-spacing: -.01em; }
.h2 { font-size: var(--fs-h2); line-height: var(--lh-h2); font-weight: var(--fw-heavy); }
.h3 { font-size: var(--fs-h3); line-height: var(--lh-h3); font-weight: var(--fw-heavy); }
.t-sm { font-size: var(--fs-sm); line-height: var(--lh-sm); }
.t-xs { font-size: var(--fs-xs); line-height: var(--lh-xs); }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; } }

/* ---------- Ник и роли ---------- */
.nick { font-weight: var(--fw-heavy); color: var(--role-user); }
.nick:is(a):hover { text-decoration: underline; text-underline-offset: 3px; }
.role-admin { color: var(--role-admin); } .role-top_uploader { color: var(--role-top); } .role-mod_creator { color: var(--role-mod); } .role-sim_creator { color: var(--role-sim); } .role-user { color: var(--role-user); }
.role-badge { display: inline-flex; align-items: center; height: 20px; padding: 0 8px; border-radius: var(--r-pill); font-size: 11px; font-weight: var(--fw-heavy); letter-spacing: .02em; background: color-mix(in srgb, currentColor 9%, transparent); white-space: nowrap; }
/* РЕЗЕРВ: плашка уровня пользователя — пустой слот после ника, занимает 0 px пока пуст */
.lvl-slot:empty { display: none; }
.lvl-slot { display: inline-flex; margin-left: 6px; vertical-align: middle; }

/* ---------- Кнопки ---------- */
.btn { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: var(--ctl-h); padding: 0 20px; border-radius: var(--r-ctl); border: 0; font-size: 15px; font-weight: var(--fw-heavy); line-height: 1.2; text-align: center; white-space: nowrap; transition: background var(--dur-1), color var(--dur-1), box-shadow var(--dur-2), transform var(--dur-1); -webkit-tap-highlight-color: transparent; }
.btn:active, .btn.is-active { transform: scale(.97); }
.btn-primary { background: var(--primary); color: var(--on-primary); box-shadow: 0 8px 18px -10px rgba(var(--tint), .9); }
.btn-primary:hover, .btn-primary.is-hover { background: var(--primary-hover); box-shadow: 0 12px 24px -10px rgba(var(--tint), .95); }
.btn-primary:active, .btn-primary.is-active { background: var(--primary-press); }
.btn-secondary { background: var(--primary-soft); color: var(--primary-ink); }
.btn-secondary:hover, .btn-secondary.is-hover { background: var(--primary-soft-hover); }
.btn-ghost { background: var(--surface); color: var(--text); box-shadow: var(--shadow-1); }
.btn-ghost:hover, .btn-ghost.is-hover { color: var(--primary-ink); }
.btn-plain { background: transparent; color: var(--text); }
.btn-plain:hover, .btn-plain.is-hover { background: var(--surface-2); }
.btn-danger { background: var(--danger); color: #fff; }
:root[data-theme="dark"] .btn-danger { color: #2A0B10; }
.btn-lg { min-height: var(--ctl-h-lg); padding: 0 28px; font-size: 17px; }
.btn-sm { min-height: var(--ctl-h-sm); padding: 0 14px; font-size: 14px; }
.btn-block { width: 100%; }
.btn-icon { width: var(--ctl-h); padding: 0; }
.btn-icon.btn-sm { width: var(--ctl-h-sm); }
.btn[disabled], .btn.is-disabled { opacity: .5; pointer-events: none; box-shadow: none; }
.btn.is-loading { color: transparent !important; pointer-events: none; }
.btn.is-loading::after { content: ""; position: absolute; width: 20px; height: 20px; border-radius: 50%; border: 2.5px solid currentColor; border-color: var(--on-primary) var(--on-primary) transparent transparent; animation: spin .8s linear infinite; }
.btn-secondary.is-loading::after, .btn-ghost.is-loading::after { border-color: var(--primary) var(--primary) transparent transparent; }
@keyframes spin { to { transform: rotate(360deg); } }
.spinner { width: 18px; height: 18px; border-radius: 50%; border: 2.5px solid currentColor; border-right-color: transparent; animation: spin .8s linear infinite; flex: none; }
.icon-btn { position: relative; display: inline-grid; place-items: center; width: var(--tap); height: var(--tap); border-radius: 50%; border: 0; background: transparent; color: var(--text); transition: background var(--dur-1), color var(--dur-1); }
.icon-btn:hover, .icon-btn.is-hover { background: var(--surface-2); color: var(--primary-ink); }
.icon-btn.is-raised { background: var(--surface); box-shadow: var(--shadow-1); }

/* Кнопка лайка: счётчик внутри, aria-pressed */
.like-btn, .cmt-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: var(--ctl-h); min-width: 64px; padding: 0 18px; border-radius: var(--r-pill); border: 0; background: var(--surface); box-shadow: var(--shadow-1); color: var(--text); font-weight: var(--fw-heavy); font-size: 15px; transition: background var(--dur-1), color var(--dur-1), transform var(--dur-1); }
.like-btn:hover, .like-btn.is-hover { color: var(--like-ink); }
.like-btn:active { transform: scale(.95); }
.like-btn[aria-pressed="true"] { background: var(--like-soft); color: var(--like-ink); box-shadow: none; }
.like-btn[aria-pressed="true"] .i { animation: pop var(--dur-3) var(--ease-spring); }
/* Переход к комментариям со счётчиком (страница мода): на телефоне и планшете до обсуждения далеко листать */
.cmt-btn:hover, .cmt-btn.is-hover { color: var(--primary-ink); }
.cmt-btn:active { transform: scale(.95); }
.like-btn.btn-lg, .btn-lg + .like-btn, .cmt-btn.btn-lg { min-height: var(--ctl-h-lg); padding: 0 22px; font-size: 16px; }
@keyframes pop { 0% { transform: scale(.6); } 60% { transform: scale(1.25); } 100% { transform: scale(1); } }

/* ---------- Счётчики, плашки ---------- */
.badge { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--like); color: #fff; font-size: 11px; font-weight: var(--fw-black); line-height: 1; }
:root[data-theme="dark"] .badge { color: #2A0B10; }
.icon-btn > .badge { position: absolute; top: 4px; right: 2px; box-shadow: 0 0 0 2px var(--bg); }
.count { display: inline-grid; place-items: center; min-width: 24px; height: 22px; padding: 0 7px; border-radius: var(--r-pill); background: var(--surface-2); color: var(--text-2); font-size: 12px; font-weight: var(--fw-heavy); }
.tag { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 10px; border-radius: var(--r-pill); font-size: var(--fs-2xs); font-weight: var(--fw-heavy); white-space: nowrap; background: var(--tone-lavender); color: var(--tone-lavender-ink); }
.tone-pink { background: var(--tone-pink); color: var(--tone-pink-ink); } .tone-lavender { background: var(--tone-lavender); color: var(--tone-lavender-ink); } .tone-peach { background: var(--tone-peach); color: var(--tone-peach-ink); } .tone-mint { background: var(--tone-mint); color: var(--tone-mint-ink); } .tone-sky { background: var(--tone-sky); color: var(--tone-sky-ink); } .tone-butter { background: var(--tone-butter); color: var(--tone-butter-ink); }
.dot { width: 10px; height: 10px; border-radius: 50%; flex: none; background: currentColor; }

/* Пилюли навигации (разделы, категории, сортировки) */
.pill { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 16px; border-radius: var(--r-pill); background: var(--surface); box-shadow: var(--shadow-1); font-size: 15px; font-weight: var(--fw-bold); color: var(--text); white-space: nowrap; transition: color var(--dur-1), background var(--dur-1); }
.pill:hover, .pill.is-hover { color: var(--primary-ink); }
.pill[aria-current], .pill[aria-pressed="true"], .pill.is-current { background: var(--primary); color: var(--on-primary); box-shadow: none; }
.pill .dot { width: 8px; height: 8px; }
.pill-row { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; padding: 4px 2px 8px; margin: -4px -2px -8px; scroll-snap-type: x proximity; }
.pill-row::-webkit-scrollbar { display: none; }
.pill-row > * { scroll-snap-align: start; flex: none; }
@media (max-width: 767px) { .pill { min-height: var(--tap); } }

/* Сегментированный переключатель (лайки: Все / Только я) */
.segmented { display: inline-flex; padding: 4px; gap: 2px; border-radius: var(--r-pill); background: var(--surface-2); }
.segmented button { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 14px; border-radius: var(--r-pill); border: 0; background: none; font-size: 14px; font-weight: var(--fw-bold); color: var(--text-2); }
.segmented button[aria-pressed="true"] { background: var(--surface); color: var(--text); box-shadow: var(--shadow-1); }

/* ---------- Поля ---------- */
.field { display: flex; flex-direction: column; gap: 6px; }
.field-label { font-size: var(--fs-sm); font-weight: var(--fw-heavy); }
.field-hint { font-size: var(--fs-xs); color: var(--text-2); }
.field-error { display: flex; gap: 6px; align-items: flex-start; font-size: var(--fs-xs); font-weight: var(--fw-bold); color: var(--danger); }
.input, .textarea, .select { width: 100%; min-height: 48px; padding: 12px 16px; border-radius: var(--r-field); border: 2px solid var(--border); background: var(--surface); color: var(--text); transition: border-color var(--dur-1), box-shadow var(--dur-1); }
.textarea { min-height: 112px; resize: vertical; line-height: var(--lh-body); }
.input::placeholder, .textarea::placeholder { color: var(--text-3); }
.input:hover, .textarea:hover, .select:hover { border-color: var(--border-strong); }
.input:focus, .textarea:focus, .select:focus, .input.is-focus { border-color: var(--primary); box-shadow: 0 0 0 4px var(--primary-soft); outline: none; }
.input[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--danger); }
.input[aria-invalid="true"]:focus { box-shadow: 0 0 0 4px var(--danger-soft); }
.input:disabled { background: var(--surface-2); color: var(--text-3); }
.select { appearance: none; padding-right: 44px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%23776C6F' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m5 8 5 5 5-5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; }
.input-wrap { position: relative; }
.input-wrap .counter { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); font-size: 12px; font-weight: var(--fw-bold); color: var(--text-3); }
.check { display: flex; gap: 12px; align-items: flex-start; min-height: var(--tap); padding: 10px 0; font-size: var(--fs-sm); cursor: pointer; }
.check input:not(.switch) { appearance: none; flex: none; width: 24px; height: 24px; margin: 0; border-radius: 8px; border: 2px solid var(--border-strong); background: var(--surface); display: grid; place-items: center; transition: background var(--dur-1), border-color var(--dur-1); }
.check input:not(.switch):checked { background: var(--primary); border-color: var(--primary); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 12.5 4 4L18 8'/%3E%3C/svg%3E"); background-size: 18px; background-position: center; background-repeat: no-repeat; }
.check input:focus-visible { box-shadow: var(--focus-ring); }
.check a { color: var(--primary); font-weight: var(--fw-bold); }
.switch { appearance: none; flex: none; width: 48px; height: 28px; margin: 0; border-radius: 14px; background: var(--border-strong); position: relative; transition: background var(--dur-2); cursor: pointer; }
.switch::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25); transition: transform var(--dur-2) var(--ease-spring); }
.switch:checked { background: var(--primary); }
.switch:checked::after { transform: translateX(20px); }
.captcha { display: grid; place-items: center; height: 100px; border-radius: var(--r-md); border: 2px dashed var(--border-strong); color: var(--text-3); font-size: var(--fs-sm); background: var(--bg-sunken); }

/* ---------- Поиск ---------- */
.search { position: relative; display: flex; align-items: center; gap: 8px; height: 48px; padding: 0 5px 0 18px; border-radius: var(--r-pill); background: var(--surface); box-shadow: var(--shadow-1); border: 2px solid transparent; transition: border-color var(--dur-1), box-shadow var(--dur-1); }
.search:focus-within, .search.is-focus { border-color: var(--primary); box-shadow: 0 0 0 5px var(--primary-soft); }
.search input { flex: 1; min-width: 0; height: 100%; border: 0; background: none; outline: none; }
.search input::placeholder { color: var(--text-3); }
.search input::-webkit-search-cancel-button { display: none; }
.search input:focus-visible { box-shadow: none; }
.notif-close { display: none !important; }
.search-go { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; border: 0; background: var(--primary); color: var(--on-primary); transition: background var(--dur-1); }
.search-go:hover { background: var(--primary-hover); }

/* ---------- Аватар ----------
   РЕЗЕРВ: рамка аватара (косметика) рисуется в .ava::after поверх кольца var(--frame-gap),
   поэтому компонент уже сейчас занимает размер «аватар + 2×frame-gap» и не сдвинет вёрстку.
   РЕЗЕРВ: .ava-badge — угол под плашку уровня (снизу справа), пустой — не виден.
   Трек сетки зажат в minmax(0, 1fr): иначе auto-ряд растягивается под natural-высоту
   неквадратной картинки и аватар становится овальным. */
.ava { position: relative; display: inline-grid; grid-template: minmax(0, 1fr) / minmax(0, 1fr); place-items: center; flex: none; width: calc(var(--s, var(--ava-md)) + var(--frame-gap) * 2); height: calc(var(--s, var(--ava-md)) + var(--frame-gap) * 2); padding: var(--frame-gap); border-radius: 50%; }
.ava img, .ava .ava-ph { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; background: var(--avatar-grad); }
.ava .ava-ph { display: grid; place-items: center; color: #fff; font-weight: var(--fw-black); font-size: calc(var(--s, 40px) * .4); text-shadow: 0 1px 2px rgba(0,0,0,.15); }
.ava::after { content: ""; position: absolute; inset: 0; border-radius: 50%; pointer-events: none; background: var(--frame, none); }
.ava.has-ring::after { box-shadow: inset 0 0 0 var(--frame-gap) var(--surface); }
.ava-badge:empty { display: none; }
.ava-badge { position: absolute; right: -2px; bottom: -2px; }
.ava-xs { --s: var(--ava-xs); } .ava-sm { --s: var(--ava-sm); } .ava-md { --s: var(--ava-md); } .ava-lg { --s: var(--ava-lg); } .ava-xl { --s: var(--ava-xl); --frame-gap: 5px; }
.ava.is-online::before { content: ""; position: absolute; right: 6%; bottom: 6%; width: 22%; height: 22%; min-width: 10px; min-height: 10px; border-radius: 50%; background: #2FBF71; box-shadow: 0 0 0 3px var(--surface); z-index: 1; }

/* ---------- Логотип ---------- */
/* Обновлённый старый логотип: «SIMS / MARKET» в две строки, вместо «I» — кристалл.
   Надпись в кривых (Nunito 900), цвет надписи — currentColor, цвета кристалла — токены --gem-*. */
.logo { display: inline-flex; align-items: center; flex: none; color: var(--text); border-radius: 10px; }
.logo-svg { display: block; height: 44px; width: auto; overflow: visible; }
.logo-sm .logo-svg { height: 36px; }
.logo-mark { width: 40px; height: 40px; flex: none; background: url('../img/mark.svg') center / contain no-repeat; }

/* ---------- Плашка беты нового дизайна ---------- */
.beta-strip { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 4px 16px; min-height: 40px; padding: 6px 16px; background: var(--primary-soft); color: var(--primary-ink); font-size: var(--fs-sm); font-weight: var(--fw-bold); text-align: center; }
.beta-strip a { text-decoration: underline; text-underline-offset: 3px; display: inline-flex; align-items: center; gap: 6px; min-height: 32px; }
.beta-strip .sep { opacity: .4; }
.show-m { display: none; }
@media (max-width: 767px) { .show-m { display: inline; } .beta-strip .hide-m { display: none; } .beta-strip { flex-wrap: nowrap; gap: 8px; font-size: 13px; } }
.feedback-fab { position: fixed; right: 20px; bottom: 20px; z-index: var(--z-sticky); display: inline-flex; align-items: center; gap: 8px; min-height: 48px; padding: 0 20px 0 16px; border-radius: var(--r-pill); border: 0; background: var(--text); color: var(--bg); font-weight: var(--fw-heavy); box-shadow: var(--shadow-3); transition: transform var(--dur-2) var(--ease-spring); }
.feedback-fab:hover { transform: translateY(-2px); }
@media (max-width: 767px) { .feedback-fab { display: none; } }

/* ---------- Шапка ---------- */
.hdr { position: sticky; top: 0; z-index: var(--z-header); background: color-mix(in srgb, var(--bg) 88%, transparent); backdrop-filter: saturate(1.4) blur(14px); -webkit-backdrop-filter: saturate(1.4) blur(14px); border-bottom: 1px solid transparent; transition: border-color var(--dur-2), box-shadow var(--dur-2); }
.hdr.is-scrolled { border-bottom-color: var(--border); }
.hdr-row { display: flex; align-items: center; gap: 16px; height: var(--header-h); max-width: var(--container); margin: 0 auto; padding: 0 24px; }
.hdr .search { flex: 1; max-width: 640px; margin: 0 auto; }
.hdr-actions { display: flex; align-items: center; gap: 6px; }
.hdr-staff { display: flex; gap: 6px; }
.hdr-staff a { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 12px; border-radius: var(--r-pill); background: var(--tone-butter); color: var(--tone-butter-ink); font-size: 13px; font-weight: var(--fw-heavy); }
.hdr-menu-btn { display: none; }
.hdr-search-btn { display: none; }
.hdr-auth { display: flex; gap: 8px; }
@media (max-width: 1279px) { .hdr-menu-btn { display: inline-grid; } }
.menu-staff { display: none; }
@media (max-width: 1023px) { .hdr-staff { display: none; } .menu-staff { display: flex; } }
@media (max-width: 767px) {
  .hdr-row { height: var(--header-h-m); padding: 0 8px 0 16px; gap: 4px; }
  .hdr .search, .hdr-menu-btn, .hdr-add { display: none; }
  .hdr-search-btn { display: inline-grid; }
  .hdr-actions { margin-left: auto; }
  .logo-svg { height: 36px; } .logo-mark { width: 34px; height: 34px; }
  .hdr-auth .btn-ghost { display: none; }
}
/* Мобильный поиск: раскрывается поверх шапки */
.m-search { position: absolute; inset: 0; display: none; align-items: center; gap: 8px; padding: 0 8px; background: var(--bg); }
.hdr.is-search .m-search { display: flex; }
.hdr .m-search .search { display: flex; flex: 1; height: 44px; margin: 0; }
/* На телефоне шапка без backdrop-filter: иначе fixed-панели (уведомления, меню) обрезаются шапкой */
@media (max-width: 767px) { .hdr { backdrop-filter: none; -webkit-backdrop-filter: none; background: var(--bg); } }

/* Выпадающие панели шапки */
.pop { position: absolute; z-index: var(--z-dropdown); min-width: 260px; padding: 8px; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--shadow-3); border: 1px solid var(--border); animation: pop-in var(--dur-2) var(--ease); transform-origin: top right; }
@keyframes pop-in { from { opacity: 0; transform: translateY(-6px) scale(.98); } }
.pop-anchor { position: relative; }
.pop-anchor > .pop { top: calc(100% + 10px); right: 0; }
.menu-head { display: flex; gap: 12px; align-items: center; padding: 10px 10px 14px; border-bottom: 1px solid var(--border); margin-bottom: 6px; }
.menu-head small { display: block; color: var(--text-2); font-size: var(--fs-xs); }
.menu-item { display: flex; align-items: center; gap: 12px; width: 100%; min-height: var(--tap); padding: 0 12px; border-radius: var(--r-sm); border: 0; background: none; font-weight: var(--fw-bold); font-size: 15px; text-align: left; color: var(--text); }
.menu-item:hover, .menu-item.is-hover { background: var(--surface-2); }
.menu-item .i { color: var(--text-2); }
.menu-item.is-danger, .menu-item.is-danger .i { color: var(--danger); }
.menu-count { margin-left: auto; padding: 2px 8px; border-radius: var(--r-pill); background: var(--tone-butter); color: var(--tone-butter-ink); font-size: 13px; font-weight: var(--fw-heavy); }
.menu-sep { height: 1px; margin: 6px 4px; background: var(--border); }

/* Уведомления */
.notif { width: 400px; padding: 0; overflow: hidden; }
.notif-head { display: flex; align-items: center; gap: 8px; padding: 16px 16px 12px; }
.notif-head b { font-size: 17px; font-weight: var(--fw-heavy); }
.notif-head .count { min-width: 24px; height: 24px; padding: 0 6px; border-radius: 12px; font-size: 14px; font-weight: var(--fw-black); background: var(--like-soft); color: var(--like-ink); }
.notif-actions { display: flex; gap: 4px; margin-left: auto; }
.notif-actions button { min-height: 32px; padding: 0 10px; border-radius: var(--r-pill); border: 0; background: none; font-size: 13px; font-weight: var(--fw-bold); color: var(--text-2); }
.notif-actions button:hover { background: var(--surface-2); color: var(--text); }
.notif-list { max-height: 480px; overflow: auto; padding: 0 8px 8px; }
.notif-item { position: relative; display: grid; grid-template-columns: 52px 1fr auto; gap: 12px; align-items: start; padding: 10px; border-radius: var(--r-md); transition: background var(--dur-1); }
.notif-item:hover { background: var(--surface-2); }
.notif-item.is-unread { background: var(--primary-soft); }
.notif-item.is-unread:hover { background: var(--primary-soft-hover); }
.notif-item.is-unread::before { content: ""; position: absolute; left: -2px; top: 50%; width: 6px; height: 6px; margin-top: -3px; border-radius: 50%; background: var(--primary); }
.notif-img { width: 52px; height: 52px; border-radius: 14px; object-fit: cover; background: var(--surface-2); }
.notif-title { font-size: 14px; font-weight: var(--fw-heavy); line-height: 1.3; }
.notif-from { font-size: 13px; color: var(--text-2); margin-top: 2px; }
.notif-text { font-size: 14px; color: var(--text-2); margin-top: 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.notif-del { width: 36px; height: 36px; border-radius: 50%; border: 0; background: none; color: var(--text-3); display: grid; place-items: center; opacity: 0; transition: opacity var(--dur-1), background var(--dur-1); }
.notif-item:hover .notif-del, .notif-del:focus-visible { opacity: 1; }
.notif-del:hover { background: var(--surface); color: var(--danger); }
@media (hover: none) { .notif-del { opacity: 1; } }
/* «Показать ещё N непрочитанных»: все видимые прочитаны, а непрочитанные ещё есть */
.notif-more { display: block; width: calc(100% - 16px); min-height: 40px; margin: 0 8px 8px; padding: 0 12px; border: 0; border-radius: var(--r-md); background: var(--primary-soft); color: var(--primary-ink); font-size: 14px; font-weight: var(--fw-heavy); }
.notif-more:hover { background: var(--primary-soft-hover); }
.notif-more[hidden] { display: none; }
@media (max-width: 767px) { .notif-more { min-height: var(--tap); margin-bottom: calc(8px + env(safe-area-inset-bottom)); } }
@media (max-width: 767px) {
  .pop-anchor { position: static; }
  .pop-anchor > .pop { position: fixed; top: calc(var(--header-h-m) + 4px); right: 8px; left: 8px; min-width: 0; }
  .pop-anchor > .notif { top: 0; left: 0; right: 0; bottom: 0; z-index: calc(var(--z-tabbar) + 1); width: auto; border-radius: 0; border: 0; display: flex; flex-direction: column; animation-name: sheet-in; }
  .notif-close { display: inline-grid !important; margin-left: auto; }
  .notif .notif-list { max-height: none; flex: 1; padding-bottom: calc(var(--tabbar-h) + 16px); }
  .notif-head { flex-wrap: wrap; }
  .notif-actions { width: 100%; margin-left: 0; }
  .notif-actions button { min-height: var(--tap); }
}

/* ---------- Каркас страницы ---------- */
.layout { display: grid; grid-template-columns: var(--sidebar-w) minmax(0, 1fr); gap: 32px; max-width: var(--container); margin: 0 auto; padding: 8px 24px 64px; }
.main { min-width: 0; }
/* Свёрнутое меню — колонка иконок. Класс .menu-rail на <html> ставит инлайн-скрипт в <head> из localStorage
   (sm-menu, на странице мода sm-menu-mod) до отрисовки — без сдвига вёрстки. Только на широком экране:
   ниже 1280 px сайдбар работает дровером и всегда развёрнут */
.side-toggle { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 40px; padding: 0 14px; margin-bottom: 4px; border: 0; border-radius: var(--r-md); background: none; color: var(--text-3); font-size: 13px; font-weight: var(--fw-heavy); }
.side-toggle:hover { background: var(--surface); color: var(--text); }
.side-rail-cats { display: none; }
.side-link .lbl-short { display: none; }
@media (min-width: 1280px) {
  .menu-rail .layout { grid-template-columns: var(--rail-w) minmax(0, 1fr); gap: 24px; }
  .menu-rail .side { padding: 4px 0 24px; }
  .menu-rail .side-toggle { justify-content: center; padding: 0; }
  .menu-rail .side-toggle span, .menu-rail .side-title, .menu-rail .tree, .menu-rail .side .ad-side { display: none; }
  .menu-rail .side-nav { border-bottom: 0; }
  .menu-rail .side-link, .menu-rail .side-rail-cats { flex-direction: column; justify-content: center; gap: 4px; min-height: 64px; padding: 8px 2px; font-size: 11px; font-weight: var(--fw-heavy); text-align: center; line-height: 1.2; }
  .menu-rail .side-rail-cats { display: flex; align-items: center; width: 100%; border: 0; background: none; border-radius: var(--r-md); color: var(--text); }
  .menu-rail .side-rail-cats:hover { background: var(--surface); box-shadow: var(--shadow-1); }
  .menu-rail .side-link .lbl-long { display: none; } .menu-rail .side-link .lbl-short { display: inline; }
}
@media (max-width: 1279px) { .layout { grid-template-columns: minmax(0, 1fr); } .layout > .side:not(.is-open) { display: none; } }
@media (max-width: 767px) { .layout { padding: 4px var(--gutter) calc(var(--tabbar-h) + 32px); gap: 0; } }

/* Сайдбар: разделы + дерево категорий + рекламный слот */
.side { position: sticky; top: calc(var(--header-h) + 8px); align-self: start; max-height: calc(100vh - var(--header-h) - 16px); overflow: auto; scrollbar-width: thin; padding: 4px 4px 24px; }
.side-nav { display: flex; flex-direction: column; gap: 2px; padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1px solid var(--border); }
.side-link { display: flex; align-items: center; gap: 12px; min-height: var(--tap); padding: 0 14px; border-radius: var(--r-md); font-weight: var(--fw-bold); color: var(--text); transition: background var(--dur-1); }
.side-link .i { color: var(--text-2); }
.side-link:hover { background: var(--surface); box-shadow: var(--shadow-1); }
.side-link[aria-current] { background: var(--primary-soft); color: var(--primary-ink); box-shadow: none; }
.side-link[aria-current] .i { color: var(--primary-ink); }
.side-title { display: flex; align-items: center; justify-content: space-between; padding: 6px 14px 8px; font-size: 12px; font-weight: var(--fw-black); letter-spacing: .08em; text-transform: uppercase; color: var(--text-3); }

/* Дерево категорий: <details> — работает без JS, ветка текущей категории раскрыта */
.tree, .tree ul { list-style: none; margin: 0; padding: 0; }
.tree ul { margin-left: 20px; padding-left: 8px; border-left: 2px solid var(--border); }
.tree details > summary { list-style: none; }
.tree details > summary::-webkit-details-marker { display: none; }
.tree-row { display: flex; align-items: center; gap: 4px; min-height: 40px; border-radius: var(--r-sm); }
.tree-row:hover { background: var(--surface); }
.tree a { flex: 1; display: flex; align-items: center; gap: 10px; min-height: 40px; padding: 0 10px; font-size: 15px; font-weight: var(--fw-semibold); color: var(--text); border-radius: var(--r-sm); }
.tree > li > .tree-row a, .tree > li > details > summary a { font-weight: var(--fw-heavy); }
.tree a[aria-current] { background: var(--primary); color: var(--on-primary); }
.tree .is-path > summary a:not([aria-current]) { color: var(--primary-ink); }
.tree-toggle { flex: none; width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; color: var(--text-3); cursor: pointer; transition: transform var(--dur-2), background var(--dur-1); }
.tree-toggle:hover { background: var(--surface-2); color: var(--text); }
.tree details[open] > summary .tree-toggle { transform: rotate(90deg); }
.tree .dot { width: 8px; height: 8px; }

/* ---------- Нижний таб-бар (телефон) ---------- */
.tabbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-tabbar); display: none; grid-template-columns: repeat(5, 1fr); height: calc(var(--tabbar-h) + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom); background: color-mix(in srgb, var(--surface) 92%, transparent); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border-top: 1px solid var(--border); transition: transform var(--dur-3) var(--ease); }
.tabbar.is-hidden { transform: translateY(100%); }
.tab { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; min-height: var(--tabbar-h); border: 0; background: none; font-size: 11px; font-weight: var(--fw-heavy); color: var(--text-2); -webkit-tap-highlight-color: transparent; }
.tab .i { width: 24px; height: 24px; transition: transform var(--dur-2) var(--ease-spring); }
.tab[aria-current] { color: var(--primary); }
.tab[aria-current] .tab-ico { background: var(--primary-soft); }
.tab-ico { display: grid; place-items: center; width: 52px; height: 30px; border-radius: var(--r-pill); transition: background var(--dur-2); }
.tab:active .i { transform: scale(.88); }
@media (max-width: 767px) { .tabbar { display: grid; } }

/* ---------- Выезжающие панели: меню-дровер (планшет/ПК) и шторка (телефон) ---------- */
.scrim { position: fixed; inset: 0; z-index: var(--z-drawer); background: var(--overlay); animation: fade var(--dur-2); }
@keyframes fade { from { opacity: 0; } }
.drawer { position: fixed; top: 0; bottom: 0; left: 0; z-index: calc(var(--z-drawer) + 1); width: min(340px, 88vw); overflow: auto; padding: 12px 12px 32px; background: var(--bg); box-shadow: var(--shadow-3); animation: slide-in var(--dur-3) var(--ease); }
@keyframes slide-in { from { transform: translateX(-100%); } }
.drawer-head { display: flex; align-items: center; justify-content: space-between; padding: 4px 4px 12px 8px; }
.sheet { position: fixed; left: 0; right: 0; bottom: 0; z-index: calc(var(--z-drawer) + 1); max-height: 92vh; display: flex; flex-direction: column; border-radius: var(--r-2xl) var(--r-2xl) 0 0; background: var(--bg); box-shadow: var(--shadow-3); animation: sheet-in var(--dur-3) var(--ease); padding-bottom: env(safe-area-inset-bottom); }
@keyframes sheet-in { from { transform: translateY(100%); } }
.sheet-grip { width: 40px; height: 5px; border-radius: 3px; background: var(--border-strong); margin: 10px auto 4px; flex: none; }
.sheet-head { display: flex; align-items: center; gap: 4px; padding: 4px 8px 8px; flex: none; }
.sheet-head b { flex: 1; font-size: 18px; font-weight: var(--fw-heavy); text-align: center; }
.sheet-body { overflow: auto; padding: 0 16px 24px; }
/* Пошаговая навигация по категориям в шторке */
.drill-all { display: flex; align-items: center; gap: 12px; min-height: 56px; padding: 0 16px; margin-bottom: 8px; border-radius: var(--r-lg); background: var(--primary-soft); color: var(--primary-ink); font-weight: var(--fw-heavy); }
.drill-list { list-style: none; margin: 0; padding: 0; border-radius: var(--r-lg); background: var(--surface); box-shadow: var(--shadow-1); overflow: hidden; }
.drill-list li + li { border-top: 1px solid var(--border); }
.drill-item { display: flex; align-items: center; gap: 12px; width: 100%; min-height: 56px; padding: 0 12px 0 16px; border: 0; background: none; font-weight: var(--fw-bold); font-size: 16px; text-align: left; }
.drill-item:active { background: var(--surface-2); }
.drill-item .chev { margin-left: auto; color: var(--text-3); }
.drill-item .sub { margin-left: auto; font-size: 13px; color: var(--text-3); font-weight: var(--fw-semibold); }
.drill-item .sub + .chev { margin-left: 0; }
.drill-ico { width: 36px; height: 36px; border-radius: 12px; display: grid; place-items: center; flex: none; }

/* ---------- Хлебные крошки ---------- */
.crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; font-size: var(--fs-sm); color: var(--text-2); }
.crumbs a { display: inline-flex; align-items: center; min-height: 32px; padding: 0 6px; border-radius: var(--r-xs); font-weight: var(--fw-bold); }
.crumbs a:hover { color: var(--primary-ink); background: var(--surface); }
.crumbs a:first-child { padding-left: 0; }
.crumbs a:first-child:hover { padding-left: 6px; }
.crumbs .i { width: 14px; height: 14px; color: var(--text-3); }
.crumbs [aria-current] { color: var(--text); font-weight: var(--fw-heavy); }

/* ---------- Заголовок страницы ---------- */
.page-head { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 24px; margin: 8px 0 20px; }
.page-head .h1 { display: flex; align-items: baseline; gap: 12px; }
.page-head-sub { width: 100%; color: var(--text-2); }
.page-head .pill-row { width: 100%; }

/* ---------- Сетка карточек: 12 модов делятся без остатка ----------
   ≥1024: 3 колонки (4 ряда), как в старом дизайне — крупные превью ·
   600–1023: 2 колонки (6 рядов) · <600: 1 колонка */
.mod-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px 24px; }
@media (max-width: 1023px) { .mod-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px 20px; } }
@media (max-width: 599px) { .mod-grid { grid-template-columns: minmax(0, 1fr); gap: 16px; } }

/* ---------- Карточка мода ----------
   Вся карточка — одна ссылка (как сейчас). Превью во всю ширину карточки, вертикаль 4:5 (--card-ratio), картинка с обрезкой (cover).
   Фокус обрезки чуть выше центра: на превью CAS лица и причёски обычно в верхней трети.
   Целиком картинку видно на странице мода и в просмотре оригинала.
   РЕЗЕРВ «В коллекцию»: .mcard-actions — правый верхний угол превью, слева от счётчика лайков;
   кнопки появятся там же, где счётчик, без изменения размеров карточки. */
.mcard { position: relative; display: flex; flex-direction: column; overflow: hidden; border-radius: var(--r-card); background: var(--surface); box-shadow: var(--shadow-1); color: inherit; transition: transform var(--dur-2) var(--ease-spring), box-shadow var(--dur-2) var(--ease); isolation: isolate; }
.mcard-media { position: relative; display: block; aspect-ratio: var(--card-ratio); overflow: hidden; background: var(--surface-2); isolation: isolate; }
.mcard-media img { position: relative; width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; transition: transform var(--dur-3) var(--ease); }
/* Поверх превью — только верхние углы (номер места слева, лайки справа): низ картинки занимает in-image реклама LuxUp (класс luxup).
   Плашку категории убрали: она перекрывала рекламу. */
.mcard-actions { position: absolute; z-index: 1; top: 12px; right: 12px; display: flex; gap: 6px; }
.mcard-actions-slot:empty { display: none; }
.mcard-likes { display: inline-flex; align-items: center; gap: 4px; height: 28px; padding: 0 10px; border-radius: var(--r-pill); background: rgba(255,255,255,.92); color: #B4183A; font-size: 12px; font-weight: var(--fw-black); backdrop-filter: blur(6px); }
.mcard-likes .i { width: 14px; height: 14px; }
.mcard-body { display: flex; flex-direction: column; gap: 8px; flex: 1; padding: 14px 16px 16px; }
.mcard-title { font-size: 17px; line-height: var(--lh-title); font-weight: var(--fw-heavy); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: calc(2em * var(--lh-title)); overflow-wrap: anywhere; transition: color var(--dur-1); }
.mcard-meta { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 4px; font-size: var(--fs-xs); color: var(--text-2); min-width: 0; }
.mcard-meta .nick { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 0 1 auto; }
.mcard-meta .sep { color: var(--text-3); }
.mcard-meta .when { white-space: nowrap; color: var(--text-3); font-weight: var(--fw-semibold); }
.mcard-meta .ava { --frame-gap: 0px; }
.mcard-dl { margin-left: auto; display: inline-flex; align-items: center; gap: 3px; font-weight: var(--fw-bold); white-space: nowrap; }
.mcard-dl .i { width: 15px; height: 15px; }
.mcard-date { font-size: 12px; color: var(--text-3); font-weight: var(--fw-semibold); }
.mcard:hover, .mcard.is-hover { transform: translateY(-5px); box-shadow: var(--shadow-2); }
.mcard:hover .mcard-media img, .mcard.is-hover .mcard-media img { transform: scale(1.035); }
.mcard:hover .mcard-title, .mcard.is-hover .mcard-title { color: var(--primary-ink); }
.mcard:active, .mcard.is-active { transform: scale(.975); box-shadow: var(--shadow-1); transition-duration: var(--dur-1); }
.mcard:focus-visible { box-shadow: var(--focus-ring); }
.mcard.is-promo .mcard-media img { object-fit: cover; }
@media (hover: none) { .mcard:hover { transform: none; box-shadow: var(--shadow-1); } .mcard:hover .mcard-media img { transform: none; } }
/* Скелетон карточки */
.skel { background: var(--skeleton); background-size: 200% 100%; animation: shimmer 1.4s ease-in-out infinite; border-radius: var(--r-pill); }
@keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
.mcard.is-skeleton { pointer-events: none; }
.mcard.is-skeleton .mcard-media { background: var(--skeleton); background-size: 200% 100%; animation: shimmer 1.4s ease-in-out infinite; }
.mcard.is-skeleton .line { height: 14px; margin: 3px 0; }
/* Промо-карточка (нативная реклама вместо 4-й карточки) — тот же размер и сетка */
.mcard.is-promo { background: linear-gradient(160deg, var(--surface), var(--tone-peach)); }
.ad-label { position: absolute; top: 10px; left: 10px; z-index: 1; height: 22px; padding: 0 8px; border-radius: var(--r-pill); background: rgba(38,32,34,.72); color: #fff; font-size: 11px; font-weight: var(--fw-heavy); display: inline-flex; align-items: center; letter-spacing: .02em; }

/* ---------- Пагинация ---------- */
.pager { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; margin-top: 40px; }
.pager a, .pager span { display: inline-grid; place-items: center; min-width: var(--tap); height: var(--tap); padding: 0 12px; border-radius: var(--r-pill); font-weight: var(--fw-heavy); font-size: 15px; color: var(--text); }
.pager a { background: var(--surface); box-shadow: var(--shadow-1); transition: color var(--dur-1), background var(--dur-1); }
.pager a:hover { color: var(--primary-ink); }
.pager a[aria-current] { background: var(--primary); color: var(--on-primary); box-shadow: none; }
.pager .gap { color: var(--text-3); min-width: 24px; padding: 0; }
.pager .pager-edge { display: inline-flex; gap: 6px; padding: 0 16px; }
.pager .pager-edge .i { width: 18px; height: 18px; }
.pager .is-disabled { opacity: .45; pointer-events: none; }
@media (max-width: 767px) {
  .pager { gap: 4px; flex-wrap: nowrap; }
  .pager .pager-edge span, .pager .hide-m { display: none; }
  .pager .pager-edge { padding: 0; min-width: var(--tap); }
  .pager a, .pager span { padding: 0 8px; min-width: 40px; font-size: 14px; }
}

/* ---------- Пустые состояния, ошибки, уведомления ---------- */
.empty { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 12px; padding: 48px 24px; border-radius: var(--r-xl); background: var(--surface); box-shadow: var(--shadow-1); }
.empty-art { width: 96px; height: 96px; border-radius: 32px; display: grid; place-items: center; background: var(--primary-soft); color: var(--primary-ink); margin-bottom: 4px; }
.empty-art .i { width: 44px; height: 44px; stroke-width: 1.5; }
.empty .h3 { max-width: 420px; }
.empty p { max-width: 440px; color: var(--text-2); }
.alert { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border-radius: var(--r-md); font-size: var(--fs-sm); font-weight: var(--fw-semibold); }
.alert .i { margin-top: 1px; }
.alert-info { background: var(--info-soft); color: var(--info); }
.alert-success { background: var(--success-soft); color: var(--success); }
.alert-warning { background: var(--warning-soft); color: var(--warning); }
.alert-danger { background: var(--danger-soft); color: var(--danger); }
.alert b { display: block; font-weight: var(--fw-heavy); }
.alert p { color: var(--text-2); font-weight: var(--fw-regular); margin-top: 2px; }
.toast { position: fixed; left: 50%; bottom: 24px; z-index: var(--z-toast); transform: translateX(-50%); display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 18px; border-radius: var(--r-pill); background: var(--text); color: var(--bg); font-weight: var(--fw-bold); box-shadow: var(--shadow-3); animation: toast-in var(--dur-3) var(--ease-spring); }
@keyframes toast-in { from { opacity: 0; transform: translate(-50%, 16px); } }
@media (max-width: 767px) { .toast { bottom: calc(var(--tabbar-h) + 16px); } }

/* ---------- Карточка-поверхность ---------- */
.panel { padding: 24px; border-radius: var(--r-xl); background: var(--surface); box-shadow: var(--shadow-1); }
.panel-title { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; }
@media (max-width: 767px) { .panel { padding: 16px; border-radius: var(--r-lg); } }

/* ---------- Модальные окна ---------- */
.modal-wrap { position: fixed; inset: 0; z-index: var(--z-modal); display: grid; place-items: center; padding: 16px; background: var(--overlay); animation: fade var(--dur-2); }
.modal { position: relative; width: min(480px, 100%); max-height: calc(100vh - 32px); overflow: auto; padding: 28px; border-radius: var(--r-2xl); background: var(--surface); box-shadow: var(--shadow-3); animation: modal-in var(--dur-3) var(--ease-spring); }
@keyframes modal-in { from { opacity: 0; transform: translateY(12px) scale(.97); } }
.modal-close { position: absolute; top: 12px; right: 12px; }
.modal-title { font-size: 22px; font-weight: var(--fw-heavy); line-height: 1.25; padding-right: 40px; margin-bottom: 8px; }
.modal-text { color: var(--text-2); margin-bottom: 20px; }
.modal-foot { display: flex; gap: 10px; justify-content: flex-end; margin-top: 24px; }
@media (max-width: 767px) {
  .modal-wrap { place-items: end stretch; padding: 0; }
  .modal { width: 100%; border-radius: var(--r-2xl) var(--r-2xl) 0 0; padding: 24px 20px calc(24px + env(safe-area-inset-bottom)); animation-name: sheet-in; }
  .modal-foot { flex-direction: column-reverse; } .modal-foot .btn { width: 100%; }
}
/* Промо-интерстишл после «Скачать» (Telegram) */
/* Баннер показываем целиком в его пропорциях (сейчас все горизонтальные, до 3:1). Ширину ограничивает окно,
   высоту — max-height, чтобы вертикальный или огромный баннер не растянул окно; лишнее уходит в поля (contain), без обрезки. */
.promo-modal { width: min(800px, 100%); padding: 0; overflow: hidden; text-align: center; }
.promo-modal img { display: block; width: 100%; height: auto; max-height: min(600px, 65vh); object-fit: contain; background: var(--surface-2); }
.promo-modal .promo-body { padding: 20px 24px 24px; display: flex; flex-direction: column; gap: 12px; }
.promo-close { position: absolute; top: 12px; right: 12px; display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 0 14px; border-radius: var(--r-pill); border: 0; background: rgba(38,32,34,.72); color: #fff; font-size: 13px; font-weight: var(--fw-heavy); }
.promo-close[disabled] { opacity: .75; }

/* ---------- Cookie-баннер ---------- */
.cookie { position: fixed; left: 20px; bottom: 20px; z-index: var(--z-toast); display: flex; gap: 16px; align-items: center; width: min(460px, calc(100vw - 40px)); padding: 16px 16px 16px 20px; border-radius: var(--r-xl); background: var(--surface); box-shadow: var(--shadow-3); border: 1px solid var(--border); font-size: var(--fs-sm); color: var(--text-2); animation: toast-in var(--dur-3) var(--ease-spring); }
.cookie a { color: var(--primary-ink); font-weight: var(--fw-bold); text-decoration: underline; }
.cookie .btn { flex: none; }
@media (max-width: 767px) { .cookie { left: 8px; right: 8px; width: auto; bottom: calc(var(--tabbar-h) + 8px + env(safe-area-inset-bottom)); padding: 12px 12px 12px 16px; font-size: 13px; } }

/* ---------- Рекламные слоты ----------
   Слот всегда резервирует минимальную высоту — контент под ним не прыгает (CLS = 0).
   Креативы адаптивные: ширина = контейнер, высота ≥ min-height. Метку «Реклама» рисует сама сеть. */
.ad { position: relative; display: block; width: 100%; border-radius: var(--r-lg); overflow: hidden; }
.ad-content { min-height: 250px; }
.ad-side { min-height: 400px; }
.ad-card { aspect-ratio: auto; min-height: 100%; }
@media (max-width: 767px) { .ad-content { min-height: 300px; } }

/* ---------- Подвал ---------- */
.ftr { margin-top: 32px; border-top: 1px solid var(--border); background: var(--bg-sunken); }
.ftr-row { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 32px; max-width: var(--container); margin: 0 auto; padding: 28px 24px; }
.ftr-links { display: flex; flex-wrap: wrap; gap: 4px 20px; font-size: var(--fs-sm); font-weight: var(--fw-bold); color: var(--text-2); }
.ftr-links a { display: inline-flex; align-items: center; min-height: 36px; }
.ftr-links a:hover { color: var(--primary-ink); }
.ftr-copy { font-size: var(--fs-xs); color: var(--text-3); }
.ftr-social { display: flex; gap: 8px; margin-left: auto; }
.ftr-social a { display: grid; place-items: center; width: var(--tap); height: var(--tap); border-radius: 50%; background: var(--surface); box-shadow: var(--shadow-1); color: var(--text); transition: color var(--dur-1), transform var(--dur-2) var(--ease-spring); }
.ftr-social a:hover { transform: translateY(-2px); }
.ftr-social a.vk:hover { color: #0077FF; } .ftr-social a.tg:hover { color: #27A7E7; }
@media (max-width: 767px) { .ftr-row { padding: 24px var(--gutter) calc(var(--tabbar-h) + 24px); } .ftr-social { margin-left: 0; } }

/* ---------- Вкладки (профиль) ----------
   РЕЗЕРВ: вкладки — горизонтальная лента со скроллом, принимает любое число вкладок
   (сейчас 4: Моды, Лайки, Комментарии, История; позже — Коллекции, Стена, Скриншоты, Карточки). */
.tabs { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; border-bottom: 2px solid var(--border); }
.tabs::-webkit-scrollbar { display: none; }
.tabs a { position: relative; flex: none; display: inline-flex; align-items: center; gap: 8px; min-height: 48px; padding: 0 14px; font-weight: var(--fw-heavy); color: var(--text-2); white-space: nowrap; }
.tabs a:hover { color: var(--text); }
.tabs a[aria-current] { color: var(--primary-ink); }
.tabs a[aria-current]::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -2px; height: 3px; border-radius: 3px 3px 0 0; background: var(--primary); }
.tabs a[aria-current] .count { background: var(--primary-soft); color: var(--primary-ink); }

/* =====================================================================
   СТРАНИЦЫ ВТОРОЙ ОЧЕРЕДИ (08.11.2026): популярное, поиск, профиль и настройки, история,
   вход и регистрация, инструкция, политика, загрузка мода, модерация, ошибки
   ===================================================================== */
.narrow { max-width: 760px; }
.page-head .h1 small { font-size: 16px; font-weight: var(--fw-bold); color: var(--text-2); }
.page-lead { color: var(--text-2); max-width: 720px; margin: -8px 0 20px; }
.kv { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; font-size: var(--fs-sm); }
.kv dt { color: var(--text-2); font-weight: var(--fw-bold); }
.kv dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.more-row { display: flex; justify-content: center; margin-top: 28px; }
.chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
.chip { display: inline-flex; align-items: center; height: 28px; padding: 0 10px; border-radius: var(--r-pill); background: var(--surface-2); font-size: 13px; font-weight: var(--fw-bold); color: var(--text-2); }

/* Популярное: место в топе на карточке (порядок — тот же, что отдаёт сортировка) */
.mcard-rank { position: absolute; z-index: 1; top: 12px; left: 12px; display: grid; place-items: center; min-width: 34px; height: 34px; padding: 0 9px; border-radius: var(--r-pill); background: rgba(255,255,255,.94); color: #262022; font-size: 15px; font-weight: var(--fw-black); box-shadow: var(--shadow-1); }
.mcard-rank.is-top { background: #FFE9A8; color: #6B4A00; }
/* Строка под названием: «скачан 2 ноября» */
.mcard-note { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: var(--fw-bold); color: var(--text-2); }
.mcard-note .i { width: 15px; height: 15px; }

/* ---------- Ошибки 404 / 500 / 403 ---------- */
.err-page { display: grid; justify-items: center; gap: 14px; padding: 48px 16px 24px; text-align: center; }
.err-code { font-size: clamp(88px, 18vw, 168px); line-height: 1; font-weight: var(--fw-black); letter-spacing: -.04em; background: var(--logo-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.err-page p { color: var(--text-2); max-width: 460px; }
.err-page .search { width: min(520px, 100%); }
.err-page .btns { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }


/* =====================================================================
   ВНЕДРЕНИЕ (не из макета): шрифт, доступность, дровер из сайдбара, активные пункты, уведомления, тосты
   ===================================================================== */
@font-face {
  font-family: 'Nunito'; font-style: normal; font-weight: 400 900; font-display: swap;
  src: url('../fonts/nunito-var.20261112.woff2') format('woff2');
}

/* Ссылка «Перейти к содержимому» — видна только при фокусе с клавиатуры */
.skip-link { position: absolute; left: 12px; top: -100px; z-index: calc(var(--z-toast) + 1); padding: 12px 18px; border-radius: var(--r-pill); background: var(--primary); color: var(--on-primary); font-weight: var(--fw-heavy); }
.skip-link:focus { top: 12px; }

/* Кнопка формы в виде ссылки: «Вернуться к старому» в плашке и подвале работает без JS */
.link-form { display: inline; margin: 0; }
.link-btn { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-decoration: underline; text-underline-offset: 3px; }
.ftr-links .link-btn { min-height: 36px; text-decoration: none; }
.ftr-links .link-btn:hover { color: var(--primary-ink); }

/* Сайдбар — он же дровер на экранах уже 1280 px: одно дерево категорий и один рекламный слот на странице */
.drawer-head { display: none; }
@media (max-width: 1279px) {
  .layout > .side.is-open { position: fixed; top: 0; bottom: 0; left: 0; z-index: calc(var(--z-drawer) + 1); width: min(340px, 88vw); max-height: none; overflow: auto; padding: 12px 12px 32px; background: var(--bg); box-shadow: var(--shadow-3); animation: slide-in var(--dur-3) var(--ease); }
  .side.is-open .drawer-head { display: flex; }
  .side-toggle { display: none; }
}

/* Активный пункт меню по data-page на <html>: фрагмент меню кэшируется и не знает, какая страница открыта */
[data-page="home"] .side-link[data-nav="home"], [data-page="popular"] .side-link[data-nav="popular"], [data-page="history"] .side-link[data-nav="history"],
[data-page="likes"] .side-link[data-nav="likes"], [data-page="howto"] .side-link[data-nav="howto"] { background: var(--primary-soft); color: var(--primary-ink); box-shadow: none; }
[data-page="home"] .side-link[data-nav="home"] .i, [data-page="popular"] .side-link[data-nav="popular"] .i, [data-page="history"] .side-link[data-nav="history"] .i,
[data-page="likes"] .side-link[data-nav="likes"] .i, [data-page="howto"] .side-link[data-nav="howto"] .i { color: var(--primary-ink); }
[data-page="home"] .tab[data-nav="home"], [data-page="popular"] .tab[data-nav="popular"], [data-page="history"] .tab[data-nav="history"],
[data-page="likes"] .tab[data-nav="likes"], [data-page="howto"] .tab[data-nav="howto"], [data-page="cat"] .tab[data-nav="cat"] { color: var(--primary); }
[data-page="home"] .tab[data-nav="home"] .tab-ico, [data-page="popular"] .tab[data-nav="popular"] .tab-ico, [data-page="history"] .tab[data-nav="history"] .tab-ico,
[data-page="likes"] .tab[data-nav="likes"] .tab-ico, [data-page="howto"] .tab[data-nav="howto"] .tab-ico, [data-page="cat"] .tab[data-nav="cat"] .tab-ico { background: var(--primary-soft); }

/* Уведомление: ссылка на всю строку, кнопка удаления рядом (кнопка внутри ссылки — невалидный HTML) */
.notif-link { grid-column: 1 / 3; display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 12px; align-items: start; color: inherit; }
.notif-title, .notif-from { display: block; }
.notif-empty { padding: 16px 24px 32px; text-align: center; color: var(--text-2); font-size: var(--fs-sm); }
.notif-empty .empty-art { width: 72px; height: 72px; border-radius: 24px; margin: 0 auto 12px; }
.notif-empty .empty-art .i { width: 32px; height: 32px; }
.notif-empty b { display: block; color: var(--text); font-size: 17px; margin-bottom: 4px; }
.menu-head .nick { display: block; }
.menu-head form { margin: 0; }

/* Тосты Django messages: стопкой снизу по центру */
.toasts { position: fixed; left: 50%; bottom: 24px; z-index: var(--z-toast); transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 8px; width: max-content; max-width: calc(100vw - 32px); }
.toasts .toast { position: static; transform: none; animation-name: fade; }
@media (max-width: 767px) { .toasts { bottom: calc(var(--tabbar-h) + 16px); } }

/* Единичные инлайн-стили макетов, вынесенные в классы */
.tone-dot-pink { color: var(--tone-pink-ink); } .tone-dot-lavender { color: var(--tone-lavender-ink); } .tone-dot-peach { color: var(--tone-peach-ink); }
.tone-dot-mint { color: var(--tone-mint-ink); } .tone-dot-sky { color: var(--tone-sky-ink); } .tone-dot-butter { color: var(--tone-butter-ink); }
.side-title .side-all { text-transform: none; letter-spacing: 0; font-size: 13px; }
.side .ad-side { margin-top: 20px; }
.profile-pop { width: 280px; }
.hdr-ava-btn { width: 48px; height: 48px; }
.fb-alert { margin-bottom: 16px; }
.fb-done { text-align: center; }
.fb-done-art { margin: 8px auto 12px; background: var(--success-soft); color: var(--success); }
.fb-done-foot { justify-content: center; }
.field-optional { font-weight: 600; }
.modal .modal-text + .modal-text { margin-top: -12px; }
/* Плавающая кнопка отзыва не закрывает соцсети в подвале */
@media (min-width: 768px) { .ftr-row { padding-bottom: 88px; } }

/* Каталог (этап 3): шапка категории, подкатегории, пустые состояния, лайки в мете карточки */
.home-cats { display: none; margin-bottom: 8px; }
@media (max-width: 1279px) { .home-cats { display: block; } }
.cat-hero { display: flex; align-items: center; gap: 16px; margin: 4px 0 16px; }
.cat-ico { width: 56px; height: 56px; border-radius: 18px; display: grid; place-items: center; flex: none; }
.cat-ico .i { width: 28px; height: 28px; }
@media (max-width: 767px) { .cat-ico { width: 44px; height: 44px; border-radius: 14px; } .cat-ico .i { width: 22px; height: 22px; } }
.subcats { margin-bottom: 24px; }
.mcard-dl-likes { color: var(--like-ink); }
.empty-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
.empty .empty-search { width: min(480px, 100%); margin-top: 8px; }
.section-title { display: flex; align-items: center; gap: 10px; font-size: var(--fs-h3); font-weight: var(--fw-heavy); margin-bottom: 14px; }
.search-cats-title { margin-top: 32px; }
.pill-row-wrap { flex-wrap: wrap; }
.pager .pager-edge { justify-content: center; }

/* Дерево: в summary только стрелка, ссылка ветки лежит поверх той же строки (без вложенных интерактивных элементов) */
.tree-branch { position: relative; }
.tree-sum { justify-content: flex-end; cursor: pointer; }
.tree-branch > .tree-link { position: absolute; top: 0; left: 0; right: 40px; }
.tree > .tree-branch > .tree-link, .tree > li > .tree-row > .tree-link { font-weight: var(--fw-heavy); }
.tree .is-path ~ .tree-link:not([aria-current]) { color: var(--primary-ink); }
