:root{--bg:#06101d;--card:#0c1a2c;--gold:#e0bd5d;--muted:#aeb9c8;--line:#334257;--white:#f7edd8;--ok:#79c47b;--err:#df7777} *{box-sizing:border-box}body{margin:0;background:linear-gradient(145deg,#040b14,#0b1a2c);color:var(--white);font-family:system-ui,"Noto Sans Tamil",sans-serif} .wrap{max-width:1120px;margin:auto;padding:16px}.card{background:var(--card);border:1px solid #76612e;border-radius:17px;padding:18px;margin:13px 0;box-shadow:0 10px 30px #0007} h1,h2{color:var(--gold);margin-top:0}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px} label{display:block;color:var(--muted);font-size:14px;margin-bottom:5px} input{width:100%;padding:11px;border-radius:9px;border:1px solid var(--line);background:#071321;color:#fff} button{background:var(--gold);color:#06101d;border:0;border-radius:10px;padding:12px 18px;font-weight:800;margin-top:15px;cursor:pointer} button:disabled{opacity:.45;cursor:not-allowed} .badge{display:inline-block;border:1px solid #80672e;border-radius:20px;padding:5px 9px;margin:3px;font-size:12px} .muted{color:var(--muted);line-height:1.55}.status{padding:10px;border-radius:9px;background:#091625;margin-top:10px} .status.ok{border:1px solid #557c55;color:#bce4be}.status.error{border:1px solid #9b4c4c;color:#ffc0c0} table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:8px;border-bottom:1px solid var(--line);text-align:left}th{color:var(--gold)} .result-ok{border-color:#557c55}.error-card{border-color:#9b4c4c} .small{font-size:12px}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace} .rasi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:12px 0} .rasi-cell{border:1px solid #d4af37;border-radius:6px;padding:10px 4px;text-align:center;min-height:65px;color:#f5d778;background:#102033} @media(max-width:760px){.grid{grid-template-columns:1fr}table{font-size:11px;display:block;overflow-x:auto;white-space:nowrap}} வியாசர் ஜோதிடம் AI Version 7 — Browser Calculation Engine @swisseph/browserLahiriSiderealWhole Sign பிறப்பு விவரங்கள் பிறந்த தேதி பிறந்த நேரம் நேர மண்டலம் (IST = 5.5) Latitude Longitude பிறந்த இடம் ஜாதகத்தை கணக்கிடுக Calculation engine-ஐ தயார் செய்கிறோம்... import {SwissEphemeris,Planet,LunarPoint,HouseSystem,SiderealMode,CalculationFlag} from 'https://cdn.jsdelivr.net/npm/@swisseph/browser@1.4.0/+esm'; const RASI=["மேஷம்","ரிஷபம்","மிதுனம்","கடகம்","சிம்மம்","கன்னி","துலாம்","விருச்சிகம்","தனுசு","மகரம்","கும்பம்","மீனம்"]; const NAK=["அசுவினி","பரணி","கார்த்திகை","ரோகிணி","மிருகசீரிஷம்","திருவாதிரை","புனர்பூசம்","பூசம்","ஆயில்யம்","மகம்","பூரம்","உத்திரம்","ஹஸ்தம்","சித்திரை","சுவாதி","விசாகம்","அனுஷம்","கேட்டை","மூலம்","பூராடம்","உத்திராடம்","திருவோணம்","அவிட்டம்","சதயம்","பூரட்டாதி","உத்திரட்டாதி","ரேவதி"]; const LORD=["கேது","சுக்கிரன்","சூரியன்","சந்திரன்","செவ்வாய்","ராகு","குரு","சனி","புதன்"]; const DASA_NAMES=["கேது","சுக்கிரன்","சூரியன்","சந்திரன்","செவ்வாய்","ராகு","குரு","சனி","புதன்"]; const DASA_YEARS=[7,20,6,10,7,18,16,19,17]; const $=id=>document.getElementById(id); let swe=null; function norm(x){x%=360;return x<0?x+360:x} function sign(lon){return Math.floor(norm(lon)/30)} function nak(lon){ const n=norm(lon),span=360/27,i=Math.min(26,Math.floor(n/span)); return {name:NAK[i],pada:Math.floor((n%span)/(span/4))+1,lord:LORD[i%9]}; } function fmt(x){return Number(x).toFixed(4)} function localToUT(date,time,tz){ const [y,m,d]=date.split("-").map(Number),[hh,mm]=time.split(":").map(Number); const base=new Date(Date.UTC(y,m-1,d,hh,mm)-tz*3600000); return {y:base.getUTCFullYear(),m:base.getUTCMonth()+1,d:base.getUTCDate(),ut:base.getUTCHours()+base.getUTCMinutes()/60+base.getUTCSeconds()/3600,timestamp:base.getTime()}; } function addYears(d,y){return new Date(d.getTime()+y*365.2425*86400000)} function getVimshottari(moonLon,birthTimestamp){ const span=360/27,n=nak(moonLon),startLord=DASA_NAMES.indexOf(n.lord); const elapsed=(norm(moonLon)%span)/span,birth=new Date(birthTimestamp); let mdStart=new Date(birth.getTime()-DASA_YEARS[startLord]*elapsed*365.2425*86400000),idx=startLord; const now=new Date();let md=null,bhukti=null; for(let i=0;i<20;i++){ const mdEnd=addYears(mdStart,DASA_YEARS[idx]); if(now>=mdStart&&now=adStart&&nowx.name==="ராகு").absolute,kp=norm(rahu+180),kr=sign(kp),kn=nak(kp); rows.push({name:"கேது",rasi:RASI[kr],degree:kp%30,absolute:kp,nak:kn.name,pada:kn.pada,lord:kn.lord,house:((kr-lr+12)%12)+1,retro:false}); const moon=rows.find(p=>p.name==="சந்திரன்"),dasha=getVimshottari(moon.absolute,u.timestamp); const dashaHTML=`

விம்சோத்தரி தசா–புக்தி

தற்போதைய மகாதிசை: ${dasha.md?.name||"கணக்கிடப்படவில்லை"}

மகாதிசை தொடக்கம்: ${dateTA(dasha.md?.start)}

மகாதிசை முடிவு: ${dateTA(dasha.md?.end)}

தற்போதைய புக்தி: ${dasha.bhukti?.name||"கணக்கிடப்படவில்லை"}

புக்தி தொடக்கம்: ${dateTA(dasha.bhukti?.start)}

புக்தி முடிவு: ${dateTA(dasha.bhukti?.end)}

இது ஆரம்பக் கணக்கீடு; தசைக் காலத்தை வெளியக ஜோதிடக் கணக்குடன் ஒப்பிட்டு சரிபார்க்கவும்.

`; const trs=rows.map(p=>`${p.name}${p.rasi}${fmt(p.degree)}°${p.nak}${p.pada}${p.lord}${p.house}${p.retro?"ஆம்":"இல்லை"}`).join(""); const rasiHouses=Array.from({length:12},(_,i)=>{const planets=rows.filter(p=>p.rasi===RASI[i]);return `
${RASI[i]}
${planets.map(p=>p.name).join(" ")}
`}).join(""); $("status").textContent="கணக்கீடு முடிந்தது.";$("status").className="status ok"; $("result").innerHTML=`${dashaHTML}

ஜாதக கணக்கீட்டு முடிவு

ராசிக் கட்டம்

${rasiHouses}

பிறந்த இடம்: ${$("place").value||"—"}

லக்னம்: ${RASI[lr]} ${fmt(asc%30)}° — ${li.name}, பாதம் ${li.pada} (${li.lord})

Engine: @swisseph/browser • Ayanamsa: Lahiri ${fmt(ay)}° • UT: ${u.y}-${String(u.m).padStart(2,"0")}-${String(u.d).padStart(2,"0")} ${fmt(u.ut)}h • House: Whole Sign

${trs}
கிரகம்ராசிDegreeநட்சத்திரம்பாதம்நட்சத்திர அதிபதிபாவம்வக்கிரம்

இது astronomical calculation; AI prediction layer இன்னும் சேர்க்கப்படவில்லை.

`; }catch(e){console.error(e);$("status").textContent="கணக்கீட்டில் பிழை ஏற்பட்டது.";$("status").className="status error";$("result").innerHTML=`

கணக்கீட்டு பிழை

${e?.message||e}

Browser console-ல் technical error details இருக்கும்.

`} finally{$("btn").disabled=false} } $("btn").addEventListener("click",calculate);init();