/* SOLAR-VOLUME-013 · стили флага «объём».
 * Всё внутри body.volume-on: при выключенном флаге этот файл ничего не меняет,
 * ни одно правило не применяется, карта остаётся пиксель в пиксель v012. */

/* два полотна внутри сцены: фон под SVG, солнышки над ним; нажатия не перехватывают */
.cs-vol { position:absolute; inset:0; display:block; pointer-events:none; }
#cs-vol-bg { z-index:0; }
#cs-vol-fg { z-index:1; }   /* .cs-tools живёт на z-index 2 и остаётся сверху */

/* то, что теперь рисует полотно, в SVG гасится — иначе двоится.
 * Полотно рисует каждый узел на любом масштабе (дальний LOD — ядро с ободом), поэтому гасить можно целиком. */
body.volume-on .cs-svg .cs-nodes .cs-shape,
body.volume-on .cs-svg .cs-dots .cs-dot { opacity:0; }
body.volume-on .cs-svg .cs-node.l0 .cs-sun.sub { opacity:0; }   /* золотое «Я» рисует сам v012 — не гасим */
body.volume-on .cs-svg .cs-dust { opacity:0; }
body.volume-on .cs-sky { opacity:0; }

/* ---- сказочная вселенная: цвет семейств звучит в полную силу, а не уходит в графит ---- */

/* лучи от «Я» к контурам: это свет, а не пыль */
body.volume-on .cs-ray { filter:saturate(1.45); }
body.volume-on .cs-m-calm .cs-ray,
body.volume-on .cs-m-links .cs-ray { fill-opacity:.2; }
body.volume-on .has-sel .cs-ray { fill-opacity:calc(.08 + var(--glow, 0) * .18); }
body.volume-on .has-sel .cs-ray.on { fill-opacity:.52; }

/* орбиты — тёплые золотые кольца плоскости */
body.volume-on .cs-orbit { stroke:rgba(255,226,170,.2); }
body.volume-on .cs-orbit.o2 { stroke:rgba(200,216,255,.13); }
body.volume-on .cs-orbit.o3 { stroke:rgba(200,216,255,.09); }

/* дуги семейств — цветные пояса, по которым видно, чей это участок неба */
body.volume-on .cs-band { stroke-opacity:.26; }
body.volume-on .cs-m-calm .cs-band { stroke-opacity:.22; }
body.volume-on .cs-band.sealed { stroke-opacity:.12; }

/* ветви и переходы между контурами */
body.volume-on .cs-link { stroke-opacity:.52; }
body.volume-on .cs-link.l3 { stroke-opacity:.4; }
body.volume-on .cs-crossl { stroke-opacity:.42; }

/* мембрана личного — мягкая сиреневая вуаль, а не пунктир на чёрном */
body.volume-on .cs-membrane { fill-opacity:.075; stroke-opacity:.5; }

/* подписи и зоны нажатия остаются как есть; подпись над портретом должна читаться */
body.volume-on .cs-svg .cs-l { paint-order:stroke; stroke:rgba(8,11,16,.55); stroke-width:2.4px; stroke-linejoin:round; }
body.volume-on .cs-svg .cs-sub { paint-order:stroke; stroke:rgba(8,11,16,.5); stroke-width:2px; stroke-linejoin:round; }

