// ════════════════════════════════════════════════════════════════ // Secondary pages: Markets, Methodologies, Costs // ════════════════════════════════════════════════════════════════ function MarketSection() { const D = window.SDH_DATA; return (
рынки · обзор сегментов

Шесть сегментов в фокусе наблюдения

Размер рынка приведён к мировому объёму за 2025 год по открытым источникам. Темп роста рассчитан на скользящем окне 12 месяцев.

{D.markets.map(m => (
сегмент

{m.name}

${m.size_usd_b} млрд
0 ? 'rising' : 'cooling'} growth={m.growth} /> CAGR 12 мес
))}
); } function MethodologiesSection() { const D = window.SDH_DATA; const [openId, setOpenId] = React.useState(null); const [layout, setLayout] = React.useState('families'); // 'families' | 'grid' // Group by family const byFamily = D.FAMILIES.map(f => ({ family: f, items: D.methodologies.filter(m => m.family === f.id), })); const openMethod = openId ? D.methodologies.find(m => m.id === openId) : null; return (
{/* HERO */}
методологии · 14 протоколов · 4 семьи

Инструментарий Орлова для синтеза

Четыре семьи объединяют все 14 методологий. Каждая идея размечена связанным протоколом, что позволяет навигировать корпус через метод, а не только через нишу.

раскладка } right={кликните на карточку для деталей} />
{layout === 'families' ? (
{byFamily.map(({ family, items }) => ( ))}
) : (
{D.methodologies.map(m => ( setOpenId(m.id)} /> ))}
)}
{openMethod && setOpenId(null)} />}
); } // ── Family block (grouped layout) ──────────────────────────────── function FamilyBlock({ family, items, onOpen }) { const totalIdeas = items.reduce((s, m) => s + m.ideas, 0); return (
{/* Family heading row */}
{(family.label2 || family.label).toUpperCase()}

{family.full}

{items.length} протоколов · {totalIdeas} идей
{/* Cards */}
{items.map(m => ( onOpen && onOpen(m.id)} /> ))}
); } // ── Method card ────────────────────────────────────────────────── function MethodCard({ method, onOpen }) { const D = window.SDH_DATA; const totalIdeas = D.ideas.length; const sharePct = Math.round((method.ideas / totalIdeas) * 100); // Deterministic mini usage series (12 weeks) const series = React.useMemo(() => { const seed = method.id.charCodeAt(0) * 13 + method.ideas; const out = []; for (let i = 0; i < 12; i++) { const v = 0.4 + ((Math.sin(seed + i * 0.7) + 1) * 0.4) + ((seed + i * 3) % 7) / 18; out.push({ value: v }); } return out; }, [method.id, method.ideas]); return ( ); } // ── Detail modal ───────────────────────────────────────────────── function MethodDetailModal({ method, onClose }) { const D = window.SDH_DATA; const family = D.FAMILIES.find(f => f.id === method.family); const ideasUsing = D.ideas.filter(i => i.family === method.family).slice(0, 6); React.useEffect(() => { function onKey(e) { if (e.key === 'Escape') onClose(); } window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [onClose]); return (
e.stopPropagation()} className="sdh-fade" style={{ background: 'var(--surface-elevated)', borderRadius: 'var(--radius-2xl)', border: '1px solid var(--border-subtle)', maxWidth: 880, width: '100%', boxShadow: 'var(--shadow-xl)', overflow: 'hidden', position: 'relative', }}> {/* Hero */}
{(family.label2 || family.label).toUpperCase()} {family.full}

{method.title}

{method.tagline}

{method.author} {method.year} {method.ideas} идей используют
{/* Body */}
{/* Left */}

суть метода

{method.what}

когда применять

{method.bestFor}

ключевые понятия

{method.concepts.map(c => ( {c} ))}
{/* Right */}

идеи, использующие метод

{ideasUsing.map(idea => (
№{String(idea.number).padStart(2, '0')} {idea.title}
))}
{method.ideas > 6 && ( )}
{/* Footer */}
esc закрыть
); } function CostsPage() { const D = window.SDH_DATA; const items = [ { label: 'эмбеддинги корпуса', usd: 142.30, calls: 11304, hue: 'info' }, { label: 'кластеризация трендов', usd: 38.50, calls: 1872, hue: 'emerald' }, { label: 'reranker для близости', usd: 64.15, calls: 5022, hue: 'amber' }, { label: 'синтез вердиктов конкурентов', usd: 89.42, calls: 412, hue: 'rose' }, { label: 'граф связанных идей', usd: 27.80, calls: 304, hue: 'purple' }, ]; const total = items.reduce((s, i) => s + i.usd, 0); const callsTotal = items.reduce((s, i) => s + i.calls, 0); return (
учёт · API расходы за май 2026

Стоимость обработки корпуса

всего за месяц
${total.toFixed(2)}
всего вызовов API
{callsTotal.toLocaleString('ru-RU')}
стоимость на идею
${(total / D.ideas.length).toFixed(2)}
стоимость на стартап
${(total / D.corpus.length * 100).toFixed(2)}¢
статья
вызовов
средн. стоимость
итого
{items.map((i, idx) => (
· {i.label}
{i.calls.toLocaleString('ru-RU')}
${(i.usd / i.calls * 1000).toFixed(2)}/1k
${i.usd.toFixed(2)}
))}
); } window.MarketSection = MarketSection; window.MethodologiesSection = MethodologiesSection; window.CostsPage = CostsPage;