/* Новый облик Нейроголоса — система макета (docs/audit/2026-10-04-neurogolos-new-look,
   экраны D-*.dc.html, одобрено владельцем 2026-10-04). Ядро перенесено из макета
   дословно; темы — по системе (prefers-color-scheme) и вручную (data-theme на <html>). */

html.nv{min-height:100%}
body{margin:0;min-height:100vh;display:flex;flex-direction:column}
body>main{flex:1 0 auto;width:100%}
.nv{--ground:#EEF0F3;--panel:#FFFFFF;--sel:#F0F2F5;--raised:#FFFFFF;--sunk:#E6E9ED;--line:#DFE2E7;--line-2:#C7CBD3;--ctl:#7E8593;
--ink:#12151B;--ink-2:#3A404C;--muted:#5C6370;--err:#C42B30;--err-soft:#FBE7E7;--on-err:#FFFFFF;--anno-k:#8E4A4D;--ok:#1F7A47;--ok-soft:#E1F2E8;--ok-t:#176239;--flag:#3E4FB0;
--band:rgba(18,21,27,.045);--wave:#C7CCD3;--wave-on:#4A505C;--md-back:#CDD1D8;--sunk-sh:inset 0 1px 2px rgba(18,21,27,.1);--shadow:0 16px 36px -18px rgba(18,21,27,.32);
--sig:#F2A541;--on-sig:#12151B;--sig-t:#8A5208;--sig-g:#B87414;--sig-ring:#B87414;--sig-edge:#D88E2C;--sig-soft:#FBEAD2;--lamp:#B87414;
--btn:#F2A541;--on-btn:#12151B;--btn-h:#EE9B2F;--btn-edge:#D88E2C;--scrim:rgba(18,21,27,.42)}
@media (prefers-color-scheme: dark){.nv:not([data-theme=light]){--ground:#0C0E13;--panel:#14171E;--sel:#1D212A;--raised:#1F232C;--sunk:#090A0E;--line:#262B35;--line-2:#3A404C;--ctl:#737B8B;
--ink:#EEF0F4;--ink-2:#C5CAD4;--muted:#98A0AE;--err:#FF6B6B;--err-soft:#3B1F24;--on-err:#12151B;--anno-k:#E3A7AA;--ok:#5BD08E;--ok-soft:#15301F;--ok-t:#5BD08E;--flag:#9DB2FF;
--band:rgba(238,240,244,.05);--wave:#363C48;--wave-on:#A9B0BD;--md-back:#232730;--sunk-sh:inset 0 1px 2px rgba(0,0,0,.45);--shadow:0 16px 36px -16px rgba(0,0,0,.8);
--sig:#F2A541;--on-sig:#12151B;--sig-t:#F2A541;--sig-g:#F2A541;--sig-ring:#F2A541;--sig-edge:transparent;--sig-soft:rgba(242,165,65,.14);--lamp:#F2A541;
--btn:#F2A541;--on-btn:#12151B;--btn-h:#F6B866;--btn-edge:transparent;--scrim:rgba(5,6,9,.72)}.nv:not([data-theme=light]) .mk-l{display:none}.nv:not([data-theme=light]) .mk-d{display:block}}
.nv[data-theme=dark]{--ground:#0C0E13;--panel:#14171E;--sel:#1D212A;--raised:#1F232C;--sunk:#090A0E;--line:#262B35;--line-2:#3A404C;--ctl:#737B8B;
--ink:#EEF0F4;--ink-2:#C5CAD4;--muted:#98A0AE;--err:#FF6B6B;--err-soft:#3B1F24;--on-err:#12151B;--anno-k:#E3A7AA;--ok:#5BD08E;--ok-soft:#15301F;--ok-t:#5BD08E;--flag:#9DB2FF;
--band:rgba(238,240,244,.05);--wave:#363C48;--wave-on:#A9B0BD;--md-back:#232730;--sunk-sh:inset 0 1px 2px rgba(0,0,0,.45);--shadow:0 16px 36px -16px rgba(0,0,0,.8);
--sig:#F2A541;--on-sig:#12151B;--sig-t:#F2A541;--sig-g:#F2A541;--sig-ring:#F2A541;--sig-edge:transparent;--sig-soft:rgba(242,165,65,.14);--lamp:#F2A541;
--btn:#F2A541;--on-btn:#12151B;--btn-h:#F6B866;--btn-edge:transparent;--scrim:rgba(5,6,9,.72)}.nv[data-theme=dark] .mk-l{display:none}.nv[data-theme=dark] .mk-d{display:block}
.nv{color-scheme:light}.nv[data-theme=dark]{color-scheme:dark}@media (prefers-color-scheme: dark){.nv:not([data-theme=light]){color-scheme:dark}}
/* имена токенов прежних стилей (формы, загрузка, сверка) — через токены макета */
.nv{--surface:var(--panel);--surface-2:var(--sel);--surface-3:var(--sunk);--rule:var(--line);--rule-2:var(--line-2);--rule-control:var(--ctl);
--accent:var(--sig-t);--accent-hover:var(--sig-t);--accent-soft:var(--sig-soft);--accent-ink:var(--on-sig);--crit:var(--err);--crit-soft:var(--err-soft);--crit-ink:var(--on-err);
--warn:var(--sig-t);--warn-soft:var(--sig-soft);--gone:var(--ctl);
--sans:var(--f-ui);--book:var(--f-book);--mono:var(--f-mono);--disp:var(--f-disp);--r:12px;--r-sm:8px;--r-lg:16px;--shadow-lg:var(--shadow);--btn-ink:var(--on-btn);--btn-hover:var(--btn-h)}
.nv{--f-disp:"Unbounded","Unbounded Fallback",system-ui,sans-serif;--f-ui:"Onest","Onest Fallback",system-ui,-apple-system,"Segoe UI",sans-serif;--f-book:"Literata","Literata Fallback",Georgia,"PT Serif",serif;--f-mono:"JetBrains Mono","JetBrains Mono Fallback",ui-monospace,Menlo,Consolas,monospace;
--r-panel:12px;--r-card:10px;--r-ctl:8px;--r-pill:999px;--md-plate:#171A21;--md-disc:#0F1116;--md-ink:#EEF0F4;
--c-put:#2BB3A8;--c-krov:#D6447A;--c-gard:#9B83F0;--c-ras:#4DA3E8;--c-solo:#8E97A6;--c-0:var(--c-put);--c-1:var(--c-krov);--c-2:var(--c-gard);--c-3:var(--c-ras);
font:400 14px/20px var(--f-ui);color:var(--ink);background:var(--ground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums lining-nums}


.nv,.nv *,.nv *::before,.nv *::after{box-sizing:border-box}
:where(.nv) :where(h1,h2,h3,h4,p,ul,ol,li,figure,dl,dt,dd){margin:0;padding:0}
:where(.nv) :where(ul,ol){list-style:none}
:where(.nv) a{color:inherit;text-decoration:none}
:where(.nv) :where(button,input,select,textarea){font:inherit;color:inherit;margin:0}
:where(.nv) button{background:none;border:0;padding:0;cursor:pointer;text-align:inherit}
.nv :focus-visible{outline:2px solid var(--sig-ring);outline-offset:2px}
.nv .mk-d{display:none}
.sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;padding:0}
.mono{font-family:var(--f-mono);font-weight:500}
.grow{flex:1}
.ico{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.ico .f{fill:currentColor;stroke:none}
.h-page{font:600 30px/36px var(--f-disp);letter-spacing:-.015em}
.h-sec{font:600 20px/26px var(--f-ui);letter-spacing:-.005em}
.cap{font:600 12px/16px var(--f-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.q{color:var(--ink-2);font-weight:500;text-decoration:underline;text-decoration-color:var(--line-2);text-decoration-thickness:1px;text-underline-offset:4px}
.q:hover{color:var(--ink);text-decoration-color:currentColor}
/* кнопки: главная · сигнальная · вторичная · тихая; высоты 36 и 44 */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:36px;padding:0 14px;border-radius:var(--r-ctl);font:600 14px/20px var(--f-ui);white-space:nowrap;cursor:pointer}
.btn-l{height:44px;padding:0 18px;font-size:16px;line-height:24px}
.btn-main{background:var(--btn);color:var(--on-btn);box-shadow:inset 0 0 0 1px var(--btn-edge)}
.btn-main:hover{background:var(--btn-h)}
.btn-sig{background:var(--sig);color:var(--on-sig);box-shadow:inset 0 0 0 1px var(--sig-edge)}
.btn-sec{color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-2)}
.btn-sec:hover{box-shadow:inset 0 0 0 1px var(--ctl)}
.btn-q{color:var(--ink-2);padding:0 10px}
.btn-q:hover{color:var(--ink);background:var(--sel)}
.ib{width:36px;padding:0}
.ib .ico{width:18px;height:18px}
/* чипы-фильтры: рамка, выбранный — заливка сигналом */
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 14px;border-radius:var(--r-pill);box-shadow:inset 0 0 0 1px var(--line-2);font:500 14px/20px var(--f-ui);color:var(--ink-2);white-space:nowrap;cursor:pointer}
.chip b{font:500 13px/18px var(--f-mono);color:var(--muted)}
.chip:hover{box-shadow:inset 0 0 0 1px var(--ctl)}
.chip[aria-pressed="true"]{background:var(--sig);color:var(--on-sig);box-shadow:inset 0 0 0 1px var(--sig-edge)}
.chip[aria-pressed="true"] b{color:var(--on-sig)}
.tag{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:var(--r-pill);background:var(--sel);font:500 13px/18px var(--f-ui);color:var(--ink-2);white-space:nowrap}
.tcur{display:inline-flex;align-items:center;height:24px;padding:0 9px;border-radius:var(--r-pill);background:var(--sig);color:var(--on-sig);box-shadow:inset 0 0 0 1px var(--sig-edge);font:500 14px/20px var(--f-mono)}
/* огоньки: форма + цвет, без свечения */
.lamp{position:relative;display:inline-block;width:10px;height:10px;border-radius:50%;flex:none;overflow:hidden}
.lamp.ok{background:var(--ok)}
.lamp.run{box-shadow:inset 0 0 0 1.5px var(--lamp)}
.lamp.run::after{content:"";position:absolute;left:0;top:0;bottom:0;width:50%;background:var(--lamp)}
.lamp.acc{box-shadow:inset 0 0 0 1.5px var(--ctl)}
.lamp.bad{width:9px;height:9px;margin:0 .5px;border-radius:1.5px;background:var(--err);transform:rotate(45deg)}
.lamp.wait{box-shadow:inset 0 0 0 1.5px var(--lamp)}
.lamp.wait::after{content:"";position:absolute;left:3px;top:3px;width:4px;height:4px;border-radius:50%;background:var(--lamp)}
.st{display:inline-flex;align-items:center;gap:8px}
/* табло: утопленная панель, моноширинные цифры */
.tablo{display:flex;align-items:stretch;border-radius:var(--r-ctl);background:var(--sunk);box-shadow:var(--sunk-sh)}
.tablo>div{display:flex;flex-direction:column;justify-content:center;gap:2px;padding:6px 16px;border-left:1px solid var(--line)}
.tablo>div:first-child{border-left:0}
.tablo .tl{font:500 12px/16px var(--f-ui);color:var(--muted);white-space:nowrap}
.tablo .tv{display:flex;align-items:center;gap:10px;font:500 16px/24px var(--f-mono);color:var(--ink);white-space:nowrap}
.tablo .tv small{font:400 13px/18px var(--f-ui);color:var(--muted)}
/* шкалы прогресса */
.segm{display:flex;gap:2px}
.segm i{flex:1;height:6px;border-radius:2px;background:var(--line)}
.segm i.on{background:var(--sig-g);box-shadow:inset 0 0 0 1px var(--sig-edge)}
.dbar{display:flex;height:6px;border-radius:var(--r-pill);background:var(--line);overflow:hidden}
.dbar i{display:block;height:100%}
.dbar .d-e{background:var(--err)}
.dbar .d-f{background:var(--ctl)}
/* медальон — образ книги */
.md{position:relative;display:block;width:var(--s);height:var(--s);flex:none}
.md-back{position:absolute;inset:0;border-radius:var(--r-card);background:var(--md-back)}
.md-back.b1{transform:translate(calc(var(--s) * .032),calc(var(--s) * -.032))}
.md-back.b2{transform:translate(calc(var(--s) * .064),calc(var(--s) * -.064));opacity:.55}
.md-plate{position:absolute;inset:0;border-radius:var(--r-card);background:var(--md-plate);display:grid;place-items:center;overflow:hidden}
.md-sm .md-plate,.md-sm .md-back{border-radius:var(--r-ctl)}
.md-plate svg{position:absolute;inset:0;width:100%;height:100%;display:block}
.md-num{position:relative;font:700 var(--n)/1 var(--f-disp);letter-spacing:-.02em;color:var(--md-ink);transform:translateY(-.02em)}
.md-put{--mc:var(--c-put)}
.md-krov{--mc:var(--c-krov)}
.md-gard{--mc:var(--c-gard)}
.md-ras{--mc:var(--c-ras)}
.md-solo{--mc:var(--c-solo)}
.md-bars{fill:none;stroke:var(--mc);stroke-linecap:round}
.md-ring{fill:var(--md-disc);stroke:var(--mc);stroke-opacity:.5}
.md-wait{fill:none;stroke:var(--mc);stroke-opacity:.45;stroke-dasharray:1.2 3.2;stroke-linecap:round}
/* загрузка в шапке книги: пока идёт передача, по кругу всегда бежит волна
   будущей обложки; уже переданная доля горит цветом подборки, остальное —
   приглушено (замечание владельца к 0.9.22). Кольцо ожидания на это время
   уходит. Без движения (reduced motion) — только доля, без бега */
.md-forming path{fill:none;stroke:var(--mc);stroke-width:2;stroke-linecap:round;opacity:0;transform-origin:50px 50px;transition:opacity var(--m-slow) var(--e-out)}
.md.is-forming .md-forming path{opacity:.22}
.md-forming path.on,.md.is-forming .md-forming path.on{opacity:1}
.md.is-forming .md-wait{opacity:0;transition:opacity var(--m-slow) var(--e-out)}
.md.is-forming .md-forming path{animation:md-run calc(1.5 * var(--m-loop-pulse)) var(--e-out) infinite alternate;animation-delay:calc(var(--i) * var(--m-loop-pulse) * -1.5 / 56)}
@keyframes md-run{from{transform:scale(.9)}to{transform:scale(1.05)}}
@media (prefers-reduced-motion:reduce){.md-forming path,.md.is-forming .md-wait{transition:none}.md.is-forming .md-forming path{animation:none}}
.md-plate svg.md-gly{position:relative;inset:auto;fill:none;stroke:var(--md-ink);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.cdot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--mc);flex:none}
/* шкала записи и метки мест */
.scl{display:block;width:100%;height:auto}
.scl path{fill:none;stroke-linecap:round}
.scl .wv-on{stroke:var(--wave-on)}
.scl .wv-off{stroke:var(--wave)}
.mk-err{fill:var(--err)}
.mk-fp{fill:var(--ctl)}
.mk-wait{fill:none;stroke:var(--ctl);stroke-width:1.3}
.mk-cur-o{fill:none;stroke:var(--sig-ring);stroke-width:1.6}
.mk-cur-i{fill:var(--sig-g);stroke:var(--sig-edge);stroke-width:1}
.ph{fill:var(--sig-ring)}
.axis{position:relative;height:16px;font:400 12px/16px var(--f-mono);color:var(--muted)}
.axis span{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap}
.axis span.first{transform:none}
/* значки решений: пустой круг, крест, черта */
.vi{display:block;width:20px;height:20px;flex:none}
.vi-err circle{fill:var(--err)}
.vi-err path{fill:none;stroke:var(--on-err);stroke-width:2.2;stroke-linecap:round}
.vi-fp circle{fill:var(--ctl)}
.vi-fp path{fill:none;stroke:var(--panel);stroke-width:2.4;stroke-linecap:round}
.vi-wait circle{fill:none;stroke:var(--ctl);stroke-width:1.6}
kbd{display:inline-block;min-width:20px;padding:0 5px;border-radius:4px;box-shadow:inset 0 0 0 1px var(--line-2);font:500 12px/16px var(--f-mono);color:var(--ink-2);text-align:center}
.wrap{max-width:1440px;margin:0 auto;padding:0 64px}
.hd{border-bottom:1px solid var(--line)}
.hd-in{max-width:1440px;margin:0 auto;padding:0 64px;height:56px;display:flex;align-items:center;gap:28px}
.brand{display:inline-flex;align-items:center;gap:10px;font:600 16px/20px var(--f-disp);letter-spacing:-.01em;color:var(--ink);white-space:nowrap;border-radius:var(--r-ctl)}
.brand img{width:28px;height:28px;display:block}
.nav{display:flex;gap:2px;align-self:stretch}
.nav a{position:relative;display:inline-flex;align-items:center;padding:0 12px;font:500 14px/20px var(--f-ui);color:var(--ink-2)}
.nav a:hover{color:var(--ink)}
.nav a[aria-current="page"]{color:var(--ink);font-weight:600}
.nav a[aria-current="page"]::after{content:"";position:absolute;left:12px;right:12px;bottom:-1px;height:2px;border-radius:2px;background:var(--sig-ring)}
.acct{margin-left:auto;display:flex;align-items:center;gap:16px}
.bal{display:inline-flex;align-items:center;gap:8px;font:500 14px/20px var(--f-ui);color:var(--ink);white-space:nowrap}
.bal .ico{color:var(--muted)}
.acct .q{display:inline-block;padding:2px 0;font-size:14px}
.ava{width:32px;height:32px;border-radius:50%;box-shadow:inset 0 0 0 1px var(--line-2);display:grid;place-items:center;font:600 12px/16px var(--f-ui);color:var(--ink);flex:none}
.ft{border-top:1px solid var(--line);margin-top:40px}
.ft-in{max-width:1440px;margin:0 auto;padding:18px 64px 22px;display:flex;align-items:center;gap:8px 24px;flex-wrap:wrap;font:400 13px/18px var(--f-ui);color:var(--muted)}
.ft-in nav{margin-left:auto;display:flex;gap:6px 20px;flex-wrap:wrap}
.ft-in nav a{display:inline-block;padding:3px 0;color:var(--ink-2)}
.ft-in nav a:hover{color:var(--ink);text-decoration:underline}
.ft-c a{display:inline-block;padding:3px 0;color:var(--ink-2);text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:3px}
.ft-c a:hover{color:var(--ink);text-decoration-color:currentColor}
@media (max-width:900px){
.wrap,.hd-in,.ft-in{padding-left:16px;padding-right:16px}
.hd-in{height:auto;flex-wrap:wrap;gap:6px 16px;padding-top:10px;padding-bottom:4px}
.nav{order:3;width:100%;min-height:40px}
.nav a{padding:10px}
.acct{gap:12px}
.ft-in nav{margin-left:0}
}
@media (max-width:520px){
.acct .q{display:none}
}
/* меню «⋯»: закрыто, раскрывается щелчком */
details.mw{position:relative}
details.mw>summary{list-style:none}
details.mw>summary::-webkit-details-marker{display:none}
details.mw[open]>summary{background:var(--sel);color:var(--ink)}
.menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;width:272px;padding:6px;border-radius:var(--r-card);background:var(--raised);box-shadow:var(--shadow),0 0 0 1px var(--line)}
.menu button{display:flex;align-items:center;gap:10px;width:100%;height:36px;padding:0 10px;border-radius:var(--r-ctl);font:500 14px/20px var(--f-ui);color:var(--ink);white-space:nowrap;text-align:left}
.menu button:hover{background:var(--sel)}
.menu .ico{color:var(--muted)}
.mi-n{width:16px;flex:none;text-align:center;font:600 13px/18px var(--f-ui);color:var(--muted)}
.mi-sep{display:block;height:1px;margin:4px 6px;background:var(--line)}
.menu .mi-del,.menu .mi-del .ico{color:var(--err)}
/* «Удалить материал «…»» с длинным названием переносится, а не вылезает из меню */
.nv .menu .mi-del{white-space:normal;height:auto;min-height:36px;padding-top:6px;padding-bottom:6px;text-align:left}
@media (max-width:520px){.nv .menu .mi-del{min-height:44px}}
.mi-d{padding:0 10px 8px 36px;font:400 12px/16px var(--f-ui);color:var(--muted)}
.ib.btn-l{width:44px}
/* баланс в шапке — ссылка («Запросить минуты» по щелчку); на узком экране короче */
.bal:hover{text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:4px}
@media (max-width:520px){.bal-h{display:none}}
/* Прежние имена кнопок служебных страниц — в виде кнопок макета */
.nv .btn:not(.btn-main):not(.btn-sec):not(.btn-q):not(.btn-sig):not(.btn-secondary):not(.btn-ghost){background:var(--btn);color:var(--on-btn);box-shadow:inset 0 0 0 1px var(--btn-edge)}
.nv .btn:not(.btn-main):not(.btn-sec):not(.btn-q):not(.btn-sig):not(.btn-secondary):not(.btn-ghost):hover{background:var(--btn-h)}
.nv .btn-secondary{color:var(--ink);background:none;box-shadow:inset 0 0 0 1px var(--line-2)}
.nv .btn-secondary:hover{box-shadow:inset 0 0 0 1px var(--ctl)}
.nv .btn-ghost{color:var(--ink-2);background:none;padding:0 10px}
.nv .btn-ghost:hover{color:var(--ink);background:var(--sel)}
.nv .btn-lg{height:44px;padding:0 18px;font-size:16px;line-height:24px}
.nv .btn-danger,.nv .btn-ghost.btn-danger{color:var(--err)}
.nv .btn:disabled{opacity:.55;cursor:default}
.nv .btn:hover{text-decoration:none}
.nv a.btn{text-decoration:none}
.nv h1{font-family:var(--f-disp);font-weight:600;letter-spacing:-.015em}
/* подзаголовки текстов — шрифт интерфейса, как .h-sec макета (приёмка 2026-10-05) */
.nv h2{font-family:var(--f-ui);font-weight:600;letter-spacing:-.005em}
.nv h3{font-family:var(--f-ui);font-weight:600}
.nv .sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;padding:0}
.nv .skip{position:absolute;left:-999px;z-index:30}
.nv .skip:focus{left:16px;top:8px;background:var(--panel);padding:8px 12px;border-radius:var(--r-ctl)}
.nv .muted{color:var(--muted)}.nv .small{font-size:13px;line-height:19px}.nv .xs{font-size:12px;line-height:17px}

/* ── дополнения к системе макета: то, чего в статичных экранах не было ── */
/* меню аккаунта: почта, тема, выход */
.acct-menu>summary.ava{cursor:pointer}
.acct-menu .menu{width:260px}
.mi-mail{padding:8px 10px 6px;word-break:break-all}
.theme-sw{display:flex;gap:2px;padding:4px;margin:2px 4px 4px;border-radius:var(--r-ctl);background:var(--sunk)}
.nv .menu .theme-sw button{flex:1;justify-content:center;height:30px;padding:0 6px;font-size:12px;border-radius:6px;color:var(--ink-2)}
.nv .menu .theme-sw button[aria-pressed="true"]{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--line)}
/* пункты меню — ссылки, формы, раскрывашки */
.menu a.mi,.menu details>summary{display:flex;align-items:center;gap:10px;width:100%;height:36px;padding:0 10px;border-radius:var(--r-ctl);font:500 14px/20px var(--f-ui);color:var(--ink);white-space:nowrap;cursor:pointer;list-style:none}
.menu details>summary::-webkit-details-marker{display:none}
.menu a.mi:hover,.menu details>summary:hover{background:var(--sel)}
.menu form{display:block}
.nv .menu .btn{width:auto;height:36px;justify-content:center;padding:0 12px}
.mi-form{padding:6px 10px 8px}
.mi-form label{display:flex;align-items:center;gap:10px;margin:0 0 6px;font:500 14px/20px var(--f-ui);color:var(--ink)}
.mi-form label .ico{color:var(--muted)}
.mi-row{display:flex;gap:6px}
.mi-row select{flex:1;min-width:0;height:36px;padding:0 8px;border-radius:var(--r-ctl);border:1px solid var(--line-2);background:var(--panel);color:var(--ink)}
.mi-more{display:inline-block;margin-top:6px;font-size:13px;color:var(--ink-2);text-decoration:underline}
.menu .round-form{position:static;display:flex;flex-direction:column;gap:8px;padding:8px 10px;margin:0;border:0;box-shadow:none;background:none;min-width:0}
.menu .round-form label{display:flex;flex-direction:column;gap:4px;font:500 13px/18px var(--f-ui);color:var(--ink-2)}
.menu .round-form input[type=file]{font-size:12px;max-width:100%}
/* телефон: баланс строкой на страницах, где он нужен (в шапке на узком экране его нет) */
/* баланс на телефоне — в шапке, короткой формой (макет D-phone) */

