/* Экран "Избранное" (ADR-009 п.2). Три вкладки внутри одного маршрута
   #/favorites -- владелец явно попросил вкладки, а не три отдельных пункта
   меню (расходится с доком BR-008 о трёх отдельных модулях, это осознанное
   решение владельца для UI-слоя, см. CODEX_TO_CLAUDE.md/DEVELOPMENT_STATUS.md
   этого шага). Сама сегментированная плашка -- вариация той же стеклянной
   поверхности, что и .app-bottom-nav__capsule, но горизонтальный ряд из 3
   равных вкладок, а не 4 пункта нижней навигации. */
.favorites-tabs {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 3px;
  padding: 4px; margin-bottom: 16px; border-radius: 16px;
  background: rgba(7,33,23,.55);
  border: 1px solid rgba(255,255,255,.14);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
}
.favorites-tab {
  min-height: 40px; padding: 0 6px; border-radius: 12px;
  font-size: 12px; font-weight: 600; line-height: 1.2; color: var(--muted);
  text-align: center; transition: background .18s ease, color .18s ease;
}
.favorites-tab[aria-selected="true"] {
  color: #2c2410;
  background: linear-gradient(180deg, rgba(246,224,150,.95), rgba(217,175,89,.92));
  box-shadow: inset 0 1px 0 rgba(255,250,225,.55), 0 4px 12px rgba(217,175,89,.32);
}
.favorites-tab:focus-visible { outline: none; text-decoration: underline; text-underline-offset: 4px; }
@media (hover:hover) and (pointer:fine) {
  .favorites-tab[aria-selected="false"]:hover { color: var(--text); background: rgba(255,255,255,.04); }
}

.favorites-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.favorites-row {
  display: flex; align-items: center; gap: 12px; padding: 10px;
  border: 1px solid var(--line); border-radius: var(--field-radius); background: var(--panel);
  touch-action: manipulation; -webkit-tap-highlight-color: transparent;
  transition: transform .12s ease;
}
.favorites-row:active { transform: scale(.98); }
.favorites-row:focus-visible { outline: none; text-decoration: underline; text-underline-offset: 4px; }
.favorites-row-photo {
  width: 56px; height: 56px; flex: none; border-radius: 12px;
  background-color: var(--graphite); background-size: cover; background-position: center;
}
.favorites-row-body { min-width: 0; flex: 1 1 auto; }
.favorites-row-name { font-size: 14.5px; font-weight: 600; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.favorites-row-location { margin-top: 2px; font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.favorites-row-chips { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 6px; }
.favorites-row-arrow { flex: none; color: var(--muted); font-size: 18px; }

.favorites-more {
  display: block; width: 100%; margin-top: 12px; min-height: var(--control-h);
  border: 1px solid var(--line); border-radius: var(--field-radius);
  background: rgba(255,255,255,.04); color: var(--text); font-weight: 600; font-size: 13.5px;
}
.favorites-more:disabled { opacity: .55; }

.favorites-empty, .favorites-loading, .favorites-error {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
  min-height: 40vh; text-align: center; color: var(--muted); padding: 0 12px;
}
.favorites-error 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);
}

/* Тап по строке "Избранного" показывает ту же карточку, что и в ленте
   (renderCandidateCard/bindCandidateCard переиспользуются как есть) --
   отдельного детального макета здесь нет специально, это та же анкета. */
.favorites-back {
  display: inline-flex; align-items: center; gap: 4px; margin-bottom: 12px;
  min-height: 36px; padding: 0 4px; color: var(--gold-light); font-size: 13.5px; font-weight: 600;
}
.favorites-back:focus-visible { outline: none; text-decoration: underline; text-underline-offset: 4px; }

/* Избранное рендерится в двух разных контейнерах (router.js): внутри листа
   поверх Ленты (ограниченная высота, свой скролл) или прямо в обычной
   вкладке (.app-screen, свой скролл выше нижнего меню). position:fixed сюда
   не подходит ни там, ни там -- в листе плашка уехала бы ниже видимой
   границы листа, во вкладке легла бы поверх нижнего меню. sticky к низу
   ближайшего скролл-контейнера решает оба случая одинаково, без привязки к
   тому, какой из них это в данный момент. */
.favorites-detail-actions {
  position: sticky; bottom: 12px; z-index: 5;
  display: grid; grid-template-columns: minmax(0, 1fr) 48px; gap: 8px;
  width: min(272px, calc(100% - 24px)); margin: 16px auto 0;
}

