<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/laboratoriya-prognozirovaniya-nish-probuyu-stroitelstvo</id>
  <link href="https://www.pandoraburo.ru/laboratoriya-prognozirovaniya-nish-probuyu-stroitelstvo.xml" rel="self"/>
  <title>Лаборатория прогнозирования ниши здоровье</title>
  <subtitle type="html">
&lt;html lang="ru"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;BayesHealth: Прогноз успеха HealthTech-продукта&lt;/title&gt;
    
    
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"&gt;&lt;/script&gt;
    
    
    &lt;style&gt;
        /* Стили будут здесь */
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="container"&gt;
        &lt;header&gt;
            &lt;h1&gt;? BayesHealth: Прогноз успеха HealthTech-продукта&lt;/h1&gt;
            &lt;p class="subtitle"&gt;Ниша: Трекер долголетия и биохакерства для 40+&lt;/p&gt;
        &lt;/header&gt;
        
        &lt;main&gt;
            
            &lt;div id="control-panel"&gt;&lt;/div&gt;
            
            
            &lt;div id="results"&gt;&lt;/div&gt;
        &lt;/main&gt;
    &lt;/div&gt;
    
    
    &lt;script&gt;
        // Код будет здесь
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;html lang="ru"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;BayesHealth: Прогноз успеха HealthTech-продукта&lt;/title&gt;
    
    
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"&gt;&lt;/script&gt;
    
    &lt;style&gt;
        /* === БАЗОВЫЕ СТИЛИ === */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
            color: #333;
        }
        
        /* === КОНТЕЙНЕР === */
        .container {
            max-width: 1400px;
            margin: 0 auto;
            background: white;
            border-radius: 16px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            overflow: hidden;
        }
        
        /* === HEADER === */
        header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px 40px;
            text-align: center;
        }
        
        header h1 {
            font-size: 2.5em;
            margin-bottom: 10px;
            font-weight: 700;
        }
        
        .subtitle {
            font-size: 1.1em;
            opacity: 0.9;
        }
        
        /* === MAIN LAYOUT === */
        main {
            display: grid;
            grid-template-columns: 350px 1fr;
            gap: 0;
            min-height: 600px;
        }
        
        /* === ПАНЕЛЬ УПРАВЛЕНИЯ === */
        #control-panel {
            background: #f8f9fa;
            padding: 30px;
            border-right: 1px solid #e0e0e0;
            overflow-y: auto;
            max-height: calc(100vh - 200px);
        }
        
        .control-section {
            margin-bottom: 25px;
        }
        
        .control-section h3 {
            font-size: 1.1em;
            color: #667eea;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        .control-group {
            margin-bottom: 20px;
        }
        
        .control-group label {
            display: block;
            margin-bottom: 8px;
            font-weight: 500;
            color: #555;
            font-size: 0.95em;
        }
        
        .control-group input[type="text"],
        .control-group input[type="number"] {
            width: 100%;
            padding: 10px;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            font-size: 1em;
            transition: border-color 0.3s;
        }
        
        .control-group input[type="text"]:focus,
        .control-group input[type="number"]:focus {
            outline: none;
            border-color: #667eea;
        }
        
        .control-group input[type="range"] {
            width: 100%;
            height: 6px;
            border-radius: 3px;
            background: #e0e0e0;
            outline: none;
            -webkit-appearance: none;
        }
        
        .control-group input[type="range"]::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 18px;
            height: 18px;
            border-radius: 50%;
            background: #667eea;
            cursor: pointer;
        }
        
        .control-group input[type="range"]::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border-radius: 50%;
            background: #667eea;
            cursor: pointer;
            border: none;
        }
        
        .range-value {
            display: inline-block;
            margin-left: 10px;
            font-weight: 600;
            color: #667eea;
        }
        
        .checkbox-group {
            display: flex;
            align-items: flex-start;
            gap: 10px;
            padding: 10px;
            background: white;
            border-radius: 8px;
            border: 2px solid #e0e0e0;
            transition: all 0.3s;
        }
        
        .checkbox-group:hover {
            border-color: #667eea;
        }
        
        .checkbox-group input[type="checkbox"] {
            width: 20px;
            height: 20px;
            cursor: pointer;
            margin-top: 2px;
        }
        
        .checkbox-label {
            flex: 1;
            cursor: pointer;
        }
        
        .checkbox-label strong {
            display: block;
            margin-bottom: 4px;
            color: #333;
        }
        
        .checkbox-label small {
            color: #888;
            font-size: 0.85em;
            line-height: 1.4;
        }
        
        /* === РЕЗУЛЬТАТЫ === */
        #results {
            padding: 30px;
            overflow-y: auto;
            max-height: calc(100vh - 200px);
        }
        
        .metric-card {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 12px;
            text-align: center;
            margin-bottom: 30px;
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
        }
        
        .metric-label {
            font-size: 1em;
            opacity: 0.9;
            margin-bottom: 10px;
        }
        
        .metric-value {
            font-size: 3.5em;
            font-weight: 700;
            margin-bottom: 10px;
        }
        
        .metric-delta {
            font-size: 1.2em;
            opacity: 0.9;
        }
        
        /* === СЕКЦИИ РЕЗУЛЬТАТОВ === */
        .result-section {
            margin-bottom: 30px;
        }
        
        .result-section h3 {
            font-size: 1.3em;
            color: #333;
            margin-bottom: 15px;
            padding-bottom: 10px;
            border-bottom: 2px solid #667eea;
        }
        
        /* === ГРАФИК === */
        .chart-container {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            margin-bottom: 20px;
        }
        
        #factorChart {
            max-height: 350px;
        }
        
        /* === РЕКОМЕНДАЦИИ === */
        .recommendations {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            border-left: 4px solid #667eea;
        }
        
        .recommendation-item {
            padding: 12px;
            margin-bottom: 10px;
            background: white;
            border-radius: 8px;
            border-left: 3px solid #667eea;
        }
        
        .recommendation-item.critical {
            border-left-color: #dc3545;
            background: #fff5f5;
        }
        
        .recommendation-item.warning {
            border-left-color: #ffc107;
            background: #fffbf0;
        }
        
        .recommendation-item.success {
            border-left-color: #28a745;
            background: #f0fff4;
        }
        
        /* === БЛОК РИСКОВ === */
        .risks-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
        }
        
        .risk-card {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            border-top: 4px solid #6c757d;
        }
        
        .risk-card.high {
            border-top-color: #dc3545;
        }
        
        .risk-card.medium {
            border-top-color: #ffc107;
        }
        
        .risk-card.low {
            border-top-color: #28a745;
        }
        
        .risk-card h4 {
            font-size: 1.1em;
            margin-bottom: 10px;
            color: #333;
        }
        
        .risk-status {
            display: inline-block;
            padding: 6px 12px;
            border-radius: 6px;
            font-size: 0.9em;
            font-weight: 600;
            margin-top: 10px;
        }
        
        .risk-status.high {
            background: #dc3545;
            color: white;
        }
        
        .risk-status.medium {
            background: #ffc107;
            color: #333;
        }
        
        .risk-status.low {
            background: #28a745;
            color: white;
        }
        
        /* === АДАПТИВНОСТЬ === */
        @media (max-width: 1024px) {
            main {
                grid-template-columns: 1fr;
            }
            
            #control-panel {
                border-right: none;
                border-bottom: 1px solid #e0e0e0;
                max-height: none;
            }
            
            #results {
                max-height: none;
            }
        }
        
        @media (max-width: 768px) {
            header h1 {
                font-size: 1.8em;
            }
            
            .metric-value {
                font-size: 2.5em;
            }
            
            .risks-grid {
                grid-template-columns: 1fr;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="container"&gt;
        &lt;header&gt;
            &lt;h1&gt;? BayesHealth: Прогноз успеха HealthTech-продукта&lt;/h1&gt;
            &lt;p class="subtitle"&gt;Ниша: Трекер долголетия и биохакерства для 40+&lt;/p&gt;
        &lt;/header&gt;
        
        &lt;main&gt;
            
            &lt;div id="control-panel"&gt;&lt;/div&gt;
            
            
            &lt;div id="results"&gt;&lt;/div&gt;
        &lt;/main&gt;
    &lt;/div&gt;
    
    
    &lt;script&gt;
        // Код будет здесь
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;html lang="ru"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;BayesHealth: Прогноз успеха HealthTech-продукта&lt;/title&gt;
    
    
    &lt;script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"&gt;&lt;/script&gt;
    
    &lt;style&gt;
        /* === БАЗОВЫЕ СТИЛИ === */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
            color: #333;
        }
        
        /* === КОНТЕЙНЕР === */
        .container {
            max-width: 1400px;
            margin: 0 auto;
            background: white;
            border-radius: 16px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
            overflow: hidden;
        }
        
        /* === HEADER === */
        header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px 40px;
            text-align: center;
        }
        
        header h1 {
            font-size: 2.5em;
            margin-bottom: 10px;
            font-weight: 700;
        }
        
        .subtitle {
            font-size: 1.1em;
            opacity: 0.9;
        }
        
        /* === MAIN LAYOUT === */
        main {
            display: grid;
            grid-template-columns: 350px 1fr;
            gap: 0;
            min-height: 600px;
        }
        
        /* === ПАНЕЛЬ УПРАВЛЕНИЯ === */
        #control-panel {
            background: #f8f9fa;
            padding: 30px;
            border-right: 1px solid #e0e0e0;
            overflow-y: auto;
            max-height: calc(100vh - 200px);
        }
        
        .control-section {
            margin-bottom: 25px;
        }
        
        .control-section h3 {
            font-size: 1.1em;
            color: #667eea;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        .control-group {
            margin-bottom: 20px;
        }
        
        .control-group label {
            display: block;
            margin-bottom: 8px;
            font-weight: 500;
            color: #555;
            font-size: 0.95em;
        }
        
        .control-group input[type="text"],
        .control-group input[type="number"] {
            width: 100%;
            padding: 10px;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            font-size: 1em;
            transition: border-color 0.3s;
        }
        
        .control-group input[type="text"]:focus,
        .control-group input[type="number"]:focus {
            outline: none;
            border-color: #667eea;
        }
        
        .control-group input[type="range"] {
            width: 100%;
            height: 6px;
            border-radius: 3px;
            background: #e0e0e0;
            outline: none;
            -webkit-appearance: none;
        }
        
        .control-group input[type="range"]::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 18px;
            height: 18px;
            border-radius: 50%;
            background: #667eea;
            cursor: pointer;
        }
        
        .control-group input[type="range"]::-moz-range-thumb {
            width: 18px;
            height: 18px;
            border-radius: 50%;
            background: #667eea;
            cursor: pointer;
            border: none;
        }
        
        .range-value {
            display: inline-block;
            margin-left: 10px;
            font-weight: 600;
            color: #667eea;
        }
        
        .checkbox-group {
            display: flex;
            align-items: flex-start;
            gap: 10px;
            padding: 10px;
            background: white;
            border-radius: 8px;
            border: 2px solid #e0e0e0;
            transition: all 0.3s;
        }
        
        .checkbox-group:hover {
            border-color: #667eea;
        }
        
        .checkbox-group input[type="checkbox"] {
            width: 20px;
            height: 20px;
            cursor: pointer;
            margin-top: 2px;
        }
        
        .checkbox-label {
            flex: 1;
            cursor: pointer;
        }
        
        .checkbox-label strong {
            display: block;
            margin-bottom: 4px;
            color: #333;
        }
        
        .checkbox-label small {
            color: #888;
            font-size: 0.85em;
            line-height: 1.4;
        }
        
        /* === РЕЗУЛЬТАТЫ === */
        #results {
            padding: 30px;
            overflow-y: auto;
            max-height: calc(100vh - 200px);
        }
        
        .metric-card {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 12px;
            text-align: center;
            margin-bottom: 30px;
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
        }
        
        .metric-label {
            font-size: 1em;
            opacity: 0.9;
            margin-bottom: 10px;
        }
        
        .metric-value {
            font-size: 3.5em;
            font-weight: 700;
            margin-bottom: 10px;
        }
        
        .metric-delta {
            font-size: 1.2em;
            opacity: 0.9;
        }
        
        /* === СЕКЦИИ РЕЗУЛЬТАТОВ === */
        .result-section {
            margin-bottom: 30px;
        }
        
        .result-section h3 {
            font-size: 1.3em;
            color: #333;
            margin-bottom: 15px;
            padding-bottom: 10px;
            border-bottom: 2px solid #667eea;
        }
        
        /* === ГРАФИК === */
        .chart-container {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            margin-bottom: 20px;
        }
        
        #factorChart {
            max-height: 350px;
        }
        
        /* === РЕКОМЕНДАЦИИ === */
        .recommendations {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            border-left: 4px solid #667eea;
        }
        
        .recommendation-item {
            padding: 12px;
            margin-bottom: 10px;
            background: white;
            border-radius: 8px;
            border-left: 3px solid #667eea;
        }
        
        .recommendation-item.critical {
            border-left-color: #dc3545;
            background: #fff5f5;
        }
        
        .recommendation-item.warning {
            border-left-color: #ffc107;
            background: #fffbf0;
        }
        
        .recommendation-item.success {
            border-left-color: #28a745;
            background: #f0fff4;
        }
        
        /* === БЛОК РИСКОВ === */
        .risks-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
        }
        
        .risk-card {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 12px;
            border-top: 4px solid #6c757d;
        }
        
        .risk-card.high {
            border-top-color: #dc3545;
        }
        
        .risk-card.medium {
            border-top-color: #ffc107;
        }
        
        .risk-card.low {
            border-top-color: #28a745;
        }
        
        .risk-card h4 {
            font-size: 1.1em;
            margin-bottom: 10px;
            color: #333;
        }
        
        .risk-status {
            display: inline-block;
            padding: 6px 12px;
            border-radius: 6px;
            font-size: 0.9em;
            font-weight: 600;
            margin-top: 10px;
        }
        
        .risk-status.high {
            background: #dc3545;
            color: white;
        }
        
        .risk-status.medium {
            background: #ffc107;
            color: #333;
        }
        
        .risk-status.low {
            background: #28a745;
            color: white;
        }
        
        /* === АДАПТИВНОСТЬ === */
        @media (max-width: 1024px) {
            main {
                grid-template-columns: 1fr;
            }
            
            #control-panel {
                border-right: none;
                border-bottom: 1px solid #e0e0e0;
                max-height: none;
            }
            
            #results {
                max-height: none;
            }
        }
        
        @media (max-width: 768px) {
            header h1 {
                font-size: 1.8em;
            }
            
            .metric-value {
                font-size: 2.5em;
            }
            
            .risks-grid {
                grid-template-columns: 1fr;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="container"&gt;
        &lt;header&gt;
            &lt;h1&gt;? BayesHealth: Прогноз успеха HealthTech-продукта&lt;/h1&gt;
            &lt;p class="subtitle"&gt;Ниша: Трекер долголетия и биохакерства для 40+&lt;/p&gt;
        &lt;/header&gt;
        
        &lt;main&gt;
            
            &lt;div id="control-panel"&gt;
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;? Основная информация&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;label for="productName"&gt;Название продукта&lt;/label&gt;
                        &lt;input type="text" id="productName" value="Longevity Tracker Pro" /&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;? Доказательная база&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;div class="checkbox-group"&gt;
                            &lt;input type="checkbox" id="hasClinicalEvidence" checked="checked" /&gt;
                            &lt;label for="hasClinicalEvidence" class="checkbox-label"&gt;
                                &lt;strong&gt;Есть клинические исследования&lt;/strong&gt;
                                &lt;small&gt;РКИ или публикации в рецензируемых журналах&lt;/small&gt;
                            &lt;/label&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;⚖️ Регуляторика&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;div class="checkbox-group"&gt;
                            &lt;input type="checkbox" id="claimsMedicalEffect" /&gt;
                            &lt;label for="claimsMedicalEffect" class="checkbox-label"&gt;
                                &lt;strong&gt;Заявляет о лечебном эффекте&lt;/strong&gt;
                                &lt;small&gt;Если ДА, но нет РУ — высокий риск блокировки&lt;/small&gt;
                            &lt;/label&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;? Ценообразование&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;label for="priceRub"&gt;Стоимость подписки: &lt;span class="range-value" id="priceValue"&gt;799 ₽/мес&lt;/span&gt;&lt;/label&gt;
                        &lt;input type="range" id="priceRub" min="200" max="3000" value="799" step="50" /&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;⭐ UX-качество&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;label for="avgRating"&gt;Ожидаемый рейтинг: &lt;span class="range-value" id="ratingValue"&gt;4.3&lt;/span&gt;&lt;/label&gt;
                        &lt;input type="range" id="avgRating" min="2.0" max="5.0" value="4.3" step="0.1" /&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;⌚ Интеграции&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;div class="checkbox-group"&gt;
                            &lt;input type="checkbox" id="hasWearableIntegration" checked="checked" /&gt;
                            &lt;label for="hasWearableIntegration" class="checkbox-label"&gt;
                                &lt;strong&gt;Интеграция с носимыми устройствами&lt;/strong&gt;
                                &lt;small&gt;Apple Watch, Garmin, Oura Ring&lt;/small&gt;
                            &lt;/label&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
                
                &lt;div class="control-section"&gt;
                    &lt;h3&gt;? Поддержка пользователей&lt;/h3&gt;
                    &lt;div class="control-group"&gt;
                        &lt;div class="checkbox-group"&gt;
                            &lt;input type="checkbox" id="hasCommunitySupport" /&gt;
                            &lt;label for="hasCommunitySupport" class="checkbox-label"&gt;
                                &lt;strong&gt;Сообщество или куратор&lt;/strong&gt;
                                &lt;small&gt;Усиливает приверженность и retention&lt;/small&gt;
                            &lt;/label&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
            
            
            &lt;div id="results"&gt;
                
                &lt;div class="metric-card"&gt;
                    &lt;div class="metric-label"&gt;Вероятность успеха (PMF + Retention &gt;40%)&lt;/div&gt;
                    &lt;div class="metric-value" id="probabilityValue"&gt;68.5%&lt;/div&gt;
                    &lt;div class="metric-delta" id="probabilityDelta"&gt;+18.5% относительно среднего&lt;/div&gt;
                &lt;/div&gt;
                
                
                &lt;div class="result-section"&gt;
                    &lt;h3&gt;? Факторный анализ влияния&lt;/h3&gt;
                    &lt;div class="chart-container"&gt;
                        &lt;canvas id="factorChart"&gt;&lt;/canvas&gt;
                    &lt;/div&gt;
                    &lt;p style="text-align: center; color: #888; font-size: 0.9em; margin-top: 10px;"&gt;
                        ? Зеленый = помогает, ? Красный = мешает
                    &lt;/p&gt;
                &lt;/div&gt;
                
                
                &lt;div class="result-section"&gt;
                    &lt;h3&gt;? Рекомендации ИИ&lt;/h3&gt;
                    &lt;div class="recommendations" id="recommendations"&gt;
                        
                    &lt;/div&gt;
                &lt;/div&gt;
                
                
                &lt;div class="result-section"&gt;
                    &lt;h3&gt;⚠️ Ключевые риски&lt;/h3&gt;
                    &lt;div class="risks-grid"&gt;
                        &lt;div class="risk-card" id="riskRegulatory"&gt;
                            &lt;h4&gt;Регуляторный риск&lt;/h4&gt;
                            &lt;div id="riskRegulatoryStatus"&gt;&lt;/div&gt;
                        &lt;/div&gt;
                        
                        &lt;div class="risk-card" id="riskChurn"&gt;
                            &lt;h4&gt;Риск оттока (Churn)&lt;/h4&gt;
                            &lt;div id="riskChurnStatus"&gt;&lt;/div&gt;
                        &lt;/div&gt;
                        
                        &lt;div class="risk-card" id="riskCompetition"&gt;
                            &lt;h4&gt;Конкурентный риск&lt;/h4&gt;
                            &lt;div id="riskCompetitionStatus"&gt;&lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/main&gt;
    &lt;/div&gt;
    
    
    &lt;script&gt;
        // Код будет здесь
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;script&gt;
// === ЭМУЛЯЦИЯ БАЙЕСОВСКОЙ МОДЕЛИ ===

// Функция сигмоиды (логистическая функция) — основа байесовской логистической регрессии
function sigmoid(x) {
    return 1 / (1 + Math.exp(-x));
}

// Коэффициенты модели (априорные, основанные на анализе рынка HealthTech)
const MODEL_COEFFICIENTS = {
    alpha: -0.8,              // базовая вероятность (рынок)
    beta_clinical: 1.8,       // доказательная база (РКИ/публикации)
    beta_claims: -1.5,        // медицинские заявления без РУ (регуляторный риск)
    beta_price: -0.6,         // цена (нормализованная)
    beta_rating: 2.2,         // рейтинг как прокси UX-качества
    beta_wearable: 0.9,       // интеграция с носимыми устройствами
    beta_community: 1.1       // сообщество или персональный куратор
};

// Средняя цена подписки по рынку (для нормализации)
const MARKET_AVG_PRICE = 600;

/**
 * Расчёт вероятности успеха продукта
 * @param {Object} params - параметры продукта из панели управления
 * @returns {number} вероятность от 0 до 1
 */
function predictSuccessProbability(params) {
    const {
        hasClinicalEvidence,
        claimsMedicalEffect,
        priceRub,
        avgRating,
        hasWearableIntegration,
        hasCommunitySupport
    } = params;
    
    // Нормализуем цену относительно рынка
    const priceNormalized = priceRub / MARKET_AVG_PRICE;
    
    // Линейный предиктор (logit)
    const logit = (
        MODEL_COEFFICIENTS.alpha +
        MODEL_COEFFICIENTS.beta_clinical * (hasClinicalEvidence ? 1 : 0) +
        MODEL_COEFFICIENTS.beta_claims * (claimsMedicalEffect ? 1 : 0) +
        MODEL_COEFFICIENTS.beta_price * priceNormalized +
        MODEL_COEFFICIENTS.beta_rating * avgRating +
        MODEL_COEFFICIENTS.beta_wearable * (hasWearableIntegration ? 1 : 0) +
        MODEL_COEFFICIENTS.beta_community * (hasCommunitySupport ? 1 : 0)
    );
    
    // Преобразуем logit в вероятность через сигмоиду
    return sigmoid(logit);
}

/**
 * Расчёт вклада каждого фактора в итоговую вероятность
 * Используется для waterfall-графика факторного анализа
 * @param {Object} params - параметры продукта
 * @returns {Object} базовая вероятность + массив влияний факторов
 */
function calculateFeatureImpact(params) {
    const {
        hasClinicalEvidence,
        claimsMedicalEffect,
        priceRub,
        avgRating,
        hasWearableIntegration,
        hasCommunitySupport
    } = params;
    
    const priceNormalized = priceRub / MARKET_AVG_PRICE;
    const baseProb = sigmoid(MODEL_COEFFICIENTS.alpha);
    
    return {
        base: baseProb,
        factors: [
            {
                name: "Доказательная база",
                impact: sigmoid(MODEL_COEFFICIENTS.beta_clinical * (hasClinicalEvidence ? 1 : 0)) - 0.5
            },
            {
                name: "Медицинские заявления",
                impact: sigmoid(MODEL_COEFFICIENTS.beta_claims * (claimsMedicalEffect ? 1 : 0)) - 0.5
            },
            {
                name: "Цена",
                impact: sigmoid(-MODEL_COEFFICIENTS.beta_price * (priceNormalized - 1.0)) - 0.5
            },
            {
                name: "UX (рейтинг)",
                impact: sigmoid(MODEL_COEFFICIENTS.beta_rating * (avgRating - 3.0)) - 0.5
            },
            {
                name: "Интеграция с носимыми",
                impact: sigmoid(MODEL_COEFFICIENTS.beta_wearable * (hasWearableIntegration ? 1 : 0)) - 0.5
            },
            {
                name: "Сообщество/куратор",
                impact: sigmoid(MODEL_COEFFICIENTS.beta_community * (hasCommunitySupport ? 1 : 0)) - 0.5
            }
        ]
    };
}

// === ТЕСТОВЫЙ ВЫЗОВ (проверка работоспособности) ===
console.log("✅ Модель загружена. Тестовый расчёт:");
const testResult = predictSuccessProbability({
    hasClinicalEvidence: true,
    claimsMedicalEffect: false,
    priceRub: 799,
    avgRating: 4.3,
    hasWearableIntegration: true,
    hasCommunitySupport: false
});
console.log("Вероятность успеха:", (testResult * 100).toFixed(1) + "%");
&lt;/script&gt;
&lt;script&gt;
// === РЕКОМЕНДАТЕЛЬНАЯ СИСТЕМА И ОЦЕНКА РИСКОВ ===

/**
 * Генерация рекомендаций на основе параметров продукта и вероятности успеха
 * @param {Object} params - параметры продукта
 * @param {number} probability - вероятность успеха (0-1)
 * @returns {Array} массив объектов {type, text}
 */
function generateRecommendations(params, probability) {
    const recommendations = [];
    const priceNormalized = params.priceRub / MARKET_AVG_PRICE;
    
    if (probability &lt; 0.4) {
        // КРИТИЧЕСКИ НИЗКИЕ ШАНСЫ
        if (!params.hasClinicalEvidence) {
            recommendations.push({
                type: "critical",
                icon: "?",
                text: "&lt;strong&gt;Критично:&lt;/strong&gt; Инвестируйте в клинические исследования или партнёрство с научными институтами. Для ЦА 40+ доказательная база — ключевой фактор доверия."
            });
        }
        if (params.claimsMedicalEffect) {
            recommendations.push({
                type: "critical",
                icon: "⚖️",
                text: "&lt;strong&gt;Риск блокировки:&lt;/strong&gt; Уберите медицинские заявления или получите Регистрационное Удостоверение Росздравнадзора."
            });
        }
        if (params.avgRating &lt; 4.0) {
            recommendations.push({
                type: "critical",
                icon: "⭐",
                text: "&lt;strong&gt;UX-проблема:&lt;/strong&gt; Рейтинг ниже 4.0 — переработайте интерфейс. Для пожилой аудитории простота критична."
            });
        }
        if (!params.hasWearableIntegration) {
            recommendations.push({
                type: "warning",
                icon: "⌚",
                text: "&lt;strong&gt;Упущенная возможность:&lt;/strong&gt; Добавьте интеграцию с Apple Health / Garmin Connect. Биохакеры ожидают этого по умолчанию."
            });
        }
    } else if (probability &lt; 0.7) {
        // СРЕДНИЕ ШАНСЫ — точечная оптимизация
        if (params.avgRating &lt; 4.0) {
            recommendations.push({
                type: "warning",
                icon: "⭐",
                text: `&lt;strong&gt;UX:&lt;/strong&gt; Улучшите интерфейс. Текущий рейтинг ${params.avgRating} — ниже рынка.`
            });
        }
        if (!params.hasWearableIntegration) {
            recommendations.push({
                type: "warning",
                icon: "⌚",
                text: "&lt;strong&gt;Фича:&lt;/strong&gt; Добавьте интеграцию с носимыми устройствами (+10-15% к вероятности успеха)."
            });
        }
        if (priceNormalized &gt; 1.3) {
            const suggestedPrice = Math.round(MARKET_AVG_PRICE * 1.2);
            recommendations.push({
                type: "warning",
                icon: "?",
                text: `&lt;strong&gt;Цена:&lt;/strong&gt; Рассмотрите снижение до ${suggestedPrice}₽/мес — это в рыночном коридоре.`
            });
        }
        if (!params.hasCommunitySupport) {
            recommendations.push({
                type: "warning",
                icon: "?",
                text: "&lt;strong&gt;Retention:&lt;/strong&gt; Добавьте сообщество или персонального куратора — это усилит приверженность."
            });
        }
        if (params.claimsMedicalEffect &amp;&amp; !params.hasClinicalEvidence) {
            recommendations.push({
                type: "warning",
                icon: "⚖️",
                text: "&lt;strong&gt;Регуляторика:&lt;/strong&gt; Медицинские заявления без РУ — риск претензий от Росздравнадзора."
            });
        }
    } else {
        // ВЫСОКИЕ ШАНСЫ — стратегия роста
        recommendations.push({
            type: "success",
            icon: "✅",
            text: "&lt;strong&gt;Отличные шансы!&lt;/strong&gt; Стратегия выглядит выигрышной. Можно тестировать монетизацию."
        });
        if (priceNormalized &lt; 1.2) {
            const suggestedPrice = Math.round(params.priceRub * 1.15);
            recommendations.push({
                type: "success",
                icon: "?",
                text: `&lt;strong&gt;Рост выручки:&lt;/strong&gt; Попробуйте поднять цену до ${suggestedPrice}₽/мес — шанс успеха останется высоким.`
            });
        }
        if (!params.hasCommunitySupport) {
            recommendations.push({
                type: "success",
                icon: "?",
                text: "&lt;strong&gt;Точка роста:&lt;/strong&gt; Добавьте сообщество или куратора для усиления retention и LTV."
            });
        }
    }
    
    return recommendations;
}

/**
 * Оценка ключевых рисков продукта
 * @param {Object} params - параметры продукта
 * @returns {Object} три риска: regulatory, churn, competition
 */
function assessRisks(params) {
    const priceNormalized = params.priceRub / MARKET_AVG_PRICE;
    
    // 1. Регуляторный риск
    let regulatory;
    if (params.claimsMedicalEffect &amp;&amp; !params.hasClinicalEvidence) {
        regulatory = {
            level: "high",
            emoji: "?",
            text: "ВЫСОКИЙ: Медицинские заявления без РУ — риск блокировки Росздравнадзором и претензий ФАС"
        };
    } else if (params.claimsMedicalEffect) {
        regulatory = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Есть медицинские заявления — проверьте наличие РУ"
        };
    } else {
        regulatory = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Позиционирование как wellness — регуляторные риски минимальны"
        };
    }
    
    // 2. Риск оттока (Churn)
    let churn;
    if (!params.hasCommunitySupport &amp;&amp; params.avgRating &lt; 4.0) {
        churn = {
            level: "high",
            emoji: "?",
            text: "ВЫСОКИЙ: Слабый UX + нет куратора = высокий отток на 2-3 неделе"
        };
    } else if (!params.hasCommunitySupport || params.avgRating &lt; 4.0) {
        churn = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Рекомендуется добавить сообщество или улучшить UX"
        };
    } else {
        churn = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Хороший UX + поддержка = высокая приверженность"
        };
    }
    
    // 3. Конкурентный риск
    let competition;
    if (priceNormalized &gt; 1.5) {
        competition = {
            level: "medium",
            emoji: "?",
            text: `СРЕДНИЙ: Цена на ${Math.round((priceNormalized - 1) * 100)}% выше рынка — нужна сильная дифференциация`
        };
    } else if (priceNormalized &lt; 0.7) {
        competition = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Демпинг может вызвать подозрения в качестве продукта"
        };
    } else {
        competition = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Цена в рыночном коридоре"
        };
    }
    
    return { regulatory, churn, competition };
}