/* шапка гостя (макет главной): что это, вход и проба — на всех страницах гостя */
.hd-g .acts{margin-left:auto;display:flex;align-items:center;gap:6px}
.hd-g .acts .q{display:inline-block;padding:2px 0;margin-right:10px;font-size:14px}
@media (max-width:520px){.hd-g .acts .q{display:none}}

/* знак: светлая тема — чёрный, тёмная — янтарный */
.nv .brand .mk-d{display:none}
@media (prefers-color-scheme: dark){.nv:not([data-theme=light]) .brand .mk-d{display:block}.nv:not([data-theme=light]) .brand .mk-l{display:none}}
.nv[data-theme=dark] .brand .mk-d{display:block}.nv[data-theme=dark] .brand .mk-l{display:none}

/* служебные страницы (новый материал, импорт, ход проверки, вход, тексты):
   шапка страницы в духе макета — крошки, заголовок, действия справа */
.nv .scr-head,.nv .page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px 20px;flex-wrap:wrap;padding:16px 0 20px}
.nv .scr-head>div:first-child{min-width:0}
.nv .scr-head .crumbs,.nv .page-head .crumbs,.nv p.crumbs{padding-top:0;margin:0 0 6px}
.nv .title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.nv .head-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nv .h-section{font:600 20px/26px var(--f-ui);letter-spacing:-.005em}
.nv .h-card{font:600 16px/24px var(--f-ui)}
.nv main>.narrow:first-child,.nv main>.error-box:first-child{margin-top:40px}