/* настройки звука и объёма в панели «Настройки» */
.pref-volume { border:1px solid var(--line, rgba(152,167,182,.22)); border-radius:10px; padding:6px 9px 8px; margin:6px 0; }
.pref-volume legend { padding:0 4px; font-size:12px; color:var(--ink2, #b6c2ce); }
.pref-volume .pref-row { display:flex; align-items:center; gap:8px; margin:4px 0; font-size:12.5px; }
.pref-volume select { background:rgba(20,30,40,.7); color:inherit; border:1px solid var(--line, rgba(152,167,182,.22)); border-radius:8px; padding:3px 7px; font:inherit; }
.pref-volume input[type=range] { flex:1; min-width:90px; accent-color:#d8ba86; }
.pref-volume .pref-note { font-size:11px; color:var(--ink3, #98a7b6); margin:4px 0 0; line-height:1.45; }

/* =====================================================================================
 * SOLAR-VOLUME-014 · сказочная вселенная. Всё — под body.volume-on (главное Солнце, полотна живы)
 * или body.vol-flag (флаг включён; рабочая карта и небо страницы). Флаг выключен — ни одно правило
 * ниже не применяется. Линий не добавляется: меняется только облик тех, что рисует v012.
 * ===================================================================================== */

/* золото, ореол и сияние — только у «Я»: вложенный центр (контур в роли центра) их не получает.
 * VOLUME-015: без :has() — класс vol-subsun ставит volume-render.js (markSubSun) при сборке сцены.
 * Тонкий золотой контур остаётся у каждого солнышка: его рисует полотно (drawBody / portrait). */
body.volume-on .cs-node.vol-subsun .cs-halo,
body.volume-on .cs-node.vol-subsun .cs-corona,
body.volume-on .cs-node.vol-subsun .cs-glint,
body.volume-on .cs-node.vol-subsun .cs-spark-s { opacity:0; animation:none; }   /* мерцание (cs-twinkle) анимирует opacity — без animation:none искры проступают */
/* ореол событий у остальных узлов — данные, а не золото: остаётся, но приглушён до тонкой подсказки */
body.volume-on .cs-nglow { fill-opacity:calc(var(--glow, 0) * .07); stroke-opacity:calc(var(--glow, 0) * .3); }

/* орбиты — нити жемчужной пыли: круглые бусины вместо сплошной линии */
body.volume-on .cs-orbit { stroke-linecap:round; stroke-dasharray:.01 6; stroke-width:1.7; stroke:rgba(232,222,255,.34); }
body.volume-on .cs-orbit.o1.front { stroke:rgba(246,236,255,.5); stroke-width:1.9; }
body.volume-on .cs-orbit.back { stroke-opacity:.55; }
body.volume-on .cs-orbit.o2 { stroke:rgba(196,220,255,.26); stroke-dasharray:.01 7; }
body.volume-on .cs-orbit.o3 { stroke:rgba(196,220,255,.18); stroke-dasharray:.01 8; }

/* дуги семейств — акварельные ленты: шире и мягче. VOLUME-015: без filter:blur — размытие широкой ленты
 * пересчитывалось на каждый кадр камеры; мягкость даёт низкая непрозрачность и скруглённый край */
body.volume-on .cs-band { stroke-width:12; stroke-opacity:.18; stroke-linecap:round; }
body.volume-on .cs-m-calm .cs-band { stroke-opacity:.18; }
body.volume-on .cs-band.sealed { stroke-opacity:.09; }

/* лучи «Я» — тёплый свет: прозрачная акварель, не прожектор. VOLUME-015: blur убран, остаётся saturate v013 */
body.volume-on .cs-ray { filter:saturate(1.5); }

/* связи — шёлковые нити: ветви тонкие и светлые, глубже — бусинки; переходы между контурами — созвездия */
body.volume-on .cs-link { stroke-width:1.15; stroke-opacity:.5; stroke-linecap:round; }
body.volume-on .cs-link.l3 { stroke-dasharray:.01 3.6; stroke-width:1.8; stroke-opacity:.55; }
body.volume-on .cs-link.n-role, body.volume-on .cs-link.n-declared, body.volume-on .cs-link.n-shell,
body.volume-on .cs-link.n-claimed, body.volume-on .cs-link.n-helper, body.volume-on .cs-link.n-item,
body.volume-on .cs-link.n-role-b, body.volume-on .cs-link.n-practice { stroke-dasharray:.01 4; stroke-width:1.7; }
body.volume-on .cs-link.n-hist { stroke-dasharray:.01 5; stroke-width:1.6; }
body.volume-on .has-sel .cs-link.on { stroke:#f3ecff; stroke-opacity:.95; stroke-width:1.8; }
body.volume-on .cs-crossl { stroke:rgba(214,200,255,.55); stroke-dasharray:.01 7; stroke-width:2.2; stroke-linecap:round; }
body.volume-on .cs-crossl.on { stroke:#f3ecff; stroke-opacity:.9; }

/* мембрана личного — сиреневая вуаль */
body.volume-on .cs-membrane { fill-opacity:.09; stroke-opacity:.55; stroke-dasharray:.01 5; stroke-linecap:round; stroke-width:1.8; }

/* подписи: обводка ночного индиго вместо чёрной, ветви — лунно-белые, вторые имена — сиреневым курсивом */
body.volume-on .cs-svg .cs-l { stroke:rgba(14,14,42,.72); }
body.volume-on .cs-svg .cs-l.l2 { fill:#f1efff; }
body.volume-on .cs-svg .cs-l.l3 { fill:#d8dcf6; }
/* PORTRAITS-016: на втором и третьем уровне подписи теперь ложатся на светлые медальоны-лица —
   обводка плотнее и шире, контраст подписи держится и на акварели, и на тёмном небе */
body.volume-on .cs-svg .cs-l.l2, body.volume-on .cs-svg .cs-l.l3 { stroke:rgba(10,10,32,.88); stroke-width:3px; }
body.volume-on .cs-svg .cs-sub { stroke:rgba(14,14,42,.6); }
body.volume-on .cs-svg .cs-sub.proposal { fill:#cdbef5; fill-opacity:.9; font-style:italic; }
body.volume-on .cs-names.proposal .cs-names-sa { color:#cdbef5; font-style:italic; }

/* ---------- флаг включён: небо страницы и рабочая карта (map.js) ---------- */
body.vol-flag { background:radial-gradient(ellipse at 48% 42%, #262556 0%, #161a40 42%, #090b1c 88%); }
body.vol-flag #nebula { opacity:.8; }
body.vol-flag #nebula i { opacity:.62; filter:blur(70px); }
body.vol-flag #nebula .n1 { background:radial-gradient(closest-side, rgba(150,124,240,.42), transparent); }
body.vol-flag #nebula .n2 { background:radial-gradient(closest-side, rgba(110,200,214,.32), transparent); }
body.vol-flag #nebula .n3 { background:radial-gradient(closest-side, rgba(226,150,204,.3), transparent); }
body.vol-flag #nebula .n4 { background:radial-gradient(closest-side, rgba(126,214,170,.26), transparent); }
body.vol-flag #map .orbit { stroke:rgba(232,222,255,.3); stroke-dasharray:.01 7; stroke-linecap:round; stroke-width:1.8; }
body.vol-flag #map .ray { stroke-opacity:.75; }
body.vol-flag #map .branch { stroke-linecap:round; stroke-dasharray:.01 4; stroke-width:1.8; }
/* каждое солнышко — тонкий золотой контур; шар — акварельный.
 * VOLUME-015: ореола у узлов рабочей карты нет совсем (яркий ореол — только у «Я»; на рабочей карте «Я» нет,
 * её центральное солнце AWARA рисуется своей короной v012). Наведение, фокус и выбор — тонкое холодное
 * кольцо на месте ореола, не золото и не свечение. */
body.vol-flag #map .node .body { stroke:rgba(246,214,156,.8); stroke-width:.9; }
body.vol-flag #map .node .art-face { opacity:.96; pointer-events:none; }
body.vol-flag #map .node .art-rim { fill:none; stroke:rgba(246,214,156,.92); stroke-width:1; pointer-events:none; }
body.vol-flag #map .node .halo { opacity:0; animation:none; }
body.vol-flag #map .node:hover .halo, body.vol-flag #map .node:focus-visible .halo, body.vol-flag #map .node.selected .halo {
  opacity:1; fill:none; stroke:rgba(196,210,255,.4); stroke-width:.8; }
body.vol-flag #map .node.selected .halo { stroke:rgba(214,222,255,.55); stroke-dasharray:2 3; }
body.vol-flag #map .node .vglow, body.vol-flag #map .node .sun-corona { opacity:0; animation:none; }
body.vol-flag #map .node .label { stroke:rgba(14,14,42,.85); }
body.vol-flag #map .node .sublabel.proposal { fill:#cdbef5; font-style:italic; }
/* шары рабочей карты: v012 рисует их почти чёрными («quiet intelligence»); за флагом — акварельно светлее и цветнее */
body.vol-flag #map .node .body { filter:brightness(1.75) saturate(1.7); }
body.vol-flag #map .node .sun-core { filter:url(#soft) brightness(1.9) saturate(1.4); }
body.vol-flag #map .node .core-rim { stroke:rgba(246,214,156,.75); }

/* ART-016 · правило золота на рабочей карте (только body.vol-flag).
 * Контур медальона — постоянной экранной толщины, не растёт с приближением; число дочерних — бейдж снаружи круга. */
body.vol-flag #map .node .body, body.vol-flag #map .node .art-rim, body.vol-flag #map .node .core-rim { vector-effect:non-scaling-stroke; }
body.vol-flag #map .node .art-rim { stroke-width:1.2; }
body.vol-flag #map .node .badge-bg { fill:rgba(12,14,38,.88); stroke:rgba(246,214,156,.85); stroke-width:1; vector-effect:non-scaling-stroke; pointer-events:none; }
body.vol-flag #map .node .badge.vol-badge { font-size:11px !important; fill:#f6e7c8; font-weight:600; }
body.vol-flag #map .node .vol-badge-g { pointer-events:none; }

/* ART-016c · «готово» — мятный маркер (только body.vol-flag). Перекрывает золото проверенного (identity.js stateVisual.gold
 * и золотой vglow v012): у done — мятная линия 2px с мягким свечением и галочка справа внизу, вне портрета.
 * Тонкий золотой контур медальона остаётся. */
body.vol-flag { --vol-mint:#5fe3b8; }
body.vol-flag #map .node .vol-done-glow, body.vol-flag #map .node .vol-done-chk { display:none; }
body.vol-flag #map .node.status-done .vol-done-glow { display:inline; fill:none; stroke:rgba(95,227,184,.28); stroke-width:7; vector-effect:non-scaling-stroke; pointer-events:none; }
body.vol-flag #map .node.status-done .ring { stroke:var(--vol-mint); stroke-width:2; stroke-opacity:1; vector-effect:non-scaling-stroke; }
body.vol-flag #map .node.status-done .vol-done-chk { display:inline; pointer-events:none; }
body.vol-flag #map .node .vol-done-bg { fill:rgba(10,14,30,.92); stroke:var(--vol-mint); stroke-width:1; vector-effect:non-scaling-stroke; }
body.vol-flag #map .node .vol-done-tick { fill:none; stroke:var(--vol-mint); stroke-width:1.9; stroke-linecap:round; stroke-linejoin:round; }
body.vol-flag #map .node.status-done .vglow { opacity:0; animation:none; }
body.vol-flag .st-done { color:var(--vol-mint); }