// === ТЕСТОВЫЙ ВЫЗОВ ===
console.log("✅ Рекомендательная система загружена");
&lt;/script&gt;
&lt;script&gt;
// === РЕКОМЕНДАТЕЛЬНАЯ СИСТЕМА И ОЦЕНКА РИСКОВ ===

/**
 * Генерация рекомендаций на основе параметров продукта и вероятности успеха
 * @param {Object} params - параметры продукта
 * @param {number} probability - вероятность успеха (0-1)
 * @returns {Array} массив объектов {type, text}
 */
function generateRecommendations(params, probability) {
    const recommendations = [];
    const priceNormalized = params.priceRub / MARKET_AVG_PRICE;
    
    if (probability &lt; 0.4) {
        // КРИТИЧЕСКИ НИЗКИЕ ШАНСЫ
        if (!params.hasClinicalEvidence) {
            recommendations.push({
                type: "critical",
                icon: "?",
                text: "&lt;strong&gt;Критично:&lt;/strong&gt; Инвестируйте в клинические исследования или партнёрство с научными институтами. Для ЦА 40+ доказательная база — ключевой фактор доверия."
            });
        }
        if (params.claimsMedicalEffect) {
            recommendations.push({
                type: "critical",
                icon: "⚖️",
                text: "&lt;strong&gt;Риск блокировки:&lt;/strong&gt; Уберите медицинские заявления или получите Регистрационное Удостоверение Росздравнадзора."
            });
        }
        if (params.avgRating &lt; 4.0) {
            recommendations.push({
                type: "critical",
                icon: "⭐",
                text: "&lt;strong&gt;UX-проблема:&lt;/strong&gt; Рейтинг ниже 4.0 — переработайте интерфейс. Для пожилой аудитории простота критична."
            });
        }
        if (!params.hasWearableIntegration) {
            recommendations.push({
                type: "warning",
                icon: "⌚",
                text: "&lt;strong&gt;Упущенная возможность:&lt;/strong&gt; Добавьте интеграцию с Apple Health / Garmin Connect. Биохакеры ожидают этого по умолчанию."
            });
        }
    } else if (probability &lt; 0.7) {
        // СРЕДНИЕ ШАНСЫ — точечная оптимизация
        if (params.avgRating &lt; 4.0) {
            recommendations.push({
                type: "warning",
                icon: "⭐",
                text: `&lt;strong&gt;UX:&lt;/strong&gt; Улучшите интерфейс. Текущий рейтинг ${params.avgRating} — ниже рынка.`
            });
        }
        if (!params.hasWearableIntegration) {
            recommendations.push({
                type: "warning",
                icon: "⌚",
                text: "&lt;strong&gt;Фича:&lt;/strong&gt; Добавьте интеграцию с носимыми устройствами (+10-15% к вероятности успеха)."
            });
        }
        if (priceNormalized &gt; 1.3) {
            const suggestedPrice = Math.round(MARKET_AVG_PRICE * 1.2);
            recommendations.push({
                type: "warning",
                icon: "?",
                text: `&lt;strong&gt;Цена:&lt;/strong&gt; Рассмотрите снижение до ${suggestedPrice}₽/мес — это в рыночном коридоре.`
            });
        }
        if (!params.hasCommunitySupport) {
            recommendations.push({
                type: "warning",
                icon: "?",
                text: "&lt;strong&gt;Retention:&lt;/strong&gt; Добавьте сообщество или персонального куратора — это усилит приверженность."
            });
        }
        if (params.claimsMedicalEffect &amp;&amp; !params.hasClinicalEvidence) {
            recommendations.push({
                type: "warning",
                icon: "⚖️",
                text: "&lt;strong&gt;Регуляторика:&lt;/strong&gt; Медицинские заявления без РУ — риск претензий от Росздравнадзора."
            });
        }
    } else {
        // ВЫСОКИЕ ШАНСЫ — стратегия роста
        recommendations.push({
            type: "success",
            icon: "✅",
            text: "&lt;strong&gt;Отличные шансы!&lt;/strong&gt; Стратегия выглядит выигрышной. Можно тестировать монетизацию."
        });
        if (priceNormalized &lt; 1.2) {
            const suggestedPrice = Math.round(params.priceRub * 1.15);
            recommendations.push({
                type: "success",
                icon: "?",
                text: `&lt;strong&gt;Рост выручки:&lt;/strong&gt; Попробуйте поднять цену до ${suggestedPrice}₽/мес — шанс успеха останется высоким.`
            });
        }
        if (!params.hasCommunitySupport) {
            recommendations.push({
                type: "success",
                icon: "?",
                text: "&lt;strong&gt;Точка роста:&lt;/strong&gt; Добавьте сообщество или куратора для усиления retention и LTV."
            });
        }
    }
    
    return recommendations;
}

