/* ХАБ ПЛЕЙ — стили сайта. Вынесены из index.html 30.09.2026.
   Подключается из <head>: <link rel="stylesheet" href="/assets/site.css?v=__ASSET_V__">
   (__ASSET_V__ подставляет pages.js по mtime файла — версия для кэша браузера). */

/* Локальные шрифты вместо Google Fonts CDN — иначе браузер каждого посетителя обращается
   напрямую к серверам Google при каждой загрузке сайта, передавая IP-адрес и другие метаданные
   за пределы РФ без согласия пользователя (трансграничная передача персональных данных).
   Файлы .woff2 нужно положить в папку /fonts/ рядом с этим HTML — см. инструкцию в конце файла. */
@font-face{font-family:'Oswald';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/oswald-500.woff2') format('woff2');}
@font-face{font-family:'Oswald';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/oswald-600.woff2') format('woff2');}
@font-face{font-family:'Oswald';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/oswald-700.woff2') format('woff2');}
@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/inter-400.woff2') format('woff2');}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/inter-500.woff2') format('woff2');}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/inter-600.woff2') format('woff2');}
@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/inter-700.woff2') format('woff2');}

:root{
  --rink-black:#0B0E14;
  --rink-black-2:#131824;
  --steel:#1E3A5F;
  --ice:#F1F4F8;
  --ice-2:#E4E9F1;
  --rink-blue:#2F6FED;
  --rink-blue-dim:#1F4FB0;
  --puck-red:#E5383B;
  --frost:#8A93A6;
  --frost-dark:#5B6478;
  --white:#FFFFFF;
  --success:#2CB67D;
  --radius:16px;
  --radius-sm:10px;
  --shadow:0 8px 24px rgba(11,14,20,0.10);
  --shadow-lg:0 16px 40px rgba(11,14,20,0.18);
  /* Стрелка выпадающего списка: рисуем свою вместо нативной, которая прижата к самому краю */
  --select-arrow:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%235B6478' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  /* Та же стрелка белым — для активного (тёмного) чипа категории с выпадающим меню */
  --select-arrow-light:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='7' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%23FFFFFF' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  --font-display:'Oswald',sans-serif;
  --font-body:'Inter',sans-serif;
  /* Цифры (цены, счётчики, промокоды) раньше набирались третьей гарнитурой — JetBrains Mono.
     Ради неё грузилось два лишних файла шрифта, а на странице соседствовали три разных
     рисунка букв. Теперь это тот же Inter с табличными цифрами: у них одинаковая ширина,
     поэтому столбцы цен и счётчики выравниваются так же ровно, как в моноширинном. */
  --font-num:'Inter',sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;}
/* Фон страницы светлый, а шапка и подвал тёмные. Когда браузер на телефоне «оттягивает»
   страницу за край (резиновая прокрутка), видно фон полотна — а он берётся от body, то есть
   светлый. Из-за этого при свайпе вверх под тёмным подвалом появлялась белая полоса.
   Задаём фон самому html: тогда за краями видно тёмный цвет, совпадающий и с шапкой, и
   с подвалом. Содержимое страницы по-прежнему на светлом — его рисует body. */
html{scroll-behavior:smooth;background:var(--rink-black);}
/* Страница прокручивается только по вертикали. На телефоне случайный свайп вбок раньше
   сдвигал весь сайт: какой-нибудь элемент оказывался шире экрана на пару пикселей.
   clip не создаёт контейнер прокрутки (в отличие от hidden), поэтому липкая шапка и
   нижнее меню продолжают работать; hidden — запасной вариант для старых браузеров.
   Горизонтальные полосы фильтров внутри страницы прокручиваются по-прежнему. */
/* Только на body: правило на html в Safari уходит на вьюпорт целиком и на iPhone давало
   полосу справа — страница рисовалась чуть уже экрана. */
body{overflow-x:hidden;overflow-x:clip;overscroll-behavior-x:none;position:relative;}
/* Подсказка под названием раздела. По умолчанию — только гостю (класс is-guest ставит
   switchView); в фото-шапках четырёх разделов (.section-hero) показывается всем, см. ниже. */
.guest-hint{display:none;margin-top:8px;padding:8px 12px;border-radius:10px;background:var(--ice);color:var(--frost-dark);font-size:13px;line-height:1.5;max-width:640px;}
body.is-guest .guest-hint{display:block;}
/* Страховка от «полоски справа» на телефоне: если какой-то блок окажется шире экрана,
   iOS уменьшает масштаб страницы, и справа остаётся полоса фона html. Ничего не должно
   быть шире окна: ограничиваем обёртки и не даём элементам фильтров расширяться по
   содержимому. */
body{width:100%;max-width:100%;}
.wrap,section,header.site-header,footer,.hero{max-width:100%;}
select,input,textarea{max-width:100%;}
.filter-bar > *{min-width:0;}
/* Длинные слова и ссылки без пробелов (адрес чата в описании) не должны растягивать карточку
   шире экрана — переносим в любом месте. */
.ad-desc,.ad-title,.ad-meta,.about-box,.panel-note,.my-ad-row .title,.my-ad-row .meta,.footer-col p,.notif-item,.deal-row,.incoming-response{overflow-wrap:anywhere;word-break:break-word;}
body{
  font-family:var(--font-body);
  background:var(--ice);
  color:var(--rink-black);
  -webkit-font-smoothing:antialiased;
  /* Место под нижнее меню раньше давал отступ здесь, у body. Но фон body светлый, и эти
     76 пикселей оказывались светлой полосой ПОД тёмным подвалом. Отступ перенесён на сам
     подвал (см. footer ниже): он тёмный и уходит под меню без разрыва. */
  /* Прилипающий подвал: на коротких страницах (все разделы, кроме главной) контента не
     хватало на высоту экрана, подвал заканчивался выше низа окна, и под ним оставалась
     пустая полоса фона. Колонка с min-height:100vh и растягивающимся <main> прижимает
     подвал к низу, не ломая длинные страницы. */
  min-height:100vh;
  display:flex;flex-direction:column;
}
main{flex:1 0 auto;}
footer{flex-shrink:0;}
img{max-width:100%;display:block;}
button{font-family:inherit;cursor:pointer;border:none;background:none;}
/* Поля ввода и списки по умолчанию рисуются системным шрифтом браузера (на Windows это
   Arial) — на странице появлялась третья гарнитура, которую никто не заказывал. */
input,select,textarea{font-family:inherit;}
.ico{flex-shrink:0;vertical-align:middle;}
/* Строки в кабинете, по которым можно кликнуть, чтобы открыть саму публикацию */
.ad-card-author{margin-top:18px;padding-top:16px;border-top:1px solid var(--ice-2);}
.row-openable{cursor:pointer;}
.row-openable:hover .title{color:var(--rink-blue);}
.my-response-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end;}
.own-ad-note{
  display:flex;align-items:center;gap:9px;
  background:var(--ice);border-radius:12px;padding:11px 13px;
  font-size:13px;color:var(--frost-dark);line-height:1.4;
}
/* Название объявления внутри текста: выглядит как ссылка, но остаётся кнопкой —
   переход никуда не ведёт, оно открывает карточку в модальном окне. */
.link-btn{
  font:inherit;color:var(--rink-blue);text-decoration:underline;padding:0;
  background:none;border:none;cursor:pointer;text-align:left;
}
.link-btn:hover{color:var(--rink-blue-dim);}
.btn .ico{width:17px;height:17px;}
a{color:inherit;text-decoration:none;}
:focus-visible{outline:3px solid var(--rink-blue);outline-offset:2px;}
@media (prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important;}}

/* ---------- rink line divider (signature motif) ---------- */
.rink-divider{
  height:6px;
  width:100%;
  background:repeating-linear-gradient(
    90deg,
    var(--rink-blue) 0px, var(--rink-blue) 46px,
    var(--puck-red) 46px, var(--puck-red) 54px,
    var(--rink-blue) 54px, var(--rink-blue) 100px,
    transparent 100px, transparent 112px
  );
  opacity:0.9;
}
.faceoff{
  width:14px;height:14px;border-radius:50%;
  border:3px solid var(--puck-red);
  display:inline-block;flex-shrink:0;
}

/* ---------- header ---------- */
header.site-header{
  position:sticky;top:0;z-index:50;
  background:var(--rink-black);
  color:var(--white);
  padding:14px 20px;
  display:flex;align-items:center;justify-content:space-between;
  gap:12px;
}
.logo{
  font-family:var(--font-display);
  font-weight:700;
  font-size:22px;
  letter-spacing:0.5px;
  display:flex;align-items:center;gap:8px;
  white-space:nowrap;flex-shrink:0;
}
.logo .logo-icon{height:30px;width:auto;display:block;}
.footer-logo .logo-icon{height:26px;}
nav.desktop-nav{display:none;gap:4px;}
nav.desktop-nav :is(a,button){
  color:var(--frost);
  font-weight:600;font-size:14px;
  padding:10px 14px;border-radius:999px;
  transition:background .15s, color .15s;
}
nav.desktop-nav :is(a,button).active,nav.desktop-nav :is(a,button):hover{
  color:var(--white);background:rgba(255,255,255,0.08);
}
.header-actions{display:flex;align-items:center;gap:10px;}
.icon-btn{
  /* Без круглой подложки: иконка живёт прямо на тёмном фоне шапки. Размер оставлен
     прежним — это область нажатия, меньше 38 пикселей делать нельзя. */
  position:relative;
  width:38px;height:38px;
  color:var(--white);
  display:flex;align-items:center;justify-content:center;
}
.icon-btn:hover{color:var(--rink-blue);}
/* Красная точка «есть непрочитанное» — на кнопке кабинета в шапке и в нижнем меню.
   Показывается только когда есть что показать: класс has-unread ставит скрипт. */
.notif-badge{
  position:absolute;top:5px;right:5px;
  width:9px;height:9px;border-radius:50%;
  background:var(--puck-red);
  border:2px solid var(--rink-black);
  display:none;
}
.has-unread .notif-badge{display:block;}
nav.bottom-nav :is(a,button){position:relative;}
nav.bottom-nav :is(a,button) .notif-badge{top:4px;right:calc(50% - 16px);}
@media(min-width:900px){
  nav.desktop-nav{display:flex;}
}

/* ---------- bottom nav (mobile) ---------- */
nav.bottom-nav{
  position:fixed;bottom:0;left:0;right:0;z-index:50;
  background:var(--rink-black);
  display:flex;
  padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  box-shadow:0 -4px 20px rgba(0,0,0,0.25);
  /* Мобильный Safari иногда не перерисовывает position:fixed у низа экрана во время
     активной прокрутки, и меню пропадает. Выносим его на отдельный GPU-слой. */
  -webkit-transform:translateZ(0);transform:translateZ(0);
  -webkit-backface-visibility:hidden;backface-visibility:hidden;
}
@media(min-width:900px){nav.bottom-nav{display:none;}}
nav.bottom-nav :is(a,button){
  flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
  color:var(--frost);font-size:10px;font-weight:600;padding:6px 2px;border-radius:10px;
  /* min-width:0 — иначе кнопка не становится уже своей подписи («Спортсмен»),
     и на экранах 320 точек всё меню оказывалось шире экрана */
  min-width:0;
}
/* На самых узких экранах подписи чуть мельче, чтобы помещались без обрезки */
@media(max-width:359px){nav.bottom-nav :is(a,button){font-size:9px;}}
nav.bottom-nav :is(a,button) .ic{display:flex;align-items:center;justify-content:center;height:22px;}
nav.bottom-nav :is(a,button).active{color:var(--white);}
nav.bottom-nav :is(a,button).active .ic{color:var(--rink-blue);}

/* ---------- layout helpers ---------- */
.view{display:none;}
/* Отступ снизу, чтобы последняя карточка не прилипала к подвалу */
.view.active{display:block;animation:fadein .25s ease;padding-bottom:44px;}
@keyframes fadein{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
.wrap{max-width:1080px;margin:0 auto;padding:0 20px;}
.section-pad{padding:32px 0;}
.eyebrow{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;
  font-size:11px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;
  color:var(--rink-blue-dim);
  display:flex;align-items:center;gap:8px;margin-bottom:8px;
}
h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:0.2px;}
/* Два вида мелкого текста в панелях: пояснение под заголовком и сообщение «пока пусто».
   Раньше они набирались инлайновыми стилями и разошлись по размеру — 12,5 против 13 пикселей.
   Разница в пол-пикселя не читается как замысел, только как небрежность, поэтому оба
   сведены в классы с одним размером. */
