/* Лента живёт в route host внутри прокручиваемого #appScreen. Обычный
   блочный поток принципиален: фото и текст стоят друг под другом со своей
   естественной высотой, а внешний #appScreen прокручивает готовый контент. */
.feed-root { padding-bottom: 84px; }
.app-screen > .app-route-host.feed-root { padding-bottom: 0; }
.feed-filter-toolbar { position: relative; z-index: 35; display: flex; align-items: center; justify-content: flex-end; min-height: 48px; margin: 0 2px 10px; }
.feed-filter-toolbar.is-external { height: 0; min-height: 0; margin: 0; }
.feed-filter-toolbar.is-external .feed-filter-panel { top: 72px; right: 2px; }
.feed-filter-summary { min-width: 0; margin: 0 10px 0 0; color: #91a49a; font-size: 11px; line-height: 1.25; text-align: right; }
.feed-filter-button { position:relative; flex:none; width:42px; height:42px; padding:0; border-radius:14px; display:grid; place-items:center; color:#d8dfda; cursor:pointer; border:1px solid rgba(231,213,163,.18); background:linear-gradient(145deg,rgba(255,255,255,.06),rgba(0,0,0,.12)),#113126; box-shadow:0 8px 18px rgba(0,0,0,.26),inset 0 1px 0 rgba(255,255,255,.1); }
.feed-filter-button[aria-expanded="true"] { color:#f2d58c; border-color:rgba(239,202,119,.42); background:linear-gradient(145deg,rgba(237,194,99,.18),rgba(255,255,255,.025) 52%,rgba(0,0,0,.16)),#163b2e; }
.feed-filter-glyph { position:relative; display:block; width:20px; height:18px; }
.feed-filter-glyph i { position:absolute; left:1px; width:18px; height:1.5px; border-radius:2px; background:currentColor; }
.feed-filter-glyph i:nth-child(1){top:2px}.feed-filter-glyph i:nth-child(2){top:8px}.feed-filter-glyph i:nth-child(3){top:14px}
.feed-filter-glyph i::after { content:""; position:absolute; top:-2.5px; width:5px; height:5px; border:1.5px solid currentColor; border-radius:50%; background:#14372b; }
.feed-filter-glyph i:nth-child(1)::after{left:4px}.feed-filter-glyph i:nth-child(2)::after{right:3px}.feed-filter-glyph i:nth-child(3)::after{left:7px}
.feed-filter-count { position:absolute; top:-4px; right:-3px; min-width:17px; height:17px; padding:0 4px; border:2px solid #071c14; border-radius:999px; color:#251a08; background:#f2d58c; font-size:9px; font-weight:800; line-height:13px; }
.feed-filter-panel { position:absolute; z-index:50; top:48px; right:0; width:min(330px,calc(100vw - 28px)); padding:15px; border:1px solid rgba(239,209,139,.26); border-radius:18px; color:#eef3ef; background:linear-gradient(145deg,rgba(255,255,255,.055),rgba(0,0,0,.12)),rgba(13,48,36,.97); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); box-shadow:0 7px 13px rgba(0,0,0,.3),0 24px 54px rgba(0,0,0,.42),inset 0 1px 0 rgba(255,247,220,.12); transform-origin:calc(100% - 20px) 0; animation:feed-filter-in .17s ease-out both; }
.feed-filter-panel[hidden]{display:none}.feed-filter-panel::before{content:"";position:absolute;top:-7px;right:15px;width:13px;height:13px;border-top:1px solid rgba(239,209,139,.26);border-left:1px solid rgba(239,209,139,.26);background:#173b2e;transform:rotate(45deg)}
@keyframes feed-filter-in{from{opacity:0;transform:translateY(-5px) scale(.985)}}
.feed-filter-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.feed-filter-row strong,.feed-filter-activity strong{font-size:13px;font-weight:700}.feed-filter-row output{color:#f2d58c;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.feed-filter-range{position:relative;height:35px;margin:7px 1px 1px}.feed-filter-rail{position:absolute;top:16px;left:1px;right:1px;height:4px;border-radius:10px;background:linear-gradient(90deg,rgba(255,255,255,.11) 0 var(--range-start),#d8ad5e var(--range-start) var(--range-end),rgba(255,255,255,.11) var(--range-end) 100%);box-shadow:inset 0 1px 2px rgba(0,0,0,.45)}
.feed-filter-range input[type="range"]{position:absolute;inset:0;z-index:2;width:100%;height:35px;margin:0;appearance:none;-webkit-appearance:none;pointer-events:none;background:transparent}.feed-filter-range input[type="range"].is-active{z-index:3}.feed-filter-range input[type="range"]::-webkit-slider-runnable-track{height:4px;background:transparent}.feed-filter-range input[type="range"]::-webkit-slider-thumb{width:19px;height:19px;margin-top:-7.5px;appearance:none;-webkit-appearance:none;pointer-events:auto;border:2px solid #f0cf80;border-radius:50%;background:linear-gradient(145deg,#f4dc9a,#b88639);box-shadow:0 4px 9px rgba(0,0,0,.42),0 0 0 3px rgba(216,173,94,.09),inset 0 1px 0 rgba(255,255,255,.48)}
.feed-filter-range input[type="range"]::-moz-range-track{height:4px;background:transparent}.feed-filter-range input[type="range"]::-moz-range-thumb{width:16px;height:16px;pointer-events:auto;border:2px solid #f0cf80;border-radius:50%;background:linear-gradient(145deg,#f4dc9a,#b88639)}
.feed-filter-divider{height:1px;margin:10px 0 12px;background:linear-gradient(90deg,transparent,rgba(231,213,163,.16),transparent)}.feed-filter-activity{position:relative;display:flex;align-items:center;justify-content:space-between;gap:14px;cursor:pointer}.feed-filter-activity>span:first-child{display:grid;gap:3px}.feed-filter-activity small{max-width:230px;color:#91a49a;font-size:10px;line-height:1.35}.feed-filter-activity input{position:absolute;opacity:0;pointer-events:none}
.feed-filter-check{position:relative;flex:none;width:38px;height:22px;border:1px solid rgba(255,255,255,.14);border-radius:999px;background:rgba(0,0,0,.24);box-shadow:inset 0 2px 4px rgba(0,0,0,.25)}.feed-filter-check::after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:#8fa198;transition:transform .16s ease,background .16s ease}.feed-filter-activity input:checked+.feed-filter-check{border-color:rgba(240,207,128,.55);background:rgba(216,173,94,.24)}.feed-filter-activity input:checked+.feed-filter-check::after{transform:translateX(16px);background:#f2d58c}.feed-filter-activity input:focus-visible+.feed-filter-check{outline:2px solid #f2d58c;outline-offset:3px}
.feed-filter-footer{display:grid;grid-template-columns:auto 1fr;gap:9px;margin-top:15px}.feed-filter-reset,.feed-filter-apply{min-height:42px;padding:0 15px;border-radius:13px;font-size:12px;font-weight:700}.feed-filter-reset{color:#b8c4bd;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.035)}.feed-filter-apply{color:#261b08;border:1px solid rgba(255,231,169,.58);background:linear-gradient(145deg,#f4dfa2,#c99745);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),0 6px 14px rgba(0,0,0,.26)}.feed-filter-apply:disabled{opacity:.6}
@media(prefers-reduced-motion:reduce){.feed-filter-panel{animation:none}.feed-filter-check::after{transition:none}}
/* flex-shrink:0 -- защита на случай, если карточка когда-нибудь окажется
   внутри другого flex-контейнера: фото не должно сжиматься ни при каких
   обстоятельствах, только текст ниже может расти. */
/* Owner 2026-09-28: square frame filled by the photo, cropped around its
   centre (cover) -- no blurred edges in the feed. */
.candidate-photo { position: relative; aspect-ratio: 1/1; border-radius: 20px; overflow: hidden; border: 1px solid var(--line); background: var(--graphite); touch-action: pan-y; flex-shrink: 0; }
.candidate-photo-main { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; }
/* Затемнение снизу вверх, под текстом/чипами, над верхней частью фото не
   действует. Несколько промежуточных стопов вместо двух -- чтобы покрыть и
   случай с чипами в 2 строки без резкой полосы: усиление постепенное. */
.candidate-photo::after {
  content: ""; position: absolute; inset: 28% 0 0;
  background: linear-gradient(180deg,
    transparent 0%,
    rgba(2,12,8,.10) 22%,
    rgba(2,12,8,.34) 42%,
    rgba(1,10,6,.66) 66%,
    rgba(1,8,5,.92) 100%);
  pointer-events: none;
}
.candidate-photo-content { position: absolute; left: 14px; right: 14px; bottom: 12px; z-index: 2; }
/* Текст на фотографии -- приподнят над изображением деликатной тенью, а не
   толстым контуром/свечением. Имя/возраст -- тёплый почти белый, жирный,
   тень заметнее; локация/активность -- спокойнее, тень слабее. */
.candidate-photo-content h1 {
  margin: 0; font-size: 22px; line-height: 1.1; font-weight: 700; color: #f7f2e4;
  text-shadow: 0 1px 2px rgba(0,0,0,.55), 0 3px 10px rgba(0,0,0,.3);
}
.candidate-location { margin: 6px 0 0; font-size: 12.5px; color: #e7eee7; text-shadow: 0 1px 3px rgba(0,0,0,.5); }
/* Плавающий индикатор активности -- левый верхний угол фото, симметрично
   звезде "Сохранить" справа (.candidate-favorite). Спокойное информационное
   стекло, не золото и не крупнее имени/чипов: своя тёмно-зелёная
   полупрозрачная подложка нужна, т.к. верх фото не затемнён нижним
   градиентом и может быть светлым. */
.candidate-activity {
  position: absolute; top: 12px; left: 12px; z-index: 3;
  display: flex; align-items: center; gap: 6px;
  padding: 7px 10px; border-radius: 999px;
  background: rgba(7,33,23,.55);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(255,255,255,.16);
  font-size: 11.5px; color: #dfe8e0;
}
.candidate-activity.online { color: #bfe9cd; }
.candidate-activity-dot { width: 6px; height: 6px; border-radius: 50%; background: #9db3a5; flex: none; }
.candidate-activity.online .candidate-activity-dot { background: #4ade80; box-shadow: 0 0 6px #4ade8099; }
.candidate-chips { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 8px; }
.candidate-chip { font-size: 10.5px; padding: 4px 9px; border-radius: 999px; background: rgba(217,175,89,.1); color: #f6e8bf; white-space: nowrap; }

/* Верхние действия собраны в один расширяемый кластер: ровно две одинаковые
   стеклянные кнопки -- меню и звезда. Новые функции добавляются внутрь меню,
   а не отдельными квадратами поверх анкеты. */
.candidate-actions {
  position: absolute; top: 12px; right: 12px; z-index: 4;
  display: flex; align-items: center; gap: 8px;
}
.candidate-action-button {
  width: 48px; height: 48px; border-radius: 15px;
  background: rgba(7,33,23,.6);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(255,255,255,.2);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.14), 0 4px 12px rgba(0,0,0,.32);
  display: grid; place-items: center; color: #f2ecdd;
  -webkit-appearance: none; appearance: none;
  transition: transform .15s ease;
}
.candidate-action-button svg { display: block; }
.candidate-action-button:active { transform: scale(.92); }
.candidate-menu-button[aria-expanded="true"] {
  color: #f2d58c; border-color: rgba(239,202,119,.55);
  background: linear-gradient(145deg,rgba(237,194,99,.2),rgba(255,255,255,.025) 52%,rgba(0,0,0,.16)),rgba(7,33,23,.76);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18),0 5px 16px rgba(0,0,0,.34),0 0 15px rgba(217,175,89,.2);
}
.candidate-action-menu {
  position: absolute; top: 58px; right: 0; z-index: 6;
  width: min(255px, calc(100vw - 48px)); overflow: hidden;
  border: 1px solid rgba(239,209,139,.3); border-radius: 19px;
  color: #edf2ee;
  background: linear-gradient(145deg,rgba(255,255,255,.07),rgba(0,0,0,.12)),rgba(7,39,29,.94);
  backdrop-filter: blur(18px) saturate(1.15); -webkit-backdrop-filter: blur(18px) saturate(1.15);
  box-shadow: 0 18px 42px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.14);
  transform-origin: top right; animation: candidate-menu-in .17s ease-out both;
}
.candidate-action-menu[hidden] { display: none; }
.candidate-action-menu-item {
  width: 100%; min-height: 62px; padding: 10px 13px; border: 0;
  display: grid; grid-template-columns: 34px minmax(0,1fr); align-items: center; gap: 10px;
  color: inherit; background: transparent; text-align: left;
}
.candidate-action-menu-item + .candidate-action-menu-item { border-top: 1px solid rgba(255,255,255,.09); }
.candidate-action-menu-item:active { background: rgba(255,255,255,.07); }
.candidate-action-menu-icon { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 11px; color: #f0d18a; background: rgba(217,175,89,.1); }
.candidate-action-menu-item strong,.candidate-action-menu-item small { display: block; }
.candidate-action-menu-item strong { font-size: 13px; line-height: 1.25; font-weight: 700; }
.candidate-action-menu-item small { margin-top: 3px; color: #9eb0a6; font-size: 10px; line-height: 1.3; }
.candidate-action-menu-report .candidate-action-menu-icon { color: #ff746d; background: rgba(224,67,61,.12); }
.candidate-action-menu-report strong { color: #ff9a94; }
/* Owner 2026-10-28: «Сбросить и заблокировать» -- серый, неброский пункт проверяющего */
.candidate-action-menu-item--muted { color: #9aa49f; }
.candidate-action-menu-item--muted .candidate-action-menu-icon { color: #9aa49f; background: rgba(255,255,255,.06); }
.candidate-action-menu-item--muted small { color: #7f8a85; }
@keyframes candidate-menu-in { from { opacity: 0; transform: translateY(-5px) scale(.975); } }
.candidate-favorite svg { fill: none; stroke: currentColor; transition: fill .15s ease; }
.candidate-favorite.is-saved {
  color: #2c2410;
  background: linear-gradient(180deg, rgba(246,224,150,.95), rgba(217,175,89,.92));
  border-color: rgba(255,236,180,.55);
  box-shadow: inset 0 1px 0 rgba(255,250,225,.55), 0 4px 14px rgba(217,175,89,.4);
}
.candidate-favorite.is-saved svg { fill: currentColor; }

.candidate-body { padding: 16px 2px 0; }
/* Единый стиль для всех заголовков раздела: "О себе", "Цель", "Ценности",
   "Интересы", "Кого ищу" -- один и тот же шрифт/размер/насыщенность/цвет/
   регистр/трекинг, независимо от того, к какому блоку заголовок относится.
   Под фотографией -- без теней/градиентов в буквах, только спокойный текст. */
.candidate-heading { margin: 0 0 8px; font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: #c8ae79; }

.candidate-about { position: relative; display: block; width: 100%; text-align: left; cursor: default; }
/* «О себе» всегда целиком, без затухания и интерактивного раскрытия. */
.candidate-about-text {
  margin: 0; font-size: 15px; font-weight: 400; line-height: 1.6; letter-spacing: normal; color: #e9e6dc;
  overflow-wrap: anywhere;
}
/* Три полные строки (4.8em) и затухающий фрагмент четвёртой (до 6.4em).
   Alpha-mask растворяет буквы, а не рисует чёрную плашку поверх фона. */
.candidate-extra { margin-top: 14px; }
.candidate-extra.is-clampable { cursor: pointer; }
.candidate-info-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; gap: 10px; }
.candidate-info-box { position: relative; min-width: 0; }
.candidate-info-box-extra { max-height: 0; overflow: hidden; opacity: 0; }
.candidate-extra.expanded .candidate-info-box-extra { max-height: none; overflow: visible; opacity: 1; }
.candidate-info-value {
  margin: 0; font-size: 14px; font-weight: 400; line-height: 1.6; letter-spacing: normal; color: #e9e6dc;
  max-height: 6.4em; overflow: hidden; overflow-wrap: anywhere;
}
.candidate-extra:not(.expanded) .candidate-info-box:not(.fits) .candidate-info-value {
  -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 4.8em, transparent 6.4em);
  mask-image: linear-gradient(to bottom, #000 0, #000 4.8em, transparent 6.4em);
}
.candidate-extra.expanded .candidate-info-value { max-height: none; overflow: visible; }
.candidate-extra:focus-visible { outline: none; text-decoration: underline; text-underline-offset: 4px; }

@media (prefers-reduced-motion: reduce) {
  .candidate-action-button { transition: none; }
  .candidate-action-menu { animation: none; }
}

/* Вариант №6: крестик / широкая золотая "Симпатия" / конверт, звезда
   перенесена на фото (candidate-favorite выше). Сетка 48 / 1fr / 48 с
   зазором 8px внутри ширины min(272px, 100% - 48px) даёт "Симпатии" ровно
   272-48-48-8-8=160px на обычной ширине экрана 390px -- как в ТЗ. */
.feed-actions {
  position: fixed; left: 12px; right: 12px; bottom: calc(80px + var(--safe-bottom)); z-index: 20;
  display: grid; grid-template-columns: 48px minmax(0, 1fr) 48px; gap: 8px;
  width: min(272px, calc(100% - 48px)); margin-inline: auto;
}
.feed-action {
  width: 48px; height: 48px; padding: 0; border-radius: 15px;
  background: rgba(7,33,23,.7); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255,255,255,.16);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 6px 18px rgba(0,0,0,.28);
  display: grid; place-items: center; color: #dde5dd;
}
.feed-action.like {
  width: 100%; height: 48px; display: flex; align-items: center; justify-content: center; gap: 6px;
  background: linear-gradient(145deg, rgba(241,213,139,.5), rgba(217,175,89,.5));
  border-color: rgba(217,175,89,.5); color: #211705; font-weight: 600; font-size: 13px;
}
.feed-action.like svg { fill: currentColor; stroke-width: 1.1; }
.feed-action:disabled { opacity: .45; }

/* «Написать» в ленте: на ~10% крупнее соседей (48 → 53px) и мягко
   пульсирует золотым кольцом, чтобы кнопку замечали. */
.feed-actions { grid-template-columns: 48px minmax(0, 1fr) 53px; align-items: center; }
.feed-action.message {
  width: 53px; height: 53px; border-radius: 16px; color: #f1d58b;
  border-color: rgba(217,175,89,.55);
  animation: feed-message-pulse 2.4s ease-in-out infinite;
}
.feed-action.message svg { width: 22px; height: 22px; }
.feed-action.message:active { transform: scale(.94); animation: none; }
/* Owner 2026-09-25: the tap must be visible at once — pressed class from pointerdown
   (Telegram WebView often skips :active) and a spinner while the dialog opens. */
.feed-action.is-pressed { transform: scale(.9); animation: none; background: rgba(217,175,89,.28); border-color: rgba(241,213,139,.9); transition: transform .08s ease-out; }
/* Owner 2026-09-25: while the dialog opens a golden light runs around the button's
   border. A rotating conic gradient under an inner plate (works in every WebView,
   no @property needed); the envelope icon stays visible on top. */
.feed-action.message.is-opening { position: relative; overflow: hidden; isolation: isolate; animation: none; pointer-events: none; border-color: transparent; }
.feed-action.message.is-opening::before { content: ''; position: absolute; z-index: -2; left: 50%; top: 50%; width: 160%; height: 160%; margin: -80% 0 0 -80%; background: conic-gradient(from 0deg, transparent 0 55%, rgba(217,175,89,.55) 70%, #f1d58b 84%, #fff6d0 90%, transparent 97%); animation: feed-open-spin .9s linear infinite; }
.feed-action.message.is-opening::after { content: ''; position: absolute; z-index: -1; inset: 2.5px; border-radius: 13.5px; background: #0b2a1d; box-shadow: inset 0 0 12px rgba(217,175,89,.18); }
.feed-action.message.is-opening svg { position: relative; opacity: .85; }
@keyframes feed-open-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .feed-action.message.is-opening::before { animation-duration: 2.4s; } }
.feed-action.message:disabled { animation: none; }
@keyframes feed-message-pulse {
  0%, 100% { transform: scale(1); box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 6px 18px rgba(0,0,0,.28), 0 0 0 0 rgba(217,175,89,.45); }
  50% { transform: scale(1.05); box-shadow: inset 0 1px 0 rgba(255,255,255,.12), 0 6px 18px rgba(0,0,0,.28), 0 0 0 8px rgba(217,175,89,0); }
}
@media (prefers-reduced-motion: reduce) { .feed-action.message { animation: none; } }

.feed-empty, .feed-loading, .feed-error { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; min-height: 50vh; text-align: center; color: var(--muted); padding: 0 20px; }
.feed-error button, .feed-empty button { min-height: var(--control-h); padding: 0 16px; border: 1px solid var(--line); border-radius: var(--field-radius); background: rgba(255,255,255,.04); color: var(--text); }

/* Симпатия уже отправлена: кнопка остаётся на месте, но спокойнее. */
/* Owner 2026-09-25: «Симпатия отправлена» — premium done state: dark glass with a gold
   border and soft glow, a heart filled with the gold gradient (CSS mask of the same
   heart path), one line of text centred with the heart. */
.feed-action.like.is-liked {
  gap: 6px; padding: 0 10px; white-space: nowrap;
  background: linear-gradient(145deg, rgba(38,70,50,.92), rgba(10,38,26,.92));
  border-color: rgba(241,213,139,.75); color: #f6e2a6; font-size: 13px; letter-spacing: .01em;
  box-shadow: inset 0 1px 0 rgba(255,240,200,.18), 0 0 14px rgba(217,175,89,.22), 0 6px 18px rgba(0,0,0,.28);
}
.feed-action.like.is-liked span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.feed-action.like.is-liked svg {
  flex: none; width: 18px; height: 18px; stroke: none;
  background: linear-gradient(145deg, #fff4c8 0%, #f1d58b 42%, #c8963e 100%);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 20S3 14.3 3 8.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 9 1.5C21 14.3 12 20 12 20Z'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 20S3 14.3 3 8.5A4.5 4.5 0 0 1 12 7a4.5 4.5 0 0 1 9 1.5C21 14.3 12 20 12 20Z'/%3E%3C/svg%3E") center / contain no-repeat;
  filter: drop-shadow(0 0 5px rgba(241,213,139,.45));
}
.feed-action.like.is-liked svg path { fill: transparent; stroke: none; }

/* Золотой VIP-бейдж (образец владельца ankihu_vip_badge.html, 2026-09-25): капсула,
   корона и текст, без картинки. Общий для ленты и профиля -- feed.css подключён
   на всех экранах приложения. Показывается только по серверному признаку VIP.
   Владелец: на ~40% меньше образца и прижат к верхней границе строки, как знак
   градуса (vertical-align:text-top), а не по её середине. */
.ankihu-vip {
  box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; gap: 2px;
  flex: 0 0 auto; min-height: 13px; margin-left: 4px; padding: 2px 5px;
  border: 1px solid #efd496; border-radius: 999px; color: #183126;
  background: linear-gradient(120deg, #ffe8b5, #efd08d 52%, #dfb568);
  box-shadow: inset 0 1px 0 #fff3cf, 0 1px 3px #00000026;
  font: 700 7px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  letter-spacing: .035em; text-shadow: none; white-space: nowrap; vertical-align: text-top;
}
.ankihu-vip > svg { display: block; width: 8px; height: 8px; flex: none; fill: currentColor; stroke: none; }
@media (forced-colors: active) { .ankihu-vip { background: Canvas; color: CanvasText; border-color: CanvasText; } }

/* Чипы «Чувствительные вопросы» на анкете (владелец 2026-09-25): отдельный блок под
   «Что заполнено», заголовок с замком, пояснение про взаимное заполнение от 60%. */
.candidate-sections .ahf-sensitive-label { display: flex; align-items: center; gap: 5px; margin-top: 12px; }
.candidate-sections .ahf-sensitive-label .ahf-icon { width: 11px; height: 11px; color: #d7b76d; }
.candidate-sections .ahf-section-chip.is-gated .ahf-icon { color: #d7b76d; }
.candidate-sections .ahf-sensitive-note { margin: 6px 2px 0; font-size: 11px; line-height: 1.45; color: #86a08d; }
/* Владелец 2026-09-25: градиент чипов — как у золотой карточки «VIP-статус». Закрытые темы —
   тот же градиент, приглушённый. Селектор сильнее .ahf .ahf-section-chip из favorites-reference.css. */
.candidate-sections.ahf .ahf-section-chip {
  color: #fff2cf; border-color: #f3d27a;
  background: radial-gradient(ellipse at 15% 0, #f6d77d45, transparent 70%), linear-gradient(128deg, #6a5420, #3a3214 46%, #14261a);
  box-shadow: inset 0 1px 0 #fff0c255, inset 0 0 12px #f3d27a26, 0 0 5px #e8c35a33, 0 3px 10px #0004;
}
.candidate-sections.ahf .ahf-section-chip .ahf-icon { color: #f2d991; }
.candidate-sections.ahf .ahf-section-chip.is-gated {
  color: #e9d8a6; border-color: #f3d27a8c;
  background: radial-gradient(ellipse at 15% 0, #f6d77d24, transparent 70%), linear-gradient(128deg, #4a3c18, #2a2512 46%, #12231a);
  box-shadow: inset 0 1px 0 #fff0c22e, 0 2px 8px #0004;
}

/* Типографика нижней части анкеты (владелец 2026-10-02): единый ритм отступов,
   заголовки блоков одного стиля, воздух между подписью и чипами, чипы удобно
   нажимать, а последний ряд не прячется под плавающими кнопками и меню. */
.candidate-body { padding-bottom: calc(168px + var(--safe-bottom, 0px)); }
.candidate-heading { margin-bottom: 10px; line-height: 1.3; }
.candidate-about-text { line-height: 1.55; }
.candidate-extra { margin-top: 26px; }
.candidate-info-grid { row-gap: 22px; column-gap: 14px; }
.candidate-info-box:only-child, .candidate-info-box:last-child:nth-child(odd) { grid-column: 1 / -1; }
.candidate-info-value { line-height: 1.6; }
.candidate-sections.ahf { margin: 30px 0 0; }
.candidate-sections .ahf-filled-label {
  margin: 0; font-size: 12px; font-weight: 600; line-height: 1.3; letter-spacing: .08em;
  text-transform: uppercase; color: #c8ae79;
}
.candidate-sections .ahf-chips { margin: 14px 0 0; gap: 10px 8px; }
.candidate-sections .ahf-sensitive-label { margin-top: 28px; gap: 6px; }
.candidate-sections.ahf .ahf-section-chip { min-height: 42px; padding: 8px 16px; }

/* Свёрнутый блок: скрытые разделы («Кого ищу» и т.д.) не исчезают целиком, а
   выглядывают затухающей строкой -- видно, что ниже есть продолжение, тап раскрывает. */
.candidate-extra:not(.expanded) .candidate-info-box-extra {
  max-height: 54px; opacity: 1; overflow: hidden;
  -webkit-mask-image: linear-gradient(to bottom, #000 0, #000 52%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 0, #000 52%, transparent 100%);
}

/* Разделитель между раскрывающимися колонками и блоком «Расширенная анкета». */
.candidate-sections.ahf { margin-top: 26px; padding-top: 26px; border-top: 1px solid rgba(200, 174, 121, .24); }

/* «Расширенная анкета»: заголовки один в один как «О себе»/«Цель», просторные
   премиальные чипы. Селекторы с .ahf усилены, иначе их перебивают стили «Избранного». */
.candidate-sections.ahf .ahf-filled-label {
  margin: 0; font-size: 12px; font-weight: 600; line-height: 1.3; letter-spacing: .08em;
  text-transform: uppercase; color: #c8ae79;
}
.candidate-sections.ahf .ahf-sensitive-label { margin-top: 32px; display: flex; align-items: center; gap: 7px; }
.candidate-sections.ahf .ahf-chips { margin: 16px 0 0; gap: 12px 10px; }
.candidate-sections.ahf .ahf-section-chip {
  min-height: 46px; min-width: 112px; padding: 10px 20px; gap: 8px;
  justify-content: center; align-items: center;
  font: 600 14px/1.2 var(--ahf-ui); letter-spacing: .01em; color: #fff3d2;
  border: 1px solid #e3c36e; border-radius: 999px;
  background:
    radial-gradient(ellipse at 20% 0, rgba(255, 226, 140, .34), transparent 62%),
    linear-gradient(135deg, #8c6f2c 0%, #5b4619 36%, #2e2b15 72%, #15291c 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 241, 196, .5), inset 0 -1px 0 rgba(0, 0, 0, .35),
    0 0 0 1px rgba(243, 210, 122, .1), 0 8px 18px rgba(0, 0, 0, .4), 0 0 16px rgba(232, 195, 90, .16);
}
.candidate-sections.ahf .ahf-section-chip.is-gated {
  color: #f0e0b0; border-color: rgba(227, 195, 110, .72);
  background:
    radial-gradient(ellipse at 20% 0, rgba(255, 226, 140, .2), transparent 62%),
    linear-gradient(135deg, #6f5822 0%, #473815 38%, #25251a 74%, #13261b 100%);
}
.candidate-sections.ahf .ahf-section-chip .ahf-icon { width: 15px; height: 15px; }

/* Кнопки ленты крупнее на ~10% (владелец 2026-10-03): 48 → 53 px, «Написать» 53 → 58 px, ширина ряда 272 → 300 px. */
.feed-actions { width: min(300px, calc(100% - 48px)); grid-template-columns: 53px minmax(0, 1fr) 58px; gap: 9px; }
.feed-action { width: 53px; height: 53px; border-radius: 16.5px; }
.feed-action svg { width: 22px; height: 22px; }
.feed-action.like { width: 100%; height: 53px; font-size: 14px; gap: 7px; }
.feed-action.message { width: 58px; height: 58px; border-radius: 17.5px; }
.feed-action.message svg { width: 24px; height: 24px; }

/* Анкета без фото (импорт без снимка или файл недоступен): вместо значка «битой картинки» -- фирменная заставка. */
.candidate-photo.is-photo-missing { background: radial-gradient(ellipse at 50% 38%, #263f2b, #08261b 80%); }
.candidate-photo.is-photo-missing .candidate-photo-placeholder { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; padding-bottom: 90px; pointer-events: none; }
.candidate-photo-placeholder .app-loading-mark { font-size: 46px; opacity: .9; margin: 0; }
.candidate-photo-placeholder small { color: #9eb0a6; font-size: 12px; letter-spacing: .04em; }

.report-dialog .modal-body{padding:16px}.report-form{display:grid;gap:16px}.report-form label{display:grid;gap:7px;color:var(--text,#f5f0df)}.report-form select,.report-form textarea{width:100%;box-sizing:border-box;border:1px solid var(--line,#456b55);border-radius:12px;background:var(--surface,#0b3021);color:inherit;padding:12px;font:inherit;font-size:16px}.report-form small{text-align:right;opacity:.7}.report-form .report-block{display:flex;align-items:center;gap:10px}.report-block input{width:20px;height:20px}.report-actions{display:flex;gap:10px;justify-content:flex-end}.report-actions button{min-height:44px;border-radius:12px;border:1px solid var(--line,#456b55);padding:0 16px;background:transparent;color:inherit}.report-actions .report-submit{background:var(--gold,#d8b657);color:#122118;font-weight:700}.report-error{margin:0;color:#ff9d91}.chat-report-message{display:block;margin:7px 0 0 auto;border:0;background:transparent;color:inherit;opacity:.68;font-size:12px;text-decoration:underline}.chat-report-participant{color:#ffb8ae!important}