/**
 * Оценка ключевых рисков продукта
 * @param {Object} params - параметры продукта
 * @returns {Object} три риска: regulatory, churn, competition
 */
function assessRisks(params) {
    const priceNormalized = params.priceRub / MARKET_AVG_PRICE;
    
    // 1. Регуляторный риск
    let regulatory;
    if (params.claimsMedicalEffect &amp;&amp; !params.hasClinicalEvidence) {
        regulatory = {
            level: "high",
            emoji: "?",
            text: "ВЫСОКИЙ: Медицинские заявления без РУ — риск блокировки Росздравнадзором и претензий ФАС"
        };
    } else if (params.claimsMedicalEffect) {
        regulatory = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Есть медицинские заявления — проверьте наличие РУ"
        };
    } else {
        regulatory = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Позиционирование как wellness — регуляторные риски минимальны"
        };
    }
    
    // 2. Риск оттока (Churn)
    let churn;
    if (!params.hasCommunitySupport &amp;&amp; params.avgRating &lt; 4.0) {
        churn = {
            level: "high",
            emoji: "?",
            text: "ВЫСОКИЙ: Слабый UX + нет куратора = высокий отток на 2-3 неделе"
        };
    } else if (!params.hasCommunitySupport || params.avgRating &lt; 4.0) {
        churn = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Рекомендуется добавить сообщество или улучшить UX"
        };
    } else {
        churn = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Хороший UX + поддержка = высокая приверженность"
        };
    }
    
    // 3. Конкурентный риск
    let competition;
    if (priceNormalized &gt; 1.5) {
        competition = {
            level: "medium",
            emoji: "?",
            text: `СРЕДНИЙ: Цена на ${Math.round((priceNormalized - 1) * 100)}% выше рынка — нужна сильная дифференциация`
        };
    } else if (priceNormalized &lt; 0.7) {
        competition = {
            level: "medium",
            emoji: "?",
            text: "СРЕДНИЙ: Демпинг может вызвать подозрения в качестве продукта"
        };
    } else {
        competition = {
            level: "low",
            emoji: "?",
            text: "НИЗКИЙ: Цена в рыночном коридоре"
        };
    }
    
    return { regulatory, churn, competition };
}