.panel-note{font-size:13px;color:var(--frost-dark);margin-bottom:10px;}
.panel-empty{font-size:13px;color:var(--frost-dark);}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:13px 22px;border-radius:999px;font-weight:600;font-size:14.5px;
  transition:transform .12s, box-shadow .12s, background .12s;
  white-space:nowrap;text-decoration:none;
}
.btn[disabled]{opacity:.55;cursor:default;}
.btn:active{transform:scale(0.97);}
.btn-primary{background:var(--rink-blue);color:var(--white);box-shadow:0 6px 16px rgba(47,111,237,0.35);}
.btn-primary:hover{background:var(--rink-blue-dim);}
.btn-dark{background:var(--rink-black);color:var(--white);}
.btn-dark:hover{background:#000;}
.btn-outline{background:var(--white);color:var(--rink-black);border:1.5px solid var(--ice-2);}
.load-more{display:flex;justify-content:center;padding:18px 0 6px;}
.is-loading{opacity:.55;transition:opacity .15s;pointer-events:none;}
.connect-block{margin-bottom:16px;}
.connect-head{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer;}
/* Та же стрелка, что у выпадающих списков (--select-arrow); в свёрнутом виде повёрнута */
.connect-toggle{width:32px;height:32px;border-radius:50%;background:var(--ice-2) var(--select-arrow) no-repeat center/11px 7px;flex-shrink:0;transition:transform .15s;}
.connect-toggle:hover{background-color:var(--ice);}
.connect-block.collapsed .connect-toggle{transform:rotate(-90deg);}
.connect-item{margin-top:14px;padding-top:14px;border-top:1px solid var(--ice-2);}
.connect-item .install-row{margin-bottom:10px;}
.connect-item .install-icon,.connect-item .push-icon{width:40px;height:40px;border-radius:11px;font-size:18px;}
.push-icon{width:52px;height:52px;border-radius:14px;background:var(--ice);display:inline-flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0;}
.install-row{display:flex;gap:14px;align-items:center;margin-bottom:12px;}
.install-icon{width:52px;height:52px;border-radius:14px;flex-shrink:0;}
.install-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;}
.install-ios{font-size:13px;color:var(--frost-dark);line-height:1.5;flex:1 1 100%;}
.ios-share{display:inline-block;padding:0 4px;color:var(--rink-blue);font-weight:700;}
/* В установленном приложении нет адресной строки — верхний отступ под статус-бар iPhone */
@media (display-mode: standalone){header.site-header{padding-top:calc(14px + env(safe-area-inset-top));}}
.chip-search{min-width:180px;flex:1 1 180px;max-width:320px;-webkit-appearance:none;appearance:none;}
.chip-search::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;}
/* Скелетоны карточек на время загрузки списка */
.skel-card{pointer-events:none;}
.skel{background:linear-gradient(90deg,var(--ice) 25%,#e9edf3 50%,var(--ice) 75%);background-size:200% 100%;animation:skel 1.2s linear infinite;border-radius:8px;}
.skel-badge{width:90px;height:18px;border-radius:999px;}
.skel-title{width:70%;height:20px;}
.skel-line{width:100%;height:13px;}
.skel-line.short{width:55%;}
.skel-btn{width:110px;height:34px;border-radius:999px;margin-top:4px;}
@keyframes skel{0%{background-position:200% 0}100%{background-position:-200% 0}}
.error-state .btn{margin-top:10px;}
.my-ad-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.char-count{font-size:11.5px;color:var(--frost);text-align:right;margin-top:3px;}
.char-count.near{color:var(--puck-red);}
.upload-status{display:inline-block;font-size:12.5px;color:var(--frost-dark);margin-top:6px;}
.upload-status.busy::before{content:'';display:inline-block;width:12px;height:12px;border:2px solid var(--ice-2);border-top-color:var(--rink-blue);border-radius:50%;margin-right:6px;vertical-align:-2px;animation:spin .8s linear infinite;}
@keyframes spin{to{transform:rotate(360deg)}}
.load-more[hidden]{display:none;}
.load-more .btn{min-width:200px;}
.btn-outline:hover{border-color:var(--rink-blue);color:var(--rink-blue);}
.btn-ghost{background:var(--ice-2);color:var(--rink-black);}
.btn-tg{background:#1877B8;color:var(--white);} /* фирменный #2AABEE с белым текстом ≈ 2,6:1; #1877B8 ≈ 4,8:1 */
.btn-max{background:var(--rink-black);color:var(--white);}
.btn-sm{padding:9px 16px;font-size:13px;}
.btn-block{width:100%;}

/* ---------- hero ---------- */
.hero{
  background:radial-gradient(120% 140% at 15% -10%, #1a2338 0%, var(--rink-black) 55%);
  color:var(--white);
  padding:52px 0 40px;
  position:relative;overflow:hidden;
}
.hero::after{
  content:"";position:absolute;right:-80px;top:-60px;width:340px;height:340px;
  border:2px solid rgba(47,111,237,0.35);border-radius:50%;
}
.hero::before{
  content:"";position:absolute;right:30px;bottom:-120px;width:220px;height:220px;
  border:2px solid rgba(229,56,59,0.25);border-radius:50%;
}
/* Блок — обычный .wrap (1080px), чтобы текст героя начинался ровно от той же левой границы,
   что и карточки разделов под ним. Раньше здесь стоял max-width:640px, который перебивал
   ширину .wrap, а вместе с его margin:0 auto центрировал узкую колонку — из-за этого весь
   текст героя был заметно сдвинут вправо относительно карточек. Ширину строки ограничиваем
   не контейнером, а самими заголовком и абзацем. */
.hero-inner{position:relative;z-index:2;}
.hero h1{font-size:44px;line-height:1.05;margin-bottom:14px;max-width:640px;}
.hero h1 span{color:var(--rink-blue);}
.hero p{color:var(--frost);font-size:16px;line-height:1.55;margin-bottom:26px;max-width:480px;}
.hero-ctas{display:flex;flex-wrap:wrap;gap:10px;}
@media(min-width:700px){.hero h1{font-size:58px;}}
/* Герой с фотографией: снимок лежит в /icons/hero.webp; пока его нет — остаётся градиент */
.hero-photo{
  background-color:var(--rink-black);
  background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.12) 30%, rgba(11,14,20,0) 60%, rgba(11,14,20,.30) 100%), linear-gradient(95deg, rgba(11,14,20,.90) 0%, rgba(11,14,20,.70) 38%, rgba(11,14,20,.18) 68%, rgba(11,14,20,.04) 100%), url('/icons/hero.webp');
  background-size:cover;background-position:center 55%;
  min-height:540px;display:flex;align-items:center;padding:56px 0 56px;
}
.hero-photo::before,.hero-photo::after{display:none;}
/* .hero-photo — flex-контейнер, поэтому .wrap внутри сжимался по содержимому и уезжал к центру */
.hero-photo > .wrap{width:100%;}
.hero-photo h1,.hero-photo p{text-shadow:0 2px 14px rgba(0,0,0,.65), 0 1px 2px rgba(0,0,0,.6);}
.hero-photo h1{color:#fff;}
.hero-photo p{color:#DCE3EE;text-shadow:0 1px 2px rgba(0,0,0,.4);}
.hero-btn-ghost{background:#fff;color:var(--rink-black);border-color:#fff;box-shadow:0 6px 18px rgba(0,0,0,.25);}
.hero-btn-ghost:hover{background:#EEF2F8;border-color:#EEF2F8;}
@media(max-width:899px){.hero-photo{min-height:0;padding:40px 0 34px;background-position:center;background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.45) 30%, rgba(11,14,20,.55) 100%), url('/icons/hero-m.webp');}}
.cat-count{display:inline-block;margin-top:8px;font-size:12.5px;color:var(--rink-blue);font-weight:600;}
.cat-count:empty{display:none;}
/* Плитки разделов с фотографиями (те же снимки, что в шапках разделов), шире основного контейнера */
.wrap-wide{max-width:1320px;margin:0 auto;padding:0 20px;}
.category-grid.tiles{gap:16px;margin-top:28px;}
@media(min-width:700px){.category-grid.tiles{grid-template-columns:repeat(2,minmax(0,1fr));}}
.tile{position:relative;min-height:250px;border-radius:var(--radius);overflow:hidden;cursor:pointer;background-color:var(--rink-black-2);background-size:cover;background-position:center;box-shadow:var(--shadow);display:flex;align-items:flex-end;transition:transform .15s,box-shadow .15s;isolation:isolate;}
.tile::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg, rgba(11,14,20,.22) 0%, rgba(11,14,20,.48) 45%, rgba(11,14,20,.90) 100%);transition:background .15s;}
.tile:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);}
.tile:hover::before{background:linear-gradient(180deg, rgba(11,14,20,.15) 0%, rgba(11,14,20,.45) 45%, rgba(11,14,20,.92) 100%);}
.tile-body{position:relative;z-index:1;padding:18px 18px 16px;color:#fff;}
.tile-body h3{font-size:21px;margin-bottom:4px;color:#fff;}
.tile-body p{font-size:13.5px;line-height:1.4;color:#D5DCE8;}
.tile .cat-count{color:#fff;background:rgba(47,111,237,.85);padding:3px 9px;border-radius:999px;font-size:12px;margin-top:10px;}
.tile-athlete{background-image:url('/icons/hero-athlete-sm.webp');}
.tile-team{background-image:url('/icons/hero-team-sm.webp');}
.tile-ice{background-image:url('/icons/hero-ice-sm.webp');}
.tile-market{background-image:url('/icons/hero-market-sm.webp');}
@media(max-width:899px){.tile{min-height:170px;}.category-grid.tiles{margin-top:18px;gap:12px;}.tile-body h3{font-size:19px;}}
.home-block-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:16px;}
.how-block{padding-top:56px;}
#view-home .home-block{padding-top:44px;}
#view-home .how-block{padding-top:66px;}
/* Пустой слот партнёров и общий низ секции давали ~150 px пустоты перед подвалом */
#adSlotHome:empty{display:none;}
#view-home{padding-bottom:0;}
#view-home .home-block:last-of-type{padding-bottom:36px;}
.how-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;}
.how-step{position:relative;background:var(--white);border-radius:var(--radius);padding:18px 18px 16px 18px;box-shadow:var(--shadow);}
.how-step .n{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--rink-blue);color:#fff;font-family:var(--font-display);font-weight:700;font-size:15px;margin-bottom:12px;}
.how-step h4{font-family:var(--font-display);font-size:17px;margin-bottom:6px;}
.how-step p{font-size:13.5px;line-height:1.5;color:var(--frost-dark);}
@media(max-width:999px){.how-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:560px){.how-grid{grid-template-columns:1fr;gap:10px;}.how-step{display:grid;grid-template-columns:32px 1fr;column-gap:12px;}.how-step .n{margin-bottom:0;grid-row:1 / span 2;}.how-step h4{margin-bottom:4px;}}
.home-block-head h2{font-size:22px;}
.latest-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;}
.latest-card{display:flex;gap:12px;align-items:flex-start;background:var(--white);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);cursor:pointer;border:1.5px solid transparent;transition:transform .15s,box-shadow .15s;}
.latest-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--ice-2);}
.latest-thumb{width:56px;height:56px;border-radius:10px;object-fit:cover;flex-shrink:0;background:var(--ice);}
.latest-body{min-width:0;flex:1;}
.latest-top{display:flex;justify-content:space-between;gap:8px;align-items:center;margin-bottom:6px;}
.latest-date{font-size:11.5px;color:var(--frost);white-space:nowrap;}
.latest-title{font-weight:600;font-size:14.5px;line-height:1.35;margin-bottom:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.latest-meta{font-size:12.5px;color:var(--frost-dark);}
.latest-sub{font-size:12.5px;color:var(--frost-dark);margin-bottom:6px;line-height:1.4;}
.latest-desc{font-size:13px;color:var(--rink-black);line-height:1.45;margin-bottom:8px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.latest-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12.5px;color:var(--frost-dark);margin-top:auto;}
.latest-foot b{color:var(--rink-black);font-family:var(--font-display);font-size:15px;white-space:nowrap;}
.latest-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));}
.latest-card{flex-direction:column;}
.latest-card .latest-thumb{width:100%;height:140px;border-radius:10px;}
.latest-body{display:flex;flex-direction:column;width:100%;flex:1;}
.k-athlete{background:rgba(47,111,237,.10);color:var(--rink-blue);}
.k-team{background:rgba(229,56,59,.10);color:var(--puck-red);}
.k-ice{background:rgba(44,182,125,.12);color:#1B7F55;}
.k-market{background:rgba(245,166,35,.16);color:#9A6200;}
.home-news-grid{margin-bottom:0;}
@media(min-width:900px){.home-news-grid{grid-template-columns:repeat(3,minmax(0,1fr));}}
.modal-sm{max-width:520px;}
.share-row{display:flex;gap:8px;margin-bottom:14px;}
.share-row input{flex:1;min-width:0;padding:10px 12px;border:1.5px solid var(--ice-2);border-radius:10px;background:var(--ice);font-size:13.5px;font-family:inherit;}
.share-apps{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;}
.share-app{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 6px;border-radius:12px;background:var(--ice);font-size:12.5px;font-weight:600;color:var(--rink-black);text-decoration:none;border:1.5px solid transparent;}
.share-app span{font-size:22px;}
.share-app:hover{border-color:var(--rink-blue);background:var(--white);}
@media(max-width:480px){.share-apps{grid-template-columns:repeat(2,1fr);}}
.pick-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.pick-card{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px;border:1.5px solid var(--ice-2);border-radius:14px;background:var(--ice);text-align:left;cursor:pointer;font-family:inherit;}
.pick-card:hover{border-color:var(--rink-blue);background:var(--white);}
.pick-card b{font-size:14.5px;}
.pick-card span:last-child{font-size:12.5px;color:var(--frost-dark);}
@media(max-width:480px){.pick-grid{grid-template-columns:1fr;}}

.category-grid{
  display:grid;grid-template-columns:minmax(0,1fr);gap:14px;margin-top:-28px;position:relative;z-index:3;
}
@media(min-width:700px){.category-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
.cat-card{
  background:var(--white);border-radius:var(--radius);padding:22px;
  box-shadow:var(--shadow);cursor:pointer;
  display:flex;gap:16px;align-items:flex-start;
  transition:transform .15s, box-shadow .15s;
  border:1.5px solid transparent;
}
.cat-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:var(--ice-2);}
.cat-icon{
  width:52px;height:52px;border-radius:14px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;font-size:24px;
}
.cat-card h3{font-size:19px;margin-bottom:4px;}
.cat-card p{color:var(--frost-dark);font-size:14px;line-height:1.4;}
/* На широком экране четыре раздела в ряд; правило ниже базового, иначе его перебивает 2-колоночное */
@media(min-width:1000px){.category-grid{grid-template-columns:repeat(4,minmax(0,1fr));}.cat-card{flex-direction:column;gap:12px;}}

/* ---------- generic page header ---------- */
.page-head{padding:28px 0 18px;}
/* Шапка раздела с фотографией: снимок + затемнение, текст белый; кнопка размещения остаётся синей */
.section-hero{background-color:var(--rink-black);background-size:cover;background-position:center 35%;color:#fff;margin-bottom:8px;}
.section-hero{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%);}
.sh-athlete{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-athlete.webp');}
.sh-team{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-team.webp');}
.sh-ice{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-ice.webp');}
.sh-market{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-market.webp');}
/* Телефоны: фото разделов в 1100 px вместо 1800 (06.10.2026, в 2 раза легче) */
@media(max-width:899px){.sh-athlete{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-athlete-m.webp');}.sh-team{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-team-m.webp');}.sh-ice{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-ice-m.webp');}.sh-market{background-image:linear-gradient(180deg, var(--rink-black) 0%, rgba(11,14,20,.10) 32%, rgba(11,14,20,0) 60%, rgba(11,14,20,.25) 100%), linear-gradient(95deg, rgba(11,14,20,.86) 0%, rgba(11,14,20,.62) 36%, rgba(11,14,20,.18) 66%, rgba(11,14,20,.04) 100%), url('/icons/hero-market-m.webp');}}
.section-hero .page-head{padding:56px 0 46px;}
.section-hero{min-height:300px;display:flex;align-items:center;}
.section-hero > .wrap{width:100%;}
@media(max-width:899px){.section-hero{min-height:0;}}
.section-hero .page-head h2{color:#fff;font-size:32px;text-shadow:0 2px 14px rgba(0,0,0,.65), 0 1px 2px rgba(0,0,0,.6);}
.section-hero .page-head .sub{color:#E6EEFF;font-size:15px;text-shadow:0 1px 8px rgba(0,0,0,.6), 0 1px 2px rgba(0,0,0,.5);}
.section-hero .eyebrow{color:#C9DAFF;text-shadow:0 1px 6px rgba(0,0,0,.6);}
/* Название раздела — прямо на фото (с тенью), описание — на тёмной полупрозрачной плашке цвета
   шапки сайта: «стеклянная» подложка сливалась со льдом, сплошная синяя была слишком яркой.
   Описание (.guest-hint) в шапках видят все, не только гости. */
.section-hero .sh-panel{max-width:660px;}
.section-hero .sh-panel .guest-hint{display:block;margin-top:14px;padding:12px 16px;border-radius:12px;background:rgba(11,14,20,.68);color:#F1F4F8;font-size:14px;line-height:1.55;max-width:none;box-shadow:0 8px 24px rgba(0,0,0,.25);}
@media(max-width:899px){.section-hero .sh-panel .guest-hint{font-size:13.5px;padding:10px 14px;margin-top:10px;}}
@media(max-width:899px){.section-hero .page-head{padding:26px 0 22px;}.section-hero .page-head h2{font-size:26px;}}
.page-head h2{font-size:28px;margin-bottom:4px;}
.page-head .sub{color:var(--frost-dark);font-size:14.5px;}
.page-head-row{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;}

/* ---------- filter bar ---------- */
.filter-bar{
  display:flex;flex-wrap:wrap;gap:10px;padding:4px 0 18px;
}
/* ---- Фильтр категорий «Рынка» ----
   Два разных устройства для двух ширин экрана, один и тот же выбор (activeMarketGroup /
   activeMarketLeaf) и одно и то же состояние.
   Десктоп (≥900px): строка чипов «Все» + группы. У группы с подкатегориями на чипе стрелка,
   и нажатие раскрывает меню прямо под этим чипом — «Вся группа» и подкатегории. Отдельного
   списка категорий рядом с «Городом» нет: раньше он стоял там вторым чипом, дублировал «Все»
   и читался как часть фильтра города.
   Телефон (<900px): чипов нет вообще — десять групп в столбик занимали шесть строк, а
   прокручивать строку вбок неочевидно. Вместо них один выпадающий список со всеми группами
   и подкатегориями, он же показывает текущий выбор. */
.market-count{margin-left:auto;font-size:12px;color:var(--frost-dark);white-space:nowrap;align-self:center;}
/* Стрелка-подсказка у правого края строки категорий */
.cats-strip-wrap{position:relative;}
@media(max-width:899px){
  .cats-strip-wrap{display:none;}
}
@media(min-width:900px){
  .market-cat-select{display:none;}
}
/* Чип группы с подкатегориями: стрелка как у выпадающих списков, чтобы было видно,
   что нажатие раскроет меню, а не просто отфильтрует. */
.cats-strip .chip-select.has-menu{
  padding-right:34px;
  background-image:var(--select-arrow);background-repeat:no-repeat;
  background-position:right 13px center;background-size:11px 7px;
}
.cats-strip .chip-select.has-menu.on{background-image:var(--select-arrow-light);}
.cats-strip .chip-select.on{background-color:var(--rink-black);color:var(--white);border-color:var(--rink-black);}
/* Меню подкатегорий под чипом. Лежит вне прокручиваемой строки (иначе обрезалось бы её
   overflow), позиция считается скриптом от нажатого чипа. */
.chip-menu{
  position:absolute;z-index:200;
  background:var(--white);border:1.5px solid var(--ice-2);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-lg);padding:6px;min-width:210px;
}
.chip-menu[hidden]{display:none;}
.chip-menu-item{
  display:block;width:100%;text-align:left;padding:9px 12px;border-radius:8px;
  font-size:13.5px;color:var(--rink-black);white-space:nowrap;
}
.chip-menu-item:hover{background:var(--ice);}
.chip-menu-item.on{background:var(--ice);font-weight:600;}
.chip-menu-item.group{color:var(--frost-dark);border-bottom:1px solid var(--ice-2);border-radius:8px 8px 0 0;margin-bottom:4px;}
.chip-menu-item.group.on{color:var(--rink-black);}
.cats-strip-next{
  display:none;
  position:absolute;top:2px;right:0;width:34px;height:38px;
  align-items:center;justify-content:flex-end;
  font-size:24px;line-height:1;color:var(--frost-dark);
  background:linear-gradient(to right, rgba(241,244,248,0) 0%, var(--ice) 55%);
}
.cats-strip-next.show{display:flex;}
@media(max-width:899px){
  /* «Рынок» на телефоне: поиск во всю ширину, под ним категория и город в два столбца,
     ниже — ползунок цены. Бокового свайпа нет. */
  .market-row2{flex-wrap:wrap;padding-bottom:10px;}
  .market-row2 .chip-search{flex:1 1 100%;max-width:none;}
  .market-row2 .market-cat-select,.market-row2 #f-market-city{flex:1 1 calc(50% - 4px);min-width:0;}
  .market-row2 .market-count{flex:1 1 100%;margin-left:0;text-align:right;}
}
.chip-select{
  flex-shrink:0;
  background:var(--white);border:1.5px solid var(--ice-2);border-radius:999px;
  padding:9px 16px;font-size:13.5px;font-weight:500;color:var(--rink-black);
  min-width:120px;
}
.chip-select:focus{border-color:var(--rink-blue);}

/* Нативный <select> браузер рисует системным виджетом: прямоугольная рамка вместо нашего
   скругления, своя стрелка вплотную к правому краю и системный шрифт вместо шрифта сайта.
   Отключаем нативный вид и рисуем стрелку фоном, отступив от края.
   Правило именно для select: класс .chip-select висит ещё и на кнопках-чипах категорий
   на «Рынке» — им стрелка не нужна. */
select.chip-select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  font-family:var(--font-body);
  padding-right:38px;   /* место под стрелку, чтобы длинный текст на неё не наезжал */
  background-image:var(--select-arrow);
  background-repeat:no-repeat;
  background-position:right 14px center;
  background-size:11px 7px;
}
select.chip-select::-ms-expand{display:none;}
/* Пункты раскрытого списка Windows/Chrome рисует системным шрифтом — задаём явно. */
select.chip-select option{
  font-family:var(--font-body);font-size:14px;
  color:var(--rink-black);background:var(--white);
}

/* ---------- двойной ползунок цены (рынок) ---------- */
.price-range{max-width:420px;padding:0 2px 18px;}
.price-range-label{font-size:13.5px;font-weight:600;color:var(--frost-dark);margin-bottom:10px;}
.price-range-track{position:relative;height:28px;}
/* Серая дорожка во всю ширину, поверх неё синяя заливка выбранного диапазона */
.price-range-track::before{
  content:'';position:absolute;left:0;right:0;top:12px;height:4px;border-radius:2px;
  background:var(--ice-2);
}
.price-range-fill{position:absolute;top:12px;height:4px;border-radius:2px;background:var(--rink-blue);}
/* Оба <input type=range> лежат друг на друге во всю ширину. События на самих дорожках
   выключены — иначе верхний input перехватывал бы клики по бегунку нижнего и один из
   бегунков нельзя было бы схватить. Включаем события точечно, только на бегунках. */
.price-range-track input[type=range]{
  position:absolute;left:0;top:0;width:100%;height:28px;margin:0;
  -webkit-appearance:none;appearance:none;background:transparent;pointer-events:none;
}
.price-range-track input[type=range]:focus{outline:none;}
.price-range-track input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;pointer-events:auto;
  width:18px;height:18px;border-radius:50%;background:var(--white);
  border:2px solid var(--rink-blue);cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,0.2);
}
.price-range-track input[type=range]::-moz-range-thumb{
  pointer-events:auto;
  width:18px;height:18px;border-radius:50%;background:var(--white);
  border:2px solid var(--rink-blue);cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,0.2);
}
@media(max-width:899px){
  /* Компактная мобильная версия. Автозум iOS при фокусе на поле мельче 16px отключён
     через viewport (maximum-scale=1 ставится скриптом только на iOS — пинч-зум там всё
     равно остаётся, а Android не трогаем), поэтому поля и фильтры можно держать мелкими. */
  .page-head{padding:18px 0 12px;}
  .page-head h2{font-size:23px;}
  .page-head .sub{font-size:13px;}
  .page-head-row .btn{padding:10px 16px;font-size:13.5px;}
  .eyebrow{font-size:10.5px;}
  .section-pad{padding:22px 0;}
  .filter-bar{gap:8px;padding:2px 0 12px;}
  .chip-select{padding:8px 12px;font-size:13px;min-width:0;}
  select.chip-select{padding-right:30px;background-position:right 11px center;}
  .chip-search{min-width:0;flex:1 1 140px;}
  .multi-select-wrap .chip-select{padding-right:30px;}
  .price-range{padding-bottom:12px;}
  .price-range-label{font-size:12.5px;margin-bottom:6px;}
  .field input,.field select,.field textarea{font-size:14px;padding:10px 12px;}
  .btn{padding:11px 18px;font-size:14px;}
  .btn-sm{padding:8px 13px;font-size:12.5px;}
  /* Бегунок 18px пальцем почти не поймать — на телефоне крупнее */
  .price-range-track input[type=range]::-webkit-slider-thumb{width:26px;height:26px;}
  .price-range-track input[type=range]::-moz-range-thumb{width:26px;height:26px;}
  .price-range-track{height:32px;}
  .price-range-track::before,.price-range-fill{top:14px;}
}

.multi-select-wrap{position:relative;flex-shrink:0;}
/* Фильтр «Дата» — не <select>, а своя кнопка с панелью галочек. Даём ей ту же стрелку и
   то же выравнивание текста, чтобы в ряду фильтров она не выбивалась из общего вида. */
.multi-select-wrap .chip-select{
  cursor:pointer;text-align:left;
  padding-right:38px;
  background-image:var(--select-arrow);
  background-repeat:no-repeat;
  background-position:right 14px center;
  background-size:11px 7px;
}
.multi-select-panel{
  position:fixed;z-index:200;
  background:var(--white);border:1.5px solid var(--ice-2);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-lg);padding:8px;min-width:190px;max-height:260px;overflow-y:auto;
}
.multi-select-option{
  display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;
  font-size:13.5px;color:var(--rink-black);cursor:pointer;white-space:nowrap;
}
.multi-select-option:hover{background:var(--ice);}
.multi-select-option input{width:15px;height:15px;accent-color:var(--rink-blue);flex-shrink:0;}
.multi-select-clear{
  width:100%;margin-top:6px;padding:8px;border-top:1px solid var(--ice-2);
  font-size:12.5px;font-weight:600;color:var(--puck-red);text-align:center;
}
.multi-select-clear:hover{background:rgba(229,56,59,0.06);border-radius:8px;}

/* ---------- cards ---------- */
/* minmax(0,1fr) вместо 1fr: обычный 1fr не даёт колонке стать уже минимальной ширины
   содержимого, и на узких экранах (320 точек) карточки объявлений раздували сетку шире
   экрана. С minmax(0,…) колонка сжимается до ширины контейнера, а текст внутри переносится. */
.card-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;}
@media(min-width:680px){.card-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
/* cols-3 больше не используется: «Рынок» делил ширину на три колонки, и карточка товара
   получалась заметно уже объявлений в других разделах. Теперь везде одна сетка. */

.ad-card{
  background:var(--white);border-radius:var(--radius);padding:18px;
  box-shadow:var(--shadow);border:1.5px solid transparent;
  transition:transform .15s, box-shadow .15s;
  display:flex;flex-direction:column;gap:12px;
}
.ad-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--ice-2);}
/* wrap — на узких экранах (320 точек) строка «бейдж + рейтинг + иконки владельца»
   не помещалась и вылезала за край карточки */
.ad-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;}
.badge{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:11px;font-weight:700;letter-spacing:0.5px;
  padding:5px 10px;border-radius:6px;text-transform:uppercase;
}
.badge-blue{background:rgba(47,111,237,0.12);color:var(--rink-blue-dim);}
.badge-red{background:rgba(229,56,59,0.10);color:var(--puck-red);}
.ad-title{font-family:var(--font-display);font-size:19px;font-weight:600;}
.ad-meta{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:13.5px;color:var(--frost-dark);}
.ad-meta span{display:flex;align-items:center;gap:5px;}
.ad-price{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:17px;color:var(--rink-black);
  margin-top:2px;
}
.ad-desc{font-size:13.5px;color:var(--frost-dark);line-height:1.45;}
/* В превью описание подрезается тремя строками: иначе объявление с длинным рассказом
   растягивало карточку на пол-экрана и соседние объявления уезжали вниз. Целиком текст
   виден в окне, которое открывает «Подробнее». */
.ad-desc.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.ad-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:2px;}
.rating-mini{display:flex;align-items:center;gap:5px;font-size:13px;font-weight:600;color:var(--rink-black);}
.rating-mini .stars{color:#F5A623;font-size:13px;letter-spacing:1px;}

/* Карточка товара построена на том же .ad-card, что и объявления в остальных разделах:
   те же отступы, тот же заголовок, та же цена и тот же блок мета-данных. Раньше у неё была
   собственная вёрстка — мельче шрифт, теги-плашки вместо строки мета, — и «Рынок» выглядел
   чужим разделом. Отличие осталось одно, по делу: сверху фотография во всю ширину. */
.product-card{overflow:hidden;cursor:pointer;}
.product-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--ice-2);}
.product-img{
  /* Отрицательные поля гасят внутренний отступ карточки — фотография идёт от края до края,
     а текст под ней остаётся на общей сетке. */
  height:190px;margin:-18px -18px 0;
  display:flex;align-items:center;justify-content:center;font-size:44px;
  background:var(--white);position:relative;
}
/* Фотография показывается целиком на белом фоне — так же, как это делают маркетплейсы.
   Пробовали заполнять превью размытой копией самого снимка: у клюшки на белом фоне
   размытие читалось как отражение под товаром, поэтому вернулись к простому варианту. */