/* ── нормы интерфейса проекта поверх системы макета (приёмка 2026-10-04) ── */
/* основа rem — 16 px: прежние размеры служебных форм заданы в rem, при 14 px
   на <html> они мельчали до 11 px; текст страницы — 14/20, как в макете */
html.nv{font-size:16px}
.nv body{font:400 14px/1.43 var(--f-ui)}
/* поля ввода — 16 px: мельче iOS увеличивает страницу при фокусе */
.nv input:not([type=checkbox]):not([type=radio]):not([type=file]),.nv select,.nv textarea{font-size:16px}
/* шапка не вылезает при увеличении 200 % */
.hd-in{flex-wrap:wrap;height:auto;min-height:56px;row-gap:4px}
.acct{flex-wrap:wrap;min-width:0;justify-content:flex-end}
/* меню на телефоне — цели 44 px */
@media (max-width:520px){.nv .menu button,.nv .menu a.mi,.nv .menu details>summary{min-height:44px;height:auto}}
/* телефон: кнопки карточек, плиток и строк, «⋯» и аватар — цели 44 px (QA 2026-10-04) */
@media (max-width:520px){
.nv main .btn{min-height:44px;height:auto}
.nv main .ib,.nv main details.mw>summary.ib{min-width:44px;min-height:44px}
.nv .acct-menu>summary.ava{width:44px;height:44px}
}
/* недоступная кнопка читается: прозрачность давала 1.8:1 в тёмной теме */
.nv .btn:disabled,.nv .btn[disabled]{opacity:1;background:var(--sel);color:var(--muted);box-shadow:inset 0 0 0 1px var(--line-2);cursor:default}
/* юридические тексты: таблица прокручивается сама, не страница; заголовки не обрезаются */
.nv .prose table{display:block;max-width:100%;overflow-x:auto}
.nv .prose h1,.nv .prose h2,.nv h1,.nv h2{line-height:1.25;overflow-wrap:anywhere}
/* высокий контраст: огонёк держит форму рамкой */
@media (forced-colors: active){.nv .lamp{forced-color-adjust:none;box-shadow:none;border:1.5px solid CanvasText}.nv .lamp.ok,.nv .lamp.bad{background:CanvasText}}