// === ТЕСТОВЫЙ ВЫЗОВ ===
console.log("✅ Рекомендательная система загружена");
&lt;/script&gt;
&lt;script&gt;
// === ВИЗУАЛИЗАЦИЯ ГРАФИКОВ ===

// Глобальная переменная для хранения экземпляра графика (чтобы обновлять, а не пересоздавать)
let factorChartInstance = null;

/**
 * Отрисовка графика факторного анализа
 * @param {Object} impactData - результат calculateFeatureImpact()
 */
function renderFactorChart(impactData) {
    const ctx = document.getElementById('factorChart').getContext('2d');
    
    // Подготавливаем данные для графика
    const labels = impactData.factors.map(f =&gt; f.name);
    const values = impactData.factors.map(f =&gt; (f.impact * 100).toFixed(1));
    
    // Цвета: зеленый для позитивного влияния, красный для негативного
    const colors = impactData.factors.map(f =&gt; f.impact &gt;= 0 ? '#28a745' : '#dc3545');
    const borderColors = colors.map(c =&gt; c);
    
    // Если график уже существует — обновляем данные
    if (factorChartInstance) {
        factorChartInstance.data.labels = labels;
        factorChartInstance.data.datasets[0].data = values;
        factorChartInstance.data.datasets[0].backgroundColor = colors;
        factorChartInstance.data.datasets[0].borderColor = borderColors;
        factorChartInstance.update();
        return;
    }
    
    // Создаём новый график
    factorChartInstance = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: labels,
            datasets: [{
                label: 'Влияние на вероятность (%)',
                data: values,
                backgroundColor: colors,
                borderColor: borderColors,
                borderWidth: 2,
                borderRadius: 8,
                borderSkipped: false
            }]
        },
        options: {
            responsive: true,
            maintainAspectRatio: true,
            indexAxis: 'y',  // горизонтальный график
            plugins: {
                legend: {
                    display: false
                },
                tooltip: {
                    backgroundColor: 'rgba(0, 0, 0, 0.8)',
                    padding: 12,
                    titleFont: { size: 14, weight: 'bold' },
                    bodyFont: { size: 13 },
                    callbacks: {
                        label: function(context) {
                            const value = context.parsed.x;
                            const prefix = value &gt;= 0 ? '+' : '';
                            return `${prefix}${value}% влияние на вероятность`;
                        }
                    }
                }
            },
            scales: {
                x: {
                    beginAtZero: true,
                    grid: {
                        color: 'rgba(0, 0, 0, 0.05)',
                        drawBorder: false
                    },
                    ticks: {
                        callback: function(value) {
                            return value + '%';
                        },
                        font: { size: 12 }
                    },
                    title: {
                        display: true,
                        text: 'Влияние на вероятность успеха',
                        font: { size: 13, weight: '600' },
                        color: '#666'
                    }
                },
                y: {
                    grid: {
                        display: false
                    },
                    ticks: {
                        font: { size: 12, weight: '500' },
                        color: '#333'
                    }
                }
            },
            animation: {
                duration: 500,
                easing: 'easeInOutQuart'
            }
        }
    });
}

