<div class="controls">
<div class="control-group">
<label for="atomicZ">Z (عدد اتمی): <span id="atomicZValue">8</span></label>
<input type="range" id="atomicZ" min="1" max="150" value="8" step="1">
<span id="elementName">اکسیژن (O)</span>
</div>
<div class="control-group">
<label for="n">N (اصلی): <span id="nValue">2</span></label>
<input type="range" id="n" min="1" max="8" value="2" step="1">
</div>
<div class="control-group">
<label for="l">L (آزیموتال): <span id="lValue">1</span></label>
<input type="range" id="l" min="0" max="7" value="1" step="1">
</div>
<div class="control-group">
<label for="ml">ML (مغناطیسی): <span id="mlValue">0</span></label>
<input type="range" id="ml" min="-7" max="7" value="0" step="1">
</div>
<div class="control-group">
<label for="zoomRange">🔍 زوم (دوربین Z): <span id="zoomValue">3.0</span></label>
<input type="range" id="zoomRange" min="1.0" max="100.0" value="3.0" step="0.1">
</div>
<div class="control-group">
<label for="density">چگالی (نمایش): <span id="densityValue">10</span></label>
<input type="range" id="density" min="1" max="100" value="10" step="1">
</div>
<div class="control-group">
<label for="colorPickerPositive">🎨 فاز مثبت ($\Psi > 0$):</label>
<input type="color" id="colorPickerPositive" value="#FF0000">
</div>
<div class="control-group">
<label for="colorPickerNegative">🎨 فاز منفی ($\Psi < 0$):</label>
<input type="color" id="colorPickerNegative" value="#0000FF">
</div>
</div>
<div id="ZeffDisplay">Zeff (بار مؤثر هسته): 4.55</div>
<div id="log"></div>
<script>
// ------------------------------------------------------------------
// 1. JAVASCRIPT LOGIC (WebGl Setup, Controls, Zeff Calculation)
// ------------------------------------------------------------------
const elementNames = {
// ... (دیکشنری کامل نام عناصر) ...
1: "هیدروژن (H)", 2: "هلیوم (He)", 3: "لیتیم (Li)", 4: "بریلیم (Be)", 5: "بور (B)",
6: "کربن (C)", 7: "نیتروژن (N)", 8: "اکسیژن (O)", 9: "فلوئور (F)", 10: "نئون (Ne)",
11: "سدیم (Na)", 12: "منیزیم (Mg)", 13: "آلومینیوم (Al)", 14: "سیلیسیم (Si)", 15: "فسفر (P)",
16: "گوگرد (S)", 17: "کلر (Cl)", 18: "آرگون (Ar)", 19: "پتاسیم (K)", 20: "کلسیم (Ca)",
21: "اسکاندیم (Sc)", 22: "تیتانیوم (Ti)", 23: "وانادیم (V)", 24: "کروم (Cr)", 25: "منگنز (Mn)",
26: "آهن (Fe)", 27: "کبالت (Co)", 28: "نیکل (Ni)", 29: "مس (Cu)", 30: "روی (Zn)",
31: "گالیم (Ga)", 32: "ژرمانیم (Ge)", 33: "آرسنیک (As)", 34: "سلنیم (Se)", 35: "برم (Br)", 36: "کریپتون (Kr)",
37: "روبیدیم (Rb)", 38: "استرانسیم (Sr)", 39: "ایتریم (Y)", 40: "زیرکونیم (Zr)", 41: "نیوبیم (Nb)", 42: "مولیبدن (Mo)",
43: "تکنسیوم (Tc)", 44: "روتنیم (Ru)", 45: "رودیم (Rh)", 46: "پالادیم (Pd)", 47: "نقره (Ag)", 48: "کادمیم (Cd)",
49: "ایندیوم (In)", 50: "قلع (Sn)", 51: "آنتیموان (Sb)", 52: "تلوریم (Te)", 53: "ید (I)", 54: "زنون (Xe)",
55: "سزیم (Cs)", 56: "باریم (Ba)", 57: "لانتان (La)",
58: "سریم (Ce)", 59: "پرازئودیمیم (Pr)", 60: "نئودیمیم (Nd)", 61: "پرومتیم (Pm)", 62: "ساماریم (Sm)",
63: "یوروپیم (Eu)", 64: "گادولینیم (Gd)", 65: "تربیم (Tb)", 66: "دیسپروزیم (Dy)", 67: "هولمیم (Ho)",
68: "اربیوم (Er)", 69: "تولیم (Tm)", 70: "ایتربیم (Yb)", 71: "لوتتیم (Lu)",
72: "هافنیم (Hf)", 73: "تانتال (Ta)", 74: "تنگستن (W)", 75: "رنیوم (Re)", 76: "اسمیم (Os)",
77: "ایریدیم (Ir)", 78: "پلاتین (Pt)", 79: "طلا (Au)", 80: "جیوه (Hg)", 81: "تالیم (Tl)",
82: "سرب (Pb)", 83: "بیسموت (Bi)", 84: "پولونیم (Po)", 85: "استاتین (At)", 86: "رادون (Rn)",
87: "فرانسیم (Fr)", 88: "رادیم (Ra)", 89: "اکتینیم (Ac)",
90: "توریم (Th)", 91: "پروتاکتینیم (Pa)", 92: "اورانیوم (U)", 93: "نپتونیوم (Np)", 94: "پلوتونیوم (Pu)",
95: "آمریکیوم (Am)", 96: "کوریم (Cm)", 97: "برکلیوم (Bk)", 98: "کالیفرنیوم (Cf)", 99: "اینشتینیوم (Es)",
100: "فرمیوم (Fm)", 101: "مندلیوم (Md)", 102: "نوبلیوم (No)", 103: "لورنسیم (Lr)",
104: "رادرفوردیم (Rf)", 105: "دوبنیم (Db)", 106: "سیبورگیم (Sg)", 107: "بوریم (Bh)", 108: "هاسیم (Hs)",
109: "مایتنریم (Mt)", 110: "دارمشتادیم (Ds)", 111: "روئنتگنیوم (Rg)", 112: "کوپرنیسیم (Cn)",
113: "نیهونیوم (Nh)", 114: "فلروویوم (Fl)", 115: "مسکوویم (Mc)", 116: "لیورموریوم (Lv)", 117: "تنسین (Ts)",
118: "اوگانسون (Og)"
};
function hexToRgb(hex) {
const bigint = parseInt(hex.slice(1), 16);
const r = (bigint >> 16) & 255;
const g = (bigint >> 8) & 255;
const b = bigint & 255;
return [r / 255.0, g / 255.0, b / 255.0];
}
function calculateSlaterZeff(Z, n, l) {
if (Z === 1) return 1.0;
if (Z > 120) {
document.getElementById('log').innerText = `