<!DOCTYPE html>
<html lang= »fr »>
<head>
<meta charset= »UTF-8″>
<meta name= »viewport » content= »width=device-width, initial-scale=1.0″>
<title>Pentagramme MTC – Médecine Traditionnelle Chinoise</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, ‘Segoe UI’, Roboto, sans-serif;
background: linear-gradient(135deg, #3b82f6, #1e40af, #1e3a8a);
min-height: 100vh;
position: relative;
overflow-x: auto;
}
.container {
position: relative;
width: 100%;
min-height: 1200px;
overflow: hidden;
}
.header {
position: absolute;
top: 16px;
left: 16px;
z-index: 10;
max-width: 1000px;
}
.title {
color: white;
font-size: 2.5rem;
font-weight: bold;
margin-bottom: 8px;
}
.subtitle {
color: white;
font-size: 1.125rem;
font-weight: 500;
margin-bottom: 16px;
opacity: 0.9;
}
.legend {
position: absolute;
left: 50%;
transform: translateX(-50%);
top: 880px;
}
.svg-container {
position: absolute;
inset: 0;
}
.info-box {
position: absolute;
top: 16px;
right: 16px;
background: rgba(255, 255, 255, 0.9);
padding: 12px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
max-width: 320px;
transition: all 0.3s;
}
.info-box h3 {
font-weight: bold;
font-size: 0.875rem;
margin-bottom: 8px;
}
.info-box .element-item {
display: flex;
align-items: center;
margin-bottom: 4px;
font-size: 0.8rem;
}
.color-indicator {
width: 16px;
height: 16px;
border-radius: 4px;
margin-right: 8px;
}
.info-note {
margin-top: 8px;
padding: 8px;
border-radius: 4px;
font-size: 0.75rem;
background: rgba(59, 130, 246, 0.1);
}
.cycles-container {
position: absolute;
left: 50%;
transform: translateX(-50%);
top: 980px;
display: flex;
gap: 80px;
padding-bottom: 32px;
}
.cycle-item {
text-align: center;
cursor: pointer;
}
.cycle-svg {
width: 100px;
height: 100px;
margin-bottom: 4px;
}
.cycle-name {
color: white;
font-weight: bold;
font-size: 0.875rem;
}
.cycle-subtitle {
color: white;
font-size: 0.75rem;
}
.signature {
position: absolute;
right: 16px;
top: 1120px;
color: white;
font-size: 0.875rem;
}
/* Styles pour la fenêtre modale */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
display: none;
z-index: 100;
backdrop-filter: blur(2px);
}
.modal-window {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: white;
border-radius: 16px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
max-width: 800px;
width: 90%;
max-height: 90vh;
display: none;
z-index: 101;
overflow: hidden;
}
.modal-header {
padding: 20px;
background: linear-gradient(135deg, #3b82f6, #1e40af);
color: white;
position: relative;
}
.modal-title {
font-size: 1.5rem;
font-weight: bold;
margin: 0;
}
.modal-subtitle {
font-size: 0.875rem;
margin-top: 4px;
opacity: 0.9;
}
.modal-close {
position: absolute;
top: 20px;
right: 20px;
background: rgba(255, 255, 255, 0.2);
border: none;
border-radius: 50%;
width: 32px;
height: 32px;
cursor: pointer;
color: white;
font-size: 20px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
}
.modal-close:hover {
background: rgba(255, 255, 255, 0.3);
transform: rotate(90deg);
}
.modal-body {
padding: 20px;
overflow-y: auto;
max-height: calc(90vh – 100px);
}
.info-section {
margin-bottom: 20px;
padding: 16px;
background: #f9fafb;
border-radius: 8px;
border-left: 4px solid;
}
.info-section h3 {
font-size: 1.125rem;
font-weight: 600;
margin-bottom: 12px;
color: #374151;
}
.info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 12px;
}
.info-item {
padding: 8px;
background: white;
border-radius: 4px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.info-label {
font-weight: 600;
color: #4b5563;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.info-value {
color: #1f2937;
margin-top: 4px;
}
@media (max-width: 768px) {
.title {
font-size: 2rem;
}
.info-box {
max-width: 280px;
}
.cycles-container {
gap: 40px;
flex-wrap: wrap;
}
.info-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class= »container »>
<!– En-tête –>
<div class= »header »>
<h1 class= »title »>Le Pentagramme MTC</h1>
<h2 class= »subtitle »>Les 5 éléments de la Médecine Traditionnelle Chinoise</h2>
</div>
<!– Légende –>
<div class= »legend »>
<svg width= »300″ height= »60″>
<defs>
<marker id= »arrowLeft » markerWidth= »10″ markerHeight= »10″ refX= »0″ refY= »3″ orient= »auto »>
<polygon points= »10 0, 10 6, 0 3″ fill= »#ff8a8a »/>
</marker>
<marker id= »arrowRight » markerWidth= »10″ markerHeight= »10″ refX= »10″ refY= »3″ orient= »auto »>
<polygon points= »0 0, 10 3, 0 6″ fill= »#ff8a8a »/>
</marker>
</defs>
<line x1= »30″ y1= »15″ x2= »110″ y2= »15″ stroke= »#ff8a8a » stroke-width= »2″ marker-start= »url(#arrowLeft) »/>
<text x= »150″ y= »20″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>physiologie</text>
<line x1= »190″ y1= »15″ x2= »270″ y2= »15″ stroke= »#ff8a8a » stroke-width= »2″/>
<line x1= »30″ y1= »45″ x2= »110″ y2= »45″ stroke= »#ff8a8a » stroke-width= »2″/>
<text x= »150″ y= »50″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>pathologie</text>
<line x1= »190″ y1= »45″ x2= »270″ y2= »45″ stroke= »#ff8a8a » stroke-width= »2″ marker-end= »url(#arrowRight) »/>
</svg>
</div>
<!– SVG principal –>
<div class= »svg-container »>
<svg width= »100% » height= »1200″ viewBox= »0 0 1024 1200″ id= »main-svg »>
<defs>
<radialGradient id= »centralGradient » cx= »50% » cy= »50% » r= »50% »>
<stop offset= »0% » stop-color= »#ffd700″ stop-opacity= »0.8″/>
<stop offset= »50% » stop-color= »#ffa500″ stop-opacity= »0.6″/>
<stop offset= »100% » stop-color= »#ff6347″ stop-opacity= »0.4″/>
</radialGradient>
<marker id= »arrowhead-pentagram » markerWidth= »10″ markerHeight= »10″ refX= »5″ refY= »3″ orient= »auto »>
<polygon points= »0 0, 10 3, 0 6″ fill= »#8b0000″/>
</marker>
</defs>
<!– Grand cercle central –>
<circle cx= »512″ cy= »530″ r= »300″ fill= »url(#centralGradient) » stroke= »#8b0000″ stroke-width= »5″ opacity= »0.9″/>
<!– Lignes du pentagramme –>
<g id= »pentagram-lines »></g>
<!– Zones des 5 pôles –>
<g id= »poles-container »></g>
<!– Textes MTC –>
<g id= »mtc-texts »>
<text x= »274″ y= »260″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>Shao Yang (feu)</text>
<text x= »274″ y= »280″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>Jue Yin (vent)</text>
<text x= »887″ y= »610″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>Tae Yin (humidité)</text>
<text x= »887″ y= »630″ text-anchor= »middle » fill= »white » font-size= »14″ font-weight= »600″>Yang Ming (sécheresse)</text>
<text x= »512″ y= »500″ text-anchor= »middle » fill= »black » font-size= »14″ font-weight= »600″>Tae Yang (froid)</text>
<text x= »512″ y= »550″ text-anchor= »middle » fill= »black » font-size= »14″ font-weight= »600″>Shao Yin (chaleur)</text>
<text x= »512″ y= »450″ text-anchor= »middle » fill= »black » font-size= »12″>Foyer supérieur</text>
<text x= »512″ y= »610″ text-anchor= »middle » fill= »black » font-size= »12″>Foyer inférieur</text>
<text x= »512″ y= »530″ text-anchor= »middle » fill= »black » font-size= »12″>Foyer moyen</text>
</g>
</svg>
</div>
<!– Boîte d’informations –>
<div class= »info-box »>
<h3>Les 5 Éléments MTC</h3>
<p style= »margin-bottom: 8px; font-size: 0.8rem; »>Les 5 éléments avec leurs organes associés.</p>
<div id= »elements-list »></div>
<div class= »info-note »>
<div style= »font-weight: 600; color: #1e40af; margin-bottom: 4px; »>Cliquez sur les cercles pour voir :</div>
<div style= »color: #1d4ed8; font-size: 0.7rem; »>• Pathologies Yin/Yang détaillées</div>
<div style= »color: #1d4ed8; font-size: 0.7rem; »>• Vide de Sang (5 symptômes)</div>
<div style= »color: #1d4ed8; font-size: 0.7rem; »>• Points d’acupuncture majeurs</div>
</div>
</div>
<!– Cycles MTC –>
<div class= »cycles-container »>
<div class= »cycle-item » data-cycle= »SHENG »>
<svg class= »cycle-svg » viewBox= »0 0 100 100″>
<g transform= »translate(50, 50) »>
<circle cx= »0″ cy= »0″ r= »30″ fill= »none » stroke= »#8b0000″ stroke-width= »3″ opacity= »0.8″/>
<path d= »M 21,-21 A 30,30 0 0,1 30,0″ stroke= »#8b0000″ stroke-width= »2″ fill= »none » opacity= »0.9″/>
</g>
</svg>
<div class= »cycle-name »>SHENG</div>
<div class= »cycle-subtitle »>engendrement structures</div>
</div>
<div class= »cycle-item » data-cycle= »KO »>
<svg class= »cycle-svg » viewBox= »0 0 100 100″>
<g transform= »translate(50, 50) »>
<line x1= »0″ y1= »-30″ x2= »28.5″ y2= »17.5″ stroke= »#ff0000″ stroke-width= »3″ opacity= »0.9″/>
<line x1= »28.5″ y1= »-11.5″ x2= »-28.5″ y2= »17.5″ stroke= »white » stroke-width= »3″ opacity= »0.9″/>
<line x1= »-28.5″ y1= »17.5″ x2= »0″ y2= »-30″ stroke= »white » stroke-width= »3″ opacity= »0.9″/>
<circle cx= »0″ cy= »-30″ r= »4″ fill= »white »/>
<circle cx= »28.5″ cy= »-11.5″ r= »4″ fill= »white »/>
<circle cx= »28.5″ cy= »17.5″ r= »4″ fill= »white »/>
<circle cx= »-28.5″ cy= »17.5″ r= »4″ fill= »white »/>
</g>
</svg>
<div class= »cycle-name »>KO</div>
<div class= »cycle-subtitle »>contrôle fonction</div>
</div>
<div class= »cycle-item » data-cycle= »CHENG »>
<svg class= »cycle-svg » viewBox= »0 0 100 100″>
<g transform= »translate(50, 50) »>
<circle cx= »0″ cy= »0″ r= »25″ fill= »none » stroke= »#ef4444″ stroke-width= »2″ opacity= »0.5″/>
<circle cx= »0″ cy= »-30″ r= »4″ fill= »#ef4444″/>
<circle cx= »28.5″ cy= »-11.5″ r= »4″ fill= »#ef4444″/>
<circle cx= »28.5″ cy= »17.5″ r= »4″ fill= »#ef4444″/>
<circle cx= »-28.5″ cy= »17.5″ r= »4″ fill= »#ef4444″/>
<circle cx= »-17.6″ cy= »-24.3″ r= »4″ fill= »#ef4444″/>
</g>
</svg>
<div class= »cycle-name »>CHENG</div>
<div class= »cycle-subtitle »>domination perverse</div>
</div>
<div class= »cycle-item » data-cycle= »WU »>
<svg class= »cycle-svg » viewBox= »0 0 100 100″>
<g transform= »translate(50, 50) »>
<circle cx= »0″ cy= »0″ r= »25″ fill= »none » stroke= »#8b5cf6″ stroke-width= »2″ stroke-dasharray= »5,5″ opacity= »0.5″/>
<circle cx= »0″ cy= »-30″ r= »4″ fill= »#8b5cf6″/>
<circle cx= »28.5″ cy= »-11.5″ r= »4″ fill= »#8b5cf6″/>
<circle cx= »28.5″ cy= »17.5″ r= »4″ fill= »#8b5cf6″/>
<circle cx= »-28.5″ cy= »17.5″ r= »4″ fill= »#8b5cf6″/>
</g>
</svg>
<div class= »cycle-name »>WU</div>
<div class= »cycle-subtitle »>mépris grave</div>
</div>
</div>
<!– Signature –>
<div class= »signature »>Docteur Jean-Yves HENRY</div>
<!– Fenêtre modale –>
<div class= »modal-overlay » id= »modalOverlay »></div>
<div class= »modal-window » id= »modalWindow »>
<div class= »modal-header »>
<h2 class= »modal-title » id= »modalTitle »>Titre</h2>
<p class= »modal-subtitle » id= »modalSubtitle »>Sous-titre</p>
<button class= »modal-close » id= »modalCloseBtn »>✕</button>
</div>
<div class= »modal-body » id= »modalBody »>
<!– Le contenu sera injecté ici –>
</div>
</div>
</div>
<script>
// Configuration complète des éléments MTC
const elementsMTC = {
BOIS: {
element: ‘BOIS’,
organe: ‘Foie’,
viscere: ‘Vésicule Biliaire’,
color: ‘#228b22’,
details: [‘Androgènes • Tendons’, ‘Muscles’],
saison: ‘Printemps’,
direction: ‘Est’,
saveur: ‘Acide’,
emotion: ‘Colère’,
tissu: ‘Tendons’,
sens: ‘Yeux’,
climat: ‘Vent’,
horaire: ‘1h-3h / 23h-1h’,
pathologiesYin: [
‘Vide de Sang du Foie : vision floue, vertiges, règles peu abondantes’,
‘Vide de Yin du Foie : sécheresse oculaire, irritabilité nocturne’,
‘Stagnation du Qi du Foie : distension hypochondriaque, soupirs’,
‘Froid dans le méridien du Foie : douleurs génitales, hernie’,
‘Vent interne par vide de Sang : tremblements, spasmes’
],
pathologiesYang: [
‘Montée du Yang du Foie : céphalées temporales, hypertension’,
‘Feu du Foie : yeux rouges, colère explosive, acouphènes’,
‘Vent du Foie : vertiges soudains, AVC, convulsions’,
‘Chaleur-Humidité Foie-VB : jaunisse, goût amer, leucorrhées’,
‘Stase de Sang du Foie : masses abdominales, règles douloureuses’
],
videSang: [
‘Insomnie avec difficultés d\’endormissement’,
‘Ongles pâles et cassants’,
‘Vision trouble et mouches volantes’,
‘Crampes musculaires nocturnes’,
‘Règles peu abondantes ou aménorrhée’
],
points: [
‘F3 (Taichong) : point source, calme le Yang’,
‘F8 (Ququan) : tonifie le Sang du Foie’,
‘F14 (Qimen) : point Mu, harmonise Foie-Estomac’,
‘VB34 (Yanglingquan) : détend les tendons’,
‘VB20 (Fengchi) : disperse le Vent’
]
},
FEU: {
element: ‘FEU’,
organe: ‘Cœur’,
viscere: ‘Intestin Grêle’,
color: ‘#ff4500’,
details: [‘Int. grêle • Thyroïde’, ‘Vaisseaux’],
saison: ‘Été’,
direction: ‘Sud’,
saveur: ‘Amère’,
emotion: ‘Joie’,
tissu: ‘Vaisseaux’,
sens: ‘Langue’,
climat: ‘Chaleur’,
horaire: ’11h-13h / 13h-15h’,
pathologiesYin: [
‘Vide de Qi du Cœur : palpitations d\’effort, fatigue’,
‘Vide de Yang du Cœur : frilosité, membres froids’,
‘Vide de Sang du Cœur : insomnie, mémoire faible’,
‘Vide de Yin du Cœur : sueurs nocturnes, bouche sèche’,
‘Effondrement du Yang : sueurs froides, pouls imperceptible’
],
pathologiesYang: [
‘Feu du Cœur : agitation mentale, aphtes buccaux’,
‘Glaires-Feu troublant le Cœur : confusion, comportement maniaque’,
‘Chaleur dans le Sang : éruptions cutanées, saignements’,
‘Stase de Sang du Cœur : douleur thoracique fixe, cyanose’,
‘Feu troublant le Shen : insomnie sévère, délire’
],
videSang: [
‘Palpitations au repos’,
‘Teint pâle et terne’,
‘Anxiété et inquiétude constante’,
‘Difficultés de concentration’,
‘Rêves perturbants’
],
points: [
‘C7 (Shenmen) : calme le Shen, point source’,
‘C5 (Tongli) : régule le rythme cardiaque’,
‘PC6 (Neiguan) : ouvre la poitrine’,
‘Ren17 (Danzhong) : point Mu du MC’,
‘DM11 (Shendao) : calme l\’esprit’
]
},
TERRE: {
element: ‘TERRE’,
organe: ‘Rate’,
viscere: ‘Estomac’,
color: ‘#ffd700’,
details: [‘Hypophyse • Cortex’, ‘Sein’],
saison: ‘Fin d\’été’,
direction: ‘Centre’,
saveur: ‘Douce’,
emotion: ‘Soucis’,
tissu: ‘Chair’,
sens: ‘Bouche’,
climat: ‘Humidité’,
horaire: ‘9h-11h / 7h-9h’,
pathologiesYin: [
‘Vide de Qi de la Rate : fatigue digestive, selles molles’,
‘Vide de Yang de Rate : diarrhée matinale, œdèmes’,
‘Effondrement du Qi : ptoses organiques, hémorroïdes’,
‘Rate ne contrôle pas le Sang : hémorragies, ecchymoses’,
‘Froid-Humidité envahit Rate : ballonnements, absence d\’appétit’
],
pathologiesYang: [
‘Chaleur de l\’Estomac : faim constante, gingivite’,
‘Feu de l\’Estomac : soif intense, constipation’,
‘Rébellion du Qi de l\’Estomac : nausées, vomissements’,
‘Stagnation alimentaire : distension, éructations’,
‘Glaires-Humidité : lourdeur, mucosités abondantes’
],
videSang: [
‘Fatigue après les repas’,
‘Membres lourds et faibles’,
‘Pensées obsessionnelles’,
‘Lèvres pâles et sèches’,
‘Muscles flasques’
],
points: [
‘RP6 (Sanyinjiao) : tonifie Rate et Sang’,
‘E36 (Zusanli) : tonifie Qi et Sang’,
‘RP3 (Taibai) : point source Rate’,
‘E40 (Fenglong) : transforme les Glaires’,
‘Ren12 (Zhongwan) : harmonise l\’Estomac’
]
},
METAL: {
element: ‘MÉTAL’,
organe: ‘Poumon’,
viscere: ‘Gros Intestin’,
color: ‘#c0c0c0’,
details: [‘Œstrogènes • Sous-Cortex’, ‘Thymus • Peau’],
saison: ‘Automne’,
direction: ‘Ouest’,
saveur: ‘Piquante’,
emotion: ‘Tristesse’,
tissu: ‘Peau’,
sens: ‘Nez’,
climat: ‘Sécheresse’,
horaire: ‘3h-5h / 5h-7h’,
pathologiesYin: [
‘Vide de Qi du Poumon : voix faible, essoufflement’,
‘Vide de Yin du Poumon : toux sèche, gorge sèche’,
‘Sécheresse du Poumon : peau sèche, constipation’,
‘Poumon ne diffuse pas : œdème facial, absence de transpiration’,
‘Poumon ne descend pas : toux, asthme’
],
pathologiesYang: [
‘Vent-Froid attaque Poumon : frissons, nez bouché’,
‘Vent-Chaleur attaque Poumon : fièvre, gorge douloureuse’,
‘Glaires-Chaleur dans Poumon : crachats jaunes épais’,
‘Chaleur dans le Gros Intestin : constipation, soif’,
‘Feu toxique du Poumon : abcès pulmonaire’
],
videSang: [
‘Teint pâle et terne’,
‘Peau sèche et rugueuse’,
‘Cheveux secs et cassants’,
‘Tristesse et mélancolie’,
‘Vulnérabilité aux infections’
],
points: [
‘P7 (Lieque) : ouvre les méridiens’,
‘P9 (Taiyuan) : point source, tonifie le Qi’,
‘GI4 (Hegu) : libère l\’extérieur’,
‘GI11 (Quchi) : clarifie la Chaleur’,
‘V13 (Feishu) : point Shu du Poumon’
]
},
EAU: {
element: ‘EAU’,
organe: ‘Rein’,
viscere: ‘Vessie’,
color: ‘#4169e1’,
details: [‘Surrénales • Os et art.’, ‘Moelles’],
saison: ‘Hiver’,
direction: ‘Nord’,
saveur: ‘Salée’,
emotion: ‘Peur’,
tissu: ‘Os’,
sens: ‘Oreilles’,
climat: ‘Froid’,
horaire: ’17h-19h / 15h-17h’,
pathologiesYin: [
‘Vide de Yang des Reins : lombalgie froide, impuissance’,
‘Vide de Yin des Reins : acouphènes, sueurs nocturnes’,
‘Vide de Jing : infertilité, vieillissement précoce’,
‘Reins ne reçoivent pas le Qi : asthme chronique’,
‘Eau déborde : œdèmes généralisés’
],
pathologiesYang: [
‘Feu vide des Reins : bouffées de chaleur, insomnie’,
‘Chaleur-Humidité Vessie : cystite, urines troubles’,
‘Feu de Ming Men insuffisant : diarrhée du petit matin’,
‘Montée du Yang par vide de Yin : hypertension, céphalées’,
‘Calculs rénaux : douleurs lombaires aiguës’
],
videSang: [
‘Lombalgie chronique’,
‘Genoux faibles’,
‘Cheveux qui blanchissent prématurément’,
‘Dents qui se déchaussent’,
‘Peurs irrationnelles’
],
points: [
‘R3 (Taixi) : point source, tonifie Yin et Yang’,
‘R7 (Fuliu) : tonifie Yang des Reins’,
‘V23 (Shenshu) : point Shu des Reins’,
‘DM4 (Mingmen) : réchauffe le Yang’,
‘R6 (Zhaohai) : nourrit le Yin’
]
}
};
// Positions des pôles
const centerX = 512, centerY = 530, radius = 240;
const polePositions = {
BOIS: { x: centerX – radius * Math.cos(18 * Math.PI / 180), y: centerY – radius * Math.sin(18 * Math.PI / 180) },
FEU: { x: centerX, y: centerY – radius },
TERRE: { x: centerX + radius * Math.cos(18 * Math.PI / 180), y: centerY – radius * Math.sin(18 * Math.PI / 180) },
METAL: { x: centerX + radius * Math.cos(-54 * Math.PI / 180), y: centerY – radius * Math.sin(-54 * Math.PI / 180) },
EAU: { x: centerX – radius * Math.cos(-54 * Math.PI / 180), y: centerY – radius * Math.sin(-54 * Math.PI / 180) }
};
// Initialisation
document.addEventListener(‘DOMContentLoaded’, function() {
initializePentagram();
updateInfoBox();
setupModalEvents();
});
function initializePentagram() {
createPentagramLines();
createPoles();
setupEventListeners();
}
function createPentagramLines() {
const svg = document.getElementById(‘pentagram-lines’);
const points = [];
for (let i = 0; i < 5; i++) {
const angle = (i * 72 – 90) * Math.PI / 180;
points.push([
centerX + radius * Math.cos(angle),
centerY + radius * Math.sin(angle)
]);
}
const connections = [
[points[0], points[2]],
[points[2], points[4]],
[points[4], points[1]],
[points[1], points[3]],
[points[3], points[0]]
];
connections.forEach(connection => {
const line = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘line’);
line.setAttribute(‘x1’, connection[0][0]);
line.setAttribute(‘y1’, connection[0][1]);
line.setAttribute(‘x2’, connection[1][0]);
line.setAttribute(‘y2’, connection[1][1]);
line.setAttribute(‘stroke’, ‘#8b0000’);
line.setAttribute(‘stroke-width’, ‘3’);
line.setAttribute(‘opacity’, ‘0.8’);
svg.appendChild(line);
});
}
function createPoles() {
const container = document.getElementById(‘poles-container’);
Object.entries(polePositions).forEach(([poleKey, position]) => {
const group = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘g’);
const data = elementsMTC[poleKey];
// Cercle principal
const circle = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘circle’);
circle.setAttribute(‘cx’, position.x);
circle.setAttribute(‘cy’, position.y);
circle.setAttribute(‘r’, ‘100’);
circle.setAttribute(‘fill’, data.color);
circle.setAttribute(‘opacity’, ‘0.8’);
circle.setAttribute(‘stroke’, ‘#fff’);
circle.setAttribute(‘stroke-width’, ‘3’);
circle.style.cursor = ‘pointer’;
circle.classList.add(‘pole-circle’);
circle.setAttribute(‘data-pole’, poleKey);
group.appendChild(circle);
// Titre
const title = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘text’);
title.setAttribute(‘x’, position.x);
title.setAttribute(‘y’, position.y – 25);
title.setAttribute(‘text-anchor’, ‘middle’);
title.setAttribute(‘fill’, ‘white’);
title.setAttribute(‘font-weight’, ‘bold’);
title.setAttribute(‘font-size’, ’16’);
title.textContent = data.element;
group.appendChild(title);
// Organes
const subtitle = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘text’);
subtitle.setAttribute(‘x’, position.x);
subtitle.setAttribute(‘y’, position.y – 5);
subtitle.setAttribute(‘text-anchor’, ‘middle’);
subtitle.setAttribute(‘fill’, ‘white’);
subtitle.setAttribute(‘font-size’, ’12’);
subtitle.textContent = `${data.organe}-${data.viscere}`;
group.appendChild(subtitle);
// Détails (hormones, tissus)
if (data.details) {
const detail1 = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘text’);
detail1.setAttribute(‘x’, position.x);
detail1.setAttribute(‘y’, position.y + 15);
detail1.setAttribute(‘text-anchor’, ‘middle’);
detail1.setAttribute(‘fill’, ‘white’);
detail1.setAttribute(‘font-size’, ’11’);
detail1.textContent = data.details[0];
group.appendChild(detail1);
const detail2 = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘text’);
detail2.setAttribute(‘x’, position.x);
detail2.setAttribute(‘y’, position.y + 30);
detail2.setAttribute(‘text-anchor’, ‘middle’);
detail2.setAttribute(‘fill’, ‘white’);
detail2.setAttribute(‘font-size’, ’11’);
detail2.textContent = data.details[1];
group.appendChild(detail2);
}
container.appendChild(group);
});
}
function updateInfoBox() {
const elementsList = document.getElementById(‘elements-list’);
elementsList.innerHTML = »;
Object.entries(elementsMTC).forEach(([poleKey, data]) => {
const item = document.createElement(‘div’);
item.className = ‘element-item’;
item.innerHTML = `
<div class= »color-indicator » style= »background-color: ${data.color}; »></div>
<span>${data.element} – ${data.organe}-${data.viscere}</span>
`;
elementsList.appendChild(item);
});
}
function setupEventListeners() {
document.querySelectorAll(‘.pole-circle’).forEach(circle => {
circle.addEventListener(‘click’, function() {
const poleKey = this.getAttribute(‘data-pole’);
showModal(poleKey);
});
circle.addEventListener(‘mouseenter’, function() {
this.setAttribute(‘opacity’, ‘0.95’);
this.setAttribute(‘stroke’, ‘#FFD700’);
this.setAttribute(‘stroke-width’, ‘4’);
});
circle.addEventListener(‘mouseleave’, function() {
this.setAttribute(‘opacity’, ‘0.8’);
this.setAttribute(‘stroke’, ‘#fff’);
this.setAttribute(‘stroke-width’, ‘3’);
});
});
}
function setupModalEvents() {
const overlay = document.getElementById(‘modalOverlay’);
const closeBtn = document.getElementById(‘modalCloseBtn’);
overlay.addEventListener(‘click’, closeModal);
closeBtn.addEventListener(‘click’, closeModal);
document.addEventListener(‘keydown’, function(e) {
if (e.key === ‘Escape’) {
closeModal();
}
});
}
function showModal(poleKey) {
const modal = document.getElementById(‘modalWindow’);
const overlay = document.getElementById(‘modalOverlay’);
const title = document.getElementById(‘modalTitle’);
const subtitle = document.getElementById(‘modalSubtitle’);
const body = document.getElementById(‘modalBody’);
const data = elementsMTC[poleKey];
title.textContent = `Élément ${data.element}`;
subtitle.textContent = `${data.organe} – ${data.viscere}`;
// Générer le contenu HTML
let html = `
<div class= »info-section » style= »border-left-color: ${data.color}; »>
<h3>Correspondances Fondamentales</h3>
<div class= »info-grid »>
<div class= »info-item »>
<div class= »info-label »>Saison</div>
<div class= »info-value »>${data.saison}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Direction</div>
<div class= »info-value »>${data.direction}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Saveur</div>
<div class= »info-value »>${data.saveur}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Émotion</div>
<div class= »info-value »>${data.emotion}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Tissu</div>
<div class= »info-value »>${data.tissu}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Organe des sens</div>
<div class= »info-value »>${data.sens}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Climat</div>
<div class= »info-value »>${data.climat}</div>
</div>
<div class= »info-item »>
<div class= »info-label »>Horaires</div>
<div class= »info-value »>${data.horaire}</div>
</div>
</div>
</div>
`;
// Pathologies YIN
html += `
<div class= »info-section » style= »border-left-color: #3b82f6; »>
<h3>Pathologies YIN (Vide/Froid)</h3>
<ul style= »list-style: none; padding: 0; »>
`;
data.pathologiesYin.forEach(p => {
html += `<li style= »padding: 8px; margin: 4px 0; background: white; border-radius: 4px; border-left: 3px solid #93c5fd; »>${p}</li>`;
});
html += ‘</ul></div>’;
// Pathologies YANG
html += `
<div class= »info-section » style= »border-left-color: #ef4444; »>
<h3>Pathologies YANG (Plénitude/Chaleur)</h3>
<ul style= »list-style: none; padding: 0; »>
`;
data.pathologiesYang.forEach(p => {
html += `<li style= »padding: 8px; margin: 4px 0; background: white; border-radius: 4px; border-left: 3px solid #fca5a5; »>${p}</li>`;
});
html += ‘</ul></div>’;
// Vide de Sang
html += `
<div class= »info-section » style= »border-left-color: #a855f7; »>
<h3>Vide de Sang – 5 Symptômes Majeurs</h3>
<ul style= »list-style: none; padding: 0; »>
`;
data.videSang.forEach((s, i) => {
html += `
<li style= »padding: 8px; margin: 4px 0; background: white; border-radius: 4px; display: flex; align-items: center; »>
<span style= »background: #a855f7; color: white; border-radius: 50%; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; margin-right: 12px; font-weight: bold; flex-shrink: 0; »>
${i + 1}
</span>
${s}
</li>
`;
});
html += ‘</ul></div>’;
// Points d’acupuncture
html += `
<div class= »info-section » style= »border-left-color: #10b981; »>
<h3>Points d’Acupuncture Principaux</h3>
<ul style= »list-style: none; padding: 0; »>
`;
data.points.forEach(p => {
const [nom, desc] = p.split(‘:’);
html += `
<li style= »padding: 10px; margin: 6px 0; background: white; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); »>
<strong style= »color: #059669; »>${nom}</strong>
<span style= »color: #4b5563; »>${desc || »}</span>
</li>
`;
});
html += ‘</ul></div>’;
body.innerHTML = html;
overlay.style.display = ‘block’;
modal.style.display = ‘block’;
}
function closeModal() {
document.getElementById(‘modalOverlay’).style.display = ‘none’;
document.getElementById(‘modalWindow’).style.display = ‘none’;
}
</script>
</body>
</html>