// === ТЕСТОВЫЙ ВЫЗОВ ===
console.log("✅ Модуль визуализации графиков загружен");
&lt;/script&gt;
&lt;script&gt;
// === ИНТЕРАКТИВНОСТЬ: ОБНОВЛЕНИЕ В РЕАЛЬНОМ ВРЕМЕНИ ===

/**
 * Сбор всех параметров из панели управления
 * @returns {Object} параметры продукта
 */
function collectParameters() {
    return {
        productName: document.getElementById('productName').value,
        hasClinicalEvidence: document.getElementById('hasClinicalEvidence').checked,
        claimsMedicalEffect: document.getElementById('claimsMedicalEffect').checked,
        priceRub: parseFloat(document.getElementById('priceRub').value),
        avgRating: parseFloat(document.getElementById('avgRating').value),
        hasWearableIntegration: document.getElementById('hasWearableIntegration').checked,
        hasCommunitySupport: document.getElementById('hasCommunitySupport').checked
    };
}

/**
 * Обновление отображения значений ползунков
 */
function updateRangeDisplays() {
    const priceValue = document.getElementById('priceValue');
    const ratingValue = document.getElementById('ratingValue');
    
    const priceRub = document.getElementById('priceRub').value;
    const avgRating = document.getElementById('avgRating').value;
    
    priceValue.textContent = `${priceRub} ₽/мес`;
    ratingValue.textContent = avgRating;
}

