@openephemeris/mcp-server 3.13.10 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +6 -6
  3. package/dist/index.js +5 -43
  4. package/dist/oauth/discovery.d.ts +1 -0
  5. package/dist/oauth/discovery.js +8 -3
  6. package/dist/oauth/store.d.ts +20 -0
  7. package/dist/oauth/store.js +117 -3
  8. package/dist/oauth/token.js +4 -2
  9. package/dist/prompts.js +25 -16
  10. package/dist/server-sse.js +136 -78
  11. package/dist/tools/apps/bazi-app.js +2 -0
  12. package/dist/tools/apps/bi-wheel-app.js +65 -7
  13. package/dist/tools/apps/bodygraph-app.js +85 -11
  14. package/dist/tools/apps/chart-wheel-app.js +80 -7
  15. package/dist/tools/apps/location-tools.js +41 -5
  16. package/dist/tools/apps/moon-phase-app.js +82 -22
  17. package/dist/tools/apps/transit-timeline-app.js +75 -23
  18. package/dist/tools/apps/vedic-chart-app.js +2 -0
  19. package/dist/tools/auth.js +4 -0
  20. package/dist/tools/dev.js +104 -67
  21. package/dist/tools/index.d.ts +16 -0
  22. package/dist/tools/index.js +23 -8
  23. package/dist/tools/output-schemas.d.ts +37 -0
  24. package/dist/tools/output-schemas.js +130 -0
  25. package/dist/tools/specialized/acg.js +3 -0
  26. package/dist/tools/specialized/bazi.js +14 -6
  27. package/dist/tools/specialized/bi_wheel.js +5 -2
  28. package/dist/tools/specialized/chart_wheel.js +5 -2
  29. package/dist/tools/specialized/comparative.js +7 -2
  30. package/dist/tools/specialized/eclipse.js +2 -0
  31. package/dist/tools/specialized/electional.js +5 -0
  32. package/dist/tools/specialized/ephemeris_core.js +3 -0
  33. package/dist/tools/specialized/ephemeris_extended.js +9 -0
  34. package/dist/tools/specialized/hd_bodygraph.js +6 -3
  35. package/dist/tools/specialized/hd_cycles.js +3 -0
  36. package/dist/tools/specialized/hd_group.js +3 -0
  37. package/dist/tools/specialized/human_design.js +2 -0
  38. package/dist/tools/specialized/moon.js +3 -0
  39. package/dist/tools/specialized/natal.js +2 -0
  40. package/dist/tools/specialized/progressed.js +2 -0
  41. package/dist/tools/specialized/relocation.js +2 -0
  42. package/dist/tools/specialized/returns.js +4 -0
  43. package/dist/tools/specialized/synastry.js +2 -0
  44. package/dist/tools/specialized/transits.js +52 -43
  45. package/dist/tools/specialized/vedic.js +2 -0
  46. package/dist/tools/specialized/venus_star_points.js +7 -0
  47. package/dist/ui/bazi.html +22 -22
  48. package/dist/ui/bodygraph.html +1981 -1904
  49. package/dist/ui/chart-wheel.html +3148 -2806
  50. package/dist/ui/vedic-chart.html +22 -22
  51. package/package.json +18 -11
  52. package/smithery.yaml +16 -1
  53. package/dist/ui/bi-wheel.html +0 -7485
  54. package/dist/ui/moon-phase.html +0 -6758
  55. package/dist/ui/transit-timeline.html +0 -6835
@@ -1,26 +1,26 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <meta name="color-scheme" content="dark light" />
7
- <title>Vedic Jyotish Chart</title>
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <title>Vedic Jyotish Chart</title>
8
8
 
9
9
 
