@openephemeris/mcp-server 4.17.0 → 4.18.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 (35) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +10 -10
  3. package/dist/backend/client.d.ts +57 -1
  4. package/dist/backend/client.js +125 -15
  5. package/dist/prompts.js +26 -24
  6. package/dist/server-sse.d.ts +18 -0
  7. package/dist/server-sse.js +41 -6
  8. package/dist/tools/apps/_render-token.d.ts +34 -0
  9. package/dist/tools/apps/_render-token.js +50 -0
  10. package/dist/tools/apps/bazi-app.js +36 -12
  11. package/dist/tools/apps/bi-wheel-app.d.ts +9 -2
  12. package/dist/tools/apps/bi-wheel-app.js +76 -117
  13. package/dist/tools/apps/bodygraph-app.js +88 -41
  14. package/dist/tools/apps/chart-wheel-app.js +56 -16
  15. package/dist/tools/apps/location-tools.js +10 -3
  16. package/dist/tools/apps/moon-phase-app.js +10 -2
  17. package/dist/tools/apps/transit-timeline-app.js +3 -4
  18. package/dist/tools/apps/vedic-chart-app.js +10 -1
  19. package/dist/tools/datetime-historical.js +7 -2
  20. package/dist/tools/datetime.js +2 -1
  21. package/dist/tools/dev.js +7 -6
  22. package/dist/tools/specialized/electional.js +4 -3
  23. package/dist/tools/specialized/ephemeris_extended.js +19 -4
  24. package/dist/tools/specialized/hd_group.js +2 -2
  25. package/dist/tools/specialized/moon.d.ts +1 -1
  26. package/dist/tools/specialized/moon.js +51 -43
  27. package/dist/tools/specialized/progressed.js +2 -25
  28. package/dist/tools/specialized/transits.js +5 -5
  29. package/dist/ui/bazi.html +1523 -1522
  30. package/dist/ui/bi-wheel.html +406 -374
  31. package/dist/ui/bodygraph.html +83 -79
  32. package/dist/ui/chart-wheel.html +394 -361
  33. package/dist/ui/transit-timeline.html +1 -1
  34. package/dist/ui/vedic-chart.html +818 -818
  35. package/package.json +1 -1
@@ -6719,42 +6719,74 @@ function x_(e5, t2) {
6719
6719
  function S_(e5) {
6720
6720
  return (e5 % 360 + 360) % 360;
6721
6721
  }
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;
6722
+ var C_ = "north node (mean)", w_ = "north node (true)", T_ = "south node (mean)", E_ = "south node (true)", D_ = [C_, w_, T_, E_], O_ = { [C_]: C_, north_node_mean: C_, "north node": C_, north_node: C_, "mean node": C_, mean_node: C_, [w_]: w_, north_node_true: w_, "true node": w_, true_node: w_, [T_]: T_, south_node_mean: T_, "south node": T_, south_node: T_, [E_]: E_, south_node_true: E_, "true south node": E_, true_south_node: E_ };
6723
+ function k_(e5) {
6724
+ var t2;
6725
+ return (t2 = O_[e5.trim().toLowerCase()]) == null ? null : t2;
6726
+ }
6727
+ var A_ = { [C_]: "\u260A\uFE0E", [w_]: "\u260A\uFE0E", [T_]: "\u260B\uFE0E", [E_]: "\u260B\uFE0E" }, j_ = { [C_]: "soul direction", [w_]: "soul direction", [T_]: "past-life gifts", [E_]: "past-life gifts" };
6728
+ function M_(e5) {
6729
+ let t2 = /* @__PURE__ */ new Set();
6730
+ for (let n2 of e5) {
6731
+ let e6 = k_(n2);
6732
+ e6 && t2.add(e6);
6733
+ }
6734
+ return t2.has("north node (mean)") && t2.has("north node (true)") || t2.has("south node (mean)") && t2.has("south node (true)");
6735
+ }
6736
+ function N_(e5, t2) {
6737
+ let n2 = new Set(e5.map((e6) => k_(e6.name)).filter(Boolean)), r2 = /* @__PURE__ */ new Set(), i2 = [[C_, w_], [T_, E_]];
6738
+ for (let [e6, a2] of i2) n2.has(e6) && n2.has(a2) && r2.add(t2 === "true" ? e6 : a2);
6739
+ return r2.size === 0 ? e5 : e5.filter((e6) => {
6740
+ var t3;
6741
+ return !r2.has((t3 = k_(e6.name)) == null ? "" : t3);
6742
+ });
6743
+ }
6744
+ var P_ = "lilith (mean)", F_ = "lilith (true)", I_ = "lilith (interpolated)", L_ = [P_, F_, I_], R_ = { [P_]: P_, lilith: P_, mean_lilith: P_, lilith_mean: P_, "mean apogee": P_, "black moon lilith": P_, [F_]: F_, lilith_true: F_, true_lilith: F_, "osculating apogee": F_, [I_]: I_, lilith_interpolated: I_, lilith_natural: I_, "interpolated apogee": I_ };
6745
+ function z_(e5) {
6746
+ var t2;
6747
+ return (t2 = R_[e5.trim().toLowerCase()]) == null ? null : t2;
6748
+ }
6749
+ var B_ = { [P_]: "\u26B8\uFE0E", [F_]: "\u26B8\uFE0E", [I_]: "\u26B8\uFE0E" }, V_ = { [P_]: "primal feminine & shadow", [F_]: "primal feminine & shadow", [I_]: "primal feminine & shadow" };
6750
+ function H_(e5) {
6751
+ var t2, n2;
6752
+ return (t2 = (n2 = k_(e5)) == null ? z_(e5) : n2) == null ? e5 : t2;
6753
+ }
6754
+ var U_ = 310, W_ = 310, G_ = 240, K_ = 204, q_ = 190, J_ = 152, Y_ = 118, X_ = 112, Z_ = 290, Q_ = 246, $_ = 264, ev = 16;
6723
6755
  function Y(e5, t2, n2) {
6724
6756
  let r2 = -(e5 - n2 + 180) * Math.PI / 180;
6725
- return { x: C_ + t2 * Math.cos(r2), y: w_ + t2 * Math.sin(r2) };
6757
+ return { x: U_ + t2 * Math.cos(r2), y: W_ + t2 * Math.sin(r2) };
6726
6758
  }
6727
6759
  function X(e5) {
6728
6760
  return document.createElementNS("http://www.w3.org/2000/svg", e5);
6729
6761
  }
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) {
6762
+ var tv = { 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", ...A_, ...B_, asc: "AC", mc: "MC" }, nv = ["\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653"].map((e5) => e5 + "\uFE0E"), rv = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], iv = { conjunction: "\u260C", opposition: "\u260D", trine: "\u25B3", square: "\u25A1", sextile: "\u26B9" };
6763
+ function av(e5) {
6732
6764
  let t2 = e5.toLowerCase();
6733
- return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || u_(t2, G_());
6765
+ return getComputedStyle(document.documentElement).getPropertyValue("--xasp-".concat(t2)).trim() || u_(t2, dv());
6734
6766
  }
6735
- function B_(e5) {
6767
+ function ov(e5) {
6736
6768
  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" };
6737
6769
  }
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()];
6770
+ var sv = { 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] } };
6771
+ function cv(e5, t2) {
6772
+ let n2 = sv[e5.toLowerCase()];
6741
6773
  if (!n2) return null;
6742
6774
  let r2 = Math.floor((t2 % 360 + 360) % 360 / 30);
6743
6775
  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;
6744
6776
  }
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) {
6777
+ var lv = ["fire", "earth", "air", "water", "fire", "earth", "air", "water", "fire", "earth", "air", "water"], uv = ["cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable", "cardinal", "fixed", "mutable"], dv = p_, fv = (e5) => l_(e5, dv());
6778
+ function pv(e5, t2, n2, r2, i2) {
6747
6779
  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
6780
  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
6781
  }
6750
- function J_(e5, t2, n2, r2, i2, a2, o2) {
6782
+ function mv(e5, t2, n2, r2, i2, a2, o2) {
6751
6783
  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");
6752
6784
  m2.setAttribute("d", p2), m2.setAttribute("fill", a2), m2.setAttribute("fill-opacity", String(o2)), m2.setAttribute("pointer-events", "none"), e5.appendChild(m2);
6753
6785
  }
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) {
6786
+ var hv = /* @__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", ...D_, ...L_]);
6787
+ function gv(e5) {
6756
6788
  let t2 = (e5 % 360 + 360) % 360, n2 = Math.floor(t2 / 30), r2 = Math.floor(t2 % 30);
6757
- return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(L_[n2]);
6789
+ return "".concat(r2, "\xB0").concat(Math.floor((t2 % 30 - r2) * 60).toString().padStart(2, "0"), "\u2032 ").concat(rv[n2]);
6758
6790
  }
6759
6791
  function Z(e5) {
6760
6792
  return e5.replace(/\b\w/g, (e6) => e6.toUpperCase());
@@ -6762,29 +6794,29 @@ function Z(e5) {
6762
6794
  function Q(e5) {
6763
6795
  return String(e5).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
6764
6796
  }
6765
- var Z_ = "true";
6766
- function Q_(e5) {
6767
- Z_ = e5;
6797
+ var _v = "true";
6798
+ function vv(e5) {
6799
+ _v = e5;
6768
6800
  }
6769
- function $_(e5) {
6770
- let t2 = e5.some((e6) => e6.name === "true_node"), n2 = e5.some((e6) => e6.name === "north_node");
6771
- if (!t2 || !n2) return e5;
6772
- let r2 = Z_ === "true" ? "north_node" : "true_node";
6773
- return e5.filter((e6) => e6.name !== r2);
6801
+ function yv(e5) {
6802
+ return N_(e5.map((e6) => {
6803
+ let t2 = H_(e6.name);
6804
+ return t2 === e6.name ? e6 : { ...e6, name: t2 };
6805
+ }), _v);
6774
6806
  }
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]) => {
6807
+ function bv(e5) {
6808
+ return Array.isArray(e5) ? yv(e5.filter((e6) => e6 && typeof e6.longitude == "number" && isFinite(e6.longitude))) : e5 && typeof e5 == "object" ? yv(Object.entries(e5).filter(([e6]) => hv.has(e6.toLowerCase())).map(([e6, t2]) => {
6777
6809
  var n2, r2, i2, a2, o2, s2;
6778
6810
  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 };
6779
6811
  })) : [];
6780
6812
  }
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) {
6813
+ var xv = [{ 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 }];
6814
+ function Sv(e5, t2, n2 = 1) {
6783
6815
  let r2 = [];
6784
6816
  for (let o2 of e5) for (let e6 of t2) {
6785
6817
  let t3 = Math.abs(o2.longitude - e6.longitude) % 360;
6786
6818
  t3 > 180 && (t3 = 360 - t3);
6787
- for (let s2 of tv) {
6819
+ for (let s2 of xv) {
6788
6820
  let c2 = s2.orb * n2, l2 = Math.abs(t3 - s2.angle);
6789
6821
  if (l2 <= c2) {
6790
6822
  var i2, a2;
@@ -6796,39 +6828,39 @@ function nv(e5, t2, n2 = 1) {
6796
6828
  }
6797
6829
  return r2.sort((e6, t3) => e6.orb - t3.orb).slice(0, 40);
6798
6830
  }
6799
- var rv = null;
6800
- function iv(e5) {
6801
- rv = e5;
6831
+ var Cv = null;
6832
+ function wv(e5) {
6833
+ Cv = e5;
6802
6834
  }
6803
- var av = null, ov = null;
6804
- function sv() {
6805
- return ov || (ov = document.getElementById("tooltip")), ov;
6835
+ var Tv = null, Ev = null;
6836
+ function Dv() {
6837
+ return Ev || (Ev = document.getElementById("tooltip")), Ev;
6806
6838
  }
6807
- function cv(e5, t2, n2, r2, i2) {
6808
- let a2 = sv();
6839
+ function Ov(e5, t2, n2, r2, i2) {
6840
+ let a2 = Dv();
6809
6841
  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 ");
6810
6842
  let o2 = a2.getBoundingClientRect(), s2 = o2.width || 240, c2 = o2.height || 80, l2 = e5 + 14, u2 = t2 + 10;
6811
6843
  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");
6812
6844
  }
6813
- function lv() {
6814
- sv().classList.remove("visible");
6845
+ function kv() {
6846
+ Dv().classList.remove("visible");
6815
6847
  }
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) {
6848
+ var Av = { 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", ...j_, ...V_ }, jv = { conjunction: "fusion & amplification", opposition: "polarity & integration", trine: "ease & natural flow", square: "tension & growth", sextile: "opportunity & cooperation", quincunx: "adjustment & recalibration", semisquare: "friction & minor tension" }, Mv = null, Nv = null, Pv = /* @__PURE__ */ new Map();
6849
+ function Fv(e5) {
6818
6850
  return "".concat(e5.planet1, "|inner|").concat(e5.planet2, "|outer|").concat(e5.type);
6819
6851
  }
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) {
6852
+ var Iv = { 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"] } };
6853
+ function Lv(e5, t2, n2, r2, i2) {
6822
6854
  var a2, o2;
6823
- let s2 = Sv(), c2 = gv[t2];
6855
+ let s2 = Hv(), c2 = Iv[t2];
6824
6856
  if (!c2) return;
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>' : "";
6857
+ let l2 = gv(n2), u2 = Math.floor((n2 % 360 + 360) % 360 / 30), d2 = lv[u2], f2 = uv[u2], p2 = nv[u2], m2 = fv(u2), h2 = i2 ? "".concat(i2, " \xB7 Natal") : "Inner \xB7 Natal", g2 = Tv ? '<button class="ask-claude-btn" id="bi-ask-claude-angle-btn">\u2728 Interpret this</button>' : "";
6826
6858
  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", () => {
6827
- Cv(), Av();
6859
+ Uv(), Xv();
6828
6860
  }), (o2 = document.getElementById("bi-ask-claude-angle-btn")) == null || o2.addEventListener("click", () => {
6829
- if (!av) return;
6861
+ if (!Tv) return;
6830
6862
  let e6 = document.getElementById("bi-ask-claude-angle-btn");
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(() => {
6863
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Tv({ type: "angle_interpretation", data: { angle: c2.title, longitude: n2, sign: rv[u2], position: l2, element: d2, modality: f2, mode: r2 } }).then(() => {
6832
6864
  e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6833
6865
  e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
6834
6866
  }, 2500);
@@ -6837,32 +6869,32 @@ function _v(e5, t2, n2, r2, i2) {
6837
6869
  }));
6838
6870
  });
6839
6871
  }
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) {
6872
+ var Rv = { 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" };
6873
+ function zv(e5, t2, n2) {
6842
6874
  let r2 = (n2 - t2 + 360) % 360;
6843
6875
  return e5.filter((e6) => {
6844
6876
  let n3 = (e6.longitude - t2 + 360) % 360;
6845
6877
  return n3 >= 0 && n3 < r2;
6846
6878
  });
6847
6879
  }
6848
- function bv(e5, t2, n2, r2, i2, a2, o2, s2) {
6880
+ function Bv(e5, t2, n2, r2, i2, a2, o2, s2) {
6849
6881
  var c2, l2, u2, d2, f2;
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" : "";
6882
+ let p2 = Hv(), m2 = Math.floor((t2.cusp_lon % 360 + 360) % 360 / 30), h2 = (c2 = (l2 = t2.sign) == null ? rv[m2] : l2) == null ? "" : c2, g2 = (u2 = nv[m2]) == null ? "" : u2, _2 = zv(o2, t2.cusp_lon, n2.cusp_lon), v2 = zv(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) => {
6883
+ let n3 = gv(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6852
6884
  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>");
6853
- }).join(""), S2 = av ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
6885
+ }).join(""), S2 = Tv ? '<button class="ask-claude-btn" id="bi-ask-claude-house-btn">\u2728 Interpret this</button>' : "";
6854
6886
  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", () => {
6855
- Cv(), Av();
6887
+ Uv(), Xv();
6856
6888
  }), (f2 = document.getElementById("bi-ask-claude-house-btn")) == null || f2.addEventListener("click", () => {
6857
6889
  var e6;
6858
- if (!av) return;
6890
+ if (!Tv) return;
6859
6891
  let n3 = document.getElementById("bi-ask-claude-house-btn");
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) => {
6892
+ !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "\u23F3 Sending\u2026", n3.classList.add("sending"), Tv({ 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) => {
6861
6893
  var t3;
6862
- return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6894
+ return { name: e7.name, position: gv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6863
6895
  }), outer_planets: v2.map((e7) => {
6864
6896
  var t3;
6865
- return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6897
+ return { name: e7.name, position: gv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6866
6898
  }) } }).then(() => {
6867
6899
  n3.textContent = "\u2713 Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6868
6900
  n3.textContent = "\u2728 Interpret this", n3.classList.remove("sent"), n3.disabled = false;
@@ -6872,23 +6904,23 @@ function bv(e5, t2, n2, r2, i2, a2, o2, s2) {
6872
6904
  }));
6873
6905
  });