/**
 * Обновление главной метрики (вероятность успеха)
 * @param {number} probability - вероятность от 0 до 1
 */
function updateProbabilityDisplay(probability) {
    const probElement = document.getElementById('probabilityValue');
    const deltaElement = document.getElementById('probabilityDelta');
    
    const percent = (probability * 100).toFixed(1);
    const delta = probability - 0.5;  // относительно среднего (50%)
    const deltaPercent = (delta * 100).toFixed(1);
    const deltaSign = delta &gt;= 0 ? '+' : '';
    
    probElement.textContent = `${percent}%`;
    deltaElement.textContent = `${deltaSign}${deltaPercent}% относительно среднего`;
    
    // Цветовая индикация
    const metricCard = document.querySelector('.metric-card');
    if (probability &gt;= 0.7) {
        metricCard.style.background = 'linear-gradient(135deg, #28a745 0%, #20c997 100%)';
    } else if (probability &gt;= 0.4) {
        metricCard.style.background = 'linear-gradient(135deg, #ffc107 0%, #fd7e14 100%)';
    } else {
        metricCard.style.background = 'linear-gradient(135deg, #dc3545 0%, #c82333 100%)';
    }
}

/**
 * Обновление блока рекомендаций
 * @param {Array} recommendations - массив рекомендаций
 */
function updateRecommendations(recommendations) {
    const container = document.getElementById('recommendations');
    
    if (recommendations.length === 0) {
        container.innerHTML = '&lt;p style="color: #888; text-align: center;"&gt;Нет специфических рекомендаций&lt;/p&gt;';
        return;
    }
    
    container.innerHTML = recommendations.map(rec =&gt; `
        &lt;div class="recommendation-item ${rec.type}"&gt;
            ${rec.icon} ${rec.text}
        &lt;/div&gt;
    `).join('');
}

/**
 * Обновление блока рисков
 * @param {Object} risks - объект с тремя рисками
 */
function updateRisksDisplay(risks) {
    // Регуляторный риск
    const regCard = document.getElementById('riskRegulatory');
    const regStatus = document.getElementById('riskRegulatoryStatus');
    regCard.className = `risk-card ${risks.regulatory.level}`;
    regStatus.innerHTML = `
        &lt;div class="risk-status ${risks.regulatory.level}"&gt;
            ${risks.regulatory.emoji} ${risks.regulatory.text}
        &lt;/div&gt;
    `;
    
    // Риск оттока
    const churnCard = document.getElementById('riskChurn');
    const churnStatus = document.getElementById('riskChurnStatus');
    churnCard.className = `risk-card ${risks.churn.level}`;
    churnStatus.innerHTML = `
        &lt;div class="risk-status ${risks.churn.level}"&gt;
            ${risks.churn.emoji} ${risks.churn.text}
        &lt;/div&gt;
    `;
    
    // Конкурентный риск
    const compCard = document.getElementById('riskCompetition');
    const compStatus = document.getElementById('riskCompetitionStatus');
    compCard.className = `risk-card ${risks.competition.level}`;
    compStatus.innerHTML = `
        &lt;div class="risk-status ${risks.competition.level}"&gt;
            ${risks.competition.emoji} ${risks.competition.text}
        &lt;/div&gt;
    `;
}

/**
 * Главная функция обновления всего интерфейса
 * Вызывается при любом изменении параметров
 */
function updateAll() {
    // 1. Собираем параметры
    const params = collectParameters();
    
    // 2. Обновляем отображение значений ползунков
    updateRangeDisplays();
    
    // 3. Рассчитываем вероятность успеха
    const probability = predictSuccessProbability(params);
    
    // 4. Рассчитываем факторный анализ
    const impactData = calculateFeatureImpact(params);
    
    // 5. Генерируем рекомендации
    const recommendations = generateRecommendations(params, probability);
    
    // 6. Оцениваем риски
    const risks = assessRisks(params);
    
    // 7. Обновляем интерфейс
    updateProbabilityDisplay(probability);
    renderFactorChart(impactData);
    updateRecommendations(recommendations);
    updateRisksDisplay(risks);
    
    // 8. Логирование для отладки
    console.log('Обновление:', {
        probability: (probability * 100).toFixed(1) + '%',
        params: params
    });
}

/**
 * Инициализация слушателей событий для всех элементов управления
 */
function initializeEventListeners() {
    // Текстовое поле (название продукта)
    document.getElementById('productName').addEventListener('input', updateAll);
    
    // Чекбоксы
    const checkboxes = [
        'hasClinicalEvidence',
        'claimsMedicalEffect',
        'hasWearableIntegration',
        'hasCommunitySupport'
    ];
    
    checkboxes.forEach(id =&gt; {
        document.getElementById(id).addEventListener('change', updateAll);
    });
    
    // Ползунки
    const sliders = ['priceRub', 'avgRating'];
    
    sliders.forEach(id =&gt; {
        document.getElementById(id).addEventListener('input', updateAll);
    });
    
    console.log('✅ Слушатели событий инициализированы');
}

// === ЗАПУСК ПРИ ЗАГРУЗКЕ СТРАНИЦЫ ===
document.addEventListener('DOMContentLoaded', function() {
    console.log('? Инициализация BayesHealth...');
    
    // Инициализируем слушатели событий
    initializeEventListeners();
    
    // Первичный расчёт и отрисовка
    updateAll();
    
    console.log('✅ BayesHealth готов к работе!');
});
&lt;/script&gt;
&lt;script&gt;
// === ДОПОЛНИТЕЛЬНЫЕ ФИЧИ ===