.product-img img{display:block;width:100%;height:100%;object-fit:contain;}
.photo-count-badge{
  position:absolute;bottom:8px;right:8px;background:rgba(11,14,20,0.72);color:#fff;
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:11px;font-weight:600;padding:3px 8px;border-radius:999px;
}
.product-gallery-main{
  height:220px;width:100%;border-radius:14px;margin-bottom:10px;
  background:var(--ice);display:flex;align-items:center;justify-content:center;font-size:56px;overflow:hidden;
}
.product-gallery-main img{width:100%;height:100%;object-fit:contain;display:block;cursor:zoom-in;}
/* Полноэкранный просмотр фото */
.lightbox{position:fixed;inset:0;z-index:300;background:rgba(5,7,12,0.94);display:flex;align-items:center;justify-content:center;padding:16px;}
.lightbox[hidden]{display:none;}
.lightbox img{max-width:100%;max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);object-fit:contain;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,.6);cursor:pointer;user-select:none;-webkit-user-select:none;}
.lb-close{position:absolute;top:14px;right:14px;width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:18px;display:flex;align-items:center;justify-content:center;}
.lb-close:hover{background:rgba(255,255,255,.26);}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:64px;border-radius:12px;background:rgba(255,255,255,.12);color:#fff;font-size:34px;line-height:1;display:flex;align-items:center;justify-content:center;}
.lb-nav:hover{background:rgba(255,255,255,.24);}
.lb-prev{left:10px;}
.lb-next{right:10px;}
.lightbox.single .lb-nav,.lightbox.single .lb-count{display:none;}
.lb-count{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);color:#fff;font-size:13px;background:rgba(255,255,255,.14);padding:5px 12px;border-radius:999px;font-variant-numeric:tabular-nums;}
@media(max-width:699px){.lb-nav{display:none;}.lightbox{padding:8px;}.lightbox img{border-radius:6px;}}
.product-gallery-thumbs{display:none;gap:8px;margin-bottom:14px;}
.gallery-thumb-btn{
  width:52px;height:52px;border-radius:8px;overflow:hidden;border:2px solid transparent;flex-shrink:0;padding:0;
}
.gallery-thumb-btn img{width:100%;height:100%;object-fit:cover;display:block;}
.gallery-thumb-btn.active{border-color:var(--rink-blue);}
.product-brand{font-size:13px;color:var(--frost-dark);}

/* ---------- section intro cards on home ---------- */
.mini-steps{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px;}
.mini-steps .step{
  background:var(--white);border-radius:999px;padding:10px 18px 10px 14px;
  display:flex;align-items:center;gap:8px;font-weight:600;font-size:13.5px;
  box-shadow:var(--shadow);
}
.mini-steps .step .n{
  width:22px;height:22px;border-radius:50%;background:var(--rink-black);color:var(--white);
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:11px;display:flex;align-items:center;justify-content:center;
}
.partner-card{
  flex-direction:row;align-items:center;gap:16px;cursor:pointer;text-decoration:none;color:inherit;
  /* wrap — на узких экранах кнопка «Перейти» не помещалась в строку с иконкой и текстом */
  flex-wrap:wrap;
}
.partner-card-icon{
  width:56px;height:56px;border-radius:12px;flex-shrink:0;
  background:linear-gradient(135deg, rgba(47,111,237,0.14), rgba(229,56,59,0.10));
  display:flex;align-items:center;justify-content:center;font-size:26px;
}
.cabinet-grid{display:grid;grid-template-columns:1fr;gap:16px;align-items:start;}
/* Ячейка сетки по умолчанию не сжимается уже своего содержимого (min-width:auto).
   Из-за этого на телефоне колонка кабинета раздувалась до 446px при экране 375,
   и всё содержимое — баннер, имя, «О себе», плитки статистики — уезжало за правый край.
   min-width:0 снимает это ограничение и позволяет колонке уместиться в экран. */
.cabinet-grid > *{min-width:0;}
@media(min-width:900px){.cabinet-grid{grid-template-columns:2fr 1fr;}}
.cabinet-sidebar{display:flex;flex-direction:column;gap:16px;}
/* Нижний блок боковой колонки растягивается до низа блока с личной информацией: высоту колонки
   выставляет скрипт (alignCabinetSidebar) по высоте .cabinet-profile, иначе справа оставался
   рваный край. Если содержимое колонки выше — она просто растёт дальше. */
