/* storefront.css — витрина, реестр, каркас экрана проекта, скелеты, формы. Токены из DESIGN.md. */
:root{--sf-ink:#17191d;--sf-ink-2:#454c56;--sf-muted:#626975;--sf-line:#e2e5e9;--sf-accent:#b20f27;--sf-soft:#fff1f3;--sf-notice:#f7f8fa;--sf-surface:#fff;--sf-skeleton:#eef0f3}

/* чипсы горизонтов и инструменты каталога */
.quick-picks{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:24px 0 12px}
.quick-picks button{padding:8px 14px;border-radius:999px;border:1px solid var(--sf-line);background:#fff;color:var(--sf-ink);font:inherit;font-size:14px}
.quick-picks button[aria-pressed="true"]{background:var(--sf-ink);color:#fff;border-color:var(--sf-ink)}
.catalog-tools{display:flex;gap:18px;align-items:center;padding:10px 0 4px;font-size:14px;color:var(--sf-muted);flex-wrap:wrap}
.catalog-tools label{display:flex;align-items:center;gap:6px}
.catalog-tools select{font:inherit;color:var(--sf-ink);border:1px solid var(--sf-line);border-radius:8px;padding:6px 8px;background:#fff;max-width:100%}
.view-toggle{margin-left:auto;display:inline-flex;border:1px solid var(--sf-line);border-radius:8px;overflow:hidden}
.view-toggle button{font:inherit;font-size:14px;padding:6px 12px;border:0;background:#fff;color:var(--sf-ink);cursor:pointer}
.view-toggle button[aria-pressed="true"]{background:var(--sf-ink);color:#fff}
/* режим «Реестр» */
#cards.is-list{display:grid;grid-template-columns:1fr;gap:0;border-top:1px solid var(--sf-ink);margin-top:16px}
#cards.is-list .card{display:grid;grid-template-columns:200px 1fr;gap:0 24px;border:0;border-bottom:1px solid var(--sf-line);border-radius:0;padding:22px 0;overflow:visible;box-shadow:none;transform:none}
#cards.is-list .card>img,#cards.is-list .card>.card-cover{width:200px;height:134px;border-radius:6px}
#cards.is-list .card-body{padding:0;display:grid;grid-template-columns:1fr 220px;grid-template-rows:auto auto 1fr;gap:6px 24px}
#cards.is-list .card-kind{grid-column:1;grid-row:1}
#cards.is-list .card-body>h3{grid-column:1;grid-row:2;font-size:24px;font-weight:400;font-family:Georgia,"Times New Roman",serif;letter-spacing:-.02em}
#cards.is-list .card-facts-list{grid-column:1;grid-row:3;align-self:start}
#cards.is-list .card-cta{grid-column:2;grid-row:1/4;border:0;padding:0;margin:0;flex-direction:column;align-items:flex-end;justify-content:flex-start;text-align:right;gap:10px}
#cards.is-list .card-status{margin-right:0}
@media(max-width:720px){
 .catalog-tools{gap:10px 14px}.catalog-tools label{flex:1 1 45%}.catalog-tools select{flex:1}.view-toggle{margin-left:0;flex:1 1 100%;display:flex}.view-toggle button{flex:1}
 #cards.is-list .card{grid-template-columns:96px 1fr;grid-template-rows:auto auto 1fr auto;gap:4px 14px;padding:16px 0}
 #cards.is-list .card>img,#cards.is-list .card>.card-cover{width:96px;height:72px;grid-column:1;grid-row:1/4}
 #cards.is-list .card-body{display:contents}
 #cards.is-list .card-kind{grid-column:2;grid-row:1;font-size:11px}
 #cards.is-list .card-body>h3{grid-column:2;grid-row:2;font-size:19px;line-height:1.2}
 #cards.is-list .card-facts-list{grid-column:2;grid-row:3;font-size:13px}
 #cards.is-list .card-facts-list li:nth-child(n+2){display:none}
 #cards.is-list .card-cta{grid-column:1/3;grid-row:4;flex-direction:row;align-items:center;justify-content:space-between;text-align:left;padding-top:12px;margin-top:8px;border-top:1px solid var(--sf-line);gap:12px}
 #cards.is-list .card-status{margin-right:auto}
 #cards.is-list .card-cta .button{padding:8px 12px;font-size:14px;white-space:nowrap}
}
/* отступ блока внутри секции проекта (вместо inline-стиля: CSP style-src 'self') */
.project-gap{margin-top:18px}
/* единая карточка */
.card{display:flex;flex-direction:column}
.card>img,.card>.card-cover{height:200px;width:100%;object-fit:cover}
.card-cover-neutral{display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f7f8fa,#e9edf2);color:#454c56;font-weight:600;letter-spacing:.02em}
.card .card-body{padding:20px 20px 22px;display:flex;flex-direction:column;gap:10px;flex:1}
.card-kind{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--sf-muted)}
.card .card-body>h3{margin:0;font-size:20px;letter-spacing:-.02em;line-height:1.25}
.card-facts-list{margin:0;padding:0;list-style:none;font-size:14px;color:var(--sf-muted);display:grid;gap:4px}
.card-facts-list li strong{color:var(--sf-ink);font-weight:600}
.card-cta{margin-top:auto;display:flex;align-items:center;gap:12px;padding-top:12px;border-top:1px solid var(--sf-line);font-size:13px;color:var(--sf-muted)}
.card-status{margin-right:auto}
.card-cta .button{white-space:nowrap}
.card-cta [data-save]{margin-left:-4px}
/* единственное красное действие каталога — «Получить доступ»: глобальный .primary уже красный, здесь только оттенок и hover витрины */
.card-cta .button.primary{background:var(--sf-accent);border-color:var(--sf-accent)}
.card-cta .button.primary:hover{background:var(--sf-ink);border-color:var(--sf-ink)}

/* главная: заметка героя и таблица «Как считается результат» */
.hero-note{margin-top:14px}
.serif{font-family:Georgia,"Times New Roman",serif;font-weight:400;letter-spacing:-.02em}
.results-section{margin-top:64px;padding:32px 0;border-top:1px solid var(--sf-line);display:grid;grid-template-columns:1fr 2fr;gap:40px}
.results-section h2{font-size:30px;margin:0 0 8px}
.results-table{width:100%;border-collapse:collapse;font-size:15px}
.results-table thead th{text-align:left;font-weight:600;padding:10px 12px;background:var(--sf-notice);border-bottom:1px solid var(--sf-line)}
.results-table td,.results-table tbody th{padding:12px;border-bottom:1px solid var(--sf-line);vertical-align:top}
.results-table tbody th{text-align:left;font-weight:600;color:inherit}
.results-table .text-link{background:none;border:0;padding:0;color:var(--sf-accent);text-decoration:underline}
/* Кнопка героя прокручивает к #catalog: заголовок не должен уходить под липкую шапку (--header-h задаёт header() в portal.js). */
#catalog{scroll-margin-top:calc(var(--header-h,64px) + 16px)}
/* Герой: фон-заглушка, пока грузится тяжёлый PNG, чтобы под подписью не было белой пустоты. */
.home-hero figure{background:var(--sf-skeleton)}
/* Кнопка аккаунта: иконка + подпись. Ссылка остаётся inline-flex (.button), многоточие живёт на .account-label:
   у flex-элемента с min-width:0 text-overflow работает, и длинное имя режется справа, а иконка не сжимается. */
.account-link{background:var(--sf-surface);color:var(--sf-ink);border:1px solid var(--sf-line);gap:8px;text-decoration:none}
.account-link:hover{border-color:var(--sf-ink)}
.header-actions #account-link{font-size:13px;min-height:44px;padding:12px 20px;max-width:160px;border-radius:10px}
#account-link svg{flex-shrink:0}
.account-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* валюта внутри меню нужна только на телефоне, где селект в шапке скрыт (≤440px) */
.menu-currency{display:none}
/* вход и регистрация: вкладки над одной формой */
.auth-tabs{display:flex;border:1px solid var(--sf-line);border-radius:10px;padding:3px;gap:3px;margin:0 0 8px}
.auth-tabs a{flex:1;display:flex;align-items:center;justify-content:center;min-height:40px;border-radius:8px;color:var(--sf-ink-2);font-size:14px;font-weight:600;text-decoration:none}
.auth-tabs a[aria-current="page"]{background:var(--sf-ink);color:#fff}
.auth-tabs a:focus-visible{outline:3px solid var(--sf-accent);outline-offset:2px}
/* подсказка поля стоит после label (связана aria-describedby) */
.field-hint{display:block;margin:-10px 0 16px;color:var(--sf-muted);font-size:13px}
.auth-links{display:flex;justify-content:center;gap:8px;color:var(--sf-muted);margin:16px 0 0}
/* профиль инвестора: одна колонка, суммы по горизонтам в ряд, направления чипами */
.sums,.chips{border:0;padding:0;margin:20px 0}
.sums legend,.chips legend{padding:0;font-size:14px;font-weight:600;color:var(--sf-ink);margin-bottom:8px}
.sums>small{display:block;color:var(--sf-muted);font-size:13px;margin-top:8px}
.sums-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.sums-row .field{margin:0;font-size:13px}.sums-row input{width:100%;margin-top:6px}
.chips-list{display:flex;flex-wrap:wrap;gap:8px}
/* чипы без :has(): разметка label.chip > input + span, состояние рисует span через соседний селектор */
label.chip{position:relative;display:inline-flex;margin:0}
label.chip input{position:absolute;opacity:0;width:1px;height:1px;margin:0;min-height:0}
label.chip span{display:inline-flex;align-items:center;min-height:40px;padding:8px 14px;border:1px solid var(--sf-line);border-radius:999px;background:#fff;color:var(--sf-ink);font-size:14px;cursor:pointer}
label.chip input:checked+span{background:var(--sf-ink);border-color:var(--sf-ink);color:#fff}
label.chip input:focus-visible+span{outline:3px solid var(--sf-accent);outline-offset:2px}
.profile-invite a{color:inherit}
@media(max-width:650px){
 .header .brand{width:105px;height:28px}
 /* шапка здесь не липкая (position:relative), поэтому отступ без её высоты */
 #catalog{scroll-margin-top:16px}
 /* фиксированная высота картинки вместо height:100% от высоты figure: не зависит от разрешения процентной высоты */
 .home-hero figure{height:auto}
 .home-hero img{height:220px;width:100%;display:block;object-fit:cover}
 .header-actions{gap:6px}
 .header-actions #language{width:84px;font-size:13px;padding:8px 2px}
 .header-actions #currency{width:64px;font-size:13px;padding:8px 4px}
 /* на телефоне видна только иконка; визуально скрытая подпись остаётся доступным именем ссылки */
 .header-actions #account-link{padding:10px;min-width:44px}
 .account-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
 .sums-row{gap:6px}
}
@media(max-width:440px){
 .header-actions #currency{display:none}
 .header .main-menu .menu-currency{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:8px 4px;font-size:14px;color:var(--sf-ink)}
 .menu-currency select{width:auto;min-width:96px}
}
@media(max-width:370px){
 .header .brand{width:85px;height:23px}.header-row{padding-inline:10px}
 .header-actions{gap:4px}.header-actions #language{width:72px;font-size:12px}
}
@media(max-width:900px){.results-section{grid-template-columns:1fr;gap:16px}}
/* каркас экрана проекта */
.project-crumb{font-size:14px;color:var(--sf-muted);padding:18px 0 8px}.project-crumb a{text-decoration:none}
.project-head{display:grid;grid-template-columns:1fr 360px;gap:40px;align-items:start;padding-bottom:28px}
.project-head h1{margin:6px 0 10px}
.project-lead{font-size:17px;color:var(--sf-muted);max-width:60ch;margin:0 0 18px}
.fact-strip{display:flex;border:1px solid var(--sf-line);border-radius:12px;overflow:hidden;background:var(--sf-surface)}
.fact-strip>div{flex:1;padding:14px 16px;border-right:1px solid var(--sf-line)}.fact-strip>div:last-child{border-right:0}
.fact-strip b{display:block;font-size:20px;letter-spacing:-.02em;font-weight:600;color:var(--sf-ink)}.fact-strip span{font-size:12px;color:var(--sf-muted)}
.project-cover{margin:0;border-radius:14px;overflow:hidden;position:relative}.project-cover img{width:100%;height:240px;object-fit:cover;display:block}
.project-cover figcaption{position:absolute;left:0;right:0;bottom:0;background:rgba(23,25,29,.78);color:#fff;font-size:12px;padding:7px 12px}
.project-body{display:grid;grid-template-columns:1fr 360px;gap:40px;align-items:start}.project-body.is-single{grid-template-columns:1fr}
/* колонки сетки не растут по min-content содержимого: иначе оглавление (nowrap, overflow-x) раздвигает страницу на телефоне */
.project-main,.project-aside{min-width:0}
.project-aside{position:sticky;top:calc(var(--header-h,64px) + 12px);display:grid;gap:14px;max-height:calc(100vh - var(--header-h,64px) - 24px);overflow:auto}
.project-toc{display:flex;gap:18px;font-size:14px;border-bottom:1px solid var(--sf-line);padding:6px 0 0;margin-bottom:28px;position:sticky;top:var(--header-h,64px);background:var(--sf-surface);z-index:2;overflow-x:auto}
/* Текущий раздел: жирный, фирменный красный и подчёркивание поверх линии оглавления — иначе он сливался с остальными пунктами. */
.project-toc a{text-decoration:none;color:var(--sf-muted);white-space:nowrap;padding:4px 0 10px;margin-bottom:-1px;border-bottom:2px solid transparent;transition:color .15s ease}
.project-toc a:hover{color:var(--sf-ink)}
.project-toc a[aria-current="true"]{color:var(--sf-accent);font-weight:700;border-bottom-color:var(--sf-accent)}
.project-section{padding:0 0 36px;scroll-margin-top:calc(var(--header-h,64px) + 56px)}.project-section h2{font-size:22px;margin:0 0 12px}.project-section p{max-width:68ch}
.kv{display:grid;grid-template-columns:220px 1fr;gap:8px 20px;font-size:15px;margin:0}.kv>div{display:contents}.kv dt{color:var(--sf-muted)}.kv dd{margin:0}.kv dd small{display:block;color:var(--sf-muted);font-size:13px}
.lock-block{border:1px dashed var(--sf-line);border-radius:12px;padding:16px 18px;color:var(--sf-muted);font-size:14px;display:flex;gap:14px;align-items:center;justify-content:space-between;flex-wrap:wrap}.lock-block b{color:var(--sf-ink);display:block;font-size:15px;font-weight:600}
.risk-table{display:grid}.risk-table>div{display:grid;grid-template-columns:200px 1fr;gap:16px;font-size:15px;padding:10px 0;border-top:1px solid var(--sf-line)}.risk-table b{font-weight:600}
.docs-list{list-style:none;margin:0;padding:0;display:grid}.docs-list li{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--sf-line);font-size:15px}.docs-list li span{color:var(--sf-muted);font-size:13px;white-space:nowrap}
.steps{counter-reset:n;display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:0;padding:0;list-style:none}.steps li{counter-increment:n;font-size:14px;padding-top:10px;border-top:2px solid var(--sf-line)}.steps li::before{content:counter(n);display:block;font-size:12px;color:var(--sf-muted);margin-bottom:4px}.steps li b{display:block;margin-bottom:2px}.steps li.is-current{border-top-color:var(--sf-accent)}
.project-aside .panel h3{margin:0 0 8px;font-size:16px}.project-aside .panel .status{font-size:13px;color:var(--sf-muted);margin-bottom:12px}.project-aside .panel>.button{display:block;text-align:center}
/* узкая колонка панели интереса (и 360px): поля в столбик, цифры мельче, чтобы три факта помещались */
.project-aside .two{grid-template-columns:1fr;gap:0}
.project-aside .field select,.project-aside .field input{width:100%}
.project-aside .fact-strip b{font-size:16px}
/* досье: цены в узкой панели — подпись слева, цена справа в одну строку; кнопки оплаты во всю ширину */
.is-dossier .project-aside .kv{grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;font-size:14px;margin:0 0 14px}/* цена справа в строке тарифа, пояснение тарифа — отдельной строкой на всю ширину панели */.is-dossier .project-aside .kv dd{display:contents}.is-dossier .project-aside .kv dd b{text-align:right;white-space:nowrap}.is-dossier .project-aside .kv dd small{grid-column:1/-1;margin-top:-4px}
#dossier-access>button[data-pay]{display:block;width:100%;margin:0 0 8px}
/* подписка — вторичная кнопка рядом с красной «Оплатить доступ к проекту»: белая, чернильный текст, тонкая рамка; hover заметен */
#dossier-access>button.secondary[data-pay]{background:var(--sf-surface);color:var(--sf-ink);border:1px solid var(--sf-line)}#dossier-access>button.secondary[data-pay]:hover:not(:disabled){background:var(--sf-notice);border-color:var(--sf-ink)}
#dossier-access>.pay-caption{margin:0 0 8px}
.panel.notice-panel{background:var(--sf-notice);border-color:transparent;font-size:14px;color:var(--sf-ink-2)}
/* скелеты */
.sk{background:linear-gradient(90deg,var(--sf-skeleton),var(--sf-notice),var(--sf-skeleton));background-size:200% 100%;animation:sk 1.2s linear infinite;border-radius:8px}
@keyframes sk{to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.sk{animation:none}}
.project-skeleton{padding-top:18px}.sk-crumb{height:14px;width:220px;margin-bottom:18px}.sk-head{display:grid;grid-template-columns:1fr 360px;gap:40px}.sk-title{height:40px;width:70%;margin-bottom:12px}.sk-line{height:16px;width:90%;margin-bottom:18px}.sk-strip{height:72px}.sk-cover{height:240px;border-radius:14px}
.skeleton{display:grid;gap:14px;padding:24px 0}.skeleton .sk-title{width:40%}.skeleton .sk-card{height:220px;border-radius:16px}
@media(max-width:900px){.project-head,.project-body,.sk-head{grid-template-columns:1fr}.project-aside{position:static;max-height:none;overflow:visible}/* две колонки: линии рисуют 1px-зазоры сетки на фоне --sf-line, поэтому нечётное число фактов не ломает рамки */.fact-strip{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--sf-line)}.fact-strip>div{background:var(--sf-surface);border:0}.fact-strip>div:last-child:nth-child(odd){grid-column:1/-1}.kv,.risk-table>div{grid-template-columns:1fr}.steps{grid-template-columns:1fr 1fr}}
/* реестр #admin-projects: готовность к публикации, бейдж заявки инициатора, форма причины отклонения */
#registry .readiness{border:0;padding:0;min-width:7em}
#registry .readiness summary{min-height:0;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--sf-ink)}
#registry .readiness ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px;min-width:15em;font-size:13px;line-height:1.4;color:var(--sf-ink-2)}
#registry .readiness .is-ok span{color:var(--positive,#236846)}
#registry .readiness .is-missing{color:var(--sf-ink)}
#registry .readiness .is-missing small{display:block;margin:2px 0 0 1.25em;color:var(--sf-muted)}
#registry .readiness label{display:flex;gap:8px;align-items:center;cursor:pointer}
#registry .badge-origin{color:var(--sf-ink-2);background:var(--sf-notice);border:1px solid var(--sf-line)}
#registry td:first-child .badge-origin{margin-top:6px}
#registry .decline-form{flex-basis:100%;display:grid;gap:8px;max-width:360px}
#registry .decline-form .field{margin:0}
#registry .decline-form textarea{min-height:72px}
/* заявка инициатора #submit-project: одна колонка в стиле формы профиля; метрики строкой «показатель · число · единица · ×» */
.submit-project{max-width:760px}
.submit-project fieldset{border:0;padding:0;margin:0 0 24px}
.submit-project legend{padding:0;font-size:14px;font-weight:600;color:var(--sf-ink);margin-bottom:4px}
.submit-project textarea{min-height:96px}
.submit-project select{width:100%}
.submit-project .check span{color:var(--sf-ink-2)}
.submit-project .metric-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr) 44px;gap:8px;margin:8px 0}
.submit-project .metric-row button{padding:0;font-size:18px;line-height:1}
.submit-project [data-add-metric]{margin-top:4px}
.submit-done h2{margin:0 0 8px}.submit-done h2:focus{outline:none}
#my-projects .split{margin-bottom:12px}
@media(max-width:560px){.submit-project .metric-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 44px}.submit-project .metric-row [name="metric-label"]{grid-column:1/-1}}
/* админ-консоль (site/admin-console.js): сводка с очередями, «Интерес к проектам», кнопка «+», мастер проекта, обложка, история */
.admin-queues{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:20px 0 8px}
.queue-card{display:grid;gap:4px;align-content:start;padding:16px 18px;border:1px solid var(--sf-line);border-radius:10px;background:var(--sf-surface);color:var(--sf-ink);text-decoration:none;min-height:44px}
.queue-card:hover{border-color:var(--sf-ink-2)}.queue-card:focus-visible{outline:2px solid var(--sf-accent);outline-offset:2px}
.queue-count{font-size:32px;line-height:1.1;font-weight:600;font-variant-numeric:tabular-nums;color:var(--sf-accent)}
.queue-card b{font-size:15px;font-weight:600}.queue-card small{font-size:13px;color:var(--sf-muted)}
.queue-card.is-zero .queue-count{color:var(--sf-muted);font-weight:400}
.admin-paid{margin:4px 0 24px;font-size:14px;color:var(--sf-ink-2)}.admin-paid b{color:var(--sf-ink);font-variant-numeric:tabular-nums}.admin-paid.is-zero b{color:var(--sf-muted);font-weight:400}
.admin-interest .split{flex-wrap:wrap}.period-toggle{margin-left:0}
.interest-totals{font-size:14px;color:var(--sf-ink-2)}
.interest-table th[scope="row"]{font-weight:400;text-align:left;min-width:14em}
.interest-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.spark-cell{color:var(--sf-accent);line-height:0}.spark{display:block}
.interest-people,.row-history{border:0;padding:0;background:none}.interest-people{margin-top:6px;font-size:13px}.interest-people summary{cursor:pointer;color:var(--sf-ink-2);min-height:0}
.interest-people ul{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px}.interest-people li{display:grid}.interest-people small{color:var(--sf-muted)}
.admin-advanced{margin-top:28px;border-top:1px solid var(--sf-line);padding-top:4px}.admin-advanced>summary{cursor:pointer;font-weight:600;padding:12px 0;min-height:44px}
.fab-wrap{position:fixed;right:24px;bottom:24px;z-index:50;display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.fab{width:56px;height:56px;border-radius:50%;border:0;padding:0;background:var(--sf-accent);color:#fff;font-size:30px;line-height:1;box-shadow:0 6px 18px rgba(23,25,29,.22);cursor:pointer;display:grid;place-items:center;transition:transform .15s ease,box-shadow .15s ease}
.fab:hover{box-shadow:0 8px 24px rgba(23,25,29,.28)}.fab:focus-visible{outline:3px solid var(--sf-ink);outline-offset:3px}
.fab-wrap.is-open .fab{transform:rotate(45deg)}
.fab-menu{display:grid;min-width:240px;padding:6px;background:var(--sf-surface);border:1px solid var(--sf-line);border-radius:12px;box-shadow:0 10px 30px rgba(23,25,29,.18)}
.fab-menu[hidden]{display:none}
.fab-menu a{display:flex;align-items:center;min-height:44px;padding:0 14px;border-radius:8px;color:var(--sf-ink);text-decoration:none}
.fab-menu a:hover,.fab-menu a:focus-visible{background:var(--sf-soft);outline:none}
@media(prefers-reduced-motion:reduce){.fab{transition:none}.fab-wrap.is-open .fab{transform:none}}
@media print{.fab-wrap{display:none}}
.wizard-steps ol{list-style:none;margin:16px 0 4px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.wizard-steps button{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:6px 14px;border:1px solid var(--sf-line);border-radius:999px;background:var(--sf-surface);color:var(--sf-ink);font:inherit;font-size:14px;cursor:pointer}
.wizard-steps button[aria-current="step"]{background:var(--sf-ink);color:#fff;border-color:var(--sf-ink)}
.wizard-steps button:disabled{opacity:.45;cursor:not-allowed}
.wizard-num{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;border:1px solid currentColor;font-size:12px;font-variant-numeric:tabular-nums}
.wizard-progress{font-size:14px;color:var(--sf-muted);margin:4px 0 12px}
.wizard-form{max-width:760px}.wizard-form .two{grid-template-columns:1fr}
.wizard-step>h2{margin:0 0 6px}.wizard-step>h2:focus{outline:none}
.wizard-actions{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0 96px;max-width:760px}.wizard-actions button{min-height:44px}
.wizard-actions [data-wizard-go="next"],.wizard-actions [data-wizard-go="publish"]{margin-left:auto}
.cover-preview{margin:0 0 12px}.cover-preview img{display:block;width:100%;max-width:320px;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:8px;border:1px solid var(--sf-line)}
.cover-preview figcaption{font-size:13px;color:var(--sf-muted);margin-top:6px}
.cover-preview [data-cover-note]:not([hidden]){display:block;margin-top:6px}
.wizard-confirm{margin:16px 0 0}.wizard-confirm p{margin:0 0 8px}.wizard-confirm .actions{margin:0;display:flex;flex-wrap:wrap;gap:10px}.wizard-confirm button{min-height:44px}
.spark-empty{font-size:13px;white-space:nowrap}
.wizard-ready{margin:0 0 8px}
.readiness-list{list-style:none;margin:8px 0 12px;padding:0;display:grid;gap:8px;font-size:14px;line-height:1.4;color:var(--sf-ink-2)}
.wizard-history{margin-top:20px}.wizard-history h3{margin:0 0 6px;font-size:16px}
.history-list{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px;font-size:13px}.history-list li{display:grid;grid-template-columns:9.5em 1fr;gap:8px}
.history-list time{color:var(--sf-muted);font-variant-numeric:tabular-nums}.history-list small{color:var(--sf-muted)}
.row-history{margin-top:8px;font-size:13px}.row-history summary{cursor:pointer;color:var(--sf-ink-2);min-height:0}
/* место под кнопкой «+», чтобы она не закрывала последние строки */
body:has(.fab-wrap) #workspace{padding-bottom:88px}
@media(max-width:860px){.admin-queues{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.admin-queues{gap:8px}.queue-card{padding:12px}.queue-count{font-size:26px}.fab-wrap{right:16px;bottom:16px}.history-list li{grid-template-columns:1fr}.wizard-actions [data-wizard-go="next"],.wizard-actions [data-wizard-go="publish"]{margin-left:0}}
/* Предпросмотр «как видит аноним» (#…?preview=anon): липкая полоса под шапкой; оглавление и правая колонка опускаются под неё. */
.preview-banner{position:sticky;top:var(--header-h,64px);z-index:3;margin:0 0 16px;padding:10px 14px;background:var(--sf-soft);border:1px solid var(--sf-accent);border-radius:8px;color:var(--sf-ink);font-size:14px;line-height:1.4}
.preview-banner a{color:var(--sf-accent);font-weight:600;white-space:nowrap}
#workspace:has(.preview-banner) .project-toc{top:calc(var(--header-h,64px) + 48px)}
#workspace:has(.preview-banner) .project-aside{top:calc(var(--header-h,64px) + 60px)}
@media(max-width:650px){.preview-banner{top:0}#workspace:has(.preview-banner) .project-toc{top:48px}}
/* База знаний (#faq): ссылки на документы платформы под последним разделом */
.faq-links{margin:12px 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:8px 20px}

/* База знаний (#faq): плавающее меню терминов слева — липкая карточка со своей вертикальной прокруткой, мелкий, но читаемый текст, пункт увеличивается по наведению; текст терминов — справа. На узких экранах меню становится горизонтальной лентой над текстом. Привязка та же, что у оглавления проекта (bindToc). */
.kb-layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:28px;align-items:start}
.project-toc.kb-menu{display:block;position:sticky;top:calc(var(--header-h,64px) + 16px);max-height:calc(100vh - var(--header-h,64px) - 32px);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-gutter:stable;padding:10px 8px;margin:0;border:1px solid var(--sf-line);border-radius:14px;background:var(--sf-surface);box-shadow:0 10px 30px rgba(23,25,29,.12),0 1px 2px rgba(23,25,29,.06);font-size:13px}
.kb-group{margin:10px 10px 4px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--sf-muted)}
.project-toc.kb-menu a{display:block;padding:7px 10px;margin:0;border:0;border-radius:8px;white-space:normal;line-height:1.3;transform-origin:left center;transition:transform .15s ease,color .15s ease,background-color .15s ease}
.project-toc.kb-menu a:hover{color:var(--sf-ink);background:var(--sf-notice);transform:scale(1.08)}
.project-toc.kb-menu a[aria-current="true"]{color:var(--sf-accent);font-weight:700;background:var(--sf-soft);border:0}
.kb-content .kb-item{padding:0 0 28px;scroll-margin-top:calc(var(--header-h,64px) + 20px)}
.kb-content .kb-item h2{font-size:20px;margin:0 0 10px}
.kb-content .kb-item+.kb-item{border-top:1px solid var(--sf-line);padding-top:24px}
@media(max-width:760px){.kb-layout{grid-template-columns:1fr;gap:16px}.project-toc.kb-menu{display:flex;gap:4px;top:calc(var(--header-h,64px) + 8px);max-height:none;overflow-x:auto;overflow-y:hidden;padding:8px;border-radius:12px}.kb-group{display:none}.project-toc.kb-menu a{white-space:nowrap;flex:none}.project-toc.kb-menu a:hover{transform:none}}
@media(prefers-reduced-motion:reduce){.project-toc.kb-menu a{transition:none}.project-toc.kb-menu a:hover{transform:none}}
/* Страница проекта в режиме администратора: пометки этапа доступа, панель управления, таблица документов. */
.access-tag{display:inline-block;margin:0 0 12px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;line-height:1.4}
.access-tag.is-public{color:var(--positive,#236846);background:#e8f3ec}
.access-tag.is-closed{color:var(--sf-accent);background:var(--sf-soft)}
.admin-preview{margin-top:0}
.admin-manage .badge{margin:0 6px 0 0;vertical-align:baseline}
.admin-manage .readiness{min-width:0;margin:0 0 12px}
.admin-manage .readiness ul{min-width:0}
.admin-manage-actions{display:grid;gap:8px;margin:0 0 14px}
.admin-manage-actions>*{width:100%;text-align:center}
.admin-manage .kv{font-size:13px}
.admin-stages td:first-child{white-space:nowrap}
.admin-files td{vertical-align:middle}
.admin-files .actions{margin:0;flex-wrap:nowrap}
.admin-files tr[data-file-form] td{background:var(--sf-notice);padding:4px 16px 16px}
.admin-files tr[data-file-form] .field{margin:12px 0}
.admin-file-add{margin-top:20px;padding-top:20px;border-top:1px solid var(--sf-line)}
.admin-file-add h3{font-size:16px;margin:0}
button.danger{color:var(--danger,#a32126)}
button.danger[data-armed]{color:#fff;background:var(--danger,#a32126);border-color:var(--danger,#a32126)}
@media(max-width:760px){.admin-stages td:first-child{white-space:normal}.admin-files .actions{flex-wrap:wrap}}
#s-public h3{margin:28px 0 10px;font-size:17px}
.admin-manage h4{margin:4px 0 6px;font-size:14px}
.admin-doc-list{list-style:none;margin:8px 0 12px;padding:0;display:grid;gap:8px;font-size:13px}
.admin-doc-list li{display:grid;grid-template-columns:1fr auto;gap:2px 10px;align-items:center;padding-bottom:8px;border-bottom:1px solid var(--sf-line)}
.admin-doc-list small{grid-column:1;color:var(--sf-muted)}
.admin-doc-list button{grid-column:2;grid-row:1/3;min-height:36px;padding:6px 10px}
@media(max-width:760px){.admin-files thead{display:none}.admin-files tr[data-file]{display:grid;grid-template-columns:1fr;padding:12px 0;border-bottom:1px solid var(--sf-line)}.admin-files tr[data-file] td{border:0;padding:2px 0}.admin-files tr[data-file] td:first-child{font-weight:600}.admin-files tr[data-file] .actions{margin-top:8px}.admin-files tr[data-file-form]:not([hidden]){display:block}.admin-files tr[data-file-form] td{display:block}}
@media(max-width:760px){.admin-files,.admin-files tbody{display:block;width:100%}.admin-files tr[data-file-form] .two{grid-template-columns:minmax(0,1fr);gap:0}}
.admin-files .two>*,.admin-file-add .two>*{min-width:0}.admin-files .field select,.admin-file-add .field select{width:100%}

/* Поле пароля с кнопкой-глазом: перечёркнутый глаз — пароль скрыт, открытый — виден. */
.password-wrap{position:relative;display:block;margin-top:7px}.field .password-wrap input{width:100%;margin-top:0;padding-right:48px}
.password-toggle{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:40px;height:40px;display:grid;place-items:center;padding:0;border:0;background:transparent;color:var(--sf-muted,#70665f);cursor:pointer;border-radius:6px}
.password-toggle:hover{color:var(--sf-ink,#17191d)}.password-toggle[aria-pressed="true"] .eye-slash{display:none}
/* действие администратора («Управлять») — синее, отличается от красной кнопки оплаты посетителя */
.button.admin,.card-cta .button.admin{background:#1f5fbf;border-color:#1f5fbf;color:#fff}
.button.admin:hover,.card-cta .button.admin:hover{background:#174a96;border-color:#174a96;color:#fff}
/* «Мнение по вашей идее» (#idea-request) и список заявок администратора */
.idea-request{max-width:1080px}
.idea-request-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:20px;align-items:start;margin-top:18px}
.idea-request-grid aside ol{padding-left:20px;display:grid;gap:8px}
.hp-field{position:absolute!important;left:-10000px!important;width:1px;height:1px;opacity:0}
.idea-request-item .split{display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.idea-request-text{white-space:pre-wrap;max-width:80ch}
.idea-request-item .actions{display:flex;gap:10px;flex-wrap:wrap;align-items:end}
@media (max-width:820px){.idea-request-grid{grid-template-columns:1fr}}
/* «Разместить проект»: объяснение, что проект публикуется только после проверки */
.submit-review{margin:0 0 18px}.submit-review h2{font-size:18px;margin:0 0 8px}.submit-review ol{margin:0 0 8px;padding-left:20px;display:grid;gap:6px}
