code_html_yin_yang_interactif.txt

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Simulateur Interactif Yin-Yang - Drainage selon Dr Henry</title>

<style>

    * {

        margin: 0;

        padding: 0;

        box-sizing: border-box;

    }

    body {

        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;

        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

        min-height: 100vh;

        padding: 20px;

        display: flex;

        justify-content: center;

        align-items: center;

    }

    .container {

        background: white;

        border-radius: 20px;

        padding: 30px;

        box-shadow: 0 20px 60px rgba(0,0,0,0.3);

        max-width: 900px;

        width: 100%;

    }

    h1 {

        text-align: center;

        color: #2c3e50;

        margin-bottom: 10px;

        font-size: 1.8em;

    }

    .subtitle {

        text-align: center;

        color: #7f8c8d;

        margin-bottom: 30px;

        font-size: 0.95em;

    }

    .main-grid {

        display: grid;

        grid-template-columns: 1fr 1.5fr;

        gap: 40px;

        align-items: start;

    }

    .interactive-panel {

        background: #f8f9fa;

        padding: 20px;

        border-radius: 15px;

        border: 2px solid #dee2e6;

    }

    .panel-title {

        font-weight: bold;

        color: #495057;

        margin-bottom: 20px;

        text-align: center;

        font-size: 1.1em;

    }

    .yin-yang-container {

        position: relative;

        width: 100%;

        height: 400px;

        border: 4px solid #2c3e50;

        border-radius: 10px;

        overflow: hidden;

        background: white;

        display: flex;

        cursor: ns-resize;

    }

    .yin-section, .yang-section {

        width: 50%;

        position: relative;

        display: flex;

        align-items: center;

        justify-content: center;

        transition: all 0.3s ease;

    }

    .yin-section {

        background: #2c3e50;

        color: white;

    }

    .yang-section {

        background: #ecf0f1;

        color: #2c3e50;

    }

    .section-label {

        font-size: 1.5em;

        font-weight: bold;

        text-align: center;

        z-index: 10;

        pointer-events: none;

        position: absolute;

    }

    .separator {

        position: absolute;

        width: 100%;

        height: 4px;

        background: #e74c3c;

        cursor: ns-resize;

        z-index: 20;

        transition: top 0.1s ease;

    }

    .separator:hover {

        height: 6px;

        background: #c0392b;

    }

    .separator::after {

        content: '↕';

        position: absolute;

        right: 10px;

        top: 50%;

        transform: translateY(-50%);

        color: white;

        font-size: 20px;

        font-weight: bold;

    }

    .level-indicators {

        position: absolute;

        left: 0;

        top: 0;

        width: 100%;

        height: 100%;

        pointer-events: none;

    }

    .level-line {

        position: absolute;

        width: 100%;

        border-top: 1px dashed rgba(255,255,255,0.3);

    }

    .level-label {

        position: absolute;

        left: 5px;

        font-size: 0.7em;

        color: rgba(255,255,255,0.7);

        background: rgba(0,0,0,0.3);

        padding: 2px 5px;

        border-radius: 3px;

    }

    .results-panel {

        background: white;

        border-radius: 15px;

    }

    .status-banner {

        padding: 15px;

        border-radius: 10px;

        margin-bottom: 20px;

        text-align: center;

        transition: all 0.3s ease;

    }

    .status-title {

        font-size: 1.3em;

        font-weight: bold;

        margin-bottom: 5px;

    }

    .status-subtitle {

        font-size: 0.9em;

        opacity: 0.9;

    }

    .drainage-ok {

        background: linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%);

        color: #155724;

    }

    .drainage-attention {

        background: linear-gradient(135deg, #ffd89b 0%, #ffb347 100%);

        color: #856404;

    }

    .drainage-danger {

        background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);

        color: #721c24;

    }

    .info-section {

        background: #f8f9fa;

        padding: 15px;

        border-radius: 10px;

        margin-bottom: 15px;

        border-left: 4px solid #3498db;

    }

    .info-title {

        font-weight: bold;

        color: #2c3e50;

        margin-bottom: 10px;

        font-size: 0.95em;

    }

    .info-content {

        font-size: 0.85em;

        color: #495057;

        line-height: 1.6;

    }

    .info-list {

        list-style: none;

        padding: 0;

    }

    .info-list li {

        padding: 4px 0;

        padding-left: 20px;

        position: relative;

    }

    .info-list li:before {

        content: "•";

        position: absolute;

        left: 5px;

        color: #3498db;

    }

    .strategy-section {

        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

        color: white;

        padding: 15px;

        border-radius: 10px;

        margin-bottom: 15px;

    }

    .remedies-section {

        background: #e8f5e9;

        padding: 15px;

        border-radius: 10px;

        border-left: 4px solid #4caf50;

    }

    .remedies-title {

        font-weight: bold;

        color: #2e7d32;

        margin-bottom: 8px;

        font-size: 0.95em;

    }

    .remedies-content {

        color: #1b5e20;

        font-size: 0.85em;

    }

    .warning-box {

        background: #fff3cd;

        border: 2px solid #ffc107;

        padding: 12px;

        border-radius: 8px;

        margin-bottom: 15px;

        display: none;

    }

    .warning-box.show {

        display: block;

    }

    .warning-icon {

        color: #ff6b6b;

        font-size: 1.2em;

        margin-right: 5px;

    }

    .values-display {

        display: flex;

        justify-content: space-around;

        margin-top: 15px;

        padding: 10px;

        background: white;

        border-radius: 8px;

    }

    .value-item {

        text-align: center;

    }

    .value-label {

        font-size: 0.8em;

        color: #7f8c8d;

        margin-bottom: 5px;

    }

    .value-number {

        font-size: 1.5em;

        font-weight: bold;

    }

    .yin-value {

        color: #2c3e50;

    }

    .yang-value {

        color: #e67e22;

    }

    .instructions {

        background: #e3f2fd;

        padding: 15px;

        border-radius: 10px;

        margin-bottom: 20px;

        border-left: 4px solid #2196f3;

    }

    .instructions-title {

        font-weight: bold;

        color: #1565c0;

        margin-bottom: 8px;

    }

    .instructions-content {

        font-size: 0.85em;

        color: #0d47a1;

    }

    @media (max-width: 768px) {

        .main-grid {

            grid-template-columns: 1fr;

            gap: 30px;

        }

        .yin-yang-container {

            height: 350px;

        }

    }