10
- <style>*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary:#05070c;--bg-secondary:#0d1219;--bg-tertiary:#171d26;--bg-hover:#222935;--border:#2c333e;--border-subtle:#1b1f27;--text-primary:#e1e5eb;--text-secondary:#979fab;--text-muted:#646972;--gold:#eaab05;--gold-dim:#aa7e1a;--gold-glow:rgba(234,171,5,.25);--gold-subtle:rgba(234,171,5,.08);--planet-sun:#ffa837;--planet-moon:#a1cae8;--planet-mercury:#6ec272;--planet-venus:#f18ac1;--planet-mars:#fc5855;--planet-jupiter:#eaab05;--planet-saturn:#8fa6cb;--planet-rahu:#8186d7;--planet-ketu:#da8659;--dignity-exalted:#eaab05;--dignity-debilitated:#f3625d;--dignity-own:#6ec272;--radius:6px;--radius-sm:3px;--radius-lg:10px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg-primary:color(display-p3 .0216652 .0286234 .0452973);--bg-secondary:color(display-p3 .0560261 .0691379 .0946654);--bg-tertiary:color(display-p3 .096217 .113655 .147573);--bg-hover:color(display-p3 .137776 .160653 .2052);--border:color(display-p3 .178937 .199903 .240355);--border-subtle:color(display-p3 .108709 .122909 .150282);--text-primary:color(display-p3 .883958 .896627 .920543);--text-secondary:color(display-p3 .598684 .622198 .66685);--text-muted:color(display-p3 .39567 .412041 .443131);--gold:color(display-p3 .879508 .6816 .234703);--gold-dim:color(display-p3 .639817 .500341 .194357);--gold-glow:color(display-p3 .879508 .6816 .234703/.25);--gold-subtle:color(display-p3 .879508 .6816 .234703/.08);--planet-sun:color(display-p3 .979154 .659227 .21215);--planet-moon:color(display-p3 .664971 .787746 .896611);--planet-mercury:color(display-p3 .509102 .751692 .477144);--planet-venus:color(display-p3 .89124 .561977 .746576);--planet-mars:color(display-p3 .913707 .390639 .360361);--planet-jupiter:color(display-p3 .879508 .6816 .234703);--planet-saturn:color(display-p3 .57766 .647332 .78263);--planet-rahu:color(display-p3 .510127 .524428 .81989);--planet-ketu:color(display-p3 .810621 .541171 .382256);--dignity-exalted:color(display-p3 .879508 .6816 .234703);--dignity-debilitated:color(display-p3 .885816 .42028 .386667);--dignity-own:color(display-p3 .509102 .751692 .477144)}}@supports (color:lab(0% 0 0)){:root{--bg-primary:lab(1.96267% -.122614 -2.00764);--bg-secondary:lab(5.21286% -.326827 -5.10724);--bg-tertiary:lab(10.5893% -.558816 -7.26317);--bg-hover:lab(16.3655% -.679582 -9.07274);--border:lab(21.0274% -.743657 -8.03484);--border-subtle:lab(11.7732% -.55144 -5.84751);--text-primary:lab(90.6878% -.517368 -3.73452);--text-secondary:lab(65.1297% -.927329 -7.41251);--text-muted:lab(44.2672% -.694215 -5.55873);--gold:lab(74.5441% 15.4997 76.437);--gold-dim:lab(55.9871% 11.3091 55.5836);--gold-glow:lab(74.5441% 15.4997 76.437/.25);--gold-subtle:lab(74.5441% 15.4997 76.437/.08);--planet-sun:lab(76.3024% 31.6825 83.6057);--planet-moon:lab(79.1643% -8.79321 -19.3308);--planet-mercury:lab(71.5613% -39.2213 32.0347);--planet-venus:lab(70.2618% 44.9914 -10.5022);--planet-mars:lab(60.882% 63.057 37.6481);--planet-jupiter:lab(74.5441% 15.4997 76.437);--planet-saturn:lab(67.2517% -1.74686 -21.8131);--planet-rahu:lab(58.1033% 13.5385 -42.6181);--planet-ketu:lab(64.4827% 30.1677 38.2587);--dignity-exalted:lab(74.5441% 15.4997 76.437);--dignity-debilitated:lab(61.0965% 56.6147 33.1618);--dignity-own:lab(71.5613% -39.2213 32.0347)}}@media (prefers-color-scheme:light){:root{--bg-primary:#f3f5f8;--bg-secondary:#e5e8ed;--bg-tertiary:#d3d8e0;--bg-hover:#c4cbd7;--border:#b1b8c3;--border-subtle:#ccd1d9;--text-primary:#0b0d12;--text-secondary:#3d434c;--text-muted:#646971;--gold:#896100;--gold-dim:#6f4b00;--gold-glow:rgba(137,97,0,.2);--gold-subtle:rgba(137,97,0,.07);--planet-sun:#a45f00;--planet-moon:#1b5274;--planet-mercury:#006c15;--planet-venus:#a03273;--planet-mars:#bd001b;--planet-jupiter:#896100;--planet-saturn:#3f5374;--planet-rahu:#413e96;--planet-ketu:#964100;--dignity-exalted:#896100;--dignity-debilitated:#bd001b;--dignity-own:#006c15;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root{--bg-primary:color(display-p3 .955887 .961034 .970732);--bg-secondary:color(display-p3 .899196 .909367 .928554);--bg-tertiary:color(display-p3 .8304 .845419 .873798);--bg-hover:color(display-p3 .772896 .795102 .837167);--border:color(display-p3 .698201 .719987 .761278);--border-subtle:color(display-p3 .805005 .819937 .848152);--text-primary:color(display-p3 .0441372 .0521689 .0676233);--text-secondary:color(display-p3 .242812 .260856 .295362);--text-muted:color(display-p3 .396691 .411981 .440999);--gold:color(display-p3 .57038 .356834 -.203198);--gold-dim:color(display-p3 .442672 .285282 -.134595);--gold-glow:color(display-p3 .57038 .356834 -.203198/.2);--gold-subtle:color(display-p3 .57038 .356834 -.203198/.07);--planet-sun:color(display-p3 .652927 .351579 -.183632);--planet-moon:color(display-p3 .168375 .317534 .44376);--planet-mercury:color(display-p3 .148908 .420483 .120432);--planet-venus:color(display-p3 .579328 .227384 .442243);--planet-mars:color(display-p3 .694209 .0659429 .120262);--planet-jupiter:color(display-p3 .57038 .356834 -.203198);--planet-saturn:color(display-p3 .262684 .323159 .443709);--planet-rahu:color(display-p3 .254224 .245063 .569023);--planet-ketu:color(display-p3 .557919 .263616 .052663);--dignity-exalted:color(display-p3 .57038 .356834 -.203198);--dignity-debilitated:color(display-p3 .694209 .0659429 .120262);--dignity-own:color(display-p3 .148908 .420483 .120432)}}@supports (color:lab(0% 0 0)){:root{--bg-primary:lab(96.5076% -.214994 -1.49846);--bg-secondary:lab(91.8546% -.419319 -2.9907);--bg-tertiary:lab(86.0409% -.610828 -4.47587);--bg-hover:lab(81.3789% -.873804 -6.69111);--border:lab(74.4184% -.864774 -6.68644);--border-subtle:lab(83.7208% -.609636 -4.47524);--text-primary:lab(3.67543% -.212148 -2.43837);--text-secondary:lab(28.0109% -.729963 -6.62285);--text-muted:lab(44.2712% -.656128 -5.19227);--gold:lab(44.0736% 22.5353 118.781);--gold-dim:lab(34.8944% 16.8155 79.322);--gold-glow:lab(44.0736% 22.5353 118.781/.2);--gold-subtle:lab(44.0736% 22.5353 118.781/.07);--planet-sun:lab(47.0942% 34.9095 115.734);--planet-moon:lab(32.6468% -8.89629 -25.0579);--planet-mercury:lab(39.2064% -45.2416 40.6297);--planet-venus:lab(39.8088% 50.4598 -11.9132);--planet-mars:lab(39.7145% 70.0599 49.6254);--planet-jupiter:lab(44.0736% 22.5353 118.781);--planet-saturn:lab(34.713% -.692427 -21.5121);--planet-rahu:lab(30.7426% 21.8588 -48.9882);--planet-ketu:lab(38.7083% 37.2573 56.6234);--dignity-exalted:lab(44.0736% 22.5353 118.781);--dignity-debilitated:lab(39.7145% 70.0599 49.6254);--dignity-own:lab(39.2064% -45.2416 40.6297)}}}html,body{background:var(--bg-primary);width:100%;height:100%;color:var(--text-primary);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow:hidden}body{flex-direction:column;display:flex}#app{flex-direction:column;flex:1;display:flex;overflow:hidden}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}#loading-state[hidden]{display:none}.oe-loader{width:48px;height:48px;animation:1.4s linear infinite spin}.oe-loader circle{fill:none;stroke:var(--gold);stroke-width:3px;stroke-dasharray:200;stroke-dashoffset:80px;stroke-linecap:round}@keyframes spin{to{transform:rotate(360deg)}}.chart-status{background:var(--bg-secondary);border-top:1px solid var(--border-subtle);color:var(--text-muted);opacity:0;z-index:50;padding:6px 14px;font-size:11px;transition:opacity .2s,transform .2s;position:fixed;bottom:0;left:0;right:0;transform:translateY(100%)}.chart-status.visible{opacity:1;transform:translateY(0)}#vedic-container{flex-direction:column;flex:1;align-items:center;gap:12px;padding:12px;display:flex;overflow-y:auto}#vedic-container[hidden]{display:none}.vedic-header{justify-content:space-between;align-items:center;gap:8px;width:100%;max-width:540px;animation:.5s ease-out vedic-fade-in;display:flex}.vedic-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-size:12px;font-weight:700}.vedic-header-meta{align-items:center;gap:8px;display:flex}.vedic-ayanamsa-badge{border-radius:var(--radius-sm);background:var(--bg-tertiary);border:1px solid var(--border-subtle);color:var(--text-secondary);font-variant-numeric:tabular-nums;padding:2px 8px;font-size:10px;font-weight:600}.vedic-toggle-btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;padding:3px 8px;font-size:10px;font-weight:600;transition:background .15s,color .15s}.vedic-toggle-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.vedic-toggle-btn.active{border-color:var(--gold-dim);color:var(--gold);background:var(--gold-subtle)}.rashi-grid{aspect-ratio:1;border:1px solid var(--border);border-radius:var(--radius);width:min(100%,540px);box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px rgba(0,0,0,.3);grid-template-rows:repeat(4,1fr);grid-template-columns:repeat(4,1fr);animation:.6s ease-out vedic-fade-in;display:grid;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.rashi-grid{box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px color(display-p3 0 0 0/.3)}}@supports (color:lab(0% 0 0)){.rashi-grid{box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px lab(0% 0 0/.3)}}@keyframes vedic-fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.rashi-cell{background:var(--bg-secondary);border:1px solid var(--border-subtle);cursor:pointer;flex-direction:column;min-width:0;min-height:0;padding:4px 5px;transition:background .12s,box-shadow .12s;display:flex;position:relative;overflow:hidden}.rashi-cell.occupied:hover{background:var(--bg-hover);box-shadow:inset 0 0 0 1px var(--gold-glow), 0 0 12px var(--gold-glow);z-index:2}.rashi-cell.lagna{border-color:var(--gold-dim);background:#110d05;background:color(display-p3 .0641956 .0497811 .0230015);background:lab(3.71843% .818238 3.47664)}.rashi-cell.lagna:hover{box-shadow:inset 0 0 0 1px var(--gold), 0 0 18px var(--gold-glow)}.rashi-cell.center{background:var(--bg-primary);border-color:var(--border-subtle);cursor:default;text-align:center;justify-content:center;align-items:center;gap:2px}.rashi-cell.center:hover{background:var(--bg-primary);box-shadow:none}.cell-sign{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;font-size:9px;font-weight:700;line-height:1.2;overflow:hidden}.cell-sign-devanagari{color:var(--text-muted);flex-shrink:0;font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:10px;line-height:1.2;display:none}#vedic-container.show-devanagari .cell-sign-devanagari{display:block}#vedic-container.show-devanagari .cell-sign{display:none}.cell-top-row{flex-shrink:0;justify-content:space-between;align-items:baseline;gap:2px;min-width:0;display:flex}.cell-house-num{color:var(--text-muted);opacity:.5;font-variant-numeric:tabular-nums;flex-shrink:0;font-size:8px;font-weight:700;line-height:1}.rashi-cell.lagna .cell-house-num{color:var(--gold-dim);opacity:1}.cell-planets{flex-wrap:wrap;gap:2px;min-height:0;margin-top:auto;padding-top:2px;display:flex;overflow:hidden}.planet-badge{white-space:nowrap;font-variant-numeric:tabular-nums;background:rgba(0,0,0,.2);background:color(display-p3 0 0 0/.2);background:lab(0% 0 0/.2);border-radius:2px;padding:1px 3px;font-size:10px;font-weight:700;line-height:1}.planet-badge[data-planet=sun]{color:var(--planet-sun)}.planet-badge[data-planet=moon]{color:var(--planet-moon)}.planet-badge[data-planet=mercury]{color:var(--planet-mercury)}.planet-badge[data-planet=venus]{color:var(--planet-venus)}.planet-badge[data-planet=mars]{color:var(--planet-mars)}.planet-badge[data-planet=jupiter]{color:var(--planet-jupiter)}.planet-badge[data-planet=saturn]{color:var(--planet-saturn)}.planet-badge[data-planet=rahu]{color:var(--planet-rahu)}.planet-badge[data-planet=ketu]{color:var(--planet-ketu)}.planet-badge .retro{opacity:.75;font-size:8px}.planet-badge .dignity-ex{color:var(--dignity-exalted);font-size:7px}.planet-badge .dignity-db{color:var(--dignity-debilitated);font-size:7px}@media (max-width:420px){.planet-label-full{display:none}.planet-label-short{display:inline}}@media (min-width:421px){.planet-label-full{display:inline}.planet-label-short{display:none}}.lagna-diagonal{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.lagna-diagonal line{stroke:var(--gold);stroke-width:1.5px;stroke-linecap:round;opacity:.7}.center-label{text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);font-size:9px;font-weight:700}.center-ayanamsa{color:var(--gold-dim);font-family:JetBrains Mono,Fira Mono,ui-monospace,monospace;font-size:10px;font-weight:600}.center-lagna{color:var(--text-secondary);font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:11px;font-weight:700}.vedic-legend{flex-wrap:wrap;justify-content:center;gap:6px 12px;width:100%;max-width:540px;animation:.8s ease-out .2s both vedic-fade-in;display:flex}.legend-item{color:var(--text-muted);align-items:center;gap:4px;font-size:10px;display:flex}.legend-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.vedic-actions{flex-wrap:wrap;gap:6px;width:100%;max-width:540px;animation:.8s ease-out .3s both vedic-fade-in;display:flex}.action-btn{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;align-items:center;gap:4px;padding:7px 12px;font-size:11px;font-weight:600;transition:background .15s,color .15s,box-shadow .15s;display:inline-flex}.action-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.action-btn--primary{color:#cbdfff;color:color(display-p3 .811259 .873257 .992208);color:lab(88.2011% -1.89927 -18.3428);background:linear-gradient(135deg,#1d4587,#32326d);background:linear-gradient(135deg,color(display-p3 .153533 .2659 .511983),color(display-p3 .195291 .194916 .412031));background:linear-gradient(135deg,lab(29.3399% 5.63866 -42.0206),lab(23.3003% 14.2058 -35.0966));border-color:#33548c;border-color:color(display-p3 .229049 .327581 .533696);border-color:lab(35.4848% 1.84765 -35.3079)}.action-btn--primary:hover{background:linear-gradient(135deg,#2151a1,#3d3c86);background:linear-gradient(135deg,color(display-p3 .180134 .31482 .611657),color(display-p3 .239239 .236673 .50744));background:linear-gradient(135deg,lab(34.9279% 7.15981 -48.9835),lab(28.8006% 17.5515 -42.0715));box-shadow:0 2px 12px rgba(29,69,135,.3);box-shadow:0 2px 12px color(display-p3 .153533 .2659 .511983/.3);box-shadow:0 2px 12px lab(29.3399% 5.63866 -42.0206/.3)}.vedic-drawer-overlay{z-index:60;opacity:0;background:rgba(0,0,0,.45);background:color(display-p3 0 0 0/.45);background:lab(0% 0 0/.45);transition:opacity .2s;position:fixed;top:0;bottom:0;left:0;right:0}.vedic-drawer-overlay.visible{opacity:1}.vedic-drawer{background:var(--bg-secondary);border-top:1px solid var(--border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;z-index:61;max-height:65vh;padding:16px;transition:transform .25s ease-out;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;transform:translateY(100%)}.vedic-drawer.visible{transform:translateY(0)}.drawer-handle{background:var(--border);border-radius:2px;width:36px;height:4px;margin:0 auto 14px}.drawer-sign-title{align-items:center;gap:8px;margin-bottom:4px;font-size:16px;font-weight:700;display:flex}.drawer-sign-devanagari{color:var(--text-secondary);font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:14px;font-weight:400}.drawer-sign-element{border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;font-size:10px;font-weight:600}.drawer-section{margin-top:14px}.drawer-section-title{text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin-bottom:8px;font-size:10px;font-weight:700}.drawer-planet-row{background:var(--bg-tertiary);border-radius:var(--radius-sm);align-items:flex-start;gap:10px;margin-bottom:5px;padding:8px 10px;display:flex}.drawer-planet-abbr{min-width:22px;font-size:14px;font-weight:700}.drawer-planet-info{flex-direction:column;flex:1;gap:1px;display:flex}.drawer-planet-name{color:var(--text-primary);font-size:12px;font-weight:600}.drawer-planet-meta{color:var(--text-secondary);font-size:11px}.drawer-planet-nakshatra{color:var(--text-muted);font-size:10px}.drawer-planet-dignity{border-radius:10px;align-self:center;margin-left:auto;padding:1px 5px;font-size:9px;font-weight:700}.drawer-planet-dignity.exalted{background:var(--gold-subtle);color:var(--gold)}.drawer-planet-dignity.debilitated{color:var(--planet-mars);background:rgba(243,98,93,.12);background:color(display-p3 .885816 .42028 .386667/.12);background:lab(61.0965% 56.6147 33.1618/.12)}.drawer-planet-dignity.own{color:var(--planet-mercury);background:rgba(110,194,114,.1);background:color(display-p3 .509102 .751692 .477144/.1);background:lab(71.5613% -39.2213 32.0347/.1)}.error-state,.empty-state{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:32px;display:flex}.error-icon,.empty-icon{font-size:32px}.tooltip{z-index:100;border-radius:var(--radius-sm);background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-primary);pointer-events:none;opacity:0;white-space:pre-line;max-width:220px;padding:5px 9px;font-size:11px;transition:opacity .15s;position:fixed}.tooltip.visible{opacity:1}@media (max-width:360px){.cell-sign{font-size:7px}.planet-badge{padding:1px 2px;font-size:8px}#vedic-container{gap:8px;padding:8px}.vedic-legend{display:none}}@media (max-width:420px){.cell-sign{font-size:8px}.center-ayanamsa{font-size:9px}}.chart-layer{opacity:0;transform-origin:310px 310px;will-change:opacity, transform;transform:scale(.98)translateZ(0)}#chart-container.chart-visible .chart-layer{animation:.6s cubic-bezier(.16,1,.3,1) forwards svgLayerAssemble;animation-delay:calc(var(--layer-index,1) * .1s + .1s)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.floating-action-btn:after{content:"";background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);width:50%;height:100%;animation:3s 2s infinite shimmer;position:absolute;top:0;left:-100%;transform:skew(-20deg)}@keyframes shimmer{0%{left:-100%}20%{left:200%}to{left:200%}}@keyframes slideUpFadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpFadeInPanel{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}
10
+ <style>*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg-primary:#05070c;--bg-secondary:#0d1219;--bg-tertiary:#171d26;--bg-hover:#222935;--border:#2c333e;--border-subtle:#1b1f27;--text-primary:#e1e5eb;--text-secondary:#979fab;--text-muted:#646972;--gold:#eaab05;--gold-dim:#aa7e1a;--gold-glow:rgba(234,171,5,.25);--gold-subtle:rgba(234,171,5,.08);--planet-sun:#ffa837;--planet-moon:#a1cae8;--planet-mercury:#6ec272;--planet-venus:#f18ac1;--planet-mars:#fc5855;--planet-jupiter:#eaab05;--planet-saturn:#8fa6cb;--planet-rahu:#8186d7;--planet-ketu:#da8659;--dignity-exalted:#eaab05;--dignity-debilitated:#f3625d;--dignity-own:#6ec272;--radius:6px;--radius-sm:3px;--radius-lg:10px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@supports (color:color(display-p3 0 0 0)){:root{--bg-primary:color(display-p3 .0216652 .0286234 .0452973);--bg-secondary:color(display-p3 .0560261 .0691379 .0946654);--bg-tertiary:color(display-p3 .096217 .113655 .147573);--bg-hover:color(display-p3 .137776 .160653 .2052);--border:color(display-p3 .178937 .199903 .240355);--border-subtle:color(display-p3 .108709 .122909 .150282);--text-primary:color(display-p3 .883958 .896627 .920543);--text-secondary:color(display-p3 .598684 .622198 .66685);--text-muted:color(display-p3 .39567 .412041 .443131);--gold:color(display-p3 .879508 .6816 .234703);--gold-dim:color(display-p3 .639817 .500341 .194357);--gold-glow:color(display-p3 .879508 .6816 .234703/.25);--gold-subtle:color(display-p3 .879508 .6816 .234703/.08);--planet-sun:color(display-p3 .979154 .659227 .21215);--planet-moon:color(display-p3 .664971 .787746 .896611);--planet-mercury:color(display-p3 .509102 .751692 .477144);--planet-venus:color(display-p3 .89124 .561977 .746576);--planet-mars:color(display-p3 .913707 .390639 .360361);--planet-jupiter:color(display-p3 .879508 .6816 .234703);--planet-saturn:color(display-p3 .57766 .647332 .78263);--planet-rahu:color(display-p3 .510127 .524428 .81989);--planet-ketu:color(display-p3 .810621 .541171 .382256);--dignity-exalted:color(display-p3 .879508 .6816 .234703);--dignity-debilitated:color(display-p3 .885816 .42028 .386667);--dignity-own:color(display-p3 .509102 .751692 .477144)}}@supports (color:lab(0% 0 0)){:root{--bg-primary:lab(1.96267% -.122614 -2.00764);--bg-secondary:lab(5.21286% -.326827 -5.10724);--bg-tertiary:lab(10.5893% -.558816 -7.26317);--bg-hover:lab(16.3655% -.679582 -9.07274);--border:lab(21.0274% -.743657 -8.03484);--border-subtle:lab(11.7732% -.55144 -5.84751);--text-primary:lab(90.6878% -.517368 -3.73452);--text-secondary:lab(65.1297% -.927329 -7.41251);--text-muted:lab(44.2672% -.694215 -5.55873);--gold:lab(74.5441% 15.4997 76.437);--gold-dim:lab(55.9871% 11.3091 55.5836);--gold-glow:lab(74.5441% 15.4997 76.437/.25);--gold-subtle:lab(74.5441% 15.4997 76.437/.08);--planet-sun:lab(76.3024% 31.6825 83.6057);--planet-moon:lab(79.1643% -8.79321 -19.3308);--planet-mercury:lab(71.5613% -39.2213 32.0347);--planet-venus:lab(70.2618% 44.9914 -10.5022);--planet-mars:lab(60.882% 63.057 37.6481);--planet-jupiter:lab(74.5441% 15.4997 76.437);--planet-saturn:lab(67.2517% -1.74686 -21.8131);--planet-rahu:lab(58.1033% 13.5385 -42.6181);--planet-ketu:lab(64.4827% 30.1677 38.2587);--dignity-exalted:lab(74.5441% 15.4997 76.437);--dignity-debilitated:lab(61.0965% 56.6147 33.1618);--dignity-own:lab(71.5613% -39.2213 32.0347)}}@media (prefers-color-scheme:light){:root{--bg-primary:#f3f5f8;--bg-secondary:#e5e8ed;--bg-tertiary:#d3d8e0;--bg-hover:#c4cbd7;--border:#b1b8c3;--border-subtle:#ccd1d9;--text-primary:#0b0d12;--text-secondary:#3d434c;--text-muted:#646971;--gold:#896100;--gold-dim:#6f4b00;--gold-glow:rgba(137,97,0,.2);--gold-subtle:rgba(137,97,0,.07);--planet-sun:#a45f00;--planet-moon:#1b5274;--planet-mercury:#006c15;--planet-venus:#a03273;--planet-mars:#bd001b;--planet-jupiter:#896100;--planet-saturn:#3f5374;--planet-rahu:#413e96;--planet-ketu:#964100;--dignity-exalted:#896100;--dignity-debilitated:#bd001b;--dignity-own:#006c15;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@supports (color:color(display-p3 0 0 0)){:root{--bg-primary:color(display-p3 .955887 .961034 .970732);--bg-secondary:color(display-p3 .899196 .909367 .928554);--bg-tertiary:color(display-p3 .8304 .845419 .873798);--bg-hover:color(display-p3 .772896 .795102 .837167);--border:color(display-p3 .698201 .719987 .761278);--border-subtle:color(display-p3 .805005 .819937 .848152);--text-primary:color(display-p3 .0441372 .0521689 .0676233);--text-secondary:color(display-p3 .242812 .260856 .295362);--text-muted:color(display-p3 .396691 .411981 .440999);--gold:color(display-p3 .57038 .356834 -.203198);--gold-dim:color(display-p3 .442672 .285282 -.134595);--gold-glow:color(display-p3 .57038 .356834 -.203198/.2);--gold-subtle:color(display-p3 .57038 .356834 -.203198/.07);--planet-sun:color(display-p3 .652927 .351579 -.183632);--planet-moon:color(display-p3 .168375 .317534 .44376);--planet-mercury:color(display-p3 .148908 .420483 .120432);--planet-venus:color(display-p3 .579328 .227384 .442243);--planet-mars:color(display-p3 .694209 .0659429 .120262);--planet-jupiter:color(display-p3 .57038 .356834 -.203198);--planet-saturn:color(display-p3 .262684 .323159 .443709);--planet-rahu:color(display-p3 .254224 .245063 .569023);--planet-ketu:color(display-p3 .557919 .263616 .052663);--dignity-exalted:color(display-p3 .57038 .356834 -.203198);--dignity-debilitated:color(display-p3 .694209 .0659429 .120262);--dignity-own:color(display-p3 .148908 .420483 .120432)}}@supports (color:lab(0% 0 0)){:root{--bg-primary:lab(96.5076% -.214994 -1.49846);--bg-secondary:lab(91.8546% -.419319 -2.9907);--bg-tertiary:lab(86.0409% -.610828 -4.47587);--bg-hover:lab(81.3789% -.873804 -6.69111);--border:lab(74.4184% -.864774 -6.68644);--border-subtle:lab(83.7208% -.609636 -4.47524);--text-primary:lab(3.67543% -.212148 -2.43837);--text-secondary:lab(28.0109% -.729963 -6.62285);--text-muted:lab(44.2712% -.656128 -5.19227);--gold:lab(44.0736% 22.5353 118.781);--gold-dim:lab(34.8944% 16.8155 79.322);--gold-glow:lab(44.0736% 22.5353 118.781/.2);--gold-subtle:lab(44.0736% 22.5353 118.781/.07);--planet-sun:lab(47.0942% 34.9095 115.734);--planet-moon:lab(32.6468% -8.89629 -25.0579);--planet-mercury:lab(39.2064% -45.2416 40.6297);--planet-venus:lab(39.8088% 50.4598 -11.9132);--planet-mars:lab(39.7145% 70.0599 49.6254);--planet-jupiter:lab(44.0736% 22.5353 118.781);--planet-saturn:lab(34.713% -.692427 -21.5121);--planet-rahu:lab(30.7426% 21.8588 -48.9882);--planet-ketu:lab(38.7083% 37.2573 56.6234);--dignity-exalted:lab(44.0736% 22.5353 118.781);--dignity-debilitated:lab(39.7145% 70.0599 49.6254);--dignity-own:lab(39.2064% -45.2416 40.6297)}}}html,body{background:var(--bg-primary);width:100%;height:100%;color:var(--text-primary);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.5;overflow:hidden}body{flex-direction:column;display:flex}#app{flex-direction:column;flex:1;display:flex;overflow:hidden}#loading-state{color:var(--text-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}#loading-state[hidden]{display:none}.oe-loader{width:48px;height:48px;animation:1.4s linear infinite spin}.oe-loader circle{fill:none;stroke:var(--gold);stroke-width:3px;stroke-dasharray:200;stroke-dashoffset:80px;stroke-linecap:round}@keyframes spin{to{transform:rotate(360deg)}}.chart-status{background:var(--bg-secondary);border-top:1px solid var(--border-subtle);color:var(--text-muted);opacity:0;z-index:50;padding:6px 14px;font-size:11px;transition:opacity .2s,transform .2s;position:fixed;bottom:0;left:0;right:0;transform:translateY(100%)}.chart-status.visible{opacity:1;transform:translateY(0)}#vedic-container{flex-direction:column;flex:1;align-items:center;gap:12px;padding:12px;display:flex;overflow-y:auto}#vedic-container[hidden]{display:none}.vedic-header{justify-content:space-between;align-items:center;gap:8px;width:100%;max-width:540px;animation:.5s ease-out vedic-fade-in;display:flex}.vedic-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);font-size:12px;font-weight:700}.vedic-header-meta{align-items:center;gap:8px;display:flex}.vedic-ayanamsa-badge{border-radius:var(--radius-sm);background:var(--bg-tertiary);border:1px solid var(--border-subtle);color:var(--text-secondary);font-variant-numeric:tabular-nums;padding:2px 8px;font-size:10px;font-weight:600}.vedic-toggle-btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;padding:3px 8px;font-size:10px;font-weight:600;transition:background .15s,color .15s}.vedic-toggle-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.vedic-toggle-btn.active{border-color:var(--gold-dim);color:var(--gold);background:var(--gold-subtle)}.rashi-grid{aspect-ratio:1;border:1px solid var(--border);border-radius:var(--radius);width:min(100%,540px);box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px rgba(0,0,0,.3);grid-template-rows:repeat(4,1fr);grid-template-columns:repeat(4,1fr);animation:.6s ease-out vedic-fade-in;display:grid;overflow:hidden}@supports (color:color(display-p3 0 0 0)){.rashi-grid{box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px color(display-p3 0 0 0/.3)}}@supports (color:lab(0% 0 0)){.rashi-grid{box-shadow:0 0 0 1px var(--border-subtle), 0 4px 32px lab(0% 0 0/.3)}}@keyframes vedic-fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.rashi-cell{background:var(--bg-secondary);border:1px solid var(--border-subtle);cursor:pointer;flex-direction:column;min-width:0;min-height:0;padding:4px 5px;transition:background .12s,box-shadow .12s;display:flex;position:relative;overflow:hidden}.rashi-cell.occupied:hover{background:var(--bg-hover);box-shadow:inset 0 0 0 1px var(--gold-glow), 0 0 12px var(--gold-glow);z-index:2}.rashi-cell.lagna{border-color:var(--gold-dim);background:#110d05;background:color(display-p3 .0641956 .0497811 .0230015);background:lab(3.71843% .818238 3.47664)}.rashi-cell.lagna:hover{box-shadow:inset 0 0 0 1px var(--gold), 0 0 18px var(--gold-glow)}.rashi-cell.center{background:var(--bg-primary);border-color:var(--border-subtle);cursor:default;text-align:center;justify-content:center;align-items:center;gap:2px}.rashi-cell.center:hover{background:var(--bg-primary);box-shadow:none}.cell-sign{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;font-size:9px;font-weight:700;line-height:1.2;overflow:hidden}.cell-sign-devanagari{color:var(--text-muted);flex-shrink:0;font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:10px;line-height:1.2;display:none}#vedic-container.show-devanagari .cell-sign-devanagari{display:block}#vedic-container.show-devanagari .cell-sign{display:none}.cell-top-row{flex-shrink:0;justify-content:space-between;align-items:baseline;gap:2px;min-width:0;display:flex}.cell-house-num{color:var(--text-muted);opacity:.5;font-variant-numeric:tabular-nums;flex-shrink:0;font-size:8px;font-weight:700;line-height:1}.rashi-cell.lagna .cell-house-num{color:var(--gold-dim);opacity:1}.cell-planets{flex-wrap:wrap;gap:2px;min-height:0;margin-top:auto;padding-top:2px;display:flex;overflow:hidden}.planet-badge{white-space:nowrap;font-variant-numeric:tabular-nums;background:rgba(0,0,0,.2);background:color(display-p3 0 0 0/.2);background:lab(0% 0 0/.2);border-radius:2px;padding:1px 3px;font-size:10px;font-weight:700;line-height:1}.planet-badge[data-planet=sun]{color:var(--planet-sun)}.planet-badge[data-planet=moon]{color:var(--planet-moon)}.planet-badge[data-planet=mercury]{color:var(--planet-mercury)}.planet-badge[data-planet=venus]{color:var(--planet-venus)}.planet-badge[data-planet=mars]{color:var(--planet-mars)}.planet-badge[data-planet=jupiter]{color:var(--planet-jupiter)}.planet-badge[data-planet=saturn]{color:var(--planet-saturn)}.planet-badge[data-planet=rahu]{color:var(--planet-rahu)}.planet-badge[data-planet=ketu]{color:var(--planet-ketu)}.planet-badge .retro{opacity:.75;font-size:8px}.planet-badge .dignity-ex{color:var(--dignity-exalted);font-size:7px}.planet-badge .dignity-db{color:var(--dignity-debilitated);font-size:7px}@media (max-width:420px){.planet-label-full{display:none}.planet-label-short{display:inline}}@media (min-width:421px){.planet-label-full{display:inline}.planet-label-short{display:none}}.lagna-diagonal{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.lagna-diagonal line{stroke:var(--gold);stroke-width:1.5px;stroke-linecap:round;opacity:.7}.center-label{text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);font-size:9px;font-weight:700}.center-ayanamsa{color:var(--gold-dim);font-family:JetBrains Mono,Fira Mono,ui-monospace,monospace;font-size:10px;font-weight:600}.center-lagna{color:var(--text-secondary);font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:11px;font-weight:700}.vedic-legend{flex-wrap:wrap;justify-content:center;gap:6px 12px;width:100%;max-width:540px;animation:.8s ease-out .2s both vedic-fade-in;display:flex}.legend-item{color:var(--text-muted);align-items:center;gap:4px;font-size:10px;display:flex}.legend-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.vedic-actions{flex-wrap:wrap;gap:6px;width:100%;max-width:540px;animation:.8s ease-out .3s both vedic-fade-in;display:flex}.action-btn{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;align-items:center;gap:4px;padding:7px 12px;font-size:11px;font-weight:600;transition:background .15s,color .15s,box-shadow .15s;display:inline-flex}.action-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.action-btn--primary{color:#cbdfff;color:color(display-p3 .811259 .873257 .992208);color:lab(88.2011% -1.89927 -18.3428);background:linear-gradient(135deg,#1d4587,#32326d);background:linear-gradient(135deg,color(display-p3 .153533 .2659 .511983),color(display-p3 .195291 .194916 .412031));background:linear-gradient(135deg,lab(29.3399% 5.63866 -42.0206),lab(23.3003% 14.2058 -35.0966));border-color:#33548c;border-color:color(display-p3 .229049 .327581 .533696);border-color:lab(35.4848% 1.84765 -35.3079)}.action-btn--primary:hover{background:linear-gradient(135deg,#2151a1,#3d3c86);background:linear-gradient(135deg,color(display-p3 .180134 .31482 .611657),color(display-p3 .239239 .236673 .50744));background:linear-gradient(135deg,lab(34.9279% 7.15981 -48.9835),lab(28.8006% 17.5515 -42.0715));box-shadow:0 2px 12px rgba(29,69,135,.3);box-shadow:0 2px 12px color(display-p3 .153533 .2659 .511983/.3);box-shadow:0 2px 12px lab(29.3399% 5.63866 -42.0206/.3)}.vedic-drawer-overlay{z-index:60;opacity:0;background:rgba(0,0,0,.45);background:color(display-p3 0 0 0/.45);background:lab(0% 0 0/.45);transition:opacity .2s;position:fixed;top:0;bottom:0;left:0;right:0}.vedic-drawer-overlay.visible{opacity:1}.vedic-drawer{background:var(--bg-secondary);border-top:1px solid var(--border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;z-index:61;max-height:65vh;padding:16px;transition:transform .25s ease-out;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;transform:translateY(100%)}.vedic-drawer.visible{transform:translateY(0)}.drawer-handle{background:var(--border);border-radius:2px;width:36px;height:4px;margin:0 auto 14px}.drawer-sign-title{align-items:center;gap:8px;margin-bottom:4px;font-size:16px;font-weight:700;display:flex}.drawer-sign-devanagari{color:var(--text-secondary);font-family:Noto Sans Devanagari,Mangal,sans-serif;font-size:14px;font-weight:400}.drawer-sign-element{border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;font-size:10px;font-weight:600}.drawer-section{margin-top:14px}.drawer-section-title{text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin-bottom:8px;font-size:10px;font-weight:700}.drawer-planet-row{background:var(--bg-tertiary);border-radius:var(--radius-sm);align-items:flex-start;gap:10px;margin-bottom:5px;padding:8px 10px;display:flex}.drawer-planet-abbr{min-width:22px;font-size:14px;font-weight:700}.drawer-planet-info{flex-direction:column;flex:1;gap:1px;display:flex}.drawer-planet-name{color:var(--text-primary);font-size:12px;font-weight:600}.drawer-planet-meta{color:var(--text-secondary);font-size:11px}.drawer-planet-nakshatra{color:var(--text-muted);font-size:10px}.drawer-planet-dignity{border-radius:10px;align-self:center;margin-left:auto;padding:1px 5px;font-size:9px;font-weight:700}.drawer-planet-dignity.exalted{background:var(--gold-subtle);color:var(--gold)}.drawer-planet-dignity.debilitated{color:var(--planet-mars);background:rgba(243,98,93,.12);background:color(display-p3 .885816 .42028 .386667/.12);background:lab(61.0965% 56.6147 33.1618/.12)}.drawer-planet-dignity.own{color:var(--planet-mercury);background:rgba(110,194,114,.1);background:color(display-p3 .509102 .751692 .477144/.1);background:lab(71.5613% -39.2213 32.0347/.1)}.error-state,.empty-state{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:32px;display:flex}.error-icon,.empty-icon{font-size:32px}.tooltip{z-index:100;border-radius:var(--radius-sm);background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text-primary);pointer-events:none;opacity:0;white-space:pre-line;max-width:220px;padding:5px 9px;font-size:11px;transition:opacity .15s;position:fixed}.tooltip.visible{opacity:1}@media (max-width:360px){.cell-sign{font-size:7px}.planet-badge{padding:1px 2px;font-size:8px}#vedic-container{gap:8px;padding:8px}.vedic-legend{display:none}}@media (max-width:420px){.cell-sign{font-size:8px}.center-ayanamsa{font-size:9px}}.chart-layer{opacity:1;transform-origin:310px 310px;animation:.5s cubic-bezier(.16,1,.3,1) both svgLayerAssemble;animation-delay:calc(var(--layer-index,0) * 80ms);transform:scale(1)}@keyframes svgLayerAssemble{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.floating-action-btn:after{content:"";background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);width:50%;height:100%;animation:3s 2s infinite shimmer;position:absolute;top:0;left:-100%;transform:skew(-20deg)}@keyframes shimmer{0%{left:-100%}20%{left:200%}to{left:200%}}@keyframes slideUpFadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUpFadeInPanel{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}
11
11
  /*$vite$:1*/</style>