/**
 * Экспорт отчёта в формат для печати
 * Открывает новое окно с отформатированным отчётом
 */
function exportReport() {
    const params = collectParameters();
    const probability = predictSuccessProbability(params);
    const impactData = calculateFeatureImpact(params);
    const recommendations = generateRecommendations(params, probability);
    const risks = assessRisks(params);
    
    const reportHTML = `
&lt;!DOCTYPE html&gt;
&lt;html lang="ru"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Отчёт BayesHealth: ${params.productName}&lt;/title&gt;
    &lt;style&gt;
        body { font-family: Arial, sans-serif; max-width: 800px; margin: 40px auto; padding: 20px; color: #333; }
        h1 { color: #667eea; border-bottom: 3px solid #667eea; padding-bottom: 10px; }
        h2 { color: #333; margin-top: 30px; }
        .metric { font-size: 3em; font-weight: bold; color: #667eea; text-align: center; margin: 20px 0; }
        .section { background: #f8f9fa; padding: 20px; border-radius: 8px; margin: 20px 0; }
        .risk-high { color: #dc3545; font-weight: bold; }
        .risk-medium { color: #ffc107; font-weight: bold; }
        .risk-low { color: #28a745; font-weight: bold; }
        .param { margin: 10px 0; }
        .param strong { color: #667eea; }
        @media print { body { margin: 0; } }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;? Отчёт BayesHealth&lt;/h1&gt;
    &lt;p&gt;&lt;strong&gt;Продукт:&lt;/strong&gt; ${params.productName}&lt;/p&gt;
    &lt;p&gt;&lt;strong&gt;Дата:&lt;/strong&gt; ${new Date().toLocaleDateString('ru-RU')}&lt;/p&gt;
    
    &lt;div class="metric"&gt;${(probability * 100).toFixed(1)}%&lt;/div&gt;
    &lt;p style="text-align: center; font-size: 1.2em;"&gt;Вероятность успеха (PMF + Retention &gt;40%)&lt;/p&gt;
    
    &lt;h2&gt;Параметры продукта&lt;/h2&gt;
    &lt;div class="section"&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Доказательная база:&lt;/strong&gt; ${params.hasClinicalEvidence ? '✅ Есть' : '❌ Нет'}&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Медицинские заявления:&lt;/strong&gt; ${params.claimsMedicalEffect ? '⚠️ Да' : '✅ Нет'}&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Цена подписки:&lt;/strong&gt; ${params.priceRub} ₽/мес&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Ожидаемый рейтинг:&lt;/strong&gt; ${params.avgRating}&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Интеграция с носимыми:&lt;/strong&gt; ${params.hasWearableIntegration ? '✅ Да' : '❌ Нет'}&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Сообщество/куратор:&lt;/strong&gt; ${params.hasCommunitySupport ? '✅ Да' : '❌ Нет'}&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;h2&gt;Рекомендации&lt;/h2&gt;
    &lt;div class="section"&gt;
        ${recommendations.length &gt; 0 ? recommendations.map(r =&gt; `&lt;div class="param"&gt;${r.icon} ${r.text}&lt;/div&gt;`).join('') : '&lt;p&gt;Нет специфических рекомендаций&lt;/p&gt;'}
    &lt;/div&gt;
    
    &lt;h2&gt;Оценка рисков&lt;/h2&gt;
    &lt;div class="section"&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Регуляторный:&lt;/strong&gt; &lt;span class="risk-${risks.regulatory.level}"&gt;${risks.regulatory.text}&lt;/span&gt;&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Отток пользователей:&lt;/strong&gt; &lt;span class="risk-${risks.churn.level}"&gt;${risks.churn.text}&lt;/span&gt;&lt;/div&gt;
        &lt;div class="param"&gt;&lt;strong&gt;Конкуренция:&lt;/strong&gt; &lt;span class="risk-${risks.competition.level}"&gt;${risks.competition.text}&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;script&gt;
        window.onload = function() { window.print(); };
    &lt;\/script&gt;
&lt;/body&gt;
&lt;/html&gt;
    `;
    
    const printWindow = window.open('', '_blank');
    printWindow.document.write(reportHTML);
    printWindow.document.close();
}

/**
 * Сохранение текущего сценария в localStorage
 */
function saveScenario() {
    const scenarioName = prompt('Введите название сценария:', `Сценарий ${new Date().toLocaleString('ru-RU')}`);
    if (!scenarioName) return;
    
    const params = collectParameters();
    const scenarios = JSON.parse(localStorage.getItem('bayeshealth_scenarios') || '{}');
    scenarios[scenarioName] = params;
    localStorage.setItem('bayeshealth_scenarios', JSON.stringify(scenarios));
    
    alert(`✅ Сценарий "${scenarioName}" сохранён!`);
    updateScenariosList();
}

/**
 * Загрузка сохранённого сценария
 */
function loadScenario(scenarioName) {
    const scenarios = JSON.parse(localStorage.getItem('bayeshealth_scenarios') || '{}');
    const params = scenarios[scenarioName];
    
    if (!params) {
        alert('❌ Сценарий не найден');
        return;
    }
    
    // Восстанавливаем параметры в интерфейс
    document.getElementById('productName').value = params.productName;
    document.getElementById('hasClinicalEvidence').checked = params.hasClinicalEvidence;
    document.getElementById('claimsMedicalEffect').checked = params.claimsMedicalEffect;
    document.getElementById('priceRub').value = params.priceRub;
    document.getElementById('avgRating').value = params.avgRating;
    document.getElementById('hasWearableIntegration').checked = params.hasWearableIntegration;
    document.getElementById('hasCommunitySupport').checked = params.hasCommunitySupport;
    
    // Обновляем интерфейс
    updateAll();
    
    console.log(`✅ Загружен сценарий: ${scenarioName}`);
}

/**
 * Удаление сценария
 */
function deleteScenario(scenarioName) {
    if (!confirm(`Удалить сценарий "${scenarioName}"?`)) return;
    
    const scenarios = JSON.parse(localStorage.getItem('bayeshealth_scenarios') || '{}');
    delete scenarios[scenarioName];
    localStorage.setItem('bayeshealth_scenarios', JSON.stringify(scenarios));
    
    updateScenariosList();
}

/**
 * Обновление списка сохранённых сценариев
 */
function updateScenariosList() {
    const scenarios = JSON.parse(localStorage.getItem('bayeshealth_scenarios') || '{}');
    const container = document.getElementById('scenariosList');
    
    if (Object.keys(scenarios).length === 0) {
        container.innerHTML = '&lt;p style="color: #888; font-size: 0.9em;"&gt;Нет сохранённых сценариев&lt;/p&gt;';
        return;
    }
    
    container.innerHTML = Object.keys(scenarios).map(name =&gt; `
        &lt;div style="display: flex; gap: 10px; margin-bottom: 10px; align-items: center;"&gt;
            &lt;button onclick="loadScenario('${name.replace(/'/g, "\\'")}')" style="flex: 1; padding: 8px; background: #667eea; color: white; border: none; border-radius: 6px; cursor: pointer;"&gt;
                ? ${name}
            &lt;/button&gt;
            &lt;button onclick="deleteScenario('${name.replace(/'/g, "\\'")}')" style="padding: 8px 12px; background: #dc3545; color: white; border: none; border-radius: 6px; cursor: pointer;"&gt;
                ?️
            &lt;/button&gt;
        &lt;/div&gt;
    `).join('');
}

/**
 * Сброс всех параметров к значениям по умолчанию
 */
function resetToDefaults() {
    if (!confirm('Сбросить все параметры к значениям по умолчанию?')) return;
    
    document.getElementById('productName').value = 'Longevity Tracker Pro';
    document.getElementById('hasClinicalEvidence').checked = true;
    document.getElementById('claimsMedicalEffect').checked = false;
    document.getElementById('priceRub').value = 799;
    document.getElementById('avgRating').value = 4.3;
    document.getElementById('hasWearableIntegration').checked = true;
    document.getElementById('hasCommunitySupport').checked = false;
    
    updateAll();
}