6874
6906
  }
6875
- function xv(e5, t2, n2, r2, i2, a2, o2) {
6907
+ function Vv(e5, t2, n2, r2, i2, a2, o2) {
6876
6908
  var s2, c2;
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" : "";
6909
+ let l2 = Hv(), u2 = rv[t2], d2 = nv[t2], f2 = lv[t2], p2 = uv[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) => {
6910
+ let n3 = gv(e7.longitude), r3 = e7.retrograde ? " \u211E" : "";
6879
6911
  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>");
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();
6912
+ }).join(""), b2 = Tv ? '<button class="ask-claude-btn" id="bi-ask-claude-sign-btn">\u2728 Interpret this</button>' : "";
6913
+ l2.innerHTML = '\n <div class="info-header">\n <span class="info-glyph" style="color:'.concat(fv(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", () => {
6914
+ Uv(), Xv();
6883
6915
  }), (c2 = document.getElementById("bi-ask-claude-sign-btn")) == null || c2.addEventListener("click", () => {
6884
- if (!av) return;
6916
+ if (!Tv) return;
6885
6917
  let e6 = document.getElementById("bi-ask-claude-sign-btn");
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) => {
6918
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Tv({ type: "sign", data: { sign: u2, element: Z(f2), modality: Z(p2), mode: n2, inner_label: _2, outer_label: v2, inner_planets: h2.map((e7) => {
6887
6919
  var t3;
6888
- return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6920
+ return { name: e7.name, position: gv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6889
6921
  }), outer_planets: g2.map((e7) => {
6890
6922
  var t3;
6891
- return { name: e7.name, position: X_(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6923
+ return { name: e7.name, position: gv(e7.longitude), retrograde: (t3 = e7.retrograde) == null ? false : t3 };
6892
6924
  }) } }).then(() => {
6893
6925
  e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6894
6926
  e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
@@ -6898,7 +6930,7 @@ function xv(e5, t2, n2, r2, i2, a2, o2) {
6898
6930
  }));
6899
6931
  });
6900
6932
  }
6901
- function Sv() {
6933
+ function Hv() {
6902
6934
  if (document.body.classList.contains("is-fullscreen")) {
6903
6935
  let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
6904
6936
  if (e6) {
@@ -6906,36 +6938,36 @@ function Sv() {
6906
6938
  return t3 || (t3 = document.createElement("div"), t3.className = "info-drawer info-drawer--fs", e6.appendChild(t3)), t3;
6907
6939
  }
6908
6940
  }
6909
- if (fv && fv.isConnected) return fv;
6910
- fv = document.createElement("div"), fv.id = "bi-info-drawer", fv.className = "info-drawer";
6941
+ if (Mv && Mv.isConnected) return Mv;
6942
+ Mv = document.createElement("div"), Mv.id = "bi-info-drawer", Mv.className = "info-drawer";
6911
6943
  let e5 = document.getElementById("chart-container");
6912
- if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(fv, e5.nextSibling);
6944
+ if (e5 != null && e5.parentElement) e5.parentElement.insertBefore(Mv, e5.nextSibling);
6913
6945
  else {
6914
6946
  var t2;
6915
- (t2 = document.getElementById("app")) == null || t2.appendChild(fv);
6947
+ (t2 = document.getElementById("app")) == null || t2.appendChild(Mv);
6916
6948
  }
6917
- return fv;
6949
+ return Mv;
6918
6950
  }
6919
- function Cv() {
6951
+ function Uv() {
6920
6952
  var e5;
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);
6953
+ Mv == null || Mv.classList.remove("open"), (e5 = document.querySelector("#fs-bottom-bar [data-column='right'] .info-drawer--fs")) == null || e5.classList.remove("open"), Cv == null || Cv(null);
6922
6954
  }
6923
- function wv(e5, t2, n2, r2, i2, a2, o2) {
6955
+ function Wv(e5, t2, n2, r2, i2, a2, o2) {
6924
6956
  var s2, c2, l2, u2, d2;
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;
6957
+ let f2 = Hv(), p2 = (s2 = tv[t2.name.toLowerCase()]) == null ? "\u2605" : s2, m2 = (c2 = nv[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "" : c2, h2 = cv(t2.name, t2.longitude), g2;
6926
6958
  g2 = n2 === "inner" ? a2 ? "".concat(a2, " \xB7 Natal") : "Inner \xB7 Natal" : i2 === "transit" ? "Outer \xB7 Transit" : o2 ? "".concat(o2, " \xB7 Synastry") : "Outer \xB7 Synastry";
6927
6959
  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) => {
6928
6960
  var t3, r3, a3, o3, s3, c3, l3;
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";
6961
+ let u3 = n2 === "inner" ? e6.planet2 : e6.planet1, d3 = (t3 = tv[u3.toLowerCase()]) == null ? u3 : t3, f3 = (r3 = (a3 = iv[(o3 = (s3 = e6.type) == null ? void 0 : s3.toLowerCase()) == null ? "" : o3]) == null ? e6.type : a3) == null ? "\u2014" : r3, p3 = av((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";
6930
6962
  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>");
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();
6963
+ }).join("") : '<div class="no-aspects">No cross-aspects within orb</div>', b2 = (l2 = rv[Math.floor((t2.longitude % 360 + 360) % 360 / 30)]) == null ? "Unknown" : l2, x2 = Tv ? '<button class="ask-claude-btn" id="bi-ask-claude-planet-btn">\u2728 Interpret this</button>' : "";
6964
+ 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(gv(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", () => {
6965
+ Uv(), Xv();
6934
6966
  }), (d2 = document.getElementById("bi-ask-claude-planet-btn")) == null || d2.addEventListener("click", () => {
6935
6967
  var e6, r3;
6936
- if (!av) return;
6968
+ if (!Tv) return;
6937
6969
  let a3 = document.getElementById("bi-ask-claude-planet-btn");
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(() => {
6970
+ !a3 || a3.disabled || (a3.disabled = true, a3.textContent = "\u23F3 Sending\u2026", a3.classList.add("sending"), Tv({ 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
6971
  a3.textContent = "\u2713 Sent", a3.classList.remove("sending"), a3.classList.add("sent"), setTimeout(() => {
6940
6972
  a3.textContent = "\u2728 Interpret this", a3.classList.remove("sent"), a3.disabled = false;
6941
6973
  }, 2500);
@@ -6944,15 +6976,15 @@ function wv(e5, t2, n2, r2, i2, a2, o2) {
6944
6976
  }));
6945
6977
  });
6946
6978
  }
6947
- function Tv(e5, t2, n2, r2, i2) {
6979
+ function Gv(e5, t2, n2, r2, i2) {
6948
6980
  var a2, o2, s2, c2, l2, u2, d2, f2, p2;
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>' : "";
6981
+ let m2 = Hv(), h2 = (a2 = tv[t2.planet1.toLowerCase()]) == null ? "\u2605" : a2, g2 = (o2 = tv[t2.planet2.toLowerCase()]) == null ? "\u2605" : o2, _2 = (s2 = iv[(c2 = (l2 = t2.type) == null ? void 0 : l2.toLowerCase()) == null ? "" : c2]) == null ? t2.type : s2, v2 = av((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 = Tv ? '<button class="ask-claude-btn" id="bi-ask-claude-asp-btn">\u2728 Interpret this</button>' : "";
6950
6982
  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", () => {
6951
- Cv(), Av();
6983
+ Uv(), Xv();
6952
6984
  }), (p2 = document.getElementById("bi-ask-claude-asp-btn")) == null || p2.addEventListener("click", () => {
6953
- if (!av) return;
6985
+ if (!Tv) return;
6954
6986
  let e6 = document.getElementById("bi-ask-claude-asp-btn");
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(() => {
6987
+ !e6 || e6.disabled || (e6.disabled = true, e6.textContent = "\u23F3 Sending\u2026", e6.classList.add("sending"), Tv({ 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
6988
  e6.textContent = "\u2713 Sent", e6.classList.remove("sending"), e6.classList.add("sent"), setTimeout(() => {
6957
6989
  e6.textContent = "\u2728 Interpret this", e6.classList.remove("sent"), e6.disabled = false;
6958
6990
  }, 2500);
@@ -6961,82 +6993,82 @@ function Tv(e5, t2, n2, r2, i2) {
6961
6993
  }));
6962
6994
  });
6963
6995
  }
6964
- function Ev(e5, t2) {
6965
- mv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6996
+ function Kv(e5, t2) {
6997
+ Pv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6966
6998
  let o2 = a2.split("|");
6967
6999
  (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"));
6968
- }), Ov(e5, t2);
7000
+ }), Jv(e5, t2);
6969
7001
  }
6970
- function Dv(e5, t2) {
6971
- mv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
7002
+ function qv(e5, t2) {
7003
+ Pv.forEach(({ vis: n2, color: r2, symbolEls: i2 }, a2) => {
6972
7004
  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"));
6973
7005
  });
6974
7006
  }
6975
- function Ov(e5, t2) {
7007
+ function Jv(e5, t2) {
6976
7008
  let n2 = e5.toLowerCase(), r2 = /* @__PURE__ */ new Set(), i2 = /* @__PURE__ */ new Set();
6977
- mv.forEach((e6, a3) => {
7009
+ Pv.forEach((e6, a3) => {
6978
7010
  var o2, s2;
6979
7011
  let c2 = a3.split("|"), l2 = ((o2 = c2[0]) == null ? "" : o2).toLowerCase(), u2 = ((s2 = c2[2]) == null ? "" : s2).toLowerCase();
6980
7012
  t2 === "inner" && l2 === n2 && i2.add(u2), t2 === "outer" && u2 === n2 && r2.add(l2);
6981
7013
  });
6982
7014
  let a2 = (e6, t3) => t3 === "inner" && r2.has(e6) || t3 === "outer" && i2.has(e6);
6983
- pv == null || pv.querySelectorAll(".planet-hit").forEach((e6) => {
7015
+ Nv == null || Nv.querySelectorAll(".planet-hit").forEach((e6) => {
6984
7016
  var r3;
6985
7017
  let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3, s2 = o2 === n2 && i3 === t2, c2 = !s2 && a2(o2, i3);
6986
7018
  e6.classList.toggle("dim", !s2 && !c2);
6987
- }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7019
+ }), Nv == null || Nv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
6988
7020
  var r3;
6989
7021
  let i3 = e6.dataset.wheel, o2 = (r3 = e6.dataset.planet) == null ? "" : r3;
6990
7022
  o2 === n2 && i3 === t2 ? e6.style.opacity = "1" : a2(o2, i3) ? e6.style.opacity = "0.55" : e6.style.opacity = "0.12";
6991
7023
  });
6992
7024
  }
6993
- function kv() {
6994
- mv.forEach(({ vis: e5, symbolEls: t2 }) => {
7025
+ function Yv() {
7026
+ Pv.forEach(({ vis: e5, symbolEls: t2 }) => {
6995
7027
  e5.style.strokeOpacity = "0.05", e5.style.strokeWidth = "0.5", e5.removeAttribute("filter"), t2.forEach((e6) => e6.style.opacity = "0.15");
6996
- }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
7028
+ }), Nv == null || Nv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
6997
7029
  e5.style.opacity = "0.3";
6998
- }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e5) => {
7030
+ }), Nv == null || Nv.querySelectorAll(".planet-hit").forEach((e5) => {
6999
7031
  e5.classList.add("dim");
7000
7032
  });
7001
7033
  }
7002
- function Av() {
7003
- mv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
7004
- let i2 = B_(n2 == null ? 4 : n2);
7034
+ function Xv() {
7035
+ Pv.forEach(({ vis: e5, color: t2, orb: n2, symbolEls: r2 }) => {
7036
+ let i2 = ov(n2 == null ? 4 : n2);
7005
7037
  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 = "");
7006
- }), pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
7038
+ }), Nv == null || Nv.querySelectorAll(".planet-glyph-group").forEach((e5) => {
7007
7039
  e5.style.opacity = "";
7008
- }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), zv();
7040
+ }), Nv == null || Nv.querySelectorAll(".planet-hit").forEach((e5) => e5.classList.remove("dim")), ay();
7009
7041
  }
7010
- function jv(e5) {
7011
- mv.forEach(({ vis: t2, symbolEls: n2 }) => {
7042
+ function Zv(e5) {
7043
+ Pv.forEach(({ vis: t2, symbolEls: n2 }) => {
7012
7044
  t2.style.display = e5 ? "" : "none", n2.forEach((t3) => t3.style.display = e5 ? "" : "none");
7013
- }), pv == null || pv.querySelectorAll(".aspect-hit").forEach((t2) => {
7045
+ }), Nv == null || Nv.querySelectorAll(".aspect-hit").forEach((t2) => {
7014
7046
  t2.style.display = e5 ? "" : "none";
7015
7047
  });
7016
7048
  }
7017
- function Mv(e5, t2, n2) {
7049
+ function Qv(e5, t2, n2) {
7018
7050
  return "".concat(e5, "|inner|").concat(t2, "|outer|").concat(n2);
7019
7051
  }
7020
- function Nv(e5, t2, n2, r2, i2) {
7052
+ function $v(e5, t2, n2, r2, i2) {
7021
7053
  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);
7022
7054
  }
7023
- function Pv(e5, t2) {
7055
+ function ey(e5, t2) {
7024
7056
  return e5.filter((e6) => {
7025
7057
  var n2;
7026
7058
  return ((n2 = e6.type) == null ? "" : n2).toLowerCase() === t2;
7027
7059
  });
7028
7060
  }
7029
- function Fv(e5) {
7061
+ function ty(e5) {
7030
7062
  let t2 = [];
7031
7063
  if (!e5.length) return t2;
7032
- let n2 = Pv(e5, "trine"), r2 = Pv(e5, "square"), i2 = Pv(e5, "opposition"), a2 = Pv(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
7064
+ let n2 = ey(e5, "trine"), r2 = ey(e5, "square"), i2 = ey(e5, "opposition"), a2 = ey(e5, "conjunction"), o2 = /* @__PURE__ */ new Set();
7033
7065
  for (let e6 = 0; e6 < n2.length; e6++) for (let r3 = e6 + 1; r3 < n2.length; r3++) {
7034
7066
  let i3 = n2[e6], a3 = n2[r3];
7035
7067
  if (i3.planet1 !== a3.planet1) continue;
7036
7068
  let s3 = i3.planet1, c3 = i3.planet2, l2 = a3.planet2;
7037
7069
  if (c3 === l2) continue;
7038
7070
  let u2 = [s3, c3, l2].sort().join("|");
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")] }));
7071
+ 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: [Qv(s3, c3, "trine"), Qv(s3, l2, "trine")] }));
7040
7072
  }
7041
7073
  let s2 = /* @__PURE__ */ new Set();
7042
7074
  for (let e6 of i2) {
@@ -7051,7 +7083,7 @@ function Fv(e5) {
7051
7083
  if (s2.has(c3)) continue;
7052
7084
  let l2;
7053
7085
  if (l2 = o3 === "outer" ? e7 : r2.find((e8) => e8.planet1 === a3 && e8.planet2 === i3), l2) {
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")] });
7086
+ 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: [Qv(n3, i3, "opposition"), $v(n3, "inner", a3, o3, "square"), $v(a3, o3, i3, "outer", "square")] });
7055
7087
  break;
7056
7088
  }
7057
7089
  }
@@ -7067,26 +7099,26 @@ function Fv(e5) {
7067
7099
  for (let [r3, i3] of e6) {
7068
7100
  if (i3.length < 2) continue;
7069
7101
  let e7 = "".concat(r3, "|").concat([...i3].sort().join("|"));
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")) }));
7102
+ 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) => Qv(r3, e8, "conjunction")) }));
7071
7103
  }
7072
7104
  }
7073
7105
  return t2;
7074
7106
  }
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) {
7107
+ var ny = { "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)" }, ry = { "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)" };
7108
+ function iy(e5, t2, n2, r2) {
7077
7109
  var i2, a2;
7078
- if (!pv) return null;
7110
+ if (!Nv) return null;
7079
7111
  let o2 = /* @__PURE__ */ new Map();
7080
7112
  for (let e6 of t2) o2.set(e6.name.toLowerCase(), e6.longitude);
7081
7113
  let s2 = /* @__PURE__ */ new Map();
7082
7114
  for (let e6 of n2) s2.set(e6.name.toLowerCase(), e6.longitude);
7083
7115
  let c2 = [];
7084
7116
  for (let { name: t3, wheel: n3 } of e5.planets) {
7085
- let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ? A_ : N_, a3 = e6.get(t3.toLowerCase());
7117
+ let e6 = n3 === "inner" ? o2 : s2, i3 = n3 === "inner" ? X_ : $_, a3 = e6.get(t3.toLowerCase());
7086
7118
  a3 != null && c2.push(Y(a3, i3, r2));
7087
7119
  }
7088
7120
  if (c2.length < 2) return null;
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;
7121
+ let l2 = (i2 = ny[e5.name]) == null ? "rgba(128,128,128,0.12)" : i2, u2 = (a2 = ry[e5.name]) == null ? "rgba(128,128,128,0.60)" : a2, d2;
7090
7122
  if (c2.length === 2) {
7091
7123
  let e6 = X("line");
7092
7124
  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;
@@ -7095,37 +7127,37 @@ function Rv(e5, t2, n2, r2) {
7095
7127
  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;
7096
7128
  }
7097
7129
  d2.setAttribute("pointer-events", "none"), d2.setAttribute("class", "pattern-overlay");
7098
- let f2 = pv.querySelector(".aspect-hit");
7099
- return f2 ? pv.insertBefore(d2, f2) : pv.appendChild(d2), d2;
7130
+ let f2 = Nv.querySelector(".aspect-hit");
7131
+ return f2 ? Nv.insertBefore(d2, f2) : Nv.appendChild(d2), d2;
7100
7132
  }
7101
- function zv() {
7102
- pv == null || pv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
7133
+ function ay() {
7134
+ Nv == null || Nv.querySelectorAll(".pattern-overlay").forEach((e5) => e5.remove());
7103
7135
  }
7104
- function Bv(e5) {
7136
+ function oy(e5) {
7105
7137
  let t2 = new Set(e5.aspectKeys);
7106
- mv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
7138
+ Pv.forEach(({ vis: e6, color: n3, symbolEls: r2 }, i2) => {
7107
7139
  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"));
7108
7140
  });
7109
7141
  let n2 = new Set(e5.planets.map((e6) => "".concat(e6.name.toLowerCase(), "|").concat(e6.wheel)));
7110
- pv == null || pv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7142
+ Nv == null || Nv.querySelectorAll(".planet-glyph-group").forEach((e6) => {
7111
7143
  var t3, r2;
7112
7144
  let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
7113
7145
  e6.style.opacity = n2.has(i2) ? "1" : "0.12";
7114
- }), pv == null || pv.querySelectorAll(".planet-hit").forEach((e6) => {
7146
+ }), Nv == null || Nv.querySelectorAll(".planet-hit").forEach((e6) => {
7115
7147
  var t3, r2;
7116
7148
  let i2 = "".concat((t3 = e6.dataset.planet) == null ? "" : t3, "|").concat((r2 = e6.dataset.wheel) == null ? "" : r2);
7117
7149
  e6.classList.toggle("dim", !n2.has(i2));
7118
7150
  });
7119
7151
  }
7120
- function Vv(e5, t2, n2, r2, i2, a2) {
7152
+ function sy(e5, t2, n2, r2, i2, a2) {
7121
7153
  var o2, s2, c2, l2, u2, d2, f2, p2, m2, h2, g2, _2;
7122
- av = i2 == null ? null : i2;
7154
+ Tv = i2 == null ? null : i2;
7123
7155
  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");
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;
7156
+ e5.innerHTML = "", x2 && e5.appendChild(x2), Pv.clear(), Uv();
7157
+ let S2 = bv(t2.inner), ee2 = bv(t2.outer), C2 = (l2 = t2.inner_houses) == null ? [] : l2, te2 = (u2 = t2.cross_aspects) == null ? [] : u2;
7158
+ te2.length === 0 && S2.length > 0 && ee2.length > 0 && (te2 = Sv(S2, ee2));
7159
+ let w2 = (d2 = (f2 = (p2 = C2[0]) == null ? void 0 : p2.cusp_lon) == null ? t2.ascendant : f2) == null ? 0 : d2, T2 = dv(), E2 = X("svg");
7160
+ E2.setAttribute("viewBox", "0 0 620 620"), E2.setAttribute("width", "100%"), E2.setAttribute("height", "100%"), E2.style.display = "block", e5.appendChild(E2), Nv = E2;
7129
7161
  let ne2 = X("defs");
7130
7162
  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");
7131
7163
  let re2 = X("g");
@@ -7147,47 +7179,47 @@ function Vv(e5, t2, n2, r2, i2, a2) {
7147
7179
  };
7148
7180
  ue2(ce2, "0.5"), ce2.setAttribute("pointer-events", "none"), re2.appendChild(ce2);
7149
7181
  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);
7182
+ de2.setAttribute("cx", "310"), de2.setAttribute("cy", "310"), de2.setAttribute("r", String(Z_)), de2.setAttribute("fill", "var(--outer-ring, #fdf5e4)"), ue2(de2, "0.8"), de2.setAttribute("pointer-events", "none"), D2.appendChild(de2);
7151
7183
  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);
7184
+ fe2.setAttribute("cx", "310"), fe2.setAttribute("cy", "310"), fe2.setAttribute("r", String(Q_)), fe2.style.fill = "var(--bg, #faf9f5)", ue2(fe2, "0.8"), fe2.setAttribute("pointer-events", "none"), D2.appendChild(fe2);
7185
+ for (let e6 = 0; e6 < 12; e6++) mv(D2, w2, e6, Q_, Z_, cy(l_(e6, T2)), 0.16);
7154
7186
  for (let e6 = 0; e6 < 12; e6++) {
7155
- let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, M_, w2), { x: i3, y: a3 } = Y(t3, j_, w2), o3 = X("line");
7187
+ let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, Q_, w2), { x: i3, y: a3 } = Y(t3, Z_, w2), o3 = X("line");
7156
7188
  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);
7157
7189
  let { x: s3, y: c3 } = Y(t3 + 15, 536 / 2, w2), l3 = X("text");
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);
7190
+ 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", cy(l_(e6, T2))), l3.setAttribute("pointer-events", "none"), l3.style.fontFamily = a_, l3.textContent = nv[e6], D2.appendChild(l3);
7159
7191
  for (let e7 = 1; e7 < 30; e7++) {
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");
7192
+ let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? Z_ - 8 : Z_ - 3.5, { x: a4, y: o4 } = Y(n4, Z_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7161
7193
  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
7194
  let u4 = r4 ? le2.tickMajor : le2.tickMinor;
7163
7195
  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
7196
  }
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);
7197
+ let { x: u3, y: d3 } = Y(t3, Z_, w2), { x: f3, y: p3 } = Y(t3 + 30, Z_, w2), { x: m3, y: h3 } = Y(t3, Q_, w2), { x: g3, y: _3 } = Y(t3 + 30, Q_, w2), x3 = X("path");
7198
+ x3.setAttribute("d", ["M ".concat(u3.toFixed(1), " ").concat(d3.toFixed(1)), "A ".concat(Z_, " ").concat(Z_, " 0 0 0 ").concat(f3.toFixed(1), " ").concat(p3.toFixed(1)), "L ".concat(g3.toFixed(1), " ").concat(_3.toFixed(1)), "A ".concat(Q_, " ").concat(Q_, " 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";
7199
+ let C3 = "".concat(nv[e6], " ").concat(rv[e6]), te3 = "".concat(Z(lv[e6]), " \xB7 ").concat(Z(uv[e6]));
7200
+ ly(x3, "".concat(rv[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", kv), x3.addEventListener("click", (t4) => {
7201
+ kv(), Cv == null || Cv("".concat(C3)), Vv(t4, e6, v2, y2, b2, S2, ee2);
7170
7202
  }), se2.appendChild(x3);
7171
7203
  }
7172
7204
  let pe2 = X("circle");
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);
7205
+ pe2.setAttribute("cx", "310"), pe2.setAttribute("cy", "310"), pe2.setAttribute("r", String(G_)), pe2.setAttribute("fill", "var(--inner-ring, #f2ede6)"), ue2(pe2, "0.6"), pe2.setAttribute("pointer-events", "none"), D2.appendChild(pe2);
7174
7206
  let me2 = X("circle");
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);
7207
+ me2.setAttribute("cx", "310"), me2.setAttribute("cy", "310"), me2.setAttribute("r", String(K_)), me2.style.fill = "var(--bg, #faf9f5)", ue2(me2, "0.6"), me2.setAttribute("pointer-events", "none"), D2.appendChild(me2);
7208
+ for (let e6 = 0; e6 < 12; e6++) mv(D2, w2, e6, K_, G_, l_(e6, T2), c_(T2).zodiacFillOpacity);
7177
7209
  for (let e6 = 0; e6 < 12; e6++) {
7178
- let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, E_, w2), { x: i3, y: a3 } = Y(t3, T_, w2), o3 = X("line");
7210
+ let t3 = e6 * 30, { x: n3, y: r3 } = Y(t3, K_, w2), { x: i3, y: a3 } = Y(t3, G_, w2), o3 = X("line");
7179
7211
  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);
7180
7212
  let { x: s3, y: c3 } = Y(t3 + 15, 444 / 2, w2), l3 = X("text");
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);
7213
+ 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 = nv[e6], D2.appendChild(l3);
7182
7214
  for (let e7 = 1; e7 < 30; e7++) {
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");
7215
+ let n4 = t3 + e7, r4 = e7 % 5 == 0, i4 = r4 ? G_ - 7 : G_ - 3, { x: a4, y: o4 } = Y(n4, G_, w2), { x: s4, y: c4 } = Y(n4, i4, w2), l4 = X("line");
7184
7216
  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
7217
  let u3 = r4 ? le2.tickMajor : le2.tickMinor;
7186
7218
  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
7219
  }
7188
7220
  }
7189
7221
  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_, ")"));
7222
+ he2.setAttribute("pointer-events", "none"), he2.setAttribute("opacity", T2 ? "0.18" : "0.10"), he2.setAttribute("transform", "translate(".concat(U_, ", ").concat(W_, ")"));
7191
7223
  let ge2 = X("circle");
7192
7224
  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
7225
  let _e2 = X("circle");
@@ -7200,52 +7232,52 @@ function Vv(e5, t2, n2, r2, i2, a2) {
7200
7232
  }
7201
7233
  re2.appendChild(he2);
7202
7234
  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);
7235
+ ye2.setAttribute("cx", "310"), ye2.setAttribute("cy", "310"), ye2.setAttribute("r", String(K_)), ye2.style.fill = "var(--surface, #f2f1ea)", ye2.setAttribute("pointer-events", "none"), ie2.appendChild(ye2);
7204
7236
  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++) {
7237
+ if (be2.setAttribute("cx", "310"), be2.setAttribute("cy", "310"), be2.setAttribute("r", String(Y_)), 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
7238
  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");
7239
+ i3.setAttribute("d", pv(t3.cusp_lon, n3.cusp_lon, Y_, K_, 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);
7240
+ let { x: a3, y: o3 } = Y(t3.cusp_lon, Y_, w2), { x: s3, y: c3 } = Y(t3.cusp_lon, K_, w2), l3 = X("line");
7209
7241
  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
7242
  let u3 = r3 ? le2.cuspAngular : le2.cuspIntermediate;
7211
7243
  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");
7244
+ let d3 = (n3.cusp_lon - t3.cusp_lon + 360) % 360, { x: f3, y: p3 } = Y(t3.cusp_lon + d3 / 2, J_, w2), m3 = X("text");
7213
7245
  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
7246
  let h3 = X("circle");
7215
7247
  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);
7248
+ let g3 = "House ".concat(t3.number), _3 = "".concat(Rv[t3.number] ? Rv[t3.number] + " \xB7 " : "").concat(gv(t3.cusp_lon));
7249
+ ly(h3, "".concat(g3, " \u2014 click for interpretation")), h3.addEventListener("mouseenter", (e7) => Ov(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mousemove", (e7) => Ov(e7.clientX, e7.clientY, g3, _3, "Click for interpretation")), h3.addEventListener("mouseleave", kv), h3.addEventListener("click", (e7) => {
7250
+ kv(), Cv == null || Cv("".concat(g3, " \xB7 ").concat(gv(t3.cusp_lon))), Bv(e7, t3, n3, v2, y2, b2, S2, ee2);
7219
7251
  }), se2.appendChild(h3);
7220
7252
  }
7221
7253
  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
7254
  for (let e6 of Ce2) {
7223
7255
  var we2;
7224
- let t3 = gv[e6.label], { x: n3, y: r3 } = Y(e6.lon, j_ - 8, w2), i3 = X("text");
7256
+ let t3 = Iv[e6.label], { x: n3, y: r3 } = Y(e6.lon, Z_ - 8, w2), i3 = X("text");
7225
7257
  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);
7226
7258
  let a3 = X("circle");
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);
7259
+ 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", ly(a3, "".concat((we2 = t3 == null ? void 0 : t3.title) == null ? e6.label : we2, " \u2014 click for interpretation"));
7260
+ let o3 = gv(e6.lon), s3 = "".concat(t3 != null && t3.keyword ? t3.keyword + " \xB7 " : "").concat(o3);
7229
7261
  a3.addEventListener("mouseenter", (n4) => {
7230
7262
  var r4;
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";
7263
+ 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";
7232
7264
  }), a3.addEventListener("mouseleave", () => {
7233
- lv(), i3.style.opacity = "";
7265
+ kv(), i3.style.opacity = "";
7234
7266
  }), a3.addEventListener("click", (n4) => {
7235
7267
  var r4;
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);
7268
+ kv(), Yv(), Cv == null || Cv("".concat(e6.label, " \u2014 ").concat((r4 = t3 == null ? void 0 : t3.title) == null ? "" : r4, " \xB7 ").concat(o3)), Lv(n4, e6.label, e6.lon, v2, y2);
7237
7269
  }), se2.appendChild(a3);
7238
7270
  }
7239
7271
  for (let e6 of te2) {
7240
7272
  var Te2, Ee2, De2, Oe2, ke2, Ae2, je2, Me2, Ne2, Pe2, Fe2, Ie2;
7241
7273
  let t3 = S2.find((t4) => t4.name.toLowerCase() === e6.planet1.toLowerCase()), n3 = ee2.find((t4) => t4.name.toLowerCase() === e6.planet2.toLowerCase());
7242
7274
  if (!t3 || !n3) continue;
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");
7275
+ let i3 = av((Te2 = (Ee2 = e6.type) == null ? void 0 : Ee2.toLowerCase()) == null ? "" : Te2), a3 = ov(e6.orb), { x: o3, y: s3 } = Y(t3.longitude, X_, w2), { x: c3, y: l3 } = Y(n3.longitude, Q_, w2), u3 = X("line");
7244
7276
  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);
7245
7277
  let d3 = o3 + (c3 - o3) * 0.35, f3 = s3 + (l3 - s3) * 0.35, p3 = Math.hypot(c3 - o3, l3 - s3), m3 = [];
7246
7278
  if (p3 > 40) {
7247
7279
  var Le2, A2, Re2;
7248
- let t4 = (Le2 = R_[(A2 = (Re2 = e6.type) == null ? void 0 : Re2.toLowerCase()) == null ? "" : A2]) == null ? "" : Le2;
7280
+ let t4 = (Le2 = iv[(A2 = (Re2 = e6.type) == null ? void 0 : Re2.toLowerCase()) == null ? "" : A2]) == null ? "" : Le2;
7249
7281
  if (t4) {
7250
7282
  let e7 = X("circle");
7251
7283
  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);
@@ -7254,26 +7286,26 @@ function Vv(e5, t2, n2, r2, i2, a2) {
7254
7286
  }
7255
7287
  }
7256
7288
  let h3 = X("line");
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);
7289
+ 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", ly(h3, "Aspect: ".concat(e6.type || "Aspect", " between inner ").concat(e6.planet1, " and outer ").concat(e6.planet2));
7290
+ let g3 = (De2 = tv[t3.name.toLowerCase()]) == null ? t3.name : De2, _3 = (Oe2 = tv[n3.name.toLowerCase()]) == null ? n3.name : Oe2, x3 = (ke2 = (Ae2 = iv[(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 = jv[(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);
7259
7291
  h3.addEventListener("mouseenter", (t4) => {
7260
7292
  var n4;
7261
- return cv(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7293
+ return Ov(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7262
7294
  }), h3.addEventListener("mousemove", (t4) => {
7263
7295
  var n4;
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) => {
7296
+ return Ov(t4.clientX, t4.clientY, Z((n4 = e6.type) == null ? "Cross-Aspect" : n4), T3, "Click for interpretation");
7297
+ }), h3.addEventListener("mouseleave", kv), h3.addEventListener("click", (t4) => {
7266
7298
  var n4, a4, o4, s4, c4, l4;
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);
7299
+ kv(), qv(Fv(e6), i3), Gv(t4, e6, v2, y2, b2);
7300
+ let u4 = (n4 = tv[e6.planet1.toLowerCase()]) == null ? e6.planet1 : n4, d4 = (a4 = tv[e6.planet2.toLowerCase()]) == null ? e6.planet2 : a4, f4 = (o4 = (s4 = iv[(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;
7301
+ Cv == null || Cv("".concat(p4, " ").concat(f4, " ").concat(m4, " \xB7 ").concat(e6.orb.toFixed(1), "\xB0")), r2(e6);
7302
+ }), Pv.set(Fv(e6), { vis: u3, color: i3, aspectType: ((Ie2 = e6.type) == null ? void 0 : Ie2.toLowerCase()) || "unknown", orb: e6.orb, symbolEls: m3 }), se2.appendChild(h3);
7271
7303
  }
7272
7304
  let ze2 = __(ee2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 7), Be2 = X("g");
7273
7305
  Be2.setAttribute("class", "outer-planet-group"), oe2.appendChild(Be2);
7274
7306
  for (let e6 of ee2) {
7275
7307
  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");
7308
+ let t3 = (Ve2 = tv[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, $_, w2), s3 = X("g");
7277
7309
  s3.setAttribute("class", "planet-glyph-group"), s3.dataset.planet = r3, s3.dataset.wheel = "outer", s3.style.transition = "opacity 200ms ease", Be2.appendChild(s3);
7278
7310
  let { x: c3, y: l3 } = Y(e6.longitude, 251, w2), u3 = X("circle");
7279
7311
  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) {
@@ -7282,95 +7314,95 @@ function Vv(e5, t2, n2, r2, i2, a2) {
7282
7314
  }
7283
7315
  let d3 = X("text");
7284
7316
  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);
7285
- let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, N_ - 14, w2), h3 = X("text");
7317
+ let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, $_ - 14, w2), h3 = X("text");
7286
7318
  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) {
7287
7319
  let { x: e7, y: t4 } = Y(i3, 277, w2), n3 = X("text");
7288
7320
  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);
7289
7321
  }
7290
- let g3 = H_(e6.name, e6.longitude);
7322
+ let g3 = cv(e6.name, e6.longitude);
7291
7323
  if (g3) {
7292
7324
  let { x: e7, y: t4 } = Y(i3, 276, w2), n3 = X("circle");
7293
7325
  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);
7294
7326
  }
7295
7327
  let _3 = X("circle");
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) => {
7328
+ _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(ev)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "outer", _3.style.pointerEvents = "all", ly(_3, "Outer Planet: ".concat(e6.name));
7329
+ let x3 = "".concat(v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "").concat(t3, " ").concat(Z(e6.name)), S3 = g3 ? " \xB7 ".concat(g3.label) : "", ee3 = (Ue2 = Av[e6.name.toLowerCase()]) == null ? "" : Ue2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(gv(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7330
+ _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", kv), _3.addEventListener("click", (t4) => {
7299
7331
  var r4, i4;
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);
7332
+ kv(), Kv(e6.name, "outer"), Wv(t4, e6, "outer", te2, v2, y2, b2);
7333
+ let a4 = (r4 = tv[e6.name.toLowerCase()]) == null ? "\u2605" : r4, o4 = Math.floor((e6.longitude % 360 + 360) % 360 / 30), s4 = v2 === "transit" ? "Tr. " : b2 ? "".concat(b2, "'s ") : "";
7334
+ Cv == null || Cv("".concat(s4).concat(a4, " ").concat(Z(e6.name), " \xB7 ").concat((i4 = rv[o4]) == null ? "" : i4)), n2(e6, "outer", te2);
7303
7335
  }), s3.appendChild(_3);
7304
7336
  }
7305
7337
  let We2 = __(S2.map((e6) => ({ name: e6.name.toLowerCase(), longitude: e6.longitude })), 8), Ge2 = X("g");
7306
7338
  Ge2.setAttribute("class", "inner-planet-group"), oe2.appendChild(Ge2);
7307
7339
  for (let e6 of S2) {
7308
7340
  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");
7341
+ let t3 = (Ke2 = tv[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, q_, w2), s3 = X("g");
7310
7342
  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");
7343
+ let { x: c3, y: l3 } = Y(e6.longitude, K_ - 5, w2), u3 = X("circle");
7312
7344
  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) {
7313
7345
  let e7 = X("line");
7314
7346
  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);
7315
7347
  }
7316
7348
  let d3 = X("text");
7317
7349
  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");
7350
+ let f3 = Math.floor((e6.longitude % 360 + 360) % 360 % 30), { x: p3, y: m3 } = Y(i3, q_ - 17, w2), h3 = X("text");
7319
7351
  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) {
7320
7352
  let { x: e7, y: t4 } = Y(i3, 204, w2), n3 = X("text");
7321
7353
  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);
7322
7354
  }
7323
- let g3 = H_(e6.name, e6.longitude);
7355
+ let g3 = cv(e6.name, e6.longitude);
7324
7356
  if (g3) {
7325
7357
  let { x: e7, y: t4 } = Y(i3, 202, w2), n3 = X("circle");
7326
7358
  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);
7327
7359
  }