</style>
<div class="container">

    <h1>Simulateur Interactif Yin-Yang</h1>

    <div class="subtitle">Évaluation du terrain pour le drainage selon Dr Jean-Yves Henry</div>

    <div class="instructions">

        <div class="instructions-title">📌 Instructions :</div>

        <div class="instructions-content">

            Déplacez la ligne rouge verticalement pour ajuster les niveaux de Yin et Yang.<br>

            Les recommandations s'adaptent automatiquement selon l'équilibre énergétique.

        </div>

    </div>

    <div class="main-grid">

        <!-- Panneau interactif -->

        <div class="interactive-panel">

            <div class="panel-title">Ajustez l'équilibre Yin-Yang</div>

            <div class="yin-yang-container" id="yinYangBox">

                <div class="yin-section" id="yinSection">

                    <div class="section-label">YIN</div>

                    <div class="level-indicators">

                        <div class="level-line" style="top: 25%;">

                            <span class="level-label" style="top: -10px;">Excès</span>

                        </div>

                        <div class="level-line" style="top: 50%;">

                            <span class="level-label" style="top: -10px;">Normal</span>

                        </div>

                        <div class="level-line" style="top: 75%;">

                            <span class="level-label" style="top: -10px;">Insuffisant</span>

                        </div>

                    </div>

                </div>

                <div class="yang-section" id="yangSection">

                    <div class="section-label">YANG</div>

                </div>

                <div class="separator" id="separator"></div>

            </div>

            <div class="values-display">

                <div class="value-item">

                    <div class="value-label">Niveau Yin</div>

                    <div class="value-number yin-value" id="yinValue">50%</div>

                </div>

                <div class="value-item">

                    <div class="value-label">Niveau Yang</div>

                    <div class="value-number yang-value" id="yangValue">50%</div>

                </div>

            </div>

        </div>

        <!-- Panneau des résultats -->

        <div class="results-panel">

            <div class="status-banner drainage-ok" id="statusBanner">

                <div class="status-title">✓ DRAINAGE POSSIBLE</div>

                <div class="status-subtitle">Équilibre Yin-Yang optimal</div>

            </div>

            <div class="warning-box" id="warningBox">

                <span class="warning-icon">⚠️</span>

                <strong>Attention :</strong> <span id="warningText"></span>

            </div>

            <div class="info-section">

                <div class="info-title">État du patient :</div>

                <div class="info-content">

                    <ul class="info-list" id="symptomsList">

                        <li>Énergie stable</li>

                        <li>Température corporelle normale</li>

                        <li>Digestion régulière</li>

                        <li>Sommeil réparateur</li>

                        <li>Émotions équilibrées</li>

                    </ul>

                </div>

            </div>

            <div class="strategy-section">

                <div class="info-title" style="color: white;">Stratégie thérapeutique :</div>

                <div class="info-content" style="color: white;" id="strategyContent">

                    Drainage classique selon Vannier<br>

                    Durée : 3-4 semaines<br>

                    Dilutions : 3-5 CH

                </div>

            </div>

            <div class="remedies-section">

                <div class="remedies-title">Remèdes indiqués :</div>

                <div class="remedies-content" id="remediesContent">

                    Taraxacum, Solidago, Carduus marianus, Berberis

                </div>

            </div>

        </div>

    </div>

