@openephemeris/mcp-server 4.15.0 → 4.16.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 (51) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +29 -13
  3. package/dist/backend/client.d.ts +2 -0
  4. package/dist/backend/client.js +15 -10
  5. package/dist/index.js +3 -12
  6. package/dist/instructions.d.ts +1 -1
  7. package/dist/instructions.js +5 -3
  8. package/dist/prompts.js +2 -2
  9. package/dist/server-sse.js +3 -12
  10. package/dist/tools/apps/bazi-app.js +10 -10
  11. package/dist/tools/apps/bi-wheel-app.js +14 -14
  12. package/dist/tools/apps/bodygraph-app.js +35 -29
  13. package/dist/tools/apps/chart-wheel-app.js +12 -9
  14. package/dist/tools/apps/location-tools.js +17 -4
  15. package/dist/tools/apps/moon-phase-app.js +12 -11
  16. package/dist/tools/apps/transit-timeline-app.js +13 -14
  17. package/dist/tools/apps/vedic-chart-app.js +9 -8
  18. package/dist/tools/auth.js +14 -12
  19. package/dist/tools/dev.js +17 -29
  20. package/dist/tools/invocation-status.d.ts +25 -0
  21. package/dist/tools/invocation-status.js +69 -0
  22. package/dist/tools/specialized/account.js +6 -10
  23. package/dist/tools/specialized/acg.js +16 -21
  24. package/dist/tools/specialized/bazi.js +7 -12
  25. package/dist/tools/specialized/bi_wheel.js +1 -1
  26. package/dist/tools/specialized/chart_wheel.js +1 -1
  27. package/dist/tools/specialized/eclipse.js +6 -13
  28. package/dist/tools/specialized/electional.js +30 -37
  29. package/dist/tools/specialized/ephemeris_core.js +21 -14
  30. package/dist/tools/specialized/ephemeris_extended.js +22 -19
  31. package/dist/tools/specialized/hd_bodygraph.js +2 -2
  32. package/dist/tools/specialized/human_design.js +11 -14
  33. package/dist/tools/specialized/moon.js +15 -26
  34. package/dist/tools/specialized/natal.js +9 -8
  35. package/dist/tools/specialized/progressed.js +6 -6
  36. package/dist/tools/specialized/relocation.js +6 -7
  37. package/dist/tools/specialized/returns.js +6 -8
  38. package/dist/tools/specialized/synastry.js +7 -8
  39. package/dist/tools/specialized/transits.js +15 -14
  40. package/dist/tools/specialized/vedic.js +7 -6
  41. package/dist/tools/ui-meta.d.ts +14 -0
  42. package/dist/tools/ui-meta.js +57 -0
  43. package/dist/ui/bazi.html +6 -1
  44. package/dist/ui/bi-wheel.html +505 -460
  45. package/dist/ui/bodygraph.html +176 -150
  46. package/dist/ui/chart-wheel.html +443 -396
  47. package/dist/ui/moon-phase.html +1 -1
  48. package/dist/ui/transit-timeline.html +2 -2
  49. package/dist/ui/vedic-chart.html +82 -56
  50. package/package.json +9 -4
  51. package/smithery.yaml +3 -1
@@ -33,7 +33,7 @@
33
33
  <div id="tooltip" class="tooltip" aria-live="polite"></div>
34
34
  <div id="aspect-filter" hidden></div>
35
35
  <div id="param-controls-container" hidden></div>
36
- <div id="chart-hint" class="chart-hint">Click any planet or cross-aspect to explore · Ask Claude for deep interpretation</div>
36
+ <div id="chart-hint" class="chart-hint">Click any planet or cross-aspect to explore · Ask for a deep interpretation</div>
37
37
  </div>
38
38
  <script type="module">var e = Object.defineProperty, t = (t2, n2) => {
39
39
  let r2 = {};
@@ -6611,7 +6611,7 @@ function i_(e5, t2) {
6611
6611
  };
6612
6612
  e5.addEventListener("pointerup", re2), e5.addEventListener("pointercancel", re2);
6613
6613
  }
6614
- var a_ = '"Segoe UI Symbol", "Noto Sans Symbols", "Noto Sans Symbols2", "Apple Symbols", "DejaVu Sans", serif', o_ = { fire: "#f55f7c", earth: "#24e6a8", air: "#ffc94d", water: "#49b6ea", fireTint: "rgba(245,95,124,0.20)", earthTint: "rgba(36,230,168,0.20)", airTint: "rgba(255,201,77,0.20)", waterTint: "rgba(73,182,234,0.20)", points: "#118ab2", others: "#ffa500", house: "#7a8695", transit: "#c19bf2", ink: "#f7f3f0" }, s_ = { fire: "#e23a63", earth: "#079e78", air: "#c99418", water: "#0f7ea3", fireTint: "rgba(239,71,111,0.12)", earthTint: "rgba(6,214,160,0.13)", airTint: "rgba(255,209,102,0.20)", waterTint: "rgba(17,138,178,0.12)", points: "#118ab2", others: "#ffa500", house: "#6f8496", transit: "#7b3fb5", ink: "#0b1220" };
6614
+ var a_ = '"Segoe UI Symbol", "Noto Sans Symbols", "Noto Sans Symbols2", "Apple Symbols", "DejaVu Sans", serif', o_ = { background: "#1b1b1d", foreground: "#f7f3f0", dim: "#6f7580", fire: "#d9506f", earth: "#22a67a", air: "#dcb238", water: "#3f93c2", points: "#2f89ab", others: "#d69a3a", house: "#7a8695", transit: "#c19bf2", fireTint: "rgba(217,80,111,0.20)", earthTint: "rgba(34,166,122,0.20)", airTint: "rgba(220,178,56,0.20)", waterTint: "rgba(63,147,194,0.20)", zodiacFillOpacity: 0.34, houseFillOpacity: 0.1, houseStrokeOpacity: 0.45 }, s_ = { background: "#fffdf1", foreground: "#0b1220", dim: "#6b5c4a", fire: "#c9456f", earth: "#1f9968", air: "#c9a23c", water: "#1f7fa3", points: "#1f6f96", others: "#c9903f", house: "#6f8496", transit: "#7b3fb5", fireTint: "rgba(201,69,111,0.34)", earthTint: "rgba(31,153,104,0.34)", airTint: "rgba(201,162,60,0.38)", waterTint: "rgba(31,127,163,0.34)", zodiacFillOpacity: 0.48, houseFillOpacity: 0.2, houseStrokeOpacity: 0.95 };
6615
6615
  function c_(e5) {
6616
6616
  return e5 ? o_ : s_;
6617
6617
  }
@@ -6635,68 +6635,72 @@ function u_(e5, t2) {
6635
6635
  return n2.house;
6636
6636
  }
6637
6637
  }