7328
7360
  let _3 = X("circle");
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) => {
7361
+ _3.setAttribute("cx", a3.toFixed(1)), _3.setAttribute("cy", o3.toFixed(1)), _3.setAttribute("r", String(ev)), _3.setAttribute("fill", "transparent"), _3.setAttribute("class", "hit-region planet-hit"), _3.dataset.planet = r3, _3.dataset.wheel = "inner", _3.style.pointerEvents = "all", ly(_3, "Inner Planet: ".concat(e6.name));
7362
+ 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 = Av[e6.name.toLowerCase()]) == null ? "" : Je2, C3 = "".concat(ee3 ? ee3 + " \xB7 " : "").concat(gv(e6.longitude)).concat(e6.house ? " \xB7 H".concat(e6.house) : "").concat(e6.retrograde ? " \u211E" : "").concat(S3);
7363
+ _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", kv), _3.addEventListener("click", (t4) => {
7332
7364
  var r4, i4, a4;
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);
7365
+ kv(), Kv(e6.name, "inner"), Wv(t4, e6, "inner", te2, v2, y2, b2);
7366
+ let o4 = (r4 = tv[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 = rv[s4]) == null ? "" : i4) : "".concat(o4, " ").concat(Z(e6.name), " \xB7 ").concat((a4 = rv[s4]) == null ? "" : a4, " (natal)");
7367
+ Cv == null || Cv(c4), n2(e6, "inner", te2);
7336
7368
  }), s3.appendChild(_3);