12
- </head>
13
- <body>
14
- <div id="app">
15
- <div id="loading-state">
16
- <svg class="oe-loader" viewBox="0 0 100 100"><circle cx="50" cy="50" r="45"/></svg>
17
- <p>Computing Vedic chart…</p>
18
- </div>
19
- <div id="chart-status" class="chart-status" role="status" aria-live="polite"></div>
20
- <div id="vedic-container" hidden></div>
21
- <div id="tooltip" class="tooltip" role="tooltip"></div>
22
- </div>
23
-
12
+ </head>
13
+ <body>
14
+ <div id="app">
15
+ <div id="loading-state">
16
+ <svg class="oe-loader" viewBox="0 0 100 100"><circle cx="50" cy="50" r="45"/></svg>
17
+ <p>Computing Vedic chart…</p>
18
+ </div>
19
+ <div id="chart-status" class="chart-status" role="status" aria-live="polite"></div>
20
+ <div id="vedic-container" hidden></div>
21
+ <div id="tooltip" class="tooltip" aria-live="polite"></div>
22
+ </div>
23
+
24
24
  <script type="module">(function() {
25
25
  let e2 = document.createElement("link").relList;
26
26
  if (e2 && e2.supports && e2.supports("modulepreload")) return;
@@ -206,5 +206,5 @@ function F(e2) {
206
206
  }
207
207
  document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", C) : C();
208
208
  </script>
209
- </body>
210
- </html>
209
+ </body>
210
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "3.13.10",
3
+ "version": "3.15.0",
4
4
  "description": "Model Context Protocol server for the Open Ephemeris astronomical computation API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,6 +29,8 @@
29
29
  "start:sse": "node dist/server-sse.js",
30
30
  "test": "vitest run --exclude \"dist/**\"",
31
31
  "test:watch": "vitest --exclude \"dist/**\"",
32
+ "harness": "vite --config vite.harness.config.ts",
33
+ "validate:visual": "node scripts/visual-check.mjs",
32
34
  "test:integration": "tsx scripts/test-client.ts",
33
35
  "test:sse": "tsx scripts/test-sse-client.ts",
34
36
  "typecheck": "tsc --noEmit",
@@ -39,7 +41,9 @@
39
41
  "sync:readme": "tsx scripts/sync-readme.ts --write",
40
42
  "check:readme": "tsx scripts/sync-readme.ts --check",
41
43
  "check:pack": "tsx scripts/pack-audit.ts",
42
- "verify:release": "npm run check:dev-allowlist && npm run check:schema-packs && npm run check:readme && npm run typecheck && npm test && npm run build && npm run check:pack",
44
+ "build:skills": "node scripts/build-skills.mjs",
45
+ "check:skills": "node scripts/build-skills.mjs --check",
46
+ "verify:release": "npm run check:dev-allowlist && npm run check:schema-packs && npm run check:readme && npm run check:skills && npm run typecheck && npm test && npm run build && npm run check:pack",
43
47
  "prepack": "npm run build",
44
48
  "prepublishOnly": "npm run verify:release"
45
49
  },
@@ -69,20 +73,23 @@
69
73
  },