6638
- var d_;
6639
- function f_() {
6640
- return d_ ? d_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6638
+ function d_(e5) {
6639
+ let t2 = c_(e5);
6640
+ return { ring: { stroke: t2.dim, opacity: 0.85 }, cuspIntermediate: { stroke: t2.dim, opacity: 0.85 }, cuspAngular: { stroke: t2.foreground, opacity: 0.75 }, tickMajor: { stroke: t2.foreground, opacity: 0.73 }, tickMinor: { stroke: t2.foreground, opacity: 0.48 }, cuspDash: (e6) => "".concat((e6 * 1.5).toFixed(2), " ").concat((e6 * 3).toFixed(2)), center: e5 ? t2.background : "#efeae1" };
6641
6641
  }
6642
- function p_(e5 = f_()) {
6642
+ var f_;
6643
+ function p_() {
6644
+ return f_ ? f_ === "dark" : window.matchMedia("(prefers-color-scheme: dark)").matches;
6645
+ }
6646
+ function m_(e5 = p_()) {
6643
6647
  let t2 = e5 ? "dark" : "light";
6644
6648
  return document.documentElement.setAttribute("data-theme", t2), t2;
6645
6649
  }
6646
- function m_(e5) {
6647
- p_();
6650
+ function h_(e5) {
6651
+ m_();
6648
6652
  try {
6649
6653
  window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (t2) => {
6650
- d_ || e5 == null || e5(p_(t2.matches));
6654
+ f_ || e5 == null || e5(m_(t2.matches));
6651
6655
  });
6652
6656
  } catch (e6) {
6653
6657
  }
6654
6658
  }
6655
- function h_(e5, t2) {
6659
+ function g_(e5, t2) {
6656
6660
  var n2, r2;
6657
6661
  let i2 = (e6) => {
6658
6662
  let n3 = e6 == null ? void 0 : e6.theme;
6659
6663
  if (n3 !== "light" && n3 !== "dark") return;
6660
- d_ = n3;
6661
- let r3 = document.documentElement.getAttribute("data-theme"), i3 = p_(n3 === "dark");
6664
+ f_ = n3;
6665
+ let r3 = document.documentElement.getAttribute("data-theme"), i3 = m_(n3 === "dark");
6662
6666
  i3 !== r3 && (t2 == null || t2(i3));
6663
6667
  };
6664
6668
  (n2 = e5.addEventListener) == null || n2.call(e5, "hostcontextchanged", i2), i2((r2 = e5.getHostContext) == null ? void 0 : r2.call(e5));
6665
6669
  }
6666
- function g_(e5, t2) {
6670
+ function __(e5, t2) {
6667
6671
  if (e5.length <= 1) {
6668
6672
  let t3 = /* @__PURE__ */ new Map();
6669
6673
  for (let n3 of e5) t3.set(n3.name, n3.longitude);
6670
6674
  return t3;
6671
6675
  }
6672
6676
  let n2 = [...e5].sort((e6, t3) => e6.longitude - t3.longitude), r2 = [], i2 = [];
6673
- for (let e6 of n2) r2.push(e6.longitude), i2.push(__(e6.longitude, i2, t2));
6674
- y_(i2, r2, t2);
6677
+ for (let e6 of n2) r2.push(e6.longitude), i2.push(v_(e6.longitude, i2, t2));
6678
+ b_(i2, r2, t2);
6675
6679
  let a2 = /* @__PURE__ */ new Map();
6676
- for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name, x_(i2[e6]));
6680
+ for (let e6 = 0; e6 < n2.length; e6++) a2.set(n2[e6].name, S_(i2[e6]));
6677
6681
  return a2;
6678
6682
  }
6679
- function __(e5, t2, n2) {
6683
+ function v_(e5, t2, n2) {
6680
6684
  if (t2.length === 0) return e5;
6681
6685
  let r2 = Math.max(0.55, n2 / 4), i2 = Math.max(8, Math.min(40, n2 * 5)), a2 = Math.floor(i2 / r2);
6682
- if (v_(e5, t2, n2)) return e5;
6686
+ if (y_(e5, t2, n2)) return e5;
6683
6687
  for (let i3 = 1; i3 <= a2; i3++) {
6684
6688
  let a3 = i3 * r2;
6685
- if (v_(e5 + a3, t2, n2)) return e5 + a3;
6686
- if (v_(e5 - a3, t2, n2)) return e5 - a3;
6689
+ if (y_(e5 + a3, t2, n2)) return e5 + a3;
6690
+ if (y_(e5 - a3, t2, n2)) return e5 - a3;
6687
6691
  }
6688
6692
  return e5;
6689
6693
  }
6690
- function v_(e5, t2, n2) {
6691
- for (let r2 of t2) if (b_(e5, r2) < n2) return false;
6694
+ function y_(e5, t2, n2) {
6695
+ for (let r2 of t2) if (x_(e5, r2) < n2) return false;
6692
6696
  return true;
6693
6697
  }
6694
- function y_(e5, t2, n2) {
6698
+ function b_(e5, t2, n2) {
6695
6699
  let r2 = e5.length;
6696
6700
  if (!(r2 <= 1)) for (let t3 = 0; t3 < 80; t3++) {
6697
6701
  let t4 = true;
6698
6702
  for (let i2 = 0; i2 < r2; i2++) for (let a2 = i2 + 1; a2 < r2; a2++) {
6699
- let r3 = n2 - b_(e5[i2], e5[a2]);
6703
+ let r3 = n2 - x_(e5[i2], e5[a2]);
6700
6704
  if (r3 > 0.01) {
6701
6705
  t4 = false;
6702
6706
  let n3 = r3 * 0.65 / 2, o2 = e5[a2] - e5[i2];
@@ -6708,45 +6712,49 @@ function y_(e5, t2, n2) {
6708
6712
  if (t4) break;
6709
6713
  }
6710
6714
  }
6711
- function b_(e5, t2) {
6715
+ function x_(e5, t2) {
6712
6716
  let n2 = ((t2 - e5) % 360 + 540) % 360 - 180;
6713
6717
  return Math.abs(n2);
6714
6718
  }
6715
- function x_(e5) {
6719
+ function S_(e5) {
6716
6720
  return (e5 % 360 + 360) % 360;
6717
6721
  }
6718
- var S_ = 310, C_ = 310, w_ = 240, T_ = 204, E_ = 190, D_ = 159, O_ = 140, k_ = 134, A_ = 290, j_ = 246, M_ = 264, N_ = 16;
6722
+ var C_ = 310, w_ = 310, T_ = 240, E_ = 204, D_ = 190, O_ = 152, k_ = 118, A_ = 112, j_ = 290, M_ = 246, N_ = 264, P_ = 16;
6719
6723
  function Y(e5, t2, n2) {
6720
6724
  let r2 = -(e5 - n2 + 180) * Math.PI / 180;
6721
- return { x: S_ + t2 * Math.cos(r2), y: C_ + t2 * Math.sin(r2) };
6725
+ return { x: C_ + t2 * Math.cos(r2), y: w_ + t2 * Math.sin(r2) };
6722
6726
  }
6723
6727
  function X(e5) {
6724
6728
  return document.createElementNS("http://www.w3.org/2000/svg", e5);
6725
6729
  }
6726
- var P_ = { sun: "\u2609\uFE0E", moon: "\u263D\uFE0E", mercury: "\u263F\uFE0E", venus: "\u2640\uFE0E", mars: "\u2642\uFE0E", jupiter: "\u2643\uFE0E", saturn: "\u2644\uFE0E", uranus: "\u2645\uFE0E", neptune: "\u2646\uFE0E", pluto: "\u2647\uFE0E", "north node": "\u260A\uFE0E", "south node": "\u260B\uFE0E", chiron: "\u26B7\uFE0E", "true node": "\u260A\uFE0E", north_node: "\u260A\uFE0E", south_node: "\u260B\uFE0E", true_node: "\u260A\uFE0E", asc: "AC", mc: "MC" }, F_ = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), I_ = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], L_ = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9" };
6727
- function R_(e5) {
6730
+ var F_ = { sun: "\u2609\uFE0E", moon: "\u263D\uFE0E", mercury: "\u263F\uFE0E", venus: "\u2640\uFE0E", mars: "\u2642\uFE0E", jupiter: "\u2643\uFE0E", saturn: "\u2644\uFE0E", uranus: "\u2645\uFE0E", neptune: "\u2646\uFE0E", pluto: "\u2647\uFE0E", "north node": "\u260A\uFE0E", "south node": "\u260B\uFE0E", chiron: "\u26B7\uFE0E", "true node": "\u260A\uFE0E", north_node: "\u260A\uFE0E", south_node: "\u260B\uFE0E", true_node: "\u260A\uFE0E", asc: "AC", mc: "MC" }, I_ = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), L_ = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], R_ = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9" };
6731
+ function z_(e5) {
6728
6732
  let t2 = e5.toLowerCase();
6729
- return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || u_(t2, W_());
6733
+ return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || u_(t2, G_());
6730
6734
  }
6731
- function z_(e5) {
6735
+ function B_(e5) {
6732
6736
  return e5 <= 1 ? { dash: "", width: "1.8", opacity: "0.95" } : e5 <= 3 ? { dash: "5,4", width: "1.4", opacity: "0.75" } : { dash: "3,5", width: "1.0", opacity: "0.50" };
6733
6737
  }
6734
- var B_ = { sun: { domicile: [4], exaltation: [0], detriment: [10], fall: [6] }, moon: { domicile: [3], exaltation: [1], detriment: [9], fall: [7] }, mercury: { domicile: [2, 5], exaltation: [5], detriment: [8, 11], fall: [11] }, venus: { domicile: [1, 6], exaltation: [11], detriment: [7, 0], fall: [5] }, mars: { domicile: [0, 7], exaltation: [9], detriment: [6, 1], fall: [3] }, jupiter: { domicile: [8, 11], exaltation: [3], detriment: [2, 5], fall: [9] }, saturn: { domicile: [9, 10], exaltation: [6], detriment: [3, 4], fall: [0] } };
6735
- function V_(e5, t2) {
6736
- let n2 = B_[e5.toLowerCase()];
6738
+ var V_ = { sun: { domicile: [4], exaltation: [0], detriment: [10], fall: [6] }, moon: { domicile: [3], exaltation: [1], detriment: [9], fall: [7] }, mercury: { domicile: [2, 5], exaltation: [5], detriment: [8, 11], fall: [11] }, venus: { domicile: [1, 6], exaltation: [11], detriment: [7, 0], fall: [5] }, mars: { domicile: [0, 7], exaltation: [9], detriment: [6, 1], fall: [3] }, jupiter: { domicile: [8, 11], exaltation: [3], detriment: [2, 5], fall: [9] }, saturn: { domicile: [9, 10], exaltation: [6], detriment: [3, 4], fall: [0] } };
6739
+ function H_(e5, t2) {
6740
+ let n2 = V_[e5.toLowerCase()];
6737
6741
  if (!n2) return null;
6738
6742
  let r2 = Math.floor((t2 % 360 + 360) % 360 / 30);
6739
6743
  return n2.domicile.includes(r2) ? { label: "Domicile", emoji: "\u{1F3DB}", cssClass: "dignity-domicile", positive: true } : n2.exaltation.includes(r2) ? { label: "Exaltation", emoji: "\u2B06", cssClass: "dignity-exaltation", positive: true } : n2.detriment.includes(r2) ? { label: "Detriment", emoji: "\u2B07", cssClass: "dignity-detriment", positive: false } : n2.fall.includes(r2) ? { label: "Fall", emoji: "\u{1F53B}", cssClass: "dignity-fall", positive: false } : null;
6740
6744
  }
6741
- var H_ = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], U_ = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"], W_ = f_, G_ = (e5) => l_(e5, W_());
6742
- function K_(e5, t2, n2, r2, i2, a2, o2) {
6745
+ var U_ = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], W_ = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"], G_ = p_, K_ = (e5) => l_(e5, G_());
6746
+ function q_(e5, t2, n2, r2, i2) {
6747
+ let a2 = +(((t2 - e5) % 360 + 360) % 360 > 180), o2 = Y(e5, n2, i2), s2 = Y(e5, r2, i2), c2 = Y(t2, r2, i2), l2 = Y(t2, n2, i2);
6748
+ return ["M ".concat(o2.x.toFixed(2), " ").concat(o2.y.toFixed(2)), "L ".concat(s2.x.toFixed(2), " ").concat(s2.y.toFixed(2)), "A ".concat(r2, " ").concat(r2, " 0 ").concat(a2, " 0 ").concat(c2.x.toFixed(2), " ").concat(c2.y.toFixed(2)), "L ".concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "A ".concat(n2, " ").concat(n2, " 0 ").concat(a2, " 1 ").concat(o2.x.toFixed(2), " ").concat(o2.y.toFixed(2)), "Z"].join(" ");
6749
+ }
6750
+ function J_(e5, t2, n2, r2, i2, a2, o2) {
6743
6751
  let s2 = n2 * 30, c2 = s2 + 30, l2 = Y(s2, r2, t2), u2 = Y(s2, i2, t2), d2 = Y(c2, i2, t2), f2 = Y(c2, r2, t2), p2 = ["M ".concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "L ".concat(u2.x.toFixed(2), " ").concat(u2.y.toFixed(2)), "A ".concat(i2, " ").concat(i2, " 0 0 0 ").concat(d2.x.toFixed(2), " ").concat(d2.y.toFixed(2)), "L ".concat(f2.x.toFixed(2), " ").concat(f2.y.toFixed(2)), "A ".concat(r2, " ").concat(r2, " 0 0 1 ").concat(l2.x.toFixed(2), " ").concat(l2.y.toFixed(2)), "Z"].join(" "), m2 = X("path");
6744
6752
  m2.setAttribute("d", p2), m2.setAttribute("fill", a2), m2.setAttribute("fill-opacity", String(o2)), m2.setAttribute("pointer-events", "none"), e5.appendChild(m2);
6745
6753
  }
6746
- var q_ = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node", "north_node", "south_node", "true_node", "asc", "mc"]);
6747
- function J_(e5) {
6754
+ var Y_ = /* @__PURE__ */ new Set(["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto", "chiron", "north node", "south node", "true node", "north_node", "south_node", "true_node", "asc", "mc"]);
6755
+ function X_(e5) {
6748
6756
  let t2 = (e5 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
6749
- return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(I_[n2]);
6757
+ return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(L_[n2]);
6750
6758
  }
6751
6759
  function Z(e5) {
6752
6760
  return e5.replace(/\b\w/g, (e6) => e6.toUpperCase());
@@ -6754,29 +6762,29 @@ function Z(e5) {
6754
6762
  function Q(e5) {
6755
6763
  return String(e5).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
6756
6764
  }
6757
- var Y_ = "true";
6758
- function X_(e5) {
6759
- Y_ = e5;
6765
+ var Z_ = "true";
6766
+ function Q_(e5) {
6767
+ Z_ = e5;
6760
6768
  }
6761
- function Z_(e5) {
6769
+ function $_(e5) {
6762
6770
  let t2 = e5.some((e6) => e6.name === "true_node"), n2 = e5.some((e6) => e6.name === "north_node");
6763
6771
  if (!t2 || !n2) return e5;
6764
- let r2 = Y_ === "true" ? "north_node" : "true_node";
6772
+ let r2 = Z_ === "true" ? "north_node" : "true_node";
6765
6773
  return e5.filter((e6) => e6.name !== r2);
6766
6774
  }
6767
- function Q_(e5) {
6768
- return Array.isArray(e5) ? Z_(e5.filter((e6) => e6 && typeof e6.longitude == "number" && isFinite(e6.longitude))) : e5 && typeof e5 == "object" ? Z_(Object.entries(e5).filter(([e6]) => q_.has(e6.toLowerCase())).map(([e6, t2]) => {
6775
+ function ev(e5) {
6776
+ return Array.isArray(e5) ? $_(e5.filter((e6) => e6 && typeof e6.longitude == "number" && isFinite(e6.longitude))) : e5 && typeof e5 == "object" ? $_(Object.entries(e5).filter(([e6]) => Y_.has(e6.toLowerCase())).map(([e6, t2]) => {
6769
6777
  var n2, r2, i2, a2, o2, s2;
6770
6778
  return { name: e6.toLowerCase(), longitude: (n2 = (r2 = t2.longitude) == null ? t2.lon : r2) == null ? 0 : n2, speed: (i2 = t2.longitude_speed) == null ? t2.speed : i2, retrograde: !!((a2 = t2.is_retrograde) == null ? t2.retrograde : a2), sign: (o2 = t2.sign_name) == null ? t2.sign : o2, house: (s2 = t2.house_number) == null ? t2.house : s2 };
6771
6779
  })) : [];
6772
6780
  }
6773
- var $_ = [{ type: "conjunction", angle: 0, orb: 8 }, { type: "opposition", angle: 180, orb: 8 }, { type: "trine", angle: 120, orb: 6 }, { type: "square", angle: 90, orb: 5 }, { type: "sextile", angle: 60, orb: 4 }];
6774
- function ev(e5, t2, n2 = 1) {
6781
+ var tv = [{ type: "conjunction", angle: 0, orb: 8 }, { type: "opposition", angle: 180, orb: 8 }, { type: "trine", angle: 120, orb: 6 }, { type: "square", angle: 90, orb: 5 }, { type: "sextile", angle: 60, orb: 4 }];
6782
+ function nv(e5, t2, n2 = 1) {
6775
6783
  let r2 = [];
6776
6784
  for (let o2 of e5) for (let e6 of t2) {
6777
6785
  let t3 = Math.abs(o2.longitude - e6.longitude) % 360;
6778
6786
  t3 > 180 && (t3 = 360 - t3);
6779
- for (let s2 of $_) {
6787
+ for (let s2 of tv) {
6780
6788
  let c2 = s2.orb * n2, l2 = Math.abs(t3 - s2.angle);
6781
6789
  if (l2 <= c2) {
6782
6790
  var i2, a2;
@@ -6788,109 +6796,109 @@ function ev(e5, t2, n2 = 1) {
6788
6796
  }
6789
6797
  return r2.sort((e6, t3) => e6.orb - t3.orb).slice(0, 40);
6790
6798
  }
6791
- var tv = null;
6792
- function nv(e5) {
6793
- tv = e5;
6799
+ var rv = null;
6800
+ function iv(e5) {
6801
+ rv = e5;
6794
6802
  }
6795
- var rv = null, iv = null;
6796
- function av() {
6797
- return iv || (iv = document.getElementById("tooltip")), iv;
6803
+ var av = null, ov = null;
6804
+ function sv() {
6805
+ return ov || (ov = document.getElementById("tooltip")), ov;
6798
6806
  }
6799
- function ov(e5, t2, n2, r2, i2) {
6800
- let a2 = av();
6807
+ function cv(e5, t2, n2, r2, i2) {
6808
+ let a2 = sv();
6801
6809
  a2.innerHTML = '\n <div class="tooltip-title">'.concat(n2, '</div>\n <div class="tooltip-detail">').concat(r2, "</div>\n ").concat(i2 ? '<div class="tooltip-hint">'.concat(i2, "</div>") : "", "\n ");
6802
6810
  let o2 = a2.getBoundingClientRect(), s2 = o2.width || 240, c2 = o2.height || 80, l2 = e5 + 14, u2 = t2 + 10;
6803
6811
  l2 + s2 > window.innerWidth && (l2 = e5 - s2 - 8), u2 + c2 > window.innerHeight && (u2 = t2 - c2 - 8), a2.style.left = "".concat(l2, "px"), a2.style.top = "".concat(u2, "px"), a2.classList.add("visible");
6804
6812
  }
6805
- function sv() {
6806
- av().classList.remove("visible");
6813
+ function lv() {
6814
+ sv().classList.remove("visible");
6807
6815
  }
6808
- var cv = { sun: "identity & vitality", moon: "emotions & instincts", mercury: "mind & communication", venus: "love & values", mars: "drive & desire", jupiter: "expansion & meaning", saturn: "discipline & mastery", uranus: "innovation & rebellion", neptune: "dreams & transcendence", pluto: "transformation & power", chiron: "wound & healing", "north node": "soul direction", "south node": "past-life gifts", "true node": "soul direction" }, lv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" }, uv = null, dv = null, fv = /* @__PURE__ */ new Map();
6809
- function pv(e5) {
6816
+ var uv = { sun: "identity & vitality", moon: "emotions & instincts", mercury: "mind & communication", venus: "love & values", mars: "drive & desire", jupiter: "expansion & meaning", saturn: "discipline & mastery", uranus: "innovation & rebellion", neptune: "dreams & transcendence", pluto: "transformation & power", chiron: "wound & healing", "north node": "soul direction", "south node": "past-life gifts", "true node": "soul direction" }, dv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" }, fv = null, pv = null, mv = /* @__PURE__ */ new Map();
6817
+ function hv(e5) {
6810
6818
  return "".concat(e5.planet1, "|inner|").concat(e5.planet2, "|outer|").concat(e5.type);
6811
6819
  }
6812
- var mv = { ASC: { title: "Ascendant", symbol: "AC", keyword: "self & first impressions", meaning: "The Ascendant is the mask you wear before the world \u2014 your embodied presence, physical appearance, and instinctive approach to new situations.", themes: ["identity", "appearance", "beginnings", "vitality", "self-projection"] }, DSC: { title: "Descendant", symbol: "DC", keyword: "partnership & mirrors", meaning: "The Descendant describes what you seek in others and the qualities you project onto relationships \u2014 the face you recognise in those you're drawn to.", themes: ["partnership", "marriage", "open enemies", "projection", "attraction"] }, MC: { title: "Midheaven", symbol: "MC", keyword: "vocation & public legacy", meaning: "The Midheaven marks the chart's highest point and governs reputation, career, and the long arc of your public life.", themes: ["career", "ambition", "reputation", "authority", "life direction"] }, IC: { title: "Imum Coeli", symbol: "IC", keyword: "roots & inner foundation", meaning: "The IC anchors the chart at its lowest point \u2014 home, ancestry, psychological foundations, and the private self that sustains the public Midheaven.", themes: ["home", "family", "ancestry", "inner life", "psychological roots"] } };
6813
- function hv(e5, t2, n2, r2, i2) {
6820
+ var gv = { ASC: { title: "Ascendant", symbol: "AC", keyword: "self & first impressions", meaning: "The Ascendant is the mask you wear before the world \u2014 your embodied presence, physical appearance, and instinctive approach to new situations.", themes: ["identity", "appearance", "beginnings", "vitality", "self-projection"] }, DSC: { title: "Descendant", symbol: "DC", keyword: "partnership & mirrors", meaning: "The Descendant describes what you seek in others and the qualities you project onto relationships \u2014 the face you recognise in those you're drawn to.", themes: ["partnership", "marriage", "open enemies", "projection", "attraction"] }, MC: { title: "Midheaven", symbol: "MC", keyword: "vocation & public legacy", meaning: "The Midheaven marks the chart's highest point and governs reputation, career, and the long arc of your public life.", themes: ["career", "ambition", "reputation", "authority", "life direction"] }, IC: { title: "Imum Coeli", symbol: "IC", keyword: "roots & inner foundation", meaning: "The IC anchors the chart at its lowest point \u2014 home, ancestry, psychological foundations, and the private self that sustains the public Midheaven.", themes: ["home", "family", "ancestry", "inner life", "psychological roots"] } };
6821
+ function _v(e5, t2, n2, r2, i2) {
6814
6822
  var a2, o2;
6815
- let s2 = bv(), c2 = mv[t2];
6823
+ let s2 = Sv(), c2 = gv[t2];
6816
6824
  if (!c2) return;
6817
- let l2 = J_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = H_[u2], f2 = U_[u2], p2 = F_[u2], m2 = G_(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Ask Claude to interpret</button>' : "";
6825
+ let l2 = X_(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = U_[u2], f2 = W_[u2], p2 = I_[u2], m2 = K_(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Interpret this</button>' : "";
6818
6826
  s2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(Q(c2.symbol), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(c2.title), '</strong>\n <span class="wheel-badge inner">').concat(Q(h2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(p2), " ").concat(Q(l2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="font-size:11px;color:var(--text-secondary,#888);margin:6px 0 4px">\n <span style="color:').concat(m2, ';margin-right:4px">').concat(Q(p2), "</span>\n <em>").concat(Q(d2), " \xB7 ").concat(Q(f2), '</em>\n </div>\n <div style="font-size:12px;line-height:1.55;margin-bottom:8px">').concat(Q(c2.meaning), '</div>\n <div class="aspects-title">').concat(Q(c2.keyword), '</div>\n <div class="aspects-list">\n ').concat(c2.themes.map((e6) => '<div class="aspect-row"><span class="aspect-other">'.concat(Q(e6), "</span></div>")).join(""), "\n </div>\n ").concat(g2, "\n "), s2.classList.add("open"), s2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (a2 = document.getElementById("bi-info-close-btn")) == null || a2.addEventListener("click", () => {
6819
- xv(), Ov();
6827
+ Cv(), Av();
6820
6828
  }), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
6821
- if (!rv) return;
6829
+ if (!av) return;
6822
6830
  let e6 = document.getElementById("bi-ask-claude-angle-btn");
6823
- !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), rv({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: I_[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
6824
- e6.textContent = "\u2713 Sent to Claude", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6825
- e6.textContent = "\u2728 Ask Claude to interpret", e6.classList.remove("sent"), e6.disabled = false;
6831
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), av({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: L_[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
6832
+ e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6833
+ e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
6826
6834
  }, 2500);
6827
6835
  }).catch(() => {
6828
6836
  e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
6829
6837
  }));
6830
6838
  });
6831
6839
  }
6832
- var gv = { 1: "Identity & self", 2: "Resources & values", 3: "Mind & local", 4: "Roots & home", 5: "Creativity & play", 6: "Work & wellbeing", 7: "Partnership", 8: "Depth & shared", 9: "Meaning & travel", 10: "Vocation & visibility", 11: "Community & vision", 12: "Inner life" };
6833
- function _v(e5, t2, n2) {
6840
+ var vv = { 1: "Identity & self", 2: "Resources & values", 3: "Mind & local", 4: "Roots & home", 5: "Creativity & play", 6: "Work & wellbeing", 7: "Partnership", 8: "Depth & shared", 9: "Meaning & travel", 10: "Vocation & visibility", 11: "Community & vision", 12: "Inner life" };
6841
+ function yv(e5, t2, n2) {
6834
6842
  let r2 = (n2 - t2 + 360) % 360;
6835
6843
  return e5.filter((e6) => {
6836
6844
  let n3 = (e6.longitude - t2 + 360) % 360;
6837
6845
  return n3 >= 0 && n3 < r2;
6838
6846
  });
6839
6847
  }
6840
- function vv(e5, t2, n2, r2, i2, a2, o2, s2) {
6848
+ function bv(e5, t2, n2, r2, i2, a2, o2, s2) {
6841
6849
  var c2, l2, u2, d2, f2;
6842
- let p2 = bv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? I_[m2] : l2) == null ? "" : c2, g2 = (u2 = F_[m2]) == null ? "" : u2, _2 = _v(o2, t2.cusp_lon, n2.cusp_lon), v2 = _v(s2, t2.cusp_lon, n2.cusp_lon), y2 = i2 || "Natal", b2 = r2 === "synastry" ? a2 == null ? "Synastry" : a2 : "Transit", x2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
6843
- let n3 = J_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6850
+ let p2 = Sv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? L_[m2] : l2) == null ? "" : c2, g2 = (u2 = I_[m2]) == null ? "" : u2, _2 = yv(o2, t2.cusp_lon, n2.cusp_lon), v2 = yv(s2, t2.cusp_lon, n2.cusp_lon), y2 = i2 || "Natal", b2 = r2 === "synastry" ? a2 == null ? "Synastry" : a2 : "Transit", x2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
6851
+ let n3 = X_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6844
6852
  return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? y2 : b2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
6845
- }).join(""), S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Ask Claude to interpret</button>' : "";
6853
+ }).join(""), S2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
6846
6854
  p2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:#7060b8;font-family:system-ui;font-weight:700;font-size:14px">'.concat(t2.number, '</span>\n <div class="info-title">\n <div><strong>House ').concat(t2.number, '</strong></div>\n <div class="info-subtitle">').concat(Q(g2), " ").concat(Q(h2), " on cusp").concat(t2.ruler ? " \xB7 ruled by ".concat(Q(Z(t2.ruler))) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(y2), ' planets</div>\n <div class="aspects-list">').concat(x2(_2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(b2), ' planets currently here</div>\n <div class="aspects-list">').concat(x2(v2, "outer"), "</div>\n ").concat(S2, "\n "), p2.classList.add("open"), p2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (d2 = document.getElementById("bi-info-close-btn")) == null || d2.addEventListener("click", () => {
6847
- xv(), Ov();
6855
+ Cv(), Av();
6848
6856
  }), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
6849
6857
  var e6;
6850
- if (!rv) return;
6858
+ if (!av) return;
6851
6859
  let n3 = document.getElementById("bi-ask-claude-house-btn");
6852
- !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"), rv({ type: "house", data: { house_number: t2.number, cusp_sign: h2, cusp_longitude: t2.cusp_lon, ruler: (e6 = t2.ruler) == null ? null : e6, mode: r2, inner_label: y2, outer_label: b2, inner_planets: _2.map((e7) => {
6860
+ !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"), av({ type: "house", data: { house_number: t2.number, cusp_sign: h2, cusp_longitude: t2.cusp_lon, ruler: (e6 = t2.ruler) == null ? null : e6, mode: r2, inner_label: y2, outer_label: b2, inner_planets: _2.map((e7) => {
6853
6861
  var t3;
6854
- return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6862
+ return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6855
6863
  }), outer_planets: v2.map((e7) => {
6856
6864
  var t3;
6857
- return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6865
+ return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6858
6866
  }) } }).then(() => {
6859
- n3.textContent = "\u2713 Sent to Claude", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6860
- n3.textContent = "\u2728 Ask Claude to interpret", n3.classList.remove("sent"), n3.disabled = false;
6867
+ n3.textContent = "\u2713 Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6868
+ n3.textContent = "\u2728 Interpret this", n3.classList.remove("sent"), n3.disabled = false;
6861
6869
  }, 2500);
6862
6870
  }).catch(() => {
6863
6871
  n3.textContent = "\u26A0 Failed \u2014 tap to retry", n3.classList.remove("sending"), n3.classList.add("error"), n3.disabled = false;
6864
6872
  }));
6865
6873
  });
6866
6874
  }
6867
- function yv(e5, t2, n2, r2, i2, a2, o2) {
6875
+ function xv(e5, t2, n2, r2, i2, a2, o2) {
6868
6876
  var s2, c2;
6869
- let l2 = bv(), u2 = I_[t2], d2 = F_[t2], f2 = H_[t2], p2 = U_[t2], m2 = (e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2, h2 = a2.filter(m2), g2 = o2.filter(m2), _2 = r2 || "Natal", v2 = n2 === "synastry" ? i2 == null ? "Synastry" : i2 : "Transit", y2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
6870
- let n3 = J_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6877
+ let l2 = Sv(), u2 = L_[t2], d2 = I_[t2], f2 = U_[t2], p2 = W_[t2], m2 = (e6) => Math.floor((e6.longitude % 360 + 360) % 360 / 30) === t2, h2 = a2.filter(m2), g2 = o2.filter(m2), _2 = r2 || "Natal", v2 = n2 === "synastry" ? i2 == null ? "Synastry" : i2 : "Transit", y2 = (e6, t3) => e6.length === 0 ? '<div class="no-aspects">\u2014</div>' : e6.map((e7) => {
6878
+ let n3 = X_(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6871
6879
  return '<div class="aspect-row">\n <span class="wheel-badge '.concat(t3, '" style="font-size:9px">').concat(Q(t3 === "inner" ? _2 : v2), '</span>\n <span class="aspect-other">').concat(Q(Z(e7.name))).concat(r3, '</span>\n <span class="aspect-meta">').concat(Q(n3), "</span>\n </div>");
6872
- }).join(""), b2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Ask Claude to interpret</button>' : "";
6873
- l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(G_(t2), ';font-family:serif;font-weight:700;font-size:16px">').concat(Q(d2), '</span>\n <div class="info-title">\n <div><strong>').concat(Q(u2), '</strong></div>\n <div class="info-subtitle"><em>').concat(Q(Z(f2)), " \xB7 ").concat(Q(Z(p2)), '</em></div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(_2), " planets in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(h2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(v2), " planets currently in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(g2, "outer"), "</div>\n ").concat(b2, "\n "), l2.classList.add("open"), l2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (s2 = document.getElementById("bi-info-close-btn")) == null || s2.addEventListener("click", () => {
6874
- xv(), Ov();
6880
+ }).join(""), b2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Interpret this</button>' : "";
6881
+ l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(K_(t2), ';font-family:serif;font-weight:700;font-size:16px">').concat(Q(d2), '</span>\n <div class="info-title">\n <div><strong>').concat(Q(u2), '</strong></div>\n <div class="info-subtitle"><em>').concat(Q(Z(f2)), " \xB7 ").concat(Q(Z(p2)), '</em></div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title" style="margin-top:6px">').concat(Q(_2), " planets in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(h2, "inner"), '</div>\n <div class="aspects-title" style="margin-top:8px">').concat(Q(v2), " planets currently in ").concat(Q(u2), '</div>\n <div class="aspects-list">').concat(y2(g2, "outer"), "</div>\n ").concat(b2, "\n "), l2.classList.add("open"), l2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (s2 = document.getElementById("bi-info-close-btn")) == null || s2.addEventListener("click", () => {
6882
+ Cv(), Av();
6875
6883
  }), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
6876
- if (!rv) return;
6884
+ if (!av) return;
6877
6885
  let e6 = document.getElementById("bi-ask-claude-sign-btn");
6878
- !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), rv({ type: "sign", data: { sign: u2, element: Z(f2), modality: Z(p2), mode: n2, inner_label: _2, outer_label: v2, inner_planets: h2.map((e7) => {
6886
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), av({ type: "sign", data: { sign: u2, element: Z(f2), modality: Z(p2), mode: n2, inner_label: _2, outer_label: v2, inner_planets: h2.map((e7) => {
6879
6887
  var t3;
6880
- return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6888
+ return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6881
6889
  }), outer_planets: g2.map((e7) => {
6882
6890
  var t3;
6883
- return { name: e7.name, position: J_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6891
+ return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6884
6892
  }) } }).then(() => {
6885
- e6.textContent = "\u2713 Sent to Claude", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6886
- e6.textContent = "\u2728 Ask Claude to interpret", e6.classList.remove("sent"), e6.disabled = false;
6893
+ e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6894
+ e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
6887
6895
  }, 2500);
6888
6896
  }).catch(() => {
6889
6897
  e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
6890
6898
  }));
6891
6899
  });
6892
6900
  }
6893
- function bv() {
6901
+ function Sv() {
6894
6902
  if (document.body.classList.contains("is-fullscreen")) {
6895
6903
  let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
6896
6904
  if (e6) {
@@ -6898,137 +6906,137 @@ function bv() {
6898
6906
  return t3 || (t3 = document.createElement("div"), t3.className = "info-drawer info-drawer--fs", e6.appendChild(t3)), t3;
6899
6907
  }
6900
6908
  }
6901
- if (uv && uv.isConnected) return uv;
6902
- uv = document.createElement("div"), uv.id = "bi-info-drawer", uv.className = "info-drawer";
6909
+ if (fv && fv.isConnected) return fv;
6910
+ fv = document.createElement("div"), fv.id = "bi-info-drawer", fv.className = "info-drawer";
6903
6911
  let e5 = document.getElementById("chart-container");
6904
- if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(uv, e5.nextSibling);
6912
+ if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(fv, e5.nextSibling);
6905
6913
  else {
6906
6914
  var t2;
6907
- (t2 = document.getElementById("app")) == null || t2.appendChild(uv);
6915
+ (t2 = document.getElementById("app")) == null || t2.appendChild(fv);
6908
6916
  }
6909
- return uv;
6917
+ return fv;
6910
6918
  }
6911
- function xv() {
6919
+ function Cv() {
6912
6920
  var e5;
6913
- uv == null || uv.classList.remove("open"), (e5 = document.querySelector("#fs-bottom-bar [data-column='right'] .info-drawer--fs")) == null || e5.classList.remove("open"), tv == null || tv(null);
6921
+ fv == null || fv.classList.remove("open"), (e5 = document.querySelector("#fs-bottom-bar [data-column='right'] .info-drawer--fs")) == null || e5.classList.remove("open"), rv == null || rv(null);
6914
6922
  }
6915
- function Sv(e5, t2, n2, r2, i2, a2, o2) {
6923
+ function wv(e5, t2, n2, r2, i2, a2, o2) {
6916
6924
  var s2, c2, l2, u2, d2;
6917
- let f2 = bv(), p2 = (s2 = P_[t2.name.toLowerCase()]) == null ? "\u2605" : s2, m2 = (c2 = F_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : c2, h2 = V_(t2.name, t2.longitude), g2;
6925
+ let f2 = Sv(), p2 = (s2 = F_[t2.name.toLowerCase()]) == null ? "\u2605" : s2, m2 = (c2 = I_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : c2, h2 = H_(t2.name, t2.longitude), g2;
6918
6926
  g2 = n2 === "inner" ? a2 ? "".concat(a2, " \xB7 Natal") : "Inner \xB7 Natal" : i2 === "transit" ? "Outer \xB7 Transit" : o2 ? "".concat(o2, " \xB7 Synastry") : "Outer \xB7 Synastry";
6919
6927
  let _2 = n2, v2 = r2.filter((e6) => n2 === "inner" && e6.planet1 === t2.name || n2 === "outer" && e6.planet2 === t2.name).sort((e6, t3) => e6.orb - t3.orb), y2 = v2.length ? v2.map((e6) => {
6920
6928
  var t3, r3, a3, o3, s3, c3, l3;
6921
- let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 = P_[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = L_[(o3 = (s3 = e6.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e6.type : a3) == null ? "\u2014" : r3, p3 = R_((c3 = (l3 = e6.type) == null ? void 0 : l3.toLowerCase()) == null ? "" : c3), m3 = "".concat(e6.orb.toFixed(1), "\xB0"), h3 = i2 === "transit" ? e6.applying ? "\u2197" : "\u2198" : e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide";
6929
+ let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 = F_[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = R_[(o3 = (s3 = e6.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e6.type : a3) == null ? "\u2014" : r3, p3 = z_((c3 = (l3 = e6.type) == null ? void 0 : l3.toLowerCase()) == null ? "" : c3), m3 = "".concat(e6.orb.toFixed(1), "\xB0"), h3 = i2 === "transit" ? e6.applying ? "\u2197" : "\u2198" : e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide";
6922
6930
  return '<div class="aspect-row">\n <span class="aspect-dot" style="background:'.concat(p3, '"></span>\n <span class="aspect-sym" style="color:').concat(p3, '">').concat(f3, '</span>\n <span class="aspect-other">').concat(Q(d3), " ").concat(Q(Z(u3)), '</span>\n <span class="aspect-meta">').concat(m3, " ").concat(h3, "</span>\n </div>");
6923
- }).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = I_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Ask Claude to interpret</button>' : "";
6924
- f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(J_(t2.longitude))).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Cross-Aspects</div>\n <div class="aspects-list">').concat(y2, "</div>\n ").concat(x2, "\n "), f2.classList.add("open"), f2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (u2 = document.getElementById("bi-info-close-btn")) == null || u2.addEventListener("click", () => {
6925
- xv(), Ov();
6931
+ }).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = L_[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Interpret this</button>' : "";
6932
+ f2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph">'.concat(Q(p2), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">\n <strong>').concat(Q(Z(t2.name)), "</strong>\n ").concat(t2.retrograde ? "<span style='color:#e05252'>\u211E</span>" : "", "\n ").concat(h2 ? '<span class="dignity-badge '.concat(h2.cssClass, '">').concat(h2.emoji, " ").concat(Q(h2.label), "</span>") : "", '\n <span class="wheel-badge ').concat(_2, '">').concat(Q(g2), '</span>\n </div>\n <div class="info-subtitle">').concat(Q(m2), " ").concat(Q(X_(t2.longitude))).concat(t2.house ? " \xB7 House ".concat(t2.house) : "", '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div class="aspects-title">Cross-Aspects</div>\n <div class="aspects-list">').concat(y2, "</div>\n ").concat(x2, "\n "), f2.classList.add("open"), f2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (u2 = document.getElementById("bi-info-close-btn")) == null || u2.addEventListener("click", () => {
6933
+ Cv(), Av();
6926
6934
  }), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
6927
6935
  var e6, r3;
6928
- if (!rv) return;
6936
+ if (!av) return;
6929
6937
  let a3 = document.getElementById("bi-ask-claude-planet-btn");
6930
- !a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), rv({ type: "planet", data: { planet_name: t2.name, wheel: n2, longitude: t2.longitude, sign: b2, position: "".concat(Math.floor(t2.longitude % 30), "\xB0 ").concat(b2), house: (e6 = t2.house) == null ? null : e6, retrograde: (r3 = t2.retrograde) == null ? false : r3, mode: i2, cross_aspects: v2.map((e7) => ({ type: e7.type, partner: n2 === "inner" ? e7.planet2 : e7.planet1, orb: e7.orb, applying: e7.applying, orb_label: i2 === "transit" ? e7.applying ? "applying" : "separating" : e7.orb <= 1 ? "exact" : e7.orb <= 3 ? "tight" : "wide" })) } }).then(() => {
6931
- a3.textContent = "\u2713 Sent to Claude", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
6932
- a3.textContent = "\u2728 Ask Claude to interpret", a3.classList.remove("sent"), a3.disabled = false;
6938
+ !a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), av({ type: "planet", data: { planet_name: t2.name, wheel: n2, longitude: t2.longitude, sign: b2, position: "".concat(Math.floor(t2.longitude % 30), "\xB0 ").concat(b2), house: (e6 = t2.house) == null ? null : e6, retrograde: (r3 = t2.retrograde) == null ? false : r3, mode: i2, cross_aspects: v2.map((e7) => ({ type: e7.type, partner: n2 === "inner" ? e7.planet2 : e7.planet1, orb: e7.orb, applying: e7.applying, orb_label: i2 === "transit" ? e7.applying ? "applying" : "separating" : e7.orb <= 1 ? "exact" : e7.orb <= 3 ? "tight" : "wide" })) } }).then(() => {
6939
+ a3.textContent = "\u2713 Sent", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
6940
+ a3.textContent = "\u2728 Interpret this", a3.classList.remove("sent"), a3.disabled = false;
6933
6941
  }, 2500);
6934
6942
  }).catch(() => {
6935
6943
  a3.textContent = "\u26A0 Failed \u2014 tap to retry", a3.classList.remove("sending"), a3.classList.add("error"), a3.disabled = false;
6936
6944
  }));
6937
6945
  });
6938
6946
  }
6939
- function Cv(e5, t2, n2, r2, i2) {
6947
+ function Tv(e5, t2, n2, r2, i2) {
6940
6948
  var a2, o2, s2, c2, l2, u2, d2, f2, p2;
6941
- let m2 = bv(), h2 = (a2 = P_[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = P_[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = L_[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = R_((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(Z(t2.planet1)) : Z(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(Z(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(Z(t2.planet2)) : Z(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = rv ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Ask Claude to interpret</button>' : "";
6949
+ let m2 = Sv(), h2 = (a2 = F_[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = F_[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = R_[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = z_((u2 = (d2 = t2.type) == null ? void 0 : d2.toLowerCase()) == null ? "" : u2), y2 = r2 ? "".concat(r2, "'s ").concat(Z(t2.planet1)) : Z(t2.planet1), b2 = n2 === "transit" ? "Tr. ".concat(Z(t2.planet2)) : i2 ? "".concat(i2, "'s ").concat(Z(t2.planet2)) : Z(t2.planet2), x2 = n2 === "transit" ? t2.applying ? "\u2197 Applying" : "\u2198 Separating" : t2.orb <= 1 ? "Exact" : t2.orb <= 3 ? "Tight" : "Wide", S2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Interpret this</button>' : "";
6942
6950
  m2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(v2, '">').concat(Q(String(_2)), '</span>\n <div class="info-title">\n <div style="display:flex;align-items:center;gap:5px;flex-wrap:wrap;">\n <strong>').concat(Q(h2), " ").concat(Q(y2), '</strong>\n <span style="color:').concat(v2, '">').concat(Q(String(_2)), "</span>\n <strong>").concat(Q(g2), " ").concat(Q(b2), '</strong>\n </div>\n <div class="info-subtitle">').concat(t2.orb.toFixed(1), "\xB0 orb \xB7 ").concat(Q(x2), '</div>\n </div>\n <button class="info-close" id="bi-info-close-btn">\u2715</button>\n </div>\n <div style="display:flex;gap:6px;margin-bottom:10px;">\n <span class="wheel-badge inner">Inner \xB7 ').concat(Q(y2), '</span>\n <span class="wheel-badge outer">Outer \xB7 ').concat(Q(b2), "</span>\n </div>\n ").concat(S2, "\n "), m2.classList.add("open"), m2.scrollIntoView({ behavior: "smooth", block: "nearest" }), (f2 = document.getElementById("bi-info-close-btn")) == null || f2.addEventListener("click", () => {
6943
- xv(), Ov();
6951
+ Cv(), Av();
6944
6952
  }), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
6945
- if (!rv) return;
6953
+ if (!av) return;
6946
6954
  let e6 = document.getElementById("bi-ask-claude-asp-btn");
6947
- !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), rv({ type: "cross_aspect", data: { planet1: t2.planet1, wheel1: t2.wheel1, planet2: t2.planet2, wheel2: t2.wheel2, aspect_type: t2.type, orb: t2.orb, applying: t2.applying, mode: n2 } }).then(() => {
6948
- e6.textContent = "\u2713 Sent to Claude", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6949
- e6.textContent = "\u2728 Ask Claude to interpret", e6.classList.remove("sent"), e6.disabled = false;
6955
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), av({ type: "cross_aspect", data: { planet1: t2.planet1, wheel1: t2.wheel1, planet2: t2.planet2, wheel2: t2.wheel2, aspect_type: t2.type, orb: t2.orb, applying: t2.applying, mode: n2 } }).then(() => {
6956
+ e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6957
+ e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
6950
6958
  }, 2500);
6951
6959
  }).catch(() => {
6952
6960
  e6.textContent = "\u26A0 Failed \u2014 tap to retry", e6.classList.remove("sending"), e6.classList.add("error"), e6.disabled = false;
6953
6961
  }));
6954
6962
  });
6955
6963
  }
6956
- function wv(e5, t2) {
6957
- fv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6964
+ function Ev(e5, t2) {
6965
+ mv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6958
6966
  let o2 = a2.split("|");
6959
6967
  (t2 === "inner" ? o2[0] === e5 : o2[2] === e5) ? (n2.style.stroke = r2, n2.style.strokeOpacity = "0.92", n2.style.strokeWidth = "1.8", n2.removeAttribute("stroke-dasharray"), n2.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e6) => e6.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e6) => e6.style.opacity = "0.15"));
6960
- }), Ev(e5, t2);
6968
+ }), Ov(e5, t2);
6961
6969
  }
6962
- function Tv(e5, t2) {
6963
- fv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6970
+ function Dv(e5, t2) {
6971
+ mv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6964
6972
  a2 === e5 ? (n2.style.stroke = t2, n2.style.strokeOpacity = "0.95", n2.style.strokeWidth = "2", n2.removeAttribute("stroke-dasharray"), n2.setAttribute("filter", "url(#aspect-glow)"), i2.forEach((e6) => e6.style.opacity = "1")) : (n2.style.strokeOpacity = "0.05", n2.style.strokeWidth = "0.5", n2.removeAttribute("filter"), i2.forEach((e6) => e6.style.opacity = "0.15"));
6965
6973
  });
6966
6974
  }
6967
- function Ev(e5, t2) {
6975
+ function Ov(e5, t2) {
6968
6976
  let n2 = e5.toLowerCase(), r2 = /* @__PURE__ */ new Set(), i2 = /* @__PURE__ */ new Set();
6969
- fv.forEach((e6, a3) => {
6977
+ mv.forEach((e6, a3) => {
6970
6978
  var o2, s2;
6971
6979
  let c2 = a3.split("|"), l2 = ((o2 = c2[0]) == null ? "" : o2).toLowerCase(), u2 = ((s2 = c2[2]) == null ? "" : s2).toLowerCase();
6972
6980
  t2 === "inner" && l2 === n2 && i2.add(u2), t2 === "outer" && u2 === n2 && r2.add(l2);
6973
6981
  });
6974
6982
  let a2 = (e6, t3) => t3 === "inner" && r2.has(e6) || t3 === "outer" && i2.has(e6);
6975
- dv == null || dv.querySelectorAll(".planet-hit").forEach((e6) => {
6983
+ pv == null || pv.querySelectorAll(".planet-hit").forEach((e6) => {
6976
6984
  var r3;
6977
6985
  let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3, s2 = o2 === n2 && i3 === t2, c2 = !s2 && a2(o2, i3);
6978
6986
  e6.classList.toggle("dim", !s2 && !c2);
6979
- }), dv == null || dv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
6987
+ }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
6980
6988
  var r3;
6981
6989
  let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3;
6982
6990
  o2 === n2 && i3 === t2 ? e6.style.opacity = "1" : a2(o2, i3) ? e6.style.opacity = "0.55" : e6.style.opacity = "0.12";
6983
6991
  });
6984
6992
  }
6985
- function Dv() {
6986
- fv.forEach(({ vis: e5, symbolEls: t2 }) => {
6993
+ function kv() {
6994
+ mv.forEach(({ vis: e5, symbolEls: t2 }) => {
6987
6995
  e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.5", e5.removeAttribute("filter"), t2.forEach((e6) => e6.style.opacity = "0.15");
6988
- }), dv == null || dv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6996
+ }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6989
6997
  e5.style.opacity = "0.3";
6990
- }), dv == null || dv.querySelectorAll(".planet-hit").forEach((e5) => {
6998
+ }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e5) => {
6991
6999
  e5.classList.add("dim");
6992
7000
  });
6993
7001
  }
6994
- function Ov() {
6995
- fv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
6996
- let i2 = z_(n2 == null ? 4 : n2);
7002
+ function Av() {
7003
+ mv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
7004
+ let i2 = B_(n2 == null ? 4 : n2);
6997
7005
  e5.style.stroke = t2, e5.style.strokeOpacity = i2.opacity, e5.style.strokeWidth = i2.width, e5.removeAttribute("filter"), i2.dash ? e5.setAttribute("stroke-dasharray", i2.dash) : e5.removeAttribute("stroke-dasharray"), r2.forEach((e6) => e6.style.opacity = "");
6998
- }), dv == null || dv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
7006
+ }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6999
7007
  e5.style.opacity = "";
7000
- }), dv == null || dv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), Lv();
7008
+ }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), zv();
7001
7009
  }
7002
- function kv(e5) {
7003
- fv.forEach(({ vis: t2, symbolEls: n2 }) => {
7010
+ function jv(e5) {
7011
+ mv.forEach(({ vis: t2, symbolEls: n2 }) => {
7004
7012
  t2.style.display = e5 ? "" : "none", n2.forEach((t3) => t3.style.display = e5 ? "" : "none");
7005
- }), dv == null || dv.querySelectorAll(".aspect-hit").forEach((t2) => {
7013
+ }), pv == null || pv.querySelectorAll(".aspect-hit").forEach((t2) => {
7006
7014
  t2.style.display = e5 ? "" : "none";
7007
7015
  });
7008
7016
  }
7009
- function Av(e5, t2, n2) {
7017
+ function Mv(e5, t2, n2) {
7010
7018
  return "".concat(e5, "|inner|").concat(t2, "|outer|").concat(n2);
7011
7019
  }
7012
- function jv(e5, t2, n2, r2, i2) {
7020
+ function Nv(e5, t2, n2, r2, i2) {
7013
7021
  return t2 === "inner" && r2 === "outer" ? "".concat(e5, "|inner|").concat(n2, "|outer|").concat(i2) : r2 === "inner" && t2 === "outer" ? "".concat(n2, "|inner|").concat(e5, "|outer|").concat(i2) : [e5, n2].sort().join("|") + "|".concat(i2);
7014
7022
  }
7015
- function Mv(e5, t2) {
7023
+ function Pv(e5, t2) {
7016
7024
  return e5.filter((e6) => {
7017
7025
  var n2;
7018
7026
  return ((n2 = e6.type) == null ? "" : n2).toLowerCase() === t2;
7019
7027
  });
7020
7028
  }
7021
- function Nv(e5) {
7029
+ function Fv(e5) {
7022
7030
  let t2 = [];
7023
7031
  if (!e5.length) return t2;
7024
- let n2 = Mv(e5, "trine"), r2 = Mv(e5, "square"), i2 = Mv(e5, "opposition"), a2 = Mv(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
7032
+ let n2 = Pv(e5, "trine"), r2 = Pv(e5, "square"), i2 = Pv(e5, "opposition"), a2 = Pv(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
7025
7033
  for (let e6 = 0; e6 < n2.length; e6++) for (let r3 = e6 + 1; r3 < n2.length; r3++) {
7026
7034
  let i3 = n2[e6], a3 = n2[r3];
7027
7035
  if (i3.planet1 !== a3.planet1) continue;
7028
7036
  let s3 = i3.planet1, c3 = i3.planet2, l2 = a3.planet2;
7029
7037
  if (c3 === l2) continue;
7030
7038
  let u2 = [s3, c3, l2].sort().join("|");
7031
- o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(Z(s3), " trines ").concat(Z(c3), " & ").concat(Z(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [Av(s3, c3, "trine"), Av(s3, l2, "trine")] }));
7039
+ o2.has(u2) || (o2.add(u2), t2.push({ name: "Cross Trine", description: "".concat(Z(s3), " trines ").concat(Z(c3), " & ").concat(Z(l2)), planets: [{ name: s3, wheel: "inner" }, { name: c3, wheel: "outer" }, { name: l2, wheel: "outer" }], aspectKeys: [Mv(s3, c3, "trine"), Mv(s3, l2, "trine")] }));
7032
7040
  }
7033
7041
  let s2 = /* @__PURE__ */ new Set();
7034
7042
  for (let e6 of i2) {
@@ -7043,7 +7051,7 @@ function Nv(e5) {
7043
7051
  if (s2.has(c3)) continue;
7044
7052
  let l2;
7045
7053
  if (l2 = o3 === "outer" ? e7 : r2.find((e8) => e8.planet1 === a3 && e8.planet2 === i3), l2) {
7046
- s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(Z(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [Av(n3, i3, "opposition"), jv(n3, "inner", a3, o3, "square"), jv(a3, o3, i3, "outer", "square")] });
7054
+ s2.add(c3), t2.push({ name: "Cross T-Square", description: "Apex: ".concat(Z(a3), " (").concat(o3, ")"), planets: [{ name: n3, wheel: "inner" }, { name: i3, wheel: "outer" }, { name: a3, wheel: o3 }], aspectKeys: [Mv(n3, i3, "opposition"), Nv(n3, "inner", a3, o3, "square"), Nv(a3, o3, i3, "outer", "square")] });
7047
7055
  break;
7048
7056
  }
7049
7057
  }
@@ -7059,26 +7067,26 @@ function Nv(e5) {
7059
7067
  for (let [r3, i3] of e6) {
7060
7068
  if (i3.length < 2) continue;
7061
7069
  let e7 = "".concat(r3, "|").concat([...i3].sort().join("|"));
7062
- n3.has(e7) || (n3.add(e7), t2.push({ name: "Cross Stellium", description: "".concat(Z(r3), " conjunct ").concat(i3.map(Z).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e8) => ({ name: e8, wheel: "outer" }))], aspectKeys: i3.map((e8) => Av(r3, e8, "conjunction")) }));
7070
+ n3.has(e7) || (n3.add(e7), t2.push({ name: "Cross Stellium", description: "".concat(Z(r3), " conjunct ").concat(i3.map(Z).join(" & "), " (cross-wheel)"), planets: [{ name: r3, wheel: "inner" }, ...i3.map((e8) => ({ name: e8, wheel: "outer" }))], aspectKeys: i3.map((e8) => Mv(r3, e8, "conjunction")) }));
7063
7071
  }
7064
7072
  }
7065
7073
  return t2;
7066
7074
  }
7067
- var Pv = { "Cross Trine": "rgba( 82,168,224, 0.14)", "Cross T-Square": "rgba(224,138, 82, 0.14)", "Cross Stellium": "rgba(154,127,212, 0.14)" }, Fv = { "Cross Trine": "rgba( 82,168,224, 0.70)", "Cross T-Square": "rgba(224,138, 82, 0.70)", "Cross Stellium": "rgba(154,127,212, 0.70)" };
7068
- function Iv(e5, t2, n2, r2) {
7075
+ var Iv = { "Cross Trine": "rgba( 82,168,224, 0.14)", "Cross T-Square": "rgba(224,138, 82, 0.14)", "Cross Stellium": "rgba(154,127,212, 0.14)" }, Lv = { "Cross Trine": "rgba( 82,168,224, 0.70)", "Cross T-Square": "rgba(224,138, 82, 0.70)", "Cross Stellium": "rgba(154,127,212, 0.70)" };
7076
+ function Rv(e5, t2, n2, r2) {
7069
7077
  var i2, a2;
7070
- if (!dv) return null;
7078
+ if (!pv) return null;
7071
7079
  let o2 = /* @__PURE__ */ new Map();
7072
7080
  for (let e6 of t2) o2.set(e6.name.toLowerCase(), e6.longitude);
7073
7081
  let s2 = /* @__PURE__ */ new Map();
7074
7082
  for (let e6 of n2) s2.set(e6.name.toLowerCase(), e6.longitude);
7075
7083
  let c2 = [];
7076
7084
  for (let { name: t3, wheel: n3 } of e5.planets) {
7077
- let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ? k_ : M_, a3 = e6.get(t3.toLowerCase());
7085
+ let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ? A_ : N_, a3 = e6.get(t3.toLowerCase());
7078
7086
  a3 != null && c2.push(Y(a3, i3, r2));
7079
7087
  }
7080
7088
  if (c2.length < 2) return null;
7081
- let l2 = (i2 = Pv[e5.name]) == null ? "rgba(128,128,128,0.12)" : i2, u2 = (a2 = Fv[e5.name]) == null ? "rgba(128,128,128,0.60)" : a2, d2;
7089
+ let l2 = (i2 = Iv[e5.name]) == null ? "rgba(128,128,128,0.12)" : i2, u2 = (a2 = Lv[e5.name]) == null ? "rgba(128,128,128,0.60)" : a2, d2;
7082
7090
  if (c2.length === 2) {
7083
7091
  let e6 = X("line");
7084
7092
  e6.setAttribute("x1", c2[0].x.toFixed(1)), e6.setAttribute("y1", c2[0].y.toFixed(1)), e6.setAttribute("x2", c2[1].x.toFixed(1)), e6.setAttribute("y2", c2[1].y.toFixed(1)), e6.setAttribute("stroke", u2), e6.setAttribute("stroke-width", "2"), e6.setAttribute("fill", "none"), d2 = e6;
@@ -7087,37 +7095,37 @@ function Iv(e5, t2, n2, r2) {
7087
7095
  t3.setAttribute("points", e6.map((e7) => "".concat(e7.x.toFixed(1), ",").concat(e7.y.toFixed(1))).join(" ")), t3.setAttribute("fill", l2), t3.setAttribute("stroke", u2), t3.setAttribute("stroke-width", "1.5"), t3.setAttribute("stroke-linejoin", "round"), d2 = t3;
7088
7096
  }
7089
7097
  d2.setAttribute("pointer-events", "none"), d2.setAttribute("class", "pattern-overlay");
7090
- let f2 = dv.querySelector(".aspect-hit");
7091
- return f2 ? dv.insertBefore(d2, f2) : dv.appendChild(d2), d2;
7098
+ let f2 = pv.querySelector(".aspect-hit");
7099
+ return f2 ? pv.insertBefore(d2, f2) : pv.appendChild(d2), d2;
7092
7100
  }
7093
- function Lv() {
7094
- dv == null || dv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
7101
+ function zv() {
7102
+ pv == null || pv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
7095
7103
  }
7096
- function Rv(e5) {
7104
+ function Bv(e5) {
7097
7105
  let t2 = new Set(e5.aspectKeys);
7098
- fv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
7106
+ mv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
7099
7107
  t2.has(i2) ? (e6.style.stroke = n3, e6.style.strokeOpacity = "0.92", e6.style.strokeWidth = "1.8", e6.removeAttribute("stroke-dasharray"), e6.setAttribute("filter", "url(#aspect-glow)"), r2.forEach((e7) => e7.style.opacity = "1")) : (e6.style.strokeOpacity = "0.05", e6.style.strokeWidth = "0.5", e6.removeAttribute("filter"), r2.forEach((e7) => e7.style.opacity = "0.15"));
7100
7108
  });
7101
7109
  let n2 = new Set(e5.planets.map((e6) => "".concat(e6.name.toLowerCase(), "|").concat(e6.wheel)));
7102
- dv == null || dv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7110
+ pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7103
7111
  var t3, r2;
7104
7112
  let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
7105
7113
  e6.style.opacity = n2.has(i2) ? "1" : "0.12";
7106
- }), dv == null || dv.querySelectorAll(".planet-hit").forEach((e6) => {
7114
+ }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e6) => {
7107
7115
  var t3, r2;
7108
7116
  let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
7109
7117
  e6.classList.toggle("dim", !n2.has(i2));
7110
7118
  });
7111
7119
  }
7112
- function zv(e5, t2, n2, r2, i2, a2) {
7120
+ function Vv(e5, t2, n2, r2, i2, a2) {
7113
7121
  var o2, s2, c2, l2, u2, d2, f2, p2, m2, h2, g2, _2;
7114
- rv = i2 == null ? null : i2;
7122
+ av = i2 == null ? null : i2;
7115
7123
  let v2 = (o2 = t2.mode) == null ? "synastry" : o2, y2 = (s2 = t2._birth_params_inner) == null ? void 0 : s2.location, b2 = (c2 = t2._birth_params_outer) == null ? void 0 : c2.location, x2 = e5.querySelector("#pan-zoom-controls");
7116
- e5.innerHTML = "", x2 && e5.appendChild(x2), fv.clear(), xv();
7117
- let S2 = Q_(t2.inner), ee2 = Q_(t2.outer), C2 = (l2 = t2.inner_houses) == null ? [] : l2, te2 = (u2 = t2.cross_aspects) == null ? [] : u2;
7118
- te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 = ev(S2, ee2));
7119
- let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 = W_(), E2 = X("svg");
7120
- E2.setAttribute("viewBox", "0 0 620 620"), E2.setAttribute("width", "100%"), E2.setAttribute("height", "100%"), E2.style.display = "block", e5.appendChild(E2), dv = E2;
7124
+ e5.innerHTML = "", x2 && e5.appendChild(x2), mv.clear(), Cv();
7125
+ let S2 = ev(t2.inner), ee2 = ev(t2.outer), C2 = (l2 = t2.inner_houses) == null ? [] : l2, te2 = (u2 = t2.cross_aspects) == null ? [] : u2;
7126
+ te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 = nv(S2, ee2));
7127
+ let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 = G_(), E2 = X("svg");
7128
+ E2.setAttribute("viewBox", "0 0 620 620"), E2.setAttribute("width", "100%"), E2.setAttribute("height", "100%"), E2.style.display = "block", e5.appendChild(E2), pv = E2;
7121
7129
  let ne2 = X("defs");
7122
7130
  ne2.innerHTML = '\n <filter id="aspect-glow" x="-50%" y="-50%" width="200%" height="200%">\n <feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur" />\n <feComposite in="SourceGraphic" in2="blur" operator="over" />\n </filter>\n ', E2.appendChild(ne2), i_(E2, "pan-zoom-controls");
7123
7131
  let re2 = X("g");
@@ -7133,223 +7141,254 @@ function zv(e5, t2, n2, r2, i2, a2) {
7133
7141
  let se2 = X("g");
7134
7142
  E2.appendChild(se2);
7135
7143
  let ce2 = X("circle");
7136
- ce2.setAttribute("cx", "310"), ce2.setAttribute("cy", "310"), ce2.setAttribute("r", "304"), ce2.style.fill = "var(--bg, #faf9f5)", ce2.setAttribute("stroke", T2 ? "#2a2a3a" : "#d4cec8"), ce2.setAttribute("stroke-width", "0.5"), ce2.setAttribute("pointer-events", "none"), re2.appendChild(ce2);
7137
- let le2 = X("circle");
7138
- le2.setAttribute("cx", "310"), le2.setAttribute("cy", "310"), le2.setAttribute("r", String(A_)), le2.setAttribute("fill", "var(--outer-ring, #fdf5e4)"), le2.setAttribute("stroke", "var(--outer-stroke, #d4ac60)"), le2.setAttribute("stroke-width", "0.8"), le2.setAttribute("pointer-events", "none"), D2.appendChild(le2);
7139
- let ue2 = X("circle");
7140
- ue2.setAttribute("cx", "310"), ue2.setAttribute("cy", "310"), ue2.setAttribute("r", String(j_)), ue2.style.fill = "var(--bg, #faf9f5)", ue2.setAttribute("stroke", "var(--outer-stroke, #d4ac60)"), ue2.setAttribute("stroke-width", "0.8"), ue2.setAttribute("pointer-events", "none"), D2.appendChild(ue2);
7141
- for (let e6 = 0; e6 < 12; e6++) K_(D2, w2, e6, j_, A_, Bv(l_(e6, T2)), 0.16);
7142
- let de2 = T2 ? "rgba(200,155,65,0.32)" : "rgba(180,140,60,0.28)", fe2 = T2 ? "rgba(200,155,65,0.62)" : "rgba(180,140,60,0.55)";
7144
+ ce2.setAttribute("cx", "310"), ce2.setAttribute("cy", "310"), ce2.setAttribute("r", "304"), ce2.style.fill = "var(--bg, #faf9f5)";
7145
+ let le2 = d_(T2), ue2 = (e6, t3) => {
7146
+ e6.setAttribute("stroke", le2.ring.stroke), e6.setAttribute("stroke-opacity", String(le2.ring.opacity)), e6.setAttribute("stroke-width", t3);
7147
+ };
7148
+ ue2(ce2, "0.5"), ce2.setAttribute("pointer-events", "none"), re2.appendChild(ce2);
7149
+ let de2 = X("circle");
7150
+ de2.setAttribute("cx", "310"), de2.setAttribute("cy", "310"), de2.setAttribute("r", String(j_)), de2.setAttribute("fill", "var(--outer-ring, #fdf5e4)"), ue2(de2, "0.8"), de2.setAttribute("pointer-events", "none"), D2.appendChild(de2);
7151
+ let fe2 = X("circle");
7152
+ fe2.setAttribute("cx", "310"), fe2.setAttribute("cy", "310"), fe2.setAttribute("r", String(M_)), fe2.style.fill = "var(--bg, #faf9f5)", ue2(fe2, "0.8"), fe2.setAttribute("pointer-events", "none"), D2.appendChild(fe2);
7153
+ for (let e6 = 0; e6 < 12; e6++) J_(D2, w2, e6, M_, j_, Hv(l_(e6, T2)), 0.16);
7143
7154
  for (let e6 = 0; e6 < 12; e6++) {
7144
- let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, j_, w2), { x: i3, y: a3 } = Y(t3, A_, w2), o3 = X("line");
7145
- o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), o3.setAttribute("stroke", "var(--outer-stroke, #d4ac60)"), o3.setAttribute("stroke-width", "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
7155
+ let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, M_, w2), { x: i3, y: a3 } = Y(t3, j_, w2), o3 = X("line");
7156
+ o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), ue2(o3, "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
7146
7157
  let { x: s3, y: c3 } = Y(t3 + 15, 536 / 2, w2), l3 = X("text");
7147
- l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "12"), l3.setAttribute("fill", Bv(l_(e6, T2))), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = a_, l3.textContent = F_[e6], D2.appendChild(l3);
7158
+ l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "12"), l3.setAttribute("fill", Hv(l_(e6, T2))), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = a_, l3.textContent = I_[e6], D2.appendChild(l3);
7148
7159
  for (let e7 = 1; e7 < 30; e7++) {
7149
- let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? A_ - 8 : A_ - 3.5, { x: a4, y: o4 } = Y(n4, A_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7150
- l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1)), l4.setAttribute("stroke", r4 ? fe2 : de2), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
7151
- }
7152
- let { x: u3, y: d3 } = Y(t3, A_, w2), { x: f3, y: p3 } = Y(t3 + 30, A_, w2), { x: m3, y: h3 } = Y(t3, j_, w2), { x: g3, y: _3 } = Y(t3 + 30, j_, w2), x3 = X("path");
7153
- x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(A_, " ").concat(A_, " 0 0 0 ").concat(f3.toFixed(1), " ").concat(p3.toFixed(1)), "L ".concat(g3.toFixed(1), " ").concat(_3.toFixed(1)), "A ".concat(j_, " ").concat(j_, " 0 0 1 ").concat(m3.toFixed(1), " ").concat(h3.toFixed(1)), "Z"].join(" ")), x3.setAttribute("fill", "transparent"), x3.setAttribute("class", "hit-region sign-hit"), x3.style.pointerEvents = "all", x3.style.cursor = "pointer";
7154
- let C3 = "".concat(F_[e6], " ").concat(I_[e6]), te3 = "".concat(Z(H_[e6]), " \xB7 ").concat(Z(U_[e6]));
7155
- Vv(x3, "".concat(I_[e6], " \u2014 click for sign info")), x3.addEventListener("mouseenter", (e7) => ov(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mousemove", (e7) => ov(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mouseleave", sv), x3.addEventListener("click", (t4) => {
7156
- sv(), tv == null || tv("".concat(C3)), yv(t4, e6, v2, y2, b2, S2, ee2);
7160
+ let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? j_ - 8 : j_ - 3.5, { x: a4, y: o4 } = Y(n4, j_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7161
+ l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1));
7162
+ let u4 = r4 ? le2.tickMajor : le2.tickMinor;
7163
+ l4.setAttribute("stroke", u4.stroke), l4.setAttribute("stroke-opacity", String(u4.opacity)), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
7164
+ }
7165
+ let { x: u3, y: d3 } = Y(t3, j_, w2), { x: f3, y: p3 } = Y(t3 + 30, j_, w2), { x: m3, y: h3 } = Y(t3, M_, w2), { x: g3, y: _3 } = Y(t3 + 30, M_, w2), x3 = X("path");
7166
+ x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(j_, " ").concat(j_, " 0 0 0 ").concat(f3.toFixed(1), " ").concat(p3.toFixed(1)), "L ".concat(g3.toFixed(1), " ").concat(_3.toFixed(1)), "A ".concat(M_, " ").concat(M_, " 0 0 1 ").concat(m3.toFixed(1), " ").concat(h3.toFixed(1)), "Z"].join(" ")), x3.setAttribute("fill", "transparent"), x3.setAttribute("class", "hit-region sign-hit"), x3.style.pointerEvents = "all", x3.style.cursor = "pointer";
7167
+ let C3 = "".concat(I_[e6], " ").concat(L_[e6]), te3 = "".concat(Z(U_[e6]), " \xB7 ").concat(Z(W_[e6]));
7168
+ Uv(x3, "".concat(L_[e6], " \u2014 click for sign info")), x3.addEventListener("mouseenter", (e7) => cv(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mousemove", (e7) => cv(e7.clientX, e7.clientY, C3, te3, "Click for interpretation")), x3.addEventListener("mouseleave", lv), x3.addEventListener("click", (t4) => {
7169
+ lv(), rv == null || rv("".concat(C3)), xv(t4, e6, v2, y2, b2, S2, ee2);
7157
7170
  }), se2.appendChild(x3);
7158
7171
  }
7159
7172
  let pe2 = X("circle");
7160
- pe2.setAttribute("cx", "310"), pe2.setAttribute("cy", "310"), pe2.setAttribute("r", String(w_)), pe2.setAttribute("fill", "var(--inner-ring, #f2ede6)"), pe2.setAttribute("stroke", "var(--inner-stroke, #c0b8a8)"), pe2.setAttribute("stroke-width", "0.5"), pe2.setAttribute("pointer-events", "none"), D2.appendChild(pe2);
7173
+ pe2.setAttribute("cx", "310"), pe2.setAttribute("cy", "310"), pe2.setAttribute("r", String(T_)), pe2.setAttribute("fill", "var(--inner-ring, #f2ede6)"), ue2(pe2, "0.6"), pe2.setAttribute("pointer-events", "none"), D2.appendChild(pe2);
7161
7174
  let me2 = X("circle");
7162
- me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(T_)), me2.style.fill = "var(--bg, #faf9f5)", me2.setAttribute("stroke", "var(--inner-stroke, #c0b8a8)"), me2.setAttribute("stroke-width", "0.5"), me2.setAttribute("pointer-events", "none"), D2.appendChild(me2);
7163
- for (let e6 = 0; e6 < 12; e6++) K_(D2, w2, e6, T_, w_, l_(e6, T2), T2 ? 0.2 : 0.12);
7164
- let he2 = T2 ? "rgba(180,170,160,0.28)" : "rgba(100,90,80,0.22)", ge2 = T2 ? "rgba(180,170,160,0.50)" : "rgba(100,90,80,0.40)";
7175
+ me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(E_)), me2.style.fill = "var(--bg, #faf9f5)", ue2(me2, "0.6"), me2.setAttribute("pointer-events", "none"), D2.appendChild(me2);
7176
+ for (let e6 = 0; e6 < 12; e6++) J_(D2, w2, e6, E_, T_, l_(e6, T2), c_(T2).zodiacFillOpacity);
7165
7177
  for (let e6 = 0; e6 < 12; e6++) {
7166
- let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, T_, w2), { x: i3, y: a3 } = Y(t3, w_, w2), o3 = X("line");
7167
- o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), o3.setAttribute("stroke", "var(--inner-stroke, #c0b8a8)"), o3.setAttribute("stroke-width", "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
7178
+ let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, E_, w2), { x: i3, y: a3 } = Y(t3, T_, w2), o3 = X("line");
7179
+ o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), ue2(o3, "0.5"), o3.setAttribute("pointer-events", "none"), D2.appendChild(o3);
7168
7180
  let { x: s3, y: c3 } = Y(t3 + 15, 444 / 2, w2), l3 = X("text");
7169
- l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "13"), l3.setAttribute("fill", l_(e6, T2)), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = a_, l3.textContent = F_[e6], D2.appendChild(l3);
7181
+ l3.setAttribute("x", s3.toFixed(1)), l3.setAttribute("y", c3.toFixed(1)), l3.setAttribute("text-anchor", "middle"), l3.setAttribute("dominant-baseline", "central"), l3.setAttribute("font-size", "13"), l3.setAttribute("fill", l_(e6, T2)), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = a_, l3.textContent = I_[e6], D2.appendChild(l3);
7170
7182
  for (let e7 = 1; e7 < 30; e7++) {
7171
- let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? w_ - 7 : w_ - 3, { x: a4, y: o4 } = Y(n4, w_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7172
- l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1)), l4.setAttribute("stroke", r4 ? ge2 : he2), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
7173
- }
7174
- }
7175
- let _e2 = X("g");
7176
- _e2.setAttribute("pointer-events", "none"), _e2.setAttribute("opacity", T2 ? "0.18" : "0.10"), _e2.setAttribute("transform", "translate(".concat(S_, ", ").concat(C_, ")"));
7177
- let ve2 = X("circle");
7178
- ve2.setAttribute("cx", "0"), ve2.setAttribute("cy", "0"), ve2.setAttribute("r", "46"), ve2.setAttribute("fill", "none"), ve2.setAttribute("stroke", "var(--gold, #c8a84b)"), ve2.setAttribute("stroke-width", "2"), _e2.appendChild(ve2);
7179
- let ye2 = X("circle");
7180
- ye2.setAttribute("cx", "0"), ye2.setAttribute("cy", "0"), ye2.setAttribute("r", "36"), ye2.setAttribute("fill", "none"), ye2.setAttribute("stroke", "var(--gold, #c8a84b)"), ye2.setAttribute("stroke-width", "0.7"), _e2.appendChild(ye2);
7181
- let be2 = X("text");
7182
- be2.setAttribute("x", "0"), be2.setAttribute("y", "1"), be2.setAttribute("text-anchor", "middle"), be2.setAttribute("dominant-baseline", "central"), be2.setAttribute("font-size", "18"), be2.setAttribute("font-weight", "600"), be2.setAttribute("letter-spacing", "3"), be2.setAttribute("fill", "var(--gold, #c8a84b)"), be2.style.fontFamily = "'Geist', system-ui, sans-serif", be2.textContent = "OE", _e2.appendChild(be2);
7183
+ let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? T_ - 7 : T_ - 3, { x: a4, y: o4 } = Y(n4, T_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7184
+ l4.setAttribute("x1", a4.toFixed(1)), l4.setAttribute("y1", o4.toFixed(1)), l4.setAttribute("x2", s4.toFixed(1)), l4.setAttribute("y2", c4.toFixed(1));
7185
+ let u3 = r4 ? le2.tickMajor : le2.tickMinor;
7186
+ l4.setAttribute("stroke", u3.stroke), l4.setAttribute("stroke-opacity", String(u3.opacity)), l4.setAttribute("stroke-width", r4 ? "0.8" : "0.5"), l4.setAttribute("pointer-events", "none"), D2.appendChild(l4);
7187
+ }
7188
+ }
7189
+ let he2 = X("g");
7190
+ he2.setAttribute("pointer-events", "none"), he2.setAttribute("opacity", T2 ? "0.18" : "0.10"), he2.setAttribute("transform", "translate(".concat(C_, ", ").concat(w_, ")"));
7191
+ let ge2 = X("circle");
7192
+ ge2.setAttribute("cx", "0"), ge2.setAttribute("cy", "0"), ge2.setAttribute("r", "46"), ge2.setAttribute("fill", "none"), ge2.setAttribute("stroke", "var(--gold, #c8a84b)"), ge2.setAttribute("stroke-width", "2"), he2.appendChild(ge2);
7193
+ let _e2 = X("circle");
7194
+ _e2.setAttribute("cx", "0"), _e2.setAttribute("cy", "0"), _e2.setAttribute("r", "36"), _e2.setAttribute("fill", "none"), _e2.setAttribute("stroke", "var(--gold, #c8a84b)"), _e2.setAttribute("stroke-width", "0.7"), he2.appendChild(_e2);
7195
+ let ve2 = X("text");
7196
+ ve2.setAttribute("x", "0"), ve2.setAttribute("y", "1"), ve2.setAttribute("text-anchor", "middle"), ve2.setAttribute("dominant-baseline", "central"), ve2.setAttribute("font-size", "18"), ve2.setAttribute("font-weight", "600"), ve2.setAttribute("letter-spacing", "3"), ve2.setAttribute("fill", "var(--gold, #c8a84b)"), ve2.style.fontFamily = "'Geist', system-ui, sans-serif", ve2.textContent = "OE", he2.appendChild(ve2);
7183
7197
  for (let e6 of [0, 90, 180, 270]) {
7184
7198
  let t3 = e6 * Math.PI / 180, n3 = Math.cos(t3) * 38, r3 = Math.sin(t3) * 38, i3 = Math.cos(t3) * 46, a3 = Math.sin(t3) * 46, o3 = X("line");
7185
- o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), o3.setAttribute("stroke", "var(--gold, #c8a84b)"), o3.setAttribute("stroke-width", "1.5"), _e2.appendChild(o3);
7186
- }
7187
- re2.appendChild(_e2);
7188
- let O2 = X("circle");
7189
- O2.setAttribute("cx", "310"), O2.setAttribute("cy", "310"), O2.setAttribute("r", String(T_)), O2.style.fill = "var(--surface, #f2f1ea)", O2.setAttribute("pointer-events", "none"), ie2.appendChild(O2);
7190
- let xe2 = X("circle");
7191
- if (xe2.setAttribute("cx", "310"), xe2.setAttribute("cy", "310"), xe2.setAttribute("r", String(O_)), xe2.style.fill = "var(--bg, #faf9f5)", xe2.setAttribute("stroke", "var(--inner-stroke, #c0b8a8)"), xe2.setAttribute("stroke-width", "0.8"), xe2.setAttribute("pointer-events", "none"), ie2.appendChild(xe2), C2.length > 0) for (let e6 = 0; e6 < C2.length; e6++) {
7192
- let t3 = C2[e6], n3 = C2[(e6 + 1) % C2.length], r3 = [1, 4, 7, 10].includes(t3.number), { x: i3, y: a3 } = Y(t3.cusp_lon, O_, w2), { x: o3, y: s3 } = Y(t3.cusp_lon, T_, w2), c3 = X("line");
7193
- c3.setAttribute("x1", i3.toFixed(1)), c3.setAttribute("y1", a3.toFixed(1)), c3.setAttribute("x2", o3.toFixed(1)), c3.setAttribute("y2", s3.toFixed(1)), c3.setAttribute("stroke", r3 ? T2 ? "#9080d0" : "#7060b8" : T2 ? "#504868" : "#a89898"), c3.setAttribute("stroke-width", r3 ? "1.5" : "1.0"), c3.setAttribute("pointer-events", "none"), ie2.appendChild(c3);
7194
- let l3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: u3, y: d3 } = Y(t3.cusp_lon + l3 / 2, D_, w2), f3 = X("text");
7195
- f3.setAttribute("x", u3.toFixed(1)), f3.setAttribute("y", d3.toFixed(1)), f3.setAttribute("text-anchor", "middle"), f3.setAttribute("dominant-baseline", "central"), f3.setAttribute("font-size", "10"), f3.setAttribute("fill", r3 ? T2 ? "#a090d8" : "#7060b8" : T2 ? "#8878a0" : "#787080"), f3.setAttribute("font-weight", r3 ? "700" : "500"), f3.setAttribute("pointer-events", "none"), f3.textContent = String(t3.number), ie2.appendChild(f3);
7196
- let p3 = X("circle");
7197
- p3.setAttribute("cx", u3.toFixed(1)), p3.setAttribute("cy", d3.toFixed(1)), p3.setAttribute("r", "14"), p3.setAttribute("fill", "transparent"), p3.setAttribute("class", "hit-region house-hit"), p3.style.pointerEvents = "all", p3.style.cursor = "pointer";
7198
- let m3 = "House ".concat(t3.number), h3 = "".concat(gv[t3.number] ? gv[t3.number] + " \xB7 " : "").concat(J_(t3.cusp_lon));
7199
- Vv(p3, "".concat(m3, " \u2014 click for interpretation")), p3.addEventListener("mouseenter", (e7) => ov(e7.clientX, e7.clientY, m3, h3, "Click for interpretation")), p3.addEventListener("mousemove", (e7) => ov(e7.clientX, e7.clientY, m3, h3, "Click for interpretation")), p3.addEventListener("mouseleave", sv), p3.addEventListener("click", (e7) => {
7200
- sv(), tv == null || tv("".concat(m3, " \xB7 ").concat(J_(t3.cusp_lon))), vv(e7, t3, n3, v2, y2, b2, S2, ee2);
7201
- }), se2.appendChild(p3);
7202
- }
7203
- let k2 = C2.find((e6) => e6.number === 1), Se2 = C2.find((e6) => e6.number === 4), Ce2 = C2.find((e6) => e6.number === 7), we2 = C2.find((e6) => e6.number === 10), Te2 = [{ lon: (m2 = k2 == null ? void 0 : k2.cusp_lon) == null ? w2 : m2, label: "ASC" }, { lon: (h2 = Ce2 == null ? void 0 : Ce2.cusp_lon) == null ? (w2 + 180) % 360 : h2, label: "DSC" }, { lon: (g2 = we2 == null ? void 0 : we2.cusp_lon) == null ? (w2 + 270) % 360 : g2, label: "MC" }, { lon: (_2 = Se2 == null ? void 0 : Se2.cusp_lon) == null ? (w2 + 90) % 360 : _2, label: "IC" }];
7204
- for (let e6 of Te2) {
7205
- var Ee2;
7206
- let t3 = mv[e6.label], { x: n3, y: r3 } = Y(e6.lon, A_ - 8, w2), i3 = X("text");
7207
- i3.setAttribute("x", n3.toFixed(1)), i3.setAttribute("y", r3.toFixed(1)), i3.setAttribute("text-anchor", "middle"), i3.setAttribute("dominant-baseline", "central"), i3.setAttribute("font-size", "12"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill", T2 ? "#a090d8" : "#7060b8"), i3.setAttribute("pointer-events", "none"), i3.style.transition = "opacity 150ms ease", i3.textContent = e6.label, ie2.appendChild(i3);
7199
+ o3.setAttribute("x1", n3.toFixed(1)), o3.setAttribute("y1", r3.toFixed(1)), o3.setAttribute("x2", i3.toFixed(1)), o3.setAttribute("y2", a3.toFixed(1)), o3.setAttribute("stroke", "var(--gold, #c8a84b)"), o3.setAttribute("stroke-width", "1.5"), he2.appendChild(o3);
7200
+ }
7201
+ re2.appendChild(he2);
7202
+ let ye2 = X("circle");
7203
+ ye2.setAttribute("cx", "310"), ye2.setAttribute("cy", "310"), ye2.setAttribute("r", String(E_)), ye2.style.fill = "var(--surface, #f2f1ea)", ye2.setAttribute("pointer-events", "none"), ie2.appendChild(ye2);
7204
+ let be2 = X("circle");
7205
+ if (be2.setAttribute("cx", "310"), be2.setAttribute("cy", "310"), be2.setAttribute("r", String(k_)), be2.style.fill = le2.center, ue2(be2, "0.8"), be2.setAttribute("pointer-events", "none"), ie2.appendChild(be2), C2.length > 0) for (let e6 = 0; e6 < C2.length; e6++) {
7206
+ let t3 = C2[e6], n3 = C2[(e6 + 1) % C2.length], r3 = [1, 4, 7, 10].includes(t3.number), i3 = X("path");
7207
+ i3.setAttribute("d", q_(t3.cusp_lon, n3.cusp_lon, k_, E_, w2)), i3.setAttribute("fill", l_(Math.floor((t3.cusp_lon % 360 + 360) % 360 / 30), T2)), i3.setAttribute("fill-opacity", String(c_(T2).houseFillOpacity)), i3.setAttribute("pointer-events", "none"), ie2.appendChild(i3);
7208
+ let { x: a3, y: o3 } = Y(t3.cusp_lon, k_, w2), { x: s3, y: c3 } = Y(t3.cusp_lon, E_, w2), l3 = X("line");
7209
+ l3.setAttribute("x1", a3.toFixed(1)), l3.setAttribute("y1", o3.toFixed(1)), l3.setAttribute("x2", s3.toFixed(1)), l3.setAttribute("y2", c3.toFixed(1));
7210
+ let u3 = r3 ? le2.cuspAngular : le2.cuspIntermediate;
7211
+ l3.setAttribute("stroke", u3.stroke), l3.setAttribute("stroke-opacity", String(u3.opacity)), l3.setAttribute("stroke-width", r3 ? "1.8" : "0.9"), r3 || l3.setAttribute("stroke-dasharray", le2.cuspDash(0.9)), l3.setAttribute("pointer-events", "none"), ie2.appendChild(l3);
7212
+ let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2, O_, w2), m3 = X("text");
7213
+ m3.setAttribute("x", f3.toFixed(1)), m3.setAttribute("y", p3.toFixed(1)), m3.setAttribute("text-anchor", "middle"), m3.setAttribute("dominant-baseline", "central"), m3.setAttribute("font-size", "12"), m3.setAttribute("fill", c_(T2).foreground), m3.setAttribute("opacity", "0.9"), m3.setAttribute("font-weight", r3 ? "700" : "600"), m3.setAttribute("pointer-events", "none"), m3.textContent = String(t3.number), ie2.appendChild(m3);
7214
+ let h3 = X("circle");
7215
+ h3.setAttribute("cx", f3.toFixed(1)), h3.setAttribute("cy", p3.toFixed(1)), h3.setAttribute("r", "14"), h3.setAttribute("fill", "transparent"), h3.setAttribute("class", "hit-region house-hit"), h3.style.pointerEvents = "all", h3.style.cursor = "pointer";
7216
+ let g3 = "House ".concat(t3.number), _3 = "".concat(vv[t3.number] ? vv[t3.number] + " \xB7 " : "").concat(X_(t3.cusp_lon));
7217
+ Uv(h3, "".concat(g3, " \u2014 click for interpretation")), h3.addEventListener("mouseenter", (e7) => cv(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mousemove", (e7) => cv(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mouseleave", lv), h3.addEventListener("click", (e7) => {
7218
+ lv(), rv == null || rv("".concat(g3, " \xB7 ").concat(X_(t3.cusp_lon))), bv(e7, t3, n3, v2, y2, b2, S2, ee2);
7219
+ }), se2.appendChild(h3);
7220
+ }
7221
+ let O2 = C2.find((e6) => e6.number === 1), xe2 = C2.find((e6) => e6.number === 4), k2 = C2.find((e6) => e6.number === 7), Se2 = C2.find((e6) => e6.number === 10), Ce2 = [{ lon: (m2 = O2 == null ? void 0 : O2.cusp_lon) == null ? w2 : m2, label: "ASC" }, { lon: (h2 = k2 == null ? void 0 : k2.cusp_lon) == null ? (w2 + 180) % 360 : h2, label: "DSC" }, { lon: (g2 = Se2 == null ? void 0 : Se2.cusp_lon) == null ? (w2 + 270) % 360 : g2, label: "MC" }, { lon: (_2 = xe2 == null ? void 0 : xe2.cusp_lon) == null ? (w2 + 90) % 360 : _2, label: "IC" }];
7222
+ for (let e6 of Ce2) {
7223
+ var we2;
7224
+ let t3 = gv[e6.label], { x: n3, y: r3 } = Y(e6.lon, j_ - 8, w2), i3 = X("text");
7225
+ i3.setAttribute("x", n3.toFixed(1)), i3.setAttribute("y", r3.toFixed(1)), i3.setAttribute("text-anchor", "middle"), i3.setAttribute("dominant-baseline", "central"), i3.setAttribute("font-size", "12"), i3.setAttribute("font-weight", "700"), i3.setAttribute("fill", c_(T2).foreground), i3.setAttribute("pointer-events", "none"), i3.style.transition = "opacity 150ms ease", i3.textContent = e6.label, ie2.appendChild(i3);
7208
7226
  let a3 = X("circle");
7209
- a3.setAttribute("cx", n3.toFixed(1)), a3.setAttribute("cy", r3.toFixed(1)), a3.setAttribute("r", "14"), a3.setAttribute("fill", "transparent"), a3.setAttribute("class", "hit-region angle-hit"), a3.style.pointerEvents = "all", a3.style.cursor = "pointer", Vv(a3, "".concat((Ee2 = t3 == null ? void 0 : t3.title) == null ? e6.label : Ee2, " \u2014 click for interpretation"));
7210
- let o3 = J_(e6.lon), s3 = "".concat(t3 != null && t3.keyword ? t3.keyword + " \xB7 " : "").concat(o3);
7227
+ a3.setAttribute("cx", n3.toFixed(1)), a3.setAttribute("cy", r3.toFixed(1)), a3.setAttribute("r", "14"), a3.setAttribute("fill", "transparent"), a3.setAttribute("class", "hit-region angle-hit"), a3.style.pointerEvents = "all", a3.style.cursor = "pointer", Uv(a3, "".concat((we2 = t3 == null ? void 0 : t3.title) == null ? e6.label : we2, " \u2014 click for interpretation"));
7228
+ let o3 = X_(e6.lon), s3 = "".concat(t3 != null && t3.keyword ? t3.keyword + " \xB7 " : "").concat(o3);
7211
7229
  a3.addEventListener("mouseenter", (n4) => {
7212
7230
  var r4;
7213
- ov(n4.clientX, n4.clientY, "".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), s3, "Click for interpretation"), i3.style.opacity = "0.6";
7231
+ cv(n4.clientX, n4.clientY, "".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4), s3, "Click for interpretation"), i3.style.opacity = "0.6";
7214
7232
  }), a3.addEventListener("mouseleave", () => {
7215
- sv(), i3.style.opacity = "";
7233
+ lv(), i3.style.opacity = "";
7216
7234
  }), a3.addEventListener("click", (n4) => {
7217
7235
  var r4;
7218
- sv(), Dv(), tv == null || tv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(o3)), hv(n4, e6.label, e6.lon, v2, y2);
7236
+ lv(), kv(), rv == null || rv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(o3)), _v(n4, e6.label, e6.lon, v2, y2);
7219
7237
  }), se2.appendChild(a3);
7220
7238
  }
7221
7239
  for (let e6 of te2) {
7222
- var De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2, Le2, A2;
7240
+ var Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2;
7223
7241
  let t3 = S2.find((t4) => t4.name.toLowerCase() === e6.planet1.toLowerCase()), n3 = ee2.find((t4) => t4.name.toLowerCase() === e6.planet2.toLowerCase());
7224
7242
  if (!t3 || !n3) continue;
7225
- let i3 = R_((De2 = (Oe2 = e6.type) == null ? void 0 : Oe2.toLowerCase()) == null ? "" : De2), a3 = z_(e6.orb), { x: o3, y: s3 } = Y(t3.longitude, k_, w2), { x: c3, y: l3 } = Y(n3.longitude, j_, w2), u3 = X("line");
7243
+ let i3 = z_((Te2 = (Ee2 = e6.type) == null ? void 0 : Ee2.toLowerCase()) == null ? "" : Te2), a3 = B_(e6.orb), { x: o3, y: s3 } = Y(t3.longitude, A_, w2), { x: c3, y: l3 } = Y(n3.longitude, M_, w2), u3 = X("line");
7226
7244
  u3.setAttribute("x1", o3.toFixed(1)), u3.setAttribute("y1", s3.toFixed(1)), u3.setAttribute("x2", c3.toFixed(1)), u3.setAttribute("y2", l3.toFixed(1)), a3.dash && u3.setAttribute("stroke-dasharray", a3.dash), u3.setAttribute("stroke-linecap", "round"), u3.setAttribute("pointer-events", "none"), u3.style.stroke = i3, u3.style.strokeOpacity = a3.opacity, u3.style.strokeWidth = a3.width, ae2.appendChild(u3);
7227
7245
  let d3 = o3 + (c3 - o3) * 0.35, f3 = s3 + (l3 - s3) * 0.35, p3 = Math.hypot(c3 - o3, l3 - s3), m3 = [];
7228
7246
  if (p3 > 40) {
7229
- var Re2, ze2, Be2;
7230
- let t4 = (Re2 = L_[(ze2 = (Be2 = e6.type) == null ? void 0 : Be2.toLowerCase()) == null ? "" : ze2]) == null ? "" : Re2;
7247
+ var Le2, A2, Re2;
7248
+ let t4 = (Le2 = R_[(A2 = (Re2 = e6.type) == null ? void 0 : Re2.toLowerCase()) == null ? "" : A2]) == null ? "" : Le2;
7231
7249
  if (t4) {
7232
7250
  let e7 = X("circle");
7233
- e7.setAttribute("cx", d3.toFixed(1)), e7.setAttribute("cy", f3.toFixed(1)), e7.setAttribute("r", "9"), e7.setAttribute("fill", "var(--bg, #0a0a10)"), e7.setAttribute("stroke", i3), e7.setAttribute("stroke-opacity", "0.30"), e7.setAttribute("stroke-width", "0.6"), e7.setAttribute("pointer-events", "none"), e7.classList.add("aspect-symbol-group"), ae2.appendChild(e7), m3.push(e7);
7251
+ e7.setAttribute("cx", d3.toFixed(1)), e7.setAttribute("cy", f3.toFixed(1)), e7.setAttribute("r", "9"), e7.setAttribute("fill", le2.center), e7.setAttribute("stroke", i3), e7.setAttribute("stroke-opacity", "0.9"), e7.setAttribute("stroke-width", "1"), e7.setAttribute("pointer-events", "none"), e7.classList.add("aspect-symbol-group"), ae2.appendChild(e7), m3.push(e7);
7234
7252
  let n4 = X("text");
7235
- n4.setAttribute("x", d3.toFixed(1)), n4.setAttribute("y", f3.toFixed(1)), n4.setAttribute("text-anchor", "middle"), n4.setAttribute("dominant-baseline", "central"), n4.setAttribute("font-size", "10"), n4.setAttribute("fill", i3), n4.setAttribute("pointer-events", "none"), n4.classList.add("aspect-symbol-group"), n4.textContent = t4, ae2.appendChild(n4), m3.push(n4);
7253
+ n4.setAttribute("x", d3.toFixed(1)), n4.setAttribute("y", f3.toFixed(1)), n4.setAttribute("text-anchor", "middle"), n4.setAttribute("dominant-baseline", "central"), n4.setAttribute("font-size", "11"), n4.setAttribute("font-weight", "700"), n4.setAttribute("fill", i3), n4.setAttribute("pointer-events", "none"), n4.classList.add("aspect-symbol-group"), n4.textContent = t4, ae2.appendChild(n4), m3.push(n4);
7236
7254
  }
7237
7255
  }
7238
7256
  let h3 = X("line");
7239
- h3.setAttribute("x1", o3.toFixed(1)), h3.setAttribute("y1", s3.toFixed(1)), h3.setAttribute("x2", c3.toFixed(1)), h3.setAttribute("y2", l3.toFixed(1)), h3.setAttribute("stroke", "transparent"), h3.setAttribute("stroke-width", "20"), h3.setAttribute("fill", "none"), h3.setAttribute("class", "hit-region aspect-hit"), h3.style.pointerEvents = "all", Vv(h3, "Aspect: ".concat(e6.type || "Aspect", " between inner ").concat(e6.planet1, " and outer ").concat(e6.planet2));
7240
- let g3 = (ke2 = P_[t3.name.toLowerCase()]) == null ? t3.name : ke2, _3 = (Ae2 = P_[n3.name.toLowerCase()]) == null ? n3.name : Ae2, x3 = (je2 = (Me2 = L_[(Ne2 = (Pe2 = e6.type) == null ? void 0 : Pe2.toLowerCase()) == null ? "" : Ne2]) == null ? e6.type : Me2) == null ? "" : je2, C3 = v2 === "transit" ? e6.applying ? " (applying)" : " (separating)" : e6.orb <= 1 ? " (exact)" : e6.orb <= 3 ? " (tight)" : " (wide)", te3 = (Fe2 = lv[(Ie2 = (Le2 = e6.type) == null ? void 0 : Le2.toLowerCase()) == null ? "" : Ie2]) == null ? "" : Fe2, T3 = "".concat(te3 ? te3 + " \xB7 " : "").concat(g3, " ").concat(x3, " ").concat(_3, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0 orb").concat(C3);
7257
+ h3.setAttribute("x1", o3.toFixed(1)), h3.setAttribute("y1", s3.toFixed(1)), h3.setAttribute("x2", c3.toFixed(1)), h3.setAttribute("y2", l3.toFixed(1)), h3.setAttribute("stroke", "transparent"), h3.setAttribute("stroke-width", "20"), h3.setAttribute("fill", "none"), h3.setAttribute("class", "hit-region aspect-hit"), h3.style.pointerEvents = "all", Uv(h3, "Aspect: ".concat(e6.type || "Aspect", " between inner ").concat(e6.planet1, " and outer ").concat(e6.planet2));
7258
+ let g3 = (De2 = F_[t3.name.toLowerCase()]) == null ? t3.name : De2, _3 = (Oe2 = F_[n3.name.toLowerCase()]) == null ? n3.name : Oe2, x3 = (ke2 = (Ae2 = R_[(je2 = (Me2 = e6.type) == null ? void 0 : Me2.toLowerCase()) == null ? "" : je2]) == null ? e6.type : Ae2) == null ? "" : ke2, C3 = v2 === "transit" ? e6.applying ? " (applying)" : " (separating)" : e6.orb <= 1 ? " (exact)" : e6.orb <= 3 ? " (tight)" : " (wide)", te3 = (Ne2 = dv[(Pe2 = (Fe2 = e6.type) == null ? void 0 : Fe2.toLowerCase()) == null ? "" : Pe2]) == null ? "" : Ne2, T3 = "".concat(te3 ? te3 + " \xB7 " : "").concat(g3, " ").concat(x3, " ").concat(_3, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0 orb").concat(C3);
7241
7259
  h3.addEventListener("mouseenter", (t4) => {
7242
7260
  var n4;
7243
- return ov(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7261
+ return cv(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7244
7262
  }), h3.addEventListener("mousemove", (t4) => {
7245
7263
  var n4;
7246
- return ov(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7247
- }), h3.addEventListener("mouseleave", sv), h3.addEventListener("click", (t4) => {
7264
+ return cv(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7265
+ }), h3.addEventListener("mouseleave", lv), h3.addEventListener("click", (t4) => {
7248
7266
  var n4, a4, o4, s4, c4, l4;
7249
- sv(), Tv(pv(e6), i3), Cv(t4, e6, v2, y2, b2);
7250
- let u4 = (n4 = P_[e6.planet1.toLowerCase()]) == null ? e6.planet1 : n4, d4 = (a4 = P_[e6.planet2.toLowerCase()]) == null ? e6.planet2 : a4, f4 = (o4 = (s4 = L_[(c4 = (l4 = e6.type) == null ? void 0 : l4.toLowerCase()) == null ? "" : c4]) == null ? e6.type : s4) == null ? "" : o4, p4 = y2 ? "".concat(y2, "'s ").concat(u4) : "".concat(u4), m4 = v2 === "transit" ? "Tr. ".concat(d4) : b2 ? "".concat(b2, "'s ").concat(d4) : d4;
7251
- tv == null || tv("".concat(p4, " ").concat(f4, " ").concat(m4, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0")), r2(e6);
7252
- }), fv.set(pv(e6), { vis: u3, color: i3, aspectType: ((A2 = e6.type) == null ? void 0 : A2.toLowerCase()) || "unknown", orb: e6.orb, symbolEls: m3 }), se2.appendChild(h3);
7267
+ lv(), Dv(hv(e6), i3), Tv(t4, e6, v2, y2, b2);
7268
+ let u4 = (n4 = F_[e6.planet1.toLowerCase()]) == null ? e6.planet1 : n4, d4 = (a4 = F_[e6.planet2.toLowerCase()]) == null ? e6.planet2 : a4, f4 = (o4 = (s4 = R_[(c4 = (l4 = e6.type) == null ? void 0 : l4.toLowerCase()) == null ? "" : c4]) == null ? e6.type : s4) == null ? "" : o4, p4 = y2 ? "".concat(y2, "'s ").concat(u4) : "".concat(u4), m4 = v2 === "transit" ? "Tr. ".concat(d4) : b2 ? "".concat(b2, "'s ").concat(d4) : d4;
7269
+ rv == null || rv("".concat(p4, " ").concat(f4, " ").concat(m4, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0")), r2(e6);
7270
+ }), mv.set(hv(e6), { vis: u3, color: i3, aspectType: ((Ie2 = e6.type) == null ? void 0 : Ie2.toLowerCase()) || "unknown", orb: e6.orb, symbolEls: m3 }), se2.appendChild(h3);
7253
7271
  }
7254
- let Ve2 = g_(ee2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 7), He2 = X("g");
7255
- He2.setAttribute("class", "outer-planet-group"), oe2.appendChild(He2);
7272
+ let ze2 = __(ee2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 7), Be2 = X("g");
7273
+ Be2.setAttribute("class", "outer-planet-group"), oe2.appendChild(Be2);
7256
7274
  for (let e6 of ee2) {
7257
- var Ue2, We2, Ge2;
7258
- let t3 = (Ue2 = P_[e6.name.toLowerCase()]) == null ? "\u2605" : Ue2, r3 = e6.name.toLowerCase(), i3 = (We2 = Ve2.get(r3)) == null ? e6.longitude : We2, { x: a3, y: o3 } = Y(i3, M_, w2), s3 = X("g");
7259
- s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "outer", s3.style.transition = "opacity 200ms ease", He2.appendChild(s3);
7275
+ var Ve2, He2, Ue2;
7276
+ let t3 = (Ve2 = F_[e6.name.toLowerCase()]) == null ? "\u2605" : Ve2, r3 = e6.name.toLowerCase(), i3 = (He2 = ze2.get(r3)) == null ? e6.longitude : He2, { x: a3, y: o3 } = Y(i3, N_, w2), s3 = X("g");
7277
+ s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "outer", s3.style.transition = "opacity 200ms ease", Be2.appendChild(s3);
7260
7278
  let { x: c3, y: l3 } = Y(e6.longitude, 251, w2), u3 = X("circle");
7261
- if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--outer-tick, #c8860e)"), u3.setAttribute("opacity", "0.75"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), b_(e6.longitude, i3) > 2) {
7279
+ if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--outer-tick, #c8860e)"), u3.setAttribute("opacity", "0.75"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), x_(e6.longitude, i3) > 2) {
7262
7280
  let e7 = X("line");
7263
7281
  e7.setAttribute("x1", c3.toFixed(1)), e7.setAttribute("y1", l3.toFixed(1)), e7.setAttribute("x2", a3.toFixed(1)), e7.setAttribute("y2", o3.toFixed(1)), e7.setAttribute("stroke", "var(--outer-tick, #c8860e)"), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), s3.appendChild(e7);
7264
7282
  }
7265
7283
  let d3 = X("text");
7266
7284
  d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "18"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill = c_(T2).transit, d3.style.fontFamily = a_, d3.textContent = t3, s3.appendChild(d3);
7267
- let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, M_ - 14, w2), h3 = X("text");
7285
+ let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, N_ - 14, w2), h3 = X("text");
7268
7286
  if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill", "#b08030"), h3.setAttribute("pointer-events", "none"), h3.textContent = "".concat(f3, "\xB0"), s3.appendChild(h3), e6.retrograde) {
7269
7287
  let { x: e7, y: t4 } = Y(i3, 277, w2), n3 = X("text");
7270
7288
  n3.setAttribute("x", e7.toFixed(1)), n3.setAttribute("y", t4.toFixed(1)), n3.setAttribute("text-anchor", "middle"), n3.setAttribute("dominant-baseline", "central"), n3.setAttribute("font-size", "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", s3.appendChild(n3);
7271
7289
  }
7272
- let g3 = V_(e6.name, e6.longitude);
7290
+ let g3 = H_(e6.name, e6.longitude);
7273
7291
  if (g3) {
7274
7292
  let { x: e7, y: t4 } = Y(i3, 276, w2), n3 = X("circle");
7275
7293
  n3.setAttribute("cx", e7.toFixed(1)), n3.setAttribute("cy", t4.toFixed(1)), n3.setAttribute("r", "2.5"), n3.setAttribute("fill", g3.positive ? "oklch(72% 0.12 80)" : "oklch(55% 0.18 20 / 0.6)"), n3.setAttribute("pointer-events", "none"), s3.appendChild(n3);
7276
7294
  }
7277
7295
  let _3 = X("circle");
7278
- _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(N_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all", Vv(_3, "Outer Planet: ".concat(e6.name));
7279
- let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ge2 = cv[e6.name.toLowerCase()]) == null ? "" : Ge2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(J_(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7280
- _3.addEventListener("mouseenter", (e7) => ov(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => ov(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", sv), _3.addEventListener("click", (t4) => {
7296
+ _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(P_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all", Uv(_3, "Outer Planet: ".concat(e6.name));
7297
+ let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ue2 = uv[e6.name.toLowerCase()]) == null ? "" : Ue2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(X_(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7298
+ _3.addEventListener("mouseenter", (e7) => cv(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => cv(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", lv), _3.addEventListener("click", (t4) => {
7281
7299
  var r4, i4;
7282
- sv(), wv(e6.name, "outer"), Sv(t4, e6, "outer", te2, v2, y2, b2);
7283
- let a4 = (r4 = P_[e6.name.toLowerCase()]) == null ? "\u2605" : r4, o4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), s4 = v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "";
7284
- tv == null || tv("".concat(s4).concat(a4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = I_[o4]) == null ? "" : i4)), n2(e6, "outer", te2);
7300
+ lv(), Ev(e6.name, "outer"), wv(t4, e6, "outer", te2, v2, y2, b2);
7301
+ let a4 = (r4 = F_[e6.name.toLowerCase()]) == null ? "\u2605" : r4, o4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), s4 = v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "";
7302
+ rv == null || rv("".concat(s4).concat(a4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = L_[o4]) == null ? "" : i4)), n2(e6, "outer", te2);
7285
7303
  }), s3.appendChild(_3);
7286
7304
  }
7287
- let Ke2 = g_(S2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), qe2 = X("g");
7288
- qe2.setAttribute("class", "inner-planet-group"), oe2.appendChild(qe2);
7305
+ let We2 = __(S2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Ge2 = X("g");
7306
+ Ge2.setAttribute("class", "inner-planet-group"), oe2.appendChild(Ge2);
7289
7307
  for (let e6 of S2) {
7290
- var Je2, Ye2, Xe2;
7291
- let t3 = (Je2 = P_[e6.name.toLowerCase()]) == null ? "\u2605" : Je2, r3 = e6.name.toLowerCase(), i3 = (Ye2 = Ke2.get(r3)) == null ? e6.longitude : Ye2, { x: a3, y: o3 } = Y(i3, E_, w2), s3 = X("g");
7292
- s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "inner", s3.style.transition = "opacity 200ms ease", qe2.appendChild(s3);
7293
- let { x: c3, y: l3 } = Y(e6.longitude, T_ - 5, w2), u3 = X("circle");
7294
- if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--inner-tick, #7060b8)"), u3.setAttribute("opacity", "0.65"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), b_(e6.longitude, i3) > 2) {
7308
+ var Ke2, qe2, Je2;
7309
+ let t3 = (Ke2 = F_[e6.name.toLowerCase()]) == null ? "\u2605" : Ke2, r3 = e6.name.toLowerCase(), i3 = (qe2 = We2.get(r3)) == null ? e6.longitude : qe2, { x: a3, y: o3 } = Y(i3, D_, w2), s3 = X("g");
7310
+ s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "inner", s3.style.transition = "opacity 200ms ease", Ge2.appendChild(s3);
7311
+ let { x: c3, y: l3 } = Y(e6.longitude, E_ - 5, w2), u3 = X("circle");
7312
+ if (u3.setAttribute("cx", c3.toFixed(1)), u3.setAttribute("cy", l3.toFixed(1)), u3.setAttribute("r", "2.5"), u3.setAttribute("fill", "var(--inner-tick, #7060b8)"), u3.setAttribute("opacity", "0.65"), u3.setAttribute("pointer-events", "none"), s3.appendChild(u3), x_(e6.longitude, i3) > 2) {
7295
7313
  let e7 = X("line");
7296
7314
  e7.setAttribute("x1", c3.toFixed(1)), e7.setAttribute("y1", l3.toFixed(1)), e7.setAttribute("x2", a3.toFixed(1)), e7.setAttribute("y2", o3.toFixed(1)), e7.setAttribute("stroke", "var(--inner-tick, #7060b8)"), e7.setAttribute("stroke-width", "0.7"), e7.setAttribute("stroke-opacity", "0.35"), e7.setAttribute("stroke-linecap", "round"), e7.setAttribute("pointer-events", "none"), s3.appendChild(e7);
7297
7315
  }
7298
7316
  let d3 = X("text");
7299
- d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "18"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill = c_(T2).ink, d3.style.fontFamily = a_, d3.textContent = t3, s3.appendChild(d3);
7300
- let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, E_ - 17, w2), h3 = X("text");
7301
- if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill", T2 ? "#b0a0c8" : "#9080a0"), h3.setAttribute("pointer-events", "none"), h3.textContent = "".concat(f3, "\xB0"), s3.appendChild(h3), e6.retrograde) {
7317
+ d3.setAttribute("x", a3.toFixed(1)), d3.setAttribute("y", o3.toFixed(1)), d3.setAttribute("text-anchor", "middle"), d3.setAttribute("dominant-baseline", "central"), d3.setAttribute("font-size", "20"), d3.setAttribute("font-weight", "600"), d3.setAttribute("pointer-events", "none"), d3.style.fill = c_(T2).foreground, d3.style.fontFamily = a_, d3.textContent = t3, s3.appendChild(d3);
7318
+ let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, D_ - 17, w2), h3 = X("text");
7319
+ if (h3.setAttribute("x", p3.toFixed(1)), h3.setAttribute("y", m3.toFixed(1)), h3.setAttribute("text-anchor", "middle"), h3.setAttribute("dominant-baseline", "central"), h3.setAttribute("font-size", "8.5"), h3.setAttribute("fill", c_(T2).foreground), h3.setAttribute("opacity", "0.8"), h3.setAttribute("pointer-events", "none"), h3.textContent = "".concat(f3, "\xB0"), s3.appendChild(h3), e6.retrograde) {
7302
7320
  let { x: e7, y: t4 } = Y(i3, 204, w2), n3 = X("text");
7303
7321
  n3.setAttribute("x", e7.toFixed(1)), n3.setAttribute("y", t4.toFixed(1)), n3.setAttribute("text-anchor", "middle"), n3.setAttribute("dominant-baseline", "central"), n3.setAttribute("font-size", "8"), n3.setAttribute("fill", "#e05252"), n3.setAttribute("pointer-events", "none"), n3.textContent = "\u211E", s3.appendChild(n3);
7304
7322
  }
7305
- let g3 = V_(e6.name, e6.longitude);
7323
+ let g3 = H_(e6.name, e6.longitude);
7306
7324
  if (g3) {
7307
7325
  let { x: e7, y: t4 } = Y(i3, 202, w2), n3 = X("circle");
7308
7326
  n3.setAttribute("cx", e7.toFixed(1)), n3.setAttribute("cy", t4.toFixed(1)), n3.setAttribute("r", "2.5"), n3.setAttribute("fill", g3.positive ? "oklch(72% 0.12 80)" : "oklch(55% 0.18 20 / 0.6)"), n3.setAttribute("pointer-events", "none"), s3.appendChild(n3);
7309
7327
  }
7310
7328
  let _3 = X("circle");
7311
- _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(N_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all", Vv(_3, "Inner Planet: ".concat(e6.name));
7312
- let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(Z(e6.name)) : "".concat(t3, " ").concat(Z(e6.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Xe2 = cv[e6.name.toLowerCase()]) == null ? "" : Xe2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(J_(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7313
- _3.addEventListener("mouseenter", (e7) => ov(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => ov(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", sv), _3.addEventListener("click", (t4) => {
7329
+ _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(P_)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all", Uv(_3, "Inner Planet: ".concat(e6.name));
7330
+ let x3 = y2 ? "".concat(y2, "'s ").concat(t3, " ").concat(Z(e6.name)) : "".concat(t3, " ").concat(Z(e6.name), " (natal)"), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Je2 = uv[e6.name.toLowerCase()]) == null ? "" : Je2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(X_(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7331
+ _3.addEventListener("mouseenter", (e7) => cv(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mousemove", (e7) => cv(e7.clientX, e7.clientY, x3, C3, "Click to explore")), _3.addEventListener("mouseleave", lv), _3.addEventListener("click", (t4) => {
7314
7332
  var r4, i4, a4;
7315
- sv(), wv(e6.name, "inner"), Sv(t4, e6, "inner", te2, v2, y2, b2);
7316
- let o4 = (r4 = P_[e6.name.toLowerCase()]) == null ? "\u2605" : r4, s4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), c4 = y2 ? "".concat(y2, "'s ").concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = I_[s4]) == null ? "" : i4) : "".concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((a4 = I_[s4]) == null ? "" : a4, " (natal)");
7317
- tv == null || tv(c4), n2(e6, "inner", te2);
7333
+ lv(), Ev(e6.name, "inner"), wv(t4, e6, "inner", te2, v2, y2, b2);
7334
+ let o4 = (r4 = F_[e6.name.toLowerCase()]) == null ? "\u2605" : r4, s4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), c4 = y2 ? "".concat(y2, "'s ").concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = L_[s4]) == null ? "" : i4) : "".concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((a4 = L_[s4]) == null ? "" : a4, " (natal)");
7335
+ rv == null || rv(c4), n2(e6, "inner", te2);
7318
7336
  }), s3.appendChild(_3);
7319
7337
  }
7320
- let Ze2 = "__biWheelClickOutside__", Qe2 = document[Ze2];
7321
- Qe2 && document.removeEventListener("click", Qe2, false);
7322
- let $e2 = (e6) => {
7338
+ let Ye2 = "__biWheelClickOutside__", Xe2 = document[Ye2];
7339
+ Xe2 && document.removeEventListener("click", Xe2, false);
7340
+ let Ze2 = (e6) => {
7323
7341
  let t3 = e6.target;
7324
- !t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Ov(), xv());
7342
+ !t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Av(), Cv());
7325
7343
  };
7326
- document[Ze2] = $e2, document.addEventListener("click", $e2, false);
7327
- let et2 = (e6) => {
7328
- e6.key === "Escape" && (Ov(), xv());
7344
+ document[Ye2] = Ze2, document.addEventListener("click", Ze2, false);
7345
+ let Qe2 = (e6) => {
7346
+ e6.key === "Escape" && (Av(), Cv());
7329
7347
  };
7330
- document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = et2, document.addEventListener("keydown", et2, false);
7348
+ document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = Qe2, document.addEventListener("keydown", Qe2, false);
7331
7349
  }
7332
- function Bv(e5) {
7350
+ function Hv(e5) {
7333
7351
  let t2 = parseInt(e5.slice(1, 3), 16), n2 = parseInt(e5.slice(3, 5), 16), r2 = parseInt(e5.slice(5, 7), 16), i2 = 0.6;
7334
7352
  return "rgb(".concat(Math.round(t2 * (1 - i2) + 208 * i2), ",").concat(Math.round(n2 * (1 - i2) + 144 * i2), ",").concat(Math.round(r2 * (1 - i2) + 32 * i2), ")");
7335
7353
  }
7336
- function Vv(e5, t2) {
7354
+ function Uv(e5, t2) {
7337
7355
  e5 && (e5.setAttribute("tabindex", "0"), e5.setAttribute("role", "button"), e5.setAttribute("aria-label", t2), e5.addEventListener("keydown", (t3) => {
7338
7356
  let n2 = t3;
7339
7357
  (n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e5.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
7340
7358
  }));
7341
7359
  }
7342
- function Hv(e5) {
7360
+ function Wv(e5) {
7343
7361
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7344
7362
  }
7345
- function Uv(e5) {
7363
+ function Gv(e5) {
7346
7364
  return e5.replace(/_/g, " ").replace(/\b\w/g, (e6) => e6.toUpperCase());
7347
7365
  }
7348
- function Wv(e5) {
7349
- let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(Hv(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(Hv(e7.glyph), "</span>").concat(Hv(e7.label), "</span>")).join("") + "</div>").join("");
7366
+ function Kv(e5) {
7367
+ let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(Wv(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(Wv(e7.glyph), "</span>").concat(Wv(e7.label), "</span>")).join("") + "</div>").join("");
7350
7368
  return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
7351
7369
  }
7352
- var Gv = class e4 {
7370
+ var qv = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7371
+ function Jv(e5, t2) {
7372
+ if (!e5) return null;
7373
+ let n2 = qv.exec(e5.trim());
7374
+ if (n2) {
7375
+ let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
7376
+ return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
7377
+ }
7378
+ let r2 = new Date(e5);
7379
+ return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
7380
+ }
7381
+ function Yv(e5) {
7382
+ var t2;
7383
+ if (!e5) return "";
7384
+ let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
7385
+ if (r2 ? n2.push(r2) : typeof e5.latitude == "number" && typeof e5.longitude == "number" && n2.push("".concat(e5.latitude.toFixed(2), ", ").concat(e5.longitude.toFixed(2))), e5.datetime) {
7386
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? Jv(e5.datetime, e5.timezone) : null;
7387
+ t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e5.datetime);
7388
+ }
7389
+ return n2.join(" \xB7 ");
7390
+ }
7391
+ var Xv = class e4 {
7353
7392
  constructor(t2) {
7354
7393
  var n2, r2, i2, a2, s2, c2;
7355
7394
  o(this, "config", void 0), o(this, "params", void 0), o(this, "dateInput", void 0), o(this, "timeInput", void 0), o(this, "refreshBtn", void 0), o(this, "locInput", void 0), o(this, "locDropdown", void 0), o(this, "summaryBar", void 0), o(this, "extraToggleInput", void 0), o(this, "searchTimeout", null), o(this, "searchVersion", 0), o(this, "isSearching", false), o(this, "suggestions", []), o(this, "activeIndex", -1), o(this, "selecting", false), o(this, "listboxId", "loc-listbox-".concat(e4.comboSeq++)), this.config = t2, this.params = { date: ((n2 = t2.initialParams) == null ? void 0 : n2.date) || this.getTodayDate(), time: ((r2 = t2.initialParams) == null ? void 0 : r2.time) || "12:00", latitude: ((i2 = t2.initialParams) == null ? void 0 : i2.latitude) || null, longitude: ((a2 = t2.initialParams) == null ? void 0 : a2.longitude) || null, timezone: ((s2 = t2.initialParams) == null ? void 0 : s2.timezone) || null, locationName: ((c2 = t2.initialParams) == null ? void 0 : c2.locationName) || null }, this.render();
@@ -7529,14 +7568,14 @@ var Gv = class e4 {
7529
7568
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7530
7569
  }
7531
7570
  };
7532
- o(Gv, "comboSeq", 0);
7533
- var Kv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon &amp; Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, qv = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
7534
- function Jv() {
7571
+ o(Xv, "comboSeq", 0);
7572
+ var Zv = { "chart-wheel": { stripIcon: "\u2726", stripTitle: "About the Natal Chart", stripHints: ["Click any <strong>planet</strong> for a deep placement reading", "Click any <strong>aspect line</strong> for its dynamic interpretation", "Click any <strong>house cusp</strong> for house themes", "Use the <strong>date controls</strong> to move through time"], modalText: "This wheel is an exact celestial snapshot of the sky at a given moment and place \u2014 every planet, house, and aspect line is clickable." }, "bi-wheel": { stripIcon: "\u2295", stripTitle: "About the Bi-Wheel", stripHints: ["Click any <strong>inner planet</strong> for natal placement depth", "Click any <strong>outer planet</strong> for transit or synastry meaning", "Click a <strong>cross-aspect line</strong> for inter-chart dynamics", "Use the <strong>date controls</strong> to advance transits"], modalText: "Two charts are layered here \u2014 the inner wheel is the natal chart; the outer ring shows the second chart (transits or another person's planets)." }, bodygraph: { stripIcon: "\u25C8", stripTitle: "About the Bodygraph", stripHints: ["Click any <strong>center</strong> (defined or undefined) for its meaning", "Click any <strong>channel</strong> to explore its life theme", "Click any <strong>gate number</strong> for its I Ching hexagram reading", "Click a <strong>planet row</strong> in the sidebar for its HD role"], modalText: "The bodygraph is a living map of the energy centres, channels, and gates that define a Human Design chart." }, "vedic-chart": { stripIcon: "\u{1F549}", stripTitle: "About the Jyotish Chart", stripHints: ["Click any <strong>rashi cell</strong> for its themes and any planets placed there", "The <strong>diagonal mark</strong> shows the Lagna (Ascendant) rashi", "Use the <strong>action bar</strong> for a full chart interpretation", "Click <strong>Moon &amp; Nakshatra</strong> for lunar mansion detail"], modalText: "This is a Vedic birth chart rendered as a South Indian Rashi grid \u2014 sidereal planetary placements by fixed sign." }, "transit-timeline": { stripIcon: "\u2604", stripTitle: "About the Transit Timeline", stripHints: ["Each entry is an <strong>exact transit hit</strong> \u2014 a transiting planet contacting a natal point", "Events are <strong>grouped by month</strong> in chronological order", "The <strong>\u211E marker</strong> flags a retrograde crossing", "Click any transit for a focused <strong>interpretation</strong>"], modalText: "This timeline lists upcoming transits to the natal chart \u2014 the exact dates outer-planet energies activate each placement." }, "moon-phase": { stripIcon: "\u263E", stripTitle: "About the Moon Phase Dial", stripHints: ["Click the <strong>Moon</strong> for its phase interpretation", "Click the <strong>Void-of-Course</strong> card when the Moon is VOC", "Use the <strong>date control</strong> to move the sky to any moment"], modalText: "The dial shows the Moon's live illumination, phase, sign, and void-of-course status for the selected moment." }, bazi: { stripIcon: "\u56DB", stripTitle: "About the BaZi Chart", stripHints: ["Click any <strong>pillar</strong> (Year, Month, Day, Hour) for its interpretation", "The <strong>Day Master</strong> is the core identity element", "The <strong>Wu Xing bar</strong> shows the Five Element balance"], modalText: "This BaZi (Four Pillars of Destiny) chart maps the Heavenly Stems and Earthly Branches present at a given moment of birth." } }, Qv = '\n .oe-welcome-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: oklch(0% 0 0 / 0.55);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: oe-fade-in 0.4s ease both;\n font-family: system-ui, sans-serif;\n }\n\n .oe-welcome-modal {\n /* Themed, not hardcoded: the title/text/hints below all resolve through\n var(--text\u2026), so a fixed dark surface here meant that once the light\n palette became reachable the modal rendered near-black text on a\n near-black card \u2014 1.09:1, effectively invisible. The fallback is the\n previous literal, and every app\'s dark --surface is oklch(11-12%), so\n dark rendering is unchanged. */\n background: var(--surface, oklch(11% 0.010 265));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n border-radius: 16px;\n padding: 32px;\n width: 90%;\n max-width: 440px;\n box-shadow: 0 20px 40px oklch(0% 0 0 / 0.55), inset 0 1px 0 oklch(100% 0 0 / 0.06);\n animation: oe-modal-in 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n @keyframes oe-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes oe-modal-in {\n from { opacity: 0; transform: scale(0.95) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n\n .oe-welcome-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 4px;\n }\n\n .oe-welcome-icon {\n font-size: 28px;\n color: var(--gold, oklch(72% 0.12 80));\n line-height: 1;\n text-shadow: 0 0 10px var(--gold-glow, oklch(72% 0.12 80 / 0.30));\n }\n\n .oe-welcome-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--text, oklch(92% 0.006 265));\n margin: 0;\n letter-spacing: 0.02em;\n }\n\n .oe-welcome-text {\n font-size: 14.5px;\n line-height: 1.5;\n color: var(--text-secondary, oklch(68% 0.008 265));\n margin: 0;\n }\n\n .oe-welcome-hints {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin: 8px 0 12px 0;\n padding: 0;\n list-style: none;\n }\n\n .oe-welcome-hints li {\n font-size: 13.5px;\n line-height: 1.4;\n color: var(--text-secondary, oklch(68% 0.008 265));\n display: flex;\n align-items: flex-start;\n gap: 10px;\n opacity: 0;\n animation: oe-fade-in 0.4s ease forwards;\n }\n\n /* Stagger the hints */\n .oe-welcome-hints li:nth-child(1) { animation-delay: 0.15s; }\n .oe-welcome-hints li:nth-child(2) { animation-delay: 0.25s; }\n .oe-welcome-hints li:nth-child(3) { animation-delay: 0.35s; }\n .oe-welcome-hints li:nth-child(4) { animation-delay: 0.45s; }\n\n .oe-welcome-hints li::before {\n content: "\u2726";\n color: var(--gold-dim, oklch(52% 0.06 80));\n font-size: 12px;\n padding-top: 2px;\n }\n\n .oe-welcome-hints strong {\n color: var(--text, oklch(92% 0.006 265));\n font-weight: 600;\n }\n\n .oe-welcome-button {\n align-self: flex-end;\n background: var(--gold-subtle, oklch(72% 0.12 80 / 0.10));\n color: var(--gold, oklch(72% 0.12 80));\n border: 1px solid var(--gold-glow, oklch(72% 0.12 80 / 0.20));\n padding: 10px 24px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s ease, border-color 0.2s ease;\n margin-top: 4px;\n }\n\n .oe-welcome-button:hover {\n background: oklch(72% 0.12 80 / 0.18);\n border-color: oklch(72% 0.12 80 / 0.40);\n }\n\n .oe-welcome-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n\n .oe-welcome-backdrop.is-dismissing {\n animation: oe-fade-out 0.3s ease forwards;\n }\n\n .oe-welcome-backdrop.is-dismissing .oe-welcome-modal {\n animation: oe-modal-out 0.3s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n }\n\n @keyframes oe-fade-out {\n to { opacity: 0; }\n }\n\n @keyframes oe-modal-out {\n to { opacity: 0; transform: scale(0.95) translateY(10px); }\n }\n';
7573
+ function $v() {
7535
7574
  if (document.getElementById("oe-first-run-styles")) return;
7536
7575
  let e5 = document.createElement("style");
7537
- e5.id = "oe-first-run-styles", e5.textContent = qv, document.head.appendChild(e5);
7576
+ e5.id = "oe-first-run-styles", e5.textContent = Qv, document.head.appendChild(e5);
7538
7577
  }
7539
- function Yv(e5) {
7578
+ function ey(e5) {
7540
7579
  let t2 = document.activeElement, n2 = document.createElement("div");
7541
7580
  n2.className = "oe-welcome-backdrop";
7542
7581
  let r2 = document.createElement("div");
@@ -7554,34 +7593,34 @@ function Yv(e5) {
7554
7593
  e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
7555
7594
  }), requestAnimationFrame(() => a2.focus()), n2;
7556
7595
  }
7557
- function Xv(e5) {
7558
- Jv();
7559
- let t2 = Yv(Kv[e5]);
7596
+ function ty(e5) {
7597
+ $v();
7598
+ let t2 = ey(Zv[e5]);
7560
7599
  document.body.appendChild(t2);
7561
7600
  }
7562
- var Zv = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
7563
- function Qv() {
7601
+ var ny = "\n .oe-info-button {\n position: fixed;\n top: 12px;\n right: 12px;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n background: var(--surface-2, oklch(16% 0.010 265));\n border: 1px solid var(--border-strong, oklch(30% 0.010 265));\n color: var(--text-secondary, oklch(68% 0.008 265));\n font: 600 14px/1 Georgia, serif;\n font-style: italic;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n z-index: 9998;\n transition: all 150ms ease;\n }\n\n .oe-info-button:hover {\n background: var(--surface, oklch(11% 0.010 265));\n border-color: var(--gold-dim, oklch(52% 0.06 80));\n color: var(--gold, oklch(72% 0.12 80));\n }\n\n .oe-info-button:focus-visible {\n outline: 2px solid var(--gold, oklch(72% 0.12 80));\n outline-offset: 2px;\n }\n";
7602
+ function ry() {
7564
7603
  if (document.getElementById("oe-info-button-styles")) return;
7565
7604
  let e5 = document.createElement("style");
7566
- e5.id = "oe-info-button-styles", e5.textContent = Zv, document.head.appendChild(e5);
7605
+ e5.id = "oe-info-button-styles", e5.textContent = ny, document.head.appendChild(e5);
7567
7606
  }
7568
- function $v(e5) {
7607
+ function iy(e5) {
7569
7608
  if (document.getElementById("oe-info-button")) return;
7570
- Qv();
7609
+ ry();
7571
7610
  let t2 = document.createElement("button");
7572
- t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => Xv(e5)), document.body.appendChild(t2);
7611
+ t2.id = "oe-info-button", t2.className = "oe-info-button", t2.setAttribute("aria-label", "About this chart"), t2.title = "About this chart", t2.textContent = "i", t2.addEventListener("click", () => ty(e5)), document.body.appendChild(t2);
7573
7612
  }
7574
- function ey(e5) {
7613
+ function ay(e5) {
7575
7614
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7576
7615
  }
7577
- function ty(e5) {
7578
- let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(ey(i2), "</button>") : "";
7579
- if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(ey(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7616
+ function oy(e5) {
7617
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(ay(i2), "</button>") : "";
7618
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(ay(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7580
7619
  var o2;
7581
7620
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
7582
7621
  }
7583
7622
  }
7584
- function ny(e5) {
7623
+ function sy(e5) {
7585
7624
  var t2;
7586
7625
  if (!e5) return null;
7587
7626
  if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
@@ -7594,7 +7633,7 @@ function ny(e5) {
7594
7633
  }
7595
7634
  return null;
7596
7635
  }
7597
- function ry(e5, t2, n2 = []) {
7636
+ function cy(e5, t2, n2 = []) {
7598
7637
  var r2, i2;
7599
7638
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
7600
7639
  let a2 = document.createElement("button");
@@ -7670,21 +7709,21 @@ function ry(e5, t2, n2 = []) {
7670
7709
  let e6 = document.getElementById("fs-hint-banner");
7671
7710
  e6 && e6.remove();
7672
7711
  let t3 = document.createElement("div");
7673
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to Claude chat", document.body.appendChild(t3), requestAnimationFrame(() => {
7712
+ t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
7674
7713
  t3.style.opacity = "1";
7675
7714
  }), setTimeout(() => {
7676
7715
  t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
7677
7716
  }, 4e3);
7678
7717
  }
7679
7718
  }
7680
- function iy(e5, t2) {
7719
+ function ly(e5, t2) {
7681
7720
  e5.ontoolcancelled = (e6) => {
7682
7721
  var n2, r2, i2;
7683
7722
  let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
7684
- console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), ay(a2);
7723
+ console.warn("[AppChrome] Tool cancelled:", a2), (r2 = t2.statusFn) == null || r2.call(t2, null), !t2.loadingEl.hidden && t2.loadingEl.getAttribute("hidden") === null && (t2.loadingEl.setAttribute("hidden", ""), t2.contentEl.removeAttribute("hidden")), (i2 = t2.paramControls) == null || (i2 = i2.call(t2)) == null || i2.setBusy(false), uy(a2);
7685
7724
  };
7686
7725
  }
7687
- function ay(e5) {
7726
+ function uy(e5) {
7688
7727
  var t2;
7689
7728
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
7690
7729
  let n2 = document.createElement("div");
@@ -7692,7 +7731,7 @@ function ay(e5) {
7692
7731
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7693
7732
  }, 3e3);
7694
7733
  }
7695
- function oy(e5) {
7734
+ function dy(e5) {
7696
7735
  var t2;
7697
7736
  function n2(e6) {
7698
7737
  if (!e6) return;
@@ -7705,172 +7744,172 @@ function oy(e5) {
7705
7744
  n2(e6);
7706
7745
  });
7707
7746
  }
7708
- var sy = document.getElementById("chart-container"), cy = document.getElementById("loading-state"), ly = document.getElementById("mode-badge"), uy = document.getElementById("chart-status"), dy = document.getElementById("aspect-filter"), fy = document.getElementById("chart-provenance"), py = document.getElementById("bi-patterns-strip"), my = document.getElementById("param-controls-container"), hy = new r_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }), $ = null, gy = null, _y = false, vy = false, yy = "placidus";
7709
- m_(() => {
7710
- $ && Jy($);
7747
+ var fy = document.getElementById("chart-container"), py = document.getElementById("loading-state"), my = document.getElementById("mode-badge"), hy = document.getElementById("chart-status"), gy = document.getElementById("aspect-filter"), _y = document.getElementById("chart-provenance"), vy = document.getElementById("bi-patterns-strip"), yy = document.getElementById("param-controls-container"), by = new r_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }), $ = null, xy = null, Sy = false, Cy = false, wy = "placidus";
7748
+ h_(() => {
7749
+ $ && $y($);
7711
7750
  });
7712
- var by = "true";
7713
- function xy(e5) {
7714
- if (uy) {
7751
+ var Ty = "true";
7752
+ function Ey(e5) {
7753
+ if (hy) {
7715
7754
  if (!e5) {
7716
- uy.classList.remove("visible");
7755
+ hy.classList.remove("visible");
7717
7756
  return;
7718
7757
  }
7719
- uy.textContent = "\xB7 ".concat(e5), uy.classList.add("visible");
7758
+ hy.textContent = "\xB7 ".concat(e5), hy.classList.add("visible");
7720
7759
  }
7721
7760
  }
7722
- nv(xy);
7723
- function Sy() {
7724
- cy.hidden = false, sy.hidden = true, ly.hidden = true, fy && (fy.hidden = true), py && (py.hidden = true, py.innerHTML = "");
7761
+ iv(Ey);
7762
+ function Dy() {
7763
+ py.hidden = false, fy.hidden = true, my.hidden = true, _y && (_y.hidden = true), vy && (vy.hidden = true, vy.innerHTML = "");
7725
7764
  }
7726
- function Cy() {
7727
- cy.hidden = true, sy.hidden = false, sy.classList.remove("refreshing"), ly.hidden = false, fy && (fy.hidden = false);
7765
+ function Oy() {
7766
+ py.hidden = true, fy.hidden = false, fy.classList.remove("refreshing"), my.hidden = false, _y && (_y.hidden = false);
7728
7767
  }
7729
- function wy() {
7730
- if (!$ || sy.hidden) {
7731
- Sy();
7768
+ function ky() {
7769
+ if (!$ || fy.hidden) {
7770
+ Dy();
7732
7771
  return;
7733
7772
  }
7734
- sy.classList.add("refreshing");
7773
+ fy.classList.add("refreshing");
7735
7774
  }
7736
- function Ty() {
7737
- sy.classList.remove("refreshing"), sy.classList.remove("chart-rendered"), sy.offsetWidth, sy.classList.add("chart-rendered");
7775
+ function Ay() {
7776
+ fy.classList.remove("refreshing"), fy.classList.remove("chart-rendered"), fy.offsetWidth, fy.classList.add("chart-rendered");
7738
7777
  }
7739
- function Ey(e5, t2) {
7740
- cy.hidden = true, fy && (fy.hidden = true), ty({ container: sy, message: e5, onRetry: t2 });
7778
+ function jy(e5, t2) {
7779
+ py.hidden = true, _y && (_y.hidden = true), oy({ container: fy, message: e5, onRetry: t2 });
7741
7780
  }
7742
- function Dy(e5) {
7781
+ function My(e5) {
7743
7782
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7744
7783
  }
7745
- async function Oy(e5) {
7784
+ async function Ny(e5) {
7746
7785
  try {
7747
- (await hy.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
7786
+ (await by.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
7748
7787
  } catch (e6) {
7749
7788
  console.error("[BiWheel] sendMessage failed:", e6);
7750
7789
  }
7751
7790
  }
7752
- function ky(e5) {
7753
- let t2 = ny(e5);
7791
+ function Py(e5) {
7792
+ let t2 = sy(e5);
7754
7793
  return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
7755
7794
  }
7756
- var Ay = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], jy = true, My = 1;
7757
- function Ny() {
7795
+ var Fy = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], Iy = true, Ly = 1;
7796
+ function Ry() {
7758
7797
  var e5, t2, n2;
7759
- if (!dy) return;
7798
+ if (!gy) return;
7760
7799
  let r2 = (t2 = { synastry: "Synastry \u2192 Natal", transit: "Transit \u2192 Natal", progressed: "Progressions \u2192 Natal", solar_return: "Solar Return \u2192 Natal", lunar_return: "Lunar Return \u2192 Natal", solar_arc: "Solar Arc \u2192 Natal" }[(e5 = $ == null ? void 0 : $.mode) == null ? "synastry" : e5]) == null ? "Cross-Wheel" : t2, i2 = [{ key: "placidus", label: "Placidus" }, { key: "whole_sign", label: "Whole Sign" }, { key: "equal", label: "Equal" }, { key: "koch", label: "Koch" }, { key: "regiomontanus", label: "Regio." }], a2 = (() => {
7761
7800
  var e6, t3;
7762
7801
  let n3 = /* @__PURE__ */ new Set();
7763
7802
  for (let r3 of [...(e6 = $ == null ? void 0 : $.inner) == null ? [] : e6, ...(t3 = $ == null ? void 0 : $.outer) == null ? [] : t3]) r3 && typeof r3 == "object" && "name" in r3 && n3.add(String(r3.name).toLowerCase());
7764
7803
  return n3.has("north_node") && n3.has("true_node");
7765
7804
  })();
7766
- X_(by);
7767
- let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(by === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(by === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7768
- jy = true, dy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="aspect-vis-toggle"\n title="Toggle all aspect lines &amp; symbols">\n <span class="toggle-icon">\u2295</span> '.concat(r2, '\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n ').concat(Ay.map((e6) => '<button class="orb-preset-btn'.concat(e6.mult === My ? " active" : "", '" data-mult="').concat(e6.mult, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), '\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Houses</span>\n ').concat(i2.map((e6) => '<button class="orb-preset-btn house-btn'.concat(e6.key === yy ? " active" : "", '" data-hs="').concat(e6.key, '" title="').concat(e6.label, ' houses">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(o2, "\n </div>\n ");
7769
- let s2 = [...Q_($ == null ? void 0 : $.inner), ...Q_($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
7805
+ Q_(Ty);
7806
+ let o2 = a2 ? '\n <div class="asp-section">\n <span class="asp-section-label">Nodes</span>\n <button class="orb-preset-btn node-btn'.concat(Ty === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Ty === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7807
+ Iy = true, gy.innerHTML = '\n <div class="asp-panel">\n <div class="asp-section">\n <span class="asp-section-label">Aspects</span>\n <button class="aspect-toggle-btn active" id="aspect-vis-toggle"\n title="Toggle all aspect lines &amp; symbols">\n <span class="toggle-icon">\u2295</span> '.concat(r2, '\n </button>\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Orb</span>\n ').concat(Fy.map((e6) => '<button class="orb-preset-btn'.concat(e6.mult === Ly ? " active" : "", '" data-mult="').concat(e6.mult, '" title="').concat(e6.label, ' orbs">').concat(e6.label, "</button>")).join(""), '\n </div>\n <div class="asp-section">\n <span class="asp-section-label">Houses</span>\n ').concat(i2.map((e6) => '<button class="orb-preset-btn house-btn'.concat(e6.key === wy ? " active" : "", '" data-hs="').concat(e6.key, '" title="').concat(e6.label, ' houses">').concat(e6.label, "</button>")).join(""), "\n </div>").concat(o2, "\n </div>\n ");
7808
+ let s2 = [...ev($ == null ? void 0 : $.inner), ...ev($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
7770
7809
  for (let e6 of s2) {
7771
7810
  let t3 = e6.name.toLowerCase();
7772
7811
  if (c2.has(t3)) continue;
7773
7812
  c2.add(t3);
7774
- let n3 = P_[t3];
7775
- n3 && l2.push({ glyph: n3, label: Uv(e6.name) });
7813
+ let n3 = F_[t3];
7814
+ n3 && l2.push({ glyph: n3, label: Gv(e6.name) });
7776
7815
  }
7777
7816
  let u2 = [...new Set(((n2 = $ == null ? void 0 : $.cross_aspects) == null ? [] : n2).map((e6) => {
7778
7817
  var t3;
7779
7818
  return ((t3 = e6.type) == null ? "" : t3).toLowerCase();
7780
7819
  }).filter(Boolean))].map((e6) => {
7781
7820
  var t3;
7782
- return { glyph: (t3 = L_[e6]) == null ? "" : t3, label: Uv(e6) };
7821
+ return { glyph: (t3 = R_[e6]) == null ? "" : t3, label: Gv(e6) };
7783
7822
  }).filter((e6) => e6.glyph);
7784
- dy.insertAdjacentHTML("beforeend", Wv([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), dy.removeAttribute("hidden");
7823
+ gy.insertAdjacentHTML("beforeend", Kv([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), gy.removeAttribute("hidden");
7785
7824
  let d2 = document.getElementById("aspect-vis-toggle");
7786
7825
  d2 == null || d2.addEventListener("click", () => {
7787
- jy = !jy, kv(jy), d2.classList.toggle("active", jy), d2.querySelector(".toggle-icon").textContent = jy ? "\u2295" : "\u2296";
7788
- }), dy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => {
7826
+ Iy = !Iy, jv(Iy), d2.classList.toggle("active", Iy), d2.querySelector(".toggle-icon").textContent = Iy ? "\u2295" : "\u2296";
7827
+ }), gy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => {
7789
7828
  e6.addEventListener("click", () => {
7790
7829
  var t3;
7791
7830
  let n3 = parseFloat((t3 = e6.dataset.mult) == null ? "1" : t3);
7792
- n3 !== My && (My = n3, dy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e7) => e7.classList.toggle("active", e7.dataset.mult === String(n3))), $ && Py($, n3));
7831
+ n3 !== Ly && (Ly = n3, gy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e7) => e7.classList.toggle("active", e7.dataset.mult === String(n3))), $ && zy($, n3));
7793
7832
  });
7794
- }), dy.querySelectorAll(".house-btn").forEach((e6) => {
7833
+ }), gy.querySelectorAll(".house-btn").forEach((e6) => {
7795
7834
  e6.addEventListener("click", () => {
7796
7835
  var t3;
7797
7836
  let n3 = (t3 = e6.dataset.hs) == null ? "placidus" : t3;
7798
- n3 === yy || !$ || (yy = n3, dy.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), Qy(n3));
7837
+ n3 === wy || !$ || (wy = n3, gy.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), rb(n3));
7799
7838
  });
7800
- }), dy.querySelectorAll(".node-btn").forEach((e6) => {
7839
+ }), gy.querySelectorAll(".node-btn").forEach((e6) => {
7801
7840
  e6.addEventListener("click", () => {
7802
7841
  let t3 = e6.dataset.node === "mean" ? "mean" : "true";
7803
- t3 === by || !$ || (by = t3, X_(t3), dy.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), Py($, My));
7842
+ t3 === Ty || !$ || (Ty = t3, Q_(t3), gy.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), zy($, Ly));
7804
7843
  });
7805
7844
  });
7806
7845
  }
7807
- function Py(e5, t2) {
7846
+ function zy(e5, t2) {
7808
7847
  var n2, r2, i2, a2;
7809
- let o2 = Q_(e5.inner), s2 = Q_(e5.outer), c2 = ev(o2, s2, t2), l2 = { ...e5, cross_aspects: c2 };
7810
- zv(sy, l2, $y, eb, Uy, qy()), jy || kv(false);
7848
+ let o2 = ev(e5.inner), s2 = ev(e5.outer), c2 = nv(o2, s2, t2), l2 = { ...e5, cross_aspects: c2 };
7849
+ Vv(fy, l2, ib, ab, Jy, Qy()), Iy || jv(false);
7811
7850
  let u2 = (r2 = (i2 = (a2 = ((n2 = l2.inner_houses) == null ? [] : n2)[0]) == null ? void 0 : a2.cusp_lon) == null ? l2.ascendant : i2) == null ? 0 : r2;
7812
- Zy(Nv(c2), o2, s2, u2);
7851
+ nb(Fv(c2), o2, s2, u2);
7813
7852
  }
7814
- var Fy = null;
7815
- function Iy(e5) {
7816
- Fy = e5, e5 ? sy.setAttribute("data-focus", e5) : sy.removeAttribute("data-focus"), ly.querySelectorAll(".mode-badge-name").forEach((t2) => {
7853
+ var By = null;
7854
+ function Vy(e5) {
7855
+ By = e5, e5 ? fy.setAttribute("data-focus", e5) : fy.removeAttribute("data-focus"), my.querySelectorAll(".mode-badge-name").forEach((t2) => {
7817
7856
  let n2 = t2.dataset.focus;
7818
7857
  t2.classList.toggle("focused", n2 === e5);
7819
- }), $ && Hy($, e5);
7858
+ }), $ && qy($, e5);
7820
7859
  }
7821
- function Ly(e5) {
7860
+ function Hy(e5) {
7822
7861
  var t2, n2, r2, i2, a2, o2, s2;
7823
7862
  let c2 = (t2 = e5.mode) == null ? "synastry" : t2, l2 = (n2 = (r2 = e5._birth_params_inner) == null ? void 0 : r2.location) == null ? "Person 1" : n2, u2 = (i2 = (a2 = e5._birth_params_outer) == null ? void 0 : a2.location) == null ? c2 === "transit" ? "Transits" : "Person 2" : i2;
7824
- Fy = null, sy.removeAttribute("data-focus");
7863
+ By = null, fy.removeAttribute("data-focus");
7825
7864
  let d2 = "";
7826
7865
  if (c2 === "transit" && (o2 = e5._birth_params_outer) != null && o2.datetime) try {
7827
- let t3 = new Date(e5._birth_params_outer.datetime);
7828
- isNaN(t3.getTime()) || (d2 = '<span class="mode-badge-date">'.concat(Dy(t3.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" })), "</span>"));
7866
+ let t3 = Jv(e5._birth_params_outer.datetime, e5._birth_params_outer.timezone);
7867
+ t3 && (d2 = '<span class="mode-badge-date">'.concat(My(t3.date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: t3.timeZone })), "</span>"));
7829
7868
  } catch (e6) {
7830
7869
  }
7831
- ly.innerHTML = '\n <button class="mode-badge-name inner-name" data-focus="inner" title="Click to focus inner (natal) wheel">\n <span class="mode-badge-dot-inner"></span>'.concat(Dy(l2), '\n </button>\n <button class="mode-badge-swap" title="Toggle focus">\u21C4</button>\n <button class="mode-badge-name outer-name" data-focus="outer" title="Click to focus outer (').concat(c2, ') wheel">\n <span class="mode-badge-dot-outer"></span>').concat(Dy(u2), "\n </button>\n ").concat(d2), ly.querySelectorAll(".mode-badge-name").forEach((e6) => {
7870
+ my.innerHTML = '\n <button class="mode-badge-name inner-name" data-focus="inner" title="Click to focus inner (natal) wheel">\n <span class="mode-badge-dot-inner"></span>'.concat(My(l2), '\n </button>\n <button class="mode-badge-swap" title="Toggle focus">\u21C4</button>\n <button class="mode-badge-name outer-name" data-focus="outer" title="Click to focus outer (').concat(c2, ') wheel">\n <span class="mode-badge-dot-outer"></span>').concat(My(u2), "\n </button>\n ").concat(d2), my.querySelectorAll(".mode-badge-name").forEach((e6) => {
7832
7871
  e6.addEventListener("click", () => {
7833
7872
  let t3 = e6.dataset.focus;
7834
- Iy(Fy === t3 ? null : t3);
7873
+ Vy(By === t3 ? null : t3);
7835
7874
  });
7836
- }), (s2 = ly.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
7837
- Iy(Fy === "inner" ? "outer" : "inner");
7875
+ }), (s2 = my.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
7876
+ Vy(By === "inner" ? "outer" : "inner");
7838
7877
  });
7839
7878
  }
7840
- var Ry = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], zy = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
7841
- function By(e5, t2) {
7879
+ var Uy = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], Wy = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
7880
+ function Gy(e5, t2) {
7842
7881
  var n2, r2;
7843
7882
  let i2 = e5.find((e6) => e6.name.toLowerCase() === t2);
7844
7883
  if (!i2) return "\u2014";
7845
7884
  let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
7846
- return "".concat((n2 = zy[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = Ry[a2]) == null ? "" : r2);
7885
+ return "".concat((n2 = Wy[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = Uy[a2]) == null ? "" : r2);
7847
7886
  }
7848
- function Vy(e5, t2) {
7887
+ function Ky(e5, t2) {
7849
7888
  try {
7850
- let n2 = new Date(e5);
7851
- if (isNaN(n2.getTime())) return e5;
7852
- let r2 = { timeZone: t2 || "UTC" };
7853
- return n2.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", ...r2 }) + " \xB7 " + n2.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, ...r2 });
7889
+ let n2 = Jv(e5, t2);
7890
+ if (!n2) return e5;
7891
+ let { date: r2, timeZone: i2 } = n2;
7892
+ return r2.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: i2 }) + " \xB7 " + r2.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true, timeZone: i2 });
7854
7893
  } catch (t3) {
7855
7894
  return e5;
7856
7895
  }
7857
7896
  }
7858
- function Hy(e5, t2) {
7897
+ function qy(e5, t2) {
7859
7898
  var n2, r2, i2, a2, o2;
7860
- if (!fy) return;
7861
- let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ? Vy(l2.datetime, f2) : null, m2 = s2 === "inner" ? e5.inner_houses : (a2 = e5.outer_houses) == null ? [] : a2, h2 = (o2 = e5.house_system) == null ? m2.length > 0 ? "Placidus" : null : o2, g2 = By(c2, "sun"), _2 = By(c2, "moon"), v2 = By(c2, "asc");
7899
+ if (!_y) return;
7900
+ let s2 = t2 == null ? "inner" : t2, c2 = s2 === "inner" ? e5.inner : e5.outer, l2 = s2 === "inner" ? e5._birth_params_inner : e5._birth_params_outer, u2 = (n2 = e5.mode) == null ? "synastry" : n2, d2 = (r2 = l2 == null ? void 0 : l2.location) == null ? s2 === "inner" ? "Inner chart" : u2 === "transit" ? "Transits" : "Outer chart" : r2, f2 = (i2 = l2 == null ? void 0 : l2.timezone) == null ? null : i2, p2 = l2 != null && l2.datetime ? Ky(l2.datetime, f2) : null, m2 = s2 === "inner" ? e5.inner_houses : (a2 = e5.outer_houses) == null ? [] : a2, h2 = (o2 = e5.house_system) == null ? m2.length > 0 ? "Placidus" : null : o2, g2 = Gy(c2, "sun"), _2 = Gy(c2, "moon"), v2 = Gy(c2, "asc");
7862
7901
  if (v2 === "AC \u2014" && m2.length > 0) {
7863
7902
  let e6 = m2.find((e7) => e7.number === 1);
7864
7903
  if (e6) {
7865
7904
  var y2;
7866
7905
  let t3 = Math.floor((e6.cusp_lon % 360 + 360) % 360 / 30);
7867
- v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = Ry[t3]) == null ? "" : y2);
7906
+ v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = Uy[t3]) == null ? "" : y2);
7868
7907
  }
7869
7908
  }
7870
7909
  let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
7871
- fy.innerHTML = '\n <div class="prov-name">'.concat(Dy(d2), '\n <span class="prov-mode-tag">').concat(Dy(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(Dy(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Dy(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Dy(v2), "</span>\n </div>\n ").concat(p2 ? '<div class="prov-meta">'.concat(Dy(p2)).concat(f2 ? ' <span class="prov-tz">'.concat(Dy(f2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(Dy(h2), " houses</div>") : "", "\n "), fy.hidden = false;
7910
+ _y.innerHTML = '\n <div class="prov-name">'.concat(My(d2), '\n <span class="prov-mode-tag">').concat(My(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(My(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(My(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(My(v2), "</span>\n </div>\n ").concat(p2 ? '<div class="prov-meta">'.concat(My(p2)).concat(f2 ? ' <span class="prov-tz">'.concat(My(f2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(My(h2), " houses</div>") : "", "\n "), _y.hidden = false;
7872
7911
  }
7873
- async function Uy(e5) {
7912
+ async function Jy(e5) {
7874
7913
  var t2;
7875
7914
  let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
7876
7915
  if (e5.type === "planet") {
@@ -7896,31 +7935,37 @@ async function Uy(e5) {
7896
7935
  let t3 = e5.data, i3 = (m2 = t3.planets) == null ? [] : m2, a3 = n2 === "transit" ? "natal" : "inner", o3 = n2 === "transit" ? "transit" : "outer", s3 = i3.length > 0 ? i3.map((e6) => "".concat(e6.name, " (").concat(e6.wheel === "inner" ? a3 : o3, ")")).join(", ") : "the involved planets";
7897
7936
  r2 = "Interpret the ".concat(String(t3.name), " forming in this ").concat(n2, " bi-wheel involving ").concat(s3, ". ") + (t3.description ? "".concat(String(t3.description), ". ") : "") + "This is a cross-chart pattern \u2014 it spans both wheels, so the meaning lives in the interaction between the ".concat(a3, " foundation and the ").concat(o3, " activation. Give a rich interpretation covering: (1) the core dynamic this pattern creates, (2) how the ").concat(a3, " planets set the stage, (3) what the ").concat(o3, " planets activate or challenge, (4) the psychological theme and practical expression").concat(n2 === "transit" ? ", and (5) timing \u2014 what to do with this energy now" : "", ".");
7898
7937
  }
7899
- r2 && await Oy(r2);
7938
+ if (!r2) return;
7939
+ let h2 = Yv($ == null ? void 0 : $._birth_params_inner), g2 = Yv($ == null ? void 0 : $._birth_params_outer);
7940
+ if (h2 || g2) {
7941
+ let e6 = n2 === "transit" ? "Natal" : "Inner wheel", t3 = n2 === "transit" ? "Transits" : "Outer wheel";
7942
+ r2 = "".concat([h2 ? "".concat(e6, ": ").concat(h2) : "", g2 ? "".concat(t3, ": ").concat(g2) : ""].filter(Boolean).join("\n"), "\n\n").concat(r2);
7943
+ }
7944
+ await Ny(r2);
7900
7945
  }
7901
- async function Wy() {
7946
+ async function Yy() {
7902
7947
  var e5, t2, n2, r2, i2, a2, o2, s2;
7903
7948
  if (!$) return;
7904
7949
  let c2 = $, l2 = (e5 = c2.mode) == null ? "synastry" : e5, u2 = String((t2 = (n2 = c2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), d2 = l2 === "transit" ? "transits (".concat(String((r2 = (i2 = c2._birth_params_outer) == null ? void 0 : i2.location) == null ? "today" : r2), ")") : String((a2 = (o2 = c2._birth_params_outer) == null ? void 0 : o2.location) == null ? "Person 2" : a2), f2 = ((s2 = c2.cross_aspects) == null ? [] : s2).slice(0, 8).map((e6) => " \u2022 ".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0").concat(e6.applying === void 0 ? "" : ", ".concat(e6.applying ? "applying" : "separating"), ")")).join("\n") || " \u2022 No cross-aspects within orb";
7905
- await Oy(l2 === "transit" ? "Please interpret this transit chart for ".concat(u2, ".\n\nKey transit cross-aspects:\n").concat(f2, "\n\nCover: (1) The most significant active transits and their themes, (2) Timing \u2014 what's applying vs separating, (3) Practical guidance \u2014 what to focus on now, (4) The overall energetic signature of this moment in time.") : "Please interpret this synastry bi-wheel between ".concat(u2, " and ").concat(d2, ".\n\nTop cross-wheel aspects:\n").concat(f2, "\n\nCover: (1) The core relational dynamic and overall compatibility theme, (2) The most significant planet-to-planet contacts and their meaning, (3) Areas of natural ease vs creative tension, (4) How each person experiences the other energetically."));
7950
+ await Ny(l2 === "transit" ? "Please interpret this transit chart for ".concat(u2, ".\n\nKey transit cross-aspects:\n").concat(f2, "\n\nCover: (1) The most significant active transits and their themes, (2) Timing \u2014 what's applying vs separating, (3) Practical guidance \u2014 what to focus on now, (4) The overall energetic signature of this moment in time.") : "Please interpret this synastry bi-wheel between ".concat(u2, " and ").concat(d2, ".\n\nTop cross-wheel aspects:\n").concat(f2, "\n\nCover: (1) The core relational dynamic and overall compatibility theme, (2) The most significant planet-to-planet contacts and their meaning, (3) Areas of natural ease vs creative tension, (4) How each person experiences the other energetically."));
7906
7951
  }
7907
- async function Gy() {
7952
+ async function Xy() {
7908
7953
  var e5, t2, n2, r2, i2, a2;
7909
7954
  if (!$) return;
7910
7955
  let o2 = $, s2 = (e5 = o2.mode) == null ? "synastry" : e5, c2 = String((t2 = (n2 = o2._birth_params_inner) == null ? void 0 : n2.location) == null ? "Person 1" : t2), l2 = s2 === "transit" ? "today's transits" : String((r2 = (i2 = o2._birth_params_outer) == null ? void 0 : i2.location) == null ? "Person 2" : r2), u2 = ((a2 = o2.cross_aspects) == null ? [] : a2).slice(0, 6).map((e6) => "".concat(e6.planet1, " ").concat(e6.type, " ").concat(e6.planet2, " (").concat(e6.orb.toFixed(1), "\xB0)")).join(", ") || "none detected";
7911
- await Oy(s2 === "transit" ? "I'm exploring a transit chart for ".concat(c2, ". The active cross-aspects include: ").concat(u2, ".\n\nBased on these transits, please suggest 3-4 specific, insightful questions I could ask to understand this moment \u2014 such as what each transit means for different life areas, timing, or how to work with the energy consciously. Present each as a tappable question I can ask you.") : "I'm exploring a synastry chart between ".concat(c2, " and ").concat(l2, ". The key cross-wheel contacts include: ").concat(u2, ".\n\nBased on these connections, please suggest 3-4 specific, insightful questions I could ask to understand this relationship dynamic \u2014 such as what specific aspects mean, areas of natural ease or tension, or how these two charts interact. Present each as a tappable question I can ask you."));
7956
+ await Ny(s2 === "transit" ? "I'm exploring a transit chart for ".concat(c2, ". The active cross-aspects include: ").concat(u2, ".\n\nBased on these transits, please suggest 3-4 specific, insightful questions I could ask to understand this moment \u2014 such as what each transit means for different life areas, timing, or how to work with the energy consciously. Present each as a tappable question I can ask you.") : "I'm exploring a synastry chart between ".concat(c2, " and ").concat(l2, ". The key cross-wheel contacts include: ").concat(u2, ".\n\nBased on these connections, please suggest 3-4 specific, insightful questions I could ask to understand this relationship dynamic \u2014 such as what specific aspects mean, areas of natural ease or tension, or how these two charts interact. Present each as a tappable question I can ask you."));
7912
7957
  }
7913
- async function Ky(e5) {
7914
- if (_y) try {
7958
+ async function Zy(e5) {
7959
+ if (Sy) try {
7915
7960
  var t2;
7916
- await hy.updateModelContext({ content: [{ type: "text", text: "User selected ".concat(e5.type, ": ").concat(JSON.stringify(e5.data, null, 2), "\nMode: ").concat((t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2) }] });
7961
+ await by.updateModelContext({ content: [{ type: "text", text: "User selected ".concat(e5.type, ": ").concat(JSON.stringify(e5.data, null, 2), "\nMode: ").concat((t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2) }] });
7917
7962
  } catch (e6) {
7918
7963
  }
7919
7964
  }
7920
- function qy() {
7921
- if (vy) return async (e5) => {
7965
+ function Qy() {
7966
+ if (Cy) return async (e5) => {
7922
7967
  var t2;
7923
- let n2 = await hy.createSamplingMessage({ maxTokens: 150, systemPrompt: "You are an expert astrologer interpreting a ".concat(($ == null ? void 0 : $.mode) === "synastry" ? "synastry (relationship)" : "".concat((t2 = $ == null ? void 0 : $.mode) == null ? "transit" : t2, " (planetary weather)"), " chart. Give a focused, mode-appropriate interpretation. Insightful and concise."), messages: [{ role: "user", content: { type: "text", text: e5 } }] });
7968
+ let n2 = await by.createSamplingMessage({ maxTokens: 150, systemPrompt: "You are an expert astrologer interpreting a ".concat(($ == null ? void 0 : $.mode) === "synastry" ? "synastry (relationship)" : "".concat((t2 = $ == null ? void 0 : $.mode) == null ? "transit" : t2, " (planetary weather)"), " chart. Give a focused, mode-appropriate interpretation. Insightful and concise."), messages: [{ role: "user", content: { type: "text", text: e5 } }] });
7924
7969
  if (n2.isError) {
7925
7970
  var r2, i2;
7926
7971
  throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
@@ -7930,133 +7975,133 @@ function qy() {
7930
7975
  throw Error("Unexpected sampling response format");
7931
7976
  };
7932
7977
  }
7933
- function Jy(e5) {
7978
+ function $y(e5) {
7934
7979
  var t2, n2, r2, i2, a2, o2, s2;
7935
- $ = e5, clearTimeout(nb), Ly(e5), zv(sy, e5, $y, eb, Uy, qy()), Ny(), Hy(e5, Fy);
7936
- let c2 = Q_(e5.inner), l2 = Q_(e5.outer), u2 = (n2 = (r2 = (i2 = ((t2 = e5.inner_houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2;
7937
- Zy(Nv((a2 = e5.cross_aspects) == null ? [] : a2), c2, l2, u2), e5.house_system && (yy = e5.house_system);
7980
+ $ = e5, clearTimeout(sb), Hy(e5), Vv(fy, e5, ib, ab, Jy, Qy()), Ry(), qy(e5, By);
7981
+ let c2 = ev(e5.inner), l2 = ev(e5.outer), u2 = (n2 = (r2 = (i2 = ((t2 = e5.inner_houses) == null ? [] : t2)[0]) == null ? void 0 : i2.cusp_lon) == null ? e5.ascendant : r2) == null ? 0 : n2;
7982
+ nb(Fv((a2 = e5.cross_aspects) == null ? [] : a2), c2, l2, u2), e5.house_system && (wy = e5.house_system);
7938
7983
  let d2 = document.getElementById("bi-action-bar");
7939
7984
  if (!d2) {
7940
7985
  d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
7941
7986
  let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
7942
7987
  if (e6) e6.appendChild(d2);
7943
7988
  else {
7944
- let e7 = document.getElementById("app"), t3 = ly.parentElement === e7 ? ly : null;
7989
+ let e7 = document.getElementById("app"), t3 = my.parentElement === e7 ? my : null;
7945
7990
  e7 == null || e7.insertBefore(d2, t3);
7946
7991
  }
7947
7992
  }
7948
- d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void Wy()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void Gy()), Cy(), Ty(), $v("bi-wheel");
7993
+ d2.innerHTML = '\n <button class="action-btn action-btn--primary" id="bi-interpret-btn">\u2728 Interpret this chart</button>\n <button class="action-btn" id="bi-questions-btn">\u{1F52E} What should I ask?</button>\n ', (o2 = d2.querySelector("#bi-interpret-btn")) == null || o2.addEventListener("click", () => void Yy()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void Xy()), Oy(), Ay(), iy("bi-wheel");
7949
7994
  }
7950
- var Yy = null, Xy = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
7951
- function Zy(e5, t2, n2, r2) {
7952
- if (!py) return;
7995
+ var eb = null, tb = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
7996
+ function nb(e5, t2, n2, r2) {
7997
+ if (!vy) return;
7953
7998
  if (e5.length === 0) {
7954
- py.hidden = true, py.innerHTML = "";
7999
+ vy.hidden = true, vy.innerHTML = "";
7955
8000
  return;
7956
8001
  }
7957
- Yy = null, py.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
8002
+ eb = null, vy.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
7958
8003
  var n3;
7959
- let r3 = (n3 = Xy[e6.name]) == null ? "#888" : n3;
8004
+ let r3 = (n3 = tb[e6.name]) == null ? "#888" : n3;
7960
8005
  return '<button class="pattern-pill"\n data-idx="'.concat(t3, '"\n data-color="').concat(r3, '"\n style="color:').concat(r3, ";border-color:").concat(r3, '"\n title="').concat(e6.description, '">\n ').concat(e6.name, '\n <span class="pattern-pill-detail">').concat(e6.description, "</span>\n </button>");
7961
- }).join(""), "\n "), py.removeAttribute("hidden");
8006
+ }).join(""), "\n "), vy.removeAttribute("hidden");
7962
8007
  let i2 = document.createElement("button");
7963
- i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Ask Claude", i2.style.display = "none", py.appendChild(i2), i2.addEventListener("click", () => {
8008
+ i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none", vy.appendChild(i2), i2.addEventListener("click", () => {
7964
8009
  var t3;
7965
- let n3 = Yy;
8010
+ let n3 = eb;
7966
8011
  if (n3 === null) return;
7967
8012
  let r3 = e5[n3];
7968
- r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", Uy({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
8013
+ r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", Jy({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
7969
8014
  i2.textContent = "\u2713 Sent", setTimeout(() => {
7970
- i2.textContent = "\u2728 Ask Claude", i2.disabled = false;
8015
+ i2.textContent = "\u2728 Interpret", i2.disabled = false;
7971
8016
  }, 2500);
7972
8017
  }).catch(() => {
7973
8018
  i2.textContent = "\u26A0 Failed", i2.disabled = false;
7974
8019
  }));
7975
- }), py.querySelectorAll(".pattern-pill").forEach((a2) => {
8020
+ }), vy.querySelectorAll(".pattern-pill").forEach((a2) => {
7976
8021
  a2.addEventListener("click", () => {
7977
8022
  var o2, s2;
7978
8023
  let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e5[c2];
7979
8024
  if (!l2) return;
7980
8025
  let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
7981
- if (Yy === c2) {
7982
- Yy = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, Ov(), Lv(), i2.style.display = "none";
8026
+ if (eb === c2) {
8027
+ eb = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, Av(), zv(), i2.style.display = "none";
7983
8028
  return;
7984
8029
  }
7985
- Yy = c2, py.querySelectorAll(".pattern-pill").forEach((e6) => {
8030
+ eb = c2, vy.querySelectorAll(".pattern-pill").forEach((e6) => {
7986
8031
  var t3;
7987
8032
  e6.classList.remove("active");
7988
8033
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
7989
8034
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
7990
- }), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, Rv(l2), Lv(), Iv(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Ask Claude", i2.disabled = false;
8035
+ }), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, Bv(l2), zv(), Rv(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Interpret", i2.disabled = false;
7991
8036
  });
7992
8037
  });
7993
8038
  }
7994
- async function Qy(e5) {
8039
+ async function rb(e5) {
7995
8040
  if (!$) return;
7996
8041
  let t2 = $;
7997
- wy();
8042
+ ky();
7998
8043
  try {
7999
8044
  var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
8000
- let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = ky(await Promise.race([hy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n2 = t2._birth_params_inner) == null ? void 0 : n2.datetime, person1_latitude: (r2 = t2._birth_params_inner) == null ? void 0 : r2.latitude, person1_longitude: (i2 = t2._birth_params_inner) == null ? void 0 : i2.longitude, person1_timezone: (a2 = t2._birth_params_inner) == null ? void 0 : a2.timezone, person1_name: (o2 = t2._birth_params_inner) == null ? void 0 : o2.location, person2_datetime: (s2 = t2._birth_params_outer) == null ? void 0 : s2.datetime, person2_latitude: (c2 = t2._birth_params_outer) == null ? void 0 : c2.latitude, person2_longitude: (l2 = t2._birth_params_outer) == null ? void 0 : l2.longitude, person2_timezone: (u2 = t2._birth_params_outer) == null ? void 0 : u2.timezone, person2_name: (d2 = t2._birth_params_outer) == null ? void 0 : d2.location, house_system: e5 } }), f2]));
8001
- p2 ? Jy(p2) : $ && Cy();
8045
+ let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = Py(await Promise.race([by.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n2 = t2._birth_params_inner) == null ? void 0 : n2.datetime, person1_latitude: (r2 = t2._birth_params_inner) == null ? void 0 : r2.latitude, person1_longitude: (i2 = t2._birth_params_inner) == null ? void 0 : i2.longitude, person1_timezone: (a2 = t2._birth_params_inner) == null ? void 0 : a2.timezone, person1_name: (o2 = t2._birth_params_inner) == null ? void 0 : o2.location, person2_datetime: (s2 = t2._birth_params_outer) == null ? void 0 : s2.datetime, person2_latitude: (c2 = t2._birth_params_outer) == null ? void 0 : c2.latitude, person2_longitude: (l2 = t2._birth_params_outer) == null ? void 0 : l2.longitude, person2_timezone: (u2 = t2._birth_params_outer) == null ? void 0 : u2.timezone, person2_name: (d2 = t2._birth_params_outer) == null ? void 0 : d2.location, house_system: e5 } }), f2]));
8046
+ p2 ? $y(p2) : $ && Oy();
8002
8047
  } catch (e6) {
8003
- console.error("[BiWheel] House system recalculate failed:", e6), $ && Cy();
8048
+ console.error("[BiWheel] House system recalculate failed:", e6), $ && Oy();
8004
8049
  }
8005
8050
  }
8006
- function $y(e5, t2, n2) {
8051
+ function ib(e5, t2, n2) {
8007
8052
  var r2, i2, a2, o2, s2;
8008
8053
  let c2 = Math.floor((e5.longitude % 360 + 360) % 360 / 30), l2 = (r2 = (i2 = e5.sign) == null ? ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"][c2] : i2) == null ? "Unknown" : r2;
8009
- Ky({ type: "planet", data: { planet_name: e5.name, wheel: t2, longitude: e5.longitude, sign: l2, position: "".concat(Math.floor(e5.longitude % 30), "\xB0 ").concat(l2), house: (a2 = e5.house) == null ? null : a2, retrograde: (o2 = e5.retrograde) == null ? false : o2, mode: (s2 = $ == null ? void 0 : $.mode) == null ? "synastry" : s2, cross_aspects: n2.filter((n3) => t2 === "inner" && n3.planet1 === e5.name || t2 === "outer" && n3.planet2 === e5.name).slice(0, 5).map((e6) => ({ type: e6.type, partner: t2 === "inner" ? e6.planet2 : e6.planet1, orb: e6.orb, applying: e6.applying, orb_label: e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide" })) } });
8054
+ Zy({ type: "planet", data: { planet_name: e5.name, wheel: t2, longitude: e5.longitude, sign: l2, position: "".concat(Math.floor(e5.longitude % 30), "\xB0 ").concat(l2), house: (a2 = e5.house) == null ? null : a2, retrograde: (o2 = e5.retrograde) == null ? false : o2, mode: (s2 = $ == null ? void 0 : $.mode) == null ? "synastry" : s2, cross_aspects: n2.filter((n3) => t2 === "inner" && n3.planet1 === e5.name || t2 === "outer" && n3.planet2 === e5.name).slice(0, 5).map((e6) => ({ type: e6.type, partner: t2 === "inner" ? e6.planet2 : e6.planet1, orb: e6.orb, applying: e6.applying, orb_label: e6.orb <= 1 ? "exact" : e6.orb <= 3 ? "tight" : "wide" })) } });
8010
8055
  }
8011
- function eb(e5) {
8056
+ function ab(e5) {
8012
8057
  var t2;
8013
8058
  let n2 = $ == null ? void 0 : $.inner.find((t3) => t3.name === e5.planet1), r2 = $ == null ? void 0 : $.outer.find((t3) => t3.name === e5.planet2), i2 = n2 ? Math.floor((n2.longitude % 360 + 360) % 360 / 30) : NaN, a2 = r2 ? Math.floor((r2.longitude % 360 + 360) % 360 / 30) : NaN, o2 = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"];
8014
- Ky({ type: "cross_aspect", data: { planet1: e5.planet1, wheel1: e5.wheel1, planet2: e5.planet2, wheel2: e5.wheel2, aspect_type: e5.type, orb: e5.orb, applying: e5.applying, planet1_sign: isNaN(i2) ? null : o2[i2], planet2_sign: isNaN(a2) ? null : o2[a2], mode: (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2 } });
8059
+ Zy({ type: "cross_aspect", data: { planet1: e5.planet1, wheel1: e5.wheel1, planet2: e5.planet2, wheel2: e5.wheel2, aspect_type: e5.type, orb: e5.orb, applying: e5.applying, planet1_sign: isNaN(i2) ? null : o2[i2], planet2_sign: isNaN(a2) ? null : o2[a2], mode: (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2 } });
8015
8060
  }
8016
- hy.ontoolresult = (e5) => {
8017
- clearTimeout(nb);
8018
- let t2 = ky(e5);
8061
+ by.ontoolresult = (e5) => {
8062
+ clearTimeout(sb);
8063
+ let t2 = Py(e5);
8019
8064
  if (!t2) {
8020
- Ey("The chart didn't load. Tap to try again.", tb);
8065
+ jy("The chart didn't load. Tap to try again.", ob);
8021
8066
  return;
8022
8067
  }
8023
- if (!gy) {
8068
+ if (!xy) {
8024
8069
  var n2, r2, i2, a2;
8025
8070
  let e6 = (n2 = t2._birth_params_outer) == null ? {} : n2, o2 = (r2 = e6.datetime) == null ? "" : r2, s2 = (i2 = e6.location) == null ? "" : i2, c2 = (a2 = e6.timezone) == null ? "" : a2, l2 = e6.latitude, u2 = e6.longitude, d2 = "", f2 = "12:00";
8026
8071
  if (o2 && o2.includes("T")) {
8027
8072
  let e7 = o2.split("T");
8028
8073
  d2 = e7[0], f2 = e7[1].substring(0, 5);
8029
8074
  }
8030
- gy = new Gv({ app: hy, container: my, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: t2.mode === "transit", costHint: "~2 credits", onRefresh: async (e7) => {
8031
- gy == null || gy.setBusy(true), wy(), my.setAttribute("hidden", "");
8075
+ xy = new Xv({ app: by, container: yy, initialParams: { date: d2, time: f2, locationName: s2, timezone: c2, latitude: typeof l2 == "number" ? l2 : null, longitude: typeof u2 == "number" ? u2 : null }, showStepControls: t2.mode === "transit", costHint: "~2 credits", onRefresh: async (e7) => {
8076
+ xy == null || xy.setBusy(true), ky(), yy.setAttribute("hidden", "");
8032
8077
  try {
8033
8078
  var n3, r3, i3, a3, o3;
8034
- let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 = ky(await Promise.race([hy.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n3 = t2._birth_params_inner) == null ? void 0 : n3.datetime, person1_latitude: (r3 = t2._birth_params_inner) == null ? void 0 : r3.latitude, person1_longitude: (i3 = t2._birth_params_inner) == null ? void 0 : i3.longitude, person1_timezone: (a3 = t2._birth_params_inner) == null ? void 0 : a3.timezone, person1_name: (o3 = t2._birth_params_inner) == null ? void 0 : o3.location, person2_datetime: "".concat(s3).concat(e7.timezone ? "" : "Z"), person2_latitude: e7.latitude, person2_longitude: e7.longitude, person2_timezone: e7.timezone, person2_name: e7.locationName } }), c3]));
8035
- l3 ? Jy(l3) : $ && Cy();
8079
+ let s3 = "".concat(e7.date, "T").concat(e7.time, ":00"), c3 = new Promise((e8, t3) => setTimeout(() => t3(Error("Bi-wheel recalculate timed out after 30s")), 3e4)), l3 = Py(await Promise.race([by.callServerTool({ name: "bi_wheel_recalculate", arguments: { mode: t2.mode, person1_datetime: (n3 = t2._birth_params_inner) == null ? void 0 : n3.datetime, person1_latitude: (r3 = t2._birth_params_inner) == null ? void 0 : r3.latitude, person1_longitude: (i3 = t2._birth_params_inner) == null ? void 0 : i3.longitude, person1_timezone: (a3 = t2._birth_params_inner) == null ? void 0 : a3.timezone, person1_name: (o3 = t2._birth_params_inner) == null ? void 0 : o3.location, person2_datetime: "".concat(s3).concat(e7.timezone ? "" : "Z"), person2_latitude: e7.latitude, person2_longitude: e7.longitude, person2_timezone: e7.timezone, person2_name: e7.locationName } }), c3]));
8080
+ l3 ? $y(l3) : $ && Oy();
8036
8081
  } catch (e8) {
8037
- console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && Cy();
8082
+ console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && Oy();
8038
8083
  } finally {
8039
- gy == null || gy.setBusy(false), my.removeAttribute("hidden");
8084
+ xy == null || xy.setBusy(false), yy.removeAttribute("hidden");
8040
8085
  }
8041
8086
  } });
8042
8087
  }
8043
- Jy(t2), my.removeAttribute("hidden");
8088
+ $y(t2), yy.removeAttribute("hidden");
8044
8089
  };
8045
- function tb() {
8046
- clearTimeout(nb), Sy(), nb = setTimeout(() => {
8047
- sy.hidden && Ey("The chart didn't load. Tap to try again.", tb);
8048
- }, 3e4), hy.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] }).catch(() => {
8090
+ function ob() {
8091
+ clearTimeout(sb), Dy(), sb = setTimeout(() => {
8092
+ fy.hidden && jy("The chart didn't load. Tap to try again.", ob);
8093
+ }, 3e4), by.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] }).catch(() => {
8049
8094
  });
8050
8095
  }
8051
- var nb = setTimeout(() => {
8052
- sy.hidden && Ey("Chart data is taking longer than expected.", tb);
8096
+ var sb = setTimeout(() => {
8097
+ fy.hidden && jy("Chart data is taking longer than expected.", ob);
8053
8098
  }, 3e4);
8054
- Sy(), iy(hy, { loadingEl: cy, contentEl: sy, statusFn: xy, paramControls: () => gy }), (async () => {
8099
+ Dy(), ly(by, { loadingEl: py, contentEl: fy, statusFn: Ey, paramControls: () => xy }), (async () => {
8055
8100
  try {
8056
- await hy.connect();
8057
- let e5 = hy.getHostCapabilities();
8058
- _y = !!(e5 != null && e5.modelContext), vy = !!(e5 != null && e5.sampling), ry(hy, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), oy(hy), h_(hy, () => {
8059
- $ && Jy($);
8101
+ await by.connect();
8102
+ let e5 = by.getHostCapabilities();
8103
+ Sy = !!(e5 != null && e5.modelContext), Cy = !!(e5 != null && e5.sampling), cy(by, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), dy(by), g_(by, () => {
8104
+ $ && $y($);
8060
8105
  });
8061
8106
  } catch (e5) {
8062
8107
  console.error("[BiWheel] connect() failed:", e5);