<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>JIVANSAR – Planetary Intelligence System</title>
<script src=”https://cdn.tailwindcss.com”></script>
<script src=”https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js”></script>
<style>
@import url(‘https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;600;700&family=Noto+Sans+Devanagari:wght@400;700&display=swap’);

:root {
–astro-gold: #FFD700;
–astro-dark: #0f172a;
–astro-panel: #1e293b;
}

body {
font-family: ‘Rajdhani’, ‘Noto Sans Devanagari’, sans-serif;
background-color: var(–astro-dark);
color: #e2e8f0;
background-image: radial-gradient(circle at top right, #334155 0%, #0f172a 60%);
}

.glass {
background: rgba(30, 41, 59, 0.7);
backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.1);
}

/* SVG Chart Styles */
.chart-line { stroke: var(–astro-gold); stroke-width: 1.5; }
.chart-text { fill: #fff; font-size: 10px; font-family: sans-serif; }
.chart-sign-num { fill: rgba(255, 215, 0, 0.5); font-size: 12px; }

.tab-active { border-bottom: 2px solid var(–astro-gold); color: var(–astro-gold); }
.tab-inactive { color: #94a3b8; }

.dignity-exalted { color: #4ade80; font-weight: bold; } /* Green */
.dignity-debilitated { color: #f87171; font-weight: bold; } /* Red */
.dignity-combust { color: #fbbf24; font-style: italic; } /* Orange */

/* Toggle Switch */
.toggle-checkbox:checked { right: 0; border-color: #68D391; }
.toggle-checkbox:checked + .toggle-label { background-color: #68D391; }
</style>
</head>
<body class=”min-h-screen flex flex-col items-center p-2 md:p-6″>

<!– HEADER –>
<header class=”w-full max-w-6xl flex justify-between items-center mb-6 glass p-4 rounded-xl”>
<div class=”flex items-center gap-3″>
<i class=”fa-solid fa-solar-system text-3xl text-yellow-500″></i>
<div>
<h1 class=”text-2xl font-bold tracking-widest text-yellow-500″>JIVANSAR</h1>
<p class=”text-xs text-gray-400″>Autonomous Planetary Engine</p>
</div>
</div>
<div class=”flex gap-2″>
<button onclick=”app.setLanguage(‘en’)” id=”btn-en” class=”text-xs font-bold px-3 py-1 bg-yellow-600 rounded text-white”>ENG</button>
<button onclick=”app.setLanguage(‘hi’)” id=”btn-hi” class=”text-xs font-bold px-3 py-1 bg-slate-700 rounded text-gray-300″>рд╣рд┐рдВрджреА</button>
</div>
</header>

<!– MAIN INPUT & DASHBOARD –>
<main class=”w-full max-w-6xl grid grid-cols-1 lg:grid-cols-12 gap-6″>

<!– SIDEBAR: INPUTS –>
<div class=”lg:col-span-3 glass p-5 rounded-xl h-fit”>
<h2 class=”text-lg font-bold text-yellow-500 mb-4 border-b border-gray-600 pb-2″ data-t=”inputDetails”>Input Details</h2>

<form id=”astroForm” onsubmit=”app.calculate(event)” class=”space-y-3″>
<div>
<label class=”text-xs text-gray-400″>Name</label>
<input type=”text” id=”name” value=”JIVANSAR” class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm focus:border-yellow-500 outline-none text-white”>
</div>
<div class=”grid grid-cols-2 gap-2″>
<div>
<label class=”text-xs text-gray-400″ data-t=”dob”>Date</label>
<input type=”date” id=”dob” class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm text-white”>
</div>
<div>
<label class=”text-xs text-gray-400″ data-t=”tob”>Time</label>
<input type=”time” id=”tob” value=”12:00″ class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm text-white”>
</div>
</div>
<div class=”grid grid-cols-2 gap-2″>
<div>
<label class=”text-xs text-gray-400″ data-t=”lat”>Lat</label>
<input type=”number” step=”0.01″ id=”lat” value=”28.61″ class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm text-white”>
</div>
<div>
<label class=”text-xs text-gray-400″ data-t=”lon”>Lon</label>
<input type=”number” step=”0.01″ id=”lon” value=”77.20″ class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm text-white”>
</div>
</div>
<div>
<label class=”text-xs text-gray-400″ data-t=”timezone”>Timezone</label>
<select id=”tz” class=”w-full bg-slate-900 border border-slate-700 rounded p-2 text-sm text-white”>
<option value=”5.5″>India (+5:30)</option>
<option value=”0″>UTC (0:00)</option>
<option value=”-5″>EST (-5:00)</option>
</select>
</div>

<button type=”submit” class=”w-full bg-yellow-600 hover:bg-yellow-500 text-white font-bold py-2 rounded shadow-lg transition” data-t=”calcBtn”>Calculate Positions</button>
</form>

<!– Numerology Mini Widget –>
<div id=”numerologyBox” class=”mt-6 hidden border-t border-gray-600 pt-4″>
<h3 class=”text-sm font-bold text-yellow-500 mb-2″ data-t=”numerology”>Numerology</h3>
<div class=”flex justify-between text-center”>
<div class=”bg-slate-800 p-2 rounded w-[48%]”>
<span class=”block text-xs text-gray-400″ data-t=”mulank”>Mulank</span>
<span class=”text-xl font-bold text-blue-400″ id=”valMulank”>0</span>
</div>
<div class=”bg-slate-800 p-2 rounded w-[48%]”>
<span class=”block text-xs text-gray-400″ data-t=”bhagyank”>Bhagyank</span>
<span class=”text-xl font-bold text-purple-400″ id=”valBhagyank”>0</span>
</div>
</div>
</div>
</div>

<!– MAIN DASHBOARD AREA –>
<div class=”lg:col-span-9 hidden” id=”dashboard”>

<!– TABS –>
<div class=”flex border-b border-gray-700 mb-4″>
<button onclick=”app.switchTab(‘positions’)” id=”tab-positions” class=”px-4 py-2 text-sm font-bold tab-active transition” data-t=”tabPlanets”>Planetary Data</button>
<button onclick=”app.switchTab(‘chart’)” id=”tab-chart” class=”px-4 py-2 text-sm font-bold tab-inactive transition” data-t=”tabChart”>Kundli Chart</button>
<button onclick=”app.switchTab(‘conjunctions’)” id=”tab-conjunctions” class=”px-4 py-2 text-sm font-bold tab-inactive transition” data-t=”tabConjunctions”>Conjunctions</button>
</div>

<!– VIEW: POSITIONS –>
<div id=”view-positions” class=”animate-fade-in”>
<div class=”glass rounded-xl overflow-hidden”>
<table class=”w-full text-left text-sm”>
<thead class=”bg-slate-800 text-gray-400 uppercase text-xs”>
<tr>
<th class=”p-3″ data-t=”planet”>Planet</th>
<th class=”p-3″ data-t=”sign”>Sign</th>
<th class=”p-3″ data-t=”degree”>Degree</th>
<th class=”p-3″ data-t=”house”>House</th>
<th class=”p-3″ data-t=”status”>Status</th>
</tr>
</thead>
<tbody id=”planetTableBody” class=”divide-y divide-gray-700″>
<!– JS Generated –>
</tbody>
</table>
</div>
</div>

<!– VIEW: CHART –>
<div id=”view-chart” class=”hidden flex justify-center items-center py-6 glass rounded-xl”>
<div id=”chartContainer” class=”w-[350px] h-[350px] bg-slate-900 border border-yellow-800 relative shadow-2xl”>
<!– SVG Injected Here –>
</div>
</div>

<!– VIEW: CONJUNCTIONS –>
<div id=”view-conjunctions” class=”hidden glass p-4 rounded-xl”>
<h3 class=”text-lg font-bold text-yellow-500 mb-4″ data-t=”yogaTitle”>Planetary Conjunctions (Yogas)</h3>
<ul id=”conjunctionList” class=”space-y-2″>
<!– JS Generated –>
</ul>
<div id=”noConj” class=”text-gray-500 italic text-sm hidden” data-t=”noConj”>No major conjunctions detected within 10 degrees.</div>
</div>

</div>
</main>

<!– FOOTER –>
<footer class=”mt-8 text-center text-gray-500 text-xs”>
<p>JIVANSAR Engine v1.0 | Calculations based on Lahiri Ayanamsa (Sidereal)</p>
</footer>

<!– LOGIC ENGINE –>
<script>
class AstroEngine {
constructor() {
this.lang = ‘en’;
this.planets = {};
this.translations = {
en: {
inputDetails: “Input Details”, dob: “Date”, tob: “Time”, lat: “Lat”, lon: “Lon”, timezone: “Timezone”,
calcBtn: “Calculate Positions”, numerology: “Numerology”, mulank: “Root (Mulank)”, bhagyank: “Destiny (Bhagyank)”,
tabPlanets: “Planetary Status”, tabChart: “Kundli Chart”, tabConjunctions: “Conjunctions”,
planet: “Planet”, sign: “Sign”, degree: “Degree”, house: “House”, status: “Dignity”,
yogaTitle: “Planetary Conjunctions”, noConj: “No close conjunctions found.”,
signs: [“Aries”, “Taurus”, “Gemini”, “Cancer”, “Leo”, “Virgo”, “Libra”, “Scorpio”, “Sagittarius”, “Capricorn”, “Aquarius”, “Pisces”],
planetsList: {Sun:”Sun”, Moon:”Moon”, Mars:”Mars”, Mercury:”Mercury”, Jupiter:”Jupiter”, Venus:”Venus”, Saturn:”Saturn”, Rahu:”Rahu”, Ketu:”Ketu”, Ascendant:”Ascendant”}
},
hi: {
inputDetails: “рдЬрдиреНрдо рд╡рд┐рд╡рд░рдг”, dob: “рджрд┐рдирд╛рдВрдХ”, tob: “рд╕рдордп”, lat: “рдЕрдХреНрд╖рд╛рдВрд╢”, lon: “рджреЗрд╢рд╛рдВрддрд░”, timezone: “рд╕рдордп рдХреНрд╖реЗрддреНрд░”,
calcBtn: “рдЧрдгрдирд╛ рдХрд░реЗрдВ”, numerology: “рдЕрдВрдХ рдЬреНрдпреЛрддрд┐рд╖”, mulank: “рдореВрд▓рд╛рдВрдХ”, bhagyank: “рднрд╛рдЧреНрдпрд╛рдВрдХ”,
tabPlanets: “рдЧреНрд░рд╣ рд╕реНрдерд┐рддрд┐”, tabChart: “рд▓рдЧреНрди рдХреБрдВрдбрд▓реА”, tabConjunctions: “рдпреБрддрд┐ рд╡рд┐рдЪрд╛рд░”,
planet: “рдЧреНрд░рд╣”, sign: “рд░рд╛рд╢рд┐”, degree: “рдЕрдВрд╢”, house: “рднрд╛рд╡”, status: “рдЕрд╡рд╕реНрдерд╛”,
yogaTitle: “рдЧреНрд░рд╣ рдпреБрддрд┐ (рдпреЛрдЧ)”, noConj: “рдХреЛрдИ рдирд┐рдХрдЯ рдпреБрддрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред”,
signs: [“рдореЗрд╖”, “рд╡реГрд╖рдн”, “рдорд┐рдереБрди”, “рдХрд░реНрдХ”, “рд╕рд┐рдВрд╣”, “рдХрдиреНрдпрд╛”, “рддреБрд▓рд╛”, “рд╡реГрд╢реНрдЪрд┐рдХ”, “рдзрдиреБ”, “рдордХрд░”, “рдХреБрдВрдн”, “рдореАрди”],
planetsList: {Sun:”рд╕реВрд░реНрдп”, Moon:”рдЪрдВрджреНрд░”, Mars:”рдордВрдЧрд▓”, Mercury:”рдмреБрдз”, Jupiter:”рдЧреБрд░реБ”, Venus:”рд╢реБрдХреНрд░”, Saturn:”рд╢рдирд┐”, Rahu:”рд░рд╛рд╣реБ”, Ketu:”рдХреЗрддреБ”, Ascendant:”рд▓рдЧреНрди”}
}
};

// Initialize Date
const now = new Date();
document.getElementById(‘dob’).value = now.toISOString().split(‘T’)[0];
}

setLanguage(l) {
this.lang = l;
document.getElementById(‘btn-en’).className = l===’en’ ? “text-xs font-bold px-3 py-1 bg-yellow-600 rounded text-white” : “text-xs font-bold px-3 py-1 bg-slate-700 rounded text-gray-300”;
document.getElementById(‘btn-hi’).className = l===’hi’ ? “text-xs font-bold px-3 py-1 bg-yellow-600 rounded text-white” : “text-xs font-bold px-3 py-1 bg-slate-700 rounded text-gray-300”;

// Update text
document.querySelectorAll(‘[data-t]’).forEach(el => {
const key = el.getAttribute(‘data-t’);
if(this.translations[l][key]) el.innerText = this.translations[l][key];
});

// Re-render if data exists
if(Object.keys(this.planets).length > 0) this.renderDashboard();
}

// — ASTRO MATH (Simplified VSOP/Kepler for JS) —
toJulian(date, timeIso, tz) {
const d = new Date(`${date}T${timeIso}:00`);
// Adjust for TZ to get UTC
const utcHrs = d.getHours() + d.getMinutes()/60 – parseFloat(tz);

let Y = d.getFullYear(), M = d.getMonth()+1, D = d.getDate();
if(M <= 2) { Y–; M+=12; }
const A = Math.floor(Y/100);
const B = 2 – A + Math.floor(A/4);
return Math.floor(365.25*(Y+4716)) + Math.floor(30.6001*(M+1)) + D + B – 1524.5 + (utcHrs/24.0);
}

normalize(deg) {
deg = deg % 360;
return deg < 0 ? deg + 360 : deg;
}

getPlanetLong(planet, jd) {
const T = (jd – 2451545.0) / 36525;
let L=0, M=0;
// Simplified mean elements
if(planet === ‘Sun’) {
L = 280.466 + 36000.770*T;
M = 357.529 + 35999.050*T;
return this.normalize(L + (1.915 * Math.sin(M * Math.PI/180)));
}
// Mock positions for other planets for this standalone demo (Full VSOP is 2000 lines)
// In a real production script, insert full orbital elements here.
// using a pseudo-random deterministic seed based on date for demonstration of UI logic
// THIS IS A SIMULATION FOR THE UI.
// Replace this block with ‘astronomy-engine’ library for precision.
const rates = {Moon: 13.176, Mars: 0.524, Mercury: 4.09, Jupiter: 0.083, Venus: 1.602, Saturn: 0.033, Rahu: -0.052};
const seeds = {Moon: 218, Mars: 355, Mercury: 252, Jupiter: 34, Venus: 181, Saturn: 50, Rahu: 125};

let base = seeds[planet] + ((jd – 2451545.0) * rates[planet]);
return this.normalize(base);
}

getAscendant(jd, lat, lon) {
// Rough calculation for UI demonstration
// Real calc requires Sidereal Time iteration
const sunLong = this.getPlanetLong(‘Sun’, jd);
// Sun is at Ascendant at sunrise (approx 6am).
// Add 15 deg per hour from sunrise.
const d = new Date();
const hours = d.getHours() + d.getMinutes()/60; // Approximate from current time input
return this.normalize(sunLong + ((hours – 6) * 15) + lon);
}

// — CALCULATE —
calculate(e) {
e.preventDefault();
const dob = document.getElementById(‘dob’).value;
const tob = document.getElementById(‘tob’).value;
const lat = parseFloat(document.getElementById(‘lat’).value);
const lon = parseFloat(document.getElementById(‘lon’).value);
const tz = document.getElementById(‘tz’).value;

if(!dob || !tob) return alert(“Please fill all fields”);

const jd = this.toJulian(dob, tob, tz);
const ayanamsa = 24.0; // Fixed Approx Lahiri

// 1. Calculate Longitudes
const pNames = [‘Sun’, ‘Moon’, ‘Mars’, ‘Mercury’, ‘Jupiter’, ‘Venus’, ‘Saturn’, ‘Rahu’];

// Calculate Ascendant first
let ascGeo = this.getAscendant(jd, lat, lon); // Tropical
let ascSid = this.normalize(ascGeo – ayanamsa); // Sidereal

this.planets = {
‘Ascendant’: { long: ascSid, speed: 0 }
};

pNames.forEach(p => {
let trop = this.getPlanetLong(p, jd);
let sid = this.normalize(trop – ayanamsa);
this.planets[p] = { long: sid };
});

// Ketu is opposite Rahu
this.planets[‘Ketu’] = { long: this.normalize(this.planets[‘Rahu’].long + 180) };

// 2. Process Data (Sign, House, Dignity)
this.processData();

// 3. Numerology
this.calcNumerology(dob);

// 4. Show Dashboard
document.getElementById(‘dashboard’).classList.remove(‘hidden’);
document.getElementById(‘numerologyBox’).classList.remove(‘hidden’);
this.renderDashboard();
}

processData() {
const ascSign = Math.floor(this.planets[‘Ascendant’].long / 30);
const sunDist = (p) => Math.abs(this.planets[‘Sun’].long – this.planets[p].long);

for(let p in this.planets) {
let l = this.planets[p].long;
let signIdx = Math.floor(l / 30);
let deg = l % 30;

// House (Whole Sign)
let house = (signIdx – ascSign) + 1;
if(house <= 0) house += 12;

// Dignity Logic (Simplified Vedic)
let status = “”;
let isCombust = false;

// Exaltation Points (Approx)
if(p===’Sun’ && signIdx===0) status = “Exalted”; // Aries
if(p===’Moon’ && signIdx===1) status = “Exalted”; // Taurus
if(p===’Mars’ && signIdx===9) status = “Exalted”; // Capricorn
if(p===’Jupiter’ && signIdx===3) status = “Exalted”; // Cancer
if(p===’Venus’ && signIdx===11) status = “Exalted”; // Pisces
if(p===’Saturn’ && signIdx===6) status = “Exalted”; // Libra
if(p===’Mercury’ && signIdx===5) status = “Exalted”; // Virgo

// Debilitation
if(p===’Sun’ && signIdx===6) status = “Debilitated”;
if(p===’Moon’ && signIdx===7) status = “Debilitated”;
if(p===’Mars’ && signIdx===3) status = “Debilitated”;
if(p===’Jupiter’ && signIdx===9) status = “Debilitated”;
if(p===’Venus’ && signIdx===5) status = “Debilitated”;
if(p===’Saturn’ && signIdx===0) status = “Debilitated”;

// Combustion
if(p !== ‘Sun’ && p !== ‘Rahu’ && p !== ‘Ketu’ && p !== ‘Ascendant’) {
let d = Math.min(Math.abs(this.planets[‘Sun’].long – l), 360 – Math.abs(this.planets[‘Sun’].long – l));
if(d < 10) isCombust = true;
}

this.planets[p].data = {
signIndex: signIdx,
degree: deg,
house: house,
status: status,
isCombust: isCombust
};
}
}

calcNumerology(dob) {
const parts = dob.split(‘-‘); // YYYY-MM-DD
const day = parseInt(parts[2]);
const fullStr = parts.join(”);

const reduce = (n) => {
while(n > 9) n = n.toString().split(”).reduce((a,b)=>parseInt(a)+parseInt(b), 0);
return

D├йmarrer une session sur bet live casino suffit souvent ├а comprendre pourquoi ce nom revient dans tant de conversations. Les options d’affichage des prix permettent d’ajuster les niveaux d’information souhait├йs. Le tableau de bord mobile reprend les fonctionnalit├йs principales sans simplifications excessives. L’agenda promotionnel anticipe les op├йrations ├а venir avec plusieurs jours d’avance. Les bonus high roller r├йcompensent les joueurs misant des montants significatifs sur certains formats. Les conseils proactifs lors de difficult├йs rencontr├йes renforcent la qualit├й per├зue. Les classements internes mettent en avant les jeux les plus jou├йs selon les p├йriodes. Les studios proposent souvent une cam├йra zoom d├йdi├йe au plateau de jeu pour ne rien manquer de l’action. Le bandeau cookies informe transparente sur les usages effectifs du suivi en ligne. Paysafecard reste une option appr├йci├йe pour ceux qui privil├йgient la confidentialit├й des transactions. Le travail de fond men├й finit par parler de lui-m├кme sans d├йmonstration excessive.