</div>

<script>

    const separator = document.getElementById('separator');

    const yinYangBox = document.getElementById('yinYangBox');

    const yinSection = document.getElementById('yinSection');

    const yangSection = document.getElementById('yangSection');

    const yinValue = document.getElementById('yinValue');

    const yangValue = document.getElementById('yangValue');

    const statusBanner = document.getElementById('statusBanner');

    const warningBox = document.getElementById('warningBox');

    const warningText = document.getElementById('warningText');

    const symptomsList = document.getElementById('symptomsList');

    const strategyContent = document.getElementById('strategyContent');

    const remediesContent = document.getElementById('remediesContent');

    let isDragging = false;

    let currentPosition = 50; // Position initiale à 50%

    // Initialiser la position du séparateur

    separator.style.top = '50%';

    // Données pour chaque état

    const states = {

        'equilibre': {

            status: '✓ DRAINAGE POSSIBLE',

            subtitle: 'Équilibre Yin-Yang optimal',

            class: 'drainage-ok',

            warning: '',

            symptoms: [

                'Énergie stable',

                'Température corporelle normale',

                'Digestion régulière',

                'Sommeil réparateur',

                'Émotions équilibrées'

            ],

            strategy: `Drainage classique selon Vannier<br>

                      Durée : 3-4 semaines<br>

                      Dilutions : 3-5 CH`,

            remedies: 'Taraxacum, Solidago, Carduus marianus, Berberis'

        },

        'yin-exces_yang-normal': {

            status: '✗ NE PAS DRAINER',

            subtitle: 'Syndrome Froid - Yin en excès',

            class: 'drainage-danger',

            warning: 'Le drainage peut faire prendre 10 kg en quelques semaines !',

            symptoms: [

                'Obésité, surcharge pondérale',

                'Frilosité permanente',

                'Membres froids',

                'Œdèmes (chevilles, jambes)',

                'Fatigue matinale',

                'Digestion lente',

                'Langue pâle, enduit blanc'

            ],

            strategy: `1. Disperser le Yin en excès<br>

                      2. Régime hypocalorique<br>

                      3. Réchauffer le terrain<br>

                      4. Attendre 4-6 semaines avant drainage`,

            remedies: 'Calcarea carbonica, Graphites, Antimonium crudum'

        },

        'yin-normal_yang-exces': {

            status: '✗ NE PAS DRAINER',

            subtitle: 'Syndrome Chaleur - Yang en excès',

            class: 'drainage-danger',

            warning: 'Risque d\'aggravation inflammatoire !',

            symptoms: [

                'Allergies actives',

                'Inflammations chroniques',

                'Sensation de chaleur',

                'Soif intense',

                'Agitation, irritabilité',

                'Insomnie d\'endormissement',

                'Langue rouge, enduit jaune'

            ],

            strategy: `1. Disperser le Yang en excès<br>

                      2. Rafraîchir le terrain<br>

                      3. Anti-inflammatoires naturels<br>

                      4. Attendre 3-4 semaines`,

            remedies: 'Arsenicum album, Sulfur iodatum, Apis mellifica'

        },

        'yin-exces_yang-exces': {

            status: '⚡ TRÈS COMPLEXE',

            subtitle: 'Syndrome Mixte',

            class: 'drainage-attention',

            warning: 'Situation paradoxale nécessitant une expertise approfondie',

            symptoms: [

                'Obésité + inflammations',

                'Œdèmes + chaleur locale',

                'Fatigue + agitation',

                'Froid aux extrémités + bouffées de chaleur',

                'Alternance constipation/diarrhée'

            ],

            strategy: `1. Traiter par alternance<br>

                      2. Harmoniser Yin et Yang<br>

                      3. Drainage très progressif<br>

                      4. Surveillance étroite`,

            remedies: 'Lachesis, Sepia (en alternance)'

        },

        'yin-insuffisant_yang-normal': {

            status: '⚡ AVEC PRÉCAUTION',

            subtitle: 'Vide de Yin',

            class: 'drainage-attention',

            warning: 'Risque d\'assèchement supplémentaire',

            symptoms: [

                'Sécheresse peau/muqueuses',

                'Soif nocturne',

                'Chaleur des 5 cœurs',

                'Transpirations nocturnes',

                'Constipation sèche',

                'Langue rouge sans enduit'

            ],

            strategy: `1. Nourrir le Yin d'abord<br>

                      2. Hydrater l'organisme<br>

                      3. Drainage doux si nécessaire<br>

                      4. Éviter les diurétiques forts`,

            remedies: 'Bryonia, Alumina, Natrum muriaticum'

        },

        'yin-normal_yang-insuffisant': {

            status: '⚡ AVEC PRÉCAUTION',

            subtitle: 'Vide de Yang',

            class: 'drainage-attention',

            warning: 'Risque d\'épuisement énergétique',

            symptoms: [

                'Épuisement profond',

                'Frilosité modérée',

                'Digestion faible',

                'Libido diminuée',

                'Dépression, apathie',

                'Pouls faible et lent'

            ],

            strategy: `1. Tonifier le Yang<br>

                      2. Soutenir l'énergie vitale<br>

                      3. Drainage très léger<br>

                      4. Privilégier la stimulation`,

            remedies: 'Silicea, Phosphoricum acidum, Causticum'

        },

        'yin-insuffisant_yang-insuffisant': {

            status: '✗ CONTRE-INDIQUÉ',

            subtitle: 'Double Vide - État critique',

            class: 'drainage-danger',

            warning: 'État d\'épuisement total ! Interdiction formelle de drainer',

            symptoms: [

                'Épuisement complet',

                'Amaigrissement',

                'Déshydratation',

                'Hypothermie',

                'Confusion mentale',

                'Pouls filant'

            ],

            strategy: `1. Reconstitution urgente<br>

                      2. Repos absolu<br>

                      3. Nutrition adaptée<br>

                      4. PAS de drainage !`,

            remedies: 'Carbo vegetabilis, China, Arsenicum album'

        },

        'yin-exces_yang-insuffisant': {

            status: '✗ TRÈS DANGEREUX',

            subtitle: 'Froid Extrême',

            class: 'drainage-danger',

            warning: 'DANGER MAXIMAL : Aggravation garantie si drainage !',

            symptoms: [

                'Obésité morbide',

                'Œdèmes généralisés',

                'Hypothyroïdie',

                'Dépression sévère',

                'Frilosité extrême',

                'Stase complète'

            ],

            strategy: `1. Réchauffer fortement<br>

                      2. Mobiliser le Yang<br>

                      3. Disperser le Yin<br>

                      4. Durée : 3-6 mois minimum`,

            remedies: 'Baryta carbonica, Calcarea carbonica, Graphites'

        },

        'yin-insuffisant_yang-exces': {

            status: '✗ TRÈS RISQUÉ',

            subtitle: 'Feu Non Contrôlé',

            class: 'drainage-danger',

            warning: 'Syndrome inflammatoire aigu ! Risque vital',

            symptoms: [

                'Hyperthyroïdie',

                'Agitation extrême',

                'Insomnie totale',

                'Amaigrissement rapide',

                'Fièvres récurrentes',

                'Crises inflammatoires'

            ],

            strategy: `1. Nourrir le Yin urgent<br>

                      2. Calmer le Yang<br>

                      3. Rafraîchir fortement<br>

                      4. Surveillance médicale`,

            remedies: 'Iodum, Phosphorus, Belladonna'

        }

    };

    function getState(yinPercent, yangPercent) {

        let yinState = yinPercent > 66 ? 'exces' : yinPercent > 33 ? 'normal' : 'insuffisant';

        let yangState = yangPercent > 66 ? 'exces' : yangPercent > 33 ? 'normal' : 'insuffisant';

        // Cas d'équilibre parfait

        if (yinState === 'normal' && yangState === 'normal' && 

            Math.abs(yinPercent - 50) < 10 && Math.abs(yangPercent - 50) < 10) {

            return 'equilibre';

        }

        return `yin-${yinState}_yang-${yangState}`;

    }

    function updateDisplay(position) {

        // Calculer les pourcentages

        const yinPercent = position;

        const yangPercent = 100 - position;

        // Mettre à jour les hauteurs visuelles

        yinSection.style.height = yinPercent + '%';

        yangSection.style.height = yangPercent + '%';

        // Mettre à jour les valeurs affichées

        yinValue.textContent = Math.round(yinPercent) + '%';

        yangValue.textContent = Math.round(yangPercent) + '%';

        // Ajuster les couleurs selon l'intensité

        if (yinPercent > 66) {

            yinSection.style.background = '#1a252f'; // Très foncé pour excès

        } else if (yinPercent < 34) {

            yinSection.style.background = '#7f8c8d'; // Gris pour insuffisant

        } else {

            yinSection.style.background = '#2c3e50'; // Normal

        }

        if (yangPercent > 66) {

            yangSection.style.background = '#fff3cd'; // Jaune chaud pour excès

        } else if (yangPercent < 34) {

            yangSection.style.background = '#bdc3c7'; // Gris clair pour insuffisant

        } else {

            yangSection.style.background = '#ecf0f1'; // Normal

        }

        // Obtenir l'état actuel

        const currentState = getState(yinPercent, yangPercent);

        const stateData = states[currentState] || states['equilibre'];

        // Mettre à jour le statut

        statusBanner.className = 'status-banner ' + stateData.class;

        statusBanner.innerHTML = `

            <div class="status-title">${stateData.status}</div>

            <div class="status-subtitle">${stateData.subtitle}</div>

        `;

        // Mettre à jour l'avertissement

        if (stateData.warning) {

            warningBox.classList.add('show');

            warningText.textContent = stateData.warning;

        } else {

            warningBox.classList.remove('show');

        }

        // Mettre à jour les symptômes

        symptomsList.innerHTML = stateData.symptoms.map(s => `<li>${s}</li>`).join('');

        // Mettre à jour la stratégie

        strategyContent.innerHTML = stateData.strategy;

        // Mettre à jour les remèdes

        remediesContent.textContent = stateData.remedies;

    }

    // Gestion du drag

    separator.addEventListener('mousedown', (e) => {

        isDragging = true;

        e.preventDefault();

    });

    document.addEventListener('mousemove', (e) => {

        if (!isDragging) return;

        const rect = yinYangBox.getBoundingClientRect();

        const y = e.clientY - rect.top;

        const percentage = (y / rect.height) * 100;

        // Limiter entre 5% et 95%

        currentPosition = Math.max(5, Math.min(95, percentage));

        separator.style.top = currentPosition + '%';

        updateDisplay(currentPosition);

    });

    document.addEventListener('mouseup', () => {

        isDragging = false;

    });

    // Support tactile

    separator.addEventListener('touchstart', (e) => {

        isDragging = true;

        e.preventDefault();

    });

    document.addEventListener('touchmove', (e) => {

        if (!isDragging) return;

        const rect = yinYangBox.getBoundingClientRect();

        const y = e.touches[0].clientY - rect.top;

        const percentage = (y / rect.height) * 100;

        currentPosition = Math.max(5, Math.min(95, percentage));

        separator.style.top = currentPosition + '%';

        updateDisplay(currentPosition);

    });

    document.addEventListener('touchend', () => {

        isDragging = false;

    });

    // Initialisation

    updateDisplay(50);

</script>