70
74
  "dependencies": {
71
75
  "@modelcontextprotocol/ext-apps": "^1.7.0",
72
- "@modelcontextprotocol/sdk": "1.29.0",
73
- "axios": "1.13.2",
74
- "express": "5.1.0",
75
- "zod": "4.1.13"
76
+ "@modelcontextprotocol/sdk": "^1.29.0",
77
+ "axios": "^1.13.2",
78
+ "express": "^5.1.0",
79
+ "zod": "^4.1.13"
76
80
  },
77
81
  "devDependencies": {
78
- "@types/express": "5.0.3",
79
- "@types/node": "25.0.1",
82
+ "@axe-core/playwright": "^4.11.3",
83
+ "@playwright/test": "^1.60.0",
84
+ "@types/express": "^5.0.3",
85
+ "@types/node": "^25.0.1",
86
+ "adm-zip": "^0.5.17",
80
87
  "cross-env": "^10.1.0",
81
- "tsx": "4.21.0",
82
- "typescript": "5.9.3",
88
+ "tsx": "^4.21.0",
89
+ "typescript": "^5.9.3",
83
90
  "vite": "^8.0.10",
84
91
  "vite-plugin-singlefile": "^2.3.3",
85
- "vitest": "4.0.15"
92
+ "vitest": "^4.0.15"
86
93
  },