/**
 * Добавление кнопок управления в интерфейс
 */
function addControlButtons() {
    const controlPanel = document.getElementById('control-panel');
    
    const buttonsHTML = `
        &lt;div class="control-section" style="border-top: 2px solid #e0e0e0; padding-top: 20px; margin-top: 20px;"&gt;
            &lt;h3&gt;?️ Управление&lt;/h3&gt;
            &lt;div style="display: flex; flex-direction: column; gap: 10px;"&gt;
                &lt;button onclick="exportReport()" style="padding: 12px; background: #667eea; color: white; border: none; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: 600; transition: all 0.3s;"&gt;
                    ? Экспорт отчёта
                &lt;/button&gt;
                &lt;button onclick="saveScenario()" style="padding: 12px; background: #28a745; color: white; border: none; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: 600; transition: all 0.3s;"&gt;
                    ? Сохранить сценарий
                &lt;/button&gt;
                &lt;button onclick="resetToDefaults()" style="padding: 12px; background: #6c757d; color: white; border: none; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: 600; transition: all 0.3s;"&gt;
                    ? Сбросить настройки
                &lt;/button&gt;
            &lt;/div&gt;
            
            &lt;h3 style="margin-top: 25px;"&gt;? Сохранённые сценарии&lt;/h3&gt;
            &lt;div id="scenariosList"&gt;&lt;/div&gt;
        &lt;/div&gt;
    `;
    
    controlPanel.insertAdjacentHTML('beforeend', buttonsHTML);
    
    // Загружаем список сценариев
    updateScenariosList();
    
    console.log('✅ Кнопки управления добавлены');
}

// === ДОБАВЛЕНИЕ КНОПОК ПРИ ЗАГРУЗКЕ ===
document.addEventListener('DOMContentLoaded', function() {
    // Небольшая задержка, чтобы основные элементы успели загрузиться
    setTimeout(addControlButtons, 100);
});
&lt;/script&gt;
&lt;script&gt;
// === ФИНАЛЬНАЯ ПОЛИРОВКА ===

/**
 * Добавление плавных анимаций появления элементов
 */
function addEntranceAnimations() {
    const style = document.createElement('style');
    style.textContent = `
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(20px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        @keyframes pulse {
            0%, 100% { transform: scale(1); }
            50% { transform: scale(1.02); }
        }
        
        .metric-card {
            animation: fadeInUp 0.6s ease-out;
        }
        
        .metric-value {
            transition: all 0.3s ease;
        }
        
        .metric-value.changing {
            animation: pulse 0.3s ease;
        }
        
        .result-section {
            animation: fadeInUp 0.6s ease-out;
            animation-fill-mode: both;
        }
        
        .result-section:nth-child(1) { animation-delay: 0.1s; }
        .result-section:nth-child(2) { animation-delay: 0.2s; }
        .result-section:nth-child(3) { animation-delay: 0.3s; }
        
        .recommendation-item {
            animation: fadeInUp 0.4s ease-out;
            animation-fill-mode: both;
        }
        
        .recommendation-item:nth-child(1) { animation-delay: 0.05s; }
        .recommendation-item:nth-child(2) { animation-delay: 0.1s; }
        .recommendation-item:nth-child(3) { animation-delay: 0.15s; }
        .recommendation-item:nth-child(4) { animation-delay: 0.2s; }
        
        button:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
        }
        
        button:active {
            transform: translateY(0);
        }
    `;
    document.head.appendChild(style);
}

/**
 * Добавление footer с технической информацией
 */
function addFooter() {
    const footerHTML = `
        &lt;footer style="
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px 40px;
            text-align: center;
            margin-top: 0;
        "&gt;
            &lt;div style="max-width: 1000px; margin: 0 auto;"&gt;
                &lt;h3 style="margin-bottom: 15px; font-size: 1.3em;"&gt;? BayesHealth&lt;/h3&gt;
                &lt;p style="opacity: 0.9; margin-bottom: 10px; line-height: 1.6;"&gt;
                    Система прогнозирования успеха HealthTech-продуктов на основе байесовских сетей.&lt;br&gt;
                    Работает с агрегированными рыночными данными, без обработки персональных данных (152-ФЗ).
                &lt;/p&gt;
                &lt;div style="
                    display: flex;
                    justify-content: center;
                    gap: 30px;
                    margin-top: 20px;
                    flex-wrap: wrap;
                    font-size: 0.9em;
                    opacity: 0.85;
                "&gt;
                    &lt;div&gt;&lt;strong&gt;Модель:&lt;/strong&gt; Байесовская логистическая регрессия&lt;/div&gt;
                    &lt;div&gt;&lt;strong&gt;Ниша:&lt;/strong&gt; Долголетие и биохакерство 40+&lt;/div&gt;
                    &lt;div&gt;&lt;strong&gt;Версия:&lt;/strong&gt; 1.0 (MVP)&lt;/div&gt;
                &lt;/div&gt;
                &lt;p style="margin-top: 20px; font-size: 0.85em; opacity: 0.7;"&gt;
                    © 2026 BayesHealth. Все прогнозы носят рекомендательный характер.
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/footer&gt;
    `;
    
    document.querySelector('.container').insertAdjacentHTML('beforeend', footerHTML);
}

/**
 * Добавление валидации и предупреждений
 */
function addValidation() {
    const originalUpdate = updateAll;
    
    window.updateAll = function() {
        const params = collectParameters();
        
        // Валидация: предупреждение о слишком высокой цене
        const priceNormalized = params.priceRub / MARKET_AVG_PRICE;
        if (priceNormalized &gt; 2.0) {
            console.warn('⚠️ Цена более чем в 2 раза выше рынка — убедитесь в сильной дифференциации');
        }
        
        // Валидация: медицинские заявления без доказательной базы
        if (params.claimsMedicalEffect &amp;&amp; !params.hasClinicalEvidence) {
            console.warn('⚠️ Медицинские заявления без клинических исследований — высокий регуляторный риск');
        }
        
        // Вызываем оригинальную функцию
        originalUpdate();
        
        // Добавляем анимацию к значению вероятности
        const probElement = document.getElementById('probabilityValue');
        probElement.classList.add('changing');
        setTimeout(() =&gt; probElement.classList.remove('changing'), 300);
    };
}

/**
 * Вывод инструкций по использованию в консоль
 */
function showInstructions() {
    console.log('%c? BayesHealth — Инструкция', 'font-size: 18px; font-weight: bold; color: #667eea;');
    console.log('%cКак использовать:', 'font-size: 14px; font-weight: bold; color: #333;');
    console.log('1. Изменяйте параметры в левой панели');
    console.log('2. Наблюдайте, как меняется вероятность успеха в реальном времени');
    console.log('3. Читайте рекомендации ИИ для улучшения продукта');
    console.log('4. Оценивайте ключевые риски');
    console.log('5. Сохраняйте удачные сценарии для сравнения');
    console.log('6. Экспортируйте отчёт для презентации');
    console.log('');
    console.log('%c? Попробуйте:', 'font-size: 14px; font-weight: bold; color: #28a745;');
    console.log('- Включить медицинские заявления без РУ → увидите падение вероятности');
    console.log('- Добавить сообщество/куратора → увидите рост retention');
    console.log('- Убрать интеграцию с носимыми → потеряете биохакеров');
}

// === ЗАПУСК ФИНАЛЬНОЙ ПОЛИРОВКИ ===
document.addEventListener('DOMContentLoaded', function() {
    // Небольшая задержка, чтобы основные элементы успели загрузиться
    setTimeout(() =&gt; {
        addEntranceAnimations();
        addFooter();
        addValidation();
        showInstructions();
        console.log('✅ Финальная полировка завершена. BayesHealth полностью готов!');
    }, 200);
});
&lt;/script&gt;</subtitle>
  <updated>2026-08-24T06:25:02Z</updated>
  <logo>https://pandoraburo.ru/ssl/layouts/a9/8c8/4b7781a4db8477265eb51f31892.png</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
