| <!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; |
| --color-bad: #F44336; |
| --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); |
| --color-bad-bg: rgba(244, 67, 54, 0.3); |
| } |
| |
| 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); |
| } |
| |
| |
| .card-header { |
| display: flex; |
| 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; |
| font-weight: 700; |
| line-height: 1; |
| } |
| |
| .header-col-right { |
| text-align: right; |
| display: flex; |
| flex-direction: column; |
| align-items: flex-end; |
| } |
| |
| .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; |
| 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%; |
| 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() { |
| |
| 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; |
| |
| |
| 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":"-"}}; |
| |
| |
| panchangaUpload.addEventListener('change', handleFileSelect); clientsUpload.addEventListener('change', handleFileSelect); clientSelector.addEventListener('change', updateCalendar); yearSelector.addEventListener('change', updateCalendar); monthSelector.addEventListener('change', updateCalendar); |
| |
| |
| 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(); |
| } |
| |
| |
| 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; |
| } |
| |
| |
| 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); |
| |
| |
| let isWaxing = true; |
| |
| 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; |
| } |
| |
| 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(); |
| |
| |
| 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> |