87
94
  "packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a"
88
95
  }
package/smithery.yaml CHANGED
@@ -19,17 +19,20 @@ homepage: https://openephemeris.com
19
19
  # JSON Schema for the configuration form rendered in Smithery's UI
20
20
  configSchema:
21
21
  type: object
22
+ title: Open Ephemeris Configuration
22
23
  required:
23
24
  - apiKey
24
25
  properties:
25
26
  apiKey:
26
27
  type: string
28
+ title: API Key
27
29
  description: >
28
30
  Your Open Ephemeris API key. Get a free Explorer key at
29
31
  https://openephemeris.com/dashboard — no credit card required.
30
32
  default: ""
31
33
  format:
32
34
  type: string
35
+ title: Output Format
33
36
  enum:
34
37
  - json
35
38
  - llm
@@ -38,6 +41,14 @@ configSchema:
38
41
  token-optimized output (~50% smaller). 'json' returns full verbose JSON.
39
42
  Individual tool calls can override this setting.
40
43
  default: json
44
+ baseUrl:
45
+ type: string
46
+ title: API Base URL
47
+ description: >
48
+ Override the Open Ephemeris API base URL. Leave blank to use the
49
+ default production endpoint (https://api.openephemeris.com). Useful
50
+ for self-hosted or staging deployments.
51
+ default: ""
41
52
 
42
53
  # How to start the server locally (stdio transport for Claude Desktop / Cursor)
43
54
  startCommand:
@@ -46,5 +57,9 @@ startCommand:
46
57
  (config) => ({
47
58
  command: "npx",
48
59
  args: ["-y", "@openephemeris/mcp-server@latest"],
49
- env: { OPENEPHEMERIS_API_KEY: config.apiKey }
60
+ env: {
61
+ OPENEPHEMERIS_API_KEY: config.apiKey,
62
+ ...(config.format && config.format !== "json" ? { OPENEPHEMERIS_FORMAT: config.format } : {}),
63
+ ...(config.baseUrl ? { OPENEPHEMERIS_BACKEND_URL: config.baseUrl } : {}),
64
+ }
50
65
  })