7337
7369
  }
7338
7370
  let Ye2 = "__biWheelClickOutside__", Xe2 = document[Ye2];
7339
7371
  Xe2 && document.removeEventListener("click", Xe2, false);
7340
7372
  let Ze2 = (e6) => {
7341
7373
  let t3 = e6.target;
7342
- !t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Av(), Cv());
7374
+ !t3.closest(".hit-region") && !t3.closest("#bi-info-drawer") && (Xv(), Uv());
7343
7375
  };
7344
7376
  document[Ye2] = Ze2, document.addEventListener("click", Ze2, false);
7345
7377
  let Qe2 = (e6) => {
7346
- e6.key === "Escape" && (Av(), Cv());
7378
+ e6.key === "Escape" && (Xv(), Uv());
7347
7379
  };
7348
7380
  document.removeEventListener("keydown", window.__biWheelEscHandler, false), window.__biWheelEscHandler = Qe2, document.addEventListener("keydown", Qe2, false);
7349
7381
  }
7350
- function Hv(e5) {
7382
+ function cy(e5) {
7351
7383
  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;
7352
7384
  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), ")");
7353
7385
  }
7354
- function Uv(e5, t2) {
7386
+ function ly(e5, t2) {
7355
7387
  e5 && (e5.setAttribute("tabindex", "0"), e5.setAttribute("role", "button"), e5.setAttribute("aria-label", t2), e5.addEventListener("keydown", (t3) => {
7356
7388
  let n2 = t3;
7357
7389
  (n2.key === "Enter" || n2.key === " ") && (n2.preventDefault(), e5.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true })));
7358
7390
  }));