/* текст на заливке --accent: в светлой теме акцент тёмный (#8A5208) — текст белый */
.nv{--accent-ink:#FFFFFF}
@media (prefers-color-scheme: dark){.nv:not([data-theme=light]){--accent-ink:#12151B}}
.nv[data-theme=dark]{--accent-ink:#12151B}
/* кнопки внутри меню держат свой цвет: правило пунктов меню красило текст
   янтарной кнопки светлым (1.8:1 в тёмной теме) */
.nv .menu .btn-main{color:var(--on-btn)}
.nv .menu .btn-sec{color:var(--ink)}
/* интерлиньяж не теснее 1.4 (норма проекта) у мелких подписей служебных форм */
.nv .hint,.nv .steps li,.nv .upload-note,.nv label{line-height:1.45}
.nv .steps li span{line-height:1.5}
/* меню, прижатое к другой стороне (base.html: не влезло у края) */
.nv details.mw>.menu.to-left{left:0;right:auto}
/* телефон 320–360: баланс в шапке рядом со знаком и аватаром, без переноса строки */
@media (max-width:360px){.acct{gap:8px}.acct .bal .ico{display:none}.hd-in{column-gap:8px}}
/* длинное слово без пробелов (имя файла вместо названия, длинная почта) переносится,
   а не тянет страницу вбок (приёмка 2026-10-05: до 861 px на 320) */
.nv h1,.nv h2,.nv h3,.nv .c5-t,.nv .cont5 p,.nv .warn5 p,.nv .crumbs,.nv .crumbs a,.nv .r5-t,.nv .sh5,.nv .title,.nv .sub,.nv dd,.nv .ops5 td{overflow-wrap:anywhere;min-width:0}
.nv .crumbs{flex-wrap:wrap}
/* приёмка 2026-10-05, круг 2 */
/* юридические тексты и «Как это работает»: заголовок страницы того же размера, что у остальных */
.nv .prose h1{font-size:30px;line-height:36px}
/* поиск на компьютере — 14 px, как кнопки рядом; на сенсорных экранах остаётся 16 (iOS не увеличивает) */
@media (pointer:fine){.nv .search input{font-size:14px}}
/* подсказка в поле читается: прежняя давала 3.9:1 в тёмной теме */
.nv ::placeholder{color:var(--muted);opacity:1}
/* галочки согласий — крупнее системных 13 px */
.nv .check input[type=checkbox]{width:18px;height:18px;flex:none}
/* ссылки внутри текста служебных карточек (ход проверки): как ссылки-строки макета —
   чернилами с подчёркиванием, а не серым цветом окружающего текста */
.nv :is(.job-card,.prog-next) p a:not(.btn){color:var(--ink);text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:4px}
.nv :is(.job-card,.prog-next) p a:not(.btn):hover{text-decoration-color:currentColor}
/* главная, телефон: принудительный перенос оставлял «прочитал» одно в строке */
@media (max-width:520px){.p-land h1 br{display:none}}
/* ссылки внутри текстов и подписей галочек отличаются от текста: тихое
   подчёркивание (как .q макета); прежде «оферту» у обязательной галочки было
   не отличить от слов вокруг (приёмка 2026-10-05) */
.nv :is(.prose,.check) a:not(.btn){color:var(--ink);text-decoration:underline;text-decoration-color:var(--line-2);text-decoration-thickness:1px;text-underline-offset:4px}
.nv :is(.prose,.check) a:not(.btn):hover{text-decoration-color:currentColor}
/* карточка хода проверки: текст по левому краю, заголовок состояния 20 px */
.nv .job-card{text-align:left;align-items:flex-start}
.nv .state-title{font-size:20px;line-height:26px}
/* неактивная кнопка в меню различима и в тёмной теме: правило цвета кнопок меню
   давало тёмный текст на тёмной подложке (1.13:1, продукт-контроль 2026-10-05) */
.nv .menu .btn:disabled{color:var(--muted)}

/* ── язык движения (договор 2026-10-06, docs/audit/2026-10-06-neurogolos-motion-contract):
   четыре длительности и три кривые; чисел движения вне этих строк в CSS/JS нет.
   Вход — e-out, выход — e-in и короче; движутся только transform и opacity ── */
:root{
--m-micro:120ms;
--m-fast:160ms;
--m-base:220ms;
--m-slow:320ms;
--e-out:cubic-bezier(.2,.8,.2,1);
--e-in:cubic-bezier(.4,0,1,1);
--e-emph:cubic-bezier(.32,.72,0,1);
/* циклы бесконечных индикаторов (решения владельца 2026-10-06): только у
   animation … infinite; у конечных переходов — по-прежнему четыре длительности
   и три кривые. --e-loop — постоянная скорость вращения (крутилка) */
--m-loop-spin:800ms;
--m-loop-pulse:1600ms;
--e-loop:linear;
}
/* Переход между страницами — штатный переход браузера между документами:
   шапка стоит, содержимое уходит за m-fast и проявляется за m-base. Тема известна
   до первого кадра (скрипт темы в <head> base.html). Старые браузеры получают
   обычную загрузку */
@view-transition{navigation:auto}
/* имя шапки ставится только на время перехода (base.html, pageswap/pagereveal):
   постоянное view-transition-name делает шапку слоем, и шторка меню аккаунта
   уходила бы под затемнение */
.hd.nv-vt-head{view-transition-name:nv-head}
::view-transition-group(nv-head),::view-transition-new(nv-head){animation:none}
::view-transition-old(nv-head){display:none}
::view-transition-old(root){animation:var(--m-fast) var(--e-in) both nv-page-out}
::view-transition-new(root){animation:var(--m-base) var(--e-out) both nv-page-in}
@keyframes nv-page-out{to{opacity:0}}
@keyframes nv-page-in{from{opacity:0;transform:translateY(8px)}}
/* «меньше движения» — только проявление за m-micro, без сдвига */
@media (prefers-reduced-motion:reduce){
::view-transition-old(root){animation:var(--m-micro) var(--e-in) both nv-page-out}
::view-transition-new(root){animation:var(--m-micro) var(--e-out) both nv-page-fade}
}
@keyframes nv-page-fade{from{opacity:0}}

/* ── общая рамка поверхностей (static/surfaces.js): панель в движении несёт
   data-motion pre → in → out; затемнение — одно на страницу ── */
/* прокрутку под окном держит surfaces.js (колесо, палец, клавиши); содержимое окна
   листается само и не передаёт прокрутку странице */
[data-surface-panel]{overscroll-behavior:contain}
.nv-scrim{position:fixed;inset:0;z-index:59;background:var(--scrim);opacity:0;pointer-events:none}
.nv-scrim:not([data-motion]){display:none}
.nv-scrim[data-motion=in]{opacity:1;pointer-events:auto;transition:opacity var(--m-base) var(--e-out)}
.nv-scrim.sheet[data-motion=in]{transition-duration:var(--m-slow)}
.nv-scrim[data-motion=out]{transition:opacity var(--m-fast) var(--e-in)}
[data-surface-panel][data-motion=out]{pointer-events:none}
/* меню «⋯» растёт от своей кнопки: вход m-fast e-out, выход m-micro e-in */
.menu[data-motion]{transform-origin:top right}
.menu.to-left[data-motion]{transform-origin:top left}
.menu[data-motion=pre],.menu[data-motion=out]{opacity:0;transform:translateY(-4px) scaleY(.96)}
.menu[data-motion=in]{transition:opacity var(--m-fast) var(--e-out),transform var(--m-fast) var(--e-out)}
.menu[data-motion=out]{transition:opacity var(--m-micro) var(--e-in),transform var(--m-micro) var(--e-in)}
/* раскрывашки в потоке страницы и внутри меню: содержимое проявляется */
[data-surface=panel][data-motion]>:not(summary),.round-form[data-motion]{transition:opacity var(--m-fast) var(--e-out),transform var(--m-fast) var(--e-out)}
[data-surface=panel][data-motion=pre]>:not(summary),[data-surface=panel][data-motion=out]>:not(summary),.round-form[data-motion=pre],.round-form[data-motion=out]{opacity:0;transform:translateY(-4px)}
[data-surface=panel][data-motion=out]>:not(summary),.round-form[data-motion=out]{transition:opacity var(--m-micro) var(--e-in),transform var(--m-micro) var(--e-in)}
/* у содержимого свёрнутого <details> (скрыто content-visibility) нет кадра «до»,
   переход с него не стартует — вход раскрывашки идёт анимацией с явного кадра */
[data-surface=panel][data-motion=in]>:not(summary){animation:nv-panel-in var(--m-fast) var(--e-out) both}
@keyframes nv-panel-in{from{opacity:0;transform:translateY(-4px)}}
@keyframes nv-fade-in{from{opacity:0}}
/* вкладки: подсветка переезжает под выбранную (m-base e-out), панель меняется
   проявлением — уходящая m-fast e-in, входящая m-base e-out (surfaces.js) */
[data-surface-tabs]{position:relative}
[data-surface-tabs][data-tabs-ready] [role=tab].active{border-bottom-color:transparent}
[data-surface-tabs][data-tabs-ready]::after{content:"";position:absolute;left:0;bottom:-1px;width:1px;height:2px;background:var(--accent);
  transform-origin:0 0;transform:translateX(var(--tab-x,0)) scaleX(var(--tab-w,0));transition:transform var(--m-base) var(--e-out);pointer-events:none}
[data-surface=tabpanel][data-motion=pre],[data-surface=tabpanel][data-motion=out]{opacity:0}
[data-surface=tabpanel][data-motion=in]{transition:opacity var(--m-base) var(--e-out)}
[data-surface=tabpanel][data-motion=out]{transition:opacity var(--m-fast) var(--e-in);pointer-events:none}
/* своё окно подтверждения (вместо системного confirm): по центру, вход m-base e-out, выход m-fast e-in */
.nv-confirm{position:fixed;inset:0;z-index:80;margin:auto;width:min(420px,calc(100vw - 32px));height:fit-content;
  padding:20px;border-radius:var(--r-panel);background:var(--raised);box-shadow:var(--shadow),0 0 0 1px var(--line)}
.nv-confirm:not([data-state]){display:none}
.nv-confirm-text{font:500 16px/24px var(--f-ui);color:var(--ink);overflow-wrap:anywhere}
.nv-confirm-acts{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin-top:18px}
.nv-confirm[data-motion=pre],.nv-confirm[data-motion=out]{opacity:0;transform:translateY(8px) scale(.98)}
.nv-confirm[data-motion=in]{transition:opacity var(--m-base) var(--e-out),transform var(--m-base) var(--e-out)}
.nv-confirm[data-motion=out]{transition:opacity var(--m-fast) var(--e-in),transform var(--m-fast) var(--e-in)}
@media (max-width:520px){.nv-confirm .btn{flex:1 1 auto;min-height:44px}}
/* телефон: меню — шторкой от нижнего края, въезд m-slow e-emph, выход m-base e-in */
@media (max-width:520px){
.nv details.mw[open]>.menu{z-index:60}
.nv details.mw>.menu[data-motion=pre],.nv details.mw>.menu[data-motion=out]{opacity:1;transform:translateY(calc(100% + 12px))}
.nv details.mw>.menu[data-motion=in]{transition:transform var(--m-slow) var(--e-emph)}
.nv details.mw>.menu[data-motion=out]{transition:transform var(--m-base) var(--e-in)}
}
/* «меньше движения» — только проявление за m-micro */
@media (prefers-reduced-motion:reduce){
[data-surface-panel][data-motion],[data-surface][data-motion]>*,.nv details.mw>.menu[data-motion]{transform:none!important}
[data-surface-panel][data-motion=pre],[data-surface-panel][data-motion=out],[data-surface=panel][data-motion=pre]>:not(summary),[data-surface=panel][data-motion=out]>:not(summary),.nv details.mw>.menu[data-motion=pre],.nv details.mw>.menu[data-motion=out]{opacity:0!important}
[data-surface-panel][data-motion=in],[data-surface=panel][data-motion=in]>:not(summary),.nv details.mw>.menu[data-motion=in]{transition:opacity var(--m-micro) var(--e-out)!important}
[data-surface=panel][data-motion=in]>:not(summary){animation:nv-fade-in var(--m-micro) var(--e-out) both!important}
[data-surface-panel][data-motion=out],[data-surface=panel][data-motion=out]>:not(summary),.nv details.mw>.menu[data-motion=out]{transition:opacity var(--m-micro) var(--e-in)!important}
.nv-scrim[data-motion]{transition:opacity var(--m-micro) var(--e-out)!important}
[data-surface=tabpanel][data-motion=in]{transition-duration:var(--m-micro)}
[data-surface=tabpanel][data-motion=out]{transition-duration:var(--m-micro)}
[data-surface-tabs][data-tabs-ready]::after{transition:none}
}

/* ── аудит сайта 2026-10-12 (вход, тексты, служебные страницы) ── */
/* вход, письмо, подтверждение, оферта, обратная связь: одна колонка с отступом по высоте экрана */
.nv main>.auth:first-child{margin-top:clamp(8px,5vh,40px)}
.nv .auth .card>.h-page{margin-bottom:6px}
.nv .auth .card>.lead{margin-bottom:20px}
.nv .auth .alert{margin-bottom:16px}
.nv .auth .note{margin-top:12px;text-align:center}
.nv .auth .check+.hint{margin:-4px 0 8px}
.nv .btn-block{width:100%}
.nv .code-input{font-family:var(--mono);letter-spacing:.3em;text-align:center;font-size:20px;font-variant-numeric:tabular-nums}
.nv .auth .alt{display:flex;justify-content:center;gap:0 16px;flex-wrap:wrap;margin-top:8px}
.nv .auth .alt a,.nv .auth .note a{display:inline-flex;align-items:center;min-height:44px}
.nv .auth details.more{margin:0 0 16px}
.nv .auth details.more>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;color:var(--ink);text-decoration:underline;text-decoration-color:var(--line-2);text-underline-offset:4px}
.nv .auth details.more ul{margin:4px 0 0 1.1rem;display:grid;gap:6px}
.nv .narrow.wide-form{max-width:30rem}
/* метка галочки — цель нажатия 44 px целиком */
.nv .check{min-height:44px;align-items:center}
.nv .check input[type=checkbox]{margin-top:0}
/* ссылка «К содержанию» — цель 44 px при фокусе */
.nv .skip:focus{min-height:44px;display:inline-flex;align-items:center;z-index:70}
/* ошибка страницы: код — тихой строкой под заголовком, а не надзаголовком */
.nv .error-box .code{font:400 13px/18px var(--f-ui);color:var(--muted)}
/* длинные тексты (оферта, политика, согласие, «Как это работает») — для чтения:
   16/26, разделы отбиты воздухом и тонкой линией, заголовок не прячется под шапку */
.nv .prose{font-size:16px;line-height:1.6;gap:12px}
.nv .prose h2{margin-top:16px;padding-top:20px;border-top:1px solid var(--line);font:600 20px/26px var(--f-ui);color:var(--ink);scroll-margin-top:calc(var(--top-h,64px) + 12px)}
.nv .prose h3{margin-top:4px;font:600 16px/24px var(--f-ui);color:var(--ink);scroll-margin-top:calc(var(--top-h,64px) + 12px)}
.nv .prose table{font-size:14px;background:linear-gradient(to left,var(--ground),transparent) right/24px 100% no-repeat local}
/* оглавление текста: разделы видны сразу, переход по якорю */
.nv .toc{padding:12px 16px;border-radius:var(--r-panel);background:var(--panel);box-shadow:inset 0 0 0 1px var(--line)}
.nv .toc>p{font:600 14px/20px var(--f-ui);color:var(--ink);margin:0 0 4px}
.nv .prose .toc ul{margin:0;padding:0;list-style:none;display:block;columns:2 15rem;column-gap:24px}
.nv .toc li{break-inside:avoid}
.nv .prose .toc a{display:inline-flex;align-items:center;min-height:36px;font-size:15px;line-height:1.35}
@media (pointer:coarse){.nv .prose .toc a{min-height:44px}}
.nv .docs-more{margin-top:8px;padding-top:16px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}
.nv .prose .lead-acts{display:flex;gap:8px;flex-wrap:wrap}
/* новая книга: подпись «(необязательно)» и ряд кнопок формы */
.nv .opt{font-weight:400}
.nv .form-acts{display:flex;gap:8px;flex-wrap:wrap}
/* телефон: шапка гостя в одну строку на всех страницах — «Войти» и знак; проба —
   кнопкой в тексте страницы (главная, «Как это работает»), вторая янтарная в шапке лишняя */
@media (max-width:520px){.nv .hd-g .acts .q,.nv .hd-g .acts .btn-main{display:none}}
/* крошки служебных страниц (новый материал, ход проверки, импорт) — как у книги */
.nv .scr-head nav.crumbs{display:flex;align-items:center;gap:6px;margin:0 0 6px;font:400 13px/18px var(--f-ui);color:var(--muted)}
/* ход проверки: у завершённой задачи — одна колонка, «Что дальше» под карточкой */
.nv .prog.prog-end{grid-template-columns:minmax(0,1fr);max-width:640px}
.nv .reup-lead{margin:0 0 10px;color:var(--ink)}
/* телефон: лента подборки — цель 44 px; «Добавить главы» книги не прячется за «⋯» */
@media (max-width:520px){.nv .ln-l{min-height:44px}.p-book .addb{display:inline-flex}}
/* «Как это работает»: справочные разделы свёрнуты, заголовок — кнопка раскрытия */
/* содержимое <details> живёт в отдельном слоте — отступы между абзацами задаём им самим */
.nv .prose details.how-sec>:not(summary){margin-top:12px}
.nv .prose details.how-sec>ul,.nv .prose details.how-sec>ol{display:flex;flex-direction:column;gap:6px}
.nv .prose details.how-sec>summary{list-style:none;cursor:pointer}
.nv .prose details.how-sec>summary::-webkit-details-marker{display:none}
.nv .prose details.how-sec>summary h2{display:flex;align-items:center;justify-content:space-between;gap:12px}
.nv .prose details.how-sec>summary h2::after{content:"";flex:none;width:8px;height:8px;margin-right:6px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:translateY(-2px) rotate(45deg);transition:transform var(--m-fast) var(--e-out)}
.nv .prose details.how-sec[open]>summary h2::after{transform:translateY(2px) rotate(-135deg)}
.nv .prose details.how-sec>summary:hover h2{color:var(--sig-t)}
/* «Мои материалы»: пустая стопка «Готово» на своём месте, но в одну строку */
.nv .stacks>.stack-empty{align-self:start}
.nv .stack .empty-line{margin:2px 0 0;color:var(--muted)}
/* главная: пока кнопка пробы стоит под заголовком (до 1100 px), в шапке её не повторяем */
@media (max-width:1100px){.p-land .hd-g .acts .btn-main{display:none}}