@media(min-width:900px){.cabinet-sidebar > .cabinet-panel{margin-bottom:0;}.cabinet-sidebar > .cabinet-panel:last-child{flex:1 1 auto;}} /* отступы даёт gap, иначе последний блок не доходил до низа на 16px */
@media(min-width:900px){.cabinet-sidebar{position:sticky;top:84px;}}
/* Блок «Скидки у партнёров» есть и в основной колонке, и в боковой. На широком экране
   показываем его в боковой, на узком — в основной: иначе при схлопывании колонок
   в одну он выводился дважды подряд. */
@media(max-width:899px){.cabinet-sidebar{display:none;}}
@media(min-width:900px){.partners-in-main,.favorites-in-main{display:none;}}
.partner-discount-card{border:1.5px solid var(--ice-2);border-radius:var(--radius-sm);padding:14px;}
.partner-discount-top{display:flex;align-items:center;gap:10px;}
.promo-code-box{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  border:1.5px dashed var(--rink-blue);border-radius:10px;padding:9px 12px;background:rgba(47,111,237,0.05);
}
.promo-code-label{font-size:10.5px;color:var(--frost-dark);text-transform:uppercase;letter-spacing:0.4px;}
.promo-code-value{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:15px;letter-spacing:1.5px;color:var(--rink-black);}
.promo-copy-btn{font-size:11.5px;font-weight:700;color:var(--rink-blue);background:var(--white);padding:6px 10px;border-radius:7px;flex-shrink:0;}
.promo-copy-btn:hover{background:rgba(47,111,237,0.12);}


/* ---------- modal ---------- */
.overlay{
  position:fixed;inset:0;background:rgba(11,14,20,0.55);z-index:100;
  display:none;align-items:flex-end;justify-content:center;
  backdrop-filter:blur(2px);
}
.overlay.active{display:flex;}
@media(min-width:700px){.overlay{align-items:center;}}
/* Полоса прокрутки окон (06.10.2026): тонкая, скруглённая, без серой дорожки и не залезает на
   скруглённые углы. Chrome/Safari — ::-webkit-scrollbar; Firefox — scrollbar-width/color (в Chrome
   они отключили бы ::-webkit-scrollbar, поэтому только там, где его нет) */
.modal::-webkit-scrollbar{width:12px;}
.modal::-webkit-scrollbar-track{background:transparent;margin:18px 0;}
.modal::-webkit-scrollbar-thumb{background:rgba(91,100,120,.28);border-radius:12px;border:4px solid transparent;background-clip:padding-box;}
.modal::-webkit-scrollbar-thumb:hover{background-color:rgba(91,100,120,.5);}
@supports not selector(::-webkit-scrollbar){ .modal{scrollbar-width:thin;scrollbar-color:rgba(91,100,120,.35) transparent;} }
.modal{
  background:var(--white);border-radius:20px 20px 0 0;
  width:100%;max-width:560px;overflow-y:auto;
  /* 90vh на телефоне считается от экрана БЕЗ адресной строки браузера, а окно прижато
     к низу — верх вместе с шапкой и крестиком уезжал за край экрана. dvh — высота
     видимой области с учётом панелей браузера; vh остаётся запасным значением. */
  max-height:90vh;max-height:90dvh;
  /* Дойдя до конца содержимого, прокрутка не передаётся странице под окном */
  overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  /* Сверху отступа нет: его даёт сама шапка (.modal-head). Раньше padding-top 22px гасился
     у шапки отрицательным margin-top, но sticky-элемент не может подняться выше content-box
     прокручиваемого контейнера — шапку прижимало на 22px ниже, и она наезжала на верх
     содержимого (скруглённый угол карточки объявления был срезан на 6px). */
  padding:0 22px 28px;
  animation:slideup .22s ease;
}
/* Пока открыто окно, страница под ним не прокручивается. overflow:hidden на body iOS Safari
   игнорирует, поэтому body фиксируется целиком на текущей позиции (top ставит скрипт),
   а при закрытии позиция восстанавливается. */
body.modal-open{position:fixed;left:0;right:0;width:100%;overflow:hidden;}
@media(min-width:700px){.modal{border-radius:20px;}}
@keyframes slideup{from{transform:translateY(30px);opacity:0;}to{transform:translateY(0);opacity:1;}}
/* Шапка остаётся на месте, пока содержимое окна прокручивается. Раньше она уезжала вверх
   вместе с текстом, и в длинном списке пропадали и заголовок, и крестик — закрыть окно
   можно было только нажав мимо него. */
.modal-head{
  position:sticky;top:0;z-index:3;
  display:flex;justify-content:space-between;align-items:center;
  margin:0 -22px 16px;padding:18px 22px 14px;
  background:var(--white);border-radius:20px 20px 0 0;
  border-bottom:1px solid var(--ice-2);
}
.modal-head h3{font-size:20px;}
.modal-head-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;}
.share-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:999px;background:var(--ice-2);font-size:13px;font-weight:600;color:var(--rink-black);white-space:nowrap;}
.share-btn .ico{width:15px;height:15px;}
.share-btn:hover{background:var(--ice);}
.close-x{
  width:32px;height:32px;border-radius:50%;background:var(--ice-2);
  display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;
}
.field{margin-bottom:14px;}
.modal .field{margin-bottom:18px;}
/* На компьютере все окна одной ширины — 640 px, как «Новая команда» (решение Саши 06.10.2026).
   !important перекрывает узкие style="max-width:…" у отдельных окон в разметке. */
@media(min-width:700px){.overlay .modal{max-width:640px !important;}}   /* в окнах форм — чуть больше воздуха между полями (06.10.2026) */
.field label{display:block;font-size:12.5px;font-weight:600;color:var(--frost-dark);margin-bottom:6px;}
.field input,.field select,.field textarea{
  width:100%;padding:12px 14px;border:1.5px solid var(--ice-2);border-radius:10px;
  font-size:14.5px;font-family:inherit;background:var(--ice);
}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--rink-blue);background:var(--white);}
/* iPhone рисует поле даты нативным виджетом: своя минимальная ширина (вылезает из колонки
   в .field-row и наезжает на соседнее поле), своя высота и текст по центру (скриншот Саши
   02.10, «Найти соперника»). Снимаем нативный вид — поле как обычное текстовое. */
.field input[type="date"],.field input[type="time"]{
  -webkit-appearance:none;appearance:none;display:block;min-width:0;max-width:100%;
  min-height:calc(1.15em + 27px);line-height:1.15;text-align:left;
}
.field input[type="date"]::-webkit-date-and-time-value,.field input[type="time"]::-webkit-date-and-time-value{text-align:left;margin:0;min-height:1.2em;}
/* Селекты в формах — та же проблема нативного виджета, что и в фильтрах. Блок стоит ниже
   правил выше не случайно: там фон задан сокращением background, которое обнуляет
   background-image, поэтому стрелку задаём после них и отдельно от цвета фона. */
.field select{
  -webkit-appearance:none;-moz-appearance:none;appearance:none;
  padding-right:36px;
  background-image:var(--select-arrow);
  background-repeat:no-repeat;
  background-position:right 13px center;
  background-size:11px 7px;
}
.field select::-ms-expand{display:none;}
.field select option,.field select optgroup{
  font-family:var(--font-body);font-size:14px;
  color:var(--rink-black);background:var(--white);
}

/* ---------- скругление самого выпадающего списка ----------
   Раскрытый список вариантов рисует браузер, а не страница: обычным CSS до него не дотянуться,
   и поэтому он выглядит прямоугольным. Механизм customizable select (`appearance:base-select`)
   отдаёт список странице — тогда его можно оформить как остальные всплывающие панели сайта.
   Поддерживают Chrome и Edge. Safari и Firefox правило игнорируют и показывают свой
   стандартный список — то есть это чистое улучшение, ничего не ломается. На телефонах список
   в любом случае рисует операционная система, там оформление не меняется.
   Радиус берём тот же, что у панели фильтра «Дата», чтобы всплывающие окна выглядели одинаково. */
@supports (appearance: base-select){
  select.chip-select,.field select{appearance:base-select;}
  /* base-select добавляет собственную стрелку — прячем её, свою мы уже нарисовали фоном */
  select.chip-select::picker-icon,.field select::picker-icon{display:none;}

  select.chip-select::picker(select),.field select::picker(select){
    appearance:base-select;
    background:var(--white);
    border:1.5px solid var(--ice-2);
    border-radius:var(--radius-sm);
    box-shadow:var(--shadow-lg);
    padding:8px;margin-top:6px;min-width:190px;
    max-height:280px;overflow-y:auto;
    font-family:var(--font-body);
    /* Список всегда раскрывается ВНИЗ, под полем. По умолчанию браузер переворачивает его
       вверх, когда снизу мало места, — при заполнении формы на десктопе один и тот же
       список открывался то вниз, то вверх, и попасть в нужный пункт было неудобно.
       position-area прижимает список под поле, position-try-fallbacks:none запрещает
       переворот. Высота ограничена, поэтому длинный список прокручивается внутри себя,
       а не уезжает за край экрана. */
    position-area: block-end span-inline-end;
    position-try-fallbacks: none;
  }
  select.chip-select option,.field select option{
    padding:7px 10px;border-radius:8px;
    font-size:13.5px;color:var(--rink-black);cursor:pointer;
    /* Явный сброс обязателен: text-transform и letter-spacing наследуются от optgroup,
       и пункты внутри групп («Ловушка», «Блин») рисовались капсом, а пункты без группы
       («Сумки», «Аксессуары») — обычными буквами. В одном списке получались два разных
       начертания. */
    text-transform:none;letter-spacing:normal;font-weight:400;
  }
  /* Галочку у выбранного пункта base-select рисует сам — вместо неё подсвечиваем фоном */
  select.chip-select option::checkmark,.field select option::checkmark{display:none;}
  select.chip-select option:hover,.field select option:hover{background:var(--ice);}
  select.chip-select option:checked,.field select option:checked{background:var(--ice);font-weight:600;}
  /* Заголовок группы отличается размером, насыщенностью и цветом — капс для этого
     не нужен, а читается он заметно хуже. */
  .field select optgroup{
    font-size:11.5px;font-weight:700;
    color:var(--frost-dark);padding:8px 10px 4px;
  }
}
.input-prefix-group{
  display:flex;align-items:stretch;
  border:1.5px solid var(--ice-2);border-radius:10px;background:var(--ice);overflow:hidden;
}
.input-prefix-group:focus-within{border-color:var(--rink-blue);background:var(--white);}
.input-prefix-group .input-prefix{
  display:flex;align-items:center;
  padding:0 0 0 14px;font-size:13.5px;color:var(--frost-dark);font-family:var(--font-num);font-variant-numeric:tabular-nums;white-space:nowrap;
}
.input-prefix-group input{
  border:none !important;background:transparent !important;padding:12px 14px 12px 3px !important;flex:1;min-width:0;
}
.password-field-wrap{position:relative;}
.password-field-wrap input{padding-right:44px !important;}
.password-toggle-btn{
  position:absolute;top:0;right:0;bottom:0;width:40px;
  display:flex;align-items:center;justify-content:center;
  color:var(--frost-dark);font-size:16px;
}
.password-toggle-btn:hover{color:var(--rink-black);}
.photo-preview-row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
.photo-thumb{position:relative;width:66px;height:66px;border-radius:10px;overflow:hidden;border:1.5px solid var(--ice-2);background:var(--ice);flex-shrink:0;}
.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.photo-thumb-remove{
  position:absolute;top:3px;right:3px;width:18px;height:18px;border-radius:50%;
  background:rgba(11,14,20,0.72);color:#fff;font-size:10px;display:flex;align-items:center;justify-content:center;
}
/* wrap — чтобы на узком экране пара «широкая кнопка + узкая» переносилась,
   а не вылезала за правый край. min-width:0 позволяет полям сжиматься:
   без него поле не становится уже своего содержимого и распирает строку. */
.field-row{display:flex;gap:10px;flex-wrap:wrap;}
.field-row .field{flex:1;min-width:0;}
.field-row > .btn{min-width:0;}
.chip-toggle-row{display:flex;flex-wrap:wrap;gap:8px;}
.chip-toggle{
  padding:9px 14px;border-radius:999px;border:1.5px solid var(--ice-2);font-size:13px;font-weight:600;
}
.chip-toggle.on{background:var(--rink-black);color:var(--white);border-color:var(--rink-black);}
/* Фильтр по разделу над списками кабинета: те же чипы, но компактнее, со счётчиком */
.cab-filter{margin:0 0 6px;}
.chip-toggle.chip-sm{padding:6px 11px;font-size:12px;}
.chip-toggle .chip-count{margin-left:5px;opacity:.65;font-family:var(--font-num);font-variant-numeric:tabular-nums;}
.my-ad-row .my-ad-actions:empty{display:none;}

/* profile modal */
.profile-head{display:flex;gap:14px;align-items:center;margin-bottom:16px;}
/* Текстовая колонка рядом с аватаром обязана сжиматься (min-width:0), иначе длинное имя или
   город без пробелов раздвигали окно профиля шире экрана телефона (403 px при 375). Слово,
   которое не влезает целиком, переносится по буквам. */
.profile-head > div:not(.avatar){min-width:0;flex:1 1 auto;}
.profile-name,.profile-sub,.about-box{overflow-wrap:anywhere;}
.avatar{
  width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,var(--rink-blue),var(--steel));
  display:flex;align-items:center;justify-content:center;color:var(--white);
  font-family:var(--font-display);font-size:22px;font-weight:600;flex-shrink:0;
}
.profile-name{font-family:var(--font-display);font-size:20px;font-weight:600;}
.profile-sub{font-size:13.5px;color:var(--frost-dark);}
.stars-lg{color:#F5A623;font-size:18px;letter-spacing:2px;}
.rating-count{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:13px;color:var(--frost-dark);}
.about-box{background:var(--ice);border-radius:12px;padding:14px;font-size:14px;line-height:1.5;color:var(--rink-black);margin-bottom:16px;}
.contact-row{display:flex;gap:10px;}
.report-link{
  display:block;text-align:center;font-size:13px;color:var(--frost-dark);margin-top:14px;font-weight:500;
}
.report-link:hover{color:var(--puck-red);}

/* ---------- cabinet ---------- */
.role-pick{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:20px;}
.role-card{
  background:var(--white);border:2px solid var(--ice-2);border-radius:var(--radius);
  padding:20px 14px;text-align:center;
}
.role-card.selected{border-color:var(--rink-blue);background:rgba(47,111,237,0.05);}
.role-card:focus-visible{outline:2px solid var(--rink-blue);outline-offset:2px;}
.role-card .ic{font-size:30px;margin-bottom:8px;}
.role-card h4{font-size:14.5px;margin-bottom:4px;}
.role-card p{font-size:11.5px;color:var(--frost-dark);line-height:1.35;}

.cabinet-panel{
  background:var(--white);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);margin-bottom:16px;
}
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px;}
.stat-box{background:var(--ice);border-radius:12px;padding:14px 10px;text-align:center;}
.stat-box .num{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:20px;}
.stat-box .lab{font-size:10.5px;color:var(--frost-dark);font-weight:600;text-transform:uppercase;letter-spacing:0.4px;margin-top:2px;}
.notif-item{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--ice-2);align-items:flex-start;}
.notif-item:last-child{border-bottom:none;}
.notif-dot{width:8px;height:8px;border-radius:50%;background:var(--puck-red);margin-top:6px;flex-shrink:0;}
/* Уже просмотренные уведомления остаются в списке, но перестают притягивать взгляд */
.notif-dot.is-read{background:var(--ice-2);}
.notif-item .txt{font-size:13.5px;}
.notif-item .time{font-size:11.5px;color:var(--frost-dark);}

/* owner controls (edit/delete) */
.owner-controls{display:flex;gap:6px;flex-shrink:0;}
.icon-sm-btn{width:28px;height:28px;border-radius:8px;background:var(--ice-2);font-size:12.5px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .12s,color .12s;}
.icon-sm-btn:hover{background:var(--rink-black);color:#fff;}
.icon-sm-btn.danger:hover{background:var(--puck-red);}
.product-owner-controls{position:absolute;top:10px;right:10px;display:flex;gap:6px;z-index:2;}
.product-fav-wrap{position:absolute;top:10px;left:10px;z-index:2;}
.fav-btn{font-size:15px;color:var(--frost-dark);}
.fav-btn.active{color:#F5A623;background:rgba(245,166,35,0.14);}
.fav-btn:hover{background:rgba(245,166,35,0.14);color:#F5A623;}
.product-owner-controls .icon-sm-btn{background:rgba(255,255,255,0.92);box-shadow:var(--shadow);}
.product-fav-wrap .icon-sm-btn{background:rgba(255,255,255,0.92);box-shadow:var(--shadow);}
.product-card{position:relative;}
.my-ad-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--ice-2);}
.my-ad-row:last-child{border-bottom:none;}
/* Избранное (06.10.2026): карточка как «Свежие объявления» на главной — метка раздела, название,
   город, кнопки справа сверху; раньше строка с длинной плашкой раздела и висящими кнопками */
.fav-item{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:12px 12px 12px 14px;border-radius:14px;background:var(--ice);border:1px solid var(--ice-2);transition:background .15s,border-color .15s;}
.fav-item + .fav-item{margin-top:8px;}
.fav-item.row-openable:hover{background:var(--white);border-color:#C9D3E3;}
.fav-item.gone{opacity:.7;}
.fav-main{min-width:0;}
.fav-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.fav-item .title{font-weight:600;font-size:14.5px;line-height:1.3;margin:7px 0 3px;overflow-wrap:anywhere;}
.fav-item .meta{font-size:12.5px;color:var(--frost-dark);}
.fav-item .owner-controls{flex-shrink:0;}
.my-ad-row .title{font-weight:600;font-size:14px;margin:3px 0 2px;}
.my-ad-row .meta{font-size:12px;color:var(--frost-dark);}
.ad-stats-line{font-family:var(--font-num);font-variant-numeric:tabular-nums;margin-top:3px;color:var(--rink-blue-dim)!important;}
.deal-row{padding:14px 0;border-bottom:1px solid var(--ice-2);}
.deal-row:last-child{border-bottom:none;}
.deal-row .deal-title{font-weight:600;font-size:14px;margin-bottom:2px;}
.deal-row .deal-meta{font-size:12px;color:var(--frost-dark);margin-bottom:8px;}
.deal-status{font-size:13px;color:var(--frost-dark);}
.star-picker{display:flex;gap:4px;margin-top:6px;}
.star-pick-btn{
  font-size:22px;line-height:1;color:var(--ice-2);transition:color .1s,transform .1s;
}
.star-pick-btn:hover{transform:scale(1.12);}
/* Подсветка «до n звёзд» при наведении и после выбора; отправка — только по кнопке «Отправить».
   Раньше случайный тап ставил 1★ без возможности исправить. */
.star-picker{flex-wrap:wrap;align-items:center;}
.star-picker .star-pick-btn.lit{color:#F5A623;}
.star-picker:hover .star-pick-btn{color:#F5A623;}
.star-picker .star-pick-btn:hover ~ .star-pick-btn{color:var(--ice-2);}
.star-confirm{display:flex;gap:8px;align-items:center;flex:1 1 100%;margin-top:8px;font-size:13px;color:var(--frost-dark);}
.response-status{font-size:12.5px;color:var(--rink-blue-dim);font-weight:600;margin-bottom:10px;padding:8px 10px;background:rgba(47,111,237,0.06);border-radius:8px;}
.venue-status-banner{padding:14px 16px;border-radius:var(--radius-sm);font-size:13.5px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
/* Баннер подтверждения почты — не строка со значком, а абзац с кнопкой внутри. В flex-раскладке
   каждый кусок текста и каждый тег становились отдельной колонкой, и на телефоне баннер
   разъезжался. Обычный блок с нормальным переносом строк. */
.venue-status-banner.as-text{display:block;line-height:1.5;}
.venue-status-banner.pending{background:rgba(245,166,35,0.12);color:#B7791F;}
.venue-status-banner.rejected{background:rgba(229,56,59,0.10);color:var(--puck-red);}
.incoming-response-row{padding:14px 0;border-bottom:1px solid var(--ice-2);}
.incoming-response-row:last-child{border-bottom:none;}
.incoming-response-profile{display:flex;gap:10px;align-items:center;margin-bottom:6px;}
.incoming-response-name{font-weight:600;font-size:14px;}
.incoming-response-meta{font-size:11.5px;color:var(--frost-dark);}
.incoming-response-ad{font-size:12px;color:var(--frost-dark);margin-bottom:8px;}
.incoming-response-actions{display:flex;gap:6px;flex-wrap:wrap;}

/* toast */
.toast{
  position:fixed;bottom:calc(88px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%) translateY(20px);
  /* Длинный текст (2–3 строки) — скруглённый прямоугольник в пределах экрана, а не «капля» (Саша, 02.10) */
  width:max-content;max-width:calc(100vw - 32px);box-sizing:border-box;text-align:center;line-height:1.35;
  background:var(--rink-black);color:var(--white);padding:12px 18px;border-radius:16px;
  font-size:13.5px;font-weight:600;z-index:200;opacity:0;pointer-events:none;
  transition:opacity .2s, transform .2s;box-shadow:var(--shadow-lg);
  display:flex;align-items:center;justify-content:center;gap:8px;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
@media(min-width:900px){.toast{bottom:24px;}}

.empty-state{
  text-align:center;padding:50px 20px;color:var(--frost-dark);
}

footer{
  padding:44px 20px 22px;color:var(--frost-dark);font-size:12.5px;
  background:radial-gradient(120% 160% at 85% 0%, #1a2338 0%, var(--rink-black) 60%);
  position:relative;overflow:hidden;
}
/* На телефоне подвал уходит под фиксированное нижнее меню: его тёмный фон продолжается
   до самого низа, и светлой полосы между подвалом и меню не остаётся. Правило стоит после
   базового footer — иначе оно бы им перебивалось (одинаковая специфичность, решает порядок). */
@media(max-width:899px){footer{padding-bottom:calc(76px + env(safe-area-inset-bottom));}}
footer::before{
  content:"";position:absolute;left:-60px;bottom:-100px;width:260px;height:260px;
  border:2px solid rgba(47,111,237,0.14);border-radius:50%;pointer-events:none;
}
footer .wrap{position:relative;z-index:2;}
footer .rink-divider{opacity:0.7;}
.footer-brand-row{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px;}
.footer-logo{color:var(--white);font-size:20px;}
.footer-tagline{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:12px;color:var(--frost);letter-spacing:0.5px;text-transform:uppercase;
}
.footer-grid{display:grid;grid-template-columns:1fr;gap:30px;padding-bottom:28px;}
@media(min-width:700px){.footer-grid{grid-template-columns:1.3fr 0.8fr 1fr;}}
.footer-col h4{
  font-family:var(--font-display);font-size:14.5px;font-weight:600;color:var(--white);margin-bottom:14px;
  letter-spacing:0.6px;text-transform:uppercase;
}
.footer-col-about h4{margin-bottom:10px;}
.footer-col p{font-size:13px;line-height:1.65;color:var(--frost);}
.footer-links{display:flex;flex-direction:column;gap:10px;position:relative;z-index:3;}
/* На компьютере «Разделы» — в два столбика по 4 (Главная…Лёд | Рынок…Кабинет): подвал ниже (06.10.2026) */
@media(min-width:700px){.footer-links{display:grid;grid-template-rows:repeat(4,auto);grid-auto-flow:column;grid-auto-columns:max-content;column-gap:44px;row-gap:10px;}}
.footer-links :is(a,button){
  color:var(--frost);background:none;border:none;text-align:left;
  font-family:inherit;font-size:13.5px;padding:0;cursor:pointer;
  transition:color .15s,padding-left .15s;
}
.footer-links :is(a,button):hover{color:var(--white);padding-left:4px;}
.footer-contact-row{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;font-size:13.5px;color:var(--frost);margin-bottom:9px;}
.footer-contact-row a{color:var(--frost);text-decoration:none;white-space:nowrap;}
.footer-contact-row a:hover{color:var(--white);}
/* Подпись к почте — всегда целиком на своей строке под адресом, с отступом под иконку (16px + 8px);
   адрес не разрывается (Саша 01.10: «info@hub-/play.ru» и подпись сбоку — некрасиво). */
.footer-contact-note{flex:1 1 100%;font-size:12px;color:var(--frost);opacity:.8;padding-left:24px;line-height:1.3;}
.footer-social{display:flex;gap:10px;margin-top:16px;}
.footer-social-btn{
  width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,0.08);
  display:flex;align-items:center;justify-content:center;color:var(--white);
  transition:background .15s, transform .15s, box-shadow .15s;
}
.footer-social-btn svg{width:18px;height:18px;}
.footer-social-btn.tg:hover{background:#2AABEE;transform:translateY(-2px);box-shadow:0 6px 16px rgba(42,171,238,0.35);}
.footer-social-btn.max:hover{background:var(--rink-blue);transform:translateY(-2px);box-shadow:0 6px 16px rgba(47,111,237,0.35);}
.footer-bottom{text-align:center;border-top:1px solid rgba(255,255,255,0.08);padding-top:18px;color:var(--frost);position:relative;z-index:2;} /* --frost-dark на тёмном давал 3,25:1 */
.footer-legal-links{margin-top:8px;}
.footer-legal-links :is(a,button){color:var(--frost);font-size:12px;text-decoration:underline;background:none;border:none;font-family:inherit;cursor:pointer;padding:0;}
.footer-legal-links :is(a,button):hover{color:var(--white);}
/* Подвал на телефоне: три колонки в столбик занимали два экрана. «Разделы» и «Контакты» встают
   рядом, текст «О нас» мельче, отступы вдвое меньше. Блок стоит ПОСЛЕ базовых правил
   подвала — иначе .footer-grid ниже по файлу перебивал бы две колонки. */
@media(max-width:699px){
  footer{padding-top:26px;}
  footer .rink-divider{margin:14px 0 18px !important;}
  .footer-brand-row{flex-wrap:nowrap;align-items:center;gap:10px;}
  .footer-logo{font-size:18px;}
  .footer-logo .logo-icon{height:22px;}
  .footer-tagline{font-size:10px;white-space:nowrap;margin:0;}
  /* «Контактам» нужна ширина под почту с иконкой (~160px) — колонки не поровну */
  .footer-grid{grid-template-columns:0.75fr 1.25fr;gap:16px 14px;padding-bottom:14px;}
  .footer-contact-row a{white-space:nowrap;}
  .footer-col-about{grid-column:1 / -1;}
  .footer-col-about p{font-size:12.5px;line-height:1.5;}
  .footer-col h4{font-size:12.5px;margin-bottom:8px;}
  .footer-links{gap:6px;}
  .footer-links :is(a,button){font-size:13px;}
  .footer-contact-row{margin-bottom:6px;font-size:13px;}
  .footer-social{margin-top:10px;}
  .footer-bottom{padding-top:12px;}
  .footer-bottom p{font-size:11.5px;line-height:1.45;}
  .footer-legal-links{margin-top:6px;}
}
/* ---- новости ---- */
.news-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;margin-bottom:40px;}
.news-card{display:flex;flex-direction:column;background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;cursor:pointer;transition:transform .15s,box-shadow .15s;}
.news-card:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(11,14,20,.12);}
.news-cover{position:relative;aspect-ratio:16/9;overflow:hidden;background:linear-gradient(135deg,rgba(47,111,237,.14),rgba(229,56,59,.08));display:flex;align-items:center;justify-content:center;font-size:40px;flex-shrink:0;}
.news-cover img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.news-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:6px;flex:1;}
.news-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--frost-dark);}
.news-kind{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;background:var(--ice);color:var(--frost-dark);}
.news-kind.k-news{background:rgba(47,111,237,.10);color:var(--rink-blue);}
.news-kind.k-article{background:rgba(44,182,125,.12);color:#1B7F55;}
.news-kind.k-promo{background:rgba(229,56,59,.10);color:var(--puck-red);}
.news-title{font-family:var(--font-display);font-size:18px;font-weight:600;line-height:1.3;}
.news-lead{font-size:13.5px;color:var(--frost-dark);line-height:1.5;}
.news-card.no-cover{border-top:4px solid var(--rink-blue);}
.news-card.no-cover .news-body{padding-top:16px;}
.news-back{display:inline-block;margin-bottom:14px;font-size:14px;color:var(--frost-dark);}
.news-back:hover{color:var(--rink-blue);}
.news-article{background:var(--white);border-radius:var(--radius);padding:28px;box-shadow:var(--shadow);margin-bottom:40px;max-width:820px;}
.news-article .news-meta{margin-bottom:12px;}
.news-article h1{font-family:var(--font-display);font-size:30px;line-height:1.2;margin-bottom:12px;}
.news-article .news-lead{font-size:16px;margin-bottom:18px;color:var(--rink-black);}
.news-article .news-cover{border-radius:12px;overflow:hidden;margin-bottom:22px;aspect-ratio:16/9;}
.news-text{font-size:15.5px;line-height:1.7;color:var(--rink-black);}
.news-text p{margin-bottom:14px;}
.news-text h2{font-family:var(--font-display);font-size:22px;margin:26px 0 10px;}
.news-text h3{font-family:var(--font-display);font-size:18px;margin:22px 0 8px;}
.news-text ul{margin:0 0 14px 22px;}
.news-text li{margin-bottom:6px;}
.news-text blockquote{margin:0 0 14px;padding:10px 16px;border-left:3px solid var(--rink-blue);background:var(--ice);border-radius:8px;color:var(--frost-dark);}
.news-text img{max-width:100%;border-radius:12px;margin:8px 0 14px;display:block;}
.news-text hr{border:0;border-top:1px solid var(--ice-2);margin:22px 0;}
.news-text a{color:var(--rink-blue);text-decoration:underline;}
.news-promo-note{margin-top:22px;padding-top:14px;border-top:1px solid var(--ice-2);font-size:12.5px;color:var(--frost-dark);}
@media(max-width:899px){.news-article{padding:18px 16px;}.news-article h1{font-size:24px;}.news-text{font-size:15px;}.news-grid{gap:12px;}}
.legal-doc{background:var(--white);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow);margin-bottom:40px;}
.legal-doc h3{font-family:var(--font-display);font-size:17px;font-weight:600;margin:28px 0 10px;padding-top:18px;border-top:1px solid var(--ice-2);}
.legal-doc h3:first-child{margin-top:0;padding-top:0;border-top:none;}
.legal-doc p{margin-bottom:12px;font-size:14px;color:var(--rink-black);line-height:1.6;}
.legal-doc ul{margin:0 0 12px 20px;font-size:14px;}
.legal-doc li{margin-bottom:6px;}
.legal-note{background:rgba(47,111,237,0.06);border:1px solid rgba(47,111,237,0.15);border-radius:10px;padding:12px 14px;margin-bottom:12px;font-size:13px;color:var(--rink-blue-dim);}
.legal-back{margin-top:18px;}
.legal-inline-link{background:none;border:none;padding:0;font:inherit;color:var(--rink-blue);text-decoration:underline;cursor:pointer;}

/* Админ-панель с 29.09.2026 живёт отдельной страницей /admin/ — здесь остались только
   статусные плашки, которые использует сам сайт. */
.status-pill{font-size:11px;font-weight:700;padding:4px 9px;border-radius:999px;}
.status-active{background:rgba(44,182,125,0.12);color:var(--success);}
.status-review{background:rgba(245,166,35,0.14);color:#8A5A00;} /* было #B7791F ≈ 3,3:1 — ниже AA */

/* ---------- teams: «Управление командой» (07b-teams.js) ---------- */
.team-tabs{margin:0 0 16px;}
.team-tabs .chip-toggle{padding:10px 18px;font-size:13.5px;}
.team-list-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:14px;}
.team-list-head h3{font-size:20px;margin-bottom:4px;}
.team-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;}
.team-card{display:block;width:100%;text-align:left;background:var(--white);border:1.5px solid var(--ice-2);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);cursor:pointer;font-family:inherit;transition:border-color .12s,transform .12s;}
.team-card:hover{border-color:var(--rink-blue);transform:translateY(-1px);}
.team-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px;}
.team-card-name{font-family:var(--font-display);font-size:19px;font-weight:600;letter-spacing:.2px;}
.team-card .meta,.team-title-row .meta,.team-member-main .meta,.team-event .meta,.team-join .meta{font-size:12.5px;color:var(--frost-dark);line-height:1.5;}
.team-need{color:var(--puck-red);font-weight:600;}
.team-detail-head{margin-bottom:12px;}
.team-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;}
.team-title{font-family:var(--font-display);font-size:24px;font-weight:600;margin-bottom:4px;letter-spacing:.2px;}
.team-danger{color:var(--puck-red);border-color:rgba(229,56,59,.35);}
.team-danger:hover{border-color:var(--puck-red);color:var(--puck-red);}
.team-invite{margin-top:16px;padding-top:14px;border-top:1px solid var(--ice-2);}
.team-invite-label{font-size:12.5px;font-weight:600;color:var(--frost-dark);margin-bottom:8px;}
.team-invite .share-row{margin-bottom:8px;}
.team-member-row{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--ice-2);}
.team-member-row:last-child{border-bottom:none;}
.team-member-main{flex:1;min-width:0;}
.team-member-main .title{font-weight:600;font-size:14px;}
.team-member-actions{display:flex;gap:6px;flex-shrink:0;}
.avatar.avatar-sm{width:40px;height:40px;font-size:16px;}
.team-event{padding:12px 0;border-bottom:1px solid var(--ice-2);}
.team-event:last-child{border-bottom:none;}
.team-event .title{font-weight:600;font-size:14.5px;margin-bottom:2px;}
.team-event.is-canceled .title{color:var(--frost-dark);text-decoration:line-through;}
.team-event.is-past{opacity:.8;}
.team-event-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;}
.team-attendance{margin-top:10px;background:var(--ice);border-radius:12px;padding:6px 12px;}
.team-att-row{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--ice-2);font-size:13px;}
.team-att-row:last-child{border-bottom:none;}
.team-att-name{flex:1;min-width:0;font-weight:600;}
.team-past-toggle{display:block;margin:12px 0 0;background:none;border:none;padding:0;font:inherit;font-size:13px;font-weight:600;color:var(--rink-blue);text-decoration:underline;cursor:pointer;}
.team-guest h3,.team-join h3{font-size:20px;margin-bottom:8px;}
.team-guest p{font-size:14px;line-height:1.55;margin-bottom:10px;}
.team-guest ul{margin:0 0 14px 18px;padding:0;font-size:14px;line-height:1.55;}
.team-guest li{margin-bottom:6px;}
.team-join .eyebrow{margin-bottom:6px;}
@media(max-width:599px){
  .team-title-row{flex-direction:column;}
  .team-member-row{flex-wrap:wrap;}
  .team-member-actions{width:100%;justify-content:flex-end;}
}

/* вкладки кабинета: «Кабинет» / «Моя команда» */
.cab-tabs{margin:0 0 18px;}
.cab-tabs .chip-toggle{padding:10px 18px;font-size:13.5px;}
#cabinet-team .team-list-head h3{font-size:20px;}

/* переключатель команд и календарь расписания (07b-teams.js) */
.team-switch{margin:0 0 14px;}
.team-sub{font-size:14px;font-weight:700;margin:16px 0 4px;color:var(--frost-dark);text-transform:uppercase;letter-spacing:.4px;}
.team-cal{margin:10px 0 4px;}
.team-cal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px;}
.team-cal-title{font-family:var(--font-display);font-size:18px;font-weight:600;letter-spacing:.2px;}
.team-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;}
.cal-wd{font-size:11px;font-weight:700;color:var(--frost);text-transform:uppercase;text-align:center;padding:2px 0 4px;}
.cal-cell{min-height:64px;border-radius:10px;background:var(--ice);padding:5px 5px 4px;display:flex;flex-direction:column;gap:3px;min-width:0;}
.cal-cell.is-empty{background:transparent;}
.cal-cell.is-today{box-shadow:inset 0 0 0 2px var(--rink-blue);}
.cal-cell.is-today .cal-day{color:var(--rink-blue);}
.cal-day{font-size:12px;font-weight:700;color:var(--frost-dark);line-height:1;}
.cal-ev{display:flex;flex-direction:column;align-items:flex-start;gap:0;width:100%;text-align:left;border:none;border-radius:7px;padding:3px 6px;font-family:inherit;font-size:11px;line-height:1.25;cursor:pointer;color:#fff;min-width:0;}
.cal-ev.kind-training{background:var(--rink-blue);}
.cal-ev.kind-game{background:var(--puck-red);}
.cal-ev.is-canceled{background:var(--frost);text-decoration:line-through;}
.cal-ev-time{font-weight:700;font-variant-numeric:tabular-nums;}
.cal-ev-kind{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.cal-ev.is-legend{display:inline-flex;flex-direction:row;width:auto;padding:3px 9px;cursor:default;}
.team-cal-legend{display:flex;align-items:center;gap:10px;margin-top:8px;font-size:12px;}
.team-event.is-focus{animation:tev-focus 1.6s ease-out;}
@keyframes tev-focus{0%{background:rgba(47,111,237,.16);}100%{background:transparent;}}
@media(max-width:599px){
  .cal-cell{min-height:52px;padding:4px 3px;}
  .cal-ev{padding:2px 4px;font-size:10px;}
  .cal-ev-kind{display:none;}
  .cal-ev.is-legend .cal-ev-kind{display:inline;}
}

/* логотипы вместо эмодзи: окно «Поделиться», подключения в кабинете, выбор раздела */
.share-app span{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:var(--white);font-size:0;}
.share-app span svg{width:22px;height:22px;}
.share-tg span{color:#1877B8;}
.share-wa span{color:#1DA851;}
.share-vk span{color:#0077FF;}
.share-mail span{color:var(--frost-dark);}
.push-icon svg{width:24px;height:24px;color:var(--rink-blue);}
.connect-item .push-icon svg{width:20px;height:20px;}
.cat-icon svg{width:22px;height:22px;}

/* добавление событий, выпадающий состав, клик по дню календаря */
.team-add-event{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:6px 0 14px;padding:12px 14px;border-radius:12px;background:var(--ice);}
.team-add-event .meta{font-size:12.5px;color:var(--frost-dark);}
.team-roster-head{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;text-align:left;background:none;border:none;padding:0;font-family:inherit;cursor:pointer;color:inherit;}
.team-roster-head .meta{font-size:12.5px;color:var(--frost-dark);}
.team-roster-head h3 .chip-count{margin-left:6px;font-size:13px;color:var(--frost-dark);font-family:var(--font-num);font-variant-numeric:tabular-nums;}
.team-roster-arrow{transform:rotate(0);}
.team-roster.is-open .team-roster-arrow{transform:rotate(180deg);}
.cal-day-btn{background:none;border:none;padding:0;font:inherit;font-size:12px;font-weight:700;color:var(--frost-dark);cursor:pointer;display:flex;align-items:center;justify-content:space-between;width:100%;border-radius:6px;}
.cal-day-btn .cal-plus{font-size:13px;font-weight:700;color:var(--rink-blue);opacity:.35;line-height:1;}
.cal-cell:hover .cal-day-btn .cal-plus{opacity:1;}
.cal-day-btn:hover{color:var(--rink-blue);}
.cal-cell.is-today .cal-day-btn{color:var(--rink-blue);}
/* iPhone увеличивает страницу при фокусе на поле со шрифтом меньше 16px и не возвращает
   масштаб — после этого нижнее меню «уезжает» в середину экрана (замечание Павла 01.10).
   На телефоне все поля ввода — 16px. */
@media(max-width:899px){
  .field input,.field select,.field textarea,.chip-select,.chip-search,.share-row input,#login-email,#login-password{font-size:16px;}
}

/* ближайшее событие крупно + явка по именам */
.team-next{border:1.5px solid var(--ice-2);border-radius:14px;padding:16px;margin:8px 0 14px;background:var(--white);}
.team-next.is-canceled{opacity:.7;}
.team-next-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;}
.team-next-kind{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--rink-blue);}
.team-next-when{font-family:var(--font-display);font-size:24px;font-weight:600;letter-spacing:.2px;line-height:1.15;margin:2px 0 4px;}
.team-next-note{margin-top:4px;}
.team-next-rsvp{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:14px 0 6px;}
.team-next-rsvp .btn{padding:11px 18px;}
.team-next-mine{font-size:13px;}
.team-att-groups{display:flex;flex-direction:column;gap:8px;margin-top:10px;}
.att-label{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--frost-dark);margin-bottom:4px;}
.att-group.yes .att-label{color:var(--success);}
.att-group.no .att-label{color:var(--puck-red);}
.att-chips{display:flex;flex-wrap:wrap;gap:6px;}
.att-chip{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:999px;font-size:13px;font-weight:600;background:var(--ice);color:var(--rink-black);}
.att-chip.yes{background:rgba(44,182,125,0.14);color:#1E7A55;}
.att-chip.no{background:rgba(229,56,59,0.10);color:var(--puck-red);text-decoration:line-through;}
.att-chip.none{background:var(--ice-2);color:var(--frost-dark);}
.att-chip b{font-weight:800;}
@media(max-width:599px){
  .team-next{padding:14px 12px;}
  .team-next-when{font-size:21px;}
  .team-next-rsvp .btn{flex:1 1 40%;}
  .team-next-mine{flex-basis:100%;}
}

/* сводка «Моя команда» в кабинете с кнопками явки; публичный профиль команды в объявлении */
.cab-team{padding:12px 0;border-bottom:1px solid var(--ice-2);}
.cab-team:last-child{border-bottom:none;}
.cab-team-head{display:flex;justify-content:space-between;align-items:center;gap:10px;}
.cab-team .title{font-weight:600;font-size:14px;margin:3px 0 2px;}
.cab-team .meta{font-size:12px;color:var(--frost-dark);}
.cab-next{margin-top:10px;padding:10px 12px;border-radius:12px;background:var(--ice);display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;}
.cab-next-when{font-weight:700;font-size:14px;}
.cab-next-when .team-next-kind{margin-right:4px;}
.cab-next-rsvp{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.team-public-lines{margin-top:6px;}
.team-public-lines .meta{line-height:1.5;}
.team-profile-block{margin-top:14px;padding:12px 14px;border-radius:12px;background:var(--ice);border:1.5px solid var(--ice-2);}
.team-profile-block .eyebrow{margin-bottom:4px;}
.team-profile-block .title{font-weight:700;font-size:15px;}

/* Карточка ближайшего события: текст занимает всю ширину, кнопки организатора — своим блоком.
   Раньше кнопки наследовали мобильное правило состава (.team-member-actions{width:100%}) и
   выдавливали текст в узкую колонку (скриншот Павла 01.10, 13:00). */
.team-next-head > div:first-child{flex:1 1 auto;min-width:0;}
.team-next-actions{display:flex;gap:6px;flex-shrink:0;}
/* Страховка для остальных строк «текст + кнопка»: текст тянется и может ужиматься, кнопка — нет */
.cab-team-head > div:first-child,.team-roster-head > div:first-child,.team-card-head > .team-card-name{flex:1 1 auto;min-width:0;}
.team-card-head .badge,.cab-team-head .btn{flex-shrink:0;}
/* На телефоне кнопки организатора — в строке «ТРЕНИРОВКА / ИГРА» справа, текст карточки во всю ширину
   (05.10, скриншот Саши: отдельной строкой под текстом они висели сами по себе) */
@media(max-width:599px){
  .team-next-head{position:relative;display:block;}
  .team-next-kind{min-height:28px;display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding-right:104px;}
  .team-next-actions{position:absolute;top:0;right:0;}
}
/* плашка «Вышло обновление сайта» — над нижним меню на телефоне, внизу справа на ПК */
.update-bar{position:fixed;left:12px;right:12px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:60;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-radius:14px;background:var(--rink-black);color:var(--white);box-shadow:var(--shadow-lg);font-size:14px;font-weight:600;}
@media(min-width:900px){.update-bar{left:auto;right:24px;bottom:24px;max-width:360px;}}
/* «потянуть вниз — обновить» (07-extras.js) */
.ptr{position:fixed;top:calc(env(safe-area-inset-top) + 64px);left:0;right:0;z-index:55;display:flex;justify-content:center;pointer-events:none;transform:translateY(-80px);opacity:0;visibility:hidden;transition:transform .12s ease-out,opacity .12s,visibility 0s .12s;}
.ptr.is-on{opacity:1;visibility:visible;transition:transform .12s ease-out,opacity .12s,visibility 0s;}
.ptr-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:var(--rink-black);color:var(--white);font-size:13px;font-weight:600;box-shadow:var(--shadow-lg);}
.ptr-spin{width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:var(--white);transition:transform .2s;}
.ptr.is-ready .ptr-spin{transform:rotate(180deg);}
.ptr.is-busy .ptr-spin{animation:ptr-rot .8s linear infinite;}
@keyframes ptr-rot{to{transform:rotate(360deg);}}
@media(min-width:900px){.ptr{display:none;}}

/* кнопки отметок оплаты в составе (абонемент / сезон) — чипы в одну строку */
.team-member-actions .chip-toggle{white-space:nowrap;}

/* явка: «оплатили» зелёным, «не оплатили» жёлтым; подпись «абонемент» словом */
.att-group.unpaid .att-label{color:#8A5A00;}
.att-chip.unpaid{background:rgba(245,166,35,0.18);color:#8A5A00;}
.att-chip small{font-size:11px;font-weight:600;opacity:.85;}
.att-chip small.att-nick,.fin-name small.att-nick{font-size:11px;font-weight:500;opacity:.65;}
.att-hint{margin:2px 0 0;font-size:12px;color:var(--frost-dark);}
@media(max-width:599px){.att-chip{font-size:14px;padding:6px 11px;}}

/* аватарка и имя в составе открывают профиль */
.team-member-open{background:none;border:none;padding:0;cursor:pointer;border-radius:50%;flex-shrink:0;}
.team-member-name{background:none;border:none;padding:0;font:inherit;font-weight:600;color:inherit;cursor:pointer;text-align:left;}
.team-member-name:hover,.team-member-open:hover .avatar{color:var(--rink-blue);box-shadow:0 0 0 2px var(--rink-blue);}
.team-member-name:hover{box-shadow:none;text-decoration:underline;}

/* строка «Оплата» в составе: кнопка = состояние (зелёная ✓ / жёлтая ✕) */
.pay-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;}
.pay-label{font-size:12px;font-weight:700;color:var(--frost-dark);text-transform:uppercase;letter-spacing:.4px;margin-right:2px;}
.pay-btn{display:inline-flex;align-items:center;gap:4px;padding:7px 12px;border-radius:999px;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1.5px solid transparent;white-space:nowrap;}
.pay-btn.is-paid{background:rgba(44,182,125,0.14);color:#1E7A55;border-color:rgba(44,182,125,0.35);}
.pay-btn.is-unpaid{background:rgba(245,166,35,0.14);color:#8A5A00;border-color:rgba(245,166,35,0.45);}
.pay-btn.is-static{cursor:default;}
.pay-btn:disabled{opacity:.6;}
.team-pay-hint{background:var(--ice);border-radius:10px;padding:10px 12px;}
@media(max-width:599px){.pay-btn{font-size:13.5px;padding:8px 12px;}}

/* отметка явки: кнопки до выбора, после — плашка состояния + прямое действие */
.btn.rsvp-yes{background:var(--success);color:#fff;box-shadow:0 6px 16px rgba(44,182,125,.3);}
.btn.rsvp-yes:hover{background:#25A16D;}
.rsvp-state{display:inline-flex;align-items:center;gap:4px;padding:11px 18px;border-radius:999px;font-weight:700;font-size:14.5px;}
.rsvp-state.is-sm{padding:7px 12px;font-size:13px;}
.rsvp-state.is-yes{background:var(--success);color:#fff;}
.rsvp-state.is-no{background:rgba(229,56,59,0.12);color:var(--puck-red);}
.rsvp-clear{background:none;border:none;padding:4px 2px;font:inherit;font-size:12.5px;color:var(--frost-dark);text-decoration:underline;cursor:pointer;}
.rsvp-clear:hover{color:var(--rink-blue);}
.team-event-actions .rsvp-state,.cab-next-rsvp .rsvp-state{white-space:nowrap;}
@media(max-width:599px){
  .team-next-rsvp .rsvp-state{flex:1 1 100%;justify-content:center;}
  .team-next-rsvp .btn{flex:1 1 auto;}
}

/* состав блоками: организаторы, тренеры, вратари, игроки, остальные */
.roster-group{margin-top:14px;}
.roster-group:first-of-type{margin-top:8px;}
.roster-group-title{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--frost-dark);padding:6px 10px;background:var(--ice);border-radius:8px;}
.roster-group-title .chip-count{margin-left:4px;opacity:.7;font-family:var(--font-num);}

/* три поля оплаты в одну линию: подписи в одну строку, поля выровнены по низу (скриншот 01.10 14:50) */
.fee-row{flex-wrap:nowrap;}
.fee-row .field{display:flex;flex-direction:column;justify-content:flex-end;}
.fee-row .field label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* аудит телефона 01.10: список «Отметить оплату» — имя не ужимается, статус и кнопка переносятся
   под имя; кнопки оплаты не вылезают за экран (переносят текст внутри себя) */
.team-att-row{flex-wrap:wrap;row-gap:4px;}
.team-att-name{flex:1 1 120px;min-width:0;}
.team-att-row .chip-toggle{white-space:nowrap;}
.pay-btn{max-width:100%;}
@media(max-width:599px){
  .team-att-row .meta{flex:1 1 auto;}
  .pay-btn{white-space:normal;text-align:left;}
}

/* 320px: кнопка добавления события не вылезает за край */
.team-add-event .btn{max-width:100%;white-space:normal;}
@media(max-width:359px){.team-add-event .btn{width:100%;}}

/* чёрный список (01.10.2026) */
.report-link.block-link{margin-top:6px;}
/* «Пожаловаться» и «Заблокировать» — две маленькие плашки в одну строку (06.10.2026) */
.report-row{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;margin-top:14px;}
.report-row .report-link{display:inline-flex;align-items:center;margin:0;padding:6px 14px;border-radius:999px;background:var(--ice);font-size:12.5px;text-decoration:none;transition:background .15s,color .15s;}
.report-row .report-link:hover{background:rgba(229,56,59,.08);color:var(--puck-red);}
.blocks-list{display:flex;flex-direction:column;gap:6px;margin-top:6px;}
.blocks-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--ice-2);}
.blocks-row:last-child{border-bottom:0;}
.blocks-name{min-width:0;overflow-wrap:anywhere;font-weight:500;}
.report-link[hidden]{display:none;}

/* Вход через Telegram (мини-приложение, 02.10.2026): ссылка «← Вход через Telegram» у формы входа по почте — только внутри Telegram */
.tg-only-note{display:none;}
.in-tg .tg-only-note{display:block;}

/* Отзывы по критериям (02.10.2026): выбор при оценке сделки и счётчики в профиле */
.star-confirm{flex-wrap:wrap;}
.star-confirm[hidden]{display:none;} /* display:flex выше перебивал hidden — кнопки были видны до выбора звёзд */
.star-confirm .crit-box{flex-basis:100%;margin:6px 0 10px;}
.crit-title{font-size:13px;color:var(--frost-dark);margin-bottom:6px;}
.crit-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;}
.crit-q{flex:0 0 120px;font-size:13px;font-weight:600;color:var(--rink-black);}
.crit-pick{border:1.5px solid var(--ice-2);background:var(--white);color:var(--rink-black);border-radius:999px;padding:5px 11px;font:inherit;font-size:13px;line-height:1.3;cursor:pointer;}
.crit-pick[data-v="1"].on{background:rgba(44,182,125,.12);border-color:var(--success);color:#1D7A54;}
.crit-pick[data-v="-1"].on{background:rgba(229,56,59,.10);border-color:var(--puck-red);color:#B4282B;}
@media(max-width:560px){.crit-q{flex-basis:100%;}}
.crit-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.crit-chip{font-size:12.5px;font-weight:600;padding:3px 9px;border-radius:999px;}
.crit-chip.up{background:rgba(44,182,125,.12);color:#1D7A54;}
.crit-chip.down{background:rgba(229,56,59,.10);color:#B4282B;}

/* Уровень игры (02.10.2026): подсказка под списком и тест на 5 вопросов */
.level-hint{margin-top:6px;margin-bottom:4px;}
.level-hint:empty{display:none;}
.lt-q{border:none;padding:0;margin:0 0 14px;}
.lt-q legend{font-weight:600;font-size:14.5px;margin-bottom:6px;color:var(--rink-black);}
.lt-opt{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1.5px solid var(--ice-2);border-radius:10px;margin-bottom:6px;font-size:14px;cursor:pointer;line-height:1.35;}
.lt-opt input{margin-top:2px;flex-shrink:0;accent-color:var(--rink-blue);}
.lt-opt:has(input:checked){border-color:var(--rink-blue);background:rgba(47,111,237,.06);}
.lt-result{margin-top:16px;padding:14px;border-radius:12px;background:var(--ice);}
.lt-result[hidden]{display:none;}
.lt-name{font-size:16px;margin-bottom:6px;}

/* Партнёрство (02.10.2026): блок «Напишите нам» */
.partners-cta{margin-top:18px;padding:16px;border-radius:12px;background:var(--ice);display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;}
.partners-cta p{margin:0;flex:1 1 260px;}

/* «Срочно нужен …» (02.10.2026): плашка на карточке и кнопка в «Моих объявлениях» */
.status-pill.status-urgent{background:rgba(229,56,59,.12);color:#B4282B;}
.btn-urgent{border-color:var(--puck-red);color:#B4282B;}

/* Поиск соперника (02.10.2026) */
.chal-item{border:1.5px solid var(--ice-2);border-radius:12px;padding:12px 14px;margin-top:12px;}
.chal-head{font-size:14.5px;margin-bottom:4px;display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.chal-sub{font-size:13px;font-weight:600;margin:10px 0 6px;color:var(--rink-black);}
.chal-accepted{margin-top:8px;}
.chal-contact{margin-top:6px;display:flex;flex-direction:column;gap:6px;}
.chal-optout{display:flex;align-items:center;gap:8px;margin-top:16px;font-size:13.5px;color:var(--frost-dark);cursor:pointer;}
.chal-optout input{width:16px;height:16px;accent-color:var(--rink-blue);}
#teamChallengesPanel .my-ad-actions{margin-top:10px;}
.chal-item .meta{font-size:13.5px;line-height:1.45;color:var(--frost-dark);}
.chal-head b{color:var(--rink-black);}

/* Мессенджер участника в составе и в явке (голосовое Павла 02.10): имя — ссылка в Telegram/MAX */
.member-msgs{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 1px;}
.member-msg{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;text-decoration:none;color:#1877B8;}
.member-msg.max{color:var(--rink-black);}
.member-msg:hover{text-decoration:underline;}
.member-msg-none{font-size:12.5px;color:var(--frost-dark);}
a.team-member-name{text-decoration:none;}
a.att-chip,button.att-chip{text-decoration:none;border:none;font-family:inherit;cursor:pointer;}
a.att-chip.no{text-decoration:line-through;}
a.att-chip:hover,button.att-chip:hover{box-shadow:0 0 0 2px var(--rink-blue);}

/* Плашки «Абонемент» / «Сезон» у имени в составе (02.10): видны сразу, без строки «Оплата» */
.pay-badge{display:inline-block;vertical-align:2px;margin-left:6px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px;background:rgba(44,182,125,0.14);color:#1E7A55;white-space:nowrap;}

/* Поиск в составе команды (02.10) */
.roster-tools{margin:10px 0 2px;}
/* 16px — иначе iOS увеличивает страницу при фокусе; ниже за счёт отступов */
.roster-search-input{width:100%;height:36px;padding:0 12px;border:1.5px solid var(--ice-2);border-radius:999px;font:inherit;font-size:16px;background:var(--white);}
.roster-search-input:focus{outline:none;border-color:var(--rink-blue);}
.roster-pay-filter{display:flex;gap:6px;overflow-x:auto;padding:8px 0 2px;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
.roster-pay-filter::-webkit-scrollbar{display:none;}
.roster-pay-filter .chip-toggle{flex:0 0 auto;white-space:nowrap;}
.team-roster [hidden]{display:none !important;}

/* Окно отметки участника организатором (02.10) */
.att-menu-label{font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--frost-dark);margin:14px 0 6px;}
.att-menu-label:first-of-type{margin-top:0;}
.att-menu-btns{display:flex;flex-wrap:wrap;gap:8px;}
.att-menu-btns .btn{flex:1 1 auto;}
.btn-danger-soft{background:rgba(229,56,59,0.12);color:var(--puck-red);border:1.5px solid rgba(229,56,59,0.35);}
button.att-chip small{font-size:10.5px;font-weight:700;opacity:.8;margin-left:2px;}

/* Строка участника (Саша, 02.10): аватарка по верхнему краю, контакты крупнее и с воздухом */
.team-member-row{align-items:flex-start;}
.team-member-row .team-member-open{margin-top:2px;}
.team-member-row .member-msgs{gap:10px;margin:6px 0 6px;}
.team-member-row .member-msg{font-size:15px;gap:5px;padding:4px 10px 4px 8px;border-radius:999px;background:rgba(24,119,184,0.08);}
.team-member-row .member-msg.max{background:var(--ice-2);}
.team-member-row .member-msg:hover{text-decoration:none;background:rgba(24,119,184,0.16);}
.team-member-row .member-msg .ico{width:15px;height:15px;}

/* «Дополнительные настройки» в кабинете (02.10): разделы внутри одной панели */
.cab-extra-section{margin-top:16px;padding-top:16px;border-top:1px solid var(--ice-2);}
.cab-extra-h{font-size:15px;margin-bottom:4px;}
#cabExtraPanel [hidden]{display:none !important;}

/* Название и подписи под плашкой («Организатор», «Игрок», раздел объявления) начинаются там же,
   где текст плашки — отступ = горизонтальный padding .badge (Саша, 02.10) */
.my-ad-row > div:first-child > .title,.my-ad-row > div:first-child > .meta,
.cab-team-head > div:first-child > .title,.cab-team-head > div:first-child > .meta{padding-left:10px;}
.my-ad-row > div:first-child > .title,.cab-team-head > div:first-child > .title{margin-top:7px;}

/* Состав на игру (030, третья версия 02.10): раскрывается в карточке игры, пятёрки — схемой на льду */
.team-next-lineup{margin-top:10px;}
.lu-inline{margin-top:12px;padding:14px;border-radius:16px;background:var(--ice);border:1px solid var(--ice-2);}
.team-event .lu-inline{flex-basis:100%;width:100%;}
.lu-mine{margin:0 0 10px;font-size:14px;padding:8px 12px;border-radius:10px;background:rgba(47,111,237,0.10);}
.lu-hint{font-size:12.5px;color:var(--frost-dark);margin:0 0 10px;}
.lu-band{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:10px 12px;margin-bottom:10px;border-radius:14px;background:var(--white);border:1.5px solid var(--ice-2);}
.lu-band-g{border-color:rgba(47,111,237,.35);}
.lu-band-title{flex-basis:100%;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--frost-dark);}
.lu-band-out .att-chip{font-size:13px;}
.lu-fives{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;margin-bottom:10px;}
.lu-five-card{background:var(--white);border-radius:16px;padding:10px 10px 12px;border:1px solid var(--ice-2);}
.lu-five-title{display:flex;align-items:center;gap:6px;font-weight:800;font-size:14.5px;margin:0 2px 8px;}
/* «Лёд»: светлая площадка с синей линией между нападающими и защитниками */
.lu-rink{border-radius:12px;padding:7px;background:linear-gradient(180deg,#F7FAFE 0%,#EAF1FB 100%);border:1.5px solid #D6E2F3;}
/* Синяя линия — разделитель между рядами (раньше лежала поверх и пересекала высокие клетки) */
.lu-row-f,.lu-row-d{display:grid;gap:6px;}
.lu-row-f{grid-template-columns:repeat(3,minmax(0,1fr));padding-bottom:8px;margin-bottom:8px;border-bottom:2px solid rgba(47,111,237,.25);}
.lu-row-d{grid-template-columns:repeat(2,minmax(0,1fr));width:68%;margin:0 auto;}
.lu-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:52px;padding:5px 3px;border-radius:10px;background:var(--white);border:1.5px solid #D6E2F3;text-align:center;min-width:0;}
.lu-cell.is-empty{background:rgba(255,255,255,.55);border-style:dashed;}
.lu-pos{font-size:10px;font-weight:800;letter-spacing:.5px;color:var(--rink-blue);}
/* Перенос только между словами: «Алексей / Смирнов», без «Смирно / в» */
.lu-cell .lu-person,.lu-cell .lu-name{font-size:12.5px;line-height:1.2;word-break:normal;overflow-wrap:normal;hyphens:none;}
.lu-cell .lu-person{flex-direction:column;align-items:center;gap:0;}
.lu-cell-empty,.lu-cell-plus{font-size:13px;color:var(--frost-dark);}
.lu-cell-plus{font-size:20px;line-height:1;color:rgba(47,111,237,.55);}
.lu-cell .lu-chip{max-width:100%;padding:4px 7px;font-size:12px;line-height:1.15;white-space:normal;text-align:center;justify-content:center;word-break:normal;overflow-wrap:normal;hyphens:none;}
.lu-loose{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.lu-person{display:inline-flex;align-items:baseline;gap:4px;font-size:14px;}
.lu-person small{font-size:11px;color:var(--frost-dark);font-weight:600;}
.lu-person.is-no .lu-name{text-decoration:line-through;color:var(--frost-dark);}
.lu-person.is-me .lu-name{font-weight:800;}
.lu-band .lu-person{padding:5px 10px;border-radius:999px;background:var(--ice);}
.lu-name{background:none;border:none;padding:0;font:inherit;font-weight:600;color:inherit;cursor:pointer;text-align:center;text-decoration:none;}
a.lu-name{color:#1877B8;}
.lu-name:hover{text-decoration:underline;}
/* правка */
.lu-pool{padding:10px 12px;margin-bottom:10px;border-radius:14px;background:var(--white);border:1.5px dashed var(--ice-2);}
.lu-pool-head{display:flex;align-items:center;gap:6px;font-weight:800;font-size:14px;margin-bottom:6px;}
.lu-pool-group{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;}
.lu-drop{transition:border-color .12s,background .12s,box-shadow .12s;}
.lu-drop.can-drop{cursor:pointer;border-color:rgba(47,111,237,.55);}
.lu-cell.can-drop.is-empty{background:rgba(47,111,237,.07);}
.lu-drop.is-over{border-color:var(--rink-blue);border-style:solid;box-shadow:0 0 0 3px rgba(47,111,237,.2);}
.lu-plus{font-size:12.5px;font-weight:700;color:rgba(47,111,237,.7);padding:0 4px;}
.lu-count{font-size:11.5px;font-weight:700;padding:2px 7px;border-radius:999px;background:var(--ice-2);color:var(--frost-dark);}
.lu-count.full{background:rgba(44,182,125,.16);color:#1E7A55;}
.lu-add-five{margin:0 0 10px;}
.lu-chip{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;border-radius:999px;border:1.5px solid transparent;font:inherit;font-size:14px;font-weight:600;cursor:grab;
  touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;background:var(--ice);color:var(--rink-black);}
.lu-chip small{font-size:10.5px;font-weight:700;opacity:.7;}
.lu-chip.yes{background:rgba(44,182,125,0.14);color:#1E7A55;}
.lu-chip.no{background:rgba(229,56,59,0.10);color:var(--puck-red);text-decoration:line-through;}
.lu-chip.none{background:var(--ice-2);color:var(--frost-dark);}
.lu-chip.is-selected{border-color:var(--rink-blue);box-shadow:0 0 0 3px rgba(47,111,237,.3);}
.lu-chip.is-dragging{opacity:.35;}
.lu-ghost{position:fixed;left:0;top:0;z-index:300;pointer-events:none;box-shadow:0 8px 24px rgba(11,14,20,.25);opacity:.95;}
.lu-notify{display:flex;align-items:center;gap:8px;margin:4px 0 10px;font-size:13.5px;cursor:pointer;}
.lu-notify input{width:16px;height:16px;accent-color:var(--rink-blue);}
.lu-foot-btns{display:flex;gap:8px;flex-wrap:wrap;}
.lu-foot-btns .btn-primary{flex:1 1 auto;}
/* Выбран игрок — подсказка прилипает к низу экрана над нижним меню, пока раскрыт состав */
.lu-selbar{position:sticky;bottom:calc(84px + env(safe-area-inset-bottom));z-index:5;display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;padding:10px 12px;border-radius:14px;background:var(--rink-black);color:var(--white);font-size:13.5px;box-shadow:0 8px 24px rgba(11,14,20,.25);}
.lu-selbar .btn{flex:0 0 auto;}
@media(min-width:900px){.lu-selbar{bottom:16px;}}
@media(max-width:599px){
  .lu-inline{padding:10px;margin-left:-6px;margin-right:-6px;}
  .lu-fives{grid-template-columns:1fr;}
  /* «Сохранить» — на всю ширину, «Отмена» и «Очистить» — пополам под ней (на iPhone «Очистить» вылезал за край) */
  .lu-foot-btns{display:grid;grid-template-columns:1fr 1fr;}
  .lu-foot-btns .btn{min-width:0;padding:12px 10px;}
  .lu-foot-btns .btn-primary{grid-column:1 / -1;}
  .lu-foot-btns .btn:last-child:nth-child(2){grid-column:1 / -1;}
}

/* ---- Инструменты команды (031, по образцу matchplan.ru): эмблема, оплата по реквизитам, финансовая
   сводка, резерв, основа, поиск команды и заявки, любимые позиции ---- */
.team-logo{width:40px;height:40px;border-radius:12px;object-fit:cover;flex-shrink:0;background:var(--ice-2);border:1px solid var(--ice-2);}
.team-logo-empty{display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--steel);background:linear-gradient(135deg,var(--ice-2),var(--ice));}
.team-title-row > .team-logo{width:52px;height:52px;}
.team-title-row .team-title-main{flex:1 1 auto;min-width:0;}
.team-join .team-title-row{justify-content:flex-start;align-items:center;margin-bottom:6px;}
.cab-team-main{flex:1 1 auto;min-width:0;}
@media(max-width:599px){
  .team-title-row{flex-direction:row;flex-wrap:wrap;}
  .team-title-row .badge{order:3;}
}
/* Выбор картинки (06.10.2026): эмблема команды, фото профиля и при регистрации. Заглушка
   (щит / силуэт) → превью; своя кнопка вместо системного «Выберите файл» (input скрыт, его
   открывает <label for>), «Убрать» и подсказка по размеру. Превью и подписи — pickPreview()
   в 06-cabinet.js и pickTeamLogo() в 07b-teams.js. */
.img-pick{display:flex;align-items:center;gap:14px;}
.img-pick-slot{width:56px;height:56px;flex-shrink:0;}
.img-pick-slot img{width:56px;height:56px;border-radius:14px;object-fit:cover;border:1px solid var(--ice-2);}
.img-pick-slot img[hidden]{display:none;}
.img-pick-ph{display:none;width:56px;height:56px;border-radius:14px;border:1.5px dashed #C3CCDA;background:var(--ice);color:#9AA5B8;align-items:center;justify-content:center;}
.img-pick-slot img[hidden] + .img-pick-ph{display:flex;}
.img-pick-slot.round img,.img-pick-slot.round .img-pick-ph{border-radius:50%;}
.img-pick-side{min-width:0;}
.img-pick-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
/* «Заменить» и «Убрать» — одной высоты: одинаковые отступ, шрифт и рамка 1,5 px */
.img-pick-btns .btn,.img-pick-btns .btn-soft{padding:8px 16px;font-size:13.5px;font-weight:600;line-height:1.2;cursor:pointer;}
.field .img-pick-btns label.btn{margin:0;}   /* у подписей полей нижний отступ — у кнопки-label его быть не должно */
.img-pick-hint{margin-top:6px;font-size:12.5px;color:var(--frost-dark);line-height:1.4;}
/* Фокус с клавиатуры на скрытом поле — подсвечиваем кнопку */
.img-pick:has(input:focus-visible) .img-pick-btns .btn{box-shadow:0 0 0 3px rgba(47,111,237,.3);}
/* Мягкая кнопка вместо подчёркнутой ссылки: «Определить за минуту», «Убрать» */
.btn-soft{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;border:1.5px solid transparent;background:rgba(47,111,237,.08);color:var(--rink-blue);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s;}
.btn-soft:hover{background:rgba(47,111,237,.15);}
.btn-soft.danger{background:rgba(229,56,59,.08);color:var(--puck-red);}
.btn-soft.danger:hover{background:rgba(229,56,59,.15);}
.btn-soft[hidden]{display:none;}
/* Второстепенная кнопка размером с основную (.btn): «Сменить пароль» под «Сохранить изменения» */
.btn-tint{background:rgba(47,111,237,.08);color:var(--rink-blue);border:none;}
.btn-tint:hover{background:rgba(47,111,237,.15);}
/* Остальные поля выбора файла (фото товара) — системная кнопка в стиле сайта */
input[type=file]{font:inherit;font-size:13px;color:var(--frost-dark);}
input[type=file]::file-selector-button{margin-right:12px;padding:8px 16px;border-radius:999px;border:1.5px solid var(--ice-2);background:var(--white);color:var(--rink-black);font:inherit;font-weight:600;font-size:13.5px;cursor:pointer;}
input[type=file]::file-selector-button:hover{border-color:var(--rink-blue);color:var(--rink-blue);}
.visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0 0 0 0) !important;white-space:nowrap !important;border:0 !important;opacity:0;}
.team-pay-block{margin:14px 0;padding:12px 14px;border:1.5px solid var(--ice-2);border-radius:var(--radius-sm);background:var(--ice);}
.team-pay-title{font-weight:700;font-size:14px;margin-bottom:6px;}
.check-row{display:flex;align-items:flex-start;gap:8px;margin:4px 0 14px;font-size:13.5px;line-height:1.45;cursor:pointer;}
.check-row input{margin-top:3px;width:18px;height:18px;flex-shrink:0;}
.team-list-btns{display:flex;gap:8px;flex-wrap:wrap;}
.team-facts{margin-top:2px;}
.team-open-note{margin-top:4px;color:var(--rink-blue-dim) !important;font-weight:600;}
.rsvp-state.is-wait{background:rgba(47,111,237,0.10);color:var(--rink-blue-dim);}
.core-badge{display:inline-block;padding:1px 8px;border-radius:999px;background:rgba(47,111,237,0.12);color:var(--rink-blue-dim);font-size:11.5px;font-weight:700;vertical-align:1px;}
.core-toggle{align-self:flex-start;margin-top:2px;}
.btn-pay{background:var(--rink-blue);color:#fff;border:1.5px solid var(--rink-blue);}
.btn-pay:hover{background:var(--rink-blue-dim);}
.pay-amount{font-family:var(--font-display);font-size:34px;font-weight:700;margin:0 0 10px;}
.pay-detail{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 0;border-top:1px solid var(--ice-2);}
.pay-detail-label{flex:0 0 100%;font-size:12px;color:var(--frost-dark);}
.pay-detail-value{flex:1 1 auto;min-width:0;font-weight:700;font-size:16px;overflow-wrap:anywhere;}
.pay-steps{margin:10px 0 0;padding-left:20px;font-size:13.5px;line-height:1.5;}
.pay-note{margin:8px 0 0;}
.fin-collapsed{margin-top:10px;font-size:13px;}
.team-finance{margin-top:10px;padding:12px;border:1.5px solid var(--ice-2);border-radius:var(--radius-sm);background:var(--white);}
.fin-sum{font-size:14px;margin-bottom:8px;}
.fin-group{margin-top:10px;}
.fin-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 0;border-top:1px solid var(--ice-2);}
.fin-row.is-claimed{background:rgba(245,166,35,0.08);margin:0 -12px;padding:7px 12px;}
.fin-name{background:none;border:0;padding:0;font:inherit;font-weight:600;color:var(--rink-black);cursor:pointer;text-align:left;}
.fin-name:hover{color:var(--rink-blue);}
.fin-row .meta{font-size:12px;color:var(--frost-dark);}
.fin-btns{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap;}
@media(max-width:599px){.fin-btns{margin-left:0;flex:1 1 100%;}}
.team-req-msg{font-style:italic;}
.ts-form{margin-bottom:6px;}
.ts-results{margin-top:10px;}
.ts-team{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-top:1px solid var(--ice-2);}
.ts-main{flex:1 1 auto;min-width:0;}
.ts-main .title{font-weight:700;}
.ts-main .meta{font-size:12.5px;color:var(--frost-dark);line-height:1.5;}
.ts-action{margin-top:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
#editPrefPos .chip-toggle{min-width:52px;}
#editPrefPos .chip-toggle[data-order="основная"]{box-shadow:0 0 0 2px var(--rink-blue);}
.lu-auto{margin:0 0 10px;}

/* «Приложение на телефон» (05.10.2026): баннер под плитками главной, подсказка гостю, инструкция в кабинете */
.app-banner{display:flex;align-items:center;gap:16px;margin-top:16px;padding:18px 20px;border-radius:18px;cursor:pointer;
  background:linear-gradient(120deg,var(--rink-black) 0%,#1B3A7A 60%,var(--rink-blue) 100%);color:#fff;
  box-shadow:0 10px 26px rgba(15,30,60,.22);}
.app-banner[hidden]{display:none;}
.app-banner-icon{width:56px;height:56px;border-radius:14px;flex-shrink:0;box-shadow:0 4px 12px rgba(0,0,0,.3);}
.app-banner-text{flex:1;min-width:0;}
.app-banner-text h3{font-size:18px;margin:0 0 4px;color:#fff;}
.app-banner-text p{margin:0;font-size:14px;line-height:1.45;color:rgba(255,255,255,.82);}
.app-banner-btn{flex-shrink:0;background:#fff;color:var(--rink-black);box-shadow:none;}
.app-banner-btn:hover{background:#EEF2F8;}
@media (max-width:600px){
  .app-banner{flex-wrap:wrap;padding:16px;gap:12px;}
  .app-banner-icon{width:46px;height:46px;}
  .app-banner-text{flex:1 1 calc(100% - 60px);}
  .app-banner-text h3{font-size:16px;}
  .app-banner-btn{flex:1 1 100%;}
}
.app-guest-note{display:flex;gap:14px;align-items:center;}
.app-guide{border:1.5px solid var(--rink-blue);}
.app-guide-tabs{margin:4px 0 12px;}
.app-guide-body .app-guide-install{margin-bottom:10px;}
.app-steps{margin:0 0 12px;padding-left:22px;font-size:14px;line-height:1.55;}
.app-steps li{margin-bottom:6px;}
.app-guide-actions{margin-top:4px;}
/* Две кнопки наверху кабинета — приложение и уведомления (Павел, 05.10) */
.app-quick{margin:0 0 14px;}
.app-quick[hidden]{display:none;}
.app-quick-row{align-items:center;}
.app-quick-row .chip-toggle{padding:10px 16px;font-size:13.5px;background:var(--white);}
.app-quick-row .chip-toggle.on{background:var(--rink-black);}
.app-quick-row .chip-toggle[hidden]{display:none;}
.app-quick-x{margin-left:auto;width:36px;height:36px;border-radius:50%;border:0;background:transparent;color:var(--frost-dark);font-size:15px;cursor:pointer;}
.app-quick-x:hover{background:var(--ice-2);}
.app-quick + .app-guide{margin-top:-4px;}
/* Подсказка после «Подключить Telegram» (06.10.2026) */
.tg-link-hint{margin:0 0 14px;padding:12px 14px;border-radius:12px;background:var(--white);border:1px solid var(--ice-2);font-size:14px;line-height:1.45;}
.tg-link-hint[hidden]{display:none;}
.tg-link-hint p{margin:0;overflow-wrap:anywhere;}
.tg-link-hint-actions{margin-top:10px;}
.connect-item .tg-link-hint{margin:10px 0 0;}
@media (max-width:600px){
  .app-quick-row{flex-wrap:wrap;gap:6px;}
  .app-quick-row .chip-toggle{flex:1 1 0;min-width:0;padding:10px 8px;font-size:13px;white-space:normal;line-height:1.25;}
  .app-quick-x{flex:0 0 32px;width:32px;height:32px;}
  /* «Подключить Telegram» — отдельной строкой под двумя кнопками и крестиком */
  .app-quick-row #aqTg{order:5;flex:1 0 100%;}
  .app-quick-row:not(:has(#aqApp:not([hidden]), #aqPush:not([hidden]))) #aqTg{order:0;flex:1 1 0;}
}
/* Ссылка на оплату сборов в окне «Оплатить» (033) */
.pay-link-btn{display:flex;justify-content:center;align-items:center;text-decoration:none;margin-top:4px;}
.pay-or{margin:4px 0 6px;font-size:12px;font-weight:700;color:var(--frost-dark);text-transform:uppercase;letter-spacing:.4px;text-align:center;}
/* «Куда переводить взносы»: телефон · банк и получатель · подсказка — две строки с одинаковыми
   колонками 1:1, края полей совпадают (06.10.2026; раньше телефон был шире — колонки разъезжались) */
.team-pay-row{align-items:flex-end;}
/* Телефон: в половине ширины номер «+7 999 123-45-67» не помещается — поля друг под другом */
@media(max-width:480px){.team-pay-row{flex-wrap:wrap;}.team-pay-row .field{flex:1 1 100%;}}
.team-pay-block .field label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
/* Ссылка на оплату не на известный банк/сервис — предупреждение (05.10, вариант 2) */
.pay-warn{margin:6px 0 10px;padding:9px 12px;border-radius:10px;font-size:13.5px;line-height:1.45;background:rgba(245,166,35,0.14);color:#8A5A00;}
.pay-host{color:var(--frost-dark);}
button.pay-link-btn{width:100%;}
/* «Ссылка на оплату: yookassa.ru/…» в шапке команды — адрес подчёркнут, длинный обрезается */
.team-pay-line{display:flex;gap:5px;align-items:baseline;justify-content:flex-start;min-width:0;}
.team-pay-label{flex:none;white-space:nowrap;}
.team-pay-line .pay-url-link{flex:0 1 auto;}
.pay-url-link{color:var(--rink-blue);text-decoration:underline;text-underline-offset:2px;font:inherit;font-weight:600;background:none;border:0;padding:0;cursor:pointer;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;}