7359
7391
  }
7360
- function Wv(e5) {
7392
+ function uy(e5) {
7361
7393
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7362
7394
  }
7363
- function Gv(e5) {
7395
+ function dy(e5) {
7364
7396
  return e5.replace(/_/g, " ").replace(/\b\w/g, (e6) => e6.toUpperCase());
7365
7397
  }
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("");
7398
+ function fy(e5) {
7399
+ let t2 = e5.filter((e6) => e6.items.length > 0).map((e6) => '<div class="legend-group"><span class="legend-group-title">'.concat(uy(e6.title), "</span>") + e6.items.map((e7) => '<span class="legend-item"><span class="legend-glyph">'.concat(uy(e7.glyph), "</span>").concat(uy(e7.label), "</span>")).join("") + "</div>").join("");
7368
7400
  return t2 ? '<details class="glyph-legend"><summary><span class="legend-spark">\u2726</span> Legend</summary><div class="legend-body">'.concat(t2, "</div></details>") : "";
7369
7401
  }
7370
- var qv = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7371
- function Jv(e5, t2) {
7402
+ var py = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
7403
+ function my(e5, t2) {
7372
7404
  if (!e5) return null;
7373
- let n2 = qv.exec(e5.trim());
7405
+ let n2 = py.exec(e5.trim());
7374
7406
  if (n2) {
7375
7407
  let [, e6, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e6, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
7376
7408
  return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
@@ -7378,17 +7410,17 @@ function Jv(e5, t2) {
7378
7410
  let r2 = new Date(e5);
7379
7411
  return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
7380
7412
  }
7381
- function Yv(e5) {
7413
+ function hy(e5) {
7382
7414
  var t2;
7383
7415
  if (!e5) return "";
7384
7416
  let n2 = [], r2 = (t2 = e5.location) == null ? void 0 : t2.trim();
7385
7417
  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;
7418
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e5.datetime.trim()) ? my(e5.datetime, e5.timezone) : null;
7387
7419
  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
7420
  }
7389
7421
  return n2.join(" \xB7 ");
7390
7422
  }
7391
- var Xv = class e4 {
7423
+ var gy = class e4 {
7392
7424
  constructor(t2) {
7393
7425
  var n2, r2, i2, a2, s2, c2;
7394
7426
  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();
@@ -7568,14 +7600,14 @@ var Xv = class e4 {
7568
7600
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7569
7601
  }
7570
7602
  };
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() {
7603
+ o(gy, "comboSeq", 0);
7604
+ var _y = { "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." } }, vy = '\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';
7605
+ function yy() {
7574
7606
  if (document.getElementById("oe-first-run-styles")) return;
7575
7607
  let e5 = document.createElement("style");
7576
- e5.id = "oe-first-run-styles", e5.textContent = Qv, document.head.appendChild(e5);
7608
+ e5.id = "oe-first-run-styles", e5.textContent = vy, document.head.appendChild(e5);
7577
7609
  }
7578
- function ey(e5) {
7610
+ function by(e5) {
7579
7611
  let t2 = document.activeElement, n2 = document.createElement("div");
7580
7612
  n2.className = "oe-welcome-backdrop";
7581
7613
  let r2 = document.createElement("div");
@@ -7593,34 +7625,34 @@ function ey(e5) {
7593
7625
  e6.key === "Escape" && (e6.preventDefault(), o2()), e6.key === "Tab" && (e6.preventDefault(), a2.focus());
7594
7626
  }), requestAnimationFrame(() => a2.focus()), n2;
7595
7627
  }
7596
- function ty(e5) {
7597
- $v();
7598
- let t2 = ey(Zv[e5]);
7628
+ function xy(e5) {
7629
+ yy();
7630
+ let t2 = by(_y[e5]);
7599
7631
  document.body.appendChild(t2);
7600
7632
  }
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() {
7633
+ var Sy = "\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";
7634
+ function Cy() {
7603
7635
  if (document.getElementById("oe-info-button-styles")) return;
7604
7636
  let e5 = document.createElement("style");
7605
- e5.id = "oe-info-button-styles", e5.textContent = ny, document.head.appendChild(e5);
7637
+ e5.id = "oe-info-button-styles", e5.textContent = Sy, document.head.appendChild(e5);
7606
7638
  }
7607
- function iy(e5) {
7639
+ function wy(e5) {
7608
7640
  if (document.getElementById("oe-info-button")) return;
7609
- ry();
7641
+ Cy();
7610
7642
  let t2 = document.createElement("button");
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);
7643
+ 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", () => xy(e5)), document.body.appendChild(t2);
7612
7644
  }
7613
- function ay(e5) {
7645
+ function Ty(e5) {
7614
7646
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
7615
7647
  }
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) {
7648
+ function Ey(e5) {
7649
+ let { container: t2, message: n2, onRetry: r2, retryLabel: i2 = "\u21BA Try again" } = e5, a2 = r2 ? '<button class="error-retry-btn" type="button">'.concat(Ty(i2), "</button>") : "";
7650
+ if (t2.innerHTML = '<div class="error-state" role="alert"><div class="error-icon" aria-hidden="true">\u26A0\uFE0F</div><p class="error-msg">'.concat(Ty(n2), "</p>") + a2 + "</div>", t2.removeAttribute("hidden"), r2) {
7619
7651
  var o2;
7620
7652
  (o2 = t2.querySelector(".error-retry-btn")) == null || o2.addEventListener("click", r2);
7621
7653
  }
7622
7654
  }
7623
- function sy(e5) {
7655
+ function Dy(e5) {
7624
7656
  var t2;
7625
7657
  if (!e5) return null;
7626
7658
  if (e5.structuredContent != null && typeof e5.structuredContent == "object") return e5.structuredContent;
@@ -7633,7 +7665,7 @@ function sy(e5) {
7633
7665
  }
7634
7666
  return null;
7635
7667
  }
7636
- function cy(e5, t2, n2 = []) {
7668
+ function Oy(e5, t2, n2 = []) {
7637
7669
  var r2, i2;
7638
7670
  if (!t2 || t2.querySelector("#btn-fullscreen")) return;
7639
7671
  let a2 = document.createElement("button");
@@ -7716,14 +7748,14 @@ function cy(e5, t2, n2 = []) {
7716
7748
  }, 4e3);
7717
7749
  }
7718
7750
  }
7719
- function ly(e5, t2) {
7751
+ function ky(e5, t2) {
7720
7752
  e5.ontoolcancelled = (e6) => {
7721
7753
  var n2, r2, i2;
7722
7754
  let a2 = (n2 = e6.reason) == null ? "Tool call was cancelled" : n2;
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);
7755
+ 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);
7724
7756
  };
7725
7757
  }
7726
- function uy(e5) {
7758
+ function Ay(e5) {
7727
7759
  var t2;
7728
7760
  (t2 = document.getElementById("cancel-toast")) == null || t2.remove();
7729
7761
  let n2 = document.createElement("div");
@@ -7731,7 +7763,7 @@ function uy(e5) {
7731
7763
  n2.classList.remove("visible"), setTimeout(() => n2.remove(), 300);
7732
7764
  }, 3e3);
7733
7765
  }
7734
- function dy(e5) {
7766
+ function jy(e5) {
7735
7767
  var t2;
7736
7768
  function n2(e6) {
7737
7769
  if (!e6) return;
@@ -7744,149 +7776,149 @@ function dy(e5) {
7744
7776
  n2(e6);
7745
7777
  });
7746
7778
  }
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";
7779
+ var My = document.getElementById("chart-container"), Ny = document.getElementById("loading-state"), Py = document.getElementById("mode-badge"), Fy = document.getElementById("chart-status"), Iy = document.getElementById("aspect-filter"), Ly = document.getElementById("chart-provenance"), Ry = document.getElementById("bi-patterns-strip"), zy = document.getElementById("param-controls-container"), By = new r_({ name: "Bi-Wheel Chart Explorer", version: "1.0.0" }), $ = null, Vy = null, Hy = false, Uy = false, Wy = "placidus";
7748
7780
  h_(() => {
7749
- $ && $y($);
7781
+ $ && yb($);
7750
7782
  });
7751
- var Ty = "true";
7752
- function Ey(e5) {
7753
- if (hy) {
7783
+ var Gy = "true";
7784
+ function Ky(e5) {
7785
+ if (Fy) {
7754
7786
  if (!e5) {
7755
- hy.classList.remove("visible");
7787
+ Fy.classList.remove("visible");
7756
7788
  return;
7757
7789
  }
7758
- hy.textContent = "\xB7 ".concat(e5), hy.classList.add("visible");
7790
+ Fy.textContent = "\xB7 ".concat(e5), Fy.classList.add("visible");
7759
7791
  }
7760
7792
  }
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 = "");
7793
+ wv(Ky);
7794
+ function qy() {
7795
+ Ny.hidden = false, My.hidden = true, Py.hidden = true, Ly && (Ly.hidden = true), Ry && (Ry.hidden = true, Ry.innerHTML = "");
7764
7796
  }
7765
- function Oy() {
7766
- py.hidden = true, fy.hidden = false, fy.classList.remove("refreshing"), my.hidden = false, _y && (_y.hidden = false);
7797
+ function Jy() {
7798
+ Ny.hidden = true, My.hidden = false, My.classList.remove("refreshing"), Py.hidden = false, Ly && (Ly.hidden = false);
7767
7799
  }
7768
- function ky() {
7769
- if (!$ || fy.hidden) {
7770
- Dy();
7800
+ function Yy() {
7801
+ if (!$ || My.hidden) {
7802
+ qy();
7771
7803
  return;
7772
7804
  }
7773
- fy.classList.add("refreshing");
7805
+ My.classList.add("refreshing");
7774
7806
  }
7775
- function Ay() {
7776
- fy.classList.remove("refreshing"), fy.classList.remove("chart-rendered"), fy.offsetWidth, fy.classList.add("chart-rendered");
7807
+ function Xy() {
7808
+ My.classList.remove("refreshing"), My.classList.remove("chart-rendered"), My.offsetWidth, My.classList.add("chart-rendered");
7777
7809
  }
7778
- function jy(e5, t2) {
7779
- py.hidden = true, _y && (_y.hidden = true), oy({ container: fy, message: e5, onRetry: t2 });
7810
+ function Zy(e5, t2) {
7811
+ Ny.hidden = true, Ly && (Ly.hidden = true), Ey({ container: My, message: e5, onRetry: t2 });
7780
7812
  }
7781
- function My(e5) {
7813
+ function Qy(e5) {
7782
7814
  return e5.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7783
7815
  }
7784
- async function Ny(e5) {
7816
+ async function $y(e5) {
7785
7817
  try {
7786
- (await by.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
7818
+ (await By.sendMessage({ role: "user", content: [{ type: "text", text: e5 }] })).isError && console.error("[BiWheel] Host rejected sendMessage");
7787
7819
  } catch (e6) {
7788
7820
  console.error("[BiWheel] sendMessage failed:", e6);
7789
7821
  }
7790
7822
  }
7791
- function Py(e5) {
7792
- let t2 = sy(e5);
7823
+ function eb(e5) {
7824
+ let t2 = Dy(e5);
7793
7825
  return t2 && "inner" in t2 && "outer" in t2 ? t2 : null;
7794
7826
  }
7795
- var Fy = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], Iy = true, Ly = 1;
7796
- function Ry() {
7827
+ var tb = [{ label: "Tight", mult: 0.55 }, { label: "Standard", mult: 1 }, { label: "Wide", mult: 1.6 }], nb = true, rb = 1;
7828
+ function ib() {
7797
7829
  var e5, t2, n2;
7798
- if (!gy) return;
7830
+ if (!Iy) return;
7799
7831
  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 = (() => {
7800
7832
  var e6, t3;
7801
7833
  let n3 = /* @__PURE__ */ new Set();
7802
7834
  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());
7803
- return n3.has("north_node") && n3.has("true_node");
7835
+ return M_(n3);
7804
7836
  })();
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 = [];
7837
+ vv(Gy);
7838
+ 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(Gy === "mean" ? " active" : "", '" data-node="mean" title="Mean lunar node (averaged orbit)">Mean</button>\n <button class="orb-preset-btn node-btn').concat(Gy === "true" ? " active" : "", '" data-node="true" title="True (osculating) lunar node">True</button>\n </div>') : "";
7839
+ nb = true, Iy.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(tb.map((e6) => '<button class="orb-preset-btn'.concat(e6.mult === rb ? " 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 ");
7840
+ let s2 = [...bv($ == null ? void 0 : $.inner), ...bv($ == null ? void 0 : $.outer)], c2 = /* @__PURE__ */ new Set(), l2 = [];
7809
7841
  for (let e6 of s2) {
7810
7842
  let t3 = e6.name.toLowerCase();
7811
7843
  if (c2.has(t3)) continue;
7812
7844
  c2.add(t3);
7813
- let n3 = F_[t3];
7814
- n3 && l2.push({ glyph: n3, label: Gv(e6.name) });
7845
+ let n3 = tv[t3];
7846
+ n3 && l2.push({ glyph: n3, label: dy(e6.name) });
7815
7847
  }
7816
7848
  let u2 = [...new Set(((n2 = $ == null ? void 0 : $.cross_aspects) == null ? [] : n2).map((e6) => {
7817
7849
  var t3;
7818
7850
  return ((t3 = e6.type) == null ? "" : t3).toLowerCase();
7819
7851
  }).filter(Boolean))].map((e6) => {
7820
7852
  var t3;
7821
- return { glyph: (t3 = R_[e6]) == null ? "" : t3, label: Gv(e6) };
7853
+ return { glyph: (t3 = iv[e6]) == null ? "" : t3, label: dy(e6) };
7822
7854
  }).filter((e6) => e6.glyph);
7823
- gy.insertAdjacentHTML("beforeend", Kv([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), gy.removeAttribute("hidden");
7855
+ Iy.insertAdjacentHTML("beforeend", fy([{ title: "Bodies", items: l2 }, { title: "Aspects", items: u2 }])), Iy.removeAttribute("hidden");
7824
7856
  let d2 = document.getElementById("aspect-vis-toggle");
7825
7857
  d2 == null || d2.addEventListener("click", () => {
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) => {
7858
+ nb = !nb, Zv(nb), d2.classList.toggle("active", nb), d2.querySelector(".toggle-icon").textContent = nb ? "\u2295" : "\u2296";
7859
+ }), Iy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e6) => {
7828
7860
  e6.addEventListener("click", () => {
7829
7861
  var t3;
7830
7862
  let n3 = parseFloat((t3 = e6.dataset.mult) == null ? "1" : t3);
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));
7863
+ n3 !== rb && (rb = n3, Iy.querySelectorAll(".orb-preset-btn[data-mult]").forEach((e7) => e7.classList.toggle("active", e7.dataset.mult === String(n3))), $ && ab($, n3));
7832
7864
  });
7833
- }), gy.querySelectorAll(".house-btn").forEach((e6) => {
7865
+ }), Iy.querySelectorAll(".house-btn").forEach((e6) => {
7834
7866
  e6.addEventListener("click", () => {
7835
7867
  var t3;
7836
7868
  let n3 = (t3 = e6.dataset.hs) == null ? "placidus" : t3;
7837
- n3 === wy || !$ || (wy = n3, gy.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), rb(n3));
7869
+ n3 === Wy || !$ || (Wy = n3, Iy.querySelectorAll(".house-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.hs === n3)), Cb(n3));
7838
7870
  });
7839
- }), gy.querySelectorAll(".node-btn").forEach((e6) => {
7871
+ }), Iy.querySelectorAll(".node-btn").forEach((e6) => {
7840
7872
  e6.addEventListener("click", () => {
7841
7873
  let t3 = e6.dataset.node === "mean" ? "mean" : "true";
7842
- t3 === Ty || !$ || (Ty = t3, Q_(t3), gy.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), zy($, Ly));
7874
+ t3 === Gy || !$ || (Gy = t3, vv(t3), Iy.querySelectorAll(".node-btn").forEach((e7) => e7.classList.toggle("active", e7.dataset.node === t3)), ab($, rb));
7843
7875
  });
7844
7876
  });
7845
7877
  }
7846
- function zy(e5, t2) {
7878
+ function ab(e5, t2) {
7847
7879
  var n2, r2, i2, a2;
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);
7880
+ let o2 = bv(e5.inner), s2 = bv(e5.outer), c2 = Sv(o2, s2, t2), l2 = { ...e5, cross_aspects: c2 };
7881
+ sy(My, l2, wb, Tb, mb, vb()), nb || Zv(false);
7850
7882
  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;
7851
- nb(Fv(c2), o2, s2, u2);
7883
+ Sb(ty(c2), o2, s2, u2);
7852
7884
  }
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) => {
7885
+ var ob = null;
7886
+ function sb(e5) {
7887
+ ob = e5, e5 ? My.setAttribute("data-focus", e5) : My.removeAttribute("data-focus"), Py.querySelectorAll(".mode-badge-name").forEach((t2) => {
7856
7888
  let n2 = t2.dataset.focus;
7857
7889
  t2.classList.toggle("focused", n2 === e5);
7858
- }), $ && qy($, e5);
7890
+ }), $ && pb($, e5);
7859
7891
  }
7860
- function Hy(e5) {
7892
+ function cb(e5) {
7861
7893
  var t2, n2, r2, i2, a2, o2, s2;
7862
7894
  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;
7863
- By = null, fy.removeAttribute("data-focus");
7895
+ ob = null, My.removeAttribute("data-focus");
7864
7896
  let d2 = "";
7865
7897
  if (c2 === "transit" && (o2 = e5._birth_params_outer) != null && o2.datetime) try {
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>"));
7898
+ let t3 = my(e5._birth_params_outer.datetime, e5._birth_params_outer.timezone);
7899
+ t3 && (d2 = '<span class="mode-badge-date">'.concat(Qy(t3.date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: t3.timeZone })), "</span>"));
7868
7900
  } catch (e6) {
7869
7901
  }
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) => {
7902
+ Py.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(Qy(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(Qy(u2), "\n </button>\n ").concat(d2), Py.querySelectorAll(".mode-badge-name").forEach((e6) => {
7871
7903
  e6.addEventListener("click", () => {
7872
7904
  let t3 = e6.dataset.focus;
7873
- Vy(By === t3 ? null : t3);
7905
+ sb(ob === t3 ? null : t3);
7874
7906
  });
7875
- }), (s2 = my.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
7876
- Vy(By === "inner" ? "outer" : "inner");
7907
+ }), (s2 = Py.querySelector(".mode-badge-swap")) == null || s2.addEventListener("click", () => {
7908
+ sb(ob === "inner" ? "outer" : "inner");
7877
7909
  });
7878
7910
  }
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) {
7911
+ var lb = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"], ub = { sun: "\u2609", moon: "\u263D", mercury: "\u263F", venus: "\u2640", mars: "\u2642", jupiter: "\u2643", saturn: "\u2644", uranus: "\u2645", neptune: "\u2646", pluto: "\u2647", asc: "AC", mc: "MC" };
7912
+ function db(e5, t2) {
7881
7913
  var n2, r2;
7882
7914
  let i2 = e5.find((e6) => e6.name.toLowerCase() === t2);
7883
7915
  if (!i2) return "\u2014";
7884
7916
  let a2 = Math.floor((i2.longitude % 360 + 360) % 360 / 30), o2 = Math.floor(i2.longitude % 30);
7885
- return "".concat((n2 = Wy[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = Uy[a2]) == null ? "" : r2);
7917
+ return "".concat((n2 = ub[t2]) == null ? t2 : n2, " ").concat(o2, "\xB0 ").concat((r2 = lb[a2]) == null ? "" : r2);
7886
7918
  }
7887
- function Ky(e5, t2) {
7919
+ function fb(e5, t2) {
7888
7920
  try {
7889
- let n2 = Jv(e5, t2);
7921
+ let n2 = my(e5, t2);
7890
7922
  if (!n2) return e5;
7891
7923
  let { date: r2, timeZone: i2 } = n2;
7892
7924
  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 });
@@ -7894,22 +7926,22 @@ function Ky(e5, t2) {
7894
7926
  return e5;
7895
7927
  }
7896
7928
  }
7897
- function qy(e5, t2) {
7929
+ function pb(e5, t2) {
7898
7930
  var n2, r2, i2, a2, o2;
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");
7931
+ if (!Ly) return;
7932
+ 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 ? fb(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 = db(c2, "sun"), _2 = db(c2, "moon"), v2 = db(c2, "asc");
7901
7933
  if (v2 === "AC \u2014" && m2.length > 0) {
7902
7934
  let e6 = m2.find((e7) => e7.number === 1);
7903
7935
  if (e6) {
7904
7936
  var y2;
7905
7937
  let t3 = Math.floor((e6.cusp_lon % 360 + 360) % 360 / 30);
7906
- v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = Uy[t3]) == null ? "" : y2);
7938
+ v2 = "AC ".concat(Math.floor(e6.cusp_lon % 30), "\xB0 ").concat((y2 = lb[t3]) == null ? "" : y2);
7907
7939
  }
7908
7940
  }
7909
7941
  let b2 = s2 === "outer" && u2 === "transit" ? "Transit" : s2 === "outer" ? "Synastry" : "Natal";
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;
7942
+ Ly.innerHTML = '\n <div class="prov-name">'.concat(Qy(d2), '\n <span class="prov-mode-tag">').concat(Qy(b2), '</span>\n </div>\n <div class="prov-trio">\n <span class="prov-planet">').concat(Qy(g2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Qy(_2), '</span>\n <span class="prov-sep">\xB7</span>\n <span class="prov-planet">').concat(Qy(v2), "</span>\n </div>\n ").concat(p2 ? '<div class="prov-meta">'.concat(Qy(p2)).concat(f2 ? ' <span class="prov-tz">'.concat(Qy(f2), "</span>") : "", "</div>") : "", "\n ").concat(h2 ? '<div class="prov-meta">'.concat(Qy(h2), " houses</div>") : "", "\n "), Ly.hidden = false;
7911
7943
  }
7912
- async function Jy(e5) {
7944
+ async function mb(e5) {
7913
7945
  var t2;
7914
7946
  let n2 = (t2 = $ == null ? void 0 : $.mode) == null ? "synastry" : t2, r2 = "";
7915
7947
  if (e5.type === "planet") {
@@ -7936,36 +7968,36 @@ async function Jy(e5) {
7936
7968
  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" : "", ".");
7937
7969
  }
7938
7970
  if (!r2) return;
7939
- let h2 = Yv($ == null ? void 0 : $._birth_params_inner), g2 = Yv($ == null ? void 0 : $._birth_params_outer);
7971
+ let h2 = hy($ == null ? void 0 : $._birth_params_inner), g2 = hy($ == null ? void 0 : $._birth_params_outer);
7940
7972
  if (h2 || g2) {
7941
7973
  let e6 = n2 === "transit" ? "Natal" : "Inner wheel", t3 = n2 === "transit" ? "Transits" : "Outer wheel";
7942
7974
  r2 = "".concat([h2 ? "".concat(e6, ": ").concat(h2) : "", g2 ? "".concat(t3, ": ").concat(g2) : ""].filter(Boolean).join("\n"), "\n\n").concat(r2);
7943
7975
  }
7944
- await Ny(r2);
7976
+ await $y(r2);
7945
7977
  }
7946
- async function Yy() {
7978
+ async function hb() {
7947
7979
  var e5, t2, n2, r2, i2, a2, o2, s2;
7948
7980
  if (!$) return;
7949
7981
  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";
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."));
7982
+ await $y(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."));
7951
7983
  }
7952
- async function Xy() {
7984
+ async function gb() {
7953
7985
  var e5, t2, n2, r2, i2, a2;
7954
7986
  if (!$) return;
7955
7987
  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";
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."));
7988
+ await $y(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."));
7957
7989
  }
7958
- async function Zy(e5) {
7959
- if (Sy) try {
7990
+ async function _b(e5) {
7991
+ if (Hy) try {
7960
7992
  var 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) }] });
7993
+ 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) }] });
7962
7994
  } catch (e6) {
7963
7995
  }
7964
7996
  }
7965
- function Qy() {
7966
- if (Cy) return async (e5) => {
7997
+ function vb() {
7998
+ if (Uy) return async (e5) => {
7967
7999
  var t2;
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 } }] });
8000
+ 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 } }] });
7969
8001
  if (n2.isError) {
7970
8002
  var r2, i2;
7971
8003
  throw Error((r2 = (i2 = n2.error) == null ? void 0 : i2.message) == null ? "Sampling failed" : r2);
@@ -7975,133 +8007,133 @@ function Qy() {
7975
8007
  throw Error("Unexpected sampling response format");
7976
8008
  };
7977
8009
  }
7978
- function $y(e5) {
8010
+ function yb(e5) {
7979
8011
  var t2, n2, r2, i2, a2, o2, s2;
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);
8012
+ $ = e5, clearTimeout(Db), cb(e5), sy(My, e5, wb, Tb, mb, vb()), ib(), pb(e5, ob);
8013
+ let c2 = bv(e5.inner), l2 = bv(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;
8014
+ Sb(ty((a2 = e5.cross_aspects) == null ? [] : a2), c2, l2, u2), e5.house_system && (Wy = e5.house_system);
7983
8015
  let d2 = document.getElementById("bi-action-bar");
7984
8016
  if (!d2) {
7985
8017
  d2 = document.createElement("div"), d2.id = "bi-action-bar", d2.className = "hd-action-bar";
7986
8018
  let e6 = document.querySelector("#fs-bottom-bar [data-column='right']");
7987
8019
  if (e6) e6.appendChild(d2);
7988
8020
  else {
7989
- let e7 = document.getElementById("app"), t3 = my.parentElement === e7 ? my : null;
8021
+ let e7 = document.getElementById("app"), t3 = Py.parentElement === e7 ? Py : null;
7990
8022
  e7 == null || e7.insertBefore(d2, t3);
7991
8023
  }
7992
8024
  }
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");
8025
+ 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 hb()), (s2 = d2.querySelector("#bi-questions-btn")) == null || s2.addEventListener("click", () => void gb()), Jy(), Xy(), wy("bi-wheel");
7994
8026
  }
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;
8027
+ var bb = null, xb = { "Cross Trine": "#52a8e0", "Cross T-Square": "#e08a52", "Cross Stellium": "#9a7fd4" };
8028
+ function Sb(e5, t2, n2, r2) {
8029
+ if (!Ry) return;
7998
8030
  if (e5.length === 0) {
7999
- vy.hidden = true, vy.innerHTML = "";
8031
+ Ry.hidden = true, Ry.innerHTML = "";
8000
8032
  return;
8001
8033
  }
8002
- eb = null, vy.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
8034
+ bb = null, Ry.innerHTML = '\n <span class="patterns-label">Cross-Patterns:</span>\n '.concat(e5.map((e6, t3) => {
8003
8035
  var n3;
8004
- let r3 = (n3 = tb[e6.name]) == null ? "#888" : n3;
8036
+ let r3 = (n3 = xb[e6.name]) == null ? "#888" : n3;
8005
8037
  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>");
8006
- }).join(""), "\n "), vy.removeAttribute("hidden");
8038
+ }).join(""), "\n "), Ry.removeAttribute("hidden");
8007
8039
  let i2 = document.createElement("button");
8008
- i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none", vy.appendChild(i2), i2.addEventListener("click", () => {
8040
+ i2.className = "pattern-ask-claude-btn", i2.textContent = "\u2728 Interpret", i2.style.display = "none", Ry.appendChild(i2), i2.addEventListener("click", () => {
8009
8041
  var t3;
8010
- let n3 = eb;
8042
+ let n3 = bb;
8011
8043
  if (n3 === null) return;
8012
8044
  let r3 = e5[n3];
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(() => {
8045
+ r3 && (i2.disabled = true, i2.textContent = "\u23F3 Sending\u2026", mb({ type: "pattern", data: { name: r3.name, planets: r3.planets, description: (t3 = r3.description) == null ? "" : t3 } }).then(() => {
8014
8046
  i2.textContent = "\u2713 Sent", setTimeout(() => {
8015
8047
  i2.textContent = "\u2728 Interpret", i2.disabled = false;
8016
8048
  }, 2500);
8017
8049
  }).catch(() => {
8018
8050
  i2.textContent = "\u26A0 Failed", i2.disabled = false;
8019
8051
  }));
8020
- }), vy.querySelectorAll(".pattern-pill").forEach((a2) => {
8052
+ }), Ry.querySelectorAll(".pattern-pill").forEach((a2) => {
8021
8053
  a2.addEventListener("click", () => {
8022
8054
  var o2, s2;
8023
8055
  let c2 = parseInt((o2 = a2.dataset.idx) == null ? "-1" : o2, 10), l2 = e5[c2];
8024
8056
  if (!l2) return;
8025
8057
  let u2 = (s2 = a2.dataset.color) == null ? "#888" : s2;
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";
8058
+ if (bb === c2) {
8059
+ bb = null, a2.classList.remove("active"), a2.style.background = "transparent", a2.style.color = u2, a2.style.borderColor = u2, Xv(), ay(), i2.style.display = "none";
8028
8060
  return;
8029
8061
  }
8030
- eb = c2, vy.querySelectorAll(".pattern-pill").forEach((e6) => {
8062
+ bb = c2, Ry.querySelectorAll(".pattern-pill").forEach((e6) => {
8031
8063
  var t3;
8032
8064
  e6.classList.remove("active");
8033
8065
  let n3 = (t3 = e6.dataset.color) == null ? "#888" : t3;
8034
8066
  e6.style.color = n3, e6.style.borderColor = n3, e6.style.background = "transparent";
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;
8067
+ }), a2.classList.add("active"), a2.style.background = u2, a2.style.color = "#fff", a2.style.borderColor = u2, oy(l2), ay(), iy(l2, t2, n2, r2), i2.style.display = "", i2.textContent = "\u2728 Interpret", i2.disabled = false;
8036
8068
  });
8037
8069
  });
8038
8070
  }
8039
- async function rb(e5) {
8071
+ async function Cb(e5) {
8040
8072
  if (!$) return;
8041
8073
  let t2 = $;
8042
- ky();
8074
+ Yy();
8043
8075
  try {
8044
8076
  var n2, r2, i2, a2, o2, s2, c2, l2, u2, d2;
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();
8077
+ let f2 = new Promise((e6, t3) => setTimeout(() => t3(Error("House system recalculate timed out")), 3e4)), p2 = eb(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]));
8078
+ p2 ? yb(p2) : $ && Jy();
8047
8079
  } catch (e6) {
8048
- console.error("[BiWheel] House system recalculate failed:", e6), $ && Oy();
8080
+ console.error("[BiWheel] House system recalculate failed:", e6), $ && Jy();
8049
8081
  }
8050
8082
  }
8051
- function ib(e5, t2, n2) {
8083
+ function wb(e5, t2, n2) {
8052
8084
  var r2, i2, a2, o2, s2;
8053
8085
  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;
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" })) } });
8086
+ _b({ 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" })) } });
8055
8087
  }
8056
- function ab(e5) {
8088
+ function Tb(e5) {
8057
8089
  var t2;
8058
8090
  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"];
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 } });
8091
+ _b({ 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 } });
8060
8092
  }
8061
- by.ontoolresult = (e5) => {
8062
- clearTimeout(sb);
8063
- let t2 = Py(e5);
8093
+ By.ontoolresult = (e5) => {
8094
+ clearTimeout(Db);
8095
+ let t2 = eb(e5);
8064
8096
  if (!t2) {
8065
- jy("The chart didn't load. Tap to try again.", ob);
8097
+ Zy("The chart didn't load. Tap to try again.", Eb);
8066
8098
  return;
8067
8099
  }
8068
- if (!xy) {
8100
+ if (!Vy) {
8069
8101
  var n2, r2, i2, a2;
8070
8102
  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";
8071
8103
  if (o2 && o2.includes("T")) {
8072
8104
  let e7 = o2.split("T");
8073
8105
  d2 = e7[0], f2 = e7[1].substring(0, 5);
8074
8106
  }
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", "");
8107
+ Vy = new gy({ app: By, container: zy, 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) => {
8108
+ Vy == null || Vy.setBusy(true), Yy(), zy.setAttribute("hidden", "");
8077
8109
  try {
8078
8110
  var n3, r3, i3, a3, o3;
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();
8111
+ 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 = eb(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]));
8112
+ l3 ? yb(l3) : $ && Jy();
8081
8113
  } catch (e8) {
8082
- console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && Oy();
8114
+ console.error("[BiWheel] Recalculate failed or timed out:", e8), $ && Jy();
8083
8115
  } finally {
8084
- xy == null || xy.setBusy(false), yy.removeAttribute("hidden");
8116
+ Vy == null || Vy.setBusy(false), zy.removeAttribute("hidden");
8085
8117
  }
8086
8118
  } });
8087
8119
  }
8088
- $y(t2), yy.removeAttribute("hidden");
8120
+ yb(t2), zy.removeAttribute("hidden");
8089
8121
  };
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(() => {
8122
+ function Eb() {
8123
+ clearTimeout(Db), qy(), Db = setTimeout(() => {
8124
+ My.hidden && Zy("The chart didn't load. Tap to try again.", Eb);
8125
+ }, 3e4), By.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the bi-wheel chart." }] }).catch(() => {
8094
8126
  });
8095
8127
  }
8096
- var sb = setTimeout(() => {
8097
- fy.hidden && jy("Chart data is taking longer than expected.", ob);
8128
+ var Db = setTimeout(() => {
8129
+ My.hidden && Zy("Chart data is taking longer than expected.", Eb);
8098
8130
  }, 3e4);
8099
- Dy(), ly(by, { loadingEl: py, contentEl: fy, statusFn: Ey, paramControls: () => xy }), (async () => {
8131
+ qy(), ky(By, { loadingEl: Ny, contentEl: My, statusFn: Ky, paramControls: () => Vy }), (async () => {
8100
8132
  try {
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($);
8133
+ await By.connect();
8134
+ let e5 = By.getHostCapabilities();
8135
+ Hy = !!(e5 != null && e5.modelContext), Uy = !!(e5 != null && e5.sampling), Oy(By, document.getElementById("pan-zoom-controls"), ["mode-badge", "aspect-filter", "param-controls-container", "chart-provenance", "bi-patterns-strip", "bi-action-bar"]), jy(By), g_(By, () => {
8136
+ $ && yb($);
8105
8137
  });
8106
8138
  } catch (e5) {
8107
8139
  console.error("[BiWheel] connect() failed:", e5);