/* Вкладка «Матчи»: две группы. Закрытые плитки входящих симпатий рисуются
   только градиентом и силуэтом -- настоящего фото на странице нет вовсе
   (сервер без VIP его не отдаёт), размытие здесь чисто оформительское. */
.matches-section + .matches-section { margin-top: 22px; }
.matches-title {
  display: flex; align-items: center; gap: 8px; margin: 0 0 10px;
  font-size: 13px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--gold-light);
}
.matches-title span {
  min-width: 22px; height: 22px; padding: 0 7px; border-radius: 11px; display: inline-grid; place-items: center;
  font-size: 12px; letter-spacing: 0; color: #2c2410; background: linear-gradient(180deg, #f6e096, #d9af59);
}
.matches-note { margin: 0; padding: 14px; border: 1px dashed var(--line); border-radius: var(--field-radius); color: var(--muted); font-size: 13px; line-height: 1.5; }
.matches-locked {
  padding: 14px; border-radius: 18px; border: 1px solid rgba(217,175,89,.45);
  background: radial-gradient(ellipse at 20% 0, rgba(246,224,150,.14), transparent 70%), rgba(7,33,23,.55);
}
.matches-hidden-grid { list-style: none; margin: 0 0 12px; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.matches-hidden-tile {
  position: relative; aspect-ratio: 3 / 4; border-radius: 14px; overflow: hidden;
  background: radial-gradient(circle at 50% 36%, #7c8a70 0 17%, transparent 18%),
    radial-gradient(ellipse at 50% 92%, #6d7a63 0 34%, transparent 35%),
    linear-gradient(160deg, #3f5a45, #1d3527);
  filter: blur(6px) saturate(.8); transform: scale(1.04);
}
.matches-hidden-tile span {
  position: absolute; inset: 0; background: linear-gradient(180deg, transparent 40%, rgba(3,20,13,.55));
}
.matches-locked-text { margin: 0 0 12px; font-size: 13.5px; line-height: 1.5; color: var(--text); text-align: center; }
.matches-vip {
  display: block; width: 100%; min-height: 48px; border-radius: 15px; border: 1px solid #f6dda0;
  background: linear-gradient(115deg, #e3bb60, #f4d791 48%, #bd8d36); color: #14251a;
  font-size: 14px; font-weight: 700; box-shadow: inset 0 1px 1px #fff5cb, 0 7px 22px rgba(198,160,66,.2);
  touch-action: manipulation; -webkit-tap-highlight-color: transparent; transition: transform .12s ease, filter .2s;
}
.matches-vip:active { transform: scale(.98); }
.matches-vip:focus-visible { outline: 2px solid #f4d690; outline-offset: 3px; }
@media (hover:hover) and (pointer:fine) { .matches-vip:hover { filter: brightness(1.05); } }

/* Единое окно доступа: поверх текущего списка, без перехода на пустой экран. */
.favorites-access-dialog{width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;color:#f8ecd2;overflow:hidden}
.favorites-access-dialog::backdrop{background:rgba(0,13,9,.72);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.favorites-access-card{position:absolute;left:max(14px,env(safe-area-inset-left));right:max(14px,env(safe-area-inset-right));top:50%;max-width:430px;max-height:calc(100% - max(32px,env(safe-area-inset-top) + env(safe-area-inset-bottom) + 20px));margin-inline:auto;padding:24px 20px 18px;overflow:auto;text-align:center;border:1px solid rgba(238,207,129,.38);border-radius:26px;background:linear-gradient(155deg,#143d2f,#08261c 67%);box-shadow:0 24px 80px rgba(0,0,0,.58);transform:translateY(-50%);animation:favorites-access-rise .22s cubic-bezier(.2,.8,.2,1)}
.favorites-access-close{position:absolute;right:10px;top:9px;width:48px;height:48px;display:grid;place-items:center;border:0;border-radius:14px;background:transparent;color:#c5d3c9}
.favorites-access-close svg,.favorites-access-icon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.favorites-access-icon{width:50px;height:50px;display:grid;place-items:center;margin:0 auto 14px;color:#153025;border-radius:16px;background:linear-gradient(145deg,#f5dfa5,#c89b46);box-shadow:0 8px 22px rgba(211,170,85,.2)}
.favorites-access-card h2{margin:0 28px 9px;font:500 22px/1.25 Georgia,serif;color:#fff0ce;letter-spacing:-.018em}
.favorites-access-card h2:focus{outline:none}
.favorites-access-card p{max-width:350px;margin:0 auto 20px;color:#c2d0c6;font-size:14px;line-height:1.55}
.favorites-access-primary,.favorites-access-later{width:100%;min-height:48px;border-radius:15px;font:700 14px/1.25 system-ui,sans-serif;touch-action:manipulation}
.favorites-access-primary{border:1px solid #f3da94;background:linear-gradient(145deg,#f3dda3,#c89b46);color:#172219;box-shadow:0 8px 20px rgba(0,0,0,.22)}
.favorites-access-later{margin-top:6px;border:0;background:transparent;color:#d5dfd7}
.favorites-access-close:focus-visible,.favorites-access-primary:focus-visible,.favorites-access-later:focus-visible{outline:3px solid #fff1b5;outline-offset:2px}
.fav-profile-error{min-height:60dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:28px 20px;color:#c2d0c6}
.fav-profile-error h2{margin:0;color:#f8e8c3;font:500 24px/1.25 Georgia,serif}
.fav-profile-error p{max-width:310px;margin:10px 0 20px;font-size:14px;line-height:1.55}
.fav-profile-error button{min-width:190px;min-height:48px;padding:10px 18px;border:1px solid #d8bd75;border-radius:15px;background:#123c2d;color:#f6dfaa;font-weight:700}
@keyframes favorites-access-rise{from{opacity:0;transform:translateY(calc(-50% + 18px))}to{opacity:1;transform:translateY(-50%)}}
@media(max-width:340px){.favorites-access-card{padding-inline:16px}.favorites-access-card h2{font-size:20px}.favorites-access-card p{font-size:13px}}
@media(prefers-reduced-motion:reduce){.favorites-access-card{animation:none}}

/* Просмотр анкеты из «Избранного» (владелец 2026-09-25): на весь экран и ровно той же
   карточкой, что в ленте (renderCandidateCard + стили feed.css), с кнопками ленты
   «Симпатия»/«Написать». Модальный <dialog> — поверх листа «Избранного». */
.fav-profile-view {
  position: fixed; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none;
  margin: 0; padding: 0; border: 0; background: var(--bg); color: var(--text); overflow: hidden;
}
.fav-profile-view[open] { display: flex; flex-direction: column; }
.fav-profile-view::backdrop { background: var(--bg); }
.fav-profile-head { flex: none; display: flex; align-items: center; padding: calc(10px + var(--safe-top)) 18px 10px; }
.fav-profile-back {
  display: grid; place-items: center; width: 40px; height: 40px; padding: 0; border-radius: 50%;
  color: #d8cd9e; background: linear-gradient(135deg, #19372970, #05231870); border: 1px solid #ac98563d;
}
.fav-profile-back:focus-visible { outline: 2px solid var(--gold-light); outline-offset: 2px; }
.fav-profile-scroll { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 0 18px calc(24px + var(--safe-bottom)); }
.fav-profile-scroll.feed-root { padding-bottom: calc(24px + var(--safe-bottom)); }
.fav-profile-scroll .favorites-detail-actions { bottom: calc(12px + var(--safe-bottom)); }
.fav-profile-note { margin: 24px 0; text-align: center; color: var(--muted); }

/* Owner 2026-10-13: чип «Новые анкеты» и просмотр анкеты из рассылки (шаги «следующая анкета»). */
.ahf-filter-count{display:inline-grid;place-items:center;min-width:20px;height:20px;margin-left:6px;padding:0 6px;border-radius:999px;background:#e3c982;color:#14281f;font-size:12px;font-weight:700;line-height:20px}
.fav-profile-announce{margin:0 0 10px;padding:0 2px;color:#d7b76d;font-size:12.5px}
.fav-profile-nav{margin:14px 0 4px}
.fav-profile-next{width:100%;min-height:48px;border:1px solid rgba(255,255,255,.2);border-radius:14px;background:rgba(255,255,255,.04);color:#f1eee2;font:inherit;font-size:15px;font-weight:600;cursor:pointer}
.fav-profile-next:disabled{opacity:.5;cursor:default}
.fav-profile-next:focus-visible{outline:2px solid #f3d787;outline-offset:2px}
.ahf .ahf-timeline-event.is-tappable{cursor:pointer}
.favorites-detail-actions.has-skip{grid-template-columns:48px minmax(0,1fr) 48px}
.favorites-detail-actions .feed-action.skip{color:#c9d6cf}
.favorites-detail-actions .feed-action.skip:focus-visible{outline:2px solid #f3d787;outline-offset:2px}
