teste / index.html
ppcabral's picture
undefined - Initial Deployment
c6c20d3 verified
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard Astrológico</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: linear-gradient(135deg, #4B0082 0%, #00008B 100%);
--card-bg: rgba(255, 255, 255, 0.15);
--header-bg-color: rgba(255, 255, 255, 0.1);
--current-week-bg: rgba(255, 255, 255, 0.2);
--other-month-bg: rgba(255, 255, 255, 0.05);
--text-primary: #FFFFFF;
--text-secondary: rgba(255, 255, 255, 0.7);
--accent-color: #5E7CE2;
--divider: rgba(255, 255, 255, 0.2);
--current-day-border: #5E7CE2;
--color-good: #4CAF50; /* Original green */
--color-bad: #F44336; /* Original red */
--color-neutral: #9E9E9E;
--color-special: #FF9800;
--color-warning-bg: rgba(255, 243, 205, 0.2);
--color-warning-text: #FFECB3;
--color-good-bg: rgba(76, 175, 80, 0.3); /* Original green with transparency */
--color-bad-bg: rgba(244, 67, 54, 0.3); /* Original red with transparency */
}
html { font-size: 15px; }
body {
font-family: 'Outfit', 'Inter', system-ui, sans-serif;
background: var(--bg-color);
color: var(--text-primary);
margin: 0;
min-height: 100vh;
padding: 2rem;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
background-attachment: fixed;
background-size: cover;
}
h1 {
background: linear-gradient(to right, #FFFFFF, #E0E0E0);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
h1 {
color: var(--text-primary);
text-align: center;
font-weight: 600;
}
.controls {
max-width: 100%;
margin-bottom: 2rem;
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
padding: 1.5rem;
border-radius: 20px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.upload-group,
.select-group {
background: rgba(255, 255, 255, 0.1);
padding: 0.5rem 1rem;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.upload-group label,
.select-group label {
display: block;
margin-bottom: 0.25rem;
font-size: 0.8rem;
color: var(--text-secondary);
}
.upload-group input,
.select-group select {
background: rgba(0, 0, 0, 0.2);
color: white;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 0.5rem;
}
.upload-group input::file-selector-button {
background: rgba(255, 255, 255, 0.1);
color: white;
border: none;
padding: 0.25rem 0.5rem;
border-radius: 4px;
margin-right: 0.5rem;
}
#calendar-container {
display: grid;
grid-template-columns: repeat(7, minmax(190px, 1fr));
gap: 1rem;
}
.calendar-header {
text-align: center;
color: var(--text-secondary);
padding-bottom: 1rem;
font-weight: 600;
}
.calendar-day {
background-color: var(--card-bg);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid var(--divider);
min-height: 250px;
border-radius: 20px;
padding: 1rem;
display: flex;
flex-direction: column;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
}
.calendar-day:hover {
border-color: var(--accent-color);
box-shadow: 0 8px 32px rgba(94, 124, 226, 0.4);
transform: translateY(-2px);
}
.calendar-day.other-month { opacity: 0.5; }
.calendar-day.current-day { border: 2px solid var(--current-day-border); }
.calendar-day.current-week { background-color: var(--current-week-bg); }
.calendar-day.card-good {
background-color: var(--color-good-bg);
border-color: var(--color-good);
box-shadow: 0 8px 32px rgba(76, 175, 80, 0.4);
}
.calendar-day.card-bad {
background-color: var(--color-bad-bg);
border-color: var(--color-bad);
box-shadow: 0 8px 32px rgba(244, 67, 54, 0.4);
}
/* --- PASSO 1: Layout do Cabeçalho Ajustado --- */
.card-header {
display: flex; /* Alterado para Flexbox */
justify-content: space-between;
padding-bottom: 0.75rem;
border-bottom: 1px solid var(--divider);
gap: 1rem;
}
.header-col-left .day-number {
font-size: 2.5rem; /* Fonte aumentada */
font-weight: 700;
line-height: 1;
}
.header-col-right {
text-align: right;
display: flex;
flex-direction: column;
align-items: flex-end; /* Alinha itens à direita */
}
.header-col-right .day-nakshatra {
font-size: 1rem;
font-weight: 600;
}
.day-nakshatra.vedha-plus { color: var(--color-good); }
.day-nakshatra.vedha-special { color: var(--color-special); }
.day-nakshatra.vedha-minus { color: var(--color-bad); }
.header-col-right .tara-bala {
font-size: 0.7rem; /* Fonte diminuída */
font-weight: 500;
color: var(--text-secondary);
}
.tara-bala.good { color: var(--color-good); }
.tara-bala.bad { color: var(--color-bad); }
.header-col-right .day-tithi {
font-size: 0.8rem;
color: var(--text-secondary);
font-weight: 500;
}
.moon-house-container {
margin-top: 0.5rem;
width: 100%; /* Garante que o container ocupe todo o espaço */
text-align: center;
}
.header-divider {
height: 1px;
background-color: var(--divider);
margin-bottom: 0.5rem;
}
.moon-house {
font-size: 0.875rem;
font-weight: 600;
color: var(--text-secondary);
}
.moon-house.bad-house {
color: var(--color-bad);
}
.card-content {
padding-top: 0.75rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
flex-grow: 1;
}
.content-section .title {
font-size: 0.7rem;
font-weight: 700;
color: var(--text-secondary);
margin-bottom: 0.4rem;
text-transform: uppercase;
}
.panchanga-details div { margin-bottom: 2px; font-size: 0.875rem; color: var(--text-secondary); }
.panchanga-details b { color: var(--text-primary); font-weight: 500; }
.tags-container { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.item-tag {
display: inline-block;
color: white;
padding: 2px 7px;
border-radius: 4px;
font-weight: 500;
font-size: 0.75rem;
}
.item-tag.good { background-color: var(--color-good); }
.item-tag.bad { background-color: var(--color-bad); }
.item-tag.neutral { background-color: var(--text-secondary); }
.dagdha-warning {
background-color: var(--color-warning-bg);
color: var(--color-warning-text);
border-radius: 4px;
padding: 0.5rem;
font-size: 0.8rem;
font-weight: 500;
margin-top: auto;
text-align: center;
}
</style>
</head>
<body>
<h1>Dashboard Astrológico</h1>
<div class="controls">
<div class="upload-group"> <label for="panchanga-upload">1. JSON Trânsitos</label> <input type="file" id="panchanga-upload" accept=".json"> </div>
<div class="upload-group"> <label for="clients-upload">2. JSON Clientes</label> <input type="file" id="clients-upload" accept=".json" disabled> </div>
<div class="select-group"> <label for="year-selector">Ano</label> <select id="year-selector" disabled></select> </div>
<div class="select-group"> <label for="month-selector">Mês</label> <select id="month-selector" disabled></select> </div>
<div class="select-group"> <label for="client-selector">3. Cliente</label> <select id="client-selector" disabled></select> </div>
</div>
<div id="calendar-container"></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// --- CONSTANTES E VARIÁVEIS GLOBAIS ---
const panchangaUpload = document.getElementById('panchanga-upload'), clientsUpload = document.getElementById('clients-upload'), yearSelector = document.getElementById('year-selector'), monthSelector = document.getElementById('month-selector'), clientSelector = document.getElementById('client-selector'), calendarContainer = document.getElementById('calendar-container');
let panchangaData = [], clientsData = [], selectedClient = null;
// --- DADOS ASTROLÓGICOS ---
const NAKSHATRA_ORDER = ['Ashwini', 'Bharani', 'Krittika', 'Rohini', 'Mrigashira', 'Ardra', 'Punarvasu', 'Pushya', 'Ashlesha', 'Magha', 'Purva Phalguni', 'Uttara Phalguni', 'Hasta', 'Chitra', 'Swati', 'Vishakha', 'Anuradha', 'Jyeshtha', 'Mula', 'Purva Ashadha', 'Uttara Ashadha', 'Shravana', 'Dhanishta', 'Shatabhisha', 'Purva Bhadrapada', 'Uttara Bhadrapada', 'Revati'];
const WHOLE_SIGN_NAKSHATRAS = [ 'Ashwini', 'Bharani', 'Rohini', 'Ardra', 'Pushya', 'Ashlesha', 'Magha', 'Purva Phalguni', 'Hasta', 'Swati', 'Anuradha', 'Jyeshtha', 'Mula', 'Purva Ashadha', 'Shravana', 'Shatabhisha', 'Uttara Bhadrapada', 'Revati' ];
const NAKSHATRA_TO_SIGN = { 'Ashwini': 'Áries', 'Bharani': 'Áries', 'Krittika': 'Touro', 'Rohini': 'Touro', 'Mrigashira': 'Gêmeos', 'Ardra': 'Gêmeos', 'Punarvasu': 'Câncer', 'Pushya': 'Câncer', 'Ashlesha': 'Câncer', 'Magha': 'Leão', 'Purva Phalguni': 'Leão', 'Uttara Phalguni': 'Virgem', 'Hasta': 'Virgem', 'Chitra': 'Libra', 'Swati': 'Libra', 'Vishakha': 'Escorpião', 'Anuradha': 'Escorpião', 'Jyeshtha': 'Escorpião', 'Mula': 'Sagitário', 'Purva Ashadha': 'Sagitário', 'Uttara Ashadha': 'Capricórnio', 'Shravana': 'Capricórnio', 'Dhanishta': 'Aquário', 'Shatabhisha': 'Aquário', 'Purva Bhadrapada': 'Peixes', 'Uttara Bhadrapada': 'Peixes', 'Revati': 'Peixes' };
const TARA_BALA = [ { name: 'Jamna-Ganesh', quality: 'Ruim' }, { name: 'Sampat-Lakshmi', quality: 'Bom' }, { name: 'Vipat-Surya', quality: 'Ruim' }, { name: 'Kshema-Gauri', quality: 'Bom' }, { name: 'Pratyak-Skanda', quality: 'Ruim' }, { name: 'Sadhana-Durga', quality: 'Bom' }, { name: 'Naidhana-Shiva', quality: 'Ruim' }, { name: 'Mitra-Kali', quality: 'Bom' }, { name: 'Adimitra-Krishna', quality: 'Bom' } ];
const ALL_PLANETS = ["Sol", "Marte", "Mercúrio", "Júpiter", "Vênus", "Saturno", "Rahu", "Ketu"];
const GOOD_POINTS = ["Yogi Sphuta", "YogaKaraka", "Sri Lagna", "Indu Lagna", "Brighu Bindu", "Arudha Lagna"];
const BAD_POINTS = ["Avayogi (bad) Sphuta", "Sthula Nakshatra", "Kantaka Nakshatra", "Kantaka Sthula Nakshatra", "Vedha Nakshatra"];
const ZODIAC_ORDER = ['Áries', 'Touro', 'Gêmeos', 'Câncer', 'Leão', 'Virgem', 'Libra', 'Escorpião', 'Sagitário', 'Capricórnio', 'Aquário', 'Peixes'];
const SIGN_RULERS = { 'Áries': ['Marte'], 'Touro': ['Vênus'], 'Gêmeos': ['Mercúrio'], 'Câncer': ['Lua'], 'Leão': ['Sol'], 'Virgem': ['Mercúrio'], 'Libra': ['Vênus'], 'Escorpião': ['Marte', 'Ketu'], 'Sagitário': ['Júpiter'], 'Capricórnio': ['Saturno'], 'Aquário': ['Saturno', 'Rahu'], 'Peixes': ['Júpiter'] };
const DAGDHA_RASHI_MAP = { 'pratipada': ['Libra', 'Capricórnio'], 'dvitya': ['Sagitário', 'Peixes'], 'tritiya': ['Leão', 'Capricórnio'], 'chaturti': ['Touro', 'Aquário'], 'panchami': ['Gêmeos', 'Virgem'], 'shasti': ['Áries', 'Leão'], 'saptami': ['Câncer', 'Sagitário'], 'astami': ['Gêmeos', 'Virgem'], 'navami': ['Leão', 'Escorpião'], 'dashami': ['Leão', 'Escorpião'], 'ekadasi': ['Sagitário', 'Peixes'], 'duadasi': ['Libra', 'Capricórnio'], 'trayodasi': ['Touro', 'Leão'], 'chaturdasi': ['Peixes', 'Gêmeos', 'Virgem', 'Sagitário'] };
const VEDHA_MATRIX = {"Ashwini":{"Ashwini":"-","Bharani":"-","Krittika":"-+ ","Rohini":"(+)","Mrigashira":"(+)","Ardra":"-+ ","Punarvasu":"-","Pushya":"-","Ashlesha":"-","Magha":"-+ ","Purva Phalguni":"(+)","Uttara Phalguni":"(+)","Hasta":"-+ ","Chitra":"-","Swati":"-","Vishakha":"-","Anuradha":"-+ ","Jyeshtha":"(+)","Mula":"(+)","Purva Ashadha":"-+ ","Uttara Ashadha":"-","Shravana":"-","Dhanishta":"-+ ","Shatabhisha":"(+)","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"-+ ","Revati":"-"},"Bharani":{"Ashwini":"-","Bharani":"-","Krittika":"-","Rohini":"-+ ","Mrigashira":"(+)","Ardra":"(+)","Punarvasu":"-+ ","Pushya":"-","Ashlesha":"-","Magha":"-","Purva Phalguni":"-+ ","Uttara Phalguni":"(+)","Hasta":"(+)","Chitra":"-+ ","Swati":"-","Vishakha":"-","Anuradha":"-","Jyeshtha":"-+ ","Mula":"(+)","Purva Ashadha":"(+)","Uttara Ashadha":"-+ ","Shravana":"-","Dhanishta":"-","Shatabhisha":"-+ ","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"(+)","Revati":"-+"},"Krittika":{"Ashwini":"-+ ","Bharani":"-","Krittika":"-","Rohini":"-","Mrigashira":"-+ ","Ardra":"(+)","Punarvasu":"(+)","Pushya":"-+ ","Ashlesha":"-","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-+ ","Hasta":"(+)","Chitra":"(+)","Swati":"-+ ","Vishakha":"-","Anuradha":"-","Jyeshtha":"-","Mula":"-+ ","Purva Ashadha":"(+)","Uttara Ashadha":"(+)","Shravana":"-","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"(+)","Revati":"(+)"},"Rohini":{"Ashwini":"(+)","Bharani":"-+ ","Krittika":"-","Rohini":"-","Mrigashira":"-","Ardra":"-+ ","Punarvasu":"(+)","Pushya":"(+)","Ashlesha":"-+ ","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-+ ","Chitra":"(+)","Swati":"(+)","Vishakha":"-+ ","Anuradha":"-","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-+ ","Uttara Ashadha":"(+)","Shravana":"-+ ","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-+ ","Revati":"(+)"},"Mrigashira":{"Ashwini":"(+)","Bharani":"(+)","Krittika":"-+ ","Rohini":"-","Mrigashira":"-","Ardra":"-","Punarvasu":"-+ ","Pushya":"(+)","Ashlesha":"(+)","Magha":"-+ ","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-","Chitra":"-+ ","Swati":"(+)","Vishakha":"(+)","Anuradha":"-+ ","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-+ ","Shravana":"(+)","Dhanishta":"-+ ","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-+"},"Ardra":{"Ashwini":"-+ ","Bharani":"(+)","Krittika":"(+)","Rohini":"-+ ","Mrigashira":"-","Ardra":"-","Punarvasu":"-","Pushya":"-+ ","Ashlesha":"(+)","Magha":"(+)","Purva Phalguni":"-+ ","Uttara Phalguni":"-","Hasta":"-","Chitra":"-","Swati":"-+ ","Vishakha":"(+)","Anuradha":"(+)","Jyeshtha":"-+ ","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"(+)","Dhanishta":"(+)","Shatabhisha":"-+ ","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-"},"Punarvasu":{"Ashwini":"-","Bharani":"-+ ","Krittika":"(+)","Rohini":"(+)","Mrigashira":"-+ ","Ardra":"-","Punarvasu":"-","Pushya":"-","Ashlesha":"-+ ","Magha":"(+)","Purva Phalguni":"(+)","Uttara Phalguni":"-+ ","Hasta":"-","Chitra":"-","Swati":"-","Vishakha":"-+ ","Anuradha":"(+)","Jyeshtha":"(+)","Mula":"-+ ","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"-+ ","Dhanishta":"(+)","Shatabhisha":"(+)","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"-","Revati":"-"},"Pushya":{"Ashwini":"-","Bharani":"-","Krittika":"-+ ","Rohini":"(+)","Mrigashira":"(+)","Ardra":"-+ ","Punarvasu":"-","Pushya":"-","Ashlesha":"-","Magha":"-+ ","Purva Phalguni":"(+)","Uttara Phalguni":"(+)","Hasta":"-+ ","Chitra":"-","Swati":"-","Vishakha":"-","Anuradha":"-+ ","Jyeshtha":"(+)","Mula":"(+)","Purva Ashadha":"-+ ","Uttara Ashadha":"-","Shravana":"-","Dhanishta":"-+ ","Shatabhisha":"(+)","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"-+ ","Revati":"-"},"Ashlesha":{"Ashwini":"-","Bharani":"-","Krittika":"-","Rohini":"-+ ","Mrigashira":"(+)","Ardra":"(+)","Punarvasu":"-+ ","Pushya":"-","Ashlesha":"-","Magha":"-","Purva Phalguni":"-+ ","Uttara Phalguni":"(+)","Hasta":"(+)","Chitra":"-+ ","Swati":"-","Vishakha":"-","Anuradha":"-","Jyeshtha":"-+ ","Mula":"(+)","Purva Ashadha":"(+)","Uttara Ashadha":"-+ ","Shravana":"-","Dhanishta":"-","Shatabhisha":"-+ ","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"(+)","Revati":"-+"},"Magha":{"Ashwini":"-+ ","Bharani":"-","Krittika":"-","Rohini":"-","Mrigashira":"-+ ","Ardra":"(+)","Punarvasu":"(+)","Pushya":"-+ ","Ashlesha":"-","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-+ ","Hasta":"(+)","Chitra":"(+)","Swati":"-+ ","Vishakha":"-","Anuradha":"-","Jyeshtha":"-","Mula":"-+ ","Purva Ashadha":"(+)","Uttara Ashadha":"(+)","Shravana":"-","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"(+)","Revati":"(+)"},"Purva Phalguni":{"Ashwini":"(+)","Bharani":"-+ ","Krittika":"-","Rohini":"-","Mrigashira":"-","Ardra":"-+ ","Punarvasu":"(+)","Pushya":"(+)","Ashlesha":"-+ ","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-+ ","Chitra":"(+)","Swati":"(+)","Vishakha":"-+ ","Anuradha":"-","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-+ ","Uttara Ashadha":"(+)","Shravana":"-+ ","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-+ ","Revati":"(+)"},"Uttara Phalguni":{"Ashwini":"(+)","Bharani":"(+)","Krittika":"-+ ","Rohini":"-","Mrigashira":"-","Ardra":"-","Punarvasu":"-+ ","Pushya":"(+)","Ashlesha":"(+)","Magha":"-+ ","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-","Chitra":"-+ ","Swati":"(+)","Vishakha":"(+)","Anuradha":"-+ ","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-+ ","Shravana":"(+)","Dhanishta":"-+ ","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-+"},"Hasta":{"Ashwini":"-+ ","Bharani":"(+)","Krittika":"(+)","Rohini":"-+ ","Mrigashira":"-","Ardra":"-","Punarvasu":"-","Pushya":"-+ ","Ashlesha":"(+)","Magha":"(+)","Purva Phalguni":"-+ ","Uttara Phalguni":"-","Hasta":"-","Chitra":"-","Swati":"-+ ","Vishakha":"(+)","Anuradha":"(+)","Jyeshtha":"-+ ","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"(+)","Dhanishta":"(+)","Shatabhisha":"-+ ","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-"},"Chitra":{"Ashwini":"-","Bharani":"-+ ","Krittika":"(+)","Rohini":"(+)","Mrigashira":"-+ ","Ardra":"-","Punarvasu":"-","Pushya":"-","Ashlesha":"-+ ","Magha":"(+)","Purva Phalguni":"(+)","Uttara Phalguni":"-+ ","Hasta":"-","Chitra":"-","Swati":"-","Vishakha":"-+ ","Anuradha":"(+)","Jyeshtha":"(+)","Mula":"-+ ","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"-+ ","Dhanishta":"(+)","Shatabhisha":"(+)","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"-","Revati":"-"},"Swati":{"Ashwini":"-","Bharani":"-","Krittika":"-+ ","Rohini":"(+)","Mrigashira":"(+)","Ardra":"-+ ","Punarvasu":"-","Pushya":"-","Ashlesha":"-","Magha":"-+ ","Purva Phalguni":"(+)","Uttara Phalguni":"(+)", "Hasta":"-+ ","Chitra":"-","Swati":"-","Vishakha":"-","Anuradha":"-+ ","Jyeshtha":"(+)","Mula":"(+)","Purva Ashadha":"-+ ","Uttara Ashadha":"-","Shravana":"-","Dhanishta":"-+ ","Shatabhisha":"(+)","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"-+ ","Revati":"-"},"Vishakha":{"Ashwini":"-","Bharani":"-","Krittika":"-","Rohini":"-+ ","Mrigashira":"(+)","Ardra":"(+)","Punarvasu":"-+ ","Pushya":"-","Ashlesha":"-","Magha":"-","Purva Phalguni":"-+ ","Uttara Phalguni":"(+)","Hasta":"(+)","Chitra":"-+ ","Swati":"-","Vishakha":"-","Anuradha":"-","Jyeshtha":"-+ ","Mula":"(+)","Purva Ashadha":"(+)","Uttara Ashadha":"-+ ","Shravana":"-","Dhanishta":"-","Shatabhisha":"-+ ","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"(+)","Revati":"-+"},"Anuradha":{"Ashwini":"-+ ","Bharani":"-","Krittika":"-","Rohini":"-","Mrigashira":"-+ ","Ardra":"(+)","Punarvasu":"(+)","Pushya":"-+ ","Ashlesha":"-","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-+ ","Hasta":"(+)","Chitra":"(+)","Swati":"-+ ","Vishakha":"-","Anuradha":"-","Jyeshtha":"-","Mula":"-+ ","Purva Ashadha":"(+)","Uttara Ashadha":"(+)","Shravana":"-","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"(+)","Revati":"(+)"},"Jyeshtha":{"Ashwini":"(+)","Bharani":"-+ ","Krittika":"-","Rohini":"-","Mrigashira":"-","Ardra":"-+ ","Punarvasu":"(+)","Pushya":"(+)","Ashlesha":"-+ ","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-+ ","Chitra":"(+)","Swati":"(+)","Vishakha":"-+ ","Anuradha":"-","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-+ ","Uttara Ashadha":"(+)","Shravana":"-+ ","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-+ ","Revati":"(+)"},"Mula":{"Ashwini":"(+)","Bharani":"(+)","Krittika":"-+ ","Rohini":"-","Mrigashira":"-","Ardra":"-","Punarvasu":"-+ ","Pushya":"(+)","Ashlesha":"(+)","Magha":"-+ ","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-","Chitra":"-+ ","Swati":"(+)","Vishakha":"(+)","Anuradha":"-+ ","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-+ ","Shravana":"(+)","Dhanishta":"-+ ","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-+"},"Purva Ashadha":{"Ashwini":"-+ ","Bharani":"(+)","Krittika":"(+)","Rohini":"-+ ","Mrigashira":"-","Ardra":"-","Punarvasu":"-","Pushya":"-+ ","Ashlesha":"(+)","Magha":"(+)","Purva Phalguni":"-+ ","Uttara Phalguni":"-","Hasta":"-","Chitra":"-","Swati":"-+ ","Vishakha":"(+)","Anuradha":"(+)","Jyeshtha":"-+ ","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"(+)","Dhanishta":"(+)","Shatabhisha":"-+ ","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-"},"Uttara Ashadha":{"Ashwini":"-","Bharani":"-+ ","Krittika":"(+)","Rohini":"(+)","Mrigashira":"-+ ","Ardra":"-","Punarvasu":"-","Pushya":"-","Ashlesha":"-+ ","Magha":"(+)","Purva Phalguni":"(+)","Uttara Phalguni":"-+ ","Hasta":"-","Chitra":"-","Swati":"-","Vishakha":"-+ ","Anuradha":"(+)","Jyeshtha":"(+)","Mula":"-+ ","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"-+ ","Dhanishta":"(+)","Shatabhisha":"(+)","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"-","Revati":"-"},"Shravana":{"Ashwini":"-","Bharani":"-","Krittika":"-","Rohini":"-+ ","Mrigashira":"(+)","Ardra":"(+)","Punarvasu":"-+ ","Pushya":"-","Ashlesha":"-","Magha":"-","Purva Phalguni":"-+ ","Uttara Phalguni":"(+)","Hasta":"(+)","Chitra":"-+ ","Swati":"-","Vishakha":"-","Anuradha":"-","Jyeshtha":"-+ ","Mula":"(+)","Purva Ashadha":"(+)","Uttara Ashadha":"-+ ","Shravana":"-","Dhanishta":"-","Shatabhisha":"-+ ","Purva Bhadrapada":"(+)","Uttara Bhadrapada":"(+)","Revati":"-+"},"Dhanishta":{"Ashwini":"-+ ","Bharani":"-","Krittika":"-","Rohini":"-","Mrigashira":"-+ ","Ardra":"(+)","Punarvasu":"(+)","Pushya":"-+ ","Ashlesha":"-","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-+ ","Hasta":"(+)","Chitra":"(+)","Swati":"-+ ","Vishakha":"-","Anuradha":"-","Jyeshtha":"-","Mula":"-+ ","Purva Ashadha":"(+)","Uttara Ashadha":"(+)","Shravana":"-","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"(+)","Revati":"(+)"},"Shatabhisha":{"Ashwini":"(+)","Bharani":"-+ ","Krittika":"-","Rohini":"-","Mrigashira":"-","Ardra":"-+ ","Punarvasu":"(+)","Pushya":"(+)", "Ashlesha":"-+ ","Magha":"-","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-+ ","Chitra":"(+)","Swati":"(+)","Vishakha":"-+ ","Anuradha":"-","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-+ ","Uttara Ashadha":"(+)","Shravana":"-+ ","Dhanishta":"-","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-+ ","Revati":"(+)"},"Purva Bhadrapada":{"Ashwini":"(+)","Bharani":"(+)","Krittika":"-+ ","Rohini":"-","Mrigashira":"-","Ardra":"-","Punarvasu":"-+ ","Pushya":"(+)","Ashlesha":"(+)","Magha":"-+ ","Purva Phalguni":"-","Uttara Phalguni":"-","Hasta":"-","Chitra":"-+ ","Swati":"(+)","Vishakha":"(+)","Anuradha":"-+ ","Jyeshtha":"-","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-+ ","Shravana":"(+)","Dhanishta":"-+ ","Shatabhisha":"-","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-+"},"Uttara Bhadrapada":{"Ashwini":"-+ ","Bharani":"(+)","Krittika":"(+)","Rohini":"-+ ","Mrigashira":"-","Ardra":"-","Punarvasu":"-","Pushya":"-+ ","Ashlesha":"(+)","Magha":"(+)","Purva Phalguni":"-+ ","Uttara Phalguni":"-","Hasta":"-","Chitra":"-","Swati":"-+ ","Vishakha":"(+)","Anuradha":"(+)","Jyeshtha":"-+ ","Mula":"-","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"(+)", "Dhanishta":"(+)","Shatabhisha":"-+ ","Purva Bhadrapada":"-","Uttara Bhadrapada":"-","Revati":"-"},"Revati":{"Ashwini":"-","Bharani":"-+ ","Krittika":"(+)","Rohini":"(+)","Mrigashira":"-+ ","Ardra":"-","Punarvasu":"-","Pushya":"-","Ashlesha":"-+ ","Magha":"(+)","Purva Phalguni":"(+)","Uttara Phalguni":"-+ ","Hasta":"-","Chitra":"-","Swati":"-","Vishakha":"-+ ","Anuradha":"(+)", "Jyeshtha":"(+)","Mula":"-+ ","Purva Ashadha":"-","Uttara Ashadha":"-","Shravana":"-+ ","Dhanishta":"(+)","Shatabhisha":"(+)","Purva Bhadrapada":"-+ ","Uttara Bhadrapada":"-","Revati":"-"}};
// --- EVENT LISTENERS ---
panchangaUpload.addEventListener('change', handleFileSelect); clientsUpload.addEventListener('change', handleFileSelect); clientSelector.addEventListener('change', updateCalendar); yearSelector.addEventListener('change', updateCalendar); monthSelector.addEventListener('change', updateCalendar);
// --- FUNÇÕES DE SETUP ---
function handleFileSelect(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = (e) => {
try {
const data = JSON.parse(e.target.result);
if(event.target.id === 'panchanga-upload') { panchangaData = data; clientsUpload.disabled = false; populateSelectors(); }
else { clientsData = data; populateClientSelector(); }
updateCalendar();
} catch (err) { alert("Erro ao processar o arquivo JSON: " + err.message); }
};
reader.readAsText(file);
}
function populateSelectors() {
const years = [...new Set(panchangaData.map(d => parseDate(d.Data)?.getUTCFullYear()).filter(y => y))].sort();
yearSelector.innerHTML = years.map(y => `<option value="${y}">${y}</option>`).join('');
const months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
monthSelector.innerHTML = months.map((m, i) => `<option value="${i}">${m}</option>`).join('');
const today = new Date();
yearSelector.value = today.getFullYear(); monthSelector.value = today.getMonth();
yearSelector.disabled = false; monthSelector.disabled = false;
}
function populateClientSelector() {
clientSelector.innerHTML = '<option value="">Selecione...</option>';
clientsData.filter(client => client.Nome).forEach(client => { clientSelector.innerHTML += `<option value="${client.ID}">${client.Nome}</option>`; });
clientSelector.disabled = false;
}
function updateCalendar() {
const clientId = parseInt(clientSelector.value);
selectedClient = clientsData.find(c => c.ID === clientId) || null;
renderCalendar();
}
// --- FUNÇÕES DE LÓGICA ---
function parseDate(dateStr) {
const parts = dateStr.split('/');
if (parts.length !== 3) return null;
const day = parseInt(parts[0], 10), month = parseInt(parts[1], 10) - 1; let year = parseInt(parts[2], 10);
if (year < 100) year += 2000;
return new Date(Date.UTC(year, month, day));
}
function getPlanetClass(planetName) {
if (['Júpiter', 'Vênus'].includes(planetName)) return 'good';
if (['Sol', 'Marte', 'Saturno', 'Rahu', 'Ketu'].includes(planetName)) return 'bad';
return 'neutral';
}
function calculateLordships(ascendantSign) {
if (!ascendantSign || !ZODIAC_ORDER.includes(ascendantSign)) return {};
const ascendantIndex = ZODIAC_ORDER.indexOf(ascendantSign);
const planetLordships = {};
for (let i = 0; i < 12; i++) {
const houseNumber = i + 1, houseSign = ZODIAC_ORDER[(ascendantIndex + i) % 12], rulers = SIGN_RULERS[houseSign] || [];
rulers.forEach(ruler => {
if (!planetLordships[ruler]) planetLordships[ruler] = [];
planetLordships[ruler].push(houseNumber === 1 ? 'LL' : `${houseNumber}L`);
});
}
return planetLordships;
}
// --- RENDERIZAÇÃO ---
function renderCalendar() {
if (panchangaData.length === 0) return;
const year = parseInt(yearSelector.value), month = parseInt(monthSelector.value);
if(isNaN(year) || isNaN(month)) return;
const clientLordships = selectedClient ? calculateLordships(selectedClient.Ascendente) : {};
calendarContainer.innerHTML = '';
const weekDays = ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"];
weekDays.forEach(day => { calendarContainer.innerHTML += `<div class="calendar-header">${day}</div>`; });
const firstDayOfMonth = new Date(Date.UTC(year, month, 1));
const startingDay = firstDayOfMonth.getUTCDay();
const daysInMonth = new Date(year, month + 1, 0).getUTCDate();
const totalGridCells = Math.ceil((startingDay + daysInMonth) / 7) * 7;
const gridStartDate = new Date(firstDayOfMonth);
gridStartDate.setUTCDate(gridStartDate.getUTCDate() - startingDay);
// --- PASSO 2: Lógica da Fase da Lua Corrigida ---
let isWaxing = true; // Assumimos que começa crescente
// Encontrar a fase inicial do mês
const firstDayData = panchangaData.find(d => {
const dDate = parseDate(d.Data);
return dDate && dDate.getUTCFullYear() === year && dDate.getUTCMonth() === month && dDate.getUTCDate() === 1;
});
if (firstDayData && firstDayData.Tithi.toLowerCase().includes('krishna')) {
isWaxing = false; // Se o primeiro dia já é minguante
}
for (let i = 0; i < totalGridCells; i++) {
const currentDate = new Date(gridStartDate);
currentDate.setUTCDate(currentDate.getUTCDate() + i);
const dayCell = document.createElement('div');
dayCell.classList.add('calendar-day');
const localToday = new Date();
const todayUTC = new Date(Date.UTC(localToday.getFullYear(), localToday.getMonth(), localToday.getDate()));
if (currentDate.getUTCMonth() !== month) dayCell.classList.add('other-month');
if (currentDate.getTime() === todayUTC.getTime()) dayCell.classList.add('current-day');
const day = currentDate.getUTCDate();
const dateString = `${String(day).padStart(2, '0')}/${String(currentDate.getUTCMonth() + 1).padStart(2, '0')}/${String(currentDate.getUTCFullYear()).slice(-2)}`;
const dayData = panchangaData.find(d => d.Data === dateString);
let headerHtml = '', contentHtml = '';
if (dayData) {
const dailyNakshatra = dayData.Nakshatra || '...';
const tithi = dayData.Tithi || '...';
const tithiLower = tithi.toLowerCase();
// Atualiza a fase da lua para os dias seguintes
if (tithiLower.includes('amavasya')) isWaxing = true;
if (tithiLower.includes('purnima')) isWaxing = false;
const moonPhaseIcon = isWaxing ? '🌕' : '🌑';
let vedhaClass = '';
let taraQualityClass = '';
let taraBalaHtml = '';
let moonHouseHtml = '';
if (selectedClient && selectedClient.Lua && dailyNakshatra) {
const vedhaStatus = (VEDHA_MATRIX[selectedClient.Lua]?.[dailyNakshatra] || '').trim();
if (vedhaStatus === '(+)') vedhaClass = 'vedha-plus';
else if (vedhaStatus === '-+') vedhaClass = 'vedha-special';
else if (vedhaStatus === '-') vedhaClass = 'vedha-minus';
const clientMoonIndex = NAKSHATRA_ORDER.indexOf(selectedClient.Lua);
const dailyNakshatraIndex = NAKSHATRA_ORDER.indexOf(dailyNakshatra);
if (clientMoonIndex > -1 && dailyNakshatraIndex > -1) {
const distance = (dailyNakshatraIndex - clientMoonIndex + 27) % 27;
const tara = TARA_BALA[distance % 9];
taraQualityClass = tara.quality === 'Bom' ? 'good' : 'bad';
taraBalaHtml = `<div class="tara-bala ${taraQualityClass}">(${distance + 1}) ${tara.name}</div>`;
}
}
if (selectedClient && selectedClient.Ascendente && dailyNakshatra && WHOLE_SIGN_NAKSHATRAS.includes(dailyNakshatra)) {
const ascendantSign = selectedClient.Ascendente;
const moonSign = NAKSHATRA_TO_SIGN[dailyNakshatra];
const ascendantIndex = ZODIAC_ORDER.indexOf(ascendantSign);
const moonSignIndex = ZODIAC_ORDER.indexOf(moonSign);
if (ascendantIndex > -1 && moonSignIndex > -1) {
const houseNumber = (moonSignIndex - ascendantIndex + 12) % 12 + 1;
let houseClass = [6, 8, 12].includes(houseNumber) ? 'bad-house' : '';
moonHouseHtml = `<div class="moon-house-container"><div class="header-divider"></div><div class="moon-house ${houseClass}">Lua na Casa ${houseNumber} (${moonSign})</div></div>`;
}
}
if (vedhaClass === 'vedha-plus' && taraQualityClass === 'good') {
dayCell.classList.add('card-good');
} else if (vedhaClass === 'vedha-minus' && taraQualityClass === 'bad') {
dayCell.classList.add('card-bad');
}
headerHtml = `
<div class="card-header">
<div class="header-col-left">
<div class="day-number">${day}</div>
</div>
<div class="header-col-right">
<div class="day-nakshatra ${vedhaClass}">${dailyNakshatra}</div>
${taraBalaHtml}
<div class="day-tithi">${moonPhaseIcon} ${tithi}</div>
${moonHouseHtml}
</div>
</div>`;
let clientAnalysisHtml = '', dailyInfoHtml = '', warningSectionHtml = '';
if (selectedClient && dailyNakshatra) {
let analysisItems = [];
const natalActivations = [], dailyActivations = [];
const allNatalPoints = [...ALL_PLANETS, ...GOOD_POINTS, ...BAD_POINTS];
allNatalPoints.forEach(p => {
if(selectedClient[p] === dailyNakshatra) {
const lordships = clientLordships[p] ? ` (${clientLordships[p].join(', ')})` : '';
const pointClass = ALL_PLANETS.includes(p) ? getPlanetClass(p) : (GOOD_POINTS.includes(p) ? 'good' : 'bad');
natalActivations.push(`<span class="item-tag ${pointClass}">${p}${lordships}</span>`);
}
});
ALL_PLANETS.forEach(p => {
if(dayData[p] === dailyNakshatra) {
const lordships = clientLordships[p] ? ` (${clientLordships[p].join(', ')})` : '';
dailyActivations.push(`<span class="item-tag ${getPlanetClass(p)}">${p}${lordships}</span>`);
}
});
if(natalActivations.length > 0) analysisItems.push(`<div><b>Natais:</b> <div class="tags-container">${natalActivations.join('')}</div></div>`);
if(dailyActivations.length > 0) analysisItems.push(`<div><b>Diários:</b> <div class="tags-container">${dailyActivations.join('')}</div></div>`);
if(analysisItems.length > 0) clientAnalysisHtml = `<div class="content-section"><div class="title">Ativações em ${dailyNakshatra}</div>${analysisItems.join('')}</div>`;
const burnedSigns = DAGDHA_RASHI_MAP[tithiLower];
if(burnedSigns && selectedClient.Ascendente) {
const ascIndex = ZODIAC_ORDER.indexOf(selectedClient.Ascendente);
const burnedHouses = burnedSigns.map(sign => (ZODIAC_ORDER.indexOf(sign) - ascIndex + 12) % 12 + 1).sort((a,b) => a-b);
const houseText = burnedHouses.map(h => `${h}ª`).join(' e ');
warningSectionHtml = `<div class="dagdha-warning">Cuidado com a ${houseText} casa</div>`;
}
}
dailyInfoHtml = `<div class="content-section"><div class="title">Panchanga</div><div class="panchanga-details"><div><b>Yoga:</b> ${dayData.Yoga || ''}</div><div><b>Karana:</b> ${dayData.Karana || ''}</div></div></div>`;
contentHtml = dailyInfoHtml + clientAnalysisHtml + warningSectionHtml;
} else {
headerHtml = `<div class="card-header"><div class="header-col-left"><div class="day-number">${day}</div></div></div>`;
}
dayCell.innerHTML = `${headerHtml}<div class="card-content">${contentHtml}</div>`;
calendarContainer.appendChild(dayCell);
}
}
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ppcabral/